grok-1.20110708.1/0000775000076400007640000000000011605651463011401 5ustar jlsjlsgrok-1.20110708.1/stringhelper.c0000664000076400007640000002111411603476305014250 0ustar jlsjls#include #include #include #include #include "stringhelper.h" void string_escape_like_c(char c, char *replstr, int *replstr_len, int *op); void string_escape_hex(char c, char *replstr, int *replstr_len, int *op); void string_escape_unicode(char c, char *replstr, int *replstr_len, int *op); static char all_chars[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 }; /* replace a string range with another string. * * if replace_len < 0, it is calculated from 'replace' * if strp_len < 0, it is calculated from *strp * if end < 0, it is set to start */ void substr_replace(char **strp, int *strp_len, int *strp_alloc_size, int start, int end, const char *replace, int replace_len) { int total_len = 0; if (replace_len < 0) replace_len = strlen(replace); if (*strp_len < 0) *strp_len = strlen(*strp); if (start < 0) /* allow negative offset from end of string */ start = *strp_len + start; if (end == 0) /* end of 0 means you want to copy the start value */ end = start; else if (end < 0) /* negative values are offsets from end of string */ end = *strp_len + end; total_len = *strp_len + replace_len - (end - start); if (total_len >= *strp_alloc_size) { *strp_alloc_size = total_len + 4096; /* grow by 4K + len */ *strp = realloc(*strp, *strp_alloc_size); } memmove(*strp + start + replace_len, *strp + end, *strp_len - end); memcpy(*strp + start, replace, replace_len); *strp_len = start + (*strp_len - end)+ replace_len; (*strp)[*strp_len] = '\0'; } #define ESCAPE_INSERT 1 #define ESCAPE_REPLACE 2 /* Escape a set of characters in a string */ void string_escape(char **strp, int *strp_len, int *strp_alloc_size, const char *chars, int chars_len, int options) { int i = 0, j = 0, op = 0, replstr_len = 0; char replstr[8]; /* 7 should be enough (covers \uXXXX + null) */ unsigned char c; //int hits_total = 0; unsigned char hits[256]; /* track chars found in the string */ memset(hits, 0, 256); //printf("string_escape(\"%.*s\", %d, %d, \"%.*s\", %d, %d)\n", //*strp_len, *strp, *strp_len, *strp_alloc_size, chars_len, chars, //chars_len, options); if (chars_len < 0) { chars_len = strlen(chars); } if (chars_len == 0) { chars_len = 256; chars = all_chars; } /* Make a map of characters found in the string */ for (i = 0; i < *strp_len; i++) { c = (*strp)[i]; hits[c] = 1; } for (i = 0; i < chars_len; i++) { c = chars[i]; if (hits[c] == 0) { /* If this char is not in the string, skip it */ continue; } if (options & ESCAPE_NONPRINTABLE && isprint(c)) { continue; } for (j = 0; j < *strp_len; j++) { //printf("%d / %c: %d\n", c, c, hits[(unsigned char)c]); /* chars are signed, so > 127 == -128 and such, which is an * invalid array offset in this case; cast to unsigned. */ if ((*strp)[j] != c) { continue; } //printf("Str: %.*s\n", strp_len, *strp); //printf(" %*s^\n", j, ""); replstr_len = 0; op = ESCAPE_REPLACE; /* default operation */ if (replstr_len == 0 && options & ESCAPE_LIKE_C) { string_escape_like_c(c, replstr, &replstr_len, &op); } if (replstr_len == 0 && options & ESCAPE_UNICODE) { string_escape_unicode(c, replstr, &replstr_len, &op); } if (replstr_len == 0 && options & ESCAPE_HEX) { string_escape_hex(c, replstr, &replstr_len, &op); } if (replstr_len > 0) { switch (op) { case ESCAPE_INSERT: substr_replace(strp, strp_len, strp_alloc_size, j, j, replstr, replstr_len); break; case ESCAPE_REPLACE: substr_replace(strp, strp_len, strp_alloc_size, j, j + replstr_len - 1, replstr, replstr_len); break; } } j += replstr_len; } } } /* void string_escape */ void string_escape_like_c(char c, char *replstr, int *replstr_len, int *op) { char *r = NULL; /* XXX: This should check iscntrl, instead, probably... */ if (isprint(c)) { *op = ESCAPE_INSERT; r = "\\"; *replstr_len = 1; } else { *op = ESCAPE_REPLACE; switch (c) { case '\n': r = "\\n"; break; case '\r': r = "\\r"; break; case '\b': r = "\\b"; break; case '\f': r = "\\f"; break; case '\t': r = "\\t"; break; case '\a': r = "\\a"; break; } if (r) { *replstr_len = 2; } else { *replstr_len = 0; } } memcpy(replstr, r, *replstr_len); } /* void string_escape_like_c */ void string_escape_hex(char c, char *replstr, int *replstr_len, int *op) { *op = ESCAPE_REPLACE; *replstr_len = sprintf(replstr, "\\x%x", (unsigned char) c); //printf("Unicode: %.*s\n", *replstr_len, replstr); } /* void string_escape_hex */ void string_escape_unicode(char c, char *replstr, int *replstr_len, int *op) { /* XXX: We should check the options to see if we should only convert * nonprintables */ if (!isprint(c)) { *op = ESCAPE_REPLACE; *replstr_len = sprintf(replstr, "\\u00%02x",(unsigned char) c); //printf("Unicode: %.*s\n", *replstr_len, replstr); } } /* string_escape_unicode */ void string_unescape(char **strp, int *strp_len, int *strp_size) { int i; char *repl; int repl_len; int orig_len; for (i = 0; i < *strp_len; i++) { repl_len = 0; orig_len = 0; if ((*strp)[i] == '\\') { switch ((*strp)[i + 1]) { case 't': repl = "\t"; repl_len = 1; orig_len = 2; break; case 'n': repl = "\n"; repl_len = 1; orig_len = 2; break; case 'b': repl = "\b"; repl_len = 1; orig_len = 2; break; case 'r': repl = "\r"; repl_len = 1; orig_len = 2; break; case 'a': repl = "\a"; repl_len = 1; orig_len = 2; break; case 'f': repl = "\f"; repl_len = 1; orig_len = 2; break; case 'v': repl = "\v"; repl_len = 1; orig_len = 2; break; case '"': repl = "\""; repl_len = 1; orig_len = 2; break; /* XXX: Handle octal? \0888 */ /* XXX: Handle hex? \xFFFF */ /* XXX: Handle unicode? \uFFFF */ } if (repl_len > 0) { substr_replace(strp, strp_len, strp_size, i, i + orig_len, repl, repl_len); } } } } /* void string_unescape */ /* Some platforms don't have strndup, so let's provide our own */ char *string_ndup(const char *src, size_t size) { size_t len = 0; char *dup; while (src[len] != '\0' && len < size) len++; dup = malloc(len + 1); if (dup) { /* XXX: Should we use strncpy here, instead of memcpy? */ memcpy(dup, src, len); dup[len] = '\0'; } return dup; } /* char *string_ndup */ int string_count(const char *src, const char *charlist) { return (string_ncount(src, strlen(src), charlist, strlen(charlist))); } /* int string_count */ int string_ncount(const char *src, size_t srclen, const char *charlist, size_t listlen) { int i = 0, j = 0; int count = 0; for (i = 0; i < srclen; i++) { for (j = 0; j < listlen; j++) { if (src[i] == charlist[j]) { count++; break; /* no point in trying to match more of charlist this round */ } } } return count; } /* int string_ncount */ grok-1.20110708.1/genfiles.sh0000775000076400007640000000020111576274273013534 0ustar jlsjls#!/bin/sh # generate the FILES list we give to rsync for making our release package svn ls -R | sed -e 's/^/+ /' | sort > FILES grok-1.20110708.1/INSTALL0000664000076400007640000000230211576274273012436 0ustar jlsjlsDependencies: The following are the dependency versions known to work: Developer dependencies: bison >= 2.3 gnu flex >= 2.5.35 * gnu flex and bison are only needed for developers, as the main source code comes with bison/flex code generation already run) Build dependencies: gperf >= 3.0 GNU make >= 3.81 Run dependencies: libevent >= 1.3 (older versions may work) libpcre >= 7.6 Tokyo Cabinet >= 1.4.9 Test suite dependencies: CUnit >= 2.1 Ubuntu dependency list (for ease): apt-get install bison ctags flex gperf libevent-dev libpcre3-dev libtokyocabinet-dev Building: make grok (or 'gmake grok' if your make is not gnu make) Installing: make install Platforms: This has been tested on Linux and FreeBSD. All tests pass in both Linux and FreeBSD. It should work elsewhere. FreeBSD Notes: You can install this from ports in sysutils/grok CentOS Notes: CentOS 5.3 has an old version of pcre available, too old, in fact. Building a new rpm from a more recent Fedora pcre SRPM has worked well for me. Getting help: The mailing list is grok-users@googlegroups.com grok-1.20110708.1/discover_main.c0000664000076400007640000000347511576274273014407 0ustar jlsjls#define _GNU_SOURCE #include "grok.h" #include "grok_program.h" #include "grok_config.h" #include "conf.tab.h" #include #include extern char *optarg; /* from unistd.h, getopt */ extern FILE *yyin; /* from conf.lex (flex provides this) */ static char *g_prog; void usage() { printf("Usage: %s [--verbose] [--patterns PATTERNSFILE]\n", g_prog); printf(" --verbose\n"); printf(" --patterns PATTERNSFILE\n"); } int main(int argc, char **argv) { int opt = 0; g_prog = argv[0]; struct option options[] = { { "patterns", required_argument, NULL, 'p' }, { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { 0, 0, 0, 0 } }; const char *prog = argv[0]; grok_t grok; grok_init(&grok); int pattern_count = 0; while ((opt = getopt_long_only(argc, argv, "hp:v", options, &optind)) != -1) { switch (opt) { case 'h': usage(); return 0; case 'p': pattern_count++; grok_patterns_import_from_file(&grok, optarg); break; case 'v': grok.logmask =~ 0; break; default: usage(); return 1; } } if (pattern_count == 0) { fprintf(stderr, "%s: No patterns loaded.\n", prog); fprintf(stderr, "You want to specify at least one patterns file to load\n"); return 1; } argc -= optind; argv += optind; int i; FILE *fp = stdin; if (argc > 0 && strcmp(argv[0], "-")) { fp = fopen(argv[0], "r"); } char buf[4096]; grok_discover_t *gdt; gdt = grok_discover_new(&grok); char *discovery; int unused_length; while (fgets(buf, 4096, fp) != NULL) { strrchr(buf, '\n')[0] = '\0'; grok_discover(gdt, buf, &discovery, &unused_length); printf("%s\n", discovery); free(discovery); } grok_discover_free(gdt); return 0; } grok-1.20110708.1/conf.tab.c0000664000076400007640000015202711603237365013245 0ustar jlsjls/* A Bison parser, made by GNU Bison 2.4.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.4.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 1 /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ #line 1 "conf.y" #include #include #include "conf.tab.h" #include "grok_config.h" #include "grok_input.h" #include "grok_matchconf.h" int yylineno; void yyerror (YYLTYPE *loc, struct config *conf, char const *s) { fprintf (stderr, "Syntax error: %s\n", s); } #define DEBUGMASK(val) ((val > 0) ? ~0 : 0) /* Line 189 of yacc.c */ #line 90 "conf.tab.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { QUOTEDSTRING = 258, INTEGER = 259, CONF_DEBUG = 260, PROGRAM = 261, PROG_FILE = 262, PROG_EXEC = 263, PROG_MATCH = 264, PROG_NOMATCH = 265, PROG_LOADPATTERNS = 266, FILE_FOLLOW = 267, EXEC_RESTARTONEXIT = 268, EXEC_MINRESTARTDELAY = 269, EXEC_RUNINTERVAL = 270, EXEC_READSTDERR = 271, MATCH_PATTERN = 272, MATCH_REACTION = 273, MATCH_SHELL = 274, MATCH_FLUSH = 275, MATCH_BREAK_IF_MATCH = 276, SHELL_STDOUT = 277, LITERAL_NONE = 278 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 214 of yacc.c */ #line 18 "conf.y" char *str; int num; /* Line 214 of yacc.c */ #line 156 "conf.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ #line 181 "conf.tab.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 103 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 29 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 24 /* YYNRULES -- Number of rules. */ #define YYNRULES 53 /* YYNRULES -- Number of states. */ #define YYNSTATES 99 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 278 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 28, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 27, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 24, 2, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 6, 8, 10, 12, 16, 17, 23, 26, 28, 30, 32, 34, 36, 38, 42, 46, 47, 52, 53, 57, 58, 63, 64, 68, 69, 75, 76, 82, 85, 87, 88, 92, 96, 99, 101, 102, 106, 110, 114, 118, 122, 125, 127, 128, 132, 136, 140, 144, 148, 152, 156 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 30, 0, -1, 30, 31, -1, 31, -1, 1, -1, 32, -1, 5, 27, 4, -1, -1, 6, 24, 33, 34, 25, -1, 34, 35, -1, 35, -1, 37, -1, 40, -1, 43, -1, 45, -1, 36, -1, 5, 27, 4, -1, 11, 27, 3, -1, -1, 7, 3, 38, 39, -1, -1, 24, 47, 25, -1, -1, 8, 3, 41, 42, -1, -1, 24, 49, 25, -1, -1, 9, 24, 44, 51, 25, -1, -1, 10, 24, 46, 51, 25, -1, 47, 48, -1, 48, -1, -1, 12, 27, 4, -1, 5, 27, 4, -1, 49, 50, -1, 50, -1, -1, 13, 27, 4, -1, 14, 27, 4, -1, 15, 27, 4, -1, 16, 27, 4, -1, 5, 27, 4, -1, 51, 52, -1, 52, -1, -1, 17, 27, 3, -1, 18, 27, 3, -1, 18, 27, 23, -1, 19, 27, 3, -1, 19, 27, 22, -1, 20, 27, 4, -1, 21, 27, 4, -1, 5, 27, 4, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 61, 61, 62, 63, 68, 69, 71, 71, 75, 76, 78, 79, 80, 81, 82, 83, 85, 88, 88, 91, 91, 93, 93, 96, 96, 98, 98, 103, 102, 107, 108, 109, 110, 111, 113, 114, 116, 117, 119, 121, 123, 125, 127, 128, 130, 131, 132, 133, 134, 135, 136, 137, 138 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "QUOTEDSTRING", "INTEGER", "\"debug\"", "\"program\"", "\"file\"", "\"exec\"", "\"match\"", "\"no-match\"", "\"load-patterns\"", "\"follow\"", "\"restart-on-exit\"", "\"minimum-restart-delay\"", "\"run-interval\"", "\"read-stderr\"", "\"pattern\"", "\"reaction\"", "\"shell\"", "\"flush\"", "\"break-if-match\"", "\"stdout\"", "\"none\"", "'{'", "'}'", "';'", "':'", "'\\n'", "$accept", "config", "root", "root_program", "$@1", "program_block", "program_block_statement", "program_load_patterns", "program_file", "$@2", "program_file_optional_block", "program_exec", "$@3", "program_exec_optional_block", "program_match", "$@4", "program_nomatch", "$@5", "file_block", "file_block_statement", "exec_block", "exec_block_statement", "match_block", "match_block_statement", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 123, 125, 59, 58, 10 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 29, 30, 30, 30, 31, 31, 33, 32, 34, 34, 35, 35, 35, 35, 35, 35, 36, 38, 37, 39, 39, 41, 40, 42, 42, 44, 43, 46, 45, 47, 47, 48, 48, 48, 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 1, 1, 1, 3, 0, 5, 2, 1, 1, 1, 1, 1, 1, 3, 3, 0, 4, 0, 3, 0, 4, 0, 3, 0, 5, 0, 5, 2, 1, 0, 3, 3, 2, 1, 0, 3, 3, 3, 3, 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 4, 0, 0, 0, 3, 5, 0, 7, 1, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 11, 12, 13, 14, 0, 18, 22, 26, 28, 0, 8, 9, 16, 20, 24, 45, 45, 17, 32, 19, 37, 23, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 27, 43, 29, 0, 0, 21, 30, 0, 0, 0, 0, 0, 25, 35, 53, 46, 47, 48, 49, 50, 51, 52, 34, 33, 42, 38, 39, 40, 41 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 4, 5, 6, 12, 19, 20, 21, 22, 35, 41, 23, 36, 43, 24, 37, 25, 38, 55, 56, 62, 63, 50, 51 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -44 static const yytype_int8 yypact[] = { 66, -44, -19, 10, 64, -44, -44, 15, -44, -44, -44, -44, 52, 24, 30, 46, 28, 41, 31, -5, -44, -44, -44, -44, -44, -44, 62, -44, -44, -44, -44, 47, -44, -44, -44, 44, 49, 23, 23, -44, 34, -44, 40, -44, 48, 50, 51, 53, 54, 55, -4, -44, 5, 56, 57, 6, -44, 58, 59, 60, 61, 63, 22, -44, 70, 73, 9, 26, 75, 85, -44, -44, -44, 87, 88, -44, -44, 89, 90, 91, 92, 93, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -44, -44, 94, -44, -44, -44, 80, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 45, -44, 39, 65, -43 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 13, 44, 14, 15, 16, 17, 18, 71, 7, 71, 44, 53, 86, 45, 46, 47, 48, 49, 54, 11, 32, 70, 45, 46, 47, 48, 49, 57, 44, 88, 72, 75, 87, 27, 8, 58, 59, 60, 61, 53, 45, 46, 47, 48, 49, 57, 54, 82, 89, 28, 39, 26, 29, 58, 59, 60, 61, 13, 31, 14, 15, 16, 17, 18, 9, 30, 34, 1, 40, 2, 3, 2, 3, 42, 84, 64, 85, 65, 66, 90, 67, 68, 69, 73, 74, 77, 78, 79, 80, 91, 81, 92, 93, 94, 95, 96, 97, 98, 10, 33, 76, 83, 0, 52 }; static const yytype_int8 yycheck[] = { 5, 5, 7, 8, 9, 10, 11, 50, 27, 52, 5, 5, 3, 17, 18, 19, 20, 21, 12, 4, 25, 25, 17, 18, 19, 20, 21, 5, 5, 3, 25, 25, 23, 3, 24, 13, 14, 15, 16, 5, 17, 18, 19, 20, 21, 5, 12, 25, 22, 3, 3, 27, 24, 13, 14, 15, 16, 5, 27, 7, 8, 9, 10, 11, 0, 24, 4, 1, 24, 5, 6, 5, 6, 24, 4, 27, 3, 27, 27, 4, 27, 27, 27, 27, 27, 27, 27, 27, 27, 4, 27, 4, 4, 4, 4, 4, 4, 4, 4, 19, 55, 62, -1, 38 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 1, 5, 6, 30, 31, 32, 27, 24, 0, 31, 4, 33, 5, 7, 8, 9, 10, 11, 34, 35, 36, 37, 40, 43, 45, 27, 3, 3, 24, 24, 27, 25, 35, 4, 38, 41, 44, 46, 3, 24, 39, 24, 42, 5, 17, 18, 19, 20, 21, 51, 52, 51, 5, 12, 47, 48, 5, 13, 14, 15, 16, 49, 50, 27, 27, 27, 27, 27, 27, 25, 52, 25, 27, 27, 25, 48, 27, 27, 27, 27, 27, 25, 50, 4, 3, 3, 23, 3, 22, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto yyerrlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (&yylloc, conf, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, &yylloc) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, Location, conf); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct config *conf) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, conf) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; YYLTYPE const * const yylocationp; struct config *conf; #endif { if (!yyvaluep) return; YYUSE (yylocationp); YYUSE (conf); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct config *conf) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, conf) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; YYLTYPE const * const yylocationp; struct config *conf; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); YY_LOCATION_PRINT (yyoutput, *yylocationp); YYFPRINTF (yyoutput, ": "); yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, conf); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct config *conf) #else static void yy_reduce_print (yyvsp, yylsp, yyrule, conf) YYSTYPE *yyvsp; YYLTYPE *yylsp; int yyrule; struct config *conf; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) , conf); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, yylsp, Rule, conf); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct config *conf) #else static void yydestruct (yymsg, yytype, yyvaluep, yylocationp, conf) const char *yymsg; int yytype; YYSTYPE *yyvaluep; YYLTYPE *yylocationp; struct config *conf; #endif { YYUSE (yyvaluep); YYUSE (yylocationp); YYUSE (conf); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (struct config *conf); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*-------------------------. | yyparse or yypush_parse. | `-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (struct config *conf) #else int yyparse (conf) struct config *conf; #endif #endif { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Location data for the lookahead symbol. */ YYLTYPE yylloc; /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yyls = yylsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; yylsp = yyls; #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; yylloc.first_column = yylloc.last_column = 1; #endif goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); yyls = yyls1; yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); YY_REDUCE_PRINT (yyn); switch (yyn) { case 4: /* Line 1464 of yacc.c */ #line 63 "conf.y" { /* Errors are unrecoverable, so let's return nonzero from the parser */ return 1; ;} break; case 6: /* Line 1464 of yacc.c */ #line 69 "conf.y" { conf->logmask = DEBUGMASK((yyvsp[(3) - (3)].num)); ;} break; case 7: /* Line 1464 of yacc.c */ #line 71 "conf.y" { conf_new_program(conf); ;} break; case 16: /* Line 1464 of yacc.c */ #line 83 "conf.y" { CURPROGRAM.logmask = DEBUGMASK((yyvsp[(3) - (3)].num)); ;} break; case 17: /* Line 1464 of yacc.c */ #line 86 "conf.y" { conf_new_patternfile(conf); CURPATTERNFILE = (yyvsp[(3) - (3)].str); ;} break; case 18: /* Line 1464 of yacc.c */ #line 88 "conf.y" { conf_new_input_file(conf, (yyvsp[(2) - (2)].str)); ;} break; case 22: /* Line 1464 of yacc.c */ #line 93 "conf.y" { conf_new_input_process(conf, (yyvsp[(2) - (2)].str)); ;} break; case 26: /* Line 1464 of yacc.c */ #line 98 "conf.y" { conf_new_matchconf(conf); ;} break; case 28: /* Line 1464 of yacc.c */ #line 103 "conf.y" { conf_new_matchconf(conf); CURMATCH.is_nomatch = 1; ;} break; case 33: /* Line 1464 of yacc.c */ #line 110 "conf.y" { CURINPUT.source.file.follow = (yyvsp[(3) - (3)].num); ;} break; case 34: /* Line 1464 of yacc.c */ #line 111 "conf.y" { CURINPUT.logmask = DEBUGMASK((yyvsp[(3) - (3)].num)); ;} break; case 38: /* Line 1464 of yacc.c */ #line 118 "conf.y" { CURINPUT.source.process.restart_on_death = (yyvsp[(3) - (3)].num); ;} break; case 39: /* Line 1464 of yacc.c */ #line 120 "conf.y" { CURINPUT.source.process.min_restart_delay = (yyvsp[(3) - (3)].num); ;} break; case 40: /* Line 1464 of yacc.c */ #line 122 "conf.y" { CURINPUT.source.process.run_interval = (yyvsp[(3) - (3)].num); ;} break; case 41: /* Line 1464 of yacc.c */ #line 124 "conf.y" { CURINPUT.source.process.read_stderr = (yyvsp[(3) - (3)].num); ;} break; case 42: /* Line 1464 of yacc.c */ #line 125 "conf.y" { CURINPUT.logmask = DEBUGMASK((yyvsp[(3) - (3)].num)); ;} break; case 46: /* Line 1464 of yacc.c */ #line 131 "conf.y" { conf_new_match_pattern(conf, (yyvsp[(3) - (3)].str)) ;} break; case 47: /* Line 1464 of yacc.c */ #line 132 "conf.y" { CURMATCH.reaction = (yyvsp[(3) - (3)].str); ;} break; case 48: /* Line 1464 of yacc.c */ #line 133 "conf.y" { CURMATCH.no_reaction = 1; ;} break; case 49: /* Line 1464 of yacc.c */ #line 134 "conf.y" { CURMATCH.shell = (yyvsp[(3) - (3)].str); ;} break; case 50: /* Line 1464 of yacc.c */ #line 135 "conf.y" { CURMATCH.shell = "stdout"; ;} break; case 51: /* Line 1464 of yacc.c */ #line 136 "conf.y" { CURMATCH.flush = (yyvsp[(3) - (3)].num); ;} break; case 52: /* Line 1464 of yacc.c */ #line 137 "conf.y" { CURMATCH.break_if_match = (yyvsp[(3) - (3)].num); ;} break; case 53: /* Line 1464 of yacc.c */ #line 138 "conf.y" { conf_match_set_debug(conf, DEBUGMASK((yyvsp[(3) - (3)].num))); ;} break; /* Line 1464 of yacc.c */ #line 1681 "conf.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (&yylloc, conf, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (&yylloc, conf, yymsg); } else { yyerror (&yylloc, conf, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, &yylloc, conf); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; yyerror_range[1] = yylsp[1-yylen]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[1] = *yylsp; yydestruct ("Error: popping", yystos[yystate], yyvsp, yylsp, conf); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, yyerror_range, 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (&yylloc, conf, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, conf); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp, conf); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } grok-1.20110708.1/grok_program.h0000664000076400007640000000231511576274273014253 0ustar jlsjls#ifndef _GROK_PROGRAM_H_ #define _GROK_PROGRAM_H_ #include #include #include //include "grok_input.h" //include "grok_matchconf.h" typedef struct grok_program grok_program_t; typedef struct grok_collection grok_collection_t; struct grok_input; struct grok_matchconfig; struct grok_program { char *name; /* optional program name */ struct grok_input *inputs; int ninputs; int input_size; struct grok_matchconf *matchconfigs; int nmatchconfigs; int matchconfig_size; char **patternfiles; int npatternfiles; int patternfile_size; int logmask; int logdepth; grok_collection_t *gcol; /* if we are using this program in a collection */ int reactions; }; struct grok_collection { grok_program_t **programs; /* array of pointers to grok_program_t */ int nprograms; int program_size; struct event_base *ebase; struct event *ev_sigchld; int logmask; int logdepth; int exit_code; }; grok_collection_t *grok_collection_init(); void grok_collection_add(grok_collection_t *gcol, grok_program_t *gprog); void grok_collection_loop(grok_collection_t *gcol); void grok_collection_check_end_state(grok_collection_t *gcol); #endif /* _GROK_PROGRAM_H_ */ grok-1.20110708.1/CHANGELIST0000664000076400007640000001110211605651454012740 0ustar jlsjls1.20110708.* - Patch from wxs to clean up some compiler warnings/issues and also to have the Makefile obey CC 1.20110630.* - Allow patterns to be defined in-line. Synopsis: %{NAME=pattern} Example: %{NUMBER:foo=\d+} This is most useful for defining named-captures in-line for one-offs. It was designed for use in logstash, but is certainly appropriate elsewhere. 1.20110429.* - fix debian packaging problems 1.20110308.* - Multiple OSX fixes regarding the different shared library suffix (.dylib) - Tests pass: ruby 1.8.7, 1.9.2, jruby 1.5.6, jruby 1.6.0.RC2 on OS X - Tests pass: ruby 1.8.7, 1.9.2, jruby 1.5.6 on Ubuntu 10.04 - Remove Ruby stuff from the rpm grok.spec; if you want ruby grok, you will need to install 'jls-grok' from rubygems (and also ffi) 1.20110223.* - Allow ':' and '_' in pattern subnames, like: %{FOO:bar:baz} - Pete Fritchman rewrite the ruby bindings in FFI instad of C. 1.20101117.* - Packaging fixes 1.20101030.* - Add 'make package-debian' to produce a .deb build of grok. 1.20101018.* - API docs via doxygen - rdoc for the Ruby module - Add Grok::Pile to Ruby 1.20100419.* - Fix tests - Add a ruby example for pattern discovery - Add grok-web example (runs grok in ruby via sinatra to show pattern discovery) - Add more time formats (US, EU, ISO8601) - Fix bug that prevented multiple patterns with the same complexity from being used in discovery. 1.20100416.* - Add pattern discovery through grok_discover (C) and Grok#discover (Ruby) Idea for this feature documented here: http://www.semicomplete.com/blog/geekery/grok-pattern-autodiscovery.html - The ruby gem is now called 'jls-grok' since someone already had the 'grok' gem name on gemcutter. - Fix some pattern errors found in the test suite. - New version numbering to match my other tools. 20091227.01 - Add function to get the list of loaded patterns. - Ruby: new method Grok#patterns returns a Hash of known patterns. - Added flags to grok: -d and --daemon to daemonize on startup (after config parsing). Also added '-f configfile' for specifying the config file. - Added manpage (grok.1, generated from grok.pod) 20091110 - match {} blocks can now have multiple 'pattern:' instances - Include samples/ directory of grok configs in release package. 20091103 - New: ruby bindings are now really supported. - Change 'WORD' pattern to be word bounded (\b) - Move grok-patterns to patterns/base - update rpm spec to install patterns/base in /usr/share/grok 20091102 - Add a bunch of tests, mostly in ruby, to exercise grok. This uncovered a few bugs which are fixed. All tests currently pass (both CUnit and Ruby Test::Unit) on: * FreeBSD 7.1. tokyocabinet 1.4.30, pcre 8.00, libevent 1.4.12 * Ubuntu 9.04. tokyocabinet 1.4.35, pcre 7.8-2, libevent 1.3e-3 * CentOS 5.3. tokyocabinet 1.4.9-1, pcre 7.8-2, libevent 1.1a-3.2.1 - When making strings in ruby, we now make them tainted per ruby C docs. - "Too many replacements" error will now occur if you have cyclic patterns, such as defining 'FOO' to be '%{FOO}'. Max replacements is 500. 20091030 - Make 'grok' main take a config for an argument. - Add grok rpm spec. - Updated Makefile to work on Linux and FreeBSD without modification. - Fixed bug introduced in 20091022 where capture_by_(name,subname) didn't work properly. - Add default values for match {} grok.conf blocks: shell: stdout reaction: "%{@LINE}" - Have grok exit nonzero if there were no reactions executed, akin to grep(1) not matching anything. 'reactions' are important here; matches with no reaction will not count as a reaction. 20091023 - Fix libgrok accidentally sharing it's parser/lexer functions. Turns out, libgrok doesn't actually need to parse the grok.conf, so we don't build against it anymore for the library. 20091022: - Convert to using tokyocabinet instead of berkeley db. * Berkeley DB isn't easy to target across platforms (4.x versions vary wildly in bugs) * tokyo cabinet should be faster * tokyo cabinet is less code to write, and slightly more readable in the author's opinion. * we don't have to serialize with xdr anymore 20091019: - include pregenerated bison/flex output since gnu flex varies much from non-gnu flex, and many important platforms don't have gnu flex available easily from packages (freebsd, centos, etc) but come with the other flex. No functional changes. 20090928: - perl grok is dead. Long live new grok. - This code should be considered usable, but beta quality. grok-1.20110708.1/grok.pod0000664000076400007640000001467311576274273013071 0ustar jlsjls=pod =head1 NAME grok - parse logs, handle events, and make your unstructured text structured. =head1 SYNOPSIS B [B<-d>] B<-f configfile> =head1 DESCRIPTION Grok is software that allows you to easily parse logs and other files. With grok, you can turn unstructured log and event data into structured data. The grok program is a great tool for parsing log data and program output. You can match any number of complex patterns on any number of inputs (processes and files) and have custom reactions. =head1 OPTIONS =over =item B<-d> or B<--daemon> Daemonize after parsing the config file. Implemented with daemon(3). The default is to stay in foreground. =item B<-f configfile> Specify a grok config file to use. =back =head1 CONFIGURATION You can call the config file anything you want. A full example config follows below, with documentation on options and defaults. # --- Begin sample grok config # This is a comment. :) # # enable or disable debugging. Debug is set false by default. # the 'debug' setting is valid at every level. # debug values are copied down-scope unless overridden. debug: true # you can define multiple program blocks in a config file. # a program is just a collection of inputs (files, execs) and # matches (patterns and reactions), program { debug: false # file with no block. settings block is optional file "/var/log/messages" # file with a block file "/var/log/secure" { # follow means to follow a file like 'tail -F' but starts # reading at the beginning of the file. A file is followed # through truncation, log rotation, and append. follow: true } # execute a command, settings block is optional exec "netstat -rn" # exec with a block exec "ping -c 1 www.google.com" { # automatically rerun the exec if it exits, as soon as it exits. # default is false restart-on-exit: false # minimum amount of time from one start to the next start, if we # are restarting. Default is no minimum minimum-restart-interval: 5 # run every N seconds, but only if the process has exited. # default is not to rerun at all. run-interval: 60 # default is to read process output only from stdout. # set this to true to also read from stderr. read-stderr: false } # You can have multiple match {} blocks in your config. # They are applied, in order, against every line of input that # comes from your exec and file instances in this program block. match { # match a pattern. This can be any regexp and can include %{foo} # grok patterns pattern: "some pattern to match" # You can have multiple patterns here, any are valid for matching. pattern: "another pattern to match" # the default reaction is "%{@LINE}" which is the full line # matched. the reaction can be a special value of 'none' which # means no reaction occurs, or it can be any string. The # reaction is emitted to the shell if it is not none. reaction: "%{@LINE}" # the default shell is 'stdout' which means reactions are # printed directly to standard output. Setting the shell to a # command string will run that command and pipe reaction data to # it. #shell: stdout shell: "/bin/sh" # flush after every write to the shell. # The default is not to flush. flush: true # break-if-match means do not attempt any further matches on # this line. the default is false. break-if-match: true } } # -- End config =head1 PATTERN FILES Pattern files contain lists of names and patterns for loading into grok. Patterns are newline-delimited and have this syntax: I I Any whitespace between the patternname and expression are ignored. =over =item patternname This is the name of your pattern which, when loaded, can be referenced in patterns as %{patternname} =item expression The expression here is, verbatim, available as a regular expression. You do not need to worry about how to escape things. =back =head2 PATTERN EXAMPLES DIGITS \d+ HELLOWORLD \bhello world\b =head1 REGULAR EXPRESSIONS The expression engine underneath grok is PCRE. Any syntax in PCRE is valid in grok. =head1 REACTIONS Reactions can reference named patterns from the match. You can also access a few other special values, including: =over =item %{@LINE} The line matched. =item %{@MATCH} The substring matched =item %{@START} The starting position of the match from the beginning of the string. =item %{@END} The ending position of the match. =item %{@LENGTH} The length of the match =item %{@JSON} The full set of patterns captured, encoded as a json dictionary as a structure of { pattern: [ array of captures ] }. We use an array becuase you can use the same named pattern multiple times in a match. =item %{@JSON_COMPLEX} Similar to the above, but includes start and end position for every named pattern. That structure is: { "grok": [ { "@LINE": { "start": ..., "end": ..., "value": ... } }, { "@MATCH": { "start": ..., "end": ..., "value": ... } }, { "patternname": { "start": startpos, "end": endpos, "value": "string" } }, { "patternname2": { "start": startpos, "end": endpos, "value": "string" } }, ... ] } =back =head2 REACTION FILTERS Reaction filters allow you to mutate the captured data. The following filters are available: An example of using a filter in a reaction is like this: reaction: "echo Matched: %{@MATCH|shellescape}" =over =item shellescape Escapes all characters necessary to make the string safe in non-quoted a shell argument =item shelldqescape Escapes characters necessary to be safe within doublequotes in a shell. =item jsonencode Makes the string safe to represent in a json string (escapes according to json.org recommendations) =back =head1 SEE ALSO L, L, Sample grok configs are available in in the grok samples/ directory. Project site: L Google Code: L Issue/Bug Tracker: L =head1 CONTACT Please send questions to grok-users@googlegroups.com. File bugs and feature requests at the following URL: Issue/Bug Tracker: L =head1 HISTORY grok was originally in perl, then rewritten in C++ and Xpressive (regex), then rewritten in C and PCRE. =head1 AUTHOR grok was written by Jordan Sissel. =cut grok-1.20110708.1/FILES0000664000076400007640000000336511576274273012204 0ustar jlsjls+ CHANGELIST + FILES + INSTALL + LICENSE + Makefile + VERSION + version.sh + platform.sh + conf.lex + conf.tab.c + conf.tab.h + conf.y + conf.yy.c + filters.gperf + filters.h + genfiles.sh + grok.1 + grok.c + grok.h + grok.pod + grok.spec + grok_capture.c + grok_capture.h + grok_capture.x + grok_config.c + grok_config.h + grok_discover.c + grok_discover.h + grok_input.c + grok_input.h + grok_logging.c + grok_logging.h + grok_match.c + grok_match.h + grok_matchconf.c + grok_matchconf.h + grok_matchconf_macro.gperf + grok_matchconf_macro.h + grok_pattern.c + grok_pattern.h + grok_program.c + grok_program.h + grokre.c + grokre.h + libc_helper.c + libc_helper.h + main.c + package.sh + patterns/ + patterns/base + predicates.c + predicates.h + ruby/ + ruby/INSTALL + ruby/extconf.rb + ruby/rgrok.h + ruby/ruby_grok.c + ruby/ruby_grokmatch.c + ruby/ruby_grokmatch.h + ruby/sample.rb + ruby/test/ + ruby/test/Makefile + ruby/test/alltests.rb + ruby/test/general/ + ruby/test/general/basic_test.rb + ruby/test/general/captures_test.rb + ruby/test/patterns/ + ruby/test/patterns/ip.input + ruby/test/patterns/ip.rb + ruby/test/patterns/month.rb + ruby/test/patterns/number.rb + ruby/test/patterns/path.rb + ruby/test/patterns/quotedstring.rb + ruby/test/patterns/uri.rb + samples/ + samples/errorlogcheck.grok + samples/filter-example.grok + samples/ifconfig.grok + samples/ip-predicate.grok + samples/number-predicate2.grok + samples/numberpredicate.grok + samples/strpredicate.grok + samples/test.grok + stringhelper.c + stringhelper.h + test/ + test/Makefile + test/gentest.sh + test/grok_capture.test.c + test/grok_manymanymany.test.c + test/grok_pattern.test.c + test/grok_simple.test.c + test/predicates.test.c + test/runtest.sh + test/stringhelper.test.c + test/test.h - .* grok-1.20110708.1/grok_matchconf.c0000664000076400007640000004141611603476305014535 0ustar jlsjls #define _GNU_SOURCE /* for asprintf */ #include #include #include #include #include "grok.h" #include "grok_matchconf.h" #include "grok_matchconf_macro.h" #include "grok_logging.h" #include "libc_helper.h" #include "filters.h" #include "stringhelper.h" char *grok_match_reaction_apply_filter(grok_match_t *gm, char **value, int *value_len, const char *filter, int filter_len); static int mcgrok_init = 0; static grok_t global_matchconfig_grok; void grok_matchconfig_init(grok_program_t *gprog, grok_matchconf_t *gmc) { gmc->grok_list = tclistnew(); gmc->shell = NULL; gmc->reaction = NULL; gmc->shellinput = NULL; gmc->matches = 0; if (mcgrok_init == 0) { grok_init(&global_matchconfig_grok); global_matchconfig_grok.logmask = gprog->logmask; global_matchconfig_grok.logdepth = gprog->logdepth; grok_patterns_import_from_string(&global_matchconfig_grok, "PATTERN \\%\\{%{NAME}(?:%{FILTER})?}"); grok_patterns_import_from_string(&global_matchconfig_grok, "NAME @?\\w+(?::\\w+)?(?:|\\w+)*"); grok_patterns_import_from_string(&global_matchconfig_grok, "FILTER (?:\\|\\w+)+"); grok_compile(&global_matchconfig_grok, "%{PATTERN}"); mcgrok_init = 1; } } void grok_matchconfig_global_cleanup(void) { if (mcgrok_init) { grok_free(&global_matchconfig_grok); } } void grok_matchconfig_close(grok_program_t *gprog, grok_matchconf_t *gmc) { int ret = 0; if (gmc->shellinput != NULL) { /* Don't close stdout */ if (gmc->shellinput != stdout) { ret = fclose(gmc->shellinput); grok_log(gprog, LOG_PROGRAM, "Closing matchconf shell. fclose() = %d", ret); } gmc->shellinput = NULL; } int i = 0; for (i = 0; i < tclistnum(gmc->grok_list); i++) { int len; grok_t *grok = (grok_t *) tclistval(gmc->grok_list, i, &len); grok_free(grok); } tclistdel(gmc->grok_list); } void grok_matchconfig_exec(grok_program_t *gprog, grok_input_t *ginput, const char *text) { grok_match_t gm; grok_matchconf_t *gmc; int i = 0; int want_break = 0; for (i = 0; i < gprog->nmatchconfigs; i++) { int ret; gmc = &gprog->matchconfigs[i]; int num_groks = tclistnum(gmc->grok_list); int i = 0; if (gmc->is_nomatch) { continue; } for (i = 0; i < num_groks; i++) { grok_t *grok; int unused_len; grok = (grok_t *)tclistval(gmc->grok_list, i, &unused_len); grok_log(gprog, LOG_PROGRAM, "Trying match against pattern %d: %.*s", i, grok->pattern_len, grok->pattern); ret = grok_exec(grok, text, &gm); if (ret == GROK_OK) { grok_matchconfig_react(gprog, ginput, gmc, &gm); if (!gmc->no_reaction) { gprog->reactions += 1; } if (gmc->break_if_match) { want_break = 1; break; } } } if (want_break) { break; } } } void grok_matchconfig_react(grok_program_t *gprog, grok_input_t *ginput, grok_matchconf_t *gmc, grok_match_t *gm) { char *reaction; ginput->instance_match_count++; if (gmc->no_reaction) { grok_log(gprog, LOG_REACTION, "Reaction set to none, skipping reaction."); return; } reaction = grok_matchconfig_filter_reaction(gmc->reaction, gm); if (reaction == NULL) { reaction = gmc->reaction; } if (gmc->shellinput == NULL) { grok_matchconfig_start_shell(gprog, gmc); } grok_log(gprog, LOG_REACTION, "Sending '%s' to subshell", reaction); fprintf(gmc->shellinput, "%s\n", reaction); if (gmc->flush) { grok_log(gprog, LOG_REACTION, "flush enabled, calling fflush"); fflush(gmc->shellinput); } /* This clause will occur if grok_matchconfig_filter_reaction had to do * any meaningful work replacing %{FOO} and such */ if (reaction != gmc->reaction) { free(reaction); } } void grok_matchconfig_exec_nomatch(grok_program_t *gprog, grok_input_t *ginput) { int i = 0; for (i = 0; i < gprog->nmatchconfigs; i++) { grok_matchconf_t *gmc = &gprog->matchconfigs[i]; if (gmc->is_nomatch) { grok_log(gprog, LOG_PROGRAM, "Executing reaction for nomatch: %s", gmc->reaction); grok_matchconfig_react(gprog, ginput, gmc, NULL); } } } char *grok_matchconfig_filter_reaction(const char *str, grok_match_t *gm) { char *output; int len; int size; grok_match_t tmp_gm; int offset = 0; if (gm == NULL) { return NULL; } len = strlen(str); size = len + 1; output = malloc(size); memcpy(output, str, size); grok_log(gm->grok, LOG_REACTION, "Checking '%.*s'", len - offset, output + offset); global_matchconfig_grok.logmask = gm->grok->logmask; global_matchconfig_grok.logdepth = gm->grok->logdepth + 1; while (grok_execn(&global_matchconfig_grok, output + offset, len - offset, &tmp_gm) == GROK_OK) { grok_log(gm->grok, LOG_REACTION, "Checking '%.*s'", len - offset, output + offset); const char *name = NULL; const char *filter = NULL; char *value = NULL; char *name_copy; int name_len, value_len, filter_len; int ret = -1; int free_value = 0; const struct strmacro *patmacro; grok_match_get_named_substring(&tmp_gm, "NAME", &name, &name_len); grok_match_get_named_substring(&tmp_gm, "FILTER", &filter, &filter_len); grok_log(gm->grok, LOG_REACTION, "Matched something: %.*s", name_len, name); /* XXX: We should really make a dispatch table out of this... */ /* _macro_dispatch_func(char **value, int *value_len) ... */ /* Let gperf do the hard work for us. */ patmacro = patname2macro(name, name_len); grok_log(gm->grok, LOG_REACTION, "Checking lookup table for '%.*s': %x", name_len, name, patmacro); if (patmacro != NULL) { free_value = 1; /* We malloc stuff to 'value' here */ switch (patmacro->code) { case VALUE_LINE: value = strdup(gm->subject); value_len = strlen(value); ret = 0; break; case VALUE_START: value_len = asprintf(&value, "%d", gm->start); ret = 0; break; case VALUE_END: value_len = asprintf(&value, "%d", gm->end); ret = 0; break; case VALUE_LENGTH: value_len = asprintf(&value, "%d", gm->end - gm->start); ret = 0; break; case VALUE_MATCH: value_len = gm->end - gm->start; value = string_ndup(gm->subject + gm->start, value_len); ret = 0; break; case VALUE_JSON_SIMPLE: case VALUE_JSON_COMPLEX: { int value_offset = 0; int value_size = 0; char *pname; const char *pdata; int pname_len, pdata_len; char *entry = NULL, *tmp = NULL; int entry_len = 0, tmp_len = 0, tmp_size = 0; value = NULL; value_len = 0; /* TODO(sissel): use a json generator library? */ /* Push @FOO values first */ substr_replace(&tmp, &tmp_len, &tmp_size, 0, 0, gm->subject, strlen(gm->subject)); filter_jsonencode(gm, &tmp, &tmp_len, &tmp_size); if (patmacro->code == VALUE_JSON_SIMPLE) { entry_len = asprintf(&entry, "\"@LINE\": \"%.*s\", ", tmp_len, tmp); } else { /* VALUE_JSON_COMPLEX */ entry_len = asprintf(&entry, "{ \"@LINE\": { " "\"start\": 0, " "\"end\": %d, " "\"value\": \"%.*s\" } }, ", tmp_len, tmp_len, tmp); } substr_replace(&value, &value_len, &value_size, value_len, value_len, entry, entry_len); free(entry); substr_replace(&tmp, &tmp_len, &tmp_size, 0, tmp_len, gm->subject + gm->start, gm->end - gm->start); filter_jsonencode(gm, &tmp, &tmp_len, &tmp_size); if (patmacro->code == VALUE_JSON_SIMPLE) { entry_len = asprintf(&entry, "\"@MATCH\": \"%.*s\", ", tmp_len, tmp); } else { /* VALUE_JSON_COMPLEX */ entry_len = asprintf(&entry, "{ \"@MATCH\": { " "\"start\": %d, " "\"end\": %d, " "\"value\": \"%.*s\" } }, ", gm->start, gm->end, tmp_len, tmp); } substr_replace(&value, &value_len, &value_size, value_len, value_len, entry, entry_len); free(entry); //printf("> %.*s\n", value_len, value); value_offset += value_len; /* For every named capture, put this in our result string: * "NAME": "%{NAME|jsonencode}" */ grok_match_walk_init(gm); while (grok_match_walk_next(gm, &pname, &pname_len, &pdata, &pdata_len) == 0) { char *entry; int entry_len; substr_replace(&tmp, &tmp_len, &tmp_size, 0, tmp_len, pdata, pdata_len); filter_jsonencode(gm, &tmp, &tmp_len, &tmp_size); if (patmacro->code == VALUE_JSON_SIMPLE) { entry_len = asprintf(&entry, "\"%.*s\": \"%.*s\", ", pname_len, pname, tmp_len, tmp); } else { /* VALUE_JSON_COMPLEX */ entry_len = asprintf(&entry, "{ \"%.*s\": { " "\"start\": %ld, " "\"end\": %ld, " "\"value\": \"%.*s\"" " } }, ", pname_len, pname, pdata - gm->subject, /*start*/ (pdata - gm->subject) + pdata_len, /*end*/ tmp_len, tmp); } substr_replace(&value, &value_len, &value_size, value_offset, value_offset, entry, entry_len); value_offset += entry_len; free(entry); } grok_match_walk_end(gm); /* Insert the { at the beginning */ /* And Replace trailing ", " with " }" */ if (patmacro->code == VALUE_JSON_SIMPLE) { substr_replace(&value, &value_len, &value_size, 0, 0, "{ ", 2); substr_replace(&value, &value_len, &value_size, value_len - 2, value_len, " }", 2); /* TODO(sissel): This could be: * -3, -1, " }", 2); */ } else { /* VALUE_JSON_COMPLEX */ substr_replace(&value, &value_len, &value_size, 0, 0, "{ \"grok\": [ ", 12); substr_replace(&value, &value_len, &value_size, value_len - 2, value_len, " ] }", 4); /* TODO(sissel): This could be: * -3, -1, " ] }", 4); */ } char *old = value; grok_log(gm->grok, LOG_REACTION, "JSON intermediate: %.*s", value_len, value); value = grok_matchconfig_filter_reaction(value, gm); free(old); ret = 0; free(tmp); } break; default: grok_log(gm->grok, LOG_REACTION, "Unhandled macro code: '%.*s' (%d)", name_len, name, patmacro->code); } } else { /* XXX: Should just have get_named_substring take a * 'name, name_len' instead */ name_copy = malloc(name_len + 1); memcpy(name_copy, name, name_len); name_copy[name_len] = '\0'; ret = grok_match_get_named_substring(gm, name_copy, (const char **)&value, &value_len); free(name_copy); } if (ret != 0) { offset += tmp_gm.end; } else { /* replace %{FOO} with the value of foo */ char *old; grok_log(tmp_gm.grok, LOG_REACTION, "Start/end: %d %d", tmp_gm.start, tmp_gm.end); grok_log(tmp_gm.grok, LOG_REACTION, "Replacing %.*s", (tmp_gm.end - tmp_gm.start), output + tmp_gm.start + offset); /* apply the any filters from %{FOO|filter1|filter2...} */ old = value; grok_log(tmp_gm.grok, LOG_REACTION, "Prefilter string: %.*s", value_len, value); grok_match_reaction_apply_filter(gm, &value, &value_len, filter, filter_len); if (old != value) { if (free_value) { free(old); /* Free the old value */ } free_value = 1; } grok_log(gm->grok, LOG_REACTION, "Filter: %.*s", filter_len, filter); grok_log(tmp_gm.grok, LOG_REACTION, "Replacing %.*s with %.*s", (tmp_gm.end - tmp_gm.start), output + tmp_gm.start + offset, value_len, value); substr_replace(&output, &len, &size, offset + tmp_gm.start, offset + tmp_gm.end, value, value_len); offset += value_len; if (free_value) { free(value); } } } /* while grok_execn ... */ return output; } void grok_matchconfig_start_shell(grok_program_t *gprog, grok_matchconf_t *gmc) { int pipefd[2]; if (!strcmp(gmc->shell, "stdout")) { /* Special case: Use the stdout FILE */ grok_log(gprog, LOG_PROGRAM, "matchconfig subshell set to 'stdout', directing reaction " \ "output to stdout instead of a process."); gmc->shellinput = stdout; return; } safe_pipe(pipefd); grok_log(gprog, LOG_PROGRAM, "Starting matchconfig subshell: %s", (gmc->shell == NULL) ? "/bin/sh" : gmc->shell); gmc->pid = fork(); if (gmc->pid == 0) { close(pipefd[1]); /* close the stdin input from the parent */ /* child */ dup2(pipefd[0], 0); if (gmc->shell == NULL) { /* default to just sh if there's no shell set */ execlp("sh", "sh", NULL); } else { execlp("sh", "sh", "-c", gmc->shell, NULL); } fprintf(stderr, "!!! Shouldn't have gotten here. execlp failed"); perror("errno says"); exit(-1);; } gmc->shellinput = fdopen(pipefd[1], "w"); if (gmc->shellinput == NULL) { grok_log(gprog, LOG_PROGRAM, "Fatal: Unable to fdopen(%d) subshell pipe: %s", pipefd[1], strerror(errno)); exit(1); /* XXX: We shouldn't exit here, but what else should we do? */ } } char *grok_match_reaction_apply_filter(grok_match_t *gm, char **value, int *value_len, const char *filter, int filter_len) { int offset = 0, len = 0; int value_size; int ret; struct filter *filterobj; if (filter_len == 0) { return *value; } *value = string_ndup(*value, *value_len); /* we'll use the value_len from the function arguments */ value_size = *value_len + 1; /* skip first char which must be a '|' */ offset = 1; while (offset + len < filter_len) { if (filter[offset + len] == '|') { /* Apply the filter */ grok_log(gm->grok, LOG_REACTION, "ApplyFilter code: %.*s", len, filter + offset); filterobj = string_filter_lookup(filter + offset, len); if (filterobj == NULL) { grok_log(gm->grok, LOG_REACTION, "Can't apply filter '%.*s'; it's unknown.", len, filter + offset); } else { ret = filterobj->func(gm, value, value_len, &value_size); if (ret != 0) { grok_log(gm->grok, LOG_REACTION, "Applying filter '%.*s' returned error %d for string '%.*s'.", len, filter + offset, *value_len, *value); } } offset += len + 1; len = 0; } len++; } /* We'll always have one filter left over */ grok_log(gm->grok, LOG_REACTION, "Filter code: %.*s", len, filter + offset); filterobj = string_filter_lookup(filter + offset, len); if (filterobj == NULL) { grok_log(gm->grok, LOG_REACTION, "Can't apply filter '%.*s'; it's unknown.", len, filter + offset); } else { ret = filterobj->func(gm, value, value_len, &value_size); if (ret != 0) { grok_log(gm->grok, LOG_REACTION, "Applying filter '%.*s' returned error %d for string '%.*s'.", len, filter + offset, *value_len, *value); } } return *value; } grok-1.20110708.1/ruby/0000775000076400007640000000000011603262767012365 5ustar jlsjlsgrok-1.20110708.1/ruby/INSTALL0000664000076400007640000000042411576274273013422 0ustar jlsjls- You'll need grok installed. From 'grok', do: % make install # This will install grok, libgrok, and grok's headers - You'll need the 'Grok' ruby module installed. From 'grok/ruby' do: % ruby extconf.rb % make install # Test with: % ruby -e 'require "Grok"; puts "Grok OK"' grok-1.20110708.1/ruby/grok.gemspec0000664000076400007640000000261211603237365014671 0ustar jlsjlsGem::Specification.new do |spec| files = <<-FILES INSTALL Rakefile examples examples/grok-web.rb examples/pattern-discovery.rb examples/test.rb grok.gemspec lib lib/grok lib/grok.rb lib/grok/match.rb lib/grok/pile.rb test test/Makefile test/alltests.rb test/general test/general/basic_test.rb test/general/captures_test.rb test/patterns test/patterns/day.rb test/patterns/host.rb test/patterns/ip.input test/patterns/ip.rb test/patterns/iso8601.rb test/patterns/month.rb test/patterns/number.rb test/patterns/path.rb test/patterns/prog.rb test/patterns/quotedstring.rb test/patterns/uri.rb test/run.sh test/speedtest.rb FILES files = files.gsub(/ +/, "").split("\n") #svnrev = %x{svn info}.split("\n").grep(/Revision:/).first.split(" ").last.to_i spec.name = "jls-grok" spec.version = "0.4.6" spec.summary = "grok bindings for ruby" spec.description = "Grok ruby bindings - pattern match/extraction tool" spec.files = files spec.add_dependency("ffi", "~> 0.6.3") spec.require_paths << "lib" spec.require_paths << "ext" # for "Grok.rb" giving backwards compat to Grok.so spec.authors = ["Jordan Sissel", "Pete Fritchman"] spec.email = ["jls@semicomplete.com", "petef@databits.net"] spec.homepage = "http://code.google.com/p/semicomplete/wiki/Grok" end grok-1.20110708.1/ruby/examples/0000775000076400007640000000000011576274273014207 5ustar jlsjlsgrok-1.20110708.1/ruby/examples/grok-web.rb0000664000076400007640000000644311576274273016260 0ustar jlsjls#!/usr/bin/env ruby # # Simple web application that will let you feed grok's discovery feature # a bunch of data, and grok will show you patterns found and the results # of that pattern as matched against the same input. require 'rubygems' require 'sinatra' require 'grok' get '/' do redirect "/demo/grok-discover/index" end get "/demo/grok-discover/index" do haml :index end post "/demo/grok-discover/grok" do grok = Grok.new grok.add_patterns_from_file("/usr/local/share/grok/patterns/base") @results = [] params[:data].split("\n").each do |line| pattern = grok.discover(line) grok.compile(pattern) match = grok.match(line) puts "Got input: #{line}" puts " => pattern: (#{match != false}) #{pattern}" @results << { :input => line, :pattern => grok.pattern.gsub(/\\Q|\\E/, ""), :full_pattern => grok.expanded_pattern, :match => (match and match.captures or false), } end haml :grok end get "/demo/grok-discover/style.css" do sass :style end __END__ @@ style h1 color: red .original .regexp display: block border: 1px solid grey padding: 1em .results width: 80% margin-left: auto th text-align: left td border-top: 1px solid black @@ layout %html %head %title Grok Web %link{:rel => "stylesheet", :href => "/demo/grok-discover/style.css"} %body =yield @@ index #header %h1 Grok Web #content Paste some log data below. I'll do my best to have grok generate a pattern for you. %p Learn more about grok here: %a{:href => "http://code.google.com/p/semicomplete/wiki/Grok"} Grok %p This is running off of my cable modem for now, so if it's sluggish, that's why. Be gentle. %form{:action => "/demo/grok-discover/grok", :method => "post"} %textarea{:name => "data", :rows => 10, :cols => 80} %br %input{:type => "submit", :value=>"submit"} @@ grok #header %h1 Grok Results %h3 %a{:href => "/demo/grok-discover/index"} Try more? #content %p Below is grok's analysis of the data you provided. Each line is analyzed separately. It uses grok's standard library of known patterns to give you a pattern that grok can use to match more logs like the lines you provided. %p The results may not be perfect, but it gives you a head start on coming up with log patterns for %a{:href => "http://code.google.com/p/semicomplete/wiki/Grok"} grok and %a{:href => "http://code.google.com/p/logstash/"} logstash %ol - @results.each do |result| %li %p.original %b Original: %br= result[:input] %p %b Pattern: %br %span.pattern= result[:pattern] %p %b Generated Regular Expression %small %i You could have written this by hand, be glad you didn't have to. %code.regexp= result[:full_pattern].gsub("<", "<") %p If you wanted to test this, you can paste the above expression into pcretest(1) and it should match your input. %p %b Capture Results %table.results %tr %th Name %th Value - result[:match].each do |key,val| - val.each do |v| %tr %td= key %td= v grok-1.20110708.1/ruby/examples/pattern-discovery.rb0000664000076400007640000000207111576274273020216 0ustar jlsjls#!/usr/bin/env ruby # require "rubygems" require "grok" require "pp" grok = Grok.new # Load some default patterns that ship with grok. # See also: # http://code.google.com/p/semicomplete/source/browse/grok/patterns/base grok.add_patterns_from_file("/usr/local/share/grok/patterns/base") # Using the patterns we know, try to build a grok pattern that best matches # a string we give. Let's try Time.now.to_s, which has this format; # => Fri Apr 16 19:15:27 -0700 2010 input = "Time is #{Time.now}" pattern = grok.discover(input) puts "Input: #{input}" puts "Pattern: #{pattern}" grok.compile(pattern) # Sleep to change time. puts "Sleeping so time changes and we can test against another input." sleep(2) match = grok.match("Time is #{Time.now.to_s}") puts "Resulting capture:" pp match.captures # When run, the output should look something like this: # % ruby pattern-discovery.rb # Pattern: Time is Fri %{SYSLOGDATE} %{BASE10NUM} 2010 # {"BASE10NUM"=>["-0700"], # "SYSLOGDATE"=>["Apr 16 19:17:38"], # "TIME"=>["19:17:38"], # "MONTH"=>["Apr"], # "MONTHDAY"=>["16"]} grok-1.20110708.1/ruby/examples/test.rb0000664000076400007640000000135011576274273015512 0ustar jlsjls#!/usr/bin/env ruby # require "rubygems" require "grok" require "pp" grok = Grok.new # Load some default patterns that ship with grok. # See also: # http://code.google.com/p/semicomplete/source/browse/grok/patterns/base grok.add_patterns_from_file("../..//patterns/base") # Using the patterns we know, try to build a grok pattern that best matches # a string we give. Let's try Time.now.to_s, which has this format; # => Fri Apr 16 19:15:27 -0700 2010 input = "2010-04-18T15:06:02Z" pattern = "%{TIMESTAMP_ISO8601}" grok.compile(pattern) grok.compile(pattern) puts "Input: #{input}" puts "Pattern: #{pattern}" puts "Full: #{grok.expanded_pattern}" match = grok.match(input) if match puts "Resulting capture:" pp match.captures end grok-1.20110708.1/ruby/lib/0000775000076400007640000000000011603260776013131 5ustar jlsjlsgrok-1.20110708.1/ruby/lib/grok/0000775000076400007640000000000011603243621014061 5ustar jlsjlsgrok-1.20110708.1/ruby/lib/grok/pile.rb0000664000076400007640000000272611576274273015366 0ustar jlsjlsrequire "grok" # A grok pile is an easy way to have multiple patterns together so # that you can try to match against each one. # The API provided should be similar to the normal Grok # interface, but you can compile multiple patterns and match will # try each one until a match is found. class Grok class Pile def initialize @groks = [] @patterns = {} @pattern_files = [] end # def initialize # see Grok#add_pattern def add_pattern(name, string) @patterns[name] = string end # def add_pattern # see Grok#add_patterns_from_file def add_patterns_from_file(path) if !File.exists?(path) raise "File does not exist: #{path}" end @pattern_files << path end # def add_patterns_from_file # see Grok#compile def compile(pattern) grok = Grok.new @patterns.each do |name, value| grok.add_pattern(name, value) end @pattern_files.each do |path| grok.add_patterns_from_file(path) end grok.compile(pattern) @groks << grok end # def compile # Slight difference from Grok#match in that it returns # the Grok instance that matched successfully in addition # to the GrokMatch result. # See also: Grok#match def match(string) @groks.each do |grok| match = grok.match(string) if match return [grok, match] end end return false end # def match end # class Pile end # class Grok grok-1.20110708.1/ruby/lib/grok/match.rb0000664000076400007640000000377411603237365015525 0ustar jlsjlsrequire "rubygems" require "ffi" require "grok" class Grok::Match < FFI::Struct module CGrokMatch extend FFI::Library ffi_lib "libgrok" attach_function :grok_match_get_named_substring, [:pointer, :pointer], :pointer attach_function :grok_match_walk_init, [:pointer], :void attach_function :grok_match_walk_next, [:pointer, :pointer, :pointer, :pointer, :pointer], :int attach_function :grok_match_walk_end, [:pointer], :void end include CGrokMatch layout :grok, :pointer, :subject, :string, :start, :int, :end, :int # Placeholder for the FFI::MemoryPointer that we pass to # grok_execn() during Grok#match; this should prevent ruby from # garbage collecting us until the GrokMatch goes out of scope. # http://code.google.com/p/logstash/issues/detail?id=47 attr_accessor :subject_memorypointer public def initialize super @captures = nil end public def each_capture @captures = Hash.new { |h, k| h[k] = Array.new } grok_match_walk_init(self) name_ptr = FFI::MemoryPointer.new(:pointer) namelen_ptr = FFI::MemoryPointer.new(:int) data_ptr = FFI::MemoryPointer.new(:pointer) datalen_ptr = FFI::MemoryPointer.new(:int) while grok_match_walk_next(self, name_ptr, namelen_ptr, data_ptr, datalen_ptr) == Grok::GROK_OK namelen = namelen_ptr.read_int name = name_ptr.get_pointer(0).get_string(0, namelen) datalen = datalen_ptr.read_int data = data_ptr.get_pointer(0).get_string(0, datalen) yield name, data end grok_match_walk_end(self) end # def each_capture public def captures if @captures.nil? @captures = Hash.new { |h,k| h[k] = [] } each_capture do |key, val| @captures[key] << val end end return @captures end # def captures public def start return self[:start] end public def end return self[:end] end public def subject return self[:subject] end end # Grok::Match grok-1.20110708.1/ruby/lib/grok.rb0000664000076400007640000000710011603260776014416 0ustar jlsjlsrequire "rubygems" require "ffi" class Grok < FFI::Struct module CGrok extend FFI::Library ffi_lib "libgrok" attach_function :grok_new, [], :pointer attach_function :grok_compilen, [:pointer, :pointer, :int], :int attach_function :grok_pattern_add, [:pointer, :pointer, :int, :pointer, :int], :int attach_function :grok_patterns_import_from_file, [:pointer, :pointer], :int attach_function :grok_execn, [:pointer, :pointer, :int, :pointer], :int end include CGrok layout :pattern, :string, :pattern_len, :int, :full_pattern, :string, :full_pattern_len, :int, :__patterns, :pointer, # TCTREE*, technically :__re, :pointer, # pcre* :__pcre_capture_vector, :pointer, # int* :__pcre_num_captures, :int, :__captures_by_id, :pointer, # TCTREE* :__captures_by_name, :pointer, # TCTREE* :__captures_by_subname, :pointer, # TCTREE* :__captures_by_capture_number, :pointer, # TCTREE* :__max_capture_num, :int, :pcre_errptr, :string, :pcre_erroffset, :int, :pcre_errno, :int, :logmask, :uint, :logdepth, :uint, :errstr, :string GROK_OK = 0 GROK_ERROR_FILE_NOT_ACCESSIBLE = 1 GROK_ERROR_PATTERN_NOT_FOUND = 2 GROK_ERROR_UNEXPECTED_READ_SIZE = 3 GROK_ERROR_COMPILE_FAILED = 4 GROK_ERROR_UNINITIALIZED = 5 GROK_ERROR_PCRE_ERROR = 6 GROK_ERROR_NOMATCH = 7 public def initialize super(grok_new) end public def add_pattern(name, pattern) name_c = FFI::MemoryPointer.from_string(name) pattern_c = FFI::MemoryPointer.from_string(pattern) grok_pattern_add(self, name_c, name.length, pattern_c, pattern.length) return nil end public def add_patterns_from_file(path) path_c = FFI::MemoryPointer.from_string(path) ret = grok_patterns_import_from_file(self, path_c) if ret != GROK_OK raise ArgumentError, "Failed to add patterns from file #{path}" end return nil end public def pattern return self[:pattern] end public def expanded_pattern return self[:full_pattern] end public def compile(pattern) pattern_c = FFI::MemoryPointer.from_string(pattern) ret = grok_compilen(self, pattern_c, pattern.length) if ret != GROK_OK raise ArgumentError, "Compile failed: #{self[:errstr]})" end return ret end public def match(text) match = Grok::Match.new text_c = FFI::MemoryPointer.from_string(text) rc = grok_execn(self, text_c, text.size, match) case rc when GROK_OK # Give the Grok::Match object a reference to the 'text_c' # object which is also Grok::Match#subject string; # this will prevent Ruby from garbage collecting it until # the match object is garbage collectd. # # If we don't do this, then 'text_c' will fall out of # scope at the end of this function and become a candidate # for garbage collection, causing Grok::Match#subject to become # corrupt and any captures to point to those corrupt portions. # http://code.google.com/p/logstash/issues/detail?id=47 match.subject_memorypointer = text_c return match when GROK_ERROR_NOMATCH return false end raise ValueError, "unknown return from grok_execn: #{rc}" end public def discover(input) init_discover if @discover == nil return @discover.discover(input) end private def init_discover @discover = GrokDiscover.new(self) @discover.logmask = logmask end end # Grok require "grok/match" require "grok/pile" grok-1.20110708.1/ruby/test/0000775000076400007640000000000011600236723013332 5ustar jlsjlsgrok-1.20110708.1/ruby/test/alltests.rb0000664000076400007640000000022211576274273015524 0ustar jlsjlsrequire 'test/unit' $: << "../lib" Dir["#{File.dirname(__FILE__)}/*/**/*.rb"].each do |file| puts "Loading tests: #{file}" require file end grok-1.20110708.1/ruby/test/run.sh0000775000076400007640000000015011576274273014507 0ustar jlsjls#!/bin/sh LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$PWD/../../" RUBYLIB="$PWD/../ext:$PWD/../lib" ruby "$@" grok-1.20110708.1/ruby/test/general/0000775000076400007640000000000011603262204014743 5ustar jlsjlsgrok-1.20110708.1/ruby/test/general/captures_test.rb0000664000076400007640000001270411603257762020176 0ustar jlsjls#require 'rubygems' require 'grok' require 'test/unit' class GrokPatternCapturingTests < Test::Unit::TestCase def setup @grok = Grok.new end def test_capture_methods @grok.add_pattern("foo", ".*") @grok.compile("%{foo}") match = @grok.match("hello world") assert_respond_to(match, :captures) assert_respond_to(match, :start) assert_respond_to(match, :end) assert_respond_to(match, :subject) assert_respond_to(match, :each_capture) end def test_basic_capture @grok.add_pattern("foo", ".*") @grok.compile("%{foo}") input = "hello world" match = @grok.match(input) assert_equal("(?<0000>.*)", @grok.expanded_pattern) assert_kind_of(Grok::Match, match) assert_kind_of(Hash, match.captures) assert_equal(match.captures.length, 1) assert_kind_of(Array, match.captures["foo"]) assert_equal(1, match.captures["foo"].length) assert_kind_of(String, match.captures["foo"][0]) assert_equal(input, match.captures["foo"][0]) match.each_capture do |key, val| assert(key.is_a?(String), "Grok::Match::each_capture should yield string,string, got #{key.class.name} as first argument.") assert(val.is_a?(String), "Grok::Match::each_capture should yield string,string, got #{key.class.name} as first argument.") end assert_kind_of(Fixnum, match.start) assert_kind_of(Fixnum, match.end) assert_kind_of(String, match.subject) assert_equal(0, match.start, "Match of /.*/, start should equal 0") assert_equal(input.length, match.end, "Match of /.*/, end should equal input string length") assert_equal(input, match.subject) end def test_multiple_captures_with_same_name @grok.add_pattern("foo", "\\w+") @grok.compile("%{foo} %{foo}") match = @grok.match("hello world") assert_not_equal(false, match) assert_equal(1, match.captures.length) assert_equal(2, match.captures["foo"].length) assert_equal("hello", match.captures["foo"][0]) assert_equal("world", match.captures["foo"][1]) end def test_multiple_captures @grok.add_pattern("foo", "\\w+") @grok.add_pattern("bar", "\\w+") @grok.compile("%{foo} %{bar}") match = @grok.match("hello world") assert_not_equal(false, match) assert_equal(2, match.captures.length) assert_equal(1, match.captures["foo"].length) assert_equal(1, match.captures["bar"].length) assert_equal("hello", match.captures["foo"][0]) assert_equal("world", match.captures["bar"][0]) end def test_nested_captures @grok.add_pattern("foo", "\\w+ %{bar}") @grok.add_pattern("bar", "\\w+") @grok.compile("%{foo}") match = @grok.match("hello world") assert_not_equal(false, match) assert_equal(2, match.captures.length) assert_equal(1, match.captures["foo"].length) assert_equal(1, match.captures["bar"].length) assert_equal("hello world", match.captures["foo"][0]) assert_equal("world", match.captures["bar"][0]) end def test_nesting_recursion @grok.add_pattern("foo", "%{foo}") assert_raises(ArgumentError) do @grok.compile("%{foo}") end end def test_valid_capture_subnames name = "foo" @grok.add_pattern(name, "\\w+") subname = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abc:def" @grok.compile("%{#{name}:#{subname}}") match = @grok.match("hello") assert_not_equal(false, match) assert_equal(1, match.captures.length) assert_equal(1, match.captures["#{name}:#{subname}"].length) assert_equal("hello", match.captures["#{name}:#{subname}"][0]) end def test_grok_inline_definition input = "key=123" @grok.compile("key=%{VALUE=\\d+}") match = @grok.match(input) assert_not_equal(false, match, "Expected '#{input}' to match '#{@grok.expanded_pattern}'") assert_equal(1, match.captures.length) assert_equal(1, match.captures["VALUE"].length) assert_equal("123", match.captures["VALUE"].first) end def test_grok_crazy_nested_inline_definition email = "something@some.host.name" input = "HELLO #{email}" #@grok[:logmask] = 0xffffff @grok.compile("HELLO %{EMAIL:email=[A-Za-z_+-]+@%{MYDOMAIN=some\\.host\\.name}}") match = @grok.match(input) assert_not_equal(false, match, "Expected '#{input}' to match '#{@grok.expanded_pattern}'") assert_equal(2, match.captures.length) assert_equal(1, match.captures["EMAIL:email"].length) assert_equal(email, match.captures["EMAIL:email"].first) end def test_grok_nested_inline_definition email = "something@some.host.name" input = "HELLO #{email}" @grok.add_pattern("MYDOMAIN", "some\\.host\\.name") #@grok[:logmask] = 0xffffff @grok.compile("HELLO %{EMAIL:email=[A-Za-z_+-]+@%{MYDOMAIN}}") match = @grok.match(input) assert_not_equal(false, match, "Expected '#{input}' to match '#{@grok.expanded_pattern}'") assert_equal(2, match.captures.length) assert_equal(1, match.captures["EMAIL:email"].length) assert_equal(email, match.captures["EMAIL:email"].first) end # TODO(sissel): This doesn't work yet. def __test_grok_inline_definition_with_predicate input = "key=123" @grok[:logmask] = 0xffffff @grok.compile("key=%{VALUE=\\d+ == 123}") match = @grok.match(input) assert_not_equal(false, match, "Expected '#{input}' to match '#{@grok.expanded_pattern}'") assert_equal(1, match.captures.length) assert_equal(1, match.captures["VALUE"].length) assert_equal("123", match.captures["VALUE"].first) end end grok-1.20110708.1/ruby/test/general/basic_test.rb0000664000076400007640000000300511603256653017421 0ustar jlsjls#require 'rubygems' require 'grok' require 'test/unit' class GrokBasicTests < Test::Unit::TestCase def setup @grok = Grok.new end def test_grok_methods assert_respond_to(@grok, :compile) assert_respond_to(@grok, :match) assert_respond_to(@grok, :expanded_pattern) assert_respond_to(@grok, :pattern) end def test_grok_compile_fails_on_invalid_expressions bad_regexps = ["[", "[foo", "?", "foo????", "(?-"] bad_regexps.each do |regexp| assert_raise ArgumentError do @grok.compile(regexp) end end end def test_grok_compile_succeeds_on_valid_expressions good_regexps = ["[hello]", "(test)", "(?:hello)", "(?=testing)"] good_regexps.each do |regexp| assert_nothing_raised do @grok.compile(regexp) end end end def test_grok_pattern_is_same_as_compile_pattern pattern = "Hello world" @grok.compile(pattern) assert_equal(pattern, @grok.pattern) end # TODO(sissel): Move this test to a separate test suite aimed # at testing grok internals def test_grok_expanded_pattern_works_correctly @grok.add_pattern("test", "hello world") @grok.compile("%{test}") assert_equal("(?<0000>hello world)", @grok.expanded_pattern) end def test_grok_load_patterns_from_file require 'tempfile' fd = Tempfile.new("grok_test_patterns.XXXXX") fd.puts "TEST \\d+" fd.close @grok.add_patterns_from_file(fd.path) @grok.compile("%{TEST}") assert_equal("(?<0000>\\d+)", @grok.expanded_pattern) end end grok-1.20110708.1/ruby/test/Makefile0000664000076400007640000000064511576274273015015 0ustar jlsjls PLATFORM=$(shell (uname -o || uname -s) 2> /dev/null) ifeq ($(PLATFORM), Darwin) LIBSUFFIX=dylib else LIBSUFFIX=so endif .PHONY: test test: $(MAKE) -C ../../ libgrok.$(LIBSUFFIX) LD_LIBRARY_PATH="$${LD_LIBRARY_PATH}:$$PWD/../../" RUBYLIB="$$PWD/../lib" ruby alltests.rb test_jruby: $(MAKE) -C ../../ libgrok.$(LIBSUFFIX) LD_LIBRARY_PATH="$${LD_LIBRARY_PATH}:$$PWD/../../" RUBYLIB="$$PWD/../lib" jruby alltests.rb grok-1.20110708.1/ruby/test/regression/0000775000076400007640000000000011576274273015530 5ustar jlsjlsgrok-1.20110708.1/ruby/test/regression/grokmatch-subject-garbagecollected-early.rb0000664000076400007640000000451211576274273026052 0ustar jlsjls# Relevant bug: http://code.google.com/p/logstash/issues/detail?id=47 # require "test/unit" require "grok" class GrokRegressionIssue47 < Test::Unit::TestCase def test_issue_47 # http://code.google.com/p/logstash/issues/detail?id=47 grok = Grok.new pri = "(?:<(?:[0-9]{1,3})>)" month = "(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" day = "(?: [1-9]|[12][0-9]|3[01])" hour = "(?:[01][0-9]|2[0-4])" minute = "(?:[0-5][0-9])" second = "(?:[0-5][0-9])" hostname = "(?:[A-Za-z0-9_.:]+)" message = "(?:[ -~]+)" grok.add_pattern("PRI", pri) grok.add_pattern("MONTH", month) grok.add_pattern("DAY", day) grok.add_pattern("HOUR", hour) grok.add_pattern("MINUTE", minute) grok.add_pattern("SECOND", second) grok.add_pattern("TIME", "%{HOUR}:%{MINUTE}:%{SECOND}") grok.add_pattern("TIMESTAMP", "%{MONTH} %{DAY} %{TIME}") grok.add_pattern("HOSTNAME", hostname) grok.add_pattern("HEADER", "%{TIMESTAMP} %{HOSTNAME}") grok.add_pattern("MESSAGE", message) grok.compile("%{PRI}%{HEADER} %{MESSAGE}") #start = Time.now count = 10000 input = "<12>Mar 1 15:43:35 snack kernel: Kernel logging (proc) stopped." count.times do |i| begin #GC.start m = grok.match(input) # Verify our pattern matches at least once successfully (for correctness) captures = m.captures errmsg = "on iteration #{i}\nInput: #{m.end - m.start} length\nSubject: #{m.subject.inspect}\nCaptures: #{captures.inspect}" assert_equal("<12>", captures["PRI"].first, "pri #{errmsg}") assert_equal("Mar 1 15:43:35", captures["TIMESTAMP"].first, "timestamp #{errmsg}") assert_equal("snack", captures["HOSTNAME"].first, "hostname #{errmsg}") assert_equal("kernel: Kernel logging (proc) stopped.", captures["MESSAGE"].first, "message #{errmsg}") rescue => e puts "Error on attempt #{i + 1}" raise e end end #duration = Time.now - start # TODO(sissel): we could use the duration later? #version = "#{RUBY_PLATFORM}/#{RUBY_VERSION}" #version += "/#{JRUBY_VERSION}" if RUBY_PLATFORM == "java" #puts "#{version}: duration: #{duration} / rate: #{count / duration} / iterations: #{count}" #m = syslog3164_re.match(data) end # def test_issue_47 end # class GrokRegressionIssue47 grok-1.20110708.1/ruby/test/patterns/0000775000076400007640000000000011600236463015173 5ustar jlsjlsgrok-1.20110708.1/ruby/test/patterns/uri.rb0000664000076400007640000000364611576274273016345 0ustar jlsjlsrequire 'grok' require 'test/unit' class URIPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("%{URI}") end def test_urls urls = ["http://www.google.com", "telnet://helloworld", "http://www.example.com/", "http://www.example.com/test.html", "http://www.example.com/test.html?foo=bar", "http://www.example.com/test.html?foo=bar&fizzle=baz", "http://www.example.com:80/test.html?foo=bar&fizzle=baz", "https://www.example.com:443/test.html?foo=bar&fizzle=baz", "https://user@www.example.com:443/test.html?foo=bar&fizzle=baz", "https://user:pass@somehost/fetch.pl", "puppet:///", "http://www.foo.com", "http://www.foo.com/", "http://www.foo.com/?testing", "http://www.foo.com/?one=two", "http://www.foo.com/?one=two&foo=bar", "foo://somehost.com:12345", "foo://user@somehost.com:12345", "foo://user@somehost.com:12345/", "foo://user@somehost.com:12345/foo.bar/baz/fizz", "foo://user@somehost.com:12345/foo.bar/baz/fizz?test", "foo://user@somehost.com:12345/foo.bar/baz/fizz?test=1&sink&foo=4", "http://www.google.com/search?hl=en&source=hp&q=hello+world+%5E%40%23%24&btnG=Google+Search", "http://www.freebsd.org/cgi/url.cgi?ports/sysutils/grok/pkg-descr", "http://www.google.com/search?q=CAPTCHA+ssh&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:en-US:official", "svn+ssh://somehost:12345/testing", ] urls.each do |url| match = @grok.match(url) assert_not_equal(false, match, "Expected this to match: #{url}") assert_equal(url, match.captures["URI"][0]) end end end grok-1.20110708.1/ruby/test/patterns/number.rb0000664000076400007640000000411111576274273017022 0ustar jlsjlsrequire 'grok' require 'test/unit' class NumberPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) end def test_match_number @grok.compile("%{NUMBER}") # step of a prime number near 100 so we get about 2000 iterations #puts @grok.expanded_pattern.inspect -100000.step(100000, 97) do |value| match = @grok.match(value.to_s) assert_not_equal(false, match, "#{value} should not match false") assert_equal(value.to_s, match.captures["NUMBER"][0]) end end def test_match_number_float # generate some random floating point values # always seed with the same random number, so the test is always the same srand(0) @grok.compile("%{NUMBER}") 0.upto(1000) do |value| value = (rand * 100000 - 50000).to_s match = @grok.match(value) assert_not_equal(false, match) assert_equal(value, match.captures["NUMBER"][0]) end end def test_match_number_amid_things @grok.compile("%{NUMBER}") value = "hello 12345 world" match = @grok.match(value) assert_not_equal(false, match) assert_equal("12345", match.captures["NUMBER"][0]) value = "Something costs $55.4!" match = @grok.match(value) assert_not_equal(false, match) assert_equal("55.4", match.captures["NUMBER"][0]) end def test_no_match_number @grok.compile("%{NUMBER}") ["foo", "", " ", ".", "hello world", "-abcd"].each do |value| match = @grok.match(value.to_s) assert_equal(false, match) end end def test_match_base16num @grok.compile("%{BASE16NUM}") # Ruby represents negative values in a strange way, so only # test positive numbers for now. # I don't think anyone uses negative values in hex anyway... 0.upto(1000) do |value| [("%x" % value), ("0x%08x" % value), ("%016x" % value)].each do |hexstr| match = @grok.match(hexstr) assert_not_equal(false, match) assert_equal(hexstr, match.captures["BASE16NUM"][0]) end end end end grok-1.20110708.1/ruby/test/patterns/ip.input0000664000076400007640000042722511576274273016715 0ustar jlsjls178.21.82.201 11.178.94.216 238.222.236.81 231.49.38.155 206.0.116.17 191.199.247.47 43.131.249.156 170.36.40.12 124.2.84.36 163.202.166.217 174.13.179.131 146.243.174.98 29.228.126.67 103.119.56.74 167.240.28.87 197.97.150.98 66.138.135.38 130.202.105.241 15.17.225.53 39.222.4.153 103.61.9.157 197.63.29.119 245.80.255.133 3.242.183.26 159.66.133.86 154.236.252.153 28.180.154.71 94.58.172.9 106.48.220.22 174.232.78.189 92.186.171.168 178.19.13.246 220.31.153.199 248.171.230.196 141.104.54.152 226.202.214.29 167.19.31.137 166.11.254.73 239.39.156.244 113.88.94.107 5.255.158.2 232.219.53.198 117.182.3.145 248.101.211.128 169.19.63.228 51.34.90.199 97.122.25.180 125.218.229.214 60.65.143.205 248.194.124.53 46.152.20.167 190.33.162.139 242.193.103.29 192.58.26.136 234.194.159.17 220.107.39.229 116.243.138.150 141.218.157.13 111.11.63.200 47.222.205.236 188.142.44.77 112.101.154.183 36.249.129.116 218.112.13.75 228.191.70.8 105.239.27.186 220.208.38.171 40.141.196.141 39.36.70.192 224.102.195.39 140.171.235.213 177.41.10.73 163.73.123.34 54.31.7.58 60.195.162.197 154.227.180.95 210.198.93.248 242.161.151.231 223.157.104.86 34.95.219.175 64.81.54.157 197.142.215.216 147.36.210.140 192.204.76.80 122.148.146.135 228.24.199.157 163.239.243.19 250.181.193.14 154.40.171.124 198.16.5.68 2.71.62.97 0.113.1.62 161.199.127.110 128.7.176.144 174.172.214.169 226.53.106.125 58.65.201.11 226.4.32.105 43.68.32.31 243.94.72.33 10.197.200.245 228.70.235.240 114.183.102.106 243.203.255.218 240.161.35.253 133.4.207.184 185.77.57.205 67.3.238.65 82.223.44.96 238.212.162.185 235.190.20.105 36.202.164.98 13.160.149.60 233.137.182.232 213.237.7.155 131.220.114.208 207.216.246.124 54.121.219.237 224.21.214.94 188.173.129.126 216.13.245.172 180.229.112.198 24.167.119.41 175.168.211.231 151.18.71.32 81.119.201.155 103.188.12.194 43.185.119.93 86.204.197.16 160.224.129.155 208.148.51.225 130.210.226.54 50.194.232.50 168.97.14.181 84.137.74.46 55.34.0.200 171.1.61.176 48.148.70.53 254.84.60.156 27.90.226.213 159.113.190.216 106.214.139.157 37.32.181.92 218.171.249.220 214.11.31.67 110.218.177.47 105.119.68.105 20.227.231.106 65.134.219.190 179.0.251.62 98.67.194.177 124.48.111.161 220.253.133.170 103.230.52.76 180.233.173.40 60.30.236.197 246.136.131.13 121.195.82.43 255.77.123.78 225.180.107.23 253.84.173.106 46.207.225.4 227.127.248.200 2.218.95.139 109.221.7.224 109.49.47.165 14.154.37.213 145.88.243.174 86.11.101.1 114.49.210.180 150.50.172.5 121.142.126.173 59.157.7.75 244.150.109.227 2.248.74.215 195.230.6.239 96.63.119.42 207.185.82.62 171.231.245.11 92.17.43.94 123.66.80.140 98.177.172.40 181.9.172.226 108.102.80.246 151.198.227.218 50.152.78.129 203.172.10.11 134.73.8.241 121.38.117.209 246.0.60.143 36.189.2.188 135.120.113.195 212.127.63.108 40.101.59.48 171.189.85.128 221.28.250.212 103.74.13.243 119.114.69.21 174.120.129.113 209.40.44.16 93.217.164.250 9.24.217.74 226.106.27.250 163.77.84.102 115.7.144.254 240.254.22.172 253.189.181.155 151.133.73.76 225.184.64.63 12.118.167.181 212.133.246.171 83.175.10.154 216.30.65.112 86.175.34.19 59.250.225.239 32.74.94.4 18.133.251.147 155.194.194.47 201.215.178.93 234.177.53.142 109.111.24.197 58.238.174.192 162.126.209.17 0.207.147.201 188.15.228.226 159.203.92.124 12.146.127.232 131.87.14.115 237.17.211.16 250.210.5.5 242.54.102.79 247.98.65.33 161.220.92.157 191.162.98.24 119.249.151.249 157.145.149.65 183.217.40.191 215.66.122.111 129.161.208.220 199.19.231.233 212.66.115.88 107.190.139.36 184.255.120.170 64.155.137.142 95.76.184.115 250.122.25.7 82.84.242.110 236.216.220.78 160.15.134.89 158.182.219.85 151.220.167.42 105.161.91.249 169.206.138.171 88.60.28.63 28.80.88.99 49.53.99.153 170.146.239.129 157.87.31.73 220.197.212.199 10.253.167.68 133.136.125.254 243.129.80.100 77.23.211.7 231.94.213.155 144.197.34.123 171.53.154.26 235.11.183.57 56.233.1.237 146.1.188.29 241.130.90.246 74.19.176.235 210.26.216.168 227.194.11.151 90.153.110.128 248.74.175.122 30.146.64.182 38.38.238.21 166.181.201.159 111.86.250.20 55.217.48.30 86.61.187.167 167.165.222.207 164.63.236.148 21.127.140.8 107.51.87.68 139.104.143.108 0.177.121.196 232.43.172.152 199.229.216.78 92.241.242.4 83.18.244.87 191.144.111.61 220.69.226.181 58.63.5.60 240.224.238.237 249.97.231.242 100.24.57.209 144.131.45.223 114.251.92.168 206.105.255.168 228.216.158.72 83.51.215.165 28.6.97.57 197.10.248.5 50.7.184.145 142.176.170.51 242.199.196.130 64.135.179.139 78.254.39.21 20.217.234.251 245.139.35.50 98.138.231.105 84.67.133.16 91.121.27.129 219.167.59.86 224.136.152.240 21.41.92.212 139.113.178.151 83.65.51.85 234.49.188.240 212.4.141.66 244.97.120.182 15.58.46.177 211.238.175.95 186.115.218.90 24.15.13.46 249.32.146.151 229.117.185.228 174.198.175.240 58.160.157.157 245.68.18.118 232.157.152.141 52.19.213.73 110.7.128.101 254.37.161.179 84.113.122.74 200.34.23.88 101.59.169.81 78.45.80.137 17.216.114.143 65.108.61.70 186.137.186.176 24.210.112.107 133.44.74.134 10.222.231.142 51.114.106.55 123.131.180.37 40.70.211.169 29.194.203.211 136.39.221.136 14.171.196.123 107.128.111.235 95.178.14.17 209.55.150.169 238.157.32.186 2.23.200.253 47.194.16.96 230.135.186.197 175.39.58.32 7.45.96.226 228.128.15.204 121.210.73.32 128.133.178.25 0.54.127.206 197.212.204.161 229.199.111.218 77.168.206.247 106.46.208.109 61.42.199.219 230.215.164.143 50.246.34.18 2.129.16.186 248.253.69.50 45.53.91.229 249.143.170.254 122.127.30.65 21.141.126.202 117.33.155.4 124.230.254.59 97.232.98.97 113.94.192.224 102.96.159.41 145.70.221.247 241.149.132.161 175.3.253.8 220.184.226.122 241.99.37.215 184.69.216.150 218.17.106.15 209.231.95.161 42.86.193.242 168.194.21.2 190.94.68.78 52.17.97.34 124.188.241.181 118.69.188.228 46.78.115.48 110.13.132.111 147.37.64.113 15.55.52.72 240.96.92.251 89.151.203.222 126.179.71.125 18.245.21.21 14.177.12.208 152.125.59.136 135.114.255.171 236.77.153.186 113.200.227.126 152.100.246.55 188.218.239.169 11.162.249.22 88.75.214.43 172.200.97.42 49.33.85.44 247.194.76.246 153.171.218.101 189.92.122.25 155.182.228.216 7.102.77.229 168.145.136.155 208.163.99.119 141.252.150.72 227.119.126.25 163.210.58.254 39.183.112.172 125.107.129.58 129.72.155.168 252.26.172.107 163.242.253.82 215.167.17.8 196.44.150.136 255.11.183.246 93.196.138.204 78.195.58.178 235.241.149.129 84.204.250.126 195.90.68.114 142.179.226.98 79.126.42.52 206.226.104.186 202.152.7.231 136.87.183.88 151.63.68.235 205.63.198.220 47.172.57.59 177.131.52.2 179.43.138.79 214.152.34.226 47.189.39.159 175.16.78.243 198.19.164.200 94.151.42.56 252.129.91.168 212.243.67.63 201.2.228.169 167.159.144.18 156.208.3.82 18.179.225.52 112.136.187.59 114.217.182.20 124.96.133.67 254.69.104.155 90.187.170.158 237.206.241.36 49.52.204.215 58.217.127.26 153.1.71.189 203.229.2.137 192.97.219.95 212.44.30.151 119.189.104.223 5.238.229.74 27.32.165.102 209.15.86.123 147.15.96.54 55.104.240.3 99.74.221.172 190.3.121.135 82.187.228.138 74.152.90.35 104.217.93.151 71.101.195.92 19.86.153.1 131.222.42.126 149.218.247.45 159.64.87.151 105.134.49.49 241.68.102.195 59.36.18.98 111.200.157.222 34.34.92.30 85.251.16.21 237.229.0.14 119.125.39.189 13.188.112.1 123.155.249.166 79.59.17.224 26.249.89.161 52.24.87.185 24.172.201.93 94.40.113.98 124.225.98.177 235.244.62.27 98.80.211.91 15.229.105.65 59.170.211.31 34.105.229.255 99.42.36.130 82.94.109.231 219.187.88.101 213.37.37.42 123.60.193.85 128.124.152.142 16.224.117.204 15.80.243.215 81.89.62.62 131.18.93.75 81.154.147.44 40.227.197.252 130.197.233.70 235.32.77.98 55.114.34.210 36.18.240.157 138.161.115.226 129.137.19.227 144.242.8.200 93.216.132.182 182.150.118.107 96.253.95.114 30.46.118.58 56.180.83.126 212.88.40.110 251.108.67.221 33.159.254.213 49.224.117.230 167.29.135.137 67.124.56.31 105.226.103.57 230.167.105.79 47.110.241.161 94.11.147.237 141.130.65.113 190.153.3.244 44.184.22.218 92.189.246.224 144.191.220.223 5.239.88.199 78.79.39.242 200.178.66.120 240.249.222.203 156.22.34.252 19.209.149.102 222.2.232.42 47.105.96.42 253.42.194.196 239.137.95.214 32.230.63.141 99.112.136.247 226.215.200.0 177.106.180.49 173.195.104.40 57.11.214.83 135.196.142.191 141.206.182.191 163.239.55.57 102.55.216.54 11.219.31.177 245.78.86.64 63.48.119.1 174.203.211.133 91.80.103.46 15.149.188.149 210.22.237.97 66.190.112.6 208.110.163.164 76.115.177.57 121.52.234.38 245.229.13.5 214.75.0.155 219.240.229.229 59.230.127.104 152.216.73.147 164.114.214.199 147.102.234.22 175.229.153.3 144.149.93.35 1.193.123.98 175.34.225.143 228.240.145.216 29.168.47.69 186.30.8.180 222.232.38.63 208.15.61.62 164.40.136.69 213.212.143.141 14.110.115.121 157.55.164.206 116.167.195.133 26.35.231.196 162.156.47.87 203.19.159.128 42.61.92.240 232.190.202.77 217.234.59.219 18.20.23.110 75.250.80.217 165.54.5.244 127.192.192.14 12.210.15.33 224.54.56.161 238.118.217.6 102.238.5.96 226.169.162.125 200.20.240.177 157.93.216.20 223.108.19.130 100.57.42.137 150.100.209.244 123.209.86.168 17.134.176.96 217.157.100.115 10.83.228.36 18.163.133.104 174.118.122.175 186.182.161.227 238.37.100.138 5.115.160.84 28.234.209.166 129.160.42.46 195.255.203.201 207.228.169.232 13.252.237.227 227.207.245.87 75.90.60.151 135.9.249.189 138.193.49.47 247.90.226.176 222.193.18.124 41.175.243.184 29.247.93.113 41.196.11.48 117.250.135.86 180.27.19.129 117.103.169.203 135.149.21.227 103.97.136.77 91.17.14.116 80.240.82.108 96.130.167.213 13.212.91.229 201.77.218.11 14.218.206.94 182.231.238.118 129.205.104.134 55.65.4.91 121.230.18.37 67.106.239.201 131.136.155.84 107.216.72.66 140.211.32.198 44.78.240.69 115.155.154.101 168.225.246.214 252.35.242.220 84.95.252.159 167.220.118.147 195.150.204.232 213.151.179.154 232.243.227.24 238.60.6.126 184.239.13.143 117.131.190.163 147.126.225.104 35.186.57.65 240.124.215.228 85.64.29.24 11.119.131.81 4.75.202.41 86.242.10.52 139.230.226.231 38.57.142.55 83.12.203.163 65.145.82.162 66.54.64.101 167.33.177.200 160.92.94.216 226.31.26.223 203.190.56.153 246.218.170.64 5.60.48.229 241.98.135.123 179.82.155.154 106.250.188.26 19.202.11.246 245.122.211.115 72.42.79.97 157.214.215.238 116.57.241.36 89.81.111.122 58.0.171.95 171.233.89.13 202.229.229.9 151.41.23.158 253.43.248.29 6.153.216.241 100.178.179.212 225.9.181.188 252.157.11.230 97.22.186.99 161.234.188.161 51.88.54.53 222.3.15.208 163.131.45.56 106.18.102.166 186.157.207.121 43.139.219.144 45.137.52.35 139.114.176.252 30.9.180.54 208.11.196.163 65.202.170.244 102.33.227.103 68.79.88.48 144.189.105.218 30.7.22.116 62.144.210.63 201.52.59.54 0.83.121.53 30.30.147.45 144.7.26.126 189.189.44.105 102.17.146.48 135.215.235.58 16.231.91.250 16.129.121.154 202.112.215.172 189.45.18.133 57.87.66.74 124.129.112.185 230.192.4.248 58.212.104.18 151.7.202.92 214.233.14.159 22.183.119.154 104.84.123.181 151.210.156.42 203.196.59.194 150.170.147.169 222.213.115.23 106.227.130.231 21.15.251.174 223.47.203.92 104.164.5.166 115.173.186.10 114.19.249.104 184.15.79.154 86.45.144.209 122.248.61.101 12.73.129.203 48.137.183.223 63.3.56.184 142.192.200.163 25.40.178.14 121.189.79.220 205.114.165.207 100.99.140.101 127.31.157.203 17.56.56.201 52.183.164.56 207.73.212.30 182.127.13.145 13.244.114.145 246.150.52.87 15.99.118.253 177.194.24.56 231.199.84.30 217.152.183.163 185.197.2.154 64.209.48.183 158.42.87.42 18.206.237.244 189.57.2.219 16.63.6.198 239.135.21.240 176.217.122.60 229.100.237.177 241.37.14.29 20.128.71.151 195.13.5.73 126.78.246.235 19.247.204.193 191.0.9.63 153.187.102.121 191.172.61.12 71.101.70.99 201.192.75.207 252.234.66.149 212.1.108.144 103.18.98.125 194.171.204.110 244.16.132.41 112.102.163.106 100.129.113.196 0.235.114.167 46.253.42.45 132.205.215.230 113.53.166.149 243.244.146.174 94.109.221.254 7.34.33.33 202.149.189.142 79.171.239.106 137.175.189.105 235.52.136.187 216.115.126.58 0.201.22.186 190.78.63.36 242.245.132.236 105.58.178.53 249.1.155.139 12.208.111.135 30.173.253.224 126.53.53.209 138.99.97.138 29.182.34.218 144.1.98.198 177.140.94.110 16.196.6.85 53.254.108.188 54.22.21.204 64.93.21.171 59.184.7.197 131.93.192.150 136.39.104.133 14.9.67.212 211.70.101.223 39.163.6.94 215.138.199.115 78.208.111.127 11.90.42.108 189.178.66.83 68.78.212.128 235.150.82.217 50.120.48.52 7.12.64.253 21.198.6.79 105.55.187.97 244.238.116.58 3.36.33.135 192.69.195.188 68.159.35.211 246.232.2.96 45.158.133.151 177.16.218.162 176.140.22.27 66.168.206.45 50.168.229.82 38.155.127.185 132.191.154.114 79.231.117.138 228.180.147.51 74.210.184.224 55.250.205.95 230.136.251.51 206.207.210.145 188.54.190.51 189.54.135.242 52.135.177.7 84.221.168.179 96.178.36.216 24.125.81.185 0.180.25.58 79.237.202.183 52.52.121.114 71.31.126.108 39.17.96.40 252.69.156.159 59.131.214.81 229.64.143.202 77.111.243.63 32.88.249.1 163.242.201.244 15.209.121.182 248.62.182.215 170.184.162.186 59.98.1.229 60.37.83.205 206.207.95.53 111.243.195.223 33.100.151.223 248.109.65.199 111.76.105.78 167.109.57.204 73.181.17.91 60.42.243.144 89.78.149.175 223.8.23.197 160.255.131.149 138.202.17.56 0.233.51.220 126.232.50.85 111.57.98.155 75.128.211.146 187.202.124.121 11.118.89.40 216.246.13.130 214.154.80.222 179.88.43.192 172.138.234.92 43.228.30.27 114.87.138.88 132.174.129.177 21.156.231.159 118.67.140.199 130.241.25.21 177.77.142.66 60.243.10.54 204.144.55.175 160.72.135.98 81.88.198.156 4.239.176.234 116.22.21.29 235.248.125.209 173.22.223.54 6.169.79.180 56.132.92.29 232.22.225.144 60.195.31.162 216.65.117.114 45.79.17.41 58.66.21.168 206.177.41.196 121.208.125.13 163.103.136.98 155.147.176.36 130.77.202.208 221.160.4.178 92.184.6.163 221.168.248.196 177.217.51.242 162.112.96.106 131.65.233.165 231.71.171.156 23.181.28.38 35.1.122.167 106.254.109.115 22.79.165.39 115.214.192.239 140.18.139.76 93.15.97.33 12.66.134.133 144.40.139.36 10.251.71.202 62.118.217.178 233.211.131.22 191.168.29.183 163.139.34.171 247.220.153.28 204.73.18.40 222.212.129.115 157.74.227.119 17.224.253.47 136.133.91.93 228.160.72.68 41.238.219.156 149.60.163.251 99.58.96.59 144.176.50.3 243.188.181.42 190.145.236.221 161.78.135.139 85.24.145.182 39.15.92.22 46.154.40.92 195.181.17.251 217.103.79.87 243.229.124.79 37.201.86.116 132.59.196.116 220.10.71.100 99.248.47.211 157.11.90.249 230.91.153.32 140.196.123.3 142.149.249.203 0.69.31.206 136.142.190.174 156.3.99.175 254.154.7.175 129.154.58.194 36.94.22.81 87.19.38.107 101.70.208.35 134.86.8.227 181.81.211.188 49.41.233.29 213.128.30.101 79.213.57.173 228.99.73.233 66.7.224.144 219.239.52.52 163.213.129.48 190.61.253.99 250.234.17.88 175.79.30.202 19.152.167.26 75.35.226.252 151.56.83.187 202.124.127.185 181.18.151.142 10.116.141.104 110.183.6.110 59.233.100.113 15.108.205.138 32.208.169.57 147.143.26.159 33.105.20.170 21.56.59.193 195.134.0.12 168.83.192.28 167.13.191.205 239.237.48.128 62.173.180.109 205.73.210.72 14.84.37.37 20.181.24.14 184.136.246.54 162.3.174.185 137.146.234.54 101.51.27.33 0.58.57.138 50.12.214.93 107.53.110.205 63.143.50.96 123.32.63.1 6.243.50.94 115.66.22.164 9.71.28.89 136.238.246.112 221.170.125.98 52.195.247.33 89.93.153.12 46.253.105.255 237.45.81.43 230.246.101.28 105.45.200.128 139.92.97.46 158.152.117.60 154.178.33.115 185.232.157.130 62.157.251.148 227.17.231.92 115.33.231.247 45.181.62.116 24.124.224.79 102.102.8.118 54.154.91.81 227.94.221.231 56.221.147.44 119.55.159.180 249.109.112.108 118.146.32.227 5.59.231.118 178.66.186.35 42.245.242.235 52.153.93.207 131.171.47.55 137.139.137.254 74.236.248.158 35.125.167.171 222.73.131.154 114.65.249.154 163.117.96.135 84.195.235.13 237.201.111.87 141.162.241.95 19.47.71.148 54.73.42.180 39.24.14.68 13.148.17.55 113.183.129.186 249.87.73.205 3.222.117.120 137.182.207.36 187.79.216.92 167.93.95.116 169.200.184.17 208.165.66.223 105.61.45.111 226.46.150.228 82.144.19.84 39.6.212.84 232.255.108.85 72.21.144.93 250.87.78.1 93.103.99.148 249.178.204.218 251.160.160.217 23.82.168.124 148.113.64.213 192.195.183.72 205.38.99.13 205.32.165.254 192.139.63.219 80.196.165.113 4.104.182.206 73.22.2.128 101.145.83.189 188.121.177.197 113.82.39.3 159.121.199.91 69.8.98.135 196.136.153.50 151.225.84.182 219.28.93.145 127.91.168.180 163.22.66.167 80.238.115.33 155.255.185.5 104.31.237.201 128.206.239.43 22.251.242.233 91.31.195.82 214.65.21.141 79.128.156.41 59.1.214.130 66.15.54.182 216.125.54.194 180.205.3.2 224.207.151.124 101.214.55.112 52.51.64.183 172.116.195.223 137.91.210.132 253.102.226.150 80.218.27.123 71.78.191.96 209.36.158.132 249.231.182.64 19.54.75.72 95.77.139.147 200.42.73.133 52.149.136.172 133.127.205.26 75.37.186.30 169.26.146.189 126.207.31.85 235.215.179.115 64.153.173.202 174.251.158.23 235.210.246.14 150.114.24.221 124.31.224.25 240.3.118.45 28.237.237.26 219.23.255.51 73.17.19.205 93.155.49.126 83.198.251.183 128.37.148.192 147.104.149.183 141.172.89.0 104.63.246.244 1.188.36.155 176.198.163.175 19.200.152.47 142.131.25.122 147.192.31.183 252.70.27.190 155.187.32.138 214.35.204.45 165.140.105.161 13.255.141.254 220.33.81.162 141.190.124.211 237.124.146.146 15.79.117.141 238.156.88.71 199.2.101.17 2.43.153.202 208.57.93.138 37.218.24.215 220.122.156.170 235.240.205.149 215.24.157.76 177.15.239.149 253.77.167.82 187.71.94.159 221.26.139.4 7.211.52.171 123.103.159.127 50.117.236.17 228.103.118.209 237.3.33.232 2.36.183.144 182.207.212.144 250.39.192.83 133.46.89.75 12.95.239.146 76.170.91.252 154.33.194.117 149.163.120.104 4.45.45.178 150.151.130.73 127.130.181.102 146.23.63.228 209.52.0.135 200.179.88.38 237.182.117.134 95.8.232.136 105.146.136.45 73.80.242.189 181.3.78.167 156.182.15.28 53.51.213.248 149.216.146.63 248.232.106.76 234.197.163.100 163.76.25.66 104.253.36.201 87.59.63.157 135.67.241.196 206.61.168.95 232.31.65.155 209.50.21.109 31.115.190.3 95.71.52.214 135.32.22.173 130.236.163.120 92.1.72.51 153.157.154.244 59.232.152.37 117.137.211.44 44.115.189.111 139.99.119.0 136.65.208.66 117.149.72.188 249.57.224.106 147.121.8.151 131.1.174.74 139.243.209.201 69.207.79.207 210.151.212.195 67.216.134.111 116.163.144.10 150.219.15.85 136.220.171.113 63.200.77.194 151.59.143.118 195.113.99.121 120.184.4.169 254.4.212.76 5.109.132.204 188.183.122.242 17.127.218.23 20.253.155.85 246.83.25.203 250.238.68.223 118.94.187.137 110.215.240.95 46.189.79.202 228.253.167.32 9.143.219.4 158.70.56.188 100.25.251.65 44.173.50.72 149.2.187.178 158.147.57.226 10.216.201.27 226.42.219.143 187.64.188.159 113.49.155.85 106.134.175.61 7.251.245.165 216.23.186.224 115.12.162.11 238.91.123.99 109.253.77.149 92.116.185.150 0.192.11.238 170.216.52.29 133.3.235.238 85.46.198.204 74.244.190.42 222.43.116.115 32.89.97.0 98.158.143.7 176.35.100.61 213.185.82.207 169.7.255.73 218.60.255.179 69.224.50.236 234.127.195.119 150.226.254.1 43.242.137.33 219.221.135.188 208.22.89.38 193.95.54.181 234.96.130.208 253.61.4.192 110.175.197.35 52.81.170.105 3.147.164.56 33.229.120.118 32.35.117.54 127.208.198.6 65.93.126.64 255.212.76.114 82.73.99.65 83.58.80.218 190.150.60.223 236.27.9.187 78.217.128.15 50.10.134.63 255.96.240.127 146.58.53.54 113.250.177.37 37.157.224.152 107.208.131.248 113.185.49.53 57.246.119.78 203.6.234.157 236.125.168.11 190.122.161.159 64.108.115.206 145.200.133.54 248.254.183.50 129.25.236.164 147.42.80.165 213.122.159.167 94.5.66.139 134.90.220.85 171.68.249.160 158.147.70.252 44.39.188.117 231.155.130.214 166.177.119.27 196.184.131.164 212.162.52.113 120.208.242.59 200.8.41.40 150.185.130.137 12.63.153.14 136.204.67.241 69.63.216.201 194.74.80.132 41.99.45.233 236.203.105.127 191.36.142.96 113.34.215.55 187.53.252.41 185.42.108.158 215.89.187.19 131.100.149.147 37.252.154.187 3.167.219.159 30.113.246.65 94.39.14.255 255.2.170.171 246.75.104.49 109.59.106.133 16.99.85.23 1.106.160.242 242.33.49.50 185.86.188.225 0.65.143.217 200.252.20.17 55.147.246.230 65.239.118.119 182.221.149.185 50.243.7.175 152.163.180.27 129.10.251.27 216.55.136.57 24.166.113.180 179.7.35.232 185.75.253.84 38.39.231.243 17.83.128.164 76.147.224.208 205.241.83.74 200.120.69.17 208.210.40.69 33.120.80.98 54.190.95.71 41.212.151.81 217.115.115.112 242.140.89.221 88.129.133.119 251.158.8.50 32.57.92.100 236.16.202.189 209.68.138.177 137.140.39.158 65.230.180.209 10.164.64.23 218.76.181.133 149.24.189.191 14.97.120.230 75.21.25.95 39.197.159.163 113.21.70.46 39.146.238.10 119.85.214.123 190.20.83.239 159.122.54.117 179.171.159.168 113.35.141.109 38.252.168.135 45.186.107.151 240.254.57.90 69.27.31.82 107.192.220.160 53.202.80.139 56.7.129.175 137.62.233.199 179.185.80.36 68.192.96.35 212.115.58.107 160.133.167.230 174.73.132.194 38.154.157.160 252.41.176.137 77.228.91.252 36.230.20.114 181.26.114.163 223.239.15.134 148.224.2.113 70.59.91.158 162.187.129.95 57.236.84.109 96.32.157.175 46.170.0.202 120.237.156.4 72.214.56.243 85.0.165.128 3.143.128.149 204.75.62.14 92.93.145.180 139.135.38.171 78.56.71.172 179.175.86.55 65.159.70.52 246.144.104.118 229.224.175.78 200.89.183.120 56.185.176.42 55.91.120.153 9.104.85.98 115.163.129.245 35.27.226.138 176.220.28.149 2.72.83.181 141.62.41.143 48.252.81.178 165.161.115.9 8.152.235.50 33.227.251.223 21.234.212.4 113.91.205.200 244.90.131.238 166.153.214.205 195.67.110.11 51.186.17.245 174.7.61.118 237.63.12.83 59.30.254.35 176.131.35.140 162.187.112.246 109.118.149.189 238.85.45.147 247.145.61.3 19.89.93.216 17.211.225.238 182.5.72.83 25.24.94.39 82.186.72.11 19.141.177.107 183.242.43.41 215.48.203.194 196.189.165.243 11.101.253.228 210.6.124.67 138.168.226.175 72.108.119.82 13.78.234.44 118.223.187.4 209.152.22.28 128.232.23.70 60.30.30.73 31.125.158.176 57.93.78.248 22.69.13.87 20.222.150.218 25.131.175.170 33.36.229.63 40.149.148.9 87.53.174.56 92.175.44.112 243.222.1.194 184.12.43.58 212.17.129.121 228.61.0.30 101.250.25.207 210.135.83.185 202.102.223.2 176.248.60.24 174.145.103.103 103.250.240.91 125.79.53.45 132.211.87.141 177.18.60.206 218.66.75.180 119.20.40.27 217.80.200.39 142.133.176.143 209.54.182.19 3.88.89.232 99.208.216.80 171.120.181.44 55.162.219.251 101.210.206.127 214.112.41.255 159.87.81.250 104.99.155.195 45.150.100.128 254.20.143.145 174.20.192.165 2.164.197.224 34.44.188.219 206.246.151.35 11.54.147.25 164.71.102.107 226.138.182.123 6.23.225.221 62.137.55.112 211.37.197.167 213.57.182.216 105.17.195.179 28.180.243.198 192.108.96.181 68.88.45.91 162.252.47.194 213.37.10.9 23.90.49.85 169.224.17.143 120.109.215.133 182.53.164.17 68.43.174.238 48.97.188.128 82.244.30.195 248.80.139.156 203.5.94.220 247.129.209.250 191.236.66.115 110.27.145.205 204.31.139.180 47.157.111.142 143.178.187.175 157.218.177.113 192.185.67.150 237.231.114.77 43.43.21.52 137.201.83.103 53.245.4.235 54.238.140.156 2.77.30.10 79.127.10.244 226.207.59.87 13.65.220.26 51.252.196.161 130.184.148.231 181.110.156.132 10.253.5.102 72.41.29.206 189.146.101.155 205.209.225.164 100.245.239.198 37.244.231.74 141.20.248.210 246.42.251.42 73.135.235.117 143.141.215.128 147.21.148.32 121.205.233.71 237.102.201.25 7.83.115.221 145.204.124.201 188.226.85.65 230.39.249.163 201.237.231.75 43.15.47.147 63.24.15.88 50.2.167.25 161.168.164.223 245.205.121.67 229.44.95.168 121.22.254.163 155.63.163.211 210.229.147.92 211.243.35.185 92.203.141.170 15.119.250.174 215.33.36.77 27.75.180.201 40.173.40.93 75.92.25.231 223.167.27.80 107.18.216.172 214.17.182.226 20.152.116.203 33.130.222.25 151.161.168.26 235.201.108.83 146.239.115.165 63.96.125.10 13.222.106.175 83.248.39.240 11.143.107.80 41.183.78.100 11.94.180.116 125.84.153.133 19.88.180.145 145.42.155.187 120.185.197.77 221.111.228.195 92.12.224.140 213.0.127.53 53.58.215.4 168.199.224.125 155.227.131.68 250.253.206.199 16.117.2.56 244.174.86.117 192.226.211.126 221.167.102.104 209.156.45.237 42.203.225.74 122.224.82.153 228.69.23.193 135.14.124.95 118.186.22.65 13.126.141.51 249.140.60.57 105.92.255.140 25.174.68.25 3.54.73.56 49.218.89.254 217.127.178.33 247.138.101.240 98.83.190.177 229.165.230.33 233.180.18.100 156.69.26.237 70.115.233.153 93.190.172.89 20.105.96.141 51.156.15.39 61.150.98.68 140.19.7.217 218.254.114.254 124.213.47.236 178.99.48.119 203.44.20.190 54.52.157.132 178.85.130.172 88.63.173.137 176.26.82.95 217.51.119.143 54.183.72.15 239.137.144.166 28.120.238.131 232.172.116.17 142.61.110.1 236.225.177.221 187.40.158.69 3.171.48.190 9.179.30.222 69.158.171.209 244.149.53.189 70.50.159.181 52.218.81.83 187.196.39.174 0.153.53.209 244.91.171.142 84.21.178.11 9.213.53.37 210.236.26.110 173.4.118.53 127.143.11.117 154.120.223.172 223.56.255.67 223.124.127.196 63.2.216.201 181.124.11.208 31.226.36.57 137.43.213.53 117.165.82.199 222.186.81.176 51.180.129.33 105.241.151.22 177.215.65.191 230.55.5.105 243.46.97.134 195.222.246.72 240.86.27.233 147.131.129.198 11.30.44.22 215.144.178.160 219.167.24.35 40.148.229.36 67.126.127.49 144.68.162.146 99.52.169.232 11.96.52.24 59.73.18.211 174.242.149.225 32.103.146.81 33.71.147.216 235.138.49.132 53.183.121.255 22.162.227.213 191.235.184.106 26.129.174.105 89.239.11.186 216.219.103.190 166.136.103.95 15.58.30.191 137.131.36.156 118.165.191.170 78.199.49.180 6.223.234.254 23.90.98.207 195.72.80.112 221.128.228.195 231.207.92.88 122.77.17.15 41.217.150.206 202.16.108.132 112.72.241.142 168.77.202.225 33.240.222.55 100.170.205.173 17.69.29.48 187.127.248.39 182.167.173.26 199.155.94.233 202.103.41.249 239.171.228.145 26.144.3.22 26.143.49.148 118.106.81.81 74.65.48.180 64.148.108.71 135.86.55.69 127.58.248.19 156.6.142.41 124.193.25.64 12.118.91.95 134.131.41.149 99.70.2.12 74.52.49.249 24.56.158.144 201.46.231.118 143.166.14.91 2.183.14.52 83.184.156.5 92.226.242.111 136.169.20.243 48.103.227.199 43.66.244.254 121.100.131.188 204.160.6.198 144.155.141.194 234.55.132.219 217.147.156.111 125.92.61.16 24.121.63.20 11.184.200.136 124.156.29.203 56.126.100.97 32.132.14.169 67.121.168.155 207.61.110.107 143.10.252.62 6.202.165.175 101.41.163.28 81.93.255.199 123.240.84.204 224.149.127.34 136.62.220.67 54.138.95.133 212.176.237.172 99.93.175.161 113.244.83.253 242.226.206.119 162.195.191.172 95.73.103.67 80.35.171.252 28.195.117.138 199.82.92.32 210.96.209.75 168.116.161.160 137.24.62.128 107.122.128.239 119.99.55.128 29.179.146.41 66.254.161.86 164.40.159.240 79.67.152.73 249.224.175.214 255.78.187.183 184.248.172.1 76.67.188.148 252.209.233.2 147.52.82.212 96.187.201.169 111.235.230.187 227.57.162.16 85.114.82.76 230.93.198.106 68.60.231.174 86.173.129.207 39.240.28.13 43.125.6.69 25.14.199.242 193.92.236.141 9.113.176.76 66.138.144.22 56.208.184.155 81.143.215.15 62.194.124.76 96.26.16.13 188.48.40.84 220.197.171.3 133.216.244.147 228.47.113.169 123.106.92.5 146.72.114.208 187.125.231.59 171.252.156.198 152.227.157.3 213.164.34.209 142.219.128.38 23.54.2.95 148.223.215.1 240.250.162.216 0.51.217.165 84.238.206.85 63.205.251.35 174.71.233.156 233.110.249.110 29.106.101.1 28.129.183.233 46.141.15.156 24.168.150.201 136.8.243.137 47.75.221.38 20.35.201.217 92.64.124.171 174.80.39.100 94.29.184.199 211.153.95.62 149.73.183.178 228.55.193.62 237.35.202.209 169.160.199.147 10.102.198.50 94.148.68.157 203.93.74.104 79.20.54.96 128.20.231.223 162.182.43.103 245.59.189.232 133.227.45.141 89.156.87.212 224.96.59.155 124.90.248.13 195.176.28.68 182.232.0.189 92.253.133.11 79.69.40.75 132.32.169.241 21.144.15.8 158.236.11.109 104.213.224.128 131.224.89.189 136.181.148.47 178.164.204.62 144.134.95.126 94.214.193.46 255.212.158.58 148.252.241.146 119.225.250.31 153.57.193.17 111.103.150.18 170.193.224.190 182.60.16.44 168.22.31.98 103.218.54.227 151.249.236.182 161.239.228.98 107.132.61.117 140.35.26.5 158.247.132.106 20.119.230.37 110.88.237.33 42.100.126.98 33.103.174.191 216.200.72.9 6.0.183.18 49.47.233.207 65.2.242.22 20.140.21.160 52.178.109.229 39.191.222.21 128.48.242.108 128.94.214.63 144.70.164.211 12.236.25.59 68.137.21.36 75.198.175.84 132.124.130.254 53.6.212.205 217.51.163.216 124.212.56.76 36.8.104.42 180.161.52.108 86.153.224.55 141.3.115.6 83.195.223.10 105.27.90.54 237.171.130.23 232.25.210.167 7.91.113.122 186.175.108.255 138.74.156.47 189.163.148.244 181.104.60.93 194.24.233.94 174.206.184.144 4.187.126.32 196.45.202.83 182.123.193.215 184.53.227.106 90.2.15.168 80.120.32.19 122.62.164.191 110.106.73.183 76.188.74.83 151.242.220.170 187.112.91.94 157.44.44.68 242.84.80.167 90.147.153.216 64.215.252.232 176.180.31.204 46.176.117.213 179.96.94.171 215.6.51.158 21.48.213.24 33.28.79.102 88.84.103.22 254.112.176.144 46.187.225.229 225.94.185.81 217.73.36.167 190.189.88.122 141.158.209.77 194.89.131.181 135.17.205.97 64.28.29.181 57.131.155.211 78.205.154.84 60.91.106.238 255.175.58.13 160.36.225.118 13.168.61.26 155.40.223.156 167.7.140.208 127.235.80.39 141.102.217.216 134.164.212.205 211.193.84.232 210.34.214.171 158.46.85.79 72.114.5.244 163.105.231.134 134.135.127.185 45.180.129.231 250.227.146.154 227.80.216.6 87.127.222.79 18.26.180.189 168.74.205.105 115.105.176.135 72.230.191.219 17.13.134.62 1.170.167.75 30.99.66.2 165.225.61.76 14.40.189.62 82.6.0.209 43.120.26.89 181.224.206.247 186.205.183.7 248.23.26.249 62.241.33.251 19.217.76.7 69.89.216.127 227.187.232.196 149.249.211.25 79.105.189.131 49.52.11.58 242.230.33.24 236.210.205.45 212.10.138.201 240.96.124.22 106.157.39.204 22.6.205.13 139.231.17.63 153.35.96.11 248.72.170.243 14.117.175.35 182.45.94.77 120.250.16.217 200.118.10.112 71.165.207.255 8.183.227.19 77.190.77.29 77.220.141.43 186.148.218.162 4.236.226.229 15.42.96.68 171.40.172.102 146.193.10.45 167.180.129.140 243.244.152.94 111.47.6.21 216.12.73.72 45.189.229.240 127.70.57.1 204.90.55.132 190.225.133.143 58.94.230.238 194.74.159.217 211.162.253.86 90.154.1.81 128.176.73.116 115.56.119.167 190.205.249.171 237.47.196.36 106.150.182.236 83.197.241.72 147.17.138.237 133.108.183.220 100.171.66.82 101.63.54.179 90.164.51.126 70.138.228.169 192.159.181.120 145.197.3.133 80.169.214.25 243.233.35.199 202.32.234.156 169.85.94.247 206.99.254.232 4.87.10.210 133.191.71.58 12.196.145.49 92.169.90.8 182.248.126.104 219.160.79.53 143.114.169.84 171.119.236.163 60.48.37.45 249.55.125.57 169.54.43.37 88.110.201.183 75.28.80.104 193.47.215.42 197.211.30.175 143.54.43.238 128.44.106.160 232.85.149.33 78.245.21.33 95.191.142.156 50.158.136.177 75.102.234.186 221.134.170.197 179.110.160.210 105.121.96.164 199.145.137.153 28.110.238.220 178.230.28.133 179.192.118.221 50.63.126.191 192.30.202.40 21.149.76.157 121.74.153.74 102.94.238.136 175.55.5.77 24.67.168.108 65.66.158.121 128.243.223.47 20.114.17.238 59.153.202.233 247.157.95.184 20.64.14.221 32.212.136.26 69.64.78.191 175.175.78.145 47.81.65.134 142.153.85.48 221.59.70.240 176.220.102.123 240.108.110.45 23.203.199.115 230.151.247.181 180.71.61.202 143.75.180.219 57.236.204.186 41.7.170.185 180.8.37.241 211.144.35.76 101.21.21.116 41.170.5.241 73.94.163.63 89.165.151.35 208.191.147.13 83.255.192.116 83.182.115.182 246.153.222.216 32.231.180.75 74.62.45.178 36.198.199.49 215.172.112.56 229.20.216.38 46.149.151.224 70.226.92.133 167.19.136.88 201.212.64.19 152.216.62.45 248.54.51.5 248.21.191.207 123.144.120.105 228.162.56.134 1.1.29.143 7.20.90.113 106.46.26.119 39.49.159.244 207.198.41.44 60.38.62.60 209.236.217.210 85.205.178.177 118.112.90.112 218.57.193.81 148.76.111.214 13.94.68.0 13.40.29.205 156.133.4.203 76.32.7.84 212.110.95.132 60.111.227.115 104.200.9.171 180.155.14.69 206.166.248.204 233.202.88.21 170.16.201.208 106.208.5.9 77.211.20.165 196.41.50.75 235.137.96.130 79.188.141.133 196.244.34.20 174.246.143.61 207.192.161.148 249.192.36.200 153.111.236.18 255.249.119.88 94.233.36.157 102.34.131.45 30.85.126.116 4.225.80.227 126.79.253.133 0.238.196.194 16.65.69.96 241.142.49.221 158.155.16.209 139.21.158.251 244.131.36.153 23.89.159.103 94.191.49.169 236.109.29.132 217.71.150.127 160.81.91.19 234.197.73.204 50.110.88.100 220.211.18.242 125.77.121.94 70.132.114.232 24.123.189.183 165.124.245.252 86.90.33.165 247.139.36.39 238.217.253.188 162.208.79.251 49.127.142.178 219.87.152.236 221.79.70.236 76.240.206.161 8.232.107.253 181.93.160.25 126.93.39.200 117.79.45.145 16.134.114.28 113.178.25.174 23.49.184.103 200.63.141.22 102.116.15.218 170.112.22.205 76.164.21.97 76.62.138.226 234.104.155.71 55.247.228.13 64.107.212.81 128.121.203.194 102.172.94.250 81.173.230.17 138.138.255.162 216.207.34.41 31.134.45.36 97.229.60.111 184.112.30.107 136.30.105.126 103.27.35.201 223.212.162.186 43.10.155.72 122.137.115.25 75.119.165.49 179.49.95.131 79.50.29.202 159.86.226.83 118.230.58.247 79.65.23.32 232.91.78.96 82.34.117.190 133.125.161.183 10.139.175.125 145.117.104.172 166.178.247.251 182.223.201.133 40.66.107.248 226.32.50.21 103.182.102.65 94.101.169.242 12.241.237.1 117.115.202.197 96.42.201.42 5.226.193.6 53.86.1.172 24.248.69.172 159.255.141.59 33.249.71.3 146.64.149.47 61.41.10.192 173.105.194.133 57.196.189.162 145.72.81.222 245.236.75.208 144.240.210.75 182.29.23.235 37.57.232.224 6.32.27.100 247.49.5.6 168.215.13.197 137.254.216.138 191.36.232.51 194.158.230.228 133.185.128.174 198.55.18.38 129.183.8.232 92.250.241.222 216.66.23.93 125.206.97.78 246.4.99.39 8.59.16.233 49.212.140.136 13.78.71.126 108.148.115.5 124.211.148.90 248.247.211.214 77.16.255.248 20.166.121.76 212.183.176.104 177.207.226.48 125.220.144.164 251.190.118.31 127.203.85.129 121.240.105.55 202.67.155.118 66.96.99.51 174.25.221.124 54.145.223.206 92.102.142.30 165.63.196.169 252.164.161.4 132.230.253.253 8.133.111.20 13.73.157.15 247.80.105.126 255.9.198.66 57.244.129.175 34.164.188.33 70.249.193.165 116.253.75.33 197.87.91.151 56.1.145.101 224.127.234.79 4.208.15.162 100.60.2.230 7.101.38.223 151.239.155.123 30.147.94.61 111.167.24.60 90.99.127.134 1.103.39.175 204.147.156.168 62.234.162.190 12.24.23.55 145.54.228.24 253.159.219.139 113.47.140.115 32.121.194.108 60.160.119.69 82.3.36.152 26.13.130.111 202.253.75.200 59.248.11.44 67.14.200.232 102.83.244.33 129.174.135.161 200.28.60.143 221.90.94.115 125.48.241.232 75.158.210.77 3.225.198.195 156.13.10.171 195.51.63.126 129.96.51.212 162.246.86.201 88.202.176.246 228.223.7.209 53.235.75.234 228.131.73.244 205.55.247.158 89.130.32.224 17.65.95.251 153.247.240.121 104.228.208.47 161.9.188.64 27.24.103.59 118.193.241.14 62.115.136.146 117.22.31.157 6.38.65.195 245.207.135.116 166.47.147.198 172.212.186.219 121.72.198.175 195.33.143.67 11.6.209.239 59.237.153.181 193.170.138.226 87.175.104.9 225.150.152.224 227.185.176.47 38.20.243.222 155.0.8.33 122.189.212.225 195.215.66.39 39.150.163.21 52.102.24.230 119.61.119.75 59.45.207.248 77.166.46.189 4.101.94.244 205.116.9.35 238.201.45.92 208.149.202.238 58.151.204.77 237.170.173.1 87.36.47.219 101.103.100.163 21.36.9.116 161.177.217.124 118.221.147.45 125.1.237.212 193.247.39.144 200.82.40.63 154.190.226.25 29.135.226.176 214.198.211.190 173.7.207.201 113.85.120.170 213.123.11.121 180.64.164.215 33.100.197.5 80.160.160.1 42.115.112.134 212.136.21.118 203.82.223.56 51.113.51.18 125.212.57.232 130.116.242.164 221.205.11.79 77.160.232.19 164.230.10.127 164.119.227.143 78.167.171.89 39.74.178.255 175.84.123.206 240.13.98.228 62.127.18.206 117.115.110.156 81.135.233.177 61.25.208.106 57.4.130.246 123.89.163.227 249.36.16.31 176.51.173.169 92.177.121.32 232.33.236.119 175.97.252.31 181.67.160.187 208.203.122.37 247.109.174.52 236.22.120.139 1.218.124.133 196.180.105.131 212.233.245.46 7.161.145.125 109.118.111.102 152.204.134.166 226.115.222.195 253.20.218.171 99.35.189.68 224.183.92.150 122.13.150.85 198.108.207.44 255.9.2.143 95.129.159.102 172.31.213.145 204.139.170.58 160.161.215.10 171.17.85.169 194.221.192.167 186.35.93.76 46.140.203.126 35.135.179.195 233.74.60.82 233.96.93.245 140.155.98.112 219.120.75.130 136.128.59.176 217.96.113.69 99.181.108.230 93.253.4.72 6.178.52.249 174.79.6.187 60.61.183.201 213.57.226.29 169.85.87.114 127.231.45.169 46.230.231.111 194.80.253.28 221.129.14.184 49.14.187.82 102.43.84.211 73.28.65.60 179.66.79.160 73.231.246.207 181.119.56.130 11.220.27.29 159.245.93.162 218.242.122.59 57.46.246.53 103.103.116.19 94.246.34.8 250.65.203.166 205.208.24.84 119.216.85.180 127.246.125.172 149.253.4.114 72.236.228.219 14.204.51.69 130.8.184.169 173.209.27.242 125.162.123.2 248.157.37.158 188.86.50.149 38.191.43.125 75.130.165.254 179.169.159.95 195.81.145.104 66.12.47.15 74.143.241.42 229.96.56.208 127.128.178.199 96.244.155.101 50.33.193.156 211.70.105.100 155.84.35.139 195.170.64.188 3.2.44.27 103.229.30.30 51.87.124.151 182.21.98.111 136.66.99.13 210.232.157.9 247.89.29.108 251.18.165.205 0.210.90.114 132.143.255.23 221.173.183.117 57.183.219.180 77.6.177.253 218.228.1.58 244.220.23.140 21.216.51.167 225.69.25.162 222.77.149.101 55.61.197.50 237.220.5.93 52.79.227.157 164.173.77.29 88.237.142.36 214.54.137.44 195.135.254.213 171.94.150.8 100.126.180.174 64.39.112.148 9.217.73.8 64.252.123.28 252.182.100.236 170.97.74.164 12.149.150.79 255.49.40.129 86.130.248.208 198.59.135.143 101.127.50.236 216.163.230.212 82.193.18.87 146.245.114.223 251.168.156.39 195.101.0.40 136.120.202.125 254.92.252.88 122.89.223.250 220.20.119.241 53.113.91.181 244.154.130.78 170.132.180.176 109.53.116.21 117.247.12.203 170.52.174.1 1.225.104.62 31.6.187.193 246.188.33.126 116.145.36.29 131.227.20.73 102.81.175.146 178.73.26.141 141.117.61.13 232.130.23.170 172.249.78.242 17.39.19.92 209.45.135.142 127.117.46.92 153.103.75.243 13.245.191.85 151.250.72.169 119.250.20.233 71.54.171.184 71.24.154.222 215.64.206.54 0.222.27.103 19.171.186.15 15.126.75.49 105.83.23.176 43.50.223.47 99.133.55.167 15.92.84.17 244.86.125.0 40.129.18.113 203.37.18.152 122.127.139.24 129.22.121.75 166.45.16.223 170.247.252.173 100.213.133.31 249.147.61.82 11.241.119.11 10.114.39.224 65.66.153.43 133.183.24.90 56.116.94.247 2.91.95.61 82.216.83.123 109.87.168.213 248.230.71.92 1.33.230.107 146.82.10.109 55.218.181.46 152.126.238.225 78.169.17.207 75.217.102.81 164.51.47.234 134.233.50.96 36.169.72.255 54.8.17.60 87.185.37.169 109.217.57.138 104.174.162.254 40.19.203.176 92.129.191.255 221.40.121.69 218.64.64.146 21.96.177.76 40.118.17.69 68.187.128.223 141.81.189.206 55.17.229.119 218.152.83.45 51.29.254.55 64.94.202.213 27.99.89.149 66.19.92.85 154.28.123.185 201.95.40.56 19.30.4.121 165.16.43.41 213.68.167.115 235.152.195.28 133.243.145.225 187.46.154.200 133.10.15.21 179.204.213.62 59.58.48.65 13.2.155.172 178.220.147.222 37.149.235.11 118.28.2.156 91.249.232.151 192.32.114.199 65.145.110.197 24.79.113.71 169.184.220.64 253.134.152.49 7.22.127.248 66.154.229.27 223.193.91.138 223.166.213.234 78.132.86.14 137.83.171.153 66.180.120.49 87.165.241.41 218.70.55.118 131.136.172.214 91.209.203.139 152.184.97.152 145.234.14.62 171.249.227.221 196.97.110.152 59.74.133.168 233.5.220.233 252.37.45.1 78.207.199.15 208.78.109.156 31.206.31.209 18.185.59.121 189.100.176.94 49.167.97.125 214.203.138.137 125.0.9.102 11.90.112.89 190.87.38.150 137.177.50.103 254.107.201.16 175.182.130.166 94.213.254.155 188.35.19.85 142.34.86.104 109.188.184.24 126.177.66.198 62.213.39.132 147.79.170.175 109.136.231.232 110.127.210.160 170.172.228.108 251.154.198.44 197.18.209.106 222.47.125.24 101.152.194.101 186.142.96.176 48.151.89.93 30.219.96.131 193.151.19.77 119.170.42.156 167.80.86.106 92.230.182.246 116.241.19.166 203.228.1.241 61.26.123.76 240.152.99.133 167.71.95.197 113.118.13.156 3.115.56.37 245.110.9.49 170.254.172.80 243.239.229.234 185.206.11.56 215.154.187.120 182.246.116.124 83.50.214.193 255.74.126.210 236.153.136.63 120.62.139.120 162.195.171.98 129.54.77.63 141.56.113.252 244.227.90.252 42.210.17.152 186.62.131.125 17.169.205.25 26.139.180.113 120.234.45.199 223.55.231.46 6.33.122.0 212.49.41.41 159.254.192.15 7.150.152.236 29.133.86.228 67.234.165.33 1.200.9.181 222.215.23.244 59.154.20.150 124.55.181.3 133.162.134.97 246.212.158.5 128.85.217.234 178.72.111.90 110.55.131.55 239.135.36.253 10.37.26.56 228.7.130.81 193.89.39.181 130.251.127.205 246.39.61.165 197.190.144.94 27.34.118.101 101.69.98.154 83.205.200.113 60.137.118.105 203.148.55.134 251.113.49.175 116.240.180.99 82.146.1.221 40.203.190.21 189.200.105.101 31.39.193.76 236.68.140.51 162.84.110.140 102.29.219.37 237.94.67.224 88.97.247.190 255.241.248.20 41.167.201.234 38.222.33.39 24.133.169.236 147.41.120.86 3.165.176.120 120.21.124.26 193.62.1.139 35.194.52.35 188.75.239.172 117.209.100.63 92.20.81.49 141.168.238.44 243.105.27.65 7.175.98.106 196.255.116.140 151.50.76.34 116.159.32.86 18.187.254.84 165.196.228.12 91.47.153.209 175.168.209.198 158.7.234.248 42.230.14.76 149.222.139.13 11.175.207.48 105.251.142.158 69.29.82.191 240.4.160.105 89.171.114.29 135.210.150.252 250.132.239.10 36.12.94.123 86.13.183.168 180.107.80.122 71.233.160.83 41.180.48.195 113.223.132.122 160.216.41.47 158.240.234.167 153.44.166.43 32.238.159.119 165.110.80.162 89.175.220.162 237.56.57.174 252.14.50.196 34.34.136.91 60.157.43.77 165.228.39.45 175.124.71.49 186.7.174.121 109.81.35.231 127.16.119.28 218.111.244.3 140.139.123.172 18.150.85.162 13.162.247.132 155.172.2.253 138.10.74.233 213.224.129.204 112.145.31.61 76.45.38.228 166.38.84.252 101.225.238.51 118.127.169.129 246.20.92.204 81.249.163.161 182.150.59.236 75.81.73.3 156.96.86.58 104.139.135.250 233.40.240.244 225.150.229.242 229.254.118.231 226.195.98.202 43.24.106.255 146.119.86.103 231.69.111.231 129.224.0.202 250.66.13.198 155.160.122.136 76.202.12.107 190.184.220.75 85.173.230.246 85.55.113.226 133.88.248.186 96.206.61.199 4.30.62.131 167.106.178.161 89.191.159.72 96.206.78.141 78.132.166.139 240.233.17.122 84.129.246.126 204.50.77.122 4.233.240.30 179.56.93.30 114.162.24.129 192.171.127.33 144.203.193.224 154.216.180.79 6.58.109.84 116.50.89.160 178.122.95.38 104.91.187.249 21.27.143.19 173.175.41.29 119.223.214.194 101.169.145.6 15.204.126.234 158.243.25.177 92.138.96.110 246.135.201.16 150.231.210.81 24.126.11.46 82.65.160.140 9.104.232.242 214.113.141.9 155.219.159.137 128.156.80.139 167.130.7.233 249.55.196.159 190.103.14.77 60.167.69.34 196.177.160.195 202.124.234.164 141.68.223.190 9.39.14.126 144.98.211.181 85.173.237.15 177.176.56.236 134.194.163.104 43.235.230.84 203.141.125.201 217.44.229.73 66.174.210.33 175.114.122.48 253.188.228.122 186.89.218.131 221.224.172.58 93.36.227.191 76.136.150.98 40.95.3.205 200.158.25.238 61.59.100.244 163.4.18.35 115.222.18.44 66.39.191.185 91.232.50.98 138.173.251.181 165.230.42.202 182.138.163.38 195.167.97.58 43.91.105.232 246.26.197.170 117.191.97.161 166.57.237.242 113.114.93.31 12.91.228.46 165.220.186.175 205.242.21.35 211.69.180.7 194.177.173.18 124.16.222.65 183.135.227.177 39.70.176.52 182.70.155.109 219.124.218.173 70.50.127.30 138.215.204.54 99.10.73.217 185.2.250.213 117.90.54.50 148.11.246.109 234.46.2.209 245.31.200.53 63.213.168.88 108.108.165.87 144.131.77.73 87.103.78.20 78.50.185.132 51.143.20.205 168.233.199.229 150.135.152.10 90.4.140.187 17.234.248.168 86.2.56.69 158.37.147.235 241.30.33.55 205.250.106.107 58.118.18.216 211.7.140.67 141.15.44.58 34.166.150.155 225.162.183.251 128.25.51.106 94.141.98.225 38.148.229.95 1.36.54.88 132.223.103.253 205.55.172.146 153.31.12.139 76.214.157.123 174.135.118.243 81.197.112.24 169.150.58.136 75.137.5.80 111.255.147.135 64.159.234.215 230.245.212.95 186.216.88.65 236.2.236.192 217.204.134.217 218.53.110.6 191.52.147.120 158.176.149.225 30.50.221.123 231.238.124.106 149.47.150.23 110.44.50.246 50.135.35.239 224.11.143.41 215.155.220.85 52.207.46.187 235.93.34.89 56.19.117.7 132.105.70.22 248.78.212.156 96.191.45.232 70.175.148.160 29.22.113.238 147.224.111.90 38.162.115.227 210.4.228.39 207.31.152.95 244.106.38.200 11.88.198.210 133.217.21.241 223.131.243.241 34.16.170.101 164.207.9.193 153.248.158.91 238.246.106.55 241.253.176.234 237.114.17.205 215.144.10.138 121.206.213.176 100.47.133.154 104.74.234.210 62.165.183.188 227.105.56.31 73.182.111.82 105.174.173.11 130.149.113.104 190.197.138.190 170.26.215.39 150.131.54.28 11.209.9.208 49.64.82.130 58.190.54.4 168.95.231.177 14.159.96.20 140.42.164.33 185.7.85.122 155.171.181.119 98.103.143.225 177.205.109.250 44.86.53.51 80.152.130.93 129.137.81.13 158.252.111.224 59.204.50.137 62.195.165.210 255.142.59.248 155.61.144.51 20.114.37.236 37.14.86.88 57.7.72.165 87.202.62.152 73.154.234.56 74.86.161.70 153.124.136.47 168.171.189.251 138.195.122.219 200.233.29.5 31.215.187.19 247.33.24.179 199.22.69.163 120.19.53.54 158.238.31.119 104.108.182.150 157.3.189.250 73.252.155.47 199.161.243.183 248.2.235.239 136.14.26.17 84.81.141.227 203.65.205.197 247.20.193.231 219.164.107.74 232.245.87.134 179.105.108.63 177.142.58.102 89.179.178.244 176.253.244.57 186.215.252.105 245.180.128.114 0.77.29.242 78.182.129.215 202.108.56.199 98.177.57.132 173.151.132.65 2.68.243.120 33.27.85.194 9.242.161.19 82.119.244.155 106.174.226.72 242.185.143.29 237.109.67.55 152.133.229.169 253.249.211.3 243.184.155.86 51.38.142.244 248.155.34.15 213.207.175.246 173.9.32.138 115.160.235.67 81.111.21.199 140.41.20.250 250.213.19.208 198.41.119.128 244.82.100.14 38.200.107.86 181.188.168.25 19.190.157.114 253.159.5.219 79.39.35.40 253.169.125.168 201.39.26.11 164.132.81.229 232.80.89.81 57.53.23.115 216.230.24.229 157.124.54.69 205.38.67.178 160.40.97.41 230.98.133.32 130.239.89.126 205.240.38.252 77.110.99.162 241.157.168.209 48.197.232.38 238.245.153.246 35.11.58.212 214.240.45.255 234.183.187.254 87.52.173.94 135.234.75.10 117.142.235.132 11.100.114.168 96.72.207.214 189.222.146.176 194.241.4.75 220.168.18.50 215.114.160.37 116.133.223.94 198.116.159.178 70.154.201.18 79.230.242.205 26.155.58.18 15.118.56.17 136.61.162.167 57.217.107.25 197.196.236.119 251.49.29.139 174.197.19.177 194.139.233.10 35.117.184.131 37.139.52.242 99.187.84.210 58.73.89.114 55.245.162.118 183.87.27.234 94.217.21.21 5.178.220.186 54.235.122.163 143.230.8.211 169.171.12.34 78.24.191.119 221.232.77.73 208.146.244.34 23.220.253.46 227.45.33.20 71.229.145.112 19.4.31.133 194.36.5.134 254.115.135.232 61.152.182.218 180.169.119.136 28.68.29.212 0.231.154.230 75.209.18.13 179.196.84.243 131.150.77.229 180.64.27.35 61.50.78.197 185.224.19.130 223.148.112.5 147.74.106.154 239.38.90.249 212.31.48.62 252.126.29.167 40.35.166.45 29.57.244.29 70.208.138.82 134.239.205.129 252.115.236.35 154.163.193.248 137.141.136.138 13.227.39.243 176.129.161.42 72.115.40.233 47.98.95.246 77.92.20.248 113.230.127.181 235.48.143.180 99.30.95.11 158.121.111.25 239.219.96.146 222.176.216.73 13.152.216.113 17.160.107.98 96.77.135.188 94.25.136.65 3.176.75.9 215.243.79.247 173.226.125.161 233.93.224.137 28.158.154.231 2.230.31.198 166.143.16.185 145.124.197.212 3.22.172.54 59.66.202.255 8.121.50.163 42.23.26.239 168.39.202.91 86.37.40.233 10.159.112.197 145.174.101.129 235.203.24.249 196.180.122.109 133.22.253.44 82.146.62.155 19.92.41.131 73.222.82.45 233.155.79.220 190.233.163.230 137.69.131.68 125.155.50.126 167.213.224.181 126.53.200.213 87.108.157.105 197.159.234.145 48.5.210.105 225.235.244.40 68.132.35.174 33.242.43.148 119.146.246.127 7.199.80.146 188.229.150.205 210.0.229.173 135.162.150.169 123.196.255.60 136.207.128.234 109.233.87.197 174.85.170.92 149.127.82.130 156.90.61.133 102.165.195.140 98.24.190.108 93.100.161.90 119.164.71.194 241.41.149.6 104.203.2.119 3.199.207.90 163.175.163.180 194.3.3.147 186.84.116.9 30.115.143.202 97.141.130.167 158.130.134.59 10.18.131.126 216.36.44.88 219.51.147.227 27.58.126.155 99.148.37.89 33.38.90.195 97.141.10.189 239.12.155.18 189.214.3.137 114.31.107.97 30.119.155.46 163.245.192.177 4.2.175.196 246.133.6.98 31.0.200.161 14.84.73.153 198.81.196.197 71.231.182.48 34.240.139.32 31.248.39.181 141.217.209.40 193.48.16.236 226.44.27.201 227.81.7.208 241.124.28.7 99.134.244.6 240.80.160.120 210.147.52.117 130.3.95.178 85.77.232.125 50.162.41.223 208.107.149.161 12.245.167.175 109.49.189.178 115.119.163.156 242.175.6.127 74.114.104.8 92.233.114.164 238.255.115.11 245.21.64.90 117.135.194.252 57.194.29.82 96.39.224.43 106.140.119.237 253.219.67.158 32.13.252.217 148.244.166.3 91.135.24.193 148.178.185.136 43.66.105.252 216.246.155.240 11.215.130.103 251.223.155.199 46.50.190.211 22.90.125.249 49.237.211.145 20.215.9.210 29.86.73.185 220.67.31.135 175.178.200.77 25.148.11.163 60.133.215.176 175.180.62.163 179.204.213.179 65.9.77.70 135.176.73.39 81.153.229.162 163.203.101.224 205.14.235.71 98.23.199.174 57.247.233.98 30.85.215.35 118.94.222.7 237.197.163.242 41.132.27.61 67.160.169.131 245.168.112.253 4.32.10.161 136.124.57.69 51.209.219.163 124.217.82.14 208.18.61.171 19.82.223.111 159.239.46.198 115.71.41.78 238.7.45.194 43.167.185.7 235.192.204.39 30.143.142.34 11.116.6.25 175.10.70.190 206.237.183.101 231.190.245.66 44.174.92.250 222.170.96.143 127.199.96.99 12.117.70.53 65.202.62.235 108.103.129.245 91.126.136.44 52.200.168.74 78.99.84.187 184.15.69.191 51.234.168.235 181.85.198.198 48.142.162.240 123.14.139.178 64.112.32.16 164.186.158.155 175.77.25.35 152.104.202.59 158.42.94.170 164.241.38.193 223.54.153.81 138.57.217.57 227.202.56.209 15.111.149.221 165.37.55.166 95.240.64.64 204.121.80.72 255.62.22.186 171.49.213.117 80.238.189.238 193.162.40.27 186.173.43.41 183.130.249.97 231.175.226.117 136.32.252.166 51.63.8.169 182.33.41.207 64.10.191.214 197.166.255.153 40.150.27.102 234.80.121.190 241.168.117.251 62.63.68.235 31.29.62.65 206.11.155.176 12.128.247.151 34.203.220.181 152.74.136.233 25.40.208.114 80.37.148.66 114.16.78.195 203.6.85.194 175.58.2.123 135.168.13.224 21.159.112.104 82.206.129.71 237.233.70.179 238.19.33.112 61.120.81.211 47.93.19.206 191.242.105.13 11.66.96.165 139.244.115.141 19.20.219.255 57.101.16.185 97.147.58.161 105.40.125.123 223.89.107.46 222.162.237.59 197.154.67.89 12.160.52.149 195.215.83.53 200.2.248.97 100.204.44.88 168.170.71.92 125.235.143.20 173.109.186.53 14.113.195.246 184.179.117.45 203.108.244.201 3.55.117.232 187.130.137.194 24.225.1.190 89.2.180.242 61.134.81.93 210.254.166.21 171.210.95.211 174.103.223.45 244.130.152.186 215.182.79.176 68.233.212.231 116.101.134.73 51.242.243.58 84.16.250.129 150.14.247.7 203.65.108.172 135.182.162.82 240.29.219.209 164.180.161.78 149.200.126.92 37.173.95.229 198.190.120.212 132.93.119.33 21.16.84.110 37.8.185.4 247.175.147.223 32.167.163.124 125.174.74.45 10.28.110.203 198.26.226.211 180.76.230.2 201.29.227.75 154.89.129.212 14.130.32.233 195.217.206.183 113.99.26.239 133.161.130.81 116.154.104.140 95.130.167.143 116.137.116.11 127.77.133.62 39.161.248.94 32.68.206.153 85.188.235.68 244.86.227.139 126.105.179.226 203.87.202.139 146.192.118.70 31.42.171.183 234.230.229.114 109.31.112.46 140.148.192.78 188.157.139.248 13.146.177.142 136.144.91.68 204.46.184.38 150.239.65.79 132.66.109.21 93.246.1.54 71.150.249.202 139.100.75.167 51.106.187.76 101.211.100.3 22.137.115.149 85.63.134.133 210.190.21.214 233.95.61.161 170.253.226.244 197.184.19.15 2.42.84.226 128.155.16.154 68.12.134.58 163.110.253.145 238.26.148.225 155.50.122.165 38.124.82.103 53.235.5.255 251.177.6.94 22.31.92.193 115.14.143.192 174.30.203.219 250.164.126.126 22.210.216.134 205.158.159.14 36.25.41.8 108.183.100.174 44.186.15.88 177.12.238.135 138.177.157.143 148.148.101.156 63.160.27.97 49.208.109.240 241.69.151.78 5.204.69.165 40.132.166.159 76.156.177.208 253.24.107.166 94.209.238.96 189.72.229.63 198.29.39.235 195.199.50.206 83.106.139.237 77.31.222.129 199.69.251.44 139.33.173.147 162.39.157.250 183.161.190.111 77.42.184.224 113.31.147.224 154.94.43.136 3.33.4.34 19.149.152.139 255.60.34.163 29.145.155.247 116.99.191.51 145.136.52.5 175.131.137.118 37.5.85.124 227.160.61.152 122.211.165.144 120.124.52.144 109.61.85.64 184.122.225.203 165.84.57.203 20.230.149.76 154.219.220.126 119.180.170.6 163.186.213.48 133.44.168.33 226.14.122.100 170.91.174.169 191.5.236.31 60.193.214.0 178.143.193.140 63.106.196.54 139.16.179.97 163.85.66.163 206.97.2.208 182.244.245.15 35.49.40.183 111.96.163.8 3.191.154.113 44.196.228.206 65.211.121.196 226.85.94.162 26.10.168.185 129.54.11.97 0.40.164.242 203.70.52.179 248.185.16.147 26.125.48.225 253.240.30.1 113.122.69.133 100.113.242.165 225.56.3.69 99.59.7.151 224.91.7.96 162.75.126.115 29.80.219.244 67.17.199.24 2.196.228.174 46.93.58.94 50.204.11.183 200.238.93.114 186.128.181.161 20.155.15.63 131.30.62.76 123.255.105.86 90.194.119.99 4.15.80.23 157.247.119.58 37.145.9.189 175.149.214.83 124.173.163.202 215.154.171.38 224.191.157.118 63.101.107.61 171.134.142.44 164.32.70.30 32.197.21.200 166.142.4.82 17.224.113.234 85.39.114.155 88.244.141.134 187.151.191.186 1.17.30.193 34.49.203.98 226.60.152.26 22.183.100.79 249.12.92.188 182.110.117.33 201.26.145.152 43.186.96.103 224.40.214.58 88.127.135.197 119.236.169.203 35.8.202.4 45.202.232.252 0.72.114.20 68.231.33.214 215.67.94.88 109.164.226.43 145.243.2.251 198.28.99.68 23.117.27.239 228.97.145.187 198.61.131.218 102.252.181.119 128.151.160.246 113.49.41.91 182.46.213.133 144.82.64.190 25.152.9.12 148.66.202.230 189.152.208.59 68.87.126.9 213.192.161.56 61.240.67.241 166.45.204.82 124.157.235.175 131.140.48.15 123.251.156.236 249.178.169.227 119.122.150.109 225.221.97.19 160.246.104.108 243.86.111.61 47.61.28.111 56.31.159.26 158.101.241.199 9.198.149.244 164.70.179.94 217.203.215.211 215.238.24.23 8.194.241.234 196.79.61.80 85.56.240.205 2.90.162.195 24.244.72.126 184.78.161.228 173.196.183.221 211.101.233.118 183.2.10.99 80.45.181.223 220.9.213.204 244.127.120.11 164.223.25.150 199.38.202.168 162.251.137.232 6.164.76.196 18.188.147.233 245.61.121.152 172.62.223.29 222.184.245.224 158.136.91.90 79.165.4.43 128.54.154.90 31.253.126.65 106.12.51.106 128.35.248.99 216.94.124.213 209.42.174.133 176.93.115.148 6.96.174.194 238.86.112.41 213.192.94.122 114.218.59.35 18.124.168.197 139.43.79.81 17.79.158.213 87.235.123.218 116.133.106.10 34.28.105.162 17.153.182.20 189.237.12.206 37.39.10.196 3.205.118.199 56.48.30.194 112.164.57.61 212.36.4.149 229.151.249.27 149.154.209.53 138.166.183.98 185.162.34.58 215.208.51.9 50.161.21.140 17.37.130.71 250.138.126.240 4.136.105.80 18.150.22.83 3.17.104.121 135.132.223.97 50.230.232.164 212.65.86.178 138.61.97.133 243.143.77.254 148.170.61.146 119.126.0.103 159.129.251.236 184.234.220.205 204.183.195.11 153.80.160.157 190.131.74.170 156.105.164.32 221.64.78.127 136.71.170.17 32.44.175.104 159.42.110.250 86.231.118.186 154.223.5.181 40.27.177.227 25.74.253.100 230.61.254.53 182.76.217.84 62.130.138.11 184.179.79.238 206.186.89.186 160.174.215.127 209.177.229.25 251.93.107.117 200.233.212.33 80.203.228.244 139.221.137.87 131.244.253.177 44.42.8.2 139.165.226.50 4.211.28.38 132.13.209.69 105.229.28.246 66.160.42.106 86.46.254.220 14.32.233.64 178.100.38.53 40.207.132.220 218.185.73.178 180.188.40.93 146.190.25.68 145.3.111.38 139.197.87.14 182.249.140.224 18.88.160.142 53.200.98.70 88.244.150.215 246.112.245.193 9.75.84.176 159.249.57.219 215.97.1.76 175.210.164.11 195.96.78.148 105.141.60.70 174.118.186.101 254.9.230.74 156.159.207.57 8.147.216.194 42.202.183.187 10.58.74.212 154.109.248.232 157.26.121.122 38.85.66.254 95.108.164.144 85.149.146.223 135.164.1.76 25.195.197.162 155.204.110.149 151.175.98.122 93.255.188.207 167.178.17.87 137.139.50.17 181.239.173.104 101.224.175.138 241.246.83.204 126.190.149.186 63.167.152.220 92.179.146.176 49.9.44.213 5.174.110.139 213.107.16.110 93.80.138.164 22.138.22.136 182.199.173.151 226.129.186.222 140.234.229.18 154.156.254.56 153.23.91.32 127.32.66.49 217.182.95.250 19.57.2.135 174.118.30.37 91.205.228.127 73.87.138.156 249.109.50.23 32.34.182.82 120.160.157.148 31.107.137.0 135.87.245.228 34.97.62.174 208.8.93.146 39.106.53.22 116.117.160.156 20.253.129.131 109.87.26.70 243.217.59.49 161.112.229.11 177.96.11.191 117.237.253.107 108.192.156.108 187.10.54.186 97.38.9.122 237.117.129.86 226.201.19.110 8.211.225.150 239.12.44.102 35.41.140.124 188.13.91.133 4.85.58.177 251.47.184.51 18.92.0.199 190.214.1.93 113.228.134.158 192.42.243.253 96.147.96.200 208.235.49.21 45.135.13.242 1.124.92.160 105.38.242.238 126.34.211.3 79.250.164.81 7.37.241.21 213.116.221.239 30.152.127.41 29.186.24.61 228.1.67.221 98.133.115.138 4.106.116.198 128.47.229.227 116.101.117.51 194.215.108.115 121.145.83.223 174.199.205.74 74.140.53.141 234.15.142.14 24.235.214.59 73.66.204.218 241.190.4.224 17.28.249.216 192.173.31.130 205.56.190.152 184.222.20.6 64.143.213.243 6.132.206.25 237.147.213.45 92.122.127.92 194.170.3.32 0.173.230.197 154.169.231.164 118.107.59.211 126.119.37.196 121.55.76.63 102.55.3.97 0.92.99.231 101.223.238.81 234.177.171.253 190.128.89.15 191.184.93.179 206.6.73.135 154.45.1.255 250.27.203.1 231.135.66.210 11.74.28.182 125.136.46.175 251.163.36.95 73.140.165.85 177.210.18.68 218.44.124.134 108.56.229.100 145.102.94.208 246.100.22.140 187.199.33.68 102.104.250.252 198.227.17.107 254.140.146.88 11.220.146.8 172.251.116.194 215.202.239.62 212.86.215.41 107.185.58.240 60.34.66.98 4.14.242.244 237.194.237.138 228.134.246.213 45.164.29.53 34.41.2.50 193.9.154.2 56.76.194.25 64.141.253.226 82.58.14.193 8.95.20.82 113.82.67.90 1.37.225.214 247.140.129.135 71.102.21.181 137.21.131.44 126.135.198.201 12.249.251.88 122.229.234.21 161.110.171.191 173.26.179.181 245.215.58.90 243.240.169.32 16.34.250.33 113.65.101.111 13.215.155.238 194.23.177.233 222.161.246.18 34.210.145.23 97.219.224.194 2.186.98.152 61.84.143.103 195.174.191.1 9.177.109.226 164.109.173.121 216.41.2.155 148.74.191.220 108.186.136.32 116.154.156.80 255.87.23.134 226.71.69.183 127.253.104.46 192.29.178.44 221.169.36.176 144.84.226.15 249.65.232.110 139.163.30.60 188.243.1.187 227.1.101.36 228.191.245.168 109.35.171.197 205.135.5.154 119.175.65.120 70.223.239.12 209.167.91.128 222.126.115.123 38.155.182.20 140.52.120.128 145.209.228.32 151.37.245.182 96.19.254.183 222.173.254.225 18.56.237.125 60.111.36.218 124.141.187.55 104.213.201.205 244.29.133.207 88.82.152.119 194.17.15.76 173.38.91.225 189.34.80.49 44.68.35.29 214.0.219.62 35.101.134.123 179.253.18.197 85.28.33.135 21.242.144.72 81.202.253.240 5.81.177.50 5.94.221.46 253.208.137.83 39.126.154.175 64.12.254.40 112.163.184.15 183.131.121.187 210.226.41.249 89.86.105.225 203.124.247.231 170.247.205.184 187.120.169.169 159.29.178.28 201.200.3.186 208.104.171.4 23.27.209.230 174.62.126.236 31.3.199.91 96.86.96.101 114.88.93.0 131.230.163.207 20.195.175.146 125.214.3.165 160.29.212.90 59.148.109.79 85.203.0.213 84.140.120.206 144.70.44.180 160.30.10.150 26.135.231.194 154.92.166.173 163.27.156.51 111.31.158.251 180.37.202.180 33.107.16.37 215.33.241.73 197.121.178.54 217.150.166.81 82.69.214.176 207.191.2.112 29.89.68.150 180.59.218.133 131.39.225.161 187.143.117.17 26.237.241.36 121.212.140.153 129.128.94.240 160.39.196.27 137.40.210.209 149.214.117.36 253.130.228.24 245.62.140.51 128.14.188.117 255.81.5.167 2.61.147.59 73.22.132.75 89.239.183.43 30.129.111.92 17.55.102.60 63.56.154.170 156.86.239.106 222.187.226.86 254.145.33.87 192.55.188.59 180.21.12.43 181.172.200.185 174.94.139.253 58.121.45.94 171.225.53.203 178.108.177.68 230.201.115.255 188.45.194.202 192.197.130.22 132.167.37.170 57.94.152.197 93.186.249.47 203.90.232.179 191.16.200.180 4.169.44.172 89.70.44.129 151.145.160.161 141.102.229.124 44.131.171.63 113.115.249.7 165.43.203.139 192.20.94.157 210.126.109.19 203.70.57.140 147.141.234.138 152.238.147.35 164.81.84.188 83.50.179.101 100.171.201.99 84.72.201.99 160.40.10.135 149.38.7.144 22.158.230.98 81.253.105.209 253.224.251.26 252.214.42.239 3.30.136.112 16.186.54.75 40.255.165.204 241.129.37.9 66.238.227.191 117.7.32.106 114.219.33.168 103.238.90.62 147.188.205.184 168.201.244.120 107.136.112.242 251.251.244.151 238.83.181.27 29.78.221.61 65.36.135.231 60.98.169.8 180.111.6.245 38.204.153.69 195.83.187.143 199.137.55.197 180.177.76.239 179.139.97.110 198.177.107.148 204.238.117.93 36.203.160.173 209.106.251.198 25.72.114.96 133.66.91.247 238.106.131.49 249.35.47.58 147.73.92.220 3.95.76.146 33.231.96.53 243.36.175.206 130.183.83.136 60.240.42.229 14.69.199.226 122.237.117.13 97.60.139.188 174.105.155.216 16.151.73.153 4.47.11.48 244.112.192.198 193.45.23.165 83.72.164.101 213.185.17.132 154.177.185.5 234.128.87.74 19.13.222.230 90.155.8.43 219.47.149.76 71.162.183.69 152.5.218.251 61.54.33.227 9.91.136.100 134.238.68.5 26.50.60.54 193.72.248.88 186.26.117.15 17.137.59.110 46.104.56.117 220.31.36.160 212.217.88.212 76.169.41.205 205.14.196.76 101.237.116.37 151.154.15.21 87.73.47.253 81.45.167.204 213.137.62.183 167.40.160.237 2.156.21.15 30.57.46.75 213.96.149.89 210.170.174.231 182.55.242.215 254.93.1.85 90.185.245.127 152.152.238.228 27.71.112.129 42.22.37.191 156.168.82.241 124.95.250.235 96.149.0.197 218.114.96.34 87.125.116.58 151.110.23.235 232.168.117.220 98.117.223.91 167.37.197.220 209.231.76.12 95.145.233.210 34.254.221.68 37.76.106.68 191.35.62.218 213.220.102.107 61.42.56.9 235.10.37.137 230.190.14.246 74.7.159.253 185.81.46.96 161.130.240.117 219.148.96.150 140.218.137.150 41.151.88.18 91.110.42.228 107.19.248.169 247.215.38.7 105.177.173.7 43.9.197.254 69.162.7.72 73.52.20.252 186.115.143.168 104.228.5.239 29.245.68.213 71.127.39.177 236.118.211.192 26.127.110.189 14.190.190.97 93.145.206.72 248.108.125.215 82.89.12.7 37.151.11.130 52.130.213.16 122.206.194.154 86.160.192.172 84.232.27.158 211.225.6.254 56.249.8.144 34.174.71.60 88.246.251.23 56.220.13.148 186.96.207.57 173.69.19.247 6.192.79.234 182.128.207.77 226.140.160.28 249.38.78.57 95.3.78.218 49.142.139.6 253.237.79.101 240.144.127.106 8.120.128.118 157.253.228.93 184.119.85.72 114.130.230.77 84.102.100.73 32.175.213.161 143.44.153.56 122.180.116.208 156.79.24.124 177.154.35.204 48.10.25.176 71.238.169.58 56.185.104.153 255.35.52.145 220.124.224.46 67.170.136.32 238.37.90.181 7.86.165.37 31.236.157.126 157.220.80.221 186.14.127.124 24.90.253.14 215.31.77.162 162.93.241.97 86.146.131.224 134.135.177.135 111.230.52.119 66.226.66.252 173.217.176.132 168.248.29.108 252.247.180.76 157.147.128.181 160.230.79.98 148.105.162.118 175.43.42.184 102.96.195.112 59.1.240.82 107.203.159.237 27.122.54.135 134.139.96.85 151.48.108.170 181.176.34.201 120.28.26.179 166.68.193.34 56.233.159.156 62.120.216.247 118.145.20.238 221.126.60.16 122.250.171.174 226.109.161.90 226.82.248.118 145.156.238.115 214.175.10.27 147.120.110.61 143.157.28.135 161.61.35.156 149.114.153.164 47.35.103.244 141.192.184.0 47.147.164.233 116.52.233.173 92.72.63.129 85.253.177.99 223.21.30.199 201.67.101.140 137.154.244.251 9.24.155.6 234.230.92.159 16.188.187.242 57.111.98.255 219.100.86.195 134.17.67.211 205.159.110.37 0.147.245.132 252.139.134.151 26.48.39.100 84.106.238.243 212.250.207.186 80.193.158.51 126.64.241.98 246.101.247.119 165.201.112.223 17.200.91.171 106.90.67.197 226.203.133.41 138.239.67.105 61.100.2.166 17.128.146.195 241.19.118.10 130.45.233.39 149.72.219.85 190.60.255.132 26.173.223.60 111.47.196.101 67.53.29.195 209.147.215.252 220.68.169.215 108.130.84.110 103.18.203.22 82.215.1.199 33.16.180.28 81.66.247.134 146.220.169.168 32.46.199.59 140.113.35.47 116.196.144.26 151.81.75.64 36.64.191.50 129.9.234.205 205.148.17.107 253.154.70.211 29.92.39.1 77.156.19.56 182.119.80.122 243.190.168.183 199.66.80.108 72.17.253.151 229.29.54.55 107.12.197.45 90.226.115.65 230.111.30.30 148.62.189.86 232.130.234.162 103.146.153.22 196.49.254.111 94.91.28.243 71.114.209.81 106.139.249.183 58.68.31.197 220.100.241.101 220.92.212.200 154.237.244.167 4.198.19.221 183.116.152.193 53.237.96.244 81.104.196.32 107.216.219.157 79.108.156.61 225.130.189.92 50.215.151.173 48.20.137.86 67.80.140.152 253.195.153.58 130.137.141.34 145.78.201.94 239.231.149.79 60.24.41.151 81.2.31.54 215.123.226.3 237.130.16.181 28.125.45.59 93.2.47.122 230.54.224.125 107.102.225.244 252.184.45.59 163.173.222.96 114.193.128.120 236.46.72.172 187.185.242.6 92.102.111.112 129.18.170.99 8.6.56.188 48.85.236.136 186.59.222.204 5.18.154.150 143.204.179.154 146.128.39.39 213.101.6.181 205.44.162.67 254.147.109.36 138.173.132.77 218.236.139.97 126.218.169.171 96.164.221.157 178.7.250.223 33.96.136.39 78.205.113.129 14.175.193.195 237.213.191.17 47.109.16.86 78.3.48.48 245.166.252.132 177.51.146.183 158.252.41.107 5.189.131.230 170.176.174.254 25.211.33.24 88.101.104.106 132.192.150.229 101.53.136.206 188.149.198.254 52.142.212.176 17.211.87.51 196.26.169.10 63.204.53.58 118.103.15.85 92.217.74.254 132.212.172.38 67.243.205.158 227.89.22.84 82.84.234.237 236.169.228.197 33.31.240.170 4.85.62.38 155.9.62.15 68.185.176.188 23.227.1.112 96.31.61.107 169.205.48.13 234.93.46.244 106.151.60.26 200.24.99.42 207.63.166.53 206.88.128.81 124.97.249.170 1.173.127.146 118.175.13.123 158.145.75.141 137.62.115.214 35.203.223.110 1.33.192.166 66.177.7.249 24.183.55.194 235.166.178.149 68.93.145.225 223.228.21.154 145.160.6.106 37.249.25.11 189.34.6.42 15.14.160.184 48.19.28.92 117.32.17.112 139.156.240.21 225.78.83.101 80.215.127.24 145.119.188.67 152.78.139.222 192.129.200.22 120.241.238.57 103.9.29.212 16.26.102.90 33.39.187.60 134.168.206.65 36.177.149.206 92.68.96.109 0.73.92.241 122.102.31.166 68.66.33.148 38.102.51.220 170.56.62.160 28.131.226.105 113.223.219.27 241.245.151.170 0.27.184.89 46.98.222.173 202.53.85.146 198.203.142.167 179.35.141.98 114.165.156.249 53.117.2.68 239.87.75.245 36.188.174.167 19.192.26.102 207.7.25.198 201.210.53.80 183.26.175.97 42.20.206.196 74.250.62.254 40.219.59.66 40.205.98.183 18.132.177.39 128.148.93.45 33.234.255.221 217.67.163.134 109.92.175.112 196.197.121.248 228.142.82.253 127.135.139.203 86.184.150.166 214.174.253.17 225.230.114.87 96.217.109.159 31.228.94.50 247.254.124.237 250.231.59.182 148.60.48.200 31.226.177.42 195.231.82.189 59.222.240.211 99.171.230.160 73.129.110.117 221.251.251.87 148.117.178.101 250.126.233.6 184.128.151.190 254.150.87.25 159.67.207.170 202.113.34.253 242.179.105.154 92.197.96.63 83.138.154.198 4.81.194.204 74.140.150.82 54.22.104.47 52.209.139.28 116.220.62.3 189.6.33.39 82.63.152.199 174.138.249.6 79.81.201.58 58.196.196.218 183.55.138.235 237.36.215.26 37.216.155.71 41.57.133.8 254.140.203.37 230.162.109.122 20.229.133.171 232.52.102.93 75.209.190.220 123.14.49.201 179.222.230.92 242.70.166.6 0.244.211.88 175.251.82.184 6.17.116.247 242.152.55.162 215.249.179.135 151.236.210.190 223.252.124.20 27.163.171.62 184.71.245.129 177.22.102.101 71.27.90.199 200.137.170.101 83.109.48.155 183.83.105.116 58.81.95.129 133.138.11.235 29.5.97.143 39.249.27.54 58.131.237.22 103.171.174.2 118.159.236.249 145.217.4.7 95.110.206.7 71.247.151.70 65.211.62.40 223.231.216.218 123.128.157.186 31.30.118.171 93.89.152.175 98.116.104.94 3.138.250.137 197.165.94.11 183.111.19.198 148.178.135.51 101.218.120.236 16.109.238.117 106.244.218.196 107.23.242.59 189.83.190.128 11.149.112.92 13.160.111.104 117.155.53.164 63.239.236.62 97.61.90.145 42.190.45.252 129.217.190.8 85.250.145.159 41.34.11.203 122.45.49.111 130.235.54.130 107.176.167.96 51.96.229.150 233.119.240.154 65.191.120.232 143.200.154.48 193.4.10.161 49.225.162.65 21.100.173.160 225.233.113.86 88.187.95.70 200.55.214.234 196.93.146.231 117.175.42.226 88.148.212.218 118.30.42.141 169.58.23.22 7.17.168.41 238.109.229.29 53.239.206.27 104.17.45.146 129.248.102.231 189.220.35.160 187.89.248.121 174.124.174.14 237.198.73.212 14.124.228.165 253.4.230.137 133.192.255.165 11.75.113.93 98.49.106.66 0.173.125.152 17.72.115.229 243.182.46.159 87.140.165.230 103.245.132.86 190.97.48.4 125.48.125.86 166.225.129.11 76.240.32.162 214.215.213.16 253.149.160.206 245.96.167.249 141.2.126.19 70.90.22.244 216.222.46.17 63.71.51.139 86.141.179.23 33.142.84.34 220.102.140.119 63.194.59.238 155.144.105.205 177.99.2.35 72.213.218.215 14.134.228.168 179.55.133.214 78.212.50.193 4.19.203.73 65.136.141.189 2.50.238.33 83.18.209.54 116.38.81.149 140.193.84.97 49.2.227.205 168.122.172.200 237.151.63.3 192.53.149.139 79.247.221.127 150.188.57.201 115.236.197.166 186.68.117.33 163.31.144.135 145.202.75.222 38.169.207.253 72.5.193.110 225.183.167.208 58.215.225.136 121.221.53.114 88.188.1.49 32.222.143.199 72.216.9.46 95.210.21.112 18.59.124.91 179.230.48.156 70.105.3.84 137.54.115.79 115.135.190.19 221.23.6.73 122.82.93.148 116.120.19.164 106.131.61.32 240.246.172.126 3.230.184.183 167.58.242.110 84.2.195.88 150.168.44.223 154.129.119.87 251.143.15.1 224.179.57.252 110.145.41.234 116.133.243.146 255.134.234.236 91.185.36.56 224.40.31.141 38.16.162.1 152.16.166.37 6.235.104.53 190.8.31.30 124.209.23.200 210.182.78.143 75.141.87.41 217.92.44.191 110.73.31.157 109.134.109.117 165.155.27.127 75.169.187.142 198.140.238.182 187.74.45.198 14.167.26.116 182.250.41.119 183.26.224.25 201.241.132.206 209.193.151.95 246.87.187.212 229.167.137.207 12.230.178.105 248.44.25.215 97.219.97.26 24.12.235.92 152.151.229.154 20.98.106.245 75.129.140.218 189.186.165.140 228.100.115.136 10.255.111.82 107.82.42.252 47.131.244.96 144.7.213.54 221.35.151.25 33.179.182.29 215.79.145.255 73.135.198.24 19.132.8.203 51.86.155.103 30.220.228.170 124.91.152.9 59.240.192.23 209.27.94.165 137.104.204.110 79.142.60.162 213.200.106.219 53.81.3.234 235.112.221.154 223.73.105.111 96.104.238.138 253.3.119.62 185.36.24.139 252.107.119.5 64.88.157.76 25.92.34.192 141.174.19.57 180.158.183.7 14.66.212.84 165.52.71.40 34.61.158.186 140.23.120.67 104.201.0.37 64.235.2.173 100.132.181.159 120.29.225.18 80.7.115.115 19.22.151.169 158.79.72.231 71.101.127.66 24.181.185.77 50.47.81.93 190.119.145.14 139.85.0.199 207.187.213.234 167.195.235.98 215.188.69.21 255.112.197.131 171.173.169.196 98.221.238.2 177.234.244.213 191.175.37.194 49.213.172.31 191.109.181.82 53.135.92.67 80.65.204.250 64.37.138.43 107.158.215.238 27.156.244.138 166.160.194.166 109.216.90.215 51.195.129.128 111.233.129.234 168.34.255.155 143.222.116.225 188.2.60.126 63.137.68.207 209.166.214.210 91.160.2.229 240.16.241.59 208.58.47.161 249.11.33.227 157.164.106.4 132.61.206.198 95.131.185.15 13.67.159.94 119.144.196.48 102.228.23.180 169.223.153.149 102.217.244.83 130.105.50.6 154.50.208.4 145.89.129.12 37.31.34.235 198.27.56.41 87.190.8.52 20.43.8.85 5.142.172.224 38.136.254.163 56.224.162.37 195.69.78.103 83.175.229.38 95.249.131.213 228.130.177.24 62.89.183.225 9.4.8.214 121.2.100.19 8.126.71.7 219.12.248.102 97.33.158.42 137.77.198.248 168.111.34.210 52.5.194.28 198.148.190.121 252.239.56.135 176.44.212.23 175.100.59.165 112.226.241.164 78.137.87.4 56.82.225.63 77.230.180.88 59.55.53.67 231.38.1.40 49.217.239.224 91.37.99.246 116.16.44.176 130.29.194.252 227.101.171.55 96.247.182.35 229.218.209.24 71.114.240.190 134.122.144.65 228.163.192.158 151.37.206.244 89.213.157.203 64.159.172.4 20.193.224.86 43.74.225.15 14.86.204.191 10.24.174.174 115.89.54.20 24.133.193.100 162.139.56.83 89.157.125.106 236.72.199.30 132.238.201.191 171.174.56.206 218.53.214.33 166.58.134.81 89.227.100.22 187.177.122.227 162.255.55.127 38.193.186.143 86.72.32.94 44.113.107.40 13.101.148.86 34.112.84.67 116.82.106.114 56.201.81.167 200.131.157.238 65.168.76.146 113.114.202.237 240.66.101.228 44.103.53.49 236.69.62.43 253.86.244.22 209.249.129.113 61.221.27.208 91.156.242.126 163.11.92.88 80.88.230.10 215.30.5.216 69.53.96.167 0.205.158.159 161.11.208.203 136.165.39.59 211.105.230.37 161.82.125.103 224.156.200.76 21.219.215.161 91.227.33.233 210.54.19.233 109.22.78.19 30.180.94.210 144.196.220.66 65.23.146.250 22.20.108.89 89.196.19.129 66.48.233.126 107.39.117.197 51.209.86.229 238.93.210.93 219.123.99.7 85.85.23.211 149.84.230.75 157.113.105.73 183.147.193.46 237.242.154.122 240.255.237.180 141.96.122.131 178.177.203.115 8.47.119.120 62.27.97.223 109.67.122.230 150.191.103.143 152.42.53.1 196.103.235.195 125.208.134.137 244.205.138.15 116.192.39.157 106.230.148.111 136.173.125.91 94.98.66.241 21.80.194.236 114.115.172.234 150.79.81.11 51.254.121.246 58.35.95.233 198.132.249.255 68.56.239.188 253.207.54.11 64.157.135.215 197.51.95.107 145.5.26.131 1.214.131.182 37.159.179.243 240.152.104.110 123.95.50.228 1.183.13.224 247.97.187.210 108.190.162.96 243.245.163.146 130.40.173.244 160.7.125.112 71.205.16.192 29.145.36.62 216.27.80.1 112.121.121.213 72.252.4.120 103.187.77.205 12.179.193.41 36.146.177.187 33.251.207.95 116.66.161.250 151.241.243.214 197.122.6.51 150.167.252.73 106.47.68.79 154.114.37.205 152.13.102.234 66.205.200.171 49.121.113.26 185.215.163.239 228.209.118.201 111.246.153.125 27.63.129.210 68.231.224.162 229.119.170.5 147.177.134.18 197.179.71.80 86.244.83.25 201.109.248.94 45.172.111.28 234.13.200.19 126.110.156.138 149.149.225.221 108.221.185.183 90.140.83.207 124.58.187.145 126.160.0.184 88.19.76.77 123.131.18.147 113.92.3.149 62.136.106.111 240.78.237.233 238.203.78.162 104.29.106.146 122.152.220.115 164.254.177.233 4.116.66.87 67.132.173.210 18.97.220.36 205.102.86.72 153.18.244.178 207.44.108.233 176.91.253.164 8.188.8.108 134.103.93.12 23.114.241.187 255.205.220.202 230.83.231.173 16.51.22.86 206.175.136.99 37.141.217.193 49.102.12.74 123.246.211.53 110.232.69.112 247.250.19.221 247.167.12.52 85.206.226.235 56.111.122.5 100.248.54.222 147.166.133.20 84.253.247.125 194.36.106.43 185.174.40.247 209.250.36.206 71.190.2.176 114.98.137.183 80.31.143.12 176.81.83.179 149.52.55.215 10.190.84.125 120.102.43.138 171.244.49.237 53.245.119.142 103.160.172.88 86.172.129.169 49.61.16.62 128.108.225.55 35.225.200.9 177.221.223.147 143.111.50.211 187.97.176.97 253.175.155.20 74.159.85.70 28.5.243.176 24.140.1.113 14.156.223.174 226.102.18.227 253.106.163.252 164.202.228.158 204.239.19.183 174.202.174.126 115.230.125.248 73.151.23.113 226.135.2.3 171.173.227.164 198.255.160.170 86.244.37.160 156.152.43.237 239.69.222.63 99.123.238.95 169.111.113.9 130.170.108.94 128.209.131.32 152.18.55.57 180.55.181.233 18.85.196.8 249.143.5.225 123.59.242.241 215.126.36.125 247.117.75.75 35.217.243.59 194.92.114.231 163.92.125.191 153.27.21.149 243.197.175.9 79.236.50.20 38.130.142.254 198.109.171.180 169.64.189.170 145.185.111.38 31.241.109.54 101.171.81.19 254.26.3.29 114.137.21.119 214.219.44.84 224.61.124.234 204.192.106.162 25.154.34.204 173.80.38.4 94.142.193.81 243.203.83.36 85.155.245.107 196.165.198.243 250.50.152.40 154.137.35.175 39.126.115.53 70.46.206.172 172.202.162.253 90.29.240.14 89.112.2.144 64.60.117.42 83.248.10.214 95.196.236.136 136.240.183.236 126.42.35.242 52.226.101.155 36.103.43.162 62.222.223.211 38.85.134.99 98.50.117.203 69.122.70.31 155.171.183.50 209.149.128.53 200.35.183.83 249.44.146.255 205.214.84.99 139.142.135.198 237.41.194.239 208.255.201.186 155.65.240.41 28.34.127.253 226.207.93.107 52.2.25.219 169.12.236.93 144.186.182.197 117.13.17.201 181.188.190.138 14.86.49.62 226.14.34.190 99.6.22.217 133.170.122.154 213.75.87.23 50.125.91.56 90.237.106.200 168.70.240.77 15.35.83.187 92.15.151.158 79.94.30.97 234.67.46.92 155.75.217.150 228.2.111.53 224.67.250.234 23.213.184.118 36.202.176.238 208.225.102.21 108.153.66.143 26.92.109.246 40.94.18.220 80.243.160.52 81.194.152.37 235.87.66.169 164.227.45.115 206.100.35.206 147.74.7.43 21.37.139.35 90.48.101.131 128.152.221.122 70.180.148.180 79.25.86.76 58.233.52.46 18.19.221.113 125.74.2.109 106.182.139.49 62.226.40.174 107.232.216.231 51.240.128.150 178.45.188.221 37.145.130.15 167.106.143.122 56.158.121.122 168.159.9.175 142.28.55.159 25.107.193.241 24.97.128.78 172.246.162.139 191.120.176.54 118.42.77.239 2.205.154.32 29.8.215.144 197.237.238.69 56.32.117.125 185.78.234.254 142.138.197.230 22.123.141.145 70.139.104.22 48.125.56.140 212.212.169.221 134.202.165.117 58.104.89.28 148.224.160.127 98.5.93.186 118.218.30.199 226.237.181.210 12.125.135.229 254.40.227.159 82.66.30.189 187.163.184.34 41.59.107.229 215.126.52.26 81.220.180.140 67.112.255.190 126.162.222.238 128.2.116.198 141.82.66.78 38.55.105.28 84.158.32.61 125.25.210.27 104.247.174.155 171.25.142.143 40.22.52.36 53.101.20.178 144.204.112.82 83.70.117.185 164.27.242.72 249.177.135.226 49.46.202.107 210.96.240.24 186.229.200.189 104.108.190.242 39.227.221.114 20.96.253.99 232.68.12.82 240.225.210.71 155.4.213.6 140.221.207.17 6.134.182.143 50.19.88.38 110.197.35.7 199.130.154.233 223.38.154.241 215.35.29.176 211.217.55.194 228.239.34.77 218.60.166.106 57.217.121.43 46.201.54.4 160.74.18.219 120.225.219.203 80.187.213.113 203.72.190.204 25.123.55.67 224.111.28.39 80.112.252.247 34.209.77.154 225.60.110.180 34.94.31.40 184.227.206.209 121.81.142.227 32.64.241.232 93.132.205.255 144.43.208.182 250.186.232.203 212.217.23.12 14.67.105.11 113.120.245.100 32.151.132.141 236.42.71.124 160.159.163.137 9.218.88.148 102.41.84.202 85.109.172.147 45.82.221.58 184.19.89.55 54.41.134.225 26.5.216.220 161.230.194.94 21.165.205.117 139.83.65.183 237.187.91.246 165.73.119.196 129.140.145.183 111.4.25.88 150.225.50.194 61.52.42.8 127.213.132.151 49.116.167.136 152.101.97.53 33.42.212.83 108.208.120.15 131.45.66.126 230.206.218.161 100.100.118.65 25.201.168.0 61.130.130.99 136.127.235.141 199.22.166.133 13.225.234.111 253.191.58.188 0.153.106.29 6.148.184.8 93.152.79.146 95.137.253.95 109.250.132.218 206.174.102.103 95.36.144.159 36.86.140.236 199.241.231.255 90.12.222.150 254.164.76.152 184.225.12.170 116.197.153.2 241.82.31.84 133.149.141.12 151.156.246.231 153.255.174.186 118.159.41.131 120.149.171.172 122.248.171.47 198.117.170.95 243.3.36.6 29.112.98.113 30.239.191.132 160.229.248.188 238.234.144.252 65.25.100.137 25.61.31.117 43.67.48.192 1.255.245.217 122.95.137.178 27.36.234.171 56.46.190.108 178.192.1.49 23.253.203.52 145.163.101.179 215.50.230.28 95.200.140.126 198.134.116.218 30.14.17.156 178.240.67.105 224.204.17.34 25.187.87.215 237.14.27.6 6.211.131.217 100.33.143.162 49.109.54.34 81.227.160.186 99.97.126.32 82.142.162.3 120.153.20.153 126.120.157.167 62.131.126.20 123.36.94.66 137.174.135.76 147.209.147.207 44.167.144.169 4.109.168.168 58.172.127.56 206.255.183.131 143.112.125.246 212.203.138.130 240.0.162.119 40.210.121.25 171.249.98.200 45.45.201.221 216.167.202.234 94.240.135.123 170.110.105.191 232.240.238.236 16.73.147.4 119.255.183.99 82.87.167.44 124.204.103.12 99.121.134.255 112.170.132.197 41.157.140.142 14.156.73.129 196.172.91.111 190.225.48.95 245.6.80.251 3.85.50.57 250.113.92.174 24.75.146.101 58.63.28.178 148.123.238.32 234.206.59.84 129.103.109.215 111.47.97.151 245.233.171.226 42.184.234.155 214.134.179.145 213.128.239.137 111.78.167.48 243.86.56.203 62.250.142.16 237.40.135.99 97.111.10.225 202.106.47.240 109.33.63.137 27.220.16.103 1.175.241.145 224.1.30.125 146.161.55.87 148.167.90.168 81.65.77.118 188.190.118.154 192.141.73.171 101.176.63.3 166.149.86.113 156.114.181.22 50.60.190.145 113.202.138.97 27.54.228.175 170.166.242.177 236.110.208.50 65.65.193.57 146.188.54.11 61.130.24.64 204.221.165.218 160.26.99.183 221.139.62.218 51.107.116.181 165.123.202.125 109.107.206.31 128.253.34.1 81.12.31.133 14.234.45.218 248.245.234.104 136.127.39.213 254.162.69.214 189.66.65.81 159.227.33.221 218.177.54.130 209.212.254.95 100.155.81.196 241.53.163.220 110.212.75.185 91.72.225.132 212.198.41.60 161.126.230.106 141.14.77.70 231.125.247.212 169.172.162.78 180.42.41.49 188.154.116.49 242.81.212.104 32.48.144.142 169.107.113.181 162.108.229.212 230.15.232.62 250.152.118.199 165.238.215.149 137.135.194.186 237.90.98.51 131.10.194.251 139.147.77.120 70.22.117.225 207.218.100.216 34.7.12.217 42.157.11.184 148.238.27.139 61.235.139.157 64.204.200.3 113.109.73.73 190.167.23.98 47.20.24.146 81.187.15.163 210.22.11.37 47.83.191.251 48.97.11.161 218.88.224.200 187.247.78.29 103.11.163.31 0.245.23.232 151.208.82.89 34.139.113.217 67.13.150.185 172.159.64.76 95.134.8.8 62.247.132.199 136.230.52.127 67.199.0.241 19.49.111.137 212.245.42.13 255.184.192.69 204.167.190.181 205.16.142.178 4.39.62.225 128.84.49.194 147.91.103.108 107.190.140.216 7.92.129.62 144.203.192.142 32.228.147.84 239.60.178.143 24.125.15.254 3.217.100.211 180.123.232.49 158.221.134.123 94.127.51.43 4.21.200.75 199.121.194.214 158.72.237.19 252.222.25.123 142.11.88.216 134.212.176.201 126.40.20.35 85.189.115.139 3.195.53.47 132.203.17.65 93.248.144.153 131.144.222.132 36.72.194.7 11.235.8.24 252.32.136.180 181.180.176.189 144.199.148.183 94.170.252.148 206.137.43.185 212.188.119.116 183.227.217.74 166.174.23.213 210.90.212.99 109.1.45.21 60.136.93.231 241.85.37.125 202.11.242.179 140.252.52.4 84.167.148.199 189.17.121.179 47.78.99.195 64.127.219.224 86.243.19.94 89.35.174.39 227.184.72.142 106.188.234.94 96.44.94.188 158.196.2.166 214.226.104.39 117.54.202.152 154.146.100.87 159.31.177.18 174.198.15.135 167.129.209.133 201.113.180.244 83.17.92.176 82.181.1.171 48.250.164.67 121.17.107.195 72.173.123.76 84.241.31.127 53.77.11.146 216.131.236.13 205.217.91.209 58.220.178.21 141.158.13.185 168.87.90.239 122.224.73.214 243.182.203.187 35.21.236.113 59.143.184.0 45.150.93.38 47.218.107.7 236.16.51.51 88.153.101.253 38.44.148.45 154.54.235.116 117.33.79.161 181.187.140.127 176.7.97.141 84.196.102.224 24.133.14.49 67.58.75.232 193.231.221.177 31.84.210.65 208.65.67.135 64.32.251.209 145.251.181.251 200.239.234.173 77.198.220.171 175.156.91.34 229.187.242.115 16.12.180.246 141.112.211.183 127.75.84.168 51.46.50.14 12.99.168.173 60.232.127.123 230.76.43.73 66.108.217.157 5.4.121.75 13.106.33.192 215.46.63.58 80.28.240.37 88.235.239.189 62.84.55.235 49.24.135.149 207.73.111.18 198.195.15.107 149.46.101.96 81.203.207.39 44.190.109.100 85.91.35.66 68.164.12.58 1.31.80.161 169.46.246.112 63.250.81.88 33.180.34.143 218.223.236.251 78.62.235.163 188.230.215.27 238.84.113.97 224.116.77.198 254.241.158.248 209.112.197.39 76.106.86.253 226.212.172.210 249.55.22.97 166.252.38.230 16.239.151.67 182.122.255.93 187.110.53.191 54.188.151.211 108.185.193.8 231.134.218.249 114.112.17.250 242.72.15.49 1.154.52.106 247.92.152.229 175.194.16.229 70.75.34.170 73.116.142.156 183.9.62.128 6.228.10.84 38.247.171.45 77.95.123.165 79.62.176.229 6.169.124.47 202.165.22.233 89.245.155.85 100.140.153.60 30.128.54.140 169.74.216.90 206.37.219.19 188.166.9.200 26.18.72.147 213.193.248.37 0.64.127.214 14.152.246.158 72.174.94.244 63.137.187.44 167.9.26.122 194.34.232.249 161.42.212.169 16.144.220.27 46.13.131.106 111.218.157.66 137.6.254.61 84.241.131.144 122.152.196.214 37.120.96.136 47.187.67.64 175.55.219.148 178.116.158.218 114.180.215.0 139.18.225.76 45.200.185.172 81.131.253.208 120.152.149.247 228.194.175.156 51.235.177.23 18.72.66.49 233.105.68.147 138.124.231.233 243.79.68.160 17.195.118.138 27.221.241.45 99.2.211.91 59.179.182.74 122.157.185.48 132.115.145.114 193.213.72.96 209.188.110.132 156.122.209.32 73.57.208.14 148.125.165.239 41.102.69.51 19.126.13.97 226.107.173.217 242.187.245.11 156.189.148.175 119.160.147.40 178.1.9.67 112.54.151.136 214.122.6.115 21.105.202.66 5.111.250.50 72.42.168.224 206.62.244.158 86.195.179.233 245.164.243.195 174.156.189.172 40.220.39.160 68.207.102.60 187.205.233.151 139.197.209.96 102.221.23.214 26.63.245.91 239.223.115.230 101.214.60.22 53.57.253.199 148.196.162.169 197.130.74.143 45.220.192.179 93.224.175.223 112.89.58.69 138.208.118.228 99.129.150.97 222.125.35.95 213.233.46.86 38.171.152.227 109.217.228.35 107.120.216.236 64.110.138.37 39.1.4.184 86.1.172.187 63.227.232.117 185.14.114.95 166.27.80.33 231.224.194.189 129.188.166.27 5.23.66.53 239.57.193.87 154.105.58.13 188.194.71.64 106.55.92.155 152.102.228.250 48.205.202.250 196.217.183.86 24.44.1.184 22.252.154.218 184.75.77.45 2.120.59.251 144.232.2.61 238.79.180.89 11.61.103.228 25.247.36.174 248.132.243.97 205.205.95.235 124.16.119.59 67.125.140.104 216.70.133.177 150.150.131.95 251.153.88.227 96.214.150.173 187.232.21.45 27.125.227.23 180.233.159.150 219.217.101.218 229.182.202.72 93.58.29.229 92.162.236.144 223.253.153.29 77.101.36.239 142.148.213.9 51.144.210.45 202.68.48.254 99.21.173.181 117.232.144.146 44.6.153.25 91.96.135.240 51.63.219.222 210.17.232.6 28.47.17.30 125.108.77.252 19.111.119.247 242.12.104.20 70.120.160.4 45.153.108.218 146.137.87.61 78.196.201.233 43.11.210.178 5.36.90.251 68.126.114.175 44.145.253.96 65.245.215.250 82.187.220.48 21.145.93.79 159.42.147.77 153.191.67.198 30.29.150.233 223.62.213.114 37.247.14.112 220.23.254.76 37.86.12.161 185.217.19.233 26.73.4.136 68.165.227.135 254.134.88.165 92.86.167.19 106.41.180.209 198.123.88.152 203.155.171.72 205.171.184.5 128.134.59.135 164.25.162.205 244.161.6.215 144.35.125.131 85.168.153.190 189.10.231.255 249.12.133.39 50.175.173.65 1.242.81.225 233.216.190.211 90.193.193.74 248.173.90.4 58.71.244.142 252.61.182.5 249.189.150.95 203.7.84.182 47.218.128.100 195.42.3.35 250.136.143.51 165.155.123.7 120.6.118.22 99.214.152.141 200.173.75.81 177.173.21.52 146.230.177.216 90.29.251.204 93.184.181.202 40.26.173.131 128.176.161.138 116.223.143.195 215.64.96.85 32.43.0.80 205.104.243.26 106.23.75.64 45.255.40.218 211.64.82.242 29.10.206.154 52.13.38.91 224.44.170.13 71.86.160.252 99.122.217.62 233.83.224.198 107.19.249.134 39.164.7.129 35.49.218.130 215.54.160.107 124.60.169.215 162.174.186.201 175.45.195.97 126.209.187.230 180.243.184.176 127.249.95.152 220.94.75.125 216.167.41.138 150.238.198.97 175.8.43.163 114.228.229.125 110.106.65.243 172.178.137.144 56.215.233.160 199.118.35.61 102.148.98.60 58.180.102.69 57.111.245.97 248.147.49.7 166.22.144.97 116.38.134.246 5.178.242.86 58.197.2.220 107.81.29.51 151.199.230.69 231.251.22.148 131.44.97.61 101.226.13.183 229.115.171.29 48.178.6.170 216.100.8.199 165.72.98.76 55.206.112.38 194.230.59.9 242.99.136.162 214.211.33.204 171.9.137.34 18.51.115.88 141.199.10.246 231.42.173.83 135.161.135.129 181.180.142.197 16.72.80.55 101.200.160.78 129.224.182.120 9.155.180.215 174.240.179.219 93.83.140.136 74.2.47.158 97.168.35.204 191.81.188.232 248.34.239.221 149.205.186.193 132.251.220.214 74.73.61.28 186.55.157.51 208.166.25.66 234.141.102.22 57.81.136.78 118.223.215.129 55.13.147.105 214.162.199.24 79.143.59.222 158.173.234.237 4.125.247.168 154.219.185.62 134.114.216.145 166.25.209.249 13.7.49.179 249.18.48.172 145.49.118.109 250.222.240.42 199.14.175.218 37.28.6.54 139.127.242.57 190.50.80.50 159.55.190.135 97.131.222.222 133.103.232.131 215.65.246.131 54.193.96.107 59.252.136.30 203.75.222.79 22.137.124.254 72.39.174.2 16.210.124.138 101.232.103.148 6.188.90.139 178.156.212.210 171.202.28.184 45.232.253.6 132.200.162.181 253.183.223.236 174.247.122.174 88.26.235.70 137.50.236.185 42.55.28.204 247.116.5.61 93.95.112.217 236.26.33.193 25.207.13.12 216.192.71.10 18.119.28.49 200.68.117.34 106.253.180.95 74.76.204.245 161.130.27.253 230.194.108.190 156.26.8.93 154.255.237.175 28.166.13.196 90.22.170.221 221.194.186.81 30.87.24.232 28.100.127.61 5.180.46.119 240.98.220.85 6.42.21.235 172.178.66.97 49.110.81.73 150.245.55.105 126.114.97.216 114.37.162.26 50.182.160.219 112.112.245.127 134.36.122.69 175.238.146.222 151.58.54.87 200.13.12.214 11.98.67.72 180.138.246.97 200.113.66.222 108.231.92.111 108.128.194.233 51.197.18.19 100.204.170.175 167.17.199.5 11.112.244.145 178.183.67.219 108.37.188.21 72.182.196.189 38.121.121.236 251.220.226.18 127.219.168.190 8.90.86.197 250.210.145.1 255.24.33.47 154.113.65.181 210.150.105.68 75.17.102.184 173.85.20.241 0.14.197.33 205.229.32.247 113.151.9.46 106.104.84.250 35.66.220.237 219.16.19.28 176.133.34.77 96.1.44.101 116.181.96.128 17.140.180.243 171.182.61.125 46.194.32.39 157.178.185.193 164.90.146.228 175.11.183.166 212.42.121.226 205.220.220.60 53.193.182.206 40.114.214.32 78.114.60.120 38.5.102.111 245.40.222.170 217.231.248.111 27.2.255.204 156.63.143.56 240.105.164.103 196.170.9.36 77.183.179.166 170.198.70.132 199.42.81.26 156.47.159.66 41.3.44.193 205.100.237.101 78.123.56.175 24.133.132.163 222.171.254.190 8.173.72.238 71.44.252.101 198.57.182.115 62.148.84.26 232.101.246.34 246.201.255.101 192.24.118.77 47.37.107.172 3.79.233.181 195.204.200.132 73.81.179.249 96.23.243.107 252.116.53.227 22.253.54.195 241.122.135.199 19.36.247.162 205.241.167.24 88.168.111.120 9.148.188.170 244.174.255.117 114.248.170.62 174.0.103.217 230.208.214.18 215.246.182.151 251.21.155.125 49.130.155.82 209.6.183.87 74.73.29.20 2.16.118.210 216.89.54.12 47.93.127.28 244.180.71.191 101.8.41.173 200.95.167.226 25.100.203.203 183.124.141.16 141.219.93.204 151.84.231.225 194.215.126.205 161.18.77.231 44.195.73.152 227.62.233.230 144.242.114.138 176.183.225.6 186.37.221.168 200.4.57.179 4.12.231.35 155.245.198.1 237.198.97.1 163.120.227.171 43.51.54.10 25.109.45.26 247.206.220.44 62.122.50.210 38.63.195.15 117.8.242.189 132.63.247.228 179.239.152.193 216.111.37.148 118.215.36.17 39.81.193.182 72.77.199.253 252.80.38.4 28.66.244.156 143.107.251.169 191.224.57.168 23.199.98.160 163.193.5.52 20.199.109.212 191.93.27.71 252.63.180.154 140.213.176.83 199.225.130.61 111.127.82.144 72.46.216.183 203.232.149.179 155.127.201.203 179.192.215.214 105.161.21.122 148.118.53.112 148.164.165.10 116.29.156.136 66.224.27.200 23.195.25.84 131.214.181.44 13.91.155.135 224.206.44.46 27.228.194.16 24.58.181.99 84.251.148.139 30.89.149.1 63.244.215.151 25.151.9.173 74.71.45.57 22.142.106.139 106.214.15.82 213.39.155.16 178.169.249.64 140.43.129.43 59.190.163.231 242.137.245.239 131.131.240.93 12.11.74.19 5.161.84.144 149.108.13.45 144.182.135.44 141.116.131.82 70.222.159.95 192.130.254.142 121.228.225.96 221.102.76.215 132.50.148.237 122.105.124.244 80.144.207.42 50.68.159.223 211.139.10.217 90.50.216.176 182.79.11.92 10.130.184.184 254.7.5.78 121.162.229.124 241.252.164.68 95.15.72.228 244.51.45.78 166.248.63.233 61.55.23.132 206.98.130.70 240.10.10.124 1.149.162.233 122.37.54.247 77.205.200.66 72.147.82.108 211.221.25.171 85.203.206.39 121.65.142.142 12.218.63.158 164.97.16.158 59.1.22.71 136.253.29.226 104.250.156.2 97.138.76.46 181.220.121.136 139.220.49.147 101.3.190.252 163.65.186.67 166.51.98.165 227.249.115.116 90.141.183.89 151.167.51.192 253.146.95.253 40.97.56.217 50.55.147.116 171.102.161.79 108.184.9.76 165.31.236.249 8.196.172.123 224.26.0.20 247.218.95.180 169.144.185.221 130.118.149.5 90.107.219.83 251.124.216.120 12.243.128.110 9.39.84.167 151.82.146.45 59.39.33.46 40.38.222.13 93.6.133.192 30.57.82.131 180.23.166.114 178.180.119.5 76.66.218.163 5.52.221.48 115.95.180.54 254.149.19.236 193.61.198.173 74.176.129.210 131.68.113.128 115.97.219.132 37.180.7.1 185.191.147.103 92.228.41.40 40.59.246.116 30.191.38.10 8.90.244.55 223.227.7.100 192.5.164.15 168.225.121.162 27.151.232.77 39.131.74.32 244.54.220.124 188.71.46.87 166.66.108.178 60.3.47.239 205.46.229.32 84.172.132.140 20.114.204.124 58.91.221.55 245.135.75.171 43.215.191.167 233.66.220.21 184.35.36.244 28.166.87.247 180.151.186.113 230.17.25.53 182.51.85.212 30.11.132.52 100.247.74.223 218.42.195.42 196.238.90.90 188.83.206.70 197.137.132.73 128.105.136.127 107.206.39.5 218.249.221.175 250.186.219.1 20.188.192.123 73.48.70.205 4.123.156.243 190.154.92.228 203.180.18.142 148.212.213.19 152.161.229.219 214.83.79.137 67.151.221.101 205.111.76.32 154.204.157.146 221.119.102.31 142.171.199.148 237.245.145.253 22.216.251.76 156.193.79.112 120.75.86.85 89.83.231.0 216.93.49.144 110.81.184.219 80.241.53.5 13.48.241.31 53.59.131.42 63.112.249.157 188.235.117.150 140.255.240.139 225.189.216.4 55.62.148.2 212.229.122.104 113.105.247.4 167.68.59.144 163.252.45.199 25.215.142.105 77.29.179.21 83.213.192.98 199.204.40.211 212.173.135.207 126.159.21.146 87.239.161.255 226.0.141.1 86.187.47.195 224.130.58.125 4.125.119.104 248.61.104.195 205.70.125.28 179.239.55.50 0.69.154.126 118.115.138.81 209.245.216.146 187.232.145.31 93.209.118.99 8.133.111.188 105.232.158.254 67.199.78.141 97.167.245.135 119.117.114.197 89.34.27.159 176.135.137.157 21.169.49.232 121.4.99.127 20.215.76.133 138.83.221.4 216.185.104.114 154.150.241.7 176.251.210.104 158.35.198.121 241.233.126.187 234.78.155.174 209.252.136.56 130.156.80.221 49.113.62.20 58.12.55.81 169.50.25.6 85.252.176.89 91.150.112.155 202.126.69.192 12.199.60.80 196.226.9.55 236.249.227.99 98.75.31.254 144.168.42.125 91.170.98.247 206.201.77.84 175.100.171.129 85.32.70.215 34.141.194.40 127.16.197.120 76.125.15.37 186.240.216.215 57.73.199.176 238.13.33.89 235.101.92.241 208.233.15.51 120.97.172.64 8.163.143.239 213.174.103.79 122.148.249.26 164.62.91.248 188.147.18.204 27.160.98.77 154.163.245.240 107.223.59.165 70.31.129.21 194.227.21.237 216.170.243.106 15.88.224.200 13.43.9.26 6.152.101.199 104.249.40.159 56.38.112.6 233.79.11.116 167.156.138.9 111.39.249.80 224.235.196.250 210.66.131.165 136.155.246.3 107.102.178.60 108.184.148.116 221.151.73.32 186.213.89.104 255.217.101.100 64.149.216.222 41.208.138.237 99.26.254.199 251.43.253.90 180.73.104.222 100.64.149.200 58.244.238.43 121.65.72.211 26.117.234.126 212.245.219.2 32.206.139.63 145.125.146.53 46.22.205.239 49.128.145.154 16.167.144.236 53.200.168.84 133.132.57.112 27.99.138.61 86.71.228.237 181.223.174.12 174.172.2.174 6.42.125.240 235.188.50.33 130.53.73.147 177.24.68.74 82.131.71.170 249.238.174.174 29.40.98.201 208.254.82.124 72.136.94.141 211.236.87.50 20.108.58.10 48.66.42.134 140.120.46.228 103.123.216.142 189.78.168.28 78.17.92.185 76.45.139.118 31.40.76.160 170.233.236.210 111.115.38.36 123.68.70.137 204.82.156.0 194.158.137.15 161.78.197.105 125.150.225.39 23.120.206.128 193.1.152.6 99.252.114.99 124.203.168.31 112.37.246.139 216.69.165.141 98.58.138.165 118.156.107.210 75.106.31.168 172.17.248.243 80.214.160.26 77.6.174.6 215.247.119.184 130.132.44.183 171.186.156.37 217.59.76.113 153.111.27.103 135.48.192.205 99.121.108.168 88.82.89.77 17.154.123.128 162.167.29.243 214.8.147.0 85.184.43.104 198.244.185.60 91.106.10.124 168.0.199.116 225.123.121.229 216.212.184.137 178.244.88.69 146.98.206.106 90.108.212.25 96.69.27.164 153.203.247.178 109.125.150.143 222.187.44.232 68.91.57.205 131.50.223.44 4.181.185.214 74.229.125.255 50.239.206.239 100.6.114.186 73.239.247.81 212.122.83.232 205.43.120.87 161.147.246.126 201.114.128.12 119.96.74.235 166.124.43.53 236.242.170.93 31.33.255.10 125.234.222.236 222.154.162.15 108.72.83.160 174.142.86.73 72.5.127.165 171.249.124.46 12.119.225.230 173.2.36.171 152.225.130.115 63.86.174.110 121.120.6.70 248.221.228.171 185.67.83.139 209.199.124.95 24.113.45.205 231.12.220.0 96.118.83.95 79.50.28.225 116.204.49.129 61.249.7.99 255.228.196.203 100.145.117.189 144.231.65.86 157.169.54.117 239.192.65.213 64.216.195.118 138.16.82.192 188.116.89.225 181.133.105.175 221.86.236.41 94.2.70.11 240.204.134.160 23.17.8.239 168.253.41.168 206.132.114.63 88.213.188.199 148.100.13.0 146.194.150.16 58.104.240.28 186.138.184.242 142.113.128.90 67.174.204.240 224.88.131.176 46.203.6.204 37.220.56.82 82.42.0.28 232.129.92.93 146.251.155.164 180.10.135.249 54.15.127.89 3.170.209.178 184.39.32.30 158.26.227.199 191.151.33.185 55.81.192.198 132.60.28.51 65.239.254.235 150.162.179.131 114.98.4.16 201.189.178.232 181.93.170.220 219.58.212.33 17.178.90.92 44.190.238.15 21.103.31.115 23.228.175.93 49.223.67.77 109.9.166.161 114.78.193.244 8.219.212.155 73.201.44.224 119.108.210.43 174.109.137.46 11.81.174.64 173.175.25.158 182.248.69.178 131.42.114.50 8.128.94.15 243.35.77.10 23.168.133.26 198.52.250.28 154.64.252.237 32.177.177.11 79.16.26.183 153.84.25.47 71.21.103.49 71.30.141.186 80.53.9.45 255.71.106.11 205.195.169.149 236.163.136.165 44.65.188.166 183.167.145.62 178.189.52.56 194.149.195.111 91.149.64.215 137.136.135.255 19.220.63.21 201.11.73.166 193.103.147.189 50.104.104.25 201.209.187.87 59.175.131.113 69.191.225.219 0.138.168.154 227.76.238.184 16.197.20.35 58.12.0.18 190.42.60.98 194.228.225.240 198.143.143.244 121.60.108.190 204.238.238.88 140.175.8.91 75.113.100.156 79.4.1.74 69.201.213.195 126.73.193.165 97.235.44.132 166.194.235.33 65.254.49.91 246.199.168.36 237.99.213.143 232.255.162.152 54.213.9.205 94.237.136.8 202.4.58.152 214.227.90.187 150.124.232.33 106.34.133.181 112.163.91.180 140.201.153.203 183.232.83.127 143.10.106.45 255.119.77.164 231.241.68.213 163.96.217.72 66.188.163.31 66.92.11.135 106.91.108.182 175.151.191.12 14.214.217.11 151.208.211.131 235.169.178.25 32.38.177.41 33.124.120.20 32.121.99.14 11.182.59.218 111.193.206.39 65.170.170.174 171.186.48.185 253.106.115.66 134.145.77.174 239.133.104.169 237.228.179.249 114.53.106.213 150.42.97.104 246.127.3.36 186.138.128.233 191.236.227.203 71.168.114.242 35.55.1.11 24.175.194.198 17.12.250.121 107.177.195.245 246.248.188.92 237.177.175.212 209.213.5.233 31.125.7.17 109.173.235.164 209.53.179.47 62.87.207.64 183.166.105.199 164.194.190.239 56.102.54.36 83.54.68.112 206.102.246.88 81.164.111.141 123.31.81.202 172.255.19.206 157.112.84.27 79.187.214.242 103.63.220.212 184.209.177.159 52.190.33.71 141.31.2.238 51.42.130.210 159.51.147.114 113.15.109.167 163.98.131.188 86.76.204.230 194.251.148.155 125.35.209.141 20.50.127.80 147.21.244.177 253.146.164.187 21.113.193.216 121.218.57.103 14.5.180.177 142.155.17.94 140.194.169.228 182.138.109.49 95.50.96.3 235.44.204.26 87.135.112.248 131.149.84.149 68.232.174.214 177.139.1.253 245.115.227.38 9.235.213.63 251.217.194.19 86.185.137.250 199.87.240.232 217.17.42.131 187.125.228.232 62.132.165.171 202.131.7.143 224.64.19.221 228.54.0.28 198.193.120.117 197.111.129.106 133.255.23.88 93.73.229.125 36.185.74.185 143.214.60.167 221.240.70.191 70.102.146.177 145.86.84.87 47.2.159.66 168.102.157.201 229.7.92.121 201.26.116.125 224.113.108.171 159.249.249.188 172.233.176.191 17.127.249.41 129.197.227.88 133.95.178.27 163.191.4.142 164.68.124.82 103.49.143.194 176.70.135.95 187.72.201.72 57.87.124.4 219.165.50.254 52.48.187.114 117.89.20.48 141.243.253.134 7.51.106.114 72.242.193.199 58.208.227.160 233.63.15.14 163.73.193.174 50.27.160.110 214.134.8.60 7.238.78.41 47.105.1.23 28.75.2.250 187.173.155.2 219.234.87.187 202.202.69.198 239.223.98.90 127.107.102.103 98.42.193.30 11.197.205.153 158.68.142.137 68.159.1.120 130.215.180.190 201.21.56.131 163.161.34.36 136.116.48.161 180.180.11.46 199.85.212.85 223.171.98.98 67.198.163.227 67.30.62.209 113.128.199.178 185.224.170.151 91.153.176.107 65.107.219.34 33.109.155.185 164.105.101.239 207.233.248.115 33.165.108.247 131.79.0.62 8.230.253.146 11.231.173.205 0.105.15.25 72.120.140.229 62.183.236.67 64.31.78.70 196.130.33.160 229.156.52.195 164.240.175.158 222.249.48.69 136.183.231.167 176.96.241.26 126.188.61.88 144.147.155.2 140.158.240.208 66.150.208.90 152.194.113.84 114.3.185.124 48.122.69.138 145.140.23.255 241.197.25.126 234.12.73.86 211.2.18.136 12.124.99.161 62.147.196.248 120.42.91.31 0.188.146.136 27.167.76.185 80.8.168.148 252.47.210.185 247.159.159.112 17.13.114.93 79.66.158.46 248.96.193.16 179.162.39.205 26.131.8.106 43.23.252.119 12.209.106.148 226.50.86.122 123.126.84.236 168.192.194.212 139.116.18.234 228.102.234.136 55.96.186.41 113.206.136.127 91.148.140.125 104.83.6.20 83.236.78.5 65.198.194.66 43.39.151.141 168.243.195.121 39.169.202.110 253.239.210.61 106.196.36.74 138.215.92.9 136.229.70.149 175.43.239.59 192.22.254.166 61.73.184.166 84.175.6.173 31.95.128.250 4.191.166.96 213.160.24.214 177.239.59.179 38.60.205.180 199.62.74.167 181.16.28.204 146.3.176.91 85.51.114.6 1.54.30.194 85.253.178.142 72.58.180.70 143.139.109.64 229.108.35.87 244.61.223.62 216.214.75.29 87.46.227.74 63.217.98.88 245.134.41.39 150.174.178.1 163.0.142.251 81.238.123.146 26.38.36.25 254.230.123.60 159.162.36.99 73.194.248.158 133.152.140.76 246.193.127.26 79.215.208.174 216.186.92.161 52.40.16.176 255.227.233.107 153.182.32.31 8.145.50.40 17.14.35.79 212.19.232.60 223.123.246.235 148.177.12.243 29.212.180.76 184.15.189.246 36.98.81.235 92.173.205.208 186.5.68.65 123.203.251.80 0.13.95.58 133.200.125.67 26.232.58.148 169.144.122.156 104.178.150.148 140.239.124.121 16.47.32.107 12.226.186.217 43.204.24.55 185.240.244.132 12.80.79.210 184.95.127.178 23.60.82.103 209.144.111.72 128.118.87.6 255.151.81.86 176.212.108.86 207.103.92.170 50.138.207.248 52.109.120.246 108.115.79.177 150.192.184.158 112.183.249.51 206.150.125.101 232.226.186.108 223.172.219.120 3.171.181.62 187.215.107.185 2.247.157.152 179.215.95.22 100.219.160.127 205.162.4.26 174.139.210.117 167.253.162.46 30.71.219.20 129.79.173.164 3.165.109.24 186.10.8.248 145.171.150.24 146.201.201.91 72.48.6.183 229.79.46.190 119.179.141.87 101.195.172.159 60.135.197.42 79.172.246.186 183.232.63.212 174.186.153.161 165.247.130.56 173.99.129.249 116.128.206.167 81.17.35.186 24.94.169.224 158.33.4.169 126.130.26.170 34.174.106.20 90.3.135.197 138.237.53.142 67.189.103.192 140.16.138.98 30.19.88.143 156.11.61.47 150.176.4.20 69.203.132.66 141.50.14.145 177.102.172.178 21.75.8.179 120.140.111.231 120.108.32.199 208.161.220.245 172.106.166.155 154.155.82.120 133.251.219.136 56.87.102.74 59.222.104.255 215.216.89.108 103.31.89.79 3.126.160.222 57.196.184.14 94.95.127.111 17.227.41.155 223.135.12.135 178.129.118.73 245.121.97.243 183.218.217.119 31.96.97.57 88.121.65.218 236.48.152.101 142.160.200.224 54.80.114.43 128.255.93.99 53.191.228.172 231.173.106.234 193.51.68.190 29.193.237.227 219.247.194.11 250.5.127.223 202.22.120.90 197.238.133.168 178.31.238.119 251.146.151.124 179.158.66.249 133.16.243.53 231.80.195.16 126.222.137.32 101.26.48.30 118.7.169.63 146.209.17.138 39.117.36.50 226.178.42.153 95.189.36.208 80.25.28.88 17.169.158.107 219.119.222.78 109.224.156.247 117.132.133.254 178.61.189.105 128.100.209.154 154.96.12.94 116.140.174.131 39.162.4.95 32.97.152.159 136.163.10.182 35.173.107.207 117.57.96.169 14.168.109.190 91.29.15.33 2.67.111.127 65.85.0.142 49.46.69.226 2.166.26.237 213.111.238.79 70.144.179.27 153.213.168.97 176.40.176.129 70.236.39.21 47.176.14.39 185.209.33.43 57.189.243.186 39.141.183.158 35.153.131.229 111.73.174.190 24.143.38.11 247.57.231.46 197.164.111.26 184.68.186.35 29.202.133.146 167.91.163.18 56.211.59.199 88.47.216.151 223.59.191.184 30.195.68.54 159.219.190.230 49.174.170.226 120.153.137.64 126.64.73.70 9.213.209.86 49.52.34.70 217.104.116.178 217.102.41.37 17.117.216.19 187.170.239.192 188.121.66.222 116.126.16.80 76.58.168.61 51.116.140.52 111.118.176.193 127.73.149.130 99.211.209.73 151.178.28.99 223.71.200.199 110.136.128.202 239.78.22.114 112.73.74.249 42.181.2.143 47.33.38.138 83.106.175.22 146.61.151.168 31.210.177.197 239.178.95.13 24.211.242.95 26.188.87.130 95.12.94.233 23.170.31.255 96.126.189.220 101.66.98.40 100.39.26.1 33.23.233.206 126.223.204.159 246.252.143.143 241.26.209.101 37.11.229.108 14.102.180.173 12.223.247.62 137.164.204.88 212.233.185.246 169.149.71.72 250.241.61.129 28.214.211.238 206.44.139.38 14.150.24.74 192.219.4.92 5.195.207.105 129.73.5.233 181.29.211.60 197.58.210.186 155.146.74.109 49.44.162.173 79.112.148.210 74.64.129.93 151.213.157.104 247.177.191.248 232.139.152.19 181.247.117.84 249.66.194.71 108.130.105.185 154.132.17.219 230.96.52.116 129.220.172.55 30.35.246.187 119.189.2.148 152.252.58.45 112.63.136.23 218.136.182.10 208.56.59.59 206.80.145.96 109.216.106.20 253.83.167.243 168.142.3.108 121.175.80.36 36.73.139.23 185.193.156.105 89.105.10.65 98.250.19.235 196.71.32.244 120.75.141.226 82.43.84.249 77.229.65.25 169.198.113.78 3.55.217.28 155.215.85.149 31.10.217.209 15.31.22.86 101.119.37.15 100.232.17.15 198.130.4.95 222.132.204.79 158.179.94.222 243.181.194.105 19.249.195.250 242.180.136.103 241.178.55.194 57.127.105.80 131.7.197.213 210.74.128.228 255.62.201.208 234.69.135.16 74.213.27.254 214.13.89.175 245.224.135.65 70.187.60.187 41.206.238.210 143.48.12.151 37.166.179.153 78.242.97.70 169.5.11.176 133.239.124.179 197.47.42.68 67.107.92.101 166.34.48.220 250.15.112.86 93.70.99.141 231.193.89.62 242.162.120.169 53.111.108.232 188.54.204.113 194.28.175.56 93.148.223.169 209.224.172.252 211.18.205.131 115.228.89.37 55.120.188.227 53.216.213.22 225.1.106.86 12.177.201.44 7.135.96.205 253.93.39.54 104.32.246.74 196.14.159.75 148.166.220.237 237.241.72.94 240.53.66.117 187.172.68.75 34.156.49.211 85.29.135.203 240.152.15.215 120.83.181.216 59.221.4.4 56.149.240.0 67.150.74.186 127.127.15.77 99.226.47.65 74.32.21.92 243.237.73.137 183.76.147.139 174.172.33.211 241.72.194.40 204.137.165.58 53.67.48.86 73.218.141.208 255.211.142.240 24.116.161.189 185.80.80.111 46.69.227.59 161.59.20.101 38.221.1.187 8.49.18.198 188.169.183.209 124.191.85.242 197.27.101.130 78.137.117.251 22.115.194.247 149.196.49.70 190.246.42.123 64.215.252.249 138.102.221.238 177.170.220.8 47.68.48.164 6.129.65.196 62.187.147.83 213.234.27.106 117.42.9.65 102.219.51.210 193.228.232.86 220.248.41.232 230.166.128.88 244.100.228.226 141.22.223.100 212.118.37.97 122.134.229.192 72.232.24.179 106.223.214.32 217.117.134.215 128.238.89.129 245.93.34.164 19.42.151.31 2.100.211.182 213.9.19.160 105.5.127.80 83.143.15.214 113.181.50.184 250.66.203.128 206.41.253.224 41.93.83.218 240.101.168.9 128.171.146.15 115.112.71.96 31.24.28.198 139.68.59.247 183.88.209.25 133.183.216.53 50.154.194.238 183.253.239.23 24.151.70.51 148.132.241.55 156.223.172.225 153.85.196.226 178.230.28.142 107.30.27.170 110.91.68.38 98.44.39.39 18.80.169.205 182.43.145.197 5.196.165.89 111.182.241.213 148.229.162.8 33.40.25.240 205.21.77.100 116.33.140.144 197.159.194.140 101.160.61.136 70.3.59.197 26.184.187.181 177.130.8.203 94.171.195.86 42.107.202.183 169.87.166.135 152.12.222.162 201.125.164.7 72.99.106.198 106.87.175.253 176.36.1.161 62.233.143.113 156.134.145.7 173.45.130.89 209.97.148.98 137.100.180.174 215.226.117.123 185.192.48.189 153.77.63.206 4.43.37.215 150.121.161.104 175.218.50.225 165.43.34.95 59.58.144.112 90.152.249.53 109.207.86.179 62.131.89.47 126.58.187.164 129.107.81.43 25.247.6.218 160.183.232.254 153.195.22.113 11.154.171.59 223.189.72.244 170.61.20.246 91.70.3.212 2.71.192.118 97.246.103.31 148.50.99.164 171.71.205.40 91.75.37.65 41.176.120.2 70.217.168.242 93.17.106.13 159.130.46.236 97.207.72.95 254.147.95.38 157.218.151.150 86.189.13.162 31.33.11.93 80.191.19.228 181.58.211.64 57.5.195.224 23.23.226.121 183.246.134.11 118.31.229.66 229.180.211.107 161.132.202.248 176.127.236.200 38.217.131.100 161.196.217.229 89.22.50.243 203.229.186.71 192.228.176.56 224.119.156.248 151.145.31.170 11.240.99.12 110.243.250.201 246.248.59.245 254.41.7.217 236.71.87.124 194.154.195.230 62.184.133.81 93.63.6.152 187.10.216.52 144.174.39.199 71.101.21.182 40.13.150.79 42.245.53.228 224.234.208.120 252.35.58.163 67.152.11.176 207.159.251.59 122.163.131.4 153.147.194.55 46.226.49.175 68.223.240.205 159.213.134.6 20.205.84.77 2.94.76.60 241.131.253.194 126.2.148.0 113.170.183.228 153.77.199.181 65.71.202.43 61.156.147.250 255.211.56.71 186.107.202.197 237.238.72.116 37.51.181.186 23.237.216.124 143.156.9.214 1.141.11.14 231.170.93.4 102.103.178.182 80.42.174.139 84.82.219.246 108.189.29.225 5.188.112.60 45.73.44.176 243.95.147.108 205.38.244.78 172.203.124.28 28.170.34.129 206.86.218.230 104.90.117.96 14.45.170.220 88.20.176.94 146.149.80.189 125.213.28.77 247.171.224.31 98.73.124.4 29.107.121.35 55.110.118.14 156.157.201.71 14.63.186.177 224.183.125.107 252.215.98.12 218.85.239.156 25.175.235.20 186.50.33.98 11.127.144.95 254.163.123.73 222.179.113.47 222.27.78.80 229.123.231.108 211.37.150.211 241.212.231.80 162.125.227.156 149.56.214.221 223.240.201.245 165.31.10.86 141.106.70.143 51.128.204.213 21.244.114.178 67.226.89.2 171.3.28.10 23.103.102.167 162.93.41.187 221.123.139.9 242.170.103.78 137.167.35.61 5.41.235.38 147.245.195.32 98.188.249.102 251.65.4.90 215.174.63.102 242.78.198.55 79.158.45.236 237.220.68.57 165.12.106.55 126.204.11.157 32.208.140.255 221.44.13.76 204.7.159.58 86.67.3.166 69.147.218.170 8.94.194.98 14.249.62.214 108.242.143.1 147.74.40.212 62.203.73.252 91.97.81.170 96.137.3.112 9.174.213.105 199.171.145.219 254.191.172.91 43.92.198.29 176.187.165.184 120.109.58.206 18.136.65.135 145.155.66.186 14.207.49.146 171.99.226.157 172.107.250.207 163.117.167.10 130.3.176.50 160.100.245.149 163.61.186.59 148.130.151.49 114.151.153.102 133.119.11.73 119.83.13.38 120.37.184.88 186.14.77.148 115.196.228.195 74.13.133.232 248.249.1.30 153.174.164.151 68.229.254.58 102.39.166.70 18.98.158.43 165.137.227.214 234.142.72.249 195.67.38.57 16.34.29.181 213.170.186.173 48.232.151.69 204.62.145.42 167.103.96.9 146.197.52.59 202.88.118.173 210.98.121.117 70.99.224.1 197.3.227.147 202.239.135.128 102.143.149.167 242.138.113.73 251.224.222.22 64.165.9.86 201.128.221.144 138.148.167.6 100.254.171.61 141.153.243.201 62.167.153.206 201.240.182.148 206.36.15.36 5.161.166.69 202.252.167.191 94.242.144.9 15.12.1.116 86.254.254.221 23.98.31.168 107.38.61.7 12.159.235.81 215.42.47.140 171.115.152.34 88.2.235.150 119.162.28.157 37.166.179.140 67.18.164.116 203.133.21.233 177.147.124.134 9.153.198.50 96.71.68.26 185.58.182.70 100.128.174.156 251.151.136.49 251.41.98.59 189.46.167.201 38.202.16.152 249.139.135.158 28.157.141.50 165.209.149.21 136.162.224.173 65.133.33.168 145.103.85.217 96.148.70.106 141.191.197.233 133.199.39.37 229.21.184.74 19.176.212.167 111.98.244.30 40.60.122.129 152.71.3.167 110.116.126.48 157.155.151.17 127.165.245.18 250.3.193.188 90.185.193.17 205.239.182.241 230.85.4.211 180.206.197.164 72.41.95.144 79.244.198.198 178.128.122.211 97.202.90.191 205.138.64.183 115.117.203.20 170.120.115.217 214.28.39.174 113.201.115.222 231.213.174.127 27.49.215.223 247.77.22.152 63.28.111.26 112.93.100.119 230.118.238.132 90.134.32.62 39.68.85.137 183.17.244.112 191.53.140.47 244.159.167.182 183.194.60.204 15.193.61.79 144.127.4.195 178.134.177.213 152.37.36.64 60.7.230.213 27.181.139.174 167.48.231.132 220.96.139.144 166.183.34.221 155.60.0.150 70.11.252.173 83.84.24.142 10.29.99.87 95.164.157.168 231.106.63.94 244.117.3.186 123.207.245.97 179.16.102.87 33.237.125.109 8.56.155.149 27.56.219.45 1.54.8.164 182.68.31.239 239.21.205.192 124.187.133.196 132.140.213.147 33.87.156.145 99.162.26.196 68.40.204.195 34.0.96.226 35.70.200.205 247.6.190.9 118.175.6.111 240.196.251.133 122.177.180.7 104.40.9.193 114.129.215.78 205.23.104.155 95.220.42.42 136.205.221.168 116.204.58.90 229.139.162.38 208.251.170.139 251.135.255.217 159.152.184.36 253.29.82.20 62.188.21.123 42.230.138.254 180.206.57.133 57.226.180.20 0.9.158.56 106.28.61.152 15.205.116.71 134.181.91.120 161.87.31.158 86.60.178.138 123.115.121.252 182.230.67.243 2.108.163.12 170.141.36.168 40.52.118.20 3.105.233.192 226.92.34.67 17.124.186.220 242.129.252.59 163.43.159.73 7.247.65.90 22.186.191.133 219.232.35.58 58.185.217.70 88.137.42.120 148.250.58.50 161.132.172.73 198.37.240.148 231.77.88.51 150.78.154.5 136.86.44.114 249.85.254.71 117.201.95.71 97.165.130.166 140.100.46.64 148.106.193.80 229.81.175.20 145.35.171.58 110.83.1.46 97.113.182.1 123.8.100.191 72.253.65.85 146.35.112.145 191.232.171.107 54.105.58.247 126.252.15.212 64.102.72.196 197.225.6.3 4.139.124.63 195.89.241.95 96.31.11.33 36.5.35.49 36.228.205.231 25.49.29.4 44.212.106.241 48.8.28.103 173.214.187.108 106.217.189.112 20.218.9.146 142.248.106.149 127.13.44.41 70.175.86.119 146.176.251.188 34.19.46.100 172.213.6.119 240.69.222.200 32.209.184.29 77.74.21.215 176.11.181.177 7.114.154.97 156.58.221.44 149.160.150.33 129.158.42.203 151.103.24.22 138.194.210.0 126.155.28.79 217.84.43.39 213.4.244.246 59.199.5.149 43.58.195.159 225.43.7.184 200.96.203.145 61.51.192.22 169.156.213.189 90.6.83.160 13.134.164.8 72.1.49.16 90.95.64.127 242.241.55.55 138.33.66.147 38.168.180.166 7.179.61.198 78.141.206.146 12.34.28.35 94.3.118.140 237.176.78.130 179.225.62.75 14.57.3.68 200.237.25.29 27.211.154.178 57.124.151.85 136.93.174.99 191.231.132.198 90.136.98.124 33.40.222.117 189.210.248.79 134.140.226.233 134.87.9.147 110.170.223.183 116.125.12.131 151.12.162.66 228.67.201.42 100.39.242.94 219.225.22.40 72.226.88.123 46.55.69.115 25.20.192.189 244.195.138.143 11.47.42.240 141.212.98.204 234.251.235.171 191.204.165.44 130.169.28.6 196.162.200.84 251.5.68.137 195.210.56.207 9.177.7.217 107.92.58.180 228.69.27.162 244.168.231.74 112.202.145.165 213.95.185.96 207.39.235.63 53.93.237.70 64.103.81.177 62.161.84.213 65.28.127.45 9.234.143.208 215.12.165.204 38.11.38.184 130.145.172.236 109.10.178.153 145.39.175.115 167.78.21.224 180.169.151.232 135.95.151.233 108.118.196.114 229.224.166.57 243.0.41.188 221.208.103.99 161.241.153.49 178.113.128.104 39.230.7.137 142.108.150.236 138.162.255.152 156.27.87.191 162.174.46.100 48.232.166.27 207.46.32.248 103.218.80.98 75.120.224.3 23.77.12.59 99.173.198.71 212.17.190.71 81.5.240.7 148.48.194.89 50.50.150.129 61.112.132.254 45.217.60.62 90.119.220.67 132.78.27.6 3.67.67.116 59.246.158.146 193.155.97.251 23.43.239.120 26.181.76.137 56.18.245.202 130.157.204.83 15.174.70.88 144.91.173.107 231.158.253.172 34.226.70.216 142.46.246.55 213.226.223.56 2.37.197.147 107.101.218.119 116.113.226.123 137.205.132.30 132.53.221.65 16.13.85.128 169.129.113.55 220.170.151.188 251.119.152.35 210.221.53.148 241.29.186.227 81.2.27.7 181.240.75.126 210.88.77.81 152.128.67.243 1.153.247.94 103.169.20.66 228.221.146.83 231.15.26.188 162.235.113.113 110.73.99.30 154.238.87.78 23.51.104.111 232.149.108.108 69.238.14.57 181.85.195.209 55.180.41.60 135.109.135.161 12.236.217.60 216.91.206.114 38.176.13.26 29.196.215.129 95.242.236.109 53.49.114.164 145.189.45.231 233.175.240.249 151.115.103.175 233.50.63.77 2.135.186.225 248.121.132.109 93.91.198.52 220.5.100.209 105.11.118.147 105.177.46.176 117.3.15.251 115.155.169.175 61.96.100.94 223.136.202.31 165.0.215.187 171.16.249.142 118.135.25.65 109.59.177.209 137.160.121.56 200.196.180.49 46.127.250.17 150.189.224.2 176.111.42.254 69.75.52.148 224.108.16.119 100.39.241.237 14.14.220.42 52.95.82.220 155.15.49.66 246.63.88.57 76.167.195.177 130.49.219.26 32.237.96.175 212.7.129.65 184.109.126.169 119.195.230.163 53.225.200.159 210.241.131.153 3.158.37.136 11.119.232.55 39.237.80.49 133.199.125.106 89.223.172.212 230.32.105.209 5.24.173.85 108.180.202.0 109.167.111.202 220.216.26.57 231.58.111.12 214.189.56.73 217.6.245.120 79.142.219.197 69.55.7.159 22.160.187.240 74.77.94.209 188.1.102.173 8.226.108.114 158.82.74.9 116.115.117.124 234.246.21.164 181.187.29.75 19.44.128.24 152.245.200.230 244.129.175.15 80.124.71.130 88.10.103.107 114.15.196.185 196.14.152.159 225.252.127.134 9.178.103.178 20.129.249.187 85.225.173.41 221.179.200.83 152.245.29.169 188.46.130.186 212.20.97.110 133.122.250.178 235.179.21.17 239.250.27.51 9.106.11.233 166.123.92.67 172.167.232.144 106.35.201.138 236.1.254.11 245.196.108.189 37.17.80.171 128.26.84.142 234.73.144.177 100.80.166.154 184.235.172.46 61.240.20.69 84.107.110.248 231.92.184.190 211.31.43.154 172.188.113.142 83.154.181.35 108.59.26.227 41.118.65.14 129.224.146.157 108.157.149.126 190.213.105.96 209.173.131.118 198.30.12.230 38.247.110.232 28.159.169.124 107.91.221.163 58.98.189.178 216.112.65.175 255.229.4.122 241.147.80.43 232.35.95.2 118.140.181.121 236.103.231.187 220.255.180.27 117.228.154.248 241.38.89.6 254.212.133.10 9.77.177.128 27.146.201.148 186.219.53.146 79.64.140.81 81.83.43.126 21.160.197.255 24.84.248.231 17.232.98.184 104.195.192.227 153.13.102.5 245.149.62.238 210.166.101.36 67.51.228.206 156.193.6.43 49.214.20.172 225.155.226.8 253.171.158.255 48.128.123.79 78.199.202.13 95.103.8.220 203.74.244.188 52.47.230.209 8.11.92.145 23.121.115.254 62.121.61.235 232.194.255.147 27.137.155.24 125.205.62.97 5.151.31.85 63.183.112.243 212.24.37.127 3.89.86.124 64.14.117.207 24.148.65.2 153.236.173.102 141.22.66.239 129.201.120.195 250.38.215.85 103.52.201.53 4.53.14.189 5.116.170.177 166.80.94.27 241.152.41.186 111.226.167.27 122.128.189.115 58.125.185.175 142.245.25.174 117.94.132.30 232.113.165.75 227.36.247.34 68.196.179.8 102.114.239.21 107.51.83.56 14.89.200.153 143.24.6.251 221.130.67.169 100.160.182.188 6.122.225.47 241.120.60.67 94.164.86.72 220.220.179.49 114.129.237.110 181.208.32.75 220.57.13.82 180.251.124.229 86.162.41.126 200.212.65.204 40.118.198.128 254.234.175.31 5.65.151.222 242.138.30.155 208.3.70.134 149.23.191.45 166.244.107.109 113.205.147.172 136.187.208.61 5.48.28.154 130.36.50.173 249.101.187.50 226.97.147.135 89.64.197.65 0.81.57.45 179.24.217.136 137.19.63.218 33.246.104.241 118.245.199.24 123.53.82.231 165.75.229.218 94.62.202.162 13.33.175.35 112.231.245.15 0.195.223.111 78.83.203.153 247.172.109.59 206.119.1.126 204.191.124.86 239.38.148.84 59.233.229.113 183.35.8.239 2.92.247.238 61.115.216.24 15.62.117.88 63.111.112.228 49.187.224.10 29.3.171.220 189.160.147.213 76.163.86.254 50.108.201.223 165.21.0.194 211.184.105.114 206.47.211.230 186.88.180.192 179.4.241.99 110.1.153.144 26.191.233.144 183.38.68.179 31.33.22.5 75.128.228.172 217.16.250.39 49.181.189.128 133.59.175.160 116.103.82.114 1.215.194.120 59.180.100.106 11.24.12.52 216.246.40.250 15.181.243.135 158.184.123.124 230.164.220.148 235.235.195.227 29.53.84.223 108.85.193.78 17.117.13.163 219.174.158.214 74.158.156.85 8.35.131.247 164.171.201.245 181.212.243.10 51.115.140.231 12.51.150.12 123.183.150.199 3.37.136.148 1.112.214.48 240.84.14.73 208.132.150.103 20.209.126.28 34.238.250.226 45.206.214.182 79.14.97.206 168.128.179.6 124.29.191.123 224.1.169.224 137.91.50.209 129.81.141.178 212.120.112.23 249.176.73.146 252.162.39.85 194.6.101.2 144.135.236.127 98.229.161.81 217.199.1.99 92.47.79.216 243.177.16.152 184.120.24.200 95.204.51.109 1.166.183.24 214.235.118.116 211.211.34.152 113.230.161.98 58.130.121.22 9.35.159.157 41.209.144.179 35.29.226.173 167.20.143.23 20.70.250.248 161.196.135.96 114.145.180.176 200.49.115.101 217.254.191.125 217.78.144.130 242.183.53.168 169.119.160.243 136.124.246.158 253.163.172.89 176.177.85.117 140.129.189.106 221.120.234.131 197.123.171.156 146.126.36.224 223.30.223.217 238.218.197.181 20.65.58.18 83.104.107.3 33.203.37.183 165.120.146.17 201.27.123.168 121.61.208.137 165.112.92.128 20.4.57.90 53.125.244.156 167.181.131.219 1.206.109.235 153.0.33.64 207.198.93.118 207.110.146.145 54.106.177.171 59.131.43.108 108.109.122.240 65.245.90.90 171.102.151.115 50.188.230.239 185.9.150.145 123.245.148.153 5.1.99.188 239.199.232.112 47.186.148.32 104.192.132.172 245.176.236.90 7.6.22.169 90.126.157.159 212.204.212.181 104.16.102.31 195.38.79.178 22.13.9.10 230.236.219.226 39.178.90.225 32.162.87.93 93.53.120.136 194.207.163.10 204.222.142.39 120.75.74.132 15.42.249.164 160.48.62.19 24.63.24.164 156.48.186.128 228.202.99.183 137.106.1.91 205.46.243.118 22.209.0.5 164.197.33.58 111.235.41.132 129.193.83.241 193.182.128.38 9.93.21.112 9.59.7.20 125.33.17.141 100.66.167.32 205.141.231.162 163.227.160.139 83.47.156.246 176.2.77.233 141.76.144.241 106.255.109.17 5.95.176.13 223.157.37.134 112.97.175.251 57.83.196.136 94.47.142.197 213.94.13.108 68.219.191.65 98.118.177.71 159.74.231.104 191.135.232.252 244.91.46.139 111.56.69.247 175.49.231.42 114.179.30.241 119.21.239.83 40.190.184.5 233.162.251.0 41.136.225.72 11.230.119.41 121.156.32.167 95.95.178.52 40.66.86.13 124.161.95.191 235.161.14.231 189.229.231.90 79.21.48.128 161.255.168.223 132.76.243.161 144.11.77.223 242.79.234.173 163.105.13.96 139.60.68.163 214.185.255.239 81.112.208.213 98.255.74.15 75.150.234.15 219.44.5.29 97.239.154.147 143.130.122.143 109.88.81.64 146.88.81.156 133.80.186.103 218.85.161.20 63.1.204.204 82.141.185.148 233.235.73.39 228.219.232.48 75.8.109.42 162.31.143.58 230.160.221.114 80.143.230.7 0.84.69.118 138.67.246.52 19.16.59.122 239.88.92.103 36.238.145.223 37.216.237.232 250.182.229.197 36.24.117.120 253.253.76.241 28.0.191.223 99.243.212.21 176.135.251.63 103.135.140.139 17.66.52.35 195.205.171.199 97.255.232.217 106.81.33.235 29.138.54.127 34.193.219.19 29.0.45.217 228.30.80.218 43.74.222.53 57.57.5.157 96.107.52.202 124.7.142.52 136.178.201.117 15.97.223.95 230.228.99.145 22.232.83.49 229.240.210.81 3.242.63.38 42.30.201.186 66.216.74.178 73.223.240.244 128.219.66.219 91.66.25.169 138.253.35.32 167.161.36.100 179.247.58.107 149.37.175.199 124.98.164.147 26.176.127.206 207.135.219.189 87.114.175.73 82.138.108.178 164.47.250.217 179.171.153.135 100.10.230.225 169.117.209.122 139.214.24.186 220.162.10.140 90.36.129.52 55.96.123.151 243.56.188.180 163.87.232.251 166.77.114.246 65.234.63.99 173.15.157.180 127.66.47.242 75.13.94.189 164.75.169.195 58.30.219.130 64.53.12.22 214.119.127.19 146.127.65.241 43.193.141.216 134.105.69.135 232.74.15.31 35.225.169.213 36.31.75.177 65.35.244.74 84.145.209.33 55.183.200.19 215.198.30.164 191.226.16.190 219.144.141.215 225.251.133.116 85.169.53.4 81.240.5.138 181.84.251.217 162.129.33.159 29.149.26.108 88.62.180.242 76.211.115.155 220.225.197.124 138.36.174.122 64.20.75.253 90.164.179.172 155.162.227.162 129.82.198.88 147.34.134.200 45.240.66.12 133.2.239.10 122.255.146.138 163.231.174.39 233.188.113.157 10.169.231.127 159.184.105.251 1.47.167.112 231.63.74.250 26.5.182.162 19.102.254.190 85.59.203.255 113.112.53.212 76.56.104.129 215.190.169.107 252.145.207.229 30.141.21.5 132.144.115.249 158.26.98.125 75.51.216.67 72.97.229.100 137.80.244.55 12.104.11.37 117.201.86.77 49.69.174.22 216.77.176.34 206.125.183.27 144.145.78.84 45.91.89.171 107.46.206.107 138.72.152.250 46.93.189.71 213.115.94.235 186.160.111.70 166.12.0.202 176.57.126.223 106.208.12.147 94.115.249.174 189.200.203.128 147.1.38.117 196.33.89.221 213.183.61.235 206.92.9.215 84.170.80.104 211.131.152.55 226.136.102.184 62.8.12.137 144.114.70.97 112.36.73.60 157.7.251.51 116.207.199.67 250.191.88.250 109.238.47.209 30.219.183.243 133.206.238.62 118.32.0.244 178.245.154.25 186.22.212.88 190.200.36.89 238.139.221.47 162.165.147.242 131.173.125.188 113.128.227.120 197.132.171.170 241.223.133.192 208.189.149.28 49.43.66.22 187.245.96.105 238.9.66.14 142.244.21.68 140.97.241.143 54.186.206.170 149.111.191.105 43.177.112.40 143.156.162.186 62.16.234.232 179.70.187.97 164.3.159.199 139.110.102.188 226.186.217.162 238.67.233.238 1.56.105.68 196.88.24.214 20.61.103.45 97.236.110.167 232.72.57.142 113.229.27.65 88.201.190.213 99.237.147.35 33.128.2.232 198.147.192.121 172.43.53.32 51.3.210.138 84.165.214.86 62.124.56.37 190.14.146.162 239.129.60.254 124.29.205.56 14.179.159.217 55.154.141.24 31.128.148.211 89.13.118.11 206.101.144.247 102.180.224.83 116.137.243.253 163.246.190.128 163.164.78.121 64.84.91.62 226.198.114.185 52.187.225.82 247.125.22.100 92.46.215.15 166.57.216.174 190.113.111.38 14.210.187.251 37.189.82.197 8.54.74.248 134.39.40.2 76.27.211.120 231.185.44.88 204.83.62.60 58.141.184.26 176.102.78.125 222.228.28.227 46.128.27.162 118.96.193.72 207.240.122.179 160.228.39.96 117.90.172.154 229.253.151.15 122.230.255.17 190.163.255.52 39.235.68.165 18.75.49.154 29.125.193.30 70.1.244.226 20.12.113.97 187.92.200.125 163.117.135.56 65.221.68.19 3.99.148.186 96.131.176.226 47.97.197.234 69.244.116.160 181.199.4.215 60.63.105.59 93.145.220.239 234.143.132.106 73.154.96.189 185.163.121.103 6.123.69.176 21.125.224.179 177.99.13.78 201.0.250.230 253.146.91.105 135.46.192.40 6.121.56.75 234.227.107.172 184.195.11.189 168.26.75.121 235.219.21.31 145.136.57.206 211.113.116.61 72.204.241.150 127.167.171.31 93.177.52.26 218.251.35.31 184.170.188.184 131.227.217.62 137.217.167.148 211.211.181.117 24.46.121.9 127.108.151.70 58.27.158.249 19.88.237.169 177.224.1.220 40.238.253.194 188.81.27.140 118.208.55.120 127.168.171.198 13.52.254.255 253.209.153.146 82.47.58.70 30.139.238.244 245.63.67.216 219.9.150.90 206.70.205.221 153.42.89.222 128.184.66.115 112.59.134.189 88.226.210.109 66.248.150.38 200.54.248.162 37.150.216.9 40.229.254.114 136.163.4.21 160.132.246.43 147.216.235.236 140.149.206.215 133.15.14.164 62.151.94.44 131.213.117.8 49.56.237.3 18.154.159.20 45.251.117.127 243.101.67.47 164.60.19.113 99.160.201.143 100.161.161.29 224.13.218.4 10.94.22.195 159.123.29.252 224.199.240.102 21.138.227.240 61.34.89.233 144.83.56.17 93.104.159.184 0.191.207.148 221.134.60.14 151.228.120.148 116.27.116.1 132.30.58.2 241.42.43.64 236.165.141.95 168.164.242.248 80.132.71.115 33.27.141.90 209.214.196.98 180.199.213.80 234.81.124.148 40.232.169.127 82.225.161.119 96.136.8.90 227.136.113.192 217.122.54.121 126.164.45.43 129.139.218.193 83.72.27.74 91.125.7.207 74.16.38.251 255.115.207.2 93.54.89.34 42.21.61.58 100.212.147.140 29.216.119.185 175.101.242.184 155.50.62.27 26.90.100.219 209.219.235.35 122.36.208.72 164.203.80.56 146.121.52.0 29.20.50.64 139.166.56.168 84.22.28.156 93.11.126.74 66.249.81.26 80.63.232.78 188.143.194.159 139.124.211.106 69.247.138.47 224.12.74.196 71.254.117.30 212.144.227.219 97.213.172.160 58.243.237.176 96.92.26.168 110.233.62.34 220.134.92.220 9.175.19.28 130.101.239.37 110.4.27.249 176.99.201.138 226.112.95.149 224.209.57.50 222.196.209.154 217.200.30.49 106.56.58.145 194.128.215.38 97.225.136.205 73.232.61.215 138.120.184.159 189.16.68.68 65.89.98.165 254.163.124.183 231.3.175.101 125.124.91.101 130.252.121.150 204.62.80.235 229.1.25.11 173.19.0.32 16.28.201.128 145.110.53.190 8.106.209.54 250.128.172.54 17.240.42.169 7.93.177.96 174.153.224.87 17.65.20.164 75.7.227.47 140.36.136.224 104.239.125.254 178.219.94.248 36.86.120.23 234.111.47.122 133.61.241.163 6.112.142.212 232.33.152.190 120.184.250.174 75.47.95.78 229.163.210.31 126.134.189.206 56.34.69.188 16.21.102.70 238.21.137.220 22.76.137.88 180.200.78.139 136.208.121.79 222.144.231.189 167.129.28.27 32.151.123.78 161.19.27.135 107.250.4.185 18.37.63.145 67.30.149.114 237.201.131.61 220.148.224.202 243.171.21.183 19.16.41.67 249.135.107.164 218.98.36.76 67.57.8.244 21.44.40.144 135.72.67.149 135.129.172.35 85.136.197.33 50.216.177.203 4.140.184.235 161.102.183.170 156.116.234.84 12.134.240.126 202.210.175.71 115.218.148.11 250.177.249.78 154.123.155.191 157.248.200.52 206.86.239.244 234.136.239.211 88.61.184.52 46.162.218.33 120.146.252.160 150.115.80.16 19.31.207.170 242.16.78.103 149.148.209.40 46.41.36.181 1.63.112.36 212.110.130.64 223.111.129.224 200.129.36.49 67.136.62.73 228.89.213.157 108.4.91.156 96.120.188.185 209.157.63.68 217.142.67.171 205.28.98.235 249.146.77.47 45.251.150.243 192.148.230.193 105.236.40.146 130.57.28.195 169.92.154.102 17.58.130.154 172.240.241.181 200.32.193.176 84.214.103.237 134.3.16.81 157.31.234.13 119.191.121.229 125.113.192.32 231.31.248.234 168.159.198.14 193.255.192.53 100.47.2.144 49.94.182.138 101.61.7.151 225.0.153.14 71.107.116.35 77.63.159.195 182.52.51.192 187.64.16.49 75.43.246.218 127.37.197.43 233.16.77.125 40.124.247.207 29.136.240.222 166.131.112.230 62.19.116.229 65.224.219.165 210.212.119.32 216.176.104.79 227.156.239.78 207.224.145.252 246.247.190.23 184.12.182.70 163.171.17.108 185.85.70.223 98.253.153.195 148.243.165.202 37.65.225.124 87.65.111.149 50.166.189.221 252.194.58.210 134.52.8.64 140.32.83.3 89.92.195.39 251.190.169.220 51.0.133.39 200.93.228.5 221.221.197.69 49.158.194.97 84.224.194.195 37.125.173.232 101.4.186.88 59.139.121.251 248.22.11.118 15.195.99.182 255.9.181.17 196.132.105.81 156.153.110.158 176.114.234.151 19.220.118.138 117.218.94.199 121.9.47.69 204.25.148.252 164.176.52.56 162.183.7.204 77.104.178.211 254.82.1.83 48.143.115.150 142.193.75.140 236.31.150.137 236.74.194.17 181.187.1.63 97.42.82.110 12.154.203.108 69.98.173.177 236.191.120.149 155.130.50.179 163.218.157.135 7.203.80.146 23.105.152.102 237.128.159.255 82.22.27.22 146.57.48.182 184.0.173.164 206.250.3.104 238.192.187.143 163.101.88.61 166.230.255.22 156.227.174.117 72.145.189.38 233.33.101.62 62.224.11.180 128.128.200.87 225.245.227.59 38.97.253.15 210.178.178.146 161.126.207.148 146.23.21.128 24.30.238.133 206.105.239.76 240.240.32.54 227.226.254.105 177.251.133.197 11.192.63.224 17.18.154.183 189.30.95.187 52.58.77.159 206.236.162.117 203.251.42.255 239.158.105.252 8.212.111.22 183.247.247.160 198.14.71.77 26.200.240.21 16.201.192.135 199.10.198.204 15.199.202.138 189.112.176.154 233.146.191.35 163.151.182.39 212.218.75.63 72.19.143.74 14.123.119.216 107.59.92.56 68.24.154.17 45.179.213.214 52.156.187.67 77.11.242.123 47.4.64.64 70.52.168.26 129.65.130.185 57.155.14.101 199.170.3.228 140.70.67.50 110.8.16.205 79.15.9.39 163.104.149.209 124.110.182.76 133.31.84.225 220.6.114.247 168.164.192.117 122.105.121.91 71.27.87.4 39.103.147.247 190.78.0.112 223.239.99.72 11.1.23.132 47.200.155.79 123.74.21.51 137.215.65.211 7.171.113.72 24.14.212.93 3.209.167.66 107.132.153.182 230.215.226.118 145.122.209.64 124.85.248.192 230.199.73.47 164.92.116.39 197.189.245.2 245.203.17.99 181.137.72.64 140.226.171.120 30.138.35.226 172.98.243.193 193.68.237.166 197.158.71.221 90.170.99.40 130.20.46.209 115.247.233.25 4.17.182.17 110.196.192.47 140.191.134.106 62.204.8.221 193.170.185.34 239.203.4.226 128.134.200.252 177.249.56.215 12.22.138.56 58.119.241.42 32.49.180.131 13.77.9.230 153.255.86.144 105.0.252.146 205.5.16.19 110.108.100.83 213.147.229.35 51.62.139.12 172.199.0.179 15.169.138.16 126.99.197.209 189.138.16.237 235.141.163.132 173.153.92.19 145.235.212.249 218.177.22.245 149.16.25.24 51.101.175.38 202.37.163.178 78.92.107.108 128.254.48.10 239.132.16.51 245.208.23.248 1.239.43.154 121.230.81.27 132.131.126.42 83.217.22.51 51.167.29.195 90.140.72.87 55.8.118.141 216.185.109.57 255.137.232.65 146.11.126.163 11.178.222.207 189.201.148.100 233.1.140.173 19.17.10.251 67.194.254.151 148.44.230.57 18.97.137.46 247.48.23.19 175.211.98.155 245.90.204.123 27.132.50.221 113.138.219.66 255.39.76.188 117.73.114.86 105.142.194.202 175.176.100.213 159.108.141.221 221.228.130.240 45.217.102.216 191.30.35.170 17.171.11.51 58.109.32.41 193.231.152.4 158.227.123.13 230.177.116.207 89.11.217.123 36.141.222.36 145.2.174.89 131.238.136.76 188.189.188.116 73.62.238.150 162.125.189.59 118.95.162.130 2.80.141.26 144.69.116.107 125.149.221.28 237.157.114.188 22.78.175.115 57.60.237.67 95.227.235.246 155.13.55.113 123.192.78.75 136.10.178.165 124.51.218.230 14.104.34.248 156.26.240.70 185.28.248.24 175.165.80.251 78.15.123.14 32.25.80.22 90.65.228.255 0.174.201.158 155.133.205.111 60.57.10.54 165.185.27.218 34.188.9.220 250.52.183.12 87.70.74.203 185.7.100.212 198.216.108.164 248.205.208.29 86.5.82.21 122.187.30.8 124.0.73.151 54.185.3.138 3.27.209.21 8.25.142.58 215.207.241.105 241.228.26.221 71.213.37.112 111.57.180.161 28.244.220.27 47.240.80.105 15.124.113.150 39.185.174.26 94.175.103.28 43.17.95.12 108.89.207.45 246.120.132.93 128.29.78.152 229.27.189.123 199.163.124.71 84.19.227.188 191.122.39.58 132.35.227.223 55.212.150.134 65.161.104.16 253.193.141.198 195.149.248.99 148.177.236.138 245.241.99.251 132.78.221.97 11.222.123.48 251.210.200.104 17.108.163.221 211.31.132.139 95.89.160.198 157.54.166.188 74.187.44.177 94.19.254.51 101.28.254.28 106.235.218.93 137.58.135.151 122.244.28.4 230.219.24.197 220.153.153.75 126.30.120.130 126.232.186.143 249.173.69.117 85.3.230.113 133.166.138.251 143.124.234.183 87.176.68.219 207.141.117.130 220.86.65.24 14.226.107.5 210.39.203.145 15.114.114.150 186.92.42.162 58.114.18.143 72.11.158.60 102.27.90.149 245.244.86.55 111.223.48.41 63.165.250.200 132.251.93.170 234.20.32.61 229.60.74.23 242.12.24.72 125.53.36.4 157.51.168.41 250.143.30.68 177.33.20.18 4.46.249.198 205.232.75.85 56.252.142.70 45.181.14.222 245.20.66.85 254.14.92.160 214.51.212.211 43.187.180.243 89.58.71.105 94.246.213.60 84.173.207.249 193.186.66.254 226.140.220.114 142.152.190.142 107.177.82.80 154.33.179.72 168.158.79.126 134.206.192.26 43.8.253.45 97.177.212.87 119.77.180.239 73.167.78.245 174.239.254.128 42.52.190.186 116.181.47.53 160.169.156.121 219.78.17.232 198.50.91.229 237.143.63.109 12.228.200.215 107.63.87.65 132.55.195.152 131.200.238.235 78.173.247.143 66.92.85.34 127.213.39.116 104.212.106.21 151.225.139.35 235.189.222.122 106.18.149.150 115.74.225.0 213.4.63.204 223.187.10.106 40.30.111.207 244.177.14.68 198.191.35.131 223.222.145.216 157.145.165.63 74.42.97.167 67.64.251.173 68.245.242.231 57.191.31.154 203.119.198.120 94.7.91.11 8.205.11.150 212.137.114.225 69.80.179.180 147.170.30.76 136.68.153.140 83.240.109.210 184.146.210.173 83.118.203.109 68.159.100.15 108.210.38.81 199.155.94.246 117.228.52.243 96.0.203.154 61.111.70.105 236.224.140.185 9.91.243.229 127.192.168.98 158.15.181.169 1.36.55.72 156.46.74.36 25.252.212.115 22.149.216.9 0.40.247.4 142.81.48.209 121.103.12.127 143.220.237.57 164.132.49.131 246.249.35.221 94.97.163.61 174.47.96.81 160.45.57.252 185.110.159.132 253.237.54.26 219.33.2.121 63.230.90.55 246.198.172.102 87.58.191.172 131.154.98.111 250.162.154.196 180.59.198.26 59.116.97.71 5.170.158.88 228.93.78.151 11.63.215.121 162.10.143.215 89.198.52.111 143.98.225.220 156.5.213.46 194.251.238.201 237.4.249.193 85.50.24.56 0.215.229.164 97.229.93.8 165.192.77.37 214.53.86.157 229.191.167.139 226.19.152.114 229.162.104.242 203.207.67.18 101.195.56.226 86.20.15.246 121.134.109.17 10.179.5.173 200.56.64.116 42.172.222.44 78.45.87.198 101.246.157.103 53.167.83.244 218.110.211.230 61.119.217.84 164.29.37.177 74.163.206.229 61.73.26.68 42.82.32.171 68.251.30.202 152.5.175.100 194.46.106.104 209.150.83.105 136.249.207.170 187.60.89.6 125.172.43.62 25.231.73.217 164.100.41.134 10.221.91.133 222.188.203.127 157.227.57.228 88.109.113.207 235.39.131.113 22.71.149.211 87.136.107.10 75.38.46.212 161.15.218.66 9.93.153.117 211.237.221.47 21.51.139.173 213.250.76.159 127.83.220.7 13.48.253.156 111.90.187.35 131.51.69.144 39.23.30.55 184.157.75.34 93.185.36.219 105.76.127.243 180.36.130.142 182.175.225.88 198.29.218.146 140.227.13.23 21.179.83.71 120.82.189.255 166.174.172.54 214.248.80.100 7.95.59.117 86.250.178.186 193.231.120.181 62.4.48.35 25.27.94.62 181.61.116.45 21.98.112.246 112.6.20.130 111.11.29.170 155.153.163.228 80.185.14.13 178.187.198.240 126.81.192.11 79.145.184.218 202.9.161.50 143.112.128.71 131.254.152.215 72.41.173.208 234.243.138.52 196.218.190.242 64.2.12.221 63.234.95.227 163.66.91.68 142.72.63.64 181.224.150.137 244.191.19.51 9.135.190.143 192.51.173.130 119.231.243.75 246.237.182.41 238.5.25.156 229.224.244.150 20.19.209.7 215.90.9.148 234.74.187.157 119.65.177.116 92.63.175.132 128.102.139.242 188.142.141.89 28.36.151.87 11.75.87.115 68.74.46.65 202.198.232.124 249.49.161.140 46.39.33.173 15.147.132.209 23.87.235.64 20.101.48.147 105.146.171.147 231.185.203.87 153.84.113.125 38.136.229.17 140.205.131.165 201.141.146.198 242.167.7.88 58.68.39.118 143.255.102.92 97.66.219.185 92.33.247.158 82.204.142.73 13.110.140.8 132.162.153.12 208.87.87.236 142.231.64.5 146.234.90.217 30.143.57.65 227.200.191.156 199.8.214.12 115.2.110.154 149.29.236.101 59.153.159.194 165.195.124.24 34.57.226.79 88.107.223.154 156.202.182.170 213.28.169.134 117.207.120.72 117.0.81.80 142.19.23.251 122.111.173.92 118.204.71.65 214.136.224.112 244.33.82.152 171.67.252.227 239.23.70.232 175.122.129.84 46.217.9.2 42.155.236.149 197.105.117.245 44.148.171.243 188.176.151.14 33.62.168.176 205.20.135.184 69.156.98.4 34.76.179.161 1.183.192.196 229.213.222.24 83.220.247.196 165.159.106.190 232.79.248.186 1.63.97.140 17.133.127.231 59.108.205.228 184.106.172.48 9.237.28.139 134.67.236.36 246.6.253.66 157.22.207.84 114.239.198.137 158.210.43.110 155.210.102.14 7.147.140.50 116.217.244.205 17.162.108.250 217.145.22.69 232.128.226.11 134.164.198.92 50.14.198.5 255.70.182.254 250.131.214.133 8.34.241.31 133.27.154.116 176.108.133.76 155.229.43.143 155.215.93.153 33.193.21.84 30.222.214.211 231.220.0.186 48.57.145.254 70.212.223.0 194.33.58.157 178.59.61.185 185.14.188.70 68.55.84.89 46.155.214.84 203.201.150.157 163.67.216.126 125.102.50.135 184.103.160.25 181.227.204.149 247.146.149.180 120.116.180.238 64.67.195.150 198.159.249.80 171.179.80.109 156.227.62.36 227.14.125.71 21.81.134.205 66.158.209.78 28.96.220.83 172.233.15.196 99.200.238.61 80.165.213.125 158.174.45.179 249.101.22.120 35.6.211.21 175.253.57.213 171.45.143.54 56.74.194.106 5.212.25.56 236.58.35.123 231.232.36.192 226.0.78.184 18.162.88.72 182.22.161.167 0.75.230.245 156.110.185.124 151.126.130.136 136.31.101.64 87.192.198.132 104.55.96.8 61.110.84.208 0.93.252.169 165.4.122.27 205.22.62.54 24.238.112.13 97.158.22.127 70.16.236.15 171.67.119.228 115.133.111.184 251.251.16.99 163.113.175.172 20.82.178.209 53.196.104.31 164.157.204.252 241.194.206.199 21.174.59.146 73.202.155.148 9.131.55.82 49.239.175.8 71.152.223.127 76.144.166.40 64.225.2.49 177.6.236.161 98.35.72.245 213.169.255.231 76.183.245.98 93.128.14.199 11.132.224.113 150.18.217.177 250.130.135.113 97.177.82.245 45.149.118.24 12.153.140.92 215.26.112.143 153.211.178.231 66.137.94.189 132.68.207.117 201.78.183.57 233.227.214.60 225.32.85.28 148.7.253.183 211.237.122.233 184.251.186.79 43.119.214.43 101.20.225.115 241.249.163.245 238.43.170.126 48.11.151.0 210.202.24.224 189.219.192.51 126.107.92.117 12.156.65.169 48.219.234.21 160.169.198.244 235.148.133.186 104.71.116.48 153.251.71.153 46.105.240.5 91.192.106.197 64.214.90.122 192.241.80.223 129.138.217.94 8.119.26.117 104.69.121.226 4.159.4.26 84.48.110.246 11.73.210.9 79.139.21.75 112.143.56.73 194.146.153.207 205.169.79.226 235.144.0.33 142.163.1.55 98.194.249.119 193.174.29.47 49.46.162.112 82.152.5.34 206.11.102.254 211.23.17.221 201.86.5.160 176.8.208.96 71.186.236.246 82.180.25.23 26.21.238.98 149.229.52.179 67.36.224.171 93.39.25.61 128.207.190.57 131.255.157.195 23.213.168.46 102.200.63.113 47.5.19.228 241.20.226.179 113.6.231.129 40.90.215.227 124.178.67.3 161.106.254.142 57.15.4.104 34.5.74.193 149.22.190.219 130.250.187.238 33.17.190.11 44.180.244.179 136.130.0.251 242.218.105.106 131.160.251.208 152.79.152.142 178.241.14.95 22.0.33.130 63.169.118.177 184.231.41.248 51.229.32.135 0.12.67.35 255.89.239.163 9.210.141.127 53.162.209.229 59.23.90.254 199.40.203.113 25.220.247.141 49.229.41.187 188.219.55.114 182.229.159.118 173.112.196.140 167.121.118.102 67.51.254.9 3.174.247.34 41.59.233.245 195.54.23.58 113.55.85.106 173.191.4.210 85.241.169.36 176.239.216.3 34.10.190.178 102.249.217.19 69.189.58.53 10.192.120.79 217.200.250.203 56.117.76.110 52.18.195.33 252.165.252.52 27.170.210.167 60.111.61.191 65.14.23.194 64.103.135.202 187.231.192.190 172.74.102.64 158.22.8.199 202.242.143.208 92.129.208.175 127.214.17.134 45.2.138.178 248.24.29.43 108.161.38.179 164.234.101.66 249.71.155.46 199.201.230.246 34.50.246.234 39.64.182.49 56.142.70.178 155.18.215.36 131.60.99.125 100.136.149.103 13.133.187.26 225.254.233.138 191.241.2.85 20.106.239.219 97.179.153.159 126.90.110.251 16.0.91.22 56.35.102.184 202.221.182.155 29.205.190.94 250.139.26.42 109.195.130.249 141.235.252.87 49.125.251.141 47.118.68.115 59.158.222.181 119.52.143.242 190.172.236.218 70.28.100.254 59.241.196.186 255.176.1.239 50.185.52.62 76.11.254.79 156.210.60.175 22.11.249.31 96.103.78.1 159.66.191.81 32.27.99.33 232.114.128.201 194.142.218.128 36.160.245.84 102.232.236.68 241.173.199.168 80.76.16.151 185.21.234.1 97.72.172.13 185.159.87.119 207.147.189.213 254.93.179.4 241.81.145.156 18.185.110.8 124.181.220.33 173.56.223.126 160.151.244.234 124.228.105.176 167.218.233.104 11.124.215.157 14.49.239.210 194.12.35.175 130.84.235.136 100.189.13.80 164.139.160.151 7.82.142.122 83.37.197.165 64.153.245.56 59.98.232.194 126.57.230.73 117.222.81.160 117.150.5.162 95.63.198.243 19.77.49.162 40.44.200.89 154.139.48.101 47.108.15.27 142.1.98.98 178.12.45.25 222.230.237.107 71.255.14.51 73.158.151.235 204.145.31.1 20.126.127.240 178.129.2.233 157.27.11.63 72.244.255.236 207.180.78.198 93.75.67.210 160.39.83.185 10.108.106.25 169.190.194.214 247.58.245.223 196.79.239.78 107.74.25.160 20.174.49.219 130.79.197.69 11.254.91.124 125.79.124.40 174.3.132.25 97.94.234.251 18.5.44.58 125.191.90.61 141.62.206.250 248.148.185.20 204.191.34.76 245.201.250.153 233.56.122.185 135.83.101.177 188.100.20.15 7.55.250.84 64.62.131.98 124.7.130.47 165.250.56.241 172.129.2.214 125.29.186.44 181.19.143.250 228.228.171.127 212.84.113.121 36.23.224.220 189.117.52.54 249.235.142.245 117.106.41.73 20.174.89.48 149.144.205.209 179.68.199.50 123.110.229.94 174.55.248.252 109.225.30.125 224.133.16.85 77.39.75.190 122.119.120.28 130.214.79.14 205.127.123.42 209.74.128.41 100.205.76.151 231.166.133.176 215.115.136.116 237.115.57.93 164.192.216.185 162.53.74.133 186.176.28.105 174.235.251.168 157.76.245.221 15.17.30.215 214.194.247.255 116.89.3.70 100.179.145.50 8.137.154.72 250.154.48.245 173.210.0.128 243.206.101.75 31.196.197.133 83.225.197.121 121.251.238.81 215.191.37.34 170.223.71.32 148.29.147.3 6.37.46.141 161.22.62.194 147.226.208.25 251.105.108.74 185.120.234.9 206.100.119.148 126.0.20.4 122.210.230.0 13.90.35.169 118.193.34.134 149.210.49.103 157.219.115.187 89.174.2.121 59.32.179.245 65.252.28.170 119.134.32.7 34.16.63.254 73.31.110.117 136.164.99.134 173.76.105.131 231.26.118.156 17.59.55.22 30.229.192.171 129.68.26.43 225.99.138.210 132.120.54.110 205.99.112.11 81.97.145.136 82.11.174.159 181.69.47.31 130.34.35.27 35.22.215.152 95.170.105.127 26.90.200.116 175.225.19.228 163.111.36.242 251.116.242.229 144.211.92.30 253.202.82.131 93.170.72.251 134.37.35.161 227.241.175.21 55.57.184.248 99.250.246.36 164.50.120.194 188.155.204.240 173.190.30.184 195.131.78.59 240.237.42.53 35.8.63.77 120.89.181.40 42.19.22.207 207.54.163.40 59.75.156.14 142.191.145.54 188.179.237.79 8.192.11.41 21.111.254.78 237.220.1.11 20.166.96.127 20.56.123.1 181.140.91.53 239.251.57.3 60.220.98.49 42.11.95.42 85.77.211.190 158.96.197.220 202.144.70.188 223.194.128.208 94.237.132.148 6.179.195.10 222.24.23.6 164.57.76.151 100.93.165.73 32.42.21.14 241.128.137.7 188.161.234.33 43.5.176.125 229.41.70.127 56.164.224.154 121.44.106.1 141.198.145.171 4.7.80.144 62.70.207.111 225.87.89.97 126.238.160.122 134.175.28.61 218.215.54.127 142.206.231.165 100.34.235.57 145.158.108.214 117.56.103.176 232.191.203.229 102.9.177.209 183.9.109.53 126.70.238.121 138.216.75.46 193.164.106.41 11.13.234.37 137.166.222.213 237.113.2.15 21.237.9.108 7.120.33.238 244.216.53.37 147.14.146.56 246.143.60.83 189.61.131.183 113.67.243.185 246.238.207.18 216.208.38.96 91.1.234.223 101.30.47.231 79.12.235.59 63.40.33.217 2.239.113.211 161.186.149.146 219.133.188.101 253.208.187.190 254.131.232.168 113.6.35.212 14.45.226.140 201.20.214.83 81.30.101.125 160.51.118.52 244.78.229.243 14.108.152.36 170.45.80.133 173.112.41.76 55.109.74.226 232.227.195.171 231.108.46.125 85.1.222.162 95.110.178.19 60.104.12.75 20.211.94.73 246.247.165.250 215.30.52.234 130.84.189.116 75.157.192.8 230.115.93.34 15.187.145.173 143.200.149.231 205.96.67.138 140.239.93.1 227.93.60.186 65.95.234.212 185.191.109.120 112.22.254.119 32.111.60.180 97.223.176.148 255.33.80.133 157.57.194.210 153.120.59.254 55.30.26.12 158.28.216.130 78.72.180.186 111.221.130.197 92.131.3.121 41.105.13.220 97.98.121.27 19.120.7.101 228.9.104.73 29.6.80.147 87.15.43.154 194.57.97.78 0.251.228.41 155.136.183.15 99.25.156.63 179.15.239.235 204.39.156.147 101.210.223.94 116.114.223.237 28.3.110.231 37.253.68.30 146.84.173.189 52.225.122.85 243.185.181.103 34.198.105.175 179.24.52.213 7.104.11.225 176.34.50.117 64.156.89.143 188.112.22.209 213.232.139.216 235.67.195.13 154.99.77.242 227.213.122.43 94.134.194.28 114.171.170.1 67.61.41.124 145.252.121.103 202.52.4.62 59.230.5.253 175.242.218.109 221.170.78.240 76.188.173.157 184.77.51.85 38.35.161.165 38.208.183.104 101.156.216.223 110.242.89.105 181.71.216.6 93.48.124.108 249.164.102.162 41.138.210.162 224.234.128.126 151.62.144.55 241.221.188.9 162.187.37.17 92.135.150.80 184.60.202.121 217.145.100.230 191.137.111.1 66.54.85.228 249.29.99.220 76.157.6.183 65.159.73.234 146.234.15.71 3.158.126.211 150.28.196.68 83.194.238.15 35.133.124.221 220.239.116.85 135.250.144.110 129.122.63.104 95.167.216.77 7.124.242.27 136.90.114.130 172.14.14.209 120.52.2.115 255.131.216.46 107.85.152.36 59.248.216.182 245.235.111.18 28.117.124.203 121.75.220.177 22.96.11.1 177.67.159.194 140.103.148.168 131.88.251.247 141.126.115.50 84.131.15.183 151.21.103.92 6.177.183.202 235.138.173.200 94.101.76.63 138.152.31.144 139.248.143.89 172.172.139.3 48.132.85.239 126.185.29.215 86.154.185.249 67.248.67.9 70.216.95.244 153.255.62.23 159.250.130.217 52.30.157.186 193.138.142.237 193.75.151.129 142.82.109.85 119.138.36.147 80.129.13.40 70.102.92.92 39.92.119.96 246.181.121.191 17.250.138.204 177.134.29.177 201.222.231.168 204.223.236.112 33.239.206.67 61.9.41.143 102.195.39.247 15.13.46.111 230.127.104.157 163.6.94.62 255.108.85.3 36.142.96.134 75.180.201.81 80.39.100.0 108.110.45.149 237.153.181.217 96.177.76.200 169.145.6.176 114.160.37.188 63.8.169.128 82.64.190.117 135.66.210.95 137.59.110.245 164.221.157.141 19.203.73.162 39.117.197.183 182.139.49.254 162.69.214.199 125.165.239.58 200.162.181.121 107.219.83.22 203.247.178.104 191.4.142.6 26.48.30.58 154.194.238.63 115.152.34.184 230.7.137.183 244.107.109.47 178.201.117.141 226.210.109.95 154.203.108.65 39.203.145.19 107.223.154.69 142.70.178.15 67.243.185.103 grok-1.20110708.1/ruby/test/patterns/host.rb0000664000076400007640000000153711576274273016520 0ustar jlsjlsrequire 'grok' require 'test/unit' class HostPattternTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("%{HOSTNAME}") end def test_hosts hosts = ["www.google.com", "foo-234.14.AAc5-2.foobar.net", "192-455.a.b.c.d."] hosts.each do |host| match = @grok.match(host) assert_not_equal(false, match, "Expected this to match: #{host}") assert_equal(host, match.captures["HOSTNAME"][0]) end end def test_hosts_in_string @grok.compile("%{HOSTNAME =~ /\\./}") host = "www.google.com" line = "1 2 3 4 #{host} test" match = @grok.match(line) assert_not_equal(false, match, "Expected this to match: #{line}") assert_equal(host, match.captures["HOSTNAME"][0]) end end grok-1.20110708.1/ruby/test/patterns/quotedstring.rb0000664000076400007640000000271111576274273020266 0ustar jlsjls#require 'rubygems' require 'grok' require 'test/unit' class QuotedStringPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) end def test_quoted_string_common @grok.compile("%{QUOTEDSTRING}") inputs = ["hello", ""] quotes = %w{" ' `} inputs.each do |value| quotes.each do |quote| str = "#{quote}#{value}#{quote}" match = @grok.match(str) assert_not_equal(false, match) assert_equal(str, match.captures["QUOTEDSTRING"][0]) end end end def test_quoted_string_inside_escape @grok.compile("%{QUOTEDSTRING}") quotes = %w{" ' `} quotes.each do |quote| str = "#{quote}hello \\#{quote}world\\#{quote}#{quote}" match = @grok.match(str) assert_not_equal(false, match) assert_equal(str, match.captures["QUOTEDSTRING"][0]) end end def test_escaped_quotes_no_match_quoted_string @grok.compile("%{QUOTEDSTRING}") inputs = ["\\\"testing\\\"", "\\\'testing\\\'", "\\\`testing\\\`",] inputs.each do |value| match = @grok.match(value) assert_equal(false, match) end end def test_non_quoted_strings_no_match @grok.compile("%{QUOTEDSTRING}") inputs = ["\\\"testing", "testing", "hello world ' something ` foo"] inputs.each do |value| match = @grok.match(value) assert_equal(false, match) end end end grok-1.20110708.1/ruby/test/patterns/prog.rb0000664000076400007640000000105211576274273016502 0ustar jlsjlsrequire 'grok' require 'test/unit' class ProgPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("^%{PROG}$") end def test_progs progs = %w{kernel foo-bar foo_bar foo/bar/baz} progs.each do |prog| match = @grok.match(prog) assert_not_equal(false, prog, "Expected #{prog} to match.") assert_equal(prog, match.captures["PROG"][0], "Expected #{prog} to match capture.") end end end grok-1.20110708.1/ruby/test/patterns/day.rb0000664000076400007640000000107111576274273016311 0ustar jlsjlsrequire 'grok' require 'test/unit' class DayPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("%{DAY}") end def test_days days = %w{Mon Monday Tue Tuesday Wed Wednesday Thu Thursday Fri Friday Sat Saturday Sun Sunday} days.each do |day| match = @grok.match(day) assert_not_equal(false, day, "Expected #{day} to match.") assert_equal(day, match.captures["DAY"][0]) end end end grok-1.20110708.1/ruby/test/patterns/path.rb0000664000076400007640000000163311576274273016474 0ustar jlsjlsrequire 'grok' require 'test/unit' class PathPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("%{PATH}") end def test_unix_paths paths = %w{/ /usr /usr/bin /usr/bin/foo /etc/motd /home/.test /foo/bar//baz //testing /.test /%foo% /asdf/asdf,v} paths.each do |path| match = @grok.match(path) assert_not_equal(false, match) assert_equal(path, match.captures["PATH"][0]) end end def test_windows_paths paths = %w{C:\WINDOWS \\\\Foo\bar \\\\1.2.3.4\C$ \\\\some\path\here.exe} paths << "C:\\Documents and Settings\\" paths.each do |path| match = @grok.match(path) assert_not_equal(false, match, "Expected #{path} to match, but it didn't.") assert_equal(path, match.captures["PATH"][0]) end end end grok-1.20110708.1/ruby/test/patterns/iso8601.rb0000664000076400007640000000444711576274273016657 0ustar jlsjlsrequire 'grok' require 'test/unit' class ISO8601PatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("^%{TIMESTAMP_ISO8601}$") end def test_iso8601 times = [ "2001-01-01T00:00:00", "1974-03-02T04:09:09", "2010-05-03T08:18:18+00:00", "2004-07-04T12:27:27-00:00", "2001-09-05T16:36:36+0000", "2001-11-06T20:45:45-0000", "2001-12-07T23:54:54Z", "2001-01-01T00:00:00.123456", "1974-03-02T04:09:09.123456", "2010-05-03T08:18:18.123456+00:00", "2004-07-04T12:27:27.123456-00:00", "2001-09-05T16:36:36.123456+0000", "2001-11-06T20:45:45.123456-0000", "2001-12-07T23:54:54.123456Z", "2001-12-07T23:54:60.123456Z", # '60' second is a leap second. ] times.each do |time| match = @grok.match(time) assert_not_equal(false, match, "Expected #{time} to match TIMESTAMP_ISO8601") assert_equal(time, match.captures["TIMESTAMP_ISO8601"][0]) end end def test_iso8601_nomatch times = [ "2001-13-01T00:00:00", # invalid month "2001-00-01T00:00:00", # invalid month "2001-01-00T00:00:00", # invalid day "2001-01-32T00:00:00", # invalid day "2001-01-aT00:00:00", # invalid day "2001-01-1aT00:00:00", # invalid day "2001-01-01Ta0:00:00", # invalid hour "2001-01-01T0:00:00", # invalid hour "2001-01-01T25:00:00", # invalid hour "2001-01-01T01:60:00", # invalid minute "2001-01-01T00:aa:00", # invalid minute "2001-01-01T00:00:aa", # invalid second "2001-01-01T00:00:-1", # invalid second "2001-01-01T00:00:61", # invalid second "2001-01-01T00:00:00A", # invalid timezone "2001-01-01T00:00:00+", # invalid timezone "2001-01-01T00:00:00+25", # invalid timezone "2001-01-01T00:00:00+2500", # invalid timezone "2001-01-01T00:00:00+25:00", # invalid timezone "2001-01-01T00:00:00-25", # invalid timezone "2001-01-01T00:00:00-2500", # invalid timezone "2001-01-01T00:00:00-00:61", # invalid timezone ] times.each do |time| match = @grok.match(time) assert_equal(false, match, "Expected #{time} to not match TIMESTAMP_ISO8601") end end end grok-1.20110708.1/ruby/test/patterns/month.rb0000664000076400007640000000132711576274273016665 0ustar jlsjlsrequire 'grok' require 'test/unit' class MonthPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) @grok.compile("%{MONTH}") end def test_months months = ["Jan", "January", "Feb", "February", "Mar", "March", "Apr", "April", "May", "Jun", "June", "Jul", "July", "Aug", "August", "Sep", "September", "Oct", "October", "Nov", "November", "Dec", "December"] months.each do |month| match = @grok.match(month) assert_not_equal(false, match, "Expected #{month} to match") assert_equal(month, match.captures["MONTH"][0]) end end end grok-1.20110708.1/ruby/test/patterns/ip.rb0000664000076400007640000000141211576274273016143 0ustar jlsjlsrequire 'grok' require 'test/unit' class IPPatternsTest < Test::Unit::TestCase def setup @grok = Grok.new path = "#{File.dirname(__FILE__)}/../../../patterns/base" @grok.add_patterns_from_file(path) end def test_ips @grok.compile("%{IP}") File.open("#{File.dirname(__FILE__)}/ip.input").each do |line| line.chomp! match = @grok.match(line) assert_not_equal(false, match) assert_equal(line, match.captures["IP"][0]) end end def test_non_ips @grok.compile("%{IP}") nonips = %w{255.255.255.256 0.1.a.33 300.1.2.3 300 400.4.3.a 1.2.3.b 1..3.4.5 hello world} nonips << "hello world" nonips.each do |input| match = @grok.match(input) assert_equal(false, match) end end end grok-1.20110708.1/ruby/test/speedtest.rb0000664000076400007640000000223111576274273015673 0ustar jlsjls#!/usr/bin/env ruby require 'rubygems' require 'grok' #require 'ruby-prof' require 'pp' #RubyProf.start iterations = 100000 pattern = "[A-z0-9_-]*\\[[0-9]+\\]" grok = Grok.new grok.add_patterns_from_file("../../patterns/base") grok.compile("%{COMBINEDAPACHELOG}") #rubyre = Regexp.new("(?#{pattern})") #rubyre = Regexp.new(pattern) matches = { :grok => 0, :rubyre => 0 } failures = { :grok => 0, :rubyre => 0 } def time(iterations, &block) start = Time.now file = File.open("/b/logs/access") data = (1 .. iterations).collect { file.readline() } data.each do |line| block.call(line) end return Time.now - start end groktime = time(iterations) do |line| m = grok.match(line) if m matches[:grok] += 1 m.captures["FOO"] else #puts line failures[:grok] +=1 end end #rubyretime = time(iterations) do |line| #m = rubyre.match(line) #if m #matches[:rubyre] += 1 #m["foo"] #end #end puts "Grok: #{matches[:grok] / groktime}" puts matches.inspect puts failures.inspect #puts "rubyre: #{rubyretime}" #puts matches.inspect #result = RubyProf.stop #printer = RubyProf::FlatPrinter.new(result) #printer.print(STDOUT, 0) grok-1.20110708.1/ruby/sample.rb0000664000076400007640000000212611603262767014174 0ustar jlsjlsrequire "grok" require "pp" patterns = {} matches = [ #"%{SYSLOGBASE} Accepted %{NOTSPACE:method} for %{DATA:user} from %{IPORHOST:client} port %{INT:port}", #"%{SYSLOGBASE} Did not receive identification string from %{IPORHOST:client}", #"%{SYSLOGBASE} error: PAM: authentication error for %{DATA:user} from %{IPORHOST:client}", "%{SYSLOGBASE} .*" #"%{COMBINEDAPACHELOG}", #"%{UNINDEXED}hello (?=%{GREEDYDATA})%{WORD}" #"( *%{DATA:key}:%{NOTSPACE:value})+" ] pile = Grok::Pile.new pile.add_patterns_from_file("../patterns/base") matches.collect do |m| #g = Grok.new #g.add_patterns_from_file("../patterns/base") pile.compile(m) end bytes = 0 time_start = Time.now.to_f $stdin.each do |line| grok, m = pile.match(line) if m #data = Hash.new { |h,k| h[k] = Array.new } #m.each_capture do |key, value| #data[key] << value #end #pp data #pp m.captures m.each_capture do |key, value| p key => value end #bytes += line.length break end end #time_end = Time.now.to_f #puts "parse rate: #{ (bytes / 1024) / (time_end - time_start) }" grok-1.20110708.1/ruby/jls-grok-0.5.0.gem0000664000076400007640000021700011603212246015230 0ustar jlsjlsdata.tar.gz0000644000000000000000000021012400000000000013317 0ustar00wheelwheel00000000000000 vב%<' Z#M3Ѧ,ڒlM6=n*E,@Q4ٿ{G (ݒ-,*rNOwO7y)1Чnry/skǣf׳ա r}prt6>}lh{ktr:6d=[3^`@,uٷ׳'duozd9{8evrǸ3GoO>ɒ=yb-]dt.M\<`u:L=q ==C:y?ѩfq: CWܝ]Bٝ٣z}6_^~vy \ yCoW_lgַ]cfqxgv]Ag=;:;m^Cn&I ~څiXgT{wߝ'N{xtpt G'ǶZ򱽏,}m<8:1~wVX甪c;| Z3[φ"qbu|d38;œ>;Wqkqzls8#ӣ>80ocwtvڽ遝~թ)7zX>g&_=Y`Bv8k;7gONw0fGy;W_{-k (,~9]>[ba*1|!%[O'uG&,/'ҘI)A1<=2]x`#>Y,w5oxG㣣xţoOWXf^f/u7FCߏ.[gM{lujfd}p}7^rϞ<~īqLQ§'G< :sI02io~Áu|?޿DR=}~ox|88[yg%% A|,z^ە{'9ږ$_Cx0 noZӥ$蛕i}zC|ye^B.l&><u8GmzxnM`L`qBNY|8eq4"Ֆ.lBq MNm̎'̈4_)DXLL!gDŽ xM-d},./7\aѓvw/rkc΍>St nm~z0?ݽ/e8o]hvuf'z~]`/l[{~,Nf{lZFp MTNVvkHMjS}z4߾I]݁rv~ia΍_G׳!^)=M9b0=nܼYnPL;k}O[v#gdKGmBoC''Of Uy[Q?毗oj˥ܚهg}sUOO̾^>ݡo{#tc^@ط_ })1~718D>.Et WvB]$`KShݙa_eTצ.o?vU}=p r7olIǼTwLQ \ȴ_m XψOOp=\p|q{˹]v~zg*ٓi'\?5Id5{|2 uPvc[bc. gڋ.~h8_Ǔug_c^cCp)J<09kZ+;Z YKg!n \7+@+ޜ WI=޵W<\ enR,xغ)=8 ٕS]w{vJ8N)}O{￴~}C?~y6{l;_pwIJ92m HMtֽ?>{yQߨ;_8?E`yO >[ag'umwzŽ5W:JhκʌKz!,UێbӻoνPxSWCS'#vtw #BBHED𗿼LŅ?\_8KՃ_ӷoK/\m788o+r&{/p^=c29~r{So?9zEnTW+#>=:<}ró'W_^㓣W後g.m~rr|%[R=;ro|meZ>:H6z|baϗ߬vtN9Xf偿CJ9v&t\;˼#볧O_#?lfJLY\c~x:>0Xt[ Ϧlta6OjyluyGV߹3u‰)?a~ǖ9vlJ|nM0~8_#Uc߁#sGvv脼}t8}Zxk'eotqsbutc7G"e`e*pyz'%wo) [2+?^ʜ8[<|\m9NW\ ޻}-o\ oxi.\/&ߙmi+,nd/skO7 yA?aoN/7^*巟/{@?l'ۻ߼#ex48O{vJx?y_?{7{{_|oPxo>3J|?އw?op}jc|{h+W[?kDwf/dr co6䅋~B yI6ϫà.=ny(n!wq_qttM8= wEqnYc]A$W!yed~űfNj7`$/Lߥy{JtNkr8|"ÇK2ULG|/ߖjf* ptt,rgb6'ˇgt6L] ÜhScsKj? kAG4^I,,_ ~;Gxxp_;ϙfAr'`Z]%UH dFiol]jzw^:;jonɃl]Ps>[=\( f:`y ͿZoyc׾뉜ʋy[vhZoygl?y閸/7v6^h_P~6xE^,x3ͫn}.:Ih]iB yI78u~΅{Otݏ| @̾C談1Y7>qhѣz㕯9m£WMOĮ7'ilˋRCo]XMto:@,E|%}d-v@`0`7.6?8ze :~[+WCAWN"tJ+ϫec|G|k[iuf/fP̞|5lݓsq]-ϫ^>mϬoH ߄U*g)𛓦1x͆By\xd7~du esvv>Po6m Jݯ_y/3x`867ey:_2ds9 CMeOz6|`&~>{x9z;C;/I[%gNdu'KxsX~ᦜc=qtV?hPA8?w T#|T1c+rS^S<=$Ձ:c全hl ^a|fR盢J~r4poJHZlUHybn_;n +]Wq41?#v>] 63rذN&yrri$͘׿%DNJW"dWU^seϭeJn/|5_7}}}Fm(7Y+ON-|hy<|N_LNZ%^W9򼩮{}Fu4@1өڤpk/Oϵ?f^D\Z |Ɵ|1_A3({O?ϯ,fܲ1n/}hF׭-}vק߸9{oqle?a`zu~'ϟ_e͜:I~}s=_\޻>hqLm^eO@z~j!e_!M ™yow?% [|sݶ =enۿU snb N:5 ӓh5{?=ްS_5ş?(?׾E"]"_Chh6\XO 9*,ZlvhO-;+ݖ'{]W.G#7p7tuZ_Ll{Ђyž^bO9RGGGW?W_熷L <>Csl=.G\ɀmWE]zS8G^ .??"-틼Q-j<x {f-.FgG';ݫOp[LGn^k{597vg)*hiޢg+DVb|\G1zޗȞxI;xf|5 7^ԗ;W Pl]"D]捼RvOh1Mrsg"{{Gۿ2Nۨ n^$\ |T)=o'^&Af@oWpC/+:b'LrCKaz9#M' :bTJ[ @n*\m-.kW}?zt}+YpRUq1xkr_r_qS.W ^/n!oO4 ]}<7/w+7U{A䭨)Jo?]{Q}4c7 쥙`i_]Wwy_=WuMn}d7?;J=ݞ@e^c_2$+ӅK#x]w/k)qM@Vĵ)yg]jl0 Y0Wwyҿj7h ם|IIm^pu/`qWΏ+[kwf\C?|^;ʦ7 /7αӫ3a'G;f[ ,znO_<=<:wg<7o>_ÿ߰T. }\ً]{Aa 7o%W?b̖}7?%?Q~zszV?0+qd[5lLe <{fΖoޓ3w?М__ X⿳!__nyIJ*c/Ư};Re{k/p rlݿ @sd˲d\C{ǛI'Ǐߙl@R}ŽO~V/3NxV 'aܲa݇V'El'V.e??ϝ˟|]:ߤ=pwjCji6mouUNڡgߞ߆$\iSYYނ}}|+hiDZ+BrDKWw ~?cR8? C[Յ0cjv$0> t~Bota/<6ϭihgTvsDc]|>d 5mqJ:{.^}nRv2/K#_؞jtI<툛v1`1}ͮdW_{2y4WyQ}@h!€u#"8o8F\Cm\%1nld_cMhXowkE;rY8rR~ēWx6shA  ٻ׷k&\&O`g#L\<]hqGUܬ1iA2Q{ Ɉj?v$Chx(X{;;b!W!GO|gN<7f bu!8Bߜ`B}CPgv8`(} d mFӞ)DdT`P1pQbʖgσa|~J4!ºB dMep.E#kOlB:0X^4&d8a}$|[^M, -qv9I=;PVeςSK C 6#\?hi vH=i/WLF 3go A2>&=fmeيٴ:h7;B4^; Mh,մL°lAw&i&3xFzdeTF"eo a$HW~5B KE'clz̘=PLq@ ;,u?>#Ű8 e!1i" `h04 Ook*'%ľDvE\`T)A(q&d.H=zkA7@=Ʉښp\E7Å2 S7T "F 7z&Ɓ E& { Rq3i2nsikZuY7y9ᲯaКt7A*MZ#v+ȡ9Eplqb 6w# E( 4X CJiNYK|ijxud @ ui=6̴z[10&PIN3AL3ƈL&d\#& G/w wTrx3eA&*1PА*ːL%0y20+f1%PP0S g3=DÓA$0E(؄&̦; URZ h6 BRz<@ T'W-qD.C1fLE}1 GhOδ!P6ѕ3O,-M@hA Ǿ1"A+jO#a>*C:w:19P`ku03ew.C Ͳakj:ҖRyQYi0&U[{:jrgN!IGeG?J2uIbvF_t7gд"K(?t犂$ F5r1`Q7ؿHW%%EJwe:ϏKCf XeQ&Ҕ Ҟѓ64h^A eZ&X$%B1 bG7kv&h@FLBߏpCpp>}GazckC7tPFPӁ[s 4MXڋox7BmX*ji-Uv6LtEysaXRkf2ŏ`2c:aqcD/g2͆C }*oGC}*kNucXʀ5idYfdL,Y(TU%/Xx#,Q9C`8XFD^isTLwcڪ?IqtGO/.78 S6!z$TySaHF" .-@@"DAL˚)ͺ[Kؔꁙcg Zomߴ9bO@eO偮rR!C'ʅ>RaC}ZM"1@h~6#¬eGŘBuh|$Bl5y|J6l,PhA |104(Q<"CS*S{)N0|C N4"*7LF/}T" Tf|D)d=\9PY]>/x)xe`$†΁XGC\犭;-bF0cLK ="˜]QF  uVZLnz@a7$6qL@'8Abɚ2A\7K:\b@fP(ד)ox^ uwڜ&0{| ?pH߾(t%Um GG a F2 ڡD%RQ`qXAn'Ǘo6A. :V_4{cf ŁFF% ( $;{Dk8CJ7$&}QkxE xd[ .ULϗOT60E6g/lH>T?mC3@rTI+`Z|FqA)kfRLflϐQzXE=9e o;`5wYFhQ&<c^+GL":%̒b8TA[ i* )'wEGV |۬uvfjњ2J9aZSn>Gk VWc7:R.XC 睮kh›|Dg`hz!L'0p <܀ A/Eb`9R # c3fI2sEFX +=HeL{B5"D"FZ3CA%,e P[ 1ȸ2J6̵ېe@ %tTP 9g芐Eܹa^0=NG!5E[0*֔ήLL,3(@D^ REx(7IJ(Z֤)Me_!0"rB6ÁO| NK XH,L&zى17P Z\)"P C"~wLe?/ f , 5r%P6$^D `M0jb<*MI( / }##.ƒtIWdpS?[d1ۃ/H#5 xeMtIhfPǠꪼ39Q,`$U8Z6Iܤ9p5xnRt@ ΈCy PLIA'E'PJ)kDq$;p YH6Qf8uu)0BBIh8E%2ʙ= Up j}[$&P$HUf0y ,5#K&-U9x][f[-\N~AY TUg}bg0 IQ:tEX`XJ[p:2zMFةVCИ+͙W,J yG2|tYTMx Q6Ev#SO6߉h)0*[&QRG1*\br(LX#Tdrڨ^ o[qS%z:6} Ȃތ>!Ikz?E)ibJx6g,gQZ^6u"5Y2fv:~WTq/{%kR$DzƹU]5۰lKr+D6CN+)n?v jf ͝5({HGլBJLȉ,ؘv̌+pep5I!@,iAt^hb]F0Qߋ:DOsr 6,W dy /2EjcNQU4É:j,n<=^[- o+Dַ:*Jq6P=Vzg }Ĕk%&U a3s !&B#鐜PSr0EN%K|&({b;Y,St`_zcWn z#f%.R.ʆ?JS&)YD :QI~|4*N~L$G@J۴$1 TdUFVVr=$TcL:),`z 9P"0k]H<%ҋK!E.Nl@ќyTa!,B& GhգW=[E4 9tPG@v-I<)gUUS :&hW-j!Ļg~<;S6'?MdY3ԊW3?=ǜat8q4gr P.e#v-$W9(&Bp}q4V=lA,}&cA;mL>9Az哓/a ,Yz{1YLDL͍i&B 3{Ǯ}0`l ( 0,hqa Q/">WJn. qS[$1dk|PnjWOR2A[Pw/QZU0o`ZM #^Y^aeRS:d°@iW\ 8|jj$i"AyGF4D>dWLwK`I84Ys1:z.l$ +_<ꫧ|pF3iğw eiTV#8H^(;2SIRN,hG`~ b./nIGI^ |D "o>zX+qob:I9׬R"mS) F%ExؠB*/ї AHuw"+9ѓۉz97̓3K5AbS&M+=.L bjf:UyՉE[FjDP{ E6+~>EĤQO gYGPCh"U{)Har)JYDy*7EU.Tؤjcxx]y/!x:OS~T*C cMdD2" ,b1^@ RɜT#Ht@jd/J <8-uߤ13XKTՐ^sTy>ϙ[iRs8"0U*(vې[=6jt^oW1IQYDP*KdnWęJ0BraB##1-הh$ȋo*+"urNjP2B&J#MK&$j=xK#-Kr%/bJvi>M׉mnYSP^gAQUII#!ψ$5&3j.@-KEL#KN{Y5Y [ )؜,TF1YѧLoD5$$bPKĐ4%;3Jd$%1$*&F xbE:yX,IBSqdTROe B'6@K1uM\&zX{dzb%?-Z~Ol4KTe@]>5)Q_,񈩣WA Xok`z,ųћ-DPxi!'(ƛ96c1%3RɻZ5tR\r7̭g7 \jb{BTV!+p"M%1Oa2hIf䳹WYUR1 wߏ y+6KBzAOq=s Q/GV3H)UٻSNeb ^m Pp [RVdzJEŝFB n`vRđx4Q/PcFCLRe,h$e-N~ȠޫNvT㔠iur*hzї:QE3a8\y Yη1 '|7jHA?V&V2L%z]gcJh%s;¢2zuPiTG26kV4VcZSR3*j $JR C tf*d N'+Gԗh-2#%XJ ɦB9O)'ę8yH*]z6:dH2<,[4Wi.7w*#VT\Ye`UAcEGGq$]/jHD$7ҵQL^ \`qc2?t^A&!tF2WFiՅI-!vT^xWӏy-d*Ћ*KbdNu5U1* DE bY]?ˬi%ӆR& ּw `"?2bDsg#k#6DF16UѕҬgh޴ndjkKA~(8C*hQ0ʹ!R kN=ꤒP$Ý"֬{I) <(Q>e@=rPTu _ S"Oeu:U.{P 4gpx)gii]4^H.g?l Z(E- {Nc(rܽVXAxJ#4[==:h 0xAug#6J0d9gPqNQ Na;!DIv@IgQCցީs9A w P ,>>U45ۄ%i_D%&_gTG] ::gQqUJJkGR4уUe@Fk,Y]hʱpܛ5 XlJMa=X1K&6|f1h6MT83%c t4`Duc {ev=t0&i4(⨦!VTZ=t9!:不"BȄp ̛u."3l2`b# I0unɷ  4zS+<{1xXB( ]5 ?PNُNJjayz/RMx>9+T-8ΗQq'cKB N-u#^^{OWةܻ<\zv5o#T!{?uc=z%b$*hF* LUSݢ*^} Jcl)gF[̈́T;eMEu%. |dH#ayQn|pݛLpI|JpNgJC9iNAy(Cy0Zl f@2]9GlTtԎydL)&Ѣ~ NUJ*H"0cUD$ﴈ2hPV=FfpT^Ny~JSA?f26_;d{Ƞ޿]6ICT5@D%yKHG`F.|f[\y;$3UW&֎\(XU];[EzCv[ 1~X0ȋWCS=<' zT5ԫШv}W$JU6A;EeDѐStX%)ZPUt Dr&n"YUtzʼb|e9xVReni#;.kWe@:(`!5z=`F-$SC#xa4 Dǖ&E`KB:ΣaI <=]"&PT"svKzDífi>EUyb NUkB^ЊPvRe+$}ǁb F4tD-U}ԣ{#tdE&fH薷ݗJk z ~%e|`><(T-̊9U)bVxpB@Fcxk N>cRW'}q<cN-M#YyvB UOIg0;nMI(6#!QtͨµYUFѣ_mĢp4k#yP=bY|!ipeUҼhӑkb؅aSQ'v^BXI}7EML!V/ȣUYبZ( 6RdZjKПr(gPY/:yVG o)G=Yc$iOPGg`aBJiROaSW/"vJQVup20E';/ޡ$7Yr{9r VA݊X6vN/fv8 `FNlG$R4AjQeyJAťh4Q$$xi:D31*9I])E29!LF7MP!jQӅZHl y%3KE:S }*j&V6~o4[YeYB'cÜE7OhO_E)̧"=(g4/`:׮3pC$u< O JLDAuPWk28!GյL,926b&Q]/5AS .l& Wf4.K&zfzU!Eu(?/.0Ms%{pn&CXFvGVUeqo`"`TtmRsŶ5AM:d4`e7/&4Ȋ[L |l0))vemUY! ;iGʌeZ*7jZI3L V÷!2)&81dWQϣ=8LTi .B='I~ >\{ةpmDԃ-n3m=ZžiL$/H5PWfMYAZa"1L ,@9BnzHZ""!I *(NIQz0ޜފЬ_޼B4{Gw%Gd\\ٳ,x<\cRe2)"aÆKU pXC2S` 273ugY4J!!]gC>U iwBsZ6S<'}A'Kƥzr6xaQ(Hb] lzɯB ' E#pڦ{"_{0^ӎQ-3S{a[cK/Z:NF2)} 2BGŲ"`ދZbRA3mt7e74/jܔ6`chr`xӑɒfq<ȈdLavzՔ5yV[ylabIsy'R|ԪAܫM!h؝3ͧ:1yu[ؑQFg3hѻcmkvY"njp)J-P5g`K 9Bof& c.FbgqAU_$"?Id|ҝ= >\B k˳3M2|-/.J3V;5P#Y (uxy䘅tC]^~%8t`]R0ԾsO}S0L))tbr3le0 O~1hKzMs/2 Mԏ^Ы 6%UEYռ'(2*.pSugXx;d&SiGZĜ<##^gOcTUҦ<UdBR%=a]"Agmut}` NJEE4hY|I,zaOm!ipeW*Kz#"Vf`SM ?Wb'*Tˬ6,PZ} S'g+Q3iK@a k~tYau^i!Y2M;)'nȾ,} V[ rnVBR$y0 iR/Dاhw'wۭ XSO:>{)n3^~RQ.1eyk,U^^^֎9Q}LWfk;*E޿PAՖ(ΪrW>d{_{-K;U6zXs,#=~mճ釰tQ_ClZ=AwFeUX{ '3jL24%bɤҥ:=”P*qK#HjLNFt̛ k $}[xxMR2q+.zqiF ̈9(͒z'@ٽkt ;^)!K[mv`s%EW6EE^uB˦A)_1:Hj EL=-5" ͻAX-GS!$I(iTi)BDYI(@yiٝ)7n yg.|׍3|z鯍OT $}Rr.ٸiHV_ mԔ@jbG4HqΕܵB<ʪqP_>/lA-KBW'T7QmfF䌥]r{&o*'c: І"2LpW`ex ~EArj4ٍy2>Ej:>((ˮ^EEN{3nW%-je_i`}@({Y188^2r"DM0-N >7c@cȌ(hwvNT.D%0N5.AFW'_xpGۼb"87I?ovVUX{aUv5H+yXU6 &? {.dM;ޱ3$ddnZ!0wȒn{ӑ"ҳdjTDNǷgm]h$cW?nށ{be?Ka5gO=8Qfo\LJb:Ƚԫb#X={IizRԎU|޻"Z; DmL.(Zx58p‘z7xj%dX rx77AJ7h]*)e%~+J(p4:+ 2(*fwHb&Xo~^@¾oEDg05&=Sm(G)i05vbPG76'!;fd.vfzݛq#*su$"ؼZfPQX,j`^EU"M2zŃf=̨4ba 4|w&/ W[ύQ$mmV Zaf vVc:mF]jjbmW}D{K/TjřX /8kG%2TDBŧGX]%IA Dv5]XUH@!F"Gw맩)QN^1ιo,P3ջWr7 mja,(3;c{\j='D,"B[P fggpIBeE'N51  ׋c 9u a4bW=&ȴHNSc "555Hi3-ٯVU+t{3Vižb;,vSm:ғ\5h~-/|!{aCl*Hn3b!B(n~zafCjXbLX$Ƭ/( ppcAE2wqϩ EzS@׃ɬi>ȯ0߻h T2\$,L;e~F5 _/̻Uj"҆=RK~h:`-<Ɣ$ŦNӈs@la5I%d^ BN^\\W"LҲR,eŃMA.Ij@LqV?hu~򊦡eP*m mTXmMޙLVuRMP&G;j*BP CJQ2 B$SE)/v(Lj]Ξ:+Se-I VR<T 0&qV{qw%ԞT@UP7O9F _5yش轚nFi쩼4uc3s,M)ZՅEl9,E#4WۚGg٬j^Ai^mX2irJHj?]anJ7Yb%A,1g;$$2(j,bVejưl>譑t P}w&vPrG* $l\E_U.)yxB쬓1dofۢpiWZ-SIX:XE:%&OTU4 X9VΌJ1P JI@n'lGQ +_)<5]*9}t<VWN/9AXfE~KݨDL C>^id)lGL lG)qgBPBXX-xSk+).@D%#==7K&UZNoʥ@^2[Xic5kUIb|1{QZT bĸe"m"K<խ*c*uhPusJ6L`OFբ S(֢fHHfŖ񪺽!/Ӿ)JC.~ #JZ<097}"Ta%|"ot~]bPЦRV0gW&o)l0x#LuMIٴzl#R|`nEfPQ)p7{|ph*'xV4pkC:ܥj5tt+& Eax3`塳Q  0@x<[ղ^QPygL;MZ:1w& &x3-f| ,Fr>| {ӕttRyVW˲xqWZq}`Nݫ\v4/S/a&`ds@5ѝ "Q ';TJ.q!@z ({ Y(;>`j{ByV솁3Zè0y 7RK̞3F˛8\ꙊxqʧaSA0T FS1ܛL;3t8 !9ŶɃ$EOYY&OxFPqNR~YH4e8p*@U#i]J*GE6i/$B$*vnT*5S`S}Y)CPII9&MJ 89K1E܈2mȍo֩KPN#,@Dv 1͵gâ++A NUDfIK7,6 6vAƲ{qݟGoϥE,9QgƘk^D `}1?5yMPvB FTX UCY]Z;i=ڜB5G-,r٩z{rV KWs^-<{S{i,IYu զFnbVB= -voLٝ"ue8UxQdc)O'c'0IŎ:--{&왴3;i~.=2wڞhpJ`ɖlH粦M+3dy`4 \0?+3DXk5=(?j7cɻޭgŴL:"`:n O7 !TɄqe D}z&z=4%I5zt"JΠc\̃*;]5ݸ`6?Qir49۵;Z91;CxOawC ,/ ;Rm:V"5Kz]-4+ة5CVIA: :vWp] 7Uӫ<5oӉry,7ߘ?-+#>}S+JBn柚3U~ "9.FM9[[2Mo ;c ^h6 FE);L16mZea2mJ9ߖfVxzEU!3TnqX|4Wh)S-TDF:MpR5eSH"Ȥ5L&kz3r\WCc/̡OʔH >@()0E:](z(C|E@$~@Yq F _^5}qHd)Yh,,"+ ?a|WaҬһww: J5#oM]'\K#>FZJXNh;@d.`A1Nq'Ž+V/Mޓ(BXufSG0 ]0pP.f B~-_<ә{T!*?F^v¦JݽKxzMe.uBՆH$(V1Ļ!Sqwar[ItThL+o<ӻ:CWI;beqޡ0.l] Ҿe14$m;ϜJWah+'bQbadfCeZf}~keY?OtL5JhM1d>3.L#d6qXAfc0bN) ͏]:h E96}=$Zqn6)pq.I|n`~0MzUdm3DAz)#ēBXvѪZ?xdq{ԀC?YF 0 ‚{9i6AN3& kB9g&8ycdS'6ʒ[j!LZDypup2|V4VGD+se3f 9QGILZ%{,+nw s>ܲFВlC.)DgHzwsC>;R}yu<.ȉF+dvG^>^zsX{`d[M&Q<8~vqN4-c T񵚗[=pEj\qnI:l-{rjHǴ欃a*!,W'j`ҝE."M3 aܺ{?|q%hD0 s.Fp)?p"䟭5 ֎N].-TrMKyt_޺y8[ǂnf   wk]Ur}#Hj w&GB{ɨ%SqfN2#X>E+*6 ߞ{s.3KZ &!|ʔ۟Zf<~ɡl9O {msVIftpM钙4:@< 1 vHVr^T6;T2@m5LUhTsy4> 7>/Y~!^ߟ-l3Du=/~WEc&D0O !l<&^M=+c+>z54AA(}ȂjW!G4Z*nS` q_xQd,c?>a$$s3WR7U!$37n\N~ 4՚-w:V 44cUi.(A9Sw*\as67;y_!c~RH ŕ_sPb8dN^TanQͰ8gU*YׄC&rwN60;O蘙=Қh%9Oe:db2dS!eOc{&JU~|!Oa$հgpЀdke#CTr'qkaʘAV;:2qx R/U ]nyT៏i Û(T7p%C ,8{ҚѠ\2Seɋ)biAh?8+;CZIG5 hRZ;/б0gjk\˦}CNh+/cRgovԮ+Qro5^BE1E (\ZY(hr?az+:{1i7b7H`K(Arz@pJz}9TbQ[sϐLDZ 5&K)kC66ue7\j~nw [Zwތ{6D;LK,˘I'g\L2+fy?PcKvMgQ<ŦVff J,0)x3T{yyFl<$%~[ /bF7ܑg۩%|VO#B?O;ڬi$Züy0.*la ::#JM$TltSa :>tmv4LzxNJ{1$13s.9˵S`6VA+LU=\  `zO{νp)x!5f')SH7azE>rC6`[(Ri;e/wƷ1/NF~(!pb߿'tG0h=g"+ V(HBa1JcIm9_|-L~%[fJ&He`Au3>]45 M>c9u`1)J\Ӣ$=bj)A~GEyR:<^ty@6.I׍GLgj5ଊeѲubX]c:vȯGM §3u aKW!1B들^ϸ[X诒DT t=pVB=D+w'_gP]X-BKLe"qGwЈ},{4SV1ixkMd7V_(aH)'A\S[WYC]ʨTDkk8DP5Wc!lDm=ܞ Sy Xb\]xQF2sV=Zݸ&m&>^ha?(FA'&šX< v-ZeB H?oɹm^к}:0 R]2Ųl)Tu}M LC$sW]F55GXG r5+=<,L].6t=MQ'XE|Y}6UL<(vM8bJwxT*=,Rm0 M!y-@D TA-<\1 %2z՘!Z8 ʰdeJ#r)~&X9T9Хu2r8 |IռqM)>aMMt;Mx;S>Թ|l -Mg+- \ɘߪ| e+EkӴ! -xz-ed.O/ejjػ,)N&oK P޴Q rEn8@aڹ൤FHU-rr+mf.I/ "!_Y~zdPJl4yeT$a`^f"8韭Wm  n13}qK 0W;ۑoWC%H0mФV. IDp($7uz"?,M$}ؔRNs'Zl(M߃b+wo7vpnCq#6*} ŃM4> :Hџ0`DDVO!zHdf&AMAjvbuѯ]JVxTVxa.ոeRa)s6xk d8߻Z|+tyy32,!(0Y 4T {d{#q0rp'# CkOT;bmiqt/Żu7[YOhk`wpǭl=YۨV~`akP ZwuinD-ʂ -^&Y%%̇S]P* sk7dH b^K&jUFFaw-OS=$6~4_KK/`2r۹|Bjy;ܐ'0tD}7J:[:|m~ҁU4sbU_,?:,fL:0l]z\r 7a) te%*\F^jWЄvȭPoke>53`) \9yM>*&77g.xx@7u*VeQA!bLs~@-AD͋Q0;w{z`9oLI1a7ũ&IETj{,Uv2Lx>uatՔS@H\@* .c-$XB>֒%ϵ*2{B>a9ٙdLAejIo1vI!ٰM8a4d(CkW4ٟɄV DUE(=WSzw> p=A  kjOiIWBfJvERij0 /3!"E>.䄉 |֒lslL fe>Dq643-Yߚv:F`?xfOe>87FciXQ;EazY`Uw6h]`GD1ucA# u<.Yz51 uDǩ&lW^\ςI,ڃStPJ^G[nX˭=S-37Ofs3nUq^S4>>e&^#rQ؄pѧ O"@:nLƽg\CHPz`xkrju:jͷn]sKvKc^C׹L3Ct٤W]{7lY vmkqYyJi*kݣjw؁ ;ՉHE 'Olnm+}*nҟjF5DYK79HBjOMtg]WӣfyiԤ4Po f7}SSz/<νbS7s%r X(+ZRݔ{ƿS= _"hY&3wFIϨQ1u89Y] Х}gR:IYM f^eY8:^)euv~n 9u1?cEo8baӸ$@ixL ת] ib&0ZوٮEͱ"X肅ekODtݓ(-s|x%w~c\F;tr:c4bр^F,|{0Sjg{XU!֔{sv:-])F-rŀ@wጴ L. Hin.K/\ +7D`+kBТjԣvtkb B l "6OTe𿠃VŪ]j [ K)P/WEz'zZv7kHN'/攩K6,qG@n/xΎ'~Zڛ= 8&x{wܴQϛvVωcq%U/cW`cO [JKö$e#O'Y= axЫ1=s$w'#y*Ԕ^wᐪFf+K tq./غi/$ ×ipjaZFy3&W|z?nNVF'&5گVoBt6=_©&F&u-j#)@:Kϧ@8.?Iqu1>'<}HUQb36cDH&.V7@Xm c]G0$& mZȗ ]0Ѝlئ=]H+K:ax ,leeyҖ6ibzIH |5zAs' NÁ[̴Ee F,D&Szӏku߭)pm nˠn_"QǶs}cG`yODvX"mꅓeJbk7 t %޴6O6?,fWpeP\DM-3Ax 0o]It|Řө*x2\R!lIS' -Lij=C{/M"Sq:BR%{Oj׺s/ mҐ qRemZ?A} 3 ~^x1[~ջV2] eg ;>|WM3'/]lLL/lU.RO[*g4{nׄ3TqF9˞zؐ6FTQˣ  1HyP!֕?g ?-2dxaaA9g˨}TlMi?eJOM*}ބb z 4G:/4q%4آkѳI f+c9|Dy%tEÁ2#j:xkI}/*ďSeˊ檭̘˒2{e;]0,8懭ʣQ~ugTO>#M$=P;jQ&UݞHR4$vuz$ |& yԜ !.u[\&jׯGCf~~H{i!sR@#~$Fh@(sB cZc(͊3ԹJx4W$ s"㐭zKۦxѐA49=-(RHp #G#z@eY[!xao\`Y\-iu 5s(J?ߡ( t{.㋞&S$T>SN:^kZ4tXjy}\Lp32ep~NCN(PḰk;g*Y@J=fOMp {MNJ{(`k<5Ow\q 8֡{3UD։4,k|,y=' 35s/Cm^0'#K!6 FS5ދa{5B^EGED]O#wX?mDLc2obfjIJI:IX^j%4kMP|;k|71Ofܥ z'cHgJt_m\ -+tJU'ѓ@ 兊e~9xQHB)sHWJ;X% y+պh~݆I[+\ˉn8 J8b2q|.[+5q@6yo .B5 -jbMc Óbsڦn?½r^.qb]TZ%*6qfS[6HgKh, 1ՓؓаOI ݍmiuE J5SGCC ,7@0oN#8mrfNzW;aDn>+W8#978CMؒrÞ_TgdTuGN=F7rBz/_zkM1)xMw(h.kJ6Z xLێ#36U'[~Х\@u }> OKnI?;i}-j} >žoc k?%Y򎛑kHxke#;9A& ]4a%\PfTTFJ"=2,oD cTxX1,r8܍Lp"ت梅S YKx?ľ` *v-h>忦OLfȤӘWݯ/'f/KH͝yU)$=9WL&dҗH+>Tx4tyZb%=wZʴCX&9kqEtȭۗLʂȆL/e R5R;{RHFPhU{R@/v"Aja Ia^-)0w.3caܟ [N17wUW ifu[ г&}zZэ㞩!x-ւsD=J[ w'>HLz6:D2C/=*G~ΕQ,VƇPJb'vxu;LI1b=ZdC*`PWcVox=ՇS{N;) ~[9n~k=-R1h8$'0צɊ~LO*?e22=ΠwBnwI0TE`|Eڜb#TvCN}`2v> ؂̹-z[@Wة+gCAwHu_t t}o4ؿ [N.ǚr\7G) LC\/M03RU+N9'>AD8W& C^Yȭ oZ%҂]\*ȌQ0\Sc<9AIаpJr4pdXIn'*5[T(,'o8bI{T>Taz>{ˍĥgM ]llfQCP63MT."B/&?c'Cp1%G伭Rb ]-i&S{/Xu >܄*w/pnϑ9'%Ɍ5:a:kIAgܬw "y[?ȼo*S۾^Y+ =7C s$ Zʗp<kU6@q?ڑe(2. j [NɬM 4L RvWTu~e:є"n1#xg ni>C9J*~:V82G@5D׳8rs1NʢhL9HK1wi};a6H%"ʌV栶-䍡4 qXEV=#iI4C12Kzx]d^Ż)R@ `Upo7md5H˾U[-= hv osP/xp,6SЯ!:m]P46?Ao*ra۹zh[DĦ޹3?f[%χL_VSLo.z%#b3k_.~?~C_0c{Uwjo )fI R"<5GNw ~f\  yCeܱLq1Ywq3|MN wsp諝?Ï }0sP}@zAs0'2㩯 &+H(gA2BLAc!U< [. w+IN{^e]Mh2BOW'40ny0TKW2ylAtu|D>X˘JOۼo)[s'}ujS)EJpnmd]u3ϰ>=$LԚވ!z)SkpDnoxYwMVh7P*_Y=>z ĶM)HBG+ WR)+7V̛`~HS$jAn0&WdT3>w!BضJnx.aDp,f;,)Y&c=puLM\ӁtHPC外}cqV`=(6stlTEauNPSNױ=6݁NBx*6:q7!!;KK$́>@ S`9T\CO2=ͤcb^`fbm?_x#E.VG`fTu/|%KF;yPk'Y@fz2*!YuʮiYU27NUFm hX$oh. Y <'M0%.hQ̊%XF:w^lkjGJg0I<9kK?*s %5Ռe̸WψyL;u|䵁t*pw\k.!Sx6DaO SC~aE2Kl|hʼP>9`J&M_taL\ Ǿ$RKQ\\Y°mC'҅_s4"e$zEC6'n.ewnj2txb ?vLܯu؄t̊eT E8 mK "l 2ڜqT1t=:dI/?jGEŝ3vW!Wsq5̖H9~5=Z G=-~lϟV6`5t je 7oQ~cV_sbȔASxt«j[&D>#}&7f>J\g8=u͙0nJOM5D?]D"!,pJ3kz3 7H#94o|J/`-*Yb'(4'߅&EC<[i~8(Ti؍}G`;ډQQKڻMA غ, x B;VY̪خWgh)rz-n8gz굌ҙ=)#,^M6lǔǾb7C ַ'4#VMfμ[WNtDA70xmCbnT6l:E91բ Sf]@:)$f\ |V6%:iǟER!%̉N@c嚨Ͳ +x V.?p?^_՚w} 7>񱌱5a;Zz7#k"7wG^ v 㓹Li`a_nɅâX[k)o0qݏi[˜,Q1+ \*uƧ੢J?W t1?_''sZ^r"g%HIHwGjsRYL1sM.&92tI+#N(EE)cĘRfSnum-&w*#Ya)o'[3idi}c/c:Oh^RV[PO;4a ۘQ8"1^h,nqtG %٫cuq軥LMI3@JAڱvJiIK|/Na8ZXPfMFC#.}xJQTަS TGkxcn_7}G..5(M9~$@6I&y{~u/pK2;9!cl2FR*$uuQx XdXop u"2^y01ԯ;ϗHۡpF̤P^Qg3\8nP']5ZO[MfOاmAQ9. *ź}f= Vٮ@_1o"sb4i;qsr4_:H=(3:~1Ljeլj' S4SO;)Č_UǬn5ޖ9AdB::۶})0ZXLֳj+jڂ`J-)vRdoRUxFX쩌ܾ˪vuTsPO, Fr{.i7b/:fs jdo &LrW?bUN&]Mp=$ :`8>; Qr|3l"ٛbD[ϱ cLP ֺFBiu|UMT>q)x5.K:qN Ќ:lc ^ smtO#$ԣ!#ˆcVL_\IݒS?"y{4uwL*ey jtucɡ` DWdP) ų؞jϥb=~eu~Z\5 j%xvt7!Ƌ*0)a9V;c}AOi-4[ 4x[i{,|pC9<.ɜ@u6Sܫʴ.[TUE{CdVL]dnXӮ!qޖ 4Xغ\u/ ˤOp(ųI-&o)'B2r-urNӄ+;vq;yC!o4͟w;yvcFeo߱!}n∵O"GXNIc§Yߣ7~}M-6o|qZSq/K˘8+6* jjH d~EbNo(s$Uw,ˣ|Rg+K7NQ%qH[C]%TgՑcNS#4k’{-;_n8t~dPݖ!!Vn&6 9y^5hRy!\T`[iWZܕ>XE.{+ˇW{cִÒ; %/އ152&f/O)7S}=4M$閯0Ԡ[GJ߇OX 鄐4IǛ![$A.[fdX2?]"8ZdT,4>TtSA]E 9隟RDÎEnYf3^Fځ(,Cyw~kQ`lpq?@h״3=?i_^uT/階c7u]9p{.VFO$*~zM+U%ZqiکޮMB|!=7DsR<21|E~]M@G+}5a nljSXGWNc}yӓ7TK~]A].9_I(6] yٯppi0-_R p*^C)w7VܲXfWqhLFKT.]\=&]>rbYN+뚘?#.3 j0^-( q!sA]P?'Qv.-RwO`뀆rܛLCjh$Nh~3mSvxocpxFK.{/oΕ[y;pnO^ߟ27+s.bU!Ǐ(\C~[/Q)d`H]μ 'bE3M2J71Tڷ1bߢnzohܴhFa4R. e}Ԙ 3ezU:f^т:gTS unӇvw۾Fӆ햲)&r"}º\GE:%)I_ql9(L7 -׎zKWx?&T'p"p' )25Ѯ55IT:l+=|znjY,)Z#{lѕ^(fͱuCdXuꁘpVbgleؠC<ߊh l4Υ3رFZO= }Rt6_ Amy0Y.Ê+Cm݋PSvGzz){ :S@8ט\kZ'jrwGs4MTCTZwTt5n&?nK! '_ Z5^Ʈ Th)p )QvUr$1S5l7#llE2R~k%Fձ64NiDB괚YoíwiRnIhxP5)|5 ^.眿6Z4/")*+]#B_,CLsqGACR>+E"fQۈ\5̲-)k@N w!:fˤA̈́"z*&܁pYoo?gq T'Gp,vW"w7-_:zW& Er!a>. ,#O"cL W&>mShɭKC A_V4rSĿ3kƫ6kCwK͡rw97;.KN@N ޵XcC?1++j9Lm5"p+78c+Ymp=-1U%,E*P:"kL 0oLF\u_^?#"SKOʰ 1,~WWb5:|Oʆw5ZΆRT{DZȒe|KFT3 wB VߤR-ǁIpe ;] j |IDT}MJIC"THYy!QF@ʈ*( =QK2vggb|>a\[u[&XEz|P;/01F[Eps]򷺁.I 5swPaJTFonQ;j-Mh`zI}RCd:從:`D"[^㕎`U/S)5cd]TI[97=޵p `yRʜj r,Ʈɦ"~,ƺ=)ܗ^e6x eRyQDNOY.OBrl<5lXN/똹õwd.cPm,t~Mɝ<(ѺU-*Tkc"mqC+8_ Nߘ;b/|:dG;&ùV$Fו9d-}Tdh-I3P{2c15d.N'S+B%+#Ɵ7U 7p?Kjx(%hWjJq8?t# M{ iv#/ +UZ+Q!q:6>ܘ_*¼çadpGgc ^U.&;Z.j[ґ`-,U rΡdfL~9cS(ѬbN9y#N\{07x,Rбƫ:?r|&za{z)=~LWMJ7'8=S1_{dhϥ B7jgO)2t1YjWj~A n _h&J#gb=@=F4ӽMӲ?g.RNM !L>[Y K-MThS=>.KlC23W?tZ44!IjHV p/sNF:۽YkF{(PȚDw #R\ZX׮HU=hBp6iȺ%Ҏ n[4rJ.czт]lpjHpX=⊼qDA@!֪!БC Zyf[M?<AOԀvf2/h2<~Zih#BިԳir{LfۆP_h$~e+w>9¼'C%!:51L6cb^uK~2Kf׆?rК,wbM}f+;x@SNs}OL%2<.kpY2s?ny7ڕQmMi^sPZH ` 6t6zDj?~N2aҀ%*t{ aqe~ ">8g*7[r{MXJBl-(`lzGV{Ҳ6,23^'M q=I<lN8"oӷ4mP|x_ּxP00G"cM+%ljeC @+7T vq[|Ǧm:鬀 3Gl\/%tFV~).3b#2v#Y⬵K+_^s^a쁙IXp.L9ηzhme^hF<)&fgWo`m׍T0 E.iq.@$r|䠮ߝƀ0FR45ň~S7ɻyhqۊ$4-)~iE=Ւ SΩ(ii[7!K+RǍR\&ӬذJ-Zczy=t4CEro P#)/E7o}k69&/ʂ 61>8*"@Mmo\TR~? >Ჹhn%('G?Yx '"\`jŹ:'vy4w_ !t#-zԬ"E!;J2򪴔3 Ӹ Z$<c)r` fA?0[Icd*БCaĄY8U}{,uy!hLQ󱤒\r&r;̑6VN~AdC;ϪTq D>i]a?c{A3P(,N}m,JB>4`Bª̥A 豥(|`\#8"z)84ٯ/ -u/aIr5~ESm>$.sk˸h{C0U9PM,^hYkO@2'-+͘bh.zOj@nI=QL807Yz&xm%+!bQ쐺bFbdq:+ LL x4/0Ә[Ƀ&!QkW [tz D7D>l-uViX7q`n` rPm'-,a8@0\땦SYF's &]'J*X"TGϢ%ܢP#(|U:(=|?͝ͺP?uH:XBz r >""h_ BsPe='G$\o GUVSgMn[:k.yrXVwpŽ@84_D JWAKdg{EV"^ƓjA)0de{TllPS#'Ay%͂ a_Etu;b<-U<版l城 nt,z#zj/E3 Sg5z&\ CA;$-ZY{VBac;n$F!X1 \Þ|g8.9oΪ%ʹGTx ‹Z%!?#5Fs)^u:Ynfλk m]j*F9#[pß`ʹ B>Q֑Ilw1Nt%+ >y$ȐC&Ʒ*D8!`Wj146dE]'eF!s{Uؠxf2rP U"0s}&~sQꎿu%Ao {Q:9g%sn/Ѭ&`4Bbfm21m @vnőOq.'H"M5XW`iW>4|Q5:-A#EV),&w슥<3uW0L ([2fr[Y-S<0ۧxO_2;> #A?>؃V ;[˂ڱ O]N.Z `0,XR· sDOeAf{~̪i~dkiJsT8Ѵ\kxb5w85O g"j`S "s >ȃҙWǴ s&ry"yxOyeq\(D1^ w&ݐ̂%J92x(MuaFk6Ȯ*y5yfu6&)8~8$HYC=hH44"dQGiuKm7?jP@^Z*&{jZnΩMu QjABLg ϏvԆᔟy mmՙ׶wΎ$E὾hXD<Ks@08fIx)'`/>~dEoD ʆ+rx jpr4nix/u}0 EBsU^٫64y4p^ |Ql jEwAC4"KL,dx}U+%*1Lsa~FI7,G3q GŁ=Z.H.fZՆ ~SEENn0(ZFQڍ8جt$Jbt_z-p{H8vsIӐnxHbD{e通y`Z3|,]< tM-!=|^B|>1n3C&& : (D=E&l~.a޲&'d_;MʁأkU,o徏V@\/<>p+Gݵ+rpnY s3yby`rmqל+UG"iJ뀅˱Nb2@ (2kVSo#!(BC.|{$uJfҭIe["|N@-e@$8ڥ܆a+IӴZo ~0\'aaqU 'թ/\2(W?cR s ΰ*R&^zmҨk:Hs#ZVp s_MgES3ŵV_W`1EUbJ-w|3uTm Ly=pջN%xqJi@ew`46 0t#~NrYԎ -56as M.n\}۟GhX ?N[uܮƗ HEL+]fJ6 8~A-;P$z:I>fIGN f$0Z.YH\efѠxdDT#mv R1xK[ ŊqĤ-#8y- X2 kM}[-4Ao3Ҭز5 |ճ|𝒱5ϩѦۙkQVc!vuEL2(Nb p{;0*IA0Qdy;ӡ#_m<(I0lGz{j IG#2#Nɟ+ƙ]0fsWܘ] [^xr//F*8nP={5v@y8,u^yǩv97ewV 4CZ j7N*4\t2+`eŁsW͑IxZoZ&jxO;gŽ`Z>n=7ua^7[YsWojP/BĔD#f^c(VMgtĽ#|3`yLI/YnjU UWliՒWJMe \D52A)* B [{6Gwy;aFɷ3jݚ:hGݯb tBCc{Z,~f% Jl!d`kTlr`DH%C8<˕"/V˵[=^uHOH "&ߔv--͒}AHrU`KVE[tP}#\d +.=aFՃfɄٟ9ژI:OO6>~iU;,?SavU*+c6rOqdSQ_ ȼ0ttdFS) GW\lb0~-t:kߟM4өfL*͗8ɣTM`jg(VumJ%y up 4F#7DVs-ZnJ37ML0zfXłuDҼn#q".EcǠRIDP:f]lermCUqkBoVxinBTa1<*&օYK&\K:/ʍrPrV9<ٱaŽ| $-&sBxŏ2k` 9`u"0Vːk^׏`orzFtHR^dڒw ގp#i*9VU^F,;ĨE_,dN#T塹8z hWTZhd$TZn & :,!ѭ{x=%ۂwʉ6a#:u$q= 4ЎKo-5z-o+ۈZ^a?1MB ˠu kCjKWjjzRT ]M\^YsC {kI?87'2u;̸S}XW(J83o7J17KIR]p+$suACp - e=!rݢoӠk޼}@#E^J̊hH|qk9q!J>w JXGĝMXv}Gna.q:!()v/G@{}S|vP#v"8ym?,*rs>++HT`"NdDAfnX cP=:&2:Fū%eڹ8HSKo&ݶGC` %JS=ER׎hID VxsDjq>h- cKľ4چ-ԣڭf= kk-0uvgG )xzy,0{`չh9.cRZjX{]uAm}YHToD+K!o\EP?&Š+$tP(SȮ9DDF I?_:" ޱ# ofCR4zhe盒pB{l)EGAFJiۦB e >ycn2eEH +t]G>[i(BS Uw4H2 kUwS9v0d gE=ѢԎ DCm9TG!3׺Vq=pXIEĬgYYKr@N(T'3@*2ɩ})$YjNlHnE~%FHVBshJ{,K- JMЃѠ1TSDG!Y]:YB\Uz4l%$)CmT"W6ȝ奈Rcn96I[Oɜ\ZmfDϭFxN/)6䮽0yzRsl+[-۞ḡw=fe Y06NmAËà<1y7ldTf"凔8tσ t@?!}\60Y;=Է@%.l o-D^NWDսn*<'u-Noa݊h WI MmMiRW[H@>Te#9\XXItLmO[cT''xu2}J^=-"Mmg]j!5&/UިK";m}Չ-EXjͣk)&C;|HM4E#]⥊]V9"@vg4.2B4r]meI+pNAUM=>A/ifHLP"$LuFs+-.` 2Qm5jr8jjYq 7RA*Z ItpݤNViYeiDE"(ǒ?Ғx/6x]ܼ!Ty"$pJ>b[ش[$5ߕTO=@J4(4U,}V*VJ|AՁ,w⿍dR8r!aIEgH@׮\_[Zhn|.,⧆4Heԗj./h/&PUAm4SZ,ϧUc=A]Hp619YPevԃHxQ nϳU|T_=\$aP^6ҵQL3v^@@h'|:YT=Vr: }(\Cd@1U(aSˑ>ֽ+IsIDyXVa mJoGكw3@ 3Rv'+ I|ꔣfItE/=i*3n ol(~IBaM\|9ڒv}t$ y2df+N65<~z 5 #6Hy@vTo7hCQfVrr3 ^(y4&}.Fխ ESU؃<^;f+S]!8 kb뱥Z4@@ gQ<+֋,V!'.pTQc"Śɨvݒ5RnEգG)_>|*THx5%5VS9(C]pYHvjQKpXɪDrJz(&_#Ѣ+)/rcE9q7Ad[;p-Z~T]gnjueڱZ%%<-g@jjZf;'.)[^t`OyNVzھ6*C/KŢxf*@ے\]}.T|n9wȀdY\)MF9A $:*Sc]"[: QS^}$H1Ng*JeF>fz7+apO-z|1u@T|iTO%i/x]˃uCѣ&g$ $dCD. [=H,W2Mi\i+X.L|z+h],QEockJR5]$23åq[HZ{Ayei#i`@qY+2l/'GdiE~if V L|Fnf*o\a* F fL0y8MB >L!R-@H'Ӊ;\!oQ.u "tNR](5R3l~X,X Y&C΢;DYdB2VI.:xIV]J.cNK/yq1Jڔm%*M;mL+rzPH!MF4쮑lmpѫXD9Я&T' KH>,ID8 "o)"υ,c;V~ZqZhGw4Tz Pl1҂g #k:by:b \[|LQXY)@y>Q动ñsY#6@bQ yi|NTj(z\L,eG zf2!"suj7G]D!.BhL:zBAtޥܨΜW$} MuzV~ZJ*i-uEF2.c9pI x:u fQmgy8F~$n=ŀWj _"[G &7ͷb'YHكS^)M{~T 0% yIU*/<4}Fq('LuQ8M@aaaj"#}`=d ly%-l e%NٸzVic\ygrY՘Q@té] ̸.L:8x+ |Ma"Ip620Y* NQKs|ȲǂP=!̵(vPadbZ=-<Oԙ jRNjmDOMi2FE. ֵLÁ:S1 걥g8A?>'S DzW糁U` S7t6*io#c7 B\o1kRdi/)*;"ˏ-h$]歆wΊi+{ DRr}ېi8yPߗcg/[II_w*;l `tJG(G7J^,XrT:-VHRV=ݚ*4&Ҡ + Rpd PZh}\4Zo+nr,YI%(L0̓%%|)CFi2J\Vz+  "榤%Z!{FbQ˧O/&QEdMueF\o'yF2::<-hEĺE0 jzDZ~(ǦOjX0dHת=O0@v Q8Mvb[]M&:d8 ŖqMTNՌO "jIǃ KOfp6F%bZ`Joy-I餱+n*@NlUTTl%jK 0UD%#/@Ұ u|j1Qz’]gkU[ 1nyWP頼 (&GNld~7 JkڹX<&<_(rNzz5AcsKWyكZE|o4qQ=0"*JYP¿a#52&^ (`!Kd:rx;iN^ #]gh J] IrVzR5hv+hQh%ͰyȞT:Ծ2*$@jW9nA'wo=2H"ad#JDO/ZQl,NqrYCզXRzzEVI{Dzk9iP.#NTݸ=~ZZ^!k;E 76+/Ȱ4x+V 2%$Qq@+zUg#]PQ`%UJ/IZ“J\ae8vvwzLx b2!y!kX@@ Weq-ewN W+*{KOEuZ6SK %TGnͻV ClQFDWXG:eJ7z$ q`v *JH^4ee#$ 5);u""@U^d{MWO1~W+ӘwPfHO7PU߻KNP]fxEHWt ~L hZߴ4|R>R@>} &D\eNAxPAY6isɕ8OI=V]DN1'jA_!ˀ%jۥD'4'5`q_5Qeww!qHi Ή7 iV`I:#SHFVVCK+֧]WO uj H~ZPmPb8t%JwE,gX>0jEso)T][iz37r"zMNM^J*"|< *vEFiB:pv=['8QQtTi2hX魘h^Ӹԁ*AJvƑ̑J3 ޕ=:E>'"ړ#O^JP:Q T&i Q=OaXyA%:P {a-U^Y-e*R)>Q.#03R/RQ-Q}*2e[$`5ڲu_"ު"8 JI^C߁\$ĎdZ{jo\V UҮ%eN$ȨRH'#{c:xZ4rAmi=AiP~#h 4 iJgpl\GrAﴑЗ 'xI\R΀܋TXdA6*Vt*`ĨPDj*E jGbfLf3p6T*aSEߍu aRX4#IԡME} r(F HhT6`˫k{4Nnl<d 2Bd Rnv@zMΩ ݐuHBTZ<=36f؎:!+ ծH!x^j+zJiZdezђ[zP\B碎beyh P~rH-GPU4*nFQ2i] Xh #BUxAԵ%UW66ѣ(R>]lޏǨ8 שMy ][FKYZBlѨ. ?EІl=:UA0EN% 2 nR}&sOšQMrŃʩpo*5ͪQd Wbb0).iU`\%򺂸17שw;jLC\7xvMz 44μ׊c5= w@@zUgNҭ^0*B9wqu)"^lxrZ5sReNbPڿi]HOCUyR:>c:B5ÁΣ1QcGhvmtI@ f׃MY޶b1#"ٖAB{Tf@" %%%<2f OOQ\VޗlǂjTd@Q[ϻ1:zsoVΑEf#kY*Vu3Ui˔RK*Gq$!P Npc]AIY#0 hyq= ؒ4-4Yx(" ]M.<9J%ϤR0wkIvd=ڭL-iX\w4#ҨAD㐁 *`B1)R J)jT遫dOf3 \N)]jH,[/m5h`ͯ'TzHi`&ReGWAn;Da@{!UeT))i#a!ٺm'r!QƆ,muH8IiVq[/znM+i;Eb,_¶Rr@Z43qeb1{U&L({~J˅ "I1?uq!M0KB pw'JwWD^|+o=}EHdI;--G+5&uŃkꆱ֎tk o7_VQGRŎ6̑ %l74^%s-,Y 5JfFst%{6Y,l37چZ(C? f/%DByJkro \VV%ahk쀰Gv@8HcJ9O ' R} p**oq$8J JwWGX) 啁C4OvL I`J~"آ9^=X~O=U5EtD#J]619|iEIo5(U$u^N%2OueO$UF !𩼮dMloWbFį1 읨5L"P)5h *H!۶vDZ !<U d]gj(@F0@lV[ ;D+#`7dꌊ)f5O8Bx=E-MbD H(ceE@)|$֦-m'T*;8q[Uv28֒ K4 QǍY,Xro%?Qm7C|6հ<0 mU@^+ 5,j/;6q~‚Q+2$eVĩK Jڊ;Py+ܟ$`JhkHi,o#Qp25Y#TQI~)pn BY(L#8geͦki˖ѯ-=t5f>bI i2.WFOUTEЊDc:5APpb}2grR8@#BTYtZX7PwZ^J(<{lf:4Qa-Ѭ1^IؗtSKT;pQǜ?!:wPQW@ jV㦈[.k15*eZ$(:Gf ty],(W[BZFSHQa}Pi< VWJD:I]d,GO@E׭-w ajwV lᖔ4q_ʎ%E *|A8UB*͚#S+RRvqP5Tĉ` A[zL2CvTx~{pM0r .U `ZJNbhuЫ3 y}2H)Ä[g T#&wA*^b=6j:;zr:rRH'ˎk U`6&U(8c)d+cS' ` #RV| J4Ly$5ҩ<Ȩ LR }jb}TNy D6jirQ 41*e\ޛDyÉh)ZԘ@Qf%r/5.P # P+&@QQH; ꭼx«{?4mOʝ݃ڃ~Og8:e9y0ك\a/n؛-W΋zIײ؟ͯ ٝ6飧΢|w(|_MWndv͎籝y{OA`Glgw6wb~ȇ%_}YiHhQvSXMV>>JSt(/v^8Ʊ׎ZcW8w :e.Mtzgkmn63Vt?{w xo v~ve#{ݫm۸1}fUW5ՐjJ{U]ۿO?<۬{u]yC>ѽݎCuAPm7)<?^۩O8qiR=s9\K9/S^0~!9~P[T\)>hbZͦR'h6miv4{RbgVOj<37$]g]oՓTz*Urwtowx|lǟӇpC>tqxpޢ!i< p5;2LsphKެ_['bK_ !˽sĻ6_6m}6'mb6cf_:88ˈq"'JuysjOޟ^ky*9ge?؏OOۣí8~w8Loù}Ͽ[O[gOvwo/oٳ3}G+|οx9cd,.w䣞꠳.n迴~_'.>m:o ͍_pě y?ɗ#~Xfq~6+xo1Mx>+VpUd߷*vLW9ɕ?jt3[_u;_9ԁfNizoCw]F8{͇tu@Zteiy;yi~| {N}7--ת8''FUzF<5;c,}Af΃Zoom=|X<טσ؛V%-Ϯ@w>oޒ8%Q.u~m͇7xf/yz,9OğwlF϶g͆?]yxf{'g?r8Ň.泛89q84l?8=3cFٲG[Nq~;Vڼ1YH{ws68;r~0=\'[}8X-?,W{-3[>Ɏ+͏nݹџn}\>}ã|uq\/ߜ-|Yŏ{{|ۋǏwNϬwscĹo^[#?,*/,i-Pvq|ct~ޜtVr .3S_ݻ߷u7Jf.N&?×Ob;˯|uj}Í0boC?_f;r~OMj鿼GBldr1&|6?X<>v~N~W3:ob'Y47~_o6&1G?g_|;>'-'W~9{2~>Ƶ6t̿|칇LLTlsQT7mtwSc1Qpo[Ž|H9_XmrLfrklo3]M\ey~=^vlEyʃtdg]/^ӿdfoo-q's0n|}y&W,F-_ȩ[~>.`a01~mas% 3|;~Ic /sWr9_+-fHՌhFq%[{:MbtE\b"80**3oiH&pZ IT\l.0ޥ <9Ġǵe5/7כﯮm!X0e!{R[ÝZ8?GaI, :QE0AFa;Luat3X ,벊9˩E35g)bj[V-¤B/8<_/+V]V^V`u8ybYC ^FVX.kk4ԣ;[bH%`ޛ"˸!mnɦE݋BeNpL1 y})IbXp2b}̭و22Tp][BzԢ=_嫹eGq$ǮA[i(95}8(̳r ;DC|K,BBG8W [:package] task :package do system("make -C ext clean; rm ext/Makefile") system("svn up") system("gem build grok.gemspec") end task :publish do latest_gem = %x{ls -t jls-grok*.gem}.split("\n").first system("gem push #{latest_gem}") end grok-1.20110708.1/filters.h0000664000076400007640000000120511576274273013227 0ustar jlsjls#ifndef _FILTERS_ #define _FILTERS_ #include "grok.h" #ifndef _GPERF_ struct filter { const char *name; int (*func)(grok_match_t *gm, char **value, int *value_len, int *value_size); }; #endif struct filter *string_filter_lookup(const char *str, unsigned int len); int filter_jsonencode(grok_match_t *gm, char **value, int *value_len, int *value_size); int filter_shellescape(grok_match_t *gm, char **value, int *value_len, int *value_size); int filter_shelldqescape(grok_match_t *gm, char **value, int *value_len, int *value_size); #endif /* _FILTERS_ */ grok-1.20110708.1/stringhelper.h0000664000076400007640000000350711576274273014274 0ustar jlsjls/** * @file stringhelper.h */ #ifndef _STRINGHELPER_H_ #define _STRINGHELPER_H_ /** * substring replacement. * * This function handles growing the string if the new length would be * longer than the alloc size. * * @param strp pointer to the string you want to modify * @param strp_len pointer to current length of the string. If negative, I will * use strlen() to calculate the length myself. * @param strp_alloc_size pointer to current allocated size of string * @param start start position of the replacement. 0 offset. If negative, it is an offset * against the end of the string; -1 for end of string. * @param end end position of the replacement. If negative, it is an offset * against the end of the string; -1 for end of string. If zero (0), * then end is set to start. * @param replace string to replace with * @param replace_len length of the replacement string */ void substr_replace(char **strp, int *strp_len, int *strp_alloc_size, const int start, const int end, const char *replace, const int replace_len); #define ESCAPE_LIKE_C 0x0001 #define ESCAPE_UNICODE 0x0002 #define ESCAPE_HEX 0x0004 #define ESCAPE_NONPRINTABLE 0x0008 /** * Escape a string by specific options. * * This function will * @param strp pointer to string to escape */ void string_escape(char **strp, int *strp_len, int *strp_alloc_size, const char *chars, int chars_len, int options); void string_unescape(char **strp, int *strp_len, int *strp_size); int string_count(const char *src, const char *charlist); int string_ncount(const char *src, size_t srclen, const char *charlist, size_t listlen); /* libc doesn't often have strndup, so let's make our own */ char *string_ndup(const char *src, size_t size); #endif /* _STRINGHELPER_H_ */ grok-1.20110708.1/grok0000775000076400007640000032322611603476312012275 0ustar jlsjlsELF>tF@@[@8@@@@@@@@@@EE PPaPa x RRaRa@@DDPtd++A+ATTQtd/lib64/ld-linux-x86-64.so.2GNU GNU6L`}/ X㞝NM+|7>3Y!;fW<f)Ƚў_+[LHR8Dy2b훕 z|`}y7>d.wꚾO\a-(\8iN0^,Q7Zc uz׉ b-CE7qX7WbhjKHKϪ:[!]ޮ5T>z%P2*S 7'Q<4q,sőUlٮ*?Ua¥_YmnZ%xZK]`MW0BB/z|S,ZL῀v4 TgfiLtk|x\{zB.MS DL%dugark CS'g7ogy>B?3K"||,   :1b ryl7}'11Tzn  IZqp ` rcjD S>2kP7M'e  0@EY ZaI  @r p@~G n@L I@R  p@Wp]a @ J@  z@  c@K PK@rD @p@aP @wH  `@  `@W  (>@+ p@ Za p@  @y [@ Za @>g  `@  @  b@Y @h  Y@  б@Y L@  `@y  K@"D  @nZal q@O @ x 0@ ^@D Pc@Za  p@f `^@Dd tF@  `{@ ]a]a @N  Y@  v@  @o  `@4  @Z @;^  @ @b@ 0@),  @|  @P  0@/  @Rg K@?9 @~ @\ @  }@ M @  @[Za  @ 0@Y  @}  e@  Г@  Н@ ZaQ  @@  `@ L l@ @  @>' h@h @^ P@U  [@Z y@q @ , ]au  k@&  @ @@= `@ p@b `@4 p@F @  X@7] pq@_ @ `@  @:  d@  ]@%I @x `@x]a1 t@ 0@<@ p@  @ 9  0[@F  c@% p@  0b@  @$  @_@   a@TZa @ [@\  ^@%  @ Za` Xak @  Pa@&V  @@ h]aw  @@V  f@y @\  `@} ZaXa D@( @@$y @6 ^@^ p@I/ Za  `j@ @  @  0@'-  @B^XaC  k@o  @u  Ж@Y @  @5libdl.so.2__gmon_start___Jv_RegisterClasseslibpcre.so.0libevent-2.0.so.5libtokyocabinet.so.9dlopendlsympcre_callouttctreenewpcre_compilepcre_fullinfopcre_get_stringnumberpcre_freetctreedeltctreeclearpcre_execpcre_get_substringpcre_free_substringtctreeputtctreegettclistnumtclistvaltclistremovetclistpushtclistnewtctreeiterinittctreeiternextevent_initevent_setevent_addevent_base_loopexitevent_onceevent_base_dispatchbufferevent_disablebufferevent_get_inputevbuffer_readlinebufferevent_newbufferevent_enabletclistdeltccmpint32tctreenew2tctreeputkeeptclistoverlibc.so.6fflushfopenstrncmpoptind__strdupperror__isoc99_sscanfftellstrncpyputsforkdaemonxdrmem_createabortstdingetpid__assert_failstrtodstrtolisattyexeclpcallocstrlenmemset__errno_locationfseekstrndupdup2clearerrstdoutfputclseekxdr_stringmemcpyfclosemallocxdr_intasprintf__ctype_b_locoptargstderrgetpgidfilenofwritefreadgettimeofdaywaitpidstrchrfdopen__xstatmemmove_IO_getcstrerror__libc_start_mainstpcpyxdr_bytesvfprintfgetopt_long_onlysnprintf_edata__bss_startgrok_clonefilter_shelldqescapegrok_input_eof_handlergrok_capture_walk_endconf_new_matchconfgrok_capture_addconf_new_program__libc_csu_finigrok_collection_check_end_stateconf_new_inputxdr_grok_capturefilter_shellescapestring_escapegrok_discover_newstring_countconf_match_set_debugg_pattern_reyy_delete_buffergrok_discover_cleangrok_pattern_add_program_file_read_realgrok_capture_walk_nextgrok_inityypop_buffer_stateyyget_outsubstr_replacegrok_capture_set_extrayyset_debuggrok_match_get_named_substringgrok_match_walk_inityyset_linenoyyoutgrok_capture_get_by_subnamesafe_pipegrok_free_cloneyylenggrok_match_walk_endyyget_lengEMPTYSTRgrok_new_IO_stdin_usedconf_new_input_filegrok_predicate_regexpstring_unescapeyytext__data_startgrok_matchconfig_closegrok_matchconfig_start_shellyyrestartgrok_matchconfig_filter_reactiongrok_version_program_process_buferrorgrok_predicate_strcompareyyget_textgrok_collection_loopfilter_jsonencodeyyfreestring_ndupyy_scan_bytesyy_flush_bufferg_cap_nameconf_new_input_processyyset_ingrok_collection_addgrok_match_get_named_captureyy_scan_bufferyypush_buffer_stateyyget_ingrok_capture_get_by_namegrok_collection_init_grok_capture_encodegrok_execstring_escape_unicodeg_cap_pattern__libc_csu_initgrok_match_walk_nextstring_filter_lookupgrok_errorgrok_matchconfig_global_cleanupyylex_destroystropgrok_patterns_import_from_stringgrok_predicate_numcompareyy_create_buffergrok_program_add_input_filepatname2macrogrok_patterns_import_from_file_program_file_read_buffergrok_compilegrok_predicate_numcompare_inityyget_linenoyyget_debugstring_ncountyyerroryyingrok_program_add_inputgrok_pattern_findgrok_pattern_name_listg_grok_global_initializedyyallocgrok_matchconfig_exec_nomatchconf_initgrok_freegrok_capture_freeyyreallocstring_escape_like_cgrok_program_add_input_processgrok_capture_walk_initg_pattern_num_capturesg_cap_definition_program_file_repair_event_program_process_startgrok_discover_grok_loggrok_capture_get_by_capture_numbergrok_predicate_strcompare_inityyset_outusagegrok_matchconfig_reactyylinenogrok_match_reaction_apply_filtergrok_matchconfig_exec_grok_capture_decodegrok_capture_inityy_flex_debug_pattern_parse_stringyylexyyparse_program_file_buferrorstring_escape_hexg_cap_predicategrok_execngrok_matchconfig_initconf_new_match_pattern_collection_sigchldgrok_capture_get_by_idg_cap_subname_program_process_stdout_readyy_scan_stringconf_new_patternfileyy_switch_to_buffergrok_predicate_regexp_initgrok_discover_freegrok_compilengrok_discover_initGLIBC_2.2.5GLIBC_2.14GLIBC_2.3GLIBC_2.7 ui [ii ii ui TaTaTaTaTaTaTaTaTaTa4TawTaTa:TaTaqTaBUaMUaUaUa Ua(Ua0Ua8Ua@UaHUaZPUaXUa`UahUapUaxUaUalUaUaUaUaUaUaUaUaUa Ua Ua Ua Va VaVaVa Va(Va0Va8Va@VaHVaPVaXVa`VahVapVaxVa Va!Va"Va#Va$Va%Va&Va'Va(Va)Va*Va+Va,Va-Va.Va/Va0Wa1Wa2Wa3Wa5 Wa6(Wa70Wa88Wa9@Wa;HWa<PWa=XWa>`Wa?hWa@pWaAxWaCWaDWaEWaFWaGWaHWaIWaJWaKWaLWaNWaOWaPWaQWaRWaSWaTXaUXaVXaWXaX XaY(Xa[0Xa\8Xa]@Xa^HXa_PXa`XXaa`XabhXacpXadxXaeXafXagXahXaiXajXakXamXanXaoHoůH5J!%L!@%J!h%B!h%:!h%2!h%*!h%"!h%!h%!hp% !h`%!h P%!h @%!h 0%!h %!h %!h%!h%!h%!h%!h%!h%!h%!h%!h%!hp%!h`%!hP%z!h@%r!h0%j!h %b!h%Z!h%R!h%J!h %B!h!%:!h"%2!h#%*!h$%"!h%%!h&%!h'p% !h(`%!h)P%!h*@%!h+0%!h, %!h-%!h.%!h/%!h0%!h1%!h2%!h3%!h4%!h5%!h6%!h7p%!h8`%!h9P%z!h:@%r!h;0%j!h< %b!h=%Z!h>%R!h?%J!h@%B!hA%:!hB%2!hC%*!hD%"!hE%!hF%!hGp% !hH`%!hIP%!hJ@%!hK0%!hL %!hM%!hN%!hO%!hP%!hQ%!hR%!hS%!hT%!hU%!hV%!hWp%!hX`%!hYP%z!hZ@%r!h[0%j!h\ %b!h]%Z!h^%R!h_%J!h`%B!ha%:!hb%2!hc%*!hdAWAVE1AUE1ATAUHH5_!SHL=!HHHEH!HMHHDwtwft[ duAσht#vt)1H[]A\A]A^A_1ߡ1H5H=161H!H8sIlMH5LH|!LHqH$贡H$1}ucEuC11AIHH$LHPG;$|LHAD$(11>tH=H!H=ZHLH!H=H"1I^HHPTI@H`@HǠD@HH !HtHÐUHSH=!uKPaH!HPaHHH9s$fDHH!PaH!H9r!H[]fff.H=!UHtHt] Pa]ÐH\$Hl$HLd$Ll$E1Lt$L|$HhLg0w(LHxPHtlS(HCH=Hcҋ D|L$,fHuPHzHIAD$xHSEL$,HLAAD$xAu+DH\$8Hl$@Ld$HLl$PLt$XL|$`HhDAt$|D$L (HEPH -HAyHD$EH$1<HEPAt$|L H H:AtHD$EH$1<.AD$xALMPAt$|HH HNA}H$1p<ff.ATH !H@USHHHG(HHGHG0G8G`HGhGpGxG|HC HC@HCHHCPHCXHr !t []A\HKpHShH=E11iH- !HHEH. !1HHH}H5)H !H5H}H !H}H5xH !H}H5gH !H}H5XH ![]A\L% !HShH5٣I<$5I<$HH5ۣ1SpI<$H5ң1HE fffff.S%HH H[DH\$Hl$HHHHE HC ExCxE|Hl$C|H\$HÐSHH(Ht H4 !H{HtH{0HtH{HHt H{PHtH{XHtH{@Ht [D[fffff.SHwH{ Ht[[fffff.AWAVAUATUSHHGxHt$HT$D H{HH{PH{XH{@L5!HD$HDŽ$DŽ$HD$XA>HD$D<CHc}HŋD$DHc$$[$Ht$HHIHD$PHcщL$ HCxL$  E1LD$<D$4IEfDAL,$E11E@D$Hc!H8Cxl$<AEE}D$8D)CxD$(H-!ALD$XH|$PLMzEHAlA+lCxOHt$XLD$hHL$`HcH5H|$`D$@L%!hHD$pHD$xA$HELDL$ HH!AH|$PLD$pLH?!ALD$xH|$PLL$4HH$1YH|$pD$4H}E0H|$xEH}HEHU DL$ EA$HAlETCx*A)LcDLd$Pt$4HHHD$(eLH01 9}IHHD~ u)̓)H=L:H=L#<$H=ϡHHt$(LH-Ht$(HT HD$PH$L$L$8L $E1HLHHD$(DD$8H|$(L $DHLCxH|$(AOL$E1$HLCxHD$hLL$`AOH|$(E1HL$CxH|$PHc$H9T$@D$4KH|$XHt>HD$X$HT$PEIHD$Ps|L H HޟAHD$$$1r4l$<ALH|$PH.HCHCxt1HD$Hs|H DL$DHAPH$14H1HH!HA|AT)?HcH|$PHcHHT$ CxHT$ HD$`HT$hwHEH|$`(HD$Xs|H HAAH$1Q3}@s|H HAA1"3DH!H5ԞLH81eHD$`s|H QLL$hHA)H$12CxHD$Ps|H D$HĞA*H$12s@HD$Ps|L ZH ҡHAHD$$$1:2DHD$Ps|L %H H^A HD$$$11DHD$PH$L$HD$(2fD$4s|H bH#L$$AAXD$11fIcHD$Ps|DL$(H ٠HA DT$ LcH$1D1CxDT$ @LHD$Ps|A)H HEA DH$10CxS@Ht$(LHfCxs|DL$4H gHXA\10fD|$8D$LLt$PE~}IAE1H IIA9~YC<.\DuC<&%uL QH$H$H|$PED$IID$Lt$PA9HLCxH$MLsCHKpHShE11LHHC(HK81H{8{8<HcH{(H$1HC0H{(H$1H{(HL$x1 $$1Wf.$HqHEEHAH߃ED`4W;$$HT$xH5WHD$DlH|H$1Cxys|D$H GHؚA1^.IAt$H=GH,Ht$(LH$Ss|HD$H HD$XHT$H'AAH$1-HD$`FHChHHĨ[]A\A]A^A_Ës|L $HH Ld$A1-$Ld$PHD$Hw|AH ͜HABH$1P-1ps|H H~L4$AJ1-Lt$P)H H5GH=Κ-4A)DHD$@;H ŜH5H=Kffff.H\$Hl$HHHHTHHHl$H\$H fHH\$Hl$HLd$Lt$ILl$HAH|$8H(HHD$ HC8HHt$ E1E1@D$HC0H$rCxAE1HtHS0H]Le MRUH\$`Hl$hLd$pLl$xL$HĈf.Cxt!s|H HAx@1i+H: H=#dHifD$HH 9s|HL$$EAHD$1 +E%A5AuCH H=H@AtAHq H=™+HfDHA H=HpfDH\$Hl$HLd$HHIHLHHHl$H$Ld$Hf.HÐF0F4HFHFFHF(F HF@HFPFXHF`fDAVAUATUHSHH Gx@tH}@Hs0AhHٺIH}XHs4AhHٺ.HsH}HHL$zHIdLA~@E1f.AE9t(HT$DLS09P0uHT$DLLhHHsH}HLASHsHL$H}PHIL~A~8E1 fAE9t(HT$DLGS09P0uHT$DLoHLhSHsLH}PAH []A\A]A^fC4LNH w|HA@D$C0$1'SI4Ifff.H(H@t$ HL$Ht$ H(ff.UHHSHH H}HHL$ HH1Ht HT$ 1#H[]fff.UHHSHHH}PHL$ HIH1Ht HT$ 1H[]fff.H(HXt$ HL$Ht$ H(ff.SHHGx@HT$t&w|IH @HA@1W&CXHT$HC`HH1[fATIUHSHHHH$HGHD$HGH|$HD$HGHD$HG HD$ HG(HD$(HG0HD$0HG8HD$8HG@HD$@HGHHD$HHGPHD$PHGXHD$XHG`HD$`H|$H|$(H|$@H|$PH|$`!1]@HD$xH@8Ht H|$pH}Hc]HHEH|$p1ɉH|$pHuH}HuHcHHE뻐HD$xH|$pP A$HĠ[]A\H H|$HHD$H H|$(HHD$ H H|$@HHD$(H H|$PHHD$@H H|$`HHD$PH HHD$`SHH0HHHH0[f.SHHHtH, H;8trH{HtH H;8tXH{(HtH H;8t>H{@HtH H;8t$H{PHtH H;8t H{`HtH H;8t [[fDH@USHHH@Ht$HHtaCx@u+H{@T$HL$ HVHHH[]fDs|H ÓHVA@1"Cx@ts|H H A@1"D1ÐUSHH_ HH@T$ HHHt$ HHuHH[]DH\$Hl$LLd$Ll$ILt$HHGxIHLw t4w|IHL$HH DLD$L$$A1!AHDLL1H\$ Hl$(Ld$0Ll$8Lt$@HHDH\$Hl$HLd$Ll$HHH ILILCxHI$tQHMH5HHHT$HZHEƋs|MHL$H H$A)1 I$1HtH\$(Hl$0Ld$8Ll$@HHfCxuI$HEs|H 6HMA+ f.ATHMU1SHHH8@ t@ tH01@uo@HHH)HH4+HH1 fDH t tHHHH)H)HI$[]A\fD@ tH48@t@ uffff.ATUHSHH GxHIHf.H< t @HCH{< tuLH 1[]A\f.HG f.Htf HXu H< t< t<#yLD$HL$HT$HrLD$HL$HHT$H4$BfH믋w|H HBAb1H\$Ld$HHl$Ll$ILt$L|$HHGxnH5eLHI1HTL|11HL=HuHIe1HH6LHLH9ICxuQH H5HLH81.H\$Hl$ Ld$(Ll$0Lt$8L|$@HHf8s|H *HKH$MAP1ZtDCxtp8s|H ߏHH$MA?1Lf.w|H HMA:1gDLH1L[LcH H5LHH81+H\$Hl$HLd$Ll$HLt$L|$HHD|$PIAELL$E AEDHADA4D)A;6HEIcMcD)J<1IcHcHH $E)HH $Ht$LHH}qD#HEED#McB H\$Hl$ Ld$(Ll$0Lt$8L|$@HHfA41EA;6jH}A6HcHEN@H}‰fDLAAH\$Hl$HLd$Ll$H(HAIHIDP@uAAAEAvE11=f.HɍEJcH@H5EAEEHHl$H\$Ld$Ll$ H( DH5NEfH50H5)H5 H5H5SHH5H@H1[f.H\$Hl$HLd$Ll$H(AHIHIDP@uH5AEAH1|H\$Hl$Ld$Ll$ H(ÐAW1AVAUATUHSHHHEHT$ HT$0HL$ DD$DL$HDŽ$8DŽ$<HT|$uHu D$HD$M~H31@H9D0t$D$E1D$,DHD$F<0EIcŀ|0L$,t_HADP@UD$E1D$( fAD9e~vHIcA9uD$(DŽ$<DŽ$8%D$D$D$<E~$8tvt9EAD9e@ID9t$HH[]A\A]A^A_D$L$0GDHT$ DHHD$<f.D$L$0EH$8H$<H$0A73fH$8H$<H$0A?D$<EfH$8H$<H$0AD$<EfH|$VD$ffff.AVIAUIATIUSHDE1fDHHA9$IEـ<\u(w;AH)HcIvLHcHD)HcfD1@Ext]HNHAۋu|EH HDHrE)HD$IFA%HD$AFD$IcI1L$$u Hl$0H\$(Ld$8Ll$@Lt$HL|$PHX1gO17!f1ffffff.Ht/<<~.<=@tV<>u&~ 1=H~Hu(HeHu0HQHu4H=Hu8H)Hu@HD軽E1HuHoHuH苽HuHBHu H^Hu(HHC HP0HtʉU0PʉU4@ȉE8 Hu0HAHu4H-Hu8HټH\$Hl$HHH?HHtH\$Hl$HH;HH\$Hl$HH\$Ld$HLt$L|$IHl$Ll$HhHII@x uiLHnHHp4Bx HJ0HcLuiAHcA)Hk1I.E/H\$8Hl$@Ld$HLl$PLt$XL|$`HhÐp|H zHzMA 1lDH{r|HcA͉L$H zA)H zD$H|$ HD,$H|$MA 1OH@x t&p|H LzHyMA 1`IAH?H\$Hl$HLd$Ll$ILt$L|$HhH?HIMIŸMtQIc}}莻HcUI$HIuzHAM4@x HP0HcD,DTu;IcHCE)IE1H\$8Hl$@Ld$HLl$PLt$XL|$`HhfDp|HCH RyDT$Dl$HxA= HD$I$H$DM1DT$()DT$(tffffff.ÐLd$H\$AHl$Ll$HHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$Hi HD$D$ 0L-xHH$HD$HD$ HD$t@L-xt+@L-8xtǀL-lxt L-xfD#C $LrH5xMH1bHT$HH2H޿ eH$H$L$L$HDL-wt~ZL-wrL-wU]DL-wEL-w%-DL-nwL-6wS0蠻PHÿ @@ 耻HȺHCC(sH IHǺHC#H{1(H[UHSHDWELE111OA@AXH~:IxHHHHH1D1ɃHH9uAp ~.Ix1HHDDD01EH@H9uIE9su3E H$HD$u#H}H7uE(H[]Ëu$H wH4vA711fff.AWIAVAUATUSHhB HD$0HD$8Ht$\@D$,HD$ D$,A9G5fAw$H uH&tEAm1 J@LhHh[]A\A]A^A_fE8,uHc2HT$ II7AD$<Vx1۽эDA9~pHA<|uHcLHD$(H|$(H*HT$ LHL$H$QHD$a@H$Hc$H5Q`LD$xL+CH$HL$pHT$$M 1$$蚙AL$Ht$ H$EDLD4$E蝿H$谗L$HL$xH$Ht$pH$LL$xH$D$H$H$1ɉ$0H$H$H$H }L$D$H5aHL$p$H$1褘A@Hc{sL|$h)H{$HcH$HD$hHT$ SH{L|$hbHHD$h襖H$$HT$ y@S+S@Dp|HD$XH bD$H]Hl$AH$1H$L|$hHcLc$Ht$XHHLH$BD-HHHHT$ LpHA赕E1Dp|HD$XH aaD$H\AH$1p|HD$(H !aHD$PD$H_AE)H$1Lp|HD$`H `D$H_A}H$1DHD$0@yHp|HD$hH `T$@DL$DAHD$$A)щD$HcHD$(HD$PHk]H$1p|D$DH :`DL$@H+_Al$1HD$0@y[T$@p|H _DL$DAnHcHD$(HD$PA)H^H$1ZHD$0Ll$h@y p|D$H _H\L,$At1fH}NHt$ L M^H$E11L$ VD$Ht$ L *^H$$LAH'HHl$h@yHHzHHD$hH$LMfDHD$PH[]A\A]A^A_fr|D$H ^HD$XD$H>[AZH$1xp|D$H N^HZH,$AP1H|$h%Ht$ H$L \E11L$D$Ht$ L \H$$LAHٹ@H$$H5n\L1耓CL$H$$H5,\1LP@p|D$H[H O]H,$1AHHl$PPxfH\$Hl$HLd$Hr Ht!G9H$Hl$Ld$H@HzHLHIH{(E9H{(H5H1L薓KtE9H{(,L;ctLH$Hl$Ld$H錐@w uLL#A$8u@UIt$H诉u+A<,HEHHl$H$Ld$H1@H H 듐AWIAVAUATIUSH8 H= 1`I$AGxLM|$AD$AG|AD$HHD$`D$E1H|$HT$,DD$,&IɈH1菓LHH術T$,H5;XH|$ 1L7[Ht$ H!H}H5$XqH}D$tHD$؃}lDiAD$D tDHI<$AHHZtAD;l$H|$譆H8[]A\A]A^A_fDH}AˈHÈHH賈D;l$믋D$,At$H YHWLt$AH$1LH=9  ZH5VH= H= ;H5VH= ؟H=V跊fH\$Hl$HHHHHHHl$H\$HDSHH?dHC[f.SHH[鞇fffff.AWIE1L=SAVAUATUSHHHT$PH$H$H|$xHL$X$1HD$xDŽ$DŽ$CD$0D$,HD$@H;A虉Ll$@D$0Ll$xD$4fH;H$萅HH;H$H_HT$`LHH謠CAt@HUEL 5UsEH VMEAHT$HeU$1EjT$tD$pAA)CA1A9DOHcH=נ 1LDRCHcD$pDd$H jVsDL$0HpUALHD$HEH$1T$4D$,DEND$,9$D$,`CHcT$,HT$@gsDL$0H UHT1AtC5HD$xsH UDL$0HSAuHD$$$1PCHqOsDL$0H cUHSAvHD$D$,$1Hct$pH= 1DL臜CHcD$pDd$H TsDL$0H=TALHD$HEH$1^fDsHHQSLH TEH$A1YAT$tD$pAC3HT$8l$,H$l$HDD$,H|$xDD$LB$L H$rL RH$H$H|$xA$EHD$8L$HL RT$,H$H|$xE1H$L H$CHD$xsH SDL$0HORAHD$$$1>CfDD;d$4CuvHT$`D$pDd$4HT$8T$tD$HT$LHcD$HHT$8H SsDL$0AIŋD$L+D$HLl$D$HHRH$1{HEsH RDL$0H_RAH$1yUH$H$H|$xL EQ$E11ǩ$H$H$H|$xL Q$A蕩HD$xHT$PH$HT$XHĘ[]A\A]A^A_Ð>"SHtHtbHzH)[DH1J't "tKHHt HfD,t\uۀz\uHf.[H'Ht[DAWHTHcAVAUATUSHD401H|$(AN+wH8UHcHJ H1H,H EHD$ AhHl$pE)ADOHJX1HD$0HDXHD$8H@XHD$@=XD$HHT$0H8XLd$ L=UD$HT$HT$KHD$HT$B3HA9u[tVH| Hc1H4HcŃHtp3Ht$H|$I D$}HD$HWHD$D9uHT$ H!%tDHJHDHHH+T$I T$tHĨ[]A\A]A^A_f.H|$(LtD$0H\$(E1Ll$ HItB<%AEuH|$hT$ HL$DD$LL$LT$(D\$0Ht$hHcFHtHD$hHH0HcF HHHF@Ht$hHcFHtHD$hHH0HcFHHHHHHFA4$A<$1T$ HL$DD$LL$LT$(H|$hD\$0@ƃ D\$0LT$(LL$DD$HL$T$ IHt$hHcFHtHD$hHH0HcFHHHHHHFA4$pH Ht$hHcFHtHD$hHH0HcFHHHHHHFA4$pLHt$hHcFHtHD$hHH0HcFHHHHHHFA4$pPHt$hHcFHtHD$hHH0HcFHHHHHHFA4$pTIHt$hHcFHtHD$hHH0HcF HHHFI4$HpHt$hHcFHtHD$hHH0HcF HHHFH5=HpHt$hHcFHtHD$hHH0HcF HHHFA4$pHt$hHcFHtHD$hHH0HcF HHHFA4$p4lHt$hHcFHtHD$hHH0HcF HHHFI4$Hp5Ht$hHcFHtHD$hHH0HcF HHHF@ I4$H|$hT$ HL$DD$LL$LT$(D\$0$oA4$1Ht$hFH|$hT$ HL$DD$LL$LT$(D\$0Ht$hA<$HcFHDHH1@ƃp8RH|$h1T$ HL$DD$LL$LT$(D\$0IHt$hI<$HcFHDHHHcp0H@(H|I4$H|$hT$ HL$DD$LL$LT$(D\$0nI4$H|$hT$ HL$DD$LL$LT$(D\$0s>L$Pq1MAVH 5 AUL-@ ATUSLM9-6 H3 L%PLSL vUL5WAAtH KDHcfAH8HwH0= H~ tHHH HJć [fffff.SHHx 1Ht Hr HH9tKHtLH] HH8t# \ HM HHQ V HJ HB [@H Hff.H\$Hl$HLd$HHH}|7uv|7uo@HItbHHXHXHh@$HHh @(@,@8@<LH$Hl$Ld$HfE1H=B?ffffff.ATUDeSHMcLHtB1҅~D  H9HcLHD((Ht@$[]A\H=BH=AfSHiH߉[lfff.H\$Hl$HH HHt3H| H Lx Hvy MA H81g8 $ H1 5- H!y  H 5 }{z€ Hπ 5ˀ yL7x LHx IcI;HƉD$x覓H|$0HT$|Ht$xHD$xD$|4H|$0HcD$xH   & A$Hc L% ATEmLw DH5 A+D$X A$H LIL\$@DZHH81cWSfAUAATUHSHHcGHDHHHcP HHHPH:WA~x1HcEHTHHUHcB HHHBHT$ H8hWHcUDhxHTHHUHcz HHHzHH?VD9uH[]A\A]ÐHl$Ld$H-b L%b Ll$Lt$L|$H\$H8L)AIHIPHt1@LLDAHH9uH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSPaHHa HuHHCHSHuH[]ÐH{XHlibgrok.soInternal compiler error: %s Regexp: %s Position: %d patternsubnamepredicatedefinition[%s:%d] start pcre_callout func %s/%.*s[%s:%d] end pcre_callout func %s/%.*s returned: %d[%s:%d] No such function '%s' in library '%s'(?!<\\)%\{(?(?[A-z0-9]+)(?::(?[A-z0-9_:]+))?)(?:=(?(?:(?P\{(?:(?>[^{}]+|(?>\\[{}])+)|(?P>curly2))*\})+|(?:[^{}]+|\\[{}])+)+))?\s*(?(?:(?P\{(?:(?>[^{}]+|(?>\\[{}])+)|(?P>curly))*\})|(?:[^{}]+|\\[{}])+)+)?\}grok_pcre_callout[%s:%d] Compiling '%.*s'start of expand[%s:%d] % 20s: %.*sstart of loop[%s:%d] Pattern length: %d[%s:%d] Pattern name: %.*s%04x[%s:%d] Predicate is: '%.*s'=~!~!<>=Invalid predicate: '%.*s' (?C1)replace with (?<>)add capture id[%s:%d] :: Inserted: %.*s[%s:%d] :: STR: %.*sgrokre.c[%s:%d] Fully expanded: %.*s[%s:%d] Studying capture %dgct != ((void *)0)[%s:%d] %.*s =~ /%s/ => %dpcre badoption pcre badmagic 1.20110630.1Too many replacements have occurred (500), infinite recursion?[%s:%d] Inline-definition found: %.*s => '%.*s'[%s:%d] Predicate found in '%.*s'[%s:%d] Adding predicate '%.*s' to capture %d[%s:%d] Failure to find capture id %dstrlen(full_pattern) == full_len[%s:%d] A failure occurred while compiling '%.*s'failure occurred while expanding pattern (too pattern recursion?)[%s:%d] Error: pcre re is null, meaning you haven't called grok_compile yetERROR: grok_execn called on an object that has not pattern compiled. Did you call grok_compile yet? Null error, one of the arguments was null? grok_compilengrok_pattern_expandgrok_pattern_expandgrok_capture_add_predicategrok_study_capture_mapgrok_study_capture_mapgrok_execn[%s:%d] Adding pattern '%s' as capture %d (pcrenum %d)[%s:%d] Setting extra value of 0x%x[%s:%d] walknext null[%s:%d] walknext ok %dgrok_capture_addgrok_capture_set_extragrok_capture_walk_next[%s:%d] Adding new pattern '%.*s' => '%.*s'[%s:%d] Searching for pattern '%s' (%s): %.*s[%s:%d] pattern '%s': not found[%s:%d] Importing patterns from string[%s:%d] Importing pattern file: '%s'[%s:%d] Unable to open '%s' for reading: %sFatal: calloc(1, %zd) failed while trying to read '%s'Expected %zd bytes, but read %zd.not foundgrok_pattern_addgrok_pattern_findgrok_patterns_import_from_filegrok_patterns_import_from_string\a\t\f\b\r\n\x%x\u00%02x   rrrrrrrnegative match Args: %.*s pcre_exec:: %d Error at pos %d: %s falsetrue[%s:%d] Regexp predicate found: '%.*s'(?:\s*([!=])~\s*(.)([^\/]+|(?:\/)+)*)(?:\g{-2})Internal error (compiling predicate regexp op): %s An error occurred in grok_predicate_regexp_init. [%s:%d] Regexp predicate is '%s'An error occurred while compiling the predicate for %s: [%s:%d] Compiled %sregex for '%s': '%s'[%s:%d] RegexCompare: grok_execn returned %d[%s:%d] RegexCompare: PCRE error %d[%s:%d] RegexCompare: '%.*s' =~ /%s/ => %s[%s:%d] NumCompare(double): %f vs %f == %s (%d)[%s:%d] NumCompare(long): %ld vs %ld == %s (%d)[%s:%d] Compare: '%.*s' vs '%.*s' == %s[%s:%d] String compare predicate found: '%.*s'[%s:%d] String compare rvalue: '%.*s'[%s:%d] Number compare predicate found: '%.*s'[%s:%d] Arg '%.*s' is non-floating, assuming long type[%s:%d] Arg '%.*s' looks like a double, assuming double||h|P|@||{{{x{P{{}}}}}|grok_predicate_regexp_initgrok_predicate_regexpgrok_predicate_numcompare_initgrok_predicate_numcomparegrok_predicate_strcompare_initgrok_predicate_strcompare[%s:%d] Fetching named capture: %s[%s:%d] Named capture '%s' not found[%s:%d] Capture '%s' == '%.*s' is %d -> %d of string '%s'[%s:%d] CaptureWalk '%.*s' is %d -> %d of string '%s'grok_match_get_named_substringgrok_match_walk_next[capture] [compile] [exec] [match] [patterns] [predicate] [program] [programinput] [reaction] [regexpand] [discover] [unknown] [%d] %*s%s[%s:%d] No more subprocesses are running. Breaking event loop now.[%s:%d] Found dead child pid %d[%s:%d] Pid %d is a matchconf shell[%s:%d] Pid %d is an exec process[%s:%d] Reaped child pid %d. Was process '%s'[%s:%d] Scheduling process restart in %d.%d seconds: %s[%s:%d] Not restarting process '%s'[%s:%d] SIGCHLD received[%s:%d] Adding %d inputs[%s:%d] Adding input %dgrok_collection_check_end_stategrok_collection_add_collection_sigchld[%s:%d] Buffer error %d on file %d: %s[%s:%d] EOF Error on file buffer for '%s'. Ignoring.[%s:%d] Not restarting process: %s[%s:%d] Not restarting file: %s[%s:%d] fatal write() to pipe fd %d of %d bytes: %s[%s:%d] Error: Bytes read < 0: %d[%s:%d] Error: strerror() says: %s[%s:%d] Failure stat(2)'ing file '%s': %s[%s:%d] Unrecoverable error (stat failed). Can't continue watching '%s'[%s:%d] File inode changed from %d to %d. Reopening file '%s'[%s:%d] File size shrank from %d to %d. Seeking to beginning of file '%s'[%s:%d] Repairing event with fd %d file '%s'. Will read again in %d.%d secs[%s:%d] Buffer error %d on process %d: %s[%s:%d] Starting process: '%s' (%d)[%s:%d] execlp(2) returned unexpectedly. Is 'sh' in your path?[%s:%d] Scheduling start of: %s[%s:%d] Failure stat(2)'ing file: %s[%s:%d] Failure open(2)'ing file for read '%s': %s[%s:%d] Adding input of type %s[%s:%d] Input still open: %d[%s:%d] %s: read %d bytes-c[%s:%d] execlp: %s[%s:%d] Adding file input: %s[%s:%d] strerror(%d): %s[%s:%d] dup2(%d, %d)processgrok_program_add_inputgrok_program_add_input_processgrok_program_add_input_file_program_process_buferror_program_process_start_program_file_buferror_program_file_repair_event_program_file_read_realgrok_input_eof_handlerPATTERN \%\{%{NAME}(?:%{FILTER})?}[%s:%d] Closing matchconf shell. fclose() = %d[%s:%d] matchconfig subshell set to 'stdout', directing reaction output to stdout instead of a process.[%s:%d] Starting matchconfig subshell: %s!!! Shouldn't have gotten here. execlp failed[%s:%d] Fatal: Unable to fdopen(%d) subshell pipe: %s[%s:%d] ApplyFilter code: %.*s[%s:%d] Can't apply filter '%.*s'; it's unknown.[%s:%d] Applying filter '%.*s' returned error %d for string '%.*s'.[%s:%d] Matched something: %.*s[%s:%d] Checking lookup table for '%.*s': %x{ "@LINE": { "start": 0, "end": %d, "value": "%.*s" } }, { "@MATCH": { "start": %d, "end": %d, "value": "%.*s" } }, { "%.*s": { "start": %ld, "end": %ld, "value": "%.*s" } }, [%s:%d] JSON intermediate: %.*s[%s:%d] Unhandled macro code: '%.*s' (%d)[%s:%d] Prefilter string: %.*s[%s:%d] Replacing %.*s with %.*s[%s:%d] Reaction set to none, skipping reaction.[%s:%d] Sending '%s' to subshell[%s:%d] flush enabled, calling fflush[%s:%d] Executing reaction for nomatch: %s[%s:%d] Trying match against pattern %d: %.*sNAME @?\w+(?::\w+)?(?:|\w+)*FILTER (?:\|\w+)+%{PATTERN}/bin/shstdouterrno saysw[%s:%d] Filter code: %.*s[%s:%d] Checking '%.*s'NAMEFILTER"@LINE": "%.*s", "@MATCH": "%.*s", "%.*s": "%.*s", { { "grok": [ ] }[%s:%d] Start/end: %d %d[%s:%d] Replacing %.*s[%s:%d] Filter: %.*s0 hgrok_matchconfig_closegrok_matchconfig_execgrok_matchconfig_reactgrok_matchconfig_exec_nomatchgrok_matchconfig_filter_reactiongrok_matchconfig_start_shellgrok_match_reaction_apply_filter[fatal] pipe() failed0Ц@END@LINE@START@LENGTH@JSON@MATCH@JSON_COMPLEX[%s:%d] filter executing\`$"`^()&{}[]$*?!|;'"\\"/jsonencodeshellescapeshelldqescapefilter_jsonencodefilter_shellescapefilter_shelldqescape.\b.%\{[^}]+\}%%{%.*s}asprintf failed|succeeded[%s:%d] %d: Round starting[%s:%d] %d: String: %.*s[%s:%d] %d: Offset: % *s^[%s:%d] Test %s against %.*s[%s:%d] Matched %.*s\E\Q[%s:%d] %d: Pattern: %.*s[%s:%d] Including pattern: (complexity: %d) %.*s[%s:%d] %d: Matched %s, but match (%.*s) not complex enough.[%s:%d] %d: Matched %s, but match (%.*s) includes %{...} patterns.[%s:%d] %d: New best match: %s[%s:%d] %d: Matched %s on '%.*s'grok_discover_initgrok_discoverSyntax error: %s syntax errormemory exhausted$end$undefinedQUOTEDSTRINGINTEGER"debug""program""file""exec""match""no-match""load-patterns""follow""restart-on-exit""minimum-restart-delay""run-interval""read-stderr""pattern""reaction""shell""flush""break-if-match""stdout""none"'{''}'';'':''\n'$acceptconfigrootroot_program$@1program_blockprogram_block_statementprogram_load_patternsprogram_file$@2program_file_optional_blockprogram_exec$@3program_exec_optional_blockprogram_match$@4program_nomatch$@5file_blockfile_block_statementexec_blockexec_block_statementmatch_blockmatch_block_statementAKfBҶ,ǷG۹Ǹ8noB @4.)>/,1"(02356789:;<=?FI KUWXYZ[\]  24     7>& ,GG,5V-./016 F-./019,XHKW:;<=5-./0196RY':;<=  "(*T@UABZCDEIJMNOP[Q\]^_`ab !LS4   -- %,$+#5./01234"!*&'()! ""######$&%'')(**,+.-//0001122222233444444444^P-'A #)$+%&78>?23syntax error, unexpected %s or %s, expecting %sbad buffer in yy_scan_bytes()input in flex scanner failedout of dynamic memory in yy_create_buffer()out of dynamic memory in yyensure_buffer_stack()out of dynamic memory in yy_scan_buffer()out of dynamic memory in yy_scan_bytes()flex scanner push-back overflowUnexpected input on line %d: '%.*s' fatal flex scanner internal error--end of buffer missedfatal error - scanner input buffer overflowout of dynamic memory in yy_get_next_buffer()fatal flex scanner internal error--no action foundwٿҿ˿ĿP. M     !"#$##%" !"""""""""""""$#$#   !" '*()'&(?1.4|||}yy{u}xuurmlkviqks{pyablb_bhg[]UgWUUibPTNZSZKZDQHNDCYNJ?4 JMPSVX[49SS)))49}|zyxwvutsqpmlkjihgfecba`_^\ZYXWVUTRQONMLKJIHGFEDB@>=<;:8753210/.-,+*$        !%%)))7&&))))))-29N58S;.3/60gh:<)))OT"""$$$'''??@@BBCC~}|{zyxwvutsrqpoPnm6lkjifedcba`_^]\[ZYAA6XWVURQPMLKJIHGFEDA>=41,+*((## Usage: %s [-d] <-f config_file> -d (optional) Daemonize/background -f file (required) Use specified config filegrok %s vhdf:No config file given. Parsing error in config file Error while daemonizingdaemonhelpversion%{@LINE}Failure compiling pattern '%s': %s ;TXp H  @ `--.(0x000H0`23X333(84HH6x6(78777 H8H8p9:; =( X?P x@x @ A C 8EX E F hF I xK NH Op XP R 8T hW( WP (Yx 8Y XZ hZ X\ \ ]P a b c c(fxhk(llHl`(nxoqrs(s@htp(vXy 8PȆ(Xh@`h88XXxx@8XؤȥH0XXhpxȧا0H`(8hh(Xhغ8XXpXh(Hxxؿ(X`zRx ,MMNp F <L`BOA  ABH  ABH AY?MD m rAe J A"AR M AL  BBB B(A0A8J 8A0A(B BBBA \(7MD a| ($(MML K *FML h@*8*ZD *BBB A(D0GPl 0A(A BBBJ T(,%D0`$l@,DAGG0rAA$h,DAGG0rAA,%D0`,^AG RC4, BDD GW  AABA ,.&AL@WAL.A L Al`/ ,X/AAG0x DAJ /$/KAAD0DA$/MMIPw$p0MNP C ,DH1BGC  ABG 4t1BAD G@Q  CABK $2M[P J $4hM[P J $6MN0 J $6&Ad$D7oMN0SLlP7BDB B(A0D8J 8A0A(B BBBH D9LBEE D(A0D@ 0A(A BBBG ,:aBDD C AEE 4;fLp;OML q,l;_MMQ H ,>MMN` I $P@MI@ H $BqL[` A , DD| H j F T D T D T,LDM[P" F ,|@F H``, D $0H$MI w C $8KIMD ^ A T$`KhM[pv B $L,<LMMNp G lM$MMQ4 F PO}A{,OADD0 AAA LPBEB B(A0A8Dk 8A0A(B BBBJ <L @T BEA A(G0 (A ABBE  U , UADG@h AAJ L UBBA D(D06 (A ABBG  (A ABBF 4$ X>HS@ G b N a G z E $\ ZMLM J 4 \YBBA D(G0B(A ABB4 ]YBBA D(G0B(A ABB 8]ND I, p]BAG x AG v AA $< ^EMNp G $d _|MQ9 I $ bN u M S E T bMD  hc, pcADG0f AAD , cAPG@` AAF ,L e'MMNu C L| hW BDB B(D0A8J 8A0A(B BBBJ , sMI m E w I p H < tBEB A(A0v(A BBBd< 0uYBEB B(D0A8D  8A0A(B BBBI ^8A0A(B BBB (v)DN A $ 8v GOD  D  w~MI g w~MI g,wMI $L`xGOD ^ H Ltx>BEB B(D0A8DpS 8A0A(B BBBG z;N lzATzALL$zBOB B(A0A8J8A0A(B BBB$tDV F Q O JL BLB B(A0A8G 8A0A(B BBBK ЃL؃ BPB B(A0A8G+ 8C0A(B BBBC <T(BOI A(A0(A BBBؐM)D(U$pMN0  4 L dؑ |Б ȑ    $ yMN Q A 4,LmH^ J r F r F |0D}Ar E $MI  C ,wBAG Q ABA AN4N u M LTx/ BBB B(A0A8G 8A0A(B BBBA X$PbDl H M K Q}Db J D5DlL4BGE E(D0K8Gf 8A0A(B BBBA x4Ar,ADD  AAD 8FA_ H ],hRAAG  AAA $\MD JDإ\MD J,dADD p AAE <BJB A(D0x (A BGI] 4XBEA D(D@(A ABB$ Q_@X4XAAAAAAAAAAAAAAAA&A.A9AIARAdA|AAAAAAAAAAAAAAAAAAAA'A?AUAbAfAAAAAAAAAAAAA!A*Ap@5A@AAp@/<N[ (>@ <@o`@8 @`@  Uax 4@1@ o(1@oo/@RaV>@f>@v>@>@>@>@>@>@>@>@>@?@?@&?@6?@F?@V?@f?@v?@?@?@?@?@?@?@?@?@@@@@&@@6@@F@@V@@f@@v@@@@@@@@@@@@@@@@@@A@A@&A@6A@FA@VA@fA@vA@A@A@A@A@A@A@A@A@B@B@&B@6B@FB@VB@fB@vB@B@B@B@B@B@B@B@B@C@C@&C@6C@FC@VC@fC@vC@C@C@C@C@C@C@C@C@D@D@&D@6D@FD@VD@fD@vD@D@D@@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~*AdAf*Ah*AvGCC: (GNU) 4.6.0 20110530 (Red Hat 4.6.0-9).symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.comment@#@ 1<@<$Do`@`N `@`V8 @8 ^o/@/ko(1@(1pz1@14@4x  (>@(>@>@@>`D@D<@<`@`< +A+T`/A`/LPaPPaP Pa P@Pa@Pp RaRTaTUaU@XaX ZaZ 0Z,Z c8( @@<@`@`@8 @/@(1@ 1@ 4@ (>@ @>@ D@<@`@+A`/APaPa Pa@PaRaTaUaXaZa F@Pa*Pa8 PaE F@[ZajZax 0G@PaEA Pa @`]a `G@@@@' @9@@K@d`@}w@  @@@`@@@@@! @+:YaDQZae@w@@P@0@@@@`@$3A EAWAivA`A@A AAAAA`A)[a5 [aM` A_ Aq@ A! A! A A A A@PapwApA+PA=Ra0K[[afAx[a\aA @ @ AcAPaA#A"Ah*A4Ac=@A6B@AhJARA6WAak @$]a8]aD]aH]a A$A%A'A A!A`#A @M(]a0]a2P]a=@]aJ @)Y @h @m~X]aT]a ]aUah@PaPaPaRa! Xa,@ K@?K p@~`n @ b@ @ [@ @  1  @A  @a w  @R  @@$   @~  tF@    l@  @;   q@O  @. A ZaN Y m   p@b   @@    Pc@  ! ? R m  @>    @b@  I@   <@  @}  @ #  h@h2  ^@^I  @ U  @ht   0@        @ - 8 L ]aR  `^@Dn  0@)x   PK@r h]a   `@   @  Xa #- J@6`@E @\Yoy t@ n@Lp]a Xa @-A p@^ @h `@W  [@ @N y@q @  @  p@ `@ @p@a$=G @wUj} P@UZa @\ @  @  p@I 0@( @<R p@ [ ^@Dt `@} @_@  0[@F k@oZa `@ @@& @; Y@FZ @z `@ z@ e@ v@%0 @yAUj @| `@  f@ Ж@Y X@7" }@ AZaM `@ Z @ f p@ft @|]a @ c@ c@KZa @  @@) `@43 K@"= a@O[ @ey `j@ 0@E 0b@ ZaZa Г@3 @BJx]aOcw @ p@ ^@% `{@ @  @5  @ Za)= 0@'^ б@Yt Pa@& [@Z]a d@ 0@/ , @@ 4 @K k@&]qZa Y@Za Н@ @ @ ]@%-@TZab 0@Y p@ p@F @$ pq@_? `@R\ D@ak (>@q L@  @>call_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5886dtor_idx.5888frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxmain.cg_proggrok.cgrok_pcre_callout__FUNCTION__.7033grokre.c__FUNCTION__.7273__FUNCTION__.7238__FUNCTION__.7303__FUNCTION__.7336__PRETTY_FUNCTION__.7288__PRETTY_FUNCTION__.7337__FUNCTION__.7255grok_capture.c__FUNCTION__.7011__FUNCTION__.7056__FUNCTION__.7086grok_pattern.c__FUNCTION__.7022__FUNCTION__.7031__FUNCTION__.7049__FUNCTION__.7040stringhelper.call_charspredicates.cregexp_predicate_op__FUNCTION__.7069__FUNCTION__.7085__FUNCTION__.7123__FUNCTION__.7219__FUNCTION__.7141__FUNCTION__.7101grok_capture_xdr.cgrok_match.c__FUNCTION__.7002__FUNCTION__.7017grok_logging.cgrok_program.c__FUNCTION__.9414__FUNCTION__.9435__FUNCTION__.9420grok_input.c__FUNCTION__.9506__FUNCTION__.9535__FUNCTION__.9526__FUNCTION__.9516__FUNCTION__.9478__FUNCTION__.9487__FUNCTION__.9450__FUNCTION__.9460__FUNCTION__.9436grok_matchconf.cmcgrok_initglobal_matchconfig_grok__FUNCTION__.9699__FUNCTION__.9813__FUNCTION__.9826__FUNCTION__.9755__FUNCTION__.9735__FUNCTION__.9742__FUNCTION__.9721libc_helper.cgrok_matchconf_macro.casso_values.1994wordlist.1999filters.c__FUNCTION__.7078__FUNCTION__.7071wordlist.7048grok_discover.cdgrok_init__FUNCTION__.7043global_discovery_req1_grokglobal_discovery_req2_grok__FUNCTION__.7074conf.tab.cyytnamerryysyntax_erroryypactyytranslateyytnameyyunexpected.8426yyexpecting.8427yycheckyyor.8428yydefactyyr2yytableyypgotoyyr1yydefgotoconf.yy.cyy_get_previous_stateyy_startyy_c_buf_pyy_last_accepting_stateyy_last_accepting_cposyy_acceptyy_baseyy_chkyy_nxtyy_ecyy_defyy_metayy_load_buffer_stateyy_buffer_stackyy_buffer_stack_topyy_n_charsyy_hold_charyy_fatal_erroryy_init_bufferyyensure_buffer_stackyy_buffer_stack_maxyy_did_buffer_switch_on_eofyy_initgrok_config.c_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____init_array_end__init_array_start_DYNAMICdata_startdaemon@@GLIBC_2.2.5grok_clonefilter_shelldqescapetctreeputkeepgrok_input_eof_handlerfileno@@GLIBC_2.2.5dup2@@GLIBC_2.2.5grok_capture_walk_endprintf@@GLIBC_2.2.5conf_new_matchconfgrok_capture_addconf_new_programmemset@@GLIBC_2.2.5ftell@@GLIBC_2.2.5__libc_csu_finigrok_collection_check_end_statesnprintf@@GLIBC_2.2.5conf_new_inputxdr_grok_capturetclistdelfilter_shellescape_startpcre_free_substringevent_setstring_escapegrok_discover_newclose@@GLIBC_2.2.5string_countconf_match_set_debugabort@@GLIBC_2.2.5g_pattern_retccmpint32stpcpy@@GLIBC_2.2.5xdr_int@@GLIBC_2.2.5yy_delete_bufferpcre_freegrok_discover_cleanpcre_get_stringnumberisatty@@GLIBC_2.2.5grok_pattern_add__gmon_start___Jv_RegisterClassesputs@@GLIBC_2.2.5getopt_long_only@@GLIBC_2.2.5fseek@@GLIBC_2.2.5__isoc99_sscanf@@GLIBC_2.7_program_file_read_realexit@@GLIBC_2.2.5__assert_fail@@GLIBC_2.2.5grok_capture_walk_nextgrok_initbufferevent_enablegettimeofday@@GLIBC_2.2.5_finiyypop_buffer_stateyyget_outsubstr_replacegrok_capture_set_extrayyset_debuggrok_match_get_named_substringtctreeiternextgrok_match_walk_initxdrmem_create@@GLIBC_2.2.5read@@GLIBC_2.2.5strncmp@@GLIBC_2.2.5malloc@@GLIBC_2.2.5fopen@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5yyset_linenotctreenew2execlp@@GLIBC_2.2.5yyoutgrok_capture_get_by_subnamesafe_pipetctreenewgrok_free_cloneyylenggetpid@@GLIBC_2.2.5grok_match_walk_endxdr_bytes@@GLIBC_2.2.5yyget_lengevent_base_dispatchEMPTYSTRtclistremovevfprintf@@GLIBC_2.2.5tctreegetgrok_new_IO_stdin_usedconf_new_input_file__strdup@@GLIBC_2.2.5pcre_execfputc@@GLIBC_2.2.5grok_predicate_regexpfree@@GLIBC_2.2.5_IO_getc@@GLIBC_2.2.5strlen@@GLIBC_2.2.5optind@@GLIBC_2.2.5string_unescapeyytext__data_startgrok_matchconfig_closeferror@@GLIBC_2.2.5grok_matchconfig_start_shellyyrestartgrok_matchconfig_filter_reactiongrok_version__xstat@@GLIBC_2.2.5_program_process_buferrorgrok_predicate_strcompareyyget_textgrok_collection_loopfilter_jsonencodeyyfreestring_ndup__ctype_b_loc@@GLIBC_2.3tctreeputyy_scan_bytessprintf@@GLIBC_2.2.5stdin@@GLIBC_2.2.5fdopen@@GLIBC_2.2.5yy_flush_bufferg_cap_nameconf_new_input_processpipe@@GLIBC_2.2.5yyset_ingrok_collection_addtclistnewgrok_match_get_named_captureyy_scan_bufferyypush_buffer_statestrerror@@GLIBC_2.2.5yyget_ingrok_capture_get_by_namegrok_collection_init_grok_capture_encodegrok_execstring_escape_unicodepcre_fullinfolseek@@GLIBC_2.2.5strtol@@GLIBC_2.2.5g_cap_pattern__libc_csu_initgrok_match_walk_nextstring_filter_lookupgrok_erroroptarg@@GLIBC_2.2.5grok_matchconfig_global_cleanupyylex_destroyevent_addgetpgid@@GLIBC_2.2.5event_oncestropbufferevent_newgrok_patterns_import_from_stringpcre_compilegrok_predicate_numcomparememmove@@GLIBC_2.2.5event_inityy_create_bufferstrchr@@GLIBC_2.2.5waitpid@@GLIBC_2.2.5grok_program_add_input_filefread@@GLIBC_2.2.5patname2macropcre_calloutgrok_patterns_import_from_file__errno_location@@GLIBC_2.2.5tctreedel_program_file_read_buffergrok_compilegrok_predicate_numcompare_init__bss_startyyget_linenoyyget_debugstring_ncountyyerroryyinasprintf@@GLIBC_2.2.5grok_program_add_inputgrok_pattern_findgrok_pattern_name_listevbuffer_readlineg_grok_global_initializedyyallocgrok_matchconfig_exec_nomatchconf_initgrok_freegrok_capture_freetctreeclearyyreallocevent_base_loopexitstring_escape_like_cgrok_program_add_input_processgrok_capture_walk_initg_pattern_num_capturesg_cap_definitionxdr_string@@GLIBC_2.2.5calloc@@GLIBC_2.2.5_program_file_repair_event_program_process_start_endfclose@@GLIBC_2.2.5dlopen@@GLIBC_2.2.5strncpy@@GLIBC_2.2.5grok_discover_grok_loggrok_capture_get_by_capture_numberdlsym@@GLIBC_2.2.5grok_predicate_strcompare_inityyset_outusagegrok_matchconfig_reactyylinenostderr@@GLIBC_2.2.5grok_match_reaction_apply_filtergrok_matchconfig_exec_grok_capture_decodegrok_capture_inityy_flex_debugclearerr@@GLIBC_2.2.5fork@@GLIBC_2.2.5_pattern_parse_stringbufferevent_get_inputyylexfwrite@@GLIBC_2.2.5realloc@@GLIBC_2.2.5yyparse_program_file_buferrorstring_escape_hexperror@@GLIBC_2.2.5g_cap_predicategrok_execntctreeiterinit_edatatclistpushgrok_matchconfig_initfprintf@@GLIBC_2.2.5conf_new_match_pattern_collection_sigchldwrite@@GLIBC_2.2.5grok_capture_get_by_idpcre_get_substringbufferevent_disableg_cap_subname_program_process_stdout_readyy_scan_stringconf_new_patternfilememcpy@@GLIBC_2.14tclistoveryy_switch_to_bufferopen@@GLIBC_2.2.5strndup@@GLIBC_2.2.5strtod@@GLIBC_2.2.5stdout@@GLIBC_2.2.5grok_predicate_regexp_initgrok_discover_freetclistvalmaintclistnum_initgrok_compilenfflush@@GLIBC_2.2.5grok_discover_initgrok-1.20110708.1/grok.spec0000664000076400007640000000325111605651463013220 0ustar jlsjls%define _sharedir /usr/share/grok Summary: A powerful pattern matching system for parsing and processing text Name: grok Version: 1.20110708.1 Release: 1 Group: System Environment/Utilities License: BSD Source0: http://semicomplete.googlecode.com/files/%{name}-%{version}.tar.gz URL: http://www.semicomplete.com/projects/grok/ BuildRoot: %{_tmppath}/%{name}-%{version}-root Requires: libevent Requires: pcre >= 7.6 Requires: tokyocabinet >= 1.4.9 BuildRequires: libevent-devel gperf tokyocabinet-devel pcre-devel %description A powerful pattern matching system for parsing and processing text data such as log files. %package devel Group: Development Tools Summary: Grok development headers %description devel Headers required for grok development. %prep %setup -q %build make %install %{__rm} -rf %{buildroot} %{__mkdir_p} %{buildroot}%{_bindir} %{__mkdir_p} %{buildroot}%{_libdir} %{__mkdir_p} %{buildroot}%{_includedir} %{__mkdir_p} %{buildroot}%{_sharedir}/patterns install -c grok %{buildroot}/%{_bindir} install -c libgrok.so %{buildroot}/%{_libdir} install -c patterns/base %{buildroot}%{_sharedir}/patterns/base for header in grok.h grok_pattern.h grok_capture.h grok_capture_xdr.h grok_match.h grok_logging.h grok_discover.h grok_version.h; do install -c $header %{buildroot}/%{_includedir} done %clean %{__rm} -rf %{buildroot} %files %defattr(-,root,root) %{_bindir}/grok %{_libdir}/libgrok.so %dir %{_sharedir} %dir %{_sharedir}/patterns %{_sharedir}/patterns/base %files devel %{_includedir} %post /sbin/ldconfig %changelog * Tue Mar 8 2011 Jordan Sissel 1.20110308.1-1 * Mon Oct 19 2009 Pete Fritchman 20090928-1 - Initial packaging. grok-1.20110708.1/Doxyfile0000664000076400007640000017356511576274273013137 0ustar jlsjls# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = grok # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = docs # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = c=C h=C # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = conf.tab.c conf.tab.h conf.yy.c # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = NO # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES grok-1.20110708.1/predicates.h0000664000076400007640000000110611576274273013702 0ustar jlsjls#ifndef _PREDICATES_H_ #define _PREDICATES_H_ #include #include "grok.h" /* Regular Expression Predicate * Activate with operator '=~' */ int grok_predicate_regexp_init(grok_t *grok, grok_capture *gct, const char *args, int args_len); int grok_predicate_numcompare_init(grok_t *grok, grok_capture *gct, const char *args, int args_len); int grok_predicate_strcompare_init(grok_t *grok, grok_capture *gct, const char *args, int args_len); #endif /* _PREDICATES_H_ */ grok-1.20110708.1/grok_discover.h0000664000076400007640000000121311576274273014416 0ustar jlsjls/** * @file grok_discover.h */ #ifndef _GROK_DISCOVER_H_ #define _GROK_DISCOVER_H_ #include typedef struct grok_discover { TCTREE *complexity_tree; grok_t *base_grok; unsigned int logmask; unsigned int logdepth; } grok_discover_t; grok_discover_t *grok_discover_new(grok_t *source_grok); void grok_discover_init(grok_discover_t *gdt, grok_t *source_grok); void grok_discover_clean(grok_discover_t *gdt); void grok_discover_free(grok_discover_t *gdt); void grok_discover(const grok_discover_t *gdt, /*grok_t *dest_grok,*/ const char *input, char **discovery, int *discovery_len); #endif /* _GROK_DISCOVER_H_ */ grok-1.20110708.1/predicates.c0000664000076400007640000002433211576274273013703 0ustar jlsjls #include #include #include "grok_logging.h" #include "predicates.h" static pcre *regexp_predicate_op = NULL; #define REGEXP_PREDICATE_RE \ "(?:\\s*([!=])~" \ "\\s*" \ "(.)" \ "([^\\/]+|(?:\\/)+)*)" \ "(?:\\g{-2})" static void grok_predicate_regexp_global_init(void); /* Operation things */ typedef enum { OP_LT, OP_GT, OP_GE, OP_LE, OP_EQ, OP_NE } operation; int strop(const char * const args, int args_len); /* Return length of operation in string. ie; "<=" (OP_LE) == 2 */ #define OP_LEN(op) ((op == OP_GT || op == OP_LT) ? 1 : 2) /* grok predicates should return 0 for success and 1 for failure. * normal comparison (like 3 < 4) returns 1 for success, and 0 for failure. * So we negate the comparison return value here. */ #define OP_RUN(op, cmpval, retvar) \ switch (op) { \ case OP_LT: retvar = !(cmpval < 0); break; \ case OP_GT: retvar = !(cmpval > 0); break; \ case OP_GE: retvar = !(cmpval >= 0); break; \ case OP_LE: retvar = !(cmpval <= 0); break; \ case OP_EQ: retvar = !(cmpval == 0); break; \ case OP_NE: retvar = !(cmpval != 0); break; \ } typedef struct grok_predicate_regexp { //pcre *re; grok_t gre; char *pattern; int negative_match; } grok_predicate_regexp_t; typedef struct grok_predicate_numcompare { enum { DOUBLE, LONG } type; operation op; union { long lvalue; double dvalue; } u; } grok_predicate_numcompare_t; typedef struct grok_predicate_strcompare { operation op; char *value; int len; } grok_predicate_strcompare_t; int grok_predicate_regexp(grok_t *grok, const grok_capture *gct, const char *subject, int start, int end); int grok_predicate_numcompare(grok_t *grok, const grok_capture *gct, const char *subject, int start, int end); int grok_predicate_strcompare(grok_t *grok, const grok_capture *gct, const char *subject, int start, int end); static void grok_predicate_regexp_global_init(void) { if (regexp_predicate_op == NULL) { int erroffset = -1; const char *errp; regexp_predicate_op = pcre_compile(REGEXP_PREDICATE_RE, 0, &errp, &erroffset, NULL); if (regexp_predicate_op == NULL) { fprintf(stderr, "Internal error (compiling predicate regexp op): %s\n", errp); } } } int grok_predicate_regexp_init(grok_t *grok, grok_capture *gct, const char *args, int args_len) { #define REGEXP_OVEC_SIZE 6 int capture_vector[REGEXP_OVEC_SIZE * 3]; int ret; grok_log(grok, LOG_PREDICATE, "Regexp predicate found: '%.*s'", args_len, args); grok_predicate_regexp_global_init(); ret = pcre_exec(regexp_predicate_op, NULL, args, args_len, 0, 0, capture_vector, REGEXP_OVEC_SIZE * 3); if (ret < 0) { fprintf(stderr, "An error occurred in grok_predicate_regexp_init.\n"); fprintf(stderr, "Args: %.*s\n", args_len, args); fprintf(stderr, "pcre_exec:: %d\n", ret); return 1; } int start, end; grok_predicate_regexp_t *gprt; start = capture_vector[6]; /* capture #3 */ end = capture_vector[7]; gprt = calloc(1, sizeof(grok_predicate_regexp_t)); gprt->pattern = calloc(1, end - start + 1); strncpy(gprt->pattern, args + start, end - start); //gprt->re = pcre_compile(gprt->pattern, 0, &errptr, &erroffset, NULL); grok_log(grok, LOG_PREDICATE, "Regexp predicate is '%s'", gprt->pattern); grok_clone(&gprt->gre, grok); ret = grok_compile(&gprt->gre, gprt->pattern); gprt->negative_match = (args[capture_vector[2]] == '!'); if (ret != 0) { fprintf(stderr, "An error occurred while compiling the predicate for %s:\n", gct->name); fprintf(stderr, "Error at pos %d: %s\n", grok->pcre_erroffset, grok->pcre_errptr); return 1; } grok_log(grok, LOG_PREDICATE, "Compiled %sregex for '%s': '%s'", (gprt->negative_match) ? "negative match " : "", gct->name, gprt->pattern); /* strdup here and be lazy. Otherwise, we'll have to add a new member * to grok_capture which indicates which fields of it are set to * non-heap pointers. */ /* Break const... */ gct->predicate_func_name = strdup("grok_predicate_regexp"); gct->predicate_func_name_len = strlen("grok_predicate_regexp"); grok_capture_set_extra(grok, gct, gprt); grok_capture_add(grok, gct); return 0; } int grok_predicate_regexp(grok_t *grok, const grok_capture *gct, const char *subject, int start, int end) { grok_predicate_regexp_t *gprt; /* XXX: grok_capture extra */ int ret; gprt = *(grok_predicate_regexp_t **)(gct->extra.extra_val); ret = grok_execn(&gprt->gre, subject + start, end - start, NULL); grok_log(grok, LOG_PREDICATE, "RegexCompare: grok_execn returned %d", ret); /* negate the match if necessary */ if (gprt->negative_match) { switch(ret) { case GROK_OK: ret = GROK_ERROR_NOMATCH; break; case GROK_ERROR_NOMATCH: ret = GROK_OK; break; } } else { grok_log(grok, LOG_PREDICATE, "RegexCompare: PCRE error %d", ret); } grok_log(grok, LOG_PREDICATE, "RegexCompare: '%.*s' =~ /%s/ => %s", (end - start), subject + start, gprt->pattern, (ret < 0) ? "false" : "true"); /* grok_execn returns GROK_OK for success. */ /* pcre_callout expects: * 0 == ok, * >=1 for 'fail but try another match' */ switch(ret) { case GROK_OK: return 0; break; default: return 1; } } int grok_predicate_numcompare_init(grok_t *grok, grok_capture *gct, const char *args, int args_len) { grok_predicate_numcompare_t *gpnt; /* I know I said that args is a const char, but we need to modify the string * temporarily so that strtol and strtod don't overflow a buffer when they * don't see a terminator. */ char *tmp = (char *)args; int pos; char a = args[args_len]; grok_log(grok, LOG_PREDICATE, "Number compare predicate found: '%.*s'", args_len, args); gpnt = calloc(1, sizeof(grok_predicate_numcompare_t)); gpnt->op = strop(args, args_len); pos = OP_LEN(gpnt->op); tmp[args_len] = 0; /* force null byte so strtol doesn't run wild */ /* Optimize and use long type if the number is not a float (no period) */ if (strchr(tmp, '.') == NULL) { gpnt->type = LONG; gpnt->u.lvalue = strtol(tmp + pos, NULL, 0); grok_log(grok, LOG_PREDICATE, "Arg '%.*s' is non-floating, assuming long type", args_len - pos, tmp + pos); } else { gpnt->type = DOUBLE; gpnt->u.dvalue = strtod(tmp + pos, NULL); grok_log(grok, LOG_PREDICATE, "Arg '%.*s' looks like a double, assuming double", args_len - pos, tmp + pos); } /* Restore the original character at the end, which probably wasn't a null byte */ tmp[args_len] = a; gct->predicate_func_name = strdup("grok_predicate_numcompare"); gct->predicate_func_name_len = strlen("grok_predicate_numcompare"); grok_capture_set_extra(grok, gct, gpnt); grok_capture_add(grok, gct); return 0; } int grok_predicate_numcompare(grok_t *grok, const grok_capture *gct, const char *subject, int start, int end) { grok_predicate_numcompare_t *gpnt; int ret = 0; gpnt = *(grok_predicate_numcompare_t **)(gct->extra.extra_val); if (gpnt->type == DOUBLE) { double a = strtod(subject + start, NULL); double b = gpnt->u.dvalue; OP_RUN(gpnt->op, a - b, ret); grok_log(grok, LOG_PREDICATE, "NumCompare(double): %f vs %f == %s (%d)", a, b, (ret) ? "false" : "true", ret); } else { long a = strtol(subject + start, NULL, 0); long b = gpnt->u.lvalue; OP_RUN(gpnt->op, a - b, ret); grok_log(grok, LOG_PREDICATE, "NumCompare(long): %ld vs %ld == %s (%d)", a, b, (ret) ? "false" : "true", ret); } return ret; } int grok_predicate_strcompare_init(grok_t *grok, grok_capture *gct, const char *args, int args_len) { grok_predicate_strcompare_t *gpst; int pos; grok_log(grok, LOG_PREDICATE, "String compare predicate found: '%.*s'", args_len, args); /* XXX: ALLOC */ gpst = calloc(1, sizeof(grok_predicate_strcompare_t)); /* skip first character, which is '$' */ args++; args_len--; gpst->op = strop(args, args_len); pos = OP_LEN(gpst->op); pos += strspn(args + pos, " "); grok_log(grok, LOG_PREDICATE, "String compare rvalue: '%.*s'", args_len - pos, args + pos); /* XXX: ALLOC */ gpst->len = args_len - pos; gpst->value = malloc(gpst->len); memcpy(gpst->value, args + pos, gpst->len); gct->predicate_func_name = strdup("grok_predicate_strcompare"); gct->predicate_func_name_len = strlen("grok_predicate_strcompare"); grok_capture_set_extra(grok, gct, gpst); grok_capture_add(grok, gct); return 0; } int grok_predicate_strcompare(grok_t *grok, const grok_capture *gct, const char *subject, int start, int end) { grok_predicate_strcompare_t *gpst; int ret = 0; gpst = *(grok_predicate_strcompare_t **)(gct->extra.extra_val); OP_RUN(gpst->op, strncmp(subject + start, gpst->value, (end - start)), ret); grok_log(grok, LOG_PREDICATE, "Compare: '%.*s' vs '%.*s' == %s", (end - start), subject + start, gpst->len, gpst->value, (ret) ? "false" : "true"); /* grok predicates should return 0 for success, * but comparisons return 1 for success, so negate the comparison */ return ret; } int strop(const char * const args, int args_len) { if (args_len == 0) return -1; switch (args[0]) { case '<': if (args_len >= 2 && args[1] == '=') return OP_LE; else return OP_LT; break; case '>': if (args_len >= 2 && args[1] == '=') return OP_GE; else return OP_GT; break; case '=': if (args_len >= 2 && args[1] == '=') return OP_EQ; else { fprintf(stderr, "Invalid predicate: '%.*s'\n", args_len, args); return -1; } break; case '!': if (args_len >= 2 && args[1] == '=') return OP_NE; else { fprintf(stderr, "Invalid predicate: '%.*s'\n", args_len, args); return -1; } break; default: fprintf(stderr, "Invalid predicate: '%.*s'\n", args_len, args); } return -1; } grok-1.20110708.1/libgrok.so0000775000076400007640000023255311603476312013406 0ustar jlsjlsELF>A@@8@  x  $$PtdQtdGNUU=Ae4xE~ac `H @@*80!BT0EP@J "hX@ @IX P"DP" Xɑ cdfjklmnoprtvxz{|~g?x >`Zdua-f:[!]`MoULMasIXDyQ3Y!7|?1 / +[L'Q?<վ?ݑUla h8y  vp1U }Nc , % j & dn  3\:}<C: i"s |  " m  ^w} n . X C ;D ~ fN !  `^K4 z$[x _  К  T7  'p pB 8  0     P^   а  > `G  YD PFJ VFT \&E@  e! lO8 pT~ x  A PW P M|  ` ` G ` i `  E   0G"  )0 `{ ]  pF?(  0Y lf   PjL   pD- `T ^ ,  |yp  Ѐ h8  p  YP  > v l_   }I `  @ Fr6 0p ka a  f&=  P~ @Z^I } go  W  P`  L q  Z  0 Pdh P_x Z%i \ g   ~hT V  `; ] @BB  0Ya VZ(  Я~R @Y% vit  pYDt tq E 0b   N__gmon_start___fini__cxa_finalize_Jv_RegisterClasseslibdl.so.2libpcre.so.0libevent-2.0.so.5libtokyocabinet.so.9grok_capture_get_by_capture_numberdlopendlsym_grok_loggrok_initpcre_callouttctreenewg_grok_global_initializedpcre_compileg_pattern_reg_pattern_num_capturespcre_fullinfopcre_get_stringnumberg_cap_nameg_cap_patterng_cap_subnameg_cap_predicateg_cap_definitionstderrgrok_newmallocgrok_clonegrok_free_clonepcre_freetctreedelgrok_freegrok_compilentctreeclearcallocmemcpypcre_execpcre_get_substringgrok_pattern_findsnprintfstrlengrok_capture_addgrok_capture_get_by_id__ctype_b_locstrchrgrok_predicate_numcompare_initsubstr_replacepcre_free_substringstrndupgrok_predicate_regexp_init__isoc99_sscanfgrok_predicate_strcompare_init__assert_failgrok_compilegrok_errorgrok_execnfwritegrok_execgrok_versiongrok_capture_inittctreeputtctreegettclistnumtclistvaltclistremovetclistpushtclistnewgrok_capture_get_by_namegrok_capture_get_by_subnamegrok_capture_set_extra_grok_capture_encodereallocxdrmem_createxdr_grok_captureEMPTYSTRabort_grok_capture_decodegrok_capture_freegrok_capture_walk_inittctreeiterinitgrok_capture_walk_nexttctreeiternextgrok_capture_walk_endgrok_pattern_name_listgrok_pattern_add_pattern_parse_stringgrok_patterns_import_from_string__strdupgrok_patterns_import_from_filefopenfseekftellmemsetfread__errno_locationstrerrorfclosememmovestring_escape_like_cstring_escape_hexstring_escape_unicodestring_escapestring_unescapestring_ndupstring_ncountstring_countstrncpygrok_predicate_regexpgrok_predicate_numcomparestrtodstrtolgrok_predicate_strcomparestrncmpstropxdr_intxdr_stringxdr_bytesgrok_match_get_named_capturegrok_match_get_named_substringgrok_match_walk_initgrok_match_walk_nextgrok_match_walk_endgetpidvfprintffputcgrok_collection_initevent_init_collection_sigchldevent_setevent_addgrok_collection_check_end_stategrok_matchconfig_global_cleanupevent_base_loopexitwaitpidgettimeofdaygrok_input_eof_handlerevent_oncegrok_collection_addgrok_program_add_inputgrok_collection_loopevent_base_dispatch_program_file_buferrorbufferevent_disablegrok_matchconfig_close_program_process_startgrok_matchconfig_exec_nomatch_program_file_repair_event_program_file_read_real__xstatlseek_program_file_read_buffergrok_matchconfig_execbufferevent_get_inputevbuffer_readline_program_process_stdout_read_program_process_buferrorforkgetpgiddup2execlpgrok_program_add_input_processsafe_pipebufferevent_newbufferevent_enablegrok_program_add_input_filegrok_matchconfig_initstdouttclistdelgrok_matchconfig_start_shellfdopenperrorgrok_match_reaction_apply_filterstring_filter_lookupgrok_matchconfig_filter_reactionpatname2macroasprintffilter_jsonencodegrok_matchconfig_reactfflushfilter_shelldqescapefilter_shellescapegrok_discover_inittccmpint32tctreenew2tctreeputkeepgrok_discover_newgrok_discover_cleangrok_discover_freegrok_discoverlibc.so.6_edata__bss_startlibgrok.so.1GLIBC_2.2.5GLIBC_2.14GLIBC_2.3GLIBC_2.79 ui    ii  ii  ui  0 @ P ` p      !@ f q         r x  . j  B  n  ( 0 8 O@ iH P X e` h _     ~     d      z      ( 0 8 @ H P X ` h p x            t    ! p " # $ % &( u0 '8 (@ )H *P +X m` fh p ,x q  - . / 0 1 2 3  4  v  5 6 7    8 9( :0 8 ;@ H <P =X >` ?h @p x A  C D g |  E   c F }  G H y   I J K( L0 M8 @ H NP X l` hh p Px  Q R S  T { U V W X  Y Z [ \ ] ^  ` a s( b0 H  uH5 % @% h% h% h%ڻ h%һ h%ʻ h%» h% hp% h`% h P% h @% h 0% h % h % h%z h%r h%j h%b h%Z h%R h%J h%B h%: hp%2 h`%* hP%" h@% h0% h % h% h% h% h % h!% h"%ں h#%Һ h$%ʺ h%%º h&% h'p% h(`% h)P% h*@% h+0% h, % h-% h.%z h/%r h0%j h1%b h2%Z h3%R h4%J h5%B h6%: h7p%2 h8`%* h9P%" h:@% h;0% h< % h=% h>% h?% h@% hA% hB%ڹ hC%ҹ hD%ʹ hE%¹ hF% hGp% hH`% hIP% hJ@% hK0% hL % hM% hN%z hO%r hP%j hQ%b hR%Z hS%R hT%J hU%B hV%: hWp%2 hX`%* hYP%" hZ@% h[0% h\ % h]% h^% h_% h`% ha% hb%ڸ hc%Ҹ hd%ʸ he%¸ hf% hgp% hh`% hiP% hj@% hk0% hl % hm% hn%z ho%r hp%j hq%b hr%Z hs%R ht%J hu%B hv%: hwp%2 hx`%* hyP%" hz@% h{0% h| % h}% h~% h% h% h% h%ڷ h%ҷ h%ʷ h%· h% hp% h`% hP% h@% h0% h % h% h%z h%r h%j h%b h%Z h%R h%J hHHű HtHÐU=H HATSubH= t H=_ jHî L% H L)HHH9s DHH AH H9r޷ [A\]fH=p UHtH# Ht]H=V @]ÐH\$Hl$HLd$Ll$E1Lt$L|$HhLg0w(L HxPHtlS(HCH=1xHcҋ D|L$,HuPHHIAD$xHSEL$,HLAAD$xAu+DH\$8Hl$@Ld$HLl$PLt$XL|$`HhDAt$|D$L wHEPH yHxAyHD$EH$1HEPAt$|L PwH YyHwAtHD$EH$1.AD$xALMPAt$|HwH yHwA}H$1ff.ATH H@USHHHG(HHGHG0G8G`HGhGpGxG|iHC `HC@WHCHNHCPEHCXH t []A\HKpHShH=wE11H-j HHEHƮ 1HHH}H5vIHr H5uH}0Ha H}H5uH H}H5uH H}H5uH> []A\L%A HShH5IuI<$I<$H"vH5Ku1SpI<$H5Bu1HE fffff.SHHH[DH\$Hl$HHHHE HC ExCxE|Hl$C|H\$HÐSHH(Ht H H{HtHD$D<CHcHŋD$DHc$$$Ht$HHIHD$PHcщL$ CxL$  E1LD$<D$4IEfDAL,$E11E@D$H# H8cCxl$<AEE}D$8D)CxD$(H-* ALD$XH|$PLMJEHAlA+lCxOHt$XLD$hHL$`HcHH|$`D$@L% hHD$pHD$xA$HELDL$ GHH} AH|$PLD$pLHǪ ALD$xH|$PLL$4H0tH$1IH|$pD$4H}E0DH|$xEH}3HEHDL$ EA$HAlETCx*A)LcDLd$Pt$4HHHD$(5LH01 9}IHHD~ u)̓)H=osL:H=[sL#<$H=?slHHt$(LHHt$(HHD$PH$L$L$8L s$E1HLHHD$('DD$8H|$(L r$DHLCxH|$(AOL$E1$HLCxHD$hLL$`AOH|$(E1HL$CxH|$POHc$H9T$@D$4KH|$XHt>HD$X$HT$PEIHD$Ps|L pqH zuHNqAHD$$$1l$<ALH|$PHrHCHCxt1HD$Hs|H tDL$DHsAPH$1(HsHH9 HA|AT)?HcH|$PHcHHT$ WCxHT$ HD$`HT$hwHEH|$`HD$Xs|H QtHbpAAH$1q}@s|H tHpAA1BDHs H5DpLH81%HD$`s|H sLL$hHXpA)H$1CxHD$Ps|H sD$H4pA*H$1s@HD$Ps|L oH BsHoAHD$$$1ZDHD$Ps|L oH rHnA HD$$$1DHD$PH$L$HD$(2fD$4s|H rHpL$$AAXD$1fIcHD$Ps|DL$(H IrH"pA DT$ LcH$1dCxDT$ @LHD$Ps|A)H qH0nEA DH$1CxS@Ht$(LHfCxs|DL$4H qHoA\1fD|$8D$LLt$PE~}IAE1H IIA9~YC<.\DuC<&%uL tH$H$H|$PED$IID$Lt$PA9HLCxH"$MLsCHKpHShE11LHHC(HK81H{8{8<Hc]H{(H$1HC0H{(H$1H{(HL$x1 $$1Wf.$HQHEEHAH߃ED`4;$$HT$xH5kHD$DlH|H$1Cxys|D$H oHHlA1~IAt$H=kH,Ht$(LH|Ss|HD$H nHD$XHT$HlAAH$1HD$`FHChHHĨ[]A\A]A^A_Ës|L cj $HijH nLd$A1$Ld$PHD$Hw|AH =nHiABH$1p1ps|H nHjL4$AJ1=Lt$P)H nH5jH=>l-4A)DHD$@;H 5nH5jH=jffff.H\$Hl$HHHHHHHl$H\$HifHH\$Hl$HLd$Lt$ILl$HAH|$8H(HHD$ HC8HHt$ E1E1@D$HC0H$CxAE1HtHS0H]Le MRUH\$`Hl$hLd$pLl$xL$HĈf.Cxt!s|H lHakAx@1Hʞ H=kdH fD$HH ls|H/iL$$EAHD$1*E%A5AuCHO H=iH@AtAH H=2k+H@fDHѝ H=hHfDH\$Hl$HLd$HHIHlLHHHl$H$Ld$Hf.H*hÐF0F4HFHFFHF(F HF@HFPFXHF`fDAVAUATUHSHH Gx@tH}@Hs0AhHٺ)H}XHs4AhHٺHsH}HHL$ HIdLA~@E1f.AE9t(HT$DLS09P0uHT$DLLhHHsH}HLAwSHsHL$H}PrHILNA~8E1 fAE9t(HT$DLS09P0uHT$DLHLh?SHsLH}PAH []A\A]A^fC4LNH jw|H`iA@D$C0$1SI4Ifff.H(H@t$ HL$Ht$ `H(ff.UHHSHHH}HHL$ H)H1Ht HT$ 1H[]fff.UHHSHHLH}PHL$ HH1Ht HT$ 1H[]fff.H(HXt$ HL$Ht$ H(ff.SHHGx@HT$t&w|IH hH)hA@1wCXVHT$HC`HH1[fATIUHSHHHH$HGHD$HGH|$HD$HGHD$HG HD$ HG(HD$(HG0HD$0HG8HD$8HG@HD$@HGHHD$HHGPHD$PHGXHD$XHG`HD$`H|$H|$(H|$@H|$PH|$`!1]@HD$xH@8Ht H|$pH}HcHHEH|$p1ɉH|$pHOuH}HuHcHHE뻐HD$xH|$pP A$HĠ[]A\Hė H|$HHD$H H|$(HHD$ H H|$@HHD$(Hs H|$PHHD$@HX H|$`HHD$PH= HHD$`SHH0HHHPH0[f.SHHHtH H;8tH{HtHʖ H;8tH{(HtH H;8tH{@HtH H;8tH{PHtH| H;8tH{`HtHb H;8t [[fDH@GUSHHH@Ht$HHtaCx@u+H{@T$HL$ HHHH[]fDs|H 3eHdA@1Cx@ts|H eH}dA@1D1ÐUSHH_ HHf@T$ HHaHt$ HHuHH[]DH\$Hl$LLd$Ll$ILt$HHGxIHLw t4w|IHL$HSdH eLD$L$$A1AHDLL1H\$ Hl$(Ld$0Ll$8Lt$@HHDH\$Hl$HLd$Ll$HHH ILIL@CxHI$tQHMH5eHeHHT$HcHEƋs|MHL$H eH$A)1I$1HtH\$(Hl$0Ld$8Ll$@HHfCxuI$HEs|H dHwcMA+f.ATHMU1SHHH8@ t@ tH01@uo@HHH)HH4+HH1 fDH t tHHHH)H)JHI$[]A\fD@ tH48@t@ uffff.ATUHSHH GxHIHf.H< t @HCH{< tuLH 1[]A\f.HG f.Htf HXu H< t< t<#yLD$HL$HT$HLD$HL$HHT$H4$BfH믋w|H cHaAb1H\$Ld$HHl$Ll$ILt$L|$HHGxnH5bLHI1HTL\11HL=HuHIe1HHLHLH9ICxuQHB H5aHLH81H\$Hl$ Ld$(Ll$0Lt$8L|$@HHfK8s|H aH`H$MAP1ztDCxt8ys|H _aHp`H$MA?1/Lf.w|H &aH`MA:1gDLH1LLH H5`LHH81KH\$Hl$HLd$Ll$HLt$L|$HHD|$PIAELL$E AEDHADA4D)A;6HEIcMcD)J<1IcHcHH $E)H)H $Ht$LHH}AD#HEED#McB H\$Hl$ Ld$(Ll$0Lt$8L|$@HHfA41EA;6jH}A6Hc'HEN@H}‰fDLxAAH\$Hl$HLd$Ll$H(HAIHIDP@uAAAEAvE11=f.HI_EJcH@H5uAEEHHl$H\$Ld$Ll$ H(DH5^EfH5^H5^H5^H5^H5j^SHH5h^H@H1[f.H\$Hl$HLd$Ll$H(AHIWHIDP@uH5 ^AEAH1\H\$Hl$Ld$Ll$ H(ÐAW1AVAUATUHSHHHEHT$ HT$0HL$ DD$DL$HDŽ$8DŽ$<HT|$uHu D$HD$M~H31@H9D0t$D$E1D$,DHD$F<0EIcŀ|0L$,t/HADP@UD$E1D$( fAD9e~vHIcA9uD$(DŽ$<DŽ$8%D$D$D$<E~$8tvt9EAD9e@ID9t$HH[]A\A]A^A_D$L$0GDHT$ DHHD$<f.D$L$0EH$8H$<H$0A3fH$8H$<H$0AoD$<EfH$8H$<H$0A_D$<EfH|$D$ffff.AVIAUIATIUSHDE1fDHHA9$IEـ<\u(w;AHTHcIvLHcHD)HcfD1@Ext]HPHPۋu|EH UHDHRE)HD$IFA%HD$AFD$IcI1L$$Hl$0H\$(Ld$8Ll$@Lt$HL|$PHX1Ig3O17!f1ffffff.Ht/<<~.<=@tV<>u&~ 1=H@D$,HD$ D$,A9G5fAw$H GHEEAm1)J@L(Hh[]A\A]A^A_fE8,uH$A1vLKH hBH>A1?f.HD$PLK@L9Hǃ11gHǃHǃ@HEL$@H AH>AHD$HHD$HCH$1荮HSH AH$A1HT$H=MHHuHǃ2@H<H=HLH@HSH @H$A1HT$H=ͭAUATUHSHHLLLHL誩HH説HIuH[]A\A]AUATUHSHHLLLH蒭LJH貭HJHIuH[]A\A]HAt9HBH ?EAHD$B,H1=$1跬HfSHHǂ teljC,[H{81C0ݦu H[fDӧLKH "?H<$A16H[Ë{ 1{${Tu0H59DHKH=E11Hu{(覤H >H<1A讫t@8蹨H \>Hg=IA1pfffff.H\$Hl$HLd$Ll$HhH|$H$HD$jH|$ `H|$0VD$|$ 1L%^ H-n_ I؉CD$0{LHCD$C D$$C$D$4C(ΨHIDKTLEunt*LKH =H;AN1{H^ IHپ?H\$HHl$PLd$XLl$`HhfD{HIL1-Hpmff.H\$Hl$HLd$Ll$HHLd$HsL<SH{11&H$ۤ$D$H{HǃL扫DHHǃHǃH|$H5HaH z] H5;] I1҉HHWH\ LHHپH$H$L$L$HE8tE8辥uH= a FH5:>H=` 3H59>H=` Ф` H\$Hl$H` u@H=` $@UHSHHH~(HtH,Z H;8t zE8uLHC(1"H;HT$ .HƤH;.9|H;袞H[]uH8AA712HC(UHH=E=SHH(HvuHE8uHkY HHC(H([]DuH8A1轤H|$E8u@C0tk|$H5<lHHC(uE8HCuHt8AHLE13뉋|$訝|$1HKHH56<H5E11HH6X H=?8-HuH=<虤ѝ\8ՠuHc2耟HT$ II7AD$<Vx1۽эDA9~pHA<|uHcLHD$(H|$(#H*HT$ LHL$fffff.AWIE1L=a%AVAUATUSHHHT$PH$H$H|$xHL$X$1HD$xDŽ$DŽ$CD$0D$,HD$@H;AYLl$@D$0Ll$xD$4fH;H$HH;H$HHT$`LHHLCAt@HUEL &sEH {(MEAHT$H&$1ÉEjT$tD$pAA)CA1A9DOHcH=E 1LDZRCHcD$pDd$H 'sDL$0H&ALHD$HEH$1&T$4D$,DEND$,9$D$,`CHcT$,HT$@gsDL$0H b'H%1At趈C5HD$xsH 0'DL$0Hv%AuHD$$$1pCH sDL$0H &HG%AvHD$D$,$1(Hct$pH=DD 1DLCHcD$pDd$H w&sDL$0H%ALHD$HEH$1資^fDsHH$LH %&EH$A1yAT$tD$pAC3HT$8l$,H$l$HDD$,H|$xDD$LB$L H$肁L U$H$H$H|$xA$UHD$8L$HL "$T$,H$H|$xE1H$L H$CHD$xsH %DL$0H#AHD$$$1^CfDD;d$4CuvHT$`D$pDd$4HT$8T$tD$HT$LHcD$HHT$8H $sDL$0AIŋD$L+D$HLl$D$HH)$H$1΅{HEsH N$DL$0H#AH$1虅UH$H$H|$xL "$E11$H$H$H|$xL "$AHD$xHT$PH$HT$XHĘ[]A\A]A^A_ÐUHSH5 HH5 HuHHCHSHuH[]ÐHۆHlibgrok.soInternal compiler error: %s Regexp: %s Position: %d patternsubnamepredicatedefinition[%s:%d] start pcre_callout func %s/%.*s[%s:%d] end pcre_callout func %s/%.*s returned: %d[%s:%d] No such function '%s' in library '%s'(?!<\\)%\{(?(?[A-z0-9]+)(?::(?[A-z0-9_:]+))?)(?:=(?(?:(?P\{(?:(?>[^{}]+|(?>\\[{}])+)|(?P>curly2))*\})+|(?:[^{}]+|\\[{}])+)+))?\s*(?(?:(?P\{(?:(?>[^{}]+|(?>\\[{}])+)|(?P>curly))*\})|(?:[^{}]+|\\[{}])+)+)?\}grok_pcre_callout[%s:%d] Compiling '%.*s'start of expand[%s:%d] % 20s: %.*sstart of loop[%s:%d] Pattern length: %d[%s:%d] Pattern name: %.*s%04x[%s:%d] Predicate is: '%.*s'=~!~!<>=Invalid predicate: '%.*s' (?C1)replace with (?<>)add capture id[%s:%d] :: Inserted: %.*s[%s:%d] :: STR: %.*sgrokre.c[%s:%d] Fully expanded: %.*s[%s:%d] Studying capture %dgct != ((void *)0)[%s:%d] %.*s =~ /%s/ => %dpcre badoption pcre badmagic 1.20110630.1Too many replacements have occurred (500), infinite recursion?[%s:%d] Inline-definition found: %.*s => '%.*s'[%s:%d] Predicate found in '%.*s'[%s:%d] Adding predicate '%.*s' to capture %d[%s:%d] Failure to find capture id %dstrlen(full_pattern) == full_len[%s:%d] A failure occurred while compiling '%.*s'failure occurred while expanding pattern (too pattern recursion?)[%s:%d] Error: pcre re is null, meaning you haven't called grok_compile yetERROR: grok_execn called on an object that has not pattern compiled. Did you call grok_compile yet? Null error, one of the arguments was null? grok_compilengrok_pattern_expandgrok_pattern_expandgrok_capture_add_predicategrok_study_capture_mapgrok_study_capture_mapgrok_execn[%s:%d] Adding pattern '%s' as capture %d (pcrenum %d)[%s:%d] Setting extra value of 0x%x[%s:%d] walknext null[%s:%d] walknext ok %dgrok_capture_addgrok_capture_set_extragrok_capture_walk_next[%s:%d] Adding new pattern '%.*s' => '%.*s'[%s:%d] Searching for pattern '%s' (%s): %.*s[%s:%d] pattern '%s': not found[%s:%d] Importing patterns from string[%s:%d] Importing pattern file: '%s'[%s:%d] Unable to open '%s' for reading: %sFatal: calloc(1, %zd) failed while trying to read '%s'Expected %zd bytes, but read %zd.not foundgrok_pattern_addgrok_pattern_findgrok_patterns_import_from_filegrok_patterns_import_from_string\a\t\f\b\r\n\x%x\u00%02x   `P@0 negative match Args: %.*s pcre_exec:: %d Error at pos %d: %s falsetrue[%s:%d] Regexp predicate found: '%.*s'(?:\s*([!=])~\s*(.)([^\/]+|(?:\/)+)*)(?:\g{-2})Internal error (compiling predicate regexp op): %s An error occurred in grok_predicate_regexp_init. [%s:%d] Regexp predicate is '%s'An error occurred while compiling the predicate for %s: [%s:%d] Compiled %sregex for '%s': '%s'[%s:%d] RegexCompare: grok_execn returned %d[%s:%d] RegexCompare: PCRE error %d[%s:%d] RegexCompare: '%.*s' =~ /%s/ => %s[%s:%d] NumCompare(double): %f vs %f == %s (%d)[%s:%d] NumCompare(long): %ld vs %ld == %s (%d)[%s:%d] Compare: '%.*s' vs '%.*s' == %s[%s:%d] String compare predicate found: '%.*s'[%s:%d] String compare rvalue: '%.*s'[%s:%d] Number compare predicate found: '%.*s'[%s:%d] Arg '%.*s' is non-floating, assuming long type[%s:%d] Arg '%.*s' looks like a double, assuming doubleЪ0X8Щx(@Xpxgrok_predicate_regexp_initgrok_predicate_regexpgrok_predicate_numcompare_initgrok_predicate_numcomparegrok_predicate_strcompare_initgrok_predicate_strcompare[%s:%d] Fetching named capture: %s[%s:%d] Named capture '%s' not found[%s:%d] Capture '%s' == '%.*s' is %d -> %d of string '%s'[%s:%d] CaptureWalk '%.*s' is %d -> %d of string '%s'grok_match_get_named_substringgrok_match_walk_next[capture] [compile] [exec] [match] [patterns] [predicate] [program] [programinput] [reaction] [regexpand] [discover] [unknown] [%d] %*s%s[%s:%d] No more subprocesses are running. Breaking event loop now.[%s:%d] Found dead child pid %d[%s:%d] Pid %d is a matchconf shell[%s:%d] Pid %d is an exec process[%s:%d] Reaped child pid %d. Was process '%s'[%s:%d] Scheduling process restart in %d.%d seconds: %s[%s:%d] Not restarting process '%s'[%s:%d] SIGCHLD received[%s:%d] Adding %d inputs[%s:%d] Adding input %dgrok_collection_check_end_stategrok_collection_add_collection_sigchld[%s:%d] Buffer error %d on file %d: %s[%s:%d] EOF Error on file buffer for '%s'. Ignoring.[%s:%d] Not restarting process: %s[%s:%d] Not restarting file: %s[%s:%d] fatal write() to pipe fd %d of %d bytes: %s[%s:%d] Error: Bytes read < 0: %d[%s:%d] Error: strerror() says: %s[%s:%d] Failure stat(2)'ing file '%s': %s[%s:%d] Unrecoverable error (stat failed). Can't continue watching '%s'[%s:%d] File inode changed from %d to %d. Reopening file '%s'[%s:%d] File size shrank from %d to %d. Seeking to beginning of file '%s'[%s:%d] Repairing event with fd %d file '%s'. Will read again in %d.%d secs[%s:%d] Buffer error %d on process %d: %s[%s:%d] Starting process: '%s' (%d)[%s:%d] execlp(2) returned unexpectedly. Is 'sh' in your path?[%s:%d] Scheduling start of: %s[%s:%d] Failure stat(2)'ing file: %s[%s:%d] Failure open(2)'ing file for read '%s': %s[%s:%d] Adding input of type %s[%s:%d] Input still open: %d[%s:%d] %s: read %d bytes-c[%s:%d] execlp: %s[%s:%d] Adding file input: %s[%s:%d] strerror(%d): %s[%s:%d] dup2(%d, %d)fileprocessgrok_program_add_inputgrok_program_add_input_processgrok_program_add_input_file_program_process_buferror_program_process_start_program_file_buferror_program_file_repair_event_program_file_read_realgrok_input_eof_handlerPATTERN \%\{%{NAME}(?:%{FILTER})?}[%s:%d] Closing matchconf shell. fclose() = %d[%s:%d] matchconfig subshell set to 'stdout', directing reaction output to stdout instead of a process.[%s:%d] Starting matchconfig subshell: %s!!! Shouldn't have gotten here. execlp failed[%s:%d] Fatal: Unable to fdopen(%d) subshell pipe: %s[%s:%d] ApplyFilter code: %.*s[%s:%d] Can't apply filter '%.*s'; it's unknown.[%s:%d] Applying filter '%.*s' returned error %d for string '%.*s'.[%s:%d] Matched something: %.*s[%s:%d] Checking lookup table for '%.*s': %x{ "@LINE": { "start": 0, "end": %d, "value": "%.*s" } }, { "@MATCH": { "start": %d, "end": %d, "value": "%.*s" } }, { "%.*s": { "start": %ld, "end": %ld, "value": "%.*s" } }, [%s:%d] JSON intermediate: %.*s[%s:%d] Unhandled macro code: '%.*s' (%d)[%s:%d] Prefilter string: %.*s[%s:%d] Replacing %.*s with %.*s[%s:%d] Reaction set to none, skipping reaction.[%s:%d] Sending '%s' to subshell[%s:%d] flush enabled, calling fflush[%s:%d] Executing reaction for nomatch: %s[%s:%d] Trying match against pattern %d: %.*sNAME @?\w+(?::\w+)?(?:|\w+)*FILTER (?:\|\w+)+%{PATTERN}/bin/shstdouterrno saysw[%s:%d] Filter code: %.*s[%s:%d] Checking '%.*s'NAMEFILTER"@LINE": "%.*s", "@MATCH": "%.*s", "%.*s": "%.*s", { { "grok": [ ] }[%s:%d] Start/end: %d %d[%s:%d] Replacing %.*s[%s:%d] Filter: %.*sh 0grok_matchconfig_closegrok_matchconfig_execgrok_matchconfig_reactgrok_matchconfig_exec_nomatchgrok_matchconfig_filter_reactiongrok_matchconfig_start_shellgrok_match_reaction_apply_filter[fatal] pipe() failed0@P` @END@LINE@START@LENGTH@JSON@MATCH@JSON_COMPLEX[%s:%d] filter executing\`$"`^()&{}[]$*?!|;'"\\"/jsonencodeshellescapeshelldqescapefilter_jsonencodefilter_shellescapefilter_shelldqescape.\b.%\{[^}]+\}%%{%.*s}asprintf failed|succeeded[%s:%d] %d: Round starting[%s:%d] %d: String: %.*s[%s:%d] %d: Offset: % *s^[%s:%d] Test %s against %.*s[%s:%d] Matched %.*s\E\Q[%s:%d] %d: Pattern: %.*s[%s:%d] Including pattern: (complexity: %d) %.*s[%s:%d] %d: Matched %s, but match (%.*s) not complex enough.[%s:%d] %d: Matched %s, but match (%.*s) includes %{...} patterns.[%s:%d] %d: New best match: %s[%s:%d] %d: Matched %s on '%.*s'grok_discover_initgrok_discover;Z,de$gdghhhu4uTulwLx\xxz,zD,{l|{{ |~L~$~D \|L,L|D | $ HS@ G b N a G z E $\ `MLM J 4 8YBBA D(G0B(A ABB4 `YBBA D(G0B(A ABB ND I, BAG x AG v AA $< EMNp G $d |MQ9 I $ `N u M S E T MD  , ADG0f AAD , @APG@` AAF ,L Ю'MMNu C L| бW BDB B(D0A8J 8A0A(B BBBJ , MI m E w I p H < 0BEB A(A0v(A BBBd< YBEB B(D0A8D  8A0A(B BBBI ^8A0A(B BBB x)DN A $ GOD  D  p~MI g ~MI g,0MI $LGOD ^ H Lt8>BEB B(D0A8DpS 8A0A(B BBBG (;N lHATHALL$HBOB B(A0A8J8A0A(B BBB !9DQc  h8 ,oXh # p X*& o&oo|$o 888888899&969F9V9f9v999999999::&:6:F:V:f:v:::::::::;;&;6;F;V;f;v;;;;;;;;;<<&<6<F<V<f<v<<<<<<<<<==&=6=F=V=f=v=========>>&>6>F>V>f>v>>>>>>>>>??&?6?F?V?f?v?????????@@&@6@F@V@f@v@@@@@@@@@AA&A6AFAVAfAvAAAAAAAAf  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GCC: (GNU) 4.6.0 20110530 (Red Hat 4.6.0-9).symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.comment$.o8 hh@XX# Ho|$|$Uo&&pd&&nX*X* xh8h8s88p ~AA@Rm ] pD , Pdh @Z^ ~h   * E W l      YD  )   Fr    1 E @ N [ q {  PF     0p    PjL    К7  W X  Ve z  N  tq  `  а  ka  "  5 I  T f  P z   }I   pYD  }  Z   VF  go ( ; O | ]  r  p  `T       v   a  q:OZn |  0b  0Y. T7; x Z` f lft ` P_ `^K   0G" \0<P ee E ]  p  0  @B! &:Nc q Ѐ{ Z% v  ' 0Y2 \&G VZYk P` p f&t   pT'` .9 0Od `x @Y%x  Y.BV l_q  h8 `G  >call_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5886dtor_idx.5888frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxgrok.cgrok_pcre_callout__FUNCTION__.7033grokre.c__FUNCTION__.7273__FUNCTION__.7238__FUNCTION__.7303__FUNCTION__.7336__PRETTY_FUNCTION__.7288__PRETTY_FUNCTION__.7337__FUNCTION__.7255grok_capture.c__FUNCTION__.7011__FUNCTION__.7056__FUNCTION__.7086grok_pattern.c__FUNCTION__.7022__FUNCTION__.7031__FUNCTION__.7049__FUNCTION__.7040stringhelper.call_charspredicates.cregexp_predicate_op__FUNCTION__.7069__FUNCTION__.7085__FUNCTION__.7123__FUNCTION__.7219__FUNCTION__.7141__FUNCTION__.7101grok_capture_xdr.cgrok_match.c__FUNCTION__.7002__FUNCTION__.7017grok_logging.cgrok_program.c__FUNCTION__.9414__FUNCTION__.9435__FUNCTION__.9420grok_input.c__FUNCTION__.9506__FUNCTION__.9535__FUNCTION__.9526__FUNCTION__.9516__FUNCTION__.9478__FUNCTION__.9487__FUNCTION__.9450__FUNCTION__.9460__FUNCTION__.9436grok_matchconf.cmcgrok_initglobal_matchconfig_grok__FUNCTION__.9699__FUNCTION__.9813__FUNCTION__.9826__FUNCTION__.9755__FUNCTION__.9735__FUNCTION__.9742__FUNCTION__.9721libc_helper.cgrok_matchconf_macro.casso_values.1994wordlist.1999filters.c__FUNCTION__.7078__FUNCTION__.7071wordlist.7048grok_discover.cdgrok_init__FUNCTION__.7043global_discovery_req1_grokglobal_discovery_req2_grok__FUNCTION__.7074_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END___DYNAMICgrok_clonefilter_shelldqescapetctreeputkeepgrok_input_eof_handlerdup2@@GLIBC_2.2.5grok_capture_walk_endgrok_capture_addmemset@@GLIBC_2.2.5ftell@@GLIBC_2.2.5grok_collection_check_end_statesnprintf@@GLIBC_2.2.5xdr_grok_capturetclistdelfilter_shellescapepcre_free_substringevent_setstring_escapegrok_discover_newclose@@GLIBC_2.2.5string_countabort@@GLIBC_2.2.5g_pattern_retccmpint32xdr_int@@GLIBC_2.2.5pcre_freegrok_discover_cleanpcre_get_stringnumbergrok_pattern_add__gmon_start___Jv_RegisterClassesfseek@@GLIBC_2.2.5__isoc99_sscanf@@GLIBC_2.7_program_file_read_realexit@@GLIBC_2.2.5__assert_fail@@GLIBC_2.2.5grok_capture_walk_nextgrok_initbufferevent_enablegettimeofday@@GLIBC_2.2.5_finisubstr_replacegrok_capture_set_extragrok_match_get_named_substringtctreeiternextgrok_match_walk_initxdrmem_create@@GLIBC_2.2.5read@@GLIBC_2.2.5strncmp@@GLIBC_2.2.5malloc@@GLIBC_2.2.5fopen@@GLIBC_2.2.5tctreenew2execlp@@GLIBC_2.2.5grok_capture_get_by_subnamesafe_pipetctreenewgrok_free_clonegetpid@@GLIBC_2.2.5grok_match_walk_endxdr_bytes@@GLIBC_2.2.5event_base_dispatchEMPTYSTRtclistremovevfprintf@@GLIBC_2.2.5tctreegetgrok_new__strdup@@GLIBC_2.2.5pcre_execfputc@@GLIBC_2.2.5grok_predicate_regexpfree@@GLIBC_2.2.5strlen@@GLIBC_2.2.5string_unescapegrok_matchconfig_closegrok_matchconfig_start_shellgrok_matchconfig_filter_reactiongrok_version__xstat@@GLIBC_2.2.5_program_process_buferrorgrok_predicate_strcomparegrok_collection_loopfilter_jsonencodestring_ndup__ctype_b_loc@@GLIBC_2.3__cxa_finalize@@GLIBC_2.2.5tctreeputsprintf@@GLIBC_2.2.5fdopen@@GLIBC_2.2.5g_cap_namepipe@@GLIBC_2.2.5grok_collection_addtclistnewgrok_match_get_named_capturestrerror@@GLIBC_2.2.5grok_capture_get_by_namegrok_collection_init_grok_capture_encodegrok_execstring_escape_unicodepcre_fullinfolseek@@GLIBC_2.2.5strtol@@GLIBC_2.2.5g_cap_patterngrok_match_walk_nextstring_filter_lookupgrok_errorgrok_matchconfig_global_cleanupevent_addgetpgid@@GLIBC_2.2.5event_oncestropbufferevent_newgrok_patterns_import_from_stringpcre_compilegrok_predicate_numcomparememmove@@GLIBC_2.2.5event_initstrchr@@GLIBC_2.2.5waitpid@@GLIBC_2.2.5grok_program_add_input_filefread@@GLIBC_2.2.5patname2macropcre_calloutgrok_patterns_import_from_file__errno_location@@GLIBC_2.2.5tctreedel_program_file_read_buffergrok_compilegrok_predicate_numcompare_init__bss_startstring_ncountasprintf@@GLIBC_2.2.5grok_program_add_inputgrok_pattern_findgrok_pattern_name_listevbuffer_readlineg_grok_global_initializedgrok_matchconfig_exec_nomatchgrok_freegrok_capture_freetctreeclearevent_base_loopexitstring_escape_like_cgrok_program_add_input_processgrok_capture_walk_initg_pattern_num_capturesg_cap_definitionxdr_string@@GLIBC_2.2.5calloc@@GLIBC_2.2.5_program_file_repair_event_program_process_start_endfclose@@GLIBC_2.2.5dlopen@@GLIBC_2.2.5strncpy@@GLIBC_2.2.5grok_discover_grok_loggrok_capture_get_by_capture_numberdlsym@@GLIBC_2.2.5grok_predicate_strcompare_initgrok_matchconfig_reactstderr@@GLIBC_2.2.5grok_match_reaction_apply_filtergrok_matchconfig_exec_grok_capture_decodegrok_capture_initfork@@GLIBC_2.2.5_pattern_parse_stringbufferevent_get_inputfwrite@@GLIBC_2.2.5realloc@@GLIBC_2.2.5_program_file_buferrorstring_escape_hexperror@@GLIBC_2.2.5g_cap_predicategrok_execntctreeiterinit_edatatclistpushgrok_matchconfig_initfprintf@@GLIBC_2.2.5_collection_sigchldwrite@@GLIBC_2.2.5grok_capture_get_by_idpcre_get_substringbufferevent_disableg_cap_subname_program_process_stdout_readmemcpy@@GLIBC_2.14open@@GLIBC_2.2.5strndup@@GLIBC_2.2.5strtod@@GLIBC_2.2.5stdout@@GLIBC_2.2.5grok_predicate_regexp_initgrok_discover_freetclistvaltclistnum_initgrok_compilenfflush@@GLIBC_2.2.5grok_discover_initgrok-1.20110708.1/grok.c0000664000076400007640000001023311603247246012504 0ustar jlsjls#include "grok.h" #include static int grok_pcre_callout(pcre_callout_block *pcb); int g_grok_global_initialized = 0; pcre *g_pattern_re = NULL; int g_pattern_num_captures = 0; int g_cap_name = 0; int g_cap_pattern = 0; int g_cap_subname = 0; int g_cap_predicate = 0; int g_cap_definition = 0; grok_t *grok_new() { grok_t *grok; grok = malloc(sizeof(grok_t)); grok_init(grok); return grok; } void grok_init(grok_t *grok) { //int ret; /* set global pcre_callout for libpcre */ pcre_callout = grok_pcre_callout; grok->re = NULL; grok->pattern = NULL; grok->full_pattern = NULL; grok->pcre_capture_vector = NULL; grok->pcre_num_captures = 0; grok->max_capture_num = 0; grok->pcre_errptr = NULL; grok->pcre_erroffset = 0; grok->logmask = 0; grok->logdepth = 0; #ifndef GROK_TEST_NO_PATTERNS grok->patterns = tctreenew(); #endif /* GROK_TEST_NO_PATTERNS */ #ifndef GROK_TEST_NO_CAPTURE grok->captures_by_id = tctreenew(); grok->captures_by_name = tctreenew(); grok->captures_by_subname = tctreenew(); grok->captures_by_capture_number = tctreenew(); #endif /* GROK_TEST_NO_CAPTURE */ if (g_grok_global_initialized == 0) { /* do first initalization */ g_grok_global_initialized = 1; /* VALGRIND NOTE: Valgrind complains here, but this is a global variable. * Ignore valgrind here. */ g_pattern_re = pcre_compile(PATTERN_REGEX, 0, &grok->pcre_errptr, &grok->pcre_erroffset, NULL); if (g_pattern_re == NULL) { fprintf(stderr, "Internal compiler error: %s\n", grok->pcre_errptr); fprintf(stderr, "Regexp: %s\n", PATTERN_REGEX); fprintf(stderr, "Position: %d\n", grok->pcre_erroffset); } pcre_fullinfo(g_pattern_re, NULL, PCRE_INFO_CAPTURECOUNT, &g_pattern_num_captures); g_pattern_num_captures++; /* include the 0th group */ g_cap_name = pcre_get_stringnumber(g_pattern_re, "name"); g_cap_pattern = pcre_get_stringnumber(g_pattern_re, "pattern"); g_cap_subname = pcre_get_stringnumber(g_pattern_re, "subname"); g_cap_predicate = pcre_get_stringnumber(g_pattern_re, "predicate"); g_cap_definition = pcre_get_stringnumber(g_pattern_re, "definition"); } } void grok_clone(grok_t *dst, const grok_t *src) { grok_init(dst); dst->patterns = src->patterns; dst->logmask = src->logmask; dst->logdepth = src->logdepth + 1; } static int grok_pcre_callout(pcre_callout_block *pcb) { grok_t *grok = pcb->callout_data; const grok_capture *gct; gct = (grok_capture *)grok_capture_get_by_capture_number(grok, pcb->capture_last); /* TODO(sissel): handle case where gct is not found (== NULL) */ if (gct->predicate_func_name != NULL) { int (*predicate)(grok_t *, const grok_capture *, const char *, int, int); int start, end; void *handle; char *lib = gct->predicate_lib; start = pcb->offset_vector[ pcb->capture_last * 2 ]; end = pcb->offset_vector[ pcb->capture_last * 2 + 1]; if (lib != NULL && lib[0] == '\0') { lib = NULL; } /* Hack so if we are dlopen()'d we can still find ourselves * This is necessary for cases like Ruby FFI which only dlopen's us * and does not explicitly link/load us? */ #ifdef PLATFORM_Darwin lib = "libgrok.dylib"; #else lib = "libgrok.so"; #endif handle = dlopen(lib, RTLD_LAZY); predicate = dlsym(handle, gct->predicate_func_name); if (predicate != NULL) { grok_log(grok, LOG_EXEC, "start pcre_callout func %s/%.*s", (lib == NULL ? "grok" : lib), gct->predicate_func_name_len, gct->predicate_func_name); int ret; ret = predicate(grok, gct, pcb->subject, start, end); grok_log(grok, LOG_EXEC, "end pcre_callout func %s/%.*s returned: %d", (lib == NULL ? "grok" : lib), gct->predicate_func_name_len, gct->predicate_func_name, ret); return ret; } else { grok_log(grok, LOG_EXEC, "No such function '%s' in library '%s'", gct->predicate_func_name, lib); return 0; } } return 0; } /* int grok_pcre_callout */ grok-1.20110708.1/Makefile0000664000076400007640000001740211603476305013043 0ustar jlsjlsPACKAGE=grok PLATFORM=$(shell (uname -o || uname -s) | tr -d "/" 2> /dev/null) FLEX?=flex FORCE_FLEX?=0 ifeq ($(PLATFORM), FreeBSD) PREFIX?=/usr/local else PREFIX?=/usr endif ifeq ($(PLATFORM), Darwin) LIBSUFFIX=dylib else LIBSUFFIX=so endif # On FreeBSD, you may want to set GPERF=/usr/local/bin/gperf since # the base system gperf is too old. ifeq ($(PLATFORM), FreeBSD) GPERF?=/usr/local/bin/gperf else GPERF?=/usr/bin/gperf endif # For linux, we need libdl for dlopen() # On FreeBSD, comment this line out. ifeq ($(PLATFORM), GNULinux) LDFLAGS+=-ldl endif # ############################################# # You probably don't need to make changes below BASE?=. MAJOR=$(shell sh $(BASE)/version.sh --major) VERSION=$(shell sh $(BASE)/version.sh) #CFLAGS+=-g #LDFLAGS+=-g CFLAGS+=-pipe -fPIC -I. -O2 LDFLAGS+=-lpcre -levent -rdynamic -ltokyocabinet LIBSUFFIX=$(shell sh $(BASE)/platform.sh libsuffix) VERLIBSUFFIX=$(shell sh $(BASE)/platform.sh libsuffix $(MAJOR)) DYNLIBFLAG=$(shell sh $(BASE)/platform.sh dynlibflag) LIBNAMEFLAG=$(shell sh $(BASE)/platform.sh libnameflag $(MAJOR) $(INSTALLLIB)) # Sane includes CFLAGS+=-I/usr/local/include LDFLAGS+=-L/usr/local/lib # Platform so we know what to dlopen CFLAGS+=-DPLATFORM_$(PLATFORM) # Uncomment to totally disable logging features #CFLAGS+=-DNOLOGGING EXTRA_CFLAGS?= EXTRA_LDFLAGS?= CFLAGS+=$(EXTRA_CFLAGS) LDFLAGS+=$(EXTRA_LDFLAGS) ### End of user-servicable configuration CLEANGEN=filters.c grok_matchconf_macro.c *.yy.c *.tab.c *.tab.h CLEANOBJ=*.o *_xdr.[ch] CLEANBIN=main grokre grok conftest grok_program CLEANVER=VERSION grok_version.h grok.spec GROKOBJ=grok.o grokre.o grok_capture.o grok_pattern.o stringhelper.o \ predicates.o grok_capture_xdr.o grok_match.o grok_logging.o \ grok_program.o grok_input.o grok_matchconf.o libc_helper.o \ grok_matchconf_macro.o filters.o grok_discover.o GROKPROGOBJ=grok_input.o grok_program.o grok_matchconf.o $(GROKOBJ) GROKHEADER=grok.h grok_pattern.h grok_capture.h grok_capture_xdr.h \ grok_match.h grok_logging.h grok_discover.h # grok_version.h is generated by make. GROKHEADER+=grok_version.h .PHONY: all all: grok discogrok libgrok.$(LIBSUFFIX) libgrok.$(VERLIBSUFFIX) .PHONY: package create-package test-package update-version package: $(MAKE) $(MAKEFLAGS) create-package $(MAKE) $(MAKEFLAGS) test-package install: libgrok.$(LIBSUFFIX) grok discogrok $(GROKHEADER) install -d $(DESTDIR)$(PREFIX)/bin install -d $(DESTDIR)$(PREFIX)/lib install -d $(DESTDIR)$(PREFIX)/include install -m 755 grok $(DESTDIR)$(PREFIX)/bin install -m 755 discogrok $(DESTDIR)$(PREFIX)/bin install -m 644 libgrok.$(LIBSUFFIX) $(DESTDIR)$(PREFIX)/lib for header in $(GROKHEADER); do \ install -m 644 $$header $(DESTDIR)$(PREFIX)/include; \ done install -d $(DESTDIR)$(PREFIX)/share/grok install -d $(DESTDIR)$(PREFIX)/share/grok/patterns install patterns/base $(DESTDIR)$(PREFIX)/share/grok/patterns/ uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/grok rm -f $(DESTDIR)$(PREFIX)/bin/discogrok rm -f $(DESTDIR)$(PREFIX)/lib/libgrok.$(LIBSUFFIX) for header in $(GROKHEADER); do \ rm -f $(DESTDIR)$(PREFIX)/include/$$header; \ done rm -f $(DESTDIR)$(PREFIX)/share/grok/patterns/* pre-create-package: rm -f VERSION grok_version.h create-package: pre-create-package $(MAKE) VERSION grok_version.h grok.spec PACKAGE=$(PACKAGE) sh package.sh $(VERSION) test-package: PKGVER=$(PACKAGE)-$(VERSION); \ tar -C /tmp -zxf $${PKGVER}.tar.gz; \ echo "Running C tests..." && $(MAKE) -C /tmp/$${PKGVER}/test test-c .PHONY: clean clean: cleanobj cleanbin # reallyreallyclean also purges generated files # we don't clean generated files in 'clean' target # because some systems don't have the tools to regenerate # the data, such as FreeBSD which has the wrong flavor # of flex (not gnu flex) .PHONY: reallyreallyclean reallyreallyclean: reallyclean cleangen .PHONY: reallyclean reallyclean: clean cleanver .PHONY: cleanobj cleanobj: rm -f $(CLEANOBJ) .PHONY: cleanbin cleanbin: rm -f $(CLEANBIN) .PHONY: cleangen cleangen: rm -f $(CLEANGEN) .PHONY: cleanver cleanver: rm -f $(CLEANVER) #.PHONY: test #test: #$(MAKE) -C test test # Binary creation grok: LDFLAGS+=-levent grok: $(GROKOBJ) conf.tab.o conf.yy.o main.o grok_config.o $(CC) $(LDFLAGS) $^ -o $@ discogrok: $(GROKOBJ) discover_main.o $(CC) $(LDFLAGS) $^ -o $@ libgrok.$(LIBSUFFIX): libgrok.$(LIBSUFFIX): $(GROKOBJ) $(CC) $(LDFLAGS) -fPIC $(DYNLIBFLAG) $(LIBNAMEFLAG) $^ -o $@ libgrok.$(VERLIBSUFFIX): libgrok.$(LIBSUFFIX); ln -s $< $@ # File dependencies # generated with: # for i in *.c; do grep '#include "' $i | fex '"2' | xargs | sed -e "s/^/$i: /"; done grok.h: grok_version.h grok.c: grok.h grok_capture.c: grok.h grok_capture.h grok_capture_xdr.h grok_capture_xdr.c: grok_capture.h grok_config.c: grok_input.h grok_config.h grok_matchconf.h grok_logging.h grok_input.c: grok.h grok_program.h grok_input.h grok_matchconf.h grok_logging.h libc_helper.h grok_logging.c: grok.h grok_match.c: grok.h grok_matchconf.c: grok.h grok_matchconf.h grok_matchconf_macro.h grok_logging.h libc_helper.h filters.h stringhelper.h grok_pattern.c: grok.h grok_pattern.h grok_program.c: grok.h grok_program.h grok_input.h grok_matchconf.h grokre.c: grok.h predicates.h stringhelper.h grok_version.h libc_helper.c: libc_helper.h main.c: grok.h grok_program.h grok_config.h conf.tab.h predicates.c: grok_logging.h predicates.h stringhelper.c: stringhelper.h filters.h: grok.h grok.h: grok_logging.h grok_pattern.h grok_capture.h grok_match.h grok_capture.h: grok_capture_xdr.h grok_config.h: grok_program.h grok_input.h: grok_program.h grok_match.h: grok_capture_xdr.h grok_matchconf.h: grok.h grok_input.h grok_program.h predicates.h: grok.h # Output generation grok_capture_xdr.o: grok_capture_xdr.c grok_capture_xdr.h grok_capture_xdr.c: grok_capture.x [ -f $@ ] && rm $@ || true rpcgen -c $< -o $@ grok_capture_xdr.h: grok_capture.x [ -f $@ ] && rm $@ || true rpcgen -h $< -o $@ %.c: %.gperf @if $(GPERF) --version | head -1 | egrep -v '3\.[0-9]+\.[0-9]+' ; then \ echo "We require gperf version >= 3.0.3" ; \ exit 1; \ fi $(GPERF) $< > $@ conf.tab.c conf.tab.h: conf.y bison -d $< conf.yy.c: conf.lex conf.tab.h @if $(FLEX) --version | grep '^flex version' ; then \ if [ "$(FORCE_FLEX)" -eq 1 ] ; then \ echo "Bad version of flex detected, but FORCE_FLEX is set, trying anyway."; \ exit 0; \ fi; \ echo "Fatal - cannot build"; \ echo "You need GNU flex. You seem to have BSD flex?"; \ strings `which flex` | grep Regents; \ echo "If you want to try your flex, anyway, set FORCE_FLEX=1"; \ exit 1; \ fi $(FLEX) -o $@ $< .c.o: $(CC) -c $(CFLAGS) $< -o $@ %.1: %.pod pod2man -c "" -r "" $< $@ grok_version.h: sh $(BASE)/version.sh --header > $@ VERSION: sh $(BASE)/version.sh --shell > $@ grok.spec: grok.spec.template VERSION . ./VERSION; sed -e "s/^Version: .*/Version: $(VERSION)/" grok.spec.template > grok.spec .PHONY: docs docs: doxygen .PHONY: package-debian package-debian: debian CFLAGS="$(CFLAGS)" debuild -uc -us package-debian-clean: rm -r debian || true debian: dh_make -s -n -c bsd -e $$USER -p grok_$(VERSION) < /dev/null sed -i -e "s/Build-Depends:.*/&, bison, ctags, flex, gperf, libevent-dev, libpcre3-dev, libtokyocabinet-dev/" debian/control sed -i -e "s/Depends:.*/&, libevent-1.4-2 (>= 1.3), libtokyocabinet8 (>= 1.4.9), libpcre3 (>= 7.6)/" debian/control sed -i -e "s/^Description:.*/Description: A powerful pattern-matching and reacting tool./" debian/control sed -i -e "/^Description/,$$ { /^ *$$/d }" debian/control echo '#!/bin/sh' > debian/postinst echo '[ "$$1" = "configure" ] && ldconfig' >> debian/postinst echo 'exit 0' >> debian/postinst echo '#!/bin/sh' > debian/postrm echo '[ "$$1" = "remove" ] && ldconfig' >> debian/postrm echo 'exit 0' >> debian/postrm chmod 755 debian/postinst debian/postrm grok-1.20110708.1/conf.y0000664000076400007640000001004411576274273012526 0ustar jlsjls%{ #include #include #include "conf.tab.h" #include "grok_config.h" #include "grok_input.h" #include "grok_matchconf.h" int yylineno; void yyerror (YYLTYPE *loc, struct config *conf, char const *s) { fprintf (stderr, "Syntax error: %s\n", s); } #define DEBUGMASK(val) ((val > 0) ? ~0 : 0) %} %union{ char *str; int num; } %token QUOTEDSTRING %token INTEGER %token CONF_DEBUG "debug" %token PROGRAM "program" %token PROG_FILE "file" %token PROG_EXEC "exec" %token PROG_MATCH "match" %token PROG_NOMATCH "no-match" %token PROG_LOADPATTERNS "load-patterns" %token FILE_FOLLOW "follow" %token EXEC_RESTARTONEXIT "restart-on-exit" %token EXEC_MINRESTARTDELAY "minimum-restart-delay" %token EXEC_RUNINTERVAL "run-interval" %token EXEC_READSTDERR "read-stderr" %token MATCH_PATTERN "pattern" %token MATCH_REACTION "reaction" %token MATCH_SHELL "shell" %token MATCH_FLUSH "flush" %token MATCH_BREAK_IF_MATCH "break-if-match" %token SHELL_STDOUT "stdout" %token LITERAL_NONE "none" %token '{' '}' ';' ':' '\n' %pure-parser %parse-param {struct config *conf} %error-verbose %locations %start config %% config: config root | root | error { /* Errors are unrecoverable, so let's return nonzero from the parser */ return 1; } root: root_program | "debug" ':' INTEGER { conf->logmask = DEBUGMASK($3); } root_program: PROGRAM '{' { conf_new_program(conf); } program_block '}' program_block: program_block program_block_statement | program_block_statement program_block_statement: program_file | program_exec | program_match | program_nomatch | program_load_patterns | "debug" ':' INTEGER { CURPROGRAM.logmask = DEBUGMASK($3); } program_load_patterns: "load-patterns" ':' QUOTEDSTRING { conf_new_patternfile(conf); CURPATTERNFILE = $3; } program_file: "file" QUOTEDSTRING { conf_new_input_file(conf, $2); } program_file_optional_block program_file_optional_block: /*empty*/ | '{' file_block '}' program_exec: "exec" QUOTEDSTRING { conf_new_input_process(conf, $2); } program_exec_optional_block program_exec_optional_block: /* empty */ | '{' exec_block '}' program_match: "match" '{' { conf_new_matchconf(conf); } match_block '}' program_nomatch: "no-match" '{' { conf_new_matchconf(conf); CURMATCH.is_nomatch = 1; } match_block '}' file_block: file_block file_block_statement | file_block_statement file_block_statement: /*empty*/ | "follow" ':' INTEGER { CURINPUT.source.file.follow = $3; } | "debug" ':' INTEGER { CURINPUT.logmask = DEBUGMASK($3); } exec_block: exec_block exec_block_statement | exec_block_statement exec_block_statement: /* empty */ | "restart-on-exit" ':' INTEGER { CURINPUT.source.process.restart_on_death = $3; } | "minimum-restart-delay" ':' INTEGER { CURINPUT.source.process.min_restart_delay = $3; } | "run-interval" ':' INTEGER { CURINPUT.source.process.run_interval = $3; } | "read-stderr" ':' INTEGER { CURINPUT.source.process.read_stderr = $3; } | "debug" ':' INTEGER { CURINPUT.logmask = DEBUGMASK($3); } match_block: match_block match_block_statement | match_block_statement match_block_statement: /* empty */ | "pattern" ':' QUOTEDSTRING { conf_new_match_pattern(conf, $3) } | "reaction" ':' QUOTEDSTRING { CURMATCH.reaction = $3; } | "reaction" ':' "none" { CURMATCH.no_reaction = 1; } | "shell" ':' QUOTEDSTRING { CURMATCH.shell = $3; } | "shell" ':' "stdout" { CURMATCH.shell = "stdout"; } | "flush" ':' INTEGER { CURMATCH.flush = $3; } | "break-if-match" ':' INTEGER { CURMATCH.break_if_match = $3; } | "debug" ':' INTEGER { conf_match_set_debug(conf, DEBUGMASK($3)); } grok-1.20110708.1/libc_helper.c0000664000076400007640000000031111576274273014017 0ustar jlsjls#include #include #include #include "libc_helper.h" void safe_pipe(int pipefd[2]) { if (pipe(pipefd) == -1) { perror("[fatal] pipe() failed"); exit(1); } } grok-1.20110708.1/samples/0000775000076400007640000000000011576274273013054 5ustar jlsjlsgrok-1.20110708.1/samples/numberpredicate.grok0000664000076400007640000000021311576274273017105 0ustar jlsjlsprogram { load-patterns: "patterns/base" exec "seq 25" match { pattern: "%{NUMBER > 20}" reaction: "Found: %{NUMBER}" } } grok-1.20110708.1/samples/filter-example.grok0000664000076400007640000000056511576274273016664 0ustar jlsjlsprogram { load-patterns: "patterns/base" exec "echo '$something \"testing\"'" match { pattern: ".*" reaction: "Shell escaped: %{@LINE|shellescape}" } match { pattern: ".*" reaction: "json: { myvalue: \"%{@LINE|jsonencode}\" }" } match { pattern: ".*" reaction: "echo %{@LINE|shellescape}" shell: "/bin/sh" flush: yes } } grok-1.20110708.1/samples/test.grok0000664000076400007640000000633411576274273014725 0ustar jlsjls# Set 'debug: 1' globally to enable full debugging everywhere. # valid 'debug' values are: yes, no, true, false, 1, 0. # The values all enable or disable debugging at the current scope # Debugging values are passed down scope global -> program -> (file, match, etc) #debug: no #program { # 'debug' is valid here #debug: no # Load patterns from a file. #load-patterns: "patterns/base" # Read a file once #file "/tmp/messages" { #follow: no # 'debug' is valid here #debug: no #} # Follow a file (if the file is log-rotated, truncated, or appended) #file "/var/log/messages" { #follow: yes #} #match { # The 'debug' setting is valid almost anywhere and is scoped sanely. #debug: no # Example of a pattern #pattern: "%{SYSLOGBASE} .*authentication error for (illegal user)? %{WORD} from %{IPORHOST}" # You can only have #reaction: "matchfound: %{@LINE}" # Valid shell values are 'stdout' or a command string to run. # Any reactions generated are written to this shell. #shell: stdout # Should writes to the 'shell' be flushed on write? # Default is no #flush: no #} #} # Another program. You can have multiple in a single config file. #program { #load-patterns: "patterns/base" # Run 'uptime' and every 15 seconds ... #exec "uptime" { #run-interval 15 #} # ... and grab the 1-min load average # Match the first number after 'load average: ' and print it to stdout #match { #pattern: "load average: %{NUMBER}" #reaction: "%{NUMBER%} #shell: "stdout" #flush: yes #} #} # Another program example #program { #load-patterns: "patterns/base" # Ping www.google.com every minute #exec "ping -c 1 -W 3 www.google.com 2> /dev/null" { #run-interval: 60 #} # Output all the data we have in JSON format on a successful ping. #match { #pattern: "time=%{NUMBER:time}" #reaction: "%{@JSON}" #shell: "stdout" #flush: yes #} # "no-match" is executed if for every run of 'ping' no output is matched. #no-match { #reaction: "\"ERROR: Ping failed\"" #shell: "stdout" #flush: yes #} #} # Another example program #program { #load-patterns: "patterns/base" # Run vmstat -s every 60 seconds #exec "vmstat -s" { #run-interval: 60 #} # For every line of output that matches, run gmetric to advertise the value # (This is a ganglia monitoring utility) #match { #pattern: "%{NUMBER} %{DATA}$" # Pipe 'DATA' through the shelldqescape function so it can be safely # represented in doublequotes when passed to /bin/sh. This escapes # things like $ and " #reaction: "gmetric -n \"%{DATA|shelldqescape}\" -v %{NUMBER} -t uint32" #} #} #program { #load-patterns: "patterns/base" #file "/b/logs/auth.log.scorn" #match { #pattern: "%{SYSLOGBASE} Accepted %{NOTSPACE:method} for %{DATA:user} from %{IPORHOST:client} port %{INT:port}" #reaction: "%{@JSON}" #shell: "stdout" #} # #match { #pattern: "%{SYSLOGBASE} Illegal user %{DATA:user} from %{IPORHOST:client}" #reaction: "%{@JSON}" #shell: "stdout" #} # #match { #pattern: "%{SYSLOGBASE} Failed \S+ for %{DATA:user} from %{IPORHOST:client}" #reaction: "%{@JSON}" #shell: "stdout" #} #} grok-1.20110708.1/samples/strpredicate.grok0000664000076400007640000000023211576274273016426 0ustar jlsjlsprogram { load-patterns: "patterns/base" exec "echo hello; echo world" match { pattern: "%{WORD $> test}" reaction: "Found: %{WORD}" } } grok-1.20110708.1/samples/errorlogcheck.grok0000664000076400007640000000051211576274273016567 0ustar jlsjlsprogram { exec "since /var/log/messages" # Ignore certain messages match { pattern: "this is not an error" # Silence the output and ensure no further matches are attempted. reaction: none # no output break-if-match: yes # don't continue to the next match } match { pattern: "error" } } grok-1.20110708.1/samples/ifconfig.grok0000664000076400007640000000020011576274273015514 0ustar jlsjlsprogram { load-patterns: "patterns/base" exec "ifconfig" match { pattern: "%{IP}" reaction: "Found: %{IP}" } } grok-1.20110708.1/samples/execrestart.grok0000664000076400007640000000017011576274273016267 0ustar jlsjlsprogram { exec "date" { restart-on-exit: true minimum-restart-delay: 5 } match { pattern: ".*" } } grok-1.20110708.1/samples/number-predicate2.grok0000664000076400007640000000023311576274273017246 0ustar jlsjlsprogram { load-patterns: "patterns/base" exec "echo 3 5 19 33 10" match { pattern: "%{NUMBER > 20}" reaction: "Got number: %{NUMBER}" } } grok-1.20110708.1/samples/ip-predicate.grok0000664000076400007640000000020011576274273016276 0ustar jlsjlsprogram { load-patterns: "patterns/base" exec "ifconfig" match { pattern: "%{IP}" reaction: "Found: %{IP}" } } grok-1.20110708.1/conf.tab.h0000664000076400007640000000563211603237365013251 0ustar jlsjls/* A Bison parser, made by GNU Bison 2.4.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { QUOTEDSTRING = 258, INTEGER = 259, CONF_DEBUG = 260, PROGRAM = 261, PROG_FILE = 262, PROG_EXEC = 263, PROG_MATCH = 264, PROG_NOMATCH = 265, PROG_LOADPATTERNS = 266, FILE_FOLLOW = 267, EXEC_RESTARTONEXIT = 268, EXEC_MINRESTARTDELAY = 269, EXEC_RUNINTERVAL = 270, EXEC_READSTDERR = 271, MATCH_PATTERN = 272, MATCH_REACTION = 273, MATCH_SHELL = 274, MATCH_FLUSH = 275, MATCH_BREAK_IF_MATCH = 276, SHELL_STDOUT = 277, LITERAL_NONE = 278 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 1685 of yacc.c */ #line 18 "conf.y" char *str; int num; /* Line 1685 of yacc.c */ #line 81 "conf.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif grok-1.20110708.1/main.c0000664000076400007640000000367311576274273012511 0ustar jlsjls#define _GNU_SOURCE #include "grok.h" #include "grok_program.h" #include "grok_config.h" #include "conf.tab.h" #include #include extern char *optarg; /* from unistd.h, getopt */ extern FILE *yyin; /* from conf.lex (flex provides this) */ static char *g_prog; void usage() { printf("Usage: %s [-d] <-f config_file>\n", g_prog); printf(" -d (optional) Daemonize/background\n"); printf(" -f file (required) Use specified config file\n"); } int main(int argc, char **argv) { struct config c; grok_collection_t *gcol = NULL; int i = 0; int opt = 0; int want_daemon = 0; char *config_file = NULL; struct option options[] = { { "daemon", no_argument, NULL, 'd' }, { "config", required_argument, NULL, 'f' }, { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'v' }, { 0, 0, 0, 0 } }; g_prog = argv[0]; while ((opt = getopt_long_only(argc, argv, "vhdf:", options, &optind)) != -1) { switch (opt) { case 'd': want_daemon = 1; break; case 'f': config_file = strdup(optarg); break; case 'h': usage(); return 0; case 'v': printf("grok %s\n", GROK_VERSION); return 0; default: usage(); return 1; } } if (config_file == NULL) { fprintf(stderr, "No config file given.\n"); usage(); return 1; } yyin = fopen(config_file, "r"); free(config_file); conf_init(&c); i = yyparse(&c); if (i != 0) { fprintf(stderr, "Parsing error in config file\n"); return 1; } /* We want to background after parsing the config so we can check for syntax * errors */ if (want_daemon && (daemon(0, 0) != 0)) { perror("Error while daemonizing"); } gcol = grok_collection_init(); for (i = 0; i < c.nprograms; i++) { grok_collection_add(gcol, &(c.programs[i])); } grok_collection_loop(gcol); return gcol->exit_code; } grok-1.20110708.1/version.sh0000775000076400007640000000123111576274273013431 0ustar jlsjls#!/bin/sh if [ -r "VERSION" ] ; then . ./VERSION fi if [ -z "$MAJOR" -o -z "$RELEASE" -o -z "$REVISION" ] ; then MAJOR="1" RELEASE="$(date +%Y%m%d)" #REVISION=$([ -d .svn ] && svn info . | awk '/Revision:/ {print $2}') REVISION=1 : ${REVISION=:0} fi VERSION="$MAJOR.$RELEASE.$REVISION" case $1 in --major) echo "$MAJOR" ;; --header) echo "#ifndef _VERSION_H_" echo "#define _VERSION_H_" echo "static const char *GROK_VERSION = \"$VERSION\";" echo "#endif /* ifndef _VERSION_H */" ;; --shell) echo "MAJOR=\"$MAJOR\"" echo "RELEASE=\"$RELEASE\"" echo "REVISION=\"$REVISION\"" ;; *) echo "$VERSION" ;; esac grok-1.20110708.1/libc_helper.h0000664000076400007640000000015711576274273014034 0ustar jlsjls#ifndef _LIBC_HELPER_ #define _LIBC_HELPER_ extern void safe_pipe(int pipefd[2]); #endif /* _LIBC_HELPER_ */ grok-1.20110708.1/grok.diff0000664000076400007640000001156211603473377013206 0ustar jlsjlsdiff --git a/Makefile b/Makefile index a0ebd78..a072e6d 100644 --- a/Makefile +++ b/Makefile @@ -162,14 +162,14 @@ cleanver: # Binary creation grok: LDFLAGS+=-levent grok: $(GROKOBJ) conf.tab.o conf.yy.o main.o grok_config.o - gcc $(LDFLAGS) $^ -o $@ + $(CC) $(LDFLAGS) $^ -o $@ discogrok: $(GROKOBJ) discover_main.o - gcc $(LDFLAGS) $^ -o $@ + $(CC) $(LDFLAGS) $^ -o $@ libgrok.$(LIBSUFFIX): libgrok.$(LIBSUFFIX): $(GROKOBJ) - gcc $(LDFLAGS) -fPIC $(DYNLIBFLAG) $(LIBNAMEFLAG) $^ -o $@ + $(CC) $(LDFLAGS) -fPIC $(DYNLIBFLAG) $(LIBNAMEFLAG) $^ -o $@ libgrok.$(VERLIBSUFFIX): libgrok.$(LIBSUFFIX); ln -s $< $@ diff --git a/grok_capture.c b/grok_capture.c index 47c2678..70171a7 100644 --- a/grok_capture.c +++ b/grok_capture.c @@ -96,7 +96,7 @@ const grok_capture *grok_capture_get_by_id(grok_t *grok, int id) { return gct; } -const grok_capture *grok_capture_get_by_name(grok_t *grok, const char *name) { +const grok_capture *grok_capture_get_by_name(const grok_t *grok, const char *name) { int unused_size; const grok_capture *gct; const TCLIST *by_name_list; @@ -111,7 +111,7 @@ const grok_capture *grok_capture_get_by_name(grok_t *grok, const char *name) { return gct; } -const grok_capture *grok_capture_get_by_subname(grok_t *grok, +const grok_capture *grok_capture_get_by_subname(const grok_t *grok, const char *subname) { int unused_size; const grok_capture *gct; @@ -213,11 +213,11 @@ void grok_capture_free(grok_capture *gct) { } /* this function will walk the captures_by_id table */ -void grok_capture_walk_init(grok_t *grok) { +void grok_capture_walk_init(const grok_t *grok) { tctreeiterinit(grok->captures_by_id); } -const grok_capture *grok_capture_walk_next(grok_t *grok) { +const grok_capture *grok_capture_walk_next(const grok_t *grok) { int id_size; int gct_size; int *id; diff --git a/grok_capture.h b/grok_capture.h index 759903c..e3c3617 100644 --- a/grok_capture.h +++ b/grok_capture.h @@ -10,14 +10,14 @@ void grok_capture_free(grok_capture *gct); void grok_capture_add(grok_t *grok, const grok_capture *gct); const grok_capture *grok_capture_get_by_id(grok_t *grok, int id); -const grok_capture *grok_capture_get_by_name(grok_t *grok, const char *name); -const grok_capture *grok_capture_get_by_subname(grok_t *grok, +const grok_capture *grok_capture_get_by_name(const grok_t *grok, const char *name); +const grok_capture *grok_capture_get_by_subname(const grok_t *grok, const char *subname); const grok_capture *grok_capture_get_by_capture_number(grok_t *grok, int capture_number); -void grok_capture_walk_init(grok_t *grok); -const grok_capture *grok_capture_walk_next(grok_t *grok); +void grok_capture_walk_init(const grok_t *grok); +const grok_capture *grok_capture_walk_next(const grok_t *grok); int grok_capture_set_extra(grok_t *grok, grok_capture *gct, void *extra); void _grok_capture_encode(grok_capture *gct, char **data_ret, int *size_ret); diff --git a/grok_logging.c b/grok_logging.c index bbbba04..64f0bd0 100644 --- a/grok_logging.c +++ b/grok_logging.c @@ -1,5 +1,7 @@ #include #include +#include +#include #include "grok.h" #ifndef NOLOGGING diff --git a/grok_match.c b/grok_match.c index ab7727c..2af0937 100644 --- a/grok_match.c +++ b/grok_match.c @@ -37,7 +37,7 @@ int grok_match_get_named_substring(const grok_match_t *gm, const char *name, } void grok_match_walk_init(const grok_match_t *gm) { - grok_t *grok = gm->grok; + const grok_t *grok = gm->grok; grok_capture_walk_init(grok); } diff --git a/grok_matchconf.c b/grok_matchconf.c index 7293961..d5553af 100644 --- a/grok_matchconf.c +++ b/grok_matchconf.c @@ -298,8 +298,8 @@ char *grok_matchconfig_filter_reaction(const char *str, grok_match_t *gm) { } else { /* VALUE_JSON_COMPLEX */ entry_len = asprintf(&entry, "{ \"%.*s\": { " - "\"start\": %d, " - "\"end\": %d, " + "\"start\": %ld, " + "\"end\": %ld, " "\"value\": \"%.*s\"" " } }, ", pname_len, pname, diff --git a/stringhelper.c b/stringhelper.c index 206ae89..6d0f5df 100644 --- a/stringhelper.c +++ b/stringhelper.c @@ -244,7 +244,7 @@ char *string_ndup(const char *src, size_t size) { } /* char *string_ndup */ int string_count(const char *src, const char *charlist) { - string_ncount(src, strlen(src), charlist, strlen(charlist)); + return (string_ncount(src, strlen(src), charlist, strlen(charlist))); } /* int string_count */ int string_ncount(const char *src, size_t srclen, grok-1.20110708.1/grok_logging.h0000664000076400007640000000156311576274273014236 0ustar jlsjls#ifndef _LOGGING_H_ #define _LOGGING_H_ #include "grok.h" #define LOG_PREDICATE (1 << 0) #define LOG_COMPILE (1 << 1) #define LOG_EXEC (1 << 2) #define LOG_REGEXPAND (1 << 3) #define LOG_PATTERNS (1 << 4) #define LOG_MATCH (1 << 5) #define LOG_CAPTURE (1 << 6) #define LOG_PROGRAM (1 << 7) #define LOG_PROGRAMINPUT (1 << 8) #define LOG_REACTION (1 << 9) #define LOG_DISCOVER (1 << 10) #define LOG_ALL (~0) #ifdef NOLOGGING /* this 'args...' requires GNU C */ # define grok_log(obj, level, format, args...) { } #else void _grok_log(int level, int indent, const char *format, ...); /* let us log anything that has both a 'logmask' and 'logdepth' member */ # define grok_log(obj, level, format, args...) \ if ((obj)->logmask & level) \ _grok_log(level, (obj)->logdepth, "[%s:%d] " format, \ __FUNCTION__, __LINE__, ## args) #endif #endif /* _LOGGING_H_ */ grok-1.20110708.1/grok_capture_xdr.h0000664000076400007640000000151311603476310015106 0ustar jlsjls/* * Please do not edit this file. * It was generated using rpcgen. */ #ifndef _GROK_CAPTURE_XDR_H_RPCGEN #define _GROK_CAPTURE_XDR_H_RPCGEN #include #ifdef __cplusplus extern "C" { #endif struct grok_capture { int name_len; char *name; int subname_len; char *subname; int pattern_len; char *pattern; int id; int pcre_capture_number; int predicate_lib_len; char *predicate_lib; int predicate_func_name_len; char *predicate_func_name; struct { u_int extra_len; char *extra_val; } extra; }; typedef struct grok_capture grok_capture; /* the xdr functions */ #if defined(__STDC__) || defined(__cplusplus) extern bool_t xdr_grok_capture (XDR *, grok_capture*); #else /* K&R C */ extern bool_t xdr_grok_capture (); #endif /* K&R C */ #ifdef __cplusplus } #endif #endif /* !_GROK_CAPTURE_XDR_H_RPCGEN */ grok-1.20110708.1/grok_pattern.c0000664000076400007640000000747511576274273014270 0ustar jlsjls#include #include #include #include "grok.h" #include "grok_pattern.h" TCLIST *grok_pattern_name_list(const grok_t *grok) { TCLIST *names; const void *data; int datalen; TCTREE *patterns = grok->patterns; names = tclistnew(); tctreeiterinit(patterns); while ((data = tctreeiternext(patterns, &datalen)) != NULL) { tclistpush(names, data, datalen); } return names; } int grok_pattern_add(const grok_t *grok, const char *name, size_t name_len, const char *regexp, size_t regexp_len) { TCTREE *patterns = grok->patterns; grok_log(grok, LOG_PATTERNS, "Adding new pattern '%.*s' => '%.*s'", name_len, name, regexp_len, regexp); tctreeput(patterns, name, name_len, regexp, regexp_len); return GROK_OK; } int grok_pattern_find(const grok_t *grok, const char *name, size_t name_len, const char **regexp, size_t *regexp_len) { TCTREE *patterns = grok->patterns; *regexp = tctreeget(patterns, name, name_len, (int*) regexp_len); grok_log(grok, LOG_PATTERNS, "Searching for pattern '%s' (%s): %.*s", name, *regexp == NULL ? "not found" : "found", *regexp_len, *regexp); if (*regexp == NULL) { grok_log(grok, LOG_PATTERNS, "pattern '%s': not found", name); *regexp = NULL; *regexp_len = 0; return GROK_ERROR_PATTERN_NOT_FOUND; } return GROK_OK; } int grok_patterns_import_from_file(const grok_t *grok, const char *filename) { FILE *patfile = NULL; size_t filesize = 0; size_t bytes = 0; char *buffer = NULL; grok_log(grok, LOG_PATTERNS, "Importing pattern file: '%s'", filename); patfile = fopen(filename, "r"); if (patfile == NULL) { grok_log(grok, LOG_PATTERNS, "Unable to open '%s' for reading: %s", filename, strerror(errno)); return GROK_ERROR_FILE_NOT_ACCESSIBLE; } fseek(patfile, 0, SEEK_END); filesize = ftell(patfile); fseek(patfile, 0, SEEK_SET); buffer = calloc(1, filesize + 1); if (buffer == NULL) { fprintf(stderr, "Fatal: calloc(1, %zd) failed while trying to read '%s'", filesize, filename); abort(); } memset(buffer, 0, filesize); bytes = fread(buffer, 1, filesize, patfile); if (bytes != filesize) { grok_log(grok, LOG_PATTERNS, "Unable to open '%s' for reading: %s", filename, strerror(errno)); fprintf(stderr, "Expected %zd bytes, but read %zd.", filesize, bytes); return GROK_ERROR_UNEXPECTED_READ_SIZE; } grok_patterns_import_from_string(grok, buffer); free(buffer); fclose(patfile); return GROK_OK; } int grok_patterns_import_from_string(const grok_t *grok, const char *buffer) { char *tokctx = NULL; char *tok = NULL; char *strptr = NULL; char *dupbuf = NULL; grok_log(grok, LOG_PATTERNS, "Importing patterns from string"); dupbuf = strdup(buffer); strptr = dupbuf; while ((tok = strtok_r(strptr, "\n", &tokctx)) != NULL) { const char *name, *regexp; size_t name_len, regexp_len; strptr = NULL; /* skip leading whitespace */ tok += strspn(tok, " \t"); /* If first non-whitespace is a '#', then this is a comment. */ if (*tok == '#') continue; _pattern_parse_string(tok, &name, &name_len, ®exp, ®exp_len); (void) grok_pattern_add(grok, name, name_len, regexp, regexp_len); } free(dupbuf); return GROK_OK; } void _pattern_parse_string(const char *line, const char **name, size_t *name_len, const char **regexp, size_t *regexp_len) { size_t offset; /* Skip leading whitespace */ offset = strspn(line, " \t"); *name = line + offset; /* Find the first whitespace */ offset += strcspn(line + offset, " \t"); *name_len = offset - (*name - line); offset += strspn(line + offset, " \t"); *regexp = line + offset; *regexp_len = strlen(line) - (*regexp - line); } grok-1.20110708.1/grok-1.20110708.1.tar.gz0000664000076400007640000260266011605651277014707 0ustar jlsjlsRN\ksƒg SH8KbgeNTQd(me\<$s}MNtUImQH{fO4l-)[^S>yEW՟N3Hku{]iOh,V>P֯(M_'t_?}۝͕T~z>`^ If;^E8z"Z׮v-'({so8xMVZBSyRЭ#XRZ5'X ۾Z:DFroY?O\}~$Ik[D=DZږf1g/]B64D!z oا[M%HD"]$qHbccA<5 : k]FQ^x&6񴉧MO<}OxP"Ot{DGt{D.#=#=hxgxgxI>>>LTl`-X`LՂZ0V &,Blh404!04(%/ H@@7L/a{ KX_€ 0HA7! LHBv(HBQ! ex@<$! H@D#@Rrp HE)PX$" >;Q$ $$!nG9Б{z$( X$$' @I J É#82Z%LLLC8 Ȑ%2)28~pC8p0qQ2)LL)pdGpdtJ`t8~2)2)2) r; qٴ0.|ӝ)qksa^8W~|YOӄ \0me:V䘡-VLxA+w' T(BO b7^1֕+m((,xIdzFߪ;L4 =XUƥYrz+Zd腦jy)ZdJ*sGƗP'}I(i1՜y5k)⦔0E WhiQ›Nz6LM ^su\%e,= eXy5YJb7UNR!3g L?}kS "ovv3W//ک9L6b_3?1ebܯuad Xx7J&f*( X/7dz[,$[UQpCCEHAr RJd[W ڮ`t|:_Yn? pI, 5PgxO}桑%/8ռ5-Ca#`4'-g.Ehq^LXh65AAÍ=s)HRww1#l[?ݞ5$^뉉ߐgIH"S[.*֪E#\U6jC<-+SnLZF˛"6P^Xnb4 tn52?-عK9!AH鿚׀\S5L7t$DQm)e<{ĥSXw0(!SxJF'*ũ4Dpm/;-HiKl6, NΏO/_ ijgCfճA/~TTߧlyMފ0kJ?ndO QT=!GA3r`o8a /'ǿ FG_IsC<+Dydğݛ?6ͅ?_坟Lnoޖ :g[ _VXukLA0Gpv|qߕMD]̳gQrZϖWYdڧ''G q9\QaK-D2)^.}olUnG|Fի] =z {{$AHobL'#eztVI@2HHtIȞ,ܥ뭟M2#&+m[@(072F&\>Bcd?LZiէU_x[9|a4M~p=xo{̒e۔sڃ0/m=KI;{h|*.3HKtXzڦ7Y zkWz08aEZ|~d%g[^d Ux+}5hA!Obk% :Q:wj;X*˞8+*m - TB@IҒةct')JWyXbTӘwL9WhG3Hz DpҼS#UR \&x3 954Xxv[s_SH{hQnL,}/ !Lz$Q?N$P]+6ޭiO ݋#\_Z?ʻɮ2_ootE)ҡxAb.i9Y~>{Zi'X: `K [xoZ#by{zK r۳y(jGu/8b~3Nw,/߈k J'[CoޢHϵxt qZdXh bڔx5B״ž՛ 96J3(7 h'&9,;^ش5%vKs YW7\ZQo'}i!FK;tQ^FKY7?fz~N }!4[~0=9ߎ/~~wy!OߋO/peͣ(Dz!χ8~|r|fA+`8oߝ./.Oٻ@8T\/ GLThNK}\t#W748SUAOWÜ&itS|y._6gnٮ2: ^L}R(DϢT*;dL.ep 2©CQxi"DޯEx-U9X  Mܳ\`\\y;8ar\J+4(x!Hp + T':8V|]ދBUyzv׼Wx Fz>a8Q_!EbIWEGŀ: !Av] =|6 iv2ŨCabMid=''5ؔ|۔1F8CT-&OǼtglFx;"ښWrNCVB0L#iGW Q&)0SL C.MK5E5j}4ǣ!LSX/d1yIZ{:*]|\!dfvӏ+lXEJU %"Y>c~&Oxw 8=u gGd -[Q~p]/_V'R3II'WtEg;~A4ޱl>\YTV‹o/pKtꢆ}GxʿVNW1.'.EbeMۣ?XF2RrAM.C m)ٖ2ՙAV3 rum˒ΰbǎaEpJP/82ۄ4{UIɣ'38)ȵ|:^~b]:ŮQ1h~y. -. Fx1 B1< yǩQ(|{?|yIN3=/uQ*?F6>lgSIR?|ccyޮ]}nO}qvjҾgw}F־f̻>>{у> >d3'y?zxlC{΃U11Ornan&:=?wڝg8.p+z}(\,׳o\[޽O u݃R~^~rl|Z""ŋ:Ԛ=b={װ8JsaYSos|׻D;Yo}/ncs r6ٌ}rr6q |7k2t >X6VN0HBxb7;W&Gu`!^ϼlġău-Z[ 6U4͝}v 9xzRCWbr/Ӟ!lyf;.?C˾Ltv4TqG1׹;8N7[rLVMg/(oOSх5ϯvsF5;gY$캫-6 pE*0e=x?.A[Hw8Zؼ.&qh(-

IynყAнЌ)Kz3٫Fjxr2|{R5=uzِ럝,i? Zԉ*?c'&Ϡկ̵m:wHu?ׇTR&}cQhw_j:*5]>8TӫPY/լCY\3mE֦PSݸ?8u1} Ϩf:$^~B8;$ףy%LcXvŒi3ȍml2v{?ݽ;m-QʚDoiʱ0ۻ|x'j޳zl .\o4][>Wd![ﺢ(ot~Ez/=)!}~&Dvsίo]~@ڜ0Νk?F[/'g<260?>S`k›{:#7t֒FqmC?zjW2 P-rrr29DŽ~ azi/%3/~'< =lp0<=z9`f._o?v6R0 "˜\YKI-@aL9p2ȽZk&E/. @sٌ+~y~Տ6;WZs%| {f]jX$Qupo^,[=a$뚏_1F.)8@yq6*LŧKmm{U}yw*6ݍ:C<:N;8E:E=v:gs|ۏ_pXey6z1[=pXBNkěd7fp@Gk;'7G:~^{b7ծ۬v/qJ7ܽصdmΣ99x=y=Q_+7b8st|kfr3'6_O^\6 m:eW(SDztݞqǎZ8>S|⿵?~{ t*3!+ʅ_ׯo|b}pw PudKC2oN.ukd(a'ZkGnAAޟ 1Nniqz mÿ1 XHDC 䉽 z ՝;N,fxohA[dPxۍ,pOv{w<~Oqj>yL`%_D-^*'>}vlaV̟lk7NcƔDϷݝ{nNܠZW)=E [7FC/mFZm}3:p_ۭl DvtxrInG?!M-yGߦG4[5-}h菆h#:%TXz`fH Ej(RCQP"5H Ej(VC$4@\5hG |)qܧj AL{ {bxzT;sOJdq]x+uBD,6#Iu/Ŵ-zdNwr]^n5V~zJS^WluU XN EV T\.P=uӰ#uଡT-zJܛlE׶fc` x-8wm;,VYsWP;5&$iĨ ;u_\ΘҤW|yt8Zlh{M)ZM@Z,oE taȢؖ/PX.k6>wϣ#aY欮!8duCQ^/5_}::k-[QX:DgRދUڹw:ϲCgҹbx?ܩ>EɜN "{a7ECNt:P-zF"盚!Qvz!bR$OAq(){;x:cӿͣ[B@b,GHdjd=Tmc2u`ʴZ`,ס:˅)]nOnkT˟v#0~\c2D0}vgTc<٪V+QƩbBtȉؚoG'ͻn 'g[&aӒZ[v Zg~Vgӓfck{yM\?8/!`* M'ӧn_GjŮ<; SѾmj.*vp-ssiI^BBW{hkN[օΓaO԰(Vd3>nSX[c;Z ->8n{koɁg~Qy0#ҏX?!Hr5(Y PC*PK u@!?Ed&Ry-]-Oh~1i`!d6:o8ery$&meW0e2?::iRIË\ WgkIK!yGa"ncxǜ=%?[o*kd5.A% Ѳfjsoh;5mo5g,#]E^ܻ}tnA"-ܵ\d5Y[{koj?2O}DR/ͿdϪ <.V*bK{'KiK_ݥ,ϭh~NCY̞zkxGצ.tmvU#j؞}$>47~ACs|92ljq"vŝ$]_wψ;\;mc|.ڹd'Mj٪>zO)B&'zڡCX渋$csk3HSiφow(S0mk4™lrMtkZ$$? +sh~xsΞ b~LP זHߤh\8i{"ym˴PgkMjˎk9쏥nSYCdE0dɾDF5+.—6wTJWL5}^Dd<#z!h\,S?Cbc| nkYW E^l;Cxt>}霔xvlI e@L]%k1gb;sWkwTk1xkl]  vh}; fGKP>;B7ĝw6]f˶o·Zu-#.ʺpʆuMKu|Ds/)GO|߰'Nn;1?FKVܹ'm$;wv?B><;l?ͣ'>xtP$[ 1M>t3VCG Gy?PyL딀JЏhҹ"нm*,"_2[vܩɇxqM$F^g62 wYpOy4yw!_r"5ljp:kDb]G~ΗHadS;>fj`,蛡~3N,ȗVQD(+OfXP=WSO\ jݛuO'iwg=3i!Г;Fik+n??Ό_ di2b`jYxvr۷K@6ק6n>DROw[]X-vPO7vǏ+ p=o`νX"\䦤HD6$5|hpzq3h:]~]Y x#aw+Z'p.lOt1nѱplHm8ppdG3'h(_i϶=3ۍ#cw!E.Zyx%eDmyDfúLl ۷wfz;rMmqyL62G-wmzܚ5mvh7igsEOo,tupc!坿aT4oZC2 jfm'<&ѩ͠>Z,IHwΫ )wr,ڤ$8I'2fOjh&MݝDku?7Qٰ}yAyWMXlXqߋ[]Q?; < VBѳgN/gA!zW߿oi d~ћ'U\8˿qs=Rg-7ie"`&B-Kd-}tz7q<ן_ _镍J{12I6癛Ob'؄IxcQ#6ۓ!`zyMsǜIjbv^ +P<bɬuo `@rvaM[{o_k?7뛬\'lbeD{5%l[FO0\Є3᦮4[]=z>aW ~<ٹΎ'< ~[ˇ10q8m^ƀwpx(e?*aS>hfI?E`:W1|Rh'mcvw tj2,i';5F0ܫ\|p`IZ[ UǘsK(L oOcd[2zч$ܝ5'U* (d/Lwf:X7n,OEI C$;[&yh'CTL+o=DF ^O#j0Acbԩ|˰ZRKZ4m쮕bum^;Ob oIuNVLJ{^xqS5GSu 6~Ez>h;}|O// 2;J}xwM볯~8'$`>)}ZD\ˉÛK<ݛ#0ײe3N< ;Ȋ7{ T_b1s|zFolտA,SchI'}E(~mp|U"L06_l*bƗpAo|\[6/6 zX-uTRo:q[V?~=ҵ]n"ٟ%튐\ͫ?96 w\p~S$^׌~69u1 ck]~~7cqkkڨ7ba8ہνE>tZo]6qlu4 ˒Ɓ{Q,oS5c'ʱ*:|w1:3$an  XX :r|k+nx`|Ƹ:jVQy=Ce+$5vEq34΂IuKkAlIcPM\9P]bw DܩgsVBpj*'{sWAX[g(=fC{pJB97:v]+ +Pi\ 3s5 ȗ(6V<thGG~7/fz!o.N-w_t -Ħ;h%I{481vc4>hş9/s.:[kMOnkhZjw|lmh"pϺ#sOA}XF 97&)7-w#76Pv5# _4-̐s^n<fvA9;rxu#Ź+DD䞌{eajOm9EQAhLKj?S:M2M (sף٫ȡB>}Ҹ |9vIWYpBFh rΚ^븞.75rdm8YUmhX-ǬN&hq- wc^F5]N?il\w7hzNx[Gc^؏^BG#ڤ9tz_J:52T$?w k{\Ww9\Úc!5'1ldpߜ ̭Usx4u%j766: ryޯ+s*'~+dpq06ٝbi/T7[1r7(gN; d3u ggjp"ζ"d6DC[??YΣsAC}$qGŤD?y== |x¬ HwZ7d}3E(O; LB-8`l㹙Rܷ۵`}}Zricug?ӂS-GX-IdaݦϦ|tש?$/鶽WrӀ<:tuNe/pj*!"=fStEL'NBg:KC ~}sz^e *|)4#^:&.-an[}bnGj{r1Wdo``euXkf~>csu֌/)#Qtu<LH0{m.Q4$Ї&<{f@CwSVRd*?M6'bUuO:2t'Jg7S+"r#R5cDd] ,3Pg6N,/ml K/"wkbgu*LN>uː2 iA QtetlWؖT;o=vNc% 9=56bf?;aQ$቉2@BxF+';BJs)@Nƞ|?<'ٷ>d> Ggi>T-cZvZ0 !Az:DuB8k*eךu]Jֺ=BoQqFP=EDj4݂bºZ/?ZZ>AG@`p,H_|6{>F gfGmQ5n3/dE9,y'Y&jxFWHѐ;a(;J|Yo8ET.M/I8<{q o&@N1?B7_م{VǕfuoA ߾vGknyys?w;\azC uF\0֟Y\;7xҞkdj칽 9l`V^w`rD7cw`u|R]'}czSǜMε8/zk LҞ#cFU1X=2,⓾F<~Xϭ~^a>q';ֽ&25&lXt@#xira,0#]=<%xR-9I@htoA>qm||w\htDtbW>@t8*xHCgLܭ*`ɔꗼi:U6sn(?cMm ڌ{zpr 0/)} ΝZ>؄>_F+lt+RCBPJ{ߖ׵Vmh7 s}~~=u)g kH'epD\b9Q5o4.qQ[Bm9zREibɑ'=0OTI6|r)r:܃@ӂ@CDohI(k+P5To .z]m}y8yu4Va~uw0:xw{ FhwG #ѥFY.͝O?yFkʣΨ/zxٳ'V'Ry.+Dqfߏ+;Ǘ@2s0M#p)VO0dG.|-?4үIr.Dᒝp!py+VCr)NE o-F3a׷ϻppçT h4b9R^K't axo& wxg.Ÿ8gqz)%Oe}vU}ԩ%hDW9+NxzCۚ2ӇX]n%ˈ]+K[ɂpR?xeFIlpwtONd]& t~^e~ ^Lz/l}@dQͤxItA+\Y w6:F67Ҹ&h;Sl&麰r ] S_P'09p~_@Y~^զcoy[0#jd$ k{EoXf[w5fc|>ZF#l4D/- =vI;-6jͣ/h}S0ƨ;`o89kWAV%h8%kl~~}G"Yާ͠6gA8-QHKV<.>|OY~>ukŷZ)>xR4 nc:PNB _p7_fh E][ SlG'i ùknVFP:9@[SukB9Oim'YTBK;Eˌ[p!& `%ay0pjAhʑ1@}NZ>:xRNk!iŜ' .8 َ|uhVhgx:{ V2'}{vdaF 7{3s4@l;~?h7H}L #F8އoG{3@uß>?ǃ;Қ΂C` ʕ4%Ljn* 狵yQ5=g?w?=.\ɸYǀrF(ט胹ݫW^Z`_)HFk =CMZVxטhuܥn=H̢h^Ԍ.+! +@ >GML]^ӕeoa; !:ޘKDx<9^/{ĦN|nۡ$:fʑ0E])q ?S1V5]2vXzmek{kÙ$QE5_в>[ \cӅ9⬡Le^fod6`%k~ViÜۜ{F=!U?w >͹{W{/A=|;BPC^6sD6&9__. 3 j ǫZ-Np٥uyW3;~΃OV8wI p\dϖ>O玷l4>:xlOl<9fw|^.@y<>Ln]lGCNiט[{c0_3pkrp`(S',qN³ײu (px֎yz6/i\ټ h0vӀE/Gm!=XW3`t`]U^NE}vzܥ )$\OO_QGՏ7kY?oaɝGO}`;xi0OGN ىghK #UMONݪ|㸷kC7Q]rV0f+7:C$:mԓIhm_.xv4ۤ3xѣ헃?Óapo#%@_L皽wzLO+CQay\~"lvپ&7[kwꤝPi,v`7 ~ /oݤycF\#23·# |F9b<ԯ 4+Cmo~O6M0y_:Ƃ˘NP`:Pn5-nMv2:jҼ?< ?}TaQŭ+q#Va4ru>Yf֙H woWZۅ{۞9XAB\ib%d广?9rb8+ ZBWOz}rr}ƛ7oH8/7^:6xp 5-d ѡ'}4%omS&GC+qr^CZkxwEB Y:a`#uzM:̂cYPGNWsaqzNf0B^ь8`X/LŪl3dD$k|r;@wq_u8xU[[zߘRd|Aǎҧ/k6:8`׶fH?qpO˹ȸV;F pʴa |<߰)u\ok߽w tM5qPG9N.Ycڮ`0a:ç9k"}6y`K?=Oߒ<$N<,$ԟ2݈z~DZe4a:ΙM6'_cE$}_ ϚwgeθhZcy+]}wޯ SdSǁ*(gƆ fz1<^$RXy~p~w 7rS MO:}DDH-4͚D>.{H62>Ouu`F9;s܈4Qoh21)}=lo:1B%0(!֩{X5C'c(̍maXd8ɝ9g˾o߸̈́#`_X2ݞ;gekU)A8X}} |g<8]+fBAaAQXFԆ+뇓_OPar< o}v'ݽaUeoww#LDtG X%J,^ y@-_"mHVokkʭФ{"8nr6ޞ# *!ml@$HDLpR8*Q2gX!cJ5p4&L2;#[fّm63Řc/'ܦqJc~;4/9_-ҽ-B6<9@0mze{N48CS+v TI~ӿ?|7_ _?|/|Yrw'?am`S3Wۺ9{j~č- z aAWqd\t{fGSlߚmDY_,C~i<1Dcpv u Uq,DHG찫yYsV4GWny֪Q?y2rjb=%/b6 _1eՏ9y*u]k4Og o!pGۢ xy-X6L^;&FZ$&^ݏMg>"F2_q $POMo{0-* ;vS,'BW)2ϐƉ pz}i9Dj&̈́|zOBhߌfQ d^kہ8Co:C48f?0_oFq]i2tm@ߤ(-^^ N&m}9{_q 7xop |^z;3Lkvň.8dwzלzlݻF)ASN&/hx>]<6n}ޔu,]mm:9h?>͢`Mx03XʎX=v)[ZӬ㽵Dl&WV#[1 z6}gɄžoD5,_xґN/,-ېMaU˾Xǫ)D=3K߯,t뿡-/a;Na݂ %q6qgˌGݙb%#sZޒEzi HJxТJ1aTdf7}pteY4O1獝!^}XQMLeX0Bϼ(֨U͓6f@Ɉ/ hMi-aA%<8(o=Vʐvd޷"qX.zn1{sZЎ`tc wV<ܨ3M3P؎ cMQGw_wpRߤ<:nM=Eh. BAEԭx9ߘB/$j˷5?='Kcﵜ5:2'S1mU榤b/W:xCS13\bKD gaƦCHе~bkQ6R2wP?+In(CA"HoM/e|KEȵ?qM#ʓ!ˊfhפj<1U۴ނ'Ag,bp?XA 973+0k˙cn']G-~tf+첯NKTzpf2E͗0Ùx78;jN;kbi^΃Ƀ/7_dn?q-<~ɹ ǯp63떷=d)Y`tkN2{?x)OjGOuMQ`=X_Gu59cY?9ZUύ#LcN_۳[=}v3\]h2y5B3)ΑV;ZCE7~o;yy=} 9 HZ?q-TG2`s-kn {eT|SS&&;W+r"D#@6sa0;112A;+.̱&1LhJgDLi^Zؠe6sDwad]yQ~Կ^W>xYL ط[`nOԚqmU{ojglKs,pmeC<:=jAÂZ^oT `ZFgC𸁲Fxfzgɉ nSj.ks>r֡>59uoؖWpm_g-nz!Ε!c#<+Gև~{{\ND2}żD0RF0o+|~Q ֓/7W+X0Qf&>p4';.1v1$W%3KflN4;%v/ݟN79}qy(/ 4gw8|eCg/g|+ZWCŠ)_/-x77t}N…dۛ~ch'+3 tY=y7~B^]NŧvUқ[^PݛuZo7c<M`n 2)ITֽԬ˲u:[Fk.Ӈp79..zPKj򒫣>wUM'W޵˫n_V+UNG֯J5yp>1M-_?ުip܏?}7ҕg:@ )S [Ov#ungKnXeNkwoLOZa?#N"C,8_K4yf%ݧ?jbgt0Qd4v8;-j.t:{xsښٵ+y!eZpjHtپekr#4{V[ lh 4pm2_ǗodRԔ~Uj=3Itd '/k\M & ,9/`rv6hoKn'{e<|w;8ڞ2,ufyrg^_]lLXw[5#8 u bku#vޅ'`WTi{~?SpW6~mo.|<|sua?7r>45jzY'{^W٤[̌ٵokyOi,E&9_;̆ޭ+uFBtp~}];&y[4g9\=aa17|6u(!+r2\*Qf"\onFnv.Nݹ%b&B}7bW?0ԻLtzm6kΫ%k\?^G*` x1.vg]©[4pɭlzV杮W>[[hjK{O7~DWGuO1|VA*@)AF'Ur P]xWC8:j'hגQ|iiy9'|ܥVn5?Fwxz-ݭZe*-ђ quӇ6nm[<8Y 6tv헛#iɡ:BTz/Qy=5Xɵ3F ₶xԓ;KdُawɵOj^ ҂LGNxb}њ* $'Nst@#"+"S"5XWtnDL9\ҟ8ost_xΞwR0Sgkŝ?KN w^stp%#XǯJ>8'QJ1`z-Fu\p}s h%pﺎ$C X+gOѣٺo0#IsVkw`qb53Ё-ۦu #:}_Ͽ6Q稐s^.Gwvchs|.9_Z6]qF1Zf 5wYJܸFL[-p+jMoY&NO}^ Ovۭћ2S8B'cwN!L32E!ocvwkFκo@RZ̹9R옢Oh)ɩ"0~fGlHl6v[Ϗny~HDS^ƍk_Rs۵#\z.v3(=Ϙ,5BYwFhWp2{P&Gyko}4#%S?aeM;=W=߂bnAtjU<f2@m8/OyafC.^׺kuꚒj_ZOOYw~,sV?[(9~ZXK_ꮒfꏴK7O;Bs'w'f7 u2ɤYz.@KK )пOMCn;' d)Xov,͍?}n&ʔdW7k8oRd?~=lzadqzs]bw+?%k\]Ya5%l. sD/f8܌a+%L'gϧإ8/uxg8$xݛIaY9RE@BcAq SWi.]@[žȐ[mԐp>ز.Z@Ǿj,ۭ71\#0.7Zǰ1lg Ud^Dxj d5 DZo0|4Fc`w !l.ri=:,6 'FvE%m*}{O?5!)1aVN{:f6]r ˈ`r<7 :fWR ?WsԷl=|x!.4Bp=HtE> j(-ҺAv6.X+-RК6͠ #( 1(I]YwfZ|^C(?wIgk,_KC]'3i:]!86@fYr\5UϚ^5WG}ޣ/=7?}YrmoU۵4s5+ibUKtG|z-k4~DέϽHH1q"zgƾ.QYLu?wslBG([55t^f˶G R}++wUÿ́gh7{kHhڂ[ۍUǔpw :M_oI3 YGÃ_V7P%x>??WCƿoKH=͝;Wg1lY~o0KqAbſ_VeGmqA0oi$8p9QVAxVAMl* Y*FbVS{ :e%oFn:YW}osʆ~X?5D:M>v3`(<ڵUW#$߸`yO 0~(F? ~"bKa!DO?,Ci%i%uR)R?[9}E|ɅX_i/ZBͅ s98n/$ଟWf-}ɊFdKo-e6)0Z~xIxg\rg:y|R',g}czdߎT[L ~kd}2y<@o߹s0y~"7 !> F=r8pLvGR̮9޲R\7,2nN"Z&x9bcG`VS9p@ҺT=Qo8;[_;8l}mEn3Eo-X}cMu[ghf0ݟ**ˬ|f6iJk07E`¿49*nWnp˦,wj[~ýczNx۷/%k5zt_Z Y.9_~qGb-T>۝u^6_9cv D|򛝜A͌f,U tuԃp2N 62|ζZ/Yv;!B3R>KO^oexOlj=T41pʭ5jQ['w_ ^}}r*O|17Jy(w!d31{=t2fz:<'sd-: h_]_AG NC2i j3}z= OC wsD]3bs@N!{Dt,'כM7hueg7I ~|L(5n'[:dn gs%8r,ҍ\ʘYɛ.DmQ˩~>9;ێAH4t+_yOJ]BOmquϕ6%"|* =pl620ϣ}9g ˑ=+>8En]C}:)sP _tźXqPWSuYmEKt3i׮w?}|t) [jwO-;M$hJ{ voXv{;gKo\~$#?]]U߸S~sR3n#;Tge o6a[ vxg0~ja0`?Q-1C9(`ςLTYڽN {OFNR#{{p+px1N t48ՠ ^p+x~⮇Weree޹̆Z_iɳuGZ׬΍^0kӋ:qlK^փ d>2|;̾ `42jx|ԄuZ _`_V#4ꩇ ә+H̫$뭧6.^4U дSӰUL#WOp: sdjb.g*6u^s5;C$'޵ws4z72~dӕz]Ym`LŤ:bLP0|Yf-~ݷ+-VԾ@FuyC&~sE:eq{;D٧unok}ܻw{)ʥ;=Ȯ6'pٱՏ"Hչ@axB)a3h~;uͦ%lX{I/ݵÇG}Ŗ?$m;<ݟ[#XM me'?F ד}'*JM~x4=7 f mْrҜ02x<\P4R KhM-?A 9M7"YrFpvcx2~5ڿ=tw̍O쩑f#-+gzȝS5:V06yخ=w {z3?A$=x*/N=f<>AeeD3랎 ^qq4ʁ7_CܬfݭU|J16WXM#p7'x<ΆnO˚֝u½UwX;Z2XrR AqO ҡyR-h Q5y女P/$4ָ[{aGXu-v L>&mz]\q%_ :)%^ Z] т7M>.Z߹o'}턗 j7WTłׯz!$lwtt<4J\sFeB`Kq*ˤ N{#t?뼆T|۰ݟcL_1>=o͖y;_D7OGwG͉NQV?,޳^r˵5km2vz{ΝO` =Γ|ޣG#Νg;wS(޻VV?mqɎ~uX(.<{BXHvʢ\&3uxyܖ+BWіVIL%G|?XmHj| Y?&~۲ 3"/ln^񁮹|N\=mBGlf,Z t!VTZ/&4~|B1*Ma";yҋKWX12-#.,ےk̼4MȔ Q;WB{~VtTfhv)o" `MVo ln//ܬ_ɿzFw;o+E?ZI3c]J6z>͓Own?= Y <{Ю:~9_ȉ]}_0/wS8_"p?DߕR$2So [8!9g̽= fވ1*׋@j3{9|D)׬y^;LZ%o^=~kR+&ps#NOvO'C60=R<½#;م-0/KR;_7ui{VNqJfcp58\_[ p/oO46O#7zٱX=\T~t=L6 oދ%mG+8>T/. 7_Rr4|eTVny c(Ft?GU|a~zNԖ㹕7zKǸYv7u^׵aK*ky9n?iYl>F^ wGhwKF<ϱ|Wg@ƀ]$%z&oƂ_q,'~04,?+=G;ٿbkͪwZC/K{> z?|cV߲wWtXr|/\=ۮ* WN{:u-'w}њ 0)wjJ 6Q誰Hm̫ףh<9/w?nsνoo~G'O=_G4ˋuoזw/v\Geͬ3:Gcdu 83b'grStrq껿~|֏?_?obd%5Z}-W._[&%]L(g/__fNM5~PwZE4[",}gAƣKw8LcbvGǸ(}AKL> }aߞ<}@Y'vZc& ͞?IųGrΓ|_y!z~vѓoi}ҴN_}_7?nzZolw7#W{\MsF^w}[E'Zw6;` inc"XqZq\qخή'K: ='+~r.? .xԖ9,B[pyu bOyQww%x2<</O_mdLgbDm%8/w8v@Z鯉>]4?0:S=z v?Rh|z2ݝ=9_vךx)m=~q `z'fpc)9\ !٪{{C>/qV=tΣwcUc$WMmx l,8an~GO=͏Z;OocWOoz'j}в3U2ս#^KE=nDvl'Y0~ ~r=nOD(Qbx:f'~BUf4нTz|{$b#y//R?e8؈~3Jj ovڴ\wmhdNf0-ypykcyoOu ; ׀d]NtMX͠=`Qw'F^;V'KMbXo]%ɮA{y9)C7UNe%iN`q:u\t_l&Ob 褡y J(88SE"wPWv]Γ=xu{ߺ Bs^פ\ygͼ߮;nefn{&Oafn(OwCHki&1Kؕ9Sl/0ChuU_OsQGR:ݢya]]} A;^Tӡ*ld.2q#Б<:J/Jr͛n !dx8[tA@>ѤbJ[V>9:t\&[B]܋álc ?ْv427mm扉x`:15w\%ye/d_{F ?컟_!솓OOF3ӫ},Pù=[wn?~vgןQ~6:=9*?_G-* &o9N{u4p=o==98 ;ohQ-r n%`[jkQ;ڦ{ iOKJ"E("../=$OBYBļ\B|ovm{% :uh`xlŠÓ`>cG-C˦ q|pҰ͠*6ȱ:,>җe]W>2\λ,0r.bv'odS7Se`SZR~ߗPo_aϿ3ϔx7{iMzBuF?=>ppe NE y5\@ FO.3+~|QJ`?4`nͤSMXSO9CnI> chBd;CsU? jt'ݸL!Nr91XWCT. zEx2%MǓ7F}K Y v6\÷x}_Fv-j=7հv5֥.lYk1Rm,j*- K>}s'<3/>QA(Bky/NܽI~?~Z(zq~^TE?-ziҏñ{:S=5/Swl܏}5SE`{Q.-w*{k?v~ ݍgyH]K{4%SGY\:d( 0sod}pϒ^Rq|!Do+|Yt3>Jk%b~AeUL%J9qQ Es Eܯa]1"N~^1ns7\$urvc\J>FBKV9qPq\Sx?qDݫ묛k&}$u8^4|fb{nF#GR4SB(+vw _l u,.$9Rq߈0%z~ k}q&ъ&}>w`J&N2OՐ[8GM7>i=C&:]s#L 9쥅6 h f+rNl>E1kh!MnQ< 7:Unc{?Vwxuua_a?Aîba`,I3z_ jc7nqV:hpy̪I+n{FXjsq\5ǹrH+eE"Lm1Ved?MOC.Z)3mπ clbA0cX9De$H9 G==ޭrw;8n?=p7i ;K75QOŶ (Ga nC;9Jsdc#s3K>pDIz0 )7 -(W 3aWcPv#D8nBl9bg7(3-#x?^.ư92.793 D9ݣ-18' L;7x0u+˹ 8"H}(Ն"b-gr1A0qLN1͵N_K!P&(9ޮ |3邏766'*au8MkABiCu֦)zXt| 8st; GD\[=3PhoL-Ha;ٰZJ6,%"黾 L&4ICأs-P)2UXr? A!eŇJ}KFYf6Qxa)\'̱3n~Qڸ$48.F8)JTsє:#[,5ʆ]" +7*TibPR}J?^+ِqxĂC A}2WR*M$'h,Qxr ߡA>JLKq/N$ƚXb<%*n{XE|,G|ѩuf Z(KԒUF&T, iEebCty恿S#>TDI(C yxRcNmzOE,-A&;&švxbpQ; Db%VZV 0΄'x-F5)>sba} ŇpTU)(|9+2hGhz01(ai+ (x#N$wD} 9wӱ@|6t7$=sF F $$I/9!͏/!n5(% N̊PHÂuK3c<1%g@WCQA $NLe?*m(W(9/"3 y ;'⮔9)Ԩ 3zL=&C>rmPW}TF V <)A r{hs<*dh=,r" 4Rrm:.zJ˅;Qi p"+2b"YtP\J|P![`DZo:ô'= <=!\NjSn4Rl'*y8VCBQšePujĐ/vv^hhNFLYId8d)9+K[Fh2 I)1fB \|  @/K4nxLyϺS(47Y2OD=7o\D,5 ].9vQ]Ddِ4s n?9y!  M (Lf3eBhN8U * KDOklvs(s=HdE/ؖ>9ǦCǂ1"fK#0JERĜ?H\ =W \b4,!,hhTofj4v䱈eT~QDDId!r%_r}ARLAJJObtHb9 Ȭ!F}=mbj8PB,epd4RI1]fԔf]80<`AԀc(Ih. 4))Ļ4OX׳ 2A4cf2"ZkJ92zRJ!H:D^z;Tm.8B@cdBGQldF\0#`s9!v̡3mHd.H\V6h,-Nˎ s!`{nf9eIpxZcEK%C;y\%?{vsX:[ND\vL1'D='3dơ2-6)h 5Cd!hd&t,.DZI 0n^I$`J2=dҖ'!kT9C΍͠e-ui$J/y i%S" n &ތ[_Æiu!'+@iսx@F9K dK5ZͮQeMO lr֔#LΞ2Dꌕ˩W:`p~XM]'zAQ`e*; G8:03dL&'blfX73B$ŭd&xLPK}2QCcP|t"_ݪB5#|+ژPXF*#LëN( )J+ۣ76KBj]ʀxS !]nRN%:;{ bTQ/ (e$ guoBZuc\D7;6,'Go&1.yoN2Kb!hrnPbJ$5GR1rDms|{.U0'b6O{"5 z_W RR)A8P̦<ǩ9Jj-[v]ǙZqN^0zvzPS3"7+/X0 #hneU*.5WbC[+ DD`3Pv)$jz@ k(!hAWS*PVCN`nǔze.sdpJʌU,#Y6KwM#(U܁8ceRpPXpmHT 4 !XQ@~N# C*Q D8j5(T,P}1SGN OmH%?V80oڗ:r)@$*2"T )AJH*ܓ|&xj$DJ1\ P!fF9 ǏYڙrHLŌerzlDee$RhڊhgfIR&& m#+ +,.S&Эn ' ?L8+@Jw˚&SyNy%<`,#V*6P " ]Hʢ@%_'B!H>3xV[ I~TH&Ohv°p{犁J@ [zx{}HBzpL,ОuZ^N >Ŀb1ތh7R7p r @YbY#155Rd4!*?.J// =H2 kd$g%,)G#IJ㉼Fϩӈ 5B wIթDtV9 ˦  /-^F`6e4ؠ iz a\.A7@V$icqd%t Qs]*+A1^Y2&)2Ym(+- 1B$3,ҢÁxx Uu =Z il#)J2^(K*Wh*`{|'/f)8'0%3/G+|h_|zQVt*PP(m#sIRRe.hgDaC SRB$Gx^ B6n.oE=3Tjfa6PTp*-eVA8ݶD (1DaJ,wcK7ѹ0ȔwBbi|蝬3˚R98LIp,D3NœҤTjQJ#%Bh]+/[+D2[N1D*D/2O{jĘIiXMD^%Et|շX)nK6k r)P 2v)mBabMNc4`2n؛*2BmГDE] ϴ^Pc'Hn *Le.-&}ՌŖF`3]&CpbML.ѡ ,D>&iu l V(Pm㞧+i.5(?m& q"X:fb 5LZ:q>|=GyR.MJ(tB!N@ A| LH,Ef70lxbTޝ)m鞂A6$[A59{Nhatһa'?@Hɹ1LD  ޲yς>)`ВYP="IPpJ3F"L'R}BΧ= V?oP&-1d{cȢ] |2L1C!2](H_|m\f"~q'D(RnA5V&vJ!跌fXi:h 37ON1bM4?#Z#%Ђ=CFyް)n  < Rf쌹 eݗmn\)~6>ftY"XB#UjDf-%IաHO%)K :-g"hɹ$˂ jRPB+Y)#7V=J]"KbHLނ2v I_LY,f2CEܸuhVba,gO0&^Fg\͂ / 'KY 1CCA@s;!́N176FɩC&XDqByACQ>ϔ@P(!R'm).LnE1`lI Ƣ{zd5 s:Աy G0R>ěT$2xfBQ_BT"rǃJT~Jhpmڞ00f:" ֒%$JHp/9<~ϙR~'Y&zmiZe }6D nU˼GNJ<vJTr)m8%L@{!11G2Vi&@A aUcS'I+ec!M!څZW"vg.1!!#T-aAKZ ńajg?ň"U aS-F "\a()VJJ0bM8bZ @bh(a6%qDK hW% ?­JLeyk)L*!a‰*1} 9$(TCy")%ef*z#3$0(B̃Q#TfK53}) ! gbPAR]+N覔!0/ݜ!j]b3]DbcTCk;h3}ØFSiMWr230n E820"GYEnȲ(ٜ2Kr%d0D3@d s@ĥha,]!, -d h"=<-Z~HYinX*sTBbdf!t$\X50K!,鳱%[%C9#=H0'my,3o^N>S#XP+N̓; v! }\қm~:W !MUVhCDJB_l, D==K 7#ͤYT*&&C[V e]dž gY.=ٞw4Q)G6!FC"Y* Rryb[r2ǨrW BQeP0 lPRAfBUA@Hb;')3beM3PB6`KiOf@#!kCJiTdԎo;d‡#hBCESA pE0qɍW$}#q֌IM6$DIkHt,)1d2pϲ(LIizPy)>`l $׌)[%* s0%Rq*i 4-Bfu$tU * 0OkB_"jLRSaPu(y)$TS)ĐZ-)āDy<$ ᐍ; <,a'oAVG\#OAy)2Wy\̖`LQ1Trh 5hbvLNPT /̇KF 2tAx\dy vB:%u:bWx2W(V&m!1e B%(-aRRbi*K`O5SP' XE%5z*Wd+ՅY8.(,8R~inx*USRf<,4Eü4./$.bzTHaNFɔ0ϠEZ^ N+ XITLC`|܌/cM,RF3d!:"K{GT픀R"F%0M\ST 20&4&jGHt *w{5vh9dz9]Ki\*| I)1e*o'IoIV˔3/G ]&{w\i:K9bhr(ʚ 1RرU S`˜% 0r,:nV1\dX,a N]:KbIl,M͢;.ѤW'JHRa慐.XdlR.\G5q ` W Zjq ! /Nҹ4<61bEh'q L=e[6,2.Bf+ /ddBGpQU$:?aUDe\ԂI`r:-* 812뱙ǘVD[4)d{M̍ev L~W* y)N#m˥?THe^((*Jei\@$U28&DÙ%9EBk;QuF{Bdž=LrפU9tcq+#$G?2P$])'* Y.]I@"Xedw 2@Z)rSUJ%L,0NNeL[FT&-RF_| mjl*&ʊ>:8"P'(dzz(§L#Wgd*3U/Ʊ̪JI\oQrܮSB'T4AI,%pN2 ֣P* {IJRcDL;̢:h iEO)(8, ikʥ9&JS YZ-r&݀A4yA#K(Ҽj< YF t;pU1 YGtH^H/g$SC#8 =[T G¹2,^yUBye"tCzчXM5 )Xe˛'4mpR1z.5@PRڵsmU&2;#Dx8Щ D꘯22zdWJ^L?hX {ui킓΃R1 /k!!f* n+HGnPkbcz 7V?1 ,4+)xT[)KfBEYK$QVʪC/l,RȇR dڐJK\rɩd3^qT5, 0_0ye ̨PoFTSʳ-b:L(sep ed0E<6((fJBpSfDN,!OHK4ancF|>3KTw2@3:hS W I$)$r)EJR ۲IBJ$*eףs*&mfJBgtH|32[(A떯F"RQS)UiL iBUg v&EBu*N]Ҝ 4Rɧ2 })Ч&CdiIR',ˠɕ (>:)򙏔kא :w$˔+3& ZjHqXY'+ŵL[8M氕a0qc5tp[J>+㽉i44 lNS۔CtW}vYBq2Zd&3Pl&+ôAn3@8b[%),ԆeδT+w@C 7Q9 "s*YBB!3eiZ ɑFJyS{{$P+d?}^aSZ}SsU3*%4O [z, !ʋj6Hi*~teˡ\ޥa3=0 o&*1N tTJ?-hAA/: YZ1mM$&2`dL^X+V #br'{Fdb6Q&P,`>-{evu#O[;)">ђGv)y&3R#w%J9Q&JYrYd43UnA+Ws22-OEp1>AbK`YUNEM$HqG*CgZ"֑EKE{|L5*4UWz7u (=jRb!a.!qA01 WU/ŒgHKNEiEyLx _^XԅL9J/ChNXtSG[ # Nfhes2DHݤ0KWnK>ʕ2ih1ֶ`J Bo1Qz}1/b,1 W_$beYZ8JkPc%QJ_!33XٗVfK{UWyeda񚑬ޱEXF16*\>`1膌vү2f^5ס$2/DcS+jZ>*BJЦʄS 3Cx?TÒ<2qzDs(#e&~2`Q]roXt8U4F%[DP.` N%bUL,Z` J[ɮEydd#^CX*VUЦ(2[6TJHD١ r"K$<Й'P:zD!>0 NnJd# 4A-&uNM gQ7̩*OKr#./PT8U M ~֊JUªXUv32VeiѠ:2u3sw37j*Q]e+JeaOZxiCP C ^iHHe]"ƏܕpE+$>&>5fY.<ʰIjttMWH8P(S2WP-GPA6CyA} &uiPX;B锡֗Rqb~$ׯQm61MAۼ' O"0~lT΍To'b5ł Jz/F1\B"y0y:*b MJjL<ѨY^k PB]tjTLH$m ִɁY֊,B ܣߗc'ˬ4,`Z2[ <#A]6)jUD8uTXfTeAE\(r$6T cI2 b _$ )`!q=28xL@2*RFi$63BqD,uyH8 T, 9!Dͩ*"#Rn݈-.8q(Y!c i 6L ,5_( ~閴33c"OGrҶ$4i C*̆4`̒RwKzbS$`$N06.&d<9i3qKgk "M6$r#7!E %˔KLG1V%G%j ͧJ_3SYҌJP!>EN7ɏ eU ʹT~Ig  V03('eT9렚xMQ:]I% ƪ`ʔ^^^ƎFrc1e fjb-.*]Ȑ9̰2qZ'5Y2Yƌ7gO#SE*e AyɴY%i4YV=BӜc5&:KqJb$H}ۅ.(_1 'K4Gc*PYtVi`uM-iO,|e hΰU@+JH6QZb؛J$[̂$uZ-'1v9Q&p}h3/L!pcQQc^**^Rq "%{CJU)>CPqT"1=:D >UI:p!2[t *J̞d-KJ<@!9Acz\XCaTv.V)nɺB;C{b (3r.*dMvڱӟCɘMrCŖj%zV,w""A; E(qr26.T;ǘՏ%[NϴPwX98"J^Eϔ0.rшIV)sěvJag,ʞ!&-6eWE$* D&L[e7xgxqp%ˎZ޽\sHE@`(&R6R{|r pg<]3ESj2%QB 3API N?  j_nE!3c **Nc3s"dKޅ!.`fFs03YROm!5/̀8RQII,$ $TY1j%(8,GLղ*u" <›j!5|QREn<*{`-igH: UD"vJJŽ-oIЭ)Cj('Nga,+wrsKz>L!X{!ZgF !'BAđJ,B O샩3X17Xvlv4R}f81uĄ \S3WU6Lvd8`$eԞhn&gVtOj(0ix̊mUTTײ[t3__E Iq9aUu"؅bd#<ɥH8ʾx:+A_z>j&;]Q17Q"\otn+ec4N:#!,.Q1DSfK͔ j/4RMA@%28CD.VtldmeL&%ȼJ`\N;QQxDA@s|rH<ƌiҕtlR1# jR3 N}*f0fK\D(3/B ɖEN.~ /)YCs2&~,|&z#x&& RX[(Cg2/./ݕ ƱD]&Yl# TΑ&L&= %ܹf}ȰH5 S;b7,JѭV.$S)OLQEc `'h&-/d!U\*wa4|.{ y4nh"D':s?WK#SL"dX8l~ ace-/KpEeb|VY YŌ[7 I ZkS%Gҳ(-Wh,'||%tX!뾇㠷ϒF >ȅsa. OiӗU ̍`v2b,-a2&%044Ee\zJ D|"S' -29 S+@Щ*QFʰCBV#+9Z(K;ouXQ,V_vV,LʆbTv$5^*r%+iqGF nV kA, 1ndq ǚ(KpJ2QAH<$bUY[EB~h\K)"b˴r9L-|*UE#Tx:IɭCrF(:-Bnՙ5$Htq@U²#y3, $!fI}mrblXviWE<KbaT*N C\B7&S#/U(AB.b2Feշ3b CP}PXiH D Z>YUMˉex\9ΑU>Pn*'lAvWa-J/F5/72)LGLC2*l:#XA_8Ol)BL1ZcIML \N =DD&HHMxd_0) @.e eTfj*{+ULоf`Y )* ag&b(r,ZՓ8iԨHEpBu+XvU*~qIf$`&̞ EeDEI M-)Ka˕ .P0_O 2-<* УyY!B%̔ad _0B(Ryj)V2ٜ9=,%:b}*=9"ה(5̗wA!yUf?e̴l-B^-:"D\i÷d\NM_yW%Es+} !SD44VT" D3L݂F,Xjy|˵-X+ ׄ" gkz#mP@ltRL&*%f]*FbxyI*(mieT^P[refl/S(W />0{?PldaՄDR pB>:B\v<A,{k)bנ҈2Of|A\|g+tCIOXa1憲x3_K)1C(EUTyW0悏d ͈[R&S%!uJ_b/3y$1]EšӾvD $ű쐄nG` 3 ʣ È?NQU$1OlR*e8K.@DjJ'D,W/-dZH4AxQ xPQaIR yF9A8IGdFPLs*deYȜ6X5Q_ "$@dvHCELXṖуZ.sI/EjJƫ$pNMc@cIqU ϕ&KJ3$gcK5SP DPMdVLak#4seڽ0̾bkp!ެjȨNV(GS(fe%'\}f-=\i+,K`){V`,  YY 7Mo{!dr4^҅^3J,U *a !KXԾhlfs}Re*ҜYy^KU4i"C0G:5Ğ2K1}/쫦IE:ơc|]IU͘~fa1#]"ZCXo£Z䕊x4I $LlBi.ZTco%LQ1JcJ_ @BNQM V,,OvC&mkv͕-I#;TJF¡e'0vQ*) zHLlJ%AvnDTko\={H@k EBYRY܋iJi0*.BUK3lV~NfN%Y |zM$ۚ%iMG%zbЧ1U[rTI\%X# E} #M&2s&oeA -M?Hw,ۃX{Y T00EUqLx,$C :gei!mRz>Eg\,)3ۄ2c!"Kq%f2$"ytTV\SRIP/^$O&cBOQ@(0tj!Z]VT4{V~@a&(SVj +eYIfHgƓŒYrC {8|_ajjX*Uy Q(5[΀4 & iJǗLm2ʃmRhQ4b֔v$aR{B[ zEEfƪ&T /fh-LUiDM{-USr͐1WaUT\Y"LKlGZJv(UQ9`rD+KR)fL3S,;R\ bKZ3 (+ 優2\6dpIY%h-ԡԐ}, /Β4y&q- ,$)FX )oS+0*$S"nـ妪.0'0-rKeVٴT$,A'b*X]ڽܑ R*Kvo0YK=K9!Sda&J Zf )2FJF0^n YSrNyBfeQd>,OFj$ Eb2d]"x0,=IJD)sIʌ-`d~R4i"<'7&R+JZ՘Hnơmd^ׁDW!;I<4q(m~DkXLYS3 ٭b\Ybm͉iA3*9G%MJpL'G!"uL^]t/%,XXUR"kjB'VRuW@7"j$X8H"KI%$ccrLcH%a Z fTU0ܖbFN g+1x%-ʋEt[2M&bha}2D()]8ԯRvKEDL2F$\QVr4x* E*BOeIh~p[<RY%l!GrsUL!(T.bرJJgMqRlJPa2 kBRtf.* ʞUJUЏB#$ɥG<4ƪ@} 4 [L…JFX͠B5>H*ɰVNUVfEh{Mz5u:E*Lh) 1X@13g3TuoGRO\JA'Yzчg.J"QT!9B M&VřA$ ī"t]HeR/$H>4CC~蜎t1)J4aiTS,kGʥ53b22Wbi,q*WQʈmqt(M3 LaUՊ)gpˠk CW.dJ62pkUJ62gj#0CJbhTgam )̏*PjuzJڛG (% -p!neyOh )NɌX7W`+U%pWLtu)^Tmܸ*e&,f|f@y\JjhM ӣƣ-Eɤ(TZ!MRsS߬jK֏jf[1m V ֑-7+AQcVzW։v9i¸Ҿ`KKEX:ŅT^V1b-r5V;r?Yj!?Q&чp",1ї4/\.2Τ2TȔ=,Gȸ }c À>LyhlXoWQ|jU+Hr"Ǿ)̙R`T٭-!y X\G(0JT)lUKLLfتVS3 eiue⨸lb:V-#8`'2IW, f2*F/`'[NY+ra$E$Ho.?\֊,(+!}2R\&B>L"/zƺ)U c`CTM94v̗Z# ʌf@&Dv;iV%;2nfQ2b&'  }4HF=RajV-My/$8]긼!WGGhqvLU^dRRTo HLah1dݥ g IEvjS<tѓ9EU)'g 0J.g&nH\,$?scd1B4)B@UvlEt˓g OhvmD'm4<%I,a7&O *ix9fDTi=(~WqYd>@yLYr,%}j0N5& !ZY=YRd;-*gk4+O;¨Lܓ۟*d$ʐ:j$[((JZ~lrz i+{Bgqz3ֳ0jt{sJ38$ijf\ԒiÄK"*<0*Q6wȌP"%G0kz?W%]Ö MD`0K,ņ:-zek(ԯsqPx4qѾR1!zm):^OxR* A@dfU*>Lt Fcp9*N-ƛ38?42JS'Wr?? =Vs%TlbI 7$olQԶcYwBN`yjeojұЙwiX'RDmyHIJi3<1 7C$9+ !DŽ1AJx%Fޔ?(,Sr2T*&TͅNgUs6YJUsM~\U8d ;;y Vf2Y:| X%3+k3VVBt w.+YniG oO?}a=2, {0 Pf$IVVH*v[-Q &2347PIܸK7uG9+b CYJT ReTRT|/ʲ/r4[Ⱦ̋*8b $bl3*Tł68{*"ȠST~iEIVZ[YR@ʌMXted*ő &.vWLkt_ bRS҂7~iqjɔbfՍ [V5FɧLiA pI 0Mc(C%)gRCv 2\*lKc&̝Y5|Lzt*sgQX-wߜ#d1{%) XdfSN1Rf1B B8KzDT3:CdLؓ Q=i~0捨$2F!FJX[+ u-hnjsXPmIe @JPcB1&]0jV̤遨SK ]! Y8 2DCMʌ Jbf)D=FRJ 4k*bXpRyiɐ~PZH$8 rBF'cJ. MV(%`9"U}^35ZqeP(hzsCML}NZDy4xUeEAE"AD.QZ( 2JҔ)Q. {O'ft 8{{wWq jbT\Y4yAC6 W[mBRq!-1P2ͼh0H0}tLr9\Hk8²cˉt>a9Ƨ&Qg<`g&0Bȗ7hZ(Z.էG?ƕ i +I"T 8@ L8jr,"6%@`(Vl|LYdbPxd9~s@-BWw =;]f-bfKcL@F+kBgz.җiҜGK?}:Zʑ}A~f3Ξ(VC@}ޥ h z +ǃӴIĖӖȻ)qBő:WNէZLvڈ1Y]:Q~h&"l }1&pqP0r7l4@c[6zڄ"6P $F⥘y²̣Z.#ΞIa`jS{FCHlC!\J\#SJI&e הij **@@kdsf45SԘr lt *:p%ݦډԄz\dreZCd''fded<PF, En}Hq2"`[231L%QerE#K]z #6(;x-Q#d5JZ^#!RV6͜:K,V>Np.B }a~"Z~B!NdZF&;{:*3I.QU9apI?@@ ܄@@,p_! Z$ ͑EJt޵o>%@os4)O.L& $Bbub(=C3hDҗ :)qBh<:J$R;Tbrk19L82`~PڌFizŃ&6It U laTVo:1cDEHYɸ:N4 0&0B͈Hs7#Ai J}6Gm Bԛ񔨤0Y(p[! ] g n]CdK8XHrC2>* kI%Qפ|@F,0u42[:m0jE9~5a4JѡCJ(%J%[) p#RڢV"ig040H!&Y{#LPżNS/:53ڡ`IJ0bq0t<ڬZ XZrG: YP 냳C{g& cDwSӄXKrX 5וqW#&AQ\TlWB? ,Xv5ѓt\§@x$_U[0-x4b}+|$̰)Ɛj<غma~ faNHғKX50)"phSΌi%l $Xj^K2Qs7ƒpjqPPp$ XMJn6F,:΂ǡq&4ȼgP/-H`dL y cN9LGw@5k@#0E6KNc1S=k|T@ %Yش #S8%c#UM9 vL<ӡ767=DCHLte4( %ʐ$N_C 1yDC}&~Qr#,x.Yj`T9–kS BNɖD>=)}<5NC}x&)maGHeC:q:K8l=p\HVf 0edir`&f #*^EM)٫4%UND4_uu܁s{Ke$+U6'-9_]fcԴe!J&JyEB;M&ߘ98D9#ni4s['2mB+]`&^2 rR6tb <$ TCVLG Mb-J@/yAP'Swr,κGO{M҂ǒI ,"֡LAmdȔz\}Y9R+8&.A_S qpHm p3zF4sT̮v4%7(2%Q*}.5nsQ %(IX~Kd ?\4 혯;%TN Ѐ3%3'{XݏGPIص\2m:--RNaj5Ā]g"# ] Gspkyc^K,z zh upJBYN-ZHG(Ad %j` bFE1@b&إ˽ )D-@`Ex\H L=SL ;7}_$E3F"`&>4(!ρmѿDžpu|Ӣ ?vG]@t&4ƌjZ |N8ZDllZ(=4Exa\!]qP4lCG@Nl0GbeSk\TH\[?6({#uj!R(NJJw8Zq}Ȱ;gɷlt@@9wZ҂y]- *Os-p?&qp;h«)JmQgma#{4ELW|Gls51: Y-'ohx$0}W$quĢoPbg.SHM;"(`dcJ3"=#FfZk!. k|c撺GRK!Y*OA) e .G4ŴKM*|vL^c@qW08J|lHmH+F,Dp|:'DX 7]Iae388|r <\RBmu hpdL$kiS&UWw){0XT0z6.jW9s4qrU䐽 /QWh%[DNs(P!!4(B_}Z[<]f-^PJ*erAfA3~Ɖ] 01E"זJz_I~7r'2{. #zOQB9{Fs զQO^m#`R( >S_a 2`]:Q4*6n.;8ՀR,݀FU.%/iI0Q̈C:g^R6<5x l3UEL‘ӊsJM%TbF (O믨u5BX.U$|jr yNJU`,Q&&ο.aXOI('ghx>^8GD *f(U{"BM :J5X+UiEr p2NV|ifP (,d &ǤGl m ()ӑ?,֕DƊc.I,A 6YҶQ<&j4 LrLidS>9B1=D~T=@@f"R_}nيeY$:ruS$K@mӦ' HghX@iv h. Q+4R eZ{΋BTIK5vH1+r! ,8: 9-"pn{y٣Efpv5pV-]MYG;a޸<P&XJ"E|It& G:iaQ@FPů!U^!P.Ә]XqdhuNEniG@3BZKN: LAlCU`/*3%t!7>;AhlXN-u4Muѓ._ZP`_j". B:ڮ^aYnpgRlD$ ء HA)SâօlxĢCކWHN,K @[jf%tp47S'WW xd>\t.pQ'&Jrb³6p<ɩi6u55Fj#...Syd{ $LjZ1ȭa3EHgYpH965 cTO՞ ; U*m19V'0hDŽ" 4.#*4uˍ@X p:mSJˠCXfbq6^+ .<P`KI8:Unȱ9%SUB^ DMug  1)tr(͉.+HlnelcP^LnHfj)]դ5V3n F"uHv8{A`E-pJee}t*/N:'H koCfɁǎ Tjz?E8`,8c4}}JG:ASI^%vz>H w;k@j_I  JVS\(QJ7yJ琁:@}]< -}NH 14kVclLAP3샆S&hU0tni,y]qTO Ԗ,9dnGQs$)q1k#^-VFt#b2R#~6apA2S9U!# ITEaiCDLY0TzKE)U7<3A-i.LH^y:.ixlv\A05 G kBb@ûqXCpKJ-4y6y88G#xd3 Y"צpu:do],; Gb4A vRL"(<$LDmx0r@l0̅O]Kd;0QV LIbAX(7槈Ҙ0@ љJ.#q[Oce=;_QMpp/pkseS*KS( Z.˨SJT@7I$)bj/}l(R.k✔G9Da~4#˱-촢DzlV۷c3wX'=%^hHH\a C%rC8O2E:iC^+%Y}aHp7F-X$ՁKU<%VL5a>IN5t$fr!  q=S-U1RH,QhĉQ.4Mx${T",S|HCgTSb%zDzIkL PX&s%B+qT: Put[I)CNxYy)Vt{T )H;16KA246`h0K@x`E8pRp\IOazE>s}x0׌TNtQ9]aH ۤSIlC ԷjJUٺaѱSC4|4=(_eZyIo< Z Ęz[c(R86`V(<9jgC54'ވmer <o½B:H'QbЭHe'~q +Cu-!Y_ k8h8$Ax^6`}&aIVj$#1~t嘡+3n3(|-~;|v8*1YPP]ɓV' ;bާ8\-` dDosUT+Q[= <R]s4U7"!C)^̏o[n9֘YWU)@DShbb&puV!qJdO "DG& yL zj7M.0A 2(3T,Cr×!Td6:)uR8]&]C=f,('90#*ъӘC ˝r9N wT>HarXnH\,Y#Nmlӓy5Ҷ1WvGCy!BOM`9+fFT[:i)#1h&))y R*@2;ILڄM NXV!'sbwÅYTGdc!5אuT[L{CҪ4h1ه1\,]z3㑑&x(LÁdF64ۈu(x5Re►-tjKD8- Ci0*P/q`b #K'cHQA/@ ^$;d@@AΔTR .)j;tmphmlk0Y$Tڴ Hv #S-z@mys9xLT~rI ~|P$ 69aM, 554w 1㒯f8摬^4tG/V8uQQم%eTQOƕ"d/b=2-FS3h@ko7Kms&D5p#\~ƯCK*ts0t@z}dț@}9 !E@Q`gi(S ȵؔ59ͧ7z٩Fi2i a0[tؘD<4(7- 7{FͼڗQ[h&I)*p Ε9Ǻ3H aB,'z)0#2&'^ 6ijZbP*yidr0\҂g Ķ&@G+Q):з¼ swH'4Q d`: WHCP9.!Bm) #w,}LmF`Ia{Q;zfqꍩ ,W\A]T*'jP-I=(X݀l(6q4hLp'[&RQ<s^6PjElN@.۶gsnqƈiN|[d(#l !3H0)2C#Xl&eRE[kQĄK'l>`Fhguih2Gc`F0CUo%Cw[-@$hCv0 b=!/=d?$ D}' 'mϲ@PXH:f8RU 6 46 h-T#+pw75.!Dijqï,%2[}!Au!aB20"'F#O++ӎX\qT|z0fxڢl5ڤkn NcDgtZ gw\(tDA0 V^I2$zBă:%8ꦙ'Fӽw {:xbӛc:lElBt3+7x^ $bQf*WO[Do;jkj l ,r+PWO**݆C{\$ K4|GEVglC}e  &.+a cQLzH-~=tøE һyV6C_,h`1,99zByjYLA60Nq4QgW-j8 ܞEc`ZFv|z)1B}nhr;ix!֥퍬1֛ sB@\[1 Qe;/6Q mñyrYYG:VM:gO!@X4thok' PRĔȈW܁q9ʖˆKfӌrFJ0F@JJQ;Zc<ŢAjPRCWK5G[W Ӕ k|U1p׌v@'2S'¢W7Ocx,VyT13Pr EUM a [ JSDc)ชEnLBN-'dܿEJB"j(d;-FI| GMAy—ERW &(e<<+[&V͢ <,t([SeXcIM&YBoAYn9C Ml%R1/n%$ ݚF+3$ i'2:DR٢W  'pA TR`&B8eieҤM~2WA8ĥ ^@aS$69UR{(85xcirgKKFߡD5Hٚj4O+ӃۍV ߍ{E%2to.^M K52'1@;9$n%+t3q{#mE(׽&Y[A֝&3v#'ǽk,u>p81jգFjt}߿fj&AhҧJn+`S$Q//k lUx:{슢"R [m\jνe3r@?AHfU=Q&D|FBxw >6#р#P]"̉],RGt J1`D$ +wcvE#I*$Z#Gq9vGV($"Ɍ ɃQC}9A"H[^WNQD`dF Rv*'(']2k4W+vmP9 "Ԣ.bX6}_lvۄ= O{@YAvh 0Q̳s5U(M(Y1N->.&GROa`afTpYpsۥYJv ppJ(8)ߌR1~:ƋTVF4Xq"5ʂNf[ݣ< x}5 CՊYѴ@)5fCZBzyࢄ\-Ŕhpё5W)1BMU3pۥ}>LMOY4HG|l8,h! x$W3MZxl\+ 'YZ[$„Lb?r%ٚ `KX.$6ܜqmW >SРIlqUHq&fHÈVN0%jlԀ +KI 54-8MO$Hߡ7R=p Bi+p0Z4Yg0tlem {j$CA>,/9+^Q{j/$=-aލ:[M*'U'MZvr$@XBX$s A ʰkpT9)0 #Rs:Y 8͈ΩXn4B_`Ĝ@N)ܥd-nG!OQbPU! *Э0}u".@0Sfdq(-("EYxLrҋBzYl0I-Fp$cw2&u2;!]\6`t8Uw GZ^k&fgsHzT){ zyh^ȋܟjAߜEn޳$$V 2Ęm".B$'h;GG6Q'֜"{-$& 8$X=K:qu5Oz;a:@ٙ<@*ZGm2*vdOe@8lG''!|#N̎-h:`Y,BUSxQ^J@&+YLxh|b3 deoH4ͱDG[Aac-CeYT |4bҔ';U|"RMb٧"q&'J/i!rip4G==eZOYѤY%\j\"%v^@f#d?m, tCq<:#M90y S+DRr j2ttHtiLf1vPWJ HBH>hwd(ɡ],' N,h;At=Nx*'X1.H [vX[xtvm]zˁSrP G@LXA$0YK^4*Ty|q6d" ןO@/UX_PV;~2aMΤ0bUxhԶ>?<KFD|9!_w"f3Bft4;dٚ! o.)^&5h9lQ>Qx`~SQF,:+yZl6"2azʀr|=Ckѧ͒[A!pj(cX:ucBA<cP^5 ^J{|\$`Z]كO>,TNw@ُ~[rQx:\iZg #E:J@~PA^{1A,CUd CO\Yw)Ho8*ۃclm$#+'|x:5mV)&xE, ) !<'7btK0i-G͈)F % _sҏ{Dp"hCˡݮ Lc(B]*@,;rK!irH1.a~~Pʢ6 y N'ifqt{L@.6 ዄW}:*v"hc;-1updsce C%z~x[$W*B~d]o^*&o^1&l4ZPX?uئJ Az HDv A!CV.S>"_9`6,h| U`3r$, G&:@9'oN7T<.D~,.[$×Íi(lmvaP퓗Rp`8`~G`W4P %o >9VdD45k4&cбK]z{4)8bG+ bH9qtf3.!x$ѢFj!\ qJs#y,JT;C<=@{H@uOj-1[uFY#{ 8 Q`Sv2 AO~.|,<+8B=?WAD<#bi 4e<C3h@P` 9g2UA0.LjӰ=BԌx[*ׄ9mS)ưLݒ36O. Řt>j CO YtǩUA}4oĠVnIԅ)wRRR2SA-H6ǣiIx(K0($ 3}*qLsz'v>.ZJ:\F{2џ44$xT!rocJNs滦Kݩ`j IMOkbh'{^q ;JCBXMISd +u_B h !~'JLW ڨ`75W~(K  (k t`('S]ʘ4@7%RYjIi_#|/t&̸ҸNxJ ( c,b_15LS-+Ǵ=:0ntDپ|]6l6)$c 9}uys-\_45)$eƀ 6@ &V -!;Zt a / %l)wYS$4>Տ pSUIM`VKx.qMBN9 =asjV-] "P7"!)f)b(w ql@4 n%/MmTT.Yt˽$Oh@@SCmÒp&ZM`KpZ\+$40Ň}^e̓:_#cL3iDPU_~#`Js:L@Kl4V!hȶr0un s MA; ǻE΍tŜb%-:qTA s-J㨌ՄNPB(S7+65\qzJJUs7@L,E|TJ Sї8!u&&0q57#R0!xyZbdtX%CJ0S"pG,1u^JX.[Eɰ5'Dtv Ҥ7(尝^ܐID"4HrWt8~9XS#R#Guxb,2TUvL0ve!~'ZrZG(ܣ66=A/ e 5(W}TFG8Ck)Vf) MxjjEKfDDZIwYK JC6, airQ@^(VB} Xe6 E~Cu$F^L[fIf@pS0CiyDOahȣTᶑinFLMt!k;aG8(dЊ|"ڧ3ML>!NTcS1tԜe>TusEfkLJJ!E"4Od5!]8y@Dp!H"4j a2,7Fg9JbUmh+:TyDp,L| DL6@Y7nb^T!VҮMh7XCg6gji\&"C0ĉ4TِX>dN8j\ف#H 21&I&f(["Gf,LMP2 nGN ]92ָUÁX,HC7yMIs\ryjJ|Z|DD72 %fL Y/Ĵiw(ѧ RTZa9*HE3|P9De0!LBԦts0<0yPw< 3MV!ޅ AK/&ǫ$t09.9c6QČf*h3G'.R07QEcb.*S}r8L ) r/i Qz+2K?ht# h|=Sa擡ztA.T/]R ,&&k.+2@[܀|!W{\XC47OnG Ӳ<~,ȰWq'M(Fx-nrXjk`WBaƢPxBKq#qz`~H ;.r*-:q\G6M$a4YNA9'2zF[ Eg-Y^4D,1<>FRJaZZTRhB"a))PAfk?r˳B@T,`R5/dG(lahAJ d:} Qz8DhKV\%DLhq<`,/81ώ**'d]TbM+ b)\n\sp+v0 yFqY t(-+ a:4%9vţ$lr-\A@kA!19PW^ęEy`Dxr7e #:pJzjLͻmK/ׄFпسYYQV¨1,K"AĒWu)Jh[T^`4 Ȱƀp0RvRajdC3dG(Azn\3`rԟ_*2f_Z759L^"* ߽҅IkjMG^t81p%%AcS(OgYqXeh|md*n愗 n_Q,'"ߎB5eAs"*Q]*ZJ: q&XК x'%9sL􎓷yUH-J &6_V<OH Gj79B14 ʡs 3Grk*Ώ@Ȇhag8 :1+ee]Q|hca - `q` % 14SV-\DqPwtup>dfP0N#8DD}yEف_e&=u3ԢIn(!-4Ÿ(V~J R&*Q3H\S2pnn 6|rQi>M5 `F+k G &?b36 .= 7"7jr fRuEab{XNbQ3x+d!Q>,u[Ek O^T`DӬӤ&}Y0CB .b?Fy4ᯪaڰx4r AۈCuQRΞ(< A'!΁33P! lu,@d9lMJ-EgMy=qj]BSY8Xu1iJM BƱEJL{J5|ppȨ#ͧR' 7'| :K,?/EtroRg]"LRy_u41@-9ސ 2B::WCO " Fv>P`VUXٳ<-F"0UEH8{pژ(\{yv~ P=PsBݫDGMqT̜.+243Ex<|![J9VQ6NZgi@1u4K0irKqӆBP%(78@[HD7uXs:+ 8q+u>j39n =RJFI2!ߙf',eWޮ,QO傫Kyd`tC6 ,gukP8OC0٬wyA`H6iY`Nbj zb4¾ 堜}ꉌytD"p2Ͼ.MMU\= 9G'D&hBTh@+ }zxZLI7[yC xn C>CpQd %o=zN8W\'T'-ROF,&-Gn <ͣ6Ԅل4+*#~!)P> [h"<)鮋WT1#ie-Nx)jX1j᠀4hE@6 5&UcҦ u 4Lʴ3FɡV|Im:~38Gߖ&DZ7qJghDQ!xJG\j2H@1 1[) O1nV*s^< >H \=lɓ#߃>0 BLT"&h̝󢡮&=}(Pp(Ic&r˅g* b< aWc!']5`h L\z4JlQ1cK)q`ܠL= qPXjU@$8JJ# nr1PN: B2_(톇Ł:/IvEPŚp6ޠ %/8Z:nl#u` 1srH7(%mOP2a`>?ᛋ ~4].Ȧ}>jm:Xa { L40DAMd!f G\37e^X^.viVK1%]ĝ\nb>*8,%%׬',o}}VD; 6 Oy|8oN[B#]X0ѶwMtrmDB.ŸI,@.LlZa#0GCRʜ7h$Vdf)Lk1ΕD{"QE6I!~(/Tl8UIvwla[ZR~ 4ZJ6&d`\HO +Q{:Nd`;pII 6*BK/(paI#?ajLQ}XzC,O>CgNty~V^э M 0U?Ƣpm"> GE}%\1"[IGUB$9knI@l O*^D. M@3\X-X`km( 8"8pN q܎EyT*2LX4p-?6׷/"b8\JzJGLa8m՛(rn:zNrc(p︋,L$9-XH꾊 Z b"J#mT` 4yk+ #w0 1鑖-uDWC?K]A-e|!Z 6[A[`z{^GM]A51N9sOg~e$cͥEAyHV bWI'j `tEQ/M@&@0!dygpq9IUС,QBQrC8TR!=J Hj ~:ʌYa[x&%2堅>i &L<NXZ@V’ou8B1 ?XQ EbAbM0Qh[|08X$rͦyF^ۣ yBb:PĨ7J-M|G16jU;Qɪ-lЇFGV> 6tG⢇;QrB"ʣ^?Q6$깘>O!R¸0JX"*yC;rʚXh6qatFp8e@OP 咀$)a)Ӣ#xV=Vg˫5jCuH^.çbVI!}t5#*y;TL> HG:/%pj?UVC |+q5C0G8djČE!&˔9f ^ x0`C.uV,(liA2FgɟWHVdTڒUhZ#0֘UuGM1)mb> zTeUI] L=UiE3~,; FZl$݁V1Y+%|&Խ&qS)ac@QwJ<H #w`h$\BCv֢:V6#&eyF)`G brn1hҳS֊ $4yAmE"1t2q 5:=SœC R-4{j@=` zHW.z[j.QGq_3r-8ܐ*1QC $9rCB26dР@p@֛'(4DbёXhPT<'i hDE#)M>qRm?d2$TPsV'@"?a8)'ͅyW |HI<" DΥ+GDBO6cҤ @p'J *PLXm L6,5:qX ܶmti+8|qGñ\Vx]p/$48mzdiFy<kܦVgNRvJ {íMBWOQv=:t+VOhJ RMUH$&jb+,ɁiYO-holKodC%ML1-]ђ/8DEv  J㉑T +f|X %ڍ@KP~m|[TX Fmf1LzExXрScw⌆.G5%(9ʤ㈂=! J[^XaLn S QJڦ:Z@]ڙxxFx!XCCW؀ap(5 dMY1(1Pjna"9&8`:d(XTΧ6Ffu h6N|蔘,= ""Rr9\P8ŵ1vɄф'R\#Ѭ {%MX#(:c`MoZJE;M}GHkɣ`hPiTG;Be=b/rF\[L7GUkIr"Jule)EN-uk|'e2@ly#'!Y) 0]=ĘuCrsfc{|/:R8\-QғQ. #DSr8iK$DKj&(|B1vAI.N`pro݄:Q 7j$:1\$i@4少о6.~b#N*I0U.l#VWiM|9P2em1N42`kK{Ju},U'Ӹcq@ 0Ϧ19u(TU9<ba:?qC7dƭ ɹiPJ"}}!ՉEX@,!fT״$vlS6l)cYxA˻dʅHVgz\qN g`_-.2BseRCC 5sHꗞ!&RBGWox!t2@JdX3  Tv.r84]qdleá׳4T98!cDElS6q,l\jg %^yR3h1VȢ4P%Vj ~ ^wL| H9dnA I=(hB,9+"%􆰣Re15- c#HP>=yĖС3cʐ ]PUQ,d˧Յt!pWأDr6Qd <]A[LyΡntӱMf-!zߣT@.eCMzQlˉ#rM `GVE ^N}̑Uς#c2 rMZ¾)CK~D*蕙,>X'ji͚0,ODϢhV'ٽ!=\X-Sq^0%@Rg3}|`xز|<h&TVvA<[]\܀-F}fs7Q Lmkf;RȆP첦c䠇D-P}tHcqz4䏠k #U8&G},?#} bY)J2 v$h4Q}BVV.ԉkefn esp 5|[ cK'-Xre 8{$7(- ҝyo5?R'#ɂs)Lŀ<X `yrn5.w*SvQ>u#dSAY)ȣ' mGUQya Yy /J mGܪ6U> h ԏgPt U4h;PD2I8!Taģ"t7  hd /B,|-2ݪE9WۤI:#B/p.0j0(UtC]qj좨%ph`WQM݀JxAlA9ɾFW0&@]{NەIdFlB^荨QMP p+$,=[=7-8!bP7c'rq<'RK~ \@|.9}ڀeYC";$8hw[ q{/`Qofկ8@T7#$:5\e&FH!hsH0Tޏ z beHCte#K3j P~J<~0d܅5CݣvM$8$y@&Hpr$Cޮ2 c <2%4{B=%M*jS80ry߅UfR,i:!TV9!Q$@Z"ʰЫn 6-]Eӂa0`R!*a- RgIxwYfXv{`.d՛+ F1 51aLZP Ð(Q1ZJP FBشL%4\%%NJ:j'u%zf%! +~|9YYp@Y(bF+.&h$N)LG_ŜWo͋yP҆Vv>{SldjiyTBKOF n`06iH[W}l3[keH*.%`J>X9*C4LsK\eU|G#O`~N hF>Rff4Z\+bMy|rqqnXŠĪD! DN]åca,$DuXsƧ B\%L,L o y ,uI $dNvs>b;M`Q5!vp:tf:y?FxX_9~ DTV()3yT1pQ8% xopFxըO_h* r$bxZj+.q,rGC@9/p~b䢁k:!rKNGyI(1>mp(xNت "i[?>̊)Z%"}`-W3k%Ɓ%#|Ȏ8LB]Ң|\T6Ӄ)"J S J3Ԙ6@LacV#8x_pE1 ig=qU|f2g牥_6|z 3.7^KY*2ʲ֗ZgS[y&m!RqlBS=B]pR=䥇H"UOGu Y m4DZw0-ɌFb5sqX@w )o$!idl3?$|ᗅ H-'׫;\XH_4~&|GN6pD|P4K-$=t 8P|JQ$ B]ռ";; @p= UNp*8WyP ǣdȗ,K跍 CnT&V ĖA(*)3ըRhjHbns(n`+{&sz"2YSwmd'N2qu"i+:xLCB+͠C$Gˇ(j5 ߋXUd7wu]-SrZs)]J:;~.8bR;P7jeq+4GUʂH7$x qY`@T*a")fi['cS6|3-;$T<^]h ŧe~,BZGNFܠߍ ʄQw?K$ȥ"w"DzF;*0X ?5f/^|1<މR8h}=&*7K]`Dg9I3vՉёcRbP8W̍7 P Dڱ Kv0j ֎xP8ϦZBD7i( @OCL!XaRNTs KGAս -3H{@*sy` ԁ%]FD8( B5%0$hāV9ByɒN[΄pL\Ŋ46Ǻф00B|v|Hxm%\+KJ&%e+.eOn:7j5ckju9v}V6 03xgy"3ܧa.$/n<2wd73# .B0(0yoQG: 2`JAE!cŻU|~)$n2u:R)(v5rsv$`e-`8=(ʽv=yRBťfz_lm%[f64!0l^>ȥiP~JzLJ( /rO1rumtT=C(XEq1N]T xP|/ŅZ& d1TWa,&hqƪM_-XFC`MƲFىET#@T6z jy xU躊> ~,`Qq){ CV=M m5+c`- 3*>e׍iC@LSD$e~i!)|aHME+=rBuA E%!(ò#-_`v$nb֡O(ږ7|=6qdypSXEVpO gĿ\@l ]] v<% ' X%w * MMp7 Jd3!dOMUD\TQпC`( _JĠ? P5078F-aA>V`Sl_l \i_@/&> BhfάqP gbͣg3j~IMa7A&M}a8aSlLB,x1 ڌq*)c:[cFuf#3I740Hk4:`kVӐ@ehoH0 F;^cZ[\sB ~acpIB RE9]-(ȻM_]VZ/XP;^qH60K0MV$4E290jbw\/~\ L; Rv6Xm]1 GCNm !/.2\HL3AP ( A4@бYd^B (!@,!#)&tƞ'V* عc3iA/iͨ_Htѵۍ0&;UpA=H[^9qKQhA*7O$pLpp82&F 0`4abd O+Jb;q0V*V YdG%.<_3RO0rpk0A6j$fpwI`LM{A\')„e&-^rM1 q}䶉 qe^> t xafrC )\2 {sZDQ駠#L-b1$~ IpȏP,|1pZ S+aI6Ⱦ$T[>&{##;94/L.M (pI>z_l~߮uov-޺_c/OKMJ&=S禉}3_*֤cO/IKW j:C.k3UK13g;:g'Gvp$]^~ҟߞǝ=bow'~ bj5O;#OֱGӃJR=UtJCDT%%mi풪tLR%.OJ.HTbI|tR򉯗OҺGJ2Ͻ_4Ӧ"};| SNzWjw5aIꤥ5J,H;4}=*JsSMHJ_\[nI*x淧5%5GRvIS2Rh޼7mSΝHꔑԮS /׮Kig'8{?w5n(hYѸI פ=ԶC[G1gݔ/<m~pYRK7o[~sE7s U_uWWͯ}/ OAR ?eWWo!@X/G?n*\o=[?IiGTuֶV0a{o)AK?Yno)]ۤ7l4H륿=?-~m?ۉDQ"Ń~_t?/?wӱ'~ Ow i|$(bᵤuKI񟼰ĭR_ي6H D9޶c';9¿w~GџvB "ģ,?/IZZm;@H|S#9*q;:~͸q7_8A񵲿ڹKk"X5!T-qj/F/ g$%buNicqЬV~F0r7o,77oޢl,C䟝evWajpժ}x_.R:&?Ʋ7ּ}ZZ LI3+&$ IUk$Fߖ[Rf}N]da8]JI7ֶlfՓ$OMcV.F_~qUiSKZUZmң6v3Z't'{ꊉ+եKNO(yxzJvrX1)S?ęԥKM6=Q$>%U+ƋF[-VwM<N퓺΃Q"┬Ӱ!ڜ.==_ >sOb⌈>j+NO{|/^uFJr1ܲr'N7oJRt-3DC.c&,_<ﹷxrL-G.~quK<:Sj U: bރMnoxJIF?=ߣunrן%ϰD#?+:B(w-qFgN-=IMjU(8hxh)%5#3[ZK{&U叙~n~zJ۔NR:K|obN?|ƔIjկԺgFGy>}6|/BV8/6\'V?x*,Cï{rMJ yȶKE(M<#-}:u\  uu΀:H,qVO޺/1~R^)W>\o~Һ]Y=ug nɕ.|:+}bI7왕+-)+v,j8wzo YR ?z=w]K}g3训Y@sv>tC=:[֔i j=~f걗-] =kSf#ǼqZ2M,ovlg~*vښ)-9nciN J?=YK?oo:Vwei ˔.U1L?ӭҟ45ayc>jR2v鰤øgG{mڗǡ9Rshۏnpwnݓa޻J+ 5{3sփfn!X]qƭ=Գ-K;vՌ̎KyFl6n¼pR'vXuɐU/ΝWۥ ^ܸ^Y/x"|UO5slȒ%2'V|~SwpO5?=<Zfww>VXY؁=gm*o?q[Zv[8=Ӯ l~W>UgޢR՗~M/ L?}rWՅ}G]Zsܟ6}_ kjooaTyn+~fo-^'3>ƛpjYʖO\1W߂/6oɟn͇R`MZչ'5M}:iGvOo[?x>zWkgl-CjUvkuSokaMIwQ`EG=i΃::ds?vlfͣvA>2&</p'4ghʔ4zүٵ-AUs^7꣡xe;ٳ6y-'s>*T{i{NΞT[ZֶkSkݜ?5hTnh+d=X7<nu[ΫNwհCO]huOg]\-%_YDأ'nrfߚJΩqm&i;͢?Yp臝knkf5W=pJ,] ?}Q̭XkFη/,tKuŴ>ʽC+v/R|Gکsާ^vr[o-qӆMް郫{uژؾї|ӯyæ,="ko.{L;!Dvڟ2;1iF-geL9_aE2*>kSԛ0X8n٪ uOrY=.b6E9`ۏ;^SM9ϯy'~=9ôL fv8c :1`JM^n95_>y^~ɵS {^tǝ#^=;W{;r2F w-F}4|7>/X[wC&z_5[PUi/,r۔ |c_].:uo=4:c + ]f'_V,s/e1#W{>lw,R*7bp_[]g~}^m^'/8d#:M8lOkѱ9ٽk_¬~[:e*rٚ,=Tg2uw0.S.Vo~Mn@wǶlɩqE.˜Grm<*yy;S7:^NoޑUjdϏO>5S_rY?S_6FS6kXklj-K,>tj[j3m9*ס=u}+ik]xsn-x-ji79eXԎ=N _>ecr?m[ʺu~ɭO[v"`ي9_̓+ ̺}gm+5FMʸ`Viۊg8ę^yÅ׷*tOvXdͻ Jj>:o,4=Ɠ^U>cu>_;D׹s=ezG/hvߊ8;,}i#t=bC%0?R5μ7M{oE6:u ~yqw V̘_W.{ͻ-{ʸ/%(WKJNwo6k>8Xك_iVr;~UwG.U?]>āGGgػwх쫸M+}joثwH1ԉ 85X\wuw ԏ;̌󂑙0@;?^!%LF=N}shW'|1{޶ O/=^wٔcRn[~9{+we_T_6y%%d-=hΘcj.:zi#x2XӛO689iǶkmum 8upcy'GX |i#i6b捷/ݾۭJߵ|YyH[ !||7;n 6]^xn yĪ~8gGN.]yrSnb_.}G9Yeu{,#t=e/{+ϮfȤR_^wg>zش[oʏ1g]V-2􈿣՜Ŋ]?gz仧g}x[O |\EOc_U#߷t%Y22*pz׭^S_²:d|WhSKک`|ȍIwTmuzʾIphfѻ_۬פVᴣ}g5(tߪ[v:}ksf[XȡRE6m1F|}uxx-+s.XNΊ+8Uu:xkugo;_|M ;=?3wГ|#78UЍ^=yȑ[.}n[ϭOj_{;~#2!|뤅o5}~ég?8˯ЩK Yt6~Z_,`?gUӉ')Yi;v@OgeU>kpYf`^#G䭭V~|W3w檔[zY󾅛8<\gO8ּϧ{{NY7/^gwq\pau'v-eÃ<IUl؛w4]k>`nٌ}d˶et)mgP|Oeegy^;l_}֤F[v[>zIÆ-Q-*_ވgo۽]fx,m坱͏_g|_^Ua1SЊ'ova>_ٹhK4{`~ZvzaC&\tYJ^̘ux=5Kkͽ{侓lx~k}TM޴*6];hƅxF ^&Ƿ/-7d@̍m\:q%4e\uG2eѪՃ.\Y';<{9'|yI߷c~>[N욐0gM}b?޿ξSJf]'ޙ|Znnq;fri?/\p7^|W~_x*+^5+%M˶kz-Kl1b^6яrte8&XΓ]o:z[Ym,^` *m}''[V^ ^!Y馓˚+q{:|cvpkZ_enՓdZ.*cU]ҫcծV-eʔڷTYMG?[Q;Q=9# sO]ӥbM?9.r6Y &w֭{x5Omzlpb'͝qye Zv}KڣO6a=>coV/mxJ6?ytGn:Ԣ_`T'[N9[5C2{˜{+?N㏖sY!G_5u3C NW8aWXekM=Ueљ3n߫C*^pqn8Ӧò#o7kb4||"Uܣ_Ǐ0ٍxrԴ?|;ZK/yUwiqAC^Y}م>_w_CKMQRߦx伭ʾ7{ s2aqv~@Y ֿwKmy͏*pwirgU7ܹ侕B%'NfjjunZn=tфUݼ"`m*;^u cNɕl_amyi2͞9>1[gT[SozaLc]?fk: ?s&/#pqt;|fw?}n{r}xxM[ [UNO]t]i#xs֛%_ٞ^Z{*#Yjj{3_t_y_(Vzrg.j.(w^?-kWub{1MS<#_݃KUcxJ-~`x]3-*?̼i:>x+OڧkNh@ˑ/$'{fp fO\kTy )X5 a}_Tz7־gb.w'0-o{ʶo9}9sreߒ3|hWe': ]4/ ?lR4CZUum[/W8/.hZHͷ|^3>̡5ΙPXͣ'sxw[o?YۓUٔ9W83gVN2ޞ|c-z)_ꉴ7Nܰ$S7 ^X+r$'_2b#ΛRdkIwg{ME>U'\Z+r_J!meOwٻyز[eXnvr֟i.q$뮽sTY25s7e~[rͣ3O-p39ȷ= ۳v0yg҇FPI.;@֍P sqڔ>gʾY{4/]{0/ZpI[.k{-.C_`Z6+='l~GjM=} \;k7ojhr{{τGnoX{={ f˧?V˺wR .]ԜLSȍ%Vjm?ku7-9&e==%ⷿ׍ܻs6jEo23jVo"sb+x[E|Ϊo!Oڽ3I'vȗZcm ϗ!{p n纅3^5hmO.ݖOM# 7ws[Ucϯh0⥕iA 3 YcoTJI ~rKW+wYO3=؜O=USxo(׼t,J*ygw}㷪4wqKHɋj\yCR7kgU;6|Nj?|Y%Vt'7}‰Wv57tav>z@ɅN.ץ\٤pkʦ9|%?l}Yd}Ӂm OW|Wm^~_Q;~ڭKnrIT仯{|a5/Mb)ßՋ.QϮ.{Yg\p%)%KǾmVsvT!l4[^xՋZѤbag;_0~S:Zq,}uoL99ǻj1w|w 7/DcIu.W|ɡwᇫ=X/?+}wyrywNjN7{ >N2yB+z#ㅙEG~1[jucWre6>|+wn,w+4Ao-vfzc9p s2n񩵻uWvl8c'};ׯ{XiKcn=u*d34W쇵冮EqO=.xvlJ瞆}͔{?'?w/[1:Ho^G>iܛ/?sÌ7_t 6~Lިo}5m-9yئu|Ů;dfSM7\\Ǝg{±:~禛]U~ޝM˯*?=~xc;wAi_ewOIo 1ԛce-ۆ`9{qyWz{[eNm_8Zɡ̼i{ڴ.Xΰ EμiΗkг_>vZOm镾{Ev޲Kdhbcp7~gdoħw,_{J.*4m~gwʾՂk.pW?4գIKuQ}:b;9+k }xWxOf^kY3N|iKb=fp__v=p{[I]}-/,X7"ck=tI%{.7x=gWZ¬v_~oOlz'Z_S޽ܛṠ?{I7wWn\[*1BF?3=sTv/=WL[m?y[?P'ٔ|_ݰj땿ͽk;nxi:is;SrN|'=oQoVG- 3~6_fh9 n^=}' p}[ǮzVrkF;xe7w|i}>uO lv]o} ֕du0WNһnޚ:KFԙ۴۠WK/$?O[[?>v'Fj<=&ZUsA?uW5ܟڊƅ#qa{eUcOuE\ZVTj`v%tYvcOo GMvuJoF_U}ѻ?[VtP$sUUxFJxŤ[p=x_1wپ2mD|ji /Xq4[LnUt=ﺔǧ\Qk=RoOmWDr֩P_nm~a]RK8M?ot+|YX}B?uno<1&?}eu,yW_}nE7{ouϿV! ]ߤoW;s^ɫ);`NZZ.|1⊙o?zm[LZ[i]7lq)n>ӯ[_v#_>QֵK}s/k^tΎ{Ͻ[=?glza׿s[b3/=bnwXKvv|2 =Թ'0|_;7~Uo~ 7m?|Ń>U~,ecMp^]kxlV1JJT+ՙ/ _A^Xv/v\_"뭺¦M˷yUPޥo^I{6zmfIFakI/W_7 HYtn<Ɲg/r+NzqԺ}vc]Zgo| ƕ]<|~uW}W2O(sM}}v&7yUz63*ѡJg3y5r wZ ,=Oh&WA[m*RkTk&^ yqخ]|nΝӟ;7zwZ]u1|g͋6w|7&U\N [fw7`g:e˻ls@BE-Ϥ;>3zݡ x7{nT%x慒tɫovԊ=&44}HnVw[ڹ辖'_; S>T&_Sɞpj٫weozʭGT?mC3@rTI+`Z|FqA)kfRLflϐQzXE=9e o;`5wYFhQ&<c^+GL":%̒b8TA[ i* )'wEGV |۬uvfjњ2J9aZSn>Gk VWc7:R.XC 睮kh›|Dg`hz!L'0p <܀ A/Eb`9R # c3fI2sEFX +=HeL{B5"D"FZ3CA%,e P[ 1ȸ2J6̵ېe@ %tTP 9g芐Eܹa^0=NG!5E[0*֔ήLL,3(@D^ REx(7IJ(Z֤)Me_!0"rB6ÁO| NK XH,L&zى17P Z\)"P C"~wLe?/ f , 5r%P6$^D `M0jb<*MI( / }##.ƒtIWdpS?[d1ۃ/H#5 xeMtIhfPǠꪼ39Q,`$U8Z6Iܤ9p5xnRt@ ΈCy PLIA'E'PJ)kDq$;p YH6Qf8uu)0BBIh8E%2ʙ= Up j}[$&P$HUf0y ,5#K&-U9x][f[-\N~AY TUg}bg0 IQ:tEX`XJ[p:2zMFةVCИ+͙W,J yG2|tYTMx Q6Ev#SO6߉h)0*[&QRG1*\br(LX#Tdrڨ^ o[qS%z:6} Ȃތ>!Ikz?E)ibJx6g,gQZ^6u"5Y2fv:~WTq/{%kR$DzƹU]5۰lKr+D6CN+)n?v jf ͝5({HGլBJLȉ,ؘv̌+pep5I!@,iAt^hb]F0Qߋ:DOsr 6,W dy /2EjcNQU4É:j,n<=^[- o+Dַ:*Jq6P=Vzg }Ĕk%&U a3s !&B#鐜PSr0EN%K|&({b;Y,St`_zcWn z#f%.R.ʆ?JS&)YD :QI~|4*N~L$G@J۴$1 TdUFVVr=$TcL:),`z 9P"0k]H<%ҋK!E.Nl@ќyTa!,B& GhգW=[E4 9tPG@v-I<)gUUS :&hW-j!Ļg~<;S6'?MdY3ԊW3?=ǜat8q4gr P.e#v-$W9(&Bp}q4V=lA,}&cA;mL>9Az哓/a ,Yz{1YLDL͍i&B 3{Ǯ}0`l ( 0,hqa Q/">WJn. qS[$1dk|PnjWOR2A[Pw/QZU0o`ZM #^Y^aeRS:d°@iW\ 8|jj$i"AyGF4D>dWLwK`I84Ys1:z.l$ +_<ꫧ|pF3iğw eiTV#8H^(;2SIRN,hG`~ b./nIGI^ |D "o>zX+qob:I9׬R"mS) F%ExؠB*/ї AHuw"+9ѓۉz97̓3K5AbS&M+=.L bjf:UyՉE[FjDP{ E6+~>EĤQO gYGPCh"U{)Har)JYDy*7EU.Tؤjcxx]y/!x:OS~T*C cMdD2" ,b1^@ RɜT#Ht@jd/J <8-uߤ13XKTՐ^sTy>ϙ[iRs8"0U*(vې[=6jt^oW1IQYDP*KdnWęJ0BraB##1-הh$ȋo*+"urNjP2B&J#MK&$j=xK#-Kr%/bJvi>M׉mnYSP^gAQUII#!ψ$5&3j.@-KEL#KN{Y5Y [ )؜,TF1YѧLoD5$$bPKĐ4%;3Jd$%1$*&F xbE:yX,IBSqdTROe B'6@K1uM\&zX{dzb%?-Z~Ol4KTe@]>5)Q_,񈩣WA Xok`z,ųћ-DPxi!'(ƛ96c1%3RɻZ5tR\r7̭g7 \jb{BTV!+p"M%1Oa2hIf䳹WYUR1 wߏ y+6KBzAOq=s Q/GV3H)UٻSNeb ^m Pp [RVdzJEŝFB n`vRđx4Q/PcFCLRe,h$e-N~ȠޫNvT㔠iur*hzї:QE3a8\y Yη1 '|7jHA?V&V2L%z]gcJh%s;¢2zuPiTG26kV4VcZSR3*j $JR C tf*d N'+Gԗh-2#%XJ ɦB9O)'ę8yH*]z6:dH2<,[4Wi.7w*#VT\Ye`UAcEGGq$]/jHD$7ҵQL^ \`qc2?t^A&!tF2WFiՅI-!vT^xWӏy-d*Ћ*KbdNu5U1* DE bY]?ˬi%ӆR& ּw `"?2bDsg#k#6DF16UѕҬgh޴ndjkKA~(8C*hQ0ʹ!R kN=ꤒP$Ý"֬{I) <(Q>e@=rPTu _ S"Oeu:U.{P 4gpx)gii]4^H.g?l Z(E- {Nc(rܽVXAxJ#4[==:h 0xAug#6J0d9gPqNQ Na;!DIv@IgQCցީs9A w P ,>>U45ۄ%i_D%&_gTG] ::gQqUJJkGR4уUe@Fk,Y]hʱpܛ5 XlJMa=X1K&6|f1h6MT83%c t4`Duc {ev=t0&i4(⨦!VTZ=t9!:不"BȄp ̛u."3l2`b# I0unɷ  4zS+<{1xXB( ]5 ?PNُNJjayz/RMx>9+T-8ΗQq'cKB N-u#^^{OWةܻ<\zv5o#T!{?uc=z%b$*hF* LUSݢ*^} Jcl)gF[̈́T;eMEu%. |dH#ayQn|pݛLpI|JpNgJC9iNAy(Cy0Zl f@2]9GlTtԎydL)&Ѣ~ NUJ*H"0cUD$ﴈ2hPV=FfpT^Ny~JSA?f26_;d{Ƞ޿]6ICT5@D%yKHG`F.|f[\y;$3UW&֎\(XU];[EzCv[ 1~X0ȋWCS=<' zT5ԫШv}W$JU6A;EeDѐStX%)ZPUt Dr&n"YUtzʼb|e9xVReni#;.kWe@:(`!5z=`F-$SC#xa4 Dǖ&E`KB:ΣaI <=]"&PT"svKzDífi>EUyb NUkB^ЊPvRe+$}ǁb F4tD-U}ԣ{#tdE&fH薷ݗJk z ~%e|`><(T-̊9U)bVxpB@Fcxk N>cRW'}q<cN-M#YyvB UOIg0;nMI(6#!QtͨµYUFѣ_mĢp4k#yP=bY|!ipeUҼhӑkb؅aSQ'v^BXI}7EML!V/ȣUYبZ( 6RdZjKПr(gPY/:yVG o)G=Yc$iOPGg`aBJiROaSW/"vJQVup20E';/ޡ$7Yr{9r VA݊X6vN/fv8 `FNlG$R4AjQeyJAťh4Q$$xi:D31*9I])E29!LF7MP!jQӅZHl y%3KE:S }*j&V6~o4[YeYB'cÜE7OhO_E)̧"=(g4/`:׮3pC$u< O JLDAuPWk28!GյL,926b&Q]/5AS .l& Wf4.K&zfzU!Eu(?/.0Ms%{pn&CXFvGVUeqo`"`TtmRsŶ5AM:d4`e7/&4Ȋ[L |l0))vemUY! ;iGʌeZ*7jZI3L V÷!2)&81dWQϣ=8LTi .B='I~ >\{ةpmDԃ-n3m=ZžiL$/H5PWfMYAZa"1L ,@9BnzHZ""!I *(NIQz0ޜފЬ_޼B4{Gw%Gd\\ٳ,x<\cRe2)"aÆKU pXC2S` 273ugY4J!!]gC>U iwBsZ6S<'}A'Kƥzr6xaQ(Hb] lzɯB ' E#pڦ{"_{0^ӎQ-3S{a[cK/Z:NF2)} 2BGŲ"`ދZbRA3mt7e74/jܔ6`chr`xӑɒfq<ȈdLavzՔ5yV[ylabIsy'R|ԪAܫM!h؝3ͧ:1yu[ؑQFg3hѻcmkvY"njp)J-P5g`K 9Bof& c.FbgqAU_$"?Id|ҝ= >\B k˳3M2|-/.J3V;5P#Y (uxy䘅tC]^~%8t`]R0ԾsO}S0L))tbr3le0 O~1hKzMs/2 Mԏ^Ы 6%UEYռ'(2*.pSugXx;d&SiGZĜ<##^gOcTUҦ<UdBR%=a]"Agmut}` NJEE4hY|I,zaOm!ipeW*Kz#"Vf`SM ?Wb'*Tˬ6,PZ} S'g+Q3iK@a k~tYau^i!Y2M;)'nȾ,} V[ rnVBR$y0 iR/Dاhw'wۭ XSO:>{)n3^~RQ.1eyk,U^^^֎9Q}LWfk;*E޿PAՖ(ΪrW>d{_{-K;U6zXs,#=~mճ釰tQ_ClZ=AwFeUX{ '3jL24%bɤҥ:=”P*qK#HjLNFt̛ k $}[xxMR2q+.zqiF ̈9(͒z'@ٽkt ;^)!K[mv`s%EW6EE^uB˦A)_1:Hj EL=-5" ͻAX-GS!$I(iTi)BDYI(@yiٝ)7n yg.|׍3|z鯍OT $}Rr.ٸiHV_ mԔ@jbG4HqΕܵB<ʪqP_>/lA-KBW'T7QmfF䌥]r{&o*'c: І"2LpW`ex ~EArj4ٍy2>Ej:>((ˮ^EEN{3nW%-je_i`}@({Y188^2r"DM0-N >7c@cȌ(hwvNT.D%0N5.AFW'_xpGۼb"87I?ovVUX{aUv5H+yXU6 &? {.dM;ޱ3$ddnZ!0wȒn{ӑ"ҳdjTDNǷgm]h$cW?nށ{be?Ka5gO=8Qfo\LJb:Ƚԫb#X={IizRԎU|޻"Z; DmL.(Zx58p‘z7xj%dX rx77AJ7h]*)e%~+J(p4:+ 2(*fwHb&Xo~^@¾oEDg05&=Sm(G)i05vbPG76'!;fd.vfzݛq#*su$"ؼZfPQX,j`^EU"M2zŃf=̨4ba 4|w&/ W[ύQ$mmV Zaf vVc:mF]jjbmW}D{K/TjřX /8kG%2TDBŧGX]%IA Dv5]XUH@!F"Gw맩)QN^1ιo,P3ջWr7 mja,(3;c{\j='D,"B[P fggpIBeE'N51  ׋c 9u a4bW=&ȴHNSc "555Hi3-ٯVU+t{3Vižb;,vSm:ғ\5h~-/|!{aCl*Hn3b!B(n~zafCjXbLX$Ƭ/( ppcAE2wqϩ EzS@׃ɬi>ȯ0߻h T2\$,L;e~F5 _/̻Uj"҆=RK~h:`-<Ɣ$ŦNӈs@la5I%d^ BN^\\W"LҲR,eŃMA.Ij@LqV?hu~򊦡eP*m mTXmMޙLVuRMP&G;j*BP CJQ2 B$SE)/v(Lj]Ξ:+Se-I VR<T 0&qV{qw%ԞT@UP7O9F _5yش轚nFi쩼4uc3s,M)ZՅEl9,E#4WۚGg٬j^Ai^mX2irJHj?]anJ7Yb%A,1g;$$2(j,bVejưl>譑t P}w&vPrG* $l\E_U.)yxB쬓1dofۢpiWZ-SIX:XE:%&OTU4 X9VΌJ1P JI@n'lGQ +_)<5]*9}t<VWN/9AXfE~KݨDL C>^id)lGL lG)qgBPBXX-xSk+).@D%#==7K&UZNoʥ@^2[Xic5kUIb|1{QZT bĸe"m"K<խ*c*uhPusJ6L`OFբ S(֢fHHfŖ񪺽!/Ӿ)JC.~ #JZ<097}"Ta%|"ot~]bPЦRV0gW&o)l0x#LuMIٴzl#R|`nEfPQ)p7{|ph*'xV4pkC:ܥj5tt+& Eax3`塳Q  0@x<[ղ^QPygL;MZ:1w& &x3-f| ,Fr>| {ӕttRyVW˲xqWZq}`Nݫ\v4/S/a&`ds@5ѝ "Q ';TJ.q!@z ({ Y(;>`j{ByV솁3Zè0y 7RK̞3F˛8\ꙊxqʧaSA0T FS1ܛL;3t8 !9ŶɃ$EOYY&OxFPqNR~YH4e8p*@U#i]J*GE6i/$B$*vnT*5S`S}Y)CPII9&MJ 89K1E܈2mȍo֩KPN#,@Dv 1͵gâ++A NUDfIK7,6 6vAƲ{qݟGoϥE,9QgƘk^D `}1?5yMPvB FTX UCY]Z;i=ڜB5G-,r٩z{rV KWs^-<{S{i,IYu զFnbVB= -voLٝ"ue8UxQdc)O'c'0IŎ:--{&왴3;i~.=2wڞhpJ`ɖlH粦M+3dy`4 \0?+3DXk5=(?j7cɻޭgŴL:"`:n O7 !TɄqe D}z&z=4%I5zt"JΠc\̃*;]5ݸ`6?Qir49۵;Z91;CxOawC ,/ ;Rm:V"5Kz]-4+ة5CVIA: :vWp] 7Uӫ<5oӉry,7ߘ?-+#>}S+JBn柚3U~ "9.FM9[[2Mo ;c ^h6 FE);L16mZea2mJ9ߖfVxzEU!3TnqX|4Wh)S-TDF:MpR5eSH"Ȥ5L&kz3r\WCc/̡OʔH >@()0E:](z(C|E@$~@Yq F _^5}qHd)Yh,,"+ ?a|WaҬһww: J5#oM]'\K#>FZJXNh;@d.`A1Nq'Ž+V/Mޓ(BXufSG0 ]0pP.f B~-_<ә{T!*?F^v¦JݽKxzMe.uBՆH$(V1Ļ!Sqwar[ItThL+o<ӻ:CWI;beqޡ0.l] Ҿe14$m;ϜJWah+'bQbadfCeZf}~keY?OtL5JhM1d>3.L#d6qXAfc0bN) ͏]:h E96}=$Zqn6)pq.I|n`~0MzUdm3DAz)#ēBXvѪZ?xdq{ԀC?YF 0 ‚{9i6AN3& kB9g&8ycdS'6ʒ[j!LZDypup2|V4VGD+se3f 9QGILZ%{,+nw s>ܲFВlC.)DgHzwsC>;R}yu<.ȉF+dvG^>^zsX{`d[M&Q<8~vqN4-c T񵚗[=pEj\qnI:l-{rjHǴ欃a*!,W'j`ҝE."M3 aܺ{?|q%hD0 s.Fp)?p"䟭5 ֎N].-TrMKyt_޺y8[ǂnf   wk]Ur}#Hj w&GB{ɨ%SqfN2#X>E+*6 ߞ{s.3KZ &!|ʔ۟Zf<~ɡl9O {msVIftpM钙4:@< 1 vHVr^T6;T2@m5LUhTsy4> 7>/Y~!^ߟ-l3Du=/~WEc&D0O !l<&^M=+c+>z54AA(}ȂjW!G4Z*nS` q_xQd,c?>a$$s3WR7U!$37n\N~ 4՚-w:V 44cUi.(A9Sw*\as67;y_!c~RH ŕ_sPb8dN^TanQͰ8gU*YׄC&rwN60;O蘙=Қh%9Oe:db2dS!eOc{&JU~|!Oa$հgpЀdke#CTr'qkaʘAV;:2qx R/U ]nyT៏i Û(T7p%C ,8{ҚѠ\2Seɋ)biAh?8+;CZIG5 hRZ;/б0gjk\˦}CNh+/cRgovԮ+Qro5^BE1E (\ZY(hr?az+:{1i7b7H`K(Arz@pJz}9TbQ[sϐLDZ 5&K)kC66ue7\j~nw [Zwތ{6D;LK,˘I'g\L2+fy?PcKvMgQ<ŦVff J,0)x3T{yyFl<$%~[ /bF7ܑg۩%|VO#B?O;ڬi$Züy0.*la ::#JM$TltSa :>tmv4LzxNJ{1$13s.9˵S`6VA+LU=\  `zO{νp)x!5f')SH7azE>rC6`[(Ri;e/wƷ1/NF~(!pb߿'tG0h=g"+ V(HBa1JcIm9_|-L~%[fJ&He`Au3>]45 M>c9u`1)J\Ӣ$=bj)A~GEyR:<^ty@6.I׍GLgj5ଊeѲubX]c:vȯGM §3u aKW!1B들^ϸ[X诒DT t=pVB=D+w'_gP]X-BKLe"qGwЈ},{4SV1ixkMd7V_(aH)'A\S[WYC]ʨTDkk8DP5Wc!lDm=ܞ Sy Xb\]xQF2sV=Zݸ&m&>^ha?(FA'&šX< v-ZeB H?oɹm^к}:0 R]2Ųl)Tu}M LC$sW]F55GXG r5+=<,L].6t=MQ'XE|Y}6UL<(vM8bJwxT*=,Rm0 M!y-@D TA-<\1 %2z՘!Z8 ʰdeJ#r)~&X9T9Хu2r8 |IռqM)>aMMt;Mx;S>Թ|l -Mg+- \ɘߪ| e+EkӴ! -xz-ed.O/ejjػ,)N&oK P޴Q rEn8@aڹ൤FHU-rr+mf.I/ "!_Y~zdPJl4yeT$a`^f"8韭Wm  n13}qK 0W;ۑoWC%H0mФV. IDp($7uz"?,M$}ؔRNs'Zl(M߃b+wo7vpnCq#6*} ŃM4> :Hџ0`DDVO!zHdf&AMAjvbuѯ]JVxTVxa.ոeRa)s6xk d8߻Z|+tyy32,!(0Y 4T {d{#q0rp'# CkOT;bmiqt/Żu7[YOhk`wpǭl=YۨV~`akP ZwuinD-ʂ -^&Y%%̇S]P* sk7dH b^K&jUFFaw-OS=$6~4_KK/`2r۹|Bjy;ܐ'0tD}7J:[:|m~ҁU4sbU_,?:,fL:0l]z\r 7a) te%*\F^jWЄvȭPoke>53`) \9yM>*&77g.xx@7u*VeQA!bLs~@-AD͋Q0;w{z`9oLI1a7ũ&IETj{,Uv2Lx>uatՔS@H\@* .c-$XB>֒%ϵ*2{B>a9ٙdLAejIo1vI!ٰM8a4d(CkW4ٟɄV DUE(=WSzw> p=A  kjOiIWBfJvERij0 /3!"E>.䄉 |֒lslL fe>Dq643-Yߚv:F`?xfOe>87FciXQ;EazY`Uw6h]`GD1ucA# u<.Yz51 uDǩ&lW^\ςI,ڃStPJ^G[nX˭=S-37Ofs3nUq^S4>>e&^#rQ؄pѧ O"@:nLƽg\CHPz`xkrju:jͷn]sKvKc^C׹L3Ct٤W]{7lY vmkqYyJi*kݣjw؁ ;ՉHE 'Olnm+}*nҟjF5DYK79HBjOMtg]WӣfyiԤ4Po f7}SSz/<νbS7s%r X(+ZRݔ{ƿS= _"hY&3wFIϨQ1u89Y] Х}gR:IYM f^eY8:^)euv~n 9u1?cEo8baӸ$@ixL ת] ib&0ZوٮEͱ"X肅ekODtݓ(-s|x%w~c\F;tr:c4bр^F,|{0Sjg{XU!֔{sv:-])F-rŀ@wጴ L. Hin.K/\ +7D`+kBТjԣvtkb B l "6OTe𿠃VŪ]j [ K)P/WEz'zZv7kHN'/攩K6,qG@n/xΎ'~Zڛ= 8&x{wܴQϛvVωcq%U/cW`cO [JKö$e#O'Y= axЫ1=s$w'#y*Ԕ^wᐪFf+K tq./غi/$ ×ipjaZFy3&W|z?nNVF'&5گVoBt6=_©&F&u-j#)@:Kϧ@8.?Iqu1>'<}HUQb36cDH&.V7@Xm c]G0$& mZȗ ]0Ѝlئ=]H+K:ax ,leeyҖ6ibzIH |5zAs' NÁ[̴Ee F,D&Szӏku߭)pm nˠn_"QǶs}cG`yODvX"mꅓeJbk7 t %޴6O6?,fWpeP\DM-3Ax 0o]It|Řө*x2\R!lIS' -Lij=C{/M"Sq:BR%{Oj׺s/ mҐ qRemZ?A} 3 ~^x1[~ջV2] eg ;>|WM3'/]lLL/lU.RO[*g4{nׄ3TqF9˞zؐ6FTQˣ  1HyP!֕?g ?-2dxaaA9g˨}TlMi?eJOM*}ބb z 4G:/4q%4آkѳI f+c9|Dy%tEÁ2#j:xkI}/*ďSeˊ檭̘˒2{e;]0,8懭ʣQ~ugTO>#M$=P;jQ&UݞHR4$vuz$ |& yԜ !.u[\&jׯGCf~~H{i!sR@#~$Fh@(sB cZc(͊3ԹJx4W$ s"㐭zKۦxѐA49=-(RHp #G#z@eY[!xao\`Y\-iu 5s(J?ߡ( t{.㋞&S$T>SN:^kZ4tXjy}\Lp32ep~NCN(PḰk;g*Y@J=fOMp {MNJ{(`k<5Ow\q 8֡{3UD։4,k|,y=' 35s/Cm^0'#K!6 FS5ދa{5B^EGED]O#wX?mDLc2obfjIJI:IX^j%4kMP|;k|71Ofܥ z'cHgJt_m\ -+tJU'ѓ@ 兊e~9xQHB)sHWJ;X% y+պh~݆I[+\ˉn8 J8b2q|.[+5q@6yo .B5 -jbMc Óbsڦn?½r^.qb]TZ%*6qfS[6HgKh, 1ՓؓаOI ݍmiuE J5SGCC ,7@0oN#8mrfNzW;aDn>+W8#978CMؒrÞ_TgdTuGN=F7rBz/_zkM1)xMw(h.kJ6Z xLێ#36U'[~Х\@u }> OKnI?;i}-j} >žoc k?%Y򎛑kHxke#;9A& ]4a%\PfTTFJ"=2,oD cTxX1,r8܍Lp"ت梅S YKx?ľ` *v-h>忦OLfȤӘWݯ/'f/KH͝yU)$=9WL&dҗH+>Tx4tyZb%=wZʴCX&9kqEtȭۗLʂȆL/e R5R;{RHFPhU{R@/v"Aja Ia^-)0w.3caܟ [N17wUW ifu[ г&}zZэ㞩!x-ւsD=J[ w'>HLz6:D2C/=*G~ΕQ,VƇPJb'vxu;LI1b=ZdC*`PWcVox=ՇS{N;) ~[9n~k=-R1h8$'0צɊ~LO*?e22=ΠwBnwI0TE`|Eڜb#TvCN}`2v> ؂̹-z[@Wة+gCAwHu_t t}o4ؿ [N.ǚr\7G) LC\/M03RU+N9'>AD8W& C^Yȭ oZ%҂]\*ȌQ0\Sc<9AIаpJr4pdXIn'*5[T(,'o8bI{T>Taz>{ˍĥgM ]llfQCP63MT."B/&?c'Cp1%G伭Rb ]-i&S{/Xu >܄*w/pnϑ9'%Ɍ5:a:kIAgܬw "y[?ȼo*S۾^Y+ =7C s$ Zʗp<kU6@q?ڑe(2. j [NɬM 4L RvWTu~e:є"n1#xg ni>C9J*~:V82G@5D׳8rs1NʢhL9HK1wi};a6H%"ʌV栶-䍡4 qXEV=#iI4C12Kzx]d^Ż)R@ `Upo7md5H˾U[-= hv osP/xp,6SЯ!:m]P46?Ao*ra۹zh[DĦ޹3?f[%χL_VSLo.z%#b3k_.~?~C_0c{Uwjo )fI R"<5GNw ~f\  yCeܱLq1Ywq3|MN wsp諝?Ï }0sP}@zAs0'2㩯 &+H(gA2BLAc!U< [. w+IN{^e]Mh2BOW'40ny0TKW2ylAtu|D>X˘JOۼo)[s'}ujS)EJpnmd]u3ϰ>=$LԚވ!z)SkpDnoxYwMVh7P*_Y=>z ĶM)HBG+ WR)+7V̛`~HS$jAn0&WdT3>w!BضJnx.aDp,f;,)Y&c=puLM\ӁtHPC外}cqV`=(6stlTEauNPSNױ=6݁NBx*6:q7!!;KK$́>@ S`9T\CO2=ͤcb^`fbm?_x#E.VG`fTu/|%KF;yPk'Y@fz2*!YuʮiYU27NUFm hX$oh. Y <'M0%.hQ̊%XF:w^lkjGJg0I<9kK?*s %5Ռe̸WψyL;u|䵁t*pw\k.!Sx6DaO SC~aE2Kl|hʼP>9`J&M_taL\ Ǿ$RKQ\\Y°mC'҅_s4"e$zEC6'n.ewnj2txb ?vLܯu؄t̊eT E8 mK "l 2ڜqT1t=:dI/?jGEŝ3vW!Wsq5̖H9~5=Z G=-~lϟV6`5t je 7oQ~cV_sbȔASxt«j[&D>#}&7f>J\g8=u͙0nJOM5D?]D"!,pJ3kz3 7H#94o|J/`-*Yb'(4'߅&EC<[i~8(Ti؍}G`;ډQQKڻMA غ, x B;VY̪خWgh)rz-n8gz굌ҙ=)#,^M6lǔǾb7C ַ'4#VMfμ[WNtDA70xmCbnT6l:E91բ Sf]@:)$f\ |V6%:iǟER!%̉N@c嚨Ͳ +x V.?p?^_՚w} 7>񱌱5a;Zz7#k"7wG^ v 㓹Li`a_nɅâX[k)o0qݏi[˜,Q1+ \*uƧ੢J?W t1?_''sZ^r"g%HIHwGjsRYL1sM.&92tI+#N(EE)cĘRfSnum-&w*#Ya)o'[3idi}c/c:Oh^RV[PO;4a ۘQ8"1^h,nqtG %٫cuq軥LMI3@JAڱvJiIK|/Na8ZXPfMFC#.}xJQTަS TGkxcn_7}G..5(M9~$@6I&y{~u/pK2;9!cl2FR*$uuQx XdXop u"2^y01ԯ;ϗHۡpF̤P^Qg3\8nP']5ZO[MfOاmAQ9. *ź}f\T ӥHw %- "HH y^}繶ﻏ}uul|T) CDZg_p6b/E Mt@vv:j bdkg}ke35*2s|KxtE~"Yx˔HO\͋O;]&xU!;v>Yi44!&9 OCnH6{\ei{7M{<+]]+3 ڳ.;Qz;LF頻r:/uF!~~pZ:/9n<\IɏD1?2\Tl!JBmgKjm;(5ؓ=aCH-}"/VG< bx}ۚZF+sȯş>3fOiD{c'#$l.¾I 0Ʊh!+%s,XxM]syA /u@;")̯4MYmݕ ֞P/N;}j{-_006m#wki΍o資wT[|sg')׹uHI=O ԝZp[{i#eӏ8"ׇCV \ ߌQJ<&FQx1aFB91{&m$x"fB"|Xfxraun {]/ߵn쾷dЌILة>[9)"~T4LI/aTy8T6ݺKL5VRty֙Xw`{!%b栆Wc ,jݝד Xb9j) I ?r:n⍗:5b}8}7:f:l-^lrA"7 -UUtTսFX?H#yoh7dVƌ7'Azvȕ$T^sjQ*=A v. NDlL|sʉhUq |/"Xb] &9wHĈf-_y FA+w{ {s;_yPf=+E֢T^fZkk>>ZJyJl悺^ir'T??2@7 v_`F?W.H'.{TyBN^;u}5smCsDݫm -EtF.DBᦢȤ#:E}y ;y)|!(qA˚ fL Or:?߼g*_NYS*lBoKe :"!+9 n#aQ-'zzx4hmEd^!123VsNO?k՚0|]ǧxEĂv,ʉl¿"ZΈ+E cNuf&yv$Ws[!5̤#^"T7${xPȠK4@_$k|B/0堧:!!!,.yڌ!i"7cߝ!UFzeX-;  [ȊZjx$owͶh|3iܭ}s٧+cL3XWF";=/1y/:6 Y193>xe7¸δv\}RړW&/Gt熚Qq6}%εҡ2[bmkU<z清!Y'~D2p'g]oV?(h+MDe3Rc7"g\9!kX\˕D7OS ;Q&v4-K_FTP=)~WQ&( ).T7Q^=#\Sⓒ`Ԥ,qH=s(JA{~;}Mz ʗ^vŧVO.(zی$ҤM,'u%1)X]s |۔Pfxt:Co1,I)zcjT{ II2͛Ԉ vܕ7lY0͹Zo(Tp@-Bn:lKY3N45v>W̍0< ('K+_pO@L`ָ7/ܹ>r"̋Uョ 8@S99hܥYdɲQ{6#g(3D T*a '(| G&>ȾD';TNݴMIAҵ9# "ҍ\ya$ *-Npch|p~vk96C5vRD~9e%̈Jv]ɭJ cSYd_ @*@ϭG{k_L;Z_ϻZYsZ_>;̄vjv5,Q^(mJ( nZ#O![%+Q]KJ׍4mov^93TPы)]\=(%cb/DNkSӢ6= Jj_X:[kӋ z+u/@z}*ջWʧ(ĵJ*wyTT jߗz.:s pzLCh}P k_:zP@ƻ o!ݞA Zŗ⺢pHNFf{wKq\),RM%%kԋ3zEU#0~>\̹~QJG?`-IJ&ydbNTg*#ޥ)6֍X#oh~tlpupTQՎˎoBz;kAg"rB !WBhiPWI5jD0vM~1,{֨x41AB($Da~?:I7 +!Qz;̼ʸ%F]Rt.oշ y$ X/>e1<0Y^kI1Іҋ:eʄɃ'/NMt,lJ~?PSBTN=y~= %˱;mO~M#2,'yv⑶q|Tٳ-bq;-(yMF<d>6'LoC?wV2+^^چѷɅO xG3Ҡ@a=mɧ<)Bf <\8GpɇqsaX}o^O^TB{@z#E0L=_EK8:.8s'W.Y4Sԭ_ݳ#ӷx|-Hymn//>Dx1ּb]{TǜTI>@;r326:PMg Hr{SU6-ҟ @ _ e|vՄeV+u8!!-Bivri+)y%޶g|@kLմ. Ȭ~Eؗ].vE*>eT)|nC*Ȗ`NKξ7TQdiivN2Ō7sF^<8q>t%矞[ kj-u$kJ","M.Jzi6\ 4B5x[LQ59+Zb%BAxiȋk'RHfsI*ַxз{mJ^v,𴣩Z|'Ev8Q3C~Ͱ ^ϟ : '9GQDZƮ9ӒBn7(KټU%e%Xup4 ِ=Byz$.bi`P5p6h~؜xI-H=ZI6G-ё 4 ܋/)wղ+xO6y.(20KfS хP)jz(VG{g63TErs,:)IͳЈ&ylӦJ”֊MUGB-o #<#Jֶn1͔P+铼s3YD |G*P(lɵ+a 'g8aF m"UAU@$a|Gix!T$SO׷R4ƨ}\.aDv?\8=-NWd60D^<?#|R{Nn r'No\cܱe׽<+g\E: G,!|OHy}(׫{NkΧXB?XW^5YNa0=ڴ] !9O:*8~o"7H6\<p8Bg`ڊ8jo1<͓>ed5JNQ'nwʔU%4 Ez"Q'N9{̈́{ӍMNhgcFTou\VnňzpM_Y]G^zHi!t\T)|XLya=ѓ\/E*fp?{4ac(e\Z:+EǦX^70ɖ^&@J@s.ހ0Fy.N9O»LJn '13eLd +A+L欄8HOğ~xX;l==Pg=.ʼA7borz4Ir_( N]P'u0]i2ZGl8앥`%dRV'_$]K+p!1b{-ٟTtPaFX7{J;1 SFF-&<-#tdeP=ؙ0sޮizLf^?^Ҍ3Տ"?1.@snIͲNc+.ѱgn b%tD"ۀң\k(q0մ7#g<7yZU=9R'z*0jd\K[MکV1dtGM],:i>Ig^f2<*T* xe#\7kGAO$MίlMh ||33c6h}xז^׊Viv7N6E&cmÃY]fQѡn6 x?}SK.Gn0>saŒir)~NʹVٻweJ5}5`:#/߬\4,y,5jeR6/q6~J?gVCS(+Hx&T/S!91%`]̶uŶ%P'yXGƨ%R/695. ~Z6;^\>i#ˮ? 뙳e7Ѥk;jk2xʌ;܃3+P{Rpt,DZ<o7fQ0u2..P 75FH6QL6aryç~.{irxxpycHJ8i'SRŽ1RuZ\caQ}Qso=|nSRá/3Ƣ+gz/g81=Sٿ:af8O W(h_$ _"~d_>xs Ko; KלEE˂-\f'!ՖGF+9wN2};?CQY׉׿2'peba˗ٝ0kIŠCW ƽ$ Ȯg#B4}Vj4-C3Rh]n9hb<Mg6= >j}BwwE.G09O/p; lуǧ&󠾦O~::NSFaKfGv3byHE/(+4xjRЈ2bUƬtD{>BB%]dUz-4b6wko?};JGҲMAMǀbցΡN24uR8K=QȤS CBV&{^p8*E3-KYǹ+#lG yNFC)Kcҿ@6|DD\9LNwu9ieKI#; >l*(+ɘ0T2WL s1P;Ai"!1Go'Wì@箫rˌvp{t|̥KVgYhAW$=Ie_W'E 6k9 za wF 5)GW^Q< QfҒ p̒1]bԔcj61h< BiVBlPE|wX#vW)ee wV?Aѽ _Y-ᝧZʥjg2DO 7~xqOvpgrŇ 5KHܻs}v5cr7WqYVy#2QަQ8tQaf%S|4ޱiCJw|4qpC6o{y[a| p% 8R?:Tك}go?jMAExl8e3U!1MJ^r۽IWtw-t|ں9Ogz~]Ch=n+.IZvA.Ktp{!݁eZ1[y(4@m476.`w7#įi |+*r%6L DLI3.zY焫bViPs)yeDȓ(Qey:6FuU~ .<֋mrcfYhKHUJ>Xa2Ę) Q!xo@5/h!b%^S+{pFs3e lZ]Lz.WDڶܡ,:lRMGKbMv /cJ)Iۣď΍?f+HêS Ak1ӭs3x !a;xbj;i{4ؖȷй`5-hqZX$?yS9 J grkCeLzfD`O>ү7Lh%"?; r?;z@F+b=IQ⿩Z=|7ܪr_WNgK0;t_YuZ 7W85+(iV纈 QxL.(H:f <egʺs9:| f8B6'wZo@^h/? ەۢ]55ϖuF<hnܔ_SN}#=Xۂ. u訴e8ŠW,,I1r6NQiu݅[웎귛d-zӦi\}Ll2^О{ӕkasw* n7@{;Vga@wAQZ]Gջ{f>Tbڹ߈˾d4Y?2Rn2ۈCz(fðD0B:?EXpsʁ6KeF <iQ0 FZ._W2" lHleU>@9qr;U°lZBPGà2-;w_ЧDyħ[ӖtP>)z@CLQhJb j4.1a3;h` *yǰuЍu/&b) ?=UK*A£"S]']Le:[_S-(˳>ǡ5o PJeCW+OEYHy8zS#YqWKN3k3~͑ƘO+]%{{y҇0xg\L[$l=Ęfju8Ŭ98¶&|O64`0Tw+ҟeΜ(f >nΠ{' 龊Վ"M}<X/ECq@\ЂPKy=قrs{נE{I 4o'K %`҄ %d,D"{)6k\gɿ4SUYUT˾nnj乀ve!K2i R?ౢ[G?ZVlBf.^?u9#El\4viwɬlS j_;k|o3T3l+ӈPU)j6l|ZVB'/|(LGI엲@Y&?M )\ᝈs]C og k2rA#[YTjcaIk|UR=(ۣ'P0ovjUR(-sDt*c%W=]N.Q֌hxIdKɫA y&'qJ/=ޜm}Up@Eanb./&f/^ "la~SyE ? [8k['ޙq}ɕWicClZpF җ)I!?7F'}{tv835y3pkmʷ3a-GmL4Qw~`7@QoN˫KFx_}U%|aviA-jsYz6Ǔ&ȬWU>+ьM{(Q%z~5nz3Q%WgqPDgc|b^14pNxNi(p=⫥>ѣy[.#>wqn0 ^k+WkDJх[eX|Y$4sD&4&VQcӫ-u8#RF:krq_x?Sx5P5΢Tܳ̉}L)oNV>!]Z\AX[ QN%OnفWAl,TGhKu ^&S>=Щȇ^vΑ-NSҞ0.SIEH+^ uX/7ŧ j="[䷑뺵VuyX3.>eװN~Nt|l47jGX$kJ݀0]\BnŬ"stlaL[:jbkU ,ColՙIe˾WĠxl=kD?3CV9A +R-U4F{]n++Mdl.a:-T.]9,5wLa/,)iKv{G<@U<>ЅڄDYQ^"Ŗ@twGUANj*/ үѾ]V̦u_Xi7W@q:jZ$7 ڑ_|h.%4U?uok;F׍٥HLǓ­XT3=.S-X*X6UT*WL4_DЗm;ZAUW`K1?T'ӠYMxuS )W5Jv_*UK|Ut~m9Z4%5*$dHsIZN '㒬|&gYgmD$&Z NUٔ@P{^&`iVtWA3B*ja[ٸCFX}LW#YtOCş:r ,jo:0h 0Oî*ulyv0Շ"@ҢT5+Zfx7_<Ώs1PXKz$;B]-kweVYBNw֊GI8 yֹ8M_F٧%S}u& :O$>iG}DSv9q.WnM zR BX0WBijd2La$ͼv˸Ўb |X*]?X~PQ)ѯ;JXޱ 1<#XQH(=me)4z V9˴:MFl/}ѯJ29qu<ʯceou|>! J;F42l@Quچi 䦉e"^A!F49Z ">rO]bZnÉqdK'dfZf3"AhZ z,7Y'^o}˹6T. ǵ"bM_F3}Fngd$3 fD˧Jys4M^Iw1 yJㅪmɄ3F?[etdAMȊ -++p[(E.'V;39~Ska0R!pYBjgR?KjFJ}q Zdv;} /W Q)y%0TB?>ȣkFY3,BK )-5]'/JJw3}*z_)l}.:lwT451jxԍPG0j}^7|#-^R4iC\%kI8#jidlbVg`[z!sE2𾱭\sna|slȅ؇b?+U 7 zspYnSwsBԱg)xh< g`wb n(Nr׈CaXE/,n|gIlTD[L26NdL/.'wǠ"%AFl:2<)-I^KfT/~Z C,.rZvDG/`b0`)7';#⽁FRB] 3ޒ}uZv>n>F|[@s<>O>ɓ(1@ Ko2:j+=^щkt1~VBC[<[@~/M]MHS{J$1"4@[v5WW0[yi-v(X5MjL0gʓj*ZR`Jq+A~ا-WfT0(Wfפ 7r~G9x x + g fTFIcZ [H7˧D 2_{f3HohQ ERyGU=fU@HJomB+vZ({tĽ{k?NlڧJb婮tU/%Ϫcؘask)^l[}_2:ED$UA4 хM;jR{~V) BCʊ`=W LZ{J6o~89EkdM佯UN#qh"f6G~-*1ȪGjTwpWӣrxў}s!Z[:31wm%1XhA6Ș;Ӣ#s>Q"bNUݩ=:o.BidH-=[ըFЩ-d>Ȕ~w\[a]t bN{lyJ]~ZZzKEM֩%\a^p1}eoMPϺIv(f\QK5<.>RGV ꅪLv+Ӄ|]I|n7Nb/ٜKT#VrOrk]@"!Յ k% zc|Hi @Zf YB=*nXBɰF{DmR2p$5J1m }T a1Šݍ@fC(^=)Zi)壎{3OR6x]";) P x%bgG)\ AC]!O#u}{h&أ,3G>AQ shW0q)u\)? *J*eMoB|ot% {d+ kfsZV;'r(H~Ö?cijnCNT5@e\nd5{35(GLXk}-RckC{}\(,բ tJ`S>”PSF;=_SVs^RqV+7R~Z_*qgR6>'6@@(cq7BtեgD5,Ww$)w4&GۀG3g`!1M@Q. C8UjddYvRe;iX)Y1Ưh6T΄oUh _>z+{߰%GyWd1+2nD{x\x[$4d' Aa NF/v 6|?M_N `'dL}GISv * kI0S*%RUU׳VlM0L~3;B%ꏘoReT!\[DzJO`b]mg3ôDlF  Q`'JjAZfEU9y霳Нt KPt0!}2mjZ`Qqvʪ r]FKU>ӡu,\my{SV:\nmr1^s^5]bNosOujxA<Q>qy *^3&󈸢wOO)rm<8M3g[ -w'uBJESU߾IkT08 fQG0(Gwu"3 }ѸE4.PcIJOI1l߅SCVEp'kTqz&r(SQPa Fכlִ&)dOa(($-$EԿ}17fubҖ%TSZFK#FOfT}RrCU3[f$3֚0kj5$'mQMQlӖ iYh%#57QD)w0+,ݪILfAyّr:n}!w)J32# fp;z3}<8Ww?٦"*Ry}B̈́zDRC'}}e@8@XjL=Z4'QQd,#Xlט<W7.e+F![k%Ed kZk@ &1r雤jIua$^1q!obTU~'O,NS4@~?v"^ETyMo*],m@z6\=ݸ%x=~G fAC)!-)6GSBoեDz4;~2^ݧfYtmiw$?,JCRĴ5kpi>t!eߥVMCx*$q9\޲Q떞<Bqؾ목GmCdM/LrjmՍ>H|*~0ZQ5#B ŽRs5nbZX|d&y0?̭*i$2VFm aiQp~5)܊CbƑ֠%1/΀_"h$`Y8T\ )ɼDۗE PThyUY?pO-_<+aF,ٮI;dO%Te˕*ꃴY;v3LUVz,!|u+EDEVx9K;^(E5u>ޝy~ش[11Y0J l' ]G2*c- rۿT$v`ҤWIKSj{BoG&@Rt0rH4CV} GQ]=AV F @Ul܃.\g/ٜ %ex6NZ`!_!d_}x`xdmWֹԊ٪1}4g!@k)/l\447{ʈp/ q*-Jq˨+bu*IQFjePuZ!T61'Z(*VbR֡r(s=?5_YKd+f=z2UgR4AgIT1֊Jǣg ÑK</ -SiyE%8| iFV`Sn 2D{ւc}%x| |o$Yݏ."qH*J X> POno} -I8+LbWFClo3ҭB54fY%t0p3̇^, DC)S$q8-d,p ;W;$-i3w5RՆ)E(r.,߇o ݏ览PBfw;z -eDG1C傖{gwѫa?{!-\k5B-;۫-^WRhw`+92K=Dg\xF,3xx6̝KG(EZUhhi ur)~<r˕iڤ[4aOS3d5˰^tR Mg*Jz7  qEP$Ѧ2>x""tVhj^Hl(c5 SG4oxH¢/ԍ}b&S][DKVC_ xk3|kd9jy2b<ߡt{LVv$Z_oO`eNp*̽I!}yfMT짨lL{i}GcƉҸUEha)B)?VvǸ_uTMQ 5O(U V* B1 թ=QJƥÔ&-y#~b8t2-Oէ-?N㱤t6/'Q) ٦|'qdY-* sƊ i)_S z Yukɀw$u-,̬'L2h(#O'$3C٤jߤL{‚#B#PY݊VF!*ОYoW^uqZY:}jT"i8>4mNBJьggh˔$~'Zov1wͨ^s0*Qfv!(Ύ_=~'ԡ$ŋ*of)/FB ȽZ׎<-Dd Xzwh ̊*O#좋~LUݝ.*щf'QL CoJ*ka4iu5LC/+Q쏵i48jXL8Aנl xϳ9_DyaoLFXE G̪5=AE\?:[~;?5w5jӊ-Sρ`KˉȖcY/1,J͇tO׷IE_pyw;6]|Gl%#FDrePqzxaYťe롥SeG95輁75׺tư9nZ'R7?ٙ BL;]W ᫻6*Zlct~Ɠl}e&\gjg|ذ|n}h:!mwnPbg(>=B6x&)e2eܘK'/Ŏ)Z[d@6=k/$g_Qr3*?~&u3^9ɻ/.ciyˬ2,ENcn"憸Uj\+B`:_k܇doi4ZӘeQ}cfE['7s|!1z!s7׋ ܎o^X*D^g_F2~nj㷴IOQXE牀E1Q}#_-8m-Oؽ[:"VGU|R8Z^ck^i7v0_M[گ~=bQ,-gcbȦ7`GXpæh~@EeyK:񅋣BVe&ys6_{eU +ozE/|_8*-ҦF=?_5>zVV *=@纮FN-N 4_Nꅓ\[# nc]}n͛G Kו2777)V7[ + z`#=i oW.# NG\*+_ev\UOq͐䖵YrusB;XR;-\ͽƞiݾx2rWէltcgRqIɯbr3|Ƣoi[i6Zwo.,@1vo544UدnCpJAl#?[)rsПD旫Qj{1jďÞ%]=(l-C.ZUZZYWVW.-lOS-I"Du%\]4&1ϥ=蝙j?? \OY͎~j|5?:+*=ԎgmZRig=ca{['2};"Whj|vTk{]vNۻbd+ꎎ`L}+ |9yXuCz 5Y#}v>T)x.Z&'[;x~p(OfP-&A{rlG&ѭpO7ʧg+?/om[]YsM\٠u:w2{CT;qܧ%ww}8x?{Nx͚o/(?Z;?0{ƶO|HxuP_g ?Q9P?=8ԧ&gg8Qzd-R,Ygeb׆:72t}SgfXZ0Pɥ6~wFWFloꕱG? a gN>jR[}RM؛1S:|L)Jsp5[.Nb4}2r"G5\?ͫ)5|SoAO|Q;bR*t~zcF~!n1hsRk _`JUWˍ^ҟf罤LQ-^Wc_*uguH|iN7?|-zaѿ,$M\2Pv}xqzze۵kڼh$}#x5zŌ)$)pCaUjq)ZR:gĉ&WA >~Qex~ 1? Qth .񻹞_'m=?|?-xg;~}IV\谄VbڿzQev57/Eٞ+_.7[St_@.^8_(pڞ׮t;tqBCCl& c݈ͫg|D o z!bܶʮ<>XyCDԆOOz5b` X>~. `]bUq8Oʻ)ԞIϺ.'_+7͌Fp|[*MlI7}5{s=^MQiӋHrרd6Il|u&z?s:̝XYYXY\ 1oX|",CsCK- OxX@'π{ a_6Ʀ}{:ٓ0?h P Avp `rG-],ML04&7{K4Ѐo|ߋ2R)~Xځ'/.m9BۃWŠEɘ={OK*ߞe++VaY-? ݸyĴ44&w&/F K_ bnHA9kAovp%w4˿P埛e'cht|Vao (DX؛:QzxqC;W@iBLՉ8XAM5Ȇw:~~ ~_\V/ %T.B -gAqC!'"Bhx;!(/{E mJw@ġ EuB)?^S|{Ge # *5g!?^Uww)C~ܵ r3٘0Xڹz0xps2p3:3|c@*?ucAݎ%| ',kr(|YM 9`o@I@ʃCt- ',q KvZhl fрD$f^p1 _tPBEe!A QJD!E5F?CC Dp쎀( 7 (>f/%k8DB\(1 淾 ~}R=J:dy@JJ)(:+ՀR((̀> GP{eP (,W@%*|u@M0]@كPOs x\A R{ƯJ^<3IRw9pOg߿IӖm~-yZ96T̓hn7%qWO0AIM'Wzr7V@QQ {IVrNt!C .MNl7yfiX˽M!'J\Z۸ơͩ^SEŹ5r]`#XZ=zhsG\w4wup)UU*EV3#(7N{v6_8;wNڜumOΔ~]!T4)9Ѵ < ԢKNlO@K=9cO8EcZ[ch˭sn|fl:Qu|p D8OD'vPV_sji~AȇʓtFU^Ӈf!3'Z pUBwͺ,e]X'x\l^xO aI|^2yORvm S5ssE.{sD@_;/1eJzB/\߹8ܿs?ggC>· C5,Cv <gCc'{??kmNC6GCq}-C?=PUo/`w?؏=koGw.z0^}޿q?{ o?Yx8po@{>xw{?nz'VCު?CMty??p?̻?g|~0^h'WH}, w#Hn>kqU%o- cHQ0Wꖯ:m{tos ĭ 0W,-m`w-=v*>N`.Wᖃ?-R[R(ܠUnA-Ww˫Ah :[/Pogz~k_ 8z{x}?7#1ϳl{C}zFo'iwrX0ۋ[nnO*\>8o&> <-|﷼\'8Nb` m,?6!sW8=0/\̙r[;V 6C(ѻ x0_2nl: ǻC\K#郞#ׇҗqW65tv1u1tv6uZ;;홁΅H8B;^=mWrur1vq253uc{[w@V>cjkd\ vbbj~1wO}1V>,Er{%,,] Agn:޽34132t6~/;{;cS&g\Ln !0vK;`dn\лRځ\vۿƀsac{X8k`k@8Pff6.2.(nv&W(S''{'t7~T "O(@5?NP&!0q5 )  %?0s mfh borb,O(`8@^(Wegz P54(@ae X104N\G`f6ΦP`bTX% ́!b>mgeH+(3hϹXښڛzBZllefy}}v6 |Ar6L#O fn(J@mr.S_83rvzGM=~{NP w3r J,'?\ N@@W^M0SW_ pmbroEP :;0@K_ JP.޷vS?ͩ WͷU9gVZ{b ?= ,oσBL~#2m mnWPۘz'Л?g}K[{Vr"cK,x@N @d54v/jY>M[-!W 󿖞<8s{w!s5nKA5Qw<6^u};{34}] mF riygp >hG tw_{ewjyC\ e~Ŀiu.:8x'տo ~f̲\gӻ˿jq.vdP[{X-͍-lLu{*2,hrc{ou[+hNm-A5m"@̃۹oIYiQ}VFVOwYz;Ї0/~gsg׹߯-`@*= c1@ ?n:ɀX"?vwJ? [Aǂ<B6vgOC y Ap7Hs a 8߁43C !yMR\ +B>!<;@ k!x`B@pȿ@B: 8 8l!8ߒH| #C m~AJo 8:ǀAp CNq 83Dž Ap|. "'@pbnI ' @pr) x o!# x ?Bpj^i x 8-t|C%7 8#? {sY!8gxApNN 83)\ ApE5 7 Ap. = (b<C.BpI x!  x}\Cp> !W\@ @p(*FjCp< &@pn \@p n 8䟶@pW2 <Cg@p+^!B:n = Aڰd6.uQR .9 ,tR!;Et8DUin6@[͏ M -fHS5p+@ ܂m4&P(@ rm4 PZ }-֦H5pk [@ Rm PR = 6@z[̓kA@?H5(~jlP 8A:qAtP@?H;5!(~j"P mĠAZ I@2Pj&"@My?H5%(~GA@4P?Ҙ@M Q?HP } дA@PӃfҳ@G %h?Hw5 (~njVP ]lAAtPsdq@À?HꧠA y@Pi+F@Z?H+ (_j!P - AE@4+PiZ@- Z?Hc$(~Fj)P ҠA e@P?[@- WZ?H<(~jPjEP JAAtP?E@Z?H'(~juP APki/N@ Z?H.(~j=P AAZ A4PiV6Ҵ@mk8˩8ˮp襪TT$>`hK? ?C' ]?ʕ H5((3e= w@Ãn\܃\QL\1[7/Ag.Agn.OX62J ֢+#+' 88Ҷ hM$5 pT8|ehhM#Z+LL"HD U/=8ړGfBxSd&1ugxC,ph%{eA @A*H&W>nL@3u'ܼSkMޙ@Q`:hFT:0oqdLQ5=B0hwzIX D^虇S~%K&fzƔ+0H,`I "NBb@DE(bYģ!Ee ~h?&͓$g5&y!ÁY20`ߐQUߙpUCEvb{C%ql'q/=CD5AkW`#+"Fs#gu Lɳ<!=$ii{2'by{:=O=~ ~ +['d%d/dz;:&7D:$͞Ms?1vS$nr:eŪ3$bkkJq͐D3 zx oj L/$ߍmqXK(ó@&h&B:5eȪ#A fN5tE2BHKOfQ:]Y744ɘ/(䢽 vgΟkԭ;$k^VwuRF״-)cP IYɺ1뀐s 71-H{y(hZMfV"LIL<X\,hj>7@>[0B|oc03,H`ݩ5~ЍdAȤV4vB "hYg@l})ؖ23;8&^T aVj%cO 2Q~17 ?c>ݺbl9Ɠ8 FA]TF|2>XM|FEo>LJBɂ]$1~-dK&(3`G")7-h ӣ-T}@$>x-HK@+Pƛ_|)Lufh蚧j.Y>U" 0܈lx>0tq?$|z?vx6m}঄\ 6O6 `JY wTXW/Q,P(g:9!1Sm@b iݰ4DCfPtAp'h$?1d%5ǒ뚟F(DN=U[csj ?}{AYWWdK K0%ٮoyKI)/隺SeÖ-R@,gį| ]9hB96TSyl<~]lm3E3Qin^ T6Q3%08M1`t#z*{Abp:ӈoJ=MS*~ 9`2o0FJ=$Hp@S=˪fvL'{Fy9 җ.]6a޷R=/q[&A$1s2AͤlLRE:h\ed aR^i=0g|tB^"B[CÁc/w Y䅹4,pп9lP2Kneq8֑-I ĹtV-{g>Xy)385ᙨF֯oJ 1;T!365wuh̹ m2$E( ATV=L^FF隖gx{Op.ԟ;4ZCSA8mu&qG;4Vk@n̓6x ^f*=򻹉=fb0K|h'RABw\5 ~D/uYV"o4q0_f5Mz=H=$uPHhmٝ$<3-S4,/ܗΜ|'yA4_rQrʷ`|&pыYR,Y]h Ԉn¶;Xd~Է   7M}挮 7΄]y)Ϋ}YBk}Dg_ mej:vVA,2j;PimPk9K*@wuj >l"U`__+yP&I;I_o쫷C)mhmR+Ocm hT$>4)=1 \K 6e}t?"suNrW暼4}K%ǯb=i2¢R)e\ia+>KT)h<ziϪ\hgޥ0i&%収NZvA35% 諌Oe` tO_} H+LzH$ @ _ת _YW]39?v$)}$&/2qS3eX<Ӡ}3`О߁ Xa瘗lc(%.(_>ِLdRT_`z1Y%JީG=ʑ(*jPLjC+wByJ/%͗{ Wg_wI]gZNݱ2:;r;۫<2h>yEZ/; ؙKy%8:o'K!4|\uX[tG+oLٟ֚6Zy ɉx74&}IÛ4e&M.ܘ7l3o঄F67k~ \#(sIK>N$/PI &OnrDGֿr5M֟$3ť)o_s nJ`qIF~"]\pzJ6(Q\k3wv g.F|MwʣuͽXԇ<*WJ5aU% ,j3*Q t͟fb[w~B뙯PATQ)! zWڼZsP$<6+}Fnwsn 3?)1? çςs+bJ0fS,8oչ?ټ1]P+Kng)!l5ʳ?eоMM<8^2ge-8g߂q:ti|%Ȓ$_\In&[Cfd)ޗ= =8@{x_THeH;NZ3)7m^tfp{$Ypn ԛ--KL|m#NG2if7 LAd |A fiY"햟y&iZJ'Hα`|*2~23ȗ|X '-)"t/ mw2|g!ߌ򍘿|3V褍m m (Voƅ~g QCN!{|i׬c:e= }\mmo'nKZ?e'{MYsƔqbҀ [ʺ-5.:n{Uʤ$RWhvIdXƳ=`ے9o: ] u͟l/-ʬے#=ANxR5C-M卿ǙEױ= ^K=GtcΥlKiΠ,.Q``cH_>&F(L&y/TiЭNM\ouvZN:DMLr54ui]ݬLx ClxG,n|wmKCPwM|G}Aؾ kȐŻžp #}7 l7cͥy%7gr-#%H}v#Ԥ&H鐔ůﰪ|%WH4F8Xqo@ϠOxEXq "[ 4lR&ifusHzYz[CdB00hr]zz􍧻-ύ~zGq!}^Nk&~כi|B2WB%D9zϜt7r{Lx>|(ۂrIHzM|D"@jQ-C „qy1dqz&nA ʁm`@cF|IS:< {WDR{CR?2GmMIYb۟MO`- RbFU<#[>Ož5{C4@5w6.ТH1}W܇e'䤁j`n\ ߅O$'G$']3_,n}Dc^8?Kcȶ <}]1QݮNUH^t6 F ĢtU$5?F/K\ur8OF9]J7=e8]X)bWǸefJw\aY/u:t},5aϡ%Ѹo$o™`FO,/ʯϞ M܆>2 cCyjP'ߝgѨ2Kgp O7$%@.p̾Ao6Pj1I )js绎$v|9 uMxF3|+umx{@؃nSׄYku:׭:Ho^8[yo( hZB\rz4۟UWy{?<|o >O\ nq}i*.|l\Rq Ӣ钞p p\ᔟ}WsBOR63&n+z*ݯ#4ln{hЗB{vTØ8Wf,Q~콮މsq{ҎF8Bm| >_}U18[# O|KE8Qz[׼fgMla K͗;vj1K}Su2dѽ!C+ǽj_Hڭk q?[삢6㪂mc|/ǼGcC*2ٟyy._Gt~KpJZo\ \u4-y'׫qZ!c }3,қk 4o[hTq/tfc6i3r8xwfbAM}$wifrG2 2 ӑۗ LI%FiY>}>(ɓz{Kgw2X`yzݩw⮕{+VuǎGδ02eZ6f&)kf$r^n9?nk3H'/A߄uMkC(`LYK5 ym SEG5 A|L@ܟ%aÊ~"_є)Z!z[wYX;&o&Gh$AZaɷqqERLOz]<Zd 8~u ]a6qs3C! Lҷ|KSJC4uFh4R-!7Tr :s fjQFKgxXFόV4P(sxUݚIsW-cF>uɇ^CFusq.[uC5-򍀷?0 松M_T}oUX|}Z5M8wqV=_~7 ޶w2@)AoePvR7mo U`IFcݺwj>IdNAQjxcq'76ٳDkfv C%_ya|+?W ՅdSQ@oIФԁS|ԙ=@o 6Ff@f 5P]=}O#cю_AEnTy iV?D}|CmvW뇬i;Zsplj]U9PN9]jY+qfV|\4@/2ЋHƌLh/T~Hk<9P\.8]PV+ohg"͡NC tII .s=  H10DYQ[sui_%^l !F/sb)!=@199ԃغ Zu hc/{Sʀ 3+ C\\ `R޺7 ΄g-5 ĽO!JUm|_ tN5B"ݓ  |3 yȫ,(_HC9JWIμ`, a>Ka\^9sq3_{CуERU>;Oٙ`<[g7#p&X9}gʗtU΁xYi 3A#!셯+[h@Ю$e%f\^H@ НCt7b$ !mp_ؑlOW{Q{@3pgm @A{hEbīQj['fڎlMLMkv̸_FV]kt=nJq)|nϾJ{FQ w!>m˾a ۯBN$Q<0q 7U}ܚp6vo- UIle{s{QQhy/~D͋oˣM%Eh^zCK/}mKIFv5xh;b|p鞘x}tUcܲiвњcS_nn;͛oZcU{mнG {Z>\fm;Ped{ƘFȭkdQl4>$T9&ih(`aW6c2 s6Q }ɷe,Ƌlkd~{K{C6K^C17$) ЋѸ2#&,s^Q7\-Luͷ㊕Fޡ$D3xgh'_l޷?g]aKSDC#5}V{fc^No.'@mB[=V hu}i)y7G V< O^Kd1>lL?4s-JMy%X:iH^iL8VY'6KSvOo>[G7sLVp?djw&a{S+au(X ᖓ4乛̗'}Ux~YN矡VPKvv䬾T(s$ 1_Q EϞm8M&ͧqz1z)@zS8=˕iRj|͘ըko۸r,3e1k(?PB`gỵI 88W;of)W))rT(=u~;C&Uwi⯘%u`ELw7)I:D$ -wN0՘S=^2!S뛄˗~gtZ8{Y_UMZΰSI%U'ًWjt~q|t5Y% `i>;KޡяK/:2;I(= BP-T|,e\ڠP5fJ`V/$:gbfl}[Y@5K{cH,^kxMbHHZbӡ7rd8{Ih/&DE?wb1?E빮F)/>eI[\,>/A)S-Bu2p/PA#-xmjާkIf;r6N7SJk Ͽ켁{ ۟[dݶPmؙ<3|A65m.6=M"&zͭHc:x*!'5%AjWH~kVFRb;\ˑo胼-|!Nx4cEWAs"/0I]"`(WP8P.~F- ~Tš]_ͨPmͲ~&ɧ}S7#M#Ⱦ$F/u<r>֥(ԢngԸ';Eπczz T`83d+5R `8b0v@6bw-J¸nWxuUEܞ[kvHXnހx>Z3eIlc+Ncxgb;Yf P4vPßwઙ'J ˋe3V&iA626QlPk`c::}be $lAf{Wy[iUW(9&'Vg Y6?,@:?HX~PQ=>d˵dy?T9' UqYTT}{VُA0ڠ$cZόWg {hΪ*Ѯ͢ aHztIxvPִ'Ǚt&(*Ձ !UݪxŎBetԂ{>VLP7!{^C_}Ry u hq{?ӿP]zGgv?[nBCA /R;w'wo\|uJ&/}Mj=YxmS/V<bRE,WEFwz=Q$Q {{yJ3y3_AF*c׊Qz,]埉D2s<n{"-O+MR]U'{\eUMI."oyF՜ uy]gp| )ʭ.M28385X}Hy 6MZ^%Nd<}ΐ$%)0R^\E_QIK}"Ć5-r'\bi #ø)ͧ|ju|08O? XA-=o1<|GZ6蚿H\)8|G3S&ϩ)U,u4PR #UüQ`p'w7HObGv A q]s)qWj3~6 JWG?L2*0TIQ2VuۧD5Pp; 7?J#yUs++[R>P6v5iY3]h|)#i.j`.`B‘,᳕t 1{_IiTJKK)8,Ii%:IUՐC*Mp= -Fڇs6d/=9pr!, E`^yDsR|m [:};% ]\ [_ _v=F ߟy cgiL{w?ׇ+M{ɳ$G]&|<7"{6c{bÒY=yh>8)II bEN$Jth@hpVXgU2 IOږy5zWϖTKP7wVB5RF͞n]&YkP ʀ3d!o~^1K̞ў(wF>"6 ~^[iOީ.| [ݫjM91+\_-#D#а+~; oP&%)"Z`5A{/ЎN[d=>1ky'i /bf|Xu,۽#wif\VoI7;Dэ' 1; feɟ1ϒDdε#WhTˇI@FC`}4Y !#˓:@fw/ppy[B(<|cGy0y{eDʔ7*"UHd2O^ƒP%\d& kgZ1g!ZOAtͺ]C=|{~o+Niƻt\=c!>D{ HārWH {) o(`vL4O, eIjvٺ 1 @BP ߲yKmnfLoT1]p4j'?LYBiΤ"x~u R/߃)n%g|b\o0s C]E76W/xE:"Lw% goP~;.qSlEE'<kc?jX1h>2wZK{m,Ҷ5%=Ž17OmKV`&Tꭍ1EUxN&׉C Fk>z'߸U5ûi^52)baAM/e5`]ysA{bi .;JEK{(%v:|tX'RUuQYoZjS+Eٿǥ(6~x$7:UNz9.:[]q*2rmSFqray)<ҭ!kSKLW:A )%.|o/ϴ`sם6l‘žQ x߀[5nc "5b4qA-j?e0% 5RX`EmؓWh.{J< _sODӺ<`#)zVz k|bwP'pV8ER.yk][ R\|ar +o '@6!]Otv.ɲ bݦGw7N<VeS{ xn';O!'w#È@n/{gKKCb>zҭa,cP꓿bK]$ldHE1sN X:)KCJ8A$V*kvwѹo/ax95^O}{VYw 9.q=aǔ{HBU+Y'60t1?[RJۯpqBz:FoT\R@bw;ܩrcAd|&`qG_4siiI؋ A+T`v^Yi0) 6)}_]x Oxx%$y%Z>u3Oj?QjvJ*LN~Y4t(4*cѫ Plf ƥ*s/&pi~:?DQ*i~ t`=YMb^3k+V#/kw:wrT7ۯQ/`ELb }j^__֋%H3K:&gu1VeZl8%X\3" 3`20}!%LMl˰X[!j[8}7r^}VVUoq x޾(i>yt:!o8zpЪ]zWEumV%?Oʛtuv+k:Hz CA=nx%l݉P{aUV=v(w%vLn>_ѳW'~'xKS憤 Hx6mA^-_tY#[47ނF|BP9 9Oќ^SݛI򵯰gz e1'x1)zej>wNA^ 14} eZ7:?Ş0 B5\L9tYzj{앟 91zi3䙅g£IlEЖSPg:nem1#ؖAhfNзZtP &B+K ?A)>,d{^i./|Z~cf6q4ܿ> - o<\O7`^`0h;t6UagP'X\]̸[ TuM|IAf0݁F5)B5kʲo#:KOݲ :Ӱԗw\ 䍇I]{6 G΄Dabo ^}Fb7A+g2loG x39Lxs~6DMV3qө|, PB1Pj0DiLO҄'tf!^sB45>ɪ1 oTΠ !)D<ȫۓq7:D#Ԉ3P#k6"Wز _O1Uq-Aqxxef z:jDr.Y}v%siϖpg@%/'7 <\IQ5жw^ll?s!vVIJomirboS{M%n]h|y0߆:_jmp㲨'\e(6xh;#uW\sk)g.{-F<?fԺ.91g08F˗p}~u(_`spkv"ZtG6H?SuCM8Luvgف:ոn,2Qd 5K_x!i*ӌܿk|L.Yy<4{QW2;Tm!\mJڏ;,=I-H7(퓆ۂ|~k~B ==$BN}KIp'KYϿBS1 R){:<`ȴ7\zcz9;74oMI{-ޜtd5`˕-tv;vv&+zݦcU> V 5?fhOf # Ǯۿc2\XJs\8K>:W3E/z }0`S7|pBc7P;J=tMa; OUm7Ath-guMŵ~݆_h0x\@e&дN7$Jf fy GMSdu[7p-|Nm:^56|kl>=+w7r19(d^z_w*2J0V5fIs·GOh>. {:RBኢ=z&b݆' CpEgoDl[tw;(-E>X ي3PҘ3Zz _*@[bF[%|hovҢNGJyXfK=HCQ\7v&8&15e; qsfXNn4[?< 9&3!s3)ͩ[{of7Y=|3E #r<=s2jA -eK,ģdV~(Q*9j}Q9M9t~ҜE!&⧈!btyﺦ}t.lB+wӨߏJoU>+?#W4=asŃ'h|6z0Ҏ`[Das4&o4J?| HlSH+MԀJ ۫:5zB9Qb^s>=LԠkz nk5-? x'\Kl.7KD?. KiQ[QcKП(ZXI"5z ^_iyfr.]Y\D-fV"_ex!Zg`GkQ8dlUtrG@)/Lg(tnm#YT@ɝ0x|' 9*q4Ƥi3E=V1^ok~YUHKU:@z4Dlt1Wt/6y4c+PTH7SĶ܁9ߔIHLґ!SvNRzG$d=5"7T$pSvY5z[|~ߤ/I>M32Isd` )dl&U[xᴾ+Y[H/OV M( ? cFoImf(_n &v/E vX7ۏ;UHY .Myo.`*s?~wߩ, ߚ8ǟb;ЈL?,pe=F~6'$ L(gYI* 9ybe'7p}]@k}ɺ\):aQsu2f@wLֳ4͙6~ b \uoh10T1KcuҰu[fTKฏ!Jq"p^=Sψz_MQ?rc,qe5VhgnKԺ$uQ\ ) <̗.@:>,ϩQ͟FcdƗ=Y'W#0PMa;;{؜NoHNOWZ?",ӷ!< @iXk=!4>ӖFe07}XAuMt1;'1\ 1s3tu}B`(0[~n<=_/7cxMsU w>{V?#8~ev:'[2{W$EYD%%"OLnKbv:|6z .wF^mp^׳6ϸ5(̤>|D 7Ky~p~,NzqSO+lŎL>hD!gX܎6-vλ]p'޺ݱ#gӓ܎QK_h\}2|pOwl~ 4ۢy;R"bsKI/ken։fjc"h:X[l:jWJ$I+0iOPė(dw[`܄7=f?ͿױAב5`hl;f0!\OM;Kpf鶌̯ ]7,IƝØiҽ]Cɤ/ XJ·v]J8og`@hC:ʰ~S?Sh~bRݖ +!uqh+=g4^9sgEn?}ϻ5ςnJ@i\1Z_p٩ȷV9ǢLRRo*{`oL*\r+\f'#kLK|;kBB ƭC'OsΉGҫ^8M45ždAi'j^wF_S}\EVZ3B#|ϞĺQMNaN#"W'g?3};yj Oʯw ɷ hz,wOE,'\S6C~x~QpQ")w]cdՄ+o4126wb_hRv H^g(J)v0AX$w61Մ_7eܒԻ73nb8v2Ƈd!i`j֍0KMֽυz$@r෬ȧOuu[^ :!J&rXL䰬L!o%y dt9a;I͒/賷v]hk_ ޺-uE{}OIra`.| |0m;8 k  f0"qva2}aHa>HN+{bu uLY9s eV•zo8}@5 N[sMR?z|5)߅GC.\+w'-E,CIJ.7 }xr[ze߻L@?3mGo1$ "fg|EӤ-Y5 !KqhBc7[ lق`~<Z$-xnK-xVt|N[iojA[m{Z_-ƻr@I0.d4 7`͞i*M½kHHhI.p'J\Գ(Ӭ5_߿HIerN[d8 :LKb+>ը4-cDig ,ǻeÎ`w![p[z1TԀ2Q{` ?z S\Y4oV7+VZe'&JhIw:}?V(ĻO޽wqxpozb[b/&b`{q#5 ma1czlp{?DxՐTɏ=Xh/bk\;j^`0^{z?RE)]-йF%\R_8k,tfdٮ#PS~3`[3li?"\"Rd2.nb=ASTSnݸc驷f5ŗD[ٛse:h-|(K OwДDwkT3.ʴɢoeI?45M0,7' #`B{WTU()tܴɤu Z b%(*4hhݖk2gO1s>:{'դ7)j@xsΪA84KĬMA O(]ӡhZ 9QDoV뙘K#Wpo'&QA30Dl&_fZ",q_C<5i9ː9_)t97> \N|.݅6~?/I(i\pDvw 9G?ni&qۗ؇N U]L眶L`|9v ԖWܽnŚt^ 0z&& M{F k7܃rB'mق&ej>k*!aNvn0:SU"sT-Uu9L@Hn5XikFEMɃ)8VAd]y6B*}V LƵ]_Z&pw9ىΤYC&heĜ^<4vH+&x-fi ? 4v ayHFb _~u"je붌Osx%40%h\8w#y^Wn>|'gf{֓; :xBFR~(( XL˴tP>\T"?J"Iy R&-~DqX1~G+wv'zH-<_)CbMlЪף 3GOɎ.`4Zno=9/t>/׳y?~|>69ē/2;gߛU?Cy>9g5ʮ!'ʋac-6Ht!S'oƹܿw`@/ vKX9@%ldpŀg.kkXZ.܊CUx n-8x"x{%mrb.eGZo"1gr /(&2IzOީt?my0&)-_߯kA굺&/;4|nS[l_Ę9YI9 DSvk.%Y!4UKA/BK6,v~!ֳCv"lhi8[k:Yk/cL{G~gyvYsVy$[tqOpxwf~x]hJ"N/CԲYP<͂62 2S<*Qj7}24m\Kyܓ%]oF J_Z #}`,0?~Vq.h@I@I}~#f~AGh,~EjJBOu^]zM5ڶ(6\._?/tM?~:CHs.Ax [ YPU+'lRoc%p1E. (Hb <8@|NK@ɣΔ+ KJ;ũ$<iVeg)d{V>s"CvIlBkU'TH+/ɿ#˲|gG9b[_2mP+qxXHT߱ 뙯 JO^IK znuIwI߅]^giꪅT]08mu5"~qV'uc8a~U*{ < NL'8\ kJۄ:|Pf+!LE; .[ :uNZg+VW]NUc^j"cu6Vr(EZI蘳x`bU+[Jπ<ᒜS_oPliEUMrU\() G9f:8v{mYT8+ãPܜഌ`" [%\sƏ%^RZ])HqPy)Bj뫜"v|PZV&ZKkAj1cDsV$=S+',(:[5;U] SҙNWR!/'&'/We>n84_7rąeZԸҊ*k:"-==mȴT|...Y*r/8behv̴HHm  >!خ5PaAU^:WEz"3muJLRn S`G ~A|5RCA;^T!P@!2j2AoVMj2Zg 9bAѡL*uV!ͷ[Ӈmqgn yNƆZhX¥NcBX,c'TJ|WZ BO]-hߑ:?\p=6õ[E zťNp}]YD j Ή`}j0Gau.[x781ͻd܂Ux<384W_6b+SN-,19hփYԱ<)-kxL@7<7KWbj\TnvM?AC6F&+Cs;eO}JM(45]0r~IO1*4b\fwADKe)]Wk*!?%S c-~Y ߅0rt( boV^m/E6k1%Kkm]z7PUi `?6᪄\r-oNJhp8\: &Y F޽ӈuz0r>fWɺ31XͺCG5`u=6 DX9ST^S)a`?c̠- o~{E]bmUMˉ@W0ʪV[޻j F=W8:1v#rCAG9U9-" e' 8JSF#e;C= e#Qƥ[k@ƕ6tTx`AP"gS?PZk +U$GW-`g2FĐL9ƨ4SAT f',ؠ;}X6GxA< -V]+t%5dNt]uZYڟLt+3O̱.j4};0J*+jzԕhߡx̹TɻE)VՂ/r0w{199bZp+-p.Oe(,a28 S.-+QoC& #Mo\ '-_2aeUX7a}dXnȨ) Z'xˇeUu7]m!5 (É:W UK.gV]ehh>MXirmF1J ј7Vr^c]H%`]\EI |}YfFyϳ}VtRYgN[.ʵᖔnӆGni0 qr˅yPPXAUɫ0R)3OU]E!UÚN(K?`UbA:u_|,킷1hϱVl:L^ pjRzp>*<#WhKEeSo36SD#8=XY%A#N_? H7+ "'w2DU5ÁCf$P;LBk~ϑg+'A  ' qen哐G1>&D!"[b ؘ=8cu0}x4SIb]ųVQhQxy:S.ݮ$ɪy/ 4Q? jkuD~m~ɷGTb r !wf~F!<M.4 hRtCq(h|X)E_4H(:9+-Hb%+^>h0plia6/? \Tȡ?1>@5uTyW\0dJa4W Z0rEVjhf,2 Cx]1*N*&5$ҩpQeEbW~ڥ^Ϋm UΥhR쟐n [Œ~2,'݌UQo"`aBBaӡDbs! agizCp7@e 2! ̾Տ+|FiBdsl ]Aܛ;!0^Z6L&WWOc PŮÔ2[uRt ##JC +4a[j.IaUXL/\|%\c˅Rh#NYxnwe,#$ ʸfaݺ(M=s, 1(f)JHSǗ;2 uoI%f l,G *2ުYT*O?r~G̀s_ O {~ lLc~0xẾs9ïjpe} \ Έ<;ċR\| p MࠃF5جnnj7ἃ=Ο: <8y Eʚwf_bԀ%OۭG\^9oKq#.Ȉ^1  b׀/` (I-1 .@\}G_zz%&w<4siz&{hi 2j܁!Bz_L {\4H}Ea,ī Fi ]9% .2"n+tDuS@q:py=%vw"4:bvĂ \( K3#3]re'*hX .8bW,h JE]tŗ]J_~yJW :l𴴴92Cfi+ ,e@a6gd N5^}%Єgg~}1G}~>^6MUExp#ԩGzf77P+ePC B=ԝKpB] ur&XJP7sAs@고f@-Mz,PoS3da`:( qB0V#d La0t:M< C$AOxu_ C gAb} wqp|ꋱ_VS> m27 ʛ Ʉ9 @@ 9$w94 |<В<БWl!-yM_ҕ;>Йu]h*қ4t4hT@PB4h<"=%Ԥ.HOZze;dzc-sO#߰2~#&+3)F5UlqL_Q*8HWgUUg+Kg9lUU텡9p\ %ecivuXQV'6Q#)ot8J[u#~|MW{6lߙ=7/4D$4_~-pE/iPp/–a~s ~~ ar]i a FBH"e0C&C8Q~# n0y4xA(C$",H a-~&pX(88¢ ~ ~C D=xy/A8 L@X a+{~q0M|@i:aQ#| ¬B^~2~s aU@ k- ^7BDTJ@B|BA^Oz(Y, , x&& , <0{0C Lqܫaca%6@?+f7A؂B½AxBǡ|p ܌|8OBfAX_ :A4¢WARОA5ׁ| < aPoM&nA&Z\?2gRj4 zun԰Ix91c1jCth'c \%` >룦I\#cZcl!~P ~Dc4grn{1o'qC>7fb>ikdOsD}cϸ>YIHEG9$2~Q+ ^xù-9Pt-}r0~0!oA*˂ VC|p_= E2P^=/oe0g^CABP: NB@c} 6DE3DKBb Q룣nbT7ɖnEQy 4ɘCaNUύ3P ]+ .ǺS[ԧ ീR[QN&4QnS$(u1>]33 o'׻Q:/^ML&ׁ~,jjjj\' _ vc/Xh=e~"b*#x-39(ZS !8ZP'WBډ~ʫt")36+?x/ӏ>Pdމ~H$S>hBYAtnP@ķs&D?vCу4W~."ҹ!On7F!C5D\U?'E+5|D|Y3\M*TJ*[mĻL>%Ast27Հ1W|4|]>wݱ룯Z+|eF-Wʃx<?+ ?ǣhlD/=  {. zEzY;,zԽqJjcπ|CYBHTV5%XRÀ|DGi305è-ǓcgE6&⨅LYa^Cx ڃQQJO1\!(aב/?8&tX}(^R-'j]0wr%qjƫ~%6Ww-~(Jp1:[Í⭇0ƀ46 J-7E.Lj!c_BzOݾ^;0vGaxE>/S׻b~ᅵ|44j8v tØvNOР_QzaLۨq1Ɏ̤g- #03R$dS\à5== :|70}PCқ]۝krǠJAhxb߿JOT_{ o~K0>vXN=3FZl.gFUj.@ OByҮ Cƕ1:n %xm7Dž5\(''ki=>QCW;|wZ ްnBӼ[y$nԵ_W8W`z__5|!x&x~36%wŸ^2X>#SYйT< 5@>yM/o<>׋Qw-4sy1WLrYi@|%5|Eār88g?kC16WBgkq[\QVy8ŀN.e~ ӫ!ύz2/Ǹ?tص݊aܝe=:￿￿￿GO2v͟[YK?+{ɟ#Y٧|?G??ſox#۹,D^xly8e<\CC<|[x?<-<y ;xm e<I-<y ;xm"ϟp'p6ykyx;<_|}߶wϿqo:}欿Wt+/(H8eҾ+yN%—򛜗7FLဤ?I:Qҗ% 6${dOUWCR"e<-0OIY"{VG.?{Wk>7*p|AYٳ̈́nO׿>K+wo KC 'BLJ> wW9߳f!%<9bXkia%?Jo`_*9JW\|>Bs(/_8\p~n0$|Aׯ!QLN鿍iR_7O3 t_wsxAiO;Zm~t("ϳtIGW>,v-rÏps85 ^/tcSOqJ=nUep^+dž9\/8\w|I麼)1LyLF&Bsx|oï\WڗÏ ?~" }Χ~5x.k:J;=g6 8\KxܯPٰz,7o?VpxP3CҿFXmܖKV;_qb|7sx^/'|Zy<~/ mtcK9\8<WG_YP9s|OTCOQ$ڍFg /ֵucr>.wߤzrg3q! i7|"㳉;.$1!o\>Qsy(+@N9C*K.e[9q䣼ѧ;+WrX.0/8]N=r\J>/VqEaaᛏ2^ףkE1:\Ï\xsV5a-f$.;"y@'^pgxtލG9\xr"\sԸpr E8:O׌~K\ps"s:VFn.#NEzvM 3"us#yqxv~:D̹]̛u)_9Ga7`pe~)dJ ~57+j^J٫k?+z)#}wp7nu|X=/rXB uwʧDoVwFO3qa2 g ]4|XS?ʸ{Tv2y?;Fo_d/EiOjXoCmWg<o1:s0]_^?b8~%9!S"_ߵ>_ʻ3=9rUxaegp09k=S:9~u vyO:9'?k N/J[ཹO$8?5,sX=+5r/q9sx\[?Å IvWqܞ(3~a9|ݹ]"_P]rxK9ÿ7.az5\|gE_4'/u=3N?йљ (b>ŕ .|NK8Hßv[OTۊ~}%kE/p:½vÏQ*>?@9ޣ8WJ?Փsgppx OP>5s?sROOyc?K~a~n;O+ | a.?1u O<I#9O&r>aAN@^Z.~20?N[% |"4?oG\29>؟zIߵ]=\痮\*S/z|pPVΔ?mx]g[{2FE?RC 8a*:kCy{v"Vs?gA&2 5 }'tNڞ?iN?8|gCs;??p 1q?sޮ0| ^8Prin(j)e]{󮊟P|Dot6s?4tx]ߤ9|p;Мq~s|e|uE?ZNG0@dePVWW,װ/ :*/O yg[3 4%OPf//,.K] ʶV5J⪲| eŋ*֤|c QX,.^+ca |OdZlX<ˉdgM+4OV\::mH©Q1Q#F L 9r@ f &:bdf2ƭNWC2GC@ҬIfdw 2<~WVdQouyk[YisVak-FuIѩSg󝞖"↲:E՝IYj{E7M33!#3!#i'i!Hd脓L 9J%3 K_g0]UQadFeXvVpHb /N1"2"]Zh-ghZgGu8KJ]Bħl<:Gg= -@҃i}d˪V,P( ,1TD/-]ΤUԈ. ,d7S !K5`T}ƸV'ו8Q*?qti kͺB{BV(֍@R TmiG`:CGbpR⏾ aI`_G(xZ.u8KV[-r [k3-,uY.i 0Xls-{is,ßvb>W>GB.?܉*W}p1t6{B9jy-'-'Mi,,.OU,)᝷ґguu Pbi|s/ rRndyb^JUmS&X]vF&8: "2X\C jGtՋZ蔜塘kl, ضas*wBYBAdgW1ɫF~.Ƃqr!$ b5 6+er [p-d`[bqC9xo]̓&X:sBIvWSVAYJDTxĶuq-v Vk]ńP K(Wj[i E;¸q-^i.EaXb3xlⰁ+r:¨ؠ;Vd5ay;lE R[pUCWu[C3lʅ`g4VC Z M4LvkM! ]g]imu?^4&}Kz22PaSq* PQn/=kXukm5]g8N,~3f Eqp)[Gi*`!>5cfF.cXUV[UEի$¥{Y% /b[1pԁa_bwe@<ʪj][Y5#Y0⡴rv`6P4aU;NJP^ ÚʂVfA-2Ӆ:ޒʩkT'ikl(rLCP (.nVVlz@h9^&8(!KV 43UGUmgsq4j/dzjsi-52ع֎iJH_šcYnTQؖȄF[Uө 0p3)[m)kwV&@框" 5YWTn;wFx=!Q]K!sŝ9J*a(S7؍j5@KAWnXJRUwrerW-cYg_&*O[x'Bi0)*w,OR ԗVE0Jey> ʂ2B\Vr RcZՕ5Gϲ oDisLADVvU;KŚ0B|KcѵB]:\B!(blPcb!MQ(JWVW-kR:+,6; 4Y0颊בgU=0Z]ttu"H:Xήc((b%9yЫ t)+GmiU]1s?G荔w1(lc  VIpCͥ Ԏ,SԂ_%4 .j&H9ur9#s/W@m kq4[B-5B9z`XoPSԴiYiI ?# ~FeP8:,BzQ#FG1Rv?sao&5Վ?`a[-Nr 'RŋK떎bV+-X2ѱ-@PiMm >4nX1"ѝƾcDͰAuvWq&lYRUgrVUcsYD87ƈNgUʢtj^QM]/7-chWW6V,5S__B @ɮAB7a;Lj;ׂ*Wv:@b^m1MT vѩTP}RBm916=5#5ۉڰ2 CR̂Ł 8uUIX^\tq9d ՖZ%y^+Վ"+9əXXDŽQF|VQ . ޠVv-pǸťlPU:jnJqprB[IAK)] bc?ũVl4ڕÕa_feWbQ1o0Vr?g.XU5Xjo?*{!Bia>Pc`5?FZ9V,ljR$qn |5&0"C`oTr(K]ARg4(AC*d%(ΐ` 9/E4p wCë˘K,RwX貉fA{]Yi8`n%h|hӭN1=e*NCu1P˩\ T0K 1-{D&p]d+8ϻް!G_Q#Fgv,Gw74Q]*VV9Y/,&:pUBKA¥Uf H(2]aхKED] z0?EHC8veb)@>AudIEdHlHBP )E/J)PJ[ 跅r%PdU(!s쾷1o?_"}33mn_ÜWJKx40iDFֆ@g2MHkԭф 6-j \zTNt *A/R<^T­J 9rh P4[# ~`vaނ YI$/"+o<Kh$L;JOk%`a+:ṷ^p0lL  r&^PmyT) 1|8@ub MD:,7ZMiÃ!9̂ [^Xu$$v0VU%-V>hSdV$Mzj8,.id70i0@\(<C-e &0yHi ,YN@$ԈB8cܗX ,i'&!җBP jU cSYRYJD`6\ |ڒDH4UjKJ?z"1`#̶D D zh%TS.Tpvb;¤H sN*^-E/ |Eb\b)No,݌-Kk*5o:HP>~ 0 Ld E`5ΆkoxRC4ٍĺp7l@((x8(N-^~K:Ia6Mt?f$@h|m` V!Ou3Ѿ&UHVaCbܫ3DZKZ|  :ܞ| 01*'Z'H.#NjJ B"-#ISD'!TF`Xg`v+C؄U-=@|%/ -f T}@Cw~&݋|&¨+mmk5w,mij(c1SI@:1TCH L(lH*r~rN\XZyM(MVa2$$n88g]ѿiUЊْNJDѬ<5~?dVbW |pM̠@V@j1'SCTOAbV*2Ow=pGԄ;\$)H.6 IsfhezXfVoSK[dЛFՃ8*/`RI;j OV ׎\UH'cSp עa%Ms7Qd{& *h4")(أZEII>l9m&a;Jt!ϕk6ӶFt{+Zh ELpćjs-hUCl\,Em֍x#L7xӠݲot0| P  Ke@X )ōSb" {9ѫME>S j?LB-.kWAi<\ T ;_G#-G1҅, UF-HUg+l! @bU݉@_[=1%`C"hbuBqoJ H:[yQ%ɔZڅK fjjn5@OwҦ|ЗhMWz}uj7F _t c\F>X0\kcbN P||,Ŗht]7Ex/CZ8D- 9TR^P}* tc +4l%HH?.JߠPo;HD+BHBK!@׬?d"ZUT@A`z/ Xրn+:b,OqIRaq&#ܟ ǒ3I:O")~ Z~@! k SQk`03䋨Bf {*i k ^re i:@ڢ.Cf,-|n% 8uJ~|*QܕZ~:33Y@XI}+2_]: iPaآ&Q(~Ye7oWT{!zUzt;dsK,l% zUY5x)2{Vy[WsMzj."uG$ThBvYUrb-XzU@LxӢ<@|NW_ChmlBD0CNW|4pJMH, Xp,9`Mޗ$.I'ѝf#NFtWuWQ *ikh(=.P! Bb7vnOlHxhOa-bƣk]AW.IC#@j^xį!{!L1, 4!> ҋݦ8}@Ԩ Lf8e2g $`^67F&#'k$6GRDLur;GqYZHԎxX0ДXY+ Q1Q8éd,f V^>0UB[4<nX6I P@0FDf(da+vƪTS1r(Z&%PJ5C <@5bIi0-U)ԍ,<ԢYGADFdkLǜa[ Цv;[=-m+Umjav6^`Ue-O>.iuYKS{3(Gc'i1جg ?eC@3`5rbҖ H@NS~2^tuU?-8fKK1NVxSTxPVޥ*b4B8h{ ӥ;$Ffh> EER,>9 US$ h5':P,(K.nURQ)ts-Gfj[q{v` E+L!-m[R̸a teJ\C X#I)Юh($ r Z$[arm"(c*J *[DĄM5S%2DKhf KDK e8F@Yctv( wa^Ѓ1!uxA;h%e0YAXXD;ҘCSefZʆ%MzW^(^0I"L:0I7(9ЅdiI(lkϣSnB)fbX<6Ћq+cU)Tg57h`B ӥOJȧm|2-b 2V/іeBYWcScGckV,#&j5yxz}J7r#OB鞃0RX5 d`oY8.6`@m ]K& s* c kC9*(I_)A= 7$v$ qQj#!qQR_'. niXojhn7\])'$, Oz\19 suֳGU_cǒ&,h4(I ͒'p mQDX߭MO*D!0!Tket(k\q1h}_*òQ荔3Ai`79HR6)h/baƶFTjrL%&`)ᰓxO(@4QrQ' l.AWR5g*EIi0 MKg uTW^\Hr$Qĺ<rr]R8A FP@:qE<h75 DۘX/$7"7< Ɣ.b Gv5`pSVor GmcI[}k6\U J;UC[x6^ v]oX4`@*v~$!E !eskdƀh%n! +a6*"_Q@J'[܍AU_2׃AX ,}ˠʕRlނ{ɴ@ ϠX+]Q(3A18L :ʃ.)Ӯ)c#,-b@lЧ.ɰ'PʹPCR R=`4(Z ՞_^isGT!^וyB^:- -o.ZK~Ez8Yš0'/Y5VO',lnՃpJ1bȽ'lG BɶH锻VZ["lKHTcjUogLы&_5kƒ#R[t*yq]&f%6aUy=n'폈 rW&x(2 De\aC79lɴEfB{Zôd|iKItxv X=-zP. ;.LU;F !O#^F>10 rg ȩ@b  >|UUUi0^ tvFN|.<^ɳI) Gzӽʎ׽|#/֑#=:O\zS$bT 'RW@$L"bToqV})ӖOj\J#I\0ː3PAFjD F_;]e$#C:ms6*T3F!w!,OcqN)N͢V#h9q81 SHJ8R+g=P1ъV3vˑNj _+r iMD?]*GIf6 ZSNbm:aZ>a>n]W+V`OyHkKfdAM%l)ѽO?kIEeJQDsґ (.~%a} (B[}*,?d[=a<B4 ;5+qq"yf"4gȵ5i$)$x~ oP+e8 8Bx.)z_[ò$ftIONV@ܙl`J1ip.2U'V6-(66DxXb}Fi#e+ItBas^>Dwb+K xzRZY8h|cFXgVT:}T׸rX\:~7j:E1#]&\O>S߇d{ $bx~) M}[@͊wɐsp:qʩRHtj9% Q&OZ}l+̒yC]vg*Oٟa@fPHo)/7x9x p\['-gȰ teM%a[ecOKKSC؈} .-{ˑ(3Ӕj\dU}TCblL&DX< g!PpD1G h!>i[D8ͥD\Wz[־M2un3)]Yϣ8 6;[m1䁢^w>?޲&u5 *㥌2Y)[~h?n$Όח~hJ3XWd|8 И@{dL(8Mj ё2]BNN'z$ 2٦ߴ\ ݉S{r`_T4"|cW"8w@(5X"HF7_A#d%#CW2R܈`rJ8YZ+iaA[AW' u}x0<(n9_3/\G1efKtk_lCWiSpUȮ v< Jw@beFUm{O59q4;. JN]gkx7Rrq4O=06_CO#4BO#(Š"=\$Eo0 sl?OӵZX:5^ch{hԷtp 'Cvp$ӝqjdwb)X GUKw䂦gŶ% }fc %[|[nRPܝxɬ;H-Mr}TQd2gT;=s`*hQG|3O !k}'=|>*/Β2pĎlHrZ P'Hd t,d<UZHFSfG< oߠ3+)$n0MLYO-&%Y¬-"ֆ[4mmz;175JL-J8g%PF#Ɓ97dVF[R`96*# 5\t6+T.4=/\8 K$'6k4J#Hv6-?< ` &t G>e7_ߤ *Ko>adtk1OjHOI5eszJj(]H 5̦L.?o5}yv4El,1'k:`X}YE{FVF!/Os- 9Ug#(|$Hf%ΤP" .dMc֪V7k1itMBh]Z| $ Xw20'BOlc/ [ \觢 x(dO.$,]+Rjm@|u 69M;Px m".nE޾@V> RkU`Q`\~iCG*(Qa0/aӖc.p|D|]2,(%-M[=G} C~q=DX>KXM LC[fqƛqTߙoq>&@%G߳! *> T\2f^(g{~  dl/:[UQ0{QDhhvwN-x=n #n]Ϲ2nJmÈLm%2yyMlzT}l,ೌyqc|0 DN lG0&T*ZlX=";`"[}B,ar@U0ƝC\\԰f{Z62K*b^ "ަdmkjV^VXjcR@Oci56x:ArƤ`hc*!Ftпs2Z3mr?̡4qM307X]BmϋPu)lePB8METm|?Wg3yWZNq0(1to38b߭ƹpm\ƦJJTLs `B'x'jA9'1 D7+  5+q* "f w"4;D۪ft Ack=qY73S阈ƛ2JI*S TM /bVYuiZc>fu1IEn5^r3r(uLlwTyjӵR=̤zLgfDa_!A{6DQ<ߤ%(T̽7,`PuSj8)@% _5 OtR)G-&eI2%|L+oD;F րVSU}*Kup F]_X;pU8EGmQEp/jZ[]DB=VؽT9L"P<]D^91 o/)LS7vp4Gplm&^;'D0UZWh5Ur86onAo˝ #*·ZC`MX9 *UZK:ƁTEksxy*MN5|x^16G:,7S&yh[S`m0unrW ޞ#t?$+p(СE$^n2K۸PßOphtC`a.k8&t_o'(0 a3Jn̓ DB `Ap1+ %t AFcJ Lj1S?Xt6lT]Fo5nd chXox=w&:1t\>Pw@Шa3ߴ*b -iotVsD'$/6 W@37 5,;@aӐ P7&L"j-tvv%%:![OgǶ)VYar౹/aGSz Va,5^ѹ'XyfҲ sKVU+==x Pzz/A-\s3BIȐv2LxHQݬA*$*l:ёx@` x /]2MQPP8ыgܠTTP."ɏ&q|Xkthk  k$@&s:$(]_ܷ "%% M_Yچ[V4ݼct2D/<s$LYIV~Y bkO3c;)sX)CΎrKP9xExf+u9'Ճ=8 ʫ. TMMp2l-7#a*.K2z:XU(ej}::HopaxrH' G*cHɴBɨ454ӅkuK>@:{.R|qq*H]xE.~h]&0m.T^ܱYkXi2Ļ/A1G;,sAc *DR\ݠV!v( [{_Z(0]\PZ1+P)nޡ8zUK㌆<5+:[0-p:Cy.n9 6`4KE*5_1ù;2ڝhM,u9iIREf/tqrCi&U5 5´˨9* uim%gCJG0IfKJє*T՞nMPF!ÒVhNYy̕t!B}͡ʮ(Z@rUbK&i`"JhS<[ 曢*nCm|JCj5h7eIi Mn2wx_]_bBe`żd:Eݙ&y .HDK*Z(ح)ʚ=fOj 铲A|[Q 1L^ơ`8>ɆI#dS+iمni:ߣD?[6ق,jᮻB,aUaab^|Q[`( K{g'0;t|UlT|?L}CKM֘s WghbmR|y&JFTP-]$? (-!P "xْj` { ZH"5.CDAʬYA6]YP76EдQ#LP%PJ[gWM-nu%AI)qUO 󠊒ПX8~ ep7ぐJNPKl-2NZ.dE:&d;& $EuqV`ITSz/?|:/kDZyrsЯTCKUP걎1)AoRi5aqN1xf/riip]{JšT~*' cs@0@,As~.K}K PмmP\cd`QrɺjNhچ%a* +?a.TGs0+tz1A'L꓁$*ԍ:8֬Wg2a4%i8NіezA< T +l@t|w#Q:!Fz}q2U <[n+5IcW  >TvO) ol2^OkL/wK2#PY"APKʀ`$F5)h!x1F8(>ew'*68 R`"?ջE[? = {#fuk 1ź%6xo^WScHWLJ.q\KȤ,[Г묮t* Qts5A9n}v0SY[X]U0(]""|lY@@]ޮpBN]۔ 0ĩqVKlĕtߦ8~?oC-[2m]x+%n{&P ctn87]&*`P8r6$ffI>qQ2j$7p{!LJ,ik[iئ~eEÎ4FW|_ѓF}4! VSGbIh]ZQ" kc@JPEaF2H8i%yF}*`!D\6T+[(i[ ]Y9_Vc_QxؾqK>ikܔ]F|\Ml:cx(9졎CMGQ!ODxd*%8Lq!`|%1" *E^F+0`Ll%:* iZ\}%8YjP W}Koj=,AQKAC*H|XWkw)'h 'P`J6' Bq (w Bʹѿ BJJ{!jS†|9R(P0cBG_FL3Tmnjq_M\2AxFy70T F ˭GPI{3LI㻗HlBX@\x NX*ƚXq"X &%(nD!hDlL`43{O)P:;%^oj{Xp5KVR]R!ז="ץTGYJńFUJmB|14i1L;w~%:Xߞ-YSޒMk2dh+6HJM1'MS*ڲ\fjѢtC}M!7/ ̋ d<5%!qʰ? 0W՗X,/IXpt647QiP]vAH49L3śQiڔߧBighx_{!OO eq @4r)"cϩd8n;VDcFx|2Q] U!fXB)}dB1a ff/ \U:8mŠ]OlQFILb:SE>wF%L TdMb!V4Є6`[0*LS:*ânDI_rO"ldhcCB2qHnqv ݦ g75mc?od(;$(UHWÀKM l&(XwclKJtImCQc(iԺ0ꡠrF)Y,-Dّ < ~et[C.VKXO&v81fCMnkb4SyM;+ڹ lC$j=BSܹz9R<'o{k>I]&y.NJ~A=eWn?q-\V`Sao8eQ~F*TDV*ghvQII?8 O%7Fr<[#*-fY HI|OB{"oSb|'z@mtsiAaN<ף)&13#Dqa6` V=_ʦVor=9/[LL$'(9^EVbP_Vt>4<[t4#"fz1L&SĿ$y_ZF|O<岿zHF^z^Ra`؞5uӍ(ݑ.?e5f9;%Dh X,1NQE?Lx#|Ӽ.\]:@I=@?y8,~@"1Ī*xfZ!$*|<{:\+:dU Gzӽ)%xhyHGW)2ǎibËVHtȌct+>BX pPH5T 9~#h=O0gﷻ*"A1`J]' 񣟑n Fn|.ѻ h•HxoeP]i 4<ŸF ܞ6s+P4@DK8^Af$EKw|́Y; oIY&zY׽b]Sc}hᐺ ωTI8sr&R&xPЏ?[:Xh&}~"\4 CI>X3`.ѻZ?ybj<%K[i4{ӕ`JJ@xLR E#7A"].Hy!W# Vp2ǶJ/T4'9I,$GPs ;xJgNbuQԃpA%ȕTd&"Z:M*Iӗi<$A0BDTҾhs,ﻧE%46[ Wb ^pftE%0gaV#YļL_'U5vI١cjfrƙiiQ<15ćrG1x:ndaL)EdKV` 8znwƘ=bE=EENI9h}fճZi U4Džѿi. U`0^<ގi"]o#XLz0r"+UL-)5Ck ww駫aph|U\E6vtx<!zt؁3u`|d9=Ji3 LUhc)'2&~$H BOvDñEv탆L,% PPp@ףХA皙?A?1hA{LkXܹ5w͚1qT,]OX 47i1OY3JJ|cFijIDT[=^d @=Ia&03K17'nQs)iFhl)8õHR!MRڸEľ|gY8k20X +Ebt'#-eM"19sfsO;YL"qJ@ n;@vӣt; 6ChCgN߿HIZ_l-mg.\*9j/831G,_OZ5SK*NQ1U7T2VX H>y$$ENpt%ZSs/}s}5z XU1+d^N]]kDϊC-^M]\;U+'0*Zm6X˱wj|mzMO*3m6GiFm ZrPNW K;q!,4$9bmn))^UqK. +kkл-MjL{L[}zP%6{4"%"Oq&BQr0Xu&5^Yfc}vw,9vԎNm;'ټA+#4YQnN1~dm^u:P&?A"ƶ} cS2QcM_BGC8oeiJڠm U|p PVxVzc6*l+yPT)Lw2pt~`fn`>@$a15UL )?.rC\Jk*gPYk*ʑ<[l(~t~WR?.!a)@ +HC3.j%}o2<g0ʜ ]YhݕjKS!~]({W-^n hlMY|6ft1 GPl2p~* cgEtܜ*K10 [A $Bb4_mT\i=IVùЪXtn: VU>VR<-6JP~]p`R5H_(h"Ecj>ؒ{eŊ  {BHD6cFE9UPEvEb\8qLbKa+oUJkspɒR&ēh ]%%L )iiijhljkƤM/ɰh}Q#Bq CKMiY''gig\4ru skzS@^vW`&II/յ$9tB YU$(sZNMG_Ezh_7'LXs>/8Ae N+*˜,%e/Y vEugdJ DB2ܪ;g-K9ƞxH̳SLT޾x""t5HR@Ty7<'re\[xǽz-DB.%DtKJh-];)l-+ 8l*7gA<{&ԸjYq 1xfކKc@ =Hq7 I\JB~5;7b Oƀ (8yFMOԦWM |}t{$5 jB{$#6rjOA&5CB$U|؇i(d(d}$ px*(qć٠%LɓGHwӒ'[ȋx|8) t,X (|G`eV=󯨟yCC=wM#T9o;urtHA |cdi&;Q5 ,~,pfjwӁPʹ)tEvik/~rR+?9T7*:u$ESE!l6$W! !07 ! Xhd؏@Phpp$S&ZE_*}ЌCPQ+KD7i˦s#.*19SUVRY'қɾXpL4US隠069\g6&igES92Wp/;BjZ̀F+3`^-?F>j!7 +s3-K uݕrcuM.*|l38`-֩qmssYhBcfz?1Aڮ.(lDtVK%FH OSmg`)![ëe U UByf-+ز~<Dg'dL`օ:6Cֿ޴a/x\H'fV%V{[Da$OsCS<Ɓp,klw=RuTɹdysAQ#Њ&vx7M9n'x&NEŎ /4iC&Ͽ%7} Gu8> 4q&gSsqY%uG_㛴zx{B?p#ڊ>wtɤcV|sDӫŔ(h|RY ~w1|.zlye|>ᓁg3 >寅Wu|>߄Ϸs|-߃|nxoT~>7ǖ>[s'|~!١w ]>s?|ߺ<]}kgmӗf~]_onOhOZÈ; l9+}}7^u{ۏ?kg/HϮxlrwz_zp?;X|zϣ/-~ʗnů~}c?r WtmsU__ycO|g/v}v}=xKkdžg_|գkTW׮Ȋ>{ߎ:gN_~x_.'O?o?vɕKhʼn[8і&\lٿ5/Ly{r;-R׺?-|tǜ~8ͳYun8ӇG|35|c'ִʿ+9+O}p{ϬՏ| >'=|ws?mgsGzv9z@mSvak'ȯ`^bS-P>q}~_?> ?b_Yd_żfr /谷hX:\vJ/ *@Xz@(\UV Կ@P Կ=t(1LO@ _[nUS [//@_#ʿ^>UuB|X_:`7V+_/P7 5}~US; ໢@~}>v)P/*@gwG ;ec@4s࿼@I?=wsEusl"O0Fiiup ;PZO|E}Ŝߗ&KE=_"p8I5Q&AoԿ[СYG䡜}8 cag9}x"Aevz>'7/EYs9-;)"3 =QW7M9}Ip(D>ѿ'6NѩӢ.Qy9(ʃLG-Wrrmբ[&_-nGDֳӯXk '7xio_">̷$ oc/ =rQЙ2I]ԳWгX8<>Q3s9}&' >I#G"5P*2>!?1fxv{IT+mS^|Rw[8|RӂG$<ݜ˅?t՜?b&AA넼h1 O^1qzՂ?oK:$amuQ)nJ&h;E ǠAf!qw?"C"~%5`q!l#_c"zȉ7 Iwtttc!3th㬵-n/4Q;P*?AHTcnb9saN*f  tFbf.p?é=ɱP4Wr!M rqT95go;́PLlPH h\h$n,N2⧨IN\'is2z9miP8jq; c\ppCTt'ȕHu\d׀䰆l$,Q6t;`8 Ƽ}֚-r$.XБL.kQK G{DLTq{T]tÿĉfrP}: _kQϼtGEN!53mCHUC SOCsֶȔT SUQC߂w$ڱE Ec﬙_)UT"CYx4Wr4 BU;ip(YS!FXUc߷cvlP9/XuL);&*yҎ瓔ZhTe1A')}4O$)]O")]$._ǴFSELDSYLO%)ރ2ŸbdŸ`Ÿwaz:O0]NSFLWg*O%)} + J_附??*ŸczOLW5?;1=yCSs Jy?`4Ÿ 1}:O٘OSz酄?O"ŸGcz1OL3J}'$ߡtO1"),~ ?`MSAL{J߃饄?2ŸҷaKSFLJg*&)} ?tOOcŘn"ߦt3O 1}ONL>ӭ?[0FS,L^s J/rŸҳ1 L$)=>>ӫJ`Ÿ0)ŸootL&)"?t'O0$)!Ÿb:LSLw ݄?otO1!)L_HS^CSLG J_^ŸҟtŘ1GSBL_DS Ÿa:IS)Ÿga:MSz ^u?gc L JKJ?K0Lo$)ӛJJ?O~ Ӄ?`z3O1=DSL]m$)ULg J_Ä??J_ BSBLt'!)}?OS> _ !z7;ޟhԄчI "7ztwv;uvXs.Q[4 x_w&zy<Ԝtț.=f'Ytk;Uht4Q£ѽ'^ @fV=D˞fgBe{yj^gRe3=lwuv]?Bw ̀㽩hܛ/k鷡Yܓ=b;~ˤ2w=Tlٛٝ{ mesnC \eC%lk's x3@c+soTw&ͮ*FPT v}j苞D7ϸJG~yi c?⠼5]/,zIe5su~rޣfgȕ\Ǎ밎}4R#l<:Fumj&Q}P η#bWW_WGoLw2rzw_J7yv/_En'A gjQ[?FќL -ړ: \vJ n ^7<0[1ùDOywmRXśy2[Xx7@N,Y&y ̄\5?АWrn0<{\j<<΀ *^.*Ai_vqYMzeZ~i?lk?3wz#Qv)z7BىA%8^_zyZg8HJAzd)1ebޡa{ $B7{I)L-~SUrVK9NԵ A=? u *ϭ]]]m痽'xA:y3menЃ#\mnPy]7a׹˼p\r`~~Yv•=ÛË/̀ ~f̻2\Kk} Jd?KY^^B_fJfow [ӜCg 7}=v yv?SYyf'wxR?BC۝W?V h"'b I(X~;vLBPg΀\ُ}/fl#w Wբ/ѡISCI | ƃ$pQo8 :Dƹ'i lC}> dC7lI{ 7 4ڇ@箧~F~%08S88YcydWe}Ыs Ou:gx)9y%)E}etԍzy3 FOmhR hU?;b"\4#z;6s5o}%O:l2y_{m7i*~3U8w g 'Si̹Cع\ Źo3#;2߿Z 2MQ\L^2$1~oEhD:*Rύr(^ڝ9*E]Mßjz^EJ@KḴꥏ7^]si Nn8hhs".KR/+Bme0nG|GlA0IT.)4Mᔏ㻋uAR!rrܷ6羀'3 p!!B{o#$Q4 h I;f/!`t튷Wtz'GǛy E[w-BCVc~sh"pMP'":w?t$@ݶ?걝 \"/12|r õ(󎘗}dFzR#}82yd)>H2=W#ˏ֊"3DMī*-cع ߆G2> <'Yd5_Toj~ORTocXVz:PF?P2{aʨ W AAI #ӖCE>h*p 9 ^jFn6Wjxlu wG=*9i}[*4/t7̯,sU$P6#T6@dg^Ff|W]xTH?;7xoopWkWoZ\ʝKz~rrY;3rQ$ugF@dE5(-cP?f3x#GfL4S?Ź`e|ČVڽEd7y .\2T,ԯ.x65byZ~N=_֐Cu ]׼o_fVuj9D|vǐCeŮ?U$/2#of׭we~oƈ"H%yl';'+\m-sm=h%G*PBywZ{⮙P>7/gڢ7y&~uWwgN/^{70B{I"B܃6HeE>x#w=i2Gk`!™x=W`e~*F=64܌l|oup tؚ`&E}57w43(z^Ch{^v^4;r8@pq$Pmi?QYH`ls Ӡ:{(\` v6uwL>˼Hĉ.tO a[Quܷk xv"C=vV Ooᰁg@ZdW܌KnICMP]GM_nCFyKnE{_#}pr69UNm{4O7frKW?r^b'@.<6X:IJ=W~oÌаܽViw/˶R M!PKii9'5͜B$W;'ekߛy 7p :P udkkߓwa?*' x4(z7xqz81\s˹9TB#h<2mvGo`vi+;MNFЩS:_/0)Phk+(9|49͹_ v0\:\ûs\xFE!' R̜.*+=K'g0I9eOIأ9WL_qv:dܽ22ɟ =\R $LKGV?KPT#g 昒ԻGWֻQJ۽숚7^ʦή1s}J}Oٮ'Yaϖ?#.E.8u G߭=$+zÒ@uֻW˹4w^'Lj*~N6䛭05\GjPb/e)v]6Ldi}Q?|̲:Q? ?]tn~ȴl Hrw~O,h{5> ~׌.vR7[78GEoa= {{>t2ӳ2Oitwpy35[ M|'*b G4k.eJNֻ YbC Q|49t?J<ʝCx,0|VGΡgQ->#?}z'@7Gğ4k??Exϐ=E>yP%\ wm'Y8~oю] 4ul+w}M{ ]5/#s4q-yMZUqѺq0VG{9f.}=y1lz[KRxEf*rg!eN,#mzw`;o;K} 5Vݭ9Gط>EJ7aπzl/)̿mޞj2&E?]VHzy{=MoxW_c~F ]\|XoK^5BS@μ,Lsr?J\1EG~$H|[wM#Nn-{۽LN=O^!k\"^ =eLH*7c=\Θ "8b?l|\ 4K>G6}05)8\4.~8)8;zR7X!gԼI $+9uyU UupU}jUg*Uª]y \^Z62hߟ>Sr'o],-D)N|G*4x7x Sf@a/+j`QWyuُq^"Ixs;{$ 8?Ndǹ+rE" wC-wŋg /D~#</yv*D(CG׽78r.@=q);3!ܒ&"2~~@j{23Tp/E2ysӱ?HWgL4*a\c8!yzUHѨެ7ovue&ϹEuikC] q6 _fϾZ@wϝ<:opoޅא{oO)6)0ǧt~"` 9^G}/q~Ǎ0wALa/Dyp<۩s8Dm3=` =?j'O19ZXE-pL[\k>7EUi1 y5SԈeǸI<{s|q\,~6>L obOfl9;sS]t w^,R?W+u)K/xwI0@qO.? =:.7D'D'l߮+~npo @"cZo.I\ ME$Hl\;%HΫǡ{. E, Wra$2_5L&%}_1K}ϓً:ha_\KX6;9<_U.Ѩ=̣?v;5?{&.؆vȈ#_y/vBݗy-_]hyz ,`Yڡk2U yr){O*_snƽX܌Wc][1sq }kbL.N97㑬:7:DZ(=\?^^'-U$wCHV.P)^GXW >HHOWZBCczǶyJo:ӑZ+F=loZK5T8s· .SĊsU}N.ä`ubE}2+Ű?u.^{= i0ޏpb{aI}[| 3OM}·k K| ^K}!=|( ϿaV[b!w)yɥ~U/XhAe/VYPQN9tygk/xv\3Z,-Y{nPDŽy1 צ 3t߆FEf1 YT5/5=᪂/8[/z%Cas<B _A{a h++wmZ$ }O =!kE)/K+cieLc'DmR 7Ԇ''O0/<^rznw֡8-UKSڷC?^[ܵ>t5^ܓ{د zm쯗ٛ{fge7/pΔrVf4yY+:~Ḟ!Q_kkL) ==EC1 ߅rzṺa,8sQd^?ȣa4rf Dq\NC{}`ҹJO`XL:IE3oh73Wj&pɩ5 F;WDDƠȾ_I_.]+zU[敚sovè $vϱAAwNpu뗴w{ VNl'8==]oN:@SWn`Yw,kf >tY sP; *^TAجiPϘjiĥ"n/HrRh@# ~Q x h&w:$wP[qeXWB ʹ/<(IA9p.nCn@nf[ɑ&#ڧ+'Ry,}C]TzPoZ+ڿ',t,.vnFQjq-)u3ҧ WD3#joyv׃;DOJay~"``Ƽ,ȗԄxjVE8] AIl'z?Kc<؟)g᳢Ԫ)a; jpV].]ćEbҟ^=fTDazރ;eÔA|ExF+zLQ)Hr~!2-CW>mz/>}{hA/Km{}8ֻxrn@zսܹ*'՜~_w~S jڷԍ+ewȞޓվL?=v'eOT91 M774b?ޭ+ݪ<>_6[Y}rmݣ|y=_N5{D ;z'S 9ݹq(gRw;]>ۇ`@EŠb6so^2RMĝ][r?R"Ŧb5sH0C;KWуiC7V 5L18x_|gd݇V<,_[9"ςW'nC{s{M^qD串j Y3Cw{0luɳ}$~ /t&n߁myz7}- /eD\q`*Zx7)W4[Xmr}Wr[G'@;{l6F(\Ǿ]uƙ_/^N?/R Kɶbv Qqva?ARURH6V[<( ]~R_  u7q젪V(:aܒb3:=~Vh\U{醡W VОx?_#g/ӽcv:1:`[  k$&{ <°y?C WǛm|-޼Xiu%GM`qABءe?(=#9 ~YML%~0ށc0>@pn|Wͨ^vfyQ=$~E]1=zn송#ga;1)|\3kJ7_?Slr1)xb2CWɿ^g;~h4:_TJCڀ^9|iʽ;.dؑR9k`6;0<z9_cvϔ+Tњe_aLA['gOD ~m%ă4!l19m%=K5| ڞ~xw̃2+ ]X$Ĩ-^z3kCk!^>@rr__.}u.i!:Pn@._Vp!peq*{R(,7zw="L% ̙7밓~A ,V{s{~Q-8]N.-J/ ]A?/ ᛎP"':?+v!Ix@/y^ǡrlE_ #Gߊ gu/ԅ#%vJ@oj3OYf27Rs(ӂ$`qC0h0Dn׋oRoV6][g邇=ި5]–~LS'܂dSocLL!Ds}umQ?HfwpsoD>t*u^[km/vae.J_o棊#3?$l{.بsUfpv×y4Ul\ Eb̝} ?߄~]B$?4$idMJ3p8-p>^a_^?9|D13o2QHȋx doc 9TNb r:#gA(yXljՀgzہ)w^aoXfh/: Jݭ8o˼?^oDބomo{LǦW5D5fh ˕[jILt9L ђJ HMԆN"tݟ3[i33oD7%kސMGPXG~`@S$f۷Z)NI%^CGQF#47KjauZ>n;>L7hc0\Uۡ3+ z[~ג+Ww#;oP*~k-p v7`ރpi"wHeZnU;~`8& 5{ٓ!VdꏁՙKVLϹ2ex L<[@eآ ;8wgtLN`3L2lR-E(*FR~)d٘>| ?5Ԩٟzɉ0TA[,D^"}3ldu=KH\)&EԳ -4Ŝ#dqYW1KFVdYF4)V?BݝN0Єy X7Xs(@yص]@][Dq?0˿K4߻JΨ~=;Eiط;xbNQ4M`FT soW<@J.s>egAQJ㝗;P\=+_O 6pOY @PxPxwd*ŏgoWR~ HV^x y@SBrϯy*IIo!?>>ncI\1,P0Y!I%KYv} A@Ѽ@Q|-PRbKBmBk}U[K7E>jsΜ{Mb|~!|sf̙3g̝KM}ZʹL7- \sP^7cO"O~S531DZinulbuVTK/Elo~fy: Op*Q#QUljfUe{p!_)TYiOC'~$^4kJȒGģ2*xtx4C<+>:KBRh}?w&C߬oƒ} }17ӞhӋWisv}u5<q)e&8o}ѽ&g R GIfcCaM_^_Ox.Gf]G 0:%6ZщB~lc '{q)G,,0i^w_0Pޞyf\6%}#I'ߠэG7 ;c1D{]r_$qm#%sjp2wMGШIM#WWA{N ҽjs H!$:@f'RQySW%7b*@ Ct%>%6M1$҃4|wx!k(0x)o).Oj`my1]_n~{SڼZ5:.tDŽDp$=L I]UlBS<9#~I_t]Y|7Ą8ȯ c U}b{sfXv& vEξ^r$YW)dxK3Kb3އ6`UV1{/<^H<|PQ! Pov^U2r\Dl1Mom5kN7xTdk7źR0پ C5O)ana("kS|- _z>H_Iͬ 8PsܙnJWIn1!:!X@E۫nkxxZսz/QA/>?9&Xga \o6\O哩KV\)`p}B^'C QȔh3|]{BlNǦLGnSx ;@,%{PSGHU%N쥊3v9n \'!NgN~^:*Q9JkX)yY&yBeO.)KQx$VߴLn5TG{O"RЎ6 ʐi(;hm%o~)<3 !œS0}w~{$\sϠiJ?oGʇ{zas(r]r$٫I(H͍Km'u`) wKk$EaZv,OַKqj K`ETQ+4=+X ɗ{Jӻ!/qcCfPxߙI4-O}H֟8?!IwMi;@ËGM*W}#B+,Uzbpvv$'+&c6pB;@Llpcx1:gO18{2IG=+yns~=î;?д)o_~mIhHRD|.M6)6UR`v}5'0(anר )%R>qnǜ#y%:>.u>&Vx3zDd#jϔI]}@ֳASG7P kp_ƥsMҤ1KseIv4V3!봷&~EWk?0;dW3o2bQd}eߡBpx/~1'ҖSQ@ҁm":)~J&'vl^F 4D\UfLs>J؉73_:FrM4z2}Q-H!RhUmJ1>z7`Л?VDT.Cw)yN}#ge0txG+/S-U$WݍGʽ5szZX3&il{p4ױ,%@(Kmv,O?pسx F$*O(y#aiUO~%W⇮3"ܶrr8:n*㓊Nx,f*㑫'P3@I vNW bLad kB jMbqdr,goƏ M񥂔FpJ?{/?oCqJp]z[SẮW!jd6 d$׭ys3 wWXGOݚ8D@j<8Rj1$ xCkQH(RDEx"ZX\/ E[c 'h|uг֯#~q\7R-+ݠFcHL {#F'cjS]"ӟӰI1ę뒭$h 6&(*CM*(' ԩ%QN& uBjlP%ZPܜFAɕp)`Nfݬ\ g%nZAw$$ʂ*T"pZc-*vS|TS?#=3*',^"b:/g 8G! ޘz,-Ot8SDmuz9h:k6Rc娫=P5.K_inf)SLR2b]!xV8Ϥէ G VJ#JI,SJCDi* 񒒂J2B@d*]OeÚ*ۣi*`&͞X+,k=1pWKQ+^#=Q8±l~%~nG"85 t ΛYbe 5\.D7LərrɆ)3"" -C7У;,TRWN 5!l,^c!B(;?tmHךm +U1lD2u/2oRۢ?Q#>PP>"J[Tg ~Y2A> C! "3FR:]h3ABM ];ZKևCW{M;k[VP q~yL]#WKo &_;\/ y׎iPM3=<(sÆ?*O&~*bWuHtwlE7c2>)@Su dtMh ,񯃞Sť=nloJYٟS . *\ h /dBR&5\CHsq,\n [s1P8jIjZJ͖DyD=SQS$Xqijad}`rh BaѤK0`.K' :N~;Jȏ#,zXc/װJmkLžHt= 4V͒=hO&wz(۔TEAc"D"J9^qbPXZ 6BS04!V˜!태k3p YaF, 4EJR@4ƴM}Z`a̤״S{0?.񟰍dS!T>!od*\FE 6hݡ$ɪrF o ]LxN2L[ ?wBo(+zB-FXĵh TW/Q*Ф*鈛U-O@Ҷ( )V:oشs.8s¸aW`ؘ CmqV/ S-nX]b&5lR 6`ܤxa0&Vh}6E4 !G l>+Svƨ8 *M)aCp)E~n+)?_󀿽5s ճw#"f8!fB(~+1 śFŃc0QCf{"Ĝؾ]QpBOރ~Mw(fMۢi{w>xu޸]KOϯӴ]Ӟl<xu7iZQ:6@<;Yp6`>y@7[40`/qc7C<|⭚6H6M<mѴjy(o_ pD8B,tԴ`|vE}<8b7X "=?i! }r <&?<  >6qH<'_C9PhZ9B |0SG.3('`/{G<|t/E'4m7`IH0x<n40`i:󀣸nZl_qA& _G:KM a?9/uwpvrԎ4{"+g+'onNfM׆µ }}@p9J*'{Ý$~ٮL sN@8=|`*?>B}nΘm9j_ܜtWNIw+カs^9)gBڹT$W6-QӮ27Bxevx;KȘޛV?<_UQM'wtko0=jNϷ X~<+6,7 ؝)ȨYز.CΖ㷾P9%!,Won:gL:$Bb@信|ݫ|P./s|^9}QN^eN&.cG]ڦi#ROݨn#6uP<%UT"y`T\':W!є=U  _h;37uqyۡ)S4Eocs: [d2D_}޴ڜuB?n,?Gn@Хu@_gubUfK@w/O ]ȳYI6Wc ߺD.+ׂ+ekxyύvћqhҺ3t/]&{-ztn!􃟷WB;KJ50lwn0엗CxHXC{ԻA-f6}!m0B\*lU^^]^ g7l]_(4^`WYw%з}AHx@AڣQO߆FbO&5WvHU+?ykeC{z4AnGmNTBnLHJ XKY& ~g#n?_Rͤc_"F~-hmU93#8l|mSB(uzcd:϶дZQYIZ"DƶDms`s /?3K27u Hu\gNs\)F?pdyx (u{W#@CǪ{wc}H0c׋O7`fQ;tUٺ|z!?^ʅE/թrc?b|p# tl#֢Go`#V=*7zN߱W| ƥz{ZzJ'ПqOh !lC7)So]  f o!=fbkIvd&k`{]O4ϔKq qJ}!m~l9.?^9c^ȧW!3lw ziz]ݬcofuGO|Bx8u%:?+>V:`Еɿ[رxhU Ѵv`b^Ud^bWu&-33$ 9N_o~{^^6?i|=;{>X9ގ{@ F[/tgXݖk-^9|G}K|_c,'9!)cJp\{',r J91cr>&o/PKe~"5|/;aoQSg3X?8q:SsKWC#Xm]6lt-o{֞}~]wg{~={#|w~{?C?x?~#?<{/寎No_ݩ߿~ʫ/ߒ?ƛow>֪++N%*vEZSk<1| 𶋣<c-*րorOOE)BLiӆQM#EU8S5dq \ <1Roilx[|ԝR썅"QPW0MKxֶz!PDWG!7vpH-i{|;/7_ŽV;6/;o&_]/EY,V4?fntr+3O_F~AK|J.">."u%Y?jԌ 2~͖oX?|tZ 9_ŏxefz.K2iޚKkf(Ǘ|[eVyY?)?i~z;C[W9ZU/Q2''Je~kϻ*#}Ixp9<_˗ZCRߖz \>ScW.ᝄ/. ]My/NۤPpu,5GTQh?E"$§⋆~ـ)r~_u\ZG =ϒv~ y·~Q¥_j[.Rr?khwZ7r?#3D/Wg#ח 'e_'4Me d}2e]!!|5 z?\Sɏ~,$~Ev79m}`y?e 7t`ڵ kϙ,HzcO=ez$$uV CUi,ɳHKq%?OX?] Mb]} ^$>G g Ѓ~i^ [Y}295#*5۽qҟE,K;i6' }`O' 0 %y, ϛD =5{ǭV0}̀',_s?a"9ǩ_ru@i ?J 3doр_y ˣ>zOcY&?O݄/=@uK,A8$g jO}6RNZG>K/roy gӀ\m2箣 u g"Ż!i닄/2eoHpMw ?GN zh].~:bÚ>Ro7ުWD(S),K}ٿ<\0 7$X^"M>ɐo~m`|<ߡmO xɀ?"-,?L>e@KH;_>x_G|#1ߺi Cy,3jl3sD7%u<#'LBO>nc?'icr/c#Ηs|!YDƲ$X£'>K[h} Jf֯ W4E<o+Xr?yfߧܱ9n>f3%:\KrO~ !7yY_"tA g1?C[鏉-wy7>ˇOdW0i}<|Clj~| K6%_] RN |Ϻf?ݼ%ϝ[O@G?eJD?u˗i FȡJ{O +[P?~ 4[[ xĀo [iޑI?'_y*y5BO){;hD9="2z>E2!H%'ёɔmҠRgSȖBy:]ūZvzn>2N6 v>;핝+d;Akho-A3F+&3:06Iv;Ȁ^wH{Gu.O$Rj垞 z;J{hXLG:t=$)Ƕc0׬S8U,%3sjɍ`ΫǽSCbq(Z]X4 V5)~mD}ڈucByffh:]iԑxǢ3ڥ#>qMLG:{t[G::CڻU\bzcpyZEM.mvu׭N>etwu$P5OoV[m7:Uf ZJ(PRo'j9kG9d 'ST$_Ήj1R<@\nzãQ;944H٩фpOjr <)KNptz^unt߾ё;GTR֟kN]4JJgmF)ee" 0.BB"rz6ѪqJΩ<6OU2R=.W~θ1hbw=.ĮtZۙ.UmD~v۳ sҞpfJ@! ACW|ٵˮΗ<:6gZ:;%uicC3M0^ڔ6ʔWfhyP+'ؼaۡ* g%>*XI[)QXUa4e^eNZ:!酵U*lOOaq`*)tiVDxMS: ( m0fX恈N( /=7]4[J)-lA ۞陵19E:@a딷X,˙4̡t!4H`4;Xq\6fVWZ>9'ѲWm%\rRKF.:9#+ ~o ?)NhA LZAѨaXb1F<9)N@ }*r)#TS]m/i OQNc<&4j](vVSB#r[!ɔm0`A6[d[)mOa儤B2Dx'RP Cѥ|bgWv4j l] V@KΘFXo \Q^l U Xn Cop/\/[;AW֍iˣfEe +8 \ʪ3: g*1!H\wr85Gz{%D.kuP gP%hAoffdWlq2;'fU O9렙;&Azvvի3nXO}c7V4 6eߞL,y.pY@ZS@.sŐʉܗ\]> g+DbmtOWW־X4źxGW(wF;BL-g)ccCtg;m|8[eJٻ, N o`Mނ==q\LX`ZY/DfC[^d2 &Ov j<KEcbS=d1Pudf*皐(Bfae|*lmkAy5,X*$pG]qZjPy?Qֻ<"jUܛ5_ 2rҁ'%4yNDjR7V|W-O1];N>Kc=+qC`{Tb2e%mʕ1vos4Br0>aD[OH H 7DE"]cVHnU8A2n[t2Wk(_qFB3fzb` Kta*ҟó@/axl i*LW󰗉n39`#W"ŕyOM4Db8qE[2;|ѯ\ s9@~m(p¶ ʚ|E5iuyw5[@Z]kՌg19i4Vqrױ̷1px<)xg2 ٤^ |@X,!Qi!M&L-U»>dta EgJ ̚\%fpo6(+epݮ:xSKv%Pkīc-1MM %b `ea*'Uxs]gG"o=UxRHE*bw#ѣ"; /wawwg N9"0ޱj ߙ$.QKsU>'VP)ZKAHWvOM/HeRaڀ5'  _p LIjpPNg9^07h_j(9LWOKV8>e_`T9A6GBJ%p6G?LV[Vkѭõb:ި|[~8UhrNJ P? y% 3Z22YL|VN":*vn ҂͗ceeLc|(D{TGW)d.sT3̗@*L-(;h I@>% qMSp#]P4/&x}É^˒K\&̼4'DeÌì^eYmڲɶ?Gġ3oY@F$jYs5hpW8Tu5>dmsj<-Xb -|pE[#Wȣʒv,[ 18+ةt 3#ex<11G$D8Yy 2B^;zʅld.r{ eY}k= klG\ ;,հu0119[<̥]77cYxWGXH&^E񤋵V)'G |,p9ucyU :"\m.ϋ>jPT8l Aҕjs9\!=#&轒j6LrFa0L7dC#{Ŏz|Ʃi82p;|_|ݢ{l8Pr =A|@js⦌:ǒ|4<26lYC>/"I˲Ύ&/g ogH>Ws|?2۹ɭr476u_ fc^R1k,,zzE{z#e,^F?=xXo1pz-=Ezn4Әus8'cYpZPx (!Pfʛeٯ){! y/og$ _4[>&L qr_. UO$:&5qh"-Qw'IYU~zBKji 4_>f p~ȸW`Ycw3>,n43шKw4/n1VIggo"X[dbY}ݛ3y2P)-Z]*ZWqXQQakՅԎdjpd"a_|J46芬H+5N\#X!>eIg*BE'AXv tzTTMW{ m{u$&vWXͲJҖu|k͙4M2.Or\mAteaKo#s 4[_Zթ*(x1,Yxf+:yT_a"- :~0, b8zZV:jd?ػ6neO rK ׆IRcaO.7~;iW~!9}h7Nt}n=*P(k#En$+鷘1^Ljb埱r]*>O-0K@1;*cPV jMfSfk[GO3/=;shsLq;:J, \+tY K2jUhAeҕ ~ o@p"(\\vkDU%EJ5TJ}Ċ}?I;  >| F(gbL,$ɜǧc8wf"nJbۚ%JvZ鋑 ;D(zSZz6nZ!mcmHbxvgoq9s@Qtjj={N.j>lč5qզYH ^(Qfgѽxz{hP4',oi4*߅<y<]@G S+k 뻏s1/ fJJʗa霿RRc\şRH~XjrJjZmIHbHیh]7jz\N=:u3Q:PRYCӡ:Q*M9ͅ4?2J+hfů猜. bª,娩&P;3)4@$}wˢ)4KtJ*m'7v<*W0>N|ACltYұITL[3L`[b=I}Z]X ݑ*UkY] QPIu>$'RȖm8y!{,*oTR+~eDF9bKX  rRJAm'GǍq&RnF X!$%6`ө?h4[Si"| #G Sy` l{GG?R`_G@lc`3ͼ!ӱuA az"orAg<9i?˻8B͙H֨S6M@u!˴0ChN[T&o&NZDl>LzAph:%ݾiG'0 >a^?f=lM='ʘQEkKR|,~H΅8nR+R̝Z1-H=]bIO+2CtjЧޡQ5@XcoB.'r8UTߜq7F愍eZ6ĶxfGfZB yDdePAyɍä&>ΖUHD MP*fl i^TjNDT$PHEܷ%~A%T =J81wN} Ztf),dضܟAfa7]Ԗ5]WK653@aC_<:,HҐ7b`@YQ$zS[f:eIň%n|TPھ9>p8X*x[Aj2cz]!m`NRwoKf_fF}fbg'I ׻gG1ոTd)ɤAi =mA(O%{! h<|+Qge5qDcdm6~ڪnM4=cݓ矽F/,^+rboቭQ'X1vb1 /{YɈU͗dMcc=gή*8nvzl9goLA˕xc.ӓjic+P/N)VmR&q ѫ,xcVpJ G)3Zw_Ue#wj-)ÓW/HVMcN{pRS&'x3R1|?F72kؘ]F.Y  kSsh"ể'R-~P\8P9ńoש~ptͻl<4J-^$'55q)/%?p}jcqagIPM3`#RFC"AyWABj N0i'2J¦,wh6O9Jw|!(q؟Rw!(_aTfs=ړƉg~5}N9*,?J-bq)򈱲 y; txeMxK2i>wggNֲjIv<j YdDi9(>V{܊^W^:|jaxՁXe2W=JԬa: ?3$lѾXh6e+7*Qf#WHe]gԛa[ ~:jHS|}u|6yK50F'%#_^5 {uITI=MU&f89ۋ# 3L 2@$ͨSG:ND4|N3hOȨhz#: pj!@hKףZTU8ުˍ=_2 ,oAU(0#)îmo\QL atʔ*/Z Rk3o9AgNE6iS8+RS,u8ؼ+MMDvÅ<唞6ajF.>5pzn"xDMq*Oc\5YD>x,qfyj:: {wpl  eϢ=#n 4c08r,!0L3tR)$W޻t<3r#$6?h@Cr4ޡx:IuC_8֩z^SRD\P{`]f)5 Oʀ"#5K)V'}Rި'PN"wH}"jA4"䎎[;f~MSf0Ժ|pkx>}K_, PZl4/̟6%j%p~-p[YZfg 6x2p|Y/|c^۪я7]Rw2}swRJ¶p}^Wff pR!O͋}E#v:#9SigU7cV4p2g l|w(u(?st#㼎rgO-ˏYy,׬%Μ}bfQs_>\Y >5]UOUʥn׃=,/7g?s?o/U-YU|WeT]`ǝFq=wzWT jAݔ3pF{N-HS(o+[uM^\bGX'di\9u ޺6bυN4KU㑃+R%/s 8w½dCz=>]uv/p!l%upc> ƅiՔ@SJf[簛d5b=up2T?|~77[PHpȠ\R&\x o4!U=e??~;F%_כ;'z}|}jPk9V hf½ΨrU,تgt pK] b3>VcQGZ6I޸ϊ#V4C]* nvs#\WAi.a_efS<Gl H-+a Qf@ 3̽4}BZ<*|C}k(p}x8mdH6HUA--LF'wkt6Ԍ!N~5`uӈ@m~5lQwk$7,`hqM,H¦ERGƦm* :WC\tc8 $`{"͛җZRڕuH_Fd%\5 xqg{ +vcbN/ Y GL2 7 ⹪l<ѷ{,'|YwVX[flVPЪ*n{ذ#bcm{gxC;:P [(q)<8C5m9LSk*? |t"N ްsq3`\̢\j:I&MAXH/<+c81PlZ 4-D؄f)u?One2n>Naw/w&ͣ::i4zg X6o<;#-rΆ$@l$j <M&%/ۃF*@|)뷥ݘaߒ$I8> $E{ճ|_CaOX{Mۦ{EeGUq`SnJp Wv c7sGo@7u\ ?`BȗȲ_XX9bũ"K2ؖcIn1Qi=9=ݶݞiv  mliʁ44?͟{̼7IO4,G~oܹsΝ;3s'U#Zz^_dXLDDFd|/[?JyAv7:SCc tȷjO+.K):)0FM[4#92YO^ J+8.)@ۊġxZCds&<3HO,OaldP a5u.9/&pjcZ@ 6PmĀB: Y9QMg]H} zʴ 4U:_F5 ;7ao֢a/UbsT{/^Ǻ!A/֏@GSZP,ٗ$'?v)XHyb6Vw! V$a3CB2ח#B^!8u2՚LM0㪫78{Amu>yGeYZm*Vb鼱RÅӥ̧Zѻ{c{{̷V˶0:;M;|wlIwreFۨlQHwv[bf 4ucXmC-lX].5=v~~5!D `fu 6Cj׀dzP -uԐRM$$0gk0t[ hN7Დ'.Qz#tHE'_XU,Wq::q5MP8: uz fz@.<ر,Z>rs9hEk\N0ap^>H@OKOJ@YK=3+42 ] 2&`qN{"ą"\k lPDEb=Lr+ Tǽ*2>/j?N*'%5X6bǯέ9>'z}~M`jy_Gx@xeXd`_'Okv̱!Z378"Aka^j|e*@$">En]R¥}kWsnfy?j%ĸ]mIc<|Nx87%uBv1N%lW2'2lp3.40!@jUe*RӆX4ķI9GXH&Md7\]P o|Ň"B:%20WabkB1ZBY `f5XP ]V,WJٗ]NP706Yrʄw5i;Q,t9*~CG`͆M=-DJ-QNTeAg5V]cbbf&7j! UQ5ң˜o:sh(?OLBJ%#*A(J)ƝucS)F;x>_WCu4c τc8*\>lH>GJRGŠ);ЮU.̘w][';,Rq.YVC2 7 ,#m& gd]t ̃]297`Da:;-"`bp;m4.q"61D\`< E@< ՘j؅6sfMT]m^܏-58XQbC-mx*XV`Ha} vΘBP± ^;O7.a#,rW{VS m$%}ITtƂ嚝DNO+\ܔ20bUMز';qTԮ`ʆ˄$#6vYd#7E0x6-XI]v 1 bZ),JdOA.aiAOc|;4^ ,3ϢG]5x+d+9eJԥbVZɒA/\<d)bS'bl.kde7CϵM_2'|^dO|'K3L 2B}+Rq6y.11ΖcXjz?"je䐼ox )ꩥmY :%=Q\ǽMx-9$f,9"<`cg5#=te sk_5YtK ߔ3rԷ1"c |fqL,mt26XH5鄕]/*)bo7Կ3Bҷ=+ J;O8rP1~u zREU \nf -4eT#uGu1Y#m DKyrA un;:S[Fi)w};@63BNS\}u8TF%LFKsN'"! "$f'zR:̪^?xTwZcU'ACHXRપUkbzp*0MgįOĦt A&f(hi݋EڕX-<^6bōZAla^].n|LPV)+/7(ףsYia6q9YPH?yݺ#[7Ҕ6;eTd.[Fd!ؑ/fiGKGtxFJ찝^ھ-2|_',5-XaAI,SCu%StHJ_nrFgB՞4 &yӇ9ir'4M?K,+PG48[stA? ƍ&X5j1aH^KSqS XЄDKg>@ڝ苑_r=%ɱC=Bs:j.~&mK׹[6n6lfxiݠ,Ev n.9#o Vj@Psz{4߻~mu$y7 "Sy= WkhWfԦQylNeKdmh Wc ^Mc}>y*0{wURD>8& /6g?.S. xJU2>PE.R=ًkb+n?v+{G]CE;LqPЉ Ell /PSs|gfµϼ1B[je({G#+6%=D47q+=Xr q.WHoqӱ%C$h}U.,7ư̈̄6U:x}&JIHUhOxc,X $zAB[DP9HLvrN@EYRipKPyl}]ZG#7ZeI=0 i6 CQG|yFRVsBv@Dж#AG3Vz6٥*q=Ϝ[ H<-~t ͸8 {3b`wP"̹A%%?1xY4!_I9!(Ub;TXU8;J".<2bB͌y2RS݊}N\c*'9U)fnq&%3+R*87˒P#`.'F솴 X+AlfM̚j2aȊ&L㈙K!9x\ z$CL`( [JG2pFY.6)4Jh W x BAFlTpɚww3ډh"ˀ@9$ ¿͓KD≪ᣭkjMJy"#)~ j5T]<,٬C&|/v[׷6 oءn¤Qu&T)wzt{$?Tp]l ҏxlU/9^|`sUw OYYexM~;Wk Kg+r_7e0[r<tB9tO总rC~NxG999rϱ|1^L˹ )6Ye *1H rb>_OY"q:{.g<;Y{NdsMiοcgr:mY?=m=/0)z3 ~"qm9u'_TcqCW3E*_p/a-~77q)/(| Aڍ> :U m?4sq6X_ L6FDh3A∍S4'BFA=1vH+NA](5` g1ށh""ԞoDC=7hdD?~Eȡ7@0S2K&3mX&ĖgC. t~QCp&춙@߮xyp՝@œxRioCpU5&6 L4']c nuk}q$&8@^Y`Aܿ&&{Qìlu/ ͺ֩S,Eqf_N;*b7dm5ã4>GTj> 98dZo]vjQ'[|?χ6b}? Y`3>} W0إlqwrat&}m/3;3]R+L[%)$xoWKp[9|I[/ % .?Hp}!G$x_ϔJpy$|HϖJ9/? /K7i ~?-I|7UjI" ~/ $oTQK酠}"Hᱺ+Xy-@d42>zb t >MRtc=DR3/A76UjtFUCw'FܯUf/Ue/UdIFU3tJIt*Ct Cw B\J?K(Gt_J'G'=Y sexeHΤܷ/uزa?+@;: pB+Aϡe ZǠ}Z̠3.=A/goq =¡Wzm=>|1qښzӾԋNu;I߱'L:mI}sdӷM۾CI=G6R/瞕%8?R*nLCqrx7t2|rP/5eؼ ρ p^<:0|ao:\/x0%)q+;q-=5չzܗ/UXvSVҭŔ%u1T}E}9_c^O-x`Ȃ݂?wdc}wzP7|o/{ղ%s:k *ı8DvBbotƹe#ɃvH^K߈1_j/Cڊ9ʾBpfА@ָgPDNϘ)%uZ `,SJpBw>(h"H܂Ku(}ٻ]-HiPJ=9+PcGwAny#qw&e1c=lhs ėƆW SYbL:2jcȋ_~gl̳; By+czBe 9!ςu!?gz;,}|E5A!aN5Q=5ܖ "rqR4#1?yK@lDgR+e ~ eù?T !O4>(T{kX&۟0B&'7f)qwbfĕ\}OQ]},h2,lʿU:X-@O'~1_5OvN,_gkm`nkM֝7?/+5f[z1\8ϻ%w=ɲrmIp^汥󎺛-_$yM_ r Wk-_//5k;;I.C SR+4]\4yyR׬ h!4!wBV)SeV?|9x I5:M̸:j 8 w:Hq4-1 F D}O{ccԱїr=;Gay1OQV_Yw/D&L9ikNCfy헁+axJx-t]hރNuA? *A,|YG;>\w :#⿓Ou?gU{XuGsci!_Iy*4h|^^IK <(A"<h9A 's{ZoB bbנ:@ 5c lx޲e+o[6@;K΃<|DA>3M܂L~م5CGM6tG=y=oE0%^יEM#+ڳ &6~,uH9eQj^KC'Б3&<;jA4h5!n?ԛ/W?ݍ\p1~wr!o4tBcTr,p?XЙ>-{_b y`nZ*kI go%B3Wt[xдcoR'͍C'^h'hn;ϵZ]k|> ޳J%ە/ԄoMI@'_jh"b?T_8φwwڄ$nA1pQZ=k϶Eg9Y|6͟5c+[<z:WK=.j| M= Y_mdJJ HOM+zs hPK<PӃ7f( SB.5A2tj;~k ZSϥBXG'{lIUO&_fϱE`Y&# oX0_S{ڷo,_l$>fv0O7Zm2Q;֔2]ͦ_vJmRA=/:6˯K& /9[NTu'F-:{wlfd"o4Y+WؤRbUD 2LaN#iFY!('#K%JUguJb%ǖOrfJ'751u4Ԥ)1LOML:w0u&rg,6m4o~yW4=hbe7Oa( f7~ i@&ׇ5_Xcx/!φx A5x}q *Tݵ.{ollw6wFSގ+f(cp;_+]E8Ns⫋K+^pgX*\[|(b]]\O = ~s?]\p-_/.¸q r5/X'=cU.]\CL(W+ȏ^C!Kjx!L/ysqwFgolǺ;\vOÅ Px3¡ip _@>.V  Z v/ xOx;{ ͸xOApxVY]`5ex@g+菟b@z'zGD-QYfp=6FkLH/<ԋ3)o7?b}/:;6ɡ`߂B@9= ֈ|;fɿdq-΃3Ɵ\nxW+ w9KHUuNo}|sE-`}-LbTMl-#>m|QȪ t:2zzܮgg11r9GbO=5}wv_G(g{:_1^onwd5ͺ6N_;053/pE3ͳf)̽y?vق^sru5e勗XmK핎*{[[W߰qyӊmvnx׬^w mޱOXr9 &I'6e%q ہ8Xdˉmi%987e4($ZXz.PʖBn]ѥn mJS;F3(K"y޼yлq-[P8 m><2OM2߱s .K.={/.}_k|u_Í7[n;o|[w~;p|xGz=~?}_~ǟzg/?^K/__?yě߿S|ӻjj2lk/]KyM(MHE9m٬Q4CA 5O^{6n%kw 2qtsh4 A-_AiG0N)GEy8s9g(_8)#9C܇ae,&Gz4;gX f@^i(P:1f.$;eV崳$|OJV|K8rnYD94'Y,2ޥzLq{$Y-F@^)<5bKW (^E(#Zߒ\'C`n J;  v&IUNbQkhNpyw >PHk0(v<ɕ/"(#Hnt|,V4{}HX{Ip8X$Lq']aE EO.[@+i/ ذgxb5<יf<;F؁~'~PS e&{z` .3ssKshнxs絓Fq[9*<<.̯2Lr̵w7Fk*Lt\kW3yk1/_yAE:DnIy/Z(~ys a+0H$ ?E y[F|<aٍͼKAauԉ $B[WۀmSWR U9Py1jLs{uvTއ4מ͘uSaT݆*';ĜX܋ @\yJ (~8/ø1x`- a9A AܱdU\񻱑|Z :YJ z~֊m"VuS (P;h;̐s~Ӈq fh 9o:DTpZɡͳRط;g?SHiOA뷃AksX$H΍ŀ?w?'a**vLM'ܤEYE$a#ElFsUl'1F\;9Dr߯C-zW0gT3ٽ.^n".}~HY n`="߳0o70/D8.]b)7J 4\/D?v.RNCOZR)6jxB"l1K4 HB$7[gl^v&wl֐yCqC.+]Hy$Ty!xs tK5.5.n͏狵x2D0'FK:R>hUMdaEqB ;\y-܉*#v}Kο 8?ʿ1X 5m<{K@Mk+-ƽ]0xbA(<f!UnhvSPD%8[ k, V H螤B|Ql)DBKa%`&/PajSH[(uxN>0@*6Zht%Bgp+ 0," RgP<VR1Mv$ϰgV(^B|g$CpΚeʲd4 J2dJB΀J2q" |*/md?˅$(:54 s<&C] 4V-L$nOIA\w%lUg{}{5mFȱػI:#RU̐wD&~{o 6=:rg/x6^/6ojmQ!UGH /ҎDJ]=zSzme"h{@'7jP=o\{cý'lT~ -Qt xS|O~nԫtw<{b`=!ۜsJ*OX|$Zm8epI%:qah41&glˁUVZ;l !ڑJGUJ S2Jn&S$xqB{8ޮi$)-퍁WM9/%O%R\ę85``8JF(ޡ{ۂB=3- GerzԘ\PxX7Ta Fq#1ބD`]m#PejB0iJq5=t'XP nUMiIa>$ZԝeV%UE2nCPH'c:eYS,n5LrI-b&1[q׶ň$B*z[LoK譚ޖ xӑ89d@ @cu7ʸ@w;Z`w7FJ}˚odjNZ4$(nEُg~vHKKxtHL\BF:al1CKxvKJ|8s+(YR F'֎$"ie-diVIIG`[Ǎ!ڡə>@En$F,ud'R*@gAHh0IGu+4 N$0Eq{h~ 6ըaL8`ȳFzϵȿ#oS9z]u\;#\+Ly\wi=>ۿU=>KFZzG}nH>gBOS z|avaڏ3YsE3.x(ϰϵϳY8^' w&{87ϜCx˫˫+5D36y&V_9HUso07U"Xx77H0~:I>E8e;U/GM r~l f~.(f}M Q ;M4O )6 ealYȹ܏s6s+rFSzK-uvs?-G~,oin/-c70X0wovuϼBs, $: p=0/>Q_R'ө=]JkKwTuڀĕxhX!oNf-Y&`2ىP@_PFFFvq=f"kUWc[PP gU-):\X$MJPVv45*Vu{Ʀ +hףi:N|ͪ.R`!{Zk#uZРCht HOG}8yͤrLrKx4꤮4Mq:LS/ rB;f>MEZ KR~`ꔕy>5bqIr6]И{iB[4PUPye<~?BۣAGc.[f8ϯ;X_>Z3h(X4Ń?c)rV$.2ƞ5 r6jm\}v]0q,W #n.4Qqe.uSGںr_\. yVMp|”(6뼥;#P2"lL;q;ťQ.sMG{o-_ V-9ֿKOTv[+ 5[j}2P+?mw!6/'GgjEAY2@D/Lq_d㿏s:o54 o+v%^D[8 rTh0 S!F} }k`Dur~C #I r煮pL$sz2ׇU2$.!r]Q` d3/5%2{qSt]'ZhQ/o1ً%*w D<8+qESQURrt0M r)&-e Iv}Rz/J> /t\8a!'L ydt03!':x}23!`;KK!y!lH ,X]m7ѱ 004`007K7l8iZ(=!X%ْq8Sہ@,="Г rrUn(W9RrUrZn쾷?nQvgwgggggp'2 ObVVDA1њq;*QCiE<kP& 8eH$!l^wl _pҩt@mTY|J XP;֍Zx܇(l:O 5duFl4?A[ׄy=  4Gq[_On|8.d:7EWXq"x mh'w()1;T/tu)<{3EiqcͩQy&3 /`IkD0O.@2pGa_N\]QB]Esyn5ğO&ӝtdGMb5%X[x \ 7x؛8}Fd=OH_yh[֗zt' c}L]MaTISح Vc0zlC;bKX ]kJxL(s++9uz$\c{r@YVQA>ckH cru'TWֽ*ъ18ѕLgڥк4/ w7-l1)c"?cG"T(aN2`_f QT:bL)x~ğ^V4!*rK6q4~]{u_K6p1M7EFQqc&E3'cOd X"7 P__}[*sx+n{^1u_zo'i𓞍$'~)YB4)Ɋ ?G+<A&0~*dCЁq `f!2/7PzZ[E;wm "5TVߝ] ;шϻ#/t/ox ń,[+ xr@fӠ(Ƴ+'c]#q 9y϶6}$IC6!j8u1g& c_MfUMo.&4'hkm]Ҧsh ]\U[JEm '+ć&6ű~Ḳ: d/%QHVQP$e 8H0\mM&:~T )ˡ>r[AWB 1o7}}S?}}n4JWX& ۉ. od-:B/Aq9=/ǝR2G8EvH.SliٴZħ_lUp[\.&&(蓤d B$LL¨/eѢE H 3qА5 Qe A&x pL?`K|r`ꀚ\I* xa:ʺ\ Cl!H.Kխz 4K蹐!LMJ]uw`(&Kju tbuYŒkϢ3hx0Dv[Xe*T]"ߓH_ V;:r?q#Vںȷ7.?IB? DDcnG*ĊͨDE_b| Q)Teie3fͧcr%nl}sYm3Uc\R\O6n/pUu{U6V]Y eu*[ R*Sj,)#RT% wjW6Ću@Hm΂p: ?A'?QJ.iF85N_/ƐlmÑ",pݜU˘$tBɂu.UK#Ŝ9ϔ4IL.Cuzm˙$vyإ:E]M;]Us<kFKLFݹoKwo+\]kRS7ӎL%1RΤaeYMUקR&% (})\OMx';+ce{,{C%˨B^))?qj-.6#aGSetkbg`ʆ' @@Z)] ٌyn塛p)$8"ͫb>!|~n'GQ>d@ (=W|rܥ]fÅbFR8|A zeĤT0@,ea[$09[P[s^y`䳃X_i_8RDj(mB<0ڨVYHU >Lt$<-fKHa2 `&2?g 3Vy#y9le) b|(`@h#CBHW-(GׁشSiU_-})nN!TU|}n뼎i `k2 p'{T!5BEBK=%M4RN!bmêx (ɀ?jÇP&=f G,^waŹ%B05X B Bre@2.4%f2W:K΀Py T+iJZΡCi[ةt\\uqڽ_8C!}i g`iña!_SW g@]5e~@nнY%2~6 xԪ*Lʀb3$6\EJ*ͱGq xr-qi[OrZNH_o}KL y:?g ۾찧C6Ja׼hο[[RQgց1ɑŷaV.A^b}Uzk;4 @o,kZP Q\e{ A/@`c|7;t.JBAR[Бs.o~i1Jdg^4Ϲ*Jf9"W< Qp=|O;9o&g"X0CGK>H!^v@|F2].3ebLPn{bVִxC1M4~Nvȑh_hϼm=-`&1&SL GXT'`Y4x(j8 Pm% bțZ0o%,Y])3d^!HRd!& xHF}LT3ʇH耗~pkE/a<$yNfejB8HjnVS-ŧJthBvT=Kæ*kmUPXzY;a0&.@B[2afZ2Es6vBAy|f uTl:=PK}3V gB}g `ʨ#8Di謕UvoZwdy|@j9AtR3Ff;9+Qmc@b`GbN Fe͚CT#V֮m-C ih-q^>cL.㊦>/@ֆY<'c4 `k. T~[{ran~DU|@"~/Gr {MbWkI-mazcĭA; <ieO_c+Ӈ_C?cRP&S>[ϙJ hn1+.[ek2H3 C47 I*Ķѡ tĩ2Lq'0WInB= IĞpnOyAƩ8 D;Vyt,~=e8>RcSWmo5%tT?Ȩ#>93 n`}NS.c2ņRס#ŵB$sfI| r90̒)bL8yxptr*!7+I5^ڝ@#Jor1T9*:VR`+ˆrO%25B^fiREƧ 1TC Pl*@t3lTZtӇAMqU`- DA6OB @BEkPw>VgDQR4j+ kS ZDR)Oh&ca !AzVY h(N~(+Jf*x2KBe%v0b@WR{Ԉg/;& 2t,ѕS탒QGvDz%]>É. !Pɠȳ?ang[x*\iZPdUG3hhe@Gȣ$V4ySbWniڭP;nhH#hkFeJ9`FjRg-u{iHIK٧ω"Qݧ͎l}h e"tC<4)Mk5t弑q'РӀY6m,6عe&XdǶ+V fktO|ߋ7 8Fs4JԄ)^-56fS|*<OFT̨˜NRئ'2/.䱒hӬ~}8\j,<B5W[{TShZFDdd$y)lcI褓T6Ԙ\xy`&O*WLb6Z&9N iSv1b*Qx*tH6HN<4ct}C:9(P(hޝTlrr%"!Ov"6q\u$|Œ;:NVit;5|Y8$Yc^*_B.GT4F]u\wWD6SVPFb VaKU+H⽦KUe9]]c(lYuΌ*5gPCИ>ΙD_~'!V9gTno1hY{p+!4o7kX]3 -{R5,A `טalmyvrLRfWTGP#0(⫩F}S 7*ɓK~ 8ɳmp~9h9E њM|N);]l;gRJa6tf._FT!Cv,\:hvخtC4=91Yf dO;, ˀ980+D:Vz$GH8Y>?,ӹЙ[ހuq1$q~CAoG^GCwWVtjz. cyvv J$ XAB,❼uזm^ |6¨ `P3|6\7իp`̙3)[JhqG%8xǩAƴ UL׍ppM*ō< #lZI~V㽵twfoe!zDG3ۻٓX͘דO+~x b(urf0k5V( ɰpƻF 1WcC[6ChK*x9'DrV^.bu{ -6#n6):0l@@Ě.q[9Fgڅ$Su2eΙ,, wƑُ&S|Hka-6Fsɜ0l~娵kA-bķԛY w0x3W$-}34Qϰ׶۬suG~ӕ ea:8]mHtQN2D,b 8ZП葠rNX'0!蜐`¸Y>~^ RΗerjD-mf]GrϨ.΂8gNbR.0詝y0-Cp3Zc;Ɨ''3{{,Qq7V|b4~9I3aAk=<DA`ϫ AbW =6*K lp#~>@532sPѐҮ)eP+ Npi1m 2ZEEPo}aNn &nwJm#f|US}nۺH bX_6$0v^pZJJ3y5`gstBWpb\ B3Yptz$^2I`EFI8*+%cWqUFEL-I'l^(cGeD `Aꗄ|ZǍN^V^%b=GV9̢JM5ߪ]ɫh s;CJk Ρ®_ Cqi[ NLx\HQq^gf5Y`Z}Shl8Sr@:<_yV]!C8ۢ tt蛜➶P>Y5gBdU]} fgIl;v( Égݡ=sO[ۮў1-E 6Oy ]sWTIΥ|ڝԙZ3 z''&#ݸIwѫdRv"ѡO)yTC.Ù;b"B\XI[.$ӝ*7pԂcӱվ7sE*RHhA=ZxV ^ t 6)Ik jR ~411cvD 1Ώ>h$:T,$ 71/zH+0$hֵ&[L!%-0N$.\ B/e1MTz =>xLX(6W(jB<.xofط?KdiI& #v&'ce, n$68ɛ#I/Ԅ㕔Pרº8&r!%,.ljH׺o\xFMU:g]"0pAD4N$#Ԩ5ŰugVV`1y[)%$@CI< ̀S bKԸ s|C)aS xYJߦI6Q-^iZ/щ%tK;ꌟ9리H$G-Gig*O6UarYu"?l*ϑMs''7Z"Oz듚>ݺOn0~сĺ 0H ^M# əc%Z{1nGS%!K~u~/_KŴDE.x,R 3<ﱌGtO&p* `㒺ktϽK x ^X`z9O}guU[oO,¾<ه=T_c[Sr"wD1;ar!pϰՒope`!l!S$D|mӲ-ic#oKfXGRq *t27:,^jClKx͍Oje~.]طN&wttjPvO(km -tMp< 0,Jdz4;Ao!vPcNF~wdzc7݃Οg(>( [Fj_ϫ HQ9f\Uޠh#ŒH#Ш( [֟3q/>X`C\"/b$͐8䲓T{)Ζm^Lla Š+C'hw. h;D{ZCGӾ}ᾁne1Lg]eˬJ(^}.6~t6Þy΄sB *6 8F xe 7ЮѷW@*b c㴰D ƭ I]М[Q}rߠ&stA [Dky'2Y H'p EqRZN13Ei4<*'@<YC6gH84"nJ=[N c ѨiTH$aHя=9w^x)+T|^Tt(Dlgk7(&PgRw?)^+@"ϋ撰#>ˎ Fg|2P3Xk6b Y2SR1R혼J`yM* -F U sM6E ǡ0P"nF5VH":X4CZlPռ`cű&;3]ĊH܃ rool8Xss< f@&}1r369SQ_yp7& l'U&iUBFIeEb!Qʣ8gl01+c4ۊssം7'`0zV@ۥ9f4 D$L ڇqSuڡrlv̀C"ⱞ]ԋA= ϯ5͹3~ujH[ i7ːl[݂$0;emc^nL)pHY @)4; <;u/]3sH8dH4;Fϴ%PBAգE1;BJ]Łi4ZҀ8&)A2ЩQ.}{ctֲDދTKHn;L.'vS(BW<D(!]%Cq.K N e(D;cӕX!x2 ەqޣ@eS:49?oB$z<3- *U5eB{<#)],PL*l>w/<⸁eDc (#*m-g 92IQΚ#=4(/uY^TF%^YEr!`@p">U +gt %Bd@ ;?ikSZ:z,?Sivy1RMl!9%)rS!RWkzQ. ۇ B!XY!ݚT1t֬r$4Y 7J3\|O5V**P^̙U&V Ff]=\RaGрej}A0v$A!_`L+V AhBj,|`8 ;YսyCfI&M}Nͧxr߼ g΂$Aƕ0E$scAu{L[R=O- {uu$=pG]Jazf }kD3یOcUnUUGj+\ OrūO;d.‡5bQch{go}ngl!d eRWq>;/d2 ?Ĭ0a?֭?d-st9A #ZEYJgz[<;yp7rb oKA0_>ؖ7>]T?][ -j0%[Ӭs+ST`A Լ:6qb@;n G6Kd3 < i6MF5lFtV )L82Y~s$"|hOV1EѨ_:U>Tf4+iӦU;NRV\*{evw9@]`Bh(Q00f fL]:gI 4FCGrhTGS:(_.{-E{(,Z߲:*05^mكT~kRnlb1tIp^Ҏ}zIS1&'o#R_G@#  .$`N bÑ 6릥:=VN (, D$\S_P]Wee - GaMO,qn0ק'l@چy HmBA,te ᫉LVW&1ѡΈ%ϥ /fbؠbLg7khMuaO[zz='aRbYE@0vv UaQǵa/lqVFG)38~rey' z$ف qΙTu>*d?;fALd0, nP3:M½ B[C!Ex5ɀR4`FTeE'-O {2tI6@EFAtŌI*e Zgxg;/Tf_P蛰k #nzv͙֋oF ~*iQ:Tٻ b'9o0F.4xP10i||&J{FGF4W``!E{]i°[tav/dWbp^`I=z3rNR8aYNŻsU$^ˢ`$elo0<`KWK~#_MV~b242]XYhD3Hof!,͎dd@# *ɐBR!+@V&9ٸϏ ލ@!,b&^+'T@8SZ4[ #2-|aOV`&PhYl[BfHEz [9 Z`\ℰn:}: )*O@A=CT>Zi i)C? &&<3u=~Lс@ /۫ E"6B_ 82ڌ$)jX!ڟM5kQh3~U>]-m0^fHgStF*M,vxw;n<' #38[6aL5y,b%&}Iۮ{~Ksy1 $28[2YDedF D , -E&ploP,>BCIo8M9!3wgB,Dmhu!'R>9@ M Lvk󓡊Bk`Pb/mFG_Y0ֻy2tr !EGAѡ2x.' 2h6xH~+>: GviDBCS|Vxxa~PP{'>&IumT0&V6gʆ"*fszbplggQpj) >€NB|afw6 Qz(7W<rrYrVw!A4Ik'Q U>+[I&B Gs,DìeItUpY_U^ڪ5oU Gv(uw1Ju=]O 7{&Z¯X0;P3)YsiRIFȢT67j>90dzCND% ؉-WXVDiFWedaP|Fjz㳺V'5:>uIILW ۧ@d>R+ IPdLLӌD1.LP/=fa&z=W=Qᆀu!\w!lPxݧ!\c+hv6.0bxB60+%)@=؃pKU!D54yxj|q΅Ok a @0گۃ:ۓzi%Ҙ'_)K'.@Kcm:FX"p~ll|cfM$協ob7TZj;!oO÷ @_0+b'umd !".T= EkF"^9k$RDt 4|)8(r֚{Κ Ak%ZΚ 66><7 Uc{ԽiYm4'>un VWNn@3DpCZ z@h aWg]VRp^;E08jDZi C5؏zpuMԪ2MݱbA }bw)iHA1p^?AG~1^pQE%T;&} #KUl^*H=\E=CzF`{>%NaHe6{}A63:"$48> mњdnCRi4OM&WʙBLF>ji.I;⺪{Rߍn · "0qYVXsQه>zES` ${D(:0@+(f2@h?QO$eS/n4@yLANRZ;ƥA-J-pQPjiۮr~#:ӧ!J\vҿ+u5'ۆ:}W?D eO&Wً?6e-hy}6nɈJFq~6Z5t`gC0n:&'mTӌX#n ^n}͸.)fiӷ+L6oWN{2K߮hrۮ6*(}rۨ-۸mNb[RE m?"B}MPswEf bh6}ڛ c$I[ɍ$~J$H"*--CJ(QkHj A߿u $qZvhYӹ@[[֒b abZd%3\`)WcPLl=Bd3?|`&Ŝ r1r4ztw˽ 0W9&FT^Q L:U`Ԅd >?>?2NiX}kcGczQgT I%1s'u1 Cj*Gĺmvv! µv͟+b8nbuwwu+&?ήyr8 tw.o1 KEnݘ tcn1(j$6JXFx@yqO>pD<ɱ$)081/EF-c'ӝ>cb3vGSJzUOt0폥4#E'S C!`l\6'tI,dyoθ(91V3I%W< QUvTaZn$,~e\"6Hf4$b1gH\TDH{AAndecexf?BМب-B3'$rq6;aߣ qQ. E I RlC&pSHpaXX b ;;˗#UZBzC\6a|"]ff˂M~&nBMA.olk ӲXY@I|s^Xh&=lT^FlG!)U$Ӄ5:Pw[lALl T'zI8 A̩ 酛"&R #fTIKD]Gv=OŽ2-#s,l?Z7#"8=.0>^SM^(~?dlSxx*C`Sz>^FސZBͫZ1UM3"+iP@: ]c8QX>(&< OɐxF!R*B`gݱubq^֗aMTTdxxggZq8 0(U761>8)tx$9A=1:Hxo$B7k#`JUT@5) ~aT'URulߋ82QH%~ѿLT&yC*93qNƑt2Ϧ ncDM")<[Agrh^Xt2U|'d!Lit.RX$go !rLwX *f0 Pc./H&_2"h_&D>A=!PKT,/8t;d\d]MQ[e IfYeg Ӭ :Wb`B3$ӪKdyH6-bAv$k$4C,'1.NIu +**~Y56;TOl/M'7k ]y;?$pw9T) r &  u0Ho2@!0e 9xt+˩37\|qC6 >㽐 Šc3dJKa Ek3%:~8vsܳzny5vӃ`J);J'3!|ZI]I>ysD4M0aLh"2|#@i%M$()>"jiI++|-+ݹhh%'cS7U`% P% a SgFu1A ?-zXb)c9t-+Њ uc\1LE"b|L"ʓ'7*hȔRcCb9추 6KR ۴h7T&*Lcz<$qNՔLpDi?CS#~P^ F(KaM8cO##NSʵc0HQn qwP%˅࿠knw&e kNNNe6OUb;DP:@qT DtAb\X.{նR zGH!mT ]@6ɡnhh i%ۺp3jgoz/\0>'v z.Au]\VE3!(_N\Dum p"# \i&X=d9".z:93ڵ;􎧪+D|5E߯07-Cyt_2 /}FîFXsRy`ޖy@ȥbdf5E~ #W<z`1n,WU;ez1*V -; ǒ4')&#$s3NU,e˲`hrX=@H!Y oˣj{7{ i9sE4.OAEf(@*U}Tbexϫ-FH|j*\Bc7rl{C}Z\/ǻm͂Ɨ `@{'؀=l\妈ӛ%4e*Y"7QCy ;%#.K85W/0@u,5"@HC?9y}~icZ< }b4Ƨ3&^-f!3KAKeGR~[pH(7u ՟RB,|"5#]pF+ku+*̷[.W$ip=ڱGK([4Iw 04`@~CF[|?7np0hD|Q.- H́Ar6YHe ]$n+sZs8$g P3|$[)6Fv SKqq)/.vsQJ!U/,%|k-Kk@7 "Dp7K8&Up# iCRLŜJWggR ~hD섍uls_^bQN8,PT\aVn:9豙Bq/T1x 3Y!iGAU_gr_ D* (ndOl)Tb< ?',@1'UPmR5eq7OrHv2RaR.kA3(F BCǀ~T1(ղ@Ɠy&EU?VijD&̐{%l&ʶXe<茵EAH⨝*'Bg5X&g\T<;+ɉEVcX|M:7Cɰm߇#`JʚJ .ܪ⠍^S 0@ q$COdw|21Q>ƍŦ1J+-m^lCz9xb$$zHrIf55%&Gِy{ctZ$N[aE Ѳb&F{%1r:?ȓ :`2K21t,}?ϓQIR10) s @_D2Wל tmvEjj0@oQmEK3pȌ3.൚,mZ^%MÎ9'S=(mVRS`q,r[mtĥL*%O. 6" K߱2B%43'G⛐`@`N+Fx؛{ ˴4wcgB QQiھ3!Y6Եs9۷;`o$ ]Hٝ$'vU۲: \gjp$=9yP>aPgBŐnsIdRT` %,b#]9%[O7v;R`.(#9 m ~x lC*s?7.xEWxdS:Um(ys%XI"Jr?K넪]N6m[1J% iXRT#xfe-ufM%F&fٿ\ke?!~m4)b? yַ9W9Mt}#ޛ/H룍f9- l'sai'ϚaF=(8`9rוnLl!Pgrg' #\wg[L2tdZL&_6:qBg(]fRs=r>!Hy)U%|9ma"b tȎ %PǕD7a%;V"J둲N.E&E네ġ9MdRphٲX oT]ˁX(-(TƬ绉r u!8l:C z3N1LK@ġ˝-y[13f$a 2!f,eQy?.dr=Bsu_i4&SU⍨bBI0`l1LM)'q$oS𕀰(Uf=l_oLPnhK⬳%xv8 gY93LTмR$>*OWLlՇI6 f(q!Ry .2$83H9- U!Am{(鑏 g[@ "A>^9n 5tjbTp[<[8`B'Tq TXȌUzڊ(\zȨ,b(\#S*/A4˫IALRt a6–&(:ɂ z%-Hl0N~B@Ae:IyEf BQhTYHߴ8d2m2qJ :XF(1B'ZZSʣ)]3beZqq1{΄t! +Kθ4s-/ <-1%/a[ه3Yqg(U~QLs+SRCg DH_Ν w\\FzbW\dG&HI 5!i6##aIF-r!r6fi"wnxMtp5ĸc Ņdi[~acjjɦm^?mq7O&h,O6c%/ '_zˤjX11v3cF2+YD@:,q6]VNSZڈ5987I'4e?R<esICm pI-0E] :-@Wcdsb\_g+*JX7Սl^^gS~j@+R߯דB=XkP=+.$V@ ӱeD3Q ^pf7CTXwWL0Ը'1v 4% p|LcF3 A9.lj 9שg?5_!Wl{)pQ0rB/Ү1g# ~[3= |IHF{| C56XN*!ABV R;U*E6 YQN}"ONUd!9Y)KMY KYD*McnK#`G{;:b]c;aX~ܿz_ߠZ[ 5e;U\~_$lXqaKMkV!o}b&'!tK^;l|,b& T~(A]Ghb\9c՞"`ve%RF`Qæ úCR~)(u4u ~'u#(Ζ<;s ;OMUTB*h~,ʸFH ȒY-R>SJ0XcQJŬmK ~anY 1}\Spd]C_4#$SpfR`C]-+lZhIįKh_sEZZi"\UHit!_(S 3gc;xn9nD*9[TwJTyAՍ)d􅦹q&ݩyABuIOTJ-'TH-.!`*ƶ \Ufx|qtW#](Xd7Ka~'U?)n4ȮgVFVu=t/LCbZgC:)Kh ?& 0۬&</A*$i ׁlCv$ecL/bUr`F_7$N։1] dX瑘<4cjLu"IJ@#׋cz2-06f\z< {`8 BJx!-dBC룍*WWW[eᚺ H}Mz$^+U ({OݵHՉw= Ocfx<=JLOQTZG_֨K$yAI-9'Wd;,WQJd DuڗѢ$D͸=CR֡qr\x›˃rY=)X|[5u,ӫ xeǖ !z--[^υU0uUuH}=o7ں{ڻ̬_zƥwyEL+cؚ*j((qWGjk ?Ct٬3xN\j`~-&f(TZ0Z||,CK\^M$z3rjހ,BL'EZ[.nώvu*5s EVRU$F8I^d;RYI  g@ CLu8XO+x,Zh:Yf[Q Qm>фxd&A SPFX' ь f_0a%0U@` A,s eݡ9vKhQ 5^4.3?e*cLIC.MlEA3~yF%6fDe؆q,WGBۚYyzԩ9]Q.v-5,%(ʐ+09Z`3uejH ? !.v*N/b'JL[jЂsftE6Few t$ "xqHZLZ2JӇ18J&6wL; 3l*7LJIP#+*=QCϯmQow #ǎ--H͠YF',̯mQ[+|m0G3BVc L!M"XLzyTFՂs=[vp\R,&![7F:q2X'̾hvj{J!!L023xTeA"Vb-`6u<(+)Z͎q~IǍ"J$MCJEO-Yf=×~jEEiMp -{B"vщsctpj:Ei `6mtΆATi l D@" .Ҷͽ6 I9i]V(N-uRᗗrCW逩TcMsD?JiH Q ZEV祦@-f:m6`U#c"-q:ګ _3$,*g3`;[:[Kɒ̎r= A$$9Z`ȸJB1ݬ s&箘nBnRאL4I=ԇ7y1$dHC Bg e^l8Lu0zWLY)a{CȐG>HtMquuqqP{ۊKچRNl\*vTD~0d{x?8gYgfbѺaakܪ Б%HЏk;G{qc.!A`8)breSxHieyfvȴ<0#`ʜQɜ3XmٲT0I?y틖TFT|rX ^GCT<3\:_-fG{J )VL,$8m MdA$]=ʂYm-%k+~S+R +(1[VVW~s,T٦ AA FR%OiؗaX.-*069PcvC`Lq h8Ÿ n&$rw𣰾uvl>5rMP=dwFK9ѪYw ImBnI&ӐoM5tSk{xec/R.k AnPq9]]\ 9}?ՖaldZ^|Իz+y;rL,BDCSF1w D&! k2 Y3s`TW􎳎Xgsm02,d|:Xj cW0à.{]O:N%Ti:TNh9Ԅ>omYn(m2VID00NA%13DL}zȴǧMG3ZB;?9I?~Xtj~Nfr@M#uWP؈) ۄ#k]ҁ@xȊf= %ߦA4jJ$:6d̊X8ߑֿ0( 0Bt+J1N*b+O`Cyw3R+ bt6ftZ]MaL1SZhI X,͍K PN =rE XBXKt`%A,-t6Aq,X7ztSz9|8 eQ)OxWS2*J ̺ˉkun):Jb!ʂ5ߴ`:{s&PƁaq HAU̘Uf 1׊d% D)]^>]iP7&O7F]=.kv䒦=@eˮd ;Ӂ[L[KL}RpwgirOYXg2}jaU~$9@AoSo|#wV Θi=t )̏fWN ,nvܔ0Bc1_Pԓ*/طL.Қ؄1*Wqjbn'RnGY`j=L9Py/c0e7>&DWj+Cq~ `$3ND,H65; MlU,oHζ;`ԕ[2W]s[2H:Ho(o%2phz.`>ԝtڵ?^YLL!_8g*4, cmb$.Rzm,Õ)>\T i=q_n2;KO,R(6֚;Ţs)1QWngI${UL: &4o~Kٙ+8̀2q3 ӻ ۥ=7Vc3BdXˆg*9@&_(F_p`EBuO' Z $.FlVڣm==# T'kVq+k-;gzBB)_AN3]R;6#GJlG.X.cA{%?ЧLwiZ]cTA  {KOY36%!5qF bq!XHP!xku mJ{D߇ѲbǪpL* YPsdGggjqr 9GTnSpΗ=$vln]z&P\YlV֨P Z|mρk'0EؠB O:̰ ~++&C; Ƞ2um}LQSt@"$$iSWYXIHM /;K3zDd8Z_ߔN$ C!?A5"TɎc9?e3|21z<-1}Ůg w9"]XQGUiK*eJG"P2o?{z5WB?dVt rjF[ΐ82vt?{ˠQPo ѵ;VE;sUpwyM /@A4ەtPTK)v1Wnh[)fnjQkrC mva qLdl߳lg%Ħ7"* IR"CeHցc疷s:`=bmcCDr]sf-K#HF܉B0z:cFGSl3N'$jmC/a/\XVtM(ߩǻW6'-7N~XW_fI9;3Y[R\p Ls!)zcf}G/@59mUE2KOg|}}! > 9%Wkd$R):A]=h 3 .2Q:;t㥋ܼ7U^,h_3  vD:?)1aS60WZ b3k7M\6 = -[^ƤGcQzXF5+}%d)İv,fdqV1dN/Ev a gKQjB5+h&KG; 3&kr : 3a({KÁ%> Z@lbb~UR'D*_bG^&-C_>hϚe5`` G [d $"#tɖpKmiuX{esjFFbɂL]әˬᄩ /qDMX0) E  Mw:$CRn@i)@N?dGc!1@X$3vxF5E:1$QP\σŽa{fJ,/кwjv :BJ dYk)׈k 说Պ5U&Ej_e9&YbBCS mY0П &3nyDD|;XLc9ƛRъ9(Y+yv$7~RwGwN d6<2o.ܖrfI4+-`EXi)ne[[%!ǣuR5Nƴ@XAu-;{il0r!t43*(mmh!4?tq ;lEHkSC$ ) u"(lG9qAGN露N͖˺[&чUpmChfbMm} iQ,䌨S1pAq@9.<•(ReJn(E.l2pb)""8<֩F {Έ=DĔ<<7j9a% c%"nb5o؟J_rx69-/mld%Dh#+AuЍ2XcpzkT+ńcL K7s⽖-XA ?`&@+,`9 }}<}}Z9`E̛FHx'qo 3f\wX昗 B&$Ȃ+(UTtlщ\)>yCB~ \! q,0@<ҦP`ꍶ}VG~>mLC r8ѢNR<ěG3CI&C"dF Κ 1J˸҃Z9[x-l[m6^EH&*s1(5H  q#\x岮` 8.HF|`{>~B+ԝcyv(с"8gn C)4PUAor0Md{6zxiΊD2%: dC$rů!u U9AH`o[O/kOPMIwFm{} MZOu[4a^d(BcvDsWKWx#dTdJS)1QX}x&ӓ )C7M@&p&e.؎`3N4ZR\R(X^vm.x@ϓ <%0-˼myi,d`h |ru &j>SL19kBB A+: +$HMDSa5W4q1,d3Y(؉zh܋xx{lVG)7z^ l6bMʀ ,3CVaICH#X+tZ'3fdZaQ 9)wf朁oQyj F".2f e쨘58d</krcBM3ЊC*m ɈnId6HX7|u0Ǩ)Q)J Ѕ({XA{Ϥ\ytʬq&3䪢QQD@.לn7^tӮ~:}!pg_J?*5sHnӟ4?Y{7~?ye3ydB^_ ox&ӗM慧y;}Զg|{ս~u5c Nf n2S JGׇ[/K|W>{⻟вᛯ>pp_xj?i~3;֜&ϭ<5/<3j7?}콟7yaoo/Ml:s>cK~zѮWҏ_>o)&/ 9>r]XzȃzͶ{{q[kpō fww;礿9O'{n{7f薖3?{h֬ݙ>ue ~r]/s|ղ%wW?AG<|]׷I5/ն'o|qvlXNӦg:o\z3+_uΪe,a~?+at+Sno>˾7r7*ymǽԕu%mBwe6zĬ޺#jٲ8G |w#yOyzćӕsl~޸sp|ry>ᥕ4Ns+{SNSuA3w{}wn__E>hn7wb}L=/q]}|+s ϭ(}i?2t%D?x?yI\}ܵKg [dǦwKWg6az[40gvʯ:꼗׾7wg=bdap;z/ՙ3~vKeީ??۞S]Sw/T<>ܿݕg_|%UG.Nk9GۡX5]_M?\>xnϧoezWc_Gp'{ 㲡٭7t-o~=8sw/m=;f+3"7Vo#i?|q}?zNy.:]^Ov(FVxw_Ygw/ &з^kw|Ǟz>$ܸW-+O}+o:9Gg?zf)6w|)^R]svZeMM>jo^k75ses{Ƀ/sq{:}Xx_˟py3y;Nݫe'/CcqGǜ47TZ&~ЍmswNpA 6u^ֳ7_>[w 5 5i{|ncGչˎx/pc36K^WڻY=?5/my/yܼ|g}ooAKݯ>5G;?9Epѭ_3r'zkv]f{^YtrY~v܃7f'6]÷.<-Qb[N>WlfGܳߢѮkwwIʛ~s[>=WvF5[-[Vlw}˿G)_} lƪ~q×˝OhtN[rهήZ룏tŹ=U_מy9n姾rq6u>Χ\IMN}px{އeNV's7? xgbǏiK|ou+ׂctN}lE3W)ǭ99}CEV='m?wi fqC?佱1sRŜ[Nÿ~۞g༏8wD~]vk?;>cٛSI{~m%됏1V,ƞh{u?6&NhOyҁ?L~9;l)WNk*\qJݫ|kފ^v#f7ve}ݳwzcC+;y+ud9Wچ7XɅkǪG@ mNbXo*qos/MW=pvn˧\φjųoW|03݆;r_v+;yǶ3rz^ZZBmeo-[^ӫ_gS7S'3u=H?:|Y+Ǟ^1,5#<,K›75S4,_(?SӮͯVx=s =qg{YzaɚXu{:L;Wé=,zf[o;yQyo}yKoc]Py=`{nvwvwf}S.zOgfWǾG'j;oyd9N{ў-6}Ю;u;?}tN?O'w/YJ䣙5k{; =S=W#WV톧*?G3ZXhaͶy~\;Gw:sN~_0{7uW;ev_g{>}{qwەwl}nMǎIO}a wwڇ/|}ۚf<|>R{տq^}9{>^;xoޱG=uEg~4(ʖn?dWv~oŷPУ<߼ꝆS}a'Fx,T:}?0~ ]#ʥ?k)jg~tKu:GTp]ק쐻ߜk|jD^pX%'_3ih˓^zϿtSc>Gx9۝xeϜAOO75F7Imͺ|ӯrzuK*/Q^-;{t;wvܗ׼=}SN~;g7?~̳1LYw. ܺw~!\uΪԖUO;+oguW iZ>oѦ\l+>-Ʒ}?98Es?Ϲz o|C8 K2眆+kcN=i[ylsܝ&M?oqOEqơX/yewwў^r˲Sp7lpƫo>w|f~֙{'/nvXik@KS>?sGgz'xգ`RCw߾js)ê]N:ѷ~?9c"^?]lwOFn߲y?c}>ziOgV>:Woh溙 .>^08w>_c[];T{]YV\'}?_{6 Wßq^ӕW-vv>kw M6L~zwӌ;9l`m#g<7F~|ڑlPK {9O+* {Pt5Wdϫ*_S >kx0F}3"yfyO~6o˾x{.O:=)ZG_2yXQm;M7=7nz(t9Yvc6/Sy߾7O^_Vori[_Tk˵ [n}/tWXʃde{N9qI[ߒmӓ^NGg;~M׭} xr:S>dNjlF/V3vekV?C3׭`eS_k6?//*ӷپk.p$팟>?/~qiK}/?qZ +Gz֎{Nm{2էuQ-{kM.[:ijw8vGm.לwa'm`;>Hb1K|[^񙏾pۜw۬羋κÏ79mXK⼣vgUe6/5rkS~թ'O}^y? =yȧ,SbϾϯ>׽< }=ٕ3so(="8\3OA'<&G4?M[lO/ '/?tϫ}1dLp7>SլV@BZETEPJDsZ`iTJ@fΙy1gιwDeu6gV\yʅm3vȍzk7kإ$'Wڳz&8Ēip+tM$ {Dgwn0$f&:Jڡ8]_s?GkfwdO`xy.&hc"$ R1)B`̭,l\<SHnlC PEGϾhDA$IUl7֗IU>f $9cuIVOk{/5*`qQ'lDz{JȀ; p |zs7b eskW%?fegC:g j:A;֜ʴa%ھ~?ZۆIA{ ln*I4/]3|0'%X}t¼)..-E+Tmįsm7,dߙBS1k8j{TJ ԭpeF*;jlDkSqH?x`LGЙ+XegKwf7 #t-f,E_t5jUQS){~I^(XG<_}4 U$ @z C1 ܘ z['<'> $ z-7+FJ{OWZtLTT{k 7^U4~lOۈoMHCܑGOs2{[/ptU)mLz3bKIzvoqx5m&eQ,6=ELaZN*"AjKxZF뼢`EV<>?^,R\>-:'w>]h`ԿBU+pɳ*[xhZDZz4f-j_7߮o3, ū@B.}d VW/Rj!O!1^MR̬+ ţ5$}Y4 8Sζ,c04,_$3?Ĺ55 _35=BXɝaga]EE)i·Z熆-q<?#Eo|[oY֌]^} 3{K?$?2827!%ڧ}% TT,R*몑pQ[{ml);5|;)P,QpCQob3k^eypG:H@H> ^Ei(Y[βEVՏqkY d9YտV/~ALmՂB /u7EJLtc˥MM#0;3v(΃Bǿz,qzNizybKLY*M *VmOO̠?:gT;cr$yv:8<Fhɒܼ̇^5 + YFoֵx $\.ɊnO'}@~zj[Nٛs W ?C}rǡF*P¡D;?j^/q\ܴq>#uuX^rics)!cp.yaW:;&~~*/]^9ư#v7LZٖ_&9&ݘ2,5H-nu C 5ҹ9W:L8Z~yi?~#rX78!,g[Y7Q#3nI=sϋ/9l/@佽<\MЖ"1EU}> ^eXX#o$~}A!H#Kᙅ/;dSCFN6rq32ٮxV"TJ7ek`#0-hŚK US胑=59'XY ܭvcGJג[eZyY0rჼԹCpcI?. _j-sd[ovvm).28xJIنK6ܞ҂`G}ň{Q&[z/v?b~PXhXMHhgr)r3KċUm`jZ5[ !yHQåM<צ974hf<ܻ#baB7bC,:k<*ۂPQ@-t9`_^%SX߇Ql,u_s 9{P1 \E﷐ _mƺn<3P,LO㇔,pD Ycl[Y~}^nXcWkQK{6 AinA-;vQTBj4S~.?^]=SL>8lN0Cl_.y\vf[ʵb(gH }n 4*zU(@,NAhtcpЦf}fSźr#S:Χ׆+7!u8Ҳg&m VIBu7YS %#H1QzmQ='m5SĎPwgDM@Lv?K畚F.CE2ɇU-+HOEZ#,Ɯu筓ˆD:<gd;bI'bC bSޮ ÷+i"Kà=J΍"oHt61C>T,ߡFMtp:sVnUM`T!D+α=EWHWJ8oBlg~ z^Y49z6(a}Ǹ'~ͻ&6HЧ;yxP&ml%sZ .e:LL^L]}5."hQoDdU>]n,4n06eڱrgt-U!.B׃Æ<-&{bWu)%vsER-ZV(] IX ^0 /9=ZHufھ39y;gl6d:ne>;- кT&p/feA K+.ϳ=^;qbg&<%rR]7X}[@ǐ8X6ڦF=%M3q3n 7Ƨaf''[tvTJ.#̤od>>㨗bzJ32gK3<*<1xtz'i3fOؕIM}=2G[nŠP{me̠߯BZ7cd S/Nb>sʄ&5.֞,Kگrw#Eg 3 o^`GS+am+_P [C( }qOWCWt+b݌990!'XX|gYu0T~n,~A>Ym~"pW&GvTUS>! ΐ:5';$̂qFumۯ-5'@{e@h|wBȟ7:?$|EDF!^Ht|'{5W)9MJH9/N/qBcAī(wVH%r?2c**Ŋ[d##4Ѧ4O$ߣְ\mVr. ˾omLlnWT+#3+ge*3u#/Y˴sj #4a؃fuXj\V32k&T-grxvoK?K >do;Alz \ 4Ԏ 0M<S7=i ڽ/>1X̱!s-:΂g̋uy^_P].Jn4jnAzah{.Lfgob;>?ùꪟBnEj2&߫"U3qc}O}k 0y\%>xg {~QXڂwϓ[ . 77+|^:ts3zMN5fh ]~{;W!@ݙ\`u"urdݣ}O7!#Hץ:2fŗ^H"GSQ 2"/UKʐ]c:"$v$"78IhfPq)71?2:x]LNV6|XtlQA+M03e9CPOz#cV4ZJTZg޶ ~˹-"T'-x r _nZd<#)fJiw`$Ae17"Z4GXoF:'7>a+2>Q)9ɶ%jʼ@Jj^]y<6)*̗Se/qg8Jm,uJ=I#>tM/qμ+غrs|V+/ϸo.'lp&֬99]3z[4`?O=%5j_Q~ tx'p,a9:< ̱j?A', |OԽ})"PLW`-#+rT+ˍx5T$ӛ+lNP#-Q(APYM.,Ȅp.$\ߴFRrY}Z&(O.lf!w+qYB˹%o(򇹍YԘLW8 duU+j.UA}'?h6lo^BVdZCn+xe]bjU ȳ/B*tcGzvum=^Gt-;]5̿XTR‚1jI~u^D5k4 OӒp}9{2$$p_>@&:SkH}[~L ڕnea?3h"TW1~+Nvr6,&p(TMoZp栞XVyyY)hz(1GYR# I׽GoKWc_ay3M \nHEz[ؖYFjʢ[ 8FEkor ˓?PT-yEQ\ &l/*PiWK>pj7Z[ӉáC)?:O#w>$N ]vbug/zD-Yz->%OU5\MvR/6qs%+!^.IgV\є)ւ&GB;q Coq"n=eïLyMڹcR#c!pEg;9/9RyF9?7 ,l4/>A ҃'*CsIK* 4DN]T|s:M浟'G~v^6簙 F!o)3ZR+{Q E[cv~=] em}?w_l<]_Kls1x*..uh1{G. ^kSDؾw'I;qmxC_e|.z2!IjYQ/B W6KI stX3B[Xt֒u߁[?CMĉQ%Ǔ-V$q&^&{i l\;Ƀ|YBLY еgnT-6:;BƭIGޓ铏RcnH B[EvR73E$ zoK&l0AI-֜ őqM6ttXaG+ dN cmD˜6KrܦV~{Jg[fz6P <;U?ĎGGnoy) ݳLgmaH&iV +^&Dx- ؑMW)be-{F?~w3u>V#LD_D-0wjOI_; 42%D'YHgjNyC{;{0Oke V.g~cUFCUz#3|hNj-eU?Vixn=e{wH<ۏ,ہ>y.7ӎ#S_^*ǼDIݟ~IC 5F'hO%l2fPEӿy>臭*gU#٬}gn u+6} JG*P١Ȏe{%Gdeɧ(| `K[hT|y7ZAWb8ZguGnt)=PS=Y'>RM}|?-=J Y@DaT)rP 刾p{OٷH9RN߯P~SNOe˨c/pֹV4:Kdj]WIȒ>a uN' {FdA;aՒ?x=5 =#_jjl=l8Ki0v@>>Ԁb&P"h08{hL?7Xwšs\ЮoGi6 0)<4T4s n98M"e n= ޗU1q\X?,gμ-FMnٛΌ]X 68PZ>٪O'5;6ݐO؎YMJ~whϪmnu?"B,<1:& ~w"mqa*P -Y msi}7$Ҵ8vѳS\ "Z΄ ϯ,$L5 `kWFڬƃLMX: ֣ٳiB%iYLFt^~ 2 웍J;xЫ|SWٹ7UMTzrtP41AZo~Lrns-"Hh۟< r*ŽS/gU7!g@llʼn3z|8.0jcW-6g/n钼'L]cQE2Y_⟳gE(P8R{ROu҄n/ԪT#/G bcjwTDXIAbjW> Vkz$tjD2_فAzU]`DiNZh}^-#>D[=4}KZ|PgS\:'"pլ"RQM+P0f,Vt*O\04GF`.TFLm'^~F̟G>6*-_ʁ*$Z˷L&F;yT+$n>@o4,XB5)f݅HB@L c,L(R fI9J^-k.8ET2?П:M2o,j@Ɓ5a% .☬ ;WPlx><"Dk$-a0(=QOjYV%pҋE;2[?\](lܶߜe1Ʊ}e&yoS@8}oኹ|P›,Qk=,#̙ǎOd*S9w !_#Z˙'_HIT(gK Z-; gl Dl@W ]`̏GP`)gPAx1%ut5R^EX] 8Ϩu:c"xpifV|b҄2Ibl7w]pMf7eSa2_?8. D}R>{vw~?H: [n0tчDe;9y%}њ;>+ O1׫M#imًdaf';t\blE4Ƅc/2[0 *5|m4X3(,,cc#R(1IЎ<@m:[ wͻٚ½'4, 1WVƿI*Ppf{ZT]so\sf`{!Z* ۫#V}'$o& ä}-O8QsN o8 i>a^ m|kzb+9#Xae7RË.`JUuӎeZr >1[J ^x.ѢXBmը G*l.) vTQ<>z[R*^ˇ|-mpRLDȣB b!%\60Mo1MmCT(QFӕ{ݯCy/kSDp-0-]ݫG<9\R~bXCZ`C;2svj|QI_-G6jxiX{F?+b(!J[ =DzoD߷?S[ ϬPW<`n*6CƬ{Mu"_S\"1"V\_.e ဍsc4IaOp@*y-KISؿ^C}EȍyV-{6i3NbS/搌e:۽"|r!o_"-Xf@ N|?˞B{iԡ7Il'K\^6OpPmX #\=enPJ> W.U=|tWArH? vHfی3'u_|^9.骿yR%ёpu\('uB#v֜6틄 Glc5rH$}/7{1BbR{!ꆄǒ]z.8= UF[w~ĞI.|z/WdS?/!?t CsΠ= (&Ik.-bcAn&kM={5rC4mTx$b2&]ut뎁 5c,G3u&z,O=p\4V~AW?js@>VʈZ3zqͰj !"|.C?_;'bBzF&{oL`@)*+xлĭk2WQcnn1= )s*9T,b0.ңA|Of1G6'ؚG-m'zd,7 :(*&~` 7'13{3|?98Ē=rb<48./\~NsE$snElENwˮM~WPT|mpf|?dV$k}Xs S ^&͒>a{[{koC3B+ou*rn(aGWC~:'F@@S'<7Gѥ#bx hUW;>:yEu v`\' #[1ōf;RY Fw}oś2+vF0sX&>'kK.*eQ %q93`՟&M}RG.Od#>{a]PE ]f!t%)dž2*rA)Φ N7h9Pi3f|HTt^d?5D=7 j4xpPލR_X\._ cF0npgKCk&( &r_Z!b=Yu%U8z}vŠnw罘o]a):7 ZKAN7zhd࿋p<߃ε( dX"h܀1BsSuu\ #Wӆ[<<۝dp'zkSKc^d1b $cw*C=cW6HiK0D39bM[*!~5UY`mjyOUoz\ #/.;Z/ufM~$lJ>3{"ﴷs}$"͇*hkGWmON`rpQ11%dBG;h4F.b02J?'HHW̓'֑ -2*&8EOKm D4UU1JL=VeQ*~Vt>ա|i2/";$NoY<鞏&6mFeal7Mg{6gJ|K?>)&^}>?rtu^P 0s{~fm mfFi;FGzB}RYj'j#7輓=߬nn&GC ]꘶sڴXw:wFX  a̟6Jy3/ y$ pN݋+!:M64f13A{ #zԋ5e9{TĀ& K8?P~KiHCQ[Oq`z:U_4h7fR!sLD+ʭ}~@[1ŀp:q5{_1G*C+{q -wBl o!waEp#M'[="$TϋwTho8J{Bn3}y'w5756^0oR'>oʔcm~R;,4q@Y~Cf)&&6Y4XDl43=Q؞=[?U7E\yc$0LgצreNejo|GMXPuph,!_MS }<*>}>AZ}M֮d 'tJn_--̟j糽a?pϺ$+?P5Vu|zC8x6|EAҡzp&ssW v}L8y`ˤ 2 ;! yFXp_яUɣc!&{$uQW|zqjGtoH J.IHPc! {o͝4`v'$*[BjQ{޸ՖNuxf =z)]+gFvNE3Ni #VF4Vۘ<.8e~ޑ '$ٖ5r2TTFz&^Fב6yNmq BnڦVfB[$* {g{{%ռ o82_xAtJ_"Ś)?1hhLnh!_3ꉉy@F8UK+Ēʊɂdcm OcYoʘn;T//1XG'ÚLshg;πXwv7 _8FiQ)AXL&ր8#_k)rG}G-*] Ե2U*+s?w^>cW=e$(WyAGL,4{W}+^" 3z}1^g+Eev1@SbSiKZpYBm_dgy& 7EC%f?_GUm Y U%ai CK+ytj+ )Ea 2]tn4I5mbK(Lu#cu  . -4&y g"i]FϺt}WjOŸ&݋}L6⊥q9!kb 3[p^J9< kKޚ͔D,uƻ}ĿI}t놅$_)rcX¹Ə=t󫌦MJ @XQX;.oZ7~#}n\C>b#=}lKG o߼@\>@ &Lu{%vޚhqWdzqbE-Rڏ+Q9g[fT6Zy@c*61Opٸk`Go!|7gۧkpC,Ő/i%i'xcSb 3p]+t%X1Ab,"wjVa{):(j>{-P@onP3x+"q{֜VAoFzD{mr8TFZMʅ#l[8[]v&i~߬>ۯ|GUXKvr Ϝ@kuUhr'^AS,׶a\1 dކ2OR?̮f779?onQr[ۮ*r$bq12`+_.MkI'0Z|Na'uM-PHqkv-CusoȆ Iք_!.둠uV]{bwDFm`]FDKac`]b;"Fw> Љ7# `hI[;x7|DgX6=tC'gQR&dRm͆wu_qzXO +ŷޥ[ϲ:f-C|ׄv߄-[FnYU/|;d(Y$edv&qvN»P1 ݙii zQK3==MϔPnЅ _xoz8.Gqon7-Ƶ#!bѷ o_g 땎nq[Mq_Pfhw,?y'B}ƃ1;ݓsoUom{+} :͂&E.d[ NpfF^Mш?5 =oj+yyJ#g$ԙd9AA,I;'s-i:vN}ϭ~,(VE!a_'e]5IvXHZCW]T TT]~<0Lh].qԃd>ŪHJ :yWNb8?g̚$f< cXSi((A{)CW'(œpi`}-^Cuk >ƈ|2~GpB וֹ8R\y$kD_4zՙ{XS0jv̴ jp KO^G;|3qNtȚXkwϼϊTUx;e(!B4!H=/[< ?mL =,n7KYx?uA!{@I Zԣ@hy-zc%WNjfI߼ն\!DW߬f22|jS9w'Џ=oT8QUHb|H(|+뺡6fT࡜YR _X__e_wnjt | >s%*H^uF@ݾlJ};3f 0G|70X>{I0s> z`Xl9ܱ<ѸJJڮH2$vo@ԟ81iH4zs69|Buϣ>s Gha3C xdKh9QP1E ޤQs*_-'H9R Sq4hSxH;lұX#MT+ZA*)- \Sΰl 8s.|cI;Ғn,K}g7i<]KE -\zJTĄr&gbL q & Rɥ7mc=]U+5cj'IV}G+vk2+ESaF-雏ݧNg`"ȝ3*. ЁVUTߏd?£)3fn\Gۜ޳& Bg݀ҪS7f7*M}24|=\!tcO7`Oؾ2a@ gzd{Xh蠗Ow/OѻMf*h>;U5W\rcUͮ&kMt5˦$iѯ*Ê/aσ^ "FV$e} 4}%'Iӷ:^fkXK7H"y W/+#zNpa$0MJcM>>M5ocuoId$x Y[W W}& z(g#~}zRNi۠F"ω Ϻvb F*9m8JqCknć-KI/|Vt\}6Qn$~rQL[6;)f]|Ga@r vR[{ZeM0'!@Im0&6War[ߧ1Pv~!4s!c͹PմV|kp-Džu(tcw PJ)jۖ~'_d. H2)Q ]7İAtXN!`e?5+m$\ u}t{2ѾߋW ,yKΘU<\ҶZO9W{sq G|_veM))H^f?tv蟦3VrEbN;U:r2mS1Zp\:ahf)'d0Nw%Uj^Joܿ5s~9*L;ӂ:Ӱ pFz~!Zhd 5ht[zw"$H`v:,<[2TǙq}۱:"&p}$b %Gʫ[IGC/Hb`iNrs-ե۰aSqc_ >p҈ݴh+vit[/bÄLҟ|g(N^ʬ=k9] zؘ}3!}Gaij[վۨgoNra'Fb5z1q^kGU߭$!P5(&m:cw'#g`3>010kLX3`LI_*;1[X3?N0)5;|=6;Z/u.~շ4 6_@kn fy C)6MN1Kt5?a|(̨ ]1-'/Rxe=DCc?Ufd2™& 8!;gFW𱍁:?]\t̯B|"<O&'EL>VxJRWiWL~k~XD.ukVt&e }6˝}?zЕ듾YtK].W?!<·L䎔ledU=^ Z R.yǵrzvx0sYj}S&"#AoCzNnb2KwUy1:ߥ,9- '1At{q7x Q~s*^1E?4geyGNO|ϚGʥ춞 E9n hdʿ.dPD1>Ծ;N!m-#x0dxcrI,+lqM-~.cCRy(I(F3>v+㈿Ābz])OC֜C-y%-\hfB5{ $>aǫR26ħUաlLӾc)&lY6c[I!1ۨՄ_t)'?#4 e"2SY5KvTxŷ|8-YDi+*7DQ"+EfAX.ߑ )=LR*SӁנHVGEQ=1s<LH6CO] ~ K ߵNH}p _62S;]5z' diikq-j%jjHeɉ?2k@[Xl;=l{-ȹ hDJU)nnX6xaO;VK4a\oF2t&M6Th]q?FoHu'N]k<Rx/:jqҽ#\^HҞ rZX#*(Zɱ|mc7 9Z˃b1`߫c&h; f'0P )en*|հ,8p~_K-i'qv9jkUkuPn zs$^LsE{<2oTb7nȨ:@G6h,:d9 8qTՁ<z1@H9<εf&jJ09cmOSfΌUGhHğčJ1RS]3,|d,^93tU1l{]Yg4 h^"@|k p(YO}K z&) ӧԭ + 7 9}vf森sjl4n#xvt=iW&|o <{Wv]X ̢XWcGz62Ng,4CrGoƲOUq0}Ʊ\7C^,:Fwi4sllgAn (TMt?#ǃy$5⮤OuSKcb\4!e/)#NJn EvwH-i)Ɣa2105&J0}ӊ9} A y5 mW]ُ&P[H#ir*c> Ծ2Om[jeNBItM>0sNQ < Օr FK69WGL\a cgPڅǧ'CZq/R"~k} G:9:L`su0F@,HWձ҈}R'y+)ىL:_G5Ee8cXN*b  7Y "|$ Y}8t X +z9ήRѕA|tj)r.3t"%X.c/Aթ@Dq0OYg Ejy|YF2|`fhMW"~({j8-XtM@ l7&z68;o fu}u \P3W:Wاךcq~DSg 8S8Qj6bӏa(ހRlhkgfroS;0hWlC#nSIҘNΪ6M0SgmTp$ =I >Aӭ[Ϟ'3~nc}-ԷjzL%8kX%{e!IcYd lrAFoOC+zfF%Xvx(YpU[Hk-!rܝ%َ9 謰`q:n] L) n&LƖB^6n DFT$[JfD㽮(H,1KQiH*j6Eߢc% \9tVv}b.]K{/+v׬=1((QS5b46sYw鍖Ql9p}BM귲go-gOVm3MF;Rn%G)*N(OއI) lX}xneyfgu:jg$BoO'Cs{7+HnYs7{j0jȾY @}]Z2̓tV^9-y]#7'EsVY$OjENcn2 59f ^t֒X\FWNYRׅ2nWÐ&yئ3IFž@5f;}՛gO6nJ~TOq9Lh6ٸ/QiH_!J|㔹jtk'_O*>{ePib ^jбͶ_Ԉ ]JP, {WuܤסZ[ݼKIVO^VJ呞״T.8lS2!l#^WI_V&Q lujte8s DCSTE:mhOwv5";.&!>pV[uhjfSWI¬OC2PDT HѮOZ󳺪W+&5y wR~PG;J3ӆ:BIQiLwAfm5+M,+Op ͉)L6{?o8{C^ʊ#6{pm3e MS]ħF)|\AcyYgbpHgjS$cs:h58)ΰ /HO+*a)A_ V]sI~֒ʊy= }>T*_ }e?dxIlx:4`h续 Nt PyCA5Bno4SLj| =mrTz ٌSc*'6(fI|~ t5$"]Q~k>k'PC В:ـ©(VL=;G@g2An)}XIt]k֥o{w{ٞ!K\f>_>Ѭj~2~ L$X`CdLr;^a Q[AP)yA&0}aP(!dg4:9j"^|$y=4a&o 50u2-H0 'm h/l Z%}a(fu[ pMm>=H n|r RX >+/;]Y*ezE+~P`l||Q[ld$`j=*܎A-pާ_bOlm.*~-a@KZB'}Ҿ=PQ-X5Ne"Sj~j5sTq!d^iU!=(y*,DsF3iƒU/y2;REwq/5,+URTYoҊ[:O~<`VFUs?[^{J˲ɝD1߲Ŕ̽[)d4D}uu;AilLN~n`ab̅#.7oj gb1'w"ch&s;#AGZy[m_Gsj䙔1#HdCV!`92)=')Vf\9W.˓zqKRڊ!}jf>J*UjL_\|/p*#:Hs̸L++=y9N-0TSJME x}{x4= l'C9-ȥ,|E,Zl[|4V>)f,Ch^G Ǵsd/6{AT;NsZdo=>h NlvOaL/$>Rً֦ "QG:$y)D= >m,&NKTaz)oC.M$| jM _א'F͎PϺR(6wW]¤js sͤZ:hVC] 8[UԏYn^v9)YliwMɨ܆J-YOȌ^v7hGňo)4F.T 3= D7 7Cn!M1@X1$_46G*C%iѣJ7uDZ $:pFa+1 r G?&J#~Lǯ5~AzPd`_~K:5Q[7,Wx"G*8e%grE Y)VCrDh& fr9Ku7*}  M3 e YhcXݳC4M̔*?N^(P醼7gs﮿p 593 ^.N M8xK7~ܿim:x2Oug6lO YF Tg0F:ݹX&^D^_WEHe3<^i[XZT.ђ`c}-T-o*s~LIPV ;^ݖ6>S\=Y \Dr ?U&|ص|~X}*REqĨ C36{6(,Gɮ\AE %dAC#&ˤ UJ㍟ |A@ 2xda=7Aѱm ($ꕀsn{bb@ho!s_2(-.#b5< zC:>܍MQiSf#;=%< 86*cEtXپUWRZI9Ul>FZ] ˷sj!?]r>oiaf^@zH=aK%?G&S0/iµ-S٭=+y`.VNj~ 꼡@ {P=X9Ld^b8xI;߶Y,POXHzF.k)tR^ٶ껋@y2תstud83IG1U,!ߙx6z@e!|,[w@!˞UsPh=IWCO))"xYI}pZTp~_"UḪrW0ZHxC:&.ʅK8Pw|Dw6-xN&gІ$mގd`؏L46swm> 80wgiLRNHᢗ{Nc%zBb[.oO2lJ3ҽo0 B"3X`tJ1W\y"SfS@[ÃC |Epbۮ`)su4{3%;)#6!(_{mOV5-olRqlit}ΣMQ /KmxM )p2+O[K07L6/Œ[_9f`.o:8I|5e'0jŀf (n_q|*Mpaة~5"ed< [쟬;dpƫiW`EӱɘԩT[a1_J활!;9\ :,#~a)y*yCw whY 6稅EnMô8(~5Cp& x*b52ۦYhPNг_y0k K "PZmt wH'J([V@j5 lVJm^뮙j1◖d.[ I}dIp}yX &]䵒bBq_v$0$ 華qh-2:կ;NWt'βI1^i?}Gp;[1&1—..r蔴 g"pyLv$\Q$>fŅUUVjiƧ\wjy9y W|[m(*LjX6uj~l*,YsNՖ^ie/ƑY Ph:QBmg ㇫8v )>(N?dS^YLby[>*H2u{QRHg)Qp/;:lvN8sΘ}zA.91h9z&'շlǪwɯJz>A ʿh! 5)+FB˲*꣖c<ѠմPvʘq2sң\\5w%L[%Im4QEw0}BVҲḯ+ԤNKQl&ziCԻo^xw0.q ϫk6\wC)Ř3G6Uc+F ܲ=2ho|b2pRz /-`Ho^dt) xݍR9ݻxcv4l@ 'abZ.ިDAW\&*XIvfR3 A滪?8ܦP?">1wn)pktOfs#Ϋts.m_'$֗S ڣ?]_ Y/x(=! sVM}xsfØOktԎ8ɦhɾ,랑ǽINscH/Xbsצ B_2Eۜ%eƣʿ0gՋHԜii") m;CJ$Rz R3"Bg 9~jli,XP$ (Vihh1;f͍ KNbvxYJ#:BD˘P~*Ez3K)\)|3Bry5~9q/͇c>O% :XLRmT9tπ>]٠\@ig>>w$]A@F6^iDِXLdAtJw?֨Trև5} ~bw0߂(/zx/HT8QRJ/y\ .a22+vFƘ+sY Y&#?ŽS+/N$z.mLh2ak?R~=`bښoAVv] CufK H/S!z f5xsGA( &:f6}~0*T/*Ɩ ̝+PQŐ wR6&V罈ƪ.i9Qֆ"E ęj=&U O^{K&H6lWy7F2F|᱿ᕨ?S|y6p&TdQ/n8n]rr+,zs8.w6>zݢcO׋E'_F*ϵR|~ٱYXy84T˙ul RF)"퀜REKmY`L6޹|]2pp`,U1+vH(R7&f.}LnU))&52ߵ0:+U ix$mԥTLYGYS_VXSvϘ'i (%Vʙ%#u<,KUIa%|7^`` &3rBٔ*d`O*t[;LMOY=Ӕ q:U#^&jeV9]۫R³zgsb# v)o -Q+fҸ*ҏp|iJJMGȏ鹢 z+&!x_ u!*cYWTSo]Yruh; XlnVb.]PAcIS-(ϠqܾXiԕMLoU=vG?{I81;s2(+v [^kG-Y^giʰ tU%ߴ)Ч5[JL1C\',X }R(a1$$G@4?"XäBXsx?(ŒW1NY<iS%i3Ye'8C1G@ ~b2Wd!5Q\/aQ|#.wٔ4+^Y t<:P-_(.>+y][ONadzOb·TU9~xߌ,|"lmxzT|/M :!8K\~X:sFT"hH%|0 t~_au?M~<^&T_4ۋ5"},?J$?Ե,!6z\s% Eh|S.: 򦰒u;i+xr\(ס4D#QaPe:gja:o/vt)E 5 0(6@5~煑^$حkŒPhЃI);8mċ`+.hDXIM]$Z{kI*e=eKj7j˜C5?Rj5|,*4kMnD۵pؿ&Aq _"\6>Xkn (jR0r4I Z-Hh^ S襝ҭk5;œ-)+)Ip) AYZܔԸ$vq -]iؙx=G K+Pt[ReQ8ID`z|OQc7ІHact̺9@$T:$$8CRB"هX18a%E8LTrnУӶ)%Ń wv"ڷqO"mu T4n.Q BKKV]4Ti -%L?1*ZS9y-(T{vc"!IHF+y43fj2zSKH8tJ;)]%NKZu,A_:uCC,zZv>WbW-ddR :ҧ&)M `۔~뺾Jt: X#6Z /Zvڕ%#MJgU2.6nTo#M#}5< қ q' b!c^aÇOI¹+'*RiC=>L4}׎z%b3'4"xv/4-%+l#Ą2J~O6' *K ΗtxbClu2򖄸!79+l|'jW$z{bL4QMeG%M0Gh/i4m+OWK)RԵ4 TR%oj/8v,Sms8}EK(zM;1h(O!be:[Fi +N s%>[&y3u6gk&L꥿Q;Y=表q'HD!f^!64Ys烱)p'zI.]T*S2|f+VD}wW-o\@B17raiT\ FV/,,v *A(Dܠܛ~ڃ5e&V:KM!vH+Bö%kԌ)reNԺG$\K(Mxg ;۩ʡY߮,h:9y-!S4ګk^_ !'\AwoihHc W!1l>­.(sv 탆 ċzt; ^vg-I"nX;IqP3.6Ld;ʢҀ]FaO!fÛ-coU N={{INc\»|m0#Z–X߽Ts8Xeȭ*@as-d"_n.`:Y농k~Fef:2OI^Řl]48õ+0/QD'?%y a.AggxOfm]NTK{7 մi17$6 ͷ}&wmdnyNuTcJB[MW@r8`,%C*9= yPӼSd,߅0D,1 cǘcZ?~Qwd*_ Z `a,\Ma74JpGo1/QN%^;bУӣŵ\+Wg)ĐqN~[M*8Ѡ灜1*9ŕ Ke<[X) E0nشM!Ik[#nT=h 8 "g[6+cq#Z>*c`p~& y MU.c]p6\x\s!=ŋsc,20<? 1H׵s&hC:jKhx?K73.IJͱյ<5Zj0;}K-9\LmzlRXynPϵpW8_#N0"P}sz臭0^7r ϖ c; (WƠ8ASq#;PU[+ إ[s O;Δm SB>^=FrG_글bG/˖b-n!f36}\T1 |M,<)6,oBWP^QT#7h` (.z|r=P>LȌJ#6@Mr3Cr'Ȇ;@(0P0^?2/PLXTdT:v">zQk/OD{9i/"k.(}1SU\ZRm~VV%Kԧ LeNk?}+&i?hK+~ʡQ+vwi<609+;3=!J=wPL0#bSa}$NSmpЛjupddT wx{?jsৃ{`.9 G4J ѓ^[YkMw -Q>E,B @1!3).9E^29תj{4J $Ɉ<5W!G(stMvlӑq=bA*z:ys}^h(rDYVfP-G3s-MEl=aC\+}Z%oWp1θK]=`ҦQrOz}2T뮸/C/qܱpFL3l)+0w^kMO52Wɕƶ-p F~^8 v𕄡̝Ǥu~_?WˉN t<nD,P㞞E+ _%>zɨDѷB<Cl {Yn|Wo熪xdl( *a͍.iۣN يuG@ZmJJBǖ7B[zS%O7@UET5I;S_7JԻ9=j\5Ԑ55nK!.¼E=(گit$U'?eR+Iދy/^c)2.QI懖qϥI˪,Ž[|M,#d"cJkF58Ш+<]YY)x$J)Tb_UxQ O}kaʰM&u lj$`X\e\oaJBhgyj5m>O+|a|^2FB}]!Q@Izk`1c Œkgݾ.TMhimHelU,϶8,۝'_d0`©%Www1R„"@i5?j\\n ;x@/⥾ohLCu驐.us]49mUd"+pZqL)0)񔿔$P mma~V•hiN׵?.,wyxʫkA0c FOʖ '35:ؔpϑ~lfLP/!}":K}k^% &1s/R&IJa8}MȶcdjF lܼ lVL@ clP AjB7\U y~c_ z)r.(}7w-gG?(EC"mM!GP{ {Ñ{睺3~˱K(ORf]NMB"=uD*LݣL]bNAtUKCesg6@Z9_{ Cn#?f]H=d27'? k<" bx !ѽmJCcWaH&w|E4T`ob# WFZQEҼ.]݆/I 30yBQĠ# bo|Z)"(~Xv= Ӌj}E.' A-a-.7ͲTPwPQfź+yV0Veh1{h\8EtK,NJ+9iE`,}(ruV8}6D-~(u xHnlRMijIFϨ*ХEݥ.JS`CW\nxgl_s t*5W@ZUTe:ky ^9Ldz?p &UNsS%†JEsy\ޅ|3{yw<l7 [NG8]i})kYx :,uG[k>eL^b}#"?zrm,4S I>*^xr-e3iPyE*L./ ~ mQn>otwz/o]/49/" >3U.fr]j͌yĦVaAMx^65ų!p4!+vFфspK6ĻnG`1y8 m9Mn/qE0ֶ?+j1ç vO-}B+{G:B˫$*Fl~{wRChŸ^k3I9F/-miz?㻻zrOzzZ_Ӥux djHbsN^+(侟Pۮ9|Fů?^+zy[L̕M1K}^y>As;cR듫7 :4$"9F @u<6=Kc_8ѓ5 c}ƺ+v~`h:@68F7˕)OFW?w 9xd1n159$_;7,C䫧v˙ g+7vw[N0-E~ f4W"+<%Gx7J*+T-(eyaLy\&x9!Cx2 KSn3O9g{6`Mr.3;t~k-~.\2>&v*tf }!~ae8JNmx}qX!7՗p.O*0rN˾ 5Y z}q_߽"Ї" CNO4|żB4zm1hPK'*{dZQR/V,E4 ~U쨙Y<Ʋ(:o:Pwm:X~WQ|^4ʑCS #JKU6/ơĭ VwY|YKdsTǪOЏ45wf<{$BU8xU7Yz!t==d}<''=ak4OH hj^bZXLaP9Ac1oD2kF9C?XS">!W11&H Ye pBJi1NgQM"f 1%4H@iWNeQ-OI܉?%^xq.] QgF ϫd3_Tabc/gjY| {x)p7{Cq*-Nk|l Lץj3$Qm?rP2V:@mBHr_Ve$`R/ϕ椽nO]azni),tS;z{܀ڼ?k0ԇ :ދeu}𣲏9ҹ~-(Z[S'ưn\լ nSFF%` Elmϲ3 /,p:f~bL ne7 PBՐ3iA^Vpg6~eg^I#Wc-PV q⽻G4h^_P[$U)AynRFfFJztnHr4B#'71&ΐ cMU;AGiT1:@kA3LcUT (.JRD`mFꦯŤ,kݓ1)D5醡k ^kl4#%9a&#./o=KoA X^0V>o`7wͽԨ[WH` }—zɔgYZ:5̀Z԰cDLL(?/4$@K-ۤݼh\{?>1#&_oK&iJ0ѱ'q# vsWK6K5Cuo yCCo]N"E5le ҥ@r?l_|g4)ox=*1wsA t و6h?+Ql>XUv:G _y?o&{I!lJkq\e`5m[j"qzÍkjJ66k (|eȇcFE@tر?A[x$y`ei Za% \j1fX;)zhߨV@F7m Aff*i'9YJld .鸪GvGȿ 5RI,Z-p2,fg,kh$/y65bY֍:Ik2PkП \|e"נPU 89@k \;!CFf@- /OIrR'Qiݟ݂pTCCu_q[@fǪ񚍐0Diˍ1[ȃ9)$r7@(;|ج'tL N:!dvf>[2ΨZeE7[憀K fa~£Ne*R:n[i\klfGtY.x^):eYm*2.lj#[yp7n&wglE-g"Yq`5>lHlF|UXu)crt: 6QxIQ+`m1*v0aϘg5 z_A8"(wɺ=R^KiubPR_K026vUC /ce+d5BVJB8ʼn:C$!xsLߒr>Ls mm*/ݒ2u%?IJl#;.}ƈL5HEKp|;44h ]ۇQnQJ?ugwJ 46qު9t-;n4l}-X Xl/nXa=]^%-/ MFE6&2H8C'XSpP%>H7h%݉ϟZ+U"46~j?XNWFAstVCyk%_O9߬tW&s~P ?@UbwuE+Ph>x|KM6)GW+ ]},Ri^rIoA#r@Rcs'兙.ɓVR^T-"2k~Mw#*Ϋ=+p,_$-]q¯6)u.P5(&-oߺt&1l[x% 6%\RY~•) ohZ~pM|ВS2TYіcS,[ Wxiv۪DO]]{j_"Wf }* ^NIMoC&2oyf{XFnGW$L($\,-kn\jIG"p{)phRVJ{X,3a;Ɋ5玾BJnGFZ)PS /'.l<=wJ)]ҁtMRFӌ H~qS(]P0/6\pqҽ/mz#jk5qfh0K{F;Y=R(=&~c-i*H|a lCRyD;X{-Pk{J_ic\ν=x `.ú4Hs*4סc|-_|70T'}o[Jm޺Jv q*=CC]Aru8~ ݖ9clJP/K)O BJ:Q29{={tT jXݤ~1.H:p ע̴srN*{;_.eҴ1JH#ݧV@$!m# ~ mR}_S{OBvtX& p0) 2t"?Aު`EYS;< U&.?J*$!&}:fU콟wd eOboCNqNi!i☈s.mn=,;HǴ.vU%1G>o)rֶ;'^OfG;4,BH_teV &Yu )u#?' l,Ź{(+0:U&c>]8ݱNrfq><ܫϯ_ˆˏtW\Sâ;zS 3j&!<0e$=¿O`(:I)M3T3X\'WH3G`E!(4-EN֚ Jbu{_ 2ᚋꥄ.4{Rb#81++o&C?.6z*,,1(YWux1Ut>AY~B[C X`kCai{}(;|MJC\݈]P}O4_zZ61}x= ETXhD<01oP?gvEXɒ嫁NB6Π_>="NƴL}aj-}\eIiaYcA`賕qgsJ'novM:2;ev0̫OdT?bيsTw?0eotAPZ'd)g[D^]UFn!a*KmHSB,sN.wu%ѸaFL{4.j:4XKjTs^^j,S(?}΀cQU)ĸqqIîXC+t[^Fs,Hu!703a^wC/@wvߎvzX.='$AbNq?Gj ɩUfW>w9PmW)E.s$$MJңo09RO=:s $yCA5u՞4'\k| f}Jq|eCBW̬DRt|gڬJh'f#udtjˉOTJŎ)+ŭ,){vH?ezќ!isr7t+5'WRгhX{ ش+kko=1&$ %(YF}(ʟ*෿~wqEdDeLCY{kYrn\p%Cs{ )bNޗzץ%$o>W7폅`U'E 5Bv`jTO2kA˯"9?Hb] >@Ԭ+D|4E 8 oU-ЪJf @Ɂf V|^RPi`|5G(VL-(U-rO _ jU*ec}}dB g XZX򦷡H2d,ݭf`5ϴdp)xiE$ p֤=T7/}#y#S,LG=@ϻʙp X-ha0dMu _Oߵ{3 TEia$2y26o0YZWXϚ[DU( %Ypm_/Giߺ*MLOE89iko1_1BLeR0ηqL*uQ}&ts4oȉ ѓ%]k$2͙޶ժ]IImLyt)LԮj)X.ھݿ2aެ{"^-M26&ܝCiM49~ DaQ@xLъr9ŁWפ,c$̓#8s!VgVĹ%зZqj?'nNJO\d!@ Gaẋ;] RE kqYbJ5,/ TnNJ^>z[?PŒ0lW'O1%Z.8Fqu{Oco4M$+1WaS?렪ow9?Z՜"w?xҎ?Hgs[spEmK1Vq:#Ԅ[dilbUX>q Ps2gIjgHzX2d¾Js :^fv]v殌VΚHq:*^ȵפA\"UjO^ 1`hh{K{ V7Zm}C74u| =VUezQb8gTXY:7'KDY%~OH}Zzz>;u<_S)n!jј4_M9V߬3h\PW̚r~-u'WXR;97 ;  C(Y'4~=PIPSSC_}Ot_%&le?/ QJ gJcH-ƥ?j6*+bOr1S7WuT+,R9ʋY`+0ݎ٩J 㥬P/<icX ؊*)v>%k^ R?tL]ڲK-ɍ` z4Wm>K: 1GI f!ʰ_1#w _ZLu'F|::r֕Oʵ&.∊_ ,29Kbrxx~#]~۔1dGmQ`1Ifޖ8!4ۈ1bh*v%)b!Xc9P ||f~  NX?,Gr~M U:U+|q]-(|F vZÂYͦJ@r&~$ʃh|NS {,DK/as.Y7\_v*隀Laq {2z֌G:O "|FY5.R,~ڰ4uqO`јs Pø~w;~AM}xOk;fL k4]ɰEYDbMp mpj+ኩ^_Y[xN^&4E@Y%齭aMmVoEPDKӳXes ,(B*26Ju%:eL3 4G:JU[NGLUW+#LuY&5&fٹ+xb򢏖 H_TmBf]zy~DNnU֛M@wi*W'Rf.3"h&q(Nd$6q7znLL u^Tdvc׆y~\4_|!tD64yz8/MŭP}X9ɦԉne~S)Hhui*DhhhJM#tUi ۺ|4ޭwֈ4vZb+lZϟ3(\`D* cJvxY:pP|;Z3*B¼vѨÆ.+K}BV]GNVG5r`ёDhCʪX2͚عب?o֩V:cvIP"JΦ;ס.{ak=,} G`TLo>ziZrO -jA}ڂMB&ӟ]&Bk~ 4Λ]"myշ-r Hf3KMAi_/WZSd)V+@R{jnKQBCƔM3 h|qUmm˰ oEϩ?bUi,ЎUa9 qj d~+22ܶCLH Bǖm}BE8G77Wg+P鸀ɦҏh"G) /^?| $h#V5|F?Ea8nL#6\ŀj>OO1_F̵Giet|q;T]B| ÔK#e ]*krT`RK$mŽdӟ3f%$kGVPF]iA)Hx})^-T(;:sgxR!]H[Vzc9>P7> 6@5$^?~!96Nm?)-^o.dݶ 2g :Ĩv. fT5 hkzR= =5F.9fYw_・GG5v| ߰lB1u<7X8&]Hi\+U1Lѳj35rr~<}DcEk,*QZ)]}FZILf9 t+Ĩɰ VnVd& x~[Qeq*CTk,HQ``!BTV+q !)9}qT߀@kMw?u( pCVp+~Wta }e__@ng ?H {%wj` 3-@A䜱%WFݯ;ZF,϶*vo 冎;6B_Sa}q삾}5+3SGAO%5EChbǥ!PqF0/I?ORbw|'1?6KҶ~GܑE1V0DD=i~=+;n fpTǙӠLlz܇f-YMUZȃ4H6o\ rAz'_xAN9~>윇=T_A>`3rH#,/Cd]lɀXW jM0u%|4>X".VZՄqrt~b ԰괥m9 -^{w8%#xU^MR4]xFOJUlfh_ H/-<5@ 4xUZح:9sƊ6,c=i=ve(((@c]Y;M_}N+/mi*p{ŀft*n% |;/Kd< T8PC&kW P/8>,jE>`U.p8u WHiF`e=i]=׭ŗ?GA߉5]$2vc#_9 j h- *)&Y9Cj-럮{]ݤki|MQZwl%ڈVc3NQ[Ϛ,gݿfF5AIVS7b2]rɶK!eUDM]\+x=lg(E $H2+XaҳMK͞ c9@Їwb IWkwћ]n"-)=nJFŨ)"NVr7RAJ$M|ᨀ@ =?'vqF"0>1piZfICKfWjYAJ)RNǺ`Z_{x.T'mrvĕULm?Ξ"N*> ڃ+jHXSDCCyDḭDGOv3qu|`tA..Y%F[0y.½!yq".=$uV߰,|ʶ{vJJĪ[L/&Wݡ;î2#W5tIW)RMrX2Il}aiMmn}`knQ~jI氄WJ6AN\:zli"̥cɚtqC v%-:]1!~NvQgۃ#ךz1\Q55梶 Inړ^L_,N`K@崘5NZO @6\ٗݚکt1QE6PE֩И^ì_AmTa7Og{J<V= T^?OMvGEOkW` (ZN/x.~"Ę)LeC7{ƸTA1hη 嗠ϡk56F}4] '\S?cqX0*QGpf^r_잮\U05T TlŐTlmˈRMM m{_q@,*5aD-O[@""uUXL.Zh<3J&v}'WcĴ8@Ӭ~?ݐϙs 5޾fd8 @˔ϓn\ ZGy ' ` d$iXdHCZd<ip\F0]eնG@Jյc`iղk!2zYgăEnA 1K.G2fjwA|uDCpv uJoԓl-3d F Tw$_KQvmYΑ;$YGK? Wpk+bi3vJQZU.$)WEgWO_Qe6%lE~h?K]jD^q? '-{2<57eS`_``cQ]ֿ Kg.2au+L0c(26'šV8ޫwR-Ut'$| t|=u~ Gz-v~XsdW/̘9g5NjPaY7{ c` ΥOiƋc\:xczyk#$9#ӶWByTF8>pf.1a>j))YWc2Dm5L&:,,_UBsCLs1_A}ŒgcfE$Qsi[Nwug楬?AJepT^AKާ ?tQƄ1Q3͟o!ԡR'pXQjسɅо-plE嶏|;oBDbG 92Og.*޷ KR4FȦM Ƿ,הMGVW2JȄhhsX1~,Bx;z^7JW(8^bYSCfQ}YNӡz(ݒmOzQ~\/f5щ>a1Il7"DHϛ<4e^9 Ƞk$Nah#3/gqYWĈUo=98'l/4=ĈN0!`; Tf㫑az%g?m?!V"KƒK[B12iUطh#,Gl̊c5|uefc",tP$v(3E&*hOӇ -vЛR4L,HՃp<[N獕^˕nfq{@}6}l) t,Y+a33q AP $ ^ }!@lxQ\|Rvw}{Pע ɗYC2ζ qL zxOfCrg_>OwLyN73mF1p3Ykpu`O༸B0gdb-A[FOq9="!*6 YPbOW^gc)xa-ݛ}|n3:NC(44<ټg%.)#ln1'F`9"Eḝڇa [LJosM65̼h Y6%〖\W4AMދ"G4/+v'Ǿ[hsnIieR2ŕ?{)=HgA!qg@:OOjHLS_iTi/]=5?dH."RoHԎ0Zb]2WԪ[Np {'#82Nkd5rL(Ӗ~yyQB(=j#`SDڬȼ7 BvFlfG¶U0X%C폓'̱H\?E%8SkqU7H?/wJb-HɰB$1k4^4-ВV;PgbYhBΝBFfQT 4^CrMVZRl1Iv88d* pʳtq3όGFښhr0m7Ғmuwl#:סP|H%B[m:-],6 @A V'{4, `I"I@sD1b1Dx ғ{8cj;SRHZ0 <̪E6vyá鳁smde<{S)jv3 1CO鶜]ŷm㍆cj3!P9Rse%6 @cG7|T䄉bp8W7ufD4ԀNLb1(ƌKGVDzPFWXԅGE˓f$Q-"G9>We}~ϧԷrLtXKU,͙eX&dž%R3$'C\1OL#Vށ_.F\/CBȼ!ej/ 0G.>M@sUB:gF y,%8 +K*O UfW#o`RyF៥ CCz8JL R{< ?/&Sf,cS4Re8XZPHʦ)wG++i l-gcc2ҠL'Tݦ OXܠ讀J O7&j_F2{l>djU&48Wn/\L|z*X^#ك Y:R hA1`!HW-pķ DQl$ C"I YH=y8#Jrg`rʢ [ӡB\\[3\|'Xy&Eʐ 0f]4 O~12Mp؏NoE :̬Py*Es<\=m %y*C#@]=t4qP,uj wZ~:0C4(G6E~:F3"Ri~0&CKY!* }`ۢ9Kނ!Pt EV o}f39aK 8ѬGٞ]tW+CPdp{d`hMꥼcr~djuCrʇX7XoB0L qm5"4D\Fzl80QR0B<\Gcu/T^Nv@R&I)@Z0s,XLbzӸ[FЧtR o/DJP i v(hr0.hrh}<@[l.{wIHpCu:~"OHig7xE>%~S3^FtX&C^^%$Tl3&scav[BLY .ug Hs8gBgX x6L=QTY|`dӡ=[dþ'p{.BJS"#Z_r:䞒F([ #V.a'O37lU "'ot 7P`6q<1lt<57s `jY y2Hv QQ (EbT3Y8M  G92Dq,:̉~И(4x8&mcYi(+ XpKwx)B>+A(Fj@,o9-CI)է^},X"zm]5LSS{7GUŤr]3F^-[ˈLu㟀n ^<>A X]SgƔ@r1WS6QkɂlJ@.*uO*B:1y? 9.k p+1 =@e$y&'e.*5#Fz$ _'NPJ1_168n*; ZG26d) ޢlMMc'Y7id a>F'{|4e2QJ2&V 4u\KmƼhy8"b4xBSwkX<>4g˒,JP0^Sc-{Hyg_-dl_ÙK(RWl)PPnHɂ96V~.{D= ͗J6&9\}xJOɓfbTITuq.5/}\8 iGfk" <|On7N;[ylH~7upa0ҽIs({5*,TȜU4xNpC&ĝ:"pX_PgQo=|P9Zwd ۍ>O'ĈcTR]V^F|m I6+Dl|MG1UQA+H-l}Cpq9:>3" MHTD a.rdcیD@iv3'vH=G/ +ŀ3@Ύ|zb d؁2$k-n]V dXp+"&3*$F y/"mz \G;4GIE)TKa$ۙ\8tb+"f@|3_]B0Pb}&n0X^>e1ەFD1TF4mCd58Y˧cH=Q8%jP5e ofR+:1`*)}~4 |3J!/RRY1d;`9Ԑ* :%mw,f ( U+fq,F~x Uk a恋sSGG \zL5UEJpϐfeL>l2r]06:Ts >Ad :ⰠņR3t^4"7iae/sMX:2dioL0Гŗ0gk&-M$ `L psME_A08LA&UM#wHܛ!As#Z9 ږpª LP2,}&m0lZд4> Kn|dJO)i\ (B 4h : rcd1擟ұ+"қ. OF#S lsؾ[xE5sK?DnT>`x7jtLl5tVu4 j{9w`Q`?b% 4(ECP 礸7KVw, .K.r d%I7>lP*LR0ϱZO*mt.ok2if*P&QeO]7#:cѠ } 2s=TB:4r*eCT!_33|ziaz=Xb8"+QHH!* { /rBc A~s=bzϒj8&[&|JcΎʷt x8,B$wE y##@Dٞ[s.Mқ48㔓bKB0k.9Մk׋">1d=D8oeghsAʜ fc+a*G=ay|ϳl0s8p\nV~<8q3;ҶƢi@dp UMEDy)UUd]21>=(o2!A!4u Co\gQ&шIS:;WUVlH}z7aeNręF+9Wjxnx:˥COqpdQcDd&k)?9TgEfjr=ryaw"LP,7 u$Rwx,4} PJlOşCJI)*{ !%ҥ1,A]E (Y$ܫ" "1ݑ $v-B 8HU8ᡫ|XJ4 cWa} ?@YɄ79TeVyPz /{ 9| 9m(b qФdkbdSm:Ie?WoY}F=pҦi%~P+ Ciny90 UIP3=_@s]f{ܥ qXto&7ɓ@l\u@Z+(Wtd9-D-x5#n58|ύH?Qk{PzT,i J,nC t*0Eg`eh Awh~"X-"ޞ8"M~PMzAu(v:M68 HWKY 0FL;',/^-̣؉yLl Α95[ EVJYsŃo~KH+#_%ГytxE$ExǘahB=ZtVcLan(3k0"]o9Sœ [L|;[و%' +W9 ȉ4BrPXY;Pul _7IۅAO^vH8K1Fr ZT]@12%sPXadzOҘL7rC*.=vqҤ"RM&= Q0Z&>}DP #Gbse+ T[ύ(QIx |"XB #E}>HlA>}eG);4LGOɤ"0ZZOq:(c41P=7g&Y|nVCYфVZ%R܅>KK]K=l4N q ؜&v& ã,=$'PO1um>f h+ep/IDАwQF"*91wϙ._v2)+<&6>xa5r+uuaw7;#&jNUx&6 ?EOΠjӤW ^DIib`JIJy  .-B3`izUAb)곴HپQrUe"CYdрxq5D< D-祦mq_4P*DQnN2g.7sq LהK Zbpj8+JFI⬀(*Z,l/]K'?qMt8}!=bzZPLDCؒ1P3q/,M)5eExv4P"nCN4 yysPr .!rcjo=QN3^WE7wL98y $8!@JT59( m{n`6 P*p@5]JF@tq ϧφc05< M+"ك n!I.GZ G6*Bj .pM 8tL,dV;,}KA3Wm@!P'L"qE)`x[g@BJuyR|1Gh9PƴlD:ařISf ܨD*.E 4CS,`BenXLe܁YTkVӀ"4Q~SR`d .<>]O#O KÙky6M,=hr!_#Wz2OnlG|1aϤ.zAU} ?(0e- [-!Vh9x">Թ\3S1'6_4@97s-LSi$ϵ(2" W:A!, Lݬڬlp g+)mdtCW5TZ1U KQA*5OIG_י@`մh.H^x^@"tjBa )=O^+Pǐy)sOcl%֜&iKӁ2-TkHg`vJ{ȉTGG(qp둑R0rw ZZ1W 3)8PZxlqQHLtrHAjHP@@L9)(ABdmBIJ"B) <6GI$"—KP~۬#a ,_ y d@Mc*0XTReN,KiB(*EȈ/FAJUhAd9g6fe+G\:7! ree*\c<A5UMφɅ_wĵ ʀ܆Pye5Tn Batcwɉt bA3(qcӲMh$јPb ~K6{"!>2@ uLRP2۱4#k&?F>a8d?gN.Gw^4ÈEimƭ:fyl9(oS7`+$dÀ Թ7?\츨F ~jh :ב ym2jDn1#VE'M5>>T8է-=}::cB#R1F15 㠐զB+BMR۾h418QiNQs:Reus*)*[$>8wźW}$"9l@ӔbD后J*QU᢭pįS052%eDyQUpk[I6`Y$]q t$'NPfCb!tE;ZseT"1hbTК$ml05A,f:o*T"wX~gWrc d9 8 VUl5x$rfM{ZhOFjI)A kkRhJ-ּFW)!06tDm|=/YQpU1iiThC񀱰:"<;tv9{Pa7$HLrrEB hBf *f%hQ,e\ۋҔ`ؑgx"IHsa j}|X+ PÚsYAx8w<!Nh*xvVPޠZqrTG$_HϦS0sh 0DĊ"[t&=R`+^lzks@!kdZviW efIʀ)޳Me62^b8I¨鳞24Bvݐ Ƃr2z0PE^P) EC@]uxigi ݔ/@),25G-ex\BbfidE/ZQz ư,K^aJץ(ɣm Rzi Ҁ"&e4KmJMכ͐q5s`΀ Q~-\~ȘQ~j!jӷބ׬P0y,PK~&5xĔ*q .mZ%o\$,|e9 M Jl?)q@da ":غ.^Nl35[d~YPF!lH|; qה\dGGwh)i0M`Ak`(ec |4KP@1Y;NfqNGFV!Et$(uR6plR!8FXȲe#RǪD. nWUu17{Gu̲[A;)?@m,tOY0sA Ֆ}>A8M f~  HƋP&vRoӰ㢀[=FaRN(UVP$J|xD8 erMaz<5 4 EN6'$vT5 N%MR&4`ģ@Ɂx>?dJCJ A#,gWjFb=' ;!7jF͌b e̲M MDQ\)TCFj a'EW <:DGn5!sA{q lphhzbj2 Y`"Z *RS 4E@QԚԋrh'J(#s% ‚jaq|Uܘ7ߘ;'k@ 5Hmj`^@:-70ء+f58Hhw7 V6_ |wlʣ >!::3)ЭA} qh`*.'3 ~WS5;6SOh PsNeNNNe _6xh-Wp`C(|2hnձPϒ}6)5.u Mes̟g`!QBt2_(:(5qt3xb) 2)ZwK!\6JT6Pܜ45P^/I@¾h+OEJrtEl21KM=~]:,xC.P bK,@# ^ =&8ֲ6 !@][IZOWceRS^PHv j>pLhV !iicp )O%:C@ urHTUh ^$$$ b(ri40ECT,Z&یnV\T6egTʟ3@'"!-:9(kAn,M€$f-%9L!@Al߀H_q l"ax s+ez@G%"K)Y>&Ʉp|g]zóXG= *, P> ,K֭S@< \6V>{##f#Pm=( 9dĎΦe;-!C]C]4!W5Kt,%$z*=03G4vY5Bh}6.C7\@8*Cji{<15ˬ~b0Q5@ CqK4 L #Obx !DBAJFGj!d,`"TޏE2Ҕ.1?z`Q0,r艡rOL\B.r'2nEt<755Vq(/,|:0 kRAJKК*]2kq2 ' _8clN#d$แ Gu2PiD9Ň\qPlJ=hlu$JCcf7LRfҔUKXC$lU@ C@.^RԎ+ԧ>;㥨=`ƨҠ9> g<$PHV'K*ԁЌD(2):lS %W[in&!pOi 4v}[:i )!7=E.)-EsJOF#x$*T68"ngrhM'O|:t(B 0Qɋ`*wh1w"΋ APPC 'EΎ)U,Fgu4ȊhǃLc]T^tՀB%TbR0s F(Ɏ,Gg`h-էXā4r2Aib C6WP 8("+E\/@9e(6 ^oH6xt$AukNx6hu#DuH Lԁ54!ЦC@=]vt@ճ䆁Po..< t"JpHw^9Y`!x.M0D25*A\s܈NyebyإY-Ŵtq_wr{dX^)Z,^ۀJ<[aBܷcj8n AVcDvayJG5ёJGE9S]X'2"~` 2k.|RQREhK)s '[]t3I8WG%d$PW $& @XI߱hoiIi(|bҴŠ"hy*٘pOnb`p =12Du8ihjxXm'%5HdG۠ -a'`ѓ^i2Da!yԊ>`j 9:YyE7:+4%T µъ|, ,͢CUrň8coo&UM n砆#IE'qt0Lk<x;00h4`#ΈwNrgjm%㙔bT/Λ0AT8kci [[ K- x ,`anD%4FuoFB6!dGInU@0 DHJĪ`Yr@TK5A~ynF2 @(B6=بU~DDq'AZo8YN$kÊ`FɅW M(Nx GG tbGD$n`X>|*PbcQ dbbcR-i#L9˹xGF<6T ȴIadcMȥ崧8>= nj zә3Q#کꘄ*+um6u7)Us`1Fh IR*3釨".C!BV/'+R/dpAab~%A:憪 xF0 (a/&O7qgS HweԈ" ^<}|8hzN(f&upY_c] &hKaDf@ GETyX`E-~Mn2ĝ=PS9apJµH0D[H38Y8 B&"O. 9ȁHW\8$}/G"iXcx,P4H2K4(J ~(aU > *kbnޣALiᔁU>C1CXKΒІOQZtZ -`r͞ 6!e6{ T Z!$B;`axP13`"5z PPnx\٪VYy6&1shLarAb963 ?Jh*/S!7'x102"ȂL,쀱>iބ5#(BaR |۩ N.O1v~ByP#ZH.{'p j0פ-D JH!K䲱9Qd(#@Pu@PAQc`yGI|l\;\3#P RhpvZEb6Qb<C_U}j9 ԀQ; fytSC_()c==mM$-AsH``'F%!vJ٬$18TEy=G#=T-!&Jz'&ATpVI]2'8NR3vA,h5HGs ,-2q:K\!V*.0M4CMivj*P e*oSJ=4ڕ"JH.ϸ˻<Ɔ=ri K)lUfJS. 2TFC xk8 ׷18W0p:~mPA_ E'&B Lp@7i B0I} *JȐ R=CYhEHs ┧@Ǟ6]² F{z41'CL e&7@; =Ď5J+t*:&B3ae꫷)8HS2˖_&.Oۀle`)p۶ӥh@nh)h>բP V {ĩG 5R`&RA*qT'za!k)bDQ]رMڰ݊HxAg.J)"mX qimR; \R.mʂ}*TȤ[ ͕I=-j!_z8dH EB!\!]|&5")+`$@$ "P5j!(q wƑEZJ~\Pmi|Dj|VK藎YLEv8~XXRDZ$gsuHgJEnMB(xI+[!>@ ޖlZ-\5x11 ̓E$ ` dŽJrQh#AI4Pi[B'vό)CtmCU5RT,Faj,-Vœ])`Ge&/Pwm1=:Of69;#-.ض¶@}Pҗ U4JF.'>51Y]z9yw0GbW-? B|0ȍ7]kz:ç{,nsWf` A25kx|z?x<=CZyd^G6zFIЊ;vCma˒+|PWU|¹Vè&;Wѥ?j qv"DĩitÁ]F9ޢ?7u+V*Q~&Kh_k˜uKx`9nW&u yQ7f:F1gJR75~CM;bjP:Dl ߴh4vA=c6bBȅ H=W.2sxxiQjf ޥo1{cji[)EQWzTQ݌`>g ph!}f:ʇ7 !-Py?&6q 3f(ŗJf@ ,,1~BY*uks Uv5)FaoG 72ɑ y2G46RJ"˔h`: 2K6q8rOșFp~2W)rI=QP[匆Dh *JCns LP'<^,wN I[7J=$ea>2SaiT`UoRӧH$T1kaCi3 Cv6ofDhRk)!C-ZaR2zrٗ|8)E訝PB!x?,;;Hg2dug5{t,gAOU$l\ id$:0+}qs^A6/jAIFT[M}mĒяSSu -<)B,ðۤe#el^Yil1!T0}& (`9D| ݋0 -QsіU1W?8-AmTHwxjq5mskŹc{Qx;}vRF0+ꏅBsLC$Y`^QR",*q)\20iFk..%1$r2%=+ 9 7RDCԄ!f҅L* >\|uv3W`}E,YnSZǣQ]\HeG. 4<>RCY@MV?0~Ej@ޢŪTn|\7}xc @h]p Hf _A̬d^;8#;R0 u;JqQL<|+5LAV$(Pcڐ1YJZ~mN, &!{B@*ކGE (РHܠ!-<Ƞ~7_ʹ"n6Ր&RNIϢWcaB=f8څ\F@V$Ŝ(T Z5kA /%/ \Ը![َaald5?V2{2:"A P; !qZsp(OuWʽ#L.6פvłᏫ%]((ZfXN7Ȁj7\TahW /;à &>+tAAوMC wlO޺&#S 8O0DU1OVf`E[4)SSė#Gc81gz$ >ji )qn&pԘ<OWV8 xXq<|jcb) -y.IQ|JN WS/2wb (c(Ʀ(Q60WfzR{rױtӷ⼇mvs*ܪMI2@6w9S7 !T\echNTݨ=@@y)w(׉6vw1 _Pnb٪ I$|) tAc&V Ns˳$)uG»;Ԟq9 le; !CB y1&KKT>S F"U@PؔttNyk̥t(!nj(Ryk hh-J@ 8ܨMd#T) "`1eYrQǪP4ar@oX:@"T8NDϴpX`RgxuQ+E7G<qk:!q~7+(:OPF]/x"܉Xfb+8 n7xiZ x'Kq ,>(,u}5Q@P &zU'GG(KAD^17@_&/@$iR .H.t;f w.@&Z;;C@>*jǣ sl>12$Vr(cPŧ'U1'* CiBQ/:HΉ,3do[0@So8TX9/9x"&JuY{pMdpgs՜o q vE #BC@pz|RH>aeyQʍE'ZVf{85uB:K->FYAbEG?qnȱً:Av~{iL"8m~pZ$Gb62 Ok? m$$J0 w!R[R!ڔ/&#B`'^ɑD)r;<>ҋGQd5m>L5RgJqUCzVr6[lS/SL59JZ i9.ɨpHDV{$h\ӱŞU!%^jF&{F`(Go)f>HG)P0IS0b*p v"cw4ݤ5$9P*%T]Q!Mt6EmHdJp>$h}YCΰm Rޣ!ZB=2GR[.BoHOS-I!ᵕp.1)j_!~rm* i2pthn(Ց(ԛJޚ#M(ic0w*u/Z#N満11@7/K@QatO` K'~Ho*V L 9vby36N66T`V+eL3T%E*YUzU!0+u!~Dkt! v|§j#PuXFC: dkm$,uKzҔQmض*u 8dz#;]DJ@ y4s_i5`( K<=n0GP=:"{ՌŪEEfX=ڜ^c':䉜dpL\GTW$P $!]ȺW >vlF,rXG #̢ Ei?0m*b'g}z. O Bp&$}N=xL؋38N3\O1=5SH8Y0ўEiKHe Ӑ*= Sb'fn!R4VJ!%ean t@SٌB3cBdmuAtiHF iϠw9ubS2(lrqvD~6aIcC??'jZ\.4Rq fWtI$| 9JHq$~qIRz|e`qBMO+`7/f]jd`s(&'_w0. xaB!poC4k*o `ҋ!z Ď}6a!H/X!T;(KM-?tR xDW}GC8aлh}HBxۑai8*ؙg IY & L-yl3, r78c)ZBn"8eÌ+ W6V0Hy]!jqp1Owlji%DMlU s=յ#jQxLDt=|<`!V:uSAjYAP]6Ohb 5E`f'~R!QLk `CtT䑂'TT @f *0*HFEťi& IX46լ IcC,Ψc{:^7"nf1MfԦ?T݇#6X`A586oL܆΢ ˎd,XڡB*fkHXro ?3h[N!YdMc[U)>E-M Ȍl1C]Y},\}_mWhm&H@%tYYeBJڂ;`hBV?!L@)%bL B&gƳ@KQ%3Jؠr׉ KW_OGP IA H28gq-=^}-%`@F:B5 W;摴&/Bwa DoxXؙi7C*U'` |okiMqh4)UD *LG#1[Q籺Ll>°`hkd1uSY h{%s\F+0ɯ0 ťB7b ><3 Qd,eݎ@!Z[ KIRCQHK4O'#P$a֏,2h58T4:ys$r9A tm:t f(zp$@` ,,66/c݄W&*xKl>6UBN¶q REud@(|AO**j,C)ZdlBw] ;X]vL}5b3r}5,dO`F "~2!;Am7n1'm6Ն&<6MTp1; X<*JSj3ƩW8qo5bjmsGוšP( $9xV¨"ADYUOCIs"$@@xُimsY6q'q 0JEtDO4"6~v:2[i`Y(_@AGp{! ZOp,9@46YФ~Fah¨΋qq500Iq>af4``e+w$ 9m!_TJ'LTf&psMf 1E3όA%LAf!gympEn3SFby{fp+C `$X`$q7"Do7˜VV ]8"M\oy @Q_.E_> X1JeȘA+ф|7?8(:DI^\[e Xb2d~q0vK=XftY؜<:Um%0i4qq@ &u2Px5(?& Ǖ{,p5نJ-h>gppN>[@1^f9kB F0mB:Br=:c$ϓ-$Y ?Bhoi-,L)GF&["$Sm lH0<66LxraP" ף{'i"gXf hxyv) *Q p0j2n&`X$iD(Q&)m?P$ (Z; khA<0lx{yϾ_+={N)Id!T gj X.{H3%V,&&ݒ$UzQUʟkKJj>GJFn?'%*ϜT=nxjJocbiuL[rto)=uהU䊙Uq_*lx2޺]Ӻ&O<׍i]ɿ-Ά4U̲v1}ne7O׬l޽:$^cyVJ*>-2 ju+[Ŀixke+ۣ_e-fe'qmq)vLj4@:@k댶ra"%=#95-#9Irc]zT%^}HiѱS4~jR,|߿x>|I"޶u)=.V͌>b%wJM)?I&Ui<^%z-ݲ~s.RSkfd'9ѻ#zw%Z5}{鯿wJxsO7_3'~sҵ/?=hHW- \75-{o7u Sjz^tL%M M*qպKϔ "> dIH^{feG{c+=n{xo(8.R{tj#)+O/o.!>ͣNK_{eo_?hxE{$~v2WZ͛7/+?"GYډ+ OSZ2ˈ5E+w}j_߿_k%zuMITZ%% ² 4-=9__oXMg7a59)]䆮hd=j<-ns?v\c~٢/ץ0C=c>>z_l~߮uov _ooz/Z1X맥&%KCR)_sľ/kұI$%+P~5n!L5*%3#?;8./?ώ |oOklwoO"/?jrwGcA*={锚*& JJF*]2%U5J\]~!J*_/Tuvze{h*MEw0(?OޝRۥǗvMjp{æ'~IKk.Yvi^zU;$>) IܒT6\oOk۳kJjF֩dȥѼyW/oڦķ;Q+%陑)#]v2Q_] N=0#Oq~7\_jPв|&wտqZ%xy3=(\RϨXm]cR%u78ŹtCJoRm~1o@+=7zȴ}%.d^tj5-5?t_y<|I{m凶ˏ4C=cZ?)C-_xZ3wi;H㝡u_=?|te_y/=0j>n7`Ʒo*;?_}S_v{c[Pz__u_ 5N֩Hֳuz_c6[zO[om;juK 8 ة og߻oj5N&_NҵM ~|ö[K^[ރnOigK#oF7JT|߹+R<%)>M'Ͽ211m׿4oאvG]"^KZ K xn@?ʟm;&c(;X|wĻiW.ȿp!K<=ġuܶl?%9㭓 ܌ w~_+Ը,_l-%òq įr 4SR{%ɇ&ײ1ݺ%Nr%(\ጤXSbn)-U6~Lp9ժϨ&WnqS͚%[~{cj7] VZC^C+Etv_J>XƚOKɟR(ZzHd޿"k=6OT)E/nnGwJM\_|j:]Zg4>V{pظ oR)ɨ?8{MnӹߴwQ^zбRI%I[20OJB?1q+%JчgmKH[[7Ny9Wh~JĿI]xhxN^D KJjIpU&K@=R *UTL~cTN:A% IJ;k~?qUƗ+Ј'zeߴ,Ǔ߲N.q3;yޯLô7m?wǔ.q߾_e\q%+g^׮y-Y҇}S VZr+NlMW1巾^g_X,u_=re4Pz|ŎE N}9K \GޞuZɑOW,ܝոCcݵ=K(cήۇrGcKޚ2pO-۞үLY= gm~$W#O]r;NXUߙ:՛rO{Zu^B=N[3²9mY<ߩvaӂ^~8g9kyMnY,aҥj1gԷYӑf& >oG ^RjCƎ1tyHrMr686g@jc{NY} |%6:ճGN]Ras-gܶg^wѥ{ _~٢fun{V7\>ejȪ_]]p(ؙ]u^ÐO_?ꩆ{ YRDsĊrj6槽~7~]K.25էO[_ 2;1GG\֮_nVO=ek{}7&l[+/-n'|ʱmߔ>h;|hG-^G=Mg>.qSN;~pkgڕsaoyg9̐QU[T#߯ed)]OKkNӦ~}amXM7j1mϬ S I::䲦sO7RimSWާCj<̖%vw^Nvm.v w-,)iU; ,;':ypBYglްǎyԮU4'['T%S.4C -5uY2F_Y73%jػ F}4l>8{v&X%Wv?dGvo3mzωsjژ7v}b.=L.7sGڶtx´ٽ3zs#-Z~Eߙk|}_ҭn\yq6xu艃 w|T쾋e7]dr++{č[[Si`آ956̈́7aY= scm-챆cWg\青^o^:/œkhnn֧UxhtCH;#}TNn{%}5nд 6}pu|Nܖۗ8rOzu<6oؔEGdҾ]fc'&?ѷ86^Ug yzF -[U[.:Džw[^hТ=lqk<)g547x3~6>3Հ)AlS~,_~PcZ'L-G=f+ç?oݫ׏ymEnӃR}b ŻWC=|mӺ_']]g,ax˟$ˊen_?0=W6ߴxWNΝUg76vƟmnSʶ_aߺ!+:/>pǴ=<Ùۖ 9ɥmYem趥♻oyr[f7,Z_pݐJ}`̛o}M#Ŗ76Egoi[^R9>k`J}U/yW}eCtwZAg+f^\<ַf޴yy|ڹK~9^ISNvٱZn޷k\khK\_Qws 5r ?oܾ[ߗsO9>ܠfC8U~=Y+6<9e6d7+w5rfѬ64wj׃7;l9dM=B4ԴYga/u~o_J| sjVڙ+6:ާ񙦵gxҋ*-wLqfu샷emН/>oO{K/^\Ez:^OԜ⅛*,*5~kWޕi2;/*szg&<2kr̟{ᴛO?}n[fmpY|8fo^dl23Oݼ\'Q-G.2Gۆiǧjv0rԇk':w`zδgLh[U}Bg\4m䀮gWlYz<\Fՙwziso>hߦ^XAo4c;WЪuje/y׻vOjviB7fgrGw>{0+J{c֯*ҥJu8{^?շ=8p診C?u {?;}~Qi垣O {uY~#f:Q8ZXykvrzq㳟1y^02s3?{y+>G֩ojs3fvн/rUM?t/gov\*^{f3䞬ܛsbL͕E<~ U/mrOk2`z ]'g4-^~;M'3gn&Jڼ6?|iݶ"S>?^ܳEUްYn4T;.Ĩ*7yvnCe}]jN[`ޮyy_[n)vicNU?&gȜ[k=YNtS1:=b*7;ezof.}_onrMYٟ׿i]Z' :;^)\MO99m[GwLGn?RK5@O4-6};F}\_ܼEW|U黖/+66oBi+A?>1d3fmFY-aћ;OX?u޵ɥ+Oncꔵ\Q˅1'+{edT%#{/xe̽cv]_|S ؇^oۢXcMv;kӪœڿ^fBwSXRo;}|g~AΧo?`˾{p`׸*_}n$[FFN\aK|=qWVXTO_-s{*y频_;xUoGL?sN˫߸R鑕'olOeZqjb>}MwfqN53~'_rW/|ͲNzm}㋯)9agggzO_x@ qЫ'92`˥s9)!Z6wx`o=t_ֶW&/v/o8gg:u)ݲ!Knx߆OkQe猴~:#%+͟z(Jw lȤ.KkД3ﵧFyiU?v-=ѼwowRvOyɛ6[ņ˝S|=‚joVbSΖYLvo7kZaIGgjڗ=[t5+| pO'FL9^+ <ݑmħ͸<ݨ֓5{_ h1K7nƷS,ZzЅ+{t|/D//iz@vӯvtK{‰]{OR7wJc ;ROUKu-^4wǬYд3>" .ӿopC Ow~k?|fwo߳divMe-=FK攻9є[gdk233yCGo~+빍 _ҰA 8ұġ4rk$k0Q3˷*]97kM<=Pk~|pkaQ֜)מwyVfwUPtE֟{b߼Y?JlȪwsSó^qמ<Ԟr֖4{=;!d+}=][.3ݚo3矜S;2RrW^INsc.[zߑikn.ْvoj6j{/8K{zʼ㩳g~AoMKz 6}k 6b_nGӷNEw|v&4ޜ<5]=t~;ʘ[CWfo?S&];nԮO[z<.xy-Y.9>3M=ZQVܼr?;ܷvUݿY-CMkڭ.0ʾWd:Mzk߳~_уz~)ܖ-+-8`6Mf38f묂#pkM/i~l_X!6?s5edN2nДn@?-_v~ON?/o4>oikw<񩋮8mdÕgw.kqrf-~oz+_kϻ?~^Ż_p$kyZQ-}o+}JZ%_ݽ%_'[ݻeN#[lo:w߱ճ~Գ~j֖'wdkV{pol֙[O)Se[ _yOyߣW=r}oq޳>_7{[=٧sw=.=tjѴ+9}W|3=wdͨsGͻ=;<>[7sgGZu?tQ'gg<89>9yޠ޹G]t) h9_cϬ5Ww|_^Tp͚*o>ᯜ4e_a4me Mvg.uNjvz3899y4s}cOn{kp'K}~v{72j7g۩]Fۓ܁o̾_oY3p+_=܉d=uja k~5rEΔKF}pySPŽ&l]Й}8Էw|֥s}k5G5w19٢j%>R=r;?/ClZ{#&~7|I״ӧк2aGp7S닖\wiolp;-tm{S5NX̼5^vOG6bƒmf?R|X!_}=F 5.}'c҄KiZFO햟쏖u*ǎ75hYO]ն[ ݵ]#'˜Umn12Ck{һg1fwYwڏ;֣ZېS._jo=9d5/g]k$ZwS@ӟN,ウ,RfWko-~';NrG,Tw kOkw|oEKSn;\R^%SN|V.spIֲ^3e/k .ֱ1sط w.:*_xyͽz zqV+Tuc7lwg =oJZ/Z?)'>x^m>.=a]%Wh7^Υ~7\/99c7pUX9g^+g=O.nwIѩ;b~GI[&Oh}`Wod0Hq^4fK7]Qrnb;c]أÇ/x{.ԍ/}wǟm=>2ϐ=|vuo}⻤Od;y?7f+fLFw]ULZ9^>,v7\ʎ go?]y>{o+m\̭~Z}ӒJ7?ҰU?5nvRV5oԗ[׎MӰϼs'ne+&t[ͫއ:{1gnqf.sҏ>CiuϗR氻=']3ؕqaW,[{JƚKscO\_8VtսJϻiU1ݽOyl.:>S=6z oFW샯v9K:nNֺ唇_'~y͖o+`חͼhE//ukzkԉ/mRˎ^@zo3奴f^dl-7򺇮3~~Ӆ^tWT3i-Zķ[4U}r]{s~|/NwM+uU%Qhg᣻g6jJҚiK=o*xd֓/V ~7~mm/-U6-}xwJ.xqָ`݉|]3mߊVshe7TyFO[2gB-뽧?d{U/}ѪXs_(lO9ۇxmcnO~̹n_|_zw[SX^{Ɉ:svjEǿyp{>Ĩ^Ӥ\u.^j^?]1_[Ѹpz?.tu,ඊ;lz黮(ՕkR*JXUl߮d:Kn hIw]\y߮N_諪/zg˚9ժB /^ڈBtKn_+.[O;7N{딩^A]+?*xmG*M}튝[:*ktޭ?Cj gz.{E<ܽ:3ۣo:E^UoRG~{+_+.~ic/cKM5ISGxO(YIr͊=]nv)im4q1a׭ *\ݝG*R͖HϯFϚJtfz6yWy>6T7_n5=-;'_zl%5⫏mhFPpo5?ͻJ]3_mw^5cǣu+y7ẻW[^k҅O 7V\1=A0KҐI~+O‘m:.e[-}|c\|_6Ԯp'j׺v/2?ze͋nqvw}`[,ÔMuv[?8rnRl慣G̸;O^u4Ύ]8_\a:7{ĺޕ^0{RԸy*~-cϵ}SxGu~Oe6lIN+>{m5UA}v:s^>x \9 nŎg?VM{m.Rzf9=<;@|#]SxkZ[X//-TgK?9/~ };g xWdv{UVشq6 jٻ֋?~OW8[?io\3bZy-}4i=_FްI;k.޸EeXI/ΘZIuoW^K׍}Eo{?oZOLp`𴋼%7|_+œ.5/~=_gun,u٠7V_taR߻ۿ~ְܐկ*sнϼW)e.ϣXnf|C;W/{x&zS%:T7w;F[{ᮢ_kAݝ]U-|5J4(~KM^*wmj;_}A:7۵Oܹss翱USO>N˾4棖yƂ{_{r}w,lLvvvzym(}1߂#g7mE/¢ F! z7P51 K!Q+τzHEV 62lL I'gS=/(i &1J^#OFqߠ2H&=PI QR L(.x$1Q%&I0T`11ZQn/?"u BajnDN3aJ$< BKwgq\aFN1{Jڃar%>T?mC3@rTI+`Z|FqA)kfRLflϐQzXE=9e o;`5wYFhQ&<c^+GL":%̒b8TA[ i* )'wEGV |۬uvfjњ2J9aZSn>Gk VWc7:R.XC 睮kh›|Dg`hz!L'0p <܀ A/Eb`9R # c3fI2sEFX +=HeL{B5"D"FZ3CA%,e P[ 1ȸ2J6̵ېe@ %tTP 9g芐Eܹa^0=NG!5E[0*֔ήLL,3(@D^ REx(7IJ(Z֤)Me_!0"rB6ÁO| NK XH,L&zى17P Z\)"P C"~wLe?/ f , 5r%P6$^D `M0jb<*MI( / }##.ƒtIWdpS?[d1ۃ/H#5 xeMtIhfPǠꪼ39Q,`$U8Z6Iܤ9p5xnRt@ ΈCy PLIA'E'PJ)kDq$;p YH6Qf8uu)0BBIh8E%2ʙ= Up j}[$&P$HUf0y ,5#K&-U9x][f[-\N~AY TUg}bg0 IQ:tEX`XJ[p:2zMFةVCИ+͙W,J yG2|tYTMx Q6Ev#SO6߉h)0*[&QRG1*\br(LX#Tdrڨ^ o[qS%z:6} Ȃތ>!Ikz?E)ibJx6g,gQZ^6u"5Y2fv:~WTq/{%kR$DzƹU]5۰lKr+D6CN+)n?v jf ͝5({HGլBJLȉ,ؘv̌+pep5I!@,iAt^hb]F0Qߋ:DOsr 6,W dy /2EjcNQU4É:j,n<=^[- o+Dַ:*Jq6P=Vzg }Ĕk%&U a3s !&B#鐜PSr0EN%K|&({b;Y,St`_zcWn z#f%.R.ʆ?JS&)YD :QI~|4*N~L$G@J۴$1 TdUFVVr=$TcL:),`z 9P"0k]H<%ҋK!E.Nl@ќyTa!,B& GhգW=[E4 9tPG@v-I<)gUUS :&hW-j!Ļg~<;S6'?MdY3ԊW3?=ǜat8q4gr P.e#v-$W9(&Bp}q4V=lA,}&cA;mL>9Az哓/a ,Yz{1YLDL͍i&B 3{Ǯ}0`l ( 0,hqa Q/">WJn. qS[$1dk|PnjWOR2A[Pw/QZU0o`ZM #^Y^aeRS:d°@iW\ 8|jj$i"AyGF4D>dWLwK`I84Ys1:z.l$ +_<ꫧ|pF3iğw eiTV#8H^(;2SIRN,hG`~ b./nIGI^ |D "o>zX+qob:I9׬R"mS) F%ExؠB*/ї AHuw"+9ѓۉz97̓3K5AbS&M+=.L bjf:UyՉE[FjDP{ E6+~>EĤQO gYGPCh"U{)Har)JYDy*7EU.Tؤjcxx]y/!x:OS~T*C cMdD2" ,b1^@ RɜT#Ht@jd/J <8-uߤ13XKTՐ^sTy>ϙ[iRs8"0U*(vې[=6jt^oW1IQYDP*KdnWęJ0BraB##1-הh$ȋo*+"urNjP2B&J#MK&$j=xK#-Kr%/bJvi>M׉mnYSP^gAQUII#!ψ$5&3j.@-KEL#KN{Y5Y [ )؜,TF1YѧLoD5$$bPKĐ4%;3Jd$%1$*&F xbE:yX,IBSqdTROe B'6@K1uM\&zX{dzb%?-Z~Ol4KTe@]>5)Q_,񈩣WA Xok`z,ųћ-DPxi!'(ƛ96c1%3RɻZ5tR\r7̭g7 \jb{BTV!+p"M%1Oa2hIf䳹WYUR1 wߏ y+6KBzAOq=s Q/GV3H)UٻSNeb ^m Pp [RVdzJEŝFB n`vRđx4Q/PcFCLRe,h$e-N~ȠޫNvT㔠iur*hzї:QE3a8\y Yη1 '|7jHA?V&V2L%z]gcJh%s;¢2zuPiTG26kV4VcZSR3*j $JR C tf*d N'+Gԗh-2#%XJ ɦB9O)'ę8yH*]z6:dH2<,[4Wi.7w*#VT\Ye`UAcEGGq$]/jHD$7ҵQL^ \`qc2?t^A&!tF2WFiՅI-!vT^xWӏy-d*Ћ*KbdNu5U1* DE bY]?ˬi%ӆR& ּw `"?2bDsg#k#6DF16UѕҬgh޴ndjkKA~(8C*hQ0ʹ!R kN=ꤒP$Ý"֬{I) <(Q>e@=rPTu _ S"Oeu:U.{P 4gpx)gii]4^H.g?l Z(E- {Nc(rܽVXAxJ#4[==:h 0xAug#6J0d9gPqNQ Na;!DIv@IgQCցީs9A w P ,>>U45ۄ%i_D%&_gTG] ::gQqUJJkGR4уUe@Fk,Y]hʱpܛ5 XlJMa=X1K&6|f1h6MT83%c t4`Duc {ev=t0&i4(⨦!VTZ=t9!:不"BȄp ̛u."3l2`b# I0unɷ  4zS+<{1xXB( ]5 ?PNُNJjayz/RMx>9+T-8ΗQq'cKB N-u#^^{OWةܻ<\zv5o#T!{?uc=z%b$*hF* LUSݢ*^} Jcl)gF[̈́T;eMEu%. |dH#ayQn|pݛLpI|JpNgJC9iNAy(Cy0Zl f@2]9GlTtԎydL)&Ѣ~ NUJ*H"0cUD$ﴈ2hPV=FfpT^Ny~JSA?f26_;d{Ƞ޿]6ICT5@D%yKHG`F.|f[\y;$3UW&֎\(XU];[EzCv[ 1~X0ȋWCS=<' zT5ԫШv}W$JU6A;EeDѐStX%)ZPUt Dr&n"YUtzʼb|e9xVReni#;.kWe@:(`!5z=`F-$SC#xa4 Dǖ&E`KB:ΣaI <=]"&PT"svKzDífi>EUyb NUkB^ЊPvRe+$}ǁb F4tD-U}ԣ{#tdE&fH薷ݗJk z ~%e|`><(T-̊9U)bVxpB@Fcxk N>cRW'}q<cN-M#YyvB UOIg0;nMI(6#!QtͨµYUFѣ_mĢp4k#yP=bY|!ipeUҼhӑkb؅aSQ'v^BXI}7EML!V/ȣUYبZ( 6RdZjKПr(gPY/:yVG o)G=Yc$iOPGg`aBJiROaSW/"vJQVup20E';/ޡ$7Yr{9r VA݊X6vN/fv8 `FNlG$R4AjQeyJAťh4Q$$xi:D31*9I])E29!LF7MP!jQӅZHl y%3KE:S }*j&V6~o4[YeYB'cÜE7OhO_E)̧"=(g4/`:׮3pC$u< O JLDAuPWk28!GյL,926b&Q]/5AS .l& Wf4.K&zfzU!Eu(?/.0Ms%{pn&CXFvGVUeqo`"`TtmRsŶ5AM:d4`e7/&4Ȋ[L |l0))vemUY! ;iGʌeZ*7jZI3L V÷!2)&81dWQϣ=8LTi .B='I~ >\{ةpmDԃ-n3m=ZžiL$/H5PWfMYAZa"1L ,@9BnzHZ""!I *(NIQz0ޜފЬ_޼B4{Gw%Gd\\ٳ,x<\cRe2)"aÆKU pXC2S` 273ugY4J!!]gC>U iwBsZ6S<'}A'Kƥzr6xaQ(Hb] lzɯB ' E#pڦ{"_{0^ӎQ-3S{a[cK/Z:NF2)} 2BGŲ"`ދZbRA3mt7e74/jܔ6`chr`xӑɒfq<ȈdLavzՔ5yV[ylabIsy'R|ԪAܫM!h؝3ͧ:1yu[ؑQFg3hѻcmkvY"njp)J-P5g`K 9Bof& c.FbgqAU_$"?Id|ҝ= >\B k˳3M2|-/.J3V;5P#Y (uxy䘅tC]^~%8t`]R0ԾsO}S0L))tbr3le0 O~1hKzMs/2 Mԏ^Ы 6%UEYռ'(2*.pSugXx;d&SiGZĜ<##^gOcTUҦ<UdBR%=a]"Agmut}` NJEE4hY|I,zaOm!ipeW*Kz#"Vf`SM ?Wb'*Tˬ6,PZ} S'g+Q3iK@a k~tYau^i!Y2M;)'nȾ,} V[ rnVBR$y0 iR/Dاhw'wۭ XSO:>{)n3^~RQ.1eyk,U^^^֎9Q}LWfk;*E޿PAՖ(ΪrW>d{_{-K;U6zXs,#=~mճ釰tQ_ClZ=AwFeUX{ '3jL24%bɤҥ:=”P*qK#HjLNFt̛ k $}[xxMR2q+.zqiF ̈9(͒z'@ٽkt ;^)!K[mv`s%EW6EE^uB˦A)_1:Hj EL=-5" ͻAX-GS!$I(iTi)BDYI(@yiٝ)7n yg.|׍3|z鯍OT $}Rr.ٸiHV_ mԔ@jbG4HqΕܵB<ʪqP_>/lA-KBW'T7QmfF䌥]r{&o*'c: І"2LpW`ex ~EArj4ٍy2>Ej:>((ˮ^EEN{3nW%-je_i`}@({Y188^2r"DM0-N >7c@cȌ(hwvNT.D%0N5.AFW'_xpGۼb"87I?ovVUX{aUv5H+yXU6 &? {.dM;ޱ3$ddnZ!0wȒn{ӑ"ҳdjTDNǷgm]h$cW?nށ{be?Ka5gO=8Qfo\LJb:Ƚԫb#X={IizRԎU|޻"Z; DmL.(Zx58p‘z7xj%dX rx77AJ7h]*)e%~+J(p4:+ 2(*fwHb&Xo~^@¾oEDg05&=Sm(G)i05vbPG76'!;fd.vfzݛq#*su$"ؼZfPQX,j`^EU"M2zŃf=̨4ba 4|w&/ W[ύQ$mmV Zaf vVc:mF]jjbmW}D{K/TjřX /8kG%2TDBŧGX]%IA Dv5]XUH@!F"Gw맩)QN^1ιo,P3ջWr7 mja,(3;c{\j='D,"B[P fggpIBeE'N51  ׋c 9u a4bW=&ȴHNSc "555Hi3-ٯVU+t{3Vižb;,vSm:ғ\5h~-/|!{aCl*Hn3b!B(n~zafCjXbLX$Ƭ/( ppcAE2wqϩ EzS@׃ɬi>ȯ0߻h T2\$,L;e~F5 _/̻Uj"҆=RK~h:`-<Ɣ$ŦNӈs@la5I%d^ BN^\\W"LҲR,eŃMA.Ij@LqV?hu~򊦡eP*m mTXmMޙLVuRMP&G;j*BP CJQ2 B$SE)/v(Lj]Ξ:+Se-I VR<T 0&qV{qw%ԞT@UP7O9F _5yش轚nFi쩼4uc3s,M)ZՅEl9,E#4WۚGg٬j^Ai^mX2irJHj?]anJ7Yb%A,1g;$$2(j,bVejưl>譑t P}w&vPrG* $l\E_U.)yxB쬓1dofۢpiWZ-SIX:XE:%&OTU4 X9VΌJ1P JI@n'lGQ +_)<5]*9}t<VWN/9AXfE~KݨDL C>^id)lGL lG)qgBPBXX-xSk+).@D%#==7K&UZNoʥ@^2[Xic5kUIb|1{QZT bĸe"m"K<խ*c*uhPusJ6L`OFբ S(֢fHHfŖ񪺽!/Ӿ)JC.~ #JZ<097}"Ta%|"ot~]bPЦRV0gW&o)l0x#LuMIٴzl#R|`nEfPQ)p7{|ph*'xV4pkC:ܥj5tt+& Eax3`塳Q  0@x<[ղ^QPygL;MZ:1w& &x3-f| ,Fr>| {ӕttRyVW˲xqWZq}`Nݫ\v4/S/a&`ds@5ѝ "Q ';TJ.q!@z ({ Y(;>`j{ByV솁3Zè0y 7RK̞3F˛8\ꙊxqʧaSA0T FS1ܛL;3t8 !9ŶɃ$EOYY&OxFPqNR~YH4e8p*@U#i]J*GE6i/$B$*vnT*5S`S}Y)CPII9&MJ 89K1E܈2mȍo֩KPN#,@Dv 1͵gâ++A NUDfIK7,6 6vAƲ{qݟGoϥE,9QgƘk^D `}1?5yMPvB FTX UCY]Z;i=ڜB5G-,r٩z{rV KWs^-<{S{i,IYu զFnbVB= -voLٝ"ue8UxQdc)O'c'0IŎ:--{&왴3;i~.=2wڞhpJ`ɖlH粦M+3dy`4 \0?+3DXk5=(?j7cɻޭgŴL:"`:n O7 !TɄqe D}z&z=4%I5zt"JΠc\̃*;]5ݸ`6?Qir49۵;Z91;CxOawC ,/ ;Rm:V"5Kz]-4+ة5CVIA: :vWp] 7Uӫ<5oӉry,7ߘ?-+#>}S+JBn柚3U~ "9.FM9[[2Mo ;c ^h6 FE);L16mZea2mJ9ߖfVxzEU!3TnqX|4Wh)S-TDF:MpR5eSH"Ȥ5L&kz3r\WCc/̡OʔH >@()0E:](z(C|E@$~@Yq F _^5}qHd)Yh,,"+ ?a|WaҬһww: J5#oM]'\K#>FZJXNh;@d.`A1Nq'Ž+V/Mޓ(BXufSG0 ]0pP.f B~-_<ә{T!*?F^v¦JݽKxzMe.uBՆH$(V1Ļ!Sqwar[ItThL+o<ӻ:CWI;beqޡ0.l] Ҿe14$m;ϜJWah+'bQbadfCeZf}~keY?OtL5JhM1d>3.L#d6qXAfc0bN) ͏]:h E96}=$Zqn6)pq.I|n`~0MzUdm3DAz)#ēBXvѪZ?xdq{ԀC?YF 0 ‚{9i6AN3& kB9g&8ycdS'6ʒ[j!LZDypup2|V4VGD+se3f 9QGILZ%{,+nw s>ܲFВlC.)DgHzwsC>;R}yu<.ȉF+dvG^>^zsX{`d[M&Q<8~vqN4-c T񵚗[=pEj\qnI:l-{rjHǴ欃a*!,W'j`ҝE."M3 aܺ{?|q%hD0 s.Fp)?p"䟭5 ֎N].-TrMKyt_޺y8[ǂnf   wk]Ur}#Hj w&GB{ɨ%SqfN2#X>E+*6 ߞ{s.3KZ &!|ʔ۟Zf<~ɡl9O {msVIftpM钙4:@< 1 vHVr^T6;T2@m5LUhTsy4> 7>/Y~!^ߟ-l3Du=/~WEc&D0O !l<&^M=+c+>z54AA(}ȂjW!G4Z*nS` q_xQd,c?>a$$s3WR7U!$37n\N~ 4՚-w:V 44cUi.(A9Sw*\as67;y_!c~RH ŕ_sPb8dN^TanQͰ8gU*YׄC&rwN60;O蘙=Қh%9Oe:db2dS!eOc{&JU~|!Oa$հgpЀdke#CTr'qkaʘAV;:2qx R/U ]nyT៏i Û(T7p%C ,8{ҚѠ\2Seɋ)biAh?8+;CZIG5 hRZ;/б0gjk\˦}CNh+/cRgovԮ+Qro5^BE1E (\ZY(hr?az+:{1i7b7H`K(Arz@pJz}9TbQ[sϐLDZ 5&K)kC66ue7\j~nw [Zwތ{6D;LK,˘I'g\L2+fy?PcKvMgQ<ŦVff J,0)x3T{yyFl<$%~[ /bF7ܑg۩%|VO#B?O;ڬi$Züy0.*la ::#JM$TltSa :>tmv4LzxNJ{1$13s.9˵S`6VA+LU=\  `zO{νp)x!5f')SH7azE>rC6`[(Ri;e/wƷ1/NF~(!pb߿'tG0h=g"+ V(HBa1JcIm9_|-L~%[fJ&He`Au3>]45 M>c9u`1)J\Ӣ$=bj)A~GEyR:<^ty@6.I׍GLgj5ଊeѲubX]c:vȯGM §3u aKW!1B들^ϸ[X诒DT t=pVB=D+w'_gP]X-BKLe"qGwЈ},{4SV1ixkMd7V_(aH)'A\S[WYC]ʨTDkk8DP5Wc!lDm=ܞ Sy Xb\]xQF2sV=Zݸ&m&>^ha?(FA'&šX< v-ZeB H?oɹm^к}:0 R]2Ųl)Tu}M LC$sW]F55GXG r5+=<,L].6t=MQ'XE|Y}6UL<(vM8bJwxT*=,Rm0 M!y-@D TA-<\1 %2z՘!Z8 ʰdeJ#r)~&X9T9Хu2r8 |IռqM)>aMMt;Mx;S>Թ|l -Mg+- \ɘߪ| e+EkӴ! -xz-ed.O/ejjػ,)N&oK P޴Q rEn8@aڹ൤FHU-rr+mf.I/ "!_Y~zdPJl4yeT$a`^f"8韭Wm  n13}qK 0W;ۑoWC%H0mФV. IDp($7uz"?,M$}ؔRNs'Zl(M߃b+wo7vpnCq#6*} ŃM4> :Hџ0`DDVO!zHdf&AMAjvbuѯ]JVxTVxa.ոeRa)s6xk d8߻Z|+tyy32,!(0Y 4T {d{#q0rp'# CkOT;bmiqt/Żu7[YOhk`wpǭl=YۨV~`akP Zw uinD-ʂ -^&Y%%̇S]P* sk7dH b^K&jUFFaw-OS=$6~4_KK/`2r۹|Bjy;ܐ'0tD}7J:[:|m~ҁU4sbU_,?:,fL:0l]z\r 7a) te%*\F^jWЄvȭPoke>53`) \9yM>*&77g.xx@7u*VeQA!bLs~@-AD͋Q0;w{z`9oLI1a7ũ&IETj{,Uv2Lx>uatՔS@H\@* .c-$XB>֒%ϵ*2{B>a9ٙdLAejIo1vI!ٰM8a4d(CkW4ٟɄV DUE(=WSzw> p=A  kjOiIWBfJvERij0 /3!"E>.䄉 |֒lslL fe>Dq643-Yߚv:F`?xfOe>87FciXQ;EazY`Uw6h]`GD1ucA# u<.Yz51 uDǩ&lW^\ςI,ڃStPJ^G[nX˭=S-37Ofs3nUq^S4>>e&^#rQ؄pѧ O"@:nLƽg\CHPz`xkrju:jͷn]sKvKc^C׹L3Ct٤W]{7lY vmkqYyJi*kݣjw؁ ;ՉHE 'Olnm+}*nҟjF5DYK79HBjOMtg]WӣfyiԤ4Po f7}SSz/<νbS7s%r X(+ZRݔ{ƿS= _"hY&3wFIϨQ1u89Y] Х}gR:IYM f^eY8:^)euv~n 9u1?cEo8baӸ$@ixL ת] ib&0ZوٮEͱ"X肅ekODtݓ(-s|x%w~c\F;tr:c4bр^F,|{0Sjg{XU!֔{sv:-])F-rŀ@wጴ L. Hin.K/\ +7D`+kBТjԣvtkb B l "6OTe𿠃VŪ]j [ K)P/WEz'zZv7kHN'/攩K6,qG@n/xΎ'~Zڛ= 8&x{wܴQϛvVωcq%U/cW`cO [JKö$e#O'Y= axЫ1=s$w'#y*Ԕ^wᐪFf+K tq./غi/$ ×ipjaZFy3&W|z?nNVF'&5گVoBt6=_©&F&u-j#)@:Kϧ@8.?Iqu1>'<}HUQb36cDH&.V7@Xm c]G0$& mZȗ ]0Ѝlئ=]H+K:ax ,leeyҖ6ibzIH |5zAs' NÁ[̴Ee F,D&Szӏku߭)pm nˠn_"QǶs}cG`yODvX"mꅓeJbk7 t %޴6O6?,fWpeP\DM-3Ax 0o]It|Řө*x2\R!lIS' -Lij=C{/M"Sq:BR%{Oj׺s/ mҐ qRemZ?A} 3 ~^x1[~ջV2] eg ;>|WM3'/]lLL/lU.RO[*g4{nׄ3TqF9˞zؐ6FTQˣ  1HyP!֕?g ?-2dxaaA9g˨}TlMi?eJOM*}ބb z 4G:/4q%4آkѳI f+c9|Dy%tEÁ2#j:xkI}/*ďSeˊ檭̘˒2{e;]0,8懭ʣQ~ugTO>#M$=P;jQ&UݞHR4$vuz$ |& yԜ !.u[\&jׯGCf~~H{i!sR@#~$Fh@(sB cZc(͊3ԹJx4W$ s"㐭zKۦxѐA49=-(RHp #G#z@eY[!xao\`Y\-iu 5s(J?ߡ( t{.㋞&S$T>SN:^kZ4tXjy}\Lp32ep~NCN(PḰk;g*Y@J=fOMp {MNJ{(`k<5Ow\q 8֡{3UD։4,k|,y=' 35s/Cm^0'#K!6 FS5ދa{5B^EGED]O#wX?mDLc2obfjIJI:IX^j%4kMP|;k|71Ofܥ z'cHgJt_m\ -+tJU'ѓ@ 兊e~9xQHB)sHWJ;X% y+պh~݆I[+\ˉn8 J8b2q|.[+5q@6yo .B5 -jbMc Óbsڦn?½r^.qb]TZ%*6qfS[6HgKh, 1ՓؓаOI ݍmiuE J5SGCC ,7@0oN#8mrfNzW;aDn>+W8#978CMؒrÞ_TgdTuGN=F7rBz/_zkM1)xMw(h.kJ6Z xLێ#36U'[~Х\@u }> OKnI?;i}-j} >žoc k?%Y򎛑kHxke#;9A& ]4a%\PfTTFJ"=2,oD cTxX1,r8܍Lp"ت梅S YKx?ľ` *v-h>忦OLfȤӘWݯ/'f/KH͝yU)$=9WL&dҗH+>Tx4tyZb%=wZʴCX&9kqEtȭۗLʂȆL/e R5R;{RHFPhU{R@/v"Aja Ia^-)0w.3caܟ [N17wUW ifu[ г&}zZэ㞩!x-ւsD=J[ w'>HLz6:D2C/=*G~ΕQ,VƇPJb'vxu;LI1b=ZdC*`PWcVox=ՇS{N;) ~[9n~k=-R1h8$'0צɊ~LO*?e22=ΠwBnwI0TE`|Eڜb#TvCN}`2v> ؂̹-z[@Wة+gCAwHu_t t}o4ؿ [N.ǚr\7G) LC\/M03RU+N9'>AD8W& C^Yȭ oZ%҂]\*ȌQ0\Sc<9AIаpJr4pdXIn'*5[T(,'o8bI{T>Taz>{ˍĥgM ]llfQCP63MT."B/&?c'Cp1%G伭Rb ]-i&S{/Xu >܄*w/pnϑ9'%Ɍ5:a:kIAgܬw "y[?ȼo*S۾^Y+ =7C s$ Zʗp<kU6@q?ڑe(2. j [NɬM 4L RvWTu~e:є"n1#xg ni>C9J*~:V82G@5D׳8rs1NʢhL9HK1wi};a6H%"ʌV栶-䍡4 qXEV=#iI4C12Kzx]d^Ż)R@ `Upo7md5H˾U[-= hv osP/xp,6SЯ!:m]P46?Ao*ra۹zh[DĦ޹3?f[%χL_VSLo.z%#b3k_.~?~C_0c{Uwjo )fI R"<5GNw ~f\  yCeܱLq1Ywq3|MN wsp諝?Ï }0sP}@zAs0'2㩯 &+H(gA2BLAc!U< [. w+IN{^e]Mh2BOW'40ny0TKW2ylAtu|D>X˘JOۼo)[s'}ujS)EJpnmd]u3ϰ>=$LԚވ!z)SkpDnoxYwMVh7P*_Y=>z ĶM)HBG+ WR)+7V̛`~HS$jAn0&WdT3>w!BضJnx.aDp,f;,)Y&c=puLM\ӁtHPC外}cqV`=(6stlTEauNPSNױ=6݁NBx*6:q7!!;KK$́>@ S`9T\CO2=ͤcb^`fbm?_x#E.VG`fTu/|%KF;yPk'Y@fz2*!YuʮiYU27NUFm hX$oh. Y <'M0%.hQ̊%XF:w^lkjGJg0I<9kK?*s %5Ռe̸WψyL;u|䵁t*pw\k.!Sx6DaO SC~aE2Kl|hʼP>9`J&M_taL\ Ǿ$RKQ\\Y°mC'҅_s4"e$zEC6'n.ewnj2txb ?vLܯu؄t̊eT E8 mK "l 2ڜqT1t=:dI/?jGEŝ3vW!Wsq5̖H9~5=Z G=-~lϟV6`5t je 7oQ~cV_sbȔASxt«j[&D>#}&7f>J\g8=u͙0nJOM5D?]D"!,pJ3kz3 7H#94o|J/`-*Yb'(4'߅&EC<[i~8(Ti؍}G`;ډQQKڻMA غ, x B;VY̪خWgh)rz-n8gz굌ҙ=)#,^M6lǔǾb7C ַ'4#VMfμ[WNtDA70xmCbnT6l:E91բ Sf]@:)$f\ |V6%:iǟER!%̉N@c嚨Ͳ +x V.?p?^_՚w} 7>񱌱5a;Zz7#k"7wG^ v 㓹Li`a_nɅâX[k)o0qݏi[˜,Q1+ \*uƧ੢J?W t1?_''sZ^r"g%HIHwGjsRYL1sM.&92tI+#N(EE)cĘRfSnum-&w*#Ya)o'[3idi}c/c:Oh^RV[PO;4a ۘQ8"1^h,nqtG %٫cuq軥LMI3@JAڱvJiIK|/Na8ZXPfMFC#.}xJQTަS TGkxcn_7}G..5(M9~$@6I&y{~u/pK2;9!cl2FR*$uuQx XdXop u"2^y01ԯ;ϗHۡpF̤P^Qg3\8nP']5ZO[MfOاmAQ9. *ź}f= Vٮ@_1o"sb4i;q@S۶0 [ *H1HU&w @zUT&ҋT)R& t)o}y|nݒ5לc9s| ak'wJ h\tnB{s&[I^}:kKr4]6|r/=cUw^IHdbWƏG7ϘhtG*qn#yv\|D墍7<*/A*ߺfR3{Mm[^e^*1GׅGSD7+Ͻݍ@4Al\=_Dyh\eϠcyʣK^0\p"#`WH03ηlM:zcB?>%s*)C#zK#y 쫛"Vv@KǐU܁WW[jDŨN>kهqugsoć#mB%M}c:ùJAם:>23v[*e$>O>Oa ?+ޟ 9o%w<)^_SjFځDn 77OVj5}1|Qѽ/@QUl&SLĢ }'#σn/1\5 锼CXGZDc(|NW4;_K?G,!?B7H2Ovugm't}Rvmo U4d$ۙsDhvKEŏgnպ8wmXKstjGk\ 9ԃ}} ;f}섡w[zz92s=;E,#ZK8/+nO˷^[8rļL؀colc1;G,(C ?tl :~ʋNnTo>D3-{$PE G>)HrL.m{ʝ\巩JN !vX+cnqcDI^?wTc[%#n=o|ZO9к}>5uW^ 7I=Ik|V.&Ze:o8pU^; Ew։?^L>R~)8~׭ʅ৯MYrtEF۩ ІeJø(0l{hc.=i.5 v{<&z}4ToPŗq:o_a8|x=e=ί+z~/޽}v<|ٛZeJI~TYh28a!qKЭ55<. $v2Pj٧*:>m CAšQOD8~yrys[õ?^m@>~>fNxCIOw̿4k^`<6jkYt~ Kfp3G]µq2Xrc)ntX^)>4THގ[zQJMo;1 YV85Qέsa9)8Eצ|%]\GrF@WgIJIsN}O#KHz78~+OB2$V7}|u/~rҜB]EF'9ӂ?ȜԬ2d};Ol}OÁ’[ %K5KWE(V MWb^דd(x])Òfd FO.U4:tr.ȯЙ`orãXG-]d\^l/_G|U$5X#EV 8|BŨ<0ɺ7nqr{ g &ZZTKgc)Ӂ5m֊ZN%.&9x@M[7NG:N*D\tjy+z#50Ϸ1r_uOzK)4݋mOPٯ} *V:Xr!6&/o<ɺt=NGO%b}o_[5gޥ Er&݅TǭKw-O;}p߭n$ksnYe+umJ)~tb$޸Fܼ5E%5ٯ{ފƻ~)KfF{ISKo^0}4WL=cv4;OW7̊桤Lq|Dܭ16Cy03':r>F];:4m3z&CN'Z[ׅ{=E,=[;ti g:yv]A5t$7SMJ< np׶NKxP. W$草 q)Ks|)mR~OfD{NHswU b }pLȲcOshS.Z]^goTg{TwtE 5qmӅ"(2U/<zzaʎ̑Bi^+d*/LZ:"jxn7/^6Fp)$%LzsG?Slw$~<}Mv8Bߍ,޺|O1c{5KRgǢ>*=_W0O5c f'" ͪ}L`EGO>kH=qu26[{wXPL8qxLWs,ygiOD>}?#@}MI5V0kxbLD.4Oͦ?<[IFX yC^|S[MQ}. ܣ՜#R|;tJE8v(r)uq-;R. e1s?ܱ6d"o=F}E!uZ٠"ץ@4wIK[K" vp|"K)Iw|ףf2gR"w1GK{?m~,BSs'difr!VسlcWU-((] ebo~؜RpBT78roGKL4 qJBco?N]!ipi`m¢*D\M^aH=Shg1îbǻÚ]e8N9[G{u>15շH ~gL#w7/=>3K=b<5$'=4~}u]A>x{Ks'K?=zjEqʷdv(rk؟YIOZpFt~4eMu7{\*䋶(,~w'Xaf3Hiɦi΋ \;8].4ΧiE41{U(&َcXlrnʒG4C"Vn%&Χ:ak+ ]4`G_4~|SNR , =]{C`zq 3kGI?0W,B;Q"[;mg}D:.&E}0Aɇqyk Ug Um2ӻ+ O31yrV*c/L݁вkj®QҪ%Ş=d jiw1>XPB?MAS] iƼVjt&\tpuƸnw*ύ54οCGQ CwX?%RȉFgq9ﱪq= jKo`h%f=5jI֯K]]=JlU$xu#ItS"WJOT^{Ur34_5 9SeY~oCL6J oNxz8"M1m^/bD ̶;ԟұim/e(9WkУZYso֍$qsflnٲz >}>Chm5EfVqo>$D}1pC܂jOI>Afvs2@4:p5+-UcKsT3~hu4 ARFĂo׽=uCIT\^ءmʫ}D}UJ&Z|7*/?o,m ;h2]ۂ֌ؚz^ʐ`]kyn9} C\RZ^)PH4}A楊+4Qjί7u#5=IT]dܦ1#iE(Yv7MP];}@gKr#_2pU8q^DtGPSkY.;q8;yZHEU%Ajؑs>nw4}gu0Hδ9ɩY59Ǥd[sa/`E[h[="3$nM5|̖/P¾ܓ*'K+SK8Eoh`ģFHMNZ]{7ZY7Y+n1|,yo< c%mξ쬉N}ՙ< ďeI:\B@o{$,J?KehJqOH]2=DwayHCle=* vdVV xOƄި2{~ynԜ+f?O 7cC2FGco;;h;eWݦ~V)?-<~˗'}?,V^Ԓ%q=:dM?\dl@n,Gs4Vk8.v%KqJ}{{+Ĝ69L uY;\WfYwV_鮙x&QN8-ӣ DVCvxq2՗M)h}2HwJ՗q!r2oꙥz.Z3&;1ہ0~8V7ZྣY5aoMuTb`KQR :OoE+볏%A̤pOfUpQƧUY`))hGv3vt=eLNlׯF" =2d;26sf~ih&I:wx]j6cWOwîRKuKQ> IB:0Ͻʉ)A.^:״(0a7:&NG?^GpTF|9P]ĦzDS!3\`+4@gyL,Gcj燏bSךDMZG_#wͤu_%b\bT܋G4{{ѳ &EJt9qfԧra:4֯}3t Uҙٵkr]b}rzҁ ]1~g,WO=RdI }D!e&uYa(] h#f޶Ewo;15,;Ffmg SNyLģWRG3u' V8#iNrr4>rewՀd(ю;3:'Uހ讹/dFp,gN3Sj>CYDx|u|9ʜ}ɝMe9o}W61[ :3Fͼl|<'Q|O5dsF,<3{5\Dɬ0|\R0eFp>a|оd4f='u DZi ٞr[f;R8^VR8k:T0(*Zw;#:i~-Έ@]<>&yhIQA!#3 s/ 2|>fk.{2+g.ϒ ط–uHϝx_i;˺RH*PV!^(∓$tnr]I8x{궍3S1U}ʶŵ=J^ګѮAL*w0ƨBk؅u#\+:?ck+vE*: 8YP@d2,If>kDMs~,6V/MO7"~0g 2Zl4LȊ'cF!۝uҒ-[Z5 ]w/Xߤיe)8=puH,=U :_O{Iߗr4.:#\ W$`/ ="+ۀ^~4|SGZb߱ČN$-*tI'nj$&ϴ|I"QSay:9}6o-Mv_XܹBM2~ODx{ZW(> Xr)$3*x瀉ڢٛI4h2 N!njL#JeQ\ܭ2v;(XEvl5e/4s3%\x+gMhÍ^7<(;E +~i\z>uzr13sDGI”cm,7[߾`0s8I%M.|*vK;<)ϗ/޺qhj̽ ]6B_YR#}G]'/YP<,}6SEз'xf{zL]O$xk{%MK,SWŗ.˛s ՑN.߯= f i;~?W$Zs+c醙{\O1VZ:s*Wb1O{1YnWj>Z#fX(&2U94FdK9ggEDmVEW6,#2?"ʕc3L" y}֞t͂ecz4H{nX̏ b:LwdI0Fw"nǻ/^ߩPOˮ_r$,f&NaW.|*&W{ú)kXdEFEɛE"Fþ?t|oy̐Je4ro͆j޶ #X}#zU6贮/{3{$BcD/ ?>F?sא8UWkm.MDr[xLW!+QW ޯ'v|$8.G Q9 F쨩|OJƃKmRK&]aGېGgy2lSȌ-m2B[Uaٜ#Ov`?"XlDwO/ƮD[,^S)MdӫZ}7?Epv%q_ŒOG,IԿDf(zPxÞ`c:'OG%K<RqPSoҺ/!f,w|o)y3efi7'?w9'dS1'/-[fBYyG]52\~-,us"Gass/{KF(˘D^vfreNwvGqo/% Av-[G./]Dj]r~tw_|.IBV#Gԡ2|R3սCjk*{g7hrܴﰣi,͍gV};_C=${\ƹFAzJXtfvh?qn/+'WOՍejC,~3 +bYL0qE7;A."+t{_k-R5cA\`vWfcǸRYͣG#k;m}Z`0y^#-Oa5uiDtS}x)b_U*;Q[ut۱04Ky)&%!PB6~DgՊ L91wȰcWdoz٠&"|EA #E?qTvrFE#?A>yy@l̹ *=>~pH;Cgc:ֆS ov^Jq({"lZ9y*4s߿A{ށhf^[]DlUYnWI%f—kVjgiJnՙYm}a'_ {LT=cM]SnB$~{OgC]E:k1t෺:H9v}U0U|%ؔ,ନ?iUj\J=F^TxܲbHheF>jo&N_u>\r_`pUnYSREWKZblԂ^Ǻ$W\ѿ~;ѷŠWS|e߯.~v|{qxiNy-qhʎ%aO Ǔ6-Fռ>8GゟvK- ?n,N垥/$.3`HkPx'ou}3e>7(Ƞ}YoCyARQ BsR*7)qd-T,O06et97MjcOd)o̽}1g4-tkb+kcr%##bEny yj4|4 t X\//x}Zni;{EwhE&~~n{/_&La8EPtzB%˺z¢_ʫCP[O4|p}(];xvG6 OgfBG`m۱aА9sv,6(yϬUJiIQ$9vktJ$F[{N^:*eKթܡ4@;RHrj{B d$Js(7"*rU[_y*<ǘSK6Tɲ:flÐ^MpS}P礸WS\p( ^%bh r0K{o(e_Dy wg!JTarQ*2s/0L+}㏪|AV+>JKkaJ9;V{e+(ĺuJdvP_ t&•e;|8f1w)lu%v6!t:NݭAN=5M%qrJhUuR :^CGiQ%MyLE̡wԧ:3J2lO睉TEUܳ0QPna&𭜼;DOp츺+pN)r$f"E&f\iԣO+u?5"|ؼ@{wm)Tn }^\hW f{\/y{St9y~wGzu)dpi-2ѵZv$ U}nl&%׼*UjMxh,)鋰>+l{Ǻ^jo*)}6+\׵xbNzjVdAo;Q) ^xPN5qYjS|#Ք|XixXKz5v3R920{n dI+ybrwi@!9+|`?yU9(%ʇbtgxoqzڮW2 VoءiŸ}H֮6,;_qTt/AnFc$\fL on)'xΰ*^+ʜx%z.Q!(Y^Ҁ#&ͱ#'aMEb"pnԠje| {Fb*-xި'N:v!,R晛)R&MsfYj5:SsTe&&ٻc'34S  z 6GUiϞ\+՜zƴ֍T_?[9'WϢwϰ|(g [ !.YY'@cvH0BKY-gT]SDd~t9QCU]&W5Gns^hTڍIP{4֯GobJT|e}jf[Z;~H-0{">AmGKO)ռ/(ݵ[S˸^!ל nxj ;[|"0X)=NOo0/?Wpv^W]K5LWi8wdPkvjv^x,֫of7TAߡ+7$hu𕖨H|9gxH H^dB"ȏ*IsXO< 4W!m`1;@:^=yniK+Cͺgz<2LZ+cf'O~fL[GrjtSL~|b״`롎 ;[>}s/t88?P^n^Y¼dQg{fwI xh}RF{4iߎaZ.2P^SL|FsڈoA=80ٷDuqA |VG[ph*ʸRnq\ʼnœ9_3إ[26կ :|TRAg9ARNw_$F95svcH?Z Nk"e  wbE䴼\Ϸղ-}qÐBXgIǸd'v+(1n|JmB#\M m@qdHuzÝ_J sQAZ/2f2AAL柯PQ=cY@2i#i%ڕo:ʸ=R)p$'at'2QD? ,Y$8Q9޾oq0Cd }k~V"冷'yوzcrG.b˒,҉tzݎg.kMRZ t d/2~48oE{9JC9 ů; %d_4Rk -W;r(9Ȅz$oMrX?OiqnS4%4⊹r{߳bsuTk*Gм},zp05㊛Gg~hS/N0Q9D[M~Kqfm v#Fvy9?6ߧ3*pf  [? [ zi@ #uMrM9e/`4"gfB**k{@d_e 2P23EG nĭGEĕg{z&=Ǚ1۽w QT_:+Pd#C/>^!&񉠻ί4\h(Lg=׫A進 ݩE0^E+n;N|Q ;']j: Hvm/`1U-}Fc8U4ALyˀ`" dw;ZC 8)=_]@7W\3w^v>ui<>Ҵ99%^VPMNiOwޤp-;Ds{GV*+NU>?ibW;SX_^4;*o̝˰$d"hⓋ=Y\5^i ^0PX("M}M+xޔ3rcg 0wß>XzrHG:Hy_jسimͪ.V7SISLPIkVY,S>KQXtI#!ks%asD>(t;M,ö|Z,oƟKvېǵ~Ċr>EX(./@ rl$B},Ct2ͭOI|:"u#$7A շ. $ t('O5١VdCy%rIFW2ʃUi6۱wUoZs6Ym oD7MQN[$e'PԄ?u6lWE ծz5 (McxGjwSOg#%'+F+f^nGvpB`୶(zv[^_9Bq=T)Lݏ'۱͈s?jM.DF wU~%k^.yN-%Ed>Ekڀqm `Y3w]%ȮE\x"~p]/}㬤'bzt=ei /9]6bI[.#9C:jf 3,1>P%O='+/ΝtψOQπV͜}38wɸTF[ic^9feEg 47WHrod`!аY4ʊ&T/H /x FE ;9֤5/#g.,}~ܚ ~T[3Zs5lrvg {|ҹ{WلkDl+և񧞋+K?"):.<#4 =`Ө&qE_.ׯˊ,_0MO;Ey_j} n:ldteUQJ>MфRYӎ0 dXcYd~&$fY1ըd[}n 3Mߏsz¤9Ҕ!z%.f{xK3R4g=]#Saq1/1]i9ԪvD8Gkjt3%V!Xv++:*PĈ҂ tww \cѶRԩ(M08Е^/ʱJ]>3ihe˃张WʱGF7 ?ߕO?F)0*8a#2˚q(Yg{aEլ{Xh1 pFY=zJfU֝OsTX&]e*L5*8~ w )HU 7|\sftip*'Z0 >9ǥ W c_&>"OɛeVj&ຉ}L 9+mrt)Vry^99Cj RzbI=.[c;4r-,<'~7 JW3fM0d2Q ӳܪTtfҥAWw(OmW}d j3ٖEQ!Wd{ۨ&D^-yeGnFѷ1^S9f+MJI 84gϽʐ?2ɕu*ŷ{ UݽkU;5﯎4{d_ ?PeNRc!9-њN]Ogt'0UyTnd1e49[s]I;e7E ŵ zJY EsD: DXE=ɎLۗKw%~pFKsYgLkߍ0w !{KEWi C^4%ƇZ՝d})K32O SMn=G FyDLn|(ҞAƞ,֖cihSeJb|չY3}> bޏ5c g\^;{/~S;})>=U7:Ƒh%*(qU?QS_-xV>#dtMCG`wluӯ,U/1j*$޸U'&c'!/x#]@7N)? & s\ =hCP, sgm$|jAR=-xwgNO_K?v\vRWC:`u}9%f%WRR)Ζκ`N!lmp'6W Փ{ ]Ǭ&WmMEgB/ȓx<%gQx΋V‰RǸP+^$\"')#\r&.4yu, ԥ, %v*k;C*yIzQD\{j";|뎰 } 7DV%=`֘rr*[hp<܁UCy?R'GQwRX|bwr 9vlxScvꥧҵcCK } mD|32)O(x : ڧRFlԩ_圲6~6Xig"JXEu6QS_&P=" bΏо°Mqi`r ghm)Ͻh*yMl*9G`(}JUIyS)18M-պ{0f{Zts 2?응.[GQRϒK*rtϝA$J[|B޷IZr@V@/*]2BI(1^e'PϫC`GNIg{N~@hܱ/L(t2IEKi{K񓻍Gʖ[EC1$rݡ<Izn8{FnD45#/S0HzeĒ\N~ŷ$?lsIyU)m6p@Mec./iwU!9(y!l?[;GU].↑I>CbdrڬN "+^8${uƛqZ)8;'=ӜB`'^ 'gtjXGbY w*křU6զ3 秾AV,BѰ5LjVڂ"dRN:ԷFfc}#>>`+y[o~v<"Pf&9~һ:H^F ]YX:;~GMRܐp{Œ2RldTI팕`ۗz&r;]{y]2a:K%4=+2Ӵa {Cv3Cߕ8 Դޗu_1>qC(& O1bъ7m.얞Cy?#rwB-V5 yG2D՘#:\@u|X"F1_:|̬2tJ5:tKWȂ4vKj ;)ϤHz=@٦[vو%|2u]{wc§W\Kl!Ry˼\p@`{=T Cآs~ r567S_W[bӹxd/5 0ʢc(QiZe4"TcJ}o9SmĔKx*aOϢTP*,j/ŚoרU9ϛ;ž侜4r҇H4gծVQiĶҋO$w_JREN=0xQ51qݴwI؅4i*bBy8wZhOࡏO_7iʕzsuⲆ}9ۦ_ 2xӏ"ȅ9&Qg$Y]4F/~ },CX<J Wk>)ѩì熬iV4E\,MdI:=NޔmU$#?QP}wOsCTI9,Y{9"'X?1< ։hԙ̝mt+'J<_~B7Y&{V,`وcN"|0 CƷהDե;c Kg~CX-.s?ثVugXTSdٖ'+ק _/XwW-,*[vsQW /VQ15_N}1:d+:I[)՚qy5_G9:?!:rի"57bx/2rL@Oˋni̴?K~j $5x6Tźm>ڰsaq ĩ~Kԏ=Y /YhkqYt'ez8de#ꤿZ߃שE5# ɳ E Kӳ;Җ~ .$O}\^N4r__n)\x9m>\v@%ճ=r 6}m*k]Z}DkV.Ne7s}h5'AŢ|}nN2>I 1(vrmgPZ5-IgV=D$50}dݬ/͓(YNJH@҇Y"uxΘ;;|n{/\JZҦ8:lFt+O>G+k-jI,sQ)cnΟg1趎^w~B/釯~u 7 NQbSOSۼ}brݹDڏ3|:;|׏ fI3n\XX0 YuY2ulncZiM:d:Tkߍa;_'0Zf yQ,U糸_5.MǼ^ n#kbߟ_tZ7SM>i4!/jRf/e}hQHE]QxBc[⭯f_w4~*I'mmaϫQ)gťB }HVf]cJYR)a>P="`_0\5.#R).+hV6oYgq1ZHS]OBzd%+$I3al)Sւ׉_?ͽQ@Pa7Qo=lv[3=B&hx}bm{c^_=,joצL4G? h0IϱiG}0?BJ5UN~H:2_d9ͽ]:<;ӧ39GPV<=y[cWL^R~z:pKdJ7[H-۰qLn}^y!p2|euWچX_>/B#U%}L֭@}3zHRsM)kx FWC#hNx!Kͫy+=CVޮJ~O -;:P(06 {G`_Ic-3^, ,@͸uW/$q"ȇ{ Ϡzjߐ}f~0GOnjzq`V.*SWSkUU{f"(yڅF^}|oJ2QՊO9r,0kѽ46#93O 0~wC&נJ|bF'{&q#!߮{|DZ-wK񍤞\vaPS{]!;:-O_c)SˁebAq!Z+Z+NʥK5$H_M%XҴŦ(% I߯f}JEpԓ~. ۲#̽g99鈅HPtO3'GoxRf3Ey֬fp•ὃCR.t\RDfHѬ؅٢‘[nFv1?Fq- GϼpcrxaGΓ|VQ&U9_X2~(WQVW^pnrrD[Ӽᰭjs.37zӐ!s/z')k>LZK\+#D/q?*WoY)3zNm›rE']-M j>W6 CImWr5K)mdSyDZg~W8+ٶL}RȄrbFey|Oz4ch~%n̺$qǘO RDpKy zbB}gZUˌw.'VtbZF  lX?$&&+*_$ "&*(&,(&B;`"10gWߎW/xѶ5 }iEEaaNFxz!#nY`v(78BÀރ10%0(i]HWd%? Ǹ$p/W,LZf.s;",q7a(r "ؙ(CsE%ah7&u9 xü<~pz!]! x !wͥl]'Үp,b`,Hw@ajJz,O;br=Kps*:Jz,p Rgr .; ! \Cca^vTnp5ƍ wBpCcq߭]?bI Ir@ D;Z~ZP.^pü1HGw=45"0% 3pC#5V8!\];j.'Wu/|~8iD~Ç =6[O榞7SRQU5lN9~V-nJ C!ܱMr9>X'80@a>Zv:|P^h-f]]Qv0PVnt0KWe7~yTt۟B8;r6/LEzR tu0HQvh.Bsgt \xBR LdBYh,_ MW0/ 0`Ђ;‘Ig4@<[@`‚ p( HnzaH&`@~fmhnm7 i#kv1o @;]C8lpzk%}9%k 3J 0~_wULpwh9y G rg`p¾逴<@&Y ͱ8iV\M#٩4nM v8-Hnr P^؟eo@Q:Rt'5㟦| .tEQ;@,#ސ{bPa00(]BP>fmuA!('5'(D/։=VB8aD0h> ^nnpLЁ>+t; A]˱AvЙh"|Zp7#7BPGpE1r4CYFt\ip+n9a||,e*B9"f>03&^GrC=y|||x a@D#3z(V`u(x M삑u@j%;4&# vr;[`]^aSu sy}%'XcFB0Y;wA$C W<p` 7 3Tq`=/3@Pn 9+yyx< P4q,29h @@hsA 7@R=~H 11|ۿG >faxpoo>`&g FnwwX~ 姵=p bGACy#6ⅎI*!l_Ny{;Pyo%\< -M<A"WvoȌ/p> %q$`/L0P)Qh{ Gbp&A_5 A hBm f?”H`܀٤<Eb1Z& Pa@"?V> V ߀9 >/ᬬ-Q d0e-{h_A9 L܎@TP(#d0E3?0r'; y3$`{  Q]z8;`&% L#`B//%0@ ,10$6Izq|F/dX8`0*aK(S~ yz}vf3<̀k eq -|?(pGBEP t!B0ہgAင " m1eX@Gㄴs2J\ " +'CҨv\N \ VGmbdcNiIҠ``%mH$t>32EP^ SRnyKw, Ӣ[i\+dJzl `s)0P4 zu0w/7[#AZn@M'@CBmtaPner%= H'mCCkE5=`)pҀ#;$Hor"8@Z5B xx6+ * B P֜ |1*A ~U[,1@p~W @pw l d "rD zJrJP}YwS%}n\6~,p h!JL;Lxw`[qR18?p7&d0^_7qQxضmuű Nnr0҆,HY +<*0JpV- I1p7 C `M H7@pAH e[K1АR1SQ;) 8NO[@$`F nŦ D$8('V&̃3;`,O1}q"؜-1:-j8r eskqs@#]5ɡǎ&#]pwn B_m~1@ܕFpF#쀅^X@Z`Q0e0KAF( L@pThhR5 :?{`&7b ;Vp_Ơ /k>G&pu@ŋJ#@I/G/=y=/ 4h_x5껢.T7`ÁKx2r~1tA4(FHLa[k{7ҒSSRTz ƎO\s-1:F -{x+=z  / :vp b ݐp+8@A =<%QAOIP 006`a{v3N(WPyC8i _&p |S\=|̐E&0~DJ=N B)St~0fj@y# ̶"9 cFCx5u3CJ $@Ou;p?wfrr9yy=%#5RoAmb+a,gF(Z+)@861ry˼n%Y4oAC s.m@MKCMKZMKUIOJ\ǟF v{Hw$U i 0' nC B 7z`* X~@"B褁E<02C5 QgJ6eC k9U(@sqb /sB\'d x@pqA!J֔^H \5_u>8X+ikBC#R?T"٦qH3BMmr2!4*ᥝǁ}q*oJGC STm~Ӑ8  usзho-q[ -נy}5-MB;dF(<"R΍4 hnlVn 0O;->l RrVlx~Hm/(9Lv rw0xRRln h\rģsp;e[W3+ En7/dt^؁ <9ËO.^m1)D2|#>Cq L[ :AORA@t?i?iLu9#9w34+7w( P:r`;#]]G1ěxo̟=zzaz 8\@~w],na@dq`Ae9R5݊}Im7+5AFOLϟ; UP@ rttEfxaNYAns`V OQT l஛tuEٹؑ^V@c>㠀m>B'oKp@&`6mP֟a&8iXd+-B.z  o~*Yr'wbu`( o Q0cA&z.JB V y@CJJ:rz`0uTO(qph=ԃ ơ8$k0xlyYEL(Ou8j?[뫙) \j"Ǖ` Au#pmH +4؟l"ܑ7`A@S"ʒp;H1uP&{e43/LCf^pp|Gi ``ot#aDg>aQTؚ*Rn#xh_~uh.w8 $/;&pI>8NTF(Uٻ̤c 5>gFBo 8XWج_Dnz`\7!mň"t)jr^p>f b:Bfhk૗`e7c`!v`CE)н$)y!צBEINH @pxLuE"-@iS 50nGa;lS#UE8v _'!X@&LAj1[=8 <X;f1'|{ $qEë!\v ctDY"'* ^( C0`! *AHcOk 8RP"T&3 ml/2;f[!m'SS/·)qn7L~mA:??La ;P?6X&x%%]zsJi^zav@|r"#z][n JzZJ[<`p{m6W21PWֲ֔Mb'sV hl&"q!k/!KYq~xC#eI v8sojLŠw0A0p9PoѸ" 6H`, J}% 0vqG:BSo$̛8R8o!TCmQhBc=t[ry+ K(I`gjhYXTaw5vhؖx<)h$|[Ƿ6lƔ|wH8-iWu?@)pv7\ˍA!#ȟ8v!'+!J;@ԗFzdA +`xGTNC 4lVpD` g1<@{6C*x ubS(F{VGAA1׶?Wg-ȁe%7׳۶ީ/"P& @8a"t o|*E&X?/.&TDPkρCsL+ki1鶭S#YG $s&O!iA;GIFx-Y<,n@8~[mnmͱ0y?sx܄n`=OAPf^r<.)E`۝ĠCe:8 +Hvs8q3BaL7 WH9p($>q 㧆:ICW?n PA l_¡ nx-Qf!D٠F?Af20QRTR)S BPa|]Ӹ&f탎{mH} 4u@ĿW)ᆣB0B XZ z7#~? MBhQq{cB8JD09(A&ćX{۪rM[(H%/vgW@;&:vwiSxߊ@(Z|(vdT;~ΩjkkX+)*Zv$8_[  9!p }(7?0~n(Wι  AP&9o~7XܸZ09  o}*>c9 с?$ c8?47.K`(J .>TGzkR@P(8$EA::Yct[/ 7c#lfTH7PE-utߠZɟ:F-n%`ԉCٙC!G - >@.}9m%@+ lw:J 0-@m3 P o[qm. !6 Z r&I04x.O^䆊+h@ NnCA+Q@EEDD oW''xY=9k9 ?T\~r9PJBrrqo64/=I#]A>L %HrކS33P \73PSjB7U_gnp(!C˻ah ?Ohh+!nAC $pdA`7ShY~5aI[anm/ͩ`+f6c[f B6@nN>H<?;X6;!(cs<aCPq褩d _l/O,rsp_,tKu rT>`\znAl,e "gu>TB/_G@mֲבS*dHq׸{*^n y۶_0:5)`npsximM%\M=V0F6/?/AmV7{D8 A'$!Q?hH)78#u( ^w f~]O̓Fr&;f&f п-6/mۉ;~3{#X%j[Hlp~'/AW@恊x0[oAS #P@)m`0.ZH{/8 .8VW㹟@,@H]ے?h#m/S|kxȢO}:`XdV7l mfAA'`,|TwC Leh _DD݋PMdRWIAmo±fc&a /Rۢ,V@Ay{W#gS??q~+]b{ c]K?4 H8^Bڹ[M VF/4anߐm1@ MW-93U[kI[' a"gʠug Q(NWƷyVovEAhZNMEyAB!\ĩG)B#CmEb% }>!yB VC|/O0cmY^%\ 0ha _T7-r:fv@CT< {qJBR`6Om{8]QpWBoZح^ > "(;{>p?|KӶ!+-@Z$_c+hYy\QBo7=5%`(NX\ `Ovoc f>pmG}Z?Z@)14ѝ@h9A(lGZU V/o  Fqii1f9OT7a3W跜!p2j.Q&XRk5DI0̒ltCb4*4l]AAh־k_^۫ԶEj볭VFҪHmC%ⳬi%Xegp6p(u0Ƞ: ,J%RK*^b[~D>~?)%dxǘ1JdTr$٤]JW~aUhJ 7O5 fE4-cI_< uf!4P4ZG5 /rPͥ^p1N^eN{6ԹE_b6:VjnK"NFg9^O3oU9oe՘rΣ>_F*fC{T, bL +xHGIJT4@sD*CfJ_մ*)}Pf8ʴݘ-*vW:OEQͧVf`O:,C-H~lF7Qp{"yQCUv"ԹYѺQ-1se<<=-}İ@Rt.\!tbY?]PݓLiY'R=3*Bj(2䯵nuE{Bc,FhCa(2Zܨe7YEN:*#?m,`ƊBO~Vs~5|?-v_ Kcʖ#Stkq_CSP2U讣)6< *QUA6 Oi}tM]0閸26(9 qc^in) (?=d|E=(=cXW?_%$aL{O/΢ ~?ɵO5ZS׶O6Rqw.Xqt:NMٝNm H,_mPhQ*]z;ɷe4a0H4k5tŜmlK[ʐ0wf]x'FMcIn*Lf 08-Uc|g\F]5ULH!~R& mD¶*<[]kjHM\/κeL Z;]IMI.[Y nV I7ǚ3& k,6$Œif[DF,j :Zuȩ6>zͤCpț[4tcƎ^ŸjCѫӴtƵ^2* cw@Y!5{i7aa[Yj;ǕuhF^ηmV#,ηj ]IQϦz9Bz<$/)8Rշatt`Nҥؤ193 p'5@ۉ!mt s?K]x7_0g75xcB^wD zQCM=iɲ04sI1dz"*}"FbM#7d'YD!dB摶X2ԬTL bGFccٻܞ&Y-'^Ф,-vP\{՝ 0̉#Sت2H+FT4Ur:'RPqgN ffPcM2RѰ$ Py8"U:k :߶߉ @؟P{oZٲzp,T|K4ƼS~+er`,v\ tz!B̫AѸv: {j5iUX"&xr"}rڈfxҩiãFOt%"c}UݗUv&ꭶsOG_te0Z@*O7tv?tDrӅ-lW-pd:,5=Xix +cv/-w4a%N'AAETF㚙*DquHqvq2‰J{tiWB8{AX"ŒQՒ%؎g)hQvL7D,Wozk=j?j[a<EzfJ۩>D"[S E{<]J*A"NmDTl{QIU6˱KZ] Fm5iژTŃ޽Jl*@1kA,du$ /B5<Ch1d|iؼHlqJkȡ%mGl8Nutt-́x^GׂBϓjAD7T^ɫp:NVqQVx:"4-i2Pۉ\,c AALG%Ց"ΣqU;'ҲSDW{]ڷw>& W`F;V\+7/5 &) N<2=+l)C)jRr"V4%zQOTӴKfjeK#X&up.jvs@9-R'`$ SEYiȰYbfxb0W~_!Ag D1oJC-%9" 0r);1v胓jYRgfxOV^u*Qd3ȧ(J= dk1-"ɸNv>27RFq5ZbT7'.5'}$P7^KFd(6h1)Ÿ_ȵ=JE+u4]5O4bBTѝP읩T$ V[WO u%a i'Yfj8:K$POwD:*3cK{z"I7Lw$Ib!oshUDGk-g[4KkѴ!<8 ^.c2ӆ3hw*Z;[&+FIBB5mpR ji `=R?3 H5(3РA J!{k? e[S10ds QEph.hoM|ݠU/!ɁjG$z,==Zt (H۸``dBX *eZ66xj+q kZ>Y@>x8Q[ gwphNNuw ˇ֩_ڨy-siv1߼ՊՔF[tI#hMF%R+5/*S@eLl 5,+QtPe`H?_x.18FNrYIV~1,^aVǩ8; ww><6O14u,b=H*;ʝ:/AgmS!sv܂MTQ}QO_eģS6C:;*FF!p&Tm>&kGӦauKANj^ZQkĵlEVa8AI)XR=.&# /O1*4YL-/L6]flgF'bE񰭢Tu5_ިHcE\t_._GXlZ9qld-yR޺O_B;6pm fV6jm4nX!h956<u0w>x@LjnYLg$8NCUwlJ,4 vZ'& T_ԗjҩ#=N0jxZG⦫Vco8 1jn'm4A)r^zFMWvqm1ٮwi3ex9N%KۻZU0Xm~9MsG٧S%TiY.J/HBf+,KS䶀v˺RTd(L߇ebŅY ۨ$1Ԧ8+ߧMUކvJ1*Jl"=d|O(q;073KLI]f=ʯA.j 7 o=2C%~Q!Xrd?#Yg3lT-=`ꘇka1+`%XНW96p:QΜC!#f]p}SX{@_Qf^H-Y`*V[#AJ]X!違Fb@T*Rr4VkZu=4ƑGGk<oO*"]qc܆A(K:KҠekk *5KSRM,iG`}7`4l]bk9<8y$E2eи\#R[Q(Ix">>cJ@w;lAgPQ^+֤>(_*hR۱>4`#A91z@.t\m1p[|47c򠱐&Y6@Cs|n}y$?YTXgTܨR7oU[rH' GJH{J1R*ɤ eZ[µ"%n?Yu e b@/N5oSb"p.i&hُ֥ RMGdUaw4e=3ktMqO.:v u6*u~ꈽ7%tm.h|yE*:;ѳ GWB/4,`ǣ=yq 0늇PoۂbZ`23јʊ.@'Q7.f8wG{vn8ZOq""' t)ixFW͌\`6*Gd ˨2H{m$3Rhoب%ta]I MRpc e2,i{줝UtxO\[̡$-"0O%4)a#)U[֛.Cc!`nnbYh44:ޖaK7SehW'm**%Ky2M_]HLdSUU^z^⊖z6ERY ujk!9cR6ۢp_&`L'8 'b%0ҦUB){ކtcQ-ԌNܲ[UpvЕYTz̠WR#=mg|P ,d[d8^ks&`w$GE2 3qB *p/[L81/F0u)i!"jV;zWU~Us|  ΍vE 2q4fH,6@ pnK[#: H#EnJQg1xRTAa7σ2JCp>ѧQ)n&BaJNQPdSKlm nc2"6]W܆,I+8#NaVyij1Y'q_}F_E㇣27^e)J ڗU;S`4 oT+wKFGʭ t2 󢚛)fo!xg2ݝVVTXVq 5Tjb5lҺIZZ?t ǵpߚ&;,վ5/ ‘oݷ5v3ahoZ)QN%r䦱,m}V_6X!@<Ҏ[dS,#,x.>," xxY {zP3 XE酘6q*؟` l J>0Wk--<wSF_ޅ WhPgQMze ZF EV[t {}M6qQi2H!o6 :Uk<>v,9]=q5F_є >lfԖК"Q "$rkQcA*>PEa%c$~qh%YF|J` $L6+Zlo`l,r*"('JZ̀/"Я:J s|m*Kah/MRM*˛ x(xC 5DH:, cJ0ōYsH( vg5jTsDun e(4dkq= *kU } m-|81U1\&;e8hWJz/4PDR(t₮p}CaTCtC?u, BJmog!6CNJQd`B_G-3Tnl%FKc PPaرi ūS:jiyq%U&7H,ƌ\3+$^-1x=bZ{м-Ct Q#3 *ji[yg oP/qF>?t .@)y _qjǢΟwHN9S؁bot4 |)J ˧B):CXn#R o;$ !h#ÁHSHM`ZKVWc}a0W穂h]Dz7K(*K!Je1)mEvG30c? '2JMiAjV՛Vi~0 Tr", ˷:1k,P-Y5Zt#`Q.z;U[/ ´|`VՆX={atzVQQ:@˷VomRLy!Zr9׋5>L/zʫ }}3tX^FNƵeut M^8=|G"Q{H|ī#U38Je/z)(:`,x 67aVZ@9tPYi\KsXb!uZҩi[.=%e/>:K{@ۮ脺jssGl]$gĩ4i9nt<Dž^K447aH -#B)p涳H'/߽:k{&v*>N lы=5^.֊,*6a|'u gQ$Gu'oQh!Uǭr0*XqX43!僳P7}v0Nk~[C|a񞑊DCtu&ӫrmW(j~]FvW*nhX ePWM6ÌKxgW8l}̚\lړXaDo>$yB4iR-%hU:L'[`)Ta͚QW88eRH̓Ua.[,4 ,V Ć0&b)Q ([FCIYqkڋqx&xRY\Ln-'\ZBvA@u,E [Lq9zlGJ[hheTU&#+AuU/!1[K(wkQtWxFs7: gPN"!(3q7@M*aF]&pXCK0[FAO3V%ByN W-\qCjD$ld#m :C[b8ZfF_ ~p>jSvHPJP`֭Ű\g3B3Lf16CYuz9چMFuG2k"#f5#t[tIe괇\e42,~2؇.2֤b2dT^0y;T[ЅpfA6cSi"\^fi)Jӷ==q6EI%E/tZ=v)Fk鞺+J鴟No+Ra$ӗK2RGq#UsR&C'*3\vâOчlv, OK1AGFAuxX-KL^164эo{/~ۭO>^Jvzhۢ=@@ ys )d\RL_/gcf1?!DqcpsM큖s &ba"==YpHxqZ 8$_Z|hy"ֵ)GgYLQ&)zecX.C:]0onzaRaMWśk.LQVF{i 5fRPEMd`10F#-ËLx#WİvivW.B6I=9@?zlvP05697 ^V JY=3cu5:hǫ"g(n Z5(Jv1űcx7=sx T14QLGe"me@@C2~G[И39 9ĀMVQ}YgEcaX1mquֈD7AU ܸwձ/DfŪ>܉'QiEk~ΦHTGk,ԬB#^))҅/W@P2P7 EO4N|͂Y;oIY&zY7k&S}}gy#ay DBׇIQA"U75xBĄRnQo²~GL #wo)>=Ofh&m~]CiڻT1F5Mۄ<1: kV֠@uC8լ`4cBqn0bjr#DZ"Fc3 C #h~FLc^"$!-Ytƨ(=b G<EEOI8Ҳ64?:VϬ9eVMu !_;0e)̦Sm%jkzSg<_C;ҩx -ԫ v.􏬠G4@$z2Unሌ)4P?tG$:bxiN僆LqRS[PP>z@ףε2vׇ{<{x@lښoƴi(ɦbz嬮Ʀsm91KƘi){ ;D3k0iH 8\v!l|9ҩ'LwX 5oaMR<Ht_ ^AB=Cb\RB<l(ⱐLJWV,te2zWʒP b^ u]©pUQ| _eVqblmTSi.W:;;[+@Mݣ!ɧi*+G(j V$vW"Zc 6&KJaMP %vT@iL+ u-iikҹ%K*-gY^"=#B m~%EÌIrb[wwƉ޺ bBN}nw-oJRɑ2 :;K؁ dֱuj*ڢ+Cמ8a*Ĝ y ,SV0,:T1R)Y| NE3P3o&o: kwih.刘ga2φN5QET( >j&Ip1v{Q0b> Ή'p^>@Q7L?.s+Ěh"%DAҍ|,֦)g++h1ٲ*7/<[K*qi~_1)FYUr6ʍ)Fr5QgAC>hd?Y(-\dYW S~FP:m އ@񱵖v~ctmц\'icmnMg=Th;A'5mUW`ּ6]ZhQZb`0Xr[nC' Z tXjA5 [~ [\ {϶vNt>t/F %4LXxR{Ò˝xLh7"ӉU:w欙sSjש֢@.(-)1q.vW+6ߩwu~u0J~\^;>yZaC cHgۿ]L,ߖZ{g{'y Zdkqڱ~Iyvͫ.tϟu9O.oɸ-VO}iɤdDW7: so9aѸ M,q볮@sli˿ubnW{oMoIJ+_zW·; d1%@>Pж >1 \\FATSg5|b\uT6>,|O>Wg>g3|SoM| >_Si\_7- o&~>߃]ֿ;s| >[sx> >s?|vA<o9v/<^~g^O~뿘 -_ќ(]qw}#ߚ|^xm|q~uo|5/b#? Wkם's;sm6=Xwo<> ޽MM|_jqWn87|iYO\qo~칋=??+w'~kOgWWx~Iͧ{{G;9#ݿ{?.4O\rբ/<+Oyk_nk3J/^uVଟuU]>=+>ڑ{}G}nAGm?s?8WosV4,/oy֙g-;油 v4Ʃx#%7y'޺eٵV|uYo(uY睰=H{TE!^*R.''"H=/iE__$""[="-)sе+H}~X$'CYEEH>[_/BקgMz.gHE7^EyH^^/ϗ.g|uo)"]E,o(,"o7i다Hi"+oW˥E꿵HEe۹+R+O(2P׊O3|V/f|_@05`>rsGnbGjxoçWTr"9_Ur7ʝ)PUwޠEWVW.-ZUj>u0n`X-W]{u;"Uzw_B3%3 n[cQsJzW3U0:To_I ӫߝʍ01n' 1[Tܤ]jUT]U7|*} =^52͊-/+b US/Vo2:M V7vTyC\|R~QuWuj\572ױݼZNW  +r?IoO?bXː7*DPTUwT}#?OWnkU ?9Ux5v~u*>IVUG60߉ ׏Q'amؠ֞Zڙ 2.I߃Qߥmgjωc#nR_~#G+zv')2$}G?Xo^pHI \[nϽ*NhZ.)z[*>?a&-?ðjׯt}V2[U?n**{+?jݩ伶(6vئuvYɫrPty/֧CN5qz?OSvPrIMî;T;E*EZ.}>ݭUd*T(à6nY5ߪ*|loFσ/Bɖ_M7ǨO.Y J,QxWWD㻺\]x7 {BV\Y8+ǪӉ P>}fu b &X6#DsY?VF2]k }]X"WzmK;%~LGָVrZq5ʱ]p $SRuEBo6{ a]ك]Us%&'WS夠t[> 6>w*d[;E.Y?!VHױeFSOf&L ~- cNY MM6(CU~oq_A$&WMjZiISvLe*f`?UTrn Z~b(\^$4|x=nRoHtl𸪒A{~,bzfeLWlX4TT |d6"N%!7:8y{R B8+BhYcNJ5N 5PKF󮙿A|`p~5֛!k3B\vy횞czO,۫3Nqۣ,DBfIZ{L׺ XlP6GVxc06( seq/|Mmy!Po* Cwj  堀p@ _Q+zpA ``h~Zi5R kp6-`zܭD.>}ev2M\o ,<6ܾu:8LYޱAԃs>_G-U;ap@&)|P|v'PPu,T3# !0  VCc!~.!Ck{L{:NA (IXHAZGxsk#T!-N{/ slɡCc3yRbu=9 &35/x2Q|`FO3*xx=7PN5eHĀbw.A[=Km;}! X>}nwE4S_RSkaH;lH𿖪ἷPӾsc| ave^e>B_?^}ަ p{{KQA==J9Pf.m~4:ؔ"/,!0睘!D3@IOeޑ*7o@k` mp4hXpv)lӣaA 5ozP`,d0n>Ks[rX5CХoJym D2/?W}wo?mn,i`٧EhPwO +n43':LSҿ;i/; .kq1a16ﭙxLHKo=r |;vy\8m"\[IC3N$PvH);Sg?)ߡ R7w.ww')wG0T~_{ ;Xc[µ?흽xWXGпȊp@mET!mylQM=lHΚ$ t8/cuT9sVjwn_;*[|L(~L8;h7¼rq" WEsh @W_|F?2% bR&MD= ޵9yרߋڟ}f@'`Dx[Y9 2)6DL[m9߼i{x.[߬3ǂhκ0+ 5{km5g58O'fi[[^gOt@vtHFп㼠t}?؛g=!b.r!puИ]Gd,A'W#| iVa}QA=S}vM{t~a1j AqUdy{fY; p.cڋCW!gq[Ao:$c&"qB>4hA(?يx³@t L/-}9ԨpAn xC"Z̦@gP~knq?8lb5698^ Q8r#k1DO}Fe _i2(=gBn$7HSмQI4G1G`rIcx_&fܞ"۳y#KH7&D[?ܵ3VRO&P60<%:*k^?͎=Oc T#~I'^&(uE 1r7ۮ{|cL ~hLV${1|AW.sqT63@|)i\|S |[ǶNgm4Z\p^AUs7"D6yD1q$ExdQ+֛ WZiQ'I1ظ2ȆE/ioc3fj5vxIS3)5ba~iRlAWHLnF¯t@FBӝ+=nUe8.CE5T s}o pqe5xw;`vgs}? rܠw)zvTRz(Bs<^Bki)3A;EM8,慐?c:`9!S _ .J\UWQ>ݰ9It34|sb,*Jl}*9X).n^_u=̛M՚%Ur/OAV$~:)/-LnY(*5|$;I?>^&2Ok+MgGHb:HrŇ7WB)5BLP *?h!1F~3:;[U`U 'PvvRRûM?vωv-w'h`]+0[idÿgyZ~%ְ?6<Nk"=HH@mh5a됩mVe'x0(uYLjQA)-;B_:PPժf Iңa<"@F UǷ47fdh5%/u1;I fY+ςa%x WWDR<Ӄ;K4+ki-adN,;_l`11lД~Jk-+J`>$s`S-m$˟Q2{Z*tОoK8w+j-RB dbØ7[U =Oj؈뺋3fτv iv󢠊BڔC{5w#;On-*@@l'x#\;4ͬWh3`ѝYvm4j\svH(? Y0zj CG}gvӎ.2ϟ>M "CC0m<}.) LF݆eBM*tdcC[;ְ.앏gD_;"yXj?5Y׶M8 ޶yot;xs^ kr[L~N֊ *:RHuJPT2ղY!jFn6y`r [as. ^T1B c|A9"1[$cs՝5Iep>ӏOYtZ췓Rui}mA;Sx'ܙ)__gη4._R!M+FN(}WZɉvBS6_FzI4mjL=y~rp=tllT(,+?W+Ρ~VۍKk7|3l ``RP.l'8 =,-䀅> k *x\k]1=S/p[u$pO fӭl| 7'xoi8H@H[fF)D]iqGEŮ=1oI&$z;>~^n[yH4"ǟ?}0G3z.w3|vƴ`qf&\jr{Ɋ/'0^ui>jÚlȫf DC<@QI̲= #D^q7 Q!@ W C} ;bp9D}VC.P[}]oWmT9ŞFmTֹmDZr*{)B7OGw~̅q -迍{7l!`9N6 >qDba!#> @ futelŰz N0D 6F1_geFN5Gc^>wia  F.gy?R}4f<릢6帇[muT[;> |b߇p"БH~-P,<޳ ( ,`􍤅JER~ǣj۫]2[r_bO۔g2Uw{;B>^,(opr Edh0 ыt;D!Hn4Srނ;_AǪSmVN[zWzNծW,~F:Ny[?/fmO!^SUә>pŞoŢRcWL4H69 ,Um~"/N>5g9p#_\?s')6ij ]-:y?%NU]%'W:mztesfb3Md-@R4jvZ=;㟅RUIqc3-1B+_LtTKSmn&ۓۉw%=)AYP/k UPwiMi%*] sBhx\) X{lVɷScO,6+1MS\yNovn%]yR ~$4пwmi7!!mݰHt,im$U((u xHyF޸]Z]Z}-+ , 6?_} 2n虽 ,KԲ\)Ƹܕn1V:%f:c=| v_4E"j&?| !:nhiDz݇{1]fG G-i_RÜa N&p1iošǥ"]a.YHhpֿo( )Ձxus ;Z, 7i!6PWsԱ<ޏf?%*7;>sl>&^ѵk!M,(M3/[Kzh Kd fTQ1 MhՄլ-Hn9*XNlo;;KX'9a`:7,}!ʹHqwnrk=8C uyiJ] c8Ln޹BAy[mL(l}tgH "v0'~.];V#x{k67AĄt9c97qeY"mw4{G,3b: ]L[J-:3#>="v<g=` =~^.(R,$@MLVl??IΔY^-gqqVv6= ?nws}_@'(~mZ%ITa/O}vҭiBBfAPvQu8aT3Tt>-v &~- Q}x^5tpٶ;ZK~o s9QCz*1'GjAr ?r nl,@ QVΪU :`9R|aKU]%߰(qʒxҰZə7ȑ>`uOsKm[A ۜK,xI1$zsZpueC0a|v%" ]F4`}'+4*K|c\㷊D7iZ5YXF8c;Wlk@@mЌPObJчߨ{|ϟ@-ǸMVyn!,EEzˆJ6 Qg6#_W\Bae_r=JgDH=y >z7D`ҩE+u;xځ:]k31=P}/>̖ZOCٯT;@m GoCo5GO }J2B/%NL."N9*?e9{7TǗn#Cȯ~oGчu]h{]g vӭ[K{Ԯ 2LV?_J$QFA M##b +K.ݿo>;zu,~ 07NFL *Y֪ @:HUVC} 19ݩ3R=Ιge9sUƧY|]1ԲB,@]&(}"*7ATAi03 j~=~; ٩n}3}x~\"Lx?!ֵxnocGrd,L2H la KxU3`~{{=NBI 0B*wyR(3K-Ԁn,+=G&FN3o!aKpopt_zjr:fh_Kz]3}u[Uް%n31?\"GN^>OB\#*-r-_| z73uoU, ۶$^C3f=zGR/b>P_P}au6e* ʓvg}8 {ޮ0 ^nDwI [$] DVCrŖ~DV+6 "zʊq.JWDF#٩N ~!/&oVk@0ܽzÚ+CK< UO yJ-[_K\?I>6} dE?V:1jPhtQl/]E,NKҝ>ICƝ0r |4ת@4ֳu-Gr! ;>MQ)_K]֛Q|_`H^%;aA=miG.Vl,E8qyHތ9 5sJ?kx l=ed0eNM WmrQqsr\M0NVRžӂ@*\Bo]u8aP.Du).d}.PS fZlGxi (|Ay埈$qc 6VBr`:wF6fǿ>.\Mtӈ#IxG#iGr`(xi"|dݍo]ɋc$l!XA<mMdLSY[ .v}$k$}:•{/O3M^݂H߇nLɰߐHǚB;)utv.25*|+a1C )򿔩 nzޗ#cK͆OX3ɃLY,K6v6ӁR WgANB)tfœOI`.N'|8w|,#3Lvt^ ;"Hs5}dr!Wj5܆t)!l*.|̾MwpE`FW IW9yizƚgͤ4z&T,d\ ]leɨ'WP{= 8/a é~Ê]Էan8}]Bb g?><-~mB'I&eέ1?GX>6VAF^'a_=U ml W2lNm%Dy#tvnjd^ra@V& pUs)9{/ 8uˈ*R4huk:;A7m2'!m)bG ;h͝_H q"LKӲWS=}4]F4 DOd{ʩ(w~~K wo]t6ιOh{E-52mթݰTOi7^۝vh[UREp!S~l2-0Zo Ϭ d9nf[ CŴ%[.T|xV"kWGjLU:ʕR J.KMU)37ypēaPUF*Pikܪμ-OC?èſ#'wNlwbL~ǯJohcx)6\p[ڌxbuZ1"[@!|Tܦ*xLbZ1oRf?w"zvA3OR_wG^cZ!0nz#w*1|Z 8g).Ϭz09nPp08xhOTB^<; ͸ BsC^mMH5s-a6ϫw:~uF~IZNQv) pZƲL`NX 5_Z X!=|w v.w|Yq~zF|[~,mCyM&X<HQ=zF dpkyGNpҎi_3(tf#&txY)8ڧ>vhCum98L,429<W}Y33煃Ŋ|s2|_N2_FSfm "kN2m0Bm 6(ҳؤϙ#P`L$4[>Ѽf3F9HOTo|SFza$0y/"ODT ֬L\y=SoиW],47igж%c bKJu$B/ ܘv: c4HP=pDZ,m|GQLM Tw3oI"cͽ&6(U),Oo}Pض<[5f6^ӭ-ar-O~"3BN&K_&&n>Qa)wi78q8oufۆtGtF2؋NUaf(őC^yO.1NH ČҮ)M{>Ȉ 3,r@qz&DyneێGIs_<]cf?)RMUnqZc}Kv?8=8/A}&sYll5}V`b96tJ褧DyTBٰ1k$X!Ow/w[Զ~PHRҲc Q ,7^)G̒#E߸} .Ґ{~sjK*m?!fVa.zI`CQmYDߵfY-ĬnjU‰aݏ'2 ~ϥr$=7Htczݭ+J/9'4R. a)LA|"#/*垫zA/Hv$k px Qfn>dP~D8N@V7Ǡ~eˁJfgUx@7Tvc AMlOAV2~<Ș{ -„8ұ2`IW#?ui ;08ń_})n9sXT5s4Ƌo>ީ,6T9ym٭s88T0r ?\{3j63"q-EճX-t̶はy|¢Z@C+(y^?tԃ(j]k nWApj/MD"|FR69!!{1҇\̺:CIo#:lCPKRΑb !~PY6`KK󲧟2Q)ԝԷ>c9p&W~D]4d~fGαN2.qmeNC9TfrYMc8zS:R*3kM(eғ zFY |K,%_mL{KehYzzT-Z~6jcHxUa=VSҮOSefz$`}Xi5p̪0Xd<6hg0nv=ݕVݣSd=~| F0 RE_5fpm"_3p>{$[QK>+GӢ̿!&BszKT^J]U#u;Af?j9H#O@u_Ԝ&D{IĿ%lJOMފXO(QYS9,ys/6g .RfR)P61r}%-Csd usѝ d2BT5*,Ue׹n~R5V(uϪ}sK J;޽_ʍؕl-QvoMͣ#UIlkb.Vf:cFc`[!B?a'iPuQTxm\d7vƐ|(0nowZw^ Zc%NT秏;'*q" cM褸k^2KPOSc+) &\k_~5}shμmhѹҎ~l6ݡrbd8}Xa`aIQ0n$9BɄR?;;h}s0D3U| ]ڦ)tI( /^hGɑ`71 cmi#F>ǻE-INh{fGE,$L{8=@v^d/Ǒ&oӿa'o9ZG 囡 Vby\#"|si0smN'i_L >aedq6ԛ,I"dr ė4=( =#2 42tl°({TwágB"[Qqf<f$?GS# |Ë\v[d+X4L?sd&XCJr LL2YV,%cmÆ+!1E|w\#hϫM}3Xc;biY/$+Uw :--6Θpl3vO:S_yxPڹ-6pVEXz$q!4jf8oaa&|\݊h捜4O_(D_r2&O%GDa{w9nB[O(4wI_j邧r؂,/)O,IOAê`&L󨩬Hw6G%侳*JX! %w͋_s$kvkKR!q AWNz+~-(o;F~_1M mm>I[ ߂9.Ӌ^Q] )DSm~4(R8؀[8g5eMJy7%Sl ُ@SUn~@֍~i$AL+SCNI Ϯ3em)k.è(ٯ)j1-ss8Jvu ̻4f7(jcP * g̜:䨚r뮹QwK>4[3S*="kG'+ `͏-pJf{)k* ȣŞܭO7Gw> TefvK6lPJc {J<ϓ`nJov?ѶtK8Qxc^*õ+m^mR9ؓ'b7['0SN1(YWC=dXP_Ջ[," /TQ.u+eW^OWbEd"i]$˕X;a=L݉L\N޼lڲ RǐBw}4H#w3g]5~On|l^䣵w!^G( TTz&V4 R$CD'Ǿ{Oݦ5irwd}u6pb^!" p1HŌ4!4 =0XM Ԉ GMX^oC0m"|;HUO-o;s>A-82LˉJ(R;AAQ#~% T(;:v*d+LE, hʢ\ÍH"f)fb̤gƖ؃k?R۬'Kqn;uS}+Tey7Y{"{s'U L s &ƢM,ٌ)h%DܚmL#$,Z hO\i + /[!%o1\#ͪ-lʦ\ {ggg%űKTE*aaTrGə^l; FCX.Ϯs{I %鸬Ì*BI[{%YCH^}j7cg(.x>voYOmO^:Ya.6GH8`wk6gysaq>;CgGgT:p ~^IHiƉAB&'\G9r\)*noUZ 5 ǁ3S >Ry:I%Gbr>R;>Xvvb%=#r])vnQ2kP`[JyY4!{r%LŧR1Q'h,-=GF(`hwf"6D혒 y|jvIgf ԷDԛfڀy~Uy-/7:rAnp=k(24 dCK+{=1b /ShVPHq)u8XmѰcm%ۚS /{U~rIR4y &2M_fXe櫦Y[ZX& <_`#2=n 6ӰkYMlқ_PukO%䳤Y92i37frDS1doKiήav3 ,eu_3f5[[7ɭԺT FF mrbV,C]_Gck?s̗[[0K'/VJrNcĀ_OV[imMIqi^G6aXٙөp>S.1֊ӯ҂IFZpo8%r6l1hס>RZfn8[vOe0BY|z^j`6*p(tΘq^Cͱ_Ufј|w&rG-Vϸ$޵[fݽvE YXa ӎk£Sg`0cȸz&'AW8ŕt=8︪]DB;^^oc 52 mI7Nʏ$ʕ t^)۲KBGbAqzYvu(xjlvEKGݟ/Oo{ҵ>fP (hD8,4')s1YS703P>[lCSv| cXmeȗk9pbBPr(.Չ:]PbZGyqTܫ|6Z*QLj֓q N{ |Nх^%l ^`߁6/ߠtŷMύ.ZKB*_UϢ;Zyنwnpc~AQ+i+ ]} YbYe?@%8'f4ow:yF^UgVe-7Ա?cl6@|q|i&L^UXlwK“yg/9桀gnbA/.T#`:YV̖0+; ;å=9؃N{4M Ke"@KYPg@F~~iot..AuV-ڥvH":"(Y `?n[8K.BbegS݅CA1~ZY<~Оz7X/ 'W? #扌E yYOcEQUpu#QR8,:zrev <sG.aK[ i/X3,|yx;dCJ+m4z/H w qV9PJGv817m% ,d+x0i6yF)Nr~lMr|4'(ElE/",A!I r;WyKU^<%mGTM#(iGKmw`>d@v°!>?x(:dp!R0`^2CXURO5N7٦Qpb"=cZ7hC꓈ܽ$ ; nNP 81 j|n۴V=m>mѳqYV4Ƚw|NP|(;E P!sth8`"'a޴ѡߺ:LdGM-n IHrĘa(KQ+յc;DeLَOw\~(ҝ?5RۺzILPB']#7SuO2~+amlHǚeE'Q28_^=pB7ScI]<(h3=&2hU*̽',O1chm@G.IκN[jsD[ V?T+#(P_LqXMP; `=SC?6|E"s +w‘dH3 ԨrMʌ^ LFm,^PcvHO1SKQ7(ؘl ՔNPȜq"H"HR)ȋx[xYkY) ûxb&Kź}pµ,Rac|ƢhFm@k( [lzun+ClX274rq'.w.X*sy?} / ]"G_Wj,z~mlꓼڀۄvP7t.RcL֙tb-H.rh Cn?etTmk꼱wCSܔ3Ss+}Va&m͔lŊ;nrm)MW)p[qMg@'Dl$ ׁ}FZ(چt )_3c7L%i ~3^\Lb$Z%Z~cdC|Oq3\DȢOz~ c*aYASMX@6(}6Pqh"/֢/lB 1sO؏drm@-XG9FB# ÀeCR߶HFQ^~$I_DrMG]dwSB?8oVaަX%N=ufNv~qK\F\m Fp&|5"֧?Rc@v/r.(NQH`g$Ez\+ -ԾAўEwb%RY-I KFO whUr;2F^۽yX+Se!{DMB3']}ZF"NBtnN2`ſMsWdZKٷ)5zF:'^Ԟ o똱()D*a{7AF^䞿Ma'Q7"ݩ*0Dw"@;cNpTލ#쏄PD9+_Jmo?. )cCc0S~ӊJGjCm4 rwMpwL0A_nR9Mn H?AG7L9WURI?#;Iw1_Ə?G& ܡ$4ݑlvm?ߡo$ ?%2;eedߵw & (2;tMW(ԡ3Ndi3MԎ5vdʰ9$mzGM _ϵ%?ǁpKKZiPVMZW6N$`\M{u=Eu_Yv4% 1qhI y[,atjYB/?bS׭W꙳<'uB ,oX1/EVوNn !ރcMz>#?c93 ͅLև&fνKȎxSD%Vv#Gp~Czb6}3hzr`,nzw3z^Z"~ Q@^#_.nGK⯚OrqU>f: 0333"^DD 0\ؤ>mJ# B<`g M 74 jðtɗCJY,TקD!uSN9BYCc_ (dldHsIl)D= 4F\w@W: *aT@#J )I]6./Le 9 ħ/*s;ֶܸJs);H ׁ-QXi@-nWΩiB- F"90Lىۧ?OTu>}ѓYf[UێtiQ4= 9&l*T"bTFp]IPg,=p3sA*Ixᰜ#y82bTQ:%B!dwW⢯ !RHW? frvɔKr/9yyf Җ,ι5x +AvUC!Dwm.@%.*lJOPc<w+P ֑}0ȸOu+ls$kf-IeJ&~ sڒiSh%Ҹop\؏TEQ *mitζ1WF$ V^ <ޑZMaQf%t1 Z.Gbӣ݋O$)U1g:e'5"FmZɺܫϔ5\;؋ :%{2) E^6`;(%j;vcse{a0⨓z׵=gJЕ7mAEN tŐx֎x*|vt" V93U_`#&︿ʃl2S #‚23G/(i>9(]!멾0|3{dž AmV&ݺbtVCzm%fr=Gde5̙YL3V8<0y'nCۮQ҇4mzsadu~>" @R!5|auޓ8G(ǥ`~[x]IhH VㆊŴCٺI YjDP[ޫ..?Tx0kDƺ0 x+z9rxO<{1ƴ(UcYtq?XѯZwPEP:\ܚqɴpO{O6bKJpڀ/AvgȒ^ޮ_b|5P\hKJ/рkF +[9a |DԽ9Sq$MY_!<|fp:/ T#ۃˢvP?Fـ"[[\DnVrR)asn4{읚>>2 ;l c%ΛU}^uc s|hP?:Ok~`UNť萕̻$pźxع@o'#UVOR]=rr»џ8B(A :*u?);QSQ{rn6I$i uO[ldF@4=OṄ/NC [ll/;N6J]_;I@O_Y{HwW@>i0I<) NTwwA$).FO7ov[sU34ޥ4#Î~b#bn[/FB3EI\@p;y5)ąkع n a֘ 5){'E_O\oEsrv܄AclG'te]e5$"|gszl4YZZUǘ S3/ti6QUEfblց!DɑUd?۠+R2HoP~(@@xSZ4S*C^"~]YlG?0R946!ɕee>*U8U04l-4K-Br.T: ::y+gAԝ0x^n~WD1 157I24߀&Rͼ2<<Ƽ? A($CjA]apK+HP^8@FIY9H-FWDhIZ.I2zXHZ^O}~`W3.VC ̙q5{[WrE+W@qy3ԔR2Q**/*$f~yBls'ʁ!DsF|jˡ` x&+f X#؂J7йd)Eoj3#p= V[c{s4?-ZK35[L#t`Җ)ԌԐϩ/_}o"t/|!8f'>V_;y=o+h|CkB??;J15 >4S\J2PbJt8K\%8k T}r{tpmn2PYu&i g7сGiՖãuYT8JI5J 8UbEZ^E[ %`Ma;w&Jr4H 7ouPoDܜђ']kjvk  6JutLj6ֱ"ᳵƮ`\rvOqid 9#? =54EMՖϾ9}!զJ*%Z6q _:OBWJa\qoT,P@628=13Q9%(k/|اI$7cBu[h\x߮%Kӏ[%~֙.mz%M3g 0 ]|-ֶU5Qhd` 3Z0|g3?̼}-*5P(1ZL#aMW#_QePrZѭ23{fVg١4.#~Rah5b;ٟq!lcbfpƶ{>G:YJwP{ȑEn/g HLVCH.nRVhzvW3G`UV.^24>)dl)P~U nLiXM)}K N I)bs+Wf(}$W!o"o_ av\pe,2mWqτ!0 (z3>_]KKtTm{16>ZB\M(Hy3E-_9>T]q2`ٿ';OIr&bcwfeCi|W|5#q YyQ CnU`ኂ?5bc'OêoG-3X+mMqIB5fz}(eZtY>s.'( 9 /D@<}.*ȢSZY@ T2|CuF886߫eFwu}~^|ޱZ_qVX}uӝ[7fGϱm Z{R=%D7'N|xv;dO{o%]Ǘ7zW:Qzf4fU5bˌg_kMf#5N+>1;MNG_?2CҹM5ߪNV+^~gEVp})RAL=f* rx#KUg>\}4Uqs yL#6;o0񟃹HkIkq Sꧠ/<4YHHyfr|sz|he(*ҩIq$AP w|u&2R$AA(qvlOagK JmI\V`ī?rn6MP:>7|EE2CAG;_F?`fX񚔜OswXסW mVsDwK4@do'{uz!N@S/vc&V,ߚ\#2tI #W* *.|n+':3 Y[N [Q_lO v{:1h3sxR$4봚),E,I@AƑmC?6tf.ܺSdJjǩr!`X=nMEfsMFgz+jNG엢xHijb:4ERZXf=^~۟'?`#icsԌmYKm4bg @;}9U$-qUt +QDL3F=-p CŬ8LZ5w,\b6W kģJefZx*}Ժ6q<5mq0,wu&66; Smfmm}OS͋VVSTlw8rtwcj"Cz@Ͱ`}p ('+dVyf2ݓX:5Ŕ&!=ncϿg K]arb ߎ^p]< Tl$} ,_B`ƾfnK~ ,R}) X:#|* +:%=MX6\9&H^xe5Ѵk0‰r%w3J$L3?7gff8y|L9v8eL w\ŤTU5L? ^;es3C*sX 6.9_<*'9s g8<w&; t>L=^DZ ]YC @wI__rr:y/K: tjPڝu)/oncl֢/=iJs˨ O9RTn-kգI [pqOJ'E,ZreM_д<-qw!]gfgHP(+G/`Y !ŗcl3y3Ok ͚k9|e{ҟ9hbs +$cy?e-(ΎNٟ8LHv6y65*a:^ Z~"%6[18aY1y,_aݖ=:4w+HjՊJSVAeuLf̗o4zd]aKImL!)b1thiNФn/'e9&+R#N1Gz&( ++F!U[a װ訅 Anؽǔ-OEޔ!UlͅDKhY ffX%~1_nDr~I&'.drR-Ɂ~I&Öӣ[Y++F' ;z z"a0V]s*LHaEX_~z ʤf=:(VXXβB)ZIhK G҃@ %IpИ|S~um@>+%q;4A;^eڝ\PVxc=cRd#Xu'}L5Ku"J?Vݺ(e;=TRI, eNuYk.HerYfбRԇ-#kG__ 06PCqڨ)4l"Ӕ嘄sDLN@OAIF)KM/VsTf._T!BsaGIꙸYS$ C2dkNs6{HUbFʼnkI";P-秠ѻx`=zCw=t'4G_QAJy<_@^D 5f˕G߹byٗ =a%A Y+t.^l\|oVlCX)zO"N],ڴ\]ˈm;~Љ#2DGgn@P1MzbJC2JUZʁgThNPp[!WQ!zT_4pӣOE9j7̶6(Oh$_N1`ٛ׹_263>.4VD}rJJ5Qm7 "7/ sJ4 ?djOnMG\E2WQɶǺfP'}C PI<(BmX' .~{(,eT-J$E&c?Yzx(VED]Ů ?QQ|>%[RhK: b}u7YY&dW"KS% ֖tJIzȡkؗ!{av)Xx<KQ߻}XG+z00*C_7j>8L_fИ%;V9X&6՘PӁpc'f3&xО$Ƚysp)և~|ioJ:嬴]:( 7~HO Ց-|quC;̋+ŷˢNo_z$Q4%`jx\aTSPrGIs}¦;bҁG/;Ϧ[0IUƌ?h ["n~/2 #Ŕ胣^x)٢^p6GG?Rp_G@jO``3͢!3UA azh:*\}g؝NA֏>.NPs&5,{V 8P]dweZC[!x4AaX -* 7VYQ/NDl>LzApԍuF),:5CP5NO`ċ!}¼q@zDzN11+7;/KX>_ݑ}7tg~Xkڡ)kҢX59Otا ڡ7K뢉 ȧ\O`)2t&Ym+9c_o6jE:?Hd;2jy# AC&en&9p1D4PYDؗa2qQ9@Ib !s^@YR)01wO[}e-ZJ=) )S2/H{PsZဴu%p#699^V:YqӎP6sDd&ēzn-]_pwi-_Wc-*?1tE**f)W0"ĘaG$ӆ*bҡD+/J1ry\ʧ#i-McelՐ &&H 4O V9tiˤ!o,s eGnvuAoI`:eIň%nQ|d+(.8L!VZes#H]&CI/0ݥa(uw*d/ h!*6=w{ΏVIAG'-kTd(iBSsTX1 TH%{) r8|#VӲyR2?.(:/:%|ڪjM4=cݓ矽F/,_+kJboቭQ'X21Cra1 /{('8-['^.v9p+(AJ&1җ+BgWbˡ/x:6RޭRKc/>7lUC<%}UT738/N%ejʷ 3wD|XSKd /3ʫn<$١<(*(vf[+pI= +}Vؔ__`ކDN.05d, +Թ@Խx-ʠ_^ *7\߿dBijw~AA}A8^LϷS,sU]T1F;Ӱ o7wyCWn KoG GO 2JVƀC>ndy/厉*1GrP?!?/}|V^~ 狱"Pm\4Vf `¦6Fbs3;YI)wu(Samim׻SO\ipP*? oi$騵w#zQMF[o8ctl-#!0:1,QrY`. 4cSOC4Y8'6'V娌j(itt|N $͊3GuiUAw:TNU@'cͩvH?&݈@hKףZTU8ުHz";e^YY,De!¶#S]ܸ<2 2cSRD*5sd<8:V+f(Ip"n!1RQCͻ]QG@hHd6\˩-'ԴS}>}j`zj"tDMqŞOcJm*P?`83n6f4Y:49D~xR]HgaF% &QKM?i_bXU?X~폇%vdC'S,87]!pe7?1_m_̑G.\F؅/ZJ U6IY<ܥ@t̓w@ 9)3v8Tq:p*&4tl UZ@{s{y0뎱t?^2Ϋȿ/yr8[Շ~rJYI]:AL <5ꝥ9^kbSTZMTw7|ݮ{?Y_koNA~b>_[sʵjqmk?.^Q`wp.ǁ>Ij,&tZ,JCF,\Cf,< 4Yb󃇈'冧ˁZ>u6~:.S= l>!u #Xd+HvOV(3U>ГJ;Fcdubi+Ql0ZSYqv@k O ){FكUnU"Mw@XHNGÕDh&-w\ELBF3~'e2m=NV7{yiikpЛ7cۼ9yvNZ儝 ;)IHnHT-l2>^<"Ƿ@Wnj)Jy䅁8s߶rc2}KNz&s@bxVc(q K(DgS)žz90/,sJg/DKRNji<<=8Вԥ@>WP'%D EXH?DpI h/Sx7+0⦠Sʂ ?~`p/tJ;^HZ.(U [~ρ4)$L:8? *?S< ޼~>/6}46ь0uwR6 *˩X/ބreNk~) (r[g2hH oܻ oU\/^ӆӢX}edUnv!AAdm83cػ{vcخ?,}<{'777q TUUR*RԴ QUPDiZĿ|}3N1Hys=sν\L][EUCİn=Tn)*B@rVoջ*fLX uԒDWG$Ң2 }ߒYPӼLoF3%G1Qf9S5f5+Y\"ORjp[GrdYOj@j%GQ)|;ġzfEGrx4Ju'Gm+ F3GtWIJMNw k@ & 9W2x}s 9t9Se@#둡5j9:ȣb_>}GNE/ֶ hUnZ#ckuizȞ8QB4`z2$,* -PhVu;9>13Ca|U<CYTe?ngj(ƨtM72gFfƠLJl#@ʘ6rIݐr ]p _ 7uW, t9qX&-->6o?^^Z-}{ on8ig =oF{i Sa Nk#P}XQPV^X([ْu^ _yr sX2i}C&̐չ >g04CyI·ؙ[\SL^ $q1̳nqf v$@NFҒUַ`Wp~Gb8LZ-ڃZ]P8n=LB ِZa v:p,2-38TԐ M5#Q͊gmݛVMjN{sj: +_48 MA<=M>bet7Q۾LkyBwMN.WpG?s}`Bz?4&/NNLMk/Mч9N N.bc~iq} حJӱuv&5 1=1p"5VI-:{áލr՞زWD![[έ,ۺnqG?%g9.ָykXac|Hɵ{,q'}$|!<-Ff6=oyV>Ԧl:bq:*bdU,EL2c.۹Z 9n Gyj-Ζϔza,SP dlƗ:VV;tLoÒ}T,;N?a`g?3e1֝JF_P~!/zqͰ>̺@XxYz#D0'rSeaȪ/;iYQKs4a_]\^W~&:qZ_W87P3T-I^Uߥ0.v:%b]$Q6B3VsI|xmK [t9z=ŻNdYioh\τꠟ:u^D\.Tƴ xn~RY-B8{Z]/!#eu ɁqKZi4j=bހɫL ݮ;VvCQKř0 *[Yc{ fbrD1` rIQwՄ~Z*lyTSg-O[I+f#Dm\ py~@-_.˖D,O}h]mcn$AJĐ[Z* Yzm {-i,dXFlgK8Ơ x;YF4io05: a  !9z!XȽ#Ĭn!u+ *(7ˑGguKtC촺E$ˈnv$ = Jaİa5,,+\tl pȁ߁\I5$Kw&C>c8:h?h(pwzlX!ji hI=Ǐ(_1֟ڬ~UE]S$#.V 8+A?E= !x!B9JT"dk$6s҅Rd86 !^cn m[,6x3klK+? ? R c}*&欶{ Խ;r@]({BLv.פ.L0"D΍_,kNéxSJמ֙r|&exl[oԻuKgiTiK{N@\,N&KEr^WEІڒN ZHrSz$cz]6 1 :L Y~_+ ũ4h'RqVgi1%tTvG0}eVUWQpujWt̏ K.Ƃ6\ ,T3yrsH|(`$ڶ ` e=@]맡N*^ , hBMF!?@I9OUڃ1u!-[*g>c,b8Fߍ`+fƭ@"4yc_}\ZT}h?%Y{UyG*_v7g8+܄3|mFTEj%CzUr@ri_ܚ2qȊ/(/>b^Fz5vYi@IZ=zËxJ۩UZ:-mX WP*OB\aPQZ'W;舴 .{{ۉz+Bt bI7X'7牎;4G-*s&S#">K(ii[ꯈ7xdB'ߎwa1bj"gpH,`aiWE[Ns&y~.@RJ<1WPB {H l>i,q0oe[s /CykxI+:r\Pb2Zp:P 3rh"hbU`?' !j% J]FRynyso8\PH+Mo(T)5][\B5ź>jOk$JԺ\b> C Sۀ$#(@ h%P+8FHvDD3x8[37PJ\WgwZsENh&p[- @1- O%"LhNI2s$^r'iCO.;奫OߧSWR=+k~=(IͦfWG3$$`{*{YhM,yG>c~ xク~_^ =${HK~o!wky|(/A(> 559֨Vowq05YѾ?ŲIJ`w_q _x_4?SgNx+>r63ǯA//"TC &M?Gw?;/uO N|ƽ_|⻯OT>g;>|{ۃy'^6o?}_}so\'4BRJ?Jyo&:/ BgA]?-JU0 f1C w~;!_UU7e _iU?N7?%?%y m)l7}IK+>W%_qч/$ݯ /W3_Nm8vS`60@ b#⏧bDq!b`_ؽ".AY:&ZLO54Ի,^2MNE8h6(!oTJ G jh^J>;KoOVmTM3_OlC ]bR8mK.@q` w)COmǫVڎV7f([Ț'-̂ߵzG*n%l6as g9xq)6WdCvJSM]I{\Ku\Aa8qQ9taWc{-GTf 5ό{3)j݅1Q,Msmx>؊?l$i&P>K b[,ŦM TZJJi&Th3bq̩ߜnusX:)~}:dЉyGrMB9s<9ys=jدX0[LaL0$>w5[Zjnđ,wmNôRzsmgFȤ'W/%"[eex ?N/g2D-ϔ>U-iu2f^>&߷2| d2|%>]Pϐ3e>(?#Ûddx ?R?"7>K?.g2| /dh ?Z72>uXHW ͚~$ M & MFgTф^ pX%<a5"Ѵ؀0@/5) l#Fqh:k.h2U~a4R0ȀFhf?0€@F8~6$'}_DO{"'gvsHgzKXOF0músn'ɬXX+)vl6bK(˰E kTaþI/%؃ <`ҏ<H& ? ooo=Ok7ݝoh@~G^OwwjL/zgrwj Vb:Bvh.BOֺ;9- N4>Ny?t.@@桔1U466&lghH ]Aw ~1'̧ڶM<ߙ/zzfpu-υgǔ|@;)9f9Jy b}ʌF7'3R'ĿW!E2O?®ϑ'$ʖVюX^w?-GDO72vB*OUGyWiokѻLe@tgu6.*Gzirqt~* >9ڙ96E<+.o?rCpŕ-G҈԰[UNB.gxRC:BtBQvX$ow Rȼ[_L>Wm*Վlp!^8³a0P ᤟#chtC?<14C|e@$qX >*&>F[WO<_GOǴ*8|{~_cth00!(\,2}'(C>'@OQu #'H@TAǁ^0йʱQ#Џ@0s]852hQӒo>x3n1:: 6K؆gca]!t=>,OӾ8!gM}쮓Gh.#zZ@慦}m`{OoۢA}\ fA׳ё=6^#z2ua^R;<"cь^GA9AFwwд_qy 2ɲdfSL]GuH/즱:AMhKAjǵfWN{{vXlǩ|Ba9ɈdG>zO̾\#G"t<40gmBY4 'Ƅie~3`T``N@*lԗ{Ÿ:j<q.gvv@v;q.G-IL̞st]8msk;[Mך;^WױF5C !1di;+w/ wc/@So}$2(P7p=x`?a`G`\w8y%oG0: Mç!+"P59ژor1̒Q72wybdmҍ+BI5ObUc`Lu2 AuI{z D;:G{a#.,jB{~S'Z1{ߓ tw eꜣ&jqD` )ć |KTpQXᗆ^pw{ =jAL"GjA X!u"0nX |]Ι>6\:s'Ԇ͓7 6dB:ݶx{ `]8]﷼;408:4czhF^-hpNs-6!h{}zP| B<π2:arcl螾 n=/a8㡃qB=րkdhh6 ްL7q^qFoy(i쉗;4[ԩ[dkD0:2#A~-ϦyGENy`ԻR>!~vT:3uNmnG7@8~7 eP:]g ף١|Z qJ4cig*- +:eH!$#&q*RU0OY^%3h(bK{n-oJޟb/Q2S3Jbs;c.a=Nr;XߋU?Yy.dUmdFܻ{?s1s_e_{#m;W1{+sTp3ܻۘm~?b}+tr.eD>͐i4G^3jt_|ib$)Z^VPX4 9ksΛ_RGYӵp۳xriՕ˪k_u׬]}oMZ}C㺦ַlh }=ظi7ܸeov-ۻnmۻw켣wם_~=~߹}{G?ɃOپ?cx{>̳_/x_y?;w{o||O -*/+YU.ϗf.mf$벆z]9͢՜ZN8VN4~ſ#ӥ(Iנk_tѤ΀Z] G,qn`~ ^/ݓu"/ <1/^ 2:H%j)EPI9x,3#azf4)$EO3' i1NI'"i pif0/AC'e0UZBSMEj -RNx/C^g9$p{RNLZm|NԙAԙ%4: $/ 6 |F:fS\X*u9nQ3//wUW3fٲ?dQ@['5( ʭ}";=@R&d[m [p#S:赴|^Hj.s2hڪgȒ,,Qwlh+kEh$ Y_Mj^h4_P>zdc] x ur {>H~I*T4ENk w+@c @@$' ؖtlpi+֡\gd>t X7y?e U9{R6?=jf`aWܹX2|E,ff IW<|}T4(,KFsF5kIfPŽ79Pb$8g|j(5]Y/&fm6{Dne({C1*uz_aVb3k+gnsKלzFm.v6qM(j eB)ZQD-lTlo~ԅ&suZꐐZB$ dh|\ `QC\koAB?NQ=u64!@Pޔ cp5XkqAͭhڵ8DcL䏡e^y[VD`591*zQ"T,~\ K*z g3EEk'< C|_V+>.KӺ KqEY|_z@Xx|[>/V{<>W6SɯQNvFBb_d>q1SvU|<}j N!vM&%VŗX|oS)Ǐ~g^FUbV½?QبW˿WP?~q~*~|& WEN*RR u},>3v㧢WWes1oT,ujbz5@ˎǏEa~V>\P!0CJVyT ]U|~ފ;Sٿw2GX~ϟXx^!M'S$>p:Q|/;MWӎIH1u T^$ιԽIUԴ3,oA(n0{/ *DS5Qyſz)M5 S8#iI&߹-ڟ+h?ǟE~UߥǟFxsRGF#%h?gE%>;/(9  ?:>+\QA}NŏQ$x(/N$ ~B?1GkjN{IJULb]Ecz:06d8ۙf<bMUٓDt)LIono,o}$ ҽHTrN .t*- Gr߰?Htz1u7ϩEL|^\oc|3 /sR|SIM$7&N_ߢI|VMw$s_Ih&okTh&Nך_M|5I[ϱOGK|& 7ZT]stQwRmI%>$?UI_?$.'t8 r||I :p;f2S]N hq ֵֵꢯc//U\<[_sf@Y߱a<WZQB RGSI"n"2׷tjWQui>yko)C!++rAvj#=T~IFzs$Oũ/; SHʳ>0+3I L~ħʩ 1wgh*$Ka?TYkHtD΄ǮFee' 1vЖPtȧ?uaEcǻ-%<֚p{`Pb'~O*7 I3kl?3m_JoMT, ibkADeXѰ v)6rpT E؀!J q*+ $mxaLQ˕f^;tוSD:Jqi w,/|Dw;םyk7C*pafwG$QJvHE`h\vޟ7@(c^p 'G"I6Z |@m' TrH I#Re= @P4!AC8dnX1R?2&Zr4X!`%_5fnΫr(?nе +" ʹ?OΔAyƂ< {`D% 2|Fedi M:2G\ Mo8  إ)S$BI E< $` d3h($25œfrT ٤ժ<[0F^,5Rj(liEjX&]z$YEV οߥ8OPri ;^=sye0 Ҹ ?L y 6IG'iD@H@b髗.sH[[2ȟw;3?> =ASTC#vLÉVOp<ȞNFF4|8Acyg9,  mKV &AV2d&l B?IJɕmXIILS()11%Ÿ%7M?%k=OJgJ0pEEVYXiuPfg: 3NK %y>+}U2{x$R|(AKjڎF\V<6R jT>.\TZ[RR1MZ0JOZ9 t>pI:&D&. ((2r]Z^>d̋ {ozo㑯׷4U'N#Y`1j|d@Z,m=- k}B˼2kVq:uLbi:&> .TS$ i\RKJ SzLN"JVjt /iYjrw*VYI{S"D$;3n"Kג)'?0K$SRnW\⦽͊˳?YV!F2&E͓!iFJY 1nIQ$@H[ 8E~$aP-eTΑ\p,=>Q\' ^+ ^\+ Fh_J ˾DkPJg"͓/,T1yQc`OvȐ {"TF9N/\*Ys#"ÕK+y*KLyEcp .!P(+5Fɚ^ 1'J|+MЦŋGS$քuV7mJIFmy5(U@ږD"Z m_?1f7s-/}㹠{N wꃉj+_ZQ.Ey Ò1a`0kުm: u!ӹaU] pԔ11H I)) IT֢dAx)!ymj5Ekrkt|p-Y6:?B&߈[ќ'*QKaaaҠR =y?N%M!2ip]k,b$! ąSOa_:q\NL(7mʫV˖,۲Ȓ2xݵ u__k)Z+m6kZ"()4 kdF{Μ9s̙3g ~`赯kKZk-O՘ǤPN\+$0OY{ҼYC}|Nxh1ֺz@1NQ1냐$mI`sNyG6FbV̢?c R@!c +nlIYDa`DF S>=\[ِØ 5:Yx_ͫ腐!LN2$e(PXdj|d\q]Pڎ5dn2W{@@rx!=zk3ɂ0EÖmD?l}~Nm(D#TqX?sky:ww<'??W"(dL콋u)lnZ_=k]3s w,7,r4T&B+Jv4sZ!Gv34Ƽ)ZƂi,Ȑs7ϨT%+AU%-7&ă-N0:bCv^g t.,ayKhju'M5<\1^+fF+LcnpCc%h>׀-SҀ4Q,Χ[^ HrY]J -4{mRS|:nQ.Ѽ]h룦sS浦*? 5Nj-ҋo|PpMKJt 2=#K;)E ">,f2&S 'V<[ S'ak?q@UM.vcl߮u7`M_mzG\oî{/aU.FSEy;lLA,Jd{9SS Ѫ64-,Ёb^Xk᭵Lf90(k+- s%%-*)1q`XU: g E.(,EP^BX1a - 01a J'Y"Oִ0ai-Zi3UL66W-Sܫk _!bʹƸ0sVY(Ɩj|5(y`]dܵ`3Y\4Id]~_4Ѐ̐:mp0h0k$a^p7nk&3uGg]B㩉>41}YᤝRKD %t⌥a)18C]Çt$[Tt e@vV WPHU34>kV[i&YRSrl.2:c oJB:} K@iPݙ)3 \$gquWL}@+m4qcw M4*l?MdZ9IY`-dWt) O 1akP"{;ЀR1gu[` ăfZӅ`3(y]k!X]2+khWGJUSG.j{R1k-=9t(5zx2<0e%L%n°6TܹasJ'QaQ*ai$3,$prOw mּ~EېV.hc&_~kѬ̬ `?kjL>6~ܜ3gEHKH]Y:3mX %үJERTua )rOoW&_Ez6:MgF.E@efu9:&agxVp,v Pr6Z mXXlfLq5{F&#[ҩY}DZ yAoHjRD+5BDgOR5gG~F?DXó:  {eT_2` ʬae- bhQ;iMJlHWFD`mDKK&k- Bj6lwT2*X lS[RzPX>V6Q%jV̘UЂ%V2XpO:5'/ Wߨxep|5H $|OդEcN/=iMgz>쯊̃8: p`_jX_O--E>FOQ-Id*RK` 5Xɝ4 wlIQx}133J *9$7h)tWQ2wQ)}!UћgDvלY7 MoG˿jкqs*}zP YoTx]|$|Oק ÒF.q 5Cs24VJLojz.dz?4$<`Xc L):lLiW_ P}7na[oxh$o0g#>Z$#n<é#EO !GX#R#OP}jप_Y3k!1ۺ^99?S݃H5088ȜXs)#M>ʀ#h+ś1dĤV5&~|09L\Xć*{nSMSh#XLf|z2Ih,TA7Rb/%+],QTT6 HMnXj"F6cbFrؤBiX'e6. 3tJ=a#)&59ʉC%1qNb:/2e$c,Mv0hː|e^%XJF }MnVcVS6b.PDWNnY >% \ʨ2|Eo(?6wYyd$+!.oe\Z~ۢ,46( Vn}Nֳ*. WˆcO:ghC,~,)JRTsYX݆* -jO"XUh?Ra%g2dE^{RDD^tjT֦tt\Mwf8KPa"ANTp4\\LH4e L2ȅMϝTzNGgEohAwHE[X^Se(eMFT,fXTe{EaZå#?ˡ]f|FÖ[:l8`4¢!HGVPœJ\7``޽{)ftjh1q"B`ZH M \q#n3HQ<⢕ӄCc -rCD53bf`hRNC-RC2o4W[ CCdD._Q/k'qPach$Tlf u[ Xi6dغ%P<^T+0)Qj4sfD:;;4 t?6߾*޿ڟuϽjPR)p(ڧB~:(92"VZmsftmf}4mx[N2ɭ<0Ȇ>-qZ}%kś+B^.֨e%#eX{|1t_vmً-Q9$R [eYSt{.n'ݜ56#ַ>]u@t0h*أGkTW׀5 Q\k8- JL(m9gxX#9/@ u3left9_6Ԓ֓ ("wPKq-VŭQ}N߳>辯Iw$;Tm@8ptP[foF+nC%1}J".!jݲbXU7I=_^ׇ%kKrewdniFpWd1.xØ+-5iSRmd[?|_i<ՄUMON( Z H#V]uyZF⢊K!fC0;oia.F ʉՖ8gW7}51gV+jQ#c}xXޕnG\K`G` Ht˧[ G1"4q˨Mݶ4":qtekB]N&9TmLW$cgNg@E 7씷v`u) ֍WLd@/m_ l˩avMv!0^kQ#"΢8+΍EDN GOYOQ'ۇ~o||rmq|ÄNjx7FT-B#qj+XŵOK<+$mnhS"( vYwK m pbA3gԊ)s0sń1d\#,◩mXG5z^ 1(>K-:zz trWoX&h]1p%!oe-@wS8z6M#oTVr:ofȴy)0 o!jU,lf*f3ltwE2MIQUE By8 =2_5~DN`NM8m}ZZ4cW H{Zh{QBKؓhirܬRvii 5!߫ c?zx罗Wi8DQW+BnQe,L 7_a.VLñEK籄џ}7pŐ 킣xXB/${%;+fVXٷ(kq@Fp?& 1Jx֭:rhC҇+p4=+]Iܴ*g8:$8L Xvf7*%Y{YvH1 y"]=D*ukz"5y5͓CN\B{b5m*;lRpn'^j1v."ռÉ&Q-O'>q̵ KJf( MI vCD::S aİ4Pj̝2+{ &!t! ^r16xl59f-[Z활?;(2HNF}[;p;ݰE HT&;=֩eD 12D110EK Ŕ-LxPeMd$:W_Vy XQ9^v [}p1*/.R:OF45 11n͙4#T?6AXђ6'+X҂yf8Nz0H5f=+cEY'v+p/ƾK0hZ}m*»Bnc?>nplQP z"]BzVKڪxmQ""43?o@@E&3îU{'K\O+潶^˞l)5#']y*B̖r;NچRæU*cn)im.r ۶@m{ 陿2 v4? wM][k Gmee/ժm[ ӭ?RPZޑOs'0ZbwzW>+mv֙ܕΒNC3KE@h/\q%~Bnayp0nrEx??{uU!Z("oo-5g(e= ޷`r Kk1<./< 2U wtulomgGYuwKE"KS&A`KMcT@nqt].\l$%peC˩*d[V&-X2k"@k"|4X}`5+OP-Զۇni[Wn/ěIւe[-P]BUDVA@dQ!O볥yak9Em(|hزO 9H';55L$flњlh|??VED>K:YhVH;9hr݇2E-ٚ40G/F{3kL/A &{O$3 o3+X*7)`lc1heU6'魈oD`6:/&G5)`oREo2"6LhI8oYk*d8r2G)7 Øj67St%5~N`jEYљx.c1aL< 7hi\eɍO=4Eݙ+ٹ+'7AF1.o93<@wg3j mR n|#Nܓ|JUC T'dWffI& iNwqVh04:؜HlklN}jW !عS" \1 rp7U&{;jm|o< m58NyH,luup; MŀLq]kķR$a835H6+jlTw8l;PdGŕ(gYF8 4hB#H%ڑy6Y$?Im+#!+oE߉lZ**Ŋ%BrCJ1 _ڙU MLbu_/) i{2T d>S9!*>{belt9:V b͜˜$z(#R*E]Aė$:S+30/a 4*7#X7}SSŭSxik ycπqfMMY9aC Eo[L6k$Ν-m-;CC=LfՌ׊w #%f= ̋8Zx(?S͚PɈvxD7mFbzHkGz ^ZyFZst ~gj[jXS">sշU_mʶq]Y !ma_^疐ܩȸ݅ZΖdk3cSZ^e'.Ө[&ڒLB ('|/3f>xW@5qT*1eb3HCf!jێO>X69m142qӀ/ikWȘ376ٜh/霉+08·c4׬YQ w5 Ʃ"1D) 4mPx@N& Pe|V ICfsz0`X۰p˴t6*X%U]2VՐD&}3> &[T23=O'ߦ]:1b;kwM:RlkM0V4694:p;CNf 6R [BEԿu;ʄ q P!FAZI%J" yBEo8$j!dY.f¸T`9~6?wK=^q吣¨HcnǨ:u@ eXG ˞Qnj{, kƜ/!蠢C N4V/(l6B"<ӑ1DV̐]ԙh{ (fjN3&OY[К9OK q1a=  0~}~|C DIc$>®=CbMFVdڄ 9ʎDd1&n6`j78jXcq%Z_9 jA#ߑFw>w@c,gPtxH3Ļh/0`X@ ud08tw)HI*j'[*q>Sĵ"y|.g,x 40]0dIe2UXRs@T*Ǿ r8qT7{\6uH1cb9O fZ Xh(U3\)6x` SͰ7,tjvwn}PuVK 6+da IVdvPaU^1YT OƐT!o&*ps䴊7`=*nqfvhg9u.--j”>sʭgJ%x§U]v`ڬqj@^_iȲV5I-Hx [OI-5uc0 q$/@4Kh]%v^|khUHHq)!iZl\K s>_7cf'3*ڭu?[<:$k8EɄCER>%O4Dޫt&GK/Ũ8yP=VT$6e'35';Obt®[';QK:zHppqKXB3 ~̖+\9=v4u6"Xn 艞 $^5xڬ.+z.b=6`ZfKQ .`C!lC./#*&ò@3ҴJ=Nci?uJ(sjP1X@SBiTþ@F}s|ZNjN LYw& T!2v{mHC&')3_Sã@4YjT!o=xc㩉 V 0ifqWy؉cD\bS"'ڤ0;'gBܸE2mz&&GpwN]TɃB LY)Hpߊ{ΪI$ƕة#,sg=&zrO)8Ӌ-0S`A}) TmGkg]2 >ud{sʹk3aEIE;C#ᡃ#ؐ"‘Sl"p!}`ɪ85Jگ̅)êѭd7U(X賂4gT5 ҈gFxtaS(L]he3vXB,apgmh) M'&1c6Ûh5vjM; :"C&G'` 1C51X3H|"㝻LRb&M>?FV@6ڂG }|@3]QKsy{rV_e5wHhoJ㋻f_\  v(!ԿxPW0<{ktQ}qB7<FL&^^Ш&Nd^6)mN)JC3=9[kGWs2S ڒ];wtvt#ɶ~Ks4u#)䰯 m<XӉl~D;vuնKC+.,([.,% EHEnNY9[XV|){+ƚYTOҰDjYfyT, K@1v؎$լqt,Z1k!hw#.E NcyELgL3qA2'HuV~6Esǝ$ jC(WikPPt@xtB0 k%$Ϩ'p rg4<8*^i %XhP43Q» h=)40!5juќ%/tF-p?&Ply:0d*i"%1h% YaFLu YDsFchpGݳ dSFݤ$#Ⱦb tO4)ZZbB\|K>@,U!ftƕ"|y5"!'&&SL݌c0B-蝛c,5:҈%؟9"!$OM=6Stb"i4M8qTC-IdC#S|껌:JM>?{RruhT<8kĽPlPG}:=x^g b#pϚ|LzC(s\TS-rĜR6# F0e' G2PᜉdjaJjzO;zDh _\SO TX%j"f ŧ=9ҭG%b:kV?\\$NtO>C3-F1XFy'K"/pywě+68&`kV!4rIs{ИIX<29Afʙ,!:^i[{[O;8 KW? 7lU*\qW2nԙej=&lV? 2Gox|<526yQu|4ן79vlU0i.y2_ʁm`i':+RJֳ0'5-UE|/{s7÷ N1] #_,*7ScV̛9G}B$)pajʐRko59{{pZ ZlGbSͤP:u¬cvPޮJe(df(ذ-.T2hY׻iE2sˠd#aei-Ms6eP RK~Q 8[Lp$ЌW߰3 6gD^%M25-;9EٰV_TRS>`P AdyYx ''Rfx:zc߮4/qge`Xieg̅P rSD}b,7&$x \R9D^琇]`{{BR٠7㦀1vZ[BQXֽ zMϸd ܼǷႺ<;0 l~Z~Q:dW2bQVok@8Ifd )4$ ˷|xX$TjvT\[ cԕq=^,a##j֣ѣuJfm,L_ؿq\n4Ff!"b%fY[G1@=_Cԏm ;T GUD'GNVėU,KSzIjIեe+0dHclLiV3=EgD[vl䮎cF/qDiuh_NQB;eA9I0IJQuhEzG:줯;ptLcyQRQX?3z 浯@rg<̚첛a(yÐe\0$w ɤ\W8&׍JIƮS{n lArGHѰt_d1}-=0^x=ֹ#O&M&P6˜;i vRQHcW|e~p}\5;ṡ|gFP$3cip&/Y0eaFM_$TlĻW\.ڮQO~9W {7]XԲë`MDj& lkv7ڈ_l Y;tؕs͚;vG#Ia;;%6kn{ҝ ;ک>n.Iu줿ϝv];.*JݑvKF~Nl ʾ;;vpu9ڜvPԮwGURlIuNfg ٩tPQF1c١Z_ilﰡRWZ9>RLf2JԜv@:;$z͡d.$)DɶVvLl:Z)KkS4P2i)lVDƮ8ZAVn.C;qD; Hw&.O ]NyNΤ ttiYxJ컴E- Bu.s7ijd<%6)3gBY01XSC.]@S{&\`wKk.iQX'&<(D`,xzmG>t~ׯ)௴x4N۔RPWNo lV))|Ma4_ ,lkgu y RN^ewРPN^8e r0N^[[@ΰqٽ~6vthYvqrv"9,,Z[.Ygٛ oHb8 !G ",Yv$p%MH@k@# ,woD"gQNY&D(9+DJ&,JNXR9DR'4E8 mI#BךԞl%`,:Z$A$S(qr3wrTYeZtR;D2aI\`pyRHT9.g>vwjM;shEic/BGW?>5vy~W`]vDz~:@xMQv_/| KNA^& 9eA;@zǵv::𽡳wm//Tgh;lg_u9^mE3lR2f/WAke^2cK\\-TQrPKq%{ [ԲdpW^~ .EB?jË0v:a&/6,-9,7٩YKp#<+ˢ"vA~t) %qvxZ@S[ֲbg `2VUlY\ɕ4-ب'K{%4-<[Es59'7K"Zѕ-Ie@ѝcm'*&:Mu\zVMKUhT̜fw~1yX#v}/wcIWeZq{ܞqjf:1$'i B٬u׹=P߰=t ?zPjdR%wr|MOL{##CAݝ]\ bު栅qbXl"?ݪSi!Xǿ@h_|xaR<.'ɉH䋕d'cH?Dd|sMs*و7(&>OqE?^4vn6PE 䅃obo%w]-ύSEbԿ sxL]Yи+efzj*&Yd?2E`V=n&F7)ȠZ8}5 sVΠD샄|)ũyXoofN3p^ԠC#]ežF1zY]}ٔ- T]9"S.5ɜ7gK pE{ 63kJ$Gր2/fp&42s%Ae#iӨij` 8n5򴝁wZ s7>/U+'@2OHdv<.ؼIyGEwmGr]X^No >`$YF7nDf^jD5o<ϢxpKRE\FBw37cp9U]*woEiUr k]==4=<>N]< s[x3UL\k!`lQ>Ɋ9YU"W9t9=pi5&q̙FOdW~Y!p.qmTm̘^=Px?)m1"B%Os譿D1=<),3kPVDL 9;'Y:?-: #Q9U(-c6;(w9 8 5]Z@~U]pѪ#n> 9&MKԦ)ȎohaiS@xf=9 "FAq=U/Q=F*Z%d}JmIlŒWK-:րU.) |Qu,r=D)8u_khrα?I%M\go.JzC`0ܭpG*m0-jR\))pk6ݚ6iDu@'JgK֝8ʕ|c?}a;fSK2qR$`vCb{D>tAl(M(kV[gy>=s 4lMQ۷S(O+x[CxϢG pZ/I,)7ezࠂQgnPu\B'6dOĺ6md[ReⰆuOpOh,7ܲ[6#;|vh4[WN_;U0ŕ+LG:PдW U>vJوѡ8ͱQ"ZzҴo <9;7Є}Yfޤ+{ۢ# 3#v:އ{H/HRn^"؍*+gP(ceSe"ZMa/(y~t#%ߡ|ܼˊ)vHhMӥbDYMr"H>xHYelQquNq3^]9lؽ2뙊QBlhkXW6=ը4"|XD2]3 XOɈ;AT֟XL : D BK(PQt|Pe|-T@$Z3"7SX,ZdH 63^b3I҇'cseC94qg2n&ՇUD%&E7`d: %|jErVzҵYPKݢVMn'W4H(thgrK%$'!Z/Q"` (c؄LM='&4 JQTboT;Y)8Yt59eLm2i LunK-xz4 Ӱv,ET$]vs2%9PU {P3'<jń-?Hx$#~mc"R>{#g%8el{^,Eth \dے bNy+9!IѢ\\<Ůbw1mXf&DI(,!yv#/x᪌.M{DVGRbEa"w-xM{\▉cwg1SU҉]<ںŅ+Ӟƶi'e` rZi }%SE1˾/S*:Nɳ'Η c3ѭ TuS*nGejJb&i=&oTШЭ+*y/śAb[Udmq]`1Je1~.:XS:^!2DVWLǫ4'41x@iJv%S΃ |<+!8!ngAF;JIJ*`y!Q4 B/Ѯ3f#u}ZYdwsy 5>Cr-6׷XA*!EL^S R*Eh5J/a(^(vQ14mHV3g"s0lLP'W.w@YY?[>'M] Kot,cYs5Fg ~wΎGpꝶtnm 9Ɏ\nѭp:F]ΈĄ##ri^DQ`)}B豑mh93Kji1 |fQ̅U5SY]I 1 gU& }wԎAVes7~7,| !L{Qj$n8}g*l]*l ]iyH,}O5-9WL)\wf7?g"WIoFu]lrTt+9&)^ 9 oH `o5Tylb/xltƦgABY&^ x!//+m.d00dVhQnX+$ch'nyJd'ʕ$: ԰b z5^%cܴL $(C#*g;y9 7$8"ň˕(u5jYR"WYȺ ȸ1Pp*tk851IFb=S !_GMD)v_ܫ#P@{;Db{CS;eX]Yڂ@JklIvM@A9/Rzgr,9u+Lj7{l"*tO^?l| YM89{S"!@อR^ Ƹ?D*ە#J:jwەvECA-)g5#䈲 [JtU<- RI{;Yq+FHz lV!9$FWQKټuki~q׬t#P:p֐ڇq =>@p*)=uE5=x\gQh%iUh:-RZ{Tȼp#fP;$N7*s[F ٍRt=5I>@_d5in: w2PӋj(yh##QmsVgR.U1 'qSX9ǣ )Exm>KݴvZG7&RXt*9;!MK9V9rTrYㆾ` P樤̢E c*E5́|-A߻xҴjc4/idtdfȬ&4V oZ抐#rɎeJ"oEؽZ1 Q~lܴ/ۺ)C){UB, oMv%hmosmQ7Dz'M 2yNE } _fޟ_1٫W}G{ήVgYuܜq;M,&\!?͘˗YF֎S to$i6]"ٍ%\."V@u8TΪrlZ| ̾"*3imQGބ$_>&A٠D(ANg b|ўf_ta` '%sWCy/- U0sVA ;ӋBf3gBӪM_.X)d79 %תH2`soKfQ?iyIPked!*W>V/+|ȍ#*+h1e$2.R+,]8(fуtlh870sMs8&jC\Mc5z)'f!LSquseZWϦ9hmD@{`A4gfl8_]<׭,И?ªzd3|`/xC7rnFUWR !'\a RS1,{c =)mpImR6^ scWYilI`OZi<U1GCÛyvܨ1֏rȁѴ&G&=A wE1~0n32,? naZn:Kg]lÏ+;}9i3F4m>ɸN8whQƒ:*o9 Ru0i,VCf)3wrNGkS UN:BD߃"z5BJMN1ϯ1udrqxxdzoOe#UӴG3XfpeqcP/40h1!Zi,z435*% Æ7æ: \c%h{;UTY6Z#T9cڊ007m<w-[w5^oV9oxAj_ހ_,2!LtQq`Th[`@@ɕʸ׼<|f6 f-卌܄UaiM- @Bh"Asgo.)(qyޝ|lH\=v"4U{ 61aod ? *7:]-o>I ȑ#le&/cX| ͭ;C@Sގ,nl 6*fc[wK䚇xޤ 31r(@|rE.Y+:/- Ao==S*-҉B$%d(W8UN2j}tSG=*" kBKgE[ohU9]Eh2.6"wk;q7Ũ[i6l1OLhk \``L"A] dknmٳV;$ѷ-x^|5ę } M 2fW^D[J_PJw[P1r{gYI4qst>n@]jEwLm٠ VvʤV倗@ot^ _3Ymy7 P6<~h" ˚)}۝,mB2Q* 9SVyͲ. e(F/1},7l% osMJ qUB nHki aݸ"feJGCtڤ @숴Ӌs7:tMsF*@f@cyޮ6O!pɏ,pǝC?郍AD3\qmR2Y 1YLʃE:/5Mb+ ͌xROm 6ep iv*ޓg`qϡs\ۉQˉ_n5I)QsX5@{g}RlHFG&&éC J;9!bU yɟ,DB^ _-ɱF>R NbBBF9!#?I7KE7qtDaCαpl&K"U# Srq} lM5$5Tps1'TPFTXCt2))ؽ% -yٕa7ʚʲBҲ]mEܥy .c W^3e7fjۜ 6{Zfac@ t#1hT?.>0:*J{b |#DmԆCW\{y{b"銟2V˥PKER8c&dޡ=Do+b yX ԴeJh224ƍgUpwITC6O67h=*]uAw# Z똘ɦeOȩ$9cFoJiFe8]Uڥ}C($Z.|jԂ~p#쫠[X EE\e/tl'PQ4yo7ANsrn 6:읐E'ҽ-(#K<? é4qATWd\ib[doY]mcm>9A1-Ik H|Kn~ ćOD@<.P0;_.= u<!6NM5۶%:-Jnk3]v55<R:aJ^YE DsN& 8(# u=:I9xSC}dcc,[e閷 {"jLКh&!nj̅GVOu*ʚz2|Q4X;D~/$]8?B|ZB!g2 #y|m?ʸK TZyX n:F3q{v ŭw^ב>`fhLAUGD0bo*RUn/1!j7Dq+Chp׎!($hO5y%/G5:l F9c~;]HEVHk`:^+-ʽ|LvmiI@Z4Cn3HϨ鴨`?c?Z{Ú[_as gB% m;i `1ZSy]fǻWf3s*\Zɑ`ڋjccnl=)V5.[䣠':eT+̻ʩcu1T 2~Xlbm\&~e#?:,ЁTōY#}%.fЬde˫w;նɳ͌S֎8myU $E2)dU⇽DP=&]rWD>Bgrn\wXcjM]Xr:2#F$٫t t]t9ʏv;sj˘&$Nw}/nD@! X,@m_q`&WV9xjS,WJ̼!NTeOUqڑ!g&W3Pz2$Uɷ@?%Ka* a)Aq0~xҢqHSKU:zѓE&]5O2Wу}E"E/EޯtS[0zlD@֧oCA@lU@Rr1[RZZ4N&ALҤkbAiL Ð3qػ[ \ Gt!9֫ZQ*{_/kmށYtL&'R,1oPS7+2qo3u;0Vl3Jde_„dz S P: )i *4W q\|Y5 2vA$ȋ`1&&\- |.ia8uC߳A-Cx lkve KEj+M@J,G.k:A4"z$KnӉ_N}[6w U+ashEx.>tУi` aĠ 4@ ։庖QЀyW#s}ؚ>+vͥGvwYr&Z|&6<˺Nzյ.W,qmp z=NPC,ZaM1df՘3خ҃\D`ЍKq Ǎ%9M1VYfHDF6m*}2SG&SÁ#dxf% `E~oܯҏ_<^:wvuz?zV~r)]uoTwbiqq)yTlsf$l dTsfѴΔg 3ҙ̙ֈl6:2SGP|(52^'&A:2dF8Tht0Ͷ Wh߀ Cr|cctxxv*Jv.xUL2iR d'*UYݏС)7jɏQozy[0P‹-}r|N{Z,5}W7!Z4 Ey\$;e)O0eB{>I8FS4?[3TK(4`Oj 랣*k}lblj1ZZN">)LWa׼8U5Xp#]RZ"(4فDSS3쩩ccMPJ;xtnI,2lUfvi!Y$$肘䮉y[t o}̨.`gaY6iCSiӫ@xtY9izG=5tGm<݈SKZ%uk)ݍ\1U=xB! R(Pgġ`5ϡ-5ډKȲcRE([ETLAE..ngZ:Јry s]q ,^^BԱ'u=q' "̀TѢ?y{!F~{"3WɧI#y%lJ՘ф$tLuMobZm17mwLzH)Z܊ʖ38l51Ȁ*CzsZUGwmv\ zv'ʳ,}GAqofCg thy1@,VHVti ۭ\  #({WE)zX!Z lR`iSS5B){Ď:5 ZFm1j>]>TW.Y|/Z&!,ވ(u0P T60`X̂-+39)I`ɝn_ [.3" W*E3RX:!zǟwg!FfH|ZqDM8("mE> =o6QIHdـF:C3fA`gfc/1$EFk׶+hastbJV S-p``ƨcwu=C"= 8 ]Lffs0 f%tGYRg &;AFZ,H?N 俶g姥\DujrO"t˂1ؚQK%|1, ogk;oB[JêQB- KMz?בI_FreXJRU0:FYޓ=Yښ<8Hi83R13U6I>z6\E.iY=7҉R63 U5&'S)PY m#c֣uv(X73NnpsNq/|QtMml S[MdqW&=@hn'6lWT kNbg$KWgUA帺n̦8GZu{T.w?`@?OA& ٦n{emo!Z t/{ ݽK%*$k ѽ7힂֩ *m7sOeuѾ;%};# yb{dݫu:gƹ4p>;[@+kt;tlxᜱXRl nZͷ35e5!VԸvDZK5gܘ m`K F>3c*b" 1W0Z9\ѣ_mOL}L-.E$C<s.Er0NX`/q] `t52:ᔑv|^AñgM%#*rȝg'7Iqt; c |B5x1JSHî=<2`EIKO,vFR<-A\PbA뺂GedG$ %ǐFוDžZr$ԧHh§d t'4w+JE>zeD#Ov Hf?M$xI\5S*ә$Mg"Ny%HEs!ci\ A?d!ބ.f^ڦ Eӭ,|Lb d\  4+|fDA<|$W-Qy-,zJxD&4t=9XvFF³4uhzUےl&4k9~VϜ\:֜;|9ϳsKm}}8fl>}*;ڌXE0PC:|l)Fa:9ן42 Іܝ-d,ki*|޷4<͌9|hj/\.MŞcU?*uuG6~OSs6Nl`LI>/E`!^ Hc}d+[ t&' K $%Rp/K:>ֱ tI*ءW| !oat_b,q籛;N-bX@%wT ,Tdh& R:i:ї37yl/=NơıoVh:28:1IЦ^f9Nw@15sŚSg8LeULqJaćƖ8?*s]-S\З`"c}|bXD@M-LMP`7[oڲ;o&D)=rn6\C#LNށ̓-բpĀZ]j%e$;v- vTb6nkb8`N)"&ƀ%(@$U 1l(/y;[v/P[jXȄ[jx}YdUy,s*l^K2R:e4yƋewޣI0O:#iZd\0Y3\-nl" ! 4/9x) E-vKMdglxԊ;L#7~lLncpСͨx0r:_z0ʡjqްh(63&e!SRVwhT6+xM:D&Ji:3 3*JMQSzw[,whuwy-U$lk%#yLVC&y+l4h )-q]rOG\cչYRDd"?:2V[$%l-BF\;.DZ8!C\VQ/cwOˡC-jLj<'1RYEKG[+Т",qaC޵#Jc^;:B~ wاvAR%]FE|0Ւfz' UVԫ ަ. @͐KG,|-ءԱ&cN42;ڨK $R V2=:9H h%<Zh t3KFnL;&GXvoAwsK40nO3Vf%.ߒ|hxĈvL6_WJT=17--n?Xny }@߇u|7Ւrz֍&P3Knd_a!斺Q`?4}`jpԝ-Ѡ$;|L:Dc]Sq2)N%ýfwW7 뒁e[l\ZNVTDoy]I^*[:3d{Eu@R1+&k&AY_3<ԟH]:uy:ZDKJ~vjD1 F&nRhLPhD&buY9בq3G+،x D)"$Dd%]+t&N@W0yCWI`#=E d<{B 1tunE0Kq+f5#@;bgQ,UnC;hIb EW$BjP NjY{$r,/#MMYg un uaf VB!SK䗳EK Ku1"?=\ `xRnhWm 8U%"N1Dt<;iZ|u@*A)*Eޮ"6r c(o*kzb5tUsx ,-~BܰE>L5Zo<tTyU1[*8eHDaq{U AV>OVQEw*5r3`˪A!qr""sR@8^$S,YV٪w*UFќ-gMI乐P'TȄsK1y$UDQg2ylASL유;9߾P|5XkGg_[';z;~ r=}*pD}ׇ~U5UйW^ *z "8;<#]/)zLL ;zzem "?z`}q €9ܭ?{vwu=g?1|"lQnh }q8'dri܆dt{AMLu;[+1ᾩ 5mc5.4 zӌu5^bݶ cum#hMb[54JعВGO%][A ˞+e˾#r'-5>14:rX}>'HxO(let!O &R 0!ns?ߋ_92*@u^9bT< m}0 /R -M)7ٯI "*6YDo PVj'/t"1a$F1\, br+lQ6c-hǁm4Z#sg3/wڤ0Qn =a2+ FatAhn\I ͯ<;!SCh*\+RpzJ9Ze(PFPArMZZtT1&W)u0udodSl臖@y\ŔUo)%[+O9*cTD;qȰ*d+֔h,. }@@)q@M=9 ~2$K%eͽy?ZokooO&Uή$ړϝ=+?oL f=u6ػIWzcu{_WteX?LJ犀H҂tw,4HI7H7Kt),Ɵ{?ksfU왙 E:wE]u.d5?@N!'FKH8qt״ >ⅾ[B4l{ťɏJ# *}lNEwHy%7ąJq̒5m|$qD+rQiՌ_Wu%*J2l HgЁx^%y|C cW 'V˛6 n cXEfv\@LDYY,Qs}WYs>հр]iaNYgވi?/r_Yuc1X!Tg@_wBB'LMy]M}I dx} F\Z3K K7aNÙ@@h0G/É -߂sbkzNMXl ڄaUr!,L SA8`])N.M6oTP;mxC %80=NE=GbV<2w ؍i׵:wI+Y 0! QLݡz׷,b HxtF{с5u~~QfM28b˅{أI pS|f!} | Þ邮!,:Jǀ'iV'5л+vSF鶬,`Ft%b<</|N+IqݾB M]ja'/FӵR#jӀiz%SQ+3p2Y1A(䝴 2UA*9o~b 1aff' @EuE^ku<ۑ&sd=(}}(w:aFe~uwKyMbȀVEcНPpqe8"Rfr;i2avMg ຋y<V'26tcyor4'_93F]ʩ:nseOxv ~ 0QCވ\ n^(GELz~1߈kSogd^dwBd2rJns@akE a {ja W΁|Nyd#D2MD#f(SA;#.Mu.\ 34x\KXuO-VULD؅A"v?^#Dy<sT^%&tx؃FF7|IP NGKAIU w@];;Dx"*J5Tu2b^F%(Gެ"R߼GRLJLF{Mk! 37g/^`\.gSkڬIЩ.60{cs I0KN7l#?2dbl9 ÝоD;jݢҺ}&Ԑe%d#/5I h@}ŀB͆:͠bUb(eYe։n(@s.7h ,nPdw=ER\t`.$6dPTDbP *nnK Meۢ~_8}гJsZ{cbfd 8(;߳hHa?T]`D01_w >:_Vv&8&ad.4AG넚Z@vJC&%` Su3b+U^:- 5r(TfcKWg·#qDZsn"ю:9QY*yɅ] lJW@ҿK'αH5$}8~d]lm[: v?3fuœPmz7;_`qYh:J u/&nEwIJ~?d=KL.l[^.l&;w7\qѢװ]PeCٍ[V";p䥊H$o-"T JL~`lTPN&MJ+?o9iMau.|LmN.wgP& >7C/Y:ⲸezMw 7!J ۶zs7miAJe{6 )́MێցZq9 #="a*HI;‰_^y՘w`뙸fH!O6DqiB@_\sJs\1P{Z$@8qjaR Qj,֊ sUFVƧ+m*#O$Oz9:J:]XFBNƹM6^(_L= yzX/ڕXsObJ3 zci ˍ#7_,8\nh˨yҜu nhTnhxTsOsj+'K8O- >Yu D?W񆚅K>b!@{b;+%wڣĬY,7@{(٠1^fn+3k֩OK#۬q abN&%^Ig|C1?9婯1dR7o'vIv_hr&Ð mmZeQP'9?8\a!+D}Œ/m&Dq Iݓfv8צwo hKoT1~8~]1[HYᓙb٩% xڴk?O棵̀Ihm;ϝ$yC0C9t3kr]Jgn*'9^ň>HUtTs!|!.Eۘ'W]13IH|~E4Dوҽӊc+TO(:{ TE]%~\mr/9$W蕇&&3!J]a"8͍ @sKVOEoqOz>˂{[Չ%-l눒/Rvg|lqKm;?̍0v,ßKC' m#dr1-j+)/R듣EgLklmgB>>uua+J̩Gf بNZkDpTz ]Jeaa[95`d% yީ~Z\ŠCMU!R)M[M zet .ub&AVxt q ^(Dk0Bِ{%o|ZިjW`yq4Iȇ~ć&C c iei4LJY]-cÇ3N7~Vv$j{4fVP)2@&mT`ҪWOggJj,3-V ƇnI J)+IoKJ |W |;rK&A܅MK@j`%5}*؟i]jjϲkk AIfh5E#QdA[ͷ#xLJ4@j# cr|h%u5PbA%iFjG|j4ӪЇb|7qTko/@JJ@Jg%N3{%-]Z2Pi;15RɫݏG6]q߹1Q.i/#D͑duR/ =MWݑo!U%kqleЎ|4 _)S'8a~ =Ln#Qѽ ekWZWaɽ#oG5 jnι&opŒ={=aʋOV==I5? fl\)7N`S˛/ҍ.(kx潣bЦdzx ;o PwQ$U%lKF+ `/( -(Nj&+r؟LѾnހA_udm@Kk1X.G.XFmN,gW +Uܭ6uH3|hMZ3wPC`wV΄ru YMlNz#*Pc"pLש=B9kA$S9t hq.#`0L_a3H!yC0@D RB(i]t#u/#m!7TϚžL׃Uw*{𼯽OK3fFp_Zv:0 ݉uq{?cR$ЇdTMO` vf^h@ٽ=F6`Sk s ͉cݻٻe kl5C,2V,HZ5SY}eh35FOWpT9'WXD"c+yJ$^NN[ !M`ݛy3FT×sQ`L=dKL:UH,KE{BQWD 6&psxy9~c X]N-#Cv?,!e8.>vnae+ւ3Da^xAsC~<ڛD=/q-Rǜ Гu"& ȏ,Pri|cuwmwl;zi>^eN5iIDN]v::#Ba[Q#PeH`,Qt(0Sf*ɨ%Lx* _zM|e xWRrߡ*h^;b:0 0/΋eU|R5gD[\@7!z団"vj]3tlWNMrmNPcVvEk6_!RNgD1q.$(FF͠*,ұœC r1oвjF3V|Z^΋hSCVa=řԓEDy7D$bfWecƺ]zg%Kpvz-^ˈ?։;(6OYAkS|G0YBǓ!⿼a/Qjm{5i`i? ݡd4@׎̮諠<8p$m v?ZC8!bI:0kYfZ_(7Uw>yKunOni[K`Yq%}}0yqpF<"Rǃ AGLǭp|"{9kQQ71/\#t|M#uco !<^eǨ䜲Zd~5uZOy89SE4wWwCt7A/!/ZlpGVxX-]ViwU3V> P˹F4Oۼx6x. T E2M`/!Yo)n0L8t*,4ܮ' @aMC95э-h7D 11уuݬP:%H.΁s2 =t3>0L[j ZuGY5,FFH:U!h(>4Z/fiͤΩDށk=zH|\z/hAJ? DQ~-]/o*ӂހ.1_eY׊'k8GL{=xЎq\;O,ᨌqb C<옌^ycj*%d۩6r,/O8L J~|V0%c |"ĉ3A.pZ-lm" ^ɶ:u89kJU Y6ڜlN÷"nn +nc#l0c_ʂK>͸Ņ [{5VziiiՀ{ ~/YR <Ǵ{qa=69T)!D6sTNaO|O}9Qc-=g9#._4&tW \ג0']S((f%pџ|&|I֞@K/9:KTNd:Ԝ_kvԁ\8󙇞ɗ2*'q¨_YU N^SD6< h=aOUx"yׅN -yuK'NKFi;L.=Stoȼv-v0Wq4ag@/K9핮f7f&:R {,|8w`O>ښt>hC(TEj G> WgCFMT~B0u+7-5owHBʁwVpԠ76xr 'ܐiXGN oRa3owU֡fT:Ψ@9_NI8UE>7Lϰih7%0% }@N+h(} } ` ͧ%l~rxvy gLގ #[I8}>& _;Pd#%98{:Mui>uw;Lѭ/I7w2ݾ0IΨ([Mȃd#u(EB(1. (U md}d6(O͓څkQ SX `gɵMo{,~NhB5ռK;yi/oez5?ɑm;3zYM%7[I}["&ZEћS_-鏻U+m~Q2r b)NeĨ&g|1In~KP P G@k%jNH/9ORTرQSw1vVF/J+pcD6F[B `~AեDʓUǞ,5n{x$iiݿ^!i0V3ٟHj;PĬ6H"7w&$~W>jb 讪!bHZoRkϘӣ{yF],5geX%xGF}- 755}z,&Kz3Xg*`͞#SplAښ&֬Ҽq.ȝsRCFF^F/<@Xyn)F n8v2M>vA}2Ʀ"0_[Wek}{Z|XL*„Yw+q7aWXFF],z!wޑoB}t WÿN#q"2f`gh4Eҏ>+Q{9E? ~fP*,i4x/[Ĭ3P,, axh} H!H"3Bp#pgX/_Z%"1VmQ6G ܸ[ dy ûmC ўӑ;)FHLmR3W]鄭(5 Yg3u7MX7|z!uw`́3&hJ'8tKnPmkפA޽1m>)XgpRΚwbԇxm t rw L*Jk뮧W\9)H_i{v?*8wɱk(\ Nz3,Ou~jt>J7oD1~ov*)-Eݥ`x|; :!./5 d݂&nCz/? /qũrWA\9*zCHaY@NP)tߝSi*{٣?N|7NwG)Fc ?sm<ݫ/43X>{c=o*(_< h:S? uӖ io7J?K,Yv(2NX'u "?.|Tq?VGq6ْnM*,9uz;W;-q(4'{ ғM܅eJkCr9$amr7#OFB2򲧤4bRT?6eH)Pi޶uo;o:4 Τi盈9=\1/nny-YJX oGߜ(4Jdžb9vOw[Q|62Nz7JV%G'"\2LxhΣpـNXr2PU"qx{"g${2]Te6D|~a~wJ(NxBG~$cTw7roNK FIN4hR(XxJ.(=RTіEJSW0~MeMcfr ߣY<G9kz}%9~zV\ƻk>կ0.r /+Ϝb5J.R"hZ9`` BGjF!OHFƛp1Gs_H]ʸyЏP_kkkSo`VMT\{֛#?6Ky2γfǰQi\v{@*&v5 _Vg6ʐwv|bS`K6 Sbt^q\<1**zUio4Sݒ,#_*%PAqVi}ulR7ԭ!>2Lv3w_qd8+W1x>Y@yQ)%aԃ,5hJGbV2HGg6=X=<=\m C(%@m)Q* ė:yeKs&X3W$yTH]mpç]=^[˥6(F_{-X{=߾]#> za$x̦Wpk(@ #{|ůY|z0Fr5ĭ-a3#AO1C.bč>2՚nLz$#}c2֟آ,hWp+q6@ `#gQU(hN{ gqqzV_l:4Gf]A2d n/*?تOi%Q*i+k Tހ:2Ugr3ָEd~k4 xP<i8%>}yNNr5}QLHtWpKr_䷠[ ݆QO3MO#2U \SNi_s\݅:~ۜu0.sejeoϭ;=ÔRE+Zs\_*3ϊ|hmeS6itOX|AI/ s 9Ji&wZA)JD^$LPFǣKb}7*!)Ӽ W\xJʪzhҊO(!O!oYNlS\3%&] {ե z׈]s!*MH)"ƫ{.ͬ1cE_B37?˱t2N씞m~xWI`[wzW&&߮T9ԴDjZiV(֝*@ ^7ic0ȼ`ժgygNv*ĶYƽ}ucιRpONdZ8fgq?Yh?3qûoH1A~u<b}ɗ,VӔ[oΜ~Cv #}9?ٯ+0W~].w !Fpcs|ubGX*q#{V#ԙc!N:~V{4/{0)[Zgߋo,\xϜK{fO&Mz,~N1{fىSV!15zƣx49N>6QhO3^˲eԐt>&x$W7tߞeuK%NzP*]ɲp[m)ޚzB`bnoER鉆bC-3@(޾-(:GfQZ{ / H!Uv(ݣm~ $ (Q(iw=Cr N&Ġ' `hfp^/U ߳b=GYpF~d]zWPQ\TGFE@=KqԄ zMy冀'?9@v;+3Voly} M,"1;o_D"u]<%coD宺J=RKO`۲d"h'nNo# uxyZźth`"fw5cd$4Z Baߧ1Y{AS2Z$tN[Eq&(xܶoB1V,w 5<*& ㊏P7~k T.N\FMpJi19([3_T>{0eᢢϋLlcv &?x $z24[ovFUZ|trA֬m> #h4UpAU<1wh=;X'k߳H"E)VwW#oZ:EjCuVXƗsa/} |o_lUz>(˚jP&zErvl"Y, `{6&zuNό٥c5NVY{Nvl023stŧpI|qnIlaaTc"װo}g1tq? U6_JqX /HjUm˂lWVz=W:ܠ^9j0i%*kuthIɡYVV;ᏧtlM_zniB"SfZm$Ecx {?+C#("H$dW~ vd;&mn]+?*Kҫ+ _ƛ3 K.I39?Ws)4$<`>̎wDz6(5?Zy~aU9]5ekT:%Ɇ Ȓ|]!ry&:mogÀ2o}N NAM5oM5\[oYO\KD$Ŧèw8bv95'vSK)?dz׮'b4w|Hj^Ws$"o~Wt[2CjY3{-O :}Ǜ97w:ޔGd0  84|`] ovӢv2놾"4v-C^dV~6ڬC6E}I ?MeJ!ݾ.['eU!|%v7J \Uj\x|\[P}GK@lm;+W!(Nӝ 鸆VFH_λ/( J/d^ұ[DvZy-:|q uYj-X4*Uyx* C6?wݒS Ľ}[%&538nxrNfRDnn^?proXV[~f*R)Y/TzT+#?OP'm[wILO7hBGL}p !I9Ry+O&V&GKq8&h ae/ҙc^UmeԖ!zH.wʞӏ7-LbXΚݣn8vewy(^r68jᤊD|HJ(QȣhPFhRe@ \ዣlh妳3& 2\=Lj7w7>PO<^{p*BW4!^ӵ"ORyB"A5+5B!F˞Q\L`.D>=D27W(焔l,wij3Ko':Ss֤c{ ߼Jh=g5%3MA%B[ MA*qye.BYsd,Ϫw BmO8:QՌJ[R"vG֓6ƔsׇE^AEPRy{;nsh!^|ԃ!D6~ͤ\޳3z̖gƒ\:t(x'x;xnRN*xYa@!OXinWL|~ Y +7bab@$[Ek0F bQvQ;|z=hRiE\rLYgakdmC7H)?z/v.u.eYbǢ< *NbwR?F<\uufIX)T,q/#H#)e@Q`J󃈎Ig !קj}j "ҔO(mwwa׶MHG+/6dah; !6j`2caj9Seʧ4tyd@v[DfO0$p;S^=eB+:ٷ\bG]Ygۥx?l‵y_lN x<1[>AJ[+uR[]kKQMЎ܅udGFsMM tV![&q^ƾdZj~uJRJ'BAE(s?QaBMh?cvX<3sj +a XrTjj^ⴚm@/^A15NQ96} 2c.LI9X+vb6ڷ%==w ۞?+wfM w&ߚwse|0Vʎ'J+1woT[CG0;nЊԓL]|ƗtA|Ojd_J՟|04|@Bz)wmEBX/;j ʝQ9 Fe-:6a=>3*yH Z<} L+ZS3,t?<: Ga>=~P1/^,!#C.=,7iwAŃ9v$t_v`R>Ȳ쑰t۱Y !-ipMp"cW?;Alu>-+KmO1'mj=[W7}}̇/t4kKojnGWB9˦\Bwr%S39ezxU5OqkRߛSFN_g.KZl8/\1UPJwfDַhZC]  PPf6TrIE汖OS,6!>oȸ=2f=Գm❤Ln (GrFCbk_Ei13mhn7T:2we]~x;p4<eoJp+~]aֆs(Np"{ܜtYAkQ9,m+J%7i3c ysshm{UoXOg_oYo,X&8tZ8+ÜY=Os ~R% >,NRbk8\ڨ>ߤ0y1~{ atwB)c (t=)riylzrdWIyQ/F)6PՖ-oGHUy0I8o*l]S,ᓭ-n&7~9WØ%TڇsȆx>-_t#<- v.[7O Nl+M F{;OP9pT]/\Չ'[[? I'>row<.y6k:fU^%{nܢ}N}<ۋʷCAee}=Nh(?V_*E:FF $Z%Gas_czn%ӻJ^6T+t4l?WiDp wr!63e ,Kۅ稏6^- -OlJ50SlN¨ ]8 b8o1)@2@X|'I%^G^CEEМN|US!Cm&i,UbJnFf5dhh h35rD89=~7oÚA6y olNqp&GNG?i}3g\6c{.|3P3njhԊm쫵i>ˇݩlz؛B{ˮȴRӣ~o Ze0Mo/I¸/Yy\ػ #o.^VGZfէ 2B~ |lLzv3lv<#Mkh>(tF:2s1`΀Ċ1U𯉽}Þ⋼:O %"Z~6c)hO7 AKE.`5ACL&H[6Q,q^ ?th COk˨;)}|<#.t |εie3QG'|a^mGCsvB;8QȗE\|fNKwξ-|5]=֭L+u),(^fŊ/K!ZWM-oإ$-~z[ZE~^@@?h=5r{Dm'lDB r8E[: iUqxk9#.vdX+~ \[Wv?'Ox><3p@% :3, ㅰvjF k5n/&LW7\{ lpw _xn"fonj2W_WYsR+˽rʷ)rVps;쎢gd"%KzܸƓ&yĞO A^kG*r Ф׹90rq A<t?V@+:(oq%{m}[DM!J@m0_/VTy)~l8-&4ݒk9{l{\5L_2AIß6&~O +K1v i8D7J}8!l ۽ݵRiʷ_Vq]^kXx@X(̘B LfCQ[V+/e'¦Cƞq]&O8L`L @utw?0R '&0Wߔ>ԾJGc3S*cIrHЖi?6>Oװm-츙G| ('Z}O8玥ܠfU:=ڝT+:Z?uȜ0+% S\;y1"eC5[.䓣 =qvGo.;lyM.X( ^[&'-VdS=^}XNAiɍ~D_I%PN=dǻuK 1)7s]ۆڕXNB<~ﻺr#`} <F]ָ؛a6e=:C:set=`ݏq߉5nNUd=0:iqÓ5 1[N3l[56]ljnɰwd&ucv  !zI"M ]Od(llDQ7"1=t YnSU,d-h>Cލxdҙ,!G^1#, e;F^QC?J( /\Zhomq4psf r.)!U@kk*Ak-@!}_v.,~W~ϭ5{U7|)_;az?\A&xmAtqWgi)`8JKg(ʅ?Ce72Tt4L/'9t3! N>~_&j#>qW\]9Θ|ȱ`QsQ' @=_ B255$ôrN6`t Z:M}DAsL&t6dxx60 D(MŸn^Yhzn._L _6o ΖJ_ 'e J]ԽA|=snm\qgف5gsZl8p)?cPy!sރyS T’t%D={)wשCN?Gy3 z[G>T)玢1e7iP)iF5ꢸ|JW O%76#ݐtXvG혲vQcB"dxt;he/kZt|{l6Ƣmʊ3t vgG'mHHM2oVs *zB3z/+U8KA=Dz㊣wYy[N"[N|'څ\Bq50Oxe8Q{2+p-H;BqW&lx_z1:آ&uCg4 ]]j}"ܫ97 9)+h80Q.=~* +edk)PMws]Ya:WG%KS.E2qVjARx/)k?>"n\dH,w9K-XPՎh/GPM?{lmV?Ull|?Df0ƚ>jvH~NeW_޴\7>]mcbZyЁ'Wd4>ώJxXtv+7_X(L=tF&DĖ;~e᭳Z=;F|kшWyVEO.+" >RjZX5T|3AW+qZxej5FoHPwHφf=YX;yLJď2ΖTWzHYGEWr?V\П)>zwytilPb8%8?oA,E=;;Xd;U?/UP.AJ;Iuɑ˗ Uy+C?DBS/IWXjDԛCPӦJ% ?OXٕl=)\ׂr7LS-ċ 2\(o,vp%&+> 4W1L\7h b/`4(~ iZc_"KAI~[jըB#`nhT+z^і`urհ8]q"@·+ї]0~(f̽뷏T03af [#_n#lQTvQϑ-)Pvٶ;xq_Z+t!%t_tJѭlx)xȯ}s>&NaxKXio?.y d[$E3gih_I>ԓoazwсH+c^)K%jeK  D*ę3CGc&^Eև8OavzBrEӬ$SD~Sƒ_>dk[Z ƒgU\o"Ο2˄AA!( r*[y:T 8Ô˘փ&7^3}PR~! SI'eHD 9 anw"Ƃ|vB&41Y2I:?ت򂫔#]GVvi}Ul6{䌰vI?gF#դHyb5+-C~z!=-6{?[<!yTpP$дT7r8C d-,3ؠ怺? Mut"^騽'Yy&@X]/}@MfI݀fCH пHұ p`HNSr-6\Έֆw1GA&H0[bmȞhVj=ÐK7J~To6XbR>DO~îuKWbvXB d8BZZks D%ܞ}%jj.JR ;Bo⻓9x&;|s'ڛ8c;8<7ҺP߼V0Sw.$?dSZWZ;\h;}ilۍ{ڰY:.Ѳϓ˷^g8@53t#Ed ]<]+u~sdfTDojFJx]I ̻VN\z.܄icDK ] txJ~7fȄcG䈩'V+X;1=;ځN@}/GmN[dtqOB /)G_Tؔ) h6WbUί;RRk9(+^ 46AV0E22'"朗U,OebOvKֹ'%`ߙ,]lmrKmɆ`)XT2K[>>-g;qTt'd.J %XV+%[KDߪ>>mg`ė2.MǑ΂vb9}k[078m)'m)=}gf7HC@J>"qn?Swjйe|\`l9Wn ܽR _@ގ6;z 2_~M[ 3 .^:=PB,u9B:+pogw>OͯȾLzMٷ%c]{n ' 5 oDǪ"$mw~v{J%.Cyޗey>`{2MIz脾| ogycn ˠ7!؋ H+.1_v/ ԑ)[a=yۻ\|-wT3`v'M`2jBk4&8o"IN-P>csR5XO:|=cjW흎II:J$(ܶ/!;s2/9^}I83Mtx@ 0Ζ|ApD#whD78lmX6 颍%d4DTM[.PJ㝖)͹{#xOmC|[4J8 Ɩ[]9w\(;]Eu.и1"YW" n~}V97NZi(ۆ.n7q NjZEXS^$Ӂvfy Noe&Q`6h9}Rx=ˈ ^ NUᐿ:k/+R :0o!6qC dzG x}ܭ2}ljg?G3E8 o|__E38~ߵnl 6a5킰hb#@yKރsr9!"c1y/PYsU` O/!A|TC'tXyo9Z@ffRZ:f >Sy[H0q΀L?JQv}UDr|,M V7Θɏ4LL168c);}%rn:g Q/"FοN:ۤ?sˮn~6̛sYAHFGLoAIwk:вyOs;? RK"T|@H9\ `11~3u oC_R|DM508(@K #zwHb@+$7l"\Du˵)O=ABViq05ԂRW@}ӧxYsT;!J XY]g~M`Z9G .U@3љ2b{o$&YnsE-բ{Ξ!E6E55BxT;H煰j<(Cӯ}yB1T4\s[]}]SW]euscoAcnVF1V~RmͼZoQe?v;K]=w"9v;g Q7["5;\C ϶wk̙$k)HRsϪO,"$A"> GIp?GpI [Rž%O$fcֵ>UG swT"`]z&~Tc0PXn柚]S'}7xgf{aCja֮G6ZZQ[fFң72[Z.@$DOT.,mrGw*8o%1ѝO>o9#9 Cg*p7' ʾв## Ev '#6a;N_F GP@ɧmWa8$H< \Dt[uiGSWK>S [=˟JB+[vɛ1_ \-O3r8 U=i=[D0!Sy~I9ǹpŜW'!kyU+]wdjuo5-.( 62hmNz`}W͑S> G#Nv&h[Vc6邒g.|{1:#"Fc{+fdnbgQG2u)D]TSy"V# ^è@ݴ2 qmrV '%B,*2}']%:&p-wri1~\R.\XDFE"YE\[j9$I,v+ '⡚*ʺpۚ7yx~$W֤$MT)2 "ȡPڴiҤJ6) I(Md03imd+\EEy,^ǎ,p岾Lޓ9~uEωqe婆G~^6cPSʯZԘ]4r^\sWժÝ/dI᪏[8?Χzu{Fbӱ+[st2/>z#Yf7ˇ1uIGGn*R9l20~W,=&y 7v2ws_d[6~ /WgѷXI M'vm5\|7y]6e 76_#.Y5Y`5Șv.nIM˦o6%L܏{뜝*M'xk/m̵'eC׃ڌq'>iuOضfivW5l_Z?Ur5W_ymxGyqט)wnoyyB1[uli;r-/nϘ?ٵ`F=R:i]G7_^m7[\W:}:E*'nQkSK7Zr.nfֿ} o^8s9- <_{iT;f60ǡ}޴h/ޫ',w9{ɡ؝)Ӗ̟c'g˻n?uy9f|>y,݃w~k?kˇ.6J}橼ӽ޻zdek{Zƾ/>mjuP݉v];s᧋VS}sKON<0cUמdhJ`Ͽ ?lSNmY3lYx//KkQtھTЅVggt]Μ6#ٽh>_SgVv{'wzJv=p Um:ݎ}%_7abuވ~\ԸU܅3w;woiƎ[:t݉Len݆'*[-;rɞJ|贮Ǹ! _\}Ns`z݈"W -]0o_.uӞڒџ%Ǯȩ \|jon<=$pUݛ*k/-+.['NOyͿk >z{wX>8+c^w4?wGsLtǺ>X_ڶJ6ō&o{ɲz6տYW#(ι73?_GhyZRL=>J@n^>ᙙ ǬjPM \Z7jjw7>^0/΄[uyw\N1;Zuҥeϭnf޽<_.vq[[7f34;ٶك}X$BR%g$S))dx22M~KO3*=9Epujr3v$xEhwW{}6设/avp#Q0!w+w^`K%#.L%ƕ@7hb$gpQA}PC g:)%*I*8kR-CA$GyP(ޣP(OA9q1OIK@fVy,X +zrYD^kAbGM]AiP~Pc Į8/5p^*>b/P)Pt3LAZ"³0l Pl)VPVj#LF#jT(iuʊhSTpш>%I#)Zx 3$ ^o5%*~?K^4 t*Il0r\wXuN]Z-FHFHb2(Da᜷VC>Aш%WƄ[ L"Vn$xaB'$d@*d%MZBVoi;Ok(01 XJzhWXa@"f3K~ +,iF-XO"wLK | XM !)(B8րK8&zP\HQ½&__ 5l#GS~:"|yHz6J\'>UR;l K ha\eQ9(EY 0~ԕve$W.XbI $UqK5Y}?\ѪLó(x.iȶ fB|s34GS.ѥVXl O@4Pp%6& {t@FmX :PKG `i @bcԤc]Lef"sM: j0W@/&4OVP.+}-Xގ-G};cood/y܅=80 H )ئz ۍ `Z&2 DU+r@U W7Pp/{gE-alACI!$ âNwuI%$Y|AqA3:3#G|ü7y23GG0{9]7:R|s=w[UVBБ+-GoM3Pʢhb*cyϯfϝK/23:ofucNtqo[b:QSnDi,:" YGRIrZeEy>GZL$]$ Ǖ!yT\7uM?̾IZN{% wSňF)=}ݓ%{~=O3wqOa}Ι$a͙$ Y Hip6mΌFIljU_t}S}q+߽lx~h3+giE+Jبj^ޅΟ?lQJX>y1}:lL:axeOo}fLG`bu(KNNH~Xjhx=DMB.= m%FB0Domak,/. i#'I8ߜrh {}l%r/#c$$+$eE$GM\ k,,5!Q7).N;T!N>HoܔqJJ MR |OdGcUh%NgX|Ω͵ϯ4e슒EgIVX3KEAߥWV!hChkrD}l_,QU4&΢`AEo#A+k(he,dI4ȦZ?mTğ)"9V{1s^.}ErRR8L%tۀGg)$ipғ@r6b3jr)4!aw8`~{r`311bcՆ^Кn : ^60-.C|o1#yq}G#6נOxWx=o1>oc|t@mX8~9@NםAfΝ?,yD%;?wͦ?`[m c_[ zk $TҵItWNi%HeLKSnXښԳG63RLK@*;zrcjK9em3)iٮL'fߖv{Yjգ{Zf[(O@Z^LBYVO2#4Dk@ih4zHҰF[hDm4p; wp p/ C4}w_5sglarTeWϧO{y禧>x{[xք9gso[Yб❍OWm%_}6cVxpQMߛ?zj_Mo>b 5GJ nt_\U4=)`_rOOot ~豮\>yRpy8 r!}? _?!]R!/Xx^OߡdY>G8huA`OGr_#0׹#,3v.7K?tAZ(cc'_[oIȯ{rS3Oiy t۠~m@H%`ANpKz;ӠIl!3B>M-^-4_ ~h3 i/ sZw .ߺ[p.| ~(_ }@x jHW>[1,|+'F߾Y𕐱q;: Y/Cv5C0P&e[\'\&x+y[F~Nż@dk x îyP.@~mu?EnC-<%_=/k ԓ]_  Z0f y*}.YB{Yʽ'ouEB_fOmt@? o=_y;\wv?~|e@?yd ޿I;' ~|zڞ|~'; _̀t3x_ O^ ,=_[\zwU,k 3Yaf`,|-.6 lǺub,NY pbOn>F&`wÐ6DksE$Bv &hwwDD`iPitz#?ON "ͧ1ς*dVgE.#vME)T Մ*gŢi,V"quÌ!%Ǫ$>~s4S,w;}NE"28b"Mɦvi5,%#GC)͉{y!fE bkr4/+M״Fڐ#^UY2V^-&r KA{h5_ڪkTKM8,ڀR>Zѵp--72bPy ԨZ&OU#~ݨjnl@ |>՝<*z(cW"Q:O;QZLM~ /`R Ӝ476$ǼKЖ.#*9Q>đtn02U%a[ׂ^ 14YQ@J+Ϋ'r:}8%]5/D5 ^&KdI(g9QL7;}QUt=ęZ9dY:dYBQ3%xy$f8EdٚU[d^qU:E*lSԱlt:݇ 8|iDy&ּnhohhvJAu"$n>RpDPDI;`1PZMJS=+5IW7U?>c x> ݕWV?QgC5NE>9U^`3ir^C5ސG xُTdF`\qn(sⲟ *ۉْnMJoQkºFc1ꍲuʜufY"=)ge@:8eoR(lYz?vqⅈB܆`KW!> j/@Fx3!q -_=g" K߁߅_@R[ }g!ކH#x;#~ Qw > NcNC< x>"xĭ ^x!6' ^DOB ɈW#>Zħ!D܆x#oF|/BbAm_g" R_@J[>g#ކ#Ўx9#ށUDqrC8 J3įF܂xY/D܊" _ %"~ vįE q jīE܁xNjw!qW[ ~3S"^{/p DhQ0@R[B&p*ےR$Pd+A!Xw~QW@E EZ;ܛ|^>s̙3gΜ9ܹ9׀ {oCN`W[BÕ9q8_G(c]@#ŷc]ߌqt): 4PyGvU )~7ѵ QKȡmGW&F[1SG&H1S@G&pox"՟S1ލOk0~1՟1ޝOQAPS| /S//S2'Q)~1{Q) Q)˩?{S)ƯSEw_aHS}S|;ƯS|3MT~T?T?T?d?x ՟w`| ՟a|՟b|0՟BOS|.Ưx՟S1N5JxS|ƇS)>T?b|$՟aOF(S)>ө 33,?ϾT9TMTփ6ݚ~ܜ?]:?MN+1ͳR!wMToZȦ"V! 2|*n`+gzQeU+kIxh<:xiۧHU⵫7ó7khueeD&DHCFMAƽ`Dib236Y01J41ZʢU,aRKe-@RQ.d9 A'<f3A|.h~v(r_[%^t&22 u.d4ی|z (})g2Z$u:Գ/Ĝ)Fn` 0e!P,&02%XYBkFie;bc2lmehJEd]Hm|ӪXZxG&*.i[W}_:ybzVQ:f4ygVYku)vD"RR4zI;H]|+Eo}SI}K/I-IcYby,v`17`C~ و #77O?_ 2&F$J&~gԀ%lɗrΕ߂/_bYL86kw8&V ̾  L#(GH^)Q!}]&ġC(ofZrk`N=pRM:nΕp{. 6YX7ЀUʔsOF@GJוuHgŎb1eZRZ mqꐯw٥I0cQ\g{̃ʽ)q30;X`84g\cXdLVPZ,u-h~!J5Lq&,{ j;1BI<4~E 5jrn3\F[♙ KMUЪEi^ɦNHDt[޽GBl/˭BŘS?ZŦ :3Zf 9|yׯӖJ!+,nΰ1&}&m׉--:燔֦bT6Pg <+/d wqlrJ.FgC1m2l5C0R_$ŷ"dXizMq&1~Q:fGW(_ g|)w ÖMR4$fX;,daC/oS;$>x-IOUF`Q{qyէ{YgM9u:Z% |\c/^oʃ~ـl\>TUӐB'W㐏Wrlի7%BTW|᤼kj'c87岡^C@bdX(﬇ ]Bq25;P~8MVl6>F笋|\tt6tԛCDц:`C5 gҠXg5m&1J lP_Zga jU.< PkA[kB 0P RVʷ߼kι4vVi 7_hn_l12]`졦?9)3T. M,˗٤wud펋]m0ԙ\>36;uE1PG -vɕ(&̞9ۥ?fEm!^.AZK2 kIK2B 9lɸV73MӛCi4ȽTT@\Hگ|BM#T8_VÖۼ=Ĭ_,Rp0cYW0WH^م&IS9[g1l41:hlG*\%1/rYXw}zjOq:n!M?6VM@sP1>h܁iTvD Z 0snbFCfa`sKr'ʪ`34\l>JTb޼ En8 ;oRr$Iތ1nA@ Iofw.cYN2̛хbW@ Zh.1:f,b r C@wXZ.e`jYw f[Ѕc4|zΟɝ&yФ8G \tZcD(ZzQ^#:MMmN f3=#tQbޠur3Ao >l^"7 +)(8?DžՇIRS$MJMbJQpݬi #$,݇ܟ ʱq.VY rCn{1@fܩ&Г6\_@*j5d~5oB6B 6@ V5 C x>u7V@gsX4v2]p_7/?P -5Aï/| >,*0P pzg]oC $mǶJ${:F`uհij6MWujמ&$Gsx3xP `\6/Fnr~Wy[r3D4G$$qCo_w|qX\3N906w׬? K%?NZV^{ϛȕ?7?$  RD:4?|$Q-uJ `u;BȟnMAk 9П VlQsӘM~w7TLE"% LhdR9^`ɺ0Y"}G\%fsH~GO (Hպ T%EvHĒ"# f4~ڧ3~۶>DrA6^-#{R+!O 2%Gk̥B\ ۙ8kK>t|`hXOU_Go^dfb".%&&C< C>C&>(31rAؒo |44PXs2<Οs9VǞbdwp!y2O}9ݪ>\Hv"3G9lÝ?=OޢrZ =ONGT4<%rz[F^9džrZ'%+IIo4'(Iy֊')I` O$'*IyCFX㴯i~=m=I&@AL#|Y A£3oߐ۝T)9Ol&J)cՔ -cIMbJ/HS T~u׍x"'Q֍zd܏ dzvz_Gߢ$cYVBs;Ϛι/K&",(,c F7);@ӺG>r'h:4hh$jTviY M[}"DN?ù=8y9I.%8Bz~ٚjvt@VpB5zHFw# ]LsI1QO);9&}h٤?.9&vDuoz $X Ъ"(-&Ij]Jt¼)ES#0?NFӐL䛱\Ҁ{.i&4{sQ1]{" Q*%1Yx4G&6Qcrj/\~BɺaL(}5[& _cƾ6BRv'ELΆ0]+Г~Ԉ':QU;:dؘX]R{蟡 ?/r}bzq0[F4"X:, M[xܻkc[UWL\s5ڴ_|}imMh?u]dww2e37;`K] L?,0h<:Z>zwb1̽ m:F u(,`P YzX{inϼK.}v#vd;8n8K<eʖ/CsI9IXsi^"[!_3RS*-qR$ej;)/a E_!(Mp p^]I?.ǞG) )0C'8AdMȒhYT ;ycǀ>ngԠVܯ|ݽ aozģ0%QrkāL:jԒ"vG0V 6LJZR]N9}.&k/INA-u1BD1v [bBV9t$wǡ#h~d\9WL"-=䠲N TKۥ@\PۥO6KM5̺`hY;ޜo,I#"ͰK.c6 v\rޒ~yL97pzQ/xgg!l?&KBqXpH]R  ͻ3gFƃ"_P܅B1,Oq$cFi1l&DXP^)V/jiK/\rյ ZcYVNkQ]wNl 1+ cMԉ~KM_eeJ, 6U:>5gS& [H́al;qCZq=wv=Wx~oBz. AAX/6_F}M:3O: Q7_u;tLw Zٞq_10{o`3܉G4m"Fk,v?6Կ) ϑ]0-pzy'yr 疨]ZB%o9^]`(]⏇;Cק}@y(㳕|B.^;NpOfagdv)8SpW~,atTI>sqA0hQwJ8chq7dC_LN-:ySl`3&dc+lY{<&lYܗOOv IOG?>\@}O1/C xD1ypt/x\T ݴ:;;locS蘒 X:&1_41b܂FE& |>TװB.}l ] :lۮ;!PgH&!o%?IgdsҞBýۡm< ݇/1W|B_SKgBsg#a82{`0{D_!i;Yܬ\!\єwc:$KrzT hL) flW:EMfsGLTAߋ&۳z 4m]vpؘ]Y8Cc]3g0G{!C\1_͛*4# y+^Mf|gtTWhހf%  *4'72N3+SxcmoZ$~=# c~sA]/z݀曪E5R=9o7, ʄh>f9`E_vG ̿!&Z6攏҉Psїz=;lk<!35ݎ4ĻJ!|=O?;<_E0~Re`Y[lR$_rQn5 4kH/ßfƎʹUaj{0&G$z} S@5 C'1%#_20aE?hɔGc]=όm/:㌨3Z}q&=K?,!".5f6$ 0XZ·=M^O뙡z̛)ҒLyh@J9?>}t gP@'/ɧuP:-c`:=3Z=O' PDhBGYΫ{` FUw MU3 x'9v 0oGe}gRxox|G`YHv)ۚA c;"dYFJD$p2'63UjucƓglzghi{0UʕE'%jpٔ׮C-Jg@-'Bk֔ 6yS?:Z1&$Y9MF eOgEȘD#Lݐs*mWA#5 h}?5;*ޖM88ƅlC=cPNz]HKzc ý~%(JE3x0#5QEF*i=['?ARtdz-ϋ <Sj[dC*{|q2ΞYMҡ?LgW$xnppw)d<SD*[-^6~aѓ8g͎1[t)fwjiA$q\Q[]cïU/4[/#SWV)f"7;UnvIooF"UIܪ^D;խukX.aӑdzNݯc6&. uؒ .t`"a+MwPRPӑlZږZӕ/nnIT[.l 8Vzuv"flǭv4V=gd7%1?1i s̛h2߅JrJ?"⫀LR//xF{J# $9f~C^ת3c^n E:JD)S% ߣLf c;ZIw [(ēT4bct7ēUńe-]h8KC]pinz})7}8yqQr*'oAo`1X^Tj,G%TXW!JU};]?mj" n|7K yl,$'Gv4z#_`*2`+ר(~<=E[鈤~GY#C̩p>~sχͻ y9|{mKˋp/Go#Y3ic%'n>r>$ Wq>lyM8\Jg[gnCh)zLCUBk9(JE_Gt&}ҒScqU{̌je|Q]&:Z|qy9e;&h6)*]?+B[2a۟..dc:uyKXC; v:OKMzjPNUvgk'Nz*\S ;Dސ ~Y$hmǓ&kܨE.$qu62AZ&6tZϣB0& Ū>PZ^o_qڊzk1*]hwTۯe/=$Zrͼ1ř,I 1DO`Liˆ6qLEeVo b&=G=ҐRBCJʐ ߐ-?Rز!MZn2kjvmQ ]Wя lx-v՛=DZQjs kq{e=݃ wXȆkҫ]8#;w`_t /ʙneMtW-HFٚ6cnВ76b-:$,"`g-V:K"t=~`//'; Quѳvێm?ʼn8y޺w;:{{_:2z[֝@ Iv stLKߋ,m9,lۦfor kkE~ՓlM?4s}JM7%9X;Q)*1?O669=K{8x mt`=T6Qi)d|=()#pUܢi?C*%EҒhqּH(3B|P6؜5QoX'z63z+h]`.Rͮm}7kf~0mɶőiD"TG4_958 Z2)\-W|*10'%-L:4`5P<3~Lt[Z(ཝ=\zba4ke8tTVN|מ}q!j*~w&JEy;.O2Nm@yoګ~ dtwL<D#hm<^w/"@~KSB{ 3rW3rzD<6yq0E)ƃ4 45m&v}F̆ͺϽ/H3Y#q":%!j`Hxkd#*b;I\aȑH@^+~檖!.xxӱ! <'ⱅI{!BR?=K&R[>V@>+ 'J* >ѺAt60"LWf $ԭ{{qŝpg5 :)hwtf(X)+/a8w0vկfz4=Iڔy=p)x<Ѱ=օ/HXn꾌/iVdؔ_:vWPx!vɑ~j2HiPo;pWebZxAYJ]ނ2my ̜f -T6ۗٗ+lkL!:g~Uz:@V2|؜j1X1He!S@zl=r/dt}ՠ1ip^%Gkm܋aN$ФI%۲tj p)jir6k{/6Z%mЭ:kѢI'NO/05a^HMձF~*AyK;h\~%gן&bCa UݙdɻxŶKسtS壩13o&!l.(1fw5>-=czfLTg { Nǯ_g4xE8h/ / ʁ! ߺxYX:F4=Xfږ7^m[v384_o~o;CsR>(|Ay s l?_9;8U~Y՝ᷰ{͛A }*ٻ;J/t2_>O)5I%ȞIfz 1ِmB w<с.!e; A-FS1Yt趏sg1m6JŸZ70 uc4 ʍOAg]~b4yUl"7xH)w/Os/g-q8Y iI0G,>%QFci[^@"!>Q q8:6t!5m0 Iw}dP3QlQ Q`-hz}3c֮+$fXO bҹhʳ`j7)#_l4ST d|er4hYK}5JZ|4|lM$n-Ps6˲:I.MGp(Mh? -Z:v=BwgQT0 y=`7X XFlSbnhT7Y<=bLyMʿ7"+G~? dy k&g-LL LRnj ͖G&A2dI\h @) w#;Qi<{x:fry/ӌ.wab,?$*ff.tX +o嗟bcL,ųv- >^HHײѣ)߇]oO?ׄ݇1}2^ Y-Lg&wk.cXxDaHݑ <$#tX8կ.џ EGhYFl As5KMc &=3#gdw0jRf)~cҙ%d*_n تڪ;޷^O٧evתZ/k{Xa՚JomUƩF[ V`tMEѧ`H27 ES}yϠWђ$\a8mtzڍ5()Y%قWA-xXV biJv׈CUt+fYƒֿɵFwEތhl yCЅFGk8Oqmc՚s OǒDَ b&3]!DYJx/Ұ/=|m—{߾ ,VcQ&w+V%90MMMB@e L]/r <袏crw[NvCNY Z3Ì>>]gぷζ{0^tc5gBkxo]E"F<|#{:x/ H=e Yѽ]; cx=M+ý*֞V9#9^qxxDpXekt\!ϲ=w(Y@yaO9 \U\iYtr41]Pu-JCIXSn{t)VP+ z d7 0z/-dh3gƒݟBihy;4 àԇoOdѻ}`4@$JKLZCcb3]ΫRƤ3~y׍ziQY#-TǞ7 Q3hͶ| js/_&MZ-֑Ҝ|u4c4m`%u?YMb^3IUƭS(\ʨT>xˍӪ7TW*(yjG~q~_/IuNW NyoO, ۼuy^>[2i=n {VcF PFY;[fk{K^z:v;^GYvKp]c9ɡA>͛<8/gL2!N5&:t4R,P]̓>7[MogS3ws=LA ]^Q]ِWT{{ۥIeAtcK967%++o} 6?;\O3 W/3|FKa:!mV&Ŗe` .yސ7hK 3QZuwYN?}#žׄkܻ(TWJeWPo?K +k?˧!ӍV\+4YL4R?7# "}I9bβ; *~W ?l\<;AnO]WRC7[QM?L}EUuPgkZq1~KքE3M_j4W!)'?=hO1<̵ك2^){zLO0@(N鷇aj@qD<ګT{Eog.J徊 ELF锛b ( E?dFny[Evޯ?(SqTpM|K6Q~VVGkզ|+N.Љ9rJ4>V_[5v'.6BӾkzi8~ ?:=¢;e&ck8nm!&IM9z3Tpשԍn6 {T |KAc2#%o\s/*ywOP#B[`߿:ϳ4?Eˤn-"7 L/Qt^bAmkt k&{M*{, ||^702{ V:)t״S/.c:)]΃[i!YsB41/Bт`FbE=wQu~ ӈ!jBcN_\-M kg![n8m& og{Xˊ$7`/ԲM۔m: }`vk"ے ^ԕwC#/! >c P}(b4=ڈ5ZJp gy(.T2}Nb1:CWDvzu:KV[.}?|`=?e1}>yE32% 1PVf5Jyܾv>eF~tf9tbVX{Vv2neݛ+}̾B=z S@nJ+|ՙy$B?]k.R](*7 ejz0oby2wYeĊ; UEn'U.0G^Ԍ|QTtf3'e9>$Ϻi}54/=oɐRBN-,crȬfeVV0g9TC#r!rQ2+1ShSnO?rAC56J)&+Cs;:O.]] &WۚrZ9$ wgN.@Dn_^Y1ˋ v#YYRBdVM^CoQɢд΅L CJ+а qYb͍Uvk=0 P5y@ r ^rK?=mWC}+Z3jGuIoc ~E'5.(CvU/n6Du/Gcm2V Z PP[0zt m7H?=.?բIx=|D!2г"SW]@XVQqcBy̥HqQYϞf=]m ӘJ#TJp8].H=Srq<4\.4&YѾ4)lH9ذ樬:C%A9[mƁ*gxYJvQ,aT;, Tk֞Mt+ڼac4\nوPӇfsE&Y~ԂZuPRJF'<2=Ѧ9JǓe9ve̛L`s'c.˩FۼJTp=jONp<\j]qQ5̗S'*#_;e? #{19ƴ2V$t[*Z|<4e,E h}vs3s_7%LM6++0kYT-b.M2**e)-:N~:TJ>Չw?Z*+.{9{sʨ`YUQYuk5 t2ԋAv)?ҧU ßF8% MEyT fŠi]d SqRk>(kkazM#FE(P'h˷QˍFa{Gd* +aRվ2K(T `Ӵ(d?@c6HDzJ J:|}Sx0Kĥb"ө5QIGۤWʷ^T׏,)[\y|f/dyu̢-`|Yʸe~Iy &bL58 m2j W6pB^>/=` FH@4r)-m?l@MӧqZiΫXvrmF1:AhYZ^8TU*_ FMbem[!Ehm,spc]IBBE5`دUWqRLBqr]VFֹ8γH|OMg-Rt:]7nl;6|h &OY 6zaI\1e_(,_5ӦLU]Fa^N1()j5bkJ: _|,b1l5Jm4'[Q ;Hr$Azi5xVPQIJ t?e1gEp q qq ~KZ&\=j Ծ\&a~mOϑ^3Г@\T-@gp#uOfZ0k =Uxil1X@:M:Boҩ!WY(P(>mOn* aysF' <? ?AI4ȿϘ|#*݅P+d@=Fșo&U`]E rLʳ[gNŶ M}›S/Y6ki>KG;[jf i倩6{.^ORRM=7UGiM Lo veB DQp8Ś6 .Òim”`)dWaI ˦ mf_F﵇ٕ(hFrgM{1ڭv'BOFZ%`+M?_Fߒe6Qj[>&; c؞'R[S )x]E32sguU`XQOfVz`^`%,]rg 7`Cde!-,*yQ*jBc+C0me.}.F֛ B\uT :`p3 !~^0=`pz7M&Aa`?CA a`R !/CߗA8ci0A(B 5B ΀!L n[ᡕP/A9zap`Ш<ۡ[%@"H0 55Bx`p>0^  R|u /Ňk> a+!LK}k B=Ꟃ|5e] I@u/ݮn |:OA(COP>$M@C ᆷ.{ ! 4@>[yP1a)|t lP !L az!!< a)Ѡǫ!4B+PC~كOݭS]M.xQ, bA04C]I5Y|A/vHa,<#}r@r]JXKqCo5Wc5 zLdH﫦OILw[!.;c'$`ǍOH^oNH[Y񚄣;;wJ9!pw%qML) n 7j?e yk⠎- iu&&Ŗ:Q͚j_Yto[؏'CXroUĄ؉ iդfw/<,]k(ޤcԄ=;AzEO-Ӊ zFj{[ 6Jמs?ҿ`o94r~VF[B\9~o~΢`06Bo>~m8 x?vM-!omL"ƨCc oWa <' v<NGP_e@@GзƟ#mS>ʣL?bVr w2;[P~]?iČiˇ-PAķ~>sUW/)oMW-L(\䢮c`E_>)V H3[w0hcƝZBޞ~¾D]w l Glޭ}N1)G'z;^PY;\苂ϸL1K ?s`ퟅ?>r;X?Z1G2op0؅G?[*?<ډYmg Ώ@O aBSYP>4oQaA>@"#tLso>xcIO%u[25q\&w.b[;a]g/o5cB`nML$ռzovm_p0߻H0?o=1ƖG9w|N 0x'v^I?Xlc< Z5G #^1<a.4FGDq#xkpNs|I !u 5o"=+`>};B~|CŔzd x!|SOy\ UtŠ|T>)`rBGkPO"+ C߮}?k9WN$;2U|,zEI\wiY>p2q)5爐.hG.s[r r S&N!NH_;WNYS*qGh .3]`*M`HaHDvB>n nkV;}MT@/g{08Zoʹ1H/K_+ ,b5淙x}GoOng fD^џ[k`MHsQW3#{^_&~U:2'fj'ay{-C9h<+<xǕ9ֶ7YXRI!ndxuD<;">9"3]y|[,6*aqEN/cqEiX\Yhs8ÞBOۺӅ*r5yx)3SX\9!ŇSʿ{~ǕrO%rwTa\~a ;dN<,B<|yy[xa/y8xx=Kxxx?FAva^.*gxyx?񰅇2y<#>?SO?ŗ^~^l|kۛy-[m߱s={Ï>d~/}~͑~?8'OhٿΝ;ʘM8t"Qoۢ|6CQpi^OsAJt B Ώ t1|9\c8sxN>ʺ(?w~@)7u(NR/W>ޗ 9+%^Q?I _џ ^]\j9!Qٜѽ's}WÅxu+8~' _ѷ#Orx-+~8ÕvlRp]T3"8\8~}1=4r=Tc9<Õ]<~)d+8Vppc1?AU88|;7r|_|EQ(S<>}e~>CgW9;W^n#/W[وv}^J/aJ>#oq:s:m#CxK<+"3Nڇ_w@֏JT G͌q>rC-o瓑QWsƙ _{<u*(_DtҸ9Yu9/> ?q!7 _#y3 QuΩ^8|+ >?F_}QtG&xy\NK9[8 ~_ RF/,a^}((ڇ>- (NpX8|- 3~(t _y(r2|}xx\IEi>QS-Q;s}7@C$ Qૢ実(ۢ?ܾ} (r2vNLg\[m;^w} _93(O{oYSJD{p-W<*^ks->G8'qG(ص}x(]ٸ&D;=]yP _g=9iܟQn1gʹn>L9v.WrxJB7 (.EY/D>.tÏr7MapE_Kh_vq*޿Q?gCۃ -~#ߏfWN?-`](p7*]=G;_6.D0Ll( ?3Ë8HS.7rү9~-cʻNF=?Fm,'{r( XJc)x?(k"}9:ϛs[VFq:iEN/8\h`p+y}qc^z"IK~.nb.;Xp|̿C_V~3_2 ~^nFS:e^2r?? 8~Z5Wkv>"oxk9{w81|d4tHȰȰHaF$o5?fx YNFF*ڰ  k?ЖСmц648,* JUFIڦ#s;=-=5Պ6ХHmF#Yy:eG% ˈ MDچDFڈHHCGB̌ddEBF qkWBި#ȌȊha6Ym1rHt@U е.We]JM.,../s1?sՓH$=GfEY@8$4LyK:b{IC07>e^0e„i|xl&T]٩XpŚ"CEEp ,3''rT߯` ŭ2 ] 7G .@E^nObmnWx24wnc]..P**q !" ::y(DWKYs-r9QV뤼]\}BXXҞM`Bqd6S\VQq9w 0ztk"6}`m t(ہ-aJp׮Ԁmw\]](hf@B i F1YsBйOcG0eF ^]R)[e=%(_Ռ E#K-n]̑fnUϋ'q쬃x̋,AuZyErlɾ 7nfI ڳ,5XGmJ6ЍqP3|32!}zUP0W2ҁnQ ( 0~U`E蓯Ee:ou aRB]5h9o=GVQڻa gE>ju_)*밭h%1U71D5 s\®_*iVx85o׭##2UZ҅+[Z ΡVsb͊]\,v w@) !;S5N~B F51od^}]pC!>pJX bYgz Ox{gD`Ui\.8^E(Kb_ʿQ apG]|t1"¤ǧL;hāNmv-@T Yh,+W9Ϸɥ #define CAPTURE_NUMBER_NOT_SET (-1) char *EMPTYSTR = ""; void grok_capture_init(grok_t *grok, grok_capture *gct) { gct->id = CAPTURE_NUMBER_NOT_SET; gct->pcre_capture_number = CAPTURE_NUMBER_NOT_SET; gct->name = NULL; gct->name_len = 0; gct->subname = NULL; gct->subname_len = 0; gct->pattern = NULL; gct->pattern_len = 0; gct->predicate_lib = NULL; gct->predicate_func_name = NULL; gct->extra.extra_len = 0; gct->extra.extra_val = NULL; } void grok_capture_add(grok_t *grok, const grok_capture *gct) { grok_log(grok, LOG_CAPTURE, "Adding pattern '%s' as capture %d (pcrenum %d)", gct->name, gct->id, gct->pcre_capture_number); /* Primary key is id */ tctreeput(grok->captures_by_id, &(gct->id), sizeof(gct->id), gct, sizeof(grok_capture)); /* Tokyo Cabinet doesn't seem to support 'secondary indexes' like BDB does, * so let's manually update all the other 'captures_by_*' trees */ int unused_size; tctreeput(grok->captures_by_capture_number, &(gct->pcre_capture_number), sizeof(gct->pcre_capture_number), gct, sizeof(grok_capture)); int i, listsize; /* TCTREE doesn't permit dups, so let's make the structure a tree of arrays, * keyed on a string. */ /* captures_by_name */ TCLIST *by_name_list; by_name_list = (TCLIST *) tctreeget(grok->captures_by_name, (const char *)gct->name, gct->name_len, &unused_size); if (by_name_list == NULL) { by_name_list = tclistnew(); } /* delete a capture with the same capture id so we can replace it*/ listsize = tclistnum(by_name_list); for (i = 0; i < listsize; i++) { grok_capture *list_gct; list_gct = (grok_capture *)tclistval(by_name_list, i, &unused_size); if (list_gct->id == gct->id) { tclistremove(by_name_list, i, &unused_size); break; } } tclistpush(by_name_list, gct, sizeof(grok_capture)); tctreeput(grok->captures_by_name, gct->name, gct->name_len, by_name_list, sizeof(TCLIST)); /* end captures_by_name */ /* captures_by_subname */ TCLIST *by_subname_list; by_subname_list = (TCLIST *) tctreeget(grok->captures_by_subname, (const char *)gct->subname, gct->subname_len, &unused_size); if (by_subname_list == NULL) { by_subname_list = tclistnew(); } /* delete a capture with the same capture id so we can replace it*/ listsize = tclistnum(by_subname_list); for (i = 0; i < listsize; i++) { grok_capture *list_gct; list_gct = (grok_capture *)tclistval(by_subname_list, i, &unused_size); if (list_gct->id == gct->id) { tclistremove(by_subname_list, i, &unused_size); break; } } tclistpush(by_subname_list, gct, sizeof(grok_capture)); tctreeput(grok->captures_by_subname, gct->subname, gct->subname_len, by_subname_list, sizeof(TCLIST)); /* end captures_by_subname */ } const grok_capture *grok_capture_get_by_id(grok_t *grok, int id) { int unused_size; const grok_capture *gct; gct = tctreeget(grok->captures_by_id, &id, sizeof(id), &unused_size); return gct; } const grok_capture *grok_capture_get_by_name(const grok_t *grok, const char *name) { int unused_size; const grok_capture *gct; const TCLIST *by_name_list; by_name_list = tctreeget(grok->captures_by_name, name, strlen(name), &unused_size); if (by_name_list == NULL) return NULL; /* return the first capture by this name in the list */ gct = tclistval(by_name_list, 0, &unused_size); return gct; } const grok_capture *grok_capture_get_by_subname(const grok_t *grok, const char *subname) { int unused_size; const grok_capture *gct; const TCLIST *by_subname_list; by_subname_list = tctreeget(grok->captures_by_subname, subname, strlen(subname), &unused_size); if (by_subname_list == NULL) return NULL; gct = tclistval(by_subname_list, 0, &unused_size); return gct; } const grok_capture *grok_capture_get_by_capture_number(grok_t *grok, int capture_number) { int unused_size; const grok_capture *gct; gct = tctreeget(grok->captures_by_capture_number, &capture_number, sizeof(capture_number), &unused_size); return gct; } int grok_capture_set_extra(grok_t *grok, grok_capture *gct, void *extra) { /* Store the pointer to extra. * XXX: This is potentially bad voodoo. */ grok_log(grok, LOG_CAPTURE, "Setting extra value of 0x%x", extra); /* We could copy it this way, but if you compile with -fomit-frame-pointer, * this data is lost since extra is in the stack. Copy the pointer instead. * TODO(sissel): See if we don't need this anymore since using tokyocabinet. */ //gct->extra.extra_val = (char *)&extra; gct->extra.extra_len = sizeof(void *); /* allocate pointer size */ gct->extra.extra_val = malloc(gct->extra.extra_len); memcpy(gct->extra.extra_val, &extra, gct->extra.extra_len); //gct->extra.extra_len = extra; //gct->extra.extra_val = extra; return 0; } void _grok_capture_encode(grok_capture *gct, char **data_ret, int *size_ret) { #define BASE_ALLOC_SIZE 256; XDR xdr; grok_capture local; int alloc_size = BASE_ALLOC_SIZE; *data_ret = NULL; /* xdr_string doesn't understand NULL, so replace NULL with "" */ memcpy(&local, gct, sizeof(local)); if (local.name == NULL) local.name = EMPTYSTR; if (local.subname == NULL) local.subname = EMPTYSTR; if (local.pattern == NULL) local.pattern = EMPTYSTR; if (local.predicate_lib == NULL) local.predicate_lib = EMPTYSTR; if (local.predicate_func_name == NULL) local.predicate_func_name = EMPTYSTR; if (local.extra.extra_val == NULL) local.extra.extra_val = EMPTYSTR; do { if (*data_ret == NULL) { *data_ret = malloc(alloc_size); } else { xdr_destroy(&xdr); alloc_size *= 2; //fprintf(stderr, "Growing xdr buffer to %d\n", alloc_size); *data_ret = realloc(*data_ret, alloc_size); } xdrmem_create(&xdr, *data_ret, alloc_size, XDR_ENCODE); /* If we get larger than a meg, something is probably wrong. */ if (alloc_size > 1<<20) { abort(); } } while (xdr_grok_capture(&xdr, &local) == FALSE); *size_ret = xdr_getpos(&xdr); } void _grok_capture_decode(grok_capture *gct, char *data, int size) { XDR xdr; xdrmem_create(&xdr, data, size, XDR_DECODE); xdr_grok_capture(&xdr, gct); } #define _GCT_STRFREE(gct, member) \ if (gct->member != NULL && gct->member != EMPTYSTR) { \ free(gct->member); \ } void grok_capture_free(grok_capture *gct) { _GCT_STRFREE(gct, name); _GCT_STRFREE(gct, subname); _GCT_STRFREE(gct, pattern); _GCT_STRFREE(gct, predicate_lib); _GCT_STRFREE(gct, predicate_func_name); _GCT_STRFREE(gct, extra.extra_val); } /* this function will walk the captures_by_id table */ void grok_capture_walk_init(const grok_t *grok) { tctreeiterinit(grok->captures_by_id); } const grok_capture *grok_capture_walk_next(const grok_t *grok) { int id_size; int gct_size; int *id; const grok_capture *gct; id = (int *)tctreeiternext(grok->captures_by_id, &id_size); if (id == NULL) { grok_log(grok, LOG_CAPTURE, "walknext null"); return NULL; } grok_log(grok, LOG_CAPTURE, "walknext ok %d", *id); gct = (grok_capture *)tctreeget(grok->captures_by_id, id, id_size, &gct_size); return gct; } int grok_capture_walk_end(grok_t *grok) { /* nothing, anymore */ return 0; } grok-1.20110708.1/grok_matchconf_macro.h0000664000076400007640000000066711576274273015737 0ustar jlsjls#ifndef _GROK_MATCHCONF_MACRO_ #define _GROK_MATCHCONF_MACRO_ enum matchconf_macro_type { VALUE_LINE, VALUE_MATCH, VALUE_JSON_COMPLEX, VALUE_JSON_SIMPLE, VALUE_START, VALUE_END, VALUE_LENGTH, }; #ifndef _GPERF_ struct strmacro { const char *str; int code; }; #endif /* this function is generated by gperf */ const struct strmacro *patname2macro(const char *str, unsigned int len); #endif /* _GROK_MATCHCONF_MACRO_ */ grok-1.20110708.1/grok.spec.template0000664000076400007640000000325111576274273015041 0ustar jlsjls%define _sharedir /usr/share/grok Summary: A powerful pattern matching system for parsing and processing text Name: grok Version: 1.20110308.1 Release: 1 Group: System Environment/Utilities License: BSD Source0: http://semicomplete.googlecode.com/files/%{name}-%{version}.tar.gz URL: http://www.semicomplete.com/projects/grok/ BuildRoot: %{_tmppath}/%{name}-%{version}-root Requires: libevent Requires: pcre >= 7.6 Requires: tokyocabinet >= 1.4.9 BuildRequires: libevent-devel gperf tokyocabinet-devel pcre-devel %description A powerful pattern matching system for parsing and processing text data such as log files. %package devel Group: Development Tools Summary: Grok development headers %description devel Headers required for grok development. %prep %setup -q %build make %install %{__rm} -rf %{buildroot} %{__mkdir_p} %{buildroot}%{_bindir} %{__mkdir_p} %{buildroot}%{_libdir} %{__mkdir_p} %{buildroot}%{_includedir} %{__mkdir_p} %{buildroot}%{_sharedir}/patterns install -c grok %{buildroot}/%{_bindir} install -c libgrok.so %{buildroot}/%{_libdir} install -c patterns/base %{buildroot}%{_sharedir}/patterns/base for header in grok.h grok_pattern.h grok_capture.h grok_capture_xdr.h grok_match.h grok_logging.h grok_discover.h grok_version.h; do install -c $header %{buildroot}/%{_includedir} done %clean %{__rm} -rf %{buildroot} %files %defattr(-,root,root) %{_bindir}/grok %{_libdir}/libgrok.so %dir %{_sharedir} %dir %{_sharedir}/patterns %{_sharedir}/patterns/base %files devel %{_includedir} %post /sbin/ldconfig %changelog * Tue Mar 8 2011 Jordan Sissel 1.20110308.1-1 * Mon Oct 19 2009 Pete Fritchman 20090928-1 - Initial packaging. grok-1.20110708.1/test/0000775000076400007640000000000011603476330012354 5ustar jlsjlsgrok-1.20110708.1/test/grok_manymanymany.test.c0000664000076400007640000000073311576274273017254 0ustar jlsjls#include "grok.h" #include "test.h" #include void test_manymanymany(void) { INIT; IMPORT_PATTERNS_FILE; int i; grok_match_t gm; const char *str; int len; ASSERT_COMPILEOK("%{NUMBER}"); for (i = -10000; i < 10000; i++) { char buf[30]; sprintf(buf, "%d", i); CU_ASSERT(grok_exec(&grok, buf, &gm) == GROK_OK); grok_match_get_named_substring(&gm, "NUMBER", &str, &len); CU_ASSERT(strncmp(str, buf, len) == 0); } CLEANUP; } grok-1.20110708.1/test/test.h0000664000076400007640000000114311576274273013516 0ustar jlsjls#define ASSERT_MATCHFAIL(str) \ CU_ASSERT(grok_exec(&grok, str, NULL) == GROK_ERROR_NOMATCH) #define ASSERT_MATCHOK(str) \ CU_ASSERT(grok_exec(&grok, str, NULL) == GROK_OK) #define ASSERT_COMPILEOK(str) \ CU_ASSERT(grok_compile(&grok, str) == GROK_OK) #define ASSERT_COMPILEFAIL(str) \ CU_ASSERT(grok_compile(&grok, str) != GROK_OK) #ifndef LOG_MASK #define LOG_MASK 0 #endif /* Helpers */ #define INIT \ grok_t grok; \ grok_init(&grok); \ grok.logmask = LOG_MASK; #define CLEANUP \ grok_free(&grok); #define IMPORT_PATTERNS_FILE grok_patterns_import_from_file(&grok, "../patterns/base") grok-1.20110708.1/test/stringhelper.test0000775000076400007640000005765711603476330016012 0ustar jlsjlsELF>|@@0G@8@%"@@@@@@@@@** **`*` 0*0*`0*`@@DDPtdl&l&@l&@Qtd/lib64/ld-linux-x86-64.so.2GNU GNUgõ^GWU{Nƌ($H`0 `(F"&)*,01234Sκ`9k| %P2qXl KKaf|j C/zS'gCE )2b6q,s : 8TUՇ4!s   q?cu1F T\*"8 @"@D @p @' @? @ @h.` @k"@ @L  P@.` -` @ax @@oz.` "@ !@O |@ `@g "@ @&  -` @!@f @ 0@ @|libdl.so.2__gmon_start___Jv_RegisterClasseslibpcre.so.0libevent-2.0.so.5libtokyocabinet.so.9libcunit.so.1CU_assertImplementationCU_initialize_registryCU_add_suiteCU_add_testCU_basic_set_modeCU_basic_run_testsCU_cleanup_registryCU_get_errorlibc.so.6sprintf__strdupputcharrealloccallocstrlenmemcpymalloc__ctype_b_locmemmovestrcmp__libc_start_mainfree_edata__bss_start_end__libc_csu_finistring_escapestring_countsubstr_replacetest_string_ndup_IO_stdin_usedstring_unescape__data_starttest_substr_replace_lenchangetest_substr_replace_multipletest_substr_replace_alloc_and_insert_from_null_deststring_escape_unicode__libc_csu_initstring_ncounttest_substr_replace_removestring_escape_like_ctest_substr_replace_unmoving_insertionstring_escape_hextest_string_escape_cGLIBC_2.14GLIBC_2.3GLIBC_2.2.5*ii 5ui ?,`,`- ,`$(,`0,`8,`3@,`!H,`4h,`p,`x,`,`,`,`,` ,` ,` ,` ,` ,`,`,`,`,`,`,`,`-`-`-`HH52 %4 @%2 h%* h%" h% h% h%  h% h% hp% h`% h P% h @% h 0% h % h % h% h% h% h% h% h% h% hS H=a11HHH H5HPHY H5H:H; H5LH$H5 H5nHH H5HH H5HH H5H [[1I^HHPTI"@H"@Hǐ@HH] HtHÐUHSH= uK *`H  H*`HHH9s$fDHH *`H H9r H[]fff.H= UHtHt](*`]ÐHHhello thHH$D$ereIH=rHƹLHvH Yz@E1@HfATH5g USHHHHH,$HCHMD1LH H%@ǾoE1H*H$}HkHHXHH$hH H$H$H$$AA$ H$H H$H$E1A L#H$LW1҅ SH$H=%LH1 -H$L fDHĠ[]A\@H("HtHhello woHrld test@HHHHHD$A‰D$1BLH [H(@ǾHE1ɉD$DD$HT$Ht$H|$L $1|$LH HJ@E1@H(ff.H( BHtHhello wo@rldH0HHD$lPHt$H|$L ;A$T$HT$D$Ht$H=[ LH5H E @@E1@H(DH(L  E1HT$Ht$H|$1$HD$D$D$\L$HT$Ht$H|$L E1$3L$HT$Ht$H|$L E1$ Ht$H= L% H H h 1@E1@1|$ L H > H[ 2@E1D$19D$L H  HB 3@E1PH|$H(ÐH(L E1HT$Ht$H|$1$HD$D$D$Ht$H= L7 H H z @E1@1|$ L H P H @E1D$19D$L H HT !@E1bH|$H(SH ,HHhello thHD$D$D$worlIfCdH8@ereAI!ʁ tHt$H|$€IDIH$LDHT$IA)Ht$H=3 L H H  @E1@Z1|$L H Ht @E1*1|$ Lo H HV @E1HUH|$KH [ÐH\$Hl$HLd$Ll$HLt$L|$HHD|$PIAELL$E AEDHADA4D)A;6HEIcMcD)J<1IcHcHH $E)H H $Ht$LHH}1D#HEED#McB H\$Hl$ Ld$(Ll$0Lt$8L|$@HHfA41EA;6jH}A6HcHEN@H}‰fDLAAH\$Hl$HLd$Ll$H(HAIHIDP@uAAAEAvE11=f.H EJcH@H5aAEEHHl$H\$Ld$Ll$ H(DH5EfH5H5H5Q H5H5SHH5 H@H1[f.H\$Hl$HLd$Ll$H(AHIwHIDP@uH5 AEAH1\H\$Hl$Ld$Ll$ H(ÐAW1AVAUATUHSHHHEHT$ HT$0HL$ DD$DL$HDŽ$8DŽ$<HT|$uH D$HD$M~H31@H9D0t$D$E1D$,DHD$F<0EIcŀ|0L$,tOHADP@UD$E1D$( fAD9e~vHIcA9uD$(DŽ$<DŽ$8%D$D$D$<E~$8tvt9EAD9e@ID9t$HH[]A\A]A^A_D$L$0GDHT$ DHHD$<f.D$L$0EH$8H$<H$0A73fH$8H$<H$0A?D$<EfH$8H$<H$0AD$<EfH|$fD$ffff.AVIAUIATIUSHDE1fDHHA9$IEـ<\u( dlen!strcmp(dest, source)dlen == strlen(source)!strcmp(dest, "hello world")dalloc == 1024dlen == 11stringhelper.test.c:test_substr_replace_unmoving_insertionstringhelper.test.c:test_substr_replace_alloc_and_insert_from_null_deststringhelper.test.c:test_substr_replace_multiplestringhelper.test.c:test_substr_replace_removestringhelper.test.c:test_substr_replace_lenchangestringhelper.test.c:test_string_escape_cstringhelper.test.c:test_string_ndup\t\x%x\u00%02x pX;$d $t<\t ,DTdD4T$|zRx 0gD b44|BMA G` AABlD0D00?D0:PD0$(kAN0ZAA E F$PhM[P J $DMN0 J l&Ad$oMN0SLBDB B(A0D8J 8A0A(B BBBH DhLBEE D(A0D@ 0A(A BBBG ,LpaBDD C AEE |fOML q$8Q_@X/<Nc @ "@o`@@@H@ K P,` @8 @ o @oo @0*`6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@a#@a#@k#@u#@#@#@#@#@#@#@#@#@#@#@#@#@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GCC: (GNU) 4.6.0 20110530 (Red Hat 4.6.0-9)<`@@ '`<+30intmm fT (u08P@ HG!P"X$X`s&^h|(fpz,ft.tx2JU3X4dp8tAJK&L-M4N11PfRz  7X X ^ f' t <   <_ >d  fw !C"(\)B*v+= ) m9 <N KN <^ < 9 # ) 1*f@ S+^H?1 i <B Jf$ K L 0 h?  j ; kf r l  m?  oE D pE( r saK @   ; f  V   f  ` Q(  0 D 8g g  ,Q&u`@@wavw`pw(z1z1  < M@L@:N JO PaQ:~i]f#0len_fX_f\s`P@@(j1j1 J <CP@%@*D`lenEfGFflT@@ D1DkW80@@g*9len:fh;fl4@W@= 91 9@@(@1@1&@@'(fh(fln0 $@v@@(1111 @ @y* $@ fhfld@u@(11~@{@ *E { f fh fl@@(11 Ff@y@Y f sY x! ^! ^! ^! ^% UR: ; I$ > $ >   I : ; : ;I8 : ;  : ;  : ; I8 I !I/ &I : ; (  : ; ' I' .? : ; ' @ 4: ; I 4: ; I U4: ; I4: ; I 4: ; I  4: ; I 4: ; I .? : ; ' I@  : ; I!4: ; I? < { /usr/lib/gcc/x86_64-redhat-linux/4.6.0/include/usr/include/bits/usr/include/usr/include/CUnitstringhelper.test.c_stringhelper.test.cstddef.htypes.hlibio.hsetjmp.hsigset.hsetjmp.hTestDB.hCUError.hBasic.hstdio.h `@KYs=1R2 t%HZmʃ;[wd>dvY-`&PK;Y,>$LY,-mK=;YY?MNZ=ePY))=-0bfOZ=-0c!KY=\Yi9g[=0- @#;=kYYYYYY[YZpXXp test_substr_replace_multiple_shortbuf/home/jls/projects/grok/testpPrevinput_IO_buf_endCUE_FCLOSE_FAILEDexpect_IO_write_endCUE_DUP_SUITE_flags_markersCUE_SCLEAN_FAILED_IO_lock_tCUE_SUITE_INACTIVECU_BRM_VERBOSE_pos__sigset_tstdout_IO_save_endfloat__lenCUE_NO_TESTNAMEpNextlong long unsigned int__jmp_buf_IO_backup_basetest_substr_replace_removepTestFunc_filenotest_string_ndupsize_ttest_substr_replace_lenchangeoutput_IO_read_baseCU_BRM_SILENTargcstdin_nextCU_TestCUE_REGISTRY_EXISTS__jmpbufslenpInitializeFunc__s1_len_mode_IO_markerCU_InitializeFunc_IO_read_ptrdataCUE_SINIT_FAILEDCUE_DUP_TEST_IO_write_basetest_substr_replace_alloc_and_insert_from_null_destlong long int__s2_len_IO_save_basesizeGNU C 4.6.0 20110530 (Red Hat 4.6.0-9)__pad1__pad2__pad3__pad4__pad5fActiveCUE_TEST_INACTIVE_vtable_offsetCUE_NOREGISTRYargvsuitetest_substr_replace_unmoving_insertionCUE_SUCCESSCUE_NOSUITEpNametest_string_escape_cCUE_NOTEST_IO_read_endshort intCU_SuiteCUE_TEST_NOT_IN_SUITECUE_NO_SUITENAMEsource__mask_was_savedCUE_BAD_FILENAME__saved_maskuiNumberOfTests_lockCUE_WRITE_ERROR_old_offsetdalloc_IO_FILECU_TestFuncCU_pSuitepJumpBufCU_pTestunsigned chardlen_sbuf_IO_write_ptrCUE_NOMEMORY__retval__off_t_stringhelper.test.cCU_CleanupFuncshort unsigned intmain__valCU_BRM_NORMALdoublepCleanupFunc_chain_flags2_cur_columnCUE_FOPEN_FAILED__off64_t_unused2_IO_buf_base__jmp_buf_tag@@P@@0@%@h^@@P_@@`>@c@P@@`@@`O@@`@ @`1@5@P5@z@SE@@`k@{@`@@U@@T@@0@@P@h@Sn@r@Pr@t@S@@@@@C@P@@@`@{@@y@.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc.debug_ranges@#@ 1<@<$Do`@`N H@HV@@@K^o @ jko @ @z8 @8  @  @ @ p@L"@""@"|l&@l&'@'*`**`*(*`(*0*`0*,`,@P,`P, -` - .`.0., /@ L/ 8':30 =>BiICEEWpP8 $9 Z@@<@`@H@@@ @ @ 8 @ @ @ @ @"@"@l&@'@*`*`(*`0*`,`P,` -`.` ! @*`**`8(*`E @[.`j.`x 0@*`*@(*` "@-`P,`"@ *`*`0*`C0*`L  -`Wk "@{ |@ @ !@O  "@ @h"6Ul `@g}"@ @L -` P@ @a(= @?Zn @ @@o "@.` @!@f 0@0D @Y @k.` @&.` @| @ @call_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5886dtor_idx.5888frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_aux_stringhelper.test.cstringhelper.call_chars_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____init_array_end__init_array_start_DYNAMICdata_startprintf@@GLIBC_2.2.5__libc_csu_fini_startstring_escapestring_count__gmon_start___Jv_RegisterClassesCU_get_error_finiputchar@@GLIBC_2.2.5substr_replaceCU_assertImplementationCU_basic_run_testsmalloc@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5CU_initialize_registrytest_string_ndup_IO_stdin_used__strdup@@GLIBC_2.2.5free@@GLIBC_2.2.5strlen@@GLIBC_2.2.5string_unescape__data_starttest_substr_replace_lenchangestring_ndup__ctype_b_loc@@GLIBC_2.3sprintf@@GLIBC_2.2.5test_substr_replace_multipleCU_cleanup_registrytest_substr_replace_alloc_and_insert_from_null_deststring_escape_unicode__libc_csu_initCU_basic_set_modeCU_add_testmemmove@@GLIBC_2.2.5__bss_startstring_ncounttest_substr_replace_removestrcmp@@GLIBC_2.2.5string_escape_like_ctest_substr_replace_unmoving_insertioncalloc@@GLIBC_2.2.5_endrealloc@@GLIBC_2.2.5string_escape_hex_edatatest_string_escape_cmemcpy@@GLIBC_2.14main_initCU_add_suitegrok-1.20110708.1/test/Makefile0000664000076400007640000000156611576274273014037 0ustar jlsjlsBASE=.. include ../Makefile # Search these paths for dependency targets VPATH=..:. LDFLAGS+=-lcunit -levent CFLAGS+=-I. -I.. -g $(EXTRA_CFLAGS) CLEANOBJ=*.o *.gentest.c *_xdr.[hco] _*.c CLEANBIN=*.test TESTS=$(wildcard *.test.c) #TESTS=grok_pattern.test.c grok_capture.test.c grok_simple.test.c .PHONY: test test: test-c test-ruby .PHONY: test-c test-c: @for t in $(TESTS:.c=); do \ ./runtest.sh $$t; \ done .PHONY: test-ruby test-ruby: $(MAKE) -C ../ruby/test test %.c: gentest.sh %.test.o: %.test.c ./gentest.sh $< > _$< $(CC) $(CFLAGS) -c _$< -o $@; rm _$< $(GROKOBJ): make -C $(BASE) $@ mv $(BASE)/$@ . stringhelper.test: ../stringhelper.o grok_pattern.test: $(GROKOBJ) grok_capture.test: $(GROKOBJ) grok_simple.test: $(GROKOBJ) grok_manymanymany.test: $(GROKOBJ) predicates.test: $(GROKOBJ) %.test: %.test.o $(CC) $(LDFLAGS) $(CFLAGS) $(^:cleanobj=) -o $@ grok-1.20110708.1/test/grok_capture.test.c0000664000076400007640000000351311576274273016200 0ustar jlsjls#include #include "grok.h" #include "test.h" #include "grok_capture.h" void test_grok_capture_get_by_id(void) { INIT; grok_capture src; const grok_capture *dst; grok_capture_init(&grok, &src); src.id = 9; src.name = "Test"; src.name_len = strlen(src.name); src.pcre_capture_number = 15; grok_capture_add(&grok, &src); dst = grok_capture_get_by_id(&grok, src.id); CU_ASSERT(src.id == dst->id); CU_ASSERT(src.pcre_capture_number == dst->pcre_capture_number); CU_ASSERT(!strcmp(src.name, dst->name)); CLEANUP; } void test_grok_capture_get_by_name(void) { INIT; int ret; grok_capture src; const grok_capture *dst; grok_capture_init(&grok, &src); src.id = 9; src.name = "Test"; src.name_len = strlen(src.name); src.pcre_capture_number = 15; grok_capture_add(&grok, &src); dst = grok_capture_get_by_name(&grok, src.name); CU_ASSERT(dst != NULL); CU_ASSERT(src.id == dst->id); CU_ASSERT(src.pcre_capture_number == dst->pcre_capture_number); CU_ASSERT(!strcmp(src.name, dst->name)); src.pcre_capture_number = 30; grok_capture_add(&grok, &src); dst = grok_capture_get_by_name(&grok, src.name); CU_ASSERT(dst != NULL); CU_ASSERT(src.id == dst->id); CU_ASSERT(src.pcre_capture_number == dst->pcre_capture_number); CU_ASSERT(!strcmp(src.name, dst->name)); CLEANUP; } void test_grok_capture_get_by_capture_number(void) { INIT; grok_capture src; const grok_capture *dst; grok_capture_init(&grok, &src); src.id = 0; src.name = strdup("Test"); src.pcre_capture_number = 15; grok_capture_add(&grok, &src); dst = grok_capture_get_by_capture_number(&grok, src.pcre_capture_number); CU_ASSERT(dst != NULL); CU_ASSERT(src.id == dst->id); CU_ASSERT(src.pcre_capture_number == dst->pcre_capture_number); CU_ASSERT(!strcmp(src.name, dst->name)); free(src.name); } grok-1.20110708.1/test/runtest.sh0000775000076400007640000000057111576274273014435 0ustar jlsjlsTEST=$1 if [ -z "$TEST" ] ; then echo "Usage: $0 " exit 1 fi echo "=> Building $TEST" MAKE=make which gmake > /dev/null 2>&1 && MAKE=gmake build="$MAKE EXTRA_CFLAGS="$EXTRA_CFLAGS" EXTRA_LDFLAGS="$EXTRA_LDFLAGS" clean $TEST" cout=`$build 2>&1` if [ $? -ne 0 ]; then echo "$cout" echo "Compile for $TEST failed." else ./$TEST | egrep '^ (Test:| [0-9])' fi grok-1.20110708.1/test/grok_pattern.test.c0000664000076400007640000000354611576274273016220 0ustar jlsjls#include "grok.h" #include "test.h" void test_grok_pattern_add_and_find_work(void) { INIT; const char *regexp = NULL; size_t len = 0; grok_pattern_add(&grok, "WORD", 5, "\\w+", 3); grok_pattern_add(&grok, "TEST", 5, "TEST", 4); grok_pattern_find(&grok, "WORD", 5, ®exp, &len); CU_ASSERT(regexp != NULL); CU_ASSERT(len == 3); CU_ASSERT(!strncmp(regexp, "\\w+", len)); //free(regexp); grok_pattern_find(&grok, "TEST", 5, ®exp, &len); CU_ASSERT(regexp != NULL); CU_ASSERT(len == 4); CU_ASSERT(!strncmp(regexp, "TEST", len)); //free(regexp); CLEANUP; } void test_pattern_parse(void) { const char *name, *regexp; size_t name_len, regexp_len; _pattern_parse_string("WORD \\w+", &name, &name_len, ®exp, ®exp_len); CU_ASSERT(!strncmp(name, "WORD", name_len)); CU_ASSERT(!strncmp(regexp, "\\w+", regexp_len)); CU_ASSERT(name_len == 4); CU_ASSERT(regexp_len == 3); _pattern_parse_string(" NUM numtest", &name, &name_len, ®exp, ®exp_len); CU_ASSERT(!strncmp(name, "NUM", name_len)); CU_ASSERT(!strncmp(regexp, "numtest", regexp_len)); CU_ASSERT(name_len == 3); CU_ASSERT(regexp_len == 7); _pattern_parse_string(" NUMNUM numtest", &name, &name_len, ®exp, ®exp_len); CU_ASSERT(!strncmp(name, "NUMNUM", name_len)); CU_ASSERT(!strncmp(regexp, "numtest", regexp_len)); CU_ASSERT(name_len == 6); CU_ASSERT(regexp_len == 7); } void test_pattern_import_from_string(void) { INIT; char *buf = "WORD \\w+\n" "TEST test\n" "# This is a comment\n" "FOO bar\n"; buf = strdup(buf); grok_patterns_import_from_string(&grok, buf); //CU_ASSERT(!strcmp(grok_pattern_find(&grok, "WORD", 5), "\\w+")); //CU_ASSERT(!strcmp(grok_pattern_find(&grok, "TEST", 5), "test")); //CU_ASSERT(!strcmp(grok_pattern_find(&grok, "FOO", 4), "bar")); free(buf); CLEANUP; } grok-1.20110708.1/test/stringhelper.test.c0000664000076400007640000000571211576274273016224 0ustar jlsjls#include #include #include #include "stringhelper.h" void test_substr_replace_unmoving_insertion(void) { char *source = calloc(1, 1024); char *dest = calloc(1, 1024); int slen = -1, dlen = -1, dalloc = 1024; sprintf(source, "world"); sprintf(dest, "hello there"); substr_replace(&dest, &dlen, &dalloc, 6, strlen(dest), source, slen); CU_ASSERT(!strcmp(dest, "hello world")); CU_ASSERT(dalloc == 1024); CU_ASSERT(dlen == 11); free(source); free(dest); } void test_substr_replace_alloc_and_insert_from_null_dest(void) { char *source = "hello world"; char *dest = NULL; int dlen = 0, dalloc = 0; substr_replace(&dest, &dlen, &dalloc, 0, 0, source, -1); CU_ASSERT(!strcmp(dest, source)); CU_ASSERT(dlen == strlen(source)); CU_ASSERT(dalloc > dlen); free(dest); } void test_substr_replace_multiple(void) { char *dest = NULL; int dlen = 0, dalloc = 0; //int x = 0; //printf("%d: %.*s\n", x++, dlen, dest); substr_replace(&dest, &dlen, &dalloc, 0, 0, "hello", -1); substr_replace(&dest, &dlen, &dalloc, dlen, 0, " ", -1); substr_replace(&dest, &dlen, &dalloc, dlen, 0, "world", -1); const char *expect = "hello world"; CU_ASSERT(!strcmp(dest, expect)); CU_ASSERT(dlen == strlen(expect)); CU_ASSERT(dalloc > dlen); free(dest); } void test_substr_replace_remove(void) { char *source = strdup("hello world"); int len = strlen(source); int size = len + 1; //printf("\n--\n%s\n", source); substr_replace(&source, &len, &size, 5, len, "", 0); //printf("\n--\n%s\n", source); CU_ASSERT(!strcmp(source, "hello")); } void test_substr_replace_lenchange(void) { char *source = strdup("hello world test"); int len = strlen(source); int size = len + 1; CU_ASSERT(len == 16); substr_replace(&source, &len, &size, 5, len, "", 0); CU_ASSERT(len == 5); } void test_string_escape_c(void) { struct { char *input; char *output; } data[] = { { "no change", "no change" }, { "quoty \" ?", "quoty \\\" ?" }, { "test \n", "test \\n" }, { "test \r", "test \\r" }, { "test \f", "test \\f" }, { "test \a", "test \\a" }, { "test \b", "test \\b" }, { "test \\", "test \\\\" }, { NULL, NULL }, }; int i = 0; for (i = 0; data[i].input != NULL ; i++) { int len, size; char *s = strdup(data[i].input); len = strlen(s); size = len + 1; string_escape(&s, &len, &size, "\\\"", 2, ESCAPE_LIKE_C); string_escape(&s, &len, &size, "", 0, ESCAPE_LIKE_C | ESCAPE_NONPRINTABLE); //printf("\n"); //printf("'%s' vs '%s' ('%s')\n", data[i].input, s, data[i].output); //printf("\n"); if (strcmp(s, data[i].output)) { printf("\n"); printf("'%s' vs '%s' ('%s')\n", data[i].input, s, data[i].output); printf("\n"); } CU_ASSERT(!strcmp(s, data[i].output)); free(s); } } void test_string_ndup(void) { char data[] = "hello there"; char *p; p = string_ndup(data, 5); CU_ASSERT(!strcmp(p, "hello")); } grok-1.20110708.1/test/grok_simple.test.c0000664000076400007640000000420311576274273016023 0ustar jlsjls#include "grok.h" #include "test.h" void test_grok_pcre_compile_succeeds(void) { INIT; ASSERT_COMPILEOK("\\w+"); ASSERT_COMPILEOK(""); ASSERT_COMPILEOK("testing"); ASSERT_COMPILEFAIL("["); ASSERT_COMPILEFAIL("[a"); CLEANUP; } void test_grok_pcre_match(void) { INIT; ASSERT_COMPILEOK("[a-z]+"); ASSERT_MATCHOK("foo"); ASSERT_MATCHOK(" one two "); ASSERT_MATCHFAIL("..."); ASSERT_MATCHFAIL("1234"); CLEANUP; } void test_grok_match_with_patterns(void) { INIT; grok_patterns_import_from_string(&grok, "WORD \\b\\w+\\b"); ASSERT_COMPILEOK("%{WORD}"); ASSERT_MATCHOK("testing"); ASSERT_MATCHOK(" one two "); ASSERT_MATCHFAIL("---"); ASSERT_MATCHFAIL("-."); CLEANUP; } void test_grok_match_with_escaped_pattern(void) { INIT; grok_patterns_import_from_string(&grok, "WORD \\b\\w+\\b"); ASSERT_COMPILEOK("\\%\\{WORD\\}"); ASSERT_MATCHOK("%{WORD}"); ASSERT_MATCHFAIL("testing"); ASSERT_MATCHFAIL("another test"); ASSERT_COMPILEOK("\\%\\{%{WORD}\\}"); ASSERT_MATCHOK("%{WORD}"); ASSERT_MATCHOK("%{TESTING}"); ASSERT_MATCHOK("%{FIZZ}"); CLEANUP; } void test_grok_match_substr(void) { INIT; grok_match_t gm; ASSERT_COMPILEOK("\\w+ world"); CU_ASSERT(grok_exec(&grok, "something hello world", &gm) >= 0); CU_ASSERT(grok.pcre_capture_vector[0] == 10); // start of match CU_ASSERT(grok.pcre_capture_vector[1] == 21); // end of match // XXX: make function: // int grok_match_string(grok_t, grok_match_t, char **matchstr, int *matchlen) // verify the matched string is 'hello world' CU_ASSERT(!strncmp("hello world", gm.subject + grok.pcre_capture_vector[0], grok.pcre_capture_vector[1] - grok.pcre_capture_vector[0])); CLEANUP; } void test_grok_match_get_named_substring(void) { INIT; IMPORT_PATTERNS_FILE; grok_match_t gm; const char *str; int len; ASSERT_COMPILEOK("hello %{WORD}"); ASSERT_MATCHOK("hello world"); CU_ASSERT(grok_exec(&grok, "hello world", &gm) == GROK_OK); grok_match_get_named_substring(&gm, "WORD", &str, &len); //CU_ASSERT(len == 5); //CU_ASSERT(!strncmp(str, "world", len)); CLEANUP; } grok-1.20110708.1/test/predicates.test.c0000664000076400007640000000532611576274273015642 0ustar jlsjls#include "grok.h" #include "test.h" void test_grok_with_predicate_compile_succeeds(void) { INIT; grok_patterns_import_from_string(&grok, "WORD \\b\\w+\\b"); ASSERT_COMPILEOK("%{WORD=~/test/}"); ASSERT_COMPILEOK("%{WORD!~/test/}"); ASSERT_COMPILEOK("%{WORD>30}"); ASSERT_COMPILEOK("%{WORD>=30}"); ASSERT_COMPILEOK("%{WORD<30}"); ASSERT_COMPILEOK("%{WORD<=30}"); ASSERT_COMPILEOK("%{WORD==30}"); ASSERT_COMPILEOK("%{WORD!=30}"); CLEANUP; } void test_grok_with_numcompare_gt_normal(void) { INIT; IMPORT_PATTERNS_FILE; (void) grok_compile(&grok, "^%{NUMBER>10}$"); ASSERT_MATCHFAIL("0"); ASSERT_MATCHFAIL("1"); ASSERT_MATCHFAIL("9"); ASSERT_MATCHFAIL("10"); ASSERT_MATCHFAIL("5.5"); ASSERT_MATCHFAIL("0.2"); ASSERT_MATCHFAIL("9.95"); /* Should fail since '10' means we use a long, not a double */ ASSERT_MATCHFAIL("10.1") ASSERT_MATCHFAIL("10.2") ASSERT_MATCHOK("11.2") ASSERT_MATCHOK("4425.334") ASSERT_MATCHOK("11"); ASSERT_MATCHOK("15"); CLEANUP; } void test_grok_with_numcompare_gt_double(void) { INIT; IMPORT_PATTERNS_FILE; (void) grok_compile(&grok, "^%{NUMBER>10.0}$"); ASSERT_MATCHFAIL("0"); ASSERT_MATCHFAIL("1"); ASSERT_MATCHFAIL("9"); ASSERT_MATCHFAIL("10"); ASSERT_MATCHFAIL("5.5"); ASSERT_MATCHFAIL("0.2"); ASSERT_MATCHFAIL("9.95"); /* Should pass since '10.0' means we use a double */ ASSERT_MATCHOK("10.1") ASSERT_MATCHOK("10.2") ASSERT_MATCHOK("11.2") ASSERT_MATCHOK("4425.334") ASSERT_MATCHOK("11"); ASSERT_MATCHOK("15"); CLEANUP; } void test_grok_with_numcompare_gt_hex(void) { INIT; IMPORT_PATTERNS_FILE; grok_compile(&grok, "%{BASE16FLOAT>0x000A}"); ASSERT_MATCHFAIL("0"); ASSERT_MATCHFAIL("1"); ASSERT_MATCHFAIL("9"); ASSERT_MATCHFAIL("10"); ASSERT_MATCHFAIL("0x05"); ASSERT_MATCHFAIL("0x0A"); ASSERT_MATCHOK("11"); ASSERT_MATCHOK("15"); ASSERT_MATCHOK("0x0B"); ASSERT_MATCHOK("0xB"); ASSERT_MATCHOK("0xFF"); CLEANUP; } void test_grok_numcompare_lt(void) { INIT; IMPORT_PATTERNS_FILE; ASSERT_COMPILEOK("%{NUMBER<57}"); ASSERT_MATCHOK("-13"); ASSERT_MATCHOK("-3"); ASSERT_MATCHOK("0"); ASSERT_MATCHOK("3"); ASSERT_MATCHOK("13"); ASSERT_MATCHOK("56"); ASSERT_MATCHFAIL("57"); ASSERT_MATCHFAIL("58"); ASSERT_MATCHFAIL("70"); ASSERT_MATCHFAIL("100"); ASSERT_MATCHFAIL("5825"); CLEANUP; } void test_grok_numcompare_le(void) { INIT; IMPORT_PATTERNS_FILE; ASSERT_COMPILEOK("%{NUMBER<=57}"); ASSERT_MATCHOK("-13"); ASSERT_MATCHOK("-3"); ASSERT_MATCHOK("0"); ASSERT_MATCHOK("3"); ASSERT_MATCHOK("13"); ASSERT_MATCHOK("56"); ASSERT_MATCHOK("57"); ASSERT_MATCHFAIL("58"); ASSERT_MATCHFAIL("70"); ASSERT_MATCHFAIL("100"); ASSERT_MATCHFAIL("5825"); CLEANUP; } grok-1.20110708.1/test/gentest.sh0000775000076400007640000000135611576274273014404 0ustar jlsjls#!/bin/sh #TESTS=`nm $1 | awk '$2 == "T" { printf("CU_add_test(suite, \"%s\", %s);\n", $3, $3) }'` TESTS=`grep 'void test_' $1 | tr '(' ' ' | awk '{printf("CU_add_test(suite, \"%s:%s\", %s);\n", "'$1'", $2, $2) }'` cat << EOF #include #include #include "CUnit/Basic.h" #include "$1" int main(int argc, char **argv) { CU_pSuite suite = NULL; if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error(); suite = CU_add_suite("$1", NULL, NULL); if (NULL == suite) { CU_cleanup_registry(); return CU_get_error(); } $TESTS /* Run all tests using the CUnit Basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests(); CU_cleanup_registry(); return CU_get_error(); } EOF grok-1.20110708.1/grok_program.c0000664000076400007640000001242311576274273014247 0ustar jlsjls#include "grok.h" #include "grok_program.h" #include "grok_input.h" #include "grok_matchconf.h" #include #include #include #include #include #include #include #include #include static void *_event_init = NULL; void _collection_sigchld(int sig, short what, void *data); grok_collection_t *grok_collection_init() { grok_collection_t *gcol; gcol = calloc(1, sizeof(grok_collection_t)); gcol->nprograms = 0; gcol->program_size = 10; gcol->programs = calloc(gcol->program_size, sizeof(grok_program_t)); gcol->ebase = event_init(); gcol->exit_code = 0; gcol->ev_sigchld = malloc(sizeof(struct event)); signal_set(gcol->ev_sigchld, SIGCHLD, _collection_sigchld, gcol); signal_add(gcol->ev_sigchld, NULL); return gcol; } void grok_collection_check_end_state(grok_collection_t *gcol) { int still_alive = 0; int p, i, m; int reaction_count = 0; for (p = 0; p < gcol->nprograms; p++) { grok_program_t *gprog = gcol->programs[p]; reaction_count += gprog->reactions; for (i = 0; i < gprog->ninputs; i++) { grok_input_t *ginput = &gprog->inputs[i]; still_alive += (ginput->done == 0); } for (m = 0; m < gprog->nmatchconfigs; m++) { grok_matchconf_t *gmc = &gprog->matchconfigs[m]; still_alive += (gmc->pid != 0); } } if (still_alive == 0) { struct timeval nodelay = { 0, 0 }; grok_log(gcol, LOG_PROGRAM, "No more subprocesses are running. Breaking event loop now."); /* Cleanup */ grok_matchconfig_global_cleanup(); event_base_loopexit(gcol->ebase, &nodelay); if (reaction_count == 0) { gcol->exit_code = 1; } } } void grok_collection_add(grok_collection_t *gcol, grok_program_t *gprog) { int i = 0; grok_log(gcol, LOG_PROGRAM, "Adding %d inputs", gprog->ninputs); for (i = 0; i < gprog->ninputs; i++) { grok_log(gprog, LOG_PROGRAM, "Adding input %d", i); gprog->inputs[i].gprog = gprog; grok_program_add_input(gprog, gprog->inputs + i); } gcol->nprograms++; if (gcol->nprograms == gcol->program_size) { gcol->program_size *= 2; gcol->programs = realloc(gcol->programs, gcol->program_size * sizeof(grok_collection_t *)); } gcol->programs[gcol->nprograms - 1] = gprog; gprog->gcol = gcol; } void _collection_sigchld(int sig, short what, void *data) { grok_collection_t *gcol = (grok_collection_t*)data; struct timeval nodelay = { 0, 0 }; int i = 0; int prognum; int pid, status; grok_log(gcol, LOG_PROGRAM, "SIGCHLD received"); while ((pid = waitpid(-1, &status, WNOHANG)) > 0) { grok_log(gcol, LOG_PROGRAM, "Found dead child pid %d", pid); for (prognum = 0; prognum < gcol->nprograms; prognum++) { grok_program_t *gprog = gcol->programs[prognum]; /* we found a dead child. Look for an input_process it belongs to, * then see if we should restart it */ for (i = 0; i < gprog->nmatchconfigs; i++) { grok_matchconf_t *gmc = (gprog->matchconfigs + i); if (gmc->pid != pid) continue; grok_log(gcol, LOG_PROGRAM, "Pid %d is a matchconf shell", pid); gmc->pid = 0; } for (i = 0; i < gprog->ninputs; i++) { grok_input_t *ginput = (gprog->inputs + i); if (ginput->type != I_PROCESS) continue; grok_input_process_t *gipt = &(ginput->source.process); if (gipt->pid != pid) continue; grok_log(gcol, LOG_PROGRAM, "Pid %d is an exec process", pid); /* use ginput's log values */ grok_log(ginput, LOG_PROGRAM, "Reaped child pid %d. Was process '%s'", pid, gipt->cmd); if (PROCESS_SHOULD_RESTART(gipt)) { /* Calculate the restart delay */ /* XXX: This code should go in the eof handler */ struct timeval restart_delay = { 0, 0 }; if (gipt->run_interval > 0) { struct timeval interval = { gipt->run_interval, 0 }; struct timeval duration; struct timeval now; gettimeofday(&now, NULL); timersub(&now, &(gipt->start_time), &duration); timersub(&interval, &duration, &restart_delay); } if (gipt->min_restart_delay > 0) { struct timeval fixed_delay = { gipt->min_restart_delay, 0 }; if (timercmp(&restart_delay, &fixed_delay, <)) { restart_delay.tv_sec = fixed_delay.tv_sec; restart_delay.tv_usec = fixed_delay.tv_usec; } } grok_log(ginput, LOG_PROGRAM, "Scheduling process restart in %d.%d seconds: %s", restart_delay.tv_sec, restart_delay.tv_usec, gipt->cmd); ginput->restart_delay.tv_sec = restart_delay.tv_sec; ginput->restart_delay.tv_usec = restart_delay.tv_usec; } else { grok_log(gprog, LOG_PROGRAM, "Not restarting process '%s'", gipt->cmd); } event_once(-1, EV_TIMEOUT, grok_input_eof_handler, ginput, &nodelay); } /* end for looping over gprog's inputs */ } /* end for looping over gcol's programs */ } /* while waitpid */ grok_collection_check_end_state(gcol); } void grok_collection_loop(grok_collection_t *gcol) { event_base_dispatch(gcol->ebase); } grok-1.20110708.1/filters.gperf0000664000076400007640000000370111576274273014106 0ustar jlsjls%{ #define _GPERF_ #include "grok.h" #include "grok_logging.h" #include "stringhelper.h" int filter_jsonencode(grok_match_t *gm, char **value, int *value_len, int *value_size); int filter_shellescape(grok_match_t *gm, char **value, int *value_len, int *value_size); int filter_shelldqescape(grok_match_t *gm, char **value, int *value_len, int *value_size); %} %define hash-function-name _string_filter_hash %define lookup-function-name string_filter_lookup %define slot-name name %readonly-tables %language=ANSI-C %compare-strncmp %switch=1 %struct-type struct filter { const char *name; int (*func)(grok_match_t *gm, char **value, int *value_len, int *value_size); }; %% jsonencode,filter_jsonencode shellescape,filter_shellescape shelldqescape,filter_shelldqescape %% int filter_jsonencode(grok_match_t *gm, char **value, int *value_len, int *value_size) { grok_log(gm->grok, LOG_REACTION, "filter executing"); /* json.org says " \ and / should be escaped, in addition to * contol characters (newline, etc). * * Some validators will pass non-escaped forward slashes (solidus) but * we'll escape it anyway. */ string_escape(value, value_len, value_size, "\\\"/", 3, ESCAPE_LIKE_C); string_escape(value, value_len, value_size, "", 0, ESCAPE_NONPRINTABLE | ESCAPE_UNICODE); return 0; } int filter_shellescape(grok_match_t *gm, char **value, int *value_len, int *value_size) { grok_log(gm->grok, LOG_REACTION, "filter executing"); string_escape(value, value_len, value_size, "`^()&{}[]$*?!|;'\"\\", -1, ESCAPE_LIKE_C); return 0; } int filter_shelldqescape(grok_match_t *gm, char **value, int *value_len, int *value_size) { grok_log(gm->grok, LOG_REACTION, "filter executing"); string_escape(value, value_len, value_size, "\\`$\"", -1, ESCAPE_LIKE_C); return 0; } grok-1.20110708.1/grok_config.h0000664000076400007640000000174011576274273014052 0ustar jlsjls#include "grok_program.h" #define CURPROGRAM (conf->programs[conf->nprograms - 1]) #define CURINPUT (CURPROGRAM.inputs [CURPROGRAM.ninputs - 1]) #define CURMATCH (CURPROGRAM.matchconfigs [CURPROGRAM.nmatchconfigs - 1]) #define CURPATTERNFILE (CURPROGRAM.patternfiles [CURPROGRAM.npatternfiles - 1]) #define SETLOG(parent, mine) \ (mine).logmask = (parent).logmask; //(mine).logmask = ((mine).logmask == 0) ? (parent).logmask : (mine).logmask struct config { grok_program_t *programs; int nprograms; int program_size; int logmask; int logdepth; }; void conf_init(struct config *conf); void conf_new_program(struct config *conf); void conf_new_input(struct config *conf); void conf_new_input_process(struct config *conf, char *cmd); void conf_new_input_file(struct config *conf, char *filename); void conf_new_matchconf(struct config *conf); void conf_new_match_pattern(struct config *conf, const char *pattern); void conf_match_set_debug(struct config *conf, int logmask); grok-1.20110708.1/grok_matchconf_macro.gperf0000664000076400007640000000072411576274273016605 0ustar jlsjls%{ #define _GPERF_ #include #include "grok_matchconf_macro.h" %} %define hash-function-name _patname_macro_hash %define lookup-function-name patname2macro %define slot-name str %readonly-tables %language=ANSI-C %compare-strncmp %switch=1 %struct-type struct strmacro { const char *str; int code; }; %% @LINE,VALUE_LINE @MATCH,VALUE_MATCH @JSON_COMPLEX,VALUE_JSON_COMPLEX @JSON,VALUE_JSON_SIMPLE @START,VALUE_START @END,VALUE_END @LENGTH,VALUE_LENGTH %% grok-1.20110708.1/grok_matchconf.h0000664000076400007640000000271511576274273014552 0ustar jlsjls#ifndef _GROK_MATCHCONF_H_ #define _GROK_MATCHCONF_H_ #include "grok.h" #include "grok_input.h" #include "grok_program.h" #include typedef struct grok_matchconf grok_matchconf_t; typedef struct grok_reaction grok_reaction_t; struct grok_reaction { char *cmd; }; struct grok_matchconf { TCLIST *grok_list; /* List of groks to apply to this match config */ char *reaction; char *shell; int flush; /* flush on every write to the shell? */ int is_nomatch; /* should we execute this if we hit the 'no-match' case? */ int no_reaction; /* if true, we will skip reaction for this match*/ FILE *shellinput; /* fd to write reactions to */ int pid; /* pid of shell */ int break_if_match; /* break if we match */ int matches; }; void grok_matchconfig_init(grok_program_t *gprog, grok_matchconf_t *gmc); void grok_matchconfig_close(grok_program_t *gprog, grok_matchconf_t *gmc); void grok_matchconfig_global_cleanup(void); void grok_matchconfig_exec(grok_program_t *gprog, grok_input_t *ginput, const char *text); void grok_matchconfig_exec_nomatch(grok_program_t *gprog, grok_input_t *ginput); void grok_matchconfig_react(grok_program_t *gprog, grok_input_t *ginput, grok_matchconf_t *gmc, grok_match_t *gm); void grok_matchconfig_start_shell(grok_program_t *gprog, grok_matchconf_t *gmc); char *grok_matchconfig_filter_reaction(const char *str, grok_match_t *gm); #endif /* _GROK_MATCHCONF_H_ */ grok-1.20110708.1/grok_discover.c0000664000076400007640000001764211576274273014426 0ustar jlsjls#include #include "stringhelper.h" static int dgrok_init = 0; static grok_t global_discovery_req1_grok; static grok_t global_discovery_req2_grok; static int complexity(const grok_t *grok); static void grok_discover_global_init() { dgrok_init = 1; grok_init(&global_discovery_req1_grok); grok_compile(&global_discovery_req1_grok, ".\\b."); grok_init(&global_discovery_req2_grok); grok_compile(&global_discovery_req2_grok, "%\\{[^}]+\\}"); } grok_discover_t *grok_discover_new(grok_t *source_grok) { grok_discover_t *gdt = malloc(sizeof(grok_discover_t)); grok_discover_init(gdt, source_grok); return gdt; } void grok_discover_init(grok_discover_t *gdt, grok_t *source_grok) { TCLIST *names = NULL; int i = 0, len = 0; if (dgrok_init == 0) { grok_discover_global_init(); } gdt->complexity_tree = tctreenew2(tccmpint32, NULL); gdt->base_grok = source_grok; gdt->logmask = source_grok->logmask; gdt->logdepth = source_grok->logdepth; names = grok_pattern_name_list(source_grok); len = tclistnum(names); /* for each pattern, create a grok. * Sort by complexity. * loop * for each pattern, try replacement * if no replacements, break */ for (i = 0; i < len; i++) { int namelen = 0; const char *name = tclistval(names, i, &namelen); int *key = malloc(sizeof(int)); grok_t *g = grok_new(); grok_clone(g, source_grok); char *gpattern; //if (asprintf(&gpattern, "%%{%.*s =~ /\\b/}", namelen, name) == -1) { if (asprintf(&gpattern, "%%{%.*s}", namelen, name) == -1) { perror("asprintf failed"); abort(); } grok_compile(g, gpattern); *key = complexity(g); /* Low complexity should be skipped */ if (*key > -20) { free((void *)g->pattern); free(key); grok_free_clone(g); free(g); continue; } *key *= 1000; /* Inflate so we can insert duplicates */ grok_log(gdt, LOG_DISCOVER, "Including pattern: (complexity: %d) %.*s", *(int *)key, namelen, name); while (!tctreeputkeep(gdt->complexity_tree, key, sizeof(int), g, sizeof(grok_t))) { *key--; } //grok_free_clone(g); //free(key); } tclistdel(names); } void grok_discover_clean(grok_discover_t *gdt) { tctreedel(gdt->complexity_tree); gdt->base_grok = NULL; } void grok_discover_free(grok_discover_t *gdt) { grok_discover_clean(gdt); free(gdt); } void grok_discover(const grok_discover_t *gdt, /*grok_t *dest_grok, */ const char *input, char **discovery, int *discovery_len) { /* Find known patterns in the input string */ char *pattern = NULL; int pattern_len = 0; int pattern_size = 0; int replacements = -1; int offset = 0; /* Track what start position we are in the string */ int rounds = 0; /* This uses substr_replace to copy the input string while allocating * the size properly and tracking the length */ substr_replace(&pattern, &pattern_len, &pattern_size, 0, 0, input, -1); while (replacements != 0 || offset < pattern_len) { const void *key; int key_len; int match = 0; grok_match_t gm; grok_match_t best_match; grok_log(gdt, LOG_DISCOVER, "%d: Round starting", rounds); grok_log(gdt, LOG_DISCOVER, "%d: String: %.*s", rounds, pattern_len, pattern); grok_log(gdt, LOG_DISCOVER, "%d: Offset: % *s^", rounds, offset - 1, " "); tctreeiterinit(gdt->complexity_tree); rounds++; replacements = 0; /* This is used for tracking the longest matched pattern */ int max_matchlen = 0; /* This is used for finding the earliest (leftwise in the string) match * end point. If no matches are found, we'll skip to this position in the * string to find more things to match */ int first_match_endpos = -1; char *cursor = pattern + offset; while ((key = tctreeiternext(gdt->complexity_tree, &key_len)) != NULL) { const int *complexity = (const int *)key; int val_len; const grok_t *g = tctreeget(gdt->complexity_tree, key, sizeof(int), &val_len); match = grok_exec(g, cursor, &gm); grok_log(gdt, LOG_DISCOVER, "Test %s against %.*s", (match == GROK_OK ? "succeeded" : "failed"), g->pattern_len, g->pattern); if (match == GROK_OK) { int still_ok; int matchlen = gm.end - gm.start; grok_log(gdt, LOG_DISCOVER, "Matched %.*s", matchlen , cursor + gm.start); if (first_match_endpos == -1 || gm.end < first_match_endpos) { first_match_endpos = gm.end; } still_ok = grok_execn(&global_discovery_req1_grok, cursor + gm.start, matchlen, NULL); if (still_ok != GROK_OK) { grok_log(gdt, LOG_DISCOVER, "%d: Matched %s, but match (%.*s) not complex enough.", rounds, g->pattern, matchlen, cursor + gm.start); continue; } /* We don't want to replace existing patterns like %{FOO} */ if (grok_execn(&global_discovery_req2_grok, cursor + gm.start, matchlen, NULL) == GROK_OK) { grok_log(gdt, LOG_DISCOVER, "%d: Matched %s, but match (%.*s) includes %{...} patterns.", rounds, g->pattern, matchlen, cursor + gm.start); continue; } /* A longer match is a better match. * If match length is equal to max, then still take this match as * better since if true, then this match has a pattern that is less * complex and is therefore a more relevant match */ if (max_matchlen <= matchlen) { grok_log(gdt, LOG_DISCOVER, "%d: New best match: %s", rounds, g->pattern); max_matchlen = matchlen; memcpy(&best_match, &gm, sizeof(grok_match_t)); } else if (max_matchlen == matchlen) { /* Found a match with same length */ grok_log(gdt, LOG_DISCOVER, "%d: Common length match: %s", rounds, g->pattern); } } /* match == GROK_OK */ } /* tctreeiternext(complexity_tree ...) */ if (max_matchlen == 0) { /* No valid matches were found */ if (first_match_endpos > 0) { offset += first_match_endpos; } } else { /* We found a match, replace it in the pattern */ grok_log(gdt, LOG_DISCOVER, "%d: Matched %s on '%.*s'", rounds, best_match.grok->pattern, best_match.end - best_match.start, cursor + best_match.start); replacements = 1; substr_replace(&pattern, &pattern_len, &pattern_size, best_match.start + offset, best_match.end + offset, best_match.grok->pattern, best_match.grok->pattern_len); substr_replace(&pattern, &pattern_len, &pattern_size, best_match.start + offset, best_match.start + offset, "\\E", 2); substr_replace(&pattern, &pattern_len, &pattern_size, best_match.start + best_match.grok->pattern_len + 2 + offset, 0, "\\Q", 2); //usleep(1000000); /* Wrap the new regexp in \E .. \Q, for ending and beginning (respectively) * 'quote literal' as PCRE and Perl support. This prevents literal characters * in the input strings from being interpreted */ grok_log(gdt, LOG_DISCOVER, "%d: Pattern: %.*s", rounds, pattern_len, pattern); } /* if (max_matchlen != 0) */ } /* while (replacements != 0) */ /* Add \Q and \E at beginning and end */ substr_replace(&pattern, &pattern_len, &pattern_size, 0, 0, "\\Q", 2); substr_replace(&pattern, &pattern_len, &pattern_size, pattern_len, pattern_len, "\\E", 2); /* TODO(sissel): Prune any useless \Q\E */ *discovery = pattern; *discovery_len = pattern_len; } /* Compute the relative complexity of a pattern */ static int complexity(const grok_t *grok) { int score; score += string_count(grok->full_pattern, "|"); score += strlen(grok->full_pattern) / 2; return -score; /* Sort most-complex first */ } grok-1.20110708.1/package.sh0000664000076400007640000000121611576274273013337 0ustar jlsjls#!/bin/sh if [ $# -ne 1 ] ; then set -- $(date "+%Y%m%d") echo "No version specified, using $1" fi if [ -z "$PACKAGE" ] ; then echo "Must specify package name in environment." echo "PACKAGE= ???" exit 1 fi if [ ! -f "FILES" ] ; then echo "Missing FILES file which should contain the list of things to put in this package" exit 1 fi TMP="/tmp" PACKAGE="$PACKAGE-$1" DIR="${TMP}/${PACKAGE}" rm -rf "$DIR" mkdir "$DIR" rsync -rvt --filter '. FILES' . "$DIR" # gnu tar sucks, tar -C /tmp doesn't actually change directories for tar # creation? find $DIR -name '*.o' -delete tar -C /tmp/ -zcf "${PACKAGE}.tar.gz" "$PACKAGE" rm -rf "$DIR" grok-1.20110708.1/grok_input.c0000664000076400007640000003007711576274273013744 0ustar jlsjls#include #include #include #include #include #include #include #include #include #include #include #include "grok.h" #include "grok_program.h" #include "grok_input.h" #include "grok_matchconf.h" #include "grok_logging.h" #include "libc_helper.h" void _program_process_stdout_read(struct bufferevent *bev, void *data); void _program_process_start(int fd, short what, void *data); void _program_process_buferror(struct bufferevent *bev, short what, void *data); void _program_file_repair_event(int fd, short what, void *data); void _program_file_read_buffer(struct bufferevent *bev, void *data); void _program_file_read_real(int fd, short what, void *data); void _program_file_buferror(struct bufferevent *bev, short what, void *data); void grok_program_add_input(grok_program_t *gprog, grok_input_t *ginput) { grok_log(gprog, LOG_PROGRAM, "Adding input of type %s", (ginput->type == I_FILE) ? "file" : "process"); ginput->instance_match_count = 0; ginput->done = 0; switch (ginput->type) { case I_FILE: grok_program_add_input_file(gprog, ginput); break; case I_PROCESS: grok_program_add_input_process(gprog, ginput); break; } } void grok_program_add_input_process(grok_program_t *gprog, grok_input_t *ginput) { struct bufferevent *bev; grok_input_process_t *gipt = &(ginput->source.process); int childin[2], childout[2], childerr[2]; struct timeval now = { 0, 0 }; safe_pipe(childin); safe_pipe(childout); safe_pipe(childerr); gipt->p_stdin = childin[1]; gipt->p_stdout = childout[0]; gipt->p_stderr = childerr[0]; gipt->c_stdin = childin[0]; gipt->c_stdout = childout[1]; gipt->c_stderr = childerr[1]; bev = bufferevent_new(gipt->p_stdout, _program_process_stdout_read, NULL, _program_process_buferror, ginput); bufferevent_enable(bev, EV_READ); ginput->bev = bev; if (gipt->read_stderr) { /* store this somewhere */ bev = bufferevent_new(gipt->p_stderr, _program_process_stdout_read, NULL, _program_process_buferror, ginput); bufferevent_enable(bev, EV_READ); } grok_log(ginput, LOG_PROGRAMINPUT, "Scheduling start of: %s", gipt->cmd); event_once(-1, EV_TIMEOUT, _program_process_start, ginput, &now); } void grok_program_add_input_file(grok_program_t *gprog, grok_input_t *ginput) { struct bufferevent *bev; struct stat st; int ret; int pipefd[2]; grok_input_file_t *gift = &(ginput->source.file); grok_log(ginput, LOG_PROGRAMINPUT, "Adding file input: %s", gift->filename); ret = stat(gift->filename, &st); if (ret == -1) { grok_log(gprog, LOG_PROGRAMINPUT , "Failure stat(2)'ing file: %s", gift->filename); grok_log(gprog, LOG_PROGRAMINPUT , "strerror(%d): %s", strerror(errno)); return; } gift->fd = open(gift->filename, O_RDONLY); if (gift->fd < 0) { grok_log(gprog, LOG_PROGRAM, "Failure open(2)'ing file for read '%s': %s", gift->filename, strerror(errno)); return; } safe_pipe(pipefd); gift->offset = 0; gift->reader = pipefd[0]; gift->writer = pipefd[1]; memcpy(&(gift->st), &st, sizeof(st)); gift->waittime.tv_sec = 0; gift->waittime.tv_usec = 0; gift->readbuffer = malloc(st.st_blksize); grok_log(ginput, LOG_PROGRAMINPUT, "dup2(%d, %d)", gift->fd, gift->writer); /* Tie our open file read fd to the writer of our pipe */ // this doesn't work bev = bufferevent_new(gift->reader, _program_file_read_buffer, NULL, _program_file_buferror, ginput); bufferevent_enable(bev, EV_READ); ginput->bev = bev; event_once(-1, EV_TIMEOUT, _program_file_read_real, ginput, &(gift->waittime)); } void _program_process_stdout_read(struct bufferevent *bev, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_program_t *gprog = ginput->gprog; char *line; while ((line = evbuffer_readline(EVBUFFER_INPUT(bev))) != NULL) { grok_matchconfig_exec(gprog, ginput, line); free(line); } } void _program_process_buferror(struct bufferevent *bev, short what, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_input_process_t *gipt = &(ginput->source.process); grok_log(ginput, LOG_PROGRAMINPUT, "Buffer error %d on process %d: %s", what, gipt->pid, gipt->cmd); } void _program_process_start(int fd, short what, void *data) { grok_input_t *ginput = (grok_input_t*)data; grok_input_process_t *gipt = &(ginput->source.process); int pid = 0; /* reset the 'instance match count' since we're starting the process */ ginput->instance_match_count = 0; /* start the process */ pid = fork(); if (pid != 0) { gipt->pid = pid; gipt->pgid = getpgid(pid); gettimeofday(&(gipt->start_time), NULL); grok_log(ginput, LOG_PROGRAMINPUT, "Starting process: '%s' (%d)", gipt->cmd, getpid()); return; } dup2(gipt->c_stdin, 0); dup2(gipt->c_stdout, 1); if (gipt->read_stderr) { dup2(gipt->c_stderr, 2); } execlp("sh", "sh", "-c", gipt->cmd, NULL); grok_log(ginput, LOG_PROGRAM, "execlp(2) returned unexpectedly. Is 'sh' in your path?"); grok_log(ginput, LOG_PROGRAM, "execlp: %s", strerror(errno)); exit(-1); /* in case execlp fails */ } void _program_file_read_buffer(struct bufferevent *bev, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_program_t *gprog = ginput->gprog; char *line; while ((line = evbuffer_readline(EVBUFFER_INPUT(bev))) != NULL) { grok_matchconfig_exec(gprog, ginput, line); free(line); } } void _program_file_buferror(struct bufferevent *bev, short what, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_input_file_t *gift = &(ginput->source.file); struct timeval nodelay = { 0, 0 }; grok_log(ginput, LOG_PROGRAMINPUT, "Buffer error %d on file %d: %s", what, gift->fd, gift->filename); if (what & EVBUFFER_EOF) { /* EOF erro on a file, which means libevent forgets about it. * let's re-add it */ grok_log(ginput, LOG_PROGRAMINPUT, "EOF Error on file buffer for '%s'. Ignoring.", gift->filename); ginput->restart_delay.tv_sec = gift->waittime.tv_sec; ginput->restart_delay.tv_usec = gift->waittime.tv_usec; event_once(0, EV_TIMEOUT, grok_input_eof_handler, ginput, &nodelay); //} else if (what & EVBUFFER_TIMEOUT) { ///* Timeout reading from our file buffer */ //ginput->restart_delay.tv_sec = gift->waittime.tv_sec; //ginput->restart_delay.tv_usec = gift->waittime.tv_usec; //bufferevent_enable(ginput->bev, EV_READ); } } void _program_file_repair_event(int fd, short what, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_input_file_t *gift = &(ginput->source.file); struct bufferevent *bev = ginput->bev; struct stat st; if (stat(gift->filename, &st) != 0) { grok_log(ginput, LOG_PROGRAM, "Failure stat(2)'ing file '%s': %s", gift->filename, strerror(errno)); grok_log(ginput, LOG_PROGRAM, "Unrecoverable error (stat failed). Can't continue watching '%s'", gift->filename); return; } if (gift->st.st_ino != st.st_ino) { /* inode changed, reopen file */ grok_log(ginput, LOG_PROGRAMINPUT, "File inode changed from %d to %d. Reopening file '%s'", gift->st.st_ino, st.st_ino, gift->filename); close(gift->fd); gift->fd = open(gift->filename, O_RDONLY); gift->waittime.tv_sec = 0; gift->waittime.tv_usec = 0; gift->offset = 0; } else if (st.st_size < gift->st.st_size) { /* File size shrank */ grok_log(ginput, LOG_PROGRAMINPUT, "File size shrank from %d to %d. Seeking to beginning of file '%s'", gift->st.st_size, st.st_size, gift->filename); gift->offset = 0; lseek(gift->fd, gift->offset, SEEK_SET); gift->waittime.tv_sec = 0; gift->waittime.tv_usec = 0; } else { /* Nothing changed, we should wait */ if (gift->waittime.tv_sec == 0) { gift->waittime.tv_sec = 1; } else { gift->waittime.tv_sec *= 2; if (gift->waittime.tv_sec > 60) { gift->waittime.tv_sec = 60; } } } memcpy(&(gift->st), &st, sizeof(st)); grok_log(ginput, LOG_PROGRAMINPUT, "Repairing event with fd %d file '%s'. Will read again in %d.%d secs", bev->ev_read.ev_fd, gift->filename, gift->waittime.tv_sec, gift->waittime.tv_usec); //event_add(&bev->ev_read, &(gift->waittime)); event_once(0, EV_TIMEOUT, _program_file_read_real, ginput, &(gift->waittime)); } void _program_file_read_real(int fd, short what, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_input_file_t *gift = &(ginput->source.file); int write_ret; int bytes = 0; bytes = read(gift->fd, gift->readbuffer, gift->st.st_blksize); write_ret = write(gift->writer, gift->readbuffer, bytes); if (write_ret == -1) { grok_log(ginput, LOG_PROGRAMINPUT, "fatal write() to pipe fd %d of %d bytes: %s", gift->writer, bytes, strerror(errno)); /* XXX: Maybe just shutdown this particular process/file instead * of exiting */ exit(1); } gift->offset += bytes; /* we can potentially read past our last 'filesize' if the file * has been updated since stat()'ing it. */ if (gift->offset > gift->st.st_size) gift->st.st_size = gift->offset; grok_log(ginput, LOG_PROGRAMINPUT, "%s: read %d bytes", gift->filename, bytes); if (bytes == 0) { /* nothing to read, at EOF */ grok_input_eof_handler(0, 0, ginput); } else if (bytes < 0) { grok_log(ginput, LOG_PROGRAMINPUT, "Error: Bytes read < 0: %d", bytes); grok_log(ginput, LOG_PROGRAMINPUT, "Error: strerror() says: %s", strerror(errno)); } else { /* We read more than 0 bytes, so we should keep reading this file * immediately */ gift->waittime.tv_sec = 0; gift->waittime.tv_usec = 0; event_once(0, EV_TIMEOUT, _program_file_read_real, ginput, &(gift->waittime)); } } void grok_input_eof_handler(int fd, short what, void *data) { grok_input_t *ginput = (grok_input_t *)data; grok_program_t *gprog = ginput->gprog; if (ginput->instance_match_count == 0) { /* execute nomatch if there is one on this program */ grok_matchconfig_exec_nomatch(gprog, ginput); } switch (ginput->type) { case I_PROCESS: if (PROCESS_SHOULD_RESTART(&(ginput->source.process))) { ginput->instance_match_count = 0; event_once(-1, EV_TIMEOUT, _program_process_start, ginput, &ginput->restart_delay); } else { grok_log(ginput->gprog, LOG_PROGRAM, "Not restarting process: %s", ginput->source.process.cmd); bufferevent_disable(ginput->bev, EV_READ); close(ginput->source.process.p_stdin); close(ginput->source.process.p_stdout); close(ginput->source.process.p_stderr); ginput->done = 1; } break; case I_FILE: if (ginput->source.file.follow) { ginput->instance_match_count = 0; event_once(-1, EV_TIMEOUT, _program_file_repair_event, ginput, &ginput->restart_delay); } else { grok_log(ginput->gprog, LOG_PROGRAM, "Not restarting file: %s", ginput->source.file.filename); bufferevent_disable(ginput->bev, EV_READ); close(ginput->source.file.reader); close(ginput->source.file.writer); close(ginput->source.file.fd); ginput->done = 1; } break; } /* If all inputs are now done, close the shell */ int still_open = 0; int i = 0; for (i = 0; i < gprog->ninputs; i++) { still_open += !gprog->inputs[i].done; if (!gprog->inputs[i].done) { grok_log(gprog, LOG_PROGRAM, "Input still open: %d", i); } } if (still_open == 0) { for (i = 0; i < gprog->nmatchconfigs; i++) { grok_matchconfig_close(gprog, &gprog->matchconfigs[i]); } grok_collection_check_end_state(gprog->gcol); } } grok-1.20110708.1/platform.sh0000775000076400007640000000130311576274273013570 0ustar jlsjls#!/bin/sh uname=$(uname) libsuffix() { case $uname in Darwin) if [ -z "$1" ] ; then echo "dylib" else echo "$1.dylib" fi ;; *) if [ -z "$1" ] ; then echo "so" else echo so.$1 fi ;; esac } dynlibflag() { case $uname in Darwin) echo "-dynamiclib" ;; *) echo "-shared" ;; esac } libnameflag() { MAJOR=$1 INSTALLLIB=$2 case $uname in Darwin) echo "-Wl,-install_name,$INSTALLLIB/libgrok.$MAJOR.dylib" ;; *) echo "-Wl,-soname=libgrok.so.$MAJOR" ;; esac } command=$1 shift case $command in libsuffix) $command "$@" ;; dynlibflag) $command "$@" ;; libnameflag) $command "$@" ;; esac grok-1.20110708.1/grok.10000664000076400007640000002601011576274273012433 0ustar jlsjls.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "GROK 1" .TH GROK 1 "2009-12-25" "" "" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" grok \- parse logs, handle events, and make your unstructured text structured. .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBgrok\fR [\fB\-d\fR] \fB\-f configfile\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" Grok is software that allows you to easily parse logs and other files. With grok, you can turn unstructured log and event data into structured data. .PP The grok program is a great tool for parsing log data and program output. You can match any number of complex patterns on any number of inputs (processes and files) and have custom reactions. .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-d\fR or \fB\-\-daemon\fR" 4 .IX Item "-d or --daemon" Daemonize after parsing the config file. Implemented with \fIdaemon\fR\|(3). The default is to stay in foreground. .IP "\fB\-f configfile\fR" 4 .IX Item "-f configfile" Specify a grok config file to use. .SH "CONFIGURATION" .IX Header "CONFIGURATION" You can call the config file anything you want. A full example config follows below, with documentation on options and defaults. .PP .Vb 7 \& # \-\-\- Begin sample grok config \& # This is a comment. :) \& # \& # enable or disable debugging. Debug is set false by default. \& # the \*(Aqdebug\*(Aq setting is valid at every level. \& # debug values are copied down\-scope unless overridden. \& debug: true \& \& # you can define multiple program blocks in a config file. \& # a program is just a collection of inputs (files, execs) and \& # matches (patterns and reactions), \& program { \& debug: false \& \& # file with no block. settings block is optional \& file "/var/log/messages" \& \& # file with a block \& file "/var/log/secure" { \& # follow means to follow a file like \*(Aqtail \-F\*(Aq but starts \& # reading at the beginning of the file. A file is followed \& # through truncation, log rotation, and append. \& follow: true \& } \& \& # execute a command, settings block is optional \& exec "netstat \-rn" \& \& # exec with a block \& exec "ping \-c 1 www.google.com" { \& # automatically rerun the exec if it exits, as soon as it exits. \& # default is false \& restart\-on\-exit: false \& \& # minimum amount of time from one start to the next start, if we \& # are restarting. Default is no minimum \& minimum\-restart\-interval: 5 \& \& # run every N seconds, but only if the process has exited. \& # default is not to rerun at all. \& run\-interval: 60 \& \& # default is to read process output only from stdout. \& # set this to true to also read from stderr. \& read\-stderr: false \& } \& \& # You can have multiple match {} blocks in your config. \& # They are applied, in order, against every line of input that \& # comes from your exec and file instances in this program block. \& match { \& # match a pattern. This can be any regexp and can include %{foo} \& # grok patterns \& pattern: "some pattern to match" \& \& # You can have multiple patterns here, any are valid for matching. \& pattern: "another pattern to match" \& \& # the default reaction is "%{@LINE}" which is the full line \& # matched. the reaction can be a special value of \*(Aqnone\*(Aq which \& # means no reaction occurs, or it can be any string. The \& # reaction is emitted to the shell if it is not none. \& reaction: "%{@LINE}" \& \& # the default shell is \*(Aqstdout\*(Aq which means reactions are \& # printed directly to standard output. Setting the shell to a \& # command string will run that command and pipe reaction data to \& # it. \& #shell: stdout \& shell: "/bin/sh" \& \& # flush after every write to the shell. \& # The default is not to flush. \& flush: true \& \& # break\-if\-match means do not attempt any further matches on \& # this line. the default is false. \& break\-if\-match: true \& } \& } \& # \-\- End config .Ve .SH "PATTERN FILES" .IX Header "PATTERN FILES" Pattern files contain lists of names and patterns for loading into grok. .PP Patterns are newline-delimited and have this syntax: \fIpatternname\fR \fIexpression\fR .PP Any whitespace between the patternname and expression are ignored. .IP "patternname" 4 .IX Item "patternname" This is the name of your pattern which, when loaded, can be referenced in patterns as %{patternname} .IP "expression" 4 .IX Item "expression" The expression here is, verbatim, available as a regular expression. You do not need to worry about how to escape things. .SS "\s-1PATTERN\s0 \s-1EXAMPLES\s0" .IX Subsection "PATTERN EXAMPLES" .Vb 2 \& DIGITS \ed+ \& HELLOWORLD \ebhello world\eb .Ve .SH "REGULAR EXPRESSIONS" .IX Header "REGULAR EXPRESSIONS" The expression engine underneath grok is \s-1PCRE\s0. Any syntax in \s-1PCRE\s0 is valid in grok. .SH "REACTIONS" .IX Header "REACTIONS" Reactions can reference named patterns from the match. You can also access a few other special values, including: .IP "%{@LINE}" 4 .IX Item "%{@LINE}" The line matched. .IP "%{@MATCH}" 4 .IX Item "%{@MATCH}" The substring matched .IP "%{@START}" 4 .IX Item "%{@START}" The starting position of the match from the beginning of the string. .IP "%{@END}" 4 .IX Item "%{@END}" The ending position of the match. .IP "%{@LENGTH}" 4 .IX Item "%{@LENGTH}" The length of the match .IP "%{@JSON}" 4 .IX Item "%{@JSON}" The full set of patterns captured, encoded as a json dictionary as a structure of { pattern: [ array of captures ] }. We use an array becuase you can use the same named pattern multiple times in a match. .IP "%{@JSON_COMPLEX}" 4 .IX Item "%{@JSON_COMPLEX}" Similar to the above, but includes start and end position for every named pattern. That structure is: .Sp .Vb 7 \& { "grok": [ \& { "@LINE": { "start": ..., "end": ..., "value": ... } }, \& { "@MATCH": { "start": ..., "end": ..., "value": ... } }, \& { "patternname": { "start": startpos, "end": endpos, "value": "string" } }, \& { "patternname2": { "start": startpos, "end": endpos, "value": "string" } }, \& ... \& ] } .Ve .SS "\s-1REACTION\s0 \s-1FILTERS\s0" .IX Subsection "REACTION FILTERS" Reaction filters allow you to mutate the captured data. The following filters are available: .PP An example of using a filter in a reaction is like this: reaction: \*(L"echo Matched: %{@MATCH|shellescape}\*(R" .IP "shellescape" 4 .IX Item "shellescape" Escapes all characters necessary to make the string safe in non-quoted a shell argument .IP "shelldqescape" 4 .IX Item "shelldqescape" Escapes characters necessary to be safe within doublequotes in a shell. .IP "jsonencode" 4 .IX Item "jsonencode" Makes the string safe to represent in a json string (escapes according to json.org recommendations) .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIpcre\fR\|(3), \fIpcresyntax\fR\|(3), .PP Sample grok configs are available in in the grok samples/ directory. .PP Project site: .PP Google Code: .PP Issue/Bug Tracker: .SH "CONTACT" .IX Header "CONTACT" Please send questions to grok\-users@googlegroups.com. File bugs and feature requests at the following \s-1URL:\s0 .PP Issue/Bug Tracker: .SH "HISTORY" .IX Header "HISTORY" grok was originally in perl, then rewritten in \*(C+ and Xpressive (regex), then rewritten in C and \s-1PCRE\s0. .SH "AUTHOR" .IX Header "AUTHOR" grok was written by Jordan Sissel. grok-1.20110708.1/conf.yy.c0000664000076400007640000015260511603237365013142 0ustar jlsjls#line 2 "conf.yy.c" #line 4 "conf.yy.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart (FILE *input_file ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void yypop_buffer_state (void ); static void yyensure_buffer_stack (void ); static void yy_load_buffer_state (void ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); void yyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define yywrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 36 #define YY_END_OF_BUFFER 37 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[194] = { 0, 0, 0, 24, 24, 27, 27, 35, 35, 37, 34, 32, 33, 26, 23, 21, 20, 22, 31, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 29, 30, 24, 25, 27, 28, 36, 35, 36, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 24, 27, 0, 27, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 15, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 11, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 8, 0, 2, 0, 0, 16, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 21, 22, 23, 24, 25, 26, 1, 27, 28, 29, 30, 31, 32, 33, 34, 1, 35, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[37] = { 0, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[201] = { 0, 0, 0, 223, 222, 33, 34, 221, 220, 222, 227, 227, 227, 227, 227, 32, 39, 42, 227, 194, 204, 186, 40, 193, 41, 192, 39, 30, 38, 40, 189, 199, 227, 227, 0, 227, 203, 227, 0, 0, 227, 63, 197, 199, 195, 188, 187, 178, 185, 194, 176, 180, 49, 186, 227, 173, 176, 46, 176, 183, 183, 167, 168, 0, 184, 0, 183, 0, 181, 162, 177, 162, 173, 160, 165, 171, 171, 164, 160, 166, 227, 152, 162, 52, 150, 172, 155, 151, 159, 153, 155, 227, 156, 227, 152, 145, 163, 149, 144, 154, 227, 149, 137, 134, 156, 149, 140, 137, 128, 151, 227, 227, 124, 129, 227, 124, 124, 125, 139, 130, 121, 121, 123, 227, 117, 125, 227, 132, 120, 128, 117, 117, 114, 109, 108, 107, 227, 118, 105, 127, 113, 227, 227, 107, 115, 123, 112, 121, 97, 98, 227, 227, 108, 98, 95, 98, 104, 103, 91, 93, 85, 103, 87, 85, 85, 105, 98, 80, 84, 78, 227, 90, 83, 90, 75, 90, 68, 227, 81, 227, 72, 78, 227, 68, 67, 89, 227, 78, 74, 63, 52, 9, 227, 227, 74, 77, 80, 83, 86, 88, 91 } ; static yyconst flex_int16_t yy_def[201] = { 0, 193, 1, 194, 194, 195, 195, 196, 196, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 197, 193, 198, 193, 199, 200, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 197, 198, 199, 198, 200, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 0, 193, 193, 193, 193, 193, 193, 193 } ; static yyconst flex_int16_t yy_nxt[264] = { 0, 10, 11, 12, 13, 14, 10, 15, 16, 17, 18, 10, 10, 19, 10, 20, 21, 22, 10, 10, 10, 10, 23, 24, 25, 26, 27, 28, 29, 30, 10, 10, 10, 10, 31, 32, 33, 37, 37, 41, 41, 41, 55, 192, 38, 38, 41, 41, 41, 41, 41, 41, 45, 50, 57, 78, 53, 56, 83, 59, 46, 51, 47, 54, 191, 48, 103, 104, 58, 60, 41, 41, 41, 79, 84, 34, 34, 34, 36, 36, 36, 39, 39, 39, 63, 190, 63, 64, 64, 66, 189, 66, 67, 188, 67, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 80, 110, 109, 54, 108, 107, 106, 105, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 65, 65, 54, 88, 87, 86, 85, 82, 81, 80, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 65, 62, 61, 52, 49, 44, 43, 42, 193, 40, 40, 35, 35, 9, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 } ; static yyconst flex_int16_t yy_chk[264] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 15, 15, 15, 27, 191, 5, 6, 16, 16, 16, 17, 17, 17, 22, 24, 28, 52, 26, 27, 57, 29, 22, 24, 22, 26, 190, 22, 83, 83, 28, 29, 41, 41, 41, 52, 57, 194, 194, 194, 195, 195, 195, 196, 196, 196, 197, 189, 197, 198, 198, 199, 188, 199, 200, 187, 200, 185, 184, 183, 181, 180, 178, 176, 175, 174, 173, 172, 171, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, 156, 155, 154, 153, 152, 149, 148, 147, 146, 145, 144, 143, 140, 139, 138, 137, 135, 134, 133, 132, 131, 130, 129, 128, 127, 125, 124, 122, 121, 120, 119, 118, 117, 116, 115, 113, 112, 109, 108, 107, 106, 105, 104, 103, 102, 101, 99, 98, 97, 96, 95, 94, 92, 90, 89, 88, 87, 86, 85, 84, 82, 81, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 66, 64, 62, 61, 60, 59, 58, 56, 55, 53, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 36, 31, 30, 25, 23, 21, 20, 19, 9, 8, 7, 4, 3, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "conf.lex" #line 2 "conf.lex" #include #include "conf.tab.h" #include "grok_config.h" #include "stringhelper.h" #line 583 "conf.yy.c" #define INITIAL 0 #define LEX_COMMENT 1 #define LEX_STRING 2 #define LEX_ERROR 3 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy (void ); int yyget_debug (void ); void yyset_debug (int debug_flag ); YY_EXTRA_TYPE yyget_extra (void ); void yyset_extra (YY_EXTRA_TYPE user_defined ); FILE *yyget_in (void ); void yyset_in (FILE * in_str ); FILE *yyget_out (void ); void yyset_out (FILE * out_str ); int yyget_leng (void ); char *yyget_text (void ); int yyget_lineno (void ); void yyset_lineno (int line_number ); YYSTYPE * yyget_lval (void ); void yyset_lval (YYSTYPE * yylval_param ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (void ); #else extern int yywrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ unsigned n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex \ (YYSTYPE * yylval_param ); #define YY_DECL int yylex \ (YYSTYPE * yylval_param ) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; YYSTYPE * yylval; #line 18 "conf.lex" #line 779 "conf.yy.c" yylval = yylval_param; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 194 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 227 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 20 "conf.lex" { return PROGRAM; } YY_BREAK case 2: YY_RULE_SETUP #line 21 "conf.lex" { return PROG_LOADPATTERNS; } YY_BREAK case 3: YY_RULE_SETUP #line 23 "conf.lex" { return PROG_FILE; } YY_BREAK case 4: YY_RULE_SETUP #line 24 "conf.lex" { return FILE_FOLLOW; } YY_BREAK case 5: YY_RULE_SETUP #line 26 "conf.lex" { return PROG_EXEC; } YY_BREAK case 6: YY_RULE_SETUP #line 27 "conf.lex" { return EXEC_RESTARTONEXIT; } YY_BREAK case 7: YY_RULE_SETUP #line 28 "conf.lex" { return EXEC_MINRESTARTDELAY; } YY_BREAK case 8: YY_RULE_SETUP #line 29 "conf.lex" { return EXEC_RUNINTERVAL; } YY_BREAK case 9: YY_RULE_SETUP #line 30 "conf.lex" { return EXEC_READSTDERR; } YY_BREAK case 10: YY_RULE_SETUP #line 32 "conf.lex" { return PROG_MATCH; } YY_BREAK case 11: YY_RULE_SETUP #line 33 "conf.lex" { return PROG_NOMATCH; } YY_BREAK case 12: YY_RULE_SETUP #line 34 "conf.lex" { return MATCH_PATTERN; } YY_BREAK case 13: YY_RULE_SETUP #line 35 "conf.lex" { return MATCH_REACTION; } YY_BREAK case 14: YY_RULE_SETUP #line 36 "conf.lex" { return MATCH_SHELL; } YY_BREAK case 15: YY_RULE_SETUP #line 37 "conf.lex" { return MATCH_FLUSH; } YY_BREAK case 16: YY_RULE_SETUP #line 38 "conf.lex" { return MATCH_BREAK_IF_MATCH; } YY_BREAK case 17: YY_RULE_SETUP #line 40 "conf.lex" { return CONF_DEBUG; } YY_BREAK case 18: YY_RULE_SETUP #line 41 "conf.lex" { return LITERAL_NONE; } YY_BREAK case 19: YY_RULE_SETUP #line 42 "conf.lex" { return SHELL_STDOUT; } YY_BREAK case 20: YY_RULE_SETUP #line 44 "conf.lex" { yylval->num = 1; return INTEGER; } YY_BREAK case 21: YY_RULE_SETUP #line 45 "conf.lex" { yylval->num = 0; return INTEGER; } YY_BREAK case 22: YY_RULE_SETUP #line 46 "conf.lex" { yylval->num = atoi(yytext); return INTEGER; } YY_BREAK case 23: YY_RULE_SETUP #line 48 "conf.lex" BEGIN(LEX_COMMENT); YY_BREAK case 24: YY_RULE_SETUP #line 49 "conf.lex" /* ignore comments */ //{ printf("Comment: %s\n", yytext); } YY_BREAK case 25: /* rule 25 can match eol */ YY_RULE_SETUP #line 50 "conf.lex" { yylineno++; BEGIN(INITIAL); } /* end comment */ YY_BREAK case 26: YY_RULE_SETUP #line 52 "conf.lex" { BEGIN(LEX_STRING); } YY_BREAK case 27: /* rule 27 can match eol */ YY_RULE_SETUP #line 53 "conf.lex" { int len, size; len = yyleng; yylval->str = string_ndup(yytext, len); size = len + 1; string_unescape(&yylval->str, &len, &size); /* XXX: putting a null at the end shouldn't be necessary */ yylval->str[len] = '\0'; return QUOTEDSTRING; } YY_BREAK case 28: YY_RULE_SETUP #line 63 "conf.lex" { BEGIN(INITIAL); } YY_BREAK case 29: YY_RULE_SETUP #line 66 "conf.lex" { return '{'; } YY_BREAK case 30: YY_RULE_SETUP #line 67 "conf.lex" { return '}'; } YY_BREAK case 31: YY_RULE_SETUP #line 68 "conf.lex" { return ':'; } YY_BREAK case 32: YY_RULE_SETUP #line 71 "conf.lex" { /* ignore whitespace */ } YY_BREAK case 33: /* rule 33 can match eol */ YY_RULE_SETUP #line 72 "conf.lex" { yylineno++; } YY_BREAK case 34: YY_RULE_SETUP #line 74 "conf.lex" { BEGIN(LEX_ERROR); unput(yytext[0]); } YY_BREAK case 35: YY_RULE_SETUP #line 75 "conf.lex" { fprintf(stderr, "Unexpected input on line %d: '%.*s'\n", yylineno, yyleng, yytext); BEGIN(INITIAL); return 256; /* 256 == lexer error */ } YY_BREAK case 36: YY_RULE_SETUP #line 81 "conf.lex" ECHO; YY_BREAK #line 1061 "conf.yy.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(LEX_COMMENT): case YY_STATE_EOF(LEX_STRING): case YY_STATE_EOF(LEX_ERROR): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 194 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 194 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 193); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ); yyfree((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { return yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param line_number * */ void yyset_lineno (int line_number ) { yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * in_str ) { yyin = in_str ; } void yyset_out (FILE * out_str ) { yyout = out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int bdebug ) { yy_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 81 "conf.lex" grok-1.20110708.1/grok_pattern.h0000664000076400007640000000146311576274273014264 0ustar jlsjls#ifndef _GROK_PATTERN_H_ #define _GROK_PATTERN_H_ #include "grok.h" #include TCLIST *grok_pattern_name_list(const grok_t *grok); int grok_pattern_add(const grok_t *grok, const char *name, size_t name_len, const char *regexp, size_t regexp_len); int grok_pattern_find(const grok_t *grok, const char *name, size_t name_len, const char **regexp, size_t *regexp_len); int grok_patterns_import_from_file(const grok_t *grok, const char *filename); int grok_patterns_import_from_string(const grok_t *grok, const char *buffer); /* Exposed only for testing */ void _pattern_parse_string(const char *line, const char **name, size_t *name_len, const char **regexp, size_t *regexp_len); #endif /* _GROK_PATTERN_H_ */ grok-1.20110708.1/grok_version.h0000664000076400007640000000017111605651463014260 0ustar jlsjls#ifndef _VERSION_H_ #define _VERSION_H_ static const char *GROK_VERSION = "1.20110708.1"; #endif /* ifndef _VERSION_H */ grok-1.20110708.1/grokre.c0000664000076400007640000003363711603255770013051 0ustar jlsjls#include #include #include #include #include #include #include #include "grok.h" #include "predicates.h" #include "stringhelper.h" /* global, static variables */ #define CAPTURE_ID_LEN 4 #define CAPTURE_FORMAT "%04x" /* internal functions */ static char *grok_pattern_expand(grok_t *grok); //, int offset, int length); static void grok_study_capture_map(grok_t *grok); static void grok_capture_add_predicate(grok_t *grok, int capture_id, const char *predicate, int predicate_len); void grok_free_clone(const grok_t *grok) { if (grok->re != NULL) { pcre_free(grok->re); } if (grok->full_pattern != NULL) { free(grok->full_pattern); } if (grok->pcre_capture_vector != NULL) { free(grok->pcre_capture_vector); } if (grok->captures_by_name != NULL) { tctreedel(grok->captures_by_name); } if (grok->captures_by_subname != NULL) { tctreedel(grok->captures_by_subname); } if (grok->captures_by_capture_number != NULL) { tctreedel(grok->captures_by_capture_number); } if (grok->captures_by_id != NULL) { tctreedel(grok->captures_by_id); } } void grok_free(grok_t *grok) { grok_free_clone(grok); if (grok->patterns != NULL) tctreedel(grok->patterns); } int grok_compile(grok_t *grok, const char *pattern) { return grok_compilen(grok, pattern, strlen(pattern)); } int grok_compilen(grok_t *grok, const char *pattern, int length) { grok_log(grok, LOG_COMPILE, "Compiling '%.*s'", length, pattern); /* clear the old tctree data */ tctreeclear(grok->captures_by_name); tctreeclear(grok->captures_by_subname); tctreeclear(grok->captures_by_capture_number); tctreeclear(grok->captures_by_id); grok->pattern = pattern; grok->pattern_len = length; grok->full_pattern = grok_pattern_expand(grok); if (grok->full_pattern == NULL) { grok_log(grok, LOG_COMPILE, "A failure occurred while compiling '%.*s'", length, pattern); grok->errstr = "failure occurred while expanding pattern "\ "(too pattern recursion?)"; return GROK_ERROR_COMPILE_FAILED; } grok->re = pcre_compile(grok->full_pattern, 0, &grok->pcre_errptr, &grok->pcre_erroffset, NULL); if (grok->re == NULL) { grok->errstr = (char *)grok->pcre_errptr; return GROK_ERROR_COMPILE_FAILED; } pcre_fullinfo(grok->re, NULL, PCRE_INFO_CAPTURECOUNT, &grok->pcre_num_captures); grok->pcre_num_captures++; /* include the 0th group */ grok->pcre_capture_vector = calloc(3 * grok->pcre_num_captures, sizeof(int)); /* Walk grok->captures_by_id. * For each, ask grok->re what stringnum it is */ grok_study_capture_map(grok); return GROK_OK; } const char * const grok_error(grok_t *grok) { return grok->errstr; } int grok_exec(const grok_t *grok, const char *text, grok_match_t *gm) { return grok_execn(grok, text, strlen(text), gm); } int grok_execn(const grok_t *grok, const char *text, int textlen, grok_match_t *gm) { int ret; pcre_extra pce; pce.flags = PCRE_EXTRA_CALLOUT_DATA; pce.callout_data = (void *)grok; if (grok->re == NULL) { grok_log(grok, LOG_EXEC, "Error: pcre re is null, meaning you haven't called grok_compile yet"); fprintf(stderr, "ERROR: grok_execn called on an object that has not pattern compiled. Did you call grok_compile yet?\n"); return GROK_ERROR_UNINITIALIZED; } ret = pcre_exec(grok->re, &pce, text, textlen, 0, 0, grok->pcre_capture_vector, grok->pcre_num_captures * 3); grok_log(grok, LOG_EXEC, "%.*s =~ /%s/ => %d", textlen, text, grok->pattern, ret); if (ret < 0) { switch (ret) { case PCRE_ERROR_NOMATCH: return GROK_ERROR_NOMATCH; break; case PCRE_ERROR_NULL: fprintf(stderr, "Null error, one of the arguments was null?\n"); break; case PCRE_ERROR_BADOPTION: fprintf(stderr, "pcre badoption\n"); break; case PCRE_ERROR_BADMAGIC: fprintf(stderr, "pcre badmagic\n"); break; } //grok->pcre_errno = ret; return GROK_ERROR_PCRE_ERROR; } /* Push match info into gm only if it is non-NULL */ if (gm != NULL) { gm->grok = grok; gm->subject = text; gm->start = grok->pcre_capture_vector[0]; gm->end = grok->pcre_capture_vector[1]; } return GROK_OK; } /* XXX: This method is pretty long; split it up? */ static char *grok_pattern_expand(grok_t *grok) { int capture_id = 0; /* Starting capture_id, doesn't really matter what this is */ int offset = 0; /* string offset; how far we've expanded so far */ int *capture_vector = NULL; int replacement_count = 0; /* count of replacements of %{foo} with a regexp */ int full_len = -1; int full_size = -1; char *full_pattern = NULL; char capture_id_str[CAPTURE_ID_LEN + 1]; const char *patname = NULL; capture_vector = calloc(3 * g_pattern_num_captures, sizeof(int)); full_len = grok->pattern_len; full_size = full_len; full_pattern = calloc(1, full_size); memcpy(full_pattern, grok->pattern, full_len); grok_log(grok, LOG_REGEXPAND, "% 20s: %.*s", "start of expand", full_len, full_pattern); while (pcre_exec(g_pattern_re, NULL, full_pattern, full_len, offset, 0, capture_vector, g_pattern_num_captures * 3) >= 0) { int start, end, matchlen; const char *pattern_regex; int patname_len; size_t regexp_len; int pattern_regex_needs_free = 0; grok_log(grok, LOG_REGEXPAND, "% 20s: %.*s", "start of loop", full_len, full_pattern); replacement_count++; if (replacement_count > 500) { free(capture_vector); free(full_pattern); grok->errstr = "Too many replacements have occurred (500), infinite recursion?"; return NULL; } start = capture_vector[0]; end = capture_vector[1]; matchlen = end - start; grok_log(grok, LOG_REGEXPAND, "Pattern length: %d", matchlen); pcre_get_substring(full_pattern, capture_vector, g_pattern_num_captures, g_cap_pattern, &patname); patname_len = capture_vector[g_cap_pattern * 2 + 1] \ - capture_vector[g_cap_pattern * 2]; grok_log(grok, LOG_REGEXPAND, "Pattern name: %.*s", patname_len, patname); grok_pattern_find(grok, patname, patname_len, &pattern_regex, ®exp_len); if (pattern_regex == NULL) { /* Pattern not found, check if this has an in-line definition */ int definition_len = capture_vector[g_cap_definition * 2 + 1] - capture_vector[g_cap_definition * 2]; if (definition_len > 0) { /* We got an in-line definition */ /* discard const-ness with reckless abandon! */ pattern_regex = strndup(full_pattern + capture_vector[g_cap_definition * 2], definition_len); regexp_len = definition_len; pattern_regex_needs_free = 1; grok_log(grok, LOG_REGEXPAND, "Inline-definition found: %.*s => '%.*s'", patname_len, patname, regexp_len, pattern_regex); } else { /* If we get here, there's definitely no pattern available for the * current %{thing}, so just leave it unmolested. */ offset = end; } } /* Check for nullness again because there could've been an inline * definition found above */ if (pattern_regex != NULL) { int has_predicate = (capture_vector[g_cap_predicate * 2] >= 0); const char *longname = NULL; const char *subname = NULL; grok_capture *gct = calloc(1, sizeof(grok_capture));; /* XXX: Change this to not use pcre_get_substring so we can skip a * malloc step? */ pcre_get_substring(full_pattern, capture_vector, g_pattern_num_captures, g_cap_name, &longname); pcre_get_substring(full_pattern, capture_vector, g_pattern_num_captures, g_cap_subname, &subname); snprintf(capture_id_str, CAPTURE_ID_LEN + 1, CAPTURE_FORMAT, capture_id); /* Add this capture to the list of captures */ gct->id = capture_id; gct->name = (char *)longname; /* XXX: CONST PROBLEM */ gct->name_len = strlen(gct->name); gct->subname = (char *)subname; gct->subname_len = strlen(gct->subname); grok_capture_add(grok, gct); //pcre_free_substring(longname); //pcre_free_substring(subname); /* if a predicate was given, add (?C1) to callout when the match is made, * so we can test it further */ if (has_predicate) { int pstart, pend; pstart = capture_vector[g_cap_predicate * 2]; pend = capture_vector[g_cap_predicate * 2 + 1]; grok_log(grok, LOG_REGEXPAND, "Predicate found in '%.*s'", matchlen, full_pattern + start); grok_log(grok, LOG_REGEXPAND, "Predicate is: '%.*s'", pend - pstart, full_pattern + pstart); grok_capture_add_predicate(grok, capture_id, full_pattern + pstart, pend - pstart); substr_replace(&full_pattern, &full_len, &full_size, end, 0, "(?C1)", 5); } /* Replace %{FOO} with (?<>). '5' is strlen("(?<>)") */ substr_replace(&full_pattern, &full_len, &full_size, start, end, "(?<>)", 5); grok_log(grok, LOG_REGEXPAND, "% 20s: %.*s", "replace with (?<>)", full_len, full_pattern); /* Insert the capture id into (?) */ substr_replace(&full_pattern, &full_len, &full_size, start + 3, 0, capture_id_str, CAPTURE_ID_LEN); grok_log(grok, LOG_REGEXPAND, "% 20s: %.*s", "add capture id", full_len, full_pattern); /* Insert the pattern into (?pattern) */ /* 3 = '(?<', 4 = strlen(capture_id_str), 1 = ")" */ substr_replace(&full_pattern, &full_len, &full_size, start + 3 + CAPTURE_ID_LEN + 1, 0, pattern_regex, regexp_len); grok_log(grok, LOG_REGEXPAND, ":: Inserted: %.*s", regexp_len, pattern_regex); grok_log(grok, LOG_REGEXPAND, ":: STR: %.*s", full_len, full_pattern); /* Invariant, full_pattern actual len must always be full_len */ assert(strlen(full_pattern) == full_len); /* Move offset to the start of the regexp pattern we just injected. * This is so when we iterate again, we can process this new pattern * to see if the regexp included itself any %{FOO} things */ offset = start; capture_id++; } if (pattern_regex_needs_free) { /* If we need to free, */ free(pattern_regex); } if (patname != NULL) { pcre_free_substring(patname); patname = NULL; } } /* while pcre_exec */ /* Unescape any "\%" strings found */ offset = 0; while (offset < full_len) { /* loop to '< full_len' because we access offset+1 */ if (full_pattern[offset] == '\\' && full_pattern[offset + 1] == '%') { substr_replace(&full_pattern, &full_len, &full_size, offset, offset + 1, "", 0); } offset++; } grok_log(grok, LOG_REGEXPAND, "Fully expanded: %.*s", full_len, full_pattern); free(capture_vector); grok->full_pattern_len = full_len; grok->full_pattern = full_pattern; return full_pattern; } /* grok_pattern_expand */ static void grok_capture_add_predicate(grok_t *grok, int capture_id, const char *predicate, int predicate_len) { grok_capture *gct; int offset = 0; grok_log(grok, LOG_PREDICATE, "Adding predicate '%.*s' to capture %d", predicate_len, predicate, capture_id); gct = (grok_capture *)grok_capture_get_by_id(grok, capture_id); if (gct == NULL) { grok_log(grok, LOG_PREDICATE, "Failure to find capture id %d", capture_id); return; } /* Compile the predicate into something useful */ /* So far, predicates are just an operation and an argument */ /* TODO(sissel): add predicate_func(capture_str, args) ??? */ /* skip leading whitespace, use a loop since 'strspn' doesn't take a len */ while (isspace(predicate[offset]) && offset < predicate_len) { offset++; } predicate += offset; predicate_len -= offset; if (predicate_len > 2) { if (!strncmp(predicate, "=~", 2) || !strncmp(predicate, "!~", 2)) { grok_predicate_regexp_init(grok, gct, predicate, predicate_len); return; } else if ((predicate[0] == '$') && (strchr("!<>=", predicate[1]) != NULL)) { grok_predicate_strcompare_init(grok, gct, predicate, predicate_len); return; } } if (predicate_len > 1) { if (strchr("!<>=", predicate[0]) != NULL) { grok_predicate_numcompare_init(grok, gct, predicate, predicate_len); } else { fprintf(stderr, "Invalid predicate: '%.*s'\n", predicate_len, predicate); } } else { /* predicate_len == 1, here, and no 1-character predicates exist */ fprintf(stderr, "Invalid predicate: '%.*s'\n", predicate_len, predicate); } /* update the database with our modified grok_capture */ grok_capture_add(grok, gct); } static void grok_study_capture_map(grok_t *grok) { char *nametable; grok_capture *gct; int nametable_size; int nametable_entrysize; int i = 0; int offset = 0; int stringnum; int capture_id; pcre_fullinfo(grok->re, NULL, PCRE_INFO_NAMECOUNT, &nametable_size); pcre_fullinfo(grok->re, NULL, PCRE_INFO_NAMEENTRYSIZE, &nametable_entrysize); pcre_fullinfo(grok->re, NULL, PCRE_INFO_NAMETABLE, &nametable); for (i = 0; i < nametable_size; i++) { offset = i * nametable_entrysize; stringnum = (nametable[offset] << 8) + nametable[offset + 1]; sscanf(nametable + offset + 2, CAPTURE_FORMAT, &capture_id); grok_log(grok, LOG_COMPILE, "Studying capture %d", capture_id); gct = (grok_capture *)grok_capture_get_by_id(grok, capture_id); assert(gct != NULL); gct->pcre_capture_number = stringnum; /* update the database with the new data */ grok_capture_add(grok, gct); } } const char *grok_version() { return GROK_VERSION; } grok-1.20110708.1/grok_config.c0000664000076400007640000000747111576274273014054 0ustar jlsjls#include #include #include #include #include "grok_input.h" #include "grok_config.h" #include "grok_matchconf.h" #include "grok_logging.h" void conf_init(struct config *conf) { conf->nprograms = 0; conf->program_size = 10; conf->programs = calloc(conf->program_size, sizeof(grok_pattern_t)); conf->logmask = 0; conf->logdepth = 0; } void conf_new_program(struct config *conf) { /* TODO(sissel): put most of this into grok_program_init, or something */ conf->nprograms++; if (conf->nprograms == conf->program_size) { conf->program_size *= 2; conf->programs = realloc(conf->programs, conf->program_size * sizeof(grok_pattern_t)); } CURPROGRAM.ninputs = 0; CURPROGRAM.input_size = 10; CURPROGRAM.inputs = calloc(CURPROGRAM.input_size, sizeof(grok_input_t)); CURPROGRAM.nmatchconfigs = 0; CURPROGRAM.matchconfig_size = 10; CURPROGRAM.matchconfigs = calloc(CURPROGRAM.matchconfig_size, sizeof(grok_matchconf_t)); CURPROGRAM.npatternfiles = 0; CURPROGRAM.patternfile_size = 10; CURPROGRAM.patternfiles = calloc(CURPROGRAM.patternfile_size, sizeof(char *)); CURPROGRAM.reactions = 0; //CURPROGRAM.logmask = ~0; SETLOG(*conf, CURPROGRAM); } void conf_new_patternfile(struct config *conf) { CURPROGRAM.npatternfiles++; if (CURPROGRAM.npatternfiles == CURPROGRAM.patternfile_size) { CURPROGRAM.patternfile_size *= 2; CURPROGRAM.patternfiles = realloc(CURPROGRAM.patternfiles, CURPROGRAM.patternfile_size * sizeof(char *)); } } void conf_new_input(struct config *conf) { /* Bump number of programs and grow our programs array if necessary */ CURPROGRAM.ninputs++; if (CURPROGRAM.ninputs == CURPROGRAM.input_size) { CURPROGRAM.input_size *= 2; CURPROGRAM.inputs = realloc(CURPROGRAM.inputs, CURPROGRAM.input_size * sizeof(grok_input_t)); } /* initialize the new input */ memset(&CURINPUT, 0, sizeof(grok_input_t)); SETLOG(CURPROGRAM, CURINPUT); } void conf_new_input_process(struct config *conf, char *cmd) { conf_new_input(conf); CURINPUT.type = I_PROCESS; CURINPUT.source.process.cmd = cmd; } void conf_new_input_file(struct config *conf, char *filename) { conf_new_input(conf); CURINPUT.type = I_FILE; CURINPUT.source.file.filename = filename; } void conf_new_matchconf(struct config *conf) { CURPROGRAM.nmatchconfigs++; if (CURPROGRAM.nmatchconfigs == CURPROGRAM.matchconfig_size) { CURPROGRAM.matchconfig_size *= 2; CURPROGRAM.matchconfigs = realloc(CURPROGRAM.matchconfigs, CURPROGRAM.matchconfig_size * sizeof(grok_matchconf_t)); } grok_matchconfig_init(&CURPROGRAM, &CURMATCH); /* Set sane defaults. */ CURMATCH.reaction = "%{@LINE}"; CURMATCH.shell = "stdout"; } void conf_new_match_pattern(struct config *conf, const char *pattern) { int compile_ret; grok_t *grok; grok = malloc(sizeof(grok_t)); grok_init(grok); int i = 0; for (i = 0; i < CURPROGRAM.npatternfiles; i++) { grok_patterns_import_from_file(grok, CURPROGRAM.patternfiles[i]); } SETLOG(CURPROGRAM, *grok); compile_ret = grok_compile(grok, pattern); if (compile_ret != GROK_OK) { fprintf(stderr, "Failure compiling pattern '%s': %s\n", pattern, grok->errstr); exit(1); } tclistpush(CURMATCH.grok_list, grok, sizeof(grok_t)); } void conf_match_set_debug(struct config *conf, int logmask) { int i = 0; int listsize = tclistnum(CURMATCH.grok_list); int unused_len; for (i = 0; i < listsize; i++) { grok_t *grok; grok = (grok_t *)tclistval(CURMATCH.grok_list, i, &unused_len); grok->logmask = logmask; tclistover(CURMATCH.grok_list, i, grok, sizeof(grok_t)); } } grok-1.20110708.1/conf.lex0000664000076400007640000000357511576274273013061 0ustar jlsjls%{ #include #include "conf.tab.h" #include "grok_config.h" #include "stringhelper.h" %} %option noyywrap bison-bridge true true|yes|on|1 false false|no|off|0 number [0-9]+ %x LEX_COMMENT %x LEX_STRING %x LEX_ERROR %% program { return PROGRAM; } load-patterns { return PROG_LOADPATTERNS; } file { return PROG_FILE; } follow { return FILE_FOLLOW; } exec { return PROG_EXEC; } restart-on-exit { return EXEC_RESTARTONEXIT; } minimum-restart-delay { return EXEC_MINRESTARTDELAY; } run-interval { return EXEC_RUNINTERVAL; } read-stderr { return EXEC_READSTDERR; } match { return PROG_MATCH; } no-match { return PROG_NOMATCH; } pattern { return MATCH_PATTERN; } reaction { return MATCH_REACTION; } shell { return MATCH_SHELL; } flush { return MATCH_FLUSH; } break-if-match { return MATCH_BREAK_IF_MATCH; } debug { return CONF_DEBUG; } none { return LITERAL_NONE; } stdout { return SHELL_STDOUT; } {true} { yylval->num = 1; return INTEGER; } {false} { yylval->num = 0; return INTEGER; } {number} { yylval->num = atoi(yytext); return INTEGER; } "#" BEGIN(LEX_COMMENT); [^\n]* /* ignore comments */ //{ printf("Comment: %s\n", yytext); } \n { yylineno++; BEGIN(INITIAL); } /* end comment */ \" { BEGIN(LEX_STRING); } ((\\.)+|[^\\\"]+)* { int len, size; len = yyleng; yylval->str = string_ndup(yytext, len); size = len + 1; string_unescape(&yylval->str, &len, &size); /* XXX: putting a null at the end shouldn't be necessary */ yylval->str[len] = '\0'; return QUOTEDSTRING; } \" { BEGIN(INITIAL); } \{ { return '{'; } \} { return '}'; } : { return ':'; } [ \t] { /* ignore whitespace */ } [\n] { yylineno++; } . { BEGIN(LEX_ERROR); unput(yytext[0]); } [^\n]* { fprintf(stderr, "Unexpected input on line %d: '%.*s'\n", yylineno, yyleng, yytext); BEGIN(INITIAL); return 256; /* 256 == lexer error */ } %% grok-1.20110708.1/grok_input.h0000664000076400007640000000363511576274273013751 0ustar jlsjls#ifndef _GROK_INPUT_H_ #define _GROK_INPUT_H_ #include #include #include #include #include #include "grok_program.h" struct grok_program; typedef struct grok_input grok_input_t; typedef struct grok_input_process grok_input_process_t; typedef struct grok_input_file grok_input_file_t; #define PROCESS_SHOULD_RESTART(gipt) ((gipt)->restart_on_death || (gipt)->run_interval) struct grok_input_process { char *cmd; int cmdlen; /* State information */ int p_stdin; /* parent descriptors */ int p_stdout; int p_stderr; int c_stdin; /* child descriptors */ int c_stdout; int c_stderr; int pid; int pgid; struct timeval start_time; /* Specific options */ int restart_on_death; int min_restart_delay; int run_interval; int read_stderr; }; struct grok_input_file { char *filename; /* State information */ struct stat st; char *readbuffer; /* will be initialized to the blocksize reported by stat(2) */ off_t offset; /* what position in the file are we in? */ int writer; /* read data from file and write to here */ int reader; /* point libevent eventbuffer here */ int fd; /* the fd from open(2) */ struct timeval waittime; /* Options */ int follow; }; struct grok_input { enum { I_FILE, I_PROCESS } type; union { grok_input_file_t file; grok_input_process_t process; } source; struct grok_program *gprog; /* pointer back to our program */ struct bufferevent *bev; int instance_match_count; int logmask; int logdepth; struct timeval restart_delay; int done; }; void grok_program_add_input(struct grok_program *gprog, grok_input_t *ginput); void grok_program_add_input_process(struct grok_program *gprog, grok_input_t *ginput); void grok_program_add_input_file(struct grok_program *gprog, grok_input_t *ginput); void grok_input_eof_handler(int fd, short what, void *data); #endif /* _GROK_INPUT_H_ */ grok-1.20110708.1/grok.h0000664000076400007640000001316511603254052012511 0ustar jlsjls/** * @file grok.h */ #ifndef _GROK_H_ #define _GROK_H_ #include #include #include #include #include #include /* * A regular expression super library. */ typedef struct grok grok_t; typedef struct grok_pattern { const char *name; char *regexp; } grok_pattern_t; struct grok { /** The original pattern given to grok_compile() */ const char *pattern; /** length of the pattern string */ int pattern_len; /** The full expanded pattern generated from grok_compile() */ char *full_pattern; /** full_pattern string length */ int full_pattern_len; /** tokyocabinet TCTREE of patterns */ TCTREE *patterns; pcre *re; int *pcre_capture_vector; int pcre_num_captures; /* Data storage for named-capture (grok capture) information */ TCTREE *captures_by_id; TCTREE *captures_by_name; TCTREE *captures_by_subname; TCTREE *captures_by_capture_number; int max_capture_num; /** PCRE pattern compilation errors */ const char *pcre_errptr; int pcre_erroffset; int pcre_errno; unsigned int logmask; unsigned int logdepth; char *errstr; }; extern int g_grok_global_initialized; extern pcre *g_pattern_re; extern int g_pattern_num_captures; extern int g_cap_name; extern int g_cap_pattern; extern int g_cap_subname; extern int g_cap_predicate; extern int g_cap_definition; /* pattern to match %{FOO:BAR} */ /* or %{FOO<=3} */ #define PATTERN_REGEX \ "(?!<\\\\)%\\{" \ "(?" \ "(?[A-z0-9]+)" \ "(?::(?[A-z0-9_:]+))?" \ ")" \ "(?:=" \ "(?" \ "(?:" \ "(?P\\{(?:(?>[^{}]+|(?>\\\\[{}])+)|(?P>curly2))*\\})+" \ "|" \ "(?:[^{}]+|\\\\[{}])+" \ ")+" \ ")" \ ")?" \ "\\s*(?" \ "(?:" \ "(?P\\{(?:(?>[^{}]+|(?>\\\\[{}])+)|(?P>curly))*\\})" \ "|" \ "(?:[^{}]+|\\\\[{}])+" \ ")+" \ ")?" \ "\\}" /** Safe return code */ #define GROK_OK 0 /** File not accessible. This occurs when you try to load patterns from * a file and grok cannot read it. */ #define GROK_ERROR_FILE_NOT_ACCESSIBLE 1 /** Pattern not found is given if you try to search for a pattern * by name that is not known, that is, it wasn't added with * grok_pattern_add or grok_patterns_import* */ #define GROK_ERROR_PATTERN_NOT_FOUND 2 #define GROK_ERROR_UNEXPECTED_READ_SIZE 3 /** grok_compile failed. */ #define GROK_ERROR_COMPILE_FAILED 4 /** grok_exec called on a grok_t instance that was not initialized first. * Make sure you grok_init(). */ #define GROK_ERROR_UNINITIALIZED 5 /** A PCRE-related error occurred. Check the grok_t pcre_errno and other * pcre_err* members */ #define GROK_ERROR_PCRE_ERROR 6 /** grok_exec did not match your string */ #define GROK_ERROR_NOMATCH 7 #define CAPTURE_ID_LEN 4 #define CAPTURE_FORMAT "%04x" #include "grok_logging.h" #ifndef GROK_TEST_NO_PATTERNS #include "grok_pattern.h" #endif #ifndef GROK_TEST_NO_CAPTURE #include "grok_capture.h" #endif #include "grok_match.h" #include "grok_discover.h" #include "grok_version.h" /** * @mainpage * * Test foo bar * * baz fizz * * grok_new() */ /** * Create a new grok_t instance. * * The new grok_t instance is initialized with grok_init() already, * so you do not need to call it. * * You should use grok_free() on the result when you want to free it. * * @ingroup grok_t * @return pointer to new grok_t instance or NULL on failure. */ grok_t *grok_new(); /** * Initialize a grok_t instance. This is useful if you have * a grok_t as a stack variable rather than heap. * * @ingroup grok_t */ void grok_init(grok_t *grok); /** * Shallow clone of a grok instance. * This is useful for creating new grok_t instances with the same * loaded patterns. It also copies the log settings. * * @param dst pointer to destination grok_t you want to clone into. * @param src pointer to source grok_t you can to clone from. */ void grok_clone(grok_t *dst, const grok_t *src); /** * Free a grok instance. This will clean up any memory allocated by the * grok_t instance during it's life. Finally, this method will free() * the grok_t pointer you gave. * * Do not use this method on grok_t instances you created with * grok_clone. * * @param grok the grok_t instance you want to free. */ void grok_free(grok_t *grok); /** */ void grok_free_clone(const grok_t *grok); /** * Get the library's version number * * @return string representing grok's version. */ const char *grok_version(); /** * Compile a pattern. PCRE syntax is supported. * * Grok extends this syntax with %{PATTERN} syntax * This allows you to use predefined patterns anywhere in your * regular expression. * * @param grok the grok_t instance to compile into. * @param pattern the string regexp pattern to compile. */ int grok_compile(grok_t *grok, const char *pattern); /** * Compile a pattern with known length. * * @param pattern the string pattern to compile * @param length the length of the pattern * @see grok_compile() */ int grok_compilen(grok_t *grok, const char *pattern, int length); /** * Execute against a string input. * * @param text the text to match. * @param gm The grok_match_t to store match result in. If NULL, no storing is attempted. * @returns GROK_OK if match successful, GROK_ERROR_NOMATCH if no match. */ int grok_exec(const grok_t *grok, const char *text, grok_match_t *gm); /** * @see grok_exec * */ int grok_execn(const grok_t *grok, const char *text, int textlen, grok_match_t *gm); int grok_match_get_named_substring(const grok_match_t *gm, const char *name, const char **substr, int *len); #endif /* ifndef _GROK_H_ */ grok-1.20110708.1/grok_match.c0000664000076400007640000000417711603476305013672 0ustar jlsjls#include "grok.h" const grok_capture *grok_match_get_named_capture(const grok_match_t *gm, const char *name) { const grok_capture *gct; gct = grok_capture_get_by_name(gm->grok, name); /* Try subname if by_name doesn't find anything */ if (gct == NULL) { gct = grok_capture_get_by_subname(gm->grok, name); } return gct; } int grok_match_get_named_substring(const grok_match_t *gm, const char *name, const char **substr, int *len) { int start, end; const grok_capture *gct; grok_log(gm->grok, LOG_MATCH, "Fetching named capture: %s", name); gct = grok_match_get_named_capture(gm, name); if (gct == NULL) { grok_log(gm->grok, LOG_MATCH, "Named capture '%s' not found", name); *substr = NULL; *len = 0; return -1; } start = (gm->grok->pcre_capture_vector[gct->pcre_capture_number * 2]); end = (gm->grok->pcre_capture_vector[gct->pcre_capture_number * 2 + 1]); grok_log(gm->grok, LOG_MATCH, "Capture '%s' == '%.*s' is %d -> %d of string '%s'", name, end - start, gm->subject + start, start, end, gm->subject); *substr = gm->subject + start; *len = (end - start); return 0; } void grok_match_walk_init(const grok_match_t *gm) { const grok_t *grok = gm->grok; grok_capture_walk_init(grok); } int grok_match_walk_next(const grok_match_t *gm, char **name, int *namelen, const char **substr, int *substrlen) { const grok_capture *gct; int start, end; gct = grok_capture_walk_next(gm->grok); if (gct == NULL) { return 1; } *namelen = gct->name_len; *name = malloc(*namelen); memcpy(*name, gct->name, *namelen); start = (gm->grok->pcre_capture_vector[gct->pcre_capture_number * 2]); end = (gm->grok->pcre_capture_vector[gct->pcre_capture_number * 2 + 1]); grok_log(gm->grok, LOG_MATCH, "CaptureWalk '%.*s' is %d -> %d of string '%s'", *namelen, *name, start, end, gm->subject); *substr = gm->subject + start; *substrlen = (end - start); return 0; } void grok_match_walk_end(const grok_match_t *gm) { /* nothing, anymore */ } grok-1.20110708.1/grok-1.20110630.1.tar.gz0000664000076400007640000122224011603262775014667 0ustar jlsjlse N\msFg S(8^{L'(Jne{U @y{~ӃwJvuerDr3tOOcIlպvw_1ەNnڵN>굈;R~I?zMV'L?w5wkv/o쿳o[{=ߩssGcy6JVd9w+M F6Fʴ^ck߻q3ύȝ k+/H_׾-|>aSW<'_"0%cXl߿;LCuJVnmom Р ;*] ,<x, <Z@g]t=xz遧xzg<نmt۠6A}Pg<;&xv@.vA ]nح.xv=g<{=nt~*o<>5}<9t;js]Kui.m֥Ѻ;CSui.եɡkbq1&Z,-5-A5 :Jh~Mk@Ā Mk^0U M4hAo >MDhBB 4PF`h"CMphC&B4! Ԝܻ&N4MhbE,hф&^8^MᣉMi"HBz&r4Ah*X&4ᤉ'M@i"J Ӊ#85ZĔELYĔELYĔELYZB8,",5)$~H1C$H0"qDU)'ĔELYĔELY )qdGqdm<ږEnb",b",b",8#kGBގ໵mUvUdWyTAL(i S8cb0W?2L{bؾqZJAs<$J`T&D%bb+]C+iWf )mUQXv ]'tcҹa 8)a)m]aD&abg (NUStTn|FuKFpnlKr+`S;|p<<4I8ΰP~ViēٳTz*fj.ԝ-zKȥomfBn.;x>dጕe?1|#9/._Oʒؗ$ 8跶Q ,boʩo5|id)  |-Da8<zo>¹,%&(#9mNiGjBb2U-. nbo HR8ׂ٬*)￱vvM 4{c&~/<H)Zl+Yv[mmA[ͪ6u6Ͷz42[͒귶JfLR6ZJw3#a gq1TiU^hhDCA7̞aZCB7I>d3s;tJqVę_&JT :cL 2|"WNo! h,\#^czIͦg!O}1:赜bui+d|WoϏFjK=rDlF?; %s34ss/Cmb;$93mL*;Ћ4+ZfG̖zѣ$g{ȿ:gBT^0a1r>H"LʉלkN/?mmlT=!D A `&ӫH8a/'Srz\)<~TW/h~hpRh>C>'2ܶܪieL/ ߽) 1La2M2}m*n"t^Dtl~5˚b}vuzzyH`Kư4q.2/v'x9¡=NǸ=7@L7߾m_c@WGN&*t)~ RkOna0)ITD $dIR$]%Q1ɚʬnl֣u`?y*2\G.jXãXj>VJ|eyi嬎&cr2V}Yp. Ʉ{v> dOls3YqߡEkA+Ԟ{UE6E A6&OFs6{eyw2!EK9$Q_{vp,4XJ(CB R\;뫓%_"aX0 QYB%K$_",K$4LBA~Gpz/R24}xTrRfJyo;r3yg}0vZ @:E #7gˆx,V0XKԾp0Ze_Z̄C  dcBG*rE*pN׉*NP2m[ 6v oJ)q`!"J&O!mfj5nfl:0+֐El<@x(8Rxqdisl:$X~(tz;Q#CNBgmB˰g62!q\+8_Lr+ |jbHFK-u3f6Aznz+J"W 1dVT+GPjLs'ruv[2T6y۝3K=^x{P/K!RENh{lN Sa5%u"OM1۠tzץ^^m]a0f2 ggmv XF,oꬎWHǧkzE/G ˼RAJh65ߵ7cpMf(B׋nKI|C\zbd5L秦ˏJy*sS ܈O?O_#=|Kx㥲8g-$R[_qj2?4-A~,_c 7<]D#NFrDy.ҼS#eV_F|3I%cn6+@!"g*YJ-jmam%ďq{ee#vN!IvqE;B>v w/_Zޱ^wo[g\HO-vXmHņK)];Vg3dcNt6].Ԧb-08<1}.+.eMj}8yIμOw ę̛q8cBy#k^pyNwes8c%p$p:dCJSo<>.G5aBbnYI:_ }XB%b3<9Rqp'/e^G*vD!-,YR0:T|-g}p4S'</|9_O.yuu^]\]>Z(ƟDz)/G<~rzrJxy Wх:85Wj Ky؞3R]H-g>k> bR$Fw2f-~&]g,:a4xyOG1aځ;7f' YsJ%|cJH,ㆤ~EleVq,W`-(BR0g@49;O__޸KB؋$c E㔲cŗl6ԧ-qv\Y^ƫ~]@\.9 L+%v<\>vkg5'ӟgZ2tǮ-`,ř+/ξtoG_[Z0G UOB|-*\?J,2{c? xX"җч'%Fb{$[:#Ea$#%g emu" R:S20oZ+rvo3쳇رcX왯Z>/^sA.b(N~~4?gpQ[[CFlyB#!GuڄcyIޏ3.۷О@yCL̓?~EmɻxOk}坸sǽv J:~@J;=Ksk֟vkf¦v]<\7=֢;>l@8fntmp:eO5l)ܿlms-.Nw{ߋX?߿C{v6vvM_Z{ ?m?+-v4?M냕j=ΕQbr8{3}73qh3fba inn-BltB|EsgHN,ǐլutceg"r3[޴ O.в?S{#]l;?͵;U{CA stu.ӍGl@2SU3+gt{+u-ܲQ}Ďcg#&}- /3jM\Q /{;LY8ϥ+AN"g:6A7u q>wN@o[^]OkvB})&7yt/4#wʩ mwhj ߞkmMO~z{6gg,K叅Vzz|9㗚JMwN{2Uj1}K5kL[:=w}z7;Og@?`]Le{p 03λWHggz4dQi ON_1 4s͘MN` ݾ]T~7jVYQ{ >yy:R9|1ww~~w|{ooD-{V~~ŕ]3zkK犾 :$bmW?.O{(U'3ĺvD3xNoH!ܹsmX`dPƆޓ'Sw LwmVx3xQbZh:<λmGOtt?@0WCC_NNN&Gޏu!L=,ROvq6_qF<[Ӏ5M4$yO؛<!ϞY݉cDP bļEU{Ȳ dJγxHg3ʹ۪]'-p{u4vvv|2rKL7xё’7nV/jQ=3`#}`[h퍛arl[kp;w0NG5uhB<`XCR[n?}>r,-ovQ"<)xB=8\6>᳹wǓt4y{zz8\|MYENn}ժ>{rl7Zfɶ{t8;mLT|ݹ uՑs^un46n|qWn:{wEg_||LqmL '4&B__ ~mz{CVC(+~o>WM,ڹ~vjV0P"5 Ej(RCPb5xKBĕQvɷO}J& n{09=iHصݗqsa6Ux*ڷ0M:v3XM]uW;c28}\xҺP"Z'皿Scxud5,ٌ<2|·d F?N۞[rY~A`&#֏D?vLpX|kg<;;ɇ.Mv_;2~mZpܱ]Gq8ɺ@3Njv. au7=Q *ƫɤ7v?996:9O;TG$.kH8p7E$իZHWZ}x`+Mϛy#mKTu 2Z{1[SF!~6OvliC _iHzy G&h2: ;n,iPP- ZW$(iGBwP l:Nv0OUHU0=,s ?ZC<{uu?i<5mؒ@_`3_P^3O"d fG'ҔtZƳ᫁ ;ʔ&Lͬp&89i]x*llpI \/Z_9^炘<T^aHfսafP9A{ګ:~9iF#|cۮaT&Yr'! Y{/@0nM˶ 䕮&%FM|>>^79 ϫйX:ƒ;mUa>BCAq?jgP>O=z:'#c}F[lfzzY{ed]Rw5#7_ o'7SoGhg:~yw>'aΝ>6:/O|ɳO'^:ݼIV~ryBErS3:nj~B7,Dޏ`ad:%&|s#D?tDŽ torFJ,W0b~;y3t77̻w`p|'1w{!s=:t\oIW{2EjM 0GC&x|m<`8>A%A]{WH:yD;(u\N<ѳÑe9RƔnYX*KfhLӳ: %UT.8Q3E~օ(Tkԓ4W#Cڰ5qfӉlڝYLmZdΣ?~ڊ}O3fp"Yx0DZoV4 jŒPAVn7zӍr \1z9s}0wd<3u)):IM->ml rdEW*xVbw$;̓U=w?yʤI7zk ? H fݷK:s:i4qGmog5zjc \ןv[OH~O/6Z k]_s:zx~OÍ#a>F+tݪhQUs޵o9e_~zB[ysP彿(HĊ \> [%#][nuta=%h1"s4>x:YjL 779 ;WZómOvBHp8#^I$Q)u[Qٰ.[-٤^d>9tӷu[\7BѺvuu]^8xEM+Zk\2ݬs-XDglyX=- kР ڬYc{;}|:<ϵvt*u3;KҝBJebFݺK6)|0I;/=Nҽq-OlU3wن 4od% ڟt)&Q(%MW’wgmN ܗ}vur귚vߥpӑ[2jNt{$:ں_s%G?^Ԍ2~SG[wN,TO[̥J1lnId,~mUbǛu:}/?n5]j>tǣl͘n;o\ Ʀǖ%I|G*ntuYih0mݩHSXnS:jA_F}_VnnoA>ISw'f}` f}F6~{e^n~^@u5ַ3Vx?Vtyrώ!2չ~٣ck٣wP..d(_x~6j`bo\zϽ},MrZ j~qKo.]=2M=gWze)Rd鞶p̬Lyf9|Xɶ66aR<8GTdd^"1gwRXC_oc?0X2k`[ЇoX֢o9}`G ۗRuC\W6^l4mÕOOUiwg=Ov>cF,7594{sfd L!fW1];,Jُ `/G>y|TOoo2|;YO+`;Շv3v"iĸ{`!ډg[=5y[861k3KA)vIN̓8 )s>*?Wgt4_t|}xp0XV:C1f qۓ.YĖLp9n!w'fQJ ]*A: bt2,sIn;nUjSho [lq=ד|d\ >|p8^̜ז:oBK~]C @дsyBY+mݵX,.SwvͫsW1a9N^tp| /n1&h|ʃ.fޯPc7>}ɝEAӼ_^uc}rG<}i}'t^Sߘ(zz~9vxs~{sZZp{©ߚ{GYfv|!R,fOoqiMT.$+Ӧ>ڄ0\O4~cKGcOx38s.`׀s~v8W|9aνFІzx:u0X9ɩ{z m?2kXЗf㉻19~[2?:.|`]0H7htjs 6}co 1;>coJƦpC-cCS.Okke&!1]ouO*M'zׯ7 Uõk_@$]7Y$]ky4~bvzO&_>gn9>~}xl+ׯf,n:vra3[{T, g;ҹN+"Fr#moF#{`aY8p/>Jחmƺ9|{D9r[Eoo?1VPz$- +=>av2w[GomEtmVop|3# f3TBXzkX7C,TFĦ4EUs u &{{@ĝz6g%tNFbZ|7GpE}xBړ/n6,X)S{Cahݵ0ȥ0!;Wp|ɋbchaNXZ^{dyw8j=V,2~Ԓ{EooBBl/8Z|Gk8FÎvY]2l򫳵f?i?=߿_N/ܖ<[8bsv^8T:cp'!}oY5T]SmTQEv۪?~4":pA&ͩǧ׻VAϯ?y"+LXW/et 9a'=`nrã.Q,dP[~]U99,x[&}QwK{e-U&C׿aF9s9l 9~>kVt4pm&ٵm'Jܪit={{$8*&m'iHf]@k_Ժ$a/l(B1|i(fJo^,f|RݮӒKs>]j9jgfHO'mU m6}6}ࣻNx5>yaM핾me|vAe-QVXotr,~;-USp 0H.T`:9u: ^Y2eH.+PP9Mw̞0qEo ԜtpUt=R>%{E[,KL^3kf|Iވ3 fB8ksy8r|ܐ! >43sd'Pڐ"^W)yna={ɕKVa28t ]Aox.McdZ08+-_c[&JǶL>8u~y~s+i`ɬ%|]D0yKn?__X'1 OL7Z)8RMQr N4q9ɾm/?%a8>'LjHԲ{JE) T '*ĨGYKVP,3֬V( (7oE)"]'R褦LsR!8p`n:Ԃ :8=nfA糡 d0o>6<*n9p|Qv&3u,aQ>2Q 0TpF 3晆;FAqT j|)rBtizIC}p[5}3:t:@dB.ܳjL=6k{tn;"]88wwȳOg'5ׇYєǓ|\#Se]MOe+Ӷ S'cVE>=J//A]ܜe!`UFMߎt2 "l܆͆CE=JDׅW`c?ÓI $`\{ Oz6z{čA˩ J:`ZlH~i2wf&lh 2KV;,!J S4;E7}0MMtӔpZ O]/lmMԲW1EZ+p؝OFOGԄ(dt!6DMcliXuțpx)=)̟ L!U.A+yء.(‰m?Ē;m^48v_.Z7XVeI k&+iaGfjQk3_?D׼N7^}ϷӗWڒ55zO,ԩLςc۝ A{oR# \9Cԛ yO-. ΨeBLD6K 덶,V9Y@:i'ؔ.kE&biLjyq񏻌"m*JK=yJ5ԍ@SOѕz:" |FsMBY[Z-: Spa/jkɫG* ?qƋkH5e_D˾ج?jX.5ram<ɣo+ 5X|XUuFxϞ1eUKu\% u6~l_ف8LiJهKQGzXO&; WvCnη̗~nOKu! KuXΧDjKq(Zu'~͘\n1U #~ޝw>-եz_6GGQpr]/=I]_{]7l+;s)?Kq(Y}|Ĵ,s{låN(YF#]^p\קǓףLQ>m1< *iBחf^jvqyx0O}|Ts[+J?B?muODmԁrZ0{>1V0C{ܞV8Tn,jb;:}Okέ\3uS|4R,yښ<'?w翴[|JSo;ȂݧZ~/FF/Zfނ  0Y+9 td6΃SK B ̼Po웇`tpr_;u I+`pQvD櫮C:F;|{|82e<ΐؑtmV)aRFrSa?_͋a{L ˩}-4lnz@G>s q J\:t<#`p0ED̕_^'^rhZ3BA-4ԯD^K h2ֲ»Dm$H|v.u#OnAbGs752֠fduv6\ hXZ ϕ 9nzg2b,| (eV\"F&7'4x9#6}t+vw%0A7;V٬ /JNCixu:qSOo+K\ \#nΜ$ɷF*JR W2N@h.g ~rg*dnN?7x<%,Y J0ǣć꺡Dm4Tm7+u{,]FrZ?zucz>Z[s]u@:]#; Z,vP# ogwT3ضb>'rבO?uם`|zC,fv,+K"8EΗ:.∖C\SgYŌ?w#jkV (VxؾƤ9z[Aazq3^A: 0z^M'?nE80O~tW~ѿS8\~8;7O=npq Rr2$UMލM6k 7jn%tXzN;\pjo~^2Be]#3';1vrl!\Œs`qOg} >ouihֵQunidֵ0_}'Ѿb~_?9a n&hVOh"ց%szvM&~u3qsܨ'Ŀ'Þ_".\C9w]ɽj3oGjt d27+esa^U-9!xUSޡa .ԿyA5ϗ2jf?yp_QX$PH?61g\m|'dzl;5okEv=o?'ɭh2c!ӝrkop4F}|f2nM,7w];VxZ.Eڱ{=Qr^%+ nr~{hV?=_XW3`t`]U^NE}vzܥ )$\OO_QGՏ7۵7N _?4~'#OO%*&'nUp>qԵ!盁.9v+tx\s{l ]Sx`!g6ɎC׶muY< | Bmb07E[ݒ/G}&s޻w_=ס< _?6luśDL-5̇;uN]ea(~4yR~?ٛ?nƼ1uW`#.ڑkujo>L#O1n7'&By¼qOOceL'[Bg(r0(YÂ7&;5iן? vo>*0ڨ{Vё\0q:,{x LtrzXZ}+oBmO b!4WtH91X!+'>99޾q͛7hQ /j8upkpz2iP“ۀ z p׷g!8^9O! P5<;"z,U^0FE0:Cp&pf1,I#'ƫ RٹEðQFc3WNL/hFd?qbUJqj"A 5E׊/:Ջ`KxH=oL)2VcӗƉB}k[ TkV88\d\@_^e~x8e0n^>oؔ:.̷5|; Cvͦb8#1!f7ܾ:s{ar%6ױWOslI\w'1g} \_k5Jy3+8`{q-7}xp6bۇ]alz7h=vyG"?ޤtx(!{׷2cnof&8vqnzpRK Ws̺O@dV|(AG fNNzƾG{5ݰRd,߬95J:o;G'1qmE^\̂0 d5sR><0ƧoI@J| 'FO{Onw=SزLlw̦ }쏯"gM;3fgD4o֮wޯSdSǁ*(gƆ fz1<^$RXy~p~w 7rS MO:}DDH-4͚D>.{H62>Ouu`F9;s܈4Qoh21)}=lo:1B%0(!֩{X5C'c(̍maXd8ѝ9g˾_̈́#`_X2ݞ;gekU)A8X}} |g<8]+fBAaAQXFԆ+뇓_OPar< o}v'ݽaUeoww#LDtG X%J,^ y@-_"mHVokkʭФ{"8nr6ޞ# *!ml@$HDLpR8*Q2gX!cJ5p4&LӐ2;#[fّm63Řc/'ܦqJc~=4/9_w˭tw ( O,y/gGh ΐʪ8U_o=~zi—_h+_֯yz?z}c[g698y3@0($AնnzΞv 6qcBDgUe,hy~8px&fQW4жAmrCo$z59O +ܡ}B`BeU1 ;j^V\?4չMpGQdb[j*uԏo^ +\XO640xK x8WyocDJda%[Gx{yo{^uz^ V ө׎ɻ'ICciƙ%7цdW¿$ S { Bp?0C3$q"buh5mj<3/5jAxe`GEͩPĵp2Kh:ZSD /Fq{#c~c2]}w0H1ެu V/2'8E9d=X/37LӤ'!LQ\MY+ci9=uxM֍U5*oX~S7)+[SOڧ PPu,-uk7^7f-P ɯچmk?O ؆?{--F>m)T{tL[) (>k".z>PC v%WzDǶ(;Y#ҟ.tؚ߮p zԏkao0hʐzvS} kxr폨tvdȲ0|ZDg5m{OLm6IK?偘,VPBMk0Lrg#Ilu&c /8r 2UG#7LQ~%pC9 9NӎvzǤo?{|D]0pXvo{||zfu>c f9@ ć.#mCruP\2[0]oF?n&Dox+]mtxW3d?W\c'qin@4m^}v930r\6pa= tZBRm:d 3oj'A|{GOf>@'ӑ;Xit8=do=ry\~UO9Bý|TOϟ}Ig;vS!7ԛ_'aGuWi /I8*ſAѻnC'>x~{pç;7q\;ô~OAoj4}C0E˞n_z{{s/x mD}~F{?뻇9o/OH0ٽi[Ԯ9^z~ {',bxo56ч{?Ykz̿^lj6Vh%io>C.&Zy>};;&{F'5NGnjӱӢ=Lnj7]RtѾQK]&)7BӁ:.gje֏6 \{?˽@&cp|F&p+)uHM]V:1S=DG`IprpN~AƵo2|&ggoCi!Vp_7̳>5[:sw)Rg'|V̄ZqU3PW`-&{V:lW]xvE+{\ּ7;w_j;YQo|~m撝ǃ?~o.lW翼FFA^4kdk;zb{#c-)Me~Hb|<{һ]sHoO|gG|~<>{FM_<^wsynx#ĭnrcT kHOR'xc+y{e䧃i\eG]6n_$/q, 71w05fOצ%pu}[N&K%Lm>hCΥiq;𹻄@ZDH_lgRGz Nfydkh|S!s/FvK8u`1"wkӓ:.՞MVݼ*Zgk 2Mm}iR^r؏H7z) 4џ6Z 24ۨU`d[<5뷚vh[\[Z2j>O4-4-ա9İ^ptovفʭ槒ݭwK2]G#Qզnrs$-9TXJ66/+vud@\Szrgi݃ 5az4<;>[̀r$cnSjL5Nx:ec}ndDXG/w u&ÒT2r8?n,m.%;Kf+6(FˌQۼ!uN3+@(6i%nE]?~К )vҫ.q{5zsV`Sf G1~)diF4 xuw[[Î1^nM"c(Y׿uHJ9T9G?S?QÙ4EY99u]Ưg ُUuA1KZu!vsTN/_>+=wƢδEO2w_7ZG =nxЉU 66-YI9G3Ϋgjoc-;>r`ۂ Vk[\:_կ?GԩFIôOޮg '3?M2<ךآMϢl;z;Gt:Nܕؘ67ص@sdtz9.j/s}t;,.__V7k^q}wW/ I= erϥrc$Vԑh/may2/_rvOγّ9V#ۇlz-ԭ׾q-ڗhvH4o5/e>~ $)N^ĻP?7M1fw[9noLmi=ǦA7eH>i?_Ϳ,vsVG tBpʋy6wS^n-~ 715>xI.|8r^{W?'/[Knj []q眡qſ%l8q4hMe;.(7dY< Z|C,͠8r|\z;ikJ=iK? /e9s֏9RZ ~ok0k "lc/- #J?.ޠ>*\ߝ7W,q"ިCש&fͻ/-%ȧnN@&87"2&4`iر77Zs$FG(O R]Y Kf:Cx:4i+]qϛtY(FޖxpqveRrהHu4s ޿ejr3Ƈ\0>D=ba+IFwo.'gi2:Z`K ? ; s!#LK^^ `Zp)[ᜠ :FÃ5TS{G-&* 7xjE| ˁ Ⱥ#Xk F7zxϜi]:ȳ4}jl5t1@on y#?.fn]ӷQV,cFk~ɲlzDp&׻NhÊưŏ^)tVYu0uk)6H(gǾHZey5."|5&lfTkn2@o%8e|)Qk ts6ww}ɇ.#ƒp,ě^?^I'H \IΑlSr"xeHV9"UJ.ԣ\Hٸ`b9K!ScCk(6-0W,pƀt&u'&/^CnBK1(~>8φ=Xr_؟Oe6u Mom@ ٳԸ`|kj5jG_,Lw{no?hkiϳ8 j|WҚŪ6b[fi[{ӑl[-#.1Ej_3`(Ό}] M:c~Xt%P巎)j.fhQȗms-i*VTh A,o֐Fm )"up#߸Hgr[',/!nҡK}.Y I49W /'%_l?d{b;w9ǰNfMU|/E*[aqdſٯڋY4 %~[H#ngt:vB쑞Ubh/lJ{@ySUg^D Q\ը_ R5uCpXǷ_0XGn?GZXjx8bI\( {7ãmuQtYr1%}ŖB32XY֛Kl K哥-}3{p>`-Ct ]se oXVe i?g"ޙ ?DLrĤ *]?MGǖ%B 6rNaڥuK{2pwvp02y?Yq\g0ZǚNotkO`?cUTY lt:Óapoɣxixx-;Q+нy~?#/Qo<KO^oexOlój=T41pʭ5jQ['w_ ^}}r*O|17Jy(w!d31{=t2fz:<'sd-: h_]_AG NC2i j3䅥}z= OC wtH]3bs@N!{t,'כM7hueg7I ~| T(5n'[:dn gs%8r,ҍ\ʘYɛ.DmQ˩~>9;ێAH4t,_yOJ]BOmquϕ6%"| * =pl620O}9g ˑ=+>8En]C})sP _tźXqPWSuYmEKt3i׮ww?}|t) [jwO-;M$hJ{ voX_vFqw߸IGh qy/&:'g6y,x38}G8vi9w^ & @XmRapڝ`6:ZcCr4^Qi{u$8'FD0Fbcd hp87`W*x­^i#ɕyJ0k}%i]:7{M/(ǹ>-1zYR6Nxhv2s3lȸMgtQ&_9hX2_|%zXϏШR2DNg?#1ڸ`xM6W-@j|NMn*kT}3~l^> Gp7T=6E٫1Gxy\tiPG;C#@xݘ˨UMWuf1A8fg3K$+FЊ2^Peշh~w߶XQE%gR\OEoa]e$5t O.][getnSc4߮7o/#DۗvI^O( 7IdzX41DdK1FJsZo\ftAH- /79< ]3+Vl79&jd fٍ`thVZ^27f?GF^ضD!wN[xt,k}ckߺ2]ǟt:8|d;φ:[ͬ{:j?/xǙ|+ |% qfu6TFE+h^b5zȞm8z?-ojXw  z; V?`j`q%K))=4KIԢ='DՔwVoC߿д?Xㆂpn{wݟjib[]m ĵxn`d11ߋWXo_獛,nM)~i;wΕ~=!k'\NP3UtBr?/~ |fQҗ(3em-[SY&zmҷ,ob@<{fp2{=Y5$kl݆ d}ku˳^|^'ꇼx=m8jNp:JOƵdv7Nﰶ[Y/nqɣ'ѳw<}z;H}gv^oԿڭDZMd.9曾JvoCR^z]A6ۖt i|au#hŧtsBh;:d+0c:Xl 菥2x1hWn ɓ^XNJ9iqi`ٖ^eimDMϾRz{2;E;-N@\xDAn/`kܵ}{T'gv[W|yQ fI}[|x2kD֞C_"8+[@R؜Ltth"Қ hAVf u1\{ 9{X7&NμIl~ڀUcu+{C]ZvR:Z!}iVGj/94eJCxǃlweS_"yGl΃<ɻoИQqK溎=\7_~n--X/ _N9W!k[aa_q1&q;wo\` 8^G_+~Nk?l3 [3Zww4~;vGS_ңw7 Gj#pzU0H3y_7.BO!ʧV{pw~7wso_PZs݃vIHy8S"~~Y<(.B w CTM]9/E";-)Is|`ɩrqHmf<֞(%5uk R?:׮s_Trdzo''ݓ!툋S1 Bދڑ–Z%S|L/:=y+e%1887ܧ46ޏ#7zٱX=\T~t=L6 o{ދ%mG+8>T/~. 7_Rr4|eTVny c(Gt?GU|i~zNԖ㹕7zKǸYv7u^׵aK*ky9n?iYl>F^ wGhwKF<ϱ|Wg@ƀ]$%z&oƂ_p,'~04,?+=G;ٿbkͪwZC/K{> z?|cV߲wWtXr|/\=*JWN{:u-'w}њ 0)wjJ 6Q誰Hm̫ףxx4;Ozsw7?=g?P`0vz+/);Q,fY3+NxwEΌjYT/\ܻϷ<߹ϛEa:"y{D~p'Dk˕ז )lI8sWS=J+g~o:Ǚg˗YSY( ]owcrծ3N&lsj2)uyu"vÆnq#[4aW!dYh@n~;#`[ OiZr'ρ>/ßnO7z?76雑+{zk هi.&9^Gv?wO;֝@0R^d QlugWv}G?;|e/^%Q2g Zpk8.uOh.#ɿ+$xyj#c:#j+yԤuͥrd~x"HIQќV]⷏&ȿ?S?|O??;䧟|>_K?'߇ {5J9\'FӓaVNl nm`l[oճU? 7+PMM᪇P^V=O|S걧;w=\m$Go߾Nojk`e 5) ?p{>zm~ܯGwny|~zNֻ=-Uӭ{?=4(٭ MNǸ^/v ʶd;ɂxcp;"BF0;k6hm?/s;&{i},F$Pr8P+voMP|զV溣~oC#tz4{iA4E+FV \{0~Ygpwx'jwVwkBm[<,S=y-62Ѵʅ<_mKz4 ֬.Iv|sϹNYr*,HpЩzF[b4ݷjl@G' [QUMVZFhQ-͟67Ÿw< 7W#}:ǷO{]r5~>I&՛hV??;N<ݝ ,cWO 5'U~7>$?ͩE_ɿKtKr\u>I7wy_'-k8{SMʪkrč@GWtz(q +i7oZ%xxneƿVF)_oZ=s:Ln uq/~v0?\2ffKIrrjkH4OLdC oWԉX笹'.ȍ+{G'᭓7xz ?^"?/Oc ߎ'|ӿ[gGjz2U`ׇTuWix5Ng/O-\ʷ[prߟL_{5ra f7|z2:Y_m;=eݺs;޾>JǭVw8On9Uix0y5q[[?Fxho4Xy@*m!k@E_V Vnw#/+P;\#6ݝEtshuH xu_JS/GQ4'a7wy!""}o+dx`G@c` fVtH;rnYZ6 o[}|t]oUAթ g֐,(r|fis˰{p8x3'CU B.c<[Ғ|l}$kxe|ij1,OmWC0Ʉkdu[u|.xl~np.ZKufp4%|rvY6RBsk&e?nϞ`o~wK7'̦_@K%>y$nPG;Q^frv1W44zH40:-wdl+Ǔو/i:gL<5"[gŏȄJϽ#[~{7kU+oܵa.} pe{̂_|1jcVUie1c]J#o+;?y;e?e EQ]{qNӪ.FY֋ü%r/VU?N~ZҤct=]{=Q~ hwKt#t:\{#r~3#k5T_ȣ>Ơ& i/];kɵXnPY'~R_lporDgB+97Epn̩_WyL 1In+n]X׹ΕBKV9qPq\Sx?qDݫ묛k&}$uDa4|fb{nF#GR4SB(+vw _l u,.$9Rq߈0%z~ k}q&ъ&}>w`J&N2OՐ[8GM7>i=C&:]s#L 9쥅6 h f+rNl>E1kh!MnQ< 7:Unc{?Vw܉Uar bc0xGn0xu/~u` 78q+st4Qy¼}NfU\O#vdb,59F8\9 t}Zgȍ2w"f+2&!-v6g@XDV] 1[ 2 ̈́zV9뻝v[M{4륛b[v#n0 9﹙%Kyr8"t$`=iH@Z01(;~x|mb!Vu1m~LzkeԈE/]\cTi"qԜQq&̝< O:s\ CBK$`>jCF3 [&dn|/@%([oI>tP^I8T}X2Aq&#(B0L0R=W7GMt{%$[!,rKռ'nk|w:%nn3, a.MGܧ@n`)؞[D<|;"/I < L),:I+(2#x`0<[þ!gEG!x&!X끀#R)J/ɀz0`w2&LQ1L31sUs鐦nԉ=I`݋`nrrp;rIJiĀ$}"n}n47Y9-YoG~J E`xw@`y\*EwKE׍>/%@0V\ѐttBP fzss0JOܺJKm&n !4!Htka=rx:Bv 9"~^(Rwnx}Нlx-%yy]_yNa&Endz:UA2ؐ:gL2D4Hw.YdĔ/z7gjWINr2) $(*8]cnljοJJ' eP[N&HNP@s3Ҡ&vY&QR{F8 J&=N"I&9e9.#mL$EH!_Q^9*,BF 2}C>% 3(AU7nC(mb xl#Ilu%OHܹhJ-f~eCǮM؛nr4nC1z)u a >p \Ο[/l8w+@\j)D& r4}K(<ՆZP aPL%Fʥ'xcM,t1OK7=">#ԺD3-_%jI*#A*j4@a]2 ! q:@ -0[UX7aړDDG.Nj'V{FO)7LJp OI+]rS(}a2h{:w5buw;/x4EX'w &s,$Lќt`D%- 4 GAؔ3!I %tvوs<̀D! Yɾ-$02`C\5|@ ^BJi2$2=RL庀(D:πD>#$rgzҐ @l6jC >ߒ&SE,pR/(( M(E4L!H42 r:|QXl" Sd7$@ L0KG%Pv2iKM5`!f2bV4ad h<)QAo-Zpaƴ: ܓ{` tnܴ^1(J>:`/HnU!Κ>ZmLd,#Up's%U\f!L5w e@G)ؐ.X7`,t'Hu `J)rÖ#@U0zDAD݌^>TbjP $]U2P68;Pk`N &R .8qR"ʐE ܡ(YqfTcNJ#sq\ 6.LEZ; se?Jq$xtDZ[ٓ(p(30ucC9\p)wIҝ7 $%K֢MGI^!`*ͤs^AhÁL٤/q:M+/1ڝ=N+R:SJ uR;h^JHUzR4iЃtKX&Sp,%P̏ 5eFK$ڕ=qCZ3"R'5̢\əMN(YŅ!c_Bq$MAAF^0/ :K)Q:Jk;L#4 2 ۚ n&))v+痉ʈ$-2?aN"XRl>И cnh͕ !@ff | `5)1;E`Z/͠SyAE組PeDX2V[KA@ED)th'}:g4Bh p džK GmI'19]9 y$ ՃRk"XBŁم*@Xi؎=+Q%FZUt雅PθߠEn2Hs.*LőЍDAȄDZ/,0V0e†&&iQ:01ATl[ˍ#GG.,T"5g'Ytb⨿}9eP2itByQ<2Y$o"+0˙p_c Zl*'q_-wi ߇&LkVnX FwPNS$UklNnveO]gi5bi{EXUrsR8g4;d}Oh7*98THN}0B,!C :`'ú4`OTeN~~cKM+A]KJ ~ PUH@ Єgy`tI'N$8)TVČHHDtGU*K6J~ bm:%u e:%{bIw=*Kql˕ĢQ@i.s bF1h]8Mf}I'%r.AL{]n z􋧕"vnό\ 4JV٪{{ $A0( :XXŜg <áb'[ҽL }1B(J闅Y2ex:Q7!-:1.zrZ PH 7Lc\<7IT%~4x7 (1Y#Ibkc9 M9>DIXǂ*mՓX1`'=ꚉh)) LfSV%-L-ŸM'f/}=;=~(We^F\חH,472]ڪqmRVث -d"|Zvgjf(WJ5=E „5Qx4(+!'`AcJ292A8Ce*DَM,%ѻe*@2{)8T(kb,6*oᐎ^(yy B?'ڂ!t~5 e*>EE N#'I6}MR7KE[a9Jfh\wITOLFYh%$UTe S u>^!W=8d&Th:H/'`P_WLGoFp\)8EP9^S ΑԚBp) ZGt TFA52I3SnbrD^#z]pTi  زGqȢՄ,)8 .;ۄ,I [dX} @,:Z7(mTSee SJČpL䊢$.Q䓁V3@ђI/\>=S(+?(JE(c Ҷ$ZZp)2Q{N30!])LH )!U#NZeM؃xiiLq8g'ׂG[IiR*( !4`.ix啗- "T-'C"hYwЗv`=5[bCʤD4&ve""a e[X,t7Cfi %5pIX^Re ǔR0&'1K0BHPaKk`tXLHM\ !]N".gZHRFQ$ށy`T7K 2R`gi jbh#S0 Hh~ay.F܀e[@R1u&&F v: @Oq+XrqS4|^̟6RLsG,31yfnFId& -R8{xٞ#<)ZZʦtP%LBM:!QʐPO'v`ix>s&$?R3%bdnrEMQA@kKO*2me@M75? 󧆆 @e^3 ! *?i& FSMGa`U@nLuvDŽQRh ȍ03k{(R"vx3c6M<1*Έ~tOA[ -L ='_40AY:H d[bstzogAtBqh,$`8 Kz&mrP>p7(t2=^J1SndѮ~>_K!T̐ B`/g6|.3?l"f) FxR+yJ;I[F3Y s4r䙁'v˘1G&yDB~ hA ! Jo s)B3Zdvv\T˶LQr7 .]L ssGpQN3:,,!OQ*y5"3EBPdc%D}vD􏁀\e 5)(IJ!͛}pI|.eih1o$&oz; $/,\3RKChi"n:p4+0YF C/3fAڗ ۓ,ՅYI ͹C@ŏ#T!R A,btG#S0#J1d1U^FУГoXW=hs+x{=Em*&M8!< !(gJTP (x)ړ6̊ &El06X2C@U."$bc= WR=e|ÌxRQ*V!bB丁VkF$Ҧ adbny\JX$[J5$:2WgYXU$S4s=B<G06kFʭRMZ98D w!3:x:e*d5W/eHH0(:@ h*)|bH -b@<pƝf YP#X.G| ꑇ<M<.nnfKTXҨU*V9x M41p&'](h@DČåhl \ _UnFcsьɱnhp&Z)WJ g=ѣrvJ@)uň&.)*p[SN}bDNY#I t:;Ď=ۚa;4ٜH4e T >G2̷E_$e#.;f.D4U~Rc14R\IIeM~hȘB)L i*SVթ0Za̒CNM9KdFA.l2,rlJ%$6|&f hҫzYF%$0BHF,[26QH.Jȣ8v FdyP]s+*!$  6k6GSLWeEbaATRB2==S+3 LyԎDXfU%wML$|@(9 HnW)!*}~ܠ$d|_d8'MJQPBڅ\JbYU)1BhcfQ SctR %),9czn YEt˼%ei^5,#vKL`h *# R_:f/$ 3E)!CHh-Mv*Se\ V-3YŸ'D\neJ$ˋMQֲ`jsBKFMԇ2yK)%S3ǒ]'fN-RL%Hd;oEPGFBl+$JK%)EmYX$Bd% nzYh2DQ9I^63%K 3:$b -uW#xdr(P)*b4H[RI&S愴o!*3C;":P Ui.B@iL[Sz>uS!M$rSePʆIO @PGʵk|N;HeJA^R5Da8ډW-&sʰ{8 FQ:t -D%4jG6)mʋLI7hP)((?6#+2p$Y2d2h(R$R`AN8R%|J@E [A,eG> L)ZU2#)ĘAp'>3+Ut!S8+lޜVI$ssredtΫ f;S,I!8q2(6Ja b] ew -j2gZ*say;!󛨜\9,!2r4-msHZIH#o/))My䧅-K {q]KE5Q4C2g.ҰZ7RdUf':*IЗb׆,Up&g0KY2 f G/,EhA_h19ýa#AtI1(xPTxS˽Rf VpJhIY#;ݼdB,Y.e'©@j&ϵd)o2Ehzyt -ez,aJ˭ {afHA)Xg_f2Sa O0P)0^ &,PfA#>10p_IC{R DܾbX-Ҝ(~,,|^b2*7\ƠFSU,Ҋ&3S63}Gby0g>H"b ?yJ`"O}TȬ,2I52a!Jfɬ"+9BqDb" zv 1%,a&IZt}My#!3-Ģd奢=>&Zp+dԉ:yjF5)RYHwB8RʠLEϘa3{%<&<ք//,B&i!4K 1✒=Hd/|*R5*̣ CAq4laIlKE20:`:o<}4r!kb2< ne2GxE0yO){'}-KəUAL$SO&MibB E2H9dﯚ!T1%fF>U02v5F%IeTj#V~3!4Bi:.i{ϔ )գ\[UXsDMCOa:YjO*2B1 3=JJn'yVS .SBf G)aDR5{UMS44 s&}X'N,#ʭ QDy3QJHزcoku"nR%+xQ@J|4gk[0% f!(qc 1Y^+|@d?J,-5̒UJݐ ՙjK+%彪<20xHV"GX s0uHyĘEI]tCFDLWY 3MA/aP FҗS15^!%NhSeBx!CS` aIIi=92fvz} A?B^u.M]7,:*BDҌ-J"h(K|Aۄu1*d&O-0dע<2M},q+*ThS-@p%G$rUO9rm̓S(u[m=sNS'B%2ǑgJi:&aгf iɥDR]BrYE(*Fl?skEtv*uaUTG I+ݲhPBWSEkTV|ӂ( Ǎ%0ܧB4ab(wrdJ\$DhzuXJgUv,lge$G:VQA+m$YG])+(D^# < V>GrrQrFhn̺ôygߍtPK)81HWYΨ6RИmޓCU'?V6HF*7R ƚbA% uV.RyмBS BPh\擂%l#1Jz:D^H'V2UFyeeR$RF\4 l52#az ɵ]n6 e!PvȬg%*t@ZzJ>; B?MQ~[:A)ʖfOqXÂB'ZP5"c(x>2`aˑTY$4eҌґb&bO4hE,I/EjBv֓c٩ wfbü O71kA'V 8}s.U7shH@*TȁT =&o2+Ap fd (s̓YhUTBX+xu\qq(/uZmDȩKty}>~X Hj0d=4wYSQ&2^>4wngX*A@ijySkJ(- 1tM%S-f :Ėz(  C>Y͙W &h11p/NRf/8 սO%NYD!(8Z*cQ k$HGR@tZSJ%fOpiy~SpRΜ1=y|!0*;M7d]=†Aqdd e9AP`h;QXIDdL&BD!CbK@uےd=+HF^"8@S mcx -Y 'VgR; CqCycgJBh$j+9DM^^а3 eϐDnzB|䎖Uxв@"Ztfd &i23}J88 eG -^i9" n0 a)ol)= H3")e(!mQPXə hbf /U1ry CG1JCYOrBАGLO@vL39sQqL)'XfYU(V$ĬHRX#UtjYʊ:aeKMҚz( e]j`7]VЀG0Iwʹ3$pX1$ev qXFUA$Td#DBT*i$Q*E$O_"Ȁ+Xh!噤t)R#n E^)ٛq *"$.#a~ QNS*(,Δ<Vi(ʪ̮k*cxP;Gm2=nQf W[$*2+D*P3%=`̭F%ԗV.%KxXQjmJf݇Zq%JaP"e5NU=} XDy+jbw$!r b AVO2GFH";%% aǖ7$VBh5hfrW'd s3ǰa FPSWe9۹% Xp3 ǐ H%xB`,,;6I>^3:]mbBJg ͈˙*&`20b2jO4xH]ELSc 3+:I'5HS4S_33Z.x"Q~dK"' T^,š?A?> ȎpHFB+FW,b-ϛ| @5’#PeYCrUW4DUD>Y:iu qgG# BJ¹Ŀ۴*UFJ;1HŖ0\xh"ܲR.=Q"h~>xd)K T(#eX"<]l_9,faNTYs:bn_X?J@F?<@S%TT$2VfJpe:+Ib ( і0lQWI-JU ̸#sؑ `O{ vgy7&P`G4E0yQ" /!S!sRm!썕zR-b{޷B(PBp+V E}veCT b@e MYL/ 48HU7+{R TI ĘJ78L|Bc]HYɥ|8c(ዉU $SP1S@уάX"|_k?4.PP]R?zqeeZc >Ӣzs%"oڥ$|*u$\,aPJ2ŕtXU s""S,SKG+WItKcԆDidRj R99µKE\ZmD?C!jUd&H=C#/sGUU6C8]|!J9Vp $U%E @DžN$ /JZr%X95L,dl %S1i)h󆅎.:}XM S$ KL11j8W>y"*$W'ɕ9Q1Z YihUDBkUJBǂrL`ReX#9IjTwE/I Ag$B|atIXm&16v-3({, VV*iOfLȉ Q 񢘥T`!ΪK-S 8U>he~2W4J)?Tp*+ˮWa PDP.\ðJQ)* WLr+e ż0Q tשt03袰B q\Us$DqVNo}ՖDTf#Wㆬ5 I 香UidJ͕l4*F>s%Pմ i+22F FFD & +90EF`[cPFfCt9rHJ?`Ya-n'E0oRbZJ0]tHd'1Њ^j9| PZ#~!L PGd:r a}*\aّ}Jy3뤾6flu9 bE,4«"Z%t*`mСW.V橑*Tf!1{#2[ٙJSi1!Q>(v4p$-f,ʪQ2 XyܞkJMUKƻKY*ʟIfZ6Gi!K]"[Wba> Xڐ)"wyu+|LjxnCCd ,5B׳$a,0U RsCY\hE/凜!W" o p*g*T̼U+~XsG2Cfȭrj)s k:KQ SLRIҞFDİ*]RR&Gl݄JRf#*D A;*^%`IX@!J%ԿD;}%0?(TVzJQ)71I2h:+.Q\W,b]Ta,26C&NqQ*jH&[֓R} E&: T:%2gJP*6Bah8-3h *<:{-K0=cDw{V?NJi&ՕB.eQ`!EYBJʯ$!B*FL<gjDgMSBSV{o}Ut12&4Ll6 Ԓr,]o&GZ*E,rps4 CYA 1@jz*4%rT3U疞\JVa芥scCwC?e0D^uLB܄A&Aнdd29 B|t%K GA]Ǫ?%vRjJ4[B 3tι>2 iNQ0F55BFeKM@mge<8Hd cyQ#7Uߩev) aT7lrSBR\2lZ`x  ]HN^˓Ruz,ʏ.^ȂM)إR7WAZ%P̥J20qm%Yʅ[-xp`S#%#SYCB/dDGEAJZ9<}pLg+rWJ2)òb"1Cui29ie 1'oğ*Vʟ)t28JHLb@XTeJ}}jŠԵBYW ӧr#5MRdT1Ef.FAzÀ''0 ہT.Ƽ ІOItg2zLAJw.OLĀM 3F(W7 E2EMɤJdQ*;dh,y*Pg& 8,D\eQ}^p5e*S71rԜZ|n~eTDlLdRfULTԱm<1C"(;TI lKd&Jbhf ܑ͈ا(| ">3XG!2HM`ɉL.taLő(RxכB:T2zҙ0-3Y`|SA M_?!Z117.&}-8VEߠIZ*L+%B".X\5U3Mz. WP*B"Y4, ׁb&S%8{Ёȣ{B:&E:[q,^*P~N5E5cCe +:̫e׊PJOd $΀fS1Er&1e0^RW3[**mnK[1Ύl#'CD3MhdE":-&D RD10芾H".\W)"&H{L(+9JqDfjDuX"V$b4X?8-P`G njs*tGRjAI]\t X %O%8nl[6 Y(e0tULzԵJ!NLwfd|)_:3Ne**WnuGui#VQIcU>]LrބV O-q& B@`%#,fPJvdM$ d +*HRJ"4=&К:"kG&Nn ^,Heݘ[]#)' % ,qóS%(HsF!&+u [mUJtH. E2|RW$Sh!?tNG:XK%t0VJ4)#vR̚1hi+e~48+WVeBQ am8:ڍyʦVW*jŔ laZl}eеŒ+N2Sr%R^^%EZ35IT!%E?43fذG|GHU J Q:=J%# yڒ`UZPCw'LdFw+0^ȕ+[:T_BGJ/6Kn?Sf2|h3N{>sEU<.UL54&Q{"dR*ZYCuaju&r)VIŎ)OoV5%G5 +ۖ?z(1+InD;Ӝs4RJYa\i_Ybj%Ƣ,¿B`e*/BSgu,v(C8r̘ K.An{gp^*dJÞG# d\yxz>$fyEt&ڰn>3S-" yvIN*Af&yŬ -3I,*|UiY<"X̂0e.V¥̳$cdc ffHRVUcͥK.20j)/JD妐Q{"D_ f@xzJ)prS!i&X=cLqQ!e*U ;d E-GIizvbeF3fhG~Z"D;GEM۴pC7jt_u eP čǓ>$#DўL0X+ώr[.`u\ث#8;&*m/2 ]_ F*L7X&X0CR 3c$";Rj)YX ɜ" ڪO3A3B hk$h.VsF12 LGb!O! *aAt6zTMƢ`:ɳ'xZ4;6 ueՎ6Jʒ$ʀ'nf3"P4|yc |xA <,9VْJ B5\Pp']Aa ,ܞ,)Tĝ 35|t'aIO\2eHS\5-[bB?6?[=o4eZe7ȕ$Bʕ=E3U8bYM m}`I%453XSj4aBJ ՂW@BlGN(;dNƒ#5auʦc|"z0FS\}b~Rٌ5C]OW\~B8](Ak<8h_SPh 6M[ M'Ume9- NdߌuEqm1@R1x*bA=CdP)*x$+, @@)C creƦm,a:2{2SOHbhT+CFR &`5i:/@1KNx@)iA4p[lp85Wdc?Ɔ-UY}#hkI& yMO&K1E⡒ؔ3Ct;k.lbwh\1U΃FI@v>rY=X: C JR3(y̻oY,DTPYY)VP3R!\YIs%="*[!2&Iߨ4?zFTsd#d^-EEfqV479QPC,MJtܲŅ}_o %gu@]!V S|G5+f @ԩ%PYFPoyhbKeFZI BɈM3AX# )x51y,8) T'x-<I`NRzQS&JTC&~#,vR)&V=)R)K^Ǩ1XDU8)@Q^@@DBSPTJh$B'DĎ(*MƂJSzGDDEDH=^k`љ?37@a,P9VH bq2"Jj8{v&M=! p t*ricrDzytN\|C54J|#Ɉ [oX3mD),uc5ؠ\DD*iy=Xl HYJ 6s{d4cD/ 4>X8H/ hy ;yy~>jU$FPWd>`^ ~ Q'֓nm.h`pq}ahj)Sd7G<(y׺ DHD  aoФ<-h0$" ŋuXaâII_6`l;t1(H>P}Yl9`ׯ(r3PCi3IyofJ9$ ;GcЁ;W'D1QY$njYn8!}f%:l$| 6# ݌h*:Ѫ_3( y[ZCɏ~4`.TcSoSNdfCouL2t2xG/x1'ԑ(eȢ0Sj0d`S$00H=BgCG| hHm$+ZPmf G`@ 387[ }vB/v'tru8l[-0βhۤWXsdk /@BXA9lyn}yQ"=ʋ:,XE\"Ȭ %*b;]TǨ T+xO 16&DA2#hpP8BI4D*/M<*U D >ЄPq%ve0 :`teR  }J/KTdc[# a"4%hGs_Meq$ԁlQGRIz| c;v p(F2RLҢɎپNhIĬJ½cB(${ Bң[r 8*P(MnT$K1kZI"Rў* #$ pfrH"|\\kܚfE{l0fD0ng`V@51B8MVghX[P RD7cmƖwK1xiCHG+PjŮOؑB n.w_4m'lW cvb:2 Axg3(*pqpj+ ?ǂ#)4{4w106O3vm(a&ʋ>Re*rZRUz@!H{Wk[٫.F.x YCķ"2>) Hb-;h0aT?cYH/52GW; L&!9&v"RD2Phfmc@L ,_HTE61(1]Nؔ߀  ]#1ѕUJР4PJ*C8} -< E]FadF?fyтERU[M-u\ :%[;JG5K K&)4&r0cT[2#Sb] seK`tds%q:"^e<|HqM8y_4z`,%Z,3wfJgiFʮ}4\:tMeuzU)HY7(QXptL8gԏ)1:c8z)p^W,y4ns&>4~M2E )QldQy3oDpߠ,F#r"t,]E1+$ac.!-r 6c*S9c4ĆCj6ƒo̔hP!bu?B%brsZȧH9RtyBv4<tI$͍aEEz,|*衡'g+ eq:: h!գ"M+ OT D B`j*.&, p!12L}2- ިbi xqS&dS쟂\\0v>*I">Gb vO~,M37uM뎛 XV@(3b j59h!i(zB ,p9ra@w}R@ѰyI-;}()` "ÃJz}YI*Qe8G*)x (8$ƋbjF!H.TOpAhqi T- ŏDGK{5cq¢&8!E Ɋc6Q&5.k ~ rABz>a1⢵΂) E h`͗OsQ!qo-NڠxHi=`l@H|+*!h]!y&߲ m=mL ldQjI ^j v5 x(<<͵%.QP 6*)FBVM]1]utqqE耴fCD*!h:_=4IօL :Cd;cND"94f0?6>@(&)ΈH<\L4&  kAxS`!od K]Hy;,}XdIl<,%3ppm<.501yeN](U!yH,fEb : e1Xbc9lp&/dd D1# s6a+Xa+yٕ#fz.ǾI|ޤ2%>Q8~a=ӛ/m7ivw1(sDM <@9C<H`0Tt%AWP˩*dpI 5 f[0M r>O^PLTJdB`\ݥdFU F xA!6D#TG->mx#=BaHyB̢$ SLER}-tUd+sLv1G}~ШL(WJt]2VH'D1# zRhyI>HF`8%hjT=k1 GW NO+F3K+6PABw1l<5a)fjpVq)e+^0WJc$G8B2V[\aA>c<'y2@}4{qzz+j[LXWYQ6U;X*I@K\Db;W5 !rˡ3Q8Zuç!C٧CtP^1"G6H 8|b0 OGXWQx+R`/^/&WH tiD<'TddHF 01ݳ R O#SЋ1Rb/5 H}ʎd+e2K3g M@)J 4-q})T>,%"8rR'{-`Zh`bIN#h}pr@)| L?]21U:E9djyD.-}NY%Mza?*o/sp)kM4;+VC6y-:=O'fE)~#nV.> qh*ZEf 5,yM4 a!y1*FI\`UH-Lj!;/ P|~& F.!^xخpȅ4hZ($䴈ejj}H[Y?Fpw5Egb-yNΔc $Y`X\YVB0c:q4ՕJvxFO|hAA}T$*|j*zeG>yd^D$J(l?r4'ƻ\S0#9Ax1~˻u"tU([dJp مbyT)Ǘ{nҩ8iԾ#qc8$>QQ%fD;*lSYHp;o‱x<(S[ѐقH)H}CL>S&3{]b_ll"v.`r k  c}|%&tt70&*YܖRNqfD)!|wXy(C2 J{,SYxpsxG:?CAl` J&əkk %ALն"ݓPB[84-;,HnSqT#k*5}P@p+ІAr0Wq=!"DQ yș!+tJ:%Shs[ z T.t909!7ЬYi3AϰNҢUӹ \uQ=Av-*GY%0%[`ţ<"bKJc'Dg6N(ن;m=mZ9jfJC|E5M#͕LRk(sX,H#/aL=(k] κ$;.LU (mPP'WHh+HsRuT@ VqҌn.ǶTdzӊ鱩ZCj?[lgax!H!!yp5Dȅ<@ ydEflɇ! í UKcwKT.UE޶JZ]0$Sچ &m6: E߾y4 6*hLWmH!2G'FH6Q鋰Hf#hL!Gu|SOq'PV2m,C=bρ˳@QT@EAn bG&@d;:QgLZ/R5 /؀U^Ì.HB*sGIsUp'=nAQ_3Ru؊;E3w>!1lnLQ&uԳY 0bBOlRR)We:GǖN ьZآ|iix&4th1$c:n>X\|KhJb\Z"$䨝 Мx#Ҋ#\a*DJdI B  ` G1Aj#}8jOK>m2qs(7t3յ(d}dH?t zـ6&YQ,yLT)&qc̸ΠŃۭ$`g*BƚOCv1G'OZqF#$$ybpeZ-9w CUSDm0P@zHuT݈L z1?Jؿ9`L0W32, 4<(w]. Pi JU[k _:PehÊ[Bԕ##Jtt8 CgD+Nc:*.w"8TY,:i/iR u.c!qg@:OOjHLS_iTi/]=5?dH."RoHԎ0Zb]2WԪ[Np {'#82Nkd5rL(Ӗ~yyQB(=j#`SDڬȼ7 BvFlfG¶U0X%C폓'̱H\?E%8SkqU7H?/wJb-HɰB$1k4^4-ВV;PgbYhBΝBFfQT 4^CrMVZRl1Iv88d* pʳtq3όGFښhr0m7Ғmuwl#:סP|H%B[m:-],6 @A V'{4, `I"I@sD1b1Dx ғ{8cj;SRHZ0 <̪E6vyá鳁smde<{S)jv3 1CO鶜]ŷm㍆cj3!P9Rse%6 @cG7|T䄉bp8W7ufD4ԀNLb1(ƌKGVDzPFWXԅGE˓f$Q-"G9>We}~ϧԷrLtXKU,͙eX&dž%R3$'C\1OL#Vށ_.F\/CBȼ!ej/ 0G.>M@sUB:gF y,%8 +K*O UfW#o`RyF៥ CCz8JL R{< ?/&Sf,cS4Re8XZPHʦ)wG++i l-gcc2ҠL'Tݦ OXܠ讀J O7&j_F2{l>djU&48Wn/\L|z*X^#ك Y:R hA1`!HW-pķ DQl$ C"I YH=y8#Jrg`rʢ [ӡB\\[3\|'Xy&Eʐ 0f]4 O~12Mp؏NoE :̬Py*Es<\=m %y*C#@]=t4qP,uj wZ~:0C4(G6E~:F3"Ri~0&CKY!* }`ۢ9Kނ!Pt EV o}f39aK 8ѬGٞ]tW+CPdp{d`hMꥼcr~djuCrʇX7XoB0L qm5"4D\Fzl80QR0B<\Gcu/T^Nv@R&I)@Z0s,XLbzӸ[FЧtR o/DJP i v(hr0.hrh}<@[l.{wIHpCu:~"OHig7xE>%~S3^FtX&C^^%$Tl3&scav[BLY .ug Hs8gBgX x6L=QTY|`dӡ=[dþ'p{.BJS"#Z_r:䞒F([ #V.a'O37lU "'ot 7P`6q<1lt<57s `jY y2Hv QQ (EbT3Y8M  G92Dq,:̉~И(4x8&mcYi(+ XpKwx)B>+A(Fj@,o9-CI)է^},X"zm]5LSS{7GUŤr]3F^-[ˈLu㟀n ^<>A X]SgƔ@r1WS6QkɂlJ@.*uO*B:1y? 9.k p+1 =@e$y&'e.*5#Fz$ _'NPJ1_168n*; ZG26d) ޢlMMc'Y7id a>F'{|4e2QJ2&V 4u\KmƼhy8"b4xBSwkX<>4g˒,JP0^Sc-{Hyg_-dl_ÙK(RWl)PPnHɂ96V~.{D= ͗J6&9\}xJOɓfbTITuq.5/}\8 iGfk" <|On7N;[ylH~7upa0ҽIs({5*,TȜU4xNpC&ĝ:"pX_PgQo=|P9Zwd ۍ>O'ĈcTR]V^F|m I6+Dl|MG1UQA+H-l}Cpq9:>3" MHTD a.rdcیD@iv3'vH=G/ +ŀ3@Ύ|zb d؁2$k-n]V dXp+"&3*$F y/"mz \G;4GIE)TKa$ۙ\8tb+"f@|3_]B0Pb}&n0X^>e1ەFD1TF4mCd58Y˧cH=Q8%jP5e ofR+:1`*)}~4 |3J!/RRY1d;`9Ԑ* :%mw,f ( U+fq,F~x Uk a恋sSGG \zL5UEJpϐfeL>l2r]06:Ts >Ad :ⰠņR3t^4"7iae/sMX:2dioL0Гŗ0gk&-M$ `L psME_A08LA&UM#wHܛ!As#Z9 ږpª LP2,}&m0lZд4> Kn|dJO)i\ (B 4h : rcd1擟ұ+"қ. OF#S lsؾ[xE5sK?DnT>`x7jtLl5tVu4 j{9w`Q`?b% 4(ECP 礸7KVw, .K.r d%I7>lP*LR0ϱZO*mt.ok2if*P&QeO]7#:cѠ } 2s=TB:4r*eCT!_33|ziaz=Xb8"+QHH!* { /rBc A~s=bzϒj8&[&|JcΎʷt x8,B$wE y##@Dٞ[s.Mқ48㔓bKB0k.9Մk׋">1d=D8oeghsAʜ fc+a*G=ay|ϳl0s8p\nV~<8q3;ҶƢi@dp UMEDy)UUd]21>=(o2!A!4u Co\gQ&шIS:;WUVlH}z7aeNręF+9Wjxnx:˥COqpdQcDd&k)?9TgEfjr=ryaw"LP,7 u$Rwx,4} PJlOşCJI)*{ !%ҥ1,A]E (Y$ܫ" "1ݑ $v-B 8HU8ᡫ|XJ4 cWa} ?@YɄ79TeVyPz /{ 9| 9m(b qФdkbdSm:Ie?WoY}F=pҦi%~P+ Ciny90 UIP3=_@s]f{ܥ qXto&7ɓ@l\u@Z+(Wtd9-D-x5#n58|ύH?Qk{PzT,i J,nC t*0Eg`eh Awh~"X-"ޞ8"M~PMzAu(v:M68 HWKY 0FL;',/^-̣؉yLl Α95[ EVJYsŃo~KH+#_%ГytxE$ExǘahB=ZtVcLan(3k0"]o9Sœ [L|;[و%' +W9 ȉ4BrPXY;Pul _7IۅAO^vH8K1Fr ZT]@12%sPXadzOҘL7rC*.=vqҤ"RM&= Q0Z&>}DP #Gbse+ T[ύ(QIx |"XB #E}>HlA>}eG);4LGOɤ"0ZZOq:(c41P=7g&Y|nVCYфVZ%R܅>KK]K=l4N q ؜&v& ã,=$'PO1um>f h+ep/IDАwQF"*91wϙ._v2)+<&6>xa5r+uuaw7;#&jNUx&6 ?EOΠjӤW ^DIib`JIJy  .-B3`izUAb)곴HپQrUe"CYdрxq5D< D-祦mq_4P*DQnN2g.7sq LהK Zbpj8+JFI⬀(*Z,l/]K'?qMt8}!=bzZPLDCؒ1P3q/,M)5eExv4P"nCN4 yysPr .!rcjo=QN3^WE7wL98y $8!@JT59( m{n`6 P*p@5]JF@tq ϧφc05< M+"ك n!I.GZ G6*Bj .pM 8tL,dV;,}KA3Wm@!P'L"qE)`x[g@BJuyR|1Gh9PƴlD:ařISf ܨD*.E 4CS,`BenXLe܁YTkVӀ"4Q~SR`d .<>]O#O KÙky6M,=hr!_#Wz2OnlG|1aϤ.zAU} ?(0e- [-!Vh9x">Թ\3S1'6_4@97s-LSi$ϵ(2" W:A!, Lݬڬlp g+)mdtCW5TZ1U KQA*5OIG_י@`մh.H^x^@"tjBa )=O^+Pǐy)sOcl%֜&iKӁ2-TkHg`vJ{ȉTGG(qp둑R0rw ZZ1W 3)8PZxlqQHLtrHAjHP@@L9)(ABdmBIJ"B) <6GI$"—KP~۬#a ,_ y d@Mc*0XTReN,KiB(*EȈ/FAJUhAd9g6fe+G\:7! ree*\c<A5UMφɅ_wĵ ʀ܆Pye5Tn Batcwɉt bA3(qcӲMh$јPb ~K6{"!>2@ uLRP2۱4#k&?F>a8d?gN.Gw^4ÈEimƭ:fyl9(oS7`+$dÀ Թ7?\츨F ~jh :ב ym2jDn1#VE'M5>>T8է-=}::cB#R1F15 㠐զB+BMR۾h418QiNQs:Reus*)*[$>8wźW}$"9l@ӔbD后J*QU᢭pįS052%eDyQUpk[I6`Y$]q t$'NPfCb!tE;ZseT"1hbTК$ml05A,f:o*T"wX~gWrc d9 8 VUl5x$rfM{ZhOFjI)A kkRhJ-ּFW)!06tDm|=/YQpU1iiThC񀱰:"<;tv9{Pa7$HLrrEB hBf *f%hQ,e\ۋҔ`ؑgx"IHsa j}|X+ PÚsYAx8w<!Nh*xvVPޠZqrTG$_HϦS0sh 0DĊ"[t&=R`+^lzks@!kdZviW efIʀ)޳Me62^b8I¨鳞24Bvݐ Ƃr2z0PE^P) EC@]uxigi ݔ/@),25G-ex\BbfidE/ZQz ư,K^aJץ(ɣm Rzi Ҁ"&e4KmJMכ͐q5s`΀ Q~-\~ȘQ~j!jӷބ׬P0y,PK~&5xĔ*q .mZ%o\$,|e9 M Jl?)q@da ":غ.^Nl35[d~YPF!lH|; qה\dGGwh)i0M`Ak`(ec |4KP@1Y;NfqNGFV!Et$(uR6plR!8FXȲe#RǪD. nWUu17{Gu̲[A;)?@m,tOY0sA Ֆ}>A8M f~  HƋP&vRoӰ㢀[=FaRN(UVP$J|xD8 erMaz<5 4 EN6'$vT5 N%MR&4`ģ@Ɂx>?dJCJ A#,gWjFb=' ;!7jF͌b e̲M MDQ\)TCFj a'EW <:DGn5!sA{q lphhzbj2 Y`"Z *RS 4E@QԚԋrh'J(#s% ‚jaq|Uܘ7ߘ;'k@ 5Hmj`^@:-70ء+f58Hhw7 V6_ |wlʣ >!::3)ЭA} qh`*.'3 ~WS5;6SOh PsNeNNNe _6xh-Wp`C(|2hnձPϒ}6)5.u Mes̟g`!QBt2_(:(5qt3xb) 2)ZwK!\6JT6Pܜ45P^/I@¾h+OEJrtEl21KM=~]:,xC.P bK,@# ^ =&8ֲ6 !@][IZOWceRS^PHv j>pLhV !iicp )O%:C@ urHTUh ^$$$ b(ri40ECT,Z&یnV\T6egTʟ3@'"!-:9(kAn,M€$f-%9L!@Al߀H_q l"ax s+ez@G%"K)Y>&Ʉp|g]zóXG= *, P> ,K֭S@< \6V>{##f#Pm=( 9dĎΦe;-!C]C]4!W5Kt,%$z*=03G4vY5Bh}6.C7\@8*Cji{<15ˬ~b0Q5@ CqK4 L #Obx !DBAJFGj!d,`"TޏE2Ҕ.1?z`Q0,r艡rOL\B.r'2nEt<755Vq(/,|:0 kRAJKК*]2kq2 ' _8clN#d$แ Gu2PiD9Ň\qPlJ=hlu$JCcf7LRfҔUKXC$lU@ C@.^RԎ+ԧ>;㥨=`ƨҠ9> g<$PHV'K*ԁЌD(2):lS %W[in&!pOi 4v}[:i )!7=E.)-EsJOF#x$*T68"ngrhM'O|:t(B 0Qɋ`*wh1w"΋ APPC 'EΎ)U,Fgu4ȊhǃLc]T^tՀB%TbR0s F(Ɏ,Gg`h-էXā4r2Aib C6WP 8("+E\/@9e(6 ^oH6xt$AukNx6hu#DuH Lԁ54!ЦC@=]vt@ճ䆁Po..< t"JpHw^9Y`!x.M0D25*A\s܈NyebyإY-Ŵtq_wr{dX^)Z,^ۀJ<[aBܷcj8n AVcDvayJG5ёJGE9S]X'2"~` 2k.|RQREhK)s '[]t3I8WG%d$PW $& @XI߱hoiIi(|bҴŠ"hy*٘pOnb`p =12Du8ihjxXm'%5HdG۠ -a'`ѓ^i2Da!yԊ>`j 9:YyE7:+4%T µъ|, ,͢CUrň8coo&UM n砆#IE'qt0Lk<x;00h4`#ΈwNrgjm%㙔bT/Λ0AT8kci [[ K- x ,`anD%4FuoFB6!dGInU@0 DHJĪ`Yr@TK5A~ynF2 @(B6=بU~DDq'AZo8YN$kÊ`FɅW M(Nx GG tbGD$n`X>|*PbcQ dbbcR-i#L9˹xGF<6T ȴIadcMȥ崧8>= nj zә3Q#کꘄ*+um6u7)Us`1Fh IR*3釨".C!BV/'+R/dpAab~%A:憪 xF0 (a/&O7qgS HweԈ" ^<}|8hzN(f&upY_c] &hKaDf@ GETyX`E-~Mn2ĝ=PS9apJµH0D[H38Y8 B&"O. 9ȁHW\8$}/G"iXcx,P4H2K4(J ~(aU > *kbnޣALiᔁU>C1CXKΒІOQZtZ -`r͞ 6!e6{ T Z!$B;`axP13`"5z PPnx\٪VYy6&1shLarAb963 ?Jh*/S!7'x102"ȂL,쀱>iބ5#(BaR |۩ N.O1v~ByP#ZH.{'p j0פ-D JH!K䲱9Qd(#@Pu@PAQc`yGI|l\;\3#P RhpvZEb6Qb<C_U}j9 ԀQ; fytSC_()c==mM$-AsH``'F%!vJ٬$18TEy=G#=T-!&Jz'&ATpVI]2'8NR3vA,h5HGs ,-2q:K\!V*.0M4CMivj*P e*oSJ=4ڕ"JH.ϸ˻<Ɔ=ri K)lUfJS. 2TFC xk8 ׷18W0p:~mPA_ E'&B Lp@7i B0I} *JȐ R=CYhEHs ┧@Ǟ6]² F{z41'CL e&7@; =Ď5J+t*:&B3ae꫷)8HS2˖_&.Oۀle`)p۶ӥh@nh)h>բP V {ĩG 5R`&RA*qT'za!k)bDQ]رMڰ݊HxAg.J)"mX qimR; \R.mʂ}*TȤ[ ͕I=-j!_z8dH EB!\!]|&5")+`$@$ "P5j!(q wƑEZJ~\Pmi|Dj|VK藎YLEv8~XXRDZ$gsuHgJEnMB(xI+[!>@ ޖlZ-\5x11 ̓E$ ` dŽJrQh#AI4Pi[B'vό)CtmCU5RT,Faj,-Vœ])`Ge&/Pwm1=:Of69;#-.ض¶@}Pҗ U4JF.'>51Y]z9yw0GbW-? B|0ȍ7]kz:ç{,nsWf` A25kx|z?x<=CZyd^G6zFIЊ;vCma˒+|PWU|¹Vè&;Wѥ?j qv"DĩitÁ]F9ޢ?7u+V*Q~&Kh_k˜uKx`9nW&u yQ7f:F1gJR75~CM;bjP:Dl ߴh4vA=c6bBȅ H=W.2sxxiQjf ޥo1{cji[)EQWzTQ݌`>g ph!}f:ʇ7 !-Py?&6q 3f(ŗJf@ ,,1~BY*uks Uv5)FaoG 72ɑ y2G46RJ"˔h`: 2K6q8rOșFp~2W)rI=QP[匆Dh *JCns LP'<^,wN I[7J=$ea>2SaiT`UoRӧH$T1kaCi3 Cv6ofDhRk)!C-ZaR2zrٗ|8)E訝PB!x?,;;Hg2dug5{t,gAOU$l\ id$:0+}qs^A6/jAIFT[M}mĒяSSu -<)B,ðۤe#el^Yil1!T0}& (`9D| ݋0 -QsіU1W?8-AmTHwxjq5mskŹc{Qx;}vRF0+ꏅBsLC$Y`^QR",*q)\20iFk..%1$r2%=+ 9 7RDCԄ!f҅L* >\|uv3W`}E,YnSZǣQ]\HeG. 4<>RCY@MV?0~Ej@ޢŪTn|\7}xc @h]p Hf _A̬d^;8#;R0 u;JqQL<|+5LAV$(Pcڐ1YJZ~mN, &!{B@*ކGE (РHܠ!-<Ƞ~7_ʹ"n6Ր&RNIϢWcaB=f8څ\F@V$Ŝ(T Z5kA /%/ \Ը![َaald5?V2{2:"A P; !qZsp(OuWʽ#L.6פvłᏫ%]((ZfXN7Ȁj7\TahW /;à &>+tAAوMC wlO޺&#S 8O0DU1OVf`E[4)SSė#Gc81gz$ >ji )qn&pԘ<OWV8 xXq<|jcb) -y.IQ|JN WS/2wb (c(Ʀ(Q60WfzR{rױtӷ⼇mvs*ܪMI2@6w9S7 !T\echNTݨ=@@y)w(׉6vw1 _Pnb٪ I$|) tAc&V Ns˳$)uG»;Ԟq9 le; !CB y1&KKT>S F"U@PؔttNyk̥t(!nj(Ryk hh-J@ 8ܨMd#T) "`1eYrQǪP4ar@oX:@"T8NDϴpX`RgxuQ+E7G<qk:!q~7+(:OPF]/x"܉Xfb+8 n7xiZ x'Kq ,>(,u}5Q@P &zU'GG(KAD^17@_&/@$iR .H.t;f w.@&Z;;C@>*jǣ sl>12$Vr(cPŧ'U1'* CiBQ/:HΉ,3do[0@So8TX9/9x"&JuY{pMdpgs՜o q vE #BC@pz|RH>aeyQʍE'ZVf{85uB:K->FYAbEG?qnȱً:Av~{iL"8m~pZ$Gb62 Ok? m$$J0 w!R[R!ڔ/&#B`'^ɑD)r;<>ҋGQd5m>L5RgJqUCzVr6[lS/SL59JZ i9.ɨpHDV{$h\ӱŞU!%^jF&{F`(Go)f>HG)P0IS0b*p v"cw4ݤ5$9P*%T]Q!Mt6EmHdJp>$h}YCΰm Rޣ!ZB=2GR[.BoHOS-I!ᵕp.1)j_!~rm* i2pthn(Ց(ԛJޚ#M(ic0w*u/Z#N満11@7/K@QatO` K'~Ho*V L 9vby36N66T`V+eL3T%E*YUzU!0+u!~Dkt! v|§j#PuXFC: dkm$,uKzҔQmض*u 8dz#;]DJ@ y4s_i5`( K<=n0GP=:"{ՌŪEEfX=ڜ^c':䉜dpL\GTW$P $!]ȺW >vlF,rXG #̢ Ei?0m*b'g}z. O Bp&$}N=xL؋38N3\O1=5SH8Y0ўEiKHe Ӑ*= Sb'fn!R4VJ!%ean t@SٌB3cBdmuAtiHF iϠw9ubS2(lrqvD~6aIcC??'jZ\.4Rq fWtI$| 9JHq$~qIRz|e`qBMO+`7/f]jd`s(&'_w0. xaB!poC4k*o `ҋ!z Ď}6a!H/X!T;(KM-?tR xDW}GC8aлh}HBxۑai8*ؙg IY & L-yl3, r78c)ZBn"8eÌ+ W6V0Hy]!jqp1Owlji%DMlU s=յ#jQxLDt=|<`!V:uSAjYAP]6Ohb 5E`f'~R!QLk `CtT䑂'TT @f *0*HFEťi& IX46լ IcC,Ψc{:^7"nf1MfԦ?T݇#6X`A586oL܆΢ ˎd,XڡB*fkHXro ?3h[N!YdMc[U)>E-M Ȍl1C]Y},\}_mWhm&H@%tYYeBJڂ;`hBV?!L@)%bL B&gƳ@KQ%3Jؠr׉ KW_OGP IA H28gq-=^}-%`@F:B5 W;摴&/Bwa DoxXؙi7C*U'` |okiMqh4)UD *LG#1[Q籺Ll>°`hkd1uSY h{%s\F+0ɯ0 ťB7b ><3 Qd,eݎ@!Z[ KIRCQHK4O'#P$a֏,2h58T4:ys$r9A tm:t f(zp$@` ,,66/c݄W&*xKl>6UBN¶q REud@(|AO**j,C)ZdlBw] ;X]vL}5b3r}5,dO`F "~2!;Am7n1'm6Ն&<6MTp1; X<*JSj3ƩW8qo5bjmsGוšP( $9xV¨"ADYUOCIs"$@@xُimsY6q'q 0JEtDO4"6~v:2[i`Y(_@AGp{! ZOp,9@46YФ~Fah¨΋qq500Iq>af4``e+w$ 9m!_TJ'LTf&psMf 1E3όA%LAf!gympEn3SFby{fp+C `$X`$q7"Do7˜VV ]8"M\oy @Q_.E_> X1JeȘA+ф|7?8(:DI^\[e Xb2d~q0vK=XftY؜<:Um%0i4qq@ &u2Px5(?& Ǖ{,p5نJ-h>gppN>[@1^f9kB F0mB:Br=:c$ϓ-$Y ?Bhoi-,L)GF&["$Sm lH0<66LxraP" ף{'i"gXf hxyv) *Q p0j2n&`X$iD(Q&)m?P$ (Z; khA<0lx{yϾ_+={N)Id!T gj X.{H3%V,&&ݒ$UzQUʟkKJj>GJFn?'%*ϜT=nxjJocbiuL[rto)=uהU䊙Uq_*lx2޺]Ӻ&O<׍i]ɿ-Ά4U̲v1}ne7O׬l޽:$^cyVJ*>-2 ju+[Ŀixke+ۣ_e-fe'qmq)vLj4@:@k댶ra"%=#95-#9Irc]zT%^}HiѱS4~jR,|߿x>|I"޶u)=.V͌>b%wJM)?I&Ui<^%z-ݲ~s.RSkfd'9ѻ#zw%Z5}{鯿wJxsO7_3'~sҵ/?=hHW- \75-{o7u Sjz^tL%M M*qպKϔ "> dIH^{feG{c+=n{xo(8.R{tj#)+O/o.!>ͣNK_{eo_?hxE{$~v2WZ͛7/+?"GYډ+ OSZ2ˈ5E+w}j_߿_k%zuMITZ%% ² 4-=9__oXMg7a59)]䆮hd=j<-ns?v\c~٢/ץ0C=c>>z_l~߮uov _ooz/Z1X맥&%KCR)_sľ/kұI$%+P~5n!L5*%3#?;8./?ώ |oOklwoO"/?jrwGcA*={锚*& JJF*]2%U5J\]~!J*_/Tuvze{h*MEw0(?OޝRۥǗvMjp{æ'~IKk.Yvi^zU;$>) IܒT6\oOk۳kJjF֩dȥѼyW/oڦķ;Q+%陑)#]v2Q_] N=0#Oq~7\_jPв|&wտqZ%xy3=(\RϨXm]cR%u78ŹtCJoRm~1o@+=7zȴ}%.d^tj5-5?t_y<|I{m凶ˏ4C=cZ?)C-_xZ3wi;H㝡u_=?|te_y/=0j>n7`Ʒo*;?_}S_v{c[Pz__u_ 5N֩Hֳuz_c6[zO[om;juK 8 ة og߻oj5N&_NҵM ~|ö[K^[ރnOigK#oF7JT|߹+R<%)>M'Ͽ211m׿4oאvG]"^KZ K xn@?ʟm;&c(;X|wĻiW.ȿp!K<=ġuܶl?%9㭓 ܌ w~_+Ը,_l-%òq įr 4SR{%ɇ&ײ1ݺ%Nr%(\ጤXSbn)-U6~Lp9ժϨ&WnqS͚%[~{cj7] VZC^C+Etv_J>XƚOKɟR(ZzHd޿"k=6OT)E/nnGwJM\_|j:]Zg4>V{pظ oR)ɨ?8{MnӹߴwQ^zбRI%I[20OJB?1q+%JчgmKH[[7Ny9Wh~JĿI]xhxN^D KJjIpU&K@=R *UTL~cTN:A% IJ;k~?qUƗ+Ј'zeߴ,Ǔ߲N.q3;yޯLô7m?wǔ.q߾_e\q%+g^׮y-Y҇}S VZr+NlMW1巾^g_X,u_=re4Pz|ŎE N}9K \GޞuZɑOW,ܝոCcݵ=K(cήۇrGcKޚ2pO-۞үLY= gm~$W#O]r;NXUߙ:՛rO{Zu^B=N[3²9mY<ߩvaӂ^~8g9kyMnY,aҥj1gԷYӑf& >oG ^RjCƎ1tyHrMr686g@jc{NY} |%6:ճGN]Ras-gܶg^wѥ{ _~٢fun{V7\>ejȪ_]]p(ؙ]u^ÐO_?ꩆ{ YRDsĊrj6槽~7~]K.25էO[_ 2;1GG\֮_nVO=ek{}7&l[+/-n'|ʱmߔ>h;|hG-^G=Mg>.qSN;~pkgڕsaoyg9̐QU[T#߯ed)]OKkNӦ~}amXM7j1mϬ S I::䲦sO7RimSWާCj<̖%vw^Nvm.v w-,)iU; ,;':ypBYglްǎyԮU4'['T%S.4C -5uY2F_Y73%jػ F}4l>8{v&X%Wv?dGvo3mzωsjژ7v}b.=L.7sGڶtx´ٽ3zs#-Z~Eߙk|}_ҭn\yq6xu艃 w|T쾋e7]dr++{č[[Si`آ956̈́7aY= scm-챆cWg\青^o^:/œkhnn֧UxhtCH;#}TNn{%}5nд 6}pu|Nܖۗ8rOzu<6oؔEGdҾ]fc'&?ѷ86^Ug yzF -[U[.:Džw[^hТ=lqk<)g547x3~6>3Հ)AlS~,_~PcZ'L-G=f+ç?oݫ׏ymEnӃR}b ŻWC=|mӺ_']]g,ax˟$ˊen_?0=W6ߴxWNΝUg76vƟmnSʶ_aߺ!+:/>pǴ=<Ùۖ 9ɥmYem趥♻oyr[f7,Z_pݐJ}`̛o}M#Ŗ76Egoi[^R9>k`J}U/yW}eCtwZAg+f^\<ַf޴yy|ڹK~9^ISNvٱZn޷k\khK\_Qws 5r ?oܾ[ߗsO9>ܠfC8U~=Y+6<9e6d7+w5rfѬ64wj׃7;l9dM=B4ԴYga/u~o_J| sjVڙ+6:ާ񙦵gxҋ*-wLqfu샷emН/>oO{K/^\Ez:^OԜ⅛*,*5~kWޕi2;/*szg&<2kr̟{ᴛO?}n[fmpY|8fo^dl23Oݼ\'Q-G.2Gۆiǧjv0rԇk':w`zδgLh[U}Bg\4m䀮gWlYz<\Fՙwziso>hߦ^XAo4c;WЪuje/y׻vOjviB7fgrGw>{0+J{c֯*ҥJu8{^?շ=8p診C?u {?;}~Qi垣O {uY~#f:Q8ZXykvrzq㳟1y^02s3?{y+>G֩ojs3fvн/rUM?t/gov\*^{f3䞬ܛsbL͕E<~ U/mrOk2`z ]'g4-^~;M'3gn&Jڼ6?|iݶ"S>?^ܳEUްYn4T;.Ĩ*7yvnCe}]jN[`ޮyy_[n)vicNU?&gȜ[k=YNtS1:=b*7;ezof.}_onrMYٟ׿i]Z' :;^)\MO99m[GwLGn?RK5@O4-6};F}\_ܼEW|U黖/+66oBi+A?>1d3fmFY-aћ;OX?u޵ɥ+Oncꔵ\Q˅1'+{edT%#{/xe̽cv]_|S ؇^oۢXcMv;kӪœڿ^fBwSXRo;}|g~AΧo?`˾{p`׸*_}n$[FFN\aK|=qWVXTO_-s{*y频_;xUoGL?sN˫߸R鑕'olOeZqjb>}MwfqN53~'_rW/|ͲNzm}㋯)9agggzO_x@ qЫ'92`˥s9)!Z6wx`o=t_ֶW&/v/o8gg:u)ݲ!Knx߆OkQe猴~:#%+͟z(Jw lȤ.KkД3ﵧFyiU?v-=ѼwowRvOyɛ6[ņ˝S|=‚joVbSΖYLvo7kZaIGgjڗ=[t5+| pO'FL9^+ <ݑmħ͸<ݨ֓5{_ h1K7nƷS,ZzЅ+{t|/D//iz@vӯvtK{‰]{OR7wJc ;ROUKu-^4wǬYд3>" .ӿopC Ow~k?|fwo߳divMe-=FK攻9є[gdk233yCGo~+빍 _ҰA 8ұġ4rk$k0Q3˷*]97kM<=Pk~|pkaQ֜)מwyVfwUPtE֟{b߼Y?JlȪwsSó^qמ<Ԟr֖4{=;!d+}=][.3ݚo3矜S;2RrW^INsc.[zߑikn.ْvoj6j{/8K{zʼ㩳g~AoMKz 6}k 6b_nGӷNEw|v&4ޜ<5]=t~;ʘ[CWfo?S&];nԮO[z<.xy-Y.9>3M=ZQVܼr?;ܷvUݿY-CMkڭ.0ʾWd:Mzk߳~_уz~)ܖ-+-8`6Mf38f묂#pkM/i~l_X!6?s5edN2nДn@?-_v~ON?/o4>oikw<񩋮8mdÕgw.kqrf-~oz+_kϻ?~^Ż_p$kyZQ-}o+}JZ%_ݽ%_'[ݻeN#[lo:w߱ճ~Գ~j֖'wdkV{pol֙[O)Se[ _yOyߣW=r}oq޳>_7{[=٧sw=.=tjѴ+9}W|3=wdͨsGͻ=;<>[7sgGZu?tQ'gg<89>9yޠ޹G]t) h9_cϬ5Ww|_^Tp͚*o>ᯜ4e_a4me Mvg.uNjvz3899y4s}cOn{kp'K}~v{72j7g۩]Fۓ܁o̾_oY3p+_=܉d=uja k~5rEΔKF}pySPŽ&l]Й}8Էw|֥s}k5G5w19٢j%>R=r;?/ClZ{#&~7|I״ӧк2aGp7S닖\wiolp;-tm{S5NX̼5^vOG6bƒmf?R|X!_}=F 5.}'c҄KiZFO햟쏖u*ǎ75hYO]ն[ ݵ]#'˜Umn12Ck{һg1fwYwڏ;֣ZېS._jo=9d5/g]k$ZwS@ӟN,ウ,RfWko-~';NrG,Tw kOkw|oEKSn;\R^%SN|V.spIֲ^3e/k .ֱ1sط w.:*_xyͽz zqV+Tuc7lwg =oJZ/Z?)'>x^m>.=a]%Wh7^Υ~7\/99c7pUX9g^+g=O.nwIѩ;b~GI[&Oh}`Wod0Hq^4fK7]Qrnb;c]أÇ/x{.ԍ/}wǟm=>2ϐ=|vuo}⻤Od;y?7f+fLFw]ULZ9^>,v7\ʎ go?]y>{o+m\̭~Z}ӒJ7?ҰU?5nvRV5oԗ[׎MӰϼs'ne+&t[ͫއ:{1gnqf.sҏ>CiuϗR氻=']3ؕqaW,[{JƚKscO\_8VtսJϻiU1ݽOyl.:>S=6z oFW샯v9K:nNֺ唇_'~y͖o+`חͼhE//ukzkԉ/mRˎ^@zo3奴f^dl-7򺇮3~~Ӆ^tWT3i-Zķ[4U}r]{s~|/NwM+uU%Qhg᣻g6jJҚiK=o*xd֓/V ~7~mm/-U6-}xwJ.xqָ`݉|]3mߊVshe7TyFO[2gB-뽧?d{U/}ѪXs_(lO9ۇxmcnO~̹n_|_zw[SX^{Ɉ:svjEǿyp{>Ĩ^Ӥ\u.^j^?]1_[Ѹpz?.tu,ඊ;lz黮(ՕkR*JXUl߮d:Kn hIw]\y߮N_諪/zg˚9ժB /^ڈBtKn_+.[O;7N{딩^A]+?*xmG*M}튝[:*ktޭ?Cj gz.{E<ܽ:3ۣo:E^UoRG~{+_+.~ic/cKM5ISGxO(YIr͊=]nv)im4q1a׭ *\ݝG*R͖HϯFϚJtfz6yWy>6T7_n5=-;'_zl%5⫏mhFPpo5?ͻJ]3_mw^5cǣu+y7ẻW[^k҅O 7V\1=A0KҐI~+O‘m:.e[-}|c\|_6Ԯp'j׺v/2?ze͋nqvw}`[,ÔMuv[?8rnRl慣G̸;O^u4Ύ]8_\a:7{ĺޕ^0{RԸy*~-cϵ}SxGu~Oe6lIN+>{m5UA}v:s^>x \9 nŎg?VM{m.Rzf9=<;@|#]SxkZ[X//-TgK?9/~ };g xWdv{UVشq6 jٻ֋?~OW8[?io\3bZy-}4i=_FްI;k.޸EeXI/ΘZIuoW^K׍}Eo{?oZOLp`𴋼%7|_+œ.5/~=_gun,u٠7V_taR߻ۿ~ְܐկ*sнϼW)e.ϣXnf|C;W/{x&zS%:T7w;F[{ᮢ_kAݝ]U-|5J4(~KM^*wmj;_}A:7۵Oܹss翱USO>N˾4棖yƂ{_{r}w,lLvvvzym(}1߂#g7mE/¢ F! z7P51 K!Q+τzHEV 62lL I'gS=/(i &1J^#OFqߠ2H&=PI QR L(.x$1Q%&I0T`11ZQn/?"u BajnDN3aJ$< BKwgq\aFN1{Jڃar%>T?mC3@rTI+`Z|FqA)kfRLflϐQzXE=9e o;`5wYFhQ&<c^+GL":%̒b8TA[ i* )'wEGV |۬uvfjњ2J9aZSn>Gk VWc7:R.XC 睮kh›|Dg`hz!L'0p <܀ A/Eb`9R # c3fI2sEFX +=HeL{B5"D"FZ3CA%,e P[ 1ȸ2J6̵ېe@ %tTP 9g芐Eܹa^0=NG!5E[0*֔ήLL,3(@D^ REx(7IJ(Z֤)Me_!0"rB6ÁO| NK XH,L&zى17P Z\)"P C"~wLe?/ f , 5r%P6$^D `M0jb<*MI( / }##.ƒtIWdpS?[d1ۃ/H#5 xeMtIhfPǠꪼ39Q,`$U8Z6Iܤ9p5xnRt@ ΈCy PLIA'E'PJ)kDq$;p YH6Qf8uu)0BBIh8E%2ʙ= Up j}[$&P$HUf0y ,5#K&-U9x][f[-\N~AY TUg}bg0 IQ:tEX`XJ[p:2zMFةVCИ+͙W,J yG2|tYTMx Q6Ev#SO6߉h)0*[&QRG1*\br(LX#Tdrڨ^ o[qS%z:6} Ȃތ>!Ikz?E)ibJx6g,gQZ^6u"5Y2fv:~WTq/{%kR$DzƹU]5۰lKr+D6CN+)n?v jf ͝5({HGլBJLȉ,ؘv̌+pep5I!@,iAt^hb]F0Qߋ:DOsr 6,W dy /2EjcNQU4É:j,n<=^[- o+Dַ:*Jq6P=Vzg }Ĕk%&U a3s !&B#鐜PSr0EN%K|&({b;Y,St`_zcWn z#f%.R.ʆ?JS&)YD :QI~|4*N~L$G@J۴$1 TdUFVVr=$TcL:),`z 9P"0k]H<%ҋK!E.Nl@ќyTa!,B& GhգW=[E4 9tPG@v-I<)gUUS :&hW-j!Ļg~<;S6'?MdY3ԊW3?=ǜat8q4gr P.e#v-$W9(&Bp}q4V=lA,}&cA;mL>9Az哓/a ,Yz{1YLDL͍i&B 3{Ǯ}0`l ( 0,hqa Q/">WJn. qS[$1dk|PnjWOR2A[Pw/QZU0o`ZM #^Y^aeRS:d°@iW\ 8|jj$i"AyGF4D>dWLwK`I84Ys1:z.l$ +_<ꫧ|pF3iğw eiTV#8H^(;2SIRN,hG`~ b./nIGI^ |D "o>zX+qob:I9׬R"mS) F%ExؠB*/ї AHuw"+9ѓۉz97̓3K5AbS&M+=.L bjf:UyՉE[FjDP{ E6+~>EĤQO gYGPCh"U{)Har)JYDy*7EU.Tؤjcxx]y/!x:OS~T*C cMdD2" ,b1^@ RɜT#Ht@jd/J <8-uߤ13XKTՐ^sTy>ϙ[iRs8"0U*(vې[=6jt^oW1IQYDP*KdnWęJ0BraB##1-הh$ȋo*+"urNjP2B&J#MK&$j=xK#-Kr%/bJvi>M׉mnYSP^gAQUII#!ψ$5&3j.@-KEL#KN{Y5Y [ )؜,TF1YѧLoD5$$bPKĐ4%;3Jd$%1$*&F xbE:yX,IBSqdTROe B'6@K1uM\&zX{dzb%?-Z~Ol4KTe@]>5)Q_,񈩣WA Xok`z,ųћ-DPxi!'(ƛ96c1%3RɻZ5tR\r7̭g7 \jb{BTV!+p"M%1Oa2hIf䳹WYUR1 wߏ y+6KBzAOq=s Q/GV3H)UٻSNeb ^m Pp [RVdzJEŝFB n`vRđx4Q/PcFCLRe,h$e-N~ȠޫNvT㔠iur*hzї:QE3a8\y Yη1 '|7jHA?V&V2L%z]gcJh%s;¢2zuPiTG26kV4VcZSR3*j $JR C tf*d N'+Gԗh-2#%XJ ɦB9O)'ę8yH*]z6:dH2<,[4Wi.7w*#VT\Ye`UAcEGGq$]/jHD$7ҵQL^ \`qc2?t^A&!tF2WFiՅI-!vT^xWӏy-d*Ћ*KbdNu5U1* DE bY]?ˬi%ӆR& ּw `"?2bDsg#k#6DF16UѕҬgh޴ndjkKA~(8C*hQ0ʹ!R kN=ꤒP$Ý"֬{I) <(Q>e@=rPTu _ S"Oeu:U.{P 4gpx)gii]4^H.g?l Z(E- {Nc(rܽVXAxJ#4[==:h 0xAug#6J0d9gPqNQ Na;!DIv@IgQCցީs9A w P ,>>U45ۄ%i_D%&_gTG] ::gQqUJJkGR4уUe@Fk,Y]hʱpܛ5 XlJMa=X1K&6|f1h6MT83%c t4`Duc {ev=t0&i4(⨦!VTZ=t9!:不"BȄp ̛u."3l2`b# I0unɷ  4zS+<{1xXB( ]5 ?PNُNJjayz/RMx>9+T-8ΗQq'cKB N-u#^^{OWةܻ<\zv5o#T!{?uc=z%b$*hF* LUSݢ*^} Jcl)gF[̈́T;eMEu%. |dH#ayQn|pݛLpI|JpNgJC9iNAy(Cy0Zl f@2]9GlTtԎydL)&Ѣ~ NUJ*H"0cUD$ﴈ2hPV=FfpT^Ny~JSA?f26_;d{Ƞ޿]6ICT5@D%yKHG`F.|f[\y;$3UW&֎\(XU];[EzCv[ 1~X0ȋWCS=<' zT5ԫШv}W$JU6A;EeDѐStX%)ZPUt Dr&n"YUtzʼb|e9xVReni#;.kWe@:(`!5z=`F-$SC#xa4 Dǖ&E`KB:ΣaI <=]"&PT"svKzDífi>EUyb NUkB^ЊPvRe+$}ǁb F4tD-U}ԣ{#tdE&fH薷ݗJk z ~%e|`><(T-̊9U)bVxpB@Fcxk N>cRW'}q<cN-M#YyvB UOIg0;nMI(6#!QtͨµYUFѣ_mĢp4k#yP=bY|!ipeUҼhӑkb؅aSQ'v^BXI}7EML!V/ȣUYبZ( 6RdZjKПr(gPY/:yVG o)G=Yc$iOPGg`aBJiROaSW/"vJQVup20E';/ޡ$7Yr{9r VA݊X6vN/fv8 `FNlG$R4AjQeyJAťh4Q$$xi:D31*9I])E29!LF7MP!jQӅZHl y%3KE:S }*j&V6~o4[YeYB'cÜE7OhO_E)̧"=(g4/`:׮3pC$u< O JLDAuPWk28!GյL,926b&Q]/5AS .l& Wf4.K&zfzU!Eu(?/.0Ms%{pn&CXFvGVUeqo`"`TtmRsŶ5AM:d4`e7/&4Ȋ[L |l0))vemUY! ;iGʌeZ*7jZI3L V÷!2)&81dWQϣ=8LTi .B='I~ >\{ةpmDԃ-n3m=ZžiL$/H5PWfMYAZa"1L ,@9BnzHZ""!I *(NIQz0ޜފЬ_޼B4{Gw%Gd\\ٳ,x<\cRe2)"aÆKU pXC2S` 273ugY4J!!]gC>U iwBsZ6S<'}A'Kƥzr6xaQ(Hb] lzɯB ' E#pڦ{"_{0^ӎQ-3S{a[cK/Z:NF2)} 2BGŲ"`ދZbRA3mt7e74/jܔ6`chr`xӑɒfq<ȈdLavzՔ5yV[ylabIsy'R|ԪAܫM!h؝3ͧ:1yu[ؑQFg3hѻcmkvY"njp)J-P5g`K 9Bof& c.FbgqAU_$"?Id|ҝ= >\B k˳3M2|-/.J3V;5P#Y (uxy䘅tC]^~%8t`]R0ԾsO}S0L))tbr3le0 O~1hKzMs/2 Mԏ^Ы 6%UEYռ'(2*.pSugXx;d&SiGZĜ<##^gOcTUҦ<UdBR%=a]"Agmut}` NJEE4hY|I,zaOm!ipeW*Kz#"Vf`SM ?Wb'*Tˬ6,PZ} S'g+Q3iK@a k~tYau^i!Y2M;)'nȾ,} V[ rnVBR$y0 iR/Dاhw'wۭ XSO:>{)n3^~RQ.1eyk,U^^^֎9Q}LWfk;*E޿PAՖ(ΪrW>d{_{-K;U6zXs,#=~mճ釰tQ_ClZ=AwFeUX{ '3jL24%bɤҥ:=”P*qK#HjLNFt̛ k $}[xxMR2q+.zqiF ̈9(͒z'@ٽkt ;^)!K[mv`s%EW6EE^uB˦A)_1:Hj EL=-5" ͻAX-GS!$I(iTi)BDYI(@yiٝ)7n yg.|׍3|z鯍OT $}Rr.ٸiHV_ mԔ@jbG4HqΕܵB<ʪqP_>/lA-KBW'T7QmfF䌥]r{&o*'c: І"2LpW`ex ~EArj4ٍy2>Ej:>((ˮ^EEN{3nW%-je_i`}@({Y188^2r"DM0-N >7c@cȌ(hwvNT.D%0N5.AFW'_xpGۼb"87I?ovVUX{aUv5H+yXU6 &? {.dM;ޱ3$ddnZ!0wȒn{ӑ"ҳdjTDNǷgm]h$cW?nށ{be?Ka5gO=8Qfo\LJb:Ƚԫb#X={IizRԎU|޻"Z; DmL.(Zx58p‘z7xj%dX rx77AJ7h]*)e%~+J(p4:+ 2(*fwHb&Xo~^@¾oEDg05&=Sm(G)i05vbPG76'!;fd.vfzݛq#*su$"ؼZfPQX,j`^EU"M2zŃf=̨4ba 4|w&/ W[ύQ$mmV Zaf vVc:mF]jjbmW}D{K/TjřX /8kG%2TDBŧGX]%IA Dv5]XUH@!F"Gw맩)QN^1ιo,P3ջWr7 mja,(3;c{\j='D,"B[P fggpIBeE'N51  ׋c 9u a4bW=&ȴHNSc "555Hi3-ٯVU+t{3Vižb;,vSm:ғ\5h~-/|!{aCl*Hn3b!B(n~zafCjXbLX$Ƭ/( ppcAE2wqϩ EzS@׃ɬi>ȯ0߻h T2\$,L;e~F5 _/̻Uj"҆=RK~h:`-<Ɣ$ŦNӈs@la5I%d^ BN^\\W"LҲR,eŃMA.Ij@LqV?hu~򊦡eP*m mTXmMޙLVuRMP&G;j*BP CJQ2 B$SE)/v(Lj]Ξ:+Se-I VR<T 0&qV{qw%ԞT@UP7O9F _5yش轚nFi쩼4uc3s,M)ZՅEl9,E#4WۚGg٬j^Ai^mX2irJHj?]anJ7Yb%A,1g;$$2(j,bVejưl>譑t P}w&vPrG* $l\E_U.)yxB쬓1dofۢpiWZ-SIX:XE:%&OTU4 X9VΌJ1P JI@n'lGQ +_)<5]*9}t<VWN/9AXfE~KݨDL C>^id)lGL lG)qgBPBXX-xSk+).@D%#==7K&UZNoʥ@^2[Xic5kUIb|1{QZT bĸe"m"K<խ*c*uhPusJ6L`OFբ S(֢fHHfŖ񪺽!/Ӿ)JC.~ #JZ<097}"Ta%|"ot~]bPЦRV0gW&o)l0x#LuMIٴzl#R|`nEfPQ)p7{|ph*'xV4pkC:ܥj5tt+& Eax3`塳Q  0@x<[ղ^QPygL;MZ:1w& &x3-f| ,Fr>| {ӕttRyVW˲xqWZq}`Nݫ\v4/S/a&`ds@5ѝ "Q ';TJ.q!@z ({ Y(;>`j{ByV솁3Zè0y 7RK̞3F˛8\ꙊxqʧaSA0T FS1ܛL;3t8 !9ŶɃ$EOYY&OxFPqNR~YH4e8p*@U#i]J*GE6i/$B$*vnT*5S`S}Y)CPII9&MJ 89K1E܈2mȍo֩KPN#,@Dv 1͵gâ++A NUDfIK7,6 6vAƲ{qݟGoϥE,9QgƘk^D `}1?5yMPvB FTX UCY]Z;i=ڜB5G-,r٩z{rV KWs^-<{S{i,IYu զFnbVB= -voLٝ"ue8UxQdc)O'c'0IŎ:--{&왴3;i~.=2wڞhpJ`ɖlH粦M+3dy`4 \0?+3DXk5=(?j7cɻޭgŴL:"`:n O7 !TɄqe D}z&z=4%I5zt"JΠc\̃*;]5ݸ`6?Qir49۵;Z91;CxOawC ,/ ;Rm:V"5Kz]-4+ة5CVIA: :vWp] 7Uӫ<5oӉry,7ߘ?-+#>}S+JBn柚3U~ "9.FM9[[2Mo ;c ^h6 FE);L16mZea2mJ9ߖfVxzEU!3TnqX|4Wh)S-TDF:MpR5eSH"Ȥ5L&kz3r\WCc/̡OʔH >@()0E:](z(C|E@$~@Yq F _^5}qHd)Yh,,"+ ?a|WaҬһww: J5#oM]'\K#>FZJXNh;@d.`A1Nq'Ž+V/Mޓ(BXufSG0 ]0pP.f B~-_<ә{T!*?F^v¦JݽKxzMe.uBՆH$(V1Ļ!Sqwar[ItThL+o<ӻ:CWI;beqޡ0.l] Ҿe14$m;ϜJWah+'bQbadfCeZf}~keY?OtL5JhM1d>3.L#d6qXAfc0bN) ͏]:h E96}=$Zqn6)pq.I|n`~0MzUdm3DAz)#ēBXvѪZ?xdq{ԀC?YF 0 ‚{9i6AN3& kB9g&8ycdS'6ʒ[j!LZDypup2|V4VGD+se3f 9QGILZ%{,+nw s>ܲFВlC.)DgHzwsC>;R}yu<.ȉF+dvG^>^zsX{`d[M&Q<8~vqN4-c T񵚗[=pEj\qnI:l-{rjHǴ欃a*!,W'j`ҝE."M3 aܺ{?|q%hD0 s.Fp)?p"䟭5 ֎N].-TrMKyt_޺y8[ǂnf   wk]Ur}#Hj w&GB{ɨ%SqfN2#X>E+*6 ߞ{s.3KZ &!|ʔ۟Zf<~ɡl9O {msVIftpM钙4:@< 1 vHVr^T6;T2@m5LUhTsy4> 7>/Y~!^ߟ-l3Du=/~WEc&D0O !l<&^M=+c+>z54AA(}ȂjW!G4Z*nS` q_xQd,c?>a$$s3WR7U!$37n\N~ 4՚-w:V 44cUi.(A9Sw*\as67;y_!c~RH ŕ_sPb8dN^TanQͰ8gU*YׄC&rwN60;O蘙=Қh%9Oe:db2dS!eOc{&JU~|!Oa$հgpЀdke#CTr'qkaʘAV;:2qx R/U ]nyT៏i Û(T7p%C ,8{ҚѠ\2Seɋ)biAh?8+;CZIG5 hRZ;/б0gjk\˦}CNh+/cRgovԮ+Qro5^BE1E (\ZY(hr?az+:{1i7b7H`K(Arz@pJz}9TbQ[sϐLDZ 5&K)kC66ue7\j~nw [Zwތ{6D;LK,˘I'g\L2+fy?PcKvMgQ<ŦVff J,0)x3T{yyFl<$%~[ /bF7ܑg۩%|VO#B?O;ڬi$Züy0.*la ::#JM$TltSa :>tmv4LzxNJ{1$13s.9˵S`6VA+LU=\  `zO{νp)x!5f')SH7azE>rC6`[(Ri;e/wƷ1/NF~(!pb߿'tG0h=g"+ V(HBa1JcIm9_|-L~%[fJ&He`Au3>]45 M>c9u`1)J\Ӣ$=bj)A~GEyR:<^ty@6.I׍GLgj5ଊeѲubX]c:vȯGM §3u aKW!1B들^ϸ[X诒DT t=pVB=D+w'_gP]X-BKLe"qGwЈ},{4SV1ixkMd7V_(aH)'A\S[WYC]ʨTDkk8DP5Wc!lDm=ܞ Sy Xb\]xQF2sV=Zݸ&m&>^ha?(FA'&šX< v-ZeB H?oɹm^к}:0 R]2Ųl)Tu}M LC$sW]F55GXG r5+=<,L].6t=MQ'XE|Y}6UL<(vM8bJwxT*=,Rm0 M!y-@D TA-<\1 %2z՘!Z8 ʰdeJ#r)~&X9T9Хu2r8 |IռqM)>aMMt;Mx;S>Թ|l -Mg+- \ɘߪ| e+EkӴ! -xz-ed.O/ejjػ,)N&oK P޴Q rEn8@aڹ൤FHU-rr+mf.I/ "!_Y~zdPJl4yeT$a`^f"8韭Wm  n13}qK 0W;ۑoWC%H0mФV. IDp($7uz"?,M$}ؔRNs'Zl(M߃b+wo7vpnCq#6*} ŃM4> :Hџ0`DDVO!zHdf&AMAjvbuѯ]JVxTVxa.ոeRa)s6xk d8߻Z|+tyy32,!(0Y 4T {d{#q0rp'# CkOT;bmiqt/Żu7[YOhk`wpǭl=YۨV~`akP ZwuinD-ʂ -^&Y%%̇S]P* sk7dH b^K&jUFFaw-OS=$6~4_KK/`2r۹|Bjy;ܐ'0tD}7J:[:|m~ҁU4sbU_,?:,fL:0l]z\r 7a) te%*\F^jWЄvȭPoke>53`) \9yM>*&77g.xx@7u*VeQA!bLs~@-AD͋Q0;w{z`9oLI1a7ũ&IETj{,Uv2Lx>uatՔS@H\@* .c-$XB>֒%ϵ*2{B>a9ٙdLAejIo1vI!ٰM8a4d(CkW4ٟɄV DUE(=WSzw> p=A  kjOiIWBfJvERij0 /3!"E>.䄉 |֒lslL fe>Dq643-Yߚv:F`?xfOe>87FciXQ;EazY`Uw6h]`GD1ucA# u<.Yz51 uDǩ&lW^\ςI,ڃStPJ^G[nX˭=S-37Ofs3nUq^S4>>e&^#rQ؄pѧ O"@:nLƽg\CHPz`xkrju:jͷn]sKvKc^C׹L3Ct٤W]{7lY vmkqYyJi*kݣjw؁ ;ՉHE 'Olnm+}*nҟjF5DYK79HBjOMtg]WӣfyiԤ4Po f7}SSz/<νbS7s%r X(+ZRݔ{ƿS= _"hY&3wFIϨQ1u89Y] Х}gR:IYM f^eY8:^)euv~n 9u1?cEo8baӸ$@ixL ת] ib&0ZوٮEͱ"X肅ekODtݓ(-s|x%w~c\F;tr:c4bр^F,|{0Sjg{XU!֔{sv:-])F-rŀ@wጴ L. Hin.K/\ +7D`+kBТjԣvtkb B l "6OTe𿠃VŪ]j [ K)P/WEz'zZv7kHN'/攩K6,qG@n/xΎ'~Zڛ= 8&x{wܴQϛvVωcq%U/cW`cO [JKö$e#O'Y= axЫ1=s$w'#y*Ԕ^wᐪFf+K tq./غi/$ ×ipjaZFy3&W|z?nNVF'&5گVoBt6=_©&F&u-j#)@:Kϧ@8.?Iqu1>'<}HUQb36cDH&.V7@Xm c]G0$& mZȗ ]0Ѝlئ=]H+K:ax ,leeyҖ6ibzIH |5zAs' NÁ[̴Ee F,D&Szӏku߭)pm nˠn_"QǶs}cG`yODvX"mꅓeJbk7 t %޴6O6?,fWpeP\DM-3Ax 0o]It|Řө*x2\R!lIS' -Lij=C{/M"Sq:BR%{Oj׺s/ mҐ qRemZ?A} 3 ~^x1[~ջV2] eg ;>|WM3'/]lLL/lU.RO[*g4{nׄ3TqF9˞zؐ6FTQˣ  1HyP!֕?g ?-2dxaaA9g˨}TlMi?eJOM*}ބb z 4G:/4q%4آkѳI f+c9|Dy%tEÁ2#j:xkI}/*ďSeˊ檭̘˒2{e;]0,8懭ʣQ~ugTO>#M$=P;jQ&UݞHR4$vuz$ |& yԜ !.u[\&jׯGCf~~H{i!sR@#~$Fh@(sB cZc(͊3ԹJx4W$ s"㐭zKۦxѐA49=-(RHp #G#z@eY[!xao\`Y\-iu 5s(J?ߡ( t{.㋞&S$T>SN:^kZ4tXjy}\Lp32ep~NCN(PḰk;g*Y@J=fOMp {MNJ{(`k<5Ow\q 8֡{3UD։4,k|,y=' 35s/Cm^0'#K!6 FS5ދa{5B^EGED]O#wX?mDLc2obfjIJI:IX^j%4kMP|;k|71Ofܥ z'cHgJt_m\ -+tJU'ѓ@ 兊e~9xQHB)sHWJ;X% y+պh~݆I[+\ˉn8 J8b2q|.[+5q@6yo .B5 -jbMc Óbsڦn?½r^.qb]TZ%*6qfS[6HgKh, 1ՓؓаOI ݍmiuE J5SGCC ,7@0oN#8mrfNzW;aDn>+W8#978CMؒrÞ_TgdTuGN=F7rBz/_zkM1)xMw(h.kJ6Z xLێ#36U'[~Х\@u }> OKnI?;i}-j} >žoc k?%Y򎛑kHxke#;9A& ]4a%\PfTTFJ"=2,oD cTxX1,r8܍Lp"ت梅S YKx?ľ` *v-h>忦OLfȤӘWݯ/'f/KH͝yU)$=9WL&dҗH+>Tx4tyZb%=wZʴCX&9kqEtȭۗLʂȆL/e R5R;{RHFPhU{R@/v"Aja Ia^-)0w.3caܟ [N17wUW ifu[ г&}zZэ㞩!x-ւsD=J[ w'>HLz6:D2C/=*G~ΕQ,VƇPJb'vxu;LI1b=ZdC*`PWcVox=ՇS{N;) ~[9n~k=-R1h8$'0צɊ~LO*?e22=ΠwBnwI0TE`|Eڜb#TvCN}`2v> ؂̹-z[@Wة+gCAwHu_t t}o4ؿ [N.ǚr\7G) LC\/M03RU+N9'>AD8W& C^Yȭ oZ%҂]\*ȌQ0\Sc<9AIаpJr4pdXIn'*5[T(,'o8bI{T>Taz>{ˍĥgM ]llfQCP63MT."B/&?c'Cp1%G伭Rb ]-i&S{/Xu >܄*w/pnϑ9'%Ɍ5:a:kIAgܬw "y[?ȼo*S۾^Y+ =7C s$ Zʗp<kU6@q?ڑe(2. j [NɬM 4L RvWTu~e:є"n1#xg ni>C9J*~:V82G@5D׳8rs1NʢhL9HK1wi};a6H%"ʌV栶-䍡4 qXEV=#iI4C12Kzx]d^Ż)R@ `Upo7md5H˾U[-= hv osP/xp,6SЯ!:m]P46?Ao*ra۹zh[DĦ޹3?f[%χL_VSLo.z%#b3k_.~?~C_0c{Uwjo )fI R"<5GNw ~f\  yCeܱLq1Ywq3|MN wsp諝?Ï }0sP}@zAs0'2㩯 &+H(gA2BLAc!U< [. w+IN{^e]Mh2BOW'40ny0TKW2ylAtu|D>X˘JOۼo)[s'}ujS)EJpnmd]u3ϰ>=$LԚވ!z)SkpDnoxYwMVh7P*_Y=>z ĶM)HBG+ WR)+7V̛`~HS$jAn0&WdT3>w!BضJnx.aDp,f;,)Y&c=puLM\ӁtHPC外}cqV`=(6stlTEauNPSNױ=6݁NBx*6:q7!!;KK$́>@ S`9T\CO2=ͤcb^`fbm?_x#E.VG`fTu/|%KF;yPk'Y@fz2*!YuʮiYU27NUFm hX$oh. Y <'M0%.hQ̊%XF:w^lkjGJg0I<9kK?*s %5Ռe̸WψyL;u|䵁t*pw\k.!Sx6DaO SC~aE2Kl|hʼP>9`J&M_taL\ Ǿ$RKQ\\Y°mC'҅_s4"e$zEC6'n.ewnj2txb ?vLܯu؄t̊eT E8 mK "l 2ڜqT1t=:dI/?jGEŝ3vW!Wsq5̖H9~5=Z G=-~lϟV6`5t je 7oQ~cV_sbȔASxt«j[&D>#}&7f>J\g8=u͙0nJOM5D?]D"!,pJ3kz3 7H#94o|J/`-*Yb'(4'߅&EC<[i~8(Ti؍}G`;ډQQKڻMA غ, x B;VY̪خWgh)rz-n8gz굌ҙ=)#,^M6lǔǾb7C ַ'4#VMfμ[WNtDA70xmCbnT6l:E91բ Sf]@:)$f\ |V6%:iǟER!%̉N@c嚨Ͳ +x V.?p?^_՚w} 7>񱌱5a;Zz7#k"7wG^ v 㓹Li`a_nɅâX[k)o0qݏi[˜,Q1+ \*uƧ੢J?W t1?_''sZ^r"g%HIHwGjsRYL1sM.&92tI+#N(EE)cĘRfSnum-&w*#Ya)o'[3idi}c/c:Oh^RV[PO;4a ۘQ8"1^h,nqtG %٫cuq軥LMI3@JAڱvJiIK|/Na8ZXPfMFC#.}xJQTަS TGkxcn_7}G..5(M9~$@6I&y{~u/pK2;9!cl2FR*$uuQx XdXop u"2^y01ԯ;ϗHۡpF̤P^Qg3\8nP']5ZO[MfOاmAQ9. *ź}f= Vٮ@_1o"sb4i;q@S۶0 [ *H1HU&w @zUT&ҋT)R& t)o}y|nݒ5לc9s| ak'wJ h\tnB{s&[I^}:kKr4]6|r/=cUw^IHdbWƏG7ϘhtG*qn#yv\|D墍7<*/A*ߺfR3{Mm[^e^*1GׅGSD7+Ͻݍ@4Al\=_Dyh\eϠcyʣK^0\p"#`WH03ηlM:zcB?>%s*)C#zK#y 쫛"Vv@KǐU܁WW[jDŨN>kهqugsoć#mB%M}c:ùJAם:>23v[*e$>O>Oa ?+ޟ 9o%w<)^_SjFځDn 77OVj5}1|Qѽ/@QUl&SLĢ }'#σn/1\5 锼CXGZDc(|NW4;_K?G,!?B7H2Ovugm't}Rvmo U4d$ۙsDhvKEŏgnպ8wmXKstjGk\ 9ԃ}} ;f}섡w[zz92s=;E,#ZK8/+nO˷^[8rļL؀colc1;G,(C ?tl :~ʋNnTo>D3-{$PE G>)HrL.m{ʝ\巩JN !vX+cnqcDI^?wTc[%#n=o|ZO9к}>5uW^ 7I=Ik|V.&Ze:o8pU^; Ew։?^L>R~)8~׭ʅ৯MYrtEF۩ ІeJø(0l{hc.=i.5 v{<&z}4ToPŗq:o_a8|x=e=ί+z~/޽}v<|ٛZeJI~TYh28a!qKЭ55<. $v2Pj٧*:>m CAšQOD8~yrys[õ?^m@>~>fNxCIOw̿4k^`<6jkYt~ Kfp3G]µq2Xrc)ntX^)>4THގ[zQJMo;1 YV85Qέsa9)8Eצ|%]\GrF@WgIJIsN}O#KHz78~+OB2$V7}|u/~rҜB]EF'9ӂ?ȜԬ2d};Ol}OÁ’[ %K5KWE(V MWb^דd(x])Òfd FO.U4:tr.ȯЙ`orãXG-]d\^l/_G|U$5X#EV 8|BŨ<0ɺ7nqr{ g &ZZTKgc)Ӂ5m֊ZN%.&9x@M[7NG:N*D\tjy+z#50Ϸ1r_uOzK)4݋mOPٯ} *V:Xr!6&/o<ɺt=NGO%b}o_[5gޥ Er&݅TǭKw-O;}p߭n$ksnYe+umJ)~tb$޸Fܼ5E%5ٯ{ފƻ~)KfF{ISKo^0}4WL=cv4;OW7̊桤Lq|Dܭ16Cy03':r>F];:4m3z&CN'Z[ׅ{=E,=[;ti g:yv]A5t$7SMJ< np׶NKxP. W$草 q)Ks|)mR~OfD{NHswU b }pLȲcOshS.Z]^goTg{TwtE 5qmӅ"(2U/<zzaʎ̑Bi^+d*/LZ:"jxn7/^6Fp)$%LzsG?Slw$~<}Mv8Bߍ,޺|O1c{5KRgǢ>*=_W0O5c f'" ͪ}L`EGO>kH=qu26[{wXPL8qxLWs,ygiOD>}?#@}MI5V0kxbLD.4Oͦ?<[IFX yC^|S[MQ}. ܣ՜#R|;tJE8v(r)uq-;R. e1s?ܱ6d"o=F}E!uZ٠"ץ@4wIK[K" vp|"K)Iw|ףf2gR"w1GK{?m~,BSs'difr!VسlcWU-((] ebo~؜RpBT78roGKL4 qJBco?N]!ipi`m¢*D\M^aH=Shg1îbǻÚ]e8N9[G{u>15շH ~gL#w7/=>3K=b<5$'=4~}u]A>x{Ks'K?=zjEqʷdv(rk؟YIOZpFt~4eMu7{\*䋶(,~w'Xaf3Hiɦi΋ \;8].4ΧiE41{U(&َcXlrnʒG4C"Vn%&Χ:ak+ ]4`G_4~|SNR , =]{C`zq 3kGI?0W,B;Q"[;mg}D:.&E}0Aɇqyk Ug Um2ӻ+ O31yrV*c/L݁вkj®QҪ%Ş=d jiw1>XPB?MAS] iƼVjt&\tpuƸnw*ύ54οCGQ CwX?%RȉFgq9ﱪq= jKo`h%f=5jI֯K]]=JlU$xu#ItS"WJOT^{Ur34_5 9SeY~oCL6J oNxz8"M1m^/bD ̶;ԟұim/e(9WkУZYso֍$qsflnٲz >}>Chm5EfVqo>$D}1pC܂jOI>Afvs2@4:p5+-UcKsT3~hu4 ARFĂo׽=uCIT\^ءmʫ}D}UJ&Z|7*/?o,m ;h2]ۂ֌ؚz^ʐ`]kyn9} C\RZ^)PH4}A楊+4Qjί7u#5=IT]dܦ1#iE(Yv7MP];}@gKr#_2pU8q^DtGPSkY.;q8;yZHEU%Ajؑs>nw4}gu0Hδ9ɩY59Ǥd[sa/`E[h[="3$nM5|̖/P¾ܓ*'K+SK8Eoh`ģFHMNZ]{7ZY7Y+n1|,yo< c%mξ쬉N}ՙ< ďeI:\B@o{$,J?KehJqOH]2=DwayHCle=* vdVV xOƄި2{~ynԜ+f?O 7cC2FGco;;h;eWݦ~V)?-<~˗'}?,V^Ԓ%q=:dM?\dl@n,Gs4Vk8.v%KqJ}{{+Ĝ69L uY;\WfYwV_鮙x&QN8-ӣ DVCvxq2՗M)h}2HwJ՗q!r2oꙥz.Z3&;1ہ0~8V7ZྣY5aoMuTb`KQR :OoE+볏%A̤pOfUpQƧUY`))hGv3vt=eLNlׯF" =2d;26sf~ih&I:wx]j6cWOwîRKuKQ> IB:0Ͻʉ)A.^:״(0a7:&NG?^GpTF|9P]ĦzDS!3\`+4@gyL,Gcj燏bSךDMZG_#wͤu_%b\bT܋G4{{ѳ &EJt9qfԧra:4֯}3t Uҙٵkr]b}rzҁ ]1~g,WO=RdI }D!e&uYa(] h#f޶Ewo;15,;Ffmg SNyLģWRG3u' V8#iNrr4>rewՀd(ю;3:'Uހ讹/dFp,gN3Sj>CYDx|u|9ʜ}ɝMe9o}W61[ :3Fͼl|<'Q|O5dsF,<3{5\Dɬ0|\R0eFp>a|оd4f='u DZi ٞr[f;R8^VR8k:T0(*Zw;#:i~-Έ@]<>&yhIQA!#3 s/ 2|>fk.{2+g.ϒ ط–uHϝx_i;˺RH*PV!^(∓$tnr]I8x{궍3S1U}ʶŵ=J^ګѮAL*w0ƨBk؅u#\+:?ck+vE*: 8YP@d2,If>kDMs~,6V/MO7"~0g 2Zl4LȊ'cF!۝uҒ-[Z5 ]w/Xߤיe)8=puH,=U :_O{Iߗr4.:#\ W$`/ ="+ۀ^~4|SGZb߱ČN$-*tI'nj$&ϴ|I"QSay:9}6o-Mv_XܹBM2~ODx{ZW(> Xr)$3*x瀉ڢٛI4h2 N!njL#JeQ\ܭ2v;(XEvl5e/4s3%\x+gMhÍ^7<(;E +~i\z>uzr13sDGI”cm,7[߾`0s8I%M.|*vK;<)ϗ/޺qhj̽ ]6B_YR#}G]'/YP<,}6SEз'xf{zL]O$xk{%MK,SWŗ.˛s ՑN.߯= f i;~?W$Zs+c醙{\O1VZ:s*Wb1O{1YnWj>Z#fX(&2U94FdK9ggEDmVEW6,#2?"ʕc3L" y}֞t͂ecz4H{nX̏ b:LwdI0Fw"nǻ/^ߩPOˮ_r$,f&NaW.|*&W{ú)kXdEFEɛE"Fþ?t|oy̐Je4ro͆j޶ #X}#zU6贮/{3{$BcD/ ?>F?sא8UWkm.MDr[xLW!+QW ޯ'v|$8.G Q9 F쨩|OJƃKmRK&]aGېGgy2lSȌ-m2B[Uaٜ#Ov`?"XlDwO/ƮD[,^S)MdӫZ}7?Epv%q_ŒOG,IԿDf(zPxÞ`c:'OG%K<RqPSoҺ/!f,w|o)y3efi7'?w9'dS1'/-[fBYyG]52\~-,us"Gass/{KF(˘D^vfreNwvGqo/% Av-[G./]Dj]r~tw_|.IBV#Gԡ2|R3սCjk*{g7hrܴﰣi,͍gV};_C=${\ƹFAzJXtfvh?qn/+'WOՍejC,~3 +bYL0qE7;A."+t{_k-R5cA\`vWfcǸRYͣG#k;m}Z`0y^#-Oa5uiDtS}x)b_U*;Q[ut۱04Ky)&%!PB6~DgՊ L91wȰcWdoz٠&"|EA #E?qTvrFE#?A>yy@l̹ *=>~pH;Cgc:ֆS ov^Jq({"lZ9y*4s߿A{ށhf^[]DlUYnWI%f—kVjgiJnՙYm}a'_ {LT=cM]SnB$~{OgC]E:k1t෺:H9v}U0U|%ؔ,ନ?iUj\J=F^TxܲbHheF>jo&N_u>\r_`pUnYSREWKZblԂ^Ǻ$W\ѿ~;ѷŠWS|e߯.~v|{qxiNy-qhʎ%aO Ǔ6-Fռ>8GゟvK- ?n,N垥/$.3`HkPx'ou}3e>7(Ƞ}YoCyARQ BsR*7)qd-T,O06et97MjcOd)o̽}1g4-tkb+kcr%##bEny yj4|4 t X\//x}Zni;{EwhE&~~n{/_&La8EPtzB%˺z¢_ʫCP[O4|p}(];xvG6 OgfBG`m۱aА9sv,6(yϬUJiIQ$9vktJ$F[{N^:*eKթܡ4@;RHrj{B d$Js(7"*rU[_y*<ǘSK6Tɲ:flÐ^MpS}P礸WS\p( ^%bh r0K{o(e_Dy wg!JTarQ*2s/0L+}㏪|AV+>JKkaJ9;V{e+(ĺuJdvP_ t&•e;|8f1w)lu%v6!t:NݭAN=5M%qrJhUuR :^CGiQ%MyLE̡wԧ:3J2lO睉TEUܳ0QPna&𭜼;DOp츺+pN)r$f"E&f\iԣO+u?5"|ؼ@{wm)Tn }^\hW f{\/y{St9y~wGzu)dpi-2ѵZv$ U}nl&%׼*UjMxh,)鋰>+l{Ǻ^jo*)}6+\׵xbNzjVdAo;Q) ^xPN5qYjS|#Ք|XixXKz5v3R920{n dI+ybrwi@!9+|`?yU9(%ʇbtgxoqzڮW2 VoءiŸ}H֮6,;_qTt/AnFc$\fL on)'xΰ*^+ʜx%z.Q!(Y^Ҁ#&ͱ#'aMEb"pnԠje| {Fb*-xި'N:v!,R晛)R&MsfYj5:SsTe&&ٻc'34S  z 6GUiϞ\+՜zƴ֍T_?[9'WϢwϰ|(g [ !.YY'@cvH0BKY-gT]SDd~t9QCU]&W5Gns^hTڍIP{4֯GobJT|e}jf[Z;~H-0{">AmGKO)ռ/(ݵ[S˸^!ל nxj ;[|"0X)=NOo0/?Wpv^W]K5LWi8wdPkvjv^x,֫of7TAߡ+7$hu𕖨H|9gxH H^dB"ȏ*IsXO< 4W!m`1;@:^=yniK+Cͺgz<2LZ+cf'O~fL[GrjtSL~|b״`롎 ;[>}s/t88?P^n^Y¼dQg{fwI xh}RF{4iߎaZ.2P^SL|FsڈoA=80ٷDuqA |VG[ph*ʸRnq\ʼnœ9_3إ[26կ :|TRAg9ARNw_$F95svcH?Z Nk"e  wbE䴼\Ϸղ-}qÐBXgIǸd'v+(1n|JmB#\M m@qdHuzÝ_J sQAZ/2f2AAL柯PQ=cY@2i#i%ڕo:ʸ=R)p$'at'2QD? ,Y$8Q9޾oq0Cd }k~V"冷'yوzcrG.b˒,҉tzݎg.kMRZ t d/2~48oE{9JC9 ů; %d_4Rk -W;r(9Ȅz$oMrX?OiqnS4%4⊹r{߳bsuTk*Gм},zp05㊛Gg~hS/N0Q9D[M~Kqfm v#Fvy9?6ߧ3*pf  [? [ zi@ #uMrM9e/`4"gfB**k{@d_e 2P23EG nĭGEĕg{z&=Ǚ1۽w QT_:+Pd#C/>^!&񉠻ί4\h(Lg=׫A進 ݩE0^E+n;N|Q ;']j: Hvm/`1U-}Fc8U4ALyˀ`" dw;ZC 8)=_]@7W\3w^v>ui<>Ҵ99%^VPMNiOwޤp-;Ds{GV*+NU>?ibW;SX_^4;*o̝˰$d"hⓋ=Y\5^i ^0PX("M}M+xޔ3rcg 0wß>XzrHG:Hy_jسimͪ.V7SISLPIkVY,S>KQXtI#!ks%asD>(t;M,ö|Z,oƟKvېǵ~Ċr>EX(./@ rl$B},Ct2ͭOI|:"u#$7A շ. $ t('O5١VdCy%rIFW2ʃUi6۱wUoZs6Ym oD7MQN[$e'PԄ?u6lWE ծz5 (McxGjwSOg#%'+F+f^nGvpB`୶(zv[^_9Bq=T)Lݏ'۱͈s?jM.DF wU~%k^.yN-%Ed>Ekڀqm `Y3w]%ȮE\x"~p]/}㬤'bzt=ei /9]6bI[.#9C:jf 3,1>P%O='+/ΝtψOQπV͜}38wɸTF[ic^9feEg 47WHrod`!аY4ʊ&T/H /x FE ;9֤5/#g.,}~ܚ ~T[3Zs5lrvg {|ҹ{WلkDl+և񧞋+K?"):.<#4 =`Ө&qE_.ׯˊ,_0MO;Ey_j} n:ldteUQJ>MфRYӎ0 dXcYd~&$fY1ըd[}n 3Mߏsz¤9Ҕ!z%.f{xK3R4g=]#Saq1/1]i9ԪvD8Gkjt3%V!Xv++:*PĈ҂ tww \cѶRԩ(M08Е^/ʱJ]>3ihe˃张WʱGF7 ?ߕO?F)0*8a#2˚q(Yg{aEլ{Xh1 pFY=zJfU֝OsTX&]e*L5*8~ w )HU 7|\sftip*'Z0 >9ǥ W c_&>"OɛeVj&ຉ}L 9+mrt)Vry^99Cj RzbI=.[c;4r-,<'~7 JW3fM0d2Q ӳܪTtfҥAWw(OmW}d j3ٖEQ!Wd{ۨ&D^-yeGnFѷ1^S9f+MJI 84gϽʐ?2ɕu*ŷ{ UݽkU;5﯎4{d_ ?PeNRc!9-њN]Ogt'0UyTnd1e49[s]I;e7E ŵ zJY EsD: DXE=ɎLۗKw%~pFKsYgLkߍ0w !{KEWi C^4%ƇZ՝d})K32O SMn=G FyDLn|(ҞAƞ,֖cihSeJb|չY3}> bޏ5c g\^;{/~S;})>=U7:Ƒh%*(qU?QS_-xV>#dtMCG`wluӯ,U/1j*$޸U'&c'!/x#]@7N)? & s\ =hCP, sgm$|jAR=-xwgNO_K?v\vRWC:`u}9%f%WRR)Ζκ`N!lmp'6W Փ{ ]Ǭ&WmMEgB/ȓx<%gQx΋V‰RǸP+^$\"')#\r&.4yu, ԥ, %v*k;C*yIzQD\{j";|뎰 } 7DV%=`֘rr*[hp<܁UCy?R'GQwRX|bwr 9vlxScvꥧҵcCK } mD|32)O(x : ڧRFlԩ_圲6~6Xig"JXEu6QS_&P=" bΏо°Mqi`r ghm)Ͻh*yMl*9G`(}JUIyS)18M-պ{0f{Zts 2?응.[GQRϒK*rtϝA$J[|B޷IZr@V@/*]2BI(1^e'PϫC`GNIg{N~@hܱ/L(t2IEKi{K񓻍Gʖ[EC1$rݡ<Izn8{FnD45#/S0HzeĒ\N~ŷ$?lsIyU)m6p@Mec./iwU!9(y!l?[;GU].↑I>CbdrڬN "+^8${uƛqZ)8;'=ӜB`'^ 'gtjXGbY w*křU6զ3 秾AV,BѰ5LjVڂ"dRN:ԷFfc}#>>`+y[o~v<"Pf&9~һ:H^F ]YX:;~GMRܐp{Œ2RldTI팕`ۗz&r;]{y]2a:K%4=+2Ӵa {Cv3Cߕ8 Դޗu_1>qC(& O1bъ7m.얞Cy?#rwB-V5 yG2D՘#:\@u|X"F1_:|̬2tJ5:tKWȂ4vKj ;)ϤHz=@٦[vو%|2u]{wc§W\Kl!Ry˼\p@`{=T Cآs~ r567S_W[bӹxd/5 0ʢc(QiZe4"TcJ}o9SmĔKx*aOϢTP*,j/ŚoרU9ϛ;ž侜4r҇H4gծVQiĶҋO$w_JREN=0xQ51qݴwI؅i*bBy8wZhOࡏO_7iʕzsuⲆ}9ۦ_ 2xӏ"ȅ9&Qg$Y]4F/~ },CX<J Wk>)ѩì熬iV4E\,MdI:=NޔmU$#?QP}wOsCTI9,Y{9"'X?1< ։hԙ̝mt+'J<_~B7Y&{V,`وcN"|0 CƷהDե;c Kg~CX-.s?ثVugXTSdٖ'+ק _/XwW-,*[vsQW /VQ15_N}1:d+:I[)՚qy5_G9:?!:rի"57bx/2rL@Oˋni̴?K~j $5x6Tźm>ڰsaq ĩ~Kԏ=Y /YhkqYt'ez8de#ꤿZ߃שE5# ɳ E Kӳ;Җ~ .$O}\^N4r__n)\x9m>\v@%ճ=r 6}m*k]Z}DkV.Ne7s}h5'AŢ|}nN2>I 1(vrmgPZ5-IgV=D$50}dݬ/͓(YNJH@҇Y"uxΘ;;|n{/\JZҦ8:lFt+O>G+k-jI,sQ)cnΟg1趎^w~B/釯~u 7 NQbSOSۼ}brݹDڏ3|:;|׏ fI3n\XX0 YuY2ulncZiM:d:Tkߍa;_'0Zf yQ,U糸_5.MǼ^ n#kbߟ_tZ7SM>i4!/jRf/e}hQHE]QxBc[⭯f_w4~*I'mmaϫQ)gťB }HVf]cJYR)a>P="`_0\5.#R).+hV6oYgq1ZHS]OBzd%+$I3al)Sւ׉_?ͽQ@Pa7Qo=lv[3=B&hx}bm{c^_=,joצL4G? h0IϱiG}0?BJ5UN~H:2_d9ͽ]:<;ӧ39GPV<=y[cWL^R~z:pKdJ7[H-۰qLn}^y!p2|euWچX_>/B#U%}L֭@}3zHRsM)kx FWC#hNx!Kͫy+=CVޮJ~O -;:P(06 {G`_Ic-3^, ,@͸uW/$q"ȇ{ Ϡzjߐ}f~0GOnjzq`V.*SWSkUU{f"(yڅF^}|oJ2QՊO9r,0kѽ46#93O 0~wC&נJ|bF'{&q#!߮{|DZ-wK񍤞\vaPS{]!;:-O_c)SˁebAq!Z+Z+NʥK5$H_M%XҴŦ(% I߯f}JEpԓ~. ۲#̽g99鈅HPtO3'GoxRf3Ey֬fp•ὃCR.t\RDfHѬ؅٢‘[nFv1?Fq- GϼpcrxaGΓ|VQ&U9_X2~(WQVW^pnrrD[Ӽᰭjs.37zӐ!s/z')k>LZK\+#D/q?*WoY)3zNm›rE']-M j>W6 CImWr5K)mdSyDZg~W8+ٶL}RȄrbFey|Oz4ch~%n̺$qǘO RDpKy zbB}gZUˌw.'VtbZF  lX?$&&+*_$ "&*(&,(&B;`"10gWߎW/xѶ5 }iEEaaNFxz!#nY`v(78BÀރ10%0(i]HWd%? Ǹ$p/W,LZf.s;",q7a(r "ؙ(CsE%ah7&u9 xü<~pz!]! x !wͥl]'Үp,b`,Hw@ajJz,O;br=Kps*:Jz,p Rgr .; ! \Cca^vTnp5ƍ wBpCcq߭]?bI Ir@ D;Z~ZP.^pü1HGw=45"0% 3pC#5V8!\];j.'Wu/|~8iD~Ç =6[O榞7SRQU5lN9~V-nJ C!ܱMr9>X'80@a>Zv:|P^h-f]]Qv0PVnt0KWe7~yTt۟B8;r6/LEzR tu0HQvh.Bsgt \xBR LdBYh,_ MW0/ 0`Ђ;‘Ig4@<[@`‚ p( HnzaH&`@~fmhnm7 i#kv1o @;]C8lpzk%}9%k 3J 0~_wULpwh9y G rg`p¾逴<@&Y ͱ8iV\M#٩4nM v8-Hnr P^؟eo@Q:Rt'5㟦| .tEQ;@,#ސ{bPa00(]BP>fmuA!('5'(D/։=VB8aD0h> ^nnpLЁ>+t; A]˱AvЙh"|Zp7#7BPGpE1r4CYFt\ip+n9a||,e*B9"f>03&^GrC=y|||x a@D#3z(V`u(x M삑u@j%;4&# vr;[`]^aSu sy}%'XcFB0Y;wA$C W<p` 7 3Tq`=/3@Pn 9+yyx< P4q,29h @@hsA 7@R=~H 11|ۿG >faxpoo>`&g FnwwX~ 姵=p bGACy#6ⅎI*!l_Ny{;Pyo%\< -M<A"WvoȌ/p> %q$`/L0P)Qh{ Gbp&A_5 A hBm f?”H`܀٤<Eb1Z& Pa@"?V> V ߀9 >/ᬬ-Q d0e-{h_A9 L܎@TP(#d0E3?0r'; y3$`{  Q]z8;`&% L#`B//%0@ ,10$6Izq|F/dX8`0*aK(S~ yz}vf3<̀k eq -|?(pGBEP t!B0ہgAင " m1eX@Gㄴs2J\ " +'CҨv\N \ VGmbdcNiIҠ``%mH$t>32EP^ SRnyKw, Ӣ[i\+dJzl `s)0P4 zu0w/7[#AZn@M'@CBmtaPner%= H'mCCkE5=`)pҀ#;$Hor"8@Z5B xx6+ * B P֜ |1*A ~U[,1@p~W @pw l d "rD zJrJP}YwS%}n\6~,p h!JL;Lxw`[qR18?p7&d0^_7qQxضmuű Nnr0҆,HY +<*0JpV- I1p7 C `M H7@pAH e[K1АR1SQ;) 8NO[@$`F nŦ D$8('V&̃3;`,O1}q"؜-1:-j8r eskqs@#]5ɡǎ&#]pwn B_m~1@ܕFpF#쀅^X@Z`Q0e0KAF( L@pThhR5 :?{`&7b ;Vp_Ơ /k>G&pu@ŋJ#@I/G/=y=/ 4h_x5껢.T7`ÁKx2r~1tA4(FHLa[k{7ҒSSRTz ƎO\s-1:F -{x+=z  / :vp b ݐp+8@A =<%QAOIP 006`a{v3N(WPyC8i _&p |S\=|̐E&0~DJ=N B)St~0fj@y# ̶"9 cFCx5u3CJ $@Ou;p?wfrr9yy=%#5RoAmb+a,gF(Z+)@861ry˼n%Y4oAC s.m@MKCMKZMKUIOJ\ǟF v{Hw$U i 0' nC B 7z`* X~@"B褁E<02C5 QgJ6eC k9U(@sqb /sB\'d x@pqA!J֔^H \5_u>8X+ikBC#R?T"٦qH3BMmr2!4*ᥝǁ}q*oJGC STm~Ӑ8  usзho-q[ -נy}5-MB;dF(<"R΍4 hnlVn 0O;->l RrVlx~Hm/(9Lv rw0xRRln h\rģsp;e[W3+ En7/dt^؁ <9ËO.^m1)D2|#>Cq L[ :AORA@t?i?iLu9#9w34+7w( P:r`;#]]G1ěxo̟=zzaz 8\@~w],na@dq`Ae9R5݊}Im7+5AFOLϟ; UP@ rttEfxaNYAns`V OQT l஛tuEٹؑ^V@c>㠀m>B'oKp@&`6mP֟a&8iXd+-B.z  o~*Yr'wbu`( o Q0cA&z.JB V y@CJJ:rz`0uTO(qph=ԃ ơ8$k0xlyYEL(Ou8j?[뫙) \j"Ǖ` Au#pmH +4؟l"ܑ7`A@S"ʒp;H1uP&{e43/LCf^pp|Gi ``ot#aDg>aQTؚ*Rn#xh_~uh.w8 $/;&pI>8NTF(Uٻ̤c 5>gFBo 8XWج_Dnz`\7!mň"t)jr^p>f b:Bfhk૗`e7c`!v`CE)н$)y!צBEINH @pxLuE"-@iS 50nGa;lS#UE8v _'!X@&LAj1[=8 <X;f1'|{ $qEë!\v ctDY"'* ^( C0`! *AHcOk 8RP"T&3 ml/2;f[!m'SS/·)qn7L~mA:??La ;P?6X&x%%]zsJi^zav@|r"#z][n JzZJ[<`p{m6W21PWֲ֔Mb'sV hl&"q!k/!KYq~xC#eI v8sojLŠw0A0p9PoѸ" 6H`, J}% 0vqG:BSo$̛8R8o!TCmQhBc=t[ry+ K(I`gjhYXTaw5vhؖx<)h$|[Ƿ6lƔ|wH8-iWu?@)pv7\ˍA!#ȟ8v!'+!J;@ԗFzdA +`xGTNC 4lVpD` g1<@{6C*x ubS(F{VGAA1׶?Wg-ȁe%7׳۶ީ/"P& @8a"t o|*E&X?/.&TDPkρCsL+ki1鶭S#YG $s&O!iA;GIFx-Y<,n@8~[mnmͱ0y?sx܄n`=OAPf^r<.)E`۝ĠCe:8 +Hvs8q3BaL7 WH9p($>q 㧆:ICW?n PA l_¡ nx-Qf!D٠F?Af20QRTR)S BPa|]Ӹ&f탎{mH} 4u@ĿW)ᆣB0B XZ z7#~? MBhQq{cB8JD09(A&ćX{۪rM[(H%/vgW@;&:vwiSxߊ@(Z|(vdT;~ΩjkkX+)*Zv$8_[  9!p }(7?0~n(Wι  AP&9o~7XܸZ09  o}*>c9 с?$ c8?47.K`(J .>TGzkR@P(8$EA::Yct[/ 7c#lfTH7PE-utߠZɟ:F-n%`ԉCٙC!G - >@.}9m%@+ lw:J 0-@m3 P o[qm. !6 Z r&I04x.O^䆊+h@ NnCA+Q@EEDD oW''xY=9k9 ?T\~r9PJBrrqo64/=I#]A>L %HrކS33P \73PSjB7U_gnp(!C˻ah ?Ohh+!nAC $pdA`7ShY~5aI[anm/ͩ`+f6c[f B6@nN>H<?;X6;!(cs<aCPq褩d _l/O,rsp_,tKu rT>`\znAl,e "gu>TB/_G@mֲבS*dHq׸{*^n y۶_0:5)`npsximM%\M=V0F6/?/AmV7{D8 A'$!Q?hH)78#u( ^w f~]O̓Fr&;f&f п-6/mۉ;~3{#X%j[Hlp~'/AW@恊x0[oAS #P@)m`0.ZH{/8 .8VW㹟@,@H]ے?h#m/S|kxȢO}:`XdV7l mfAA'`,|TwC Leh _DD݋PMdRWIAmo±fc&a /Rۢ,V@Ay{W#gS??q~+]b{ c]K?4 H8^Bڹ[M VF/4anߐm1@ MW-93U[kI[' a"gʠug Q(NWƷyVovEAhZNMEyAB!\ĩG)B#CmEb% }>!yB VC|/O0cmY^%\ 0ha _T7-r:fv@CT< {qJBR`6Om{8]QpWBoZح^ > "(;{>p?|KӶ!+-@Z$_c+hYy\QBo7=5%`(NX\ `Ovoc f>pmG}Z?Z@)14ѝ@h9A(lGZU V/o  Fqii1f9OT7a3W跜!p2j.Q&XRk5DI0̒ltCb4*4l]AAh־k_^۫ԶEj볭VFҪHmC%ⳬi%Xegp6p(u0Ƞ: ,J%RK*^b[~D>~?)%dxǘ1JdTr$٤]JW~aUhJ 7O5 fE4-cI_< uf!4P4ZG5 /rPͥ^p1N^eN{6ԹE_b6:VjnK"NFg9^O3oU9oe՘rΣ>_F*fC{T, bL +xHGIJT4@sD*CfJ_մ*)}Pf8ʴݘ-*vW:OEQͧVf`O:,C-H~lF7Qp{"yQCUv"ԹYѺQ-1se<<=-}İ@Rt.\!tbY?]PݓLiY'R=3*Bj(2䯵nuE{Bc,FhCa(2Zܨe7YEN:*#?m,`ƊBO~Vs~5|?-v_ Kcʖ#Stkq_CSP2U讣)6< *QUA6 Oi}tM]0閸26(9 qc^in) (?=d|E=(=cXW?_%$aL{O/΢ ~?ɵO5ZS׶O6Rqw.Xqt:NMٝNm H,_mPhQ*]z;ɷe4a0H4k5tŜmlK[ʐ0wf]x'FMcIn*Lf 08-Uc|g\F]5ULH!~R& mD¶*<[]kjHM\/κeL Z;]IMI.[Y nV I7ǚ3& k,6$Œif[DF,j :Zuȩ6>zͤCpț[4tcƎ^ŸjCѫӴtƵ^2* cw@Y!5{i7aa[Yj;ǕuhF^ηmV#,ηj ]IQϦz9Bz<$/)8Rշatt`Nҥؤ193 p'5@ۉ!mt s?K]x7_0g75xcB^wD zQCM=iɲ04sI1dz"*}"FbM#7d'YD!dB摶X2ԬTL bGFccٻܞ&Y-'^Ф,-vP\{՝ 0̉#Sت2H+FT4Ur:'RPqgN ffPcM2RѰ$ Py8"U:k :߶߉ @؟P{oZٲzp,T|K4ƼS~+er`,v\ tz!B̫AѸv: {j5iUX"&xr"}rڈfxҩiãFOt%"c}UݗUv&ꭶsOG_te0Z@*O7tv?tDrӅ-lW-pd:,5=Xix +cv/-w4a%N'AAETF㚙*DquHqvq2‰J{tiWB8{AX"ŒQՒ%؎g)hQvL7D,Wozk=j?j[a<EzfJ۩>D"[S E{<]J*A"NmDTl{QIU6˱KZ] Fm5iژTŃ޽Jl*@1kA,du$ /B5<Ch1d|iؼHlqJkȡ%mGl8Nutt-́x^GׂBϓjAD7T^ɫp:NVqQVx:"4-i2Pۉ\,c AALG%Ց"ΣqU;'ҲSDW{]ڷw>& W`F;V\+7/5 &) N<2=+l)C)jRr"V4%zQOTӴKfjeK#X&up.jvs@9-R'`$ SEYiȰYbfxb0W~_!Ag D1oJC-%9" 0r);1v胓jYRgfxOV^u*Qd3ȧ(J= dk1-"ɸNv>27RFq5ZbT7'.5'}$P7^KFd(6h1)Ÿ_ȵ=JE+u4]5O4bBTѝP읩T$ V[WO u%a i'Yfj8:K$POwD:*3cK{z"I7Lw$Ib!oshUDGk-g[4KkѴ!<8 ^.c2ӆ3hw*Z;[&+FIBB5mpR ji `=R?3 H5(3РA J!{k? e[S10ds QEph.hoM|ݠU/!ɁjG$z,==Zt (H۸``dBX *eZ66xj+q kZ>Y@>x8Q[ gwphNNuw ˇ֩_ڨy-siv1߼ՊՔF[tI#hMF%R+5/*S@eLl 5,+QtPe`H?_x.18FNrYIV~1,^aVǩ8; ww><6O14u,b=H*;ʝ:/AgmS!sv܂MTQ}QO_eģS6C:;*FF!p&Tm>&kGӦauKANj^ZQkĵlEVa8AI)XR=.&# /O1*4YL-/L6]flgF'bE񰭢Tu5_ިHcE\t_._GXlZ9qld-yR޺O_B;6pm fV6jm4nX!h956<u0w>x@LjnYLg$8NCUwlJ,4 vZ'& T_ԗjҩ#=N0jxZG⦫Vco8 1jn'm4A)r^zFMWvqm1ٮwi3ex9N%KۻZU0Xm~9MsG٧S%TiY.J/HBf+,KS䶀v˺RTd(L߇ebŅY ۨ$1Ԧ8+ߧMUކvJ1*Jl"=d|O(q;073KLI]f=ʯA.j 7 o=2C%~Q!Xrd?#Yg3lT-=`ꘇka1+`%XНW96p:QΜC!#f]p}SX{@_Qf^H-Y`*V[#AJ]X!違Fb@T*Rr4VkZu=4ƑGGk<oO*"]qc܆A(K:KҠekk *5KSRM,iG`}7`4l]bk9<8y$E2eи\#R[Q(Ix">>cJ@w;lAgPQ^+֤>(_*hR۱>4`#A91z@.t\m1p[|47c򠱐&Y6@Cs|n}y$?YTXgTܨR7oU[rH' GJH{J1R*ɤ eZ[µ"%n?Yu e b@/N5oSb"p.i&hُ֥ RMGdUaw4e=3ktMqO.:v u6*u~ꈽ7%tm.h|yE*:;ѳ GWB/4,`ǣ=yq 0늇PoۂbZ`23јʊ.@'Q7.f8wG{vn8ZOq""' t)ixFW͌\`6*Gd ˨2H{m$3Rhoب%ta]I MRpc e2,i{줝UtxO\[̡$-"0O%4)a#)U[֛.Cc!`nnbYh44:ޖaK7SehW'm**%Ky2M_]HLdSUU^z^⊖z6ERY ujk!9cR6ۢp_&`L'8 'b%0ҦUB){ކtcQ-ԌNܲ[UpvЕYTz̠WR#=mg|P ,d[d8^ks&`w$GE2 3qB *p/[L81/F0u)i!"jV;zWU~Us|  ΍vE 2q4fH,6@ pnK[#: H#EnJQg1xRTAa7σ2JCp>ѧQ)n&BaJNQPdSKlm nc2"6]W܆,I+8#NaVyij1Y'q_}F_E㇣27^e)J ڗU;S`4 oT+wKFGʭ t2 󢚛)fo!xg2ݝVVTXVq 5Tjb5lҺIZZ?t ǵpߚ&;,վ5/ ‘oݷ5v3ahoZ)QN%r䦱,m}V_6X!@<Ҏ[dS,#,x.>," xxY {zP3 XE酘6q*؟` l J>0Wk--<wSF_ޅ WhPgQMze ZF EV[t {}M6qQi2H!o6 :Uk<>v,9]=q5F_є >lfԖК"Q "$rkQcA*>PEa%c$~qh%YF|J` $L6+Zlo`l,r*"('JZ̀/"Я:J s|m*Kah/MRM*˛ x(xC 5DH:, cJ0ōYsH( vg5jTsDun e(4dkq= *kU } m-|81U1\&;e8hWJz/4PDR(t₮p}CaTCtC?u, BJmog!6CNJQd`B_G-3Tnl%FKc PPaرi ūS:jiyq%U&7H,ƌ\3+$^-1x=bZ{м-Ct Q#3 *ji[yg oP/qF>?t .@)y _qjǢΟwHN9S؁bot4 |)J ˧B):CXn#R o;$ !h#ÁHSHM`ZKVWc}a0W穂h]Dz7K(*K!Je1)mEvG30c? '2JMiAjV՛Vi~0 Tr", ˷:1k,P-Y5Zt#`Q.z;U[/ ´|`VՆX={atzVQQ:@˷VomRLy!Zr9׋5>L/zʫ }}3tX^FNƵeut M^8=|G"Q{H|ī#U38Je/z)(:`,x 67aVZ@9tPYi\KsXb!uZҩi[.=%e/>:K{@ۮ脺jssGl]$gĩ4i9nt<Dž^K447aH -#B)p涳H'/߽:k{&v*>N lы=5^.֊,*6a|'u gQ$Gu'oQh!Uǭr0*XqX43!僳P7}v0Nk~[C|a񞑊DCtu&ӫrmW(j~]FvW*nhX ePWM6ÌKxgW8l}̚\lړXaDo>$yB4iR-%hU:L'[`)Ta͚QW88eRH̓Ua.[,4 ,V Ć0&b)Q ([FCIYqkڋqx&xRY\Ln-'\ZBvA@u,E [Lq9zlGJ[hheTU&#+AuU/!1[K(wkQtWxFs7: gPN"!(3q7@M*aF]&pXCK0[FAO3V%ByN W-\qCjD$ld#m :C[b8ZfF_ ~p>jSvHPJP`֭Ű\g3B3Lf16CYuz9چMFuG2k"#f5#t[tIe괇\e42,~2؇.2֤b2dT^0y;T[ЅpfA6cSi"\^fi)Jӷ==q6EI%E/tZ=v)Fk鞺+J鴟No+Ra$ӗK2RGq#UsR&C'*3\vâOчlv, OK1AGFAuxX-KL^164эo{/~ۭO>^Jvzhۢ=@@ ys )d\RL_/gcf1?!DqcpsM큖s &ba"==YpHxqZ 8$_Z|hy"ֵ)GgYLQ&)zecX.C:]0onzaRaMWśk.LQVF{i 5fRPEMd`10F#-ËLx#WİvivW.B6I=9@?zlvP05697 ^V JY=3cu5:hǫ"g(n Z5(Jv1űcx7=sx T14QLGe"me@@C2~G[И39 9ĀMVQ}YgEcaX1mquֈD7AU ܸwձ/DfŪ>܉'QiEk~ΦHTGk,ԬB#^))҅/W@P2P7 EO4N|͂Y;oIY&zY7k&S}}gy#ay DBׇIQA"U75xBĄRnQo²~GL #wo)>=Ofh&m~]CiڻT1F5Mۄ<1: kV֠@uC8լ`4cBqn0bjr#DZ"Fc3 C #h~FLc^"$!-Ytƨ(=b G<EEOI8Ҳ64?:VϬ9eVMu !_;0e)̦Sm%jkzSg<_C;ҩx -ԫ v.􏬠G4@$z2Unሌ)4P?tG$:bxiN僆LqRS[PP>z@ףε2vׇ{<{x@lښoƴi(ɦbz嬮Ʀsm91KƘi){ ;D3k0iH 8\v!l|9ҩ'LwX 5oaMR<Ht_ ^AB=Cb\RB<l(ⱐLJWV,te2zWʒP b^ u]©pUQ| _eVqblmTSi.W:;;[+@Mݣ!ɧi*+G(j V$vW"Zc 6&KJaMP %vT@iL+ u-iikҹ%K*-gY^"=#B m~%EÌIrb[wwƉ޺ bBN}nw-oJRɑ2 :;K؁ dֱuj*ڢ+Cמ8a*Ĝ y ,SV0,:T1R)Y| NE3P3o&o: kwih.刘ga2φN5QET( >j&Ip1v{Q0b> Ή'p^>@Q7L?.s+Ěh"%DAҍ|,֦)g++h1ٲ*7/<[K*qi~_1)FYUr6ʍ)Fr5QgAC>hd?Y(-\dYW S~FP:m އ@񱵖v~ctmц\'icmnMg=Th;A'5mUW`ּ6]ZhQZb`0Xr[nC' Z tXjA5 [~ [\ {϶vNt>t/F %4LXxR{Ò˝xLh7"ӉU:w欙sSjש֢@.(-)1q.vW+6ߩwu~u0J~\^;>yZaC cHgۿ]L,ߖZ{g{'y Zdkqڱ~Iyvͫ.tϟu9O.oɸ-VO}iɤdDW7: so9aѸ M,q볮@sli˿ubnW{oMoIJ+_zW·; d1%@>Pж >1 \\FATSg5|b\uT6>,|O>Wg>g3|SoM| >_Si\_7- o&~>߃]ֿ;s| >[sx> >s?|vA<o9v/<^~g^O~뿘 -_ќ(]qw}#ߚ|^xm|q~uo|5/b#? Wkם's;sm6=Xwo<> ޽MM|_jqWn87|iYO\qo~칋=??+w'~kOgWWx~Iͧ{{G;9#ݿ{?.4O\rբ/<+Oyk_nk3J/^uVଟuU]>=+>ڑ{}G}nAGm?s?8WosV4,/oy֙g-;油 v4Ʃx#%7y'޺eٵV|uYo(uY睰=H{TE!^*R.''"H=/iE__$""[="-)sе+H}~X$'CYEEH>[_/BקgMz.gHE7^EyH^^/ϗ.g|uo)"]E,o(,"o7i다Hi"+oW˥E꿵HEe۹+R+O(2P׊O3|V/f|_@05`>rsGnbGjxoçWTr"9_Ur7ʝ)PUwޠEWVW.-ZUj>u0n`X-W]{u;"Uzw_B3%3 n[cQsJzW3U0:To_I ӫߝʍ01n' 1[Tܤ]jUT]U7|*} =^52͊-/+b US/Vo2:M V7vTyC\|R~QuWuj\572ױݼZNW  +r?IoO?bXː7*DPTUwT}#?OWnkU ?9Ux5v~u*>IVUG60߉ ׏Q'amؠ֞Zڙ 2.I߃Qߥmgjωc#nR_~#G+zv')2$}G?Xo^pHI \[nϽ*NhZ.)z[*>?a&-?ðjׯt}V2[U?n**{+?jݩ伶(6vئuvYɫrPty/֧CN5qz?OSvPrIMî;T;E*EZ.}>ݭUd*T(à6nY5ߪ*|loFσ/Bɖ_M7ǨO.Y J,QxWWD㻺\]x7 {BV\Y8+ǪӉ P>}fu b &X6#DsY?VF2]k }]X"WzmK;%~LGָVrZq5ʱ]p $SRuEBo6{ a]ك]Us%&'WS夠t[> 6>w*d[ 20wu#tu-6-jY=tvsKV]?2kԥFjW)ROe]&Leuƥ7v+\f^{ݡwuh!:50I%xc JoKo Pz; jߡ+l>ioU 6lkf[݆?F'(ݮ{?ߪ]noKߤ~w*W,W?Ix/)Zw E+_$~X' e,W]+ \oz |@ |oN |_OmRQ%,VToEॿVEx)?Xw D ![oqm_,P$ dN Ak^^#S~TXO ~@_)~Vo *x"IP?%|Fx?~ {>)=&^CM)?I~(^?I+>+5?U | |~ )z |O_%/  R f?CoxyV~oYUo~?")_-;9[O4[z$A,r++B |Y i_//VN_(+tzO ~K+A7 |(+f_' 5~_%[Gk 3)_/;J b-+k]?$I' B_#?Woz/oScB]N}'U^u g &]o[f[] ?G w #/<% N?_eW o&=Q"~O{^n/ |`J',_ jm'^׾_=_'03F!9q8gƥ?0.Fn&aq7%F;$q6%H+ KzoBX#5_0LF_0.F&t2"bqi5]SO" w#|$OE܆D?g"| O"?J<c~g"<'x# .C88OOFD?'EK'?pO3O! ~ r>'>O" D?w \A|•D? <'&O& *N~/Fxwk~/D'D?#<' D?g"<'x§GT% <2iD?G"'؍pOp) ~1oS#\O>^D D?!H0~>'n߁p'6~oAL>'zD?W!L_p ?­D?"|6Op7mD?#N܆pO/% ^9D?>'x&D?>' ~C#^FFx9Op)Ÿ& ~k ]Dߨ^A!& ~?p'>{~Fx%O߆p'/$ UD?## ~ ' ѿ$O_D܍p'|D?mg~D8KD?^C<i% .Cb'H^O\D?oeDo ~ ˉ~C3D? '17? O}'n +~oC8G| W߄O_M|D?ACf '~GsD?m@|&Ÿ'F=,04[3!5l[. ^ugBZWp]0jß}+8| c޷6* {*|%܄w}Goؿ<%-B@yIҵ*9OQ5=b9Txo'Uerp y+\|w0|/ZY3"{1; @P{E`a"d^ L*%z:lsкs7a e[g֦M·|`g$0>ɟ;r|ٓsв򹁡Xy}p(\¯P38|E6j7'q o ec> UmAstp?_^51<@ Q^O+3|ymk0s4R 죨f+0P\M XLfk$MV c0_E|<ͯsG * M|,s}˶v>+nZgދ0cr~g7?ƵI`@obߜO8$:Is]| ?ѐWn5<}\f>xƒ\+8tR#is uЂ0Jj~YYƒ$?;P ]#Pm9 8 XS0_xݍuo  oQm^!@a`ȿ$u8h&ؘm3e}C^.HIK&!fB~%5 U3`vKZNn`C/{6}X_K F:)1?;Ƿ|~hسx4)(o >|(r%VU]jZ&9Ůk,܃ClǦrg`Gc9Y,|C qqxe9q=? s#́9%9)&Tz)CkQd[4 L1 >/{ ^ d2oʽWɳrC{Qޠ|47<0s=â~c|Aga~(s+bYw?J >k-Yڔu`}%={4^Z>_z%@1`O}ӳiB_`COrϦ;ǧc=ר.M(徭ȍ`E ~dNL2JOҖc^bIb5DR2R7Ʃ%0 Juq᫩ [x^Ju% Z%᥉Qcaʽ5߲깁G<(Q2gNKRW0F}Gy+ۑc5ZҨ>$/),MK.)M?hJ q=47Aߑ^UqjkkxWR8pxmfJ3$X(-`ydF(i,?/UTeR3a޷`W 0:v[לܳ/0n 'P${mMEV 3yk𻐵?"" t7I+~6cAfWt|>|7xs$sX<2Lc\a˩ ;KҠÀAxgG`W2jʨnDN/ 9mD~<SrG#82ߣ-=9iK_6/t7̯E-k Or9RW-4C_ k#~"G0 .hZaft}SUjiJ ]7mi߼/=aÂe?fGI'f^~ O)["igcnD&5&Q2 _@nW0oxS hdi̥'&{6]6 VIyYh 0_Bˁb(<d.iaw. *WL tDAힻ;je>Z'?b o :/~T%*_USPQ'sh1ˍOi߾x(x/3~y OvLolY^ JKJKcĬIVz6ݧjwH=&C%KaieL9Ywkyj68vѾJ: gЉRV{L؝6{+JAK>9A.ߎ8.|}umcAs! p-"l.C!oPq1:\\`h:_Qx.N-7-6o%Rxv+=9_Xrߖ3K"^uH%Js-{:φ.a$jv~m ;//^{ko`<"ENZ>\D_!0t6SNeɣfoSu}8C Vz_لо3>#XR4`dEˋgW$Zh060`%dN{3F=ZkC^D]9xz7-:ԻX|hmȍ=fF /-X `O쑴܉86gZ3/9EpGB>w!B{^z7so 'ϦWI.J8H2z#- =/SMf#O2_i? wPzǗþD'L 3hvy|9 _UstF^֫VFw*px׹ށkPq/=R5-}Oߍ|LDh( 4pQyݳ)\bO#x&]G yod`v(?oQf^kMq_lyxh|[kOӓV5Y^Kzzڻٱ>ϾPF;L 7x:t0J'fœdA+8/ }~1,ÏV6y -c=fZW> w~]Jw+>R^Oߵ~]:i 0T?8EE7&ZLj=}l<>b8);nُ-xp_@5\a ^fma߽O1 Q~43x?F=׏*mnfBߓ=Y?yxK zrgM+1>7gM2>Yg<''\,҄3:ڍ|yY?xpN?[8?>{2VFza|r ZDVVfEhp>(=gW\zzyʷ[ͽDOlwy?˕Ԯс5~h!](h0!"a>0h0mJe m@Mj/CkJ傸x8=L*P޴߂I?< ȗBFچ ߡ T7jP5x=T2`o'/AR^Ѓަs64I}M03gQ+?y8| *V=/s#HjGx9R)HN9ecc+5XXorf,?{\ZVov 7;юYUhuɺwajmm_Z r.Oy=wέ߰ϛy=$d乳v_=C%*#vg(,ݺk'{< oy3mx̟%Rr]3sJ5/'ox-X{=|P싻5vmgw.^` )/;!@X^Rȿlښj2xԨNB?]\pzsMez7 wd_y0s~F ^ͼ_L7n.6I8\,.i DtU`ab]IPrf fH-:#=wpxw nzmevg}XS߮Ɵd ݬ^RvݼޑxM˞ZYGI 2@z1%m\ l/7nd>~x'#CoJ)g75|ߛr sϯ4g}/9Ϸ>V =Мxg}sv? kȽw?&-6[̋+=c]ͪ$vhx1?i0e"-<2_(r=w>I =qR_+k{Bc:m)(injRϝ %,؁6έj PNVm(58OؾFerOT>W \<VGCfA7HuMcK ͪ݊s*έ}蚒^>zp  $힍;qǽؗ|56ܿax&ݟkj'h'<8~pz#7,5î>q^uQM==/ͻ?"$D*ұq?DYg6yG{K27-l%^v C=~ ۱3XU#cɭۨ-S &c)%i|{zףK,ԏE >iǭŞ k:dđ/cA)_'RA5x&:̶v7s ::6=aeٝ;W,{6Y˦-lמkkAYf&t\>O|d<0$՞Mϱ Rd =on(*$/I64IҴzI:x,ڿjՄK&|G5N}9 eC*i&tWf14D=PuvF36e`vyXqG> {`A4^fZpŰ'<w7o=Dy|[8ߝ=bW&g |iރËJ|9hs>CN#£ g_~3TvߗV1O;Z_ƣ:1 db[ w!jkvΉxuL?_e\w&zރF-.Qn FE>b,p H .!(Ѱl6Iv^E4 .QTKbzUѢQ-mXMU;̙g]}8;gΜ9s̙3gݛdhcs-5P5[J3z%fT w<a.1A-]ΐ?~sرxܣ6aP-@'{`v<=lz!WUVȺo 軄v`j=4R|ӚZw%S0\,a0~~:{MҴPEyyk߾<"}CM 4=t7I 1b}O>U0h>}@C|?D|`1]'.#7XlJcz~o7_> z|sg+g:\f7g -]o0FUo:0}3i%)_] YhD^?cVDZtڥ׎9#Q5"ΑTr"9!-XGI߿\^[e~f}d?-@]|WKz`y[Kp5m'}S+-${ qxhq iq?$gf0_rQ2sq iܾ9j~':5`lI|3ҹQGwn\m$nwq.M5=dz8PLlaR??В)Gb]VێKu\Qʇ9|ñ.~YX6X:\ 6u}e0m;,%X[0~HKgFg Roq Y:@'G.us*<uL5Zuza&M A3 ϱg Tuħ/jbOl R!]h,unÎ̖ݤ̀w0 w =/"ӆ `i{zu! m0[xP= =zi}Ϲ?wO\?E*-{z/Ԭ'=)9~IUW[>WqQ$mwbS}]]2yLGdO^[!ϑՐM]zZ| j1t!`^m1¬`clyhV`Te ʱߐ^L$_M Ȟ{%iOg>b_U‡ v 3,h(C9͸(<ㄙFJz6\c.lz!.!;"\Hk<1J9Ҡ"8P\8W9ODLVGxwVzPqz$:{ۖafGיݾTS|3Raq߱;~:q)`<ZږZ߷tyj+ދxsЊ߾ʭ2~rvd~ 3OTrDī3I[:?<=vJ- H'LE PVHUҾ ~Z *>!G|-F$/p"5Yх.t؉=~iN/ عVfxbHZڱ_}V- ( nfRkG,!e|H yT3zKd#{EB1.`}J2aeVw UʹŸ"grԃtDRS'8&Co 6Q?#~ Tm:/8ZhyR3q۷ y| mBηA53q)e.a,h83|x)1ԏ'K4hvFTEUE+_[b2333}}V)b/TTV;'f\H#2;|+9ڎdl~^K$ 2/}Mv4 mk8_pq<<|8Ӝqm~6QU4TL~3Uy1q2Brr&S%/7dߺDgߥ9zs#b/FkKUu:Sqh ZS4*aΝhޏUqFAi=ufVd;wD)F(z9⣇<{h-sp8*bʷG V WׯM6Ӗ m؄͵ rstXx_j[[*,gibݙCbꈃ]xWяp~{̗{.yH [nukC=4r3r96`q؉s6_+建SA;_9t>} /P6I@Gv|U!zO&v$b&ֆk絯/gASuij! Q:y/xB^.0jXA(@Uǖ{JRp"00ޅGzq|ӴUЗkHP%ӽ僨=;R0"jE޾ :{yW);{[ڰ؅ωb%}U(:EI;k^}_.98/K[<ϖ i1sUtUaslϲ8v߱s@6VDze_2z,-ڮt/) >ر }@q~f}7P/bU͎oXnܺ'9 N>IB c@ttG4Da%/"l%v^6ha~ (9|G"@ꛅ%aLܙ1:xE o /[T6XUt%\׿MDK;yѹJpq8\j}j~+{gS?2m|AXXTAU8My~H+:4؆}ȯ_N&6L?Cx+IK9hqֶíQФ+PBlMDf1vIMCϊ0= fͮm{7GKg!~m^#ӎD<U w`[42 fg8vFd\*Z/>7cst6!rsΫ5^w%;aw,C97wܤT sXxb'@R,?>^赯 ȉLo];Oe 蚼&:s&93}w$g^b5`r.[?tChpᑡJ48J ;^1ۦ/d,MeƷqWd9.yd @h{bFQ@1aP N:` $=}D, ["u:f-d(_7˓֐>@ _Ǽ-]Svchoy'hq\Nׁ6vq^_{}Zꇓ/~Jv> 1k?CckH$(oE98Rɖgۣň}›h g kk.D+> ^B?eS#)m! 6}]8 |A6'5R>%gE;̆ůw? |WQųY|WYKb=K{c_/A6*0 0 CN'1r頹C{ ]%M4\I&.9]b+)Ugpi1n܌eOhSz/wp \㉖M/.E":> Dx]ϯi)qC~8؊~%ةK{x qE<;[0*P6=4Fxb7D1}\Pa\ZP =I6~!̩٠2Fel01tǥDNUmXjxsT9bfp#d?A}QlND1l$scsGnܬ]|OG^9hTX1< s_dսO 0a3/҆k_Eb { M: -fg49Ɇ6EUt0־yò{M g_||P%}BcM.y]8(,R[6G'2 +"]aw&Yrw zw/~Ww&|NW壩13ǚIH#?1戺--C?$Ʋ͚13O r6{ ާOh&fQ0ij.?[_Cosϋxx:܆8gҔ/-coa[?)uk+m?b{L$u3c?*?ԍ329L9'Sul/CSu3tѬBHIT|;q3ry#[Ǩ{#"%"̚Ғ>i+d{{阮4|&)T8"GP"zh"kjMbgj2q]~G=j N<ՃH@8 ہ*+w\D0ld=J%ba2/<1u"kSpێ5ݹrhLo yf%-]Į܎^Ė"aH%]B#VzZ݉T ȚaSHyxoG*HEAm (T,A;.uEAlΆeQoZtk&+#̇0?\Omկ9:%cc5 ڡz-絟Q@"Z>H)ԧY`4Č|U\,hѽIcQŚLbј`pGwGF436[/Ǧ4rjڒ` iB* |OHG45^=Œ( {I ̯Ē(NM`FѮ'ވ9~Jue:J+ۨQ [69C7&|>*RsbȖK_m!3"i5:74Jz۩ck2SBq%|2[&}(j^oQhy+K79Btx籩x`{CSG(Q)4\ ueXFinuj gk AYv֪?Ӱ&;LX]f_K_Shn#Cq 9*36KO`WNqK';rw GcY{8bC|9 򵑡(z2گ3f\." vQq_Ub.sAW[?9-DzN&ɷ+wvo"GG`=~>DX,?NwD`ƥZ1.>eӏ.nG Зsb:;\:"MOuN+O -₂r-qCj%B04h^"b?#WW_Dqlk:`Aqg?E}rty|~oOV<)m`vc &C1|o;DS -~ϳuٙΗ"\~XtE{Rw-Ȼ_0VM,(qc/5,Z-Tu[ulg 3Ǟ.V UVVd+lY[' wZ}^<tx \ BmU$T -uUoT;lŮ^):3Y!wK=k IgPiI?{Gɇ8m\v7~ 9,99"1;^b?b.DX,߅ xΟ),ˡLgYWIq'ZYC`C~(.42= ,KpEaY a=\yV O_샭 DLҿIz֮&"k~lwx1@\/Ln{= _aNgm;}o.ɊbcQ6!s]ثw'>ixs91Vl0_x떯>d?{Yz=? =u{-HDȡ+A"H"'LJ`>Ā4t%XgU۝gF>kǛVUY% 2]@aZ yxDpX #C)FZ%ym:֖E8?k97pSҲl*WKr4 J"y:=t4f6 0zk\Ѡfd_V>̍5">tXUvMdcC[}G0H$o4P~cb3]TUԪ݃(؋5:r!e]zUlgTߦ:m*T3hk';"j1~@_&ۜ,+tHf`1u?BXͨ4+ǭr0B_娝Xcy_~\[o c*(Xuk=b~_:Hs4Nٷ]} *u1Ձ۱6[2i=c 7H#*8IsE>-^'wWѨ]m yӗn_UƋjQ f 7RC}WN4UO-8pk5B+Q+PMwYy|,;v 9}XBŁk{Νt.-] :7VlSfRA;7ѦC}3;X75Jjݎo>z*PgZY~t]1oϙ4 g~nܙmQksmÌB)>)b}ٔDw$~>{ Z>WT}wg}B*Aތ`LCft轢[R|_PyTDMEi 嗈ߡ?B[|VI]qQ7!:hNKǝgkN_3Wq{"B]=д'f*K:DH|7$}=f7?ݏ hw~#4W/UX{$+\\p&>\?~IŊɞ,7A+G'c}"tyUdo̊ҏIc6..rL aUh(8|~g71HSQ>=+o78} ;%z,S0Q+H?JX:r3\=zmD| a7stYTptMKqE"O*6[:ZDntĞAH9$VA6Q .}u(r7^&2 #u"~?{ŷrտ2/I݈[ɱ[}='T%_"zV7{e= e'5Bv0ѮH/.cFsd]w-ζ0_ۭe7H)kE3Bkx>-rtfsnWNZYRy7: xBqF{R -o*(Qn(H~zoѲN0Dv얅WH<%t|u%. ^ԧ:?Q>O&CL b=/I ׆kZ[`}ypkXZ3bHWѶ'O/6 |bⷐ?Gx޿_qٽ8A"qq-𚇢T y>w75!g m^S{+05x[| U6r%rBJ'[[yE*אK xCۀz|~%4:hXMq/y:눺53g AUhmc^>Z0s4HɄide'pu8/ZrŚuY O+Dj.hVuVLƈ*RIn%RӟYΤw~hJ"6eMoT@1ܾq28-ͩ*F5I(n1xDe0'eM3.*%^nmݑx)j x[%Ԭ`/ *TLT@Lv>QboGMnm]BIʺ nXBBݛſJ/hYrP?2Ǥ;H ĬIS5p'ƅB Ůj*@SXJ@7iT"JgÑlN΍^>1$҃T6w!rzBnieE 0J/| f  ؤ0ɪxՈ-[n]W2Կ\AoHEcYIyWjL=2ǵYu<͘Ћ`D/ŘFjH!agFA1o!@Sz<0doϽ̅ˌ!+ g;nF*#nmPx(@Haf.ɱ:lu,TB(+2%OS;IzRGy,%Z6ՅLuegC (4444ؔmw=MKk_9+wm fuik$5j Fwkk ^ߩxؑN :HK.(ܺY \Q7iu~Z]ӚYN.0 aEDv` l>Ρ~i`WdQ$,Y4YKC} ;(:㧂r ZI_S1J'MƁ 1vA? ]eިa;`M5!vkCʊ"kye=Oi]3Ld}olcߍƝ` KŚ+ޔ^r!TM^PǰGq~]p<~b/ io.x>[ _[4t(U8Iz=S}A/H:P<&"`WUNHTwsZk03>j1@m XtMYk /;=oojQY9j W跔6_{8qib.~7 # -A7þ>J¡Y`aZ9BU7a:E,(i9`=h Mо4;ilHIbX} f/xlZ:< (J^}YE%Q2l7x aF+f0Af(4Ӵڼ1`AUeeىD ` {jPJ|d!tʍFGli4ǓYFE .=v4y\JX&rHjQzJN)O8y7 >b{K;#9T 0Q83IJ-WSΏQ㭣$0B>v;r)Z,f-Nfc->,n_8Pq*|/z:~|#,r59-7^.g{8 VKK-Djx-0%П]*x*=}JAFCS-p`Ťu5h-t`3-aԜX3S֦t Y6aFN "bx%(!BA#mb6QZ7H,346PUK .KU`B49hk?p#; woTC*˝$)a\TZuHGg. 6oYhױ+psp:6X /wUU;OS')7,.T0Dc:e]smN=](aX<,W "tX]sU^n!O; _f_p߁#[۵&IOxr5JؙXWx`%Qi5xa}OEe%b1MLH&hwu+F֙c-mH1Xfkiܲ8P O.i0t$9T}NŤ\q^N>Z``|N!=f< 6]:sOz2׉IhM'I?EzVTWK-2' tNwS$ɪrA%_N60~<@fÿlWjBgw~g%b;&1qTW:MhRMH}ż5.+mnip+ #׬[ry>jxn8ӕA0}>&oSm*X4?NRHR-[VdGi.S4bL`;PT`z4m4viB.uI Ã6a^c#|HPFHU"4lrP'`TE{ٕi k¦V殺j[֔Ua JdL?ByĚuQQ2ޕ0y 2oخT%u 1/s&~P~3MMxA y  'fAZ?oV[D۪xY |G >v @>BG!|Ak!筏dzm!B; &߄16?oп.wAxO ]P㿂uC< Ax^9pgpPw<k!tCጛ{nCn>0v; p=3>  fCB}g@X Bo> 3?CAk1Їq =OB 7nYG!B}g@ @{^yC &_pN'߼|XPO78>!!yaxg t 0~tnz7aܺAB.pMUy a_;aؿcMsoθ)39?O."ܼMrm̴*YќaܼY΁oi""?gk}ܑqin)(OFG=Wi(&k? <htWC\L&# rݔ9+WΚ[-xc[niǀ9G̙7--pwU6z5WS(鲎gmx3͠|:Ͻ)cS+w;3>H/ @Q6e4c H#HG~/X(wֿ) 긱=enMf9mT{@I^m-^ aZvƌaRmrvC9(_8P۹2WɘW~gH=QO+s{̙@TQ= ]u_"t+pB~BC~[!IH?M#wg8n<Gڸة9,3 z&t@2H2wsM~ugnʪʭ)#cO;ƟxYk36ef ժ(ޝ0>gB( ש]3C_i_~u@~B<Rԯc4EYg: akV햊_*7W9D~Hc&ޠ%bHtxh_px{XnFK/va_6dfvS27v=g____m_ Wk@U_(j%CFh?Gnc DoF= B1H4iǓ@| +Ŀ+1?KiC"~dl̬-*ܘ +mǯK%~,U4~Kf\I^-.D|L {&]T6ׯgH>f|ؑIVH-h+k}iGh6fe Zk%*7<X;WgM `o9Z̀G~;4G;#^ʆ p1smp)?S5znF\$Z>kw~8s2QqFG=`^ֻ*4hd̛F}BS0 Au3N|S%MCސionm0dGfj`;_q~Wr<a3B?p qIq6@Ki]c?63OK=W "XmjW#9lq 7r>^q}p$9"9\Fr8!?㰏3|Gr8.Ⱁnp+9|ý38_s8pp#[9sqaH's8E6rÍnp;qC~ơk|t?sFfVO8hp%32s;\0#GXG)[4d&O):mffU+Us.vͭW j.d-eocSs˕[|PxU^vk6\{]Ggo}͛o-oλ=?m'<G}'|gsx_|]=_k{_x{z7?>>ɧ?SG?=߾?yoO++*) ĢE }];iBR0۠8!;궐{/?-j򅋖[Zƶ4(6V CK"LE Y£E}.!\pyP@"f@8qxt' D!֦2{8~Y q_F dIcڄ@Mҿ3fhKi_ˬ~pY!\h_ԇ#Aߔi'3 sRÂXEտ.ՇO?hȿTǗ8\o̦gGMr>!\9_/.+o>(Co,!'0da/#vLPč2ʐ8?0f?=K W8|$^_)wY{}p |"?1/ZPR iKp(N2n6kmH_7Hg8UVFuZd7D7Lޜ"C&p#%)a]^×2\3)=O^m=ff1_np7".W=ïgG_LTg>eq\ΟRӑvg2|3\ڥqD۸\)wn?7-e;.fӗ{%o`|پ] W÷1#Ǘ e蟼')1EGLg8/ך~ _2_/Qįg'8 ,ƯBĥOX/?. |3)!r}* ^v3CDV)~AgCa) _6i|:IΚipf0>Ku@lcx2 $9,}4gdrmXi私1m# dx;od=) Ayn_53 /,Vӟ?-uCOq';/IoMߐ~[iO3=<".0 OIjnqqnNj4pG) j/64r: ~'.~Я0:./ovn`,y<.~4H4y<y9,۟z/q2//OggiI+D៦'+\3sg.ǫDG^K, ܗ!˽]r{xzޓ/z񋗉Py9! OgU"pYpo˸q=؟ߔs#/Syyt?kEH|vL.fide1mpD'S)6Ïԉ /K]4߭e-"`x(D: z4N"~=toY }xoOKNpGx^W15 c=ܛSvi3\a|tz~o(w1gWrۦx|v^zFj3~Rצ# 4 GB?C|&gs.۰3SufjS*/Ky94/ ~/c܎G Էy3|VlOCgsg I狆pc;_=O%4oJ2ls;".&) kcOE-=AJ z}D R5EY4L4B]5U zߣ4s9LeMĚ0a< *w=^O L]۟:GfHG~ D TrSc]/%LZ42~VVHK׈E[MM@M`{ :B.J)߂S\6OAc׃A84ͬѣ-.AP&qIY^it7zO.>dioiHASSatٱU42wЋN#:^v>w 4ִ1UWP K~@86`8yeR;˽5v%Oz)$mD}*^M{r֑^K*kB~YNpXrcr\MHxt0U6Y/^V u:NE %Usꄖ>W?HfRHQg_'Cp!U꭯jpżյd92HN3f:*pb9x=N.*;\-W?~'HXD |hƉ̠DAi~xhu|m `HՃf:e(d9tVl䘐=8yD4On@h="89*YajK z[xAM1L?JjWy`Sư#zzS/"ZU-)L)5 ?iX}!LM6t|P*=qcjI`\.2BQ6y E!W,"eH*_N/1Jy酩 J/=9,V qK\UT4 p[ϋ+jroeٳ xO2ῠƇ^'0ശxZB q~wD ]vs_N!Sj5֠7B?\HB eRX̯u].eMZz+ ڡjfOd8%?U׼zbGE!gCmljٌ{2_jSa٬oHNѫ2@Ph4 EWz1x*n{lOF!`Ո'P)ߡB#HSzϰŇka<**@Nx?)4vFK^^Uo;ߔ S&JJ&M<~DGYsfg5zW G4zR d!` gY ֜U6. }B6S#5U5kBH,h$Aq2'K/ć6je'^F1zhT0a .\ y IW E'203e o-&IV`6« ky h|Z.|XX|:%0v!q}V`LֆD')ȸ=_^ޘ_g&Am`q_3˶1(gmμ:L3,E;}?`Y䘿j^ѭ}RS΅5 xVDXSU*R-m.eloHȿ|5%47ѼCTmXh`e?$(5~i5GNO&8Fwy`>XQUr!+JXYy%r;jҤb:5\4N@nO'U]@cOU|?tPlP*|ZiiQFy+UVUW8ηՋee!.h5G&0etᅊGX)Il݆ Zrت+e`E++V ^͂YsFt}rUU]n8{ƅ- |2i8Y\_,@~? 8*+~Nu<5'42~CNNQs^{9oP3*~r~j,Zݞ&0tu檑p{1/9 䜆bUFRit%Fg0DJY CUE AYsNO jU`J‘6צL4IaNU@V9&OZ i뀾K $T'Ts|pJOnjt`sBLfwK qr7GBƑ .tfOAR5wktYd i[!}TbX}Tz01+$4#ir_Vtշq+7 IhpRn pmho$1ޥ^&~7vIimae4iF#i4Y[R@H@=(k1Jd$+Jѥ(HQf1|lɜޅ/2Aee1ضZS@x(gzd]aKImL!)b1thiNФn/'e9&+R#N1Gz&( ++F!U[a װ訅 Anؽǔ-OEޔ!UlͅDKhY ffX%~1_nDr~I&'.drR-Ɂ~I&Öӣ[Y++F' ;z z"a0V]s*LHaEX_~z ʤf=:(VXXβB)ZIhK G҃@ %IpИ|S~um@>+%q;4A;^eڝ\PVxc=cRd#Xu'}L5Ku"J?Vݺ(e;=TRI, eNuYk.HerYfбRԇ-#kG__ 06PCqڨ)4l"Ӕ嘄sDLN@OAIF)KM/VsTf._T!BsaGIꙸYS$ C2dkNs6{HUbFʼnkI";P-秠ѻx`=zCw=t'4G_QAJy<_@^D 5f˕G߹byٗ =a%A Y+t.^l\|oVlCX)zO"N],ڴ\]ˈm;~Љ#2DGgn@P1MzbJC2JUZʁgThNPp[!WQ!zT_4pӣOE9j7̶6(Oh$_N1`ٛ׹_263>.4VD}rJJ5Qm7 "7/ sJ4 ?djOnMG\E2WQɶǺfP'}C PI<(BmX' .~{(,eT-J$E&c?Yzx(VED]Ů ?QQ|>%[RhK: b}u7YY&dW"KS% ֖tJIzȡkؗ!{av)Xx<KQ߻}XG+z00*C_7j>8L_fИ%;V9X&6՘PӁpc'f3&xО$Ƚysp)և~|ioJ:嬴]:( 7~HO Ց-|quC;̋+ŷˢNo_z$Q4%`jx\aTSPrGIs}¦;bҁG/;Ϧ[0IUƌ?h ["n~/2 #Ŕ胣^x)٢^p6GG?Rp_G@jO``3͢!3UA azh:*\}g؝NA֏>.NPs&5,{V 8P]dweZC[!x4AaX -* 7VYQ/NDl>LzApԍuF),:5CP5NO`ċ!}¼q@zDzN11+7;/KX>_ݑ}7tg~Xkڡ)kҢX59Otا ڡ7K뢉 ȧ\O`)2t&Ym+9c_o6jE:?Hd;2jy# AC&en&9p1D4PYDؗa2qQ9@Ib !s^@YR)01wO[}e-ZJ=) )S2/H{PsZဴu%p#699^V:YqӎP6sDd&ēzn-]_pwi-_Wc-*?1tE**f)W0"ĘaG$ӆ*bҡD+/J1ry\ʧ#i-McelՐ &&H 4O V9tiˤ!o,s eGnvuAoI`:eIň%nQ|d+(.8L!VZes#H]&CI/0ݥa(uw*d/ h!*6=w{ΏVIAG'-kTd(iBSsTX1 TH%{) r8|#VӲyR2?.(:/:%|ڪjM4=cݓ矽F/,_+kJboቭQ'X21Cra1 /{('8-['^.v9p+(AJ&1җ+BgWbˡ/x:6RޭRKc/>7lUC<%}UT738/N%ejʷ 3wD|XSKd /3ʫn<$١<(*(vf[+pI= +}Vؔ__`ކDN.05d, +Թ@Խx-ʠ_^ *7\߿dBijw~AA}A8^LϷS,sU]T1F;Ӱ o7wyCWn KoG GO 2JVƀC>ndy/厉*1GrP?!?/}|V^~ 狱"Pm\4Vf `¦6Fbs3;YI)wu(Samim׻SO\ipP*? oi$騵w#zQMF[o8ctl-#!0:1,QrY`. 4cSOC4Y8'6'V娌j(itt|N $͊3GuiUAw:TNU@'cͩvH?&݈@hKףZTU8ުHz";e^YY,De!¶#S]ܸ<2 2cSRD*5sd<8:V+f(Ip"n!1RQCͻ]QG@hHd6\˩-'ԴS}>}j`zj"tDMqŞOcJm*P?`83n6f4Y:49D~xR]HgaF% &QKM?i_bXU?X~폇%vdC'S,87]!pe7?1_m_̑G.\F؅/ZJ U6IY<ܥ@t̓w@ 9)3v8Tq:p*&4tl UZ@{s{y0뎱t?^2Ϋȿ/yr8[Շ~rJYI]:AL <5ꝥ9^kbSTZMTw7|ݮ{?Y_koNA~b>_[sʵjqmk?.^Q`wp.ǁ>Ij,&tZ,JCF,\Cf,< 4Yb󃇈'冧ˁZ>u6~:.S= l>!u #Xd+HvOV(3U>ГJ;Fcdubi+Ql0ZSYqv@k O ){FكUnU"Mw@XHNGÕDh&-w\ELBF3~'e2m=NV7{yiikpЛ7cۼ9yvNZ儝 ;)IHnHT-l2>^<"Ƿ@Wnj)Jy䅁8s߶rc2}KNz&s@bxVc(q K(DgS)žz90/,sJg/DKRNji<<=8Вԥ@>WP'%D EXH?DpI h/Sx7+0⦠Sʂ ?~`p/tJ;^HZ.(U [~ρ4)$L:8? *?S< ޼~>/6}46ь0uwR6 *˩X/ބreNk~) (r[g2hH oܻ oU\/^ӆӢX}edUnv!AAdm83cػ{vcخ?,}<{'777q TUUR*RԴ QUPDiZĿ|}3N1Hys=sν\L][EUCİn=Tn)*B@rVoջ*fLX uԒDWG$Ң2 }ߒYPӼLoF3%G1Qf9S5f5+Y\"ORjp[GrdYOj@j%GQ)|;ġzfEGrx4Ju'Gm+ F3GtWIJMNw k@ & 9W2x}s 9t9Se@#둡5j9:ȣb_>}GNE/ֶ hUnZ#ckuizȞ8QB4`z2$,* -PhVu;9>13Ca|U<CYTe?ngj(ƨtM72gFfƠLJl#@ʘ6rIݐr ]p _ 7uW, t9qX&-->6o?^^Z-}{ on8ig =oF{i Sa Nk#P}XQPV^X([ْu^ _yr sX2i}C&̐չ >g04CyI·ؙ[\SL^ $q1̳nqf v$@NFҒUַ`Wp~Gb8LZ-ڃZ]P8n=LB ِZa v:p,2-38TԐ M5#Q͊gmݛVMjN{sj: +_48 MA<=M>bet7Q۾LkyBwMN.WpG?s}`Bz?4&/NNLMk/Mч9N N.bc~iq} حJӱuv&5 1=1p"5VI-:{áލr՞زWD![[έ,ۺnqG?%g9.ָykXac|Hɵ{,q'}$|!<-Ff6=oyV>Ԧl:bq:*bdU,EL2c.۹Z 9n Gyj-Ζϔza,SP dlƗ:VV;tLoÒ}T,;N?a`g?3e1֝JF_P~!/zqͰ>̺@XxYz#D0'rSeaȪ/;iYQKs4a_]\^W~&:qZ_W87P3T-I^Uߥ0.v:%b]$Q6B3VsI|xmK [t9z=ŻNdYioh\τꠟ:u^D\.Tƴ xn~RY-B8{Z]/!#eu ɁqKZi4j=bހɫL ݮ;VvCQKř0 *[Yc{ fbrD1` rIQwՄ~Z*lyTSg-O[I+f#Dm\ py~@-_.˖D,O}h]mcn$AJĐ[Z* Yzm {-i,dXFlgK8Ơ x;YF4io05: a  !9z!XȽ#Ĭn!u+ *(7ˑGguKtC촺E$ˈnv$ = Jaİa5,,+\tl pȁ߁\I5$Kw&C>c8:h?h(pwzlX!ji hI=Ǐ(_1֟ڬ~UE]S$#.V 8+A?E= !x!B9JT"dk$6s҅Rd86 !^cn m[,6x3klK+? ? R c}*&欶{ Խ;r@]({BLv.פ.L0"D΍_,kNéxSJמ֙r|&exl[oԻuKgiTiK{N@\,N&KEr^WEІڒN ZHrSz$cz]6 1 :L Y~_+ ũ4h'RqVgi1%tTvG0}eVUWQpujWt̏ K.Ƃ6\ ,T3yrsH|(`$ڶ ` e=@]맡N*^ , hBMF!?@I9OUڃ1u!-[*g>c,b8Fߍ`+fƭ@"4yc_}\ZT}h?%Y{UyG*_v7g8+܄3|mFTEj%CzUr@ri_ܚ2qȊ/(/>b^Fz5vYi@IZ=zËxJ۩UZ:-mX WP*OB\aPQZ'W;舴 .{{ۉz+Bt bI7X'7牎;4G-*s&S#">K(ii[ꯈ7xdB'ߎwa1bj"gpH,`aiWE[Ns&y~.@RJ<1WPB {H l>i,q0oe[s /CykxI+:r\Pb2Zp:P 3rh"hbU`?' !j% J]FRynyso8\PH+Mo(T)5][\B5ź>jOk$JԺ\b> C Sۀ$#(@ h%P+8FHvDD3x8[37PJ\WgwZsENh&p[- @1- O%"LhNI2s$^r'iCO.;奫OߧSWR=+k~=(IͦfWG3$$`{*{YhM,yG>c~ xク~_^ =${HK~o!wky|(/A(> 559֨Vowq05YѾ?ŲIJ`w_q _x_4?SgNx+>r63ǯA//"TC &M?Gw?;/uO N|ƽ_|⻯OT>g;>|{ۃy'^6o?}_}so\'4BRJ?Jyo&:/ BgA]?-JU0 f1C w~;!_UU7e _iU?N7?%?%y m)l7}IK+>W%_qч/$ݯ /W3_Nm8vS`60@ b#⏧bDq!b`_ؽ".AY:&ZLO54Ի,^2MNE8h6(!oTJ G jh^J>;KoOVmTM3_OlC ]bR8mK.@q` w)COmǫVڎV7f([Ț'-̂ߵzG*n%l6as g9xq)6WdCvJSM]I{\Ku\Aa8qQ9taWc{-GTf 5ό{3)j݅1Q,Msmx>؊?l$i&P>K b[,ŦM TZJJi&Th3bq̩ߜnusX:)~}:dЉyGrMB9s<9ys=jدX0[LaL0$>w5[Zjnđ,wmNôRzsmgFȤ'W/%"[eex ?N/g2D-ϔ>U-iu2f^>&߷2| d2|%>]Pϐ3e>(?#Ûddx ?R?"7>K?.g2| /dh ?Z72>uXHW ͚~$ M & MFgTф^ pX%<a5"Ѵ؀0@/5) l#Fqh:k.h2U~a4R0ȀFhf?0€@F8~6$'}_DO{"'gvsHgzKXOF0músn'ɬXX+)vl6bK(˰E kTaþI/%؃ <`ҏ<H& ? ooo=Ok7ݝoh@~G^OwwjL/zgrwj Vb:Bvh.BOֺ;9- N4>Ny?t.@@桔1U466&lghH ]Aw ~1'̧ڶM<ߙ/zzfpu-υgǔ|@;)9f9Jy b}ʌF7'3R'ĿW!E2O?®ϑ'$ʖVюX^w?-GDO72vB*OUGyWiokѻLe@tgu6.*Gzirqt~* >9ڙ96E<+.o?rCpŕ-G҈԰[UNB.gxRC:BtBQvX$ow Rȼ[_L>Wm*Վlp!^8³a0P ᤟#chtC?<14C|e@$qX >*&>F[WO<_GOǴ*8|{~_cth00!(\,2}'(C>'@OQu #'H@TAǁ^0йʱQ#Џ@0s]852hQӒo>x3n1:: 6K؆gca]!t=>,OӾ8!gM}쮓Gh.#zZ@慦}m`{OoۢA}\ fA׳ё=6^#z2ua^R;<"cь^GA9AFwwд_qy 2ɲdfSL]GuH/즱:AMhKAjǵfWN{{vXlǩ|Ba9ɈdG>zO̾\#G"t<40gmBY4 'Ƅie~3`T``N@*lԗ{Ÿ:j<q.gvv@v;q.G-IL̞st]8msk;[Mך;^WױF5C !1di;+w/ wc/@So}$2(P7p=x`?a`G`\w8y%oG0: Mç!+"P59ژor1̒Q72wybdmҍ+BI5ObUc`Lu2 AuI{z D;:G{a#.,jB{~S'Z1{ߓ tw eꜣ&jqD` )ć |KTpQXᗆ^pw{ =jAL"GjA X!u"0nX |]Ι>6\:s'Ԇ͓7 6dB:ݶx{ `]8]﷼;408:4czhF^-hpNs-6!h{}zP| B<π2:arcl螾 n=/a8㡃qB=րkdhh6 ްL7q^qFoy(i쉗;4[ԩ[dkD0:2#A~-ϦyGENy`ԻR>!~vT:3uNmnG7@8~7 eP:]g ף١|Z qJ4cig*- +:eH!$#&q*RU0OY^%3h(bK{n-oJޟb/Q2S3Jbs;c.a=Nr;XߋU?Yy.dUmdFܻ{?s1s_e_{#m;W1{+sTp3ܻۘm~?b}+tr.eD>͐i4G^3jt_|ib$)Z^VPX4 9ksΛ_RGYӵp۳xriՕ˪k_u׬]}oMZ}C㺦ַlh }=ظi7ܸeov-ۻnmۻw켣wם_~=~߹}{G?ɃOپ?cx{>̳_/x_y?;w{o||O -*/+YU.ϗf.mf$벆z]9͢՜ZN8VN4~ſ#ӥ(Iנk_tѤ΀Z] G,qn`~ ^/ݓu"/ <1/^ 2:H%j)EPI9x,3#azf4)$EO3' i1NI'"i pif0/AC'e0UZBSMEj -RNx/C^g9$p{RNLZm|NԙAԙ%4: $/ 6 |F:fS\X*u9nQ3//wUW3fٲ?dQ@['5( ʭ}";=@R&d[m [p#S:赴|^Hj.s2hڪgȒ,,Qwlh+kEh$ Y_Mj^h4_P>zdc] x ur {>H~I*T4ENk w+@c @@$' ؖtlpi+֡\gd>t X7y?e U9{R6?=jf`aWܹX2|E,ff IW<|}T4(,KFsF5kIfPŽ79Pb$8g|j(5]Y/&fm6{Dne({C1*uz_aVb3k+gnsKלzFm.v6qM(j eB)ZQD-lTlo~ԅ&suZꐐZB$ dh|\ `QC\koAB?NQ=u64!@Pޔ cp5XkqAͭhڵ8DcL䏡e^y[VD`591*zQ"T,~\ K*z g3EEk'< C|_V+>.KӺ KqEY|_z@Xx|[>/V{<>W6SɯQNvFBb_d>q1SvU|<}j N!vM&%VŗX|oS)Ǐ~g^FUbV½?QبW˿WP?~q~*~|& WEN*RR u},>3v㧢WWes1oT,ujbz5@ˎǏEa~V>\P!0CJVyT ]U|~ފ;Sٿw2GX~ϟXx^!M'S$>p:Q|/;MWӎIH1u T^$ιԽIUԴ3,oA(n0{/ *DS5Qyſz)M5 S8#iI&߹-ڟ+h?ǟE~UߥǟFxsRGF#%h?gE%>;/(9  ?:>+\QA}NŏQ$x(/N$ ~B?1GkjN{IJULb]Ecz:06d8ۙf<bMUٓDt)LIono,o}$ ҽHTrN .t*- Gr߰?Htz1u7ϩEL|^\oc|3 /sR|SIM$7&N_ߢI|VMw$s_Ih&okTh&Nך_M|5I[ϱOGK|& 7ZT]stQwRmI%>$?UI_?$.'t8 r||I :p;f2S]N hq ֵֵꢯc//U\<[_sf@Y߱a<WZQB RGSI"n"2׷tjWQui>yko)C!++rAvj#=T~IFzs$Oũ/; SHʳ>0+3I L~ħʩ 1wgh*$Ka?TYkHtD΄ǮFee' 1vЖPtȧ?uaEcǻ-%<֚p{`Pb'~O*7 I3kl?3m_JoMT, ibkADeXѰ v)6rpT E؀!J q*+ $mxaLQ˕f^;tוSD:Jqi w,/|Dw;םyk7C*pafwG$QJvHE`h\vޟ7@(c^p 'G"I6Z |@m' TrH I#Re= @P4!AC8dnX1R?2&Zr4X!`%_5fnΫr(?nе +" ʹ?OΔAyƂ< {`D% 2|Fedi M:2G\ Mo8  إ)S$BI E< $` d3h($25œfrT ٤ժ<[0F^,5Rj(liEjX&]z$YEV οߥ8OPri ;^=sye0 Ҹ ?L y 6IG'iD@H@b髗.sH[[2ȟw;3?> =ASTC#vLÉVOp<ȞNFF4|8Acyg9,  mKV &AV2d&l B?IJɕmXIILS()11%Ÿ%7M?%k=OJgJ0pEEVYXiuPfg: 3NK %y>+}U2{x$R|(AKjڎF\V<6R jT>.\TZ[RR1MZ0JOZ9 t>pI:&D&. ((2r]Z^>d̋ {ozo㑯׷4U'N#Y`1j|d@Z,m=- k}B˼2kVq:uLbi:&> .TS$ i\RKJ SzLN"JVjt /iYjrw*VYI{S"D$;3n"Kג)'?0K$SRnW\⦽͊˳?YV!F2&E͓!iFJY 1nIQ$@H[ 8E~$aP-eTΑ\p,=>Q\' ^+ ^\+ Fh_J ˾DkPJg"͓/,T1yQc`OvȐ {"TF9N/\*Ys#"ÕK+y*KLyEcp .!P(+5Fɚ^ 1'J|+MЦŋGS$քuV7mJIFmy5(U@ږD"Z m_?1f7s-/}㹠{N wꃉj+_ZQ.Ey Ò1a`0kުm: u!ӹaU] pԔ11H I)) IT֢dAx)!ymj5Ekrkt|p-Y6:?B&߈[ќ'*QKaaaҠR =y?N%M!2ip]k,b$! ąSOa_:q\NL(7mʫV˖,۲Ȓ2xݵ u__k)Z+m6kZ"()4 kdF{Μ9s̙3g ~`赯kKZk-O՘ǤPN\+$0OY{ҼYC}|Nxh1ֺz@1NQ1냐$mI`sNyG6FbV̢?c R@!c +nlIYDa`DF S>=\[ِØ 5:Yx_ͫ腐!LN2$e(PXdj|d\q]Pڎ5dn2W{@@rx!=zk3ɂ0EÖmD?l}~Nm(D#TqX?sky:ww<'??W"(dL콋u)lnZ_=k]3s w,7,r4T&B+Jv4sZ!Gv34Ƽ)ZƂi,Ȑs7ϨT%+AU%-7&ă-N0:bCv^g t.,ayKhju'M5<\1^+fF+LcnpCc%h>׀-SҀ4Q,Χ[^ HrY]J -4{mRS|:nQ.Ѽ]h룦sS浦*? 5Nj-ҋo|PpMKJt 2=#K;)E ">,f2&S 'V<[ S'ak?q@UM.vcl߮u7`M_mzG\oî{/aU.FSEy;lLA,Jd{9SS Ѫ64-,Ёb^Xk᭵Lf90(k+- s%%-*)1q`XU: g E.(,EP^BX1a - 01a J'Y"Oִ0ai-Zi3UL66W-Sܫk _!bʹƸ0sVY(Ɩj|5(y`]dܵ`3Y\4Id]~_4Ѐ̐:mp0h0k$a^p7nk&3uGg]B㩉>41}YᤝRKD %t⌥a)18C]Çt$[Tt e@vV WPHU34>kV[i&YRSrl.2:c oJB:} K@iPݙ)3 \$gquWL}@+m4qcw M4*l?MdZ9IY`-dWt) O 1akP"{;ЀR1gu[` ăfZӅ`3(y]k!X]2+khWGJUSG.j{R1k-=9t(5zx2<0e%L%n°6TܹasJ'QaQ*ai$3,$prOw mּ~EېV.hc&_~kѬ̬ `?kjL>6~ܜ3gEHKH]Y:3mX %үJERTua )rOoW&_Ez6:MgF.E@efu9:&agxVp,v Pr6Z mXXlfLq5{F&#[ҩY}DZ yAoHjRD+5BDgOR5gG~F?DXó:  {eT_2` ʬae- bhQ;iMJlHWFD`mDKK&k- Bj6lwT2*X lS[RzPX>V6Q%jV̘UЂ%V2XpO:5'/ Wߨxep|5H $|OդEcN/=iMgz>쯊̃8: p`_jX_O--E>FOQ-Id*RK` 5Xɝ4 wlIQx}133J *9$7h)tWQ2wQ)}!UћgDvלY7 MoG˿jкqs*}zP YoTx]|$|Oק ÒF.q 5Cs24VJLojz.dz?4$<`Xc L):lLiW_ P}7na[oxh$o0g#>Z$#n<é#EO !GX#R#OP}jप_Y3k!1ۺ^99?S݃H5088ȜXs)#M>ʀ#h+ś1dĤV5&~|09L\Xć*{nSMSh#XLf|z2Ih,TA7Rb/%+],QTT6 HMnXj"F6cbFrؤBiX'e6. 3tJ=a#)&59ʉC%1qNb:/2e$c,Mv0hː|e^%XJF }MnVcVS6b.PDWNnY >% \ʨ2|Eo(?6wYyd$+!.oe\Z~ۢ,46( Vn}Nֳ*. WˆcO:ghC,~,)JRTsYX݆* -jO"XUh?Ra%g2dE^{RDD^tjT֦tt\Mwf8KPa"ANTp4\\LH4e L2ȅMϝTzNGgEohAwHE[X^Se(eMFT,fXTe{EaZå#?ˡ]f|FÖ[:l8`4¢!HGVPœJ\7``޽{)ftjh1q"B`ZH M \q#n3HQ<⢕ӄCc -rCD53bf`hRNC-RC2o4W[ CCdD._Q/k'qPach$Tlf u[ Xi6dغ%P<^T+0)Qj4sfD:;;4 t?6߾*޿ڟuϽjPR)p(ڧB~:(92"VZmsftmf}4mx[N2ɭ<0Ȇ>-qZ}%kś+B^.֨e%#eX{|1t_vmً-Q9$R [eYSt{.n'ݜ56#ַ>]u@t0h*أGkTW׀5 Q\k8- JL(m9gxX#9/@ u3left9_6Ԓ֓ ("wPKq-VŭQ}N߳>辯Iw$;Tm@8ptP[foF+nC%1}J".!jݲbXU7I=_^ׇ%kKrewdniFpWd1.xØ+-5iSRmd[?|_i<ՄUMON( Z H#V]uyZF⢊K!fC0;oia.F ʉՖ8gW7}51gV+jQ#c}xXޕnG\K`G` Ht˧[ G1"4q˨Mݶ4":qtekB]N&9TmLW$cgNg@E 7씷v`u) ֍WLd@/m_ l˩avMv!0^kQ#"΢8+΍EDN GOYOQ'ۇ~o||rmq|ÄNjx7FT-B#qj+XŵOK<+$mnhS"( vYwK m pbA3gԊ)s0sń1d\#,◩mXG5z^ 1(>K-:zz trWoX&h]1p%!oe-@wS8z6M#oTVr:ofȴy)0 o!jU,lf*f3ltwE2MIQUE By8 =2_5~DN`NM8m}ZZ4cW H{Zh{QBKؓhirܬRvii 5!߫ c?zx罗Wi8DQW+BnQe,L 7_a.VLñEK籄џ}7pŐ 킣xXB/${%;+fVXٷ(kqFp?& 1Jx֭:rhC҇+p4=+]Iܴ*g8:$8L Xvf7*%Y{YvH1 y"]=D*ukz"5y5͓CN\B{b5m*;lRpn'^j1v."ռÉ&Q-O'>q̵ KJf( MI vCD::S aİ4Pj̝2+{ &!t! ^r16xl59f-[Z활?;(2HNF}[;p;ݰE HT&;=֩eD 12D110EK Ŕ-LxPeMd$:W_Vy XQ9^v [}p1*/.R:OF45 11n͙4#T?6AXђ6'+X҂yf8Nz0H5f=+cEY'v+p/ƾK0hZ}m*»Bnc?>nplQP z"]BzVKڪxmQ""43?o@@E&3îU{'K\O+潶^˞l)5#']y*B̖r;NچRæU*cn)im.r ۶@m{ 陿2 v4? wM][k Gmee/ժm[ ӭ?RPZޑOs'0ZbwzW>+mv֙ܕΒNC3KE@h/\q%~Bnayp0nrEx??{uU!Z("oo-5g(e= ޷`r Kk1<./< 2U wtulomgGYuwKE"KS&A`KMcT@nqt].\l$%peC˩*d[V&-X2k"@k"|4X}`5+OP-Զۇni[Wn/ěIւe[-P]BUDVA@dQ!O볥yak9Em(|hزO 9H';55L$flњlh|??VED>K:YhVH;9hr݇2E-ٚ40G/F{3kL/A &{O$3 o3+X*7)`lc1heU6'魈oD`6:/&G5)`oREo2"6LhI8oYk*d8r2G)7 Øj67St%5~N`jEYљx.c1aL< 7hi\eɍO=4Eݙ+ٹ+'7AF1.o93<@wg3j mR n|#Nܓ|JUC T'dWffI& iNwqVh04:؜HlklN}jW !عS" \1 rp7U&{;jm|o< m58NyH,luup; MŀLq]kķR$a835H6+jlTw8l;PdGŕ(gYF8 4hB#H%ڑy6Y$?Im+#!+oE߉lZ**Ŋ%BrCJ1 _ڙU MLbu_/) i{2T d>S9!*>{belt9:V b͜˜$z(#R*E]Aė$:S+30/a 4*7#X7}SSŭSxik ycπqfMMY9aC Eo[L6k$Ν-m-;CC=LfՌ׊w #%f= ̋8Zx(?S͚PɈvxD7mFbzHkGz ^ZyFZst ~gj[jXS">sշU_mʶq]Y !ma_^疐ܩȸ݅ZΖdk3cSZ^e'.Ө[&ڒLB ('|/3f>xW@5qT*1eb3HCf!jێO>X69m142qӀ/ikWȘ376ٜh/霉+08·c4׬YQ w5 Ʃ"1D) 4mPx@N& Pe|V ICfsz0`X۰p˴t6*X%U]2VՐD&}3> &[T23=O'ߦ]:1b;kwM:RlkM0V4694:p;CNf 6R [BEԿu;ʄ q P!FAZI%J" yBEo8$j!dY.f¸T`9~6?wK=^q吣¨HcnǨ:u@ eXG ˞Qnj{, kƜ/!蠢C N4V/(l6B"<ӑ1DV̐]ԙh{ (fjN3&OY[К9OK q1a=  0~}~|C DIc$>®=CbMFVdڄ 9ʎDd1&n6`j78jXcq%Z_9 jA#ߑFw>w@c,gPtxH3Ļh/0`X@ ud08tw)HI*j'[*q>Sĵ"y|.g,x 40]0dIe2UXRs@T*Ǿ r8qT7{\6uH1cb9O fZ Xh(U3\)6x` SͰ7,tjvwn}PuVK 6+da IVdvPaU^1YT OƐT!o&*ps䴊7`=*nqfvhg9u.--j”>sʭgJ%x§U]v`ڬqj@^_iȲV5I-Hx [OI-5uc0 q$/@4Kh]%v^|khUHHq)!iZl\K s>_7cf'3*ڭu?[<:$k8EɄCER>%O4Dޫt&GK/Ũ8yP=VT$6e'35';Obt®[';QK:zHppqKXB3 ~̖+\9=v4u6"Xn 艞 $^5xڬ.+z.b=6`ZfKQ .`C!lC./#*&ò@3ҴJ=Nci?uJ(sjP1X@SBiTþ@F}s|ZNjN LYw& T!2v{mHC&')3_Sã@4YjT!o=xc㩉 V 0ifqWy؉cD\bS"'ڤ0;'gBܸE2mz&&GpwN]TɃB LY)Hpߊ{ΪI$ƕة#,sg=&zrO)8Ӌ-0S`A}) TmGkg]2 >ud{sʹk3aEIE;C#ᡃ#ؐ"‘Sl"p!}`ɪ85Jگ̅)êѭd7U(X賂4gT5 ҈gFxtaS(L]he3vXB,apgmh) M'&1c6Ûh5vjM; :"C&G'` 1C51X3H|"㝻LRb&M>?FV@6ڂG }|@3]QKsy{rV_e5wHhoJ㋻f_\  v(!ԿxPW0<{ktQ}qB7<FL&^^Ш&Nd^6)mN)JC3=9[kGWs2S ڒ];wtvt#ɶ~Ks4u#)䰯 m<XӉl~D;vuնKC+.,([.,% EHEnNY9[XV|){+ƚYTOҰDjYfyT, K@1v؎$լqt,Z1k!hw#.E NcyELgL3qA2'HuV~6Esǝ$ jC(WikPPt@xtB0 k%$Ϩ'p rg4<8*^i %XhP43Q» h=)40!5juќ%/tF-p?&Ply:0d*i"%1h% YaFLu YDsFchpGݳ dSFݤ$#Ⱦb tO4)ZZbB\|K>@,U!ftƕ"|y5"!'&&SL݌c0B-蝛c,5:҈%؟9"!$OM=6Stb"i4M8qTC-IdC#S|껌:JM>?{RruhT<8kĽPlPG}:=x^g b#pϚ|LzC(s\TS-rĜR6# F0e' G2PᜉdjaJjzO;zDh _\SO TX%j"f ŧ=9ҭG%b:kV?\\$NtO>C3-F1XFy'K"/pywě+68&`kV!4rIs{ИIX<29Afʙ,!:^i[{[O;8 KW? 7lU*\qW2nԙej=&lV? 2Gox|<526yQu|4ן79vlU0i.y2_ʁm`i':+RJֳ0'5-UE|/{s7÷ N1] #_,*7ScV̛9G}B$)pajʐRko59{{pZ ZlGbSͤP:u¬cvPޮJe(df(ذ-.T2hY׻iE2sˠd#aei-Ms6eP RK~Q 8[Lp$ЌW߰3 6gD^%M25-;9EٰV_TRS>`P AdyYx ''Rfx:zc߮4/qge`Xieg̅P rSD}b,7&$x \R9D^琇]`{{BR٠7㦀1vZ[BQXֽ zMϸd ܼǷႺ<;0 l~Z~Q:dW2bQVok@8Ifd )4$ ˷|xX$TjvT\[ cԕq=^,a##j֣ѣuJfm,L_ؿq\n4Ff!"b%fY[G1@=_Cԏm ;T GUD'GNVėU,KSzIjIեe+0dHclLiV3=EgD[vl䮎cF/qDiuh_NQB;eA9I0IJQuhEzG:줯;ptLcyQRQX?3z 浯@rg<̚첛a(yÐe\0$w ɤ\W8&׍JIƮS{n lArGHѰt_d1}-=0^x=ֹ#O&M&P6˜;i vRQHcW|e~p}\5;ṡ|gFP$3cip&/Y0eaFM_$TlĻW\.ڮQO~9W {7]XԲë`MDj& lkv7ڈ_l Y;tؕs͚;vG#Ia;;%6kn{ҝ ;ک>n.Iu줿ϝv];.*JݑvKF~Nl ʾ;;vpu9ڜvPԮwGURlIuNfg ٩tPQF1c١Z_ilﰡRWZ9>RLf2JԜv@:;$z͡d.$)DɶVvLl:Z)KkS4P2i)lVDƮ8ZAVn.C;qD; Hw&.O ]NyNΤ ttiYxJ컴E- Bu.s7ijd<%6)3gBY01XSC.]@S{&\`wKk.iQX'&<(D`,xzmG>t~ׯ)௴x4N۔RPWNo lV))|Ma4_ ,lkgu y RN^ewРPN^8e r0N^[[@ΰqٽ~6vthYvqrv"9,,Z[.Ygٛ oHb8 !G ",Yv$p%MH@k@# ,woD"gQNY&D(9+DJ&,JNXR9DR'4E8 mI#BךԞl%`,:Z$A$S(qr3wrTYeZtR;D2aI\`pyRHT9.g>vwjM;shEic/BGW?>5vy~W`]vDz~:@xMQv_/| KNA^& 9eA;@zǵv::𽡳wm//Tgh;lg_u9^mE3lR2f/WAke^2cK\\-TQrPKq%{ [ԲdpW^~ .EB?jË0v:a&/6,-9,7٩YKp#<+ˢ"vA~t) %qvxZ@S[ֲbg `2VUlY\ɕ4-ب'K{%4-<[Es59'7K"Zѕ-Ie@ѝcm'*&:Mu\zVMKUhT̜fw~1yX#v}/wcIWeZq{ܞqjf:1$'i B٬u׹=P߰=t ?zPjdR%wr|MOL{##CAݝ]\ bު栅qbXl"?ݪSi!Xǿ@h_|xaR<.'ɉH䋕d'cH?Dd|sMs*و7(&>OqE?^4vn6PE 䅃obo%w]-ύSEbԿ sxL]Yи+efzj*&Yd?2E`V=n&F7)ȠZ8}5 sVΠD샄|)ũyXoofN3p^ԠC#]ežF1zY]}ٔ- T]9"S.5ɜ7gK pE{ 63kJ$Gր2/fp&42s%Ae#iӨij` 8n5򴝁wZ s7>/U+'@2OHdv<.ؼIyGEwmGr]X^No >`$YF7nDf^jD5o<ϢxpKRE\FBw37cp9U]*woEiUr k]==4=<>N]< s[x3UL\k!`lQ>Ɋ9YU"W9t9=pi5&q̙FOdW~Y!p.qmTm̘^=Px?)m1"B%Os譿D1=<),3kPVDL 9;'Y:?-: #Q9U(-c6;(w9 8 5]Z@~U]pѪ#n> 9&MKԦ)ȎohaiS@xf=9 "FAq=U/Q=F*Z%d}JmIlŒWK-:րU.) |Qu,r=D)8u_khrα?I%M\go.JzC`0ܭpG*m0-jR\))pk6ݚ6iDu@'JgK֝8ʕ|c?}a;fSK2qR$`vCb{D>tAl(M(kV[gy>=s 4lMQ۷S(O+x[CxϢG pZ/I,)7ezࠂQgnPu\B'6dOĺ6md[ReⰆuOpOh,7ܲ[6#;|vh4[WN_;U0ŕ+LG:PдW U>vJوѡ8ͱQ"ZzҴo <9;7Є}Yfޤ+{ۢ# 3#v:އ{H/HRn^"؍*+gP(ceSe"ZMa/(y~t#%ߡ|ܼˊ)vHhMӥbDYMr"H>xHYelQquNq3^]9lؽ2뙊QBlhkXW6=ը4"|XD2]3 XOɈ;AT֟XL : D BK(PQt|Pe|-T@$Z3"7SX,ZdH 63^b3I҇'cseC94qg2n&ՇUD%&E7`d: %|jErVzҵYPKݢVMn'W4H(thgrK%$'!Z/Q"` (c؄LM='&4 JQTboT;Y)8Yt59eLm2i LunK-xz4 Ӱv,ET$]vs2%9PU {P3'<jń-?Hx$#~mc"R>{#g%8el{^,Eth \dے bNy+9!IѢ\\<Ůbw1mXf&DI(,!yv#/x᪌.M{DVGRbEa"w-xM{\▉cwg1SU҉]<ںŅ+Ӟƶi'e` rZi }%SE1˾/S*:Nɳ'Η c3ѭ TuS*nGejJb&i=&oTШЭ+*y/śAb[Udmq]`1Je1~.:XS:^!2DVWLǫ4'41x@iJv%S΃ |<+!8!ngAF;JIJ*`y!Q4 B/Ѯ3f#u}ZYdwsy 5>Cr-6׷XA*!EL^S R*Eh5J/a(^(vQ14mHV3g"s0lLP'W.w@YY?[>'M] Kot,cYs5Fg ~wΎGpꝶtnm 9Ɏ\nѭp:F]ΈĄ##ri^DQ`)}B豑mh93Kji1 |fQ̅U5SY]I 1 gU& }wԎAVes7~7,| !L{Qj$n8}g*l]*l ]iyH,}O5-9WL)\wf7?g"WIoFu]lrTt+9&)^ 9 oH `o5Tylb/xltƦgABY&^ x!//+m.d00dVhQnX+$ch'nyJd'ʕ$: ԰b z5^%cܴL $(C#*g;y9 7$8"ň˕(u5jYR"WYȺ ȸ1Pp*tk851IFb=S !_GMD)v_ܫ#P@{;Db{CS;eX]Yڂ@JklIvM@A9/Rzgr,9u+Lj7{l"*tO^?l| YM89{S"!@อR^ Ƹ?D*ە#J:jwەvECA-)g5#䈲 [JtU<- RI{;Yq+FHz lV!9$FWQKټuki~q׬t#P:p֐ڇq =>@p*)=uE5=x\gQh%iUh:-RZ{Tȼp#fP;$N7*s[F ٍRt=5I>@_d5in: w2PӋj(yh##QmsVgR.U1 'qSX9ǣ )Exm>KݴvZG7&RXt*9;!MK9V9rTrYㆾ` P樤̢E c*E5́|-A߻xҴjc4/idtdfȬ&4V oZ抐#rɎeJ"oEؽZ1 Q~lܴ/ۺ)C){UB, oMv%hmosmQ7Dz'M 2yNE } _fޟ_1٫W}G{ήVgYuܜq;M,&\!?͘˗YF֎S to$i6]"ٍ%\."V@u8TΪrlZ| ̾"*3imQGބ$_>&A٠D(ANg b|ўf_ta` '%sWCy/- U0sVA ;ӋBf3gBӪM_.X)d79 %תH2`soKfQ?iyIPked!*W>V/+|ȍ#*+h1e$2.R+,]8(fуtlh870sMs8&jC\Mc5z)'f!LSquseZWϦ9hmD@{`A4gfl8_]<׭,И?ªzd3|`/xC7rnFUWR !'\a RS1,{c =)mpImR6^ scWYilI`OZi<U1GCÛyvܨ1֏rȁѴ&G&=A wE1~0n32,? naZn:Kg]lÏ+;}9i3F4m>ɸN8whQƒ:*o9 Ru0i,VCf)3wrNGkS UN:BD߃"z5BJMN1ϯ1udrqxxdzoOe#UӴG3XfpeqcP/40h1!Zi,z435*% Æ7æ: \c%h{;UTY6Z#T9cڊ007m<w-[w5^oV9oxAj_ހ_,2!LtQq`Th[`@@ɕʸ׼<|f6 f-卌܄UaiM- @Bh"Asgo.)(qyޝ|lH\=v"4U{ 61aod ? *7:]-o>I ȑ#le&/cX| ͭ;C@Sގ,nl 6*fc[wK䚇xޤ 31r(@|rE.Y+:/- Ao==S*-҉B$%d(W8UN2j}tSG=*" kBKgE[ohU9]Eh2.6"wk;q7Ũ[i6l1OLhk \``L"A] dknmٳV;$ѷ-x^|5ę } M 2fW^D[J_PJw[P1r{gYI4qst>n@]jEwLm٠ VvʤV倗@ot^ _3Ymy7 P6<~h" ˚)}۝,mB2Q* 9SVyͲ. e(F/1},7l% osMJ qUB nHki aݸ"feJGCtڤ @숴Ӌs7:tMsF*@f@cyޮ6O!pɏ,pǝC?郍AD3\qmR2Y 1YLʃE:/5Mb+ ͌xROm 6ep iv*ޓg`qϡs\ۉQˉ_n5I)QsX5@{g}RlHFG&&éC J;9!bU yɟ,DB^ _-ɱF>R NbBBF9!#?I7KE7qtDaCαpl&K"U# Srq} lM5$5Tps1'TPFTXCt2))ؽ% -yٕa7ʚʲBҲ]mEܥy .c W^3e7fjۜ 6{Zfac@ t#1hT?.>0:*J{b |#DmԆCW\{y{b"銟2V˥PKER8c&dޡ=Do+b yX ԴeJh224ƍgUpwITC6O67h=*]uAw# Z똘ɦeOȩ$9cFoJiFe8]Uڥ}C($Z.|jԂ~p#쫠[X EE\e/tl'PQ4yo7ANsrn 6:읐E'ҽ-(#K<? é4qATWd\ib[doY]mcm>9A1-Ik H|Kn~ ćOD@<.P0;_.= u<!6NM5۶%:-Jnk3]v55<R:aJ^YE DsN& 8(# u=:I9xSC}dcc,[e閷 {"jLКh&!nj̅GVOu*ʚz2|Q4X;D~/$]8?B|ZB!g2 #y|m?ʸK TZyX n:F3q{v ŭw^ב>`fhLAUGD0bo*RUn/1!j7Dq+Chp׎!($hO5y%/G5:l F9c~;]HEVHk`:^+-ʽ|LvmiI@Z4Cn3HϨ鴨`?c?Z{Ú[_as gB% m;i `1ZSy]fǻWf3s*\Zɑ`ڋjccnl=)V5.[䣠':eT+̻ʩcu1T 2~Xlbm\&~e#?:,ЁTōY#}%.fЬde˫w;նɳ͌S֎8myU $E2)dU⇽DP=&]rWD>Bgrn\wXcjM]Xr:2#F$٫t t]t9ʏv;sj˘&$Nw}/nD@! X,@m_q`&WV9xjS,WJ̼!NTeOUqڑ!g&W3Pz2$Uɷ@?%Ka* a)Aq0~xҢqHSKU:zѓE&]5O2Wу}E"E/EޯtS[0zlD@֧oCA@lU@Rr1[RZZ4N&ALҤkbAiL Ð3qػ[ \ Gt!9֫ZQ*{_/kmށYtL&'R,1oPS7+2qo3u;0Vl3Jde_„dz S P: )i *4W q\|Y5 2vA$ȋ`1&&\- |.ia8uC߳A-Cx lkve KEj+M@J,G.k:A4"z$KnӉ_N}[6w U+ashEx.>tУi` aĠ 4@ ։庖QЀyW#s}ؚ>+vͥGvwYr&Z|&6<˺Nzյ.W,qmp z=NPC,ZaM1df՘3خ҃\D`ЍKq Ǎ%9M1VYfHDF6m*}2SG&SÁ#dxf% `E~oܯҏ_<^:wvuz?zV~r)]uoTwbiqq)yTlsf$l dTsfѴΔg 3ҙ̙ֈl6:2SGP|(52^'&A:2dF8Tht0Ͷ Wh߀ Cr|cctxxv*Jv.xUL2iR d'*UYݏС)7jɏQozy[0P‹-}r|N{Z,5}W7!Z4 Ey\$;e)O0eB{>I8FS4?[3TK(4`Oj 랣*k}lblj1ZZN">)LWa׼8U5Xp#]RZ"(4فDSS3쩩ccMPJ;xtnI,2lUfvi!Y$$肘䮉y[t o}̨.`gaY6iCSiӫ@xtY9izG=5tGm<݈SKZ%uk)ݍ\1U=xB! R(Pgġ`5ϡ-5ډKȲcRE([ETLAE..ngZ:Јry s]q ,^^BԱ'u=q' "̀TѢ?y{!F~{"3WɧI#y%lJ՘ф$tLuMobZm17mwLzH)Z܊ʖ38l51Ȁ*CzsZUGwmv\ zv'ʳ,}GAqofCg thy1@,VHVti ۭ\  #({WE)zX!Z lR`iSS5B){Ď:5 ZFm1j>]>TW.Y|/Z&!,ވ(u0P T60`X̂-+39)I`ɝn_ [.3" W*E3RX:!zǟwg!FfH|ZqDM8("mE> =o6QIHdـF:C3fA`gfc/1$EFk׶+hastbJV S-p``ƨcwu=C"= 8 ]Lffs0 f%tGYRg &;AFZ,H?N 俶g姥\DujrO"t˂1ؚQK%|1, ogk;oB[JêQB- KMz?בI_FreXJRU0:FYޓ=Yښ<8Hi83R13U6I>z6\E.iY=7҉R63 U5&'S)PY m#c֣uv(X73NnpsNq/|QtMml S[MdqW&=@hn'6lWT kNbg$KWgUA帺n̦8GZu{T.w?`@?OA& ٦n{emo!Z t/{ ݽK%*$k ѽ7힂֩ *m7sOeuѾ;%};# yb{dݫu:gƹ4p>;[@+kt;tlxᜱXRl nZͷ35e5!VԸvDZK5gܘ m`K F>3c*b" 1W0Z9\ѣ_mOL}L-.E$C<s.Er0NX`/q] `t52:ᔑv|^AñgM%#*rȝg'7Iqt; c |B5x1JSHî=<2`EIKO,vFR<-A\PbA뺂GedG$ %ǐFוDžZr$ԧHh§d t'4w+JE>zeD#Ov Hf?M$xI\5S*ә$Mg"Ny%HEs!ci\ A?d!ބ.f^ڦ Eӭ,|Lb d\  4+|fDA<|$W-Qy-,zJxD&4t=9XvFF³4uhzUےl&4k9~VϜ\:֜;|9ϳsKm}}8fl>}*;ڌXE0PC:|l)Fa:9ן42 Іܝ-d,ki*|޷4<͌9|hj/\.MŞcU?*uuG6~OSs6Nl`LI>/E`!^ Hc}d+[ t&' K $%Rp/K:>ֱ tI*ءW| !oat_b,q籛;N-bX@%wT ,Tdh& R:i:ї37yl/=NơıoVh:28:1IЦ^f9Nw@15sŚSg8LeULqJaćƖ8?*s]-S\З`"c}|bXD@M-LMP`7[oڲ;o&D)=rn6\C#LNށ̓-բpĀZ]j%e$;v- vTb6nkb8`N)"&ƀ%(@$U 1l(/y;[v/P[jXȄ[jx}YdUy,s*l^K2R:e4yƋewޣI0O:#iZd\0Y3\-nl" ! 4/9x) E-vKMdglxԊ;L#7~lLncpСͨx0r:_z0ʡjqްh(63&e!SRVwhT6+xM:D&Ji:3 3*JMQSzw[,whuwy-U$lk%#yLVC&y+l4h )-q]rOG\cչYRDd"?:2V[$%l-BF\;.DZ8!C\VQ/cwOˡC-jLj<'1RYEKG[+Т",qaC޵#Jc^;:B~ wاvAR%]FE|0Ւfz' UVԫ ަ. @͐KG,|-ءԱ&cN42;ڨK $R V2=:9H h%<Zh t3KFnL;&GXvoAwsK40nO3Vf%.ߒ|hxĈvL6_WJT=17--n?Xny }@߇u|7Ւrz֍&P3Knd_a!斺Q`?4}`jpԝ-Ѡ$;|L:Dc]Sq2)N%ýfwW7 뒁e[l\ZNVTDoy]I^*[:3d{Eu@R1+&k&AY_3<ԟH]:uy:ZDKJ~vjD1 F&nRhLPhD&buY9בq3G+،x D)"$Dd%]+t&N@W0yCWI`#=E d<{B 1tunE0Kq+f5#@;bgQ,UnC;hIb EW$BjP NjY{$r,/#MMYg un uaf VB!SK䗳EK Ku1"?=\ `xRnhWm 8U%"N1Dt<;iZ|u@*A)*Eޮ"6r c(o*kzb5tUsx ,-~BܰE>L5Zo<tTyU1[*8eHDaq{U AV>OVQEw*5r3`˪A!qr""sR@8^$S,YV٪w*UFќ-gMI乐P'TȄsK1y$UDQg2ylASL유;9߾P|5XkGg_[';z;~ r=}*pD}ׇ~U5UйW^ *z "8;<#]/)zLL ;zzem "?z`}q €9ܭ?{vwu=g?1|"lQnh }q8'dri܆dt{AMLu;[+1ᾩ 5mc5.4 zӌu5^bݶ cum#hMb[54JعВGO%][A ˞+e˾#r'-5>14:rX}>'HxO(let!O &R 0!ns?ߋ_92*@u^9bT< m}0 /R -M)7ٯI "*6YDo PVj'/t"1a$F1\, br+lQ6c-hǁm4Z#sg3/wڤ0Qn =a2+ FatAhn\I ͯ<;!SCh*\+RpzJ9Ze(PFPArMZZtT1&W)u0udodSl臖@y\ŔUo)%[+O9*cTD;qȰ*d+֔h,. }@@)q@M=9 ~2$K%eͽy?ZokooO&Uή$ړϝ=+?oL f=u6ػIWzcu{_WZ{~7rR>׿d\=o]aö=!Ow5.w{B=!տHoJ*/w@ hg쟫9|gcOʽ=n?-􎎖BdکS;w4HXD\Ǹ;8r+|RKx,whW4'vfc8w_ <~wBk~慛7b?7lktvMww޴ڻ o|u?†ֻ={w]k;xˋ]3C1v}үq? 6l NpWᷦԞ< g.[~~߳,$~?gW$owH߅ ~A:{D{~?,CQ}~T~~(~~~? OSO_|rO}=O?ڛ2Ϳ|C/f~7M?vP||Wݿ棷bO^{n3]O:"֗npS/կOopo}ۯL-5]?yw>tk3OԃȮڦ??~_}FZ_73`ȷWۋ^C}>l޺koݟ[??o8c}'r͝'ngμ!n=>[o/O4>1]W_|?1COx/ot^L{ҟ>ٵ|汽w|ſzAKmÿk~Gv}{p!'68}!!pB.8̆_x^pWC i ujerHH!xKm!p~-o _zC/΋nN ?Ro&$BwVHR]pC_RƐq%C_%! i'IHk߆?)_K! ѐ'C) b N z)$u !p,$! I/!?RJH<΅!I Iφ!tB?7ΧB!|0ΛC'B I{iB-~:_wOHBҞW6&La#w[%э$oW^yeS~>e|0]N{;7 8Uy('?|nOSy1K wK;B9]fӂo8g8]?}8[8}Ae? "[s/HqHz9oG8}= 2 K{Q+je_)!醤o~}O+FNBWNOI;?!x; 7_^M_c?o2uUg9]+_/wHzR-># p9t5/nMN|[GE%?8;*|QUzP3 pr/KP_Twc?gc'<}=o'|]n7 DŽo?)V6NW2*9])/8=-t{J9&x^!xP**C3dW=wq ^$b䟐w%Bʣ)Niw{|Ms~IwI:yIoH{Z_KiI[$jeN~HsQN=U{oQt8S}y_ oqJ2INJ&?sRm plK1Yw-O < ,|RK{.,瘬j_V~]<#>$=#z̻Rf%ouHqikΨwJgҍߓz[+^E"}g>&pp?Q7~#8˔|KgE\cӹ;ӳ"tu[NټU5+JԴ07B7u҉)zLyLU+făPUj4$`z oh8|I@i3 ;hhɱSXKeUPjV2J^YmLQm sskN@L€^ݏWtDIDuS aX"&wKȈ.#4j˙|%MRi3^:j9poOXns YGlA'q'ҙr(T؂X"m7rl9󔚝gl.iLf @pb,\oCثFؓߟnK@=';vIT9^J}VKUI<=u:<_oM\ǹ+RpZcwCoഗ/]ޯG56v\̶]cZ---ZǴZ~~i-z-]YKh7jZңZު-}FKZ~~DKs-~>~JKWK[K/hoKKht4_ݠ@KFK_KVKQKDKn?viW'MZSZ7hk/7kZZ~ih/ңZKV-eZN-}Z˵A-F-}LK~DK~\K-}NK^_TK[K1--Z_o߮7hoߥoߣo?oiQ--=ZKoҷk+Zz\KBKoҟZz7t=BZzRK߬i7jZwhQ-}ުwi;Z>-}>wkcZz~DK߭{9-}^i駴>-n-}-_Khou_hjhhkj҇GCZtWcZiOhҟǵ' -z-}RK߬oo -[j;Z>-}JKҏicZ#ZzZK?t=_YKOi%-]vAK߮nޡ{| 9bʹǤRg]ċ];F?w.Ow.?(]|Qxߍ(\߉܋ez%|Gqz|G$Hsq8(sw"\4轂(\Lw*\i|Gf?~ Kލ/{OMzoS~#_AOP?WQkj? O ??7QOOA|BV?߷QH_(czI|ov?߉q?WOާm|o8'~ Q}?S;ކzozo.?wR}#MkOO1O_=z<QQ|~?A|{=Ew?R}O?CzI|O?RN|{Q>Bi|?MczP|~|{7OR S o{NW?AOQ??G>E1? _Gwv8JL .}M_6 6|v`x *T>y< ~ k?d`wm><~@?W2i-cNΕͬ'䧴ʦ49>߹4ҩ}@0[~bp_]\tS'y\m穓c<5]+;A0.ADc}S}^^B`9}+;XYФSמU:x-Ͽg>p+w~g?}z̡Uu+-D |Ջmbz8/˟[)u^ ߇`Ws~/} z}U'<߳o Dvka⇡oPW:b^_np|ቱɡGK??vE+Кo\ `<ЀsW2?O`{}Vڭtǡuߌoֵ?zШۀ=L2{{CD(ئ};Ͳ<2\o /<6 /+0[^>)h aW95Pp~":xz@qrQo0p̅[+|ǡ66ʗ!Zh"=9sx{vSBe}>mX^[HSw~{o\DC!ZxO,3eg[)i !.Xy4S3},W9x7*K寤=#y-ǓOw>70?إ+_toܛ`|Oa g?t-BHmLDزs hoĦ6;B /CcRu|{¹} 礆э#X0pøFGԟS>d?@^S[su0Ao>~euotp+7btlȈs^*> 1true8'Hq%˩ؿðKx[>i6.u~Hjjb_ _2 :S/cNqݐ#XݮK7 fhȆzr F ;Կ-v-K"^f('/Rϧ{s}OFs6|fIC?|oRvZY޸Q pK(=L}\y+{߰WFE_@־{G1n Ex?1AjBSi!Ʈ}l |xzg9'(cùGݺ{/Y?e !1/`3[(>+y .C⃰!*j6RWW(:Rç{U~D jT =]cRJfC׈5]A_@>@W={sݿxgmǞlm/9{i3\$dc Qa`ώc\N-;s|] [..4lGᯡ7@/}\Q_m\WE~|@oɺTh^$F g?. x)d~(b=3W #{ }MhH1.xPq:tE;nLtʢk˾bC(t#m%cZφ4i6_l<3jF}~YB-4G6ڠa|Z+?}xZn2m 1B TҀ 08gz1 0@D3e%$ `#pJp.NNȣ=;~eaIR=oX>D,2 lQu%uV^ao9_ȭEowi|+ȗ˯P[y9E_} wXj×wlBot@CN?y>P-5` Wn^!yMKBa9_<@;9}|Ӄ(+S_f40oP%$ܖ>{Gl/o0Fۯ}kI!}Ж?{oF|?4{L5+yjhyvHÕ W[ Q sϢY [6q!EK9ܟb-!<J#ˇ6߸|ؕة92jhN 4)zܿe 8ظ0f$;qYA<$U ?;sH}Yy J-[Gsז⼺;ߩ?fNxZ?ݸ8|^VMgϻnDWwIaGlh.-sy_*[@+D LJOFQ҃ՖXm&%{]Tlk >@2zLL> Q~5u;Gxsy?(j{ln_* KZ>z oTDGS}\U_? H_\"n?z>Xh@UX]&j+_DN뮱7"6|v/N/"h Z7Rʴ֮q߿vv`B`{~_#jٮij`rdp3*lc)FxQZa'>*sp>샇A|1Vy?xq ֟dno>xv?mP7s"cjtjxt˗A] f'D E%3}K~|VܥKoaX<.._(J!]Kwf ?Q5cFbMC ՟_2Tqh=z,Ҋ'jȫ}zigg}՗ӟ\YGK__~㳎nl$9_^_"G/>}Ʋ^q/>f.{ٜ`T;-e&?+7?<̽ÛPJ. 7J((tDQhEp'JN0 .Achχ?Ӻ:/݂<`VlNl77y_{l?@|MBrxBM:[~򃇓_A}^=o}w_2_Ѝտ5yi'k%07|g07"Ix9WKwFw?7rl0Jgr6<0-ԸܾAج׿c'TWyH2j_|^yWv\x}L`Y/>T71=C; _{5J2XԨM|zp/[泏Vg~:2x |0|>cۨ~sxd@oŠ]<2% ,,[VK.dz h$pC85jz,+%M! N@?K(1C:Ad>]_!{ {;0zñO-y H4/9h[ލ/M@c%{BX߽/lh_ώ{bn(燲>-Ne Nnؒ}yp+17lAE .Ku+=feQY?=`[_7} w f\"KP"8rIi% ,_{q%^˕#ܷ/hm.9zuz-{h/V>ﯟ۰wϗ|_~ɗ O>|^yqT' d_ \z{oP G]:!؍1w?m;K]6x!Gvm)} v-|Z|-yuH7`=)]Vu|~O@&C_k> xuBi8.5"ō.ݞ|S7J~:B~ފhly2˟z얝rwW[&@/]Ka ~Jƹq@vi|u(g6Eht՗|'ƧOp?\o?c=m=7~ ̺NP6^ӷ!kTtq[k]?n?[$r!]/>ϥyjC=O]SݕoC< Qx+pA ME,t5Or[{6Po<'"\З^.XBo}7K+]/zZq*M>1.^sIǮVw.a,usaoѿrnC~xh;s? Bbd=l@o-o:\Su{jտoctw샐Ʀg[O gL}Q@VZ=dY<]A>po5 5-YT~t$ͺj ԟG oZWWŸ|O9}< >$:|޺A@(`>B@ 8W~/ )>²э*EMɉgiA>8{7|N#=0g3slWPzYn}ٖ}𠿥5]%!k^+9C?Eoj7ͩ5/? x&7Hӂ9EYx7ㅝ֢uAi. 厽Z2s1 ijM4_R06svW~li\6%և`r\ү'q&,_k1al)qzq>pEHZ6tϡ \E\O% LeM 8ڙwWAvvla(e۶~-)/l:I4?Avc~}2wj PN5NLKpshYoKqlau2gA 2u\c wNO_AOy[rз-e喼,wX~4Ylݤ wmMq=A._0m :6_MF>9v nmg-r~gr߁rζq=}׹*?og"?߭;.'=)8|II=[MGɷ5O_2w6߉u$2W=J0FxvJxt)O_zZj> Mg9rۨ3/L2۶1%[dRr4!=IR;||ATF?mp 3 {i}U‡,M[sƉűF4ūƎC9gpD=ͪ-6ڂ{?WȽ@/7f ){ G,Ɂ⪷ 1#"`L=›ӊv#EWON#ٳ߲44?hm멚wv ϸJ0D ;s4HsZJgvNF[CYb܌ccSv[أ?XpydZpM8vNtu7~樻5~.ǝŸ\J^U^ ]RnUO_"Vtq9,t2KSMncWSLYmɁiz1wǍED3@Xbگq)`lu uK5Z{&\^ݖbkXq8x1ŴmxDy>ۮN ^:=&YZRW{UG8Sni1w~k/t&z[FNѻwȚ|YmĒDW8\zZE:'zf4z|Tv=g)Di}mݧI|&+ɩ`g _BM4~xz*75#P! q_ 䂆&K9z>aÇh#Eu|}w/wgs"%WJ[H'$~F{O>'Z-t3HIm]$VOܬ|ȬaEfbKH&yL OA_M҆)TFM%9a$ԴF^m~FwR_͌| ylcU}""c0%FGIV2l"aV>IsTH#:eGi|$/혡|03%|Mt,QϋdAʏa8,Rd; i *q ˣa1WYAkF&TJX: ZS"pdNl{`|<_O_iDQt. / ^bU㍽g&rfn}R3rQI{:z:-TL]p#Rd>..dUMߗ#+08ֻk8^pv,|juӘqEZ5ToEӨb}'/5i`"/7dg]ۺks"ڎCs,?T%ᷦ[emJ%Rgf)"!smT[d0,3Jc y}Zh b#p'Gl jߍR^XzȲi6bIe#S@bō x."VM 돆dC86Q~s7G\w^`ɝ]gɽ'ߒ M?YrŴ%9n侔Bb> aW5Y#<;6fVW[x98 G]EETjG.eW Vz^1+fuEh_@ds nI\v3j5˲;ͻo! Xt%4ˬ-MQ6ǝ5%fɖXQQCF3R?JX;O1GJ=ôCqzR7Km{I#ESΖ!{(p/Pxapo|y/44$ӄEf>%l5F^=ѾOOϢ[Mؙ"3|Aǵ5m.6}#VLůL7> |G9'`b-Sɫjz(qXNOrg"/֫檖3Ch*X;K#ҦPNR+I3={Þџ)`j ï`h~-Z4mfiOcRE1^Wϫ}|CUs'Zֽ,*hЭOW!M:9.گuaې'Q8W[jB`kOj yl9QP$P=I66 s:ֆlPk1 `'>A_}\ZH]#Rw#QL!~A"Fk6]#8nr`ut"I^ G)_|WG^ H="'ly@uhp^!{imUȋWX^CD/dKcI}'f9OFU [ l^w?:RIjziE\Mվ&m ϏQ[INP|?IRˌ>U$шu4<3ɒx%\v[?V49]ĸ}~NBٴ}}\ #kc71f6i,=d3{5g34D)4RP Al]ztIݹdHM-/eΆ^gi;C-&m2vfqyMӭfWax/Dž{>;W\g41Gmc!>]_3z'Cult~ aپǶ&EM5^zCw|+N,_Ͼ\V뵲g~(5x_5\<0k^^XЎw@ z$nҶBѝElQbSFg}˛wF[A~wC / g*|g\lԬz/ksQ[`솷cQH"G8 *+M V#q$7|R LMI/Oܶ Ms.ԇ;7x?{%:L]D_?Gh ʏn9w`+硅VbK;^S%;9{vv8o D?)m#*P+¾♮fK=ZفٰQƢytG!`4ZP`_th˃Xk-&5ߐF@,ML$Ef1Y˙alل*.zZz4D10zvTD/1-Vw7cGOOu< qK86ăU;T{8.\~*P/C)Q2Et̻1%CQp; ף}&v^!k,ʖkF(MLi>ԌM 9 -s |2DA1zE7GI|KK)89 cV ?^,QWtEtMͳb)Y iܿEK7z6&:dwfm$AQ>8{tOjdV ږ0O%bIO(v]Rzx1:!O//sd%IA%/VJ"!эÝJ"##) -&[1<4r58>{)-c+{oi l?_S\زzmUsmشϝ\CJ+0+?7(S+{+ f}W\}vtbomyʹمKx&gq)fe>" z8^۹hYf\VՒn"-m74IM$"C}gP}Mr_y8xߑ̵#ŕ+4aҤϐP;Bm4# q!Rѿ2d7Q=iOJ~LAHo Px(kGt#E@+ *$2_S$$Td&鋵3u[>3eH??Xmj#-iι'k^j ~/[ڼ葻bt]=}>)%7=$V"ܣXM 5= q0b: G;Y;LY}HӛvJ}C3 #\|K\war,- EDv_%#WW8_DI=1wu*Ǎ:oy Q_W,Mi_Z+;A5~nWd11[5J/j}ZSTw yD='r`-{0|[ޭ8?a92^+\͏`j꺡]~W"XP^X9CAvRmXϱ}7o˪"eVE)J؜WeBˉKuZ/XS NjrrMwҕڢHƩt-e;hoE=ѧH )K]pK5XS|tlx.wi]zɑd*Șw`1wK 54qAGHXϱ/s~XAe0@D%8:龁Jӻ<+#3u90ϯu g%i`& k[;?LDF6G{ܞ->H-{+V%?_SEfVE^wn]zLC ;o1yc <[颏37ˎv+rb~}@3}6M|_bo۞# =}0z-k.?%㽽7Az#cyVq~tx/!:DbWCv+{ft/}NC=tm5zJԧ-r 99V8txxD[ڏkCZ|@< 秚SW*WZ- <@2Iz:A/T\;[)} XԸGgcA|= z! TG7siiMƍTwibv~%)%4ѫS"ߋvv>G0K[ϣ$oQG#pXMb'~H n){FuA,zHuǥ(R1{c?m}bq:il1n6Js`4S4`qu=BX͈4?ΓUWkwĿ';h Ֆ<*$6 }vKm;_bz_7=L)RNٱ`ɣۺp@*3VSL%݁鸰@a ?wdEۡd{6 )b[!׹:zcm]׳}_H=Ӷ5 }QgrItZ%z?5ӜD6iOyo˛Nuxl݃vxGo`}'$s[d]5ҙgdyMH@ng b>~F1jfNmϹ4/Eぐ+PA=VJ/7AJd)_& _}2lC8f#k7xՁs{Li\$] ׳VlVˍt>_~,>Np?XL̛=QeiLQ -8HmiK,[&cZi)f.D7g{VE~ Rfvm+ik>;P)88šOBkR?Dg|#N05}[}&oګNg WBu{o?F(`-Q@t~ȌݴѹAw@_('ͿuFD۩іmU-pVBhDsq'ڮ%v\¯britHIg:Hz ͕@q=o1wYo ##.jFָA ڣ{ⱓl[dR8"=yv:(Ɋ>Ynzt@Р ;.=/ Z4vom#rLBϹѰbCysќ#+q|+G|AI/0w@oé+U̶Op8 ?f*Fmt26b-g6VVt2z׏Jڅx8aVVls" L8$m[{-H[㝤iҧ DָpUiMweei~N.W r#Njo1DN 蟚]oi;]r>w1:P55.}o-Ђ~޼_g<_JWK׳=kGڨYG& }/ lTwZ%O6Hu4KӝclȚ'+M&Kpbr*M|l&p>UmW&qgn~FF<{z-j?&A[AM8KQK&Iyuq! B3 r_E_qhe0nO(EV2}g_{őbJ:'G9+qz?J\x%,mrO'`:>3{~ ?:-n:hjLDv7,,>i ҈b36=ѵ}b|Pr}q8/I,dš#v99,R"A|C=5O{i~HXր"5Nc}^j7s䍗I]w{RC "'-!+q,$G`7wя.7c-7w7U%'YmmoS BZY!4Bq@jv0ѮDs 1#]d`>f-9$9!:6j,;!}he.T4yuLw㹿4"o\#gT&׈Dm\cʲYBUBQ "\sPo Qxk=vߢf$7`Ofm[wKLH,$ tQgTܡ/TD0Ѭ v_.Th*!g[`}U48Q}۟Y:g8ňs)k^Eqx:2:Jd÷d]>x~j`6鯚26oK;1s%͑+8(+ W{{[*QC_'/sp)[wo+} ~oY|ys7Bf ]@Qgc ᑘw* ]5yRRzxEUꫯ׏ tQpuw?P[YtJ SS} W^UKP}]n =Akz뒪` ԁJ8+G[Kj V9!f DjPu2J3e(D!gYe>nu0huxʱ.P㺨5*o oH~AAyxLZ]frjkgv9sB#!5*Dx* !g\2Pju15J(?SU@N&zЪr77\qV@bZUq,FPI-jJ ˗Ds ;Jb@kSCT[Vl#5Qe sL> 4|K}Z 5婵Zd1<bLe*p'@ڇM;Xz+BBxDR GGsxt74\wX5:Cq%O&P¸nZsjC5;7n/ĄzlRdOܖ-T/WGڻ%/ HY1-єZdk3Vbr^L9}lZѤdv_Ԉ<`-׀P@%9j2A7ֳ̅nj!>*$OS=4)hsUY.p)L99A.\ZB(SeOƣ;A|]ERpXų{Ae~22^_G?dtU:+1U6b bZ_'X=I'.b~_JԠF /O?H{>%X%LM݌T=pb!k幫W^nμ+&gGl~ACVƝZY֜YgQ/ r C&/%S:7vy] vC9KLLYՊx-1xebEtu>]7!]i5K;_6I8,=SC5SAD[n&¯V vuC"kzzr}K_O=w!cf$kW=hB?`XrkpY/a:p`|a&#X, 텿"x96bk!, m*o5Yo-Q&qL+F$p;6Zt+:CT0^: BaRT^ nSq9.OaP' ~~KEF󳪶.wi .~W_ʪ^b_=./!t7 c G( ZbeăfK<e a~ΐ~YqV->6;r)ɡJ%:]yTeVaOǭG7UWE3|Em/UTQGjiY>izGT^^I 'm LeßAx TCSQ]5wB` zh-4@%MYPT9d Y6aF "m%nrqPy 3+uj"BuC8F4,f1ĻUI 훌n0KĥxE}HјC|=iT>q ֗O󗻡U~mL}/|mc%,T + ~I?uc#^A8W*'dhuAlARZ˪omBj ,P@u#[[^v(CMիuF?T]ƎC+Z+} mMkhJhm:ϪX/>Z>э>Z``|N!<-Ŗ_n.jĘ=>M:C<BT'IfH/Z[j<Mu_%&)sltNnc}/kyda)Wy7'{CTTo_fn:Bѥ.j{FL+/+vƨ8 *M. 8ߡ̿DGuv%{Cڥbڷ* Vn Z09KdL2J_E򼼼2Q^G>1|~ޞȩ*1IYO|y|!X񷺌] VV$Sk ĪeR@p6LV%jK.":nbcSq W&2LK[FG֞( ֥*JϲX Q<wCxBhmi;́ žpq,Z 7@x£%l0=bVB­({U9+bN@B'+!^CjBU's K!\tF! AHQ+žnG>݀'0|AX  0 9A ]@^0 H7r;ݯ:>!<aaAX a K:|:z;@AhƾB' >x-V7|xp/A .s4]5]1-2kg3^σ?;{OYөuS3nL!5.Irt>ğ.eZf5LkCZJKfO[fL3#M͋Hyql{CD74+8~B435߀_Oe2E!?`4> vߘ21 3i3s֥2te6t()ƌ.eN"2@W@Ze7[VJi )\Mͩ)g };Xl(u);oRO?|#/X~|N4/J_,S]1H}`j:,ESԜS=BX-o]z[*oW }9x|tz͆>w*mv ! K5逷FԻ.fSBB&K@n^^^^m^ W;6oPtm,Q/RE92͎ ֿa5G& ѕ(̧}1ܩ?NP^! =ۀ,.?o^)kRK2 c+P T8<oӂ :no&oC=yƤ5rjoDh t1h:D5{ 7O*[]6F{6zTR!IoͲ~-xCXxm֭~ 3OOE27;vg>#r3!}]%SS֤B}QW0e,yG,ݤC]Öߐ=H37R$ld(AX+f56EO CLP}{:+rTuQ\~>ץH>&|ؑIV䌔[ Vׁ=!}FfZ5i)OP,`jG\ :}?{MRR7^)xkB~QnaHMښRiF9w|I x'g,,Xc<94G#^XdEĻGDLeb#xpLc{ZG1j5$;2%u`{ 06 pwLY88:Lj~)kzSi+E>XB>_rfM!ͫe;פN[Ґ*q}RtI`+Y'Ncob҅c_bx''[]bgWb1vS/ ~ğv=S7L3xoxs'½Կ'OlAg D^џ[sX)Ecϑ>>BS/H0#(Y/YIډ0=1~9PDA:|2=N~.1q'?p|c" {f^#7Rf+o&wϋé)]i]!xLX3=9) ?.P)itl[]ڋLHp2<<ܝ#c.=g+RN=ϑ# }a;,r8I氜vp 8Wsia_Gp8s5np9v;9'q8rs9|-p?_qaBΟþp9,p1k8Ç9.svsؗNp6.p s0[8~ⰝN9r8I氜vp '{vHgJIMK|Z2-Yqfgswګ}?`࠼C>bdcƎ?64YrŮ)S^2}Y/3y/½[+âZݕ`hˮZb媫W_smCcӚֆk7|˭~dž;{=Ȧ??ǟx򩧟yly~ /moW_պ{{ͷξw{>'>/m_??_?vxlrqhk䩳rF[֜2A+ , zBaE[ꔼZЗgX2(්PPUu٠2*=J%lY-a^,ѱZ݋}D_uA̲ ⁇<< q2OУ*>yd(?x! MHKxj?HхHԨ{3<귤~2<~"fҷpNFgqx1=YW.CzOx^gm9}Co2}Ca@b1ǜcP`pzumLGD`1}!}ӿeHo#q"Njx??|+C/fȿ 8/ jÏv2Asj0XV?ǘLRӧDL?7O}a}c@iIʂ;'SS~VOUO=)qE:84oQO)$xG88|~ٞ(e;]t̿M?]9ImG|as~ 'L? cQZ^pvjm_Y ~L>0\jDf"o4a g?/H~Mk# o|vbsV ^  nE8b?G9$/$yTK|&Y\vS73fx[.yLʁroIc>镖C҄ZYxc<Ë.?6[_O|_ kí} ?d=_ax v^~#otgzb:!)a _pi&q-g&ɷ,YC=ޏ^/_= h?t>g:C'П~.t.ޥSbNGo' NHr& x~Ix]h7m`dq2W˱}I;5g1ӯ jwgvNL'Z,$3~AW0i}I,Ko`:G :;`71|>HBgS!1|gї8W1ϓj$ڧGڱ^tF227Ýcv|.M_$H|.X+i3Ocp;> ?4A>>-1I q鷸_f IW |WKU$n]{%K~Ex}?,;o`[' |y$d+{%6 <-#1gsܿ?/ ܞ>5)7^JCd^Ί$5Iwr YoL# M'軘/8ڱԕmgxRcx)*&{/#~}{\k%C0óߑW~cI%-'/&57NMMum(,p[d ßJҞ||g-?1Lb3zM( L!xKʹݸEf gqp:&b#?\ә5Ư%Ǐ_&$pn0+H߇Wsy'%5^ߚ$&7'1 |& w_/?;.~$\h"}\`d%?. |,eYOF2Gn|b;51y${o;[؏e,+ ?tѾ v,tnGپ&3|DK^:GeNG9}Õ`[\4Cd=iOO`9\/=>Oq?8yЇ|$kI-qbdxur\Wه鼓_/~3g;ÇWс#d#D(BG"CtFFu+&?OWdQ@X;uFZ#:P/n P TÌ|^j]QQ0R$WTu^%F  3B7Bkn"@bx#C:!F!#FȈ# 5^.^ %Z:41Pc !5r#;c!FȐ׭n6B@^QÔ%@Fgzb-@ i}/ eqP)B]ﻲ@H1QԐ@&M&Mir̈́b+;r{=s=@nܩ)% fhVZ_;`ڽOv.T\T4U2=$oHމ'q 0_M#'=&BnrCrŊ/U'ReFP9EETI(tS NjgP S:ġJ2tq*w>OO*eUPHKrhEC6V~"cJ6ړhK۽ͪA^5FMx)y{~BN*%^ cs@mv {+ ?"LUx)ݍm2$: L4?xKZrR6 7ўhr5=pBQ7y8wQq:3GHʣD h(e4F!^/ʫ5rˉ >HI FYJb|Q'M7c%2|$}uKV/Po_HQ&p[˪;ZOrD%Xa's=Ӳvo dk_ڞėn/nv%)^Ys'mH(ӧ:x'V+coRv]3qOU4i [~KpDDJPDZQUnVf^H4JB֩j0%Bwps!Kp,(0A/\EB ڙ녧AI W0X7#|xFFHCC#G 9 g 1D.[O?tZ.boX-"?pGq25p.2N2Ij4Pם~"Ѫ ~yYT:ϕ!8Z9s9zN=Sϩs9zN=Sϩs9zN=Sϩs9zN=Sϩs9z7( grok-1.20110708.1/patterns/0000775000076400007640000000000011603237365013240 5ustar jlsjlsgrok-1.20110708.1/patterns/ruby0000664000076400007640000000022311576274273014151 0ustar jlsjlsRUBY_LOGLEVEL (?:DEBUG|FATAL|ERROR|WARN|INFO) RUBY_LOGGER [DFEWI], \[%{TIMESTAMP_ISO8601} #{POSINT:pid}\] *%{RUBY_LOGLEVEL} -- : %{DATA:message} grok-1.20110708.1/patterns/java0000664000076400007640000000023611576274273014115 0ustar jlsjlsJAVACLASS (?:[a-z-]+\.)[A-Za-z0-9]+ JAVAFILE (?:[A-Za-z0-9_.-]}) JAVASTACKTRACEPART "at %{JAVACLASS:class}\.%{WORD:method}\(%{JAVAFILE:file}:%{NUMBER:line}\) grok-1.20110708.1/patterns/base0000664000076400007640000000747611603237365014113 0ustar jlsjlsUSERNAME [a-zA-Z0-9_-]+ USER %{USERNAME} INT (?:[+-]?(?:[0-9]+)) BASE10NUM (?[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))) NUMBER (?:%{BASE10NUM}) BASE16NUM (? HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT:ZONE} # Shortcuts QS %{QUOTEDSTRING} # Log formats SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}: COMBINEDAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent} grok-1.20110708.1/LICENSE0000664000076400007640000000242111576274273012414 0ustar jlsjls Copyright (c) 2007, Jordan Sissel. 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. 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. grok-1.20110708.1/grok_capture_xdr.c0000664000076400007640000000655711603476310015116 0ustar jlsjls/* * Please do not edit this file. * It was generated using rpcgen. */ #include "grok_capture.h" bool_t xdr_grok_capture (XDR *xdrs, grok_capture *objp) { register int32_t *buf; if (xdrs->x_op == XDR_ENCODE) { if (!xdr_int (xdrs, &objp->name_len)) return FALSE; if (!xdr_string (xdrs, &objp->name, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->subname_len)) return FALSE; if (!xdr_string (xdrs, &objp->subname, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->pattern_len)) return FALSE; if (!xdr_string (xdrs, &objp->pattern, ~0)) return FALSE; buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); if (buf == NULL) { if (!xdr_int (xdrs, &objp->id)) return FALSE; if (!xdr_int (xdrs, &objp->pcre_capture_number)) return FALSE; if (!xdr_int (xdrs, &objp->predicate_lib_len)) return FALSE; } else { IXDR_PUT_LONG(buf, objp->id); IXDR_PUT_LONG(buf, objp->pcre_capture_number); IXDR_PUT_LONG(buf, objp->predicate_lib_len); } if (!xdr_string (xdrs, &objp->predicate_lib, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->predicate_func_name_len)) return FALSE; if (!xdr_string (xdrs, &objp->predicate_func_name, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->extra.extra_val, (u_int *) &objp->extra.extra_len, ~0)) return FALSE; return TRUE; } else if (xdrs->x_op == XDR_DECODE) { if (!xdr_int (xdrs, &objp->name_len)) return FALSE; if (!xdr_string (xdrs, &objp->name, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->subname_len)) return FALSE; if (!xdr_string (xdrs, &objp->subname, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->pattern_len)) return FALSE; if (!xdr_string (xdrs, &objp->pattern, ~0)) return FALSE; buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); if (buf == NULL) { if (!xdr_int (xdrs, &objp->id)) return FALSE; if (!xdr_int (xdrs, &objp->pcre_capture_number)) return FALSE; if (!xdr_int (xdrs, &objp->predicate_lib_len)) return FALSE; } else { objp->id = IXDR_GET_LONG(buf); objp->pcre_capture_number = IXDR_GET_LONG(buf); objp->predicate_lib_len = IXDR_GET_LONG(buf); } if (!xdr_string (xdrs, &objp->predicate_lib, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->predicate_func_name_len)) return FALSE; if (!xdr_string (xdrs, &objp->predicate_func_name, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->extra.extra_val, (u_int *) &objp->extra.extra_len, ~0)) return FALSE; return TRUE; } if (!xdr_int (xdrs, &objp->name_len)) return FALSE; if (!xdr_string (xdrs, &objp->name, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->subname_len)) return FALSE; if (!xdr_string (xdrs, &objp->subname, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->pattern_len)) return FALSE; if (!xdr_string (xdrs, &objp->pattern, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->id)) return FALSE; if (!xdr_int (xdrs, &objp->pcre_capture_number)) return FALSE; if (!xdr_int (xdrs, &objp->predicate_lib_len)) return FALSE; if (!xdr_string (xdrs, &objp->predicate_lib, ~0)) return FALSE; if (!xdr_int (xdrs, &objp->predicate_func_name_len)) return FALSE; if (!xdr_string (xdrs, &objp->predicate_func_name, ~0)) return FALSE; if (!xdr_bytes (xdrs, (char **)&objp->extra.extra_val, (u_int *) &objp->extra.extra_len, ~0)) return FALSE; return TRUE; } grok-1.20110708.1/grok_capture.h0000664000076400007640000000210311603476305014231 0ustar jlsjls#ifndef _GROK_CAPTURE_INTERNAL_H_ #define _GROK_CAPTURE_INTERNAL_H_ #include "grok_capture_xdr.h" #include "grok.h" void grok_capture_init(grok_t *grok, grok_capture *gct); void grok_capture_free(grok_capture *gct); void grok_capture_add(grok_t *grok, const grok_capture *gct); const grok_capture *grok_capture_get_by_id(grok_t *grok, int id); const grok_capture *grok_capture_get_by_name(const grok_t *grok, const char *name); const grok_capture *grok_capture_get_by_subname(const grok_t *grok, const char *subname); const grok_capture *grok_capture_get_by_capture_number(grok_t *grok, int capture_number); void grok_capture_walk_init(const grok_t *grok); const grok_capture *grok_capture_walk_next(const grok_t *grok); int grok_capture_set_extra(grok_t *grok, grok_capture *gct, void *extra); void _grok_capture_encode(grok_capture *gct, char **data_ret, int *size_ret); void _grok_capture_decode(grok_capture *gct, char *data, int size); #endif /* _GROK_CAPTURE_INTERNAL_H_ */ grok-1.20110708.1/grok_match.h0000664000076400007640000000223711576274273013703 0ustar jlsjls/** * @file grok_match.h */ #ifndef _GROK_MATCH_H_ #define _GROK_MATCH_H_ #include "grok_capture_xdr.h" typedef struct grok_match { /** The grok_t instance that generated this match. * This is a pointer to the grok parameter given to grok_exec(). * @see grok_exec() */ const grok_t *grok; /** Pointer to the string matched. * This is a pointer to the text parameter given to grok_exec() * @see grok_exec() */ const char *subject; /** Start position of the match. 0 is beginning of string */ int start; /** End position of match. */ int end; } grok_match_t; const grok_capture * grok_match_get_named_capture(const grok_match_t *gm, const char *name); int grok_match_get_named_substring(const grok_match_t *gm, const char *name, const char **substr, int *len); void grok_match_walk_init(const grok_match_t *gm); int grok_match_walk_next(const grok_match_t *gm, char **name, int *namelen, const char **substr, int *substrlen); void grok_match_walk_end(const grok_match_t *gm); #endif /* _GROK_MATCH_H_ */ grok-1.20110708.1/VERSION0000664000076400007640000000005211605651463012446 0ustar jlsjlsMAJOR="1" RELEASE="20110708" REVISION="1" grok-1.20110708.1/grok_logging.c0000664000076400007640000000215111603476305014212 0ustar jlsjls#include #include #include #include #include "grok.h" #ifndef NOLOGGING inline void _grok_log(int level, int indent, const char *format, ...) { va_list args; FILE *out; out = stderr; va_start(args, format); char *prefix; /* TODO(sissel): use gperf instead of this silly switch */ switch (level) { case LOG_CAPTURE: prefix = "[capture] "; break; case LOG_COMPILE: prefix = "[compile] "; break; case LOG_EXEC: prefix = "[exec] "; break; case LOG_MATCH: prefix = "[match] "; break; case LOG_PATTERNS: prefix = "[patterns] "; break; case LOG_PREDICATE: prefix = "[predicate] "; break; case LOG_PROGRAM: prefix = "[program] "; break; case LOG_PROGRAMINPUT: prefix = "[programinput] "; break; case LOG_REACTION: prefix = "[reaction] "; break; case LOG_REGEXPAND: prefix = "[regexpand] "; break; case LOG_DISCOVER: prefix = "[discover] "; break; default: prefix = "[unknown] "; } fprintf(out, "[%d] %*s%s", getpid(), indent * 2, "", prefix); vfprintf(out, format, args); fprintf(out, "\n"); va_end(args); } #endif grok-1.20110708.1/discogrok0000775000076400007640000023331111603476312013312 0ustar jlsjlsELF>H=@@@8@@@@@@@@@@ ``0 ``@@DDPtd@@Qtd/lib64/ld-linux-x86-64.so.2GNU GNU9֗ăԶ1hV2aj  `H @ @ *80!BT0EP@J "hX@ @IX P"DP" Xɑ jkmqstuvwxz|~g?x >`Zdua- : f:[!]`MoULMasIXDyQ3Y!7|?1 / +[L'Q?<վ?ݑUlaB<("|,t  .b gma7}1~Ho }v INqp|TfcjS>_4A'Zh  Y@K v@$ ` @@  O@7  @'c  @{ `O`  @  @ @ `{ Y@ 0|@1 @@U `@>A  B@  0U@D; A@ R@F&  X@&2`  0a@ g@O  O@  s@   @ R@Z @   `@5`d Ѕ@1` Є@  @  @E {@#`  B@" @)?  Г@  Y@ D A@? @Y1  g@f.  0@ 0@i e@L @0 @ ?@6 O@ H=@D Z@|@ P@|5 `  @|@+  4@! @  @YO  @>a pq@  @h@_x  P@D@n @y@I8` ~@ B@rS k@C g@ag \@0`z  Pb@& @~ U@^ 0~@} b@o 0@W M  [@ 0@  Pm@y` V@ F  @ _@hV  Z@  U@%  PX@ b@  {@ y@h PR@ :@ Я@;m Y@a  @B  @Y;  `R@ZO @@~  T@%  0r@ ` T@D o@q ` ]@A p@ `@Nlibdl.so.2__gmon_start___Jv_RegisterClasseslibpcre.so.0libevent-2.0.so.5libtokyocabinet.so.9dlopendlsympcre_callouttctreenewpcre_compilepcre_fullinfopcre_get_stringnumberpcre_freetctreedeltctreeclearpcre_execpcre_get_substringpcre_free_substringtctreeputtctreegettclistnumtclistvaltclistremovetclistpushtclistnewtctreeiterinittctreeiternextevent_initevent_setevent_addevent_base_loopexitevent_onceevent_base_dispatchbufferevent_disablebufferevent_get_inputevbuffer_readlinebufferevent_newbufferevent_enabletclistdeltccmpint32tctreenew2tctreeputkeeplibc.so.6fflushfopenstrncmpoptindstrrchr__strdupperror__isoc99_sscanfftellstrncpyputsforkxdrmem_createreallocabortstdingetpid__assert_failstrtodstrtolexeclpfgetscallocstrlenmemset__errno_locationfseekstrndupdup2stdoutfputclseekxdr_stringmemcpyfclosemallocxdr_intasprintf__ctype_b_locoptargstderrgetpgidfwritefreadgettimeofdaywaitpidstrchrfdopen__xstatmemmovestrerror__libc_start_mainxdr_bytesvfprintfgetopt_long_onlysnprintf_edata__bss_startgrok_clonefilter_shelldqescapegrok_input_eof_handlergrok_capture_walk_endgrok_capture_add__libc_csu_finigrok_collection_check_end_statexdr_grok_capturefilter_shellescapestring_escapegrok_discover_newstring_countg_pattern_regrok_discover_cleangrok_pattern_add_program_file_read_realgrok_capture_walk_nextgrok_initsubstr_replacegrok_capture_set_extragrok_match_get_named_substringgrok_match_walk_initgrok_capture_get_by_subnamesafe_pipegrok_free_clonegrok_match_walk_endEMPTYSTRgrok_new_IO_stdin_usedgrok_predicate_regexpstring_unescape__data_startgrok_matchconfig_closegrok_matchconfig_start_shellgrok_matchconfig_filter_reactiongrok_version_program_process_buferrorgrok_predicate_strcomparegrok_collection_loopfilter_jsonencodestring_ndupg_cap_namegrok_collection_addgrok_match_get_named_capturegrok_capture_get_by_namegrok_collection_init_grok_capture_encodegrok_execstring_escape_unicodeg_cap_pattern__libc_csu_initgrok_match_walk_nextstring_filter_lookupgrok_errorgrok_matchconfig_global_cleanupstropgrok_patterns_import_from_stringgrok_predicate_numcomparegrok_program_add_input_filepatname2macrogrok_patterns_import_from_file_program_file_read_buffergrok_compilegrok_predicate_numcompare_initstring_ncountgrok_program_add_inputgrok_pattern_findgrok_pattern_name_listg_grok_global_initializedgrok_matchconfig_exec_nomatchgrok_freegrok_capture_freestring_escape_like_cgrok_program_add_input_processgrok_capture_walk_initg_pattern_num_capturesg_cap_definition_program_file_repair_event_program_process_startgrok_discover_grok_loggrok_capture_get_by_capture_numbergrok_predicate_strcompare_initusagegrok_matchconfig_reactgrok_match_reaction_apply_filtergrok_matchconfig_exec_grok_capture_decodegrok_capture_init_pattern_parse_string_program_file_buferrorstring_escape_hexg_cap_predicategrok_execngrok_matchconfig_init_collection_sigchldgrok_capture_get_by_idg_cap_subname_program_process_stdout_readgrok_predicate_regexp_initgrok_discover_freegrok_compilengrok_discover_initGLIBC_2.2.5GLIBC_2.14GLIBC_2.3GLIBC_2.7 ui b Pn ii y ii  ui b ``` ```z``0``5`r` `>(`I0`8`v@`H`P`X```Vh`pp`x``l``f````````` ` ` ` `` `(`0`8`@`H`P`X```h`p`x``` `!`"`#`$`%`&`'`(`)`*`+`,`-`.`/`1`2`3 `4(`60`78`8@`9H`:P`;X`<``=h`?p`@x`A`B`C`D`E`F`G`H`J`K`L`M`N`O`P`Q`R`S`T`U`W `X(`Y0`Z8`[@`\H`]P`^X`_```h`ap`bx`c`d`e`g`h`iHJ 腂H5ھ %ܾ @%ھ h%Ҿ h%ʾ h%¾ h% h% h% h% hp% h`% h P% h @% h 0%z h %r h %j h%b h%Z h%R h%J h%B h%: h%2 h%* h%" hp% h`% hP% h@% h0% h % h% h% h%ڽ h %ҽ h!%ʽ h"%½ h#% h$% h%% h&% h'p% h(`% h)P% h*@% h+0%z h, %r h-%j h.%b h/%Z h0%R h1%J h2%B h3%: h4%2 h5%* h6%" h7p% h8`% h9P% h:@% h;0% h< % h=% h>% h?%ڼ h@%Ҽ hA%ʼ hB%¼ hC% hD% hE% hF% hGp% hH`% hIP% hJ@% hK0%z hL %r hM%j hN%b hO%Z hP%R hQ%J hR%B hS%: hT%2 hU%* hV%" hWp% hX`% hYP% hZ@% h[0% h\ % h]% h^AVHРAUE1ATUSHH L&H$HH$DŽ$HDŽ$H$HsL% DŽ$pDŽ$HDŽ$DŽ$hH$DŽ$HDŽ$DŽ$vHDŽ$DŽ$HDŽ$DŽ$1L5B H$HMHމtkpt*vtPht7ozH []A\A]A^H H$AH0!8z1fDDŽ$xtEAH )L"~HH<À?-H5:IH$GsHE H5H$H$HHsH$H$LHHuH@s1Hb H5L1H;H H=47=(1I^HHPTI0@H@H:@HHa HtHÐUHSH=@ uK`H: H`HHH9s$fDHH `H H9r H[]fff.H= UHtHt] `]ÐH\$Hl$HLd$Ll$E1Lt$L|$HhLg0w(LHxPHtlS(HCH=1yHcҋ D|L$,HuPHHIAD$xHSEL$,HLAAD$xAu+DH\$8Hl$@Ld$HLl$PLt$XL|$`HhDAt$|D$L xHEPH zHyAyHD$EH$1<HEPAt$|L PxH YzHxAtHD$EH$1<.AD$xALMPAt$|HxH zHxA}H$1p<ff.ATH? H@USHHHG(HHGHG0G8G`HGhGpGxG|iHC `HC@WHCHNHCPEHCXH² t []A\HKpHShH=xE11H- HHEH~ 1HHHD$D<CHcHŋD$DHc$$$Ht$HHIHD$PHcщL$ CxL$  E1LD$<D$4IEfDAL,$E11E@D$HӮ H8CCxl$<AEE}D$8D)CxD$(H-ڮ ALD$XH|$PLMEHAlA+lCxOHt$XLD$hHL$`HcH5H|$`D$@L%ʮ hHD$pHD$xA$HELDL$ wHH- AH|$PLD$pL6H ALD$xH|$PLL$4H0uH$1H|$pD$4H}E0$H|$xEH}HEHU DL$ EA$HAlETCx*A)LcDLd$Pt$4HHHD$(LH01 9}IHHD~ u)̓)H=otL:H=[tL#<$H=?tlHHt$(LH-Ht$(HT HD$PH$L$L$8L t$E1HLHHD$(DD$8H|$(L s$DHLCxH|$(AOL$E1$HLCxHD$hLL$`AOH|$(E1HL$CxH|$P/Hc$H9T$@D$4KH|$XHtHD$X$HT$PEIHD$Ps|L prH zvHNrAHD$$$1r4l$<ALH|$PuHsHCHCxt1HD$Hs|H uDL$DHtAPH$14HtHH HA|AT)?HcH|$PHcHHT$ CxHT$ HD$`HT$hwHEH|$`HD$Xs|H QuHbqAAH$1Q3}@s|H uHqAA1"3DH+ H5DqLH81HD$`s|H tLL$hHXqA)H$12CxHD$Ps|H tD$H4qA*H$12s@HD$Ps|L pH BtHpAHD$$$1:2DHD$Ps|L pH sHoA HD$$$11DHD$PH$L$HD$(2fD$4s|H sHqL$$AAXD$11fIcHD$Ps|DL$(H IsH"qA DT$ LcH$1D1CxDT$ @LHD$Ps|A)H rH0oEA DH$10CxS@Ht$(LHfCxs|DL$4H rHpA\10fD|$8D$LLt$PE~}IAE1H IIA9~YC<.\DuC<&%uL uH$H$H|$PED$IID$Lt$PA9HLCxH$MLsCHKpHShE11LHHC(HK81Hf{8{8<HcH{(H$1HC01H{(H$1H{(HL$x1 $$1Wf.$HqHEEHAH߃ED`4W;$$HT$xH5lHD$DlH|H$1#Cxys|D$H pHHmA1^.IAt$H=lH,Ht$(LH$Ss|HD$H oHD$XHT$HmAAH$1-HD$`FHChHHĨ[]A\A]A^A_Ës|L ck $HikH oLd$A1-$Ld$PHD$Hw|AH =oHjABH$1P-1ps|H oHkL4$AJ1-Lt$P)H oH5kH=>m-A)DHD$@;H 5oH5kH=kmffff.H\$Hl$HHHHHHHl$H\$H fHH\$Hl$HLd$Lt$ILl$HAH|$8H(HHD$ HC8HHt$ E1E1@D$HC0H$CxAE1HtHS0H]Le MRUH\$`Hl$hLd$pLl$xL$HĈf.Cxt!s|H mHalAx@1i+H H=ldHfD$HH ms|H/jL$$EAHD$1 +E%A5AuCH H=jHN@AtAH H=2l+HfDH H=iHfDH\$Hl$HLd$HHIHLLHHHl$H$Ld$Hf.H*iÐF0F4HFHFFHF(F HF@HFPFXHF`fDAVAUATUHSHH Gx@tH}@Hs0AhHٺH}XHs4AhHٺHsH}HHL$HIdLfA~@E1f.AE9t(HT$DL'S09P0uHT$DLLhHoHsH}HLASHsHL$H}PbHILA~8E1 fAE9t(HT$DLS09P0uHT$DLHLhSHsLH}PAfH []A\A]A^fC4LNH kw|H`jA@D$C0$1'SbI4UIfff.H(H@t$ HL$Ht$ PH(ff.UHHSHH|H}HHL$ HH1Ht HT$ 1sH[]fff.UHHSHH,H}PHL$ HH1Ht HT$ 1#H[]fff.H(HXt$ HL$Ht$ H(ff.SHHGx@HT$t&w|IH iH)iA@1W&CXfHT$HC`HH1[fATIUHSHHHH$HGHD$HGH|$HD$HGHD$HG HD$ HG(HD$(HG0HD$0HG8HD$8HG@HD$@HGHHD$HHGPHD$PHGXHD$XHG`HD$`H|$H|$(H|$@H|$PH|$`!1]@HD$xH@8Ht H|$pH}HcHHEH|$p1ɉH|$pHuH}HuHc HHE뻐HD$xH|$pP A$HĠ[]A\Hl H|$HHD$HQ H|$(HHD$ H6 H|$@HHD$(H H|$PHHD$@H H|$`HHD$PH HHD$`SSHH0HHHH0[f.SHHHtH H;8tH{HtHr H;8tH{(HtHX H;8tH{@HtH> H;8tH{PHtH$ H;8tH{`HtH H;8t [o[fDH@USHHH@Ht$HHtaCx@u+H{@T$HL$ HHHH[]fDs|H 3fHeA@1"Cx@ts|H fH}eA@1"D1ÐUSHH_ HH@T$ HHHt$ HHuHH[]DH\$Hl$LLd$Ll$ILt$HHGxIHLw t4w|IHL$HSeH fLD$L$$A1!AHDLL1H\$ Hl$(Ld$0Ll$8Lt$@HHDH\$Hl$HLd$Ll$HHH ILIL0CxHI$tQHMH5fHfHHT$HdHEƋs|MHL$H fH$A)1 I$1HtH\$(Hl$0Ld$8Ll$@HHfCxuI$HEs|H eHwdMA+ f.ATHMU1SHHH8@ t@ tH01@uo@HHH)HH4+HH1 fDH t tHHHH)H)*HI$[]A\fD@ tH48@t@ uffff.ATUHSHH GxHIHf.H< t @HCH{< tuLH 1[]A\f.HG f.Htf HXu H< t< t<#yLD$HL$HT$HrLD$HL$HHT$H4$BfH믋w|H dHbAb1H\$Ld$HHl$Ll$ILt$L|$HHGxnH5cLHI1HL 11HLHu/HIe1HHLHLH9ICxuQH H5bHLH81H\$Hl$ Ld$(Ll$0Lt$8L|$@HHf+8Ds|H bHaH$MAP1ZtDCxt8s|H ObHpaH$MA?1Lf.w|H bHaMA:1gDLH1LLHǓ H5aLHH81`H\$Hl$HLd$Ll$HLt$L|$HHD|$PIAELL$E AEDHADA4D)A;6HEIcMcD)J<1IcHcHH $E)H)H $Ht$LHH}D#HEED#McB H\$Hl$ Ld$(Ll$0Lt$8L|$@HHfA41EA;6jH}A6HcHEN@H}o‰fDLXAAH\$Hl$HLd$Ll$H(HAI7HIDP@uAAAEAvE11=f.H9`EJcH@H5vAEEHHl$H\$Ld$Ll$ H(mDH5_EfH5_H5_H5}_H5s_H5Z_SHH5X_H@H1>[f.H\$Hl$HLd$Ll$H(AHIHIDP@uH5^AEAH1H\$Hl$Ld$Ll$ H(ÐAW1AVAUATUHSHHHEHT$ HT$0HL$ DD$DL$HDŽ$8DŽ$<HT|$uH D$HD$M~H31@H9D0t$D$E1D$,DHD$F<0EIcŀ|0L$,tHADP@UD$E1D$( fAD9e~vHIcA9uD$(DŽ$<DŽ$8%D$D$D$<E~$8tvt9EAD9e@ID9t$HH[]A\A]A^A_D$L$0GDHT$ DHHD$<f.D$L$0EH$8H$<H$0A73fH$8H$<H$0A?D$<EfH$8H$<H$0AD$<EfH|$D$ffff.AVIAUIATIUSHDE1fDHHA9$IEـ<\u(w;AHUHcIvLHcHD)HcfD1@Ext]HQHQۋu|EH VHDHSE)HD$IFA%HD$AFD$IcI1L$$u Hl$0H\$(Ld$8Ll$@Lt$HL|$PHX1YgCO1)7!f1ffffff.Ht/<<~.<=@tV<>u&~ 1=H@D$,HD$ D$,A9G5fAw$H HHFEAm1 J@LhHh[]A\A]A^A_fE8,u-HHuHǃ2@H<H=HLH@HSH AH$A1HT$H>AUATUHSHHLLLHL芩HҫH*HIuH[]A\A]AUATUHSHHLLLHrL*HrHʪHIuH[]A\A]HAt9HBH @EAHD$B,H!>$1HfSHHǂ٪teljC,{H{81C0-u H[fDçLKH @H=$A1H[Ë{ 1覥{$虥{Tu0H5)EHKH>E11H4uc{(VH ?Hx=1At 89H L?HW>IA1Pfffff.H\$Hl$HLd$Ll$HhH|$H$HD$H|$ H|$0D$|$ 1L%b H-&c I؉CD$0{LHCD$C D$$C$D$4C(ާHI^DKTLEunt*LKH =H<AN1[Hlb IHپ_H\$HHl$PLd$XLl$`HhfD{HIL1=Hmff.H\$Hl$HLd$Ll$HHLd$HsLSH{11趨H$;$D$H{HǃL扫DHHǃHǃH|$HEHaH 2a H5` I1҉'HH解H` LHHپH$H$L$L$HE8t%8>uSHH(HvuHE8uH#] HHC(H([]DuH9H$A1i H5<11H豞wfff.Ld$Ll$ILt$L|$IH\$Hl$HxEIHT$ Eu(IH\$HHl$PLd$XLl$`Lt$hL|$pHxfHT$ I>Hc2HT$ II7AD$<Vx1۽эDA9~pHA<|uHcLHD$(H|$(H*HT$ LHL$H$їHD$a@H$Hc$H52LD$xL+CH$HL$pHT$$M 1$$ AL$Ht$ H$EDLD4$E蝿H$0L$HL$xH$Ht$pH$LL$xH$D$H$H$1ɉ$0H$H$H$H }L$D$H5&4HL$p$H$1A@Hc{sL|$h)H{$HcH$HD$hHT$ SH{L|$hHHD$hH$$HT$ y@S+S@Dp|HD$XH 4D$H*0Hl$AH$1H$L|$hHcLc$Ht$XHHLTH$BD-HHHHT$ LpHA5E1Dp|HD$XH 3D$HR/AH$1p|HD$(H 3HD$PD$H 2AE)H$1Lp|HD$`H I3D$Hg2A}H$1DHD$0@yHp|HD$hH 3T$@DL$DAHD$$A)щD$HcHD$(HD$PH/H$1p|D$DH 2DL$@H1Al$1HD$0@y[T$@p|H l2DL$DAnHcHD$(HD$PA)H[1H$1ZHD$0Ll$h@y p|D$H 2H.L,$At1fH}NHt$ L 0H$E11L$ VD$Ht$ L 0H$$LAH'HHl$h@yHHzHHD$h蝒H$萒L{MfDHD$PH[]A\A]A^A_fr|D$H 1HD$XD$H-AZH$1xp|D$H 0HW-H,$AP1H|$h%Ht$ H$L d/E11L$D$Ht$ L N/H$$LAHٹ@H$$H5.L1CL$H$$H5.1L@p|D$HT.H /H,$1AHHl$PPxfH\$Hl$HLd$Hr Ht!G9H$Hl$Ld$H@HzHLHIH{(E9H{(H51LKtE9H{(|L;ctLH$Hl$Ld$H @w)H=I ؟H=:)袅fH\$Hl$HHuHHHHHl$H\$HDSHH?ԈHC[f.SHH[fffff.AWIE1L=Q&AVAUATUSHHHT$PH$H$H|$xHL$X$1HD$xDŽ$DŽ$CD$0D$,HD$@H;ALl$@D$0Ll$xD$4fH;H$HH;H$H߅HT$`LHH謠CAt@HUEL 'sEH k)MEAHT$H'$1EjT$tD$pAA)CA1A9DOHcH='G 1LDRCHcD$pDd$H (sDL$0H'ALHD$HEH$1T$4D$,DEND$,9$D$,`CHcT$,HT$@gsDL$0H R(H&1AtC5HD$xsH (DL$0Hf&AuHD$$$1PCH!sDL$0H 'H7&AvHD$D$,$1Hct$pH=TF 1DL臜CHcD$pDd$H g'sDL$0H&ALHD$HEH$1^fDsHH%LH 'EH$A1YAT$tD$pAC3HT$8l$,H$l$HDD$,H|$xDD$LB$L H$rL E%H$H$H|$xA$EHD$8L$HL %T$,H$H|$xE1H$L H$CHD$xsH &DL$0H$AHD$$$1>CfDD;d$4CuvHT$`D$pDd$4HT$8T$tD$HT$LHcD$HHT$8H %sDL$0AIŋD$L+D$HLl$D$HH%H$1{HEsH >%DL$0H$AH$1yUH$H$H|$xL #$E11ǩ$H$H$H|$xL ~#$A蕩HD$xHT$PH$HT$XHĘ[]A\A]A^A_ÐHH5C H=$1w~H=%H=$H Hl$Ld$H-O9 L%H9 Ll$Lt$L|$H\$H8L)AIHI}Ht1@LLDAHH9uH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHS`HH8 HuHHCHSHuH[]ÐH Hlibgrok.soInternal compiler error: %s Regexp: %s Position: %d patternsubnamepredicatedefinition[%s:%d] start pcre_callout func %s/%.*s[%s:%d] end pcre_callout func %s/%.*s returned: %d[%s:%d] No such function '%s' in library '%s'(?!<\\)%\{(?(?[A-z0-9]+)(?::(?[A-z0-9_:]+))?)(?:=(?(?:(?P\{(?:(?>[^{}]+|(?>\\[{}])+)|(?P>curly2))*\})+|(?:[^{}]+|\\[{}])+)+))?\s*(?(?:(?P\{(?:(?>[^{}]+|(?>\\[{}])+)|(?P>curly))*\})|(?:[^{}]+|\\[{}])+)+)?\}grok_pcre_callout[%s:%d] Compiling '%.*s'start of expand[%s:%d] % 20s: %.*sstart of loop[%s:%d] Pattern length: %d[%s:%d] Pattern name: %.*s%04x[%s:%d] Predicate is: '%.*s'=~!~!<>=Invalid predicate: '%.*s' (?C1)replace with (?<>)add capture id[%s:%d] :: Inserted: %.*s[%s:%d] :: STR: %.*sgrokre.c[%s:%d] Fully expanded: %.*s[%s:%d] Studying capture %dgct != ((void *)0)[%s:%d] %.*s =~ /%s/ => %dpcre badoption pcre badmagic 1.20110630.1Too many replacements have occurred (500), infinite recursion?[%s:%d] Inline-definition found: %.*s => '%.*s'[%s:%d] Predicate found in '%.*s'[%s:%d] Adding predicate '%.*s' to capture %d[%s:%d] Failure to find capture id %dstrlen(full_pattern) == full_len[%s:%d] A failure occurred while compiling '%.*s'failure occurred while expanding pattern (too pattern recursion?)[%s:%d] Error: pcre re is null, meaning you haven't called grok_compile yetERROR: grok_execn called on an object that has not pattern compiled. Did you call grok_compile yet? Null error, one of the arguments was null? grok_compilengrok_pattern_expandgrok_pattern_expandgrok_capture_add_predicategrok_study_capture_mapgrok_study_capture_mapgrok_execn[%s:%d] Adding pattern '%s' as capture %d (pcrenum %d)[%s:%d] Setting extra value of 0x%x[%s:%d] walknext null[%s:%d] walknext ok %dgrok_capture_addgrok_capture_set_extragrok_capture_walk_next[%s:%d] Adding new pattern '%.*s' => '%.*s'[%s:%d] Searching for pattern '%s' (%s): %.*s[%s:%d] pattern '%s': not found[%s:%d] Importing patterns from string[%s:%d] Importing pattern file: '%s'[%s:%d] Unable to open '%s' for reading: %sFatal: calloc(1, %zd) failed while trying to read '%s'Expected %zd bytes, but read %zd.not foundgrok_pattern_addgrok_pattern_findgrok_patterns_import_from_filegrok_patterns_import_from_string\a\t\f\b\r\n\x%x\u00%02x   p`P@0negative match Args: %.*s pcre_exec:: %d Error at pos %d: %s falsetrue[%s:%d] Regexp predicate found: '%.*s'(?:\s*([!=])~\s*(.)([^\/]+|(?:\/)+)*)(?:\g{-2})Internal error (compiling predicate regexp op): %s An error occurred in grok_predicate_regexp_init. [%s:%d] Regexp predicate is '%s'An error occurred while compiling the predicate for %s: [%s:%d] Compiled %sregex for '%s': '%s'[%s:%d] RegexCompare: grok_execn returned %d[%s:%d] RegexCompare: PCRE error %d[%s:%d] RegexCompare: '%.*s' =~ /%s/ => %s[%s:%d] NumCompare(double): %f vs %f == %s (%d)[%s:%d] NumCompare(long): %ld vs %ld == %s (%d)[%s:%d] Compare: '%.*s' vs '%.*s' == %s[%s:%d] String compare predicate found: '%.*s'[%s:%d] String compare rvalue: '%.*s'[%s:%d] Number compare predicate found: '%.*s'[%s:%d] Arg '%.*s' is non-floating, assuming long type[%s:%d] Arg '%.*s' looks like a double, assuming double(Щ@hH(8Ph grok_predicate_regexp_initgrok_predicate_regexpgrok_predicate_numcompare_initgrok_predicate_numcomparegrok_predicate_strcompare_initgrok_predicate_strcompare[%s:%d] Fetching named capture: %s[%s:%d] Named capture '%s' not found[%s:%d] Capture '%s' == '%.*s' is %d -> %d of string '%s'[%s:%d] CaptureWalk '%.*s' is %d -> %d of string '%s'grok_match_get_named_substringgrok_match_walk_next[capture] [compile] [exec] [match] [patterns] [predicate] [program] [programinput] [reaction] [regexpand] [discover] [unknown] [%d] %*s%s[%s:%d] No more subprocesses are running. Breaking event loop now.[%s:%d] Found dead child pid %d[%s:%d] Pid %d is a matchconf shell[%s:%d] Pid %d is an exec process[%s:%d] Reaped child pid %d. Was process '%s'[%s:%d] Scheduling process restart in %d.%d seconds: %s[%s:%d] Not restarting process '%s'[%s:%d] SIGCHLD received[%s:%d] Adding %d inputs[%s:%d] Adding input %dgrok_collection_check_end_stategrok_collection_add_collection_sigchld[%s:%d] Buffer error %d on file %d: %s[%s:%d] EOF Error on file buffer for '%s'. Ignoring.[%s:%d] Not restarting process: %s[%s:%d] Not restarting file: %s[%s:%d] fatal write() to pipe fd %d of %d bytes: %s[%s:%d] Error: Bytes read < 0: %d[%s:%d] Error: strerror() says: %s[%s:%d] Failure stat(2)'ing file '%s': %s[%s:%d] Unrecoverable error (stat failed). Can't continue watching '%s'[%s:%d] File inode changed from %d to %d. Reopening file '%s'[%s:%d] File size shrank from %d to %d. Seeking to beginning of file '%s'[%s:%d] Repairing event with fd %d file '%s'. Will read again in %d.%d secs[%s:%d] Buffer error %d on process %d: %s[%s:%d] Starting process: '%s' (%d)[%s:%d] execlp(2) returned unexpectedly. Is 'sh' in your path?[%s:%d] Scheduling start of: %s[%s:%d] Failure stat(2)'ing file: %s[%s:%d] Failure open(2)'ing file for read '%s': %s[%s:%d] Adding input of type %s[%s:%d] Input still open: %d[%s:%d] %s: read %d bytes-c[%s:%d] execlp: %s[%s:%d] Adding file input: %s[%s:%d] strerror(%d): %s[%s:%d] dup2(%d, %d)fileprocessgrok_program_add_inputgrok_program_add_input_processgrok_program_add_input_file_program_process_buferror_program_process_start_program_file_buferror_program_file_repair_event_program_file_read_realgrok_input_eof_handlerPATTERN \%\{%{NAME}(?:%{FILTER})?}[%s:%d] Closing matchconf shell. fclose() = %d[%s:%d] matchconfig subshell set to 'stdout', directing reaction output to stdout instead of a process.[%s:%d] Starting matchconfig subshell: %s!!! Shouldn't have gotten here. execlp failed[%s:%d] Fatal: Unable to fdopen(%d) subshell pipe: %s[%s:%d] ApplyFilter code: %.*s[%s:%d] Can't apply filter '%.*s'; it's unknown.[%s:%d] Applying filter '%.*s' returned error %d for string '%.*s'.[%s:%d] Matched something: %.*s[%s:%d] Checking lookup table for '%.*s': %x{ "@LINE": { "start": 0, "end": %d, "value": "%.*s" } }, { "@MATCH": { "start": %d, "end": %d, "value": "%.*s" } }, { "%.*s": { "start": %ld, "end": %ld, "value": "%.*s" } }, [%s:%d] JSON intermediate: %.*s[%s:%d] Unhandled macro code: '%.*s' (%d)[%s:%d] Prefilter string: %.*s[%s:%d] Replacing %.*s with %.*s[%s:%d] Reaction set to none, skipping reaction.[%s:%d] Sending '%s' to subshell[%s:%d] flush enabled, calling fflush[%s:%d] Executing reaction for nomatch: %s[%s:%d] Trying match against pattern %d: %.*sNAME @?\w+(?::\w+)?(?:|\w+)*FILTER (?:\|\w+)+%{PATTERN}/bin/shstdouterrno saysw[%s:%d] Filter code: %.*s[%s:%d] Checking '%.*s'NAMEFILTER"@LINE": "%.*s", "@MATCH": "%.*s", "%.*s": "%.*s", { { "grok": [ ] }[%s:%d] Start/end: %d %d[%s:%d] Replacing %.*s[%s:%d] Filter: %.*sx00@grok_matchconfig_closegrok_matchconfig_execgrok_matchconfig_reactgrok_matchconfig_exec_nomatchgrok_matchconfig_filter_reactiongrok_matchconfig_start_shellgrok_match_reaction_apply_filter[fatal] pipe() failed @P`p0@END@LINE@START@LENGTH@JSON@MATCH@JSON_COMPLEX[%s:%d] filter executing\`$"`^()&{}[]$*?!|;'"\\"/jsonencodeshellescapeshelldqescapefilter_jsonencodefilter_shellescapefilter_shelldqescape.\b.%\{[^}]+\}%%{%.*s}asprintf failed|succeeded[%s:%d] %d: Round starting[%s:%d] %d: String: %.*s[%s:%d] %d: Offset: % *s^[%s:%d] Test %s against %.*s[%s:%d] Matched %.*s\E\Q[%s:%d] %d: Pattern: %.*s[%s:%d] Including pattern: (complexity: %d) %.*s[%s:%d] %d: Matched %s, but match (%.*s) not complex enough.[%s:%d] %d: Matched %s, but match (%.*s) includes %{...} patterns.[%s:%d] %d: New best match: %s[%s:%d] %d: Matched %s on '%.*s'grok_discover_initgrok_discoverUsage: %s [--verbose] [--patterns PATTERNSFILE] --patterns PATTERNSFILEYou want to specify at least one patterns file to load --verbosepatternshelphp:v%s: No patterns loaded. ;^^hbdHefXffgsXtxt8vvvvxPyhhyyyHzX|(|H8}hH}}~X~~@p؁h @(hH 0 (H xh ؏ (  hH (x H x ȝ 8 H8 hh x h  H    خX ر 8 88`ظȹx8HhxH88hxx(HpHh phzRx ,H_MMNp F <L`BOA  ABH  ABH hbAYhb?MD mbrAe J Ab"AR M AL b BBB B(A0A8J 8A0A(B BBBA \ho7MD a|o$oMML K xqFML hqqZD qBBB A(D0GPl 0A(A BBBJ Ts%D0`$lsDAGG0rAA$sDAGG0rAAs%D0`t^AG RC4Pt BDD GW  AABA ,(v&AL@WAL8vA L Alv ,vAAG0x DAJ @w$8wKAAD0DA$`wMMIPw$wMNP C ,DxBGC  ABG 4t@yBAD G@Q  CABK $(zM[P J $ |hM[P J $h}MN0 J $`~&Ad$Dp~oMN0SLl~BDB B(A0D8J 8A0A(B BBBH D8LBEE D(A0D@ 0A(A BBBG ,@aBDD C AEE 4fL؂OML q,l_MMQ H ,8MMN` I $MI@ H $0qL[` A ,D| H j F T D T D T,LM[P" F ,| H``, D $$MI w C $IMD ^ A T$ȒhM[pv B $,<MMNp G l$MQ4 F }A{,ADD0 AAA LBEB B(A0A8Dk 8A0A(B BBBJ <L BEA A(G0 (A ABBE  x , pADG@h AAJ L 0BBA D(D06 (A ABBG  (A ABBF 4$ p>HS@ G b N a G z E $\ xMLM J 4 PYBBA D(G0B(A ABB4 xYBBA D(G0B(A ABB ND I, ؤBAG x AG v AA $< EMNp G $d |MQ9 I $ xN u M S E T MD  Ъ, تADG0f AAD , XAPG@` AAF ,L 'MMNu C L| W BDB B(D0A8J 8A0A(B BBBJ , MI m E w I p H < HBEB A(A0v(A BBBd< YBEB B(D0A8D  8A0A(B BBBI ^8A0A(B BBB )DN A $ GOD  D  ~MI g ~MI g,HMI $LȿGOD ^ H LtP>BEB B(D0A8DpS 8A0A(B BBBG @;N l`AT`ALL$`BOB B(A0A8J8A0A(B BBBt 5DlDhLBIE A(C0J" 0A(A BBBA $Q_@Xh@@ @@@ @'@j@@@u@@@@@/<NP 4@ |@o`@@0@ `+@8)@ o(@oo'@`4@4@4@5@5@&5@65@F5@V5@f5@v5@5@5@5@5@5@5@5@5@6@6@&6@66@F6@V6@f6@v6@6@6@6@6@6@6@6@6@7@7@&7@67@F7@V7@f7@v7@7@7@7@7@7@7@7@7@8@8@&8@68@F8@V8@f8@v8@8@8@8@8@8@8@8@8@9@9@&9@69@F9@V9@f9@v9@9@9@9@9@9@9@9@9@:@:@&:@6:@F:@V:@f:@v:@:@:@:@:@@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GCC: (GNU) 4.6.0 20110530 (Red Hat 4.6.0-9).symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.comment@#@ 1<@<$Do`@`N 0@0XV@ ^o'@'ko(@(pz8)@8)+@+ 4@44@4:@:||@|@%$ @@`` ` @`@ ````  `P 0, |  @@<@`@0@@'@(@ 8)@ +@ 4@ 4@ :@|@@@@`` `@`````` t=@`*`8 `E =@[`j`x >@`@ ` @@(` 0>@@  @@0`@B@T@@m@@ `@@@ @@@@!"`@4C`MZ`n@@P@@p@0@@ @-<@ N @`@r@@@@`@@ @@@@!2 `>@`V@hP@z@! @!@@@@ @`p@"@4@F`0Td`o@``@`@`` ``& `1 A@?< @@~Q_ Ѕ@v Y@ R@ 0@ ~@0 v@$AK @~^ H=@ey b@ Я@; g@O`  @!7 Z@H W k} `@>  Y@%  ?@/ B \ |@b  _@hq  U@^  y@h   {@    ! 4 S ^ r  0U@D  @)   B@r   0|@    `! . D N  A@W @f |    k@     e@L `  @  @@:  0@W [  PR@h }  `@N  o@q  Є@  @@  g@a    / C `N c u  @    @y@I   T@D  0~@}  V@   R@F b@o)7J^`l @| {@ @ O@ p@ pq@% \@FS Pm@m P@| 0@  ]@=G @Ya O@7n s@ ` g@f Г@ Z@ Y@K`) @G B@"Q PX@co 0a@ @E Y@ ``" @= @BT0`Ym P@ @|@ U@% 0r@ `@5  @ 4 @'U @Yk X@& `R@Z [@ @ Pb@&"6`F O@Q``gr @ @ T@%` @Y-@Rg{ @h@_ 0@ :@ 4@ B@  @>call_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.5886dtor_idx.5888frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxdiscover_main.cg_proggrok.cgrok_pcre_callout__FUNCTION__.7033grokre.c__FUNCTION__.7273__FUNCTION__.7238__FUNCTION__.7303__FUNCTION__.7336__PRETTY_FUNCTION__.7288__PRETTY_FUNCTION__.7337__FUNCTION__.7255grok_capture.c__FUNCTION__.7011__FUNCTION__.7056__FUNCTION__.7086grok_pattern.c__FUNCTION__.7022__FUNCTION__.7031__FUNCTION__.7049__FUNCTION__.7040stringhelper.call_charspredicates.cregexp_predicate_op__FUNCTION__.7069__FUNCTION__.7085__FUNCTION__.7123__FUNCTION__.7219__FUNCTION__.7141__FUNCTION__.7101grok_capture_xdr.cgrok_match.c__FUNCTION__.7002__FUNCTION__.7017grok_logging.cgrok_program.c__FUNCTION__.9414__FUNCTION__.9435__FUNCTION__.9420grok_input.c__FUNCTION__.9506__FUNCTION__.9535__FUNCTION__.9526__FUNCTION__.9516__FUNCTION__.9478__FUNCTION__.9487__FUNCTION__.9450__FUNCTION__.9460__FUNCTION__.9436grok_matchconf.cmcgrok_initglobal_matchconfig_grok__FUNCTION__.9699__FUNCTION__.9813__FUNCTION__.9826__FUNCTION__.9755__FUNCTION__.9735__FUNCTION__.9742__FUNCTION__.9721libc_helper.cgrok_matchconf_macro.casso_values.1994wordlist.1999filters.c__FUNCTION__.7078__FUNCTION__.7071wordlist.7048grok_discover.cdgrok_init__FUNCTION__.7043global_discovery_req1_grokglobal_discovery_req2_grok__FUNCTION__.7074_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____init_array_end__init_array_start_DYNAMICdata_startgrok_clonefilter_shelldqescapetctreeputkeepgrok_input_eof_handlerdup2@@GLIBC_2.2.5grok_capture_walk_endprintf@@GLIBC_2.2.5grok_capture_addmemset@@GLIBC_2.2.5ftell@@GLIBC_2.2.5__libc_csu_finigrok_collection_check_end_statesnprintf@@GLIBC_2.2.5xdr_grok_capturetclistdelfilter_shellescape_startpcre_free_substringevent_setstring_escapegrok_discover_newclose@@GLIBC_2.2.5string_countabort@@GLIBC_2.2.5g_pattern_retccmpint32xdr_int@@GLIBC_2.2.5pcre_freegrok_discover_cleanpcre_get_stringnumbergrok_pattern_add__gmon_start___Jv_RegisterClassesputs@@GLIBC_2.2.5getopt_long_only@@GLIBC_2.2.5fseek@@GLIBC_2.2.5__isoc99_sscanf@@GLIBC_2.7_program_file_read_realexit@@GLIBC_2.2.5__assert_fail@@GLIBC_2.2.5grok_capture_walk_nextgrok_initbufferevent_enablegettimeofday@@GLIBC_2.2.5_finisubstr_replacegrok_capture_set_extragrok_match_get_named_substringtctreeiternextgrok_match_walk_initxdrmem_create@@GLIBC_2.2.5read@@GLIBC_2.2.5strncmp@@GLIBC_2.2.5malloc@@GLIBC_2.2.5fopen@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5tctreenew2execlp@@GLIBC_2.2.5grok_capture_get_by_subnamesafe_pipetctreenewgrok_free_clonegetpid@@GLIBC_2.2.5grok_match_walk_endfgets@@GLIBC_2.2.5xdr_bytes@@GLIBC_2.2.5event_base_dispatchEMPTYSTRtclistremovevfprintf@@GLIBC_2.2.5tctreegetgrok_new_IO_stdin_used__strdup@@GLIBC_2.2.5pcre_execfputc@@GLIBC_2.2.5grok_predicate_regexpfree@@GLIBC_2.2.5strlen@@GLIBC_2.2.5optind@@GLIBC_2.2.5string_unescape__data_startgrok_matchconfig_closegrok_matchconfig_start_shellgrok_matchconfig_filter_reactiongrok_version__xstat@@GLIBC_2.2.5_program_process_buferrorgrok_predicate_strcomparegrok_collection_loopfilter_jsonencodestring_ndup__ctype_b_loc@@GLIBC_2.3tctreeputsprintf@@GLIBC_2.2.5stdin@@GLIBC_2.2.5fdopen@@GLIBC_2.2.5g_cap_namestrrchr@@GLIBC_2.2.5pipe@@GLIBC_2.2.5grok_collection_addtclistnewgrok_match_get_named_capturestrerror@@GLIBC_2.2.5grok_capture_get_by_namegrok_collection_init_grok_capture_encodegrok_execstring_escape_unicodepcre_fullinfolseek@@GLIBC_2.2.5strtol@@GLIBC_2.2.5g_cap_pattern__libc_csu_initgrok_match_walk_nextstring_filter_lookupgrok_erroroptarg@@GLIBC_2.2.5grok_matchconfig_global_cleanupevent_addgetpgid@@GLIBC_2.2.5event_oncestropbufferevent_newgrok_patterns_import_from_stringpcre_compilegrok_predicate_numcomparememmove@@GLIBC_2.2.5event_initstrchr@@GLIBC_2.2.5waitpid@@GLIBC_2.2.5grok_program_add_input_filefread@@GLIBC_2.2.5patname2macropcre_calloutgrok_patterns_import_from_file__errno_location@@GLIBC_2.2.5tctreedel_program_file_read_buffergrok_compilegrok_predicate_numcompare_init__bss_startstring_ncountasprintf@@GLIBC_2.2.5grok_program_add_inputgrok_pattern_findgrok_pattern_name_listevbuffer_readlineg_grok_global_initializedgrok_matchconfig_exec_nomatchgrok_freegrok_capture_freetctreeclearevent_base_loopexitstring_escape_like_cgrok_program_add_input_processgrok_capture_walk_initg_pattern_num_capturesg_cap_definitionxdr_string@@GLIBC_2.2.5calloc@@GLIBC_2.2.5_program_file_repair_event_program_process_start_endfclose@@GLIBC_2.2.5dlopen@@GLIBC_2.2.5strncpy@@GLIBC_2.2.5grok_discover_grok_loggrok_capture_get_by_capture_numberdlsym@@GLIBC_2.2.5grok_predicate_strcompare_initusagegrok_matchconfig_reactstderr@@GLIBC_2.2.5grok_match_reaction_apply_filtergrok_matchconfig_exec_grok_capture_decodegrok_capture_initfork@@GLIBC_2.2.5_pattern_parse_stringbufferevent_get_inputfwrite@@GLIBC_2.2.5realloc@@GLIBC_2.2.5_program_file_buferrorstring_escape_hexperror@@GLIBC_2.2.5g_cap_predicategrok_execntctreeiterinit_edatatclistpushgrok_matchconfig_initfprintf@@GLIBC_2.2.5_collection_sigchldwrite@@GLIBC_2.2.5grok_capture_get_by_idpcre_get_substringbufferevent_disableg_cap_subname_program_process_stdout_readmemcpy@@GLIBC_2.14open@@GLIBC_2.2.5strndup@@GLIBC_2.2.5strtod@@GLIBC_2.2.5stdout@@GLIBC_2.2.5grok_predicate_regexp_initgrok_discover_freetclistvalmaintclistnum_initgrok_compilenfflush@@GLIBC_2.2.5grok_discover_initgrok-1.20110708.1/grok_capture.x0000664000076400007640000000055211576274273014270 0ustar jlsjls struct grok_capture { int name_len; string name<>; int subname_len; string subname<>; int pattern_len; string pattern<>; int id; int pcre_capture_number; int predicate_lib_len; string predicate_lib<>; int predicate_func_name_len; string predicate_func_name<>; /* predicate functions store personal data here. */ opaque extra<>; };