From 3d8086f08feaa4ae39a16cdc8931e5d5ec725730 Mon Sep 17 00:00:00 2001 From: Timur Safin <tsafin@tarantool.org> Date: Tue, 8 Feb 2022 01:44:15 +0300 Subject: [PATCH] debugger: added luadebug.lua Use 3rd-party module https://github.com/slembcke/debugger.lua as a basis for our debugger CLI shell, rename it to luadebug.lua to avoid collision with vscode and JetBrains debugger helper scripts. NO_DOC=yet NO_CHANGELOG=yet NO_TEST=yet --- src/CMakeLists.txt | 5 +- src/lua/init.c | 4 +- third_party/lua/README-luadebug.md | 132 +++++ third_party/lua/luadebug.lua | 678 ++++++++++++++++++++++++++ third_party/lua/luadebug.png | Bin 0 -> 66615 bytes third_party/lua/luadebug_tutorial.lua | 279 +++++++++++ 6 files changed, 1096 insertions(+), 2 deletions(-) create mode 100644 third_party/lua/README-luadebug.md create mode 100644 third_party/lua/luadebug.lua create mode 100644 third_party/lua/luadebug.png create mode 100644 third_party/lua/luadebug_tutorial.lua diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 755a94fa29..4db5e1926d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,7 +58,6 @@ lua_source(lua_sources lua/env.lua env_lua) lua_source(lua_sources lua/pwd.lua pwd_lua) lua_source(lua_sources lua/trigger.lua trigger_lua) lua_source(lua_sources lua/table.lua table_lua) -lua_source(lua_sources ../third_party/luafun/fun.lua fun_lua) lua_source(lua_sources lua/httpc.lua httpc_lua) lua_source(lua_sources lua/iconv.lua iconv_lua) lua_source(lua_sources lua/swim.lua swim_lua) @@ -66,6 +65,10 @@ lua_source(lua_sources lua/datetime.lua datetime_lua) lua_source(lua_sources lua/timezones.lua timezones_lua) lua_source(lua_sources lua/print.lua print_lua) +# 3rd party lua sources +lua_source(lua_sources ../third_party/luafun/fun.lua fun_lua) +lua_source(lua_sources ../third_party/lua/luadebug.lua luadebug_lua) + # LuaJIT jit.* library lua_source(lua_sources ${LUAJIT_SOURCE_ROOT}/src/jit/bc.lua jit_bc_lua) lua_source(lua_sources ${LUAJIT_SOURCE_ROOT}/src/jit/bcsave.lua jit_bcsave_lua) diff --git a/src/lua/init.c b/src/lua/init.c index 2c39fc0cf1..b6ea368eca 100644 --- a/src/lua/init.c +++ b/src/lua/init.c @@ -155,7 +155,8 @@ extern char strict_lua[], sysprof_lua[], datetime_lua[], timezones_lua[], - print_lua[] + print_lua[], + luadebug_lua[] #if defined(EMBED_LUAROCKS) , luarocks_core_hardcoded_lua[], luarocks_admin_cache_lua[], @@ -310,6 +311,7 @@ static const char *lua_modules[] = { "timezones", timezones_lua, "datetime", datetime_lua, "internal.print", print_lua, + "luadebug", luadebug_lua, NULL }; diff --git a/third_party/lua/README-luadebug.md b/third_party/lua/README-luadebug.md new file mode 100644 index 0000000000..6704238375 --- /dev/null +++ b/third_party/lua/README-luadebug.md @@ -0,0 +1,132 @@ +debugger.lua += + +A simple, embedabble debugger for Lua 5.x, and LuaJIT 2.x. + + + + + +debugger.lua is a simple, single file, pure Lua debugger that is easy to integrate with any project. The lua-users wiki lists a [number of debuggers](http://lua-users.org/wiki/DebuggingLuaCode). clidebugger was closest to what I was looking for, but I ran into several compatibility issues, and the rest are pretty big libraries with a whole lot of dependencies. I just wanted something simple to integrate that would work through stdin/stdout. I also decided that it sounded fun to try and make my own! + +Features +- + +- Trivial to "install". Can be integrated as a single .lua _or_ .c file. +- The regular assortment of commands you'd expect from a debugger: continue, step, next, finish, print/eval expression, move up/down the stack, backtrace, print locals, inline help. +- Evaluate expressions, call functions interactively, and get/set variables. +- Pretty printed output so you see `{1 = 3, "a" = 5}` instead of `table: 0x10010cfa0` +- Speed! The debugger hooks are only set during the step/next/finish commands. +- Conditional, assert-style breakpoints. +- Colored output and line editing support when possible. +- Drop in replacements for Lua's `assert()`, `error()`, and `pcall()` functions that trigger the debugger. +- When using the C API, `dbg_call()` works as a drop-in replacement for `lua_pcall()`. +- IO can easily be remapped to a socket or window by overwriting the `dbg.write()` and `dbg.read()` functions. +- Permissive MIT license. + +Easy to use from C too! +- + +debugger.lua can be easily integrated into an embedded project with just a .c and .h file. First though, you'll need to run `lua embed/debugger.c.lua`. This generates embed/debugger.c by inserting the lua code into a template .c file. + +```c +int main(int argc, char **argv){ + lua_State *lua = luaL_newstate(); + luaL_openlibs(lua); + + // The 2nd parameter is the module name. (Ex: require("debugger") ) + // The 3rd parameter is the name of a global variable to bind it to, or NULL if you don't want one. + // The last two are lua_CFunctions for overriding the I/O functions. + // A NULL I/O function means to use standard input or output respectively. + dbg_setup(lua, "debugger", "dbg", NULL, NULL); + + // Load some lua code and prepare to call the MyBuggyFunction() defined below... + + // dbg_pcall() is called exactly like lua_pcall(). + // Although note that using a custom message handler disables the debugger. + if(dbg_pcall(lua, nargs, nresults, 0)){ + fprintf(stderr, "Lua Error: %s\n", lua_tostring(lua, -1)); + } +} +``` + +Now in your Lua code you can just use the global variable or `require` the module name you passed to the `dbg_setup()` call. + +Debugger Commands: +- + +If you have used other CLI debuggers, debugger.lua shouldn't be surprising. I didn't make a fancy parser, so the commands are just single letters. Since the debugger is pretty simple there are only a small handful of commands anwyay. + + [return] - re-run last command + c(ontinue) - contiue execution + s(tep) - step forward by one line (into functions) + n(ext) - step forward by one line (skipping over functions) + p(rint) [expression] - execute the expression and print the result + f(inish) - step forward until exiting the current function + u(p) - move up the stack by one frame + d(own) - move down the stack by one frame + w(here) [line count] - print source code around the current line + t(race) - print the stack trace + l(ocals) - print the function arguments, locals and upvalues. + h(elp) - print this message + q(uit) - halt execution + +If you've never used a command line debugger before, start a nice warm cozy fire, run tutorial.lua, and open it up in your favorite editor so you can follow along. + +Debugger API +- + +There are several overloadable functions you can use to customize debugger.lua. +* `dbg.read(prompt)` - Show the prompt and block for user input. (Defaults to read from stdin) +* `dbg.write(str)` - Write a string to the output. (Defaults to write to stdout) +* `dbg.shorten_path(path)` - Return a shortened version of a path. (Defaults to simply return `path`) +* `dbg.exit(err)` - Stop debugging. (Defaults to `os.exit(err)`) + +Using these you can customize the debugger to work in your environment. For instance, you can divert the I/O over a network socket or to a GUI window. + +There are also some goodies you can use to make debugging easier. +* `dbg.writeln(format, ...)` - Basically the same as `dbg.write(string.format(format.."\n", ...))` +* `dbg.pretty_depth = int` - Set how deep `dbg.pretty()` formats tables. +* `dbg.pretty(obj)` - Will return a pretty print string of an object. +* `dbg.pp(obj)` - Basically the same as `dbg.writeln(dbg.pretty(obj))` +* `dbg.auto_where = int_or_false` - Set the where command to run automatically when the active line changes. The value is the number of context lines. +* `dbg.error(error, [level])` - Drop in replacement for `error()` that breaks in the debugger. +* `dbg.assert(error, [message])` - Drop in replacement for `assert()` that breaks in the debugger. +* `dbg.call(f, ...)` - Drop in replacement for `pcall()` that breaks in the debugger. + +Environment Variables: +- + +Want to disable ANSI color support or disable GNU readline? Set the `DBG_NOCOLOR` and/or `DBG_NOREADLINE` environment variables. + +Known Issues: +- + +- Lua 5.1 lacks the API to access varargs. The workaround is to do something like `local args = {...}` and then use `unpack(args)` when you want to access them. In Lua 5.2+ and LuaJIT, you can simply use `...` in your expressions with the print command. +- You can't add breakpoints to a running program or remove them. Currently the only way to set them is by explicitly calling the `dbg()` function explicitly in your code. (This is sort of by design and sort of because it's difficult/slow otherwise.) +- Different interpreters (and versions) print out slightly different stack trace information. +- Tail calls are handled silghtly differently in different interpreters. You may find that 1.) stepping into a function that does nothing but a tail call steps you into the tail called function. 2.) The interpreter gives you the wrong name of a tail called function (watch the line numbers). 3.) Stepping out of a tail called function also steps out of the function that performed the tail call. Mostly this is never a problem, but it is a little confusing if you don't know what is going on. +- Coroutine support has not been tested extensively yet, and Lua vs. LuaJIT handle them differently anyway. -_- + +License: +- + + Copyright (c) 2021 Scott Lembcke and Howling Moon Software + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. diff --git a/third_party/lua/luadebug.lua b/third_party/lua/luadebug.lua new file mode 100644 index 0000000000..487b2c51ba --- /dev/null +++ b/third_party/lua/luadebug.lua @@ -0,0 +1,678 @@ +--[[ + Copyright (c) 2020 Scott Lembcke and Howling Moon Software + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + TODO: + * Print short function arguments as part of stack location. + * Properly handle being reentrant due to coroutines. +]] + +local dbg + +-- Use ANSI color codes in the prompt by default. +local COLOR_GRAY = "" +local COLOR_RED = "" +local COLOR_BLUE = "" +local COLOR_YELLOW = "" +local COLOR_RESET = "" +local GREEN_CARET = " => " + +local function pretty(obj, max_depth) + if max_depth == nil then max_depth = dbg.pretty_depth end + + -- Returns true if a table has a __tostring metamethod. + local function coerceable(tbl) + local meta = getmetatable(tbl) + return (meta and meta.__tostring) + end + + local function recurse(obj, depth) + if type(obj) == "string" then + -- Dump the string so that escape sequences are printed. + return string.format("%q", obj) + elseif type(obj) == "table" and depth < max_depth and not coerceable(obj) then + local str = "{" + + for k, v in pairs(obj) do + local pair = pretty(k, 0).." = "..recurse(v, depth + 1) + str = str..(str == "{" and pair or ", "..pair) + end + + return str.."}" + else + -- tostring() can fail if there is an error in a __tostring metamethod. + local success, value = pcall(function() return tostring(obj) end) + return (success and value or "<!!error in __tostring metamethod!!>") + end + end + + return recurse(obj, 0) +end + +-- The stack level that cmd_* functions use to access locals or info +-- The structure of the code very carefully ensures this. +local CMD_STACK_LEVEL = 6 + +-- Location of the top of the stack outside of the debugger. +-- Adjusted by some debugger entrypoints. +local stack_top = 0 + +-- The current stack frame index. +-- Changed using the up/down commands +local stack_inspect_offset = 0 + +-- LuaJIT has an off by one bug when setting local variables. +local LUA_JIT_SETLOCAL_WORKAROUND = 0 + +-- Default dbg.read function +local function dbg_read(prompt) + dbg.write(prompt) + io.flush() + return io.read() +end + +-- Default dbg.write function +local function dbg_write(str) + io.write(str) +end + +local function dbg_writeln(str, ...) + if select("#", ...) == 0 then + dbg.write((str or "<NULL>").."\n") + else + dbg.write(string.format(str.."\n", ...)) + end +end + +local function format_loc(file, line) return COLOR_BLUE..file..COLOR_RESET..":"..COLOR_YELLOW..line..COLOR_RESET end +local function format_stack_frame_info(info) + local filename = info.source:match("@(.*)") + local source = filename and dbg.shorten_path(filename) or info.short_src + local namewhat = (info.namewhat == "" and "chunk at" or info.namewhat) + local name = (info.name and "'"..COLOR_BLUE..info.name..COLOR_RESET.."'" or format_loc(source, info.linedefined)) + return format_loc(source, info.currentline).." in "..namewhat.." "..name +end + +local repl + +-- Return false for stack frames without source, +-- which includes C frames, Lua bytecode, and `loadstring` functions +local function frame_has_line(info) return info.currentline >= 0 end + +local function hook_factory(repl_threshold) + return function(offset, reason) + return function(event, _) + -- Skip events that don't have line information. + if not frame_has_line(debug.getinfo(2)) then return end + + -- Tail calls are specifically ignored since they also will have tail returns to balance out. + if event == "call" then + offset = offset + 1 + elseif event == "return" and offset > repl_threshold then + offset = offset - 1 + elseif event == "line" and offset <= repl_threshold then + repl(reason) + end + end + end +end + +local hook_step = hook_factory(1) +local hook_next = hook_factory(0) +local hook_finish = hook_factory(-1) + +-- Create a table of all the locally accessible variables. +-- Globals are not included when running the locals command, but are when running the print command. +local function local_bindings(offset, include_globals) + local level = offset + stack_inspect_offset + CMD_STACK_LEVEL + local func = debug.getinfo(level).func + local bindings = {} + + -- Retrieve the upvalues + do local i = 1; while true do + local name, value = debug.getupvalue(func, i) + if not name then break end + bindings[name] = value + i = i + 1 + end end + + -- Retrieve the locals (overwriting any upvalues) + do local i = 1; while true do + local name, value = debug.getlocal(level, i) + if not name then break end + bindings[name] = value + i = i + 1 + end end + + -- Retrieve the varargs (works in Lua 5.2 and LuaJIT) + local varargs = {} + do local i = 1; while true do + local name, value = debug.getlocal(level, -i) + if not name then break end + varargs[i] = value + i = i + 1 + end end + if #varargs > 0 then bindings["..."] = varargs end + + if include_globals then + -- In Lua 5.2, you have to get the environment table from the function's locals. + local env = (_VERSION <= "Lua 5.1" and getfenv(func) or bindings._ENV) + return setmetatable(bindings, {__index = env or _G}) + else + return bindings + end +end + +-- Used as a __newindex metamethod to modify variables in cmd_eval(). +local function mutate_bindings(_, name, value) + local FUNC_STACK_OFFSET = 3 -- Stack depth of this function. + local level = stack_inspect_offset + FUNC_STACK_OFFSET + CMD_STACK_LEVEL + + -- Set a local. + do local i = 1; repeat + local var = debug.getlocal(level, i) + if name == var then + dbg_writeln(COLOR_YELLOW.."luadebug.lua"..GREEN_CARET.."Set local variable "..COLOR_BLUE..name..COLOR_RESET) + return debug.setlocal(level + LUA_JIT_SETLOCAL_WORKAROUND, i, value) + end + i = i + 1 + until var == nil end + + -- Set an upvalue. + local func = debug.getinfo(level).func + do local i = 1; repeat + local var = debug.getupvalue(func, i) + if name == var then + dbg_writeln(COLOR_YELLOW.."luadebug.lua"..GREEN_CARET.."Set upvalue "..COLOR_BLUE..name..COLOR_RESET) + return debug.setupvalue(func, i, value) + end + i = i + 1 + until var == nil end + + -- Set a global. + dbg_writeln(COLOR_YELLOW.."luadebug.lua"..GREEN_CARET.."Set global variable "..COLOR_BLUE..name..COLOR_RESET) + _G[name] = value +end + +-- Compile an expression with the given variable bindings. +local function compile_chunk(block, env) + local source = "luadebug.lua REPL" + local chunk = nil + + if _VERSION <= "Lua 5.1" then + chunk = loadstring(block, source) + if chunk then setfenv(chunk, env) end + else + -- The Lua 5.2 way is a bit cleaner + chunk = load(block, source, "t", env) + end + + if not chunk then dbg_writeln(COLOR_RED.."Error: Could not compile block:\n"..COLOR_RESET..block) end + return chunk +end + +local SOURCE_CACHE = {} + +local function where(info, context_lines) + local source = SOURCE_CACHE[info.source] + if not source then + source = {} + local filename = info.source:match("@(.*)") + if filename then + pcall(function() for line in io.lines(filename) do table.insert(source, line) end end) + elseif info.source then + for line in info.source:gmatch("(.-)\n") do table.insert(source, line) end + end + SOURCE_CACHE[info.source] = source + end + + if source and source[info.currentline] then + for i = info.currentline - context_lines, info.currentline + context_lines do + local tab_or_caret = (i == info.currentline and GREEN_CARET or " ") + local line = source[i] + if line then dbg_writeln(COLOR_GRAY.."% 4d"..tab_or_caret.."%s", i, line) end + end + else + dbg_writeln(COLOR_RED.."Error: Source not available for "..COLOR_BLUE..info.short_src); + end + + return false +end + +-- Wee version differences +local unpack = unpack or table.unpack +local pack = function(...) return {n = select("#", ...), ...} end + +local function cmd_step() + stack_inspect_offset = stack_top + return true, hook_step +end + +local function cmd_next() + stack_inspect_offset = stack_top + return true, hook_next +end + +local function cmd_finish() + local offset = stack_top - stack_inspect_offset + stack_inspect_offset = stack_top + return true, offset < 0 and hook_factory(offset - 1) or hook_finish +end + +local function cmd_print(expr) + local env = local_bindings(1, true) + local chunk = compile_chunk("return "..expr, env) + if chunk == nil then return false end + + -- Call the chunk and collect the results. + local results = pack(pcall(chunk, unpack(rawget(env, "...") or {}))) + + -- The first result is the pcall error. + if not results[1] then + dbg_writeln(COLOR_RED.."Error:"..COLOR_RESET.." "..results[2]) + else + local output = "" + for i = 2, results.n do + output = output..(i ~= 2 and ", " or "")..pretty(results[i]) + end + + if output == "" then output = "<no result>" end + dbg_writeln(COLOR_BLUE..expr.. GREEN_CARET..output) + end + + return false +end + +local function cmd_eval(code) + local env = local_bindings(1, true) + local mutable_env = setmetatable({}, { + __index = env, + __newindex = mutate_bindings, + }) + + local chunk = compile_chunk(code, mutable_env) + if chunk == nil then return false end + + -- Call the chunk and collect the results. + local success, err = pcall(chunk, unpack(rawget(env, "...") or {})) + if not success then + dbg_writeln(COLOR_RED.."Error:"..COLOR_RESET.." "..tostring(err)) + end + + return false +end + +local function cmd_down() + local offset = stack_inspect_offset + local info + + repeat -- Find the next frame with a file. + offset = offset + 1 + info = debug.getinfo(offset + CMD_STACK_LEVEL) + until not info or frame_has_line(info) + + if info then + stack_inspect_offset = offset + dbg_writeln("Inspecting frame: "..format_stack_frame_info(info)) + if tonumber(dbg.auto_where) then where(info, dbg.auto_where) end + else + info = debug.getinfo(stack_inspect_offset + CMD_STACK_LEVEL) + dbg_writeln("Already at the bottom of the stack.") + end + + return false +end + +local function cmd_up() + local offset = stack_inspect_offset + local info + + repeat -- Find the next frame with a file. + offset = offset - 1 + if offset < stack_top then info = nil; break end + info = debug.getinfo(offset + CMD_STACK_LEVEL) + until frame_has_line(info) + + if info then + stack_inspect_offset = offset + dbg_writeln("Inspecting frame: "..format_stack_frame_info(info)) + if tonumber(dbg.auto_where) then where(info, dbg.auto_where) end + else + info = debug.getinfo(stack_inspect_offset + CMD_STACK_LEVEL) + dbg_writeln("Already at the top of the stack.") + end + + return false +end + +local function cmd_where(context_lines) + local info = debug.getinfo(stack_inspect_offset + CMD_STACK_LEVEL) + return (info and where(info, tonumber(context_lines) or 5)) +end + +local function cmd_trace() + dbg_writeln("Inspecting frame %d", stack_inspect_offset - stack_top) + local i = 0; while true do + local info = debug.getinfo(stack_top + CMD_STACK_LEVEL + i) + if not info then break end + + local is_current_frame = (i + stack_top == stack_inspect_offset) + local tab_or_caret = (is_current_frame and GREEN_CARET or " ") + dbg_writeln(COLOR_GRAY.."% 4d"..COLOR_RESET..tab_or_caret.."%s", i, format_stack_frame_info(info)) + i = i + 1 + end + + return false +end + +local function cmd_locals() + local bindings = local_bindings(1, false) + + -- Get all the variable binding names and sort them + local keys = {} + for k, _ in pairs(bindings) do table.insert(keys, k) end + table.sort(keys) + + for _, k in ipairs(keys) do + local v = bindings[k] + + -- Skip the debugger object itself, "(*internal)" values, and Lua 5.2's _ENV object. + if not rawequal(v, dbg) and k ~= "_ENV" and not k:match("%(.*%)") then + dbg_writeln(" "..COLOR_BLUE..k.. GREEN_CARET..pretty(v)) + end + end + + return false +end + +local function cmd_help() + dbg.write("" + .. COLOR_BLUE.." <return>"..GREEN_CARET.."re-run last command\n" + .. COLOR_BLUE.." c"..COLOR_YELLOW.."(ontinue)"..GREEN_CARET.."continue execution\n" + .. COLOR_BLUE.." s"..COLOR_YELLOW.."(tep)"..GREEN_CARET.."step forward by one line (into functions)\n" + .. COLOR_BLUE.." n"..COLOR_YELLOW.."(ext)"..GREEN_CARET.."step forward by one line (skipping over functions)\n" + .. COLOR_BLUE.." f"..COLOR_YELLOW.."(inish)"..GREEN_CARET.."step forward until exiting the current function\n" + .. COLOR_BLUE.." u"..COLOR_YELLOW.."(p)"..GREEN_CARET.."move up the stack by one frame\n" + .. COLOR_BLUE.." d"..COLOR_YELLOW.."(own)"..GREEN_CARET.."move down the stack by one frame\n" + .. COLOR_BLUE.." w"..COLOR_YELLOW.."(here) "..COLOR_BLUE.."[line count]"..GREEN_CARET.."print source code around the current line\n" + .. COLOR_BLUE.." e"..COLOR_YELLOW.."(val) "..COLOR_BLUE.."[statement]"..GREEN_CARET.."execute the statement\n" + .. COLOR_BLUE.." p"..COLOR_YELLOW.."(rint) "..COLOR_BLUE.."[expression]"..GREEN_CARET.."execute the expression and print the result\n" + .. COLOR_BLUE.." t"..COLOR_YELLOW.."(race)"..GREEN_CARET.."print the stack trace\n" + .. COLOR_BLUE.." l"..COLOR_YELLOW.."(ocals)"..GREEN_CARET.."print the function arguments, locals and upvalues.\n" + .. COLOR_BLUE.." h"..COLOR_YELLOW.."(elp)"..GREEN_CARET.."print this message\n" + .. COLOR_BLUE.." q"..COLOR_YELLOW.."(uit)"..GREEN_CARET.."halt execution\n" + ) + return false +end + +local last_cmd = false + +local commands = { + ["^c$"] = function() return true end, + ["^s$"] = cmd_step, + ["^n$"] = cmd_next, + ["^f$"] = cmd_finish, + ["^p%s+(.*)$"] = cmd_print, + ["^e%s+(.*)$"] = cmd_eval, + ["^u$"] = cmd_up, + ["^d$"] = cmd_down, + ["^w%s*(%d*)$"] = cmd_where, + ["^t$"] = cmd_trace, + ["^l$"] = cmd_locals, + ["^h$"] = cmd_help, + ["^q$"] = function() dbg.exit(0); return true end, +} + +local function match_command(line) + for pat, func in pairs(commands) do + -- Return the matching command and capture argument. + if line:find(pat) then return func, line:match(pat) end + end +end + +-- Run a command line +-- Returns true if the REPL should exit and the hook function factory +local function run_command(line) + -- GDB/LLDB exit on ctrl-d + if line == nil then dbg.exit(1); return true end + + -- Re-execute the last command if you press return. + if line == "" then line = last_cmd or "h" end + + local command, command_arg = match_command(line) + if command then + last_cmd = line + -- unpack({...}) prevents tail call elimination so the stack frame indices are predictable. + return unpack({command(command_arg)}) + elseif dbg.auto_eval then + return unpack({cmd_eval(line)}) + else + dbg_writeln(COLOR_RED.."Error:"..COLOR_RESET.." command '%s' not recognized.\nType 'h' and press return for a command list.", line) + return false + end +end + +repl = function(reason) + -- Skip frames without source info. + while not frame_has_line(debug.getinfo(stack_inspect_offset + CMD_STACK_LEVEL - 3)) do + stack_inspect_offset = stack_inspect_offset + 1 + end + + local info = debug.getinfo(stack_inspect_offset + CMD_STACK_LEVEL - 3) + reason = reason and (COLOR_YELLOW.."break via "..COLOR_RED..reason..GREEN_CARET) or "" + dbg_writeln(reason..format_stack_frame_info(info)) + + if tonumber(dbg.auto_where) then where(info, dbg.auto_where) end + + repeat + local success, done, hook = pcall(run_command, dbg.read(COLOR_RED.."luadebug.lua> "..COLOR_RESET)) + if success then + debug.sethook(hook and hook(0), "crl") + else + local message = COLOR_RED.."INTERNAL DEBUGGER.LUA ERROR. ABORTING\n:"..COLOR_RESET.." "..done + dbg_writeln(message) + error(message) + end + until done +end + +-- Make the debugger object callable like a function. +dbg = setmetatable({}, { + __call = function(_, condition, top_offset, source) + if condition then return end + + top_offset = (top_offset or 0) + stack_inspect_offset = top_offset + stack_top = top_offset + + debug.sethook(hook_next(1, source or "dbg()"), "crl") + return + end, +}) + +-- Expose the debugger's IO functions. +dbg.read = dbg_read +dbg.write = dbg_write +dbg.shorten_path = function (path) return path end +dbg.exit = function(err) os.exit(err) end + +dbg.writeln = dbg_writeln + +dbg.pretty_depth = 3 +dbg.pretty = pretty +dbg.pp = function(value, depth) dbg_writeln(pretty(value, depth)) end + +dbg.auto_where = false +dbg.auto_eval = false + +local lua_error, lua_assert = error, assert + +-- Works like error(), but invokes the debugger. +function dbg.error(err, level) + level = level or 1 + dbg_writeln(COLOR_RED.."ERROR: "..COLOR_RESET..pretty(err)) + dbg(false, level, "dbg.error()") + + lua_error(err, level) +end + +-- Works like assert(), but invokes the debugger on a failure. +function dbg.assert(condition, message) + if not condition then + dbg_writeln(COLOR_RED.."ERROR:"..COLOR_RESET..message) + dbg(false, 1, "dbg.assert()") + end + + return lua_assert(condition, message) +end + +-- Works like pcall(), but invokes the debugger on an error. +function dbg.call(f, ...) + return xpcall(f, function(err) + dbg_writeln(COLOR_RED.."ERROR: "..COLOR_RESET..pretty(err)) + dbg(false, 1, "dbg.call()") + + return err + end, ...) +end + +-- Error message handler that can be used with lua_pcall(). +function dbg.msgh(...) + if debug.getinfo(2) then + dbg_writeln(COLOR_RED.."ERROR: "..COLOR_RESET..pretty(...)) + dbg(false, 1, "dbg.msgh()") + else + dbg_writeln(COLOR_RED.."luadebug.lua: "..COLOR_RESET.."Error did not occur in Lua code. Execution will continue after dbg_pcall().") + end + + return ... +end + +-- Assume stdin/out are TTYs unless we can use LuaJIT's FFI to properly check them. +local stdin_isatty = true +local stdout_isatty = true + +-- Conditionally enable the LuaJIT FFI. +local ffi = (jit and require("ffi")) +if ffi then + ffi.cdef[[ + int isatty(int); // Unix + int _isatty(int); // Windows + void free(void *ptr); + + char *readline(const char *); + int add_history(const char *); + ]] + + local function get_func_or_nil(sym) + local success, func = pcall(function() return ffi.C[sym] end) + return success and func or nil + end + + local isatty = get_func_or_nil("isatty") or get_func_or_nil("_isatty") + stdin_isatty = isatty(0) + stdout_isatty = isatty(1) +end + +-- Conditionally enable color support. +local color_maybe_supported = (stdout_isatty and os.getenv("TERM") and os.getenv("TERM") ~= "dumb") +if color_maybe_supported and not os.getenv("DBG_NOCOLOR") then + COLOR_GRAY = string.char(27) .. "[90m" + COLOR_RED = string.char(27) .. "[91m" + COLOR_BLUE = string.char(27) .. "[94m" + COLOR_YELLOW = string.char(27) .. "[33m" + COLOR_RESET = string.char(27) .. "[0m" + GREEN_CARET = string.char(27) .. "[92m => "..COLOR_RESET +end + +if stdin_isatty and not os.getenv("DBG_NOREADLINE") then + pcall(function() + local linenoise = require 'linenoise' + + -- Load command history from ~/.lua_history + local hist_path = os.getenv('HOME') .. '/.lua_history' + linenoise.historyload(hist_path) + linenoise.historysetmaxlen(50) + + local function autocomplete(env, input, matches) + for name, _ in pairs(env) do + if name:match('^' .. input .. '.*') then + linenoise.addcompletion(matches, name) + end + end + end + + -- Auto-completion for locals and globals + linenoise.setcompletion(function(matches, input) + -- First, check the locals and upvalues. + local env = local_bindings(1, true) + autocomplete(env, input, matches) + + -- Then, check the implicit environment. + env = getmetatable(env).__index + autocomplete(env, input, matches) + end) + + dbg.read = function(prompt) + local str = linenoise.linenoise(prompt) + if str and not str:match "^%s*$" then + linenoise.historyadd(str) + linenoise.historysave(hist_path) + end + return str + end + dbg_writeln(COLOR_YELLOW.."luadebug.lua: "..COLOR_RESET.."Linenoise support enabled.") + end) + + -- Conditionally enable LuaJIT readline support. + pcall(function() + if dbg.read == nil and ffi then + local readline = ffi.load("readline") + dbg.read = function(prompt) + local cstr = readline.readline(prompt) + if cstr ~= nil then + local str = ffi.string(cstr) + if string.match(str, "[^%s]+") then + readline.add_history(cstr) + end + + ffi.C.free(cstr) + return str + else + return nil + end + end + dbg_writeln(COLOR_YELLOW.."luadebug.lua: "..COLOR_RESET.."Readline support enabled.") + end + end) +end + +-- Detect Lua version. +if jit then -- LuaJIT + LUA_JIT_SETLOCAL_WORKAROUND = -1 + dbg_writeln(COLOR_YELLOW.."luadebug.lua: "..COLOR_RESET.."Loaded for "..jit.version) +elseif "Lua 5.1" <= _VERSION and _VERSION <= "Lua 5.4" then + dbg_writeln(COLOR_YELLOW.."luadebug.lua: "..COLOR_RESET.."Loaded for ".._VERSION) +else + dbg_writeln(COLOR_YELLOW.."luadebug.lua: "..COLOR_RESET.."Not tested against ".._VERSION) + dbg_writeln("Please send me feedback!") +end + +return dbg diff --git a/third_party/lua/luadebug.png b/third_party/lua/luadebug.png new file mode 100644 index 0000000000000000000000000000000000000000..51a5c5384071c52c5d064d0ebfc718b9ec770069 GIT binary patch literal 66615 zcmaHS1yo#3w<QS)kPrw2r-N$<4rv^MySoQyym5C3?(Po3CD1qo2=1<pySqEn$@l$l z-kX^<&FXb;S6}Y!Q|DCGKKtwnmXi@hd5ixR4h{}QTuev-4(=5>9NY^Dq?fQ331++r z*atsTK|wijK|x|`TPq_|upt~Ab+kt`k66dok6pT&HKcR|bNrnof({U3<xcq$Ils5r zDkf8H8{-Tn`eF)NA79UW_azEdM#M4JCeV7#e*)h*G$cMIEb*YLV1mBhX2Z9%=(f-d z|1gBFIFw=Yb&8fORp!lYdkC7lFcE1GX>diSl!po?%gIOG>yy(<`nIZHBaa;I5@R55 zS>g=6Mm_YO7_t@`oZB92xFuq5PdQGL_;JWRHyRJl0Naob&kQ^kTPVjGZl&CjenY5w zms~Ja@OntGd<)+(q}?U7N~5Ieisu$tP}ssHc%L;ey89(IiGX()XK`Vhz;~5!Obqoo zS(lr@kF8?#$y&;cwu1)nG~_++pAcJ{zDQz-vwezt>8cC9H+Y3~^s+3#!i#9$asL$( zH@vDwPwUvLd_Hk2`|2BXG$;anIakUrM6Dw@U)e^GSOjL)E<?QcHOpQ8OSI<K2r7$9 zbNB2XaJG}mTL|pzuS5ponzv4mo{pBDcqWdH5iLL4=9yH#dV;y-jkTD%9UL4z*`N0d z=R7_~SR<mnxU?|hCc=9RR`eJ@WJy>Pp1rV|y`Ytag`uTAoS?0tp1mQ6*vZu1gjiHu zT29pm6$f?^g1)4v5Zv>hzpUnhShyE2--`?JD>=^{q&vA|8a~|wYx9qAjSLQ6wN&jk zUoVnNx&oVHGNNjW?0=Apq5lYs@*@>H=698aR{)Y^??C0o6km+}%-HrgcDjB%96X`~ z^n%~MA$4E+c`F#$cRt9?!gcO4a_*9WcTEX<{NLAaTt?KC|9pUpLix|>SKxon;Glob zytBW(`*RdT0Kxw`{%!nwk#~<Q@E7~qyuPJhwlPYx2<`6Lcty{B@J<KTa<teHI&w?6 z4|jXYZgvU1<5VJhcCH%b7H4it)#l;XI}@wO6GOu<J@a!vwT=%OT&)ARuAJ+92@At* zz1&8^hnMo~+){#l8X32XL^&_&RHwQjB(|^q{h1(xS7IiEAFxZp$m&rcdcVKWQdu2a z^68Wf_De~Q1f8LgMmllr3<P-ewOvVaEt6iQX^poZss*6NZ{vQ%0^pSCe29}ot**(` zB{%-MfdoekfZ6q1Z2$q@pd2TpwXKVe+vshbEKn|v*O%&-kEG@Lnh_z_%fna{tjI5c z42{9-JTEP=^MmDfOS)qAweZ6qh&WW;MF-zdKBo#ASdjGhaNU&BM(nt0-zx2Y+7s5l zjhTPx$SFD+yzYgATn91nZAtEClsSKd@Hb>ig*Bux+zF{#)qBQ;jp87mrV7Z6u8gr8 zMuj7JoT(i1&W}w)ZOoSUxRb>+u{(gS!)}52T=SgD1@DzU!&@J^Hfp!8c@)fZju2>N z;IiDy{p2RrU;bXxH0)R%JCE}^B`2Vc2p3^_vVDOWbQGPD?@$E9#@@olW{<S|#uvQ4 zw~!r{s^C_7Xe&Cfgq0joie3#rRJSH@pZt~x@@P696041~bvO2|2Hqdco-kFHuDc`2 zBEpEzX)m5LPhQ63wX39@Lr{nS=MDZ79tI46S<Dwt@bnA6jpA)@n*2!9!C4LN54B0H zL0wXYHmJcA%ScJnoY4AD*hgy>A+x_kw9cGf3=GSm$(CSB9EH4A2CKXY^im*iDWS_W z<56z*1215O%AC#$(>kW3wT2=u<CnS_vP1Yw(AIR38zz#&K-dL3w6`%MjECW1rmIiE z8;HT*_ErcuG5LYtsU}(Noep$)c&ME2LhewNCAGi5q8NAUe_vNK&G1P~PAE@iady_T zl0E~eO1`A8iQcL1P(vdogU3L9YUzFTnRiM)*mCce919N*C(vWAJK$>C!W5hO@(OeG z;q!?0{-o^Z@qBstLn;@oMY^8apL8-K)LO2Ew-VRGq;B?;Am3tw!ik*xkEUFzTu!DQ zg4>t1p`r=K4G;t#wjk4s{&VTTM89M`G}f1Jy$G=GJ3#`$>m7Aa;BZjmd61xUYXL6E z26^f?$dRWyLlS6Lui5#K$NIaCxf}CU+x*EI%QX4Ep+)8##KtVyMlt@0x1#;2UIezV zcVC(C3#7jjfk<;_tM~=cQY^`cAc0g$3{nn86>sryjXQS*7iJyOEfD)zS2_07YU`@( zq`4ERlSK+9ssRR;Rgv~U<=&~7-;#w5<4rs)*3gE}_%18ms!lZ)13;4ZZ<q$4IeQwZ zy?IL+GzZw6uW8yz&r~xS=gywOkc5SjNEb#j0_BdWJ^{k9F#1qm40_BVsxr(_oQwQ4 z_RS%nmMt5IyOTULE|$=L`Tavb8_>~y8ixxd9}T~2uVv2O{X9-i5e@a<>84u^h!*F7 z+4H`tI+(iI0N8sO!}Z~TD@}_$hRE8J*UWu62_=o<1{DW0JC2__pb|iSLzs?rksw=> z(WoN;JVJt6rl{d%=T$&IRgcA?C~_JH%3W|oc!jTfsm^fq&c?64h9YG=={W7@D-9JQ z3B_p?>@6kn|7sLH@m~9a7{TVG1wQ;WyR<kaEg|rHc;Eevm~!v3_%lygv8C<q?#@xU zGzOW{{QGfU`prOB{KUYqz>3Vr2;|lJPRtD<t|}3EAObir+b0QRCGTLB4Cd{<^gbzV ze%Q!1WvK%?RUh`&ijdg<JH4%3$A&9{Q!oN{vE!_`!O*WvSL)65NV@tw&?^4QjK(ET z2$N6%JpieHAzZTjB-!>|RZoRlhND-v1`thtp|SP~<1>cG$I`Mg3jrL$LwqgZTrE!1 zJQQk%qlrOp_7G%f(0TZk0-$urIN6`0QgeMk@9=SLm?YmX%_IUD?w>jK+aRa|SMR8c zVjDVFowxF|D@8YVL1XZae@NcX)ZGg|-dq<S%c4@uHdd5s*@0}#{UIWVjN&O){&T{@ z2irBq$%x@O+P!}UaDX9v`09xn`?~=|P_Fp*;~gph{4rJda5D|M>Tb?FT)Cx}{b~`J zuk!ETvt+1{2Ah4(`K!b^)A87Yfh&8*^6+i^36P!4Wm@UvyJ(eX-A!?eI}8TB$N1Vs zf0d2$i3jYA={)%^Wv9!04!m4&cJQ0bUU1HwXA*?JCNq~3kTf5*en>aq+iTbVPJL|D z!99gbWD!+~F<n12e%Dh!98(?ZNY24(Cl+y%)_$+OOY!^A=u%7M37+yX_PzPp3fe&X zVex07NVLufI5@})*eDIl1LGPfzTW$tqT2=%s;Z~zY~}~1bWkDa{WM^iP)p+>eK3D9 zp+W`74E1l~IQW3t`X<r6gn&50@9c!D-WoYDZ{vhvH3q<a2$pxGeNsM)#c}F<P=08E zmQznFPMM1Vdr3a-<@h0+JT8BW-8(DtW{Dl5F|1q*3a&y}lEpM6=%CQ%4#4bqNM1-6 zsB8ge;og(e-@d?!dvD?G>|}6w(4My7Zrc}niALOANNy@<;IuzXA-tPxD0y91L~kL% zEF6x09!95a(X$+GS66i&lG<|Bi)RrPuCaO4=$>ce;iC0TZ12}~D!utch+OPOxb$Kf z7xq?HSAM*5rlrMVf@QFR6`vL~Yjz~MuN&_0+h7a>?^NDgT@EW<Gx(N7`M#mcw&q5@ z79Oim`6?peNOB&BMsY%N8M<8Fc(Fuox7ZRbD8cDgew4YF!=;yGr|w~{y6%SM{|V3V z_`sZ^md%%y=6?_Vuw-0wc#hYHUtSo~)GcFHS2?%8pW^fhO?5t~XeqKfrKC3}<hVTi zLc%7>bxFq*q5rnwkw9x<(D-)0`HN95D@VFfF!7xMdEvC;B&>7M{3<2<yht{L7M_do zZ9u0fo$R+hd=|C1U7n=nw4R~3&k==j@xADt1<O@Fqs!<YHUr;T?9E#~s%N-fnT)%k zRsOVH%&;r2m6<An-+#L?H?t?zb76?6L0_U&aP_k<f_gD${5AAl;6@(eNVOAN=F%57 zt0(%$BC9W(_SNaLb>-GMYV%)V6NW61`r1wi!t{;nq?z(3w2Z!0(!uq4?<2z#@!{7Z zz)h#VEnl$h-Bm32D}K4I==@O8rMDZGWk1yYq)X=Q@-La0@{Swby>_Pm9kwgzz1_3E z5_p5Glq`uu=Is=jC%f(Z(|>^5UyuXW+dZmdI}_Ar|4D11*Wfj=Z#g3DyMHj>KN#>I zl=nYc*54zY{q}-g_s<ef4EWvgoAFjr{?^Vs_bDg2u#aZX|9U|8%@?1o*KlzE!o(ZF zwi-{m&v(jfN9zzi@ce1bes{Y1oj}I9?iX!*_wCb?1iUZhZoD(t?(6TDwY%&>2N)zy zJ_tBr{recQD3pWC2J`MinOhd1NF?P21H~~eLEkNgMO=nGi9~L<w8&@5CkLe*zJedy z^rbF+L;zDR#wTuv-TK(`?k2|jz`{~KoMARIwL1vgdLJq`W8V+5u2fFR$$@Sof40YK z`kvnoHzG2d_4z{{1ODn5<i5IsQe7ztNBfC;F}Jy3z{N^l*`cUWJ@>(J!~>~YhyHEh zLyJkvxr`H0^1h(&z6B<C{PT9&+V<WIK)cYzNb=PA)BFFJ58oTWM0pdMd7nv<tF$24 zk1%rFg#pN*t0ADatnx7ILCDQ(v5H_66E?+uV!c~`;w8|7_B8k#Hd4)itelgwEUNpN z$N>$=VKRd*E($w-<hJ4$cP!@Ar))<b&^9bN_uO7VPC>d>y}Il9_+M1`t{vC>!a5Uc zRU)~VHkBWOcL?GCLUj>xfI0@HtjpDnYp#c#Zpbt$(3wTf)ZX*zrq>V0Q5BG`eZG(* zXJH+1@|320u|RSbzBnCo`qU_UIwt+hYIs*AYSwK!eg76A3S~cNTXvd<Ybu(#HE8p8 z91)O_zFHXSnWn>Aahfb4tM4{nzfEtVBWdMolu)HJ3;foM(9S)fx~;-(*SM8@jjW^m z<03Kq#avsGA&=hb{771nhmq>-&CZYQ5%XHAXd}LfiU-5v7w{qnBNGXcB_pmL6(%3_ zQYZXWJVJkeq?ijCmN|f=-@hP469DK_`<=Kq$2UPr=0m45Wj=j^e25VgbCwTLCTPez z1+UHT>bq@1*OUhi`;N^F^2aa=2>P{`MJ#_-W1@YQpYe|^0s7$(d{(<}p{-}Naj?6J zlZti?tngl$viM|*_rwyh_0y_1qw06x535$R^R>9fd*520>z)%5ZZ*^`Kt&D@*J9v< zL5liaUk;YtP#=)M`njgUkmWtF`eWMGz)|edgTF{%Rq%w5o*-UF<Xqz6?xg$u!(36_ zqp54mXsw;A{_S*bVq?n4K^lf0Q!kzf`*4wDZ3fsvxk!enkUp*O)|TTFfJn(G!GhOT zUVAvA4$~+_@S?1K)H7cI<9Ol+7F84d;AO7-%)Bhnr1n;m-hn8M%mA<#UKO5kzLecP zTq~pR754&!Bo(RVdE2<Oy)-otUo1qgWkuG!H2bqf)4ZB#k0B+zG$)fw_gw!K#^1<w z)-YVZ>EBMIlopHd*lpgkG2W7@_*xAatKWjA<eZ9=tZ%nkOsZXLMSME#rq@du^N(kU zd)1nc<Y{=>Z&P3_!zdW^t^8Z|Sdl-2VZSaiva8`xu?<zfE*8ln$k&LsrM%ljw0}Qf ziJC>{ry7@~Y;kR18^tCxpg8e+Um)wqR*m>7hJvC_;c^xgK<QGU8^`L$$QQF>&vH^n z0kd(*fi1og1^|3D{9R(Z@H+ksH{WM70g3U@F9R8-JF($x9U<ZPG(DQRaV}iOp}GJe zETp0e&9l6vaeuBTua2t~krpdumkCFiW;H@Fz=j2j{vLBpk%@4)u64D?Np%v|;cJ$O zUflPqy(PA6Y46TIFfZa5O{Is%q(;eSR2>}Fw$~*(-+n&$p5I*#9$_GRDMWfxvPe+{ zw4vtAED2kgla?*v!Cv`F=F6wtc82oeg-=3D*Vt#yI4i^Jd~6i7YWbrP>epVF_dn@+ zY|pMNm7T5=v?PCAbAHkSDd}FFJ=A43RG2QDb}{6uHFJnzhq>7s$rueEG@kQZ_lbyh zL@TqbZ=Thg9_y-TYY~w#+G`znQxr6EzAsNsiI%VaCMqeqAMtMOJIR14XPv`kT=fM6 zE0Bvzqc|t%ij^DyKUG2nVD0%uP(0mH#e?$L!nl3bVNrG|`St^*e32p>uvWJ;RCOQ0 zjDv}e%g(kdVat4bIWsXmJ~lZX4=fqDZ{arsAWf1}Hm=rs3efDgYnsr-dHu_}{K#L3 z@Sg;xy1%>ffzMQ@5xp6)hC!&x0aCeVsLQ<92G)UAj+tzBw&GU>u{nOxvoawprd%D# z{OQ4z5@yLbmzqR>pd#7sKgBS>7!D5O(l|*;dfslA$hAY(wE>Xdd9q}kBqN9F+6dHG z<;qg)PI$?Nsy9O{1Y0x0efIOh9(A;J*p41=_+q_I^SO1Y-eVqm2T_(Te^bIJ=U8I% zpn~D*lMlH8A*U*skZ5hDBdtDj->|u_OjV2#=Jv~LAG%j|uzF9ogbyoJKKGOoaAUw9 zo2j45f3XPG1AQ|Nv+k(HoGNt~cN9);lCq%oEZ}q$*Ib$emD7I|Ftx`#l+<I;P}cK_ zZqprdHAa<YF5+dG!q}7!DdQp9D}VFENx9w2Buz|MlUtbIA1qB!jW?S)<}$&3@^qbH z)O0d=VXaxK!>PL}kjrx1lC*tK)sPl7j%*d_g!`~q$F!y3S$OXWWv`Pvugbb*;9i_! z92xOO8h@Yx%#Wz_@1!^))9W_1a4Q8xZ5HAuB1Fvq1Y0&rRcPMzcf(!AK*p-MKjOG0 z9=A@)^L3d=iHMlkb4t%x{+s6QcF5*_-yd4Joc;{hYuZW9nd$t86H%lGG#g;O;_nn> z63>bc5Aa_<?A!j_{t!xPD^TB+x*=$<)q#*}=dc0M)5<*}p|K@+9{z3|S;oexZD8-% zQBNr?C(|zyOaEx<GqZxhTKP+tvvIXSi^bqorktvAwc6aVEMeRq@4aQ{CH`g+rIJwC z4Zf&_H{<j?N60m7v0CEmHmC;q(u7O!>D1^WT0u0j_D^wf`CZ-1itEdj)g|d22q<c5 z=o?j=kTS4ZTdF{hZiMV}sz1$bK%1w(_Co#l8H(!|bRKJ`h}(4Cw#eC}8GGIqD^6S5 zPc)Ac5u32o^W}bcK&gKg6#8)WaEmfh5G+CoGny{wTXPAFse<43Cv5!H{P;DQ$IN69 z;SYhOs2D*4#Vv#-mYmhWvNOZYfMG&b2c-AZI(940c0FCw!=Z<Z1dFcseD9#%e|i<+ zZ_)tQ5gUF_m{Y^_Q!}+CTl1-(KOFriGeJ3WUiGFp5DG}3w0dR4HxHZkdI}=0uai!W zQfx#+bTQtgFpNA*%qxqe=05A=-?caF;b1*>6x@S+AxrWxD4n2(02ELnYOr~V=WXYt z8VYjve3lYfOi#Le1b2AIji`BodwiE>=B#oC+ndN-7PO8wT}}P4rqM~2x};GDE)l1U z#7cf;$f|V~i)d2_0H>jxr;2fGaxf)weilSThyS<|Y3n6Ia+5pzoQ*n?(BkaaVdr8L zDFoz%C7g4bz%2y-4dps}Ru$pkcTX+<uMD&S{QDAE2!5DScseT$_Co&$M#?sT7czM} zbK+18rZbny2(CTTC{g-w4WF=Zeu;N-M=%_#a(Tx(em<7+fR08$D?;3#1_O)>*x$`H zoElk=v21UJWpa1zDD9eGH>dxCA?f`*nOxVpVUt+P6-uV|`LFo#jRZSCM>JWEHXc-8 z4lOY{C7oPxiG;guVjNXo<$1p_kiOf;QeMBxM+JUOqX~bT*T6u*YQXO+-bs#NKI%uL zqNOCQX_nT!RgV@BMYdvIVkAaIZ#j^uv&U6dWO6FS0x5azkQA%z#M~>6p)x+mB7?dr zT}AVgIOqXh39~g)%zP}bh}dW^tBj&Okm<)G$y>%MaW&izM1#$;hD5Z84(Gb#8JR>v zPjnOcS=r8gtZyV5o|~uU{eI;8Yg})RjXviD;bm_8NN0kQ?%kei6cHLgi6;t&l_Y9R zm0nPk6ifKNM#=-5Z0Nb5xezc5s<7G<WNt;EkODT6P$u)gX}ZZiek2m?h%$w66u8Q$ zm|?V<K>A}<FAN2N*GkuwF5}rh<l8QdPFyG6p+z1L5I=FhL;I5tWLQGgP9Go}Z$6ze zSQHUDSz0c`oxT7GvgEBdZZ9kR!biX8hZu?!7|Ae-234Z$oAn&_c};a~pg6UvCeXWX z@k1Gn9$fAqHU-;K6(4Esx5RY0YoDNtC1FePt=VqLxA|4aewagWr{N+s$(>$^DJ|ma z42IUvBHdcK0m=-RH;<<JqXYY@`x`zGf-pLG9qtMrF?e&e$M!IRM^+kx{CmkjAa9i# z@V6+RUkd{v^kz`&I@)t4ayX=jEnLd5BJie`kjW-vTuG~jOby+bNC~^4y5^e^=dP(# z?8amN<$UvyX`wp*+1-F?pC#^T02f(HJ{=2#jK03{9vhF@STe~gF9Mg(PQudtj*+?v z3S~4Yu@l#aZ)CJUH8jU%4NI%ZmU_Fu{C9hgBu>*t8g~K1F(~&Q$Ep3hZMI?R2^<9> zCD;Bv`3>E4vL%)yeIy8iiifSW?x6=38{Uh3*v;^r%VNne9Ci7Swxb%WAAIg+dsmVl zK>1;%p$h~uMF`ThSWr)ft-FLqBe=C-T)UTv87%^+XtJs*V5?n|#U-w<?!>TO?!(F4 zQ#jO=Pf5_JeTXW4T+rtjaHfW2KPfKX8gtG$g4A;nmNt#SyJlQZmT67t>8cACHKM~i z0|*?W4Tm6UbxRo|6-eYO|9y)eGXRcg5txH%)`IW*-1dWlKWC&BSrMIU$Mu1_VNvnB zaOsXn0~l8O<5vpXA$0wV2;x>Nrtvh}<slp-`&Lc)4b$ae!=CZ-XFP^=bEi)Fo4hjf zu;DT<qflD`v4it%LfB9@IPJuVv~o9!wy%&qt9+_9S*-8AWazZMH>BA0iYqg%q6CEG z=)mj!f|g(*XK*MQ+kZP6z}sys0)LwKSs+-|<^K4j-|jxa@(2xxXSo07;TF#;TK1V? zgZ)9dHT@OpddYMc7l-lpFPvvAq3>8&`JG#MyWDJx=i~Neq-f}?S1=q5rt@OWG`_qb zLPyH~NK*`@s8SJ4l#)Mz#7!l}PZdypsyfuKqYjLkj){(^OLZmp@-P_w)irE%mn*;1 z?(IZb)}r;RvI?YVt`!w!=4H>XBe#;1|6SNhz4Dl=_eDRGk(&#RQ^^2H{zv7lB$H>* z%HvG@F<VJXWu9jMpQtR$>z}fe<?}WuDUqe8DA(*zEF$nR8`eSiv~-aGXcnRuX01Ju zXu-F*G!1pRl9P@$Dpogx%00LIf-wXhGE>ueoXuVi5jaFlggIbbvX~8rA=Q!6FxHbc zyL^K?2s~Y)a<St53`jK2QhxWCul-a>g~;6MxMc}iCcgarub<ng%Ioe@Y;dOeY=|!Z zNfV*C0bn>^(NiynQy1ygYYi<{CW<3@!`4B1p_99d*PWt6GXW-wl!F2~?3JbqeXki1 z-)3Zq>?8`lhqG?xX_o!?mpzC=i3%SJcMEz~k}ur}IK7U;;O2M_{(4`+dV!T!-Xucm zk;i@Epg4yyjfD2_!n*mzUzkA*_?MhOIGObwU1Zh@t?CkRF8dE>aUuutVHQ@QUt&(4 z?26+EXxl^s!ADoJJd@De;#6WDWE<o*BfnSYm2P~<eQs|4lA;G53|ex%U(PJQ%H>H; z#26^v+b@0pOqfFZF?LOUHLN2~7wnjin;qyp*#7|eLOwXUv8iINAxS^<rH!z}2(VHA zFN@*42ZG<!Xmq`==VGtF<3@n!3D~8z+oyI%+`5B7>#O}<t}vRkt9j^q9{BF~L!2+H z1o96G_UlEE1{;3XGbkKAVv0hc!=*fQ{)&Ls3C3o-&6m3kWo!!HCm82SXChUBVDM5- zZ`)hDlgb_PF*4nMS-AM=FZ@hAElDQdX??52sC8az?|vWYwQvMgj;qPf1V31Gg!xnP z-mWGRwbWO0%m{Na091h%RwIYH&$k^tJv8S_%8!y&JeQRr^5t~>``Tc+{I>V4jI^p= z>6PZ?hm&_V5mplnHLpMo=BV)Kf%Ph1C>@rDckZZ-9=TZ*564Kb-;5uof6~^K<$TD{ z><SLc&<4_8n!Zl}E{T`Mne)beD*BZ%RzK&*NEN2L6mvS(OnYg&E~v}l(RqpguK(8X zUb3~&Zt|Ixv17^Qvh9~_)A>l5y>!Y96`*idU&29RJ3fY?$!=u&F2FQjgvv12FnT*| zD4DGhdG0D89~yl*KDcZ_FHgrf;r^!At8L?F3Osz@^J;z53_;)Xff@ffrRm&Y9E1I) zVi{4rjsdNi#aLpK;iri;dPi)prIcC{fH8oZ{$Ktu!w5R+e-POOuBd8odB)5?GIARP ziE5!^FK=-s$I2U%b8Qo~S2u&}m{qJ}vu+4SI(*a^bb1-?e2A`K^|tt3Cj~kCz<m(s zOXybuW8J%LFRz1z)2m6mfou2Cr{oOqL#tce9G@DmNB=w*r`N+VAH%Ti*I))~`sUN) z=Y^JPQ=Qw3%|H#_*2iarXq1wn?`vMBEKNb1Z2Z=f-yqR0MN~OvErQ+P+tr`UKXt6D zdcx!-1L<@PSqabj#cKN0KF--wS-7E};%RhFTAr5;mQQ;Zb;)dM8Ynqc!EWexl(Cki zxyN0=dpq|CVG46aWT~&d4zVh&$lv$hrEm*vJ(4P-w^JNe0P{qZ#iPWfHrJdCY|Vzi z_{n#-8Cx;3PK}z`_)zNRF>cd++Uo~M#YB2u=J9ETaFHQ=$2K8D^HfT8PH&mD%H-;~ zOC2k$*9(dh<H9w|phQadTgG=v9$CK}=nNa-1zfb?P6A_47$R<JlK^^!0<Pg|<6U`r zkxo@N)?H5IF>amTtqi!g3`UZGHdt=+N{c*Pp$BsHKVYOf^d=nyZ^KSby9WyHRSp7t zzQoZ30V}JpzkJUbfo`QZ>j+)*{5}n(nkHj4kV;$^LY+c;^+|*n(EhOA`glCmmBKJt zVc@j0;S&}9ys(HT+S1XzfbH;n%on-&CR{#Mo$mQ=rVB4cmV=3`&Ydj@T=8oc*!PHC z*_Q<wQ!<oD2(D*{XnL|Rf&5NN#9Dat5Q^A3kEiCk28mn~YG!aU2E{uqNEePuyyktD z*dm5xn=>cAu2dz83eTS5n%xX&QhUX|;}6HZO)w)dEQ@Y>MddEs0^Hf=uxQe-WmjEi z2olyA$5AyHch-Q`x5ThxUb+^XRWp3q{{({na?S1DykSk4NQ;Q9UL60n_%iO&43ta3 z?gvI36kNK|J3SJA*T4P}E-HK({!O@gyMDaQs~I8{pd20nV4y{!)_%H0GF^0f=E&?A z;ScKvTEC7(dF8-GrjVfzsm4fVS@*>5N<^<SOeJV1#ge@F9s8asPxAV_suc_SiJ105 zT&Z-~fYBcMb+AC|=CJOZ;sZpdm<bT{W8=Z9RXa&P;#)bg()0cN7<i~k+{$gwfPf!g zc?<FUb&BYRp80(1lp2=#*&oyod+(EHS_bMR=x2^V+GS2?WZf6yK0I}~p#)!;e=F<s zI^#ldU7I_aAFQw8XF{&?%!jRDrMpg{=9YsJKo{H3=z;L@pFg`~v6uOb1k(t;&NT#h zW#|A`<BDt{brdEM6+hko^i2%pbV^=VHQe9&ggj3*1{uZj>u(}eATF+5v)ls;z2z#C zV!a2%C+7l>dlf~?7J$QcK8tRW2`+Rl<!~R9{&<XTUBx(boZg~A+c2DG>iN#L{3ap^ zqqISDR82GJ>=c#vb12!Jjw<hzYlv&KTFXYQclt28{o2iPS9=*PzT1iDn}S<UXx4%( zWw+Kajz>-j+plBi(@6gXQ$Yn(*ORk=Dr69=fy!iK!azw!Qa9`JYpT@cyr*tf(vUK> zxYce$kutNu44CHPEAZ(n#D_Q{&`+4iM*AgG3p|Y&u`7_!ADk6&KL2!Gr}#QWJZ<O9 zf$f<G+f=EU--|(L^w~owILzw!hc=jQN2qaZwzoU$G9n)w=PqZqX2LK@U;B}e(;ZrI z%Ilb0hx{^LWy3u$8YKkQZ&!&Za5w7%2tZ-)XK!S-3iZ5?PxRShQ~(otqE@;s27M+) z^)x~KKDL+nH8McU5dS9jQc~bg^u!14-w+ne&Iua-m?nLGtW@Rp)lAIbW3zz*4OwLd z5`a@zjv}`sdZ;#4=kZ#5T?Ic8g<v9zhCkY~MsNBsh`fsZQok?JJ%I9DMaqDFE7Vf_ zB=Xe)GpE^!A=(zJgO|AlEn?N@g?cxuLl7ViLwDXbYe8=mfI#qvlZ*-%r3D=3w0k^` z7b3arz((L&zr?LD?o_JCWioxZgjnL?)=f8QH><{Ps+<Fjl&$V?gi1TlLk7TgqO3pT z^Q_hLUedN0b|=#E1&T1f^808J3Pzw&m(~3fA79;18OJ&sq%_F(y6!Uztc%|xJpLM7 zIhtqMEKfNPtgxwl168@$@tG)OEV}OFD*Bw$OZiQ`^jETrZ6z+C1uQqkrR6+4|1&;~ zdM&mq_eH4P<wWvud}uXQ%n&mRiJRwLfjq}`zPw&c|3n^}%3Rco7uc1>CnXcMM3<;c zWhL~9p6=iDtI0-G_H^7D)ihxtSM16U^rn&mqHXbN*+%=CS(g0|9e~#E|Ih(!eQ8A& zwb!ik{7p<K45gxI-Xzv*JS&=3oGFP$vBY)x*=CXkeB)_dfjC{^3N%3)zi;UZJXn1* zb<dL4t<{g?LDyz=l3YIdUcu8=dfw+Hm&)i`dP#|+5<(?76t#Mi(iV{?@((`aZiDcz z2U&ml08lNO>}b>azOH{X8)ik&2qq3PXs);c=&Wev&$H&6ljeJ(LhOQHto3QCm2Z|- zIO?5hmxofgghr@@`Y~EC43x!TO=bazBXW+6{e{`;Wm=M~Nd-N<Gyf2~@v@f{w(k39 zR?o+&ipLwB6mgSZyzWPycTmutS5@w#<E!!+mOM5Ko}U~|fwyNNTUp#^Q>{<;UeDLd zUS4j+j>mz%dGaVYAz4H<70VBXM)NMM4^pWY{aGx_c@_+7W(Yx6jq%VaY}V#Mm$~Va zs!TJ(jwFlP4H2W6ykJ9#p0lz_ZKn^3e)>P`L-Zx9;X8kNp;u-tFxAa2WN;j~1|s(} zENa@8P+XP0DhayCx|0-c^qETwyMAlsAf=(c!v3klYQAAj*3otL0u{|F<>Cn(+5Rbn zMLUn}+I24Gkmy0?NOf@+(7$-rPeyN_=-6T)E+QOcVP@ZR39;g(zu!|hfP87L(v~kR zD8>Q7J3~P5{OY1M4~&vrn!3kHD7MWT5wD(6sc>LAm$b}C{AD&Hc;h!M9j}F{4bdX? z4iMh7h#J3c{<BDzCq{*H3Dl-u5z0vFRVkX}egfp%52I%9*nND)?|CjSzxJv8OdG}& zO4Vp+Erl$t<5F8m`kT{SQTl3Qt`WQ+Y{f?S^MrtV;sb0LdQ+(a(aQ4zm8Rb_m_H?5 zSiRduUQ1#jE7i_=i0`ExH<HaR>~fds$7v@W!mN9{s8oyeJrRPzN0Hw$bhy@UuehLp zG-w_F^|p$!Abp)9IR3`2_2S2i{(|qjI@Rm_*R4-i=Vb#mcEt{g&<~K)pXFaDLS?-? zkBRt}%$D=*j}Ns)*;ST&e0Zm|MC2}2pIel1cvH?q&@V6)M*|wmtYr4?c$?QXF7BZD zjh=5inZ;{MxbpS~eh?h95AzmC=PGn0HYt6fa6ng_7AZ?7oldi#gqA(YBpB^!9-e8d z;q!in`F3K=aB=lvr2Lbzo3F&@due{IGRm5grVS(G;az-Fq$RFPi_>J6a+W%f$E<cC zCtAX0A(u{zX&<Nl{m(|b5ha(tix!tQAjZA84Ki>`7s^IKKXvD`{~8LHK?!B=%IDBa zvgGe0nm7T$cg-4KHWIrBUxG#ux?J~M@B6yth{y#KP+l1xbyKL`NO1%}4b*65oA~B5 zUx_emzu{}A&<$~pmm2)a_u4GBRkMbd&UPu{mf2<V>K47IrnsyD+m}y)A12>(wl!Qw zXZ{GiA@fbSEdXtAY+x&ckMB<ToUSNB2^0H*FS^0p{#oE-v3v11GU^naN)0p9b8pam z_g}1hib65)YrsiNGd7<{_<mo&Qe!ev62|oEizs@&4A6C=Q0soY&?HniCY8I9vWh7s zav9y`N2eFFSyzmvfXv5$xiR%r;lI&WJW~PAV*03q5~z3U4Q3TTA$SBCtUUf0Yfz<F zqgf2i{v-Sdt0Y%ou?)TmO=4Zm+V;h2sP!0mxc!m}kuE!9n;FWq%evI=LgTFaV-`$$ z2*qU<D(LZgK5l(}yk=OoKgtA<db$hD6lel_2TQD;RIZerj&>cEY*)X*Y%zt|0xtea zpmzQ_Da-`>+OM9iSH$k7llZ^^Y=j?LCF<uz_ib(uv~E{v%@(NLzRI>5V^ss+87)WX ziHKvlS`qj0i9*ZPw;-LaKccHu!t-n`BB?cGnQb1c3pPum^dWHg32Mh#^FO;&_$ejI zzD`R9t9%N@5|v8(a^jgoy^l-3yT<ebcWY$h2=fY6t)TVuN^8fD;6P_y6P+sAk6vE$ z)BgOd0c+{n^L1%_%w1hyofv4Y!o+2yQ{!4p>h|VN_aJeTlWIg5&Z{tp+>7uhx%?eV z4Cs~$tMN(uewE_Q5<hSCc21ppHP9^mcb7D`W73jRg|yZ*x9#4%xqv0=bn2Kys(_^z zA`AnmKe@hO0p#`VvP!-hBO>Fk$;i<WgrScxWzq*^5~{T)YJ&ft8e(Q1wZkpXAg1yW zQf!wxj@_j-aP3s<0G9cHZ;hBTvS3%70Z8{4s9_0({|2=9gKhq*2r`hMxNdTve3QFD zTM!rN`V9<TZT4PQm_K1sfxk6JkbxLlvZ_!cCcWiG<;y7knSb;O|8fI=F8s&x{~S*4 zdlA~vG&mbw?!@wz2<aX37nlIa|FG<TsdjE@h>tbx0!TsD7{G#|D2eDqR8-e&9cKUU z^VXRVH<Q@=H<&enIW8h|cdvRsO0l23hUr{af>}tRU)3lhjx48N4zaEvjm$~z8L|M0 z&=CJt)1l6#ZLb_X-};lz&dZcOwi9WC_c1<T7ezsl8BK`(*i87r&v>2UvSRJ~A3dZu zIE-2gr%@^_=%iAg?`}5_t!1J!$QtJ(1#iMOb~%zQ;Z_NY)Xv8b*-0h?t+Jm@Ufu_< z%9F?ljQ$0Ogl`*rhZXlshXA=t`hOS}Zz@fooKHt*AtRsW)iG1-VMjm0;=*Tc*PK{5 zyq)@w@Hv9bLo0S}f1ivSW`1-)=1_<I8_ovyTcX0F3lT<m<<ObN0`8HN;Wv{SUi(p# z3T|Xz8x7lfK#}aLAc?R2gaZ%;v<K~d=^0z%MZX1+(vXW8nICPGEN0kaMQh4|3MYOO zJ&5=XXNRD%p}V8L`g>z<Mq!|(0+Ev@lifS3AAdb3TMj1Ha?=(5kqQ5d9+4+9J8dfr z^2<zZj<1PLz3%)9dm!@Vr7Z*kaf%nECfxw(<Fr@34+(mg*f6KA!R2xj@JjTm55a6N zH|TA}>N{Ehc-}h*iReuj28^Nx8O)B>8_DP>SQ#VpT7Y$-e`^ZdMKHgYdXRNcaTY1V z$Ja~0i_w4(@-x5<El^1?jq#HqQ6Ck>A}Rm{cx<E$_)(vt<#o1L4g3rb0a!=Ixh_8g zLKg4)0-)a@=(`4Q|AbO+H=|w>`)%)!j0lzd4+Jl#XBVXZ&P5qgurN{a)QfJ5*g!M$ zmA~I<uZR=&A1GyI5tWaCW@+9E35l2Cb_&&=?O0pcT|6EB{kLwI`Y0i}1h$A4#lHEA zZegbMe#_U9UwuO5rW8aOP`Ik^N0{&C<J2<C#!C%C(t3H}1|(lvmG`N|gtS#6!y+l* zk2VSxX$Jp{FD+<LP{^1jVK{hnuz4!Rpx_aX2v-02h9A!qQZn<Il2fdnwsy3gj9g0= z$a=KOSs|NM-z0#3K<fQs?N6Ni?K*ET_Zlk=!h4+c4@0CjQGCT2C@_AW(aOzEOMi0% zfKBM~3}<6*j>zWXN2<W`RqGKkL8t8pPSJCJmt=XOh+)`jImuX?juE{55z8QtV6N|i z_0B9T=>9Xr*RLPG-;jN*$}WcmrHqsz0Grea;&3@5nfo@8OLO)fAwV=BK+68h_La-a z?v1zp+>`-twc*JG)9>=DgxRNUYsznC-|V{HM~wQ{LahA-EW3O>{|=GAeef0NsS0)e z#gFT*sK{c+B55nJAjc5=)RTvnKg+>L%gm`{RF*CkYDk9?sY3lS-I`L%^1oT`4aW5z ztRNjPB=x0qokt=XOcqEcHAi$)JTxvy%6E*ICdJ;6g#`nQ<P7KI#9h`R#L8I7zP+L+ zJwXzSw5?h<7-jx*JD9mJnH4dBERfztW>}g=B5`1_<`|l^HEe_T#;}1O;+g(H=I5j7 z;-;P|fDcy<fT;=pnXfpZUuU;0ANi_QiScuf)<kIlNy(&qp9K4<B44As1SW1tTJ#jh z!bSIzN>I6JqUU~)7NDXsynhoo6ToWoO~lq_9A1|_JM<yuLq9Y3AmSKGXD0)sn!O=S zZH>%=u=Hb<B6%DRRVT+D%~!v(iyz;Ai}D&j^v)UM7U<hY?)x~hxLfDz#KuSaP%;K! z!a<$yyq9_4aNfZ|__1UvZ%9$}Su|CxiV{)0!aQFR1C$sKALAwb-LsJJ;_HoR)^iTu zAvPfmboMU}4R@$!XtHL3adW{wd3jNx;qr1%Kl;1j4`H)2tb?u>e_LQG?q6BZRQu== z{2tAu1Nu84?)Q^{vz9+P(|`nVelT@867ptT>2D<oOGE~PM{T%-6{;bOMN)W~spJkA z294g@2f0WCL$b6(kust7c=i#3Qr`#?K5A;Ar4s6|?-an~r7x}^JH74S>-&OvhhHAT zi)mYdB)~R$S}Jj|RkYPYRXpld!e8x8^8;^x>&ARQG@{&m{m#_UNoXUj99Br|HJGt? z#S{*_m>y%G7WF%7>lYBt`eY$=_ze#iATJjsWO-bg-0z77#m(}No3FTud1XwM8LaN| zrYp9CRQs0IciV8qwJ0LAkc~;&k|8ow;fjx;TdLAYt+4Uog9FEE#1^gZVL(d2CZ$Y_ z`hCg3r?3&piwd&9*>AuW;kgWoMFnc7{0@&dFh6kfJ6qb^3ct~55A;~E;SP1GE}oMq zW4H`Fer&sB48wo@)CCyU+Ou5L*y{_xfa4~B@Z&&Totx&7@C<GR-DpAZt9=SF5)+^d z$NcG9$JL@>LsNQo0l#X?%F{e`jLqQ$)Zy||b#dWSM{f8sA8T$5jDa(Oj^;yd(0I}h zF%Ky9;M?E?Xp`Ihk1dLL@;MA`;XQz)hAng>3r+U&szn@+DGx@pa0-zpP;jBTCkob& zi}!V*V+*>}@kW7hS*($BCOWM2Gi<*>zY0h6-3BMa^tNX2st8_r7KwKiF<T+pxm{jC z#rvtvuf9Q;zTQVc<bfQ_>Z@y8Yq%LPaw@nq%5_LnPjXX|4qBk*{z31rREm;Z+q0!h zuF1plr-rwy(aeYp$+TpAMU4F#xh(K?01|-sYttuNw_yKfO$Eys=J6PDEfvagOGh0H z-?yRq7@Mesdwlj^u-e^ZR(4_ZsRdy47<n!FNoBBy?aqj1y4qg1RVk7CM}~XK@vn(R z(XBh~sFD7dVV<$2#-?8F<Ggn;F~-i`rbDHa(LqW?$$dfN#o{k?SZQyuI3t56FXHhS z6-ie`#qL)btkO7~QG#e(Z{R!0CGk#<m&e)E{5~3w{(UOq*Y|1*<DTxd^J<$I-z-@o z>ey%#CJ0OR^?vhwvF5Sn8Mv;sPj{B={?3JWf(gSrRcGV@=FV>H>Th=pF5Pi+z@utl z!k<>F5XO%EKp3x1&QA4-p;yQ)_N&}G!65j2%`Qwz$|h4v714Ujwmko*fF&uGQUl~z zW_MN_b|Zoh6S6>oUf!2EOBLe+4J?A%IUW#5o%<w>m@bepu$R0Bj6@CUpyFsCAGhs< zWTV7%mE&Cxh}iN6air2+Ny^YlJ4_v%R?PdD@MBILad6m^_Y8a>kOC5#5S4*JZl)0! zU5m`2AA+Ml#N7+ZGfde;Uv42vFou)31eopTX^P-nWQYnKVCZP9919g#vMB)V38V`R zzuB866bLW#3E*R$O!g!6(92~<aj9!+YD9<nzcD8Fp_HgPDH!W{ViW4ne))YtI&k_? z3|))#q5cbw8|v^y77AUx(9N5D`po5)rq#0qso*CP(uCMLr#hmaDn^F+dB#F6J4@U? zU~U>HZv4L9EQB9(lj+enqq`WFkQ+w2=mLX|i_UIdE{yjn(m2F~jqMj^_aUIW>=)!> zeja2J+z<Q&=w>bP4vNX?Y!9pWL9Lz@*dS(Sr#DZ5O_}%!L-K8(aI%sP?uyZhA$+BW z{!2Vc0B%*AEh_b=clO359hwD7hWcRyj?Y)EC14Xk6}5_9_%6YW^;{dSo+i7fYzTd? zEH#aooR#jhlU5w$^xM6OA=#9Asp+f6-)$XB{9*FP?}eL{dW4m&TF(nx`2s*>lKFjY zq!gmZ&M?xbKn+-b#Sg<}YX%EQ%yF4;?ZARJWp~&<91@+D_Ky0AhYRmdywT>OUh<I^ zTFkTY8Qe|h;&1_Ejx?eQ306hkYdcih1u|Po99Gs25YV})f;eNGm?vAnvfJUqgqOC5 zlk-ok&BRR>+ZUZ@WugoYUoxQ_q7&(V6^5J*HpjMkG|?p}n2*>QN1V?IrCx)<bDyuT zs!Jn4jHIesM^NpxQ8z&l0zH>kgR6pu#Xw#$Qp8m=*8g*JQlXB}fo6r{3^d|OW@;CH zO4ujAux&lh1Xz3~4!y}@t^%J&hweGfo+h+QB_4BGHwS>$cjlA30H|yw0k%5S1IDu= zBQD2s2F8E}9XxNc_q_;1K(B$kBVRiZcyFKo(fXuMv-ut@s%hL)<WX`Cnmg`}T)X^w zI-2{7kQFD|e(Cng&gy=AMF)ZV7Bc4M#b~22kH8CT*b<CI@e5C#RZHH*h82O=d6o79 zVY;d3Tx2>6_lIAk1|8?fv2mwYLUFPP>3uq++1@3ZY5_6*0iOZxJ(z|$mI`E@lYA0< z;r%kvY6)vX(IQ>3dE_{Fz>?^G5xub7_;>>;83j*23d!U8fH73slAT{a(&PY&B&xr+ z=MeTJCk1;&o*fClc@^&Eani%G0+0dN(6=BVT&}3f?VAZG42JFWhFF{@NPo0j_9ePX z;v9WlB8Cz!^j??ISj`O=;S9i=R<{`nI@~@4xWvAM*AFoVaB?~t#qx=h79Lu1)OuLh zxQeWf3l6C^I$=XGu8~^)n+)-FA_0o1%1~J1z<PeOm%4+EN7&t%w}y<=z;K#YW!~-F z?e(^y@g~T~5MkboC_1drA+hNSXLc#^1BDE9(g8A_De~+2XfDpMxQS%+mr;7lFP4$< zeCxnsn-)HGq@mWcg_@_f&&eXf>I`NnkcOgjfuW0wo!JXh0ANnDE>9hoQzwLrN%<DU z#hO0f=qjP%3JvK<C!kZ77cxUPY(^NC6dmwCRAymjkw`eOP(-oSDeUh_8~DF>e2t>; zK(jcu4&`bHGY<Qht$B!@1*8R?dY+~x>}(5u79PvhOj1M{+>4yLX5ARdX}_Oi(aYr? zU8<!2{^FW>MLYq;Va3AAINyziQ7S!;H)5?){y>z|2tM9#gM8C$LL1GFBicxC$%c_K zwC^`-tE13Lp5!{oxI@f%bB%T~Qh1x*1PTvLFl%wAlB{$Ny+qgvA$vH@FC`W^To#l8 zaT*!hDy+&|N=J0OU{@YE{OglSyb9hyR(D&4h*pyz_|A#AH}bWDaVSHx2tq693Z-F4 zjAQRIiFCNK@-t%N$J&hMhK8s_P=tX9CPXx_tr|rAFjOL`XjPb;uS2RWp~$dE)0kD~ z&Rk}WWU4d?$zCccd;!~iHZRfK;V#vXMe;kA7O)zE#=ynGWT{7mq9}wghcAJ`|KIhJ zi=6CBzX}Pa%{G&2e2tma<VsLE`*i8_%OcjBia)qCX4O{elj3#i9Zm4oyEf1#&o~)7 zeBzt*@UnKX%-(v<GUT<oTOQ!z+358{ELBfLwa)Qyp!N9@mB#VSN#!ajQqLUKZ{hLz zW;4}_?fzBu4BVmZGK|Ih{HR^lpwUlq=-AP%XOmM2*TzEBr0tlio>$y^tTdMH4yyCD z;2~{<fA*+Jwx|<rI3xOzhD%J<vwEkI1(WF7*6z1!!M368e<Al7I!0i2b9?_T6Q}<S z9Y0-W!th1?5broti9Zdj08B{;T-QH7draiqD{!uSr}O?lyXNlvITH>K5413T);;Ii z@W^TJ!Rx+nhRE0d)K(^V9jov{wi-+fW`U9A6Mb_^q)c@VrwMoLs|KLi$g5mWdpBV% zb<d>s`QgRDk2e5I{)Z$}p;6tqgIyyFeM1Y3w6v_D22nM7rc=WP5|Seo)M5HDykOze zD|cV`&Sne@$*Rqkt9;<FjyT5~Lsy7=6xN6J{gqWR=>bWaDO4emS29nr@j|Y$rV-rK ztXh0xdFpo?SY1MMsG}#eT&>@8b{Ge;DO#Aza;8L6c6Qf|wpWeJC4co4NFIQBSmDz{ z*J7wRO=k8-=7c(YnPWmQ4qo+E%)eNjgROIhfoiEp&iPkIOs18B(cwOGfdWA4t3X)A zaDBX2#IZ1c>B3#R8EJwdg_>_r(jy)1J~ynAB;Gq`@m)VcyPX)lRDZDTrEQg+6XrE4 z9z|dlc_NPgeP|nO{Z#@UHDRd_kmi7Z0W6G&Qn};r{mW+CQcJOST)7K<=awp81X0(> zOf@t4I$uh^s?olrkV#pl>7mFcrkYDOWUN0RDESI&rn5pE7bOQ^_JkH#?U;D5Y5e|% zWH4=CZ8>n{)+K!)CA)scc$dZOo%Ex1rmS&%qIi!oF(cyWXpZ%CrHAVybjKWV2JbQ* z#3eVw#kuX@=>F>eRClJF3-pQv)-vqOH8^!Z1NN2cp4=A8QWgArAMaU0W;%Lx!e9iD ztS`9G%kiC0o^NVkUF78a#MDw4n^CfF<Q?)FZ6zxy_fO)YYGO*d_CBp^MWbX6VcC#R z3NRqCey;eCXY@{6Ep#C05JU1TM}aJj4(cm?OH(b6rU>ocrgU{35R|wBkueR8OtVoc zsG}vqvZJxo*r4v!)D)z8)=4eGJidygq*zjtY+9<{JwkkjZ}gJcDWp^a2d)G&BHm+h z_Ki<&3BJ=HuJY}rE%j7{n9W?Lk|rEdGfYB<8RuVMa1D%8QN>{j6@2=5(CjOT0Nc4S z|HswWfjKZ&lkN|pT05Wo+UZx-r5ZEcJF77m`!qL{1xBOa|1{E1hJX{lo2eUMYOUce zpAv|55eF|D2!_o}=wnY;2zO_N6NN!u)kb})>c1|7wKrX2PuLr?rG~R#*T63{h>+C( z_&lw3z*$&L6a%gxn`U*m&XX+Cm=U!Tr3P5chb|r-fNMg_-l!&KfL5GE1%U{qPWHpd z%C|w(mfD*4!STVosMFKaz-;75$ICtuw}I}3tf*gm2@&1J)Q4zcd>P<b93rrlCI%`? z9=vQln46if2Fz_qEQJ9;7Il+UWzg@R`Oau3(pu+k#Q*7yp|H&x`nmTaCt5G#g~f$G z5!Qm837$^aE|{K@h~c<5AwIT42ZyCX8Vuj&?}UYJaUtf#tTb_3Epek^uTdz`V{uFQ zy(&}e)3Nwd+LmP$uh4fnwbtbmP@oHni#=Q7$H%UxX-=j4Yim*2zvA-mm4Ven+L*hC zhr64HSWO#Z#)^h;9*j`u3LQ%=2URQ1D5iewl%$hBBf@Afw;HcMSZ>A~=85sbkF2Ij z2*b$2x2(`KMINfpHE*O?)i?V-yF&OQpkFQC*4A84j-2Y@HxkzW*DlM#pz8ABnm<Le zYgaiOFgB;d>e{C^BSAjo!Kl2%IoZL>KRgkPf$c8rY7)X%_Ovf<AA4xq#^|oKb~vw^ zl0G-v$6ujY)wi~Q>7RbXHh?3+=qql8)qOK#)6EsiNI7cvnnk}3-~SS4I`2=s6S7>W z@l<hiyoJCM6h~-ts30s|ka5=~h0zXquatyyeXgpq9q%~63-Fb+HJhuA{bJa_k*waw z8?(gl9f6M9>GFS3_LgC7Hf^_X3lu1j0xc9MUfeyn6sNcqCpZOyyB9BB+}%C6JH=f} z@Zt`|9lp@}xu5s__WrdGen5b0CNp!+DQm5n9PI6M-lY$yUoP@?&R?hE)zvg^|8`jF zfvCXh$ksxs)871}UxcV<YX(z;#q#xaR?_tZW@EiCHkAhujavgprO$2-_f1Sp;~17! z1fZ^2)Wj@f(8(F6`z0=CUfzm^U5m(6S0P|nxJKLAm;>yHZk2dZ1(Hg1O;%;I<92lR zxy;35>8xk6X<jX7+sud?)A5I_~QbN54@!sjkl`hx(C(qC9gJ&#=%OGXW<{&!xcW z4@og2qj6DUtrN)@#3+555R;IZfVsSs$QlP=`f@YZ+$UugRRs$*4@m3Efjnpb!3V!i ziW6)#<BQ76%cK3YrR0}W^E;DHr?5kn@jQ8vt2lVyU6=2Q={)@iFk-^4niib4lE@H^ z4LjU0|2?J{QTOid7q%Q$PGE%dk2<eR4_G!(I@{rDw!rJIG=MRNYJBs5onLfQ0ES^o zoi=Tin0^s29wVE%7+3Qu*qiood}TM%h&!|Y5)(m{z^ut-qpX9}69|tjg}Q8^SbNl8 z=~o}}FHqm#yWX$v&1W@kvqWyR+_^<J`+?ImQKXAb8(pN`hMpCu-SW%!=65P{A_E}| z?XWX~cl|90n=K(ANrQ(Zu8EfhTY;$XF!F3S^T)SS{Z(@sZ6?eX$S+_A-}(`USj=`; zhp0?>zut-vni8uL>c$@Q`-Z|8lD|?!*qq~X^R?fEuRL6Lhl|ANCnud?*h23Oi9N6O zolWT;8f=zeUHv1?j}!tbl*gq^FJPL6sjB_?V+?<$F@G~OTN~ArkWL2l^gQmh+x?Rt zw2n~L=5;JL#n=9rQ;X5&p*U3Et_{K*_MwAe(*JaeYd9yw{oYDoS&nkJa)`%sqsr$y z>y_72wRz+53(!#39pmB6O$j`naDUZ*4@>qc0Ws>5LRI#_gCB;*-M?3L+6>IO?8Xp# zUAL@1w47tpdd@Y}wUw^<m0KTs-Po?*5||z~(3aOYnD%X7dEKwgug=A+nB8ks^S@-M z*;)q)Xb|#cW{&$73p6_0dt!J<{m<Luh2hpFi~<6TCWiNUd!#UcT`=e5&f9CHr8e7W zZ?X(Y)9u`7z0X?E0@_|vT4SKRe<k<;We&LhMLptv66fCT<yq(CG!dKE%;<4`BY11% zmsE9i$&_Hqi_XRHYKy(%Vp-ljW>uNz84(S8&%VgP#WOq>2uORD5R>5Z%;+U^-CZ|m z+9?={>Kz`fev6z?0gFTfK8>zscquU0P`vUXY*nQ~&jov&d10ksy_y}A7JO>(uIj+8 zO}AU!ZU!iGfLM)bfgagZ_@y-u&fbmeLuPt&HmUZz%VT#`ow+K1dw!GH!J>|dr#B?B zIt=Ui8~CfLpAYX%{~~>3PxVXed1+(Dd_#6CL+UD@MC^>m3|^`@u0~W9Lm)=*>CV&r z*a<5ef_;+x&GteNE425@68#@KfGiH+zyBKtlfwC}ule70&wWD<JaZXMz&x@5c;|b+ z0mMD#64+xBX9ydhse3ihR184;^yt{zEMuP)0&Y;LS!u54#cV5tv0VMV)P;ycN*}V2 z?Qpt<xM1!52){ED`4zdM3hZYuZpJZPh_UY7$>Q+Nk<4k5$yGcF57$sUUb;Pz8>&L! zw7C1Wb~xL1r)vF;YnLcx4e_8w@2Azn*0My&{qIKP=k`VXLKfl3$S7}-5a_bIyWy6~ zu5nWdpF4tSvHg3uu0BF+9$Ss!t25>t?ua?}aZJR2(#)nmo!)^ijMk4cfCTD5<3V4B z!+P)AB3oKB@<h+aWqGg1-TD=;+s&a{M_v^-e*E5p!lsmVk2+4-`;M2Slz7e752q)T z;VpkBhz~8XM<nYz@+E`?J6NWSUjz$An!rgGJl}RSw=;GOlX?NBIGm;LOs^idVLg_m zH|Fnd3(Pev)Me{+R+g+h*z8Zm16<2n&m>6+q{qI!V4`Cr(;Eo~3242WU(otwpKiN) z+`i1i$|)4KD~JuhoqBuQ$BUESB-9S`1|<0C02s0K{mmJ0YWb^~N%|@*1JO>5MuBy2 z1mnr?BX0qUQ8Jz}Q><)ks9RRxyT?9jr`~<<LUfKut%b*t3Ru&s<|1vzB9@;cy`J_X zo#)jk61y!ppB<IB2#^c-sHm?bZCTH{G%10(Y1;SlKU5){k>Aew^=`fQ<N451q?WTh zx*M};h#B^mI<Rd>FM~p8Y`t1+fO_{8$Ma0!axCa+4Rw=sd+HoAlpW|iV22<#ax}n3 z09(d)q|bNMkl?r9fmP6=((1h>ja)>Z;|MRyJC$d;^k1Ik`R8YDh~v+fH{VbZ|A{^@ ztC|SdOsqNovl&xOs2A^|*RK~*9a;Q_>9do+{3QH;<k!71l=#R?4BfR{TJ#>!*`fdK zJwLjrKJ*0~AF1fB(ZA!bLc#q1xzh1Rn9G0exhg9-Dlwn&p`GN2KI`ek$j?~y!tqy- zH@fWmH^vsz*0O6ebV|GMpt;}wdQw5%jIVl(UN{2u%ke^n6r$db`nP-uZQjBReCQyi zyDjl~Fx5uemozSlBPG*;vi3O7Gkx*Api7XM*C)c+>XoR7nb>CdSowO5S;a{{=~GB6 zyF&>_8AZZYa+s<$I%N@`>ik*6Cbf>c`T@`8tT){<hnb|IN|2*2nl?HzsI72w0aRXr zywyPn1Kj_ayzkfFjkjpeZ0p#gb}%5l)bEL=*lDq@fT;0RLGMeH`Vl`4F5W$i6>qkk zlOiVg<|am_P^Nul<Vjqzj*yrh-0#1b9I9nCuG8|$Z;kv){)qv$4LM##1R<s*PD#vL zkwpWt(>xL`@9$@P&`2FZ{}I8z=nwn?Y$*-qyg_EIdpY^T$d72%dG~H7#NgO+sYr+O zopVKXt>KTS4v6-HV{dt5o$~%VZ<}oU^xGesa)@oX?JX4RIqn*Jo4rA8b~+AHk*C&o z0(RmN1x=|(T2jql)HN_taxfPr1;{y%blfiIPit6AzmD{^dsOi>wEJbgfk`Z5Q?i*& zR5toJl}vdq>)yU^`}h>2S-%)Q7+G>yTf~Nz-}q{blD+UoeD%%@j!rr~?p2UHr-`Vz z$9+9ay7Wt{{AX^|MYcgG%?wSN+UK@|QGTs`e3N1t;!sVk^Gz#_!J3B9w4WLE`Ih~? zbJHW@8Ui%<vZ(wf)+4t&#Y(lj%)hjopRg`IM2E+VrLzG|mv<PyF5oAd1mP{q7oR58 zy^&rXYnac`U_$*Fg=7TpNG)@_P#Z>JzE8HtAfUXf+sJ>H<8@IyGhXUoX}%q|##AmN zptJcdlY^(Hi0@EZ7S$uRSt(*qO6{aFiP65^^htK<jl1s}J%-4kNrwte1=5HZmdeFI zYs$Xg?}hV!E&7v3@W7(%)~252`W{1^l;`4s4Ak&q*|WdOmh++uX)+eM8tO_a>&)g9 zXRipuzIFG43zLt3uxNQ*mkgKSEFQ2J)C9VR7+MvbrQU8>Tn+RtN%c9oQ28fO(ks?1 z$(BhOlk|Si>k=rKZag&_3?J*-PAGXAXQ4|jcpx(wTwZ9`PCs0HI^_T8wBYP`io*T5 z<*6-M0g4|xC4-YrC!pC;PxrZT?k$$+d*K8mXU}Ot7mBGu1-g<J?W?s{!JGoLg%y8P zwi@ZGEeWQ*eeJ62-+RpwXhp65NF`mF(mvglbEZ?l?^!V)dCZ*W6r3v9gWoK(pqV11 z_WV}m@v)z=b@@k)S+bUutC6AeZqUq|9xdlVH$cDmZupjzmTBX5LO|LP{ewqjP?^s| zE-i8Q3XkULz{H<Z@@9XBr&b0E?}ZJp?|BTMDQ0ZqXsy@P1gz6a%-P!>V@~*iYGJ0d z1V_IBOx-XOS7(-Qx;xyDs`goMegpjZsJ){*i+QZ|tJQrRKJ4_f*;w$-tKj&~*Qd9a zlkGFyAsBm3Y=1(tnuux;_x{a0a-uqj75}}Ktkd1$uK=BY>&*0j3DAWk$Y3&>V><kD zC1P}UHp~pBI-B#@LG2NBLwi%ACNMeE>lu&3loGy-iLzZ+662hr!PtXsp+%fNohKl> z#<(*9BdS5gG84X3sBgdBPJXDs@K;U4Z1)8j7?k^Y!TTyfx;pj9JtP}^CB)`l&eDZ> z{pz!f<5S4|O=?U0O&yMK45DsZyg-6X!6(r*2=YQhSK%dkT#)HppZI*QxH{MFaxD6f z@^1Tir`io0#vttg^$iM7Th%j@G_*A>Uy=UxpL`qP#P5&Odzcqpu*_8Q)K+FZm<dre zlCM<l^+-m9p0V)T&-ixb6jfIpf4r39Bgc1eWt;uJ&n}iSF}*^Xs;#oM%xisZ1>9CR z8OeEM{Q_z=e?5`vR6A=nw93=AqHO0CBB|Uq6noC(o~?Y2X!34AZuU4Ky!_|;<n)*h ziajS}lw8I7l$X@yNIE|w>=~EtT%X7jV_^l)HDT0vA_e^yJPDfzePj5z2^OHXDa^6v zaNuJv^+?e=0`>3Ps%)wBBhYVbgc8ky*vg3<$yqHW=dShIgx+D;wOFDQXz*4827A*Q zl5~>^2v1VW!=yP(&M^lNUs2+{&M3hOh6|&yTU=E2;7SPHlW5{ZvFNV+Wc-4~R?w#G z|4@=!_+3{-+%}nKo4rZTJ^yT%6)p*M>jRSzRkOB(0k3oL3unK9&%@_13i?)B;(tUc zA5l5pe3!~RXzh-%)>ibI)H%Pon5-ChAT<`5#W`2>3imZ>&_z&70JSjb?EiGTgQ+lX z=RYxUgUt2_eZaV|Yx1sh2L2zflDom4R12k;ZDb#jR~yA%!L;|~aJKlc|5WX~Y^$ha zMm$TNBD*qT)zv!Xo^!>6JUpIzwcJdCrdo>m%HkmN<4@g6F~EBaR1%b7w2|mKvkKUa zAo!dER=~LgGptRyPYONTSB>7}v#Y7w>F&pkV^^u$+@=Mk9_9X@<Z`OomE$5EiE?zw zePIQ)lvF-zbHic<cd3q1i#TG(YGDGAKR||8ifd96@$Q{!tB>F8&_kkFN*RY8iAr-% zT=NGWp4`c52|D|Hdp+G(2yidKXonOU@o=jyvX)^KU_S5-ZU-Vu`BC%T+FSQBJwJ>_ z?(JVcY>MQ~!8<wr;rCal=a!}FgWbNLC5Ro?YGWfHEC#KS2>2f=Q1us%js}klZEWiG zHIu7_)$*TKNWfSg5D|=><Enzz-<o-~r|=Kwoq?W3*GEfDxF64@G7I2=Hr0uXyxLzF z0<?vU3G^yeAwDLo4J-DzLj$>@tQWXJSJ*K|`M%*}+@<g;c8mebU7MaG<XXk{YbVC^ z%jg7KlqlR8gJ1RRy%geM6H}s#2fpvn=bWTzH2Mq(y@OAHiS64oaiARuRSos(HQeL| z1W9hG-FMNS*cBX@TqaQv?<gbhNMpW83UP=@Dz$t8IytwhDW*n8HyeRcat%Qtcqn5u z$Ovxn`tW%W0KnBDZ$XwF@(#taVZHjY>{4Il^?o<jz{>C%U3XVuFA8vR(6IcH9|7Mb z^3>wW+A?(7L?KzP<x<IO;j@J^j;9)qpa0A*NcZG|>Z>n+llbH!%vpyREr$n`i;T3_ zj&CI58U1m?j2&`fbAt=<(W&?V#YM}h!Y2~v@J++rTwiMW$!Su0rjUNA4P4*Cfd1G9 zlf-9V%UkD`W2_<WFX=H7D~l4CP|@w@%^e*L399ud$rSc?HQjc--N^|E4_c7D$s8Bn zx>g$oa{hW`{6XgA>3G!*IQl{I#*If0o|JIwlu=pnX9=dvHf@@hzr&9q3zD1=(-r^W z+lV1akyywHO<E@IR((NLyILCYM6iV7XL##O0&*c$fnTl%ZrG4ds0!!1F6LB`cj@_g zWsb>n9c29-7IZ(x{#>Kqura3Bgmkw3Twm7vK`{O1CbstbSX|?vJC6UVR*kK6lwheG z5}Z%E8B|EJ#jDMxj*WBU1dV|}+aFHrhzl^d_X59+p$#?Uz~m4)W?8Bzg(H#Vkr_-v z?<CsB`sw}_r&Brv%z749D!Hc*&qDL2?bcIf<ZbgXT#8GDPpubC7DvX))44+QmYH=U z6R&-B##<^$pHH*axv&PNyJ70J`^Vb*2+b>BdI?3}DEchCy!?ayMw(zyhUL4AwYF`K zWvaV^q(~<dL;urCJ@{%}M~H0>hu4*_8F#gBauce6;D%9FuUy!vB3a*6`4&jSdfQ;Y zE;POE?0h&#FXst}Th^xVC$h;bzOZT;eg5qwV=5)>8y-Ogrq8m=@t(>b+G#Q}maOH~ zI{SDD!;FI0MYkm-qCS4Q_e+f#N)^?(XSPUngW_f_VO=T4`zl?}i0m&EyQZBh?^!KB zxoA=MxcH^NfeI;{N-<s`;HmPh!E@uEp0zCS9o1{!bgnP0vYKSOp>Kd~28OL0hqbY$ zg8NpfNBE9DVPm7k!gfzHZ1*ghC|-wf0y?P_s9#@K`UBwM9En38@DkiZhaQ^RmxJuo z`nlFTc<%CVQ{VeOX;xl;&BB&3`6fj2Eu8cb(?{Rvr}JCn0640)I8x8WK%?5g@ME$B z9NC45H0Xoa!K%5m#m{fNh~P}8`}O)D2IITc`j=AL7m%!=@y5oWoZNaC`IIuRB=Cc) zJg7d!{bWDG`d5OB?eypv8713#Tf_Uf0lYsf#)=|T)p0(O>X3<*UtKNVhn8;Y1!!A} zB&Xw<FnOD4E1Nl=&dS58RfPqQeoxjnb@d`|8g?R@w3_RYRhUI}x1^a7pKnP<BIeHh zo?Zxc)VZYjw9R`ea6AH@KOoS+y1VIywVZl_$tloZ3?L&7p>S5?8u5lKcb*zc?|gaf ziS7TrYAc-@x9$V9@ANBOEreywGb+s_xs03a_D_xT3!Ri-eJ3qAz~v_AJA+F8VT*5+ zufXg|f9kkW_k{4=c)Afoa#HbGU#(K|GG)wla7F4IGegIf=DQJnqxTwGh!6+f1yy&g ze%$%&9=oo<C5)MNL7H$yk)kW!H8I^Ch@c1m?7R6$chjp+5d1%gSz&o!oQ-kfqYkfH zoNRC`r@W3>@-x)6Ic?53UV3l+9q5aMbUxh?NF>bDv#FCw-5u`{6vS3b(_M0IgKX~q zksKS0=C8<&7O1$Y264@pdL1G;#Ef_aOrec^psGynZXU=MUsI5VbLDl<^e8=3zbFm@ zu%~{m$bKtJ<Qx8l$a#esiaRIA=i?ODH<$b2+n?;BgNg2+gDmTmDV3@Ire-a~r_9Cq ztXZsKgLK~A`EVdge?=dd(Ez@MXMIdU#46W~dLcm85%>n8p9*o%$;!YxsCentq$h%| zHhkb*ikC-jfScqL$oAVP2M<l-?WG9{O|T4q|JJfWG`$Ms1TRQcB5y+(uS|QHa}dF{ zCu6jA#P~2bT1=%EoADS?r%^MOBFR>@ZS$w)8$)<Qn_9ZC=Rx=ZTu~&v6-z0)sjxA* zo9_Lj(j-W6ehfra1yqaIy%QTKXlSwGQT*QR`s3@J2K?)Ne-4@6W^z7>1$^NPUB^0! zbdq#>+NA}`T`217H4+SDJwxG6L}UawA0lG#PL$1t=FQuh*~Dpsc?iYV?I{i7^L2!T zsm}!nXc{PWapJn<pxet2q48PTw_oBVSfn5C7PLnx5a$g0zhl1o>HhW)B{D0!1l&HK zc<Y`X{HO2u&_yQo>EB2}MHu+3t#RFP)_)4Z-giUZ*^;o$b1hmM$3+_!mRcjtf9m7) z9VduZJLac5I@sfJE~T9fMV<Qa{08BlO~)r)6^iSfCH#>lSadLVT&uA~9v2}#@C^13 z2yoCB&=-G~ri?taB|1RbmYcz$3Mc!7?|ED=fG>bTf7^k*5PE_C0{{6L$V<pe*vm|+ z*Z5q4bL?56WddgR`Bg9f*T0Stfiu|++e*flfAFO%R{#6l^HZh(AVyV|pHM$%e)zG$ z?|=U^`M58$EipPA?qu@m7S_32vA$n_tt}=`5=*c93i~$ztmEWw5Fgxv<K4K+3qpDb zp1_7bvo>mpoO6hKx$}jNr*(PGDV>kAmP1{Ao9H*<g3u3H9=^xLZ)_j5?<5}NFk8OB zE`?$G9XWgTrZ2-?bFrn%J}fy9OJ(Ah`@?5h0(d-~X4p)OBYXqIT5XX#*w$2MP-38H z6VSWFo+PjQou|xTBz$BtH~YJQR>zS;US(I2G|e8P-eujB-Oq}e=1O*-ci3mHc{+O6 zeF6M@v&%z$6W^HUo#3Bm3mu<&sB2F3_gAxy>?sYz_z2;woY$5fl;FP;_jRokalri| z;BxRfcdw2v#kVNLUNq3BGAbA(<q6u~616upBr`N*Ov{u&)?M&wEjjM}kz=ZiCM!ot zP=64PG%D4j^EcOP1z@dzL3jedq#eN@O;t1YzzH>knhEA2U%KJcH;44sAF8Ii4lfd# znK%yJsrnUaYp?rZdm}tXTKUXeUOO7dNud7LP)fm?>dTF2C?tS4qSnE2a4a;IHvrua z(DHLQP0ejZYv*&+?1HO{?O>`76_YcdObuQCb=Bbhs1#2#d3exJwf0;HI<vW|3q*PX zZuUch+wUMDwe3f47O`eI-CgUT2UNds+r4?fvvG2PNwCP;#(zea5o~r=GU)ifS&yZ9 z^Vh`Qy#f9iJsYb#9%E%0o1?PSI3T_9IUzFMt^hdeZtANP4xHznPvhnBGU+r!+!ft4 z#mzN~E5x2MG7(=dXf-o_8IgJuDw*C|tFc%~HGr$ibJA*AaA`FxEjOUyc%USI{HRSQ zL)1YJ+A@;X96P4Xh>O*3I1)|BwNx&ouR*TX<$#cyH8(g<El$VY#|81^ML+E3n;-Ph z5}T?yWLLwkV>{T%9Pe2xV^|yFP-I=ig~NAADfOI;c!!$WKj@Zsh+~fP)7?E_Ta{Bf z_TuB>PVtuRK-4KWUXuMU!UV|$^K4gEcZ@(ob#rm^Uf*O?PxOw!+(xhN7Havi{<-Fb zyo7pxHq3*6?T1{%J*y+R<e>kLwuKLDYr%FRY)6eDfHULgklf{lox4_F9jET{^GOpG z`9r|1esI2~<<>3pb?#O+3N}Itna$XQykQ~lRp*u(sdPY(s6EVv1vTzD9!5GxJ@v72 zRD+K%x4G^fN)9<}9WHPJFvTe>H8#bfAJ8Z4Hye*aDUMt?E{c5syLlYTr*<3FNJ}XO zJ5VQs_{iU{5n7_nZSG%P=#=H9BT#^A$^jd8+946zQ3M&AGDQBVUdT~*Pv12JXKD8G z#K1>;e42$FOw;*)6x7tjrZMhpFU9)Yi2cLQh8D5dsECF}oj957`V8ywVQz@u7P?aa zNH0^^0h?O&uj3^zaH9q|t=G;Xc07AuS!SqE!$56x1c$!N$0%%F(p_kb)i<;Yhda$* zh#2f$FS0XQa@6LhW=Rj@h&`j1m-oouWZSGYM{X|+wwn2y6Q`$Pnn)1AV&Vq)H^COs zvANcstb+1$F5V9le+P3+E|<}0%kWkXNi^uXVoS(_qP359n&^+>&Ib>px&uYIaU2fs zlZ8TV-R`u!C9M1EM8$x^3hvV#y?VUoB69WFy3gK=-Bw=&C?LXFV`uZ9lnK+1Sy%et zCHR|AW`QKJ=eeS$=Dbl5;IoaG#j##PY>lBbu4OD_qLFiKVscX0RefhlWmO7Zt|fjF z6DVGK6{RP#?nrvjKa#e_wr_~=%f!TF>v2fV3B4<@!O|i>67<D5CD&NFkoDEyD8N4i zIf4GQnDmbi$KFqOhxIGT$;qXqrIZX{jK!hkpHvA!4Gmn}&0G?trN`zBXCGlT%WQP- zvT~@uNO$2!x@M#<pK}EiX;21fq~r%|FrT&nB3N&>1QCeXU08~(ufh)IWf|;iW&|Ht zP%9%cuj&kaa0~1R<THim7+WSg;%!q9`cUee7U>~}RGa3guEE4$XRo#$1t%?r8%JMS zVv&>2Obdp(G%R5W10F&X$`Us%zIRywp5qWK3VrSB2o!ccTGVKEI?VM4G%~qA>VWdR z<xtcei;i2liv#p4^+ejptxQE!^-W-oAXO-SJZ!Je((>>ST2D{M`mqRd3YO?gH;S1U z1&1jJya((3g1vY01jd6UJ|_M$n;FbX6+4n{m2g<;MJ7(e+srFp5$sS?;}DTrUD>uv z3LT#!Yi6*Db~ut|6HyJ`Wk9MMmX~MJ^i;_%#@YP&tM1(C0F;!HI&Upsa6VY4KIf)} zoJO1;oiB;eK3~;N&(A={-4Rkq1Qh?u`O`BtFVo>dhhGUC>38+vIlqHt)#E+BfPivP zI}s)(OQRk<%iui2A)bt#(7CeHxzo`YtMGIeEU9yRtD62c)V;#_g7$6grgTpTkeH9@ zFxDZRyM^17$JAz5OGp3TnuP;0;rjKH$K&N~U3q+U(3c*KcQXsYiUI?at``$^PDM2* zl45Q)opQU~u%!IY8W7YpUnAfjKpnrR6R-P6uhnnUSqeYWYV=ZN5p|mNnEwPa(_z)0 zQ#Rez`~6DHDS1~}bH%Okk<gmwK=jSO3nkno-tP5qF>BZtQ8{-o0EeI1mv^!(gYn;t zVtnciK8okr2xlk`6C(7*-?77z!{-?P!4SGLOYD6=F*WrL7Z>@jhx?m27O0Ds7ll?Q zy?m_+hmb4;$r^vSyK+8WmL-4tPv(ID@genXD;sxA^mjsBKifrsx=4O+bC>+2s~vUl z9fif4s{+#$4@)N&htP}-GLJmO#tmFZK|;m7MCGtaCq+5=B|&7*ZK!%2)1*7D-Wezi z@;DLu^y%eaCj&D<h@MD)J+nf8|D+;y%?#BGFdrq9WIu)Hl%b%})nqFI8Q+aMz|5d4 z8_;tD2Yvzjl3|981$H3P>*mxLmOlMwEa6CceujtaBVk!KpznOVS>tlvsRnSA_~0L0 zj4vOP*bGli11Vn3<3`23$r2M%@v2EH({t1O;;<a{4Ff5#cS#$wPN!<;B~%E?=rbr4 zxyUR?=0FY=QjciMP9?F1Zz0g;^3D9_<&JWD__~ra&)i1JR_5LD_umHx>Nm%SGBhC< z?*VYEhHE+_d>=)`xD_>6rs&ObXbYYO)-(}+1_s+1po%FbRSF9r6+H3<K9JQ@jV>~% zag*ip*zp}s3!i?!D5f#(*;hKd!#tD-f5pbu>gy+BZ+hLdF!yuhdord~Uc*{c1y0U` zgl%igK%BRx!|`%!I6kL98pLP(CW_5ICr#s9)pH{GK?{m|TbqS@62SO{;GQdqt5MI- z2<L+;7aMcW%>3L8hp`D*t}v;q^}sm-)zrV|)!f;kCEUAgRQvmY<hB*E&Oo9l3;L9E zn~Zdd4|qU@I@!hHL>1=<IF4&f#aCui{D(57hXmP^2KG7hGi8Ml%uDYK&)(|jl!lky zdS?*Pp>X6-r!7Gb$kFBL(krnAfoxx}46+&Z5lRUBkCHL8er)U+ndzD6<0axMCmM~3 zO{ex%d2d{b?%cldklx-E;BLfZN&hu<i$B=;EzhJ0DMxqMj=3E5?uu-I$uFG1o0D;l zl8cphJTZSve&F>5P>A_?S{&PSzlBp3L<-zeQ&4Q0`2my^#I%kt=s0Y{Y%>ATu133A za%R>mkJ{3Sv9F#JW*neGQ&P<MKq|M@3LJwzynO!nt{+l(n6mfdz<0g3@q{TK6|T>a zB{0-~9O_FeaQE$wQrhh+FbZ;TnlP^m<3JUbu_HtV{UDeLho+)gHjC>9C~pbTu)vbc zfU)4<^%(5S@$0r%+(hOQZJ1a=+3@(TjX_vOTtjtBalFkMy4tRug~871pORx(ctY%4 z+VCnh1a7Z=K&u$syn3m9H6R`LJ&Z5@s!S%_xU&Hl?r3+L5SFEMC`j0*2??J<OLS8d z;S$H+vDJLRJ32t|!TNL$Mp0Xso3nCqdb`1jzOmY?Q(Jc2yIs~0o5xi;oeQmE^zZI} zclC}&Ab@XSQf%kzXM8~kab9SLMo`Zi0L}m^YgZBPlfP(X*g$Y_ow9gp)M3l1eG4HC z?KanhTq7xyj~V~SV6q>+7E}Q!Y$f^w&+0qBZ9sP7J;4oW2*cpXTFlIh6iXdyDEd%3 zURny_($ifR9%DW&RMK9Rq+oI2OX_Sb0e?%8nvIv0jNE4-aAC<6J6YXia3@!!S$osv z^v|2#Dx`Nn*n+QL;a(bcA^y53w)FlMULgG(q^eCu{DT0~#eeh?3?la|!ln7yN5Sus z0>yiK{eq%MV+!k>L#cJry9%O&Ilt?h{4LXrp(J|?DE^m-8@A_$HGTm9t{F~F4i!Q~ z6YaOzNB2E}fWurm@P_|FV)DGdY0oGc?9(19sYa7V3?@~Ok_vkftIX8DfCJkbUxxM? zjnlXIp^78nt8ex{CU>y1;56_Ci6V>+2V;wAuwWjXC0>?T$S<W@)4Pk)ON=<`!%&mU zl7R52avVLw$)bV+DtdY_TsLBu4Vv_b<cPY0eU>~b^oOM!)uD1n@coXZ)?V3959F8s z6qshvA9)rHD3*=u$+ou$c0i1ffN=^Ty+6M_!ppZMuI-Wojr%B@sk;lIj4xrxsY6gW zxuQd1Ks+Q1mSQDN-Jgnf>fUk%@UL>iU+$2)e2f!TV9W6Rz%_yqaPxuI+lrmv!2#l< z@y3@dN=h{Kly8bVlcY~M&_sQk<xmYB|DiU>eAB~lCRFjwmZSbmsDArAb8%F;8a!A} zyW(<;p`$luyrTWl?EuOGOyMWh7okb@oT$`g(1SN#xI;vEg-+zt<^*OyhWmFkLU<-} z!lu%f*S!?{UeF&w*L~QVh;C?Cs*e1E(Py8l&_ij5&rxma9I%jMstm+dx7cOLP7*&R z1&)M`1lzv-!%%R-KyQ@Pj*y=BlU>Z$#mZ>W!D90!t3+|NQGlk>bs}EI)wkBOVVFoz zLfL}%4icNVNKMC)l#V>YN=XG=8k5P8;)K|t$%o()g7xD4IFb9mkA&N=rR=68C*Adm z(b=OzMh)jH%K0&y9JS@Z;)Q-}E0Ys}IaUu0rEV;Poh^*8ZwGz;fYN={g-7+-l5Trc z$jQd}2<J*{Y%CuPg0sNI{u|j|g3oyk=q-F~l4(3s+u`K(O#Ht7PQi*xVIPUT{<<x3 zUOk{a`@5s`0P1@H$<^b1clukYjHf%0Xt2srcJMo6EQMizPPI`96#%rS;_3yRtjEG1 zOI`effx3p_Zg5&H{O;~BtFZn>U!}clI%e96wa1UzxKQgyYI`8_;KURe{(RuipzV+~ z6fs4%cYOYV#Xs1>&TubFtmRvLVoWvT>5~c+L_YGGwBl~+>Ee88C7X|YjSm}8)&onq zTEg~wz4h07k%EsHp+AX;h~!zoLb%wlqTnT1M!hrNiv;7@fdm|_w70uo9Ti{$Ny1S6 zn}uL>^dijSfIOlyGM+Z{;j_-Vl_#-Yuc>KWCgc?ulOw5zFA?Ak+M+~C%Y?}5>Qc2j zHB~W_vakqeqH7`f!ZOm1e+m#NuKdH}-SNoCNL^i>{9B;HP|H=1NO$(Fl>=CspgFwf z#5ek^yQ}=RoTKbdSN9qE|6nP4hKr7{=y-a1N`?3rTlpss{1!e?_8cF$x$*v5<iF61 zo?+O<%F|<gR@OiJ4)*&Pc-XP!{V=h-IbDK&WdvBBk`58LJE->c^;L9!_y=7{9*6i~ zB=!FCpz=|mwpr7{XA556^xlWVCl|EqK`LDYL2sT+s49MjH%e_>lU+SsuO|c^oMZw* zUVCee_zEV!m!9IzS)#(k9vyx<ZmfC&5CDSljLNKwzD3_N<y%v?yocez!DYP8M=B~R zd<L`V5Ehm|2+=J%EXKn@6&fyJS&mI|9BE3Y9=@jRJCwt7sr4x}a~L49H{CUQ_nnrW zk{c_Up1-$~$T!MDy`hf_>?@w~-sbQjT7E_LfTwl`Q%@w)*edCL$JmabFyEE6&Yy)< zh@NkqH!3Wtf+p_VUd)2z(|C-ntR8oC1Yz49Tk(mhQH%+U_K;$LjyW}s<BZd~R)Ic( z`kbT2deIDZiS6j+LLWbn;&UVG(5uU105PIpf37EY0U4SSld&);G`;$)Py6_aB~?E3 zE|sEb?DKJM<26lqkJyymqZm$p6qyx7RFL)Eo+LqW6N=6KrstC)Bj3%;B}sUV&w3_% zBi>*)0Y%jGgRUU6i*?P*n6KXV(>cRnG$Bl_8t|{NyY(trjyTbtIjfwphM~dO$phuU z4n%Pn0`&r49!z|ao}LbYKq~icGiachNv%=uFL^S6iU(QhEt;*apQnm(st=Zx9Lmv} z)i_Jj=c{hyVUvR&qY5iHxY;=8lU@<4U~~jJEz|djlhm+fuVNy|vsJxog4!Uj8)gF` zpE~Y5NKw;1xKVc%Qt#H3g4BZ@W6jQ}JNZjnj?L=CX`$BvNxx(q8OR$Cj5hAOBD6{w z4^Z@*^G4Enopo;-E1q%y;6y9aEkNzI+Mx*=@+Fm=AS;;U{CrYF@CZ$Qe70qu(U4K+ zoQ}>5CkZ6;+9NW(*cVU=Lo#3nI;`tuzcq}vQ2rF92Y)pi9YW*y+Ip>b7ntKc<n3(k z*$e9ZY8qbuAgZiYC#%ExP{wj{3N{2asGme5S=Ag0c~ra1#0H90%%c<g3in%Y(WlS1 z>>1;%ZFmLSwp`z~SnAw7^!<|l#OP0@6A>8HH~p|l7^kdh4(eydwX4RpHrZ&k@fey8 zRUJDVc2||0&8PmK6pSSw@L$Z(li2pYvEb(j9bex@Yj-mP&w>`{V@J0=7h)<;^0p;w zhq(9IC0k%Mg!q+q!05v?i|z_R84SAR%0f7EQTju5kQ$0r!sY8q(Al5$WGP-6S!vhY z4{mfs&Pa91z>bbU>j;#G+=utA^W8$Tl|@Gg`Ie1GF1#(^@r`hj03zrSk1!aqW$scW z@5w^*etkLCacb9m#lGkAq4TmcNRie1O9!IKUyF%UeY)Qk{96r0RNmc$!7}5B8&2mw zPFF*fMY1l$rH3(7^9&{kZqZepi!tbMTGh%rvZ`6^q?gF0OZ2z|vr3g*kYt9XoVN8+ z5mxQeN-Tx05j+Wt%$!-Eg1&x0!SC0K`l+l%3sV1ZrulhTx|y~hHR*y!E!3pX{;<`9 z0MNUr1oK)C1QD06DF~2HdK%oX2^r4uRA@z3x)gW7KZyz|aS!c*f4J(2E{7ldJ7)o( zZe+oVWKx(%d3|JJk3A8zqH&NDroer6iV_>;{;6o&WYFs}eUVw_Vi+;yZ#2Y-n#KrK z7uas6V%x?y6pZR#Fl9D{Z(e#Pqxy1Jyza`1iUyXKy;7SVS-yqW%$f|lJ)XxG1xf3o zC{yCM95N)k>35cpPB8samE%`C>9Tv`#I{f&Ip>_R194FjCoRN16(dQ{?Bd-U|4QB7 zFUhAKZDx`92B`im$T7_a0{h{CM4jArALh5W=L>nv7ZM_^Jj;irF5N@>aTu*KCg;7u z?pAF}KSrH;+-4j`5i1g61)S^l8kgoOkSNfC!ZGJRMS?HqtMbM;R0W+gcV-|^K^=vA zT}J&|`w<I}6JBLXUn{r!VeGn@_sls!h+5nwe)o4LyRfmPSZ0rdR&2}I#c8+2?kR}_ zC(eY=`Dfds`0Cd;jrsJh67uMPd6EJ8@7evm2V7sW?OpMIX-;gyJ0j{&nGz2zPSQNJ z_WRTD2J_ITR2Bi5uT(C3m&)5-v1}$xn&wsA0lHjo;+-kU^IV4cx$ULxZ@Vb!ZvC7{ z#a&->p!1lLE#y4DC1OO{-l~;LO{f3y#InrXNb0N;9MvK#Q3Ik0*>AZ@URX{!6vuNo z^;OmlVRKKRzCUAzX128DyY2lNZ>M>LvL6JXs(QcqauqI7hJx<2w6nJ_SkA$C(Sh#c zKl)&A5aN{9GU-`l_SB_k2yiCKnx`mVoEe`WjZ5d(Ok&fi)C?y8E;C6pEb4kUwx@a? zBjC|8E|r~UHx#L?9<K-F0hVy27f+xUZ~iw(t!Rio@e#ZlVaTA9ro-wks%wXnh|yB_ z&~$Hr6p=2=!tU}$;*MbNzD4#ujD-%o6!wW5r0TUTeI@MPeKLUIjRwhrFS0<zmuC$# z&vagItmU9@!W9vL;ZZOzod82>(xanU%XOY|x_fsoyfv}!G_`xAd1(vS89ZbK%1Qmg z<3qMf>_Fic?v5vuMGPEvH~?2Vx6A3!ebDfgCt3eh-06k#=&1V$M${*<%c`RAA>Gdx z9%LQcaUlTZQLNTc@xV^R<(--2;-b5^kHuE{{A(a-PC4$x!c={Tyi1$wlyuu^B+Jr$ z_;ttZ+jqKry1WQL$llKbx~Ft)*4o<BfXVN(Zw*13t=BhM5EfzHOz$BLfxNsm`7;ra z^!Eq*nZ4~~B>nZnZ!JY5#udro(41`VG3pdM#$y1Wki-vVC=T?7yQ%TlX?vDTPQU?> z;cn4j)i$DlQ@0!AgMl7sF}b;XaEWtx(Anvl$M&*?ypbtLfuGa(7Z8D~S~6m2(tI?? zZEvWRn|C%Zjayoc#~nfA7E7WOXN*3U+n1H9;`UofQk&yZfQ%yZh@G6$1r3u$%i=(c zNk!Sk=_$~52vv&;vo%HlLzvyyKG19om)jNhl5U74sj^;eexaFdYNM0(b(dfUJ{&&s zS*<LG@~qoqTE-t?om0@9E>n7iD~q^}5$gXcVvb)zf3VM5C*o}G;&Hn>H=m!z+vGRx z=ed-D502a_vbiWIoCn%~QhjY$bAIGZ1sC__ry5cN0sC?eQuDxo!FdfraG1(52DD?r z=rG19RsDDFQET@ccG}JXR~suY4>fzGi$&<QovezWRVL+B%%rku>`{xuVb_t^t{GmD zSy9`21enp?5bQm+$bNvrWcSFgfW_Qqd}HDy4$S28T+ne5a73jYg;D%Rf_|S=n+$9o z3~`Qh2unVU?}!3jmNr&@JYWZ?lGeB=F0MMT1)h%a{RB{Ke=IW32ZH4xb`?MHPB~v* z6c`nD6+)gV7AP+08EYGgXK+XRYpO*_-im1D119LjAheu9J;UxHtJ6sM(fc@0t%CB5 z$9N(QAgdboA7?S9Y~t$z)EVzLG43o}_X}Kc3rpy)afU!nKWX#~2L}!~xxzT@2lLZG zmna~S<EuKgQF|P<7K6~iN2jf-B2!UoG{VTANo`dHPSD}r{tJU!mx_wAq$=J$*&9&H zA-D1?blk&l5YU1WZ!N8YZL4+j2reSN&y8}5G>GHpxA5~xn(ecd@jv08Yy)4a1VK8x z1-?lVDv`{<KKNm*l$d+#IHyE<nM@+!i(@as4qb1`*O$EZCBS*wg6yz^(3G>~vM}|z zBvpcf57oj7d@ohsQ=_VmEh(6X#qheSY8@21=-!`9i&DiB5i5Fjt|+c<NSPS9&<aq5 zje9n#rhsXnqe&m!drd@LjqZ@Fs*Uvw>@t6Llik2{2v0Sfn{AyF^EcgdIE4G27{E~` z<rYSlNMqCH6r9GAm!d818ll(PNpznk(%Z!F>#=UCF<iMP<5hJ}w}0$3o~FK~g(0ZO z7lZmaj+P_|>q-tAAsg59rhxFjR7x@I6L|NUHKqAguRaAa)4IHw5eUlhT26O^83*-4 z4XHyF$7<yq-#aZTeL)L_^z+Gj7@1B)p&Y+MP#<%kAo>QQ`qV3PE@fx;4gTQ0jjQjq z_0@dI_E?%0K_79mRH;{(Q-3H1mS}(@XRKG_WC3#*#Z**a@uTAOpY=$=bnGPaR4t)^ zq{b%!-sW0pHFfW{(8&GDiu}l|nllLZY^PC>tvlhJESc0YP7-%};oBaTf9#Cu;dF?p zFM`mpdM>hHpSU{}kRN%ljx(gvC4N?=R<@CbEqtq`&~M?>Yds_wubgaAkX{i*T&t|9 zLM&a^U2@Fm`Zyh5WLlD+UXnIhY%{nCnJ7l_)?6!f^`Wd9lBTi%^|MclG*rw?%jl32 zTvDNTKU>ws_-W*WI57pi{w5f$2HyP7-sOBz$x<v3?a`}L51uZ}d<SVFcCC5DA=tdv z(1;}_r#R1*gD~6tMv-iwqP$KGu=;VarjSABM$1WNJ=^bsXCojsZM3*0wR+R;>G*6g zA=%vKw5RCAW3wwxfFpaa%wuN!0eLh@)4jK60Dr=3Wc}MZGCq9cdsfrdX3L`b<U6rH zAiDR&3^i_l=J0eQx);}VLhPnHdnGRh^+dAKJer)mWJ$zwj=L@fOSs%_qc`j%W{qtt za-F|F@N^*Z1(|1bo8khEQf@0{zy#PSx7_oIGXAm;;xJMfi$hmN_S!ejJtK}Z3&mF< zAdROBF`~U@yB_IRbNi1m{AvqvPgIi!0SC4=`@EIWY6UN=!b<nHo13jl_A)2fQmt3T zxb1H}&Houy<2W&9Q~`Vw?wUI^Fj_V=_5OU7E+5fcfpXRLmGfEOaBy*V+zx8<aJ@a> zjjY~>#lw@1zAB#k3KK+cHA3qPXF23UrV_dWf>Bq`<kc0~^QWV<M~^cMD3{KCabL~s zFBO@hF?YYBN~Dhu#=H4N3*C<<zn|7_1_hA-&M`#a0K;y5$Uuw-H4BSPWga_jasUIU zj{VD7wAu)Z9+~|>Eak*bccIbKSMke5z57wBcw?M%c(T`f0;8-2#cY&|QO0^%Jm;@z zyOEtjmCW;QYN=WdRp`2>K8gTCmF*4C&_-~z?a$6*8V!#(^yk?S<%j|wV8Xb189q?D z;DhyW-)sEnlR$v&!Y>)(_R>M1)KI<xFxv|kXlGw=J$#GnQ=60o+XhuJOF2ORmp2?; zfumy!MzDO7QpX7+Beu&u9@Ok@@6N7+4&xyO2yPFm$52pEh`eV7VOl{W8R$6Kld<eY z>{3(+GdX|k`TK;My5agt*BePecqpy+W;72LFqRuXpVZsD*wZV%ws#=B-qSvVxBbry zUUfe3ealG)^#(i)_+pBuuBa$VYLbo1q#642<(>G<${YW7#^S_D$ThZgcRRjDd)@g` z5rfEJLS<iXLW}r0&1-LlCH75)?0f{<Qf6AL<A%?Hc+$xie(S+T;W4Wl{o}=>J(6^y z9D$O?tg))^0;bd)MpKo41DiRVfAWdkKyl1lnalD!`@XCStc5FmsKHf?H!;5Je|ljo zK^PxUQP`!3(e1Te%AhVZJxHYSGH`2R=sw%S3_bIpdo$A`GHxx2&2z(Bnsv--REs+$ z$Y5Sjp|ufY5Z#Wa@eWM=&PfFEt<zJkao15!S0G<lagj_RTF&X<3Z$qbAy}^~5RT~A zZNDtpO_{}!0RIAJ!Asx<H-4e(C6VpQNdTOqT7a_-6gsPrk9ObH9M5r%7Vs}sIq$F7 zX<vBBO>lUI2ve$LJ>&*$-q$T;fG;U`VQ9M4D|{F{TU1!+qNMYL+tJ%3SQg>VK)RQg z7N<O#fJXT}@&$fK9zN&OZd&H7pQo-ytDE_H%WN2ihE@009u1Odn^nb=v&5C!7Y6Sm zeb@rGahqPmR-=O0CN_AK1H1)lH*cB%%CjzyIvihb>e3c0UWXu@lqr`e8$TUd{sEe_ zCO-UGQU06{w02=xcwn0H)Lm98_eC0Z8fQDXJ)6+fz*V=u3AMKm3{>2WA^`E!T{L2s zlYwtL?e6R!er<mykZ7(T_95_EBq5KIoUn_+6kW0UVzHd>+4d>wi$DNr2~X8F#SnLR zF0r#{jd4XNCK1PQ#KL4cR$t$Mc$IQ?F^_WfN7vhU#3Os*1Wq$p(5w1Ij2tfS9HyD3 zKr^C~$kNb<z`>fUlzbr<EUiZ?NHVwh?Ym{<qWam~K&{SAt;8acde!c#-FZJHUbt&q z5Ik8l!N*xj)etsTBdIZUSa!xKw?ZaAoW=qPBs+b-a(MAIW7d#Ww*hi-!=d=_^w7(m zZ`bJ;Kf)9%K5%pwF;evkahgFaWc+58#tb%BB@A~%lT)nG@TK3MVa6HvnK>d?Uze&v z2Wyx__gKjHS`v~aaj884W#DfqC!uMyIb<oizDJR-N(aIsbAeT83VGVy<gfyV;m!X^ z;+j!|``@MU;uoW^u_;ZhA@E_PcTWfgHSt^jN8F^hJ`3{Zcif9@Y`l4Qa7&B_%s-NG z;kURvD=5h)(z#d4U4=;uVbRt=x!7ZFvVNN`V<qaTm`=p(d)_guD$Y+|IbD>Su<*k4 z=6PZU@9f&<Ki!=F+Kxx%upE$h96B9Q)~sv6mBaV<AEqc?MBmK%9@tf=7LIRy?Y0}e zoot>@#Nf(Jp-~&lV8Yu!qW@r-e6eyaWz9<=xYF`y{L*T?cq8DU;nX1TLQ7;J*z931 zKZFJVvp#qKyeAAo9Sr{?%6{HN#W|XJ4@v>1KJ_+j<k3=+wqlW0=m0^RzhR>)lJ>}L ztK?hQi4|ej=E5o#-B>HUO66R!>(8Gxn=EV}h8Y;}Lcc)q-i(NoLRyx?nXJba=HuGS z$R>jVj3Wn=&Q5fflUwfzr;yl0C8#AL*AB>w_n9Q>Y6_`EKsQum3l+30o{uN-b?f&0 zh45^c)}xxd_cwEw+OI(;d{2(zkEnem`Pz%wKPfE=jhEfm^rbtOccAh8!VZA|e*di> zEpEpewx(*cjfSd?A$ca1`Z+6d+j!WH+j(hAFon|~TPhyey_XRz6>_mnVbZbGB+fSJ zwvU!Q-OI5&R5DwS3OWDnn>LwsNv1-jxJgslaOI{}@zDbnw$l7TO#=T}X&5dXF8Fwz z^Oxv22zGve>Doy~bnmq;eK~y>SH7dgFa*0RvC~(f>OVS;zMae8!heX(!VL6cN}mJf z=?@Go4@*rWcN=VeB5`?>p$L;_o}j<QMTFz0gPi=t0Szaynff}w@YnT&mHv;Vn)R|~ z<!)9%I~-JdB7z<56zASzxyj|LuR%1YPbDwCqB-EWTwx7;f|ZqWMk!ELs(JkP>g$vn zC1%yXb75CHapAMJkdutV>P*3>o3W*4=Xb$9uMNom<)$gwz~f6e^&alWqv3|eFGbYi zMbyjL-p84^+op4Qk)?k7Ss-wKxor*8Ur+t!f9WF*z;A!J)KXTCX>ENF-M{^ZL1(Xo zk&7^aO5)Z>tR@+I2zzei!p3orA0Smvb@oAPh7^IHU-(a*ma}y!_MX#)O2+BFvvobA zowrRSuHAjqo%j8Tw8-Up4xj}Lir5drd2H729ARKVy%wqSk-$wKT4-zZ_Do~KUdF=s z$_}x8xV?aJ5y5j8@Xy)@jISTN5u;40FkmPf?%qDWCbSv(l@s4&%<`vu8Xtgvn%hou zMy|z@xVoLM-o}UbNBXx=VFsIY?i*N^x_zo$aTEOVqWS&fm5ayT_<^YJLUCKh<MCG% z)Q^OpNYeDyQ>@!G>cDfNNB<7iN8j(O9u*eUCQbn8V@ifGj~6y3hw%;p`27-3tHQ%> zd(<>~Nn>C?S44k(KE7-6s=57UbtqD+&In5L$%m32%5-yZ)XG$zrp~;+6rX|Bp78n@ zbaC<^Kj<0s5+$O&<ydfV#J_!>D3{GL)9t&5K9B$@Pb2f(2Zjq5H8N0NrEvtzZbNC` zXOW|HwF&TAA44vPPXtl~8t-o26Z5suk^FGF-An*Q5c2k#R8zS;!|JX9|6$Pe6OoU| zkk8M%5QSORP+<V}U_g*!d_d?AYf-#}D}CV(M01Y%&1O(rb4>|*yUR>@j-{uF-ug0U z29Q`oRb8Q}Y`vNIm}4xOfjQDyW5WJwTWh-*XJb^;@%LI##)Ab0Q1W$9Tl-2|hn2bk zSC^A?3cvFaj9>*lN#H{>MHSYpD(wWaxEo2`kPVze;;LS*tUTr~B)LABY@-vjvwDiu zZqa;#a+-#gqy;gaL{#fc+g|mF*h2D1kaP3+`1sO8%DvI_yORcQ(nV0esF7xcbnoY{ z+P-VnKwuxWBswlX_<ckw_Z3~f4(DR#as-oHNi<+%FUsI9OI8}C`0IYFR~}_V*6N4A z!+K`ju79Cf!7VppE4I17w;`5{<)C>C8JB}AF*P$!;!l}UuVM0x?nNnT2%7<hE!W3x z$@fYe--u!`fr)rjUM*xgYb3`&YW-%FKO{ln6;44)8);!8b8#6*gh`##A|oa`_q#z` z20tU}b2I1VVMsmqZa?}}#c(}g5o%X+Y2%~y2*gK3hp}48DH=?>Gnb)!NO02i=1Ui= zwzspW6KP@}fS2o56ONq0a5r^jPZ&PX_SLA#YFx7*VQ`RG5iBqH1=|LE^hD{g@{~AA zNwdV*Km|3ph|`|`^5f$>a)MeAABfIJWi}<YEmaO3cUnD>{X1khSvlyB!`QETzbDb* z%7v-=%;2(O@H{=#4Pj<rkm!7wQI9Vg(#lf_<7Lx#HUytso5nFZ=a|4xyLW~(A=V>5 zRw6OMzfaO<HCE>&1s&Co^*8PZNACi+c1S9u3z&;LQOS{v#_lV#^n$kGr<9*brH)=n z$fusDItUlYmfO-n3C<D&s1VDXFxu3)={dHkovrLU@d^54asU<YV61UbfRX`Fuw#zA zNwDnrL3cICZIY{=TLpCEt^EH{_Lfm`bzQe$f&~p4tO!mZxEAj28eD@z;qJj5f=h6B z3U_x8?hYZiL+~#0Jn#M9+qZj+?*CP%PHkCxt-0o$`+O(8`l1N~jx%!jS?*O<65$>L z4|nSEi6UkAXv@Ci7uY%G93SsZaIUU98j$grd{e>_??_(d8t%O=!>u8<Rej>1;F;#+ z-2Wn@vi&8n7I$@tl#2x4FAWQa^nQ0b_Hw$LE4pyp?4s}6c&h8qCrpLX-<5lLFfI;U zK4fswvsk*7`<{IP6@qPm<U(M%e{d8F0Ukdqov4%tE8Gp0zE5voq1oTJvMSTcFseMc zhwrjnu5>|J=4^Q-;X+K62IxGteH}2WTGzB~pq(;c7k!K!){FZphDUl^7`QyHA1!>C z>z^)w)kEA<>;%9w>wKI(*?dI8ZX{_y^A~R2LnG81uSq;rr<Q2qpGJWwcZUMRF+<3P z?|j2iTvqH;GsPAJ%J=l{_aEXk!n7@0#qa7!z=9E_4=3%7z0c_Sxg9+&y-Xa`3gE6u z++iPFS=<l4=~cupdMJUx!i&AZ;^tC)E~j&SXq!53Ax#)K18DZ}p|&35S*1Z(mHxNb zTCf1KPyP?Q!BuH8Qsm0fcCLC%k|vNwP+AX{0L7ltZ#wO@d70{bE=oeZ{;j7@1M8gc zm&Flqz`b|Icj|jp2MJyMs07Yr>9NuUGvG#kTa8mQe9Jjl;8{NH2_3f8`%ql*0>Zts zb|W;DosP{7NgCXvA3P_)GMXfBDa?aV%pU@mM9<fBH{E8(FovETmFujjyCoOqRuz8v zCXE3cZKPQgy5ICL$pBqDvVI9=CPJvWyd9;Us!H~o&6ql|^|IO3-#@15Ooom}ZPV1` z`U_!(H`IqP%!>@Q`xJe7_V_CK)WQO}s-$~LwQYUvi(a0|5h0}G9-qOL>$sP1iQ~*5 zB|jn|D}7x@tUn))PY$v<ZdPZb<fJ8ayO}ew8^|CxWIGnP(Q?x8G$GNm_T!N{7;f>! z0zEhdqUaoVwK8yVe{5bAM>AvY2^yVb17pGyAP;ThC~z2b7kM|fc1o=cp*@!Jb;IXc zBn2v7b3gC={K$T~YOVEgjJ@V!c-iB4IWw3%WMt7$i~J5<AG+mmmMH?!IJulQ^I^HF z%&B4~rX6=DL`QG+$=09S(dl&)5`&2IdbHP!si{xdzUy<T?O&1Q`D^P!<9+#K_{j+3 zR4Im^6A&rC57Wok$eZxgcJLS?#}lT6?+U$3{I=wxYTR(X^c#xix35|7^2a-N>(jON zIdUujR~WqCgs>NQgfApM{e5w&ObZRJD*)tJe>ezuT6q@lLxEP4<~4O9%j9_N??vFj z;LC|3SY!gl;6ZreYmk#;*rwSXRBN1&lolA0K{HV-c7@L4`%TS#mYK4>v`)o@pv%y_ z^v|P|eBT~Y*N}Jq`C&A=7@JaCZPD<_IPd;_$k%v=S7x$dM00rtmG@z4LZ`nb4groH z{cRG%Y?MJq1vtBg7yl%@V(Ny^PaqBth=wsCw=v9KkiBiT74QuuZMJpp^yT{Q+_*S9 zCMOc7{qbav1blwYpBi0}!DcxmcYe$Nyr4u&iIFxtDxCRvwGE+%xW0^R|G1S59tHhY z6td*&c-ha+Bl%%Yb=k9vu+_0@S((A_Vr@s@vr<!y{woay$;XDOU15ibMw5yk#tz$` zmoX<($>s8SU|Hz%S;;p@hX7K!XYIskpCB-o{O*Ob2kz{-HMp(VG+p=)wDcH{id+*8 zE^fr8tlOtFQ59fD_b8^it@u+@<5CeF@;J9KFEozjoPFTM_mj_3z&JBR0KmZ<@L@l& z(BEPwJvjNaq3%|Ex9h!gypg@;q+?z{%hb)n%@+Tcu)H#fy0s4l0i`fGf|~|fmJ;1Z z_};?L(^PK#-j|LY`KXiB*A}bW=N9m*saDs$yzP4QIenG}=NF9nBrBl!v#B9iSA^e9 zyt1~iQh14m|DL?9ZC29aHa!QX!g{})1}unPQ})z0wwsNJ)d|)UU%(CIH9T^E1NxTX zwjdC~1Hjp2W$FJ@;41q)-$wF%3U^=T+SA_riy2*}+T{H-G3fDU6TQb!aq0S6(_M7^ z5^eBXA%UV#a=N<X1*|!0eUT5Ds((-&aa>!Pa5|pvOuRyI-WB4zX)IkXpLqrQv_XKb zQ+kx$@*<tb4hLi5DA95|WLWMk*EJ-7&1#ER)dC?G7X-i(wp=jF+px0ZnDrg@=W+5! z!4l_WH$v=|b=Kvp@wFptSu+4<mj@TJfrzP!qec!5zVp~|&=Ao3Rn&^_zuSfvb({;< zUP}VG;~|K9xa&h3h+CgvWoi(Sfq^V6EVp{j)gGN1;`@o-2syCQb2j|0+2T{}l#4Rc zX1P)S&D^%c9m|8OusSWnOaT;FC56lfPk*2bvFaEHXXo-l&eNaC-Tj7By~{K5(&B5K zbo8Iu*w|W(EcaY)+n0#g9P>dlRQ9=lN;7@h7uEHn<RlKqkmS5?FWZ*4P$tEwS}9*+ z0knZiaAPYHmhnRD>6vW-(AYJB@V#K9LO`Bhq%R|Na2F%>BO>tBflH7u(LaExv0+gq z+mp8R|F7KZLbJ_`+T+T$%6_zQ$b^=1Qv?4rn8$Q`ii^nYuIRX|M`!g1YrtUyC1^tj z2YAC4|9RW=yuuiT7t!=11rrBB5XOzd<w|o!#;|(xrv+O&^CR9mi6T7Um03)}YPvX5 zdHmuDR$@D!u(Aph8@N@pxr4Z}zT8W?@oS{I%)>ha;lv)^ytY3M^5M%6geVg)cD?!6 z$#l&}yWAS_F_+n&9j=RE8tp+v&U=ue=C!I%<vQQ6YVdx%P9i#eIkOXACCCh>)RioF z8(6AFE+eBy$R?-WT=8=P`DXqN<X{w&LSrzw;hu|7!eEM!;qJk+t)4^<qDAmv35*vh zAT)BYVUom#9E%Y>CAmr$#SyCXrvPI=jxG7UwO`fFN<*a7+lWan{uSDE!?B}{)aw^p zz~CxhrpBcY{cdIMvt2<vfw>)2bFrK41f=3gK8(eeR69`2oJ#e!bA!$~RCicO^RkqP zb{wb}R{WO42I=6SA=jjUJ+p_l@4KMdI)Vjee%>~-YsJu4uDT=EI$Xdws=TB!IkukF zqF!P~Vhn-4=*$NoT5f#$YI@<k2$!ZNm-zUi`g)$@+~@XF-Pn2}-FPgHRc@-PtF!zJ zB#M(%Y!gw4VfOJcsEB%WR6;f!^GpG>AaK21Uw`9#q?PyqFGfY(tv=UKzB;tPIV-5F zg}j)5cB+{owOA%@pjz*|a&%BCwART-QqH8L#A`5v2EQdgc>V)91x^L;rw^HWBooqj z3B1WLzhAW_I$o&d!Q9<$I;Uh1DcN~M_g@W%CIm^_9IU&bFso!L?yEJB{yAP)!}ogt zfxa+74gt3s3q%vyD$#y*%!W-T+;mk=8~ru$@wTBUO&Ym+;JX1HV%RPDhAf(qSrp7` z3OU;a=ZD4)Zqfr6b)iPVk^qg|X@Y6iH{|i?f($6P1Wan}8rO%ZDFzfY*5B9qTl*_l zGnT}SOd-|JH#pU$@z#=#yQ^eSSft!$xGpHwuyfT@e6<mXOsNs9melpCE!Uy8;!%nr z)CMb;4Daf<m?jZfnVrVnT<J91f`lttuv@hLH}K&czeaaasU~Oa-GnqZMY`#GoAH$K z$s7`M5&&0T+tgUq(OWI>k(zG3=wplc(vn97YCUSVZHA)ayq-<N)ltj^vgs_)J-6yz zDPA&P{&jiM;re+28UFa8JCWckIsUIW&Iru(EEFiBgb^AqncZOTmdOZDi?Ww#f-<uB zkHQbaI;Mi5hp_N@k-#MXyV&nvCLn~<?l%amDwV5crv+!s=#iz3`Nd6Pj%<VUN9@sl z;|0I|5QL)k24sdNv{A^hlkY&tITZ`ZKzEltT&xLbkn}B;v3n-#sn*96cqf;GcexA| z&Fkm&Z+N;9)IAS+Y<wUFPbu6eYx1w+#8**a93fBvV|iw+Z}y9s4Wr}s7oOFhVW&H! zScqwVRD-VUv{H^C$zk<=ftERu=P^;?7X_vRU37;!aVpQE&&7PZ^QUXpIy-#irO2kI z-sk?Uypyi>jtizl<P6nB!^DjtV>wzxyB|X+Bi%xLm)xDKGyfOC&A`%$1bJfDYJH`n zeLM-#hU!(>_^MDGLIzNc^>&GFm{}bYLmHAWQIP__xAe_H`ud>#4N?eV03lIrDSs3T zwAVrQ3dA~2g@cgroDZ^3y<;n!$jnZ!wwttl^t^KI8Yv7B0q!tl^I%)l>EJ{ilE(6b zhy9nRg3hhi8tSih6aw9Ba28<mAig)&fN&QG1~egrEd`EH_@SSIRN$}C6G7;hP(b*u z6Sa0EnlXpP=^qPEZZfMTNYZ_En6kq*`2<u|RD6UKcc1R0eyFA9ex>6VQ`8y`cA379 z1`sv6m9%;b6^ZY;kT|fU-H+_I;d$t%7grtanVn_iq3-Y#a@@bypmLGweo*uBe2KGP z-$eG)gdCzF^?_Rw*(5~k5^1Kn+PW+CRQn^*NF4|Ke52Z@#pj6|3u2DSaa}#VA$i`G zC=u>XCfLsx?JrdIQZEqwm>}vT+?we$r3?T17PJ<guYf!Wh*+dXq7ZE6g^!HGGn;C5 zi=KT+X8KEvyN3}Ap0!C|_&SXL4FIOXieK0Ej1{vz_cO{w9X6sB$M!a^9PYv&lJl*H z?g0Is5K-@P{yYMzoNTEDiMA=6R`V*SVW<hrmn8RV(se}2kvUr#@DMFn%a!M32^xGZ z{8;QoKlv7JlE$CQN1{xMoYXx;^7|JtUmXqM?nrrP9GvTyY*|fQojdWo0O9p@8$Eq? z9wvg#GgQ6ws&UM|mIsLnu{~TW8x)6BC%HsJYe|&}6gqu>ea%V5vjix)oq_WA9dGI` zNz|_o?#J~1iz3H@0onlJIITRLD-eLFA!WMEf<Q!gti`hMs)TC;qT(?+`*t=j){xRn zV#l@AAIG2qgLir_vRgaq4|Yz3ip!$=Y}eD}XVFb-!Ig<PdYKL7G#xJs?w<#ZwR7Ii ztl{Y7UwaYs0IM0eoa?+CU_!AJN!)B-xc?WI4H<>qdV!B{o1%3&r>5<i0_xGQ;&v0b z%}{iz3L3C`nhM&mbE`P}<XdAIt^M8ES#o@)e8N`II<x56+gHF422ee%D$`x_7GOv7 zv^&l%g{dR4|7DbC5Yn@b`x^DmP8;3r3Gl-4OTT52A++(H7}QID8<Ql=sQxS{Wf|CB zvdY+9G$<+V-RNW7ehgj7C}npAtj*acQ7LF)pLlaC;B)MK-i!_Qjs5sEN+v`L7iG&& zul7V#Tn<r+j=U1#qTvBRq{@}2eF+{~DOf1pK!`?(`B?T(lu9H~peYhWNBlpmwc>9m z<)>u7*0&>h&tP;kHQFx2_Le;EIPlFtO|KuVmo|D8S+<rGSZ+fDU<Np^(^tz|5<ldb zj#n0)#%eDSl&F`%L1Ge^sUB>{?Vc^*{RIDcUu1YT4yY}H061kZp(b!F33nR@v2cfJ zE;N4RoX|Lrwa0cY)GlTwk3a;nUd=Cc1)UhE7_Ml%BAW7_LAW7XmP>xHB5C?M&a&y9 z3X{uOWrO}r!(9(zMBK7^uz}N=u?L#k{51zk{oJSOMO$`u|6y#UwCsX}+6P5AW5du! zW1+FrGc@RiO3h^%G^}l86xCWsmX6Bp4dJ2=Wb2Kbu1Wu;guS8<%8AXoSf{njHNWB; zP`tleSWLX*h^abGQZtB8QeYtf+FI)#_U;csxf#3m>;$biQHXJ*A9uAga4Gv)-zuVJ z<8Epc_`jQmPk2J{#hA8Iyx^N3L9NV3iqH&we_fXlj223Axb$#vQJyf7@a4bol%p8# zr_-c-Z0pL76$p=Oom;TPnOHM`ZpE%FzqCf${l+YRFuc^WqUdqwOR$_CL_T>{51gZu zuP!XQhM%j~JH@Z>ahWK<O>K5ZkJ7s7hu$Oq>ekk@26u3R^#2P?`M}+HXohN$uITaW ztXiNil@12N%kWrI`-3sF!hmK*YXB|2m7HQH;rb0F;?|N@-yc`)cGb%+^vSjJb^4-_ zfJf5*LM0zzeLs<deotbOmf+v7Dx?JK)Qu_PiAAH0^%(izp0nYxK?+@Rhp~!{BJ$ut zCrK@Gji&7CQ)G+1=2{lheJRsuV(HASkn63KKt-%YHyVh~v&&t}w6>RQp!wU8rOQN| z;*<zcj_G4)r9z6+(ULZ_g!nZZ-1Uj1(4Gn$CNP8bn2y@+3BY8Ro7*#;!$TKCXRMQF za-u^hEwxk4albX-ekJlW6|?Gi{sYjl?%iekZ|aYyxyaPCYTleXzkg|tR7NvLVplKM z9yx>u4sd3yxsJ{J@2HBh*a0c>0OR7u)2jd(@^|w7@02H@N?T`9N-plG%F(Fzh_bY6 zOQh}En0*QSYImoh6xXNY@VD1U(puNv9%^1OsW$W$%)Fm@oy7LXrRV97bmJi@X=>tu zrC?_T4x7Zn+LBY1g`B;*$i-3l*j5y;WWPoGgi*(rq&`z@YM@)ZxTKC7`*%O9*Al;! zx2Iz{W8}yEh+R)<lOCi>>g=z9n7{~k-!u08n4oQErj4*D)9)$g`DL*#4EDXH>TrIU ztC!G$yBlDNkV-dGH0n4uVo|o5FzkWj{0bqj@ULvVhgdiKgb73m=&?g%910;E8vWUo z!Q8t39rn@;2{1J(!{9bA#X7`Mh(9U*N*a>2KifKVV2>Y$^0Ou61N7qIWt0@d@Vt+n z|Glaopctvbz)4*T;UWm=F;$2lEu?7GO{(gwOEXPat3sh#95<`*DDN<wPBI<6&QQI0 zkJn@hXKiaV)i~p~12mxP!aKBL;gW*ppTf5(*JJ~aUXETUG0p!CsjT^<cSFR{bpa^m zBh(CcBD@eWHs@>zpC2XKS;@oHX|GFN;&A%}Omu$v)+G(^2ifoqqmHRR+6I4Lj;^G- z#X-LLf)C&1DBjs7La`wMtItNK2E$e1&~JNdWcT^P92WT%!%9EKyO6N$p`j0*ptmD4 zx9bofeifS;J3REUxS&CdzX0cr+V5p=$T2zUp|Zo<0%O|SV*=a474*k4My1!O^>gd` zTm)lQ%RU-RaesEIfy3-23PK6!iyBn>6r%S+>M9u{YmyQ3L6R3l{Hd=?ts}Zv<7<+J zKIW;YYJwy}`Q77lVQ?%*syH%QjzeCqL=5q>;P{ZSTn?@G!uFB_LG<Ns!@ZXu>9rWa zW*n8Hs7aI|FV2;1?$0YteRhw&Z|Ft%^G|*~MK=U0ZG3?2TPjdQXdD-<3)Da)Z-!R; zjLLfeR&eY0>S>LHB!_x!>{*EmtUdHpNk~0w=`q*xkc*@yhl-#d!*&~<Y7Y#W8Ig%9 zN&GeI7*et;9!cKOyrg@q0=4GmWFnjX6HT;HqiS}nODJ$8=r0=8!fQxlbxNj+JNq+; zIscC}i%w4JIc~b6Z=~-ELfR_<$V$2m!Cr0g{{sMHUiBuaAT6@X9sOzNW7||l`+M`s z$KP>RH>#yCdCE{~4Oep?7P3M#=APGnT`252uvI^Cb@x*pDXy6m*xq!_RrFJMgOa=6 zM3R86ZjYt|DtdN61?umh<k_pYxDhfUWuJ_|=UzJ(Ip*BWm@OS4yxLag<!2F0`p|XT zL>;`K&&#MCC=y!`(-+==@iATkinjEduGN{u3*TNl-qzKXaJ?7Ln)crCTwj2~+zMt- zcTW2~$Ehvz-T4(F{MY7`m?z#I8stew!T~)9T=NpNKaX_BV@&0D+ug5qYpq9HAMA#L z_Ioh^Mbl`|#Lhx4!Z#bw-_kn6o7n{dru;55N1#WL_6tKDFG@6;kTx+(>zYLYav64i z)PTb-5zfqN_f*pF>>vN5;E?*_Jo)QdH4Ght?dA{}z_oNKq7Tg-A$1dNVl;u$f9m;F z!@F;>7c0CfsNgYS-7S^3OY!zZS11yReNbQ~GoeyfR^qI<#+K}sxJ_dXMf&hwJ5 zPAPDnLkDu*{^Hcs)TBa1@=CqGDE75n<~|hp6=c3lv30%a*vI&>{t3cQh`Jd(G5j-p zKQdLo#`NpV3NDfkB=bhLH7$~o_`g9LzT)Xhg-gG<^(W8MdRO6E^qmxlbpsVBYYu7J z0^bw#!6%Ac%3NU_Ig1=4U08+QCV;u;z`m5mif!y$4v@l}t+2JM?i-4|k=Ym1uXzd7 zZv#b*nOS8~l<7q2nohCc!<VWrdp=b4C*RP7u^k1YXuQ8g!@MJ;>0>dyAM_E54KyiF z8xs~cjZO_>WR2GSg|qvRr4{P*JlRvE(7H{HXF_W}hZ;p0OVp(7BeKx>uZX{YZ|haW zk2TIE_0^UG**J^CB13C_RvAxv9tKcB5!qIVjlk9;#_y@>>_SLat7OumtbTuwEQ=R9 z(|Lit|Lg}bpSYph9A?s`{R`cc{ugxfPFxa#?6$~HIQK?&69()ic9hDlsIo7ILuZ;m z;4Jb$6gP1Le1%4L(e9m_F2(JD{6oa2QGFlC+A)U+0>&Mr6+dCm*Z1b-T|&o>p@cL; z=2tGX<UnRDY-e8!zi|RVXAOdRgtmJF@;JkBI636m?If=>JU`o%+s}S-60<YuRdFf6 z#*#yl*p<f_#Hg#%hn{TsF`L?8o@t|ymmqI2SQ2&QHiVy>2=C{lk#PO_P^*V0{xAcg zyK^KX6Q<7BIE`<FDJWSA2E|S$tGRJ7k`9sBTPfvJGZ?Gf=-2z-9qlYtJO<D8eB5lU zxJ9oqAKV;35rWj`;>f>5e?OkZL!^O!W)mUIICH$Ax2hsK5FazC#l=-OciFt${CtO< zw8(2&Dbw_=hZ73(hfPsQ-|04g3~5xogC>Qoiq9)ZuQcd}n(Pur7BV(EIbwfd+W$A$ z#)gy4Xq7_psW@?tZnC6q0fII>(y&x3ky@?l#m1$SSP)h3h4owSZ#uz3$j+A0l6`w> zgO^H<weOfDS3f5>vdz;E%Sp*45Dh&8!RqAy7Vpsjpn|ku$}2>&%th*@-rOCOK^S`6 z!j;{sqq2z0Ak`4D@L6fs{<~F;@GyS0Wu6;bk_qi1G1%CAvqb4ym_`{Ge%au>`?))g z@i2jojpo0pE6Le?XYV=5&Ei-)>}!tov-lIAr1X+^udO}ZJl5t&j)m=<F=nslX|%Rf z<FhL@TP#>_^xZ4@)<(2yk~$2f1X<JOulY*MADHlRgy}BVFj2KEZp0ww97hTDj1E8v z;Lyv&n%e-o9mt29ys3$z>H4X!rF2bIv*~tiHwftj1!u(y8FKkJB`c<s1hHcT0*uga zUe+JhhMl7J+2rg^2$IB+?!pM)?e)wl7BS|eu&cT{@4RoKjlP>s#IN#BjHaYCxUi<j zj2t#F&_`6N)67@wq6Nj%E-AVcNUu#gT`W`tR)6OMZ3o&u=8fDo)H`RWIhNq)DzB;4 z&6YVXCgxrw)+hQeCnmf<9(jDjZeUQ;s@zVSYw8P=@Ra(MJJQwCV>%`3lK0yG>`9z{ zt*q6i<?-i@sOa<3HriNqa2m_x`ay$(Y&IM1@;?p>Xup|y{z48ASoBqXU+Mi9IQom{ zyb>_}Lnire&nIFQ188H!V_s-KKSy~q_QdCzE;x+A@iwv$seqF=|KkvKg=+x4yW|E7 zbKltP4tpR7`vpQ|{fia7J{f+7av>}9D7_bi+?Rfx?MM9-+65Q3AhQ|K7&3CQA!?PD zMXq8M+ry>p9(&9b{KMx1!<`>aOtEBxzWzz68=1{UpM8ZX;om3zYgqNuFc>8g4Y5c7 z4hdu{-IRL@AG>bSyu%`lifF{{$|r}vK-JPK?;31?GXT#Um87%V7^brSh`_VY>)Fed zc&qMwB&W;w&jVdq7tZ!VDnc61`>iD^(L<M;SV6XG(!^?xUufI2n?tUVImF)lRgJnI z*{(;9;3pGYsN?r$q<9152|~^Ex25Y*+<v3r_Yk^?qoK<_Ka*(}=pzg<5YdI|c;dXm zTo889I+&z@X+)z;Dr)2LG!TU~B&sSq^VM#O1sVW<;H9qatwz<B-!y!JplpP{@IBoa zll4MP5HyAicjsZw8z;JiV)<%<(i!9i?&?gYv7KZOC<+}I-MZ<73!9=mJ3|WigGj<P zWH^w^3ntmCDmV+oLCBHrr0bl~L%Ao7`NNYW)}BMx-I!BKDu;EqPJnM&PVJKuIYGSv z@ALDQe1e>v9(f=`JE{JjJq)7XAJu?L!$}$DH$irCe8_-!XJ)2fp6zEW$6kgW!_uB% z4g=SCoM=(vH!Ds~V`KJr*&j!wgTww~GRn2^oefOO%cSjL_Xqp$T4O~6`$nRp%_Dez z`0=G{)22I6b3q{duJ;4F4=_AsZ0iUkv;&>-V=dTDF~DXEYy{GUCV5uvv<Lp`oi4FE zXN%GQ{Nu~`<~)MvJnNluzVfOXEMQ)w+nrFW|Lgo#FB_Ck&&*XACs^=@FJ_Y6iR&k_ zxV}X?44*zz^_ULy$z+E=-O^vTFyA)BMls8-#C_yzXxFK7IA3VxSsX=?wHgCl5GedE zge+8jL$pA}rsIBNds+2(*dQ=S@lzZ=kQVKhxABNIT)usD(##qCA2YkicF2LVA{HWV zr*M%F-g^ljIUUW|fVRbjU2+q5to{cTrsK_IXa62gvwQM-99e6QEc@@?T&fnim2^~$ z+_6mR^!s*;g^m92>r@f_=IEH*vR>fP)Ws|kc-e<s0sA0I&AkbDd<Q~3R}C5M4VJcu zl~`=0)t~NpTp<yEME@v$kycd^-DYfpV3rw33t4sn0ZL!R8A5yKXT@aDNa<H4?lJvP zkjBkUerKMIevxT_GC8yMz2ce}ScC_upHW^Ixxfz9;N29DhHU#yW&Yjtonq?{`J%=H z{8v=znijp=R1{_%&o45b^52uxJ<~U$#pnn%YXreC>zGh@Qv1DzxDNrz3px3ICy&Kb z#iylyk)<5VTD;VOKdTpxXf=JhgFd9!yv6YrL`y>0(%SX%DAzGCh>+yjq}aC9{5^T8 zrRAd1+-U@f6YkIY(3?wlQhrxEr=8+d)0wy+^{k>}N4dGA#v}1oZ~`Xodd+pY-~w3x zE8*dvKK4M0%uCWwRm?VjxntiVpT9-A1IIr0)Z$2q)uz4!Q1$cWu)w01Nl}^tsb1gh z9l%Rv-2hrJ<p+Y@yG*<w1A5%V?&*bGY(TEs`I$WYxtfqJ8|F5Ca3t_GDqeYZ_Y?o@ zBszdNltRMguRujBir#^RRB%4klWoB#S=R*Epe!I&_e{5#3vPm%JnjdpC<V_LanqQT zPv@bfLQx{unGp%3=M-siVcFx3bNB`>&no*Ww`}hLX3W8AJq8Qcevx8KRf4EM<YmcR zhlwyz>AITxP3>}CY<0L$yrh7~MHzhSYTiM{lAc)%S==wKcis6P6rtdA|3^K3MbI4t z3slW=EW2Y#jv&Xr%_>?R5)1!RBDyfLFiL=J8vebJR-en<U>ga&J*9_!?+k!&?ve_- zCBYiqD79h9N&7k2ClyU^!`wOC-sF5DR$N#6!#U1{hjUAgL}7C!(*kjlEmcjo>D1K} zI)=_O*@lc!4Yhii%51+z(6NZ(oVU=*xS<3iZT!$`hzo;yVF%epM_*p({St9nh+8n% zAnaDt6dn<<j?D)isaNpzg!vnBc?-b?UA^k1gLGyS2pon@?pi<Pwl;}q?EKK!E*6-$ zw7P)y8q<U2HWQmGq+@dpB~Dm|gX?+}B9wP!3h9%cKq;i$=_51|mq?f|Tzy`VkY*1f zHex7)ot$T7x%`THs~EZ<;aOoQb}kt6{OkD-k>1;qAJtQwe{NT=^-aQwwJTQ|_<3fQ zauf&_zmOqO>TCXu(U9gfBpzQP0-zaGy7hlCru2by$w;0f<OgK){9jM8f9(|C0Po4a z>?BZYhoP~Zsc(i1IsT_B^8a*-{?q1wMgdSMo1NmJVdeQKaddYcue3fvQN+H{lQ*TI zNBR4ie~w)kW@yNTH|c5uS<$7XYFYFkVgjvG;?T_C+`9aP^iugO@=jPH;+6lnHopEc zZyZ<<bCElA5jTwc5E7HB9WT$F(TY$Ngk0Z0WB3gCataXq{RKEm5HZi`%w#pI4?&{& z>tFhfZXo<1IT;)o{2a6Qo8i1}59;qAIKTi#8~bF__vGhIZeG+e$LO6`N{$D1=)&s# zf2`9Xe%r2vOy}>rK$Pa6i}G80oq()qxxXY*GX=<+j66e*zN*T(ZSZo;JonIA0?dz< zP|;@8x>n{K?^KJBY`mrhywPA^J1ZV23cmMH>ckN9D1iwiP!@fH78VYc&hVl3(~s;= z{BMwb>mtjoCX5Z~^c7z4o#-^3Y?sT_qf&W<Og|oQuuz7*KZbk#DjtYfCOfx*{O5pV zFF_|d<=@l>-w5n`<`sJpei8m@p78Jh8uYVgk9DYJ##Tr-UDihI>I0#fK@DmHQ6|2O z|6iBAJp`bcwxx@Y<hNkDOd!}{`Jdx!P+ypAw8lcslt>@?gS%K?Z{MwUl_Ftxd*B+W z$i-G%d9Vo_OZMXHh-w6&;EPL8Q8-`4N_gs6^}>*BP0`WfCZ6~TV(_zj&{U~H&2`c) z{bMIt2mp>E=N^!t_!_Mwiitjr8i2q4wStj_c-lF)#}f12ai5_F7$09NRQImh>qA-m z<BGE%6e*6Fo5M{$vFah^{U_Z~JR}P;3R$KffN+o=_Un7>2cgvT6ru4ndg>@!PXDso zB*j`n`XBF$-%Sus?OuACT9z)ccfEn3lYyY3bp%pw$Efhp#r*Ix7Nx2z&Ct*oW#x() zJ9h1>58rFw?{$Z;paO~<7ROar!9^8FW2H3@$HaCs<sgqFA%>T6w!k?s==CrB>mB+# z<)5bEKX3JKi|wzW*E3Fk1A=sf?B#B3%)5|Ib{_W0<&<c_F@Y!le-qSKb5d8w$v(oA zKD_D`Ffm~4Bvu9xJ=0n{yfsK%h4({(8UEpo&%4sM+%lF~mp)5}M6ZUXf3qrxxx~Nw z&BKqQyZ(HR-=yaYhrlu>ALoKVui*IyGU%fOSYf(caTBbdjc6Anv0i5K>>Sz}DJK+p zTM^lOOHoYG9pgmfE3Uf$dgLLA($UMh{nD0j&Vl?d3HkZWlMl1r2ao7HwCuU$LOdMx z&7ND=>kk^9@!lbtchT{mMAV<x`s(Bb`HH^C*og^#fAcZxR-mIE>2CytjE0Jy;(u>* zb$!})1-h8JIJIxR>oNQSfIyxJa94Hh?YZ*}%6po`ea;rFeS9Vzq5P>vMqxs3>YJgY zf=`^c9|#rdJICMeeSNazcY5|m24=WELH~6hdksdv7lTkz2iGJ=`xRC+h=8^01_gtQ z>^~<&dkMh22t+I(eW>8%(fI1v_!WaFYZ5zmF!~8be7u5YEEhBHPvOIfp9p&aW%1Qh zGkzj2(OJLkx8*_)P+`_$VnqA)KTr&DA`m)*L_G9bLgN3##zurqN)9`EILil;3Po!d zzb#B8{aA$}Uov=G$7BXa9X2?D`#~=GA`Hzypv>e<H<49_lEK(*n>jWwA1`5Qvkwo$ zCdM3%$%s<)*&Xb=!KXMi)d)|6zrPU<wf!|ryfE&1+k8S$hI4nH(}3QfI8^EB#$D=Q zy-0bvg(yeFNKout;d;|FWb9{e7!<$O43q<MqPdBFt(tjqu;LWcLc7>Sb`kr`XA@Vq z)L@T|pMHww#$<*Vt$$c^?~-RLsV+$j$b5>VC8Ydn9sd-u>X};cGgZDQw7o03V5-rH zXk{;&`h3K$JrRu#;nBJrm}#W)zyC4yY6Jrbqq)lntS|t_>^Pfm(PZPegQ#PM5R7>{ zDMOc&nhV&u$Sx6^7L$bp$cOET_0#r*f~pZWjxTH}DzHZrG?O#g9UL_99$tTEx<l~; z_ibGkr^qMO_+APrZO_Li7IBloDQy@dK9WT|<3+)@6+n7I-5w;CywLYY;*QRW^M9^} zW!QW4d;)0jVl=RAEHTh=1IjJV_>6v271JZ1`BgJh+xtDHl@p|;8P-hGIPf4Sm)rc5 z3w!i{M6+h&D7gt#^kT&xZev%`uAhvk+-k;8SVn_E+?QyWa!suKJl(6q<BMeZ0?WGc z@=t)zNxt3^n=_<5(hN4HFWE8q)$v!1YI??j9vXN6??N-ZVNa?<*<Bd5D4D^C%c~p5 z@G+@U+Q`HWcqhJJ*EGYP5(`vA(K7IkH}Bzx8HT7L8w~k`Ub5X$6?P3xS`^yZsiuqn z9p+@a@E=?gnH6J4rzuvWhDU3_RR`b>jq<`-9~>mw?Ln-BGukpOn#8_UwxoaKQ|O!& zU&yLj;L)AvGdAd-{;UlOj-QHX6{sWf<3yI8^N%#x!ELcn;VZ~t9re$4{HVj6zn`*3 zdwo{mmG^l;piePSYR_K*&{caWC3WUZ-bR8YtawaZW+5pM)A8}%Y@GgA>i29%XIQLp zYkd<FH$NSsbRCtQghC`}sfTc8F;PtmG5G{l!;qn%!s>N_XX=GPT0D~;lW-yCX`1S` z88&Od26_793e$kYk6#q=EkFSopvp<~uhq#RoeY|*y7D?tfS^d-r=NrH&4C&Q(qhZ= z3VbTpVq9H;&j<E70WR&dZ63x^*=L2~`)Vo%Din&U>bI9g74IA#P-i{9Q4_H&2OhKu z-tlGEuB-F%V=sWS&@(n;_*Ac+y-y)mI2QHB&yepXd`fT0&A(naVhn<XM0MW`mIZKU zvNoZfz(Ui5B>BnK+pxR?0H}zEXB8Y)%>fuy=L%dH-_PGSCp?J8-%UkH6nAwq4?xx0 z?{7Aho{mee3igpVFK}8Zx?1_R=3fH8JV$0OqBQiIRYOv<i8WV=GE)!+fX(`F_Qzhs z-CS2j?5jdRWh59?E~p8dZBDBpl?GifO`no5b#<Y15o@B75adxK!?D}8d{|ui(w<n_ zq2FWnfFFPo=1!Kr0YZ(rZ*cT2tqd;(G7l^8MNd`AlrR2tBOE*CS2=xK;yDV!DY=E) zeF&KHHoWHP1p79tSSuD4ejK0ez_Va>4<`ZFSJfRify!XLeBU)2_Qx6)9wrrVLtDHa zZI|$X)pclT7YZx1tG7&5HW0c!g0#4Y<+1UuK#^6x)G6h{MvJjzOE3m{=}(bqFw@fa znvrUG`~*d;W3xa9SkDUO0K(d2K>s#Dl5Wbb9D08b((rIR9wogYID6DLYMB!*=nrLH zZxsF5_xCR7JW99;=nGV`&NU4#()7c)A8iJv%#&n%Na!~#7_fU(a1#s`TuTmKs(ON| zZrHw~8n^9pcYPw+jJZ!p0UOA@Fu?(WE|_qDRBM3vQ%tFc$l1#`5X-h($zg_JhE#2j zvQkvAAZq3``8-Pa0mz-DdxjFaO3M9KeLJIxY0j1p<uwg+0cSfRYp0dFr82zf85YL) z{Ruz$5}NQZ73Iqx5%>B`li5Ox{K`$nk_E(TKb2AH0;*ivo@L3wUs_xPd-;b^AvBT$ zk{D>1W_`z@B9lnl1`F<=dObK96Zm4+CCruL>+W6hlygpxeo0JYq$6{*1WnEINoD1B zO|Y1J;AYOHs;zv$y7hY-G4z$0F)|&>$Eq>p^8%w8KP;$d9z+baZeTq1$5y%;w}de^ z!dgPW4Eg<!s1*BQ>D=<!V+zEX`uUAAp8)g2lcQ5BD|Z&M67Qn2hE^HlW_RGkXRdta ziIM7e81ebiN0=a7tM#=zh4~*4KVjnuvTGXXJB6;Grl;ToUV((@remS&wJfQ^+82cG zpn7o+)#HOBXi%2WL{W0%p9~t{aL<lq2)3rzRa(v^Xxo>~FsJ+t$KNCN|4jHw_;Ns& z#(tSC{t4=!?HxQ~1V>6Zv&07`1~gO&`ARBeB<CvotFs9zsnQwW$XGvvp{|N{-`F%o zybr0c10kKfj(I8{Zj=?Vu<<^Y9_Gc8%%ps&Uie9<_w5&2f{G-)!p+U)2<;TDf><MD zW8ww&5YWQ%(BNe5q+zw;VH9{x{f?M&>=3Xq)w7{2w9bqtO*g^ekV;J3Fv=2CA19%x z&cmHn<Z-O3iK}#f+d#|aP*nQKCv_Mv*7)9yTYZU}L(I5fKPpRk_***G-QkItC>iM` z^YB#K5bO%=#Li|yUr*58LW{fWr``OKpq4Y)F;G0VSm`p2i=&GN%J97@cYcCNVm_CH zEQ4~^L2$B{$X8KGkmolG14muS{-ThK8ff$kOA~W3#hj#$hMMRfgA05zV#^IKd^6W3 zqX<C#|6_6%|4xnsWODX>Uo+p=%7(;Xk`r@29b~zv@cUagCEzub@%~MlG1{gd{2o8f z=mLfH_YRH$XjBMim-bb^P!_5Nqdg9_R+!}Ku6NG196P>&4R(3KF&UU!SZQg*bdq%A z-(3$Pgr+$>X{6sK1uX^a2Ue;xmgU$7jo5o0JMot|u9&LN3@VnCt2tou)M*8NC5_Hn zi80@$kmR(hpnt1)uk|~p(L*6>YFm-c<ag9bmYjH_x4C(O=%#OCb2cgb$P}+t-jtUM zQ=1M7-f?b2T@lbHvCd;E#3+TeMv2SQQMIVInIU3vM6TrVx}n{;B{0FF%{f36rf(pM zT9Sb%A^GEajWJ!Fa)vJMiA7c$oZizkfuFQ-@esXNktEsEcM{}~aJ>9AKj7SKSoQ>( zw*hRfN_Y~rEa&;(0am#-S@~yxOLhNi^-qx1A<cU9=yL@=$)kcGVd=|ljp3I@)wMfa z!nc4UNRIQf<{iLaK>kFbgU|b2N@7&KHNCU$a|s=T^j8pE50_Yg)yI?s)z8whmnt3< z@DnUT)Fa=G@3^Wm{ZVh?_>9KV?kRgJ!pP+uk$yUmm)!PmyJsR_FjDt2J9kgH3=44{ zywuP<DXdj7i~qyIdjpst0e$x_r#>=pRB}%Hf#UEJH>k?0tyMU!cG;NAEzl#hX+m=0 zQlDe8Df&9v7K+(DG3Hwaj$#`-;rzqSEu;><lpCi}U_j$v23IwMv#8kn^IrzxFN;=I zSJuv+Bc{q)ha2kIM&vvAyYah=AUhdef7>nKmEq`)sQ1)?1XS3oPA_jZP}IRmRWrTa z6Wn55PPVJlde5GzSUYQ@1?0jiVEg;Ee{Wep`dfOuK4u^LqAUq1=<_Q%^FP=Ck4e=E z^Dl_$3H#y)kHnF{CfPO0br$aFNLW;o|1OILNOT9Uf=+F8JHVw}VjS>6&*;rA8EP8Y zzg@(?-csX`hNZN>#GRgc`{Z#2AWi(|yIFhKK!t*zYb?Z661OmR={~zl9@0=N@cjaJ z{l9wPWSL*$-l@$|FwxTDN*-1`K4yxN)DCEts{ec(U%vHjEo}9^cb5LtqtdLJHYmDh zqivOj-923?1Jh8p#MXK&^*q3iINtE*;p#H&9ey>(6DU|@swGzaMw$V~^U=!j({qcp zfFgYW5wK;yWqA)r#BM|K)r;_Tc&>Q5;fCuj5#g`woURceNix;I95-X<YAmO1&l!Xl zn3X7uRMM{+>EUs^=i&%y4(M!qAYC>*+e-8C|Jj7bL2I!)H?1rvPd-p3b{GSYbU!pz z7aR0IQ9zaDk{_)*!N3?d#pk@6IBdSYj^ZIuwSARd5Tg}Ee>I5E@bp9lC`a=(gJBE* z962Jl=VujS0L@4}D477lcBT-42DqG;0t1z1PQdw;uN$t%a%QRi^kk)Js!mcBtd0tN zZnNkv^Uu`j@Om1VwhZHCqvvBcTbZk%aq($>-hVz&JRLkO^|9$S{sk+cM)Z7pt7fC~ zQ0w$C<4QA@cq(&SCi?C}lC^e+*Ky6<@ic~Gz2AUmLBkp|qrYH`TzJLZ)s1O*j-!`1 z+<3jy#(S+~_mk2h5KdG&^uSzdh2xUBVr)?9{;a{ynAz6Br5j2(ZGw-4JhIgtiGfhe z`u+IPxHR4m?1g2ELP3t_ipzs(&5jAn7jm~gBN}wKafiqIv}hYF&m0FQE2phu(2g40 zZm}}GCjmi04}xps-c}HDAF5jzQmFJN^^)A2h?RN$CU?Y-O;<Gl95s=t4UK=MFc;%z z^7i8B&%Ni~5A=}^A!t5iJM#Ht7BA8gdq)@;^YC3N_-Amx_x(}IORe5O>?rF@^|K1E z-(*UxQZ5Lre#(SgN&6!V#U?79(Pu=wJoB)#pMjme&YRWeF`1p6%KG_cx>&Me_!f)K zY%MU;r_J8|y0+x}(uK{-ZWjj=+$F32G<1AurM0J`B2#MK>Unuzg*Yo^s@X}~S7&)K z8;8VFo$v5ox7E&A-uJ_W8Mte7$$j@GWr&bVP|0jzDgx=AG3$LUGaO)E>}VbBJGNm0 zkiBA8(^(dXx6xmh;zH8V#_6e@qP2MOXL{Zq2)Qc~sh55{zo<L6nf|bQuWGt<C5&bT zG1is3THrUI#_-E^ay9p5+ItYOs$8AkuMzoRdE7%z1Fz~W&AAd!Y>S=tppkrKoRjHP zn@1PRPna2^kdCz<ihHDlr*K)bH*r9)+o%BM`rFyl<)+#~_jM%vbPrWp&!p#G<bV56 z6E+Q^Q?9*EOjZ7̽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 R8x$V4NQ%jcmI~{8{~vwsb5{TW literal 0 HcmV?d00001 diff --git a/third_party/lua/luadebug_tutorial.lua b/third_party/lua/luadebug_tutorial.lua new file mode 100644 index 0000000000..fc97106286 --- /dev/null +++ b/third_party/lua/luadebug_tutorial.lua @@ -0,0 +1,279 @@ +-- Run this file and follow along with the prompts. +-- You'll want to keep this file open to follow along. + +local dbg = require("luadebug") + +print[[ + Welcome to the interactive luadebug.lua tutorial. + You'll want to open tutorial.lua in an editor to follow along. + + First of all, just drop luadebug.lua in your project. It's one file. + Load it the usual way using require. Ex: + local dbg = require("luadebug") + + luadebug.lua doesn't support traditional breakpoints. + So to get into the debugger, call it like a function. + Real breakpoints would be better, but this + keeps luadebug.lua simple and very fast. + At the end you'll find out how to open it automatically on a crash. + + Notice how luadebug.lua prints out your current file and line + as well as which function you are in. + Keep a close watch on this as you follow along. + It should be stopped a line after the dbg() call. + (Line 86 unless I forgot to double update it) + + Sometimes functions don't have global names. + It might print the name of a method, local variable + that held the function, or file:line where it starts. + + Type 'w' to show 5 lines of surrounding code directly in + the debugger. (w = Where) Type 'w 3' to show 3 lines, etc. + Alternatively, set dbg.auto_where to a number + to run it automatically every time the program advances. + + Once you've tried the where command, type 's' to step to + the next line. (s = Step to the next executable line) +]] + +-- Multi-line strings are executable statements apparently +-- need to put this in an local to make the tutorial flow nicely. +local str1 = [[ + The 's' command steps to the next executable line. + This may step you into a function call. + + In this case, then next line was a C function that printed this message. + You can't step into C functions, so it just steps over them. + + If you hit <return>, the debugger will rerun your last command. + Hit <return> 5 times to step into and through func1(). + Watch the line numbers. +]] + +local str2 = [[ + Stop! + You've now stepped through func1() + Notice how entering and exiting a function takes a step. + + Now try the 'n' command. + (n = step to the Next line in the source code) +]] + +local function func1() + print(" Stepping through func1()...") + print(" Almost there...") +end + +local function func2() + print(" You used the 'n' command.") + print(" So it's skipping over the lines in func2().") + + local function f() + print(" ... and anything it might call.") + end + + f() + + print() + print[[ + The 'n' command steps to the next line in the source file. + Unlike the 's' command, it steps over function calls, and not into them. + + Now try the 'c' command to continue on to the next breakpoint. + (c = Continue execution) +]] +end + +dbg() +print(str1) + +func1() +print(str2) + +func2() + +local function func3() + print[[ + You are now sitting at a breakpoint inside of func3(). + Let's say you got here by stepping into the function. + After poking around for a bit, you just want to step until the + function returns, but don't want to + run the next command over and over. + + For this you would use the 'f' command. Try it now. + (f = Finish current function) +]] + + dbg() + + print[[ + Now you are inside func4(), right after where it called func3(). + func4() has some arguments, local variables and upvalues. + Let's assume you want to see them. + + Try the 'l' command to list all the locally available variables. + (l = List local variables) + + Type 'c' to continue on to the next section. +]] +end + +local my_upvalue1 = "Wee an upvalue" +local my_upvalue2 = "Awww, can't see this one" +globalvar = "Weeee a global" + +function func4(a, b, ...) + local c = "sea" + local varargs_copy = {...} + + -- Functions only get upvalues if you reference them. + local d = my_upvalue1.." ... with stuff appended to it" + + func3() + + print[[ + Some things to notice about the local variables list. + '...' + This is the list of varargs passed to the function. + (This only works with Lua 5.2+ or LuaJIT 2.0+) + Note: varargs are not an array, but luadebug.lua stores them that way. + 'my_upvalue1' + This is a local variable defined outside of, but + referenced by the function. Upvalues show up + *only* when you reference them within your + function. 'my_upvalue2' isn't in the list + because func4() doesn't reference it. + + Listing the locals is nice, but sometimes there are too many to see at once. + Often times it's useful to print just a single variable, + evaluate an expression, or call a function to see what it returns. + For that you use the 'p' command. + (p = Print the result of an expression) + + Try these commands: + p my_upvalue1 + p 1 + 1 + p print("foo") + p math.cos(0) + + You can also interact with varargs. (Except on Lua 5.1) + For example: + p ... + p select(2, ...) + p {...} + + Type 'c' to continue to the next section. +]] + dbg() + + print[[ + One thing you can't do with the print command is set variables. + Assignments are statements, and need to be run with the + 'e' command. (e = Evaluate a statement) + + Try these commands: + e my_upvalue1 = "foobar" + e print(my_upvalue1) + + Type 'c' to continue to the next section. +]] + dbg() +end + +func4(1, "two", "vararg1", "vararg2", "vararg3") + +local function func5() + local my_var = "func5()" + print[[ + You are now in func5() which was called from func6(). + func6() was called from func7(). + + Try the 't' command to print out a backtrace and see for yourself. + (t = backTrace) + + Type 'c' to continue to the next section +]] + dbg() + + print[[ + Notice that func5(), func6() and func7() all have a + 'my_var' local. You can print the func5()'s my_var easily enough. + What if you wanted to see what local variables were in func6() + or func7() to see how you got where you were? + + For that you use the 'u' and 'd' commands. + (u = Move up a stack frame) + (d = Move down a stack frame) + + Try the 'u' and 'd' commands a few times. + Print out the value of my_var using the 'p' command each time. + + Type 'c' to continue. +]] + dbg() +end + +local function func6() + local my_var = "func6()" + func5() +end + +local function func7() + local my_var = "func7()" + func6() +end + +func7() + +print[[ + That leaves only one more command. + Wouldn't it be nice if there was a way to remember + all these one letter debugger commands? + + Type 'h' to show the command list. + (h = Help) + + Type 'c' to continue. +]] +dbg() + +print[[ + The following loop uses an assert-style breakpoint. + It will only engage when the conditional fails. (when i == 5) + + Type 'c' to continue. +]] + +for i=0, 10 do + print("i = "..tostring(i)) + + dbg(i ~= 5) +end + +print[[ + Last but not least, is the dbg.call() function. + It works sort of like Lua's xpcall() function, + but starts the debugger when an uncaught error occurs. + You can pretty much use it as a drop in replacement. + + For example: + dbg.call(function() + -- Potentially buggy code goes here. + end) + + Wrap it around your program's main loop or main entry point. + Then when your program crashes, you won't need to go back + and add breakpoints. + + That pretty much wraps ups the basics. + Hopefully you find luadebug.lua to be simple but useful. +]] + +dbg.call(function() + local foo = "foo" + + -- Try adding a string and integer + local bar = foo + 12 + + -- Program never makes it to here... +end) -- GitLab