From dacfb36b5714cd34791ab85d72629886075ff492 Mon Sep 17 00:00:00 2001 From: Diego Augusto Date: Sun, 27 Nov 2022 01:38:00 +0000 Subject: [PATCH] Add input device support --- .gitlab-ci.yml | 4 +- meson.build | 3 + scripts/keymap-render.py | 44 +- scripts/plymouth-populate-initrd.in | 56 +- src/libply-splash-core/meson.build | 5 + src/libply-splash-core/ply-device-manager.c | 225 +++++++- src/libply-splash-core/ply-input-device.c | 509 ++++++++++++++++++ src/libply-splash-core/ply-input-device.h | 92 ++++ src/libply-splash-core/ply-renderer-plugin.h | 6 + src/libply-splash-core/ply-renderer.c | 29 +- src/libply-splash-core/ply-renderer.h | 7 + src/libply-splash-core/ply-terminal.c | 46 +- src/libply-splash-core/ply-terminal.h | 6 +- src/libply-splash-graphics/ply-keymap-icon.c | 12 +- .../ply-keymap-metadata.h | 377 ++++++++----- src/libply/ply-buffer.c | 5 +- src/libply/ply-list.h | 3 + src/libply/ply-trigger.c | 90 +++- src/libply/ply-trigger.h | 17 + src/plugins/renderers/drm/plugin.c | 197 ++++++- src/plugins/renderers/frame-buffer/plugin.c | 192 ++++++- themes/spinfinity/keymap-render.png | Bin 26108 -> 71852 bytes themes/spinner/keymap-render.png | Bin 26362 -> 71852 bytes 23 files changed, 1690 insertions(+), 235 deletions(-) create mode 100644 src/libply-splash-core/ply-input-device.c create mode 100644 src/libply-splash-core/ply-input-device.h diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 07a59076..30fbb3b4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,7 +17,7 @@ fedora-x86_64: stage: build image: 'registry.fedoraproject.org/fedora:37' before_script: - - dnf install -y gcc gtk3-devel git libpng-devel gettext-devel libxslt docbook-style-xsl cairo-devel systemd-devel systemd-udev kernel-headers libdrm-devel pango-devel make ShellCheck uncrustify patchutils meson binutils-gold + - dnf install -y gcc gtk3-devel git libpng-devel gettext-devel libxslt docbook-style-xsl cairo-devel systemd-devel systemd-udev kernel-headers libdrm-devel pango-devel make ShellCheck uncrustify patchutils meson binutils-gold xkeyboard-config-devel libevdev-devel - alternatives --set ld /usr/bin/ld.gold <<: *check-format <<: *meson-build @@ -29,7 +29,7 @@ debian-unstable-x86_64: image: debian:unstable before_script: - apt-get update -qq - - apt-get install -y -qq --no-install-recommends bc build-essential docbook-xsl gcc gettext git libdrm-dev libgtk-3-dev libpango1.0-dev libpng-dev libudev-dev make pkg-config libsystemd-dev udev xsltproc shellcheck uncrustify patchutils meson + - apt-get install -y -qq --no-install-recommends bc build-essential docbook-xsl gcc gettext git libdrm-dev libgtk-3-dev libpango1.0-dev libpng-dev libudev-dev make pkg-config libsystemd-dev udev xsltproc shellcheck uncrustify patchutils meson xkb-data libevdev-dev <<: *meson-build only: - merge_requests diff --git a/meson.build b/meson.build index f5cb0869..bd55c1c8 100644 --- a/meson.build +++ b/meson.build @@ -43,6 +43,9 @@ libpangocairo_dep = dependency('pangocairo', required: get_option('pango')) libfreetype_dep = dependency('freetype2', required: get_option('freetype')) gtk3_dep = dependency('gtk+-3.0', version: '>= 3.14.0', required: get_option('gtk')) libdrm_dep = dependency('libdrm', required: get_option('drm')) +libevdev_dep = dependency('libevdev') +xkbcommon_dep = dependency('xkbcommon') +xkeyboard_config_dep = dependency('xkeyboard-config') if get_option('systemd-integration') systemd_dep = dependency('systemd') diff --git a/scripts/keymap-render.py b/scripts/keymap-render.py index 53b67dd3..2dc86575 100755 --- a/scripts/keymap-render.py +++ b/scripts/keymap-render.py @@ -3,12 +3,18 @@ import cairo import subprocess import math +import lxml +from lxml import etree FONT_SIZE = 30 MARGIN = int(FONT_SIZE / 3) +#python3-lxml utility is required + def get_keymaps(): + xml = etree.XML(bytes(open('/usr/share/X11/xkb/rules/evdev.xml', 'r').read(), encoding="utf-8")) + keymaps_x11 = xml.xpath('//layout/configItem/description/text()') keymaps = subprocess.check_output(["localectl", "list-keymaps"]).decode("utf-8").strip().split() # Note when changing this you MUST keep ply_keymap_normalize_keymap() @@ -31,12 +37,17 @@ def get_keymaps(): return parts[0] keymaps = list(map(normalize_keymaps ,keymaps)) - #Remove duplicates - ret = [] + keymaps_dedupe = [] for k in keymaps: - if k not in ret: - ret.append(k) + if k not in keymaps_dedupe: + keymaps_dedupe.append(k) + + ret = [] + for k in keymaps_dedupe: + ret.append((k, "PLY_LAYOUT_TERMINAL")) + for k in keymaps_x11: + ret.append((k, "PLY_LAYOUT_XKB")) return ret @@ -49,7 +60,8 @@ ct.set_font_size(FONT_SIZE) max_height = 0.0 total_width = 0.0 for i in get_keymaps(): - extents = ct.text_extents(i) + text=i[0] + extents = ct.text_extents(text) h = extents.height if h > max_height: max_height = h @@ -73,9 +85,11 @@ ct.move_to(MARGIN, MARGIN + max_height - descent) current_x, current_y = (MARGIN, MARGIN + max_height - descent) metadata = [] for km in get_keymaps(): - extents = ct.text_extents(km) - ct.show_text(km) - metadata.append((km, current_x, extents.width + MARGIN * 2)) + km_text=km[0] + km_type=km[1] + extents = ct.text_extents(km_text) + ct.show_text(km_text) + metadata.append((km_text, current_x, extents.width + MARGIN * 2, km_type)) current_x += extents.width + (MARGIN * 2) ct.move_to(current_x, current_y) @@ -84,16 +98,22 @@ sf.write_to_png("keymap-render.png") print("/* This file is autogenerated by running:") print(" * scripts/keymap-render.py > src/libply-splash-graphics/ply-keymap-metadata.h") print(" */") -print("struct ply_keymap_metadata {") +print("typedef struct {") print(" const char *name;") print(" int offset;") print(" int width;") -print("};") +print(" int type;") +print("} ply_keymap_metadata_t;") print("") -print("static struct ply_keymap_metadata ply_keymap_metadata[] = {") +print("typedef enum {") +print(" PLY_LAYOUT_TERMINAL,") +print(" PLY_LAYOUT_XKB,") +print("} ply_layout_types_t;") +print("") +print("static ply_keymap_metadata_t ply_keymap_metadata[] = {") for i in metadata: - print((" { \"%s\", %d, %d }," % (i[0],i[1],i[2]))) + print((" { \"%s\", %d, %d, %s}," % (i[0],i[1],i[2],i[3]))) print(" { NULL, } /* End of array marker */ ") print("};") diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in index a130616f..6ee6b353 100755 --- a/scripts/plymouth-populate-initrd.in +++ b/scripts/plymouth-populate-initrd.in @@ -33,6 +33,10 @@ ddebug() { [ "$verbose" = "true" ] && echo "$@" } +dfatal() { + echo "$@" > /proc/self/fd/2 +} + # normalize_path # Prints the normalized path, where it removes any duplicated # and trailing slashes. @@ -420,12 +424,13 @@ function usage() { rc=1 fi - echo "usage: plymouth [ --verbose | -v ] { --targetdir | -t } " > $output + echo "usage: plymouth [ --verbose | -v ] { --targetdir | -t } { --x11-directory | -x } " > $output exit $rc } verbose=false INITRDDIR="" +X11_DIRECTORY="/usr/share/X11" while [ $# -gt 0 ]; do case $1 in --verbose|-v) @@ -438,6 +443,10 @@ while [ $# -gt 0 ]; do --help|-h) usage normal ;; + --x11-directory|-x) + shift + X11_DIRECTORY="$1" + ;; *) usage error break @@ -465,6 +474,51 @@ inst @RELEASE_FILE@ $INITRDDIR inst ${PLYMOUTH_POLICYDIR}/plymouthd.defaults $INITRDDIR inst ${PLYMOUTH_CONFDIR}/plymouthd.conf $INITRDDIR +# Install xkb info +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/" +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/compat/" + +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/keycodes/" +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/rules/" +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/symbols/" +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/types/" +mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/locale/" +inst ${X11_DIRECTORY}/xkb/compat/accessx $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/basic $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/caps $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/complete $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/iso9995 $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/ledcaps $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/lednum $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/ledscroll $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/level5 $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/misc $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/mousekeys $INITRDDIR +inst ${X11_DIRECTORY}/xkb/compat/xfree86 $INITRDDIR +inst ${X11_DIRECTORY}/xkb/keycodes/aliases $INITRDDIR +inst ${X11_DIRECTORY}/xkb/keycodes/evdev $INITRDDIR +inst ${X11_DIRECTORY}/xkb/rules/evdev $INITRDDIR +find ${X11_DIRECTORY}/xkb/symbols -maxdepth 1 ! -type d | while read file; do + inst $file $INITRDDIR +done +inst ${X11_DIRECTORY}/xkb/types/basic $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/complete $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/extra $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/iso9995 $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/level5 $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/mousekeys $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/numpad $INITRDDIR +inst ${X11_DIRECTORY}/xkb/types/pc $INITRDDIR + +# In the off chance the user uses their compose key when +# typing their password, install compose sequences +inst ${X11_DIRECTORY}/locale/compose.dir $INITRDDIR +grep UTF-8/Compose: ${X11_DIRECTORY}/locale/compose.dir | awk -F: '{ print $1 }' | sort -u | xargs dirname | while read DIR; do + find ${X11_DIRECTORY}/locale/$DIR -maxdepth 1 ! -type d | while read file; do + inst $file $INITRDDIR + done +done + if [ -z "$PLYMOUTH_THEME_NAME" ]; then echo "No default plymouth plugin is set" >&2 exit 1 diff --git a/src/libply-splash-core/meson.build b/src/libply-splash-core/meson.build index 8914e8ec..69636b13 100644 --- a/src/libply-splash-core/meson.build +++ b/src/libply-splash-core/meson.build @@ -1,6 +1,7 @@ libply_splash_core_sources = files( 'ply-boot-splash.c', 'ply-device-manager.c', + 'ply-input-device.c', 'ply-keyboard.c', 'ply-pixel-buffer.c', 'ply-pixel-display.c', @@ -17,6 +18,9 @@ libply_splash_core_public_deps = [ libply_splash_core_private_deps = [ lm_dep, + libevdev_dep, + xkbcommon_dep, + xkeyboard_config_dep, ] if libudev_dep.found() @@ -49,6 +53,7 @@ libply_splash_core_headers = files( 'ply-boot-splash-plugin.h', 'ply-boot-splash.h', 'ply-device-manager.h', + 'ply-input-device.h', 'ply-keyboard.h', 'ply-pixel-buffer.h', 'ply-pixel-display.h', diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index f87466ff..12dce530 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -19,6 +19,7 @@ */ #include "config.h" #include "ply-device-manager.h" +#include "ply-renderer.h" #include #include @@ -34,14 +35,19 @@ #include #endif +#include + #include "ply-logger.h" #include "ply-event-loop.h" #include "ply-hashtable.h" #include "ply-list.h" +#include "ply-key-file.h" #include "ply-utils.h" +#include "ply-input-device.h" #define SUBSYSTEM_DRM "drm" #define SUBSYSTEM_FRAME_BUFFER "graphics" +#define SUBSYSTEM_INPUT "input" #ifdef HAVE_UDEV static void create_devices_from_udev (ply_device_manager_t *manager); @@ -60,7 +66,9 @@ struct _ply_device_manager ply_event_loop_t *loop; ply_hashtable_t *terminals; ply_hashtable_t *renderers; + ply_hashtable_t *input_devices; ply_terminal_t *local_console_terminal; + const char *keymap; ply_list_t *keyboards; ply_list_t *text_displays; ply_list_t *pixel_displays; @@ -68,6 +76,9 @@ struct _ply_device_manager struct udev_monitor *udev_monitor; ply_fd_watch_t *fd_watch; + struct xkb_context *xkb_context; + struct xkb_keymap *xkb_keymap; + ply_keyboard_added_handler_t keyboard_added_handler; ply_keyboard_removed_handler_t keyboard_removed_handler; ply_pixel_display_added_handler_t pixel_display_added_handler; @@ -262,6 +273,73 @@ fb_device_has_drm_device (ply_device_manager_t *manager, return has_drm_device; } +static void +on_each_renderer_add_input_device (const char *key, + ply_renderer_t *renderer, + ply_input_device_t *input_device) +{ + ply_trace ("Adding input device '%s' to renderer for output device '%s'", + ply_input_device_get_name (input_device), + ply_renderer_get_device_name (renderer)); + + ply_renderer_add_input_device (renderer, input_device); +} + +static void +add_input_device_to_renderers (ply_device_manager_t *manager, + ply_input_device_t *input_device) +{ + const char *device_path = ply_input_device_get_path (input_device); + if (ply_hashtable_lookup (manager->input_devices, (void *) device_path) != NULL) { + ply_trace ("Input device '%s' already added, skipping...", ply_input_device_get_name (input_device)); + ply_input_device_free (input_device); + return; + } + ply_hashtable_insert (manager->input_devices, (void *) device_path, input_device); + ply_hashtable_foreach (manager->renderers, + (ply_hashtable_foreach_func_t *) + on_each_renderer_add_input_device, + input_device); +} + +static void +on_each_input_device_add_to_renderer (const char *key, + ply_input_device_t *input_device, + ply_renderer_t *renderer) +{ + ply_trace ("Adding input device '%s' to renderer for output device '%s'", + ply_input_device_get_name (input_device), + ply_renderer_get_device_name (renderer)); + + ply_renderer_add_input_device (renderer, input_device); +} + +static void +add_input_devices_to_renderer (ply_device_manager_t *manager, + ply_renderer_t *renderer) +{ + ply_hashtable_foreach (manager->input_devices, + (ply_hashtable_foreach_func_t *) + on_each_input_device_add_to_renderer, + renderer); +} +static void +on_each_input_device_remove_from_renderer (const char *key, + ply_renderer_t *renderer, + ply_input_device_t *input_device) +{ + ply_renderer_remove_input_device (renderer, input_device); +} + +static void +remove_input_device_from_renderers (ply_device_manager_t *manager, + ply_input_device_t *input_device) +{ + const char *device_path = ply_input_device_get_path (input_device); + ply_hashtable_remove (manager->input_devices, (void *) device_path); + ply_hashtable_foreach (manager->renderers, (ply_hashtable_foreach_func_t *) on_each_input_device_remove_from_renderer, input_device); +} + static bool verify_drm_device (struct udev_device *device) { @@ -300,7 +378,7 @@ static bool create_devices_for_udev_device (ply_device_manager_t *manager, struct udev_device *device) { - const char *device_path; + const char *device_path, *device_sysname; bool created = false; bool force_fb = false; @@ -308,6 +386,7 @@ create_devices_for_udev_device (ply_device_manager_t *manager, force_fb = true; device_path = udev_device_get_devnode (device); + device_sysname = udev_device_get_sysname (device); if (device_path != NULL) { const char *subsystem; @@ -331,6 +410,21 @@ create_devices_for_udev_device (ply_device_manager_t *manager, renderer_type = PLY_RENDERER_TYPE_FRAME_BUFFER; else ply_trace ("ignoring, since there's a DRM device associated with it"); + } else if (strcmp (subsystem, SUBSYSTEM_INPUT) == 0) { + if (ply_string_has_prefix (device_sysname, "event")) { + ply_trace ("found input device %s", device_path); + ply_input_device_t *input_device = ply_input_device_open (manager->xkb_context, manager->xkb_keymap, device_path); + if (input_device != NULL) { + ply_input_device_set_disconnect_handler (input_device, (ply_input_device_disconnect_handler_t) remove_input_device_from_renderers, manager); + if (ply_input_device_is_keyboard (input_device)) { + add_input_device_to_renderers (manager, input_device); + } else { + ply_input_device_free (input_device); + } + } + } else { + ply_trace ("Ignoring, since this is a non-evdev device"); + } } if (renderer_type != PLY_RENDERER_TYPE_NONE) { @@ -375,7 +469,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager, udev_list_entry_foreach (entry, udev_enumerate_get_list_entry (matches)){ struct udev_device *device = NULL; - const char *path; + const char *path, *node; path = udev_list_entry_get_name (entry); @@ -393,18 +487,10 @@ create_devices_for_subsystem (ply_device_manager_t *manager, if (udev_device_get_is_initialized (device)) { ply_trace ("device is initialized"); - /* We only care about devices assigned to a (any) devices. Floating - * devices should be ignored. - */ - if (udev_device_has_tag (device, "seat")) { - const char *node; - node = udev_device_get_devnode (device); - if (node != NULL) { - ply_trace ("found node %s", node); - found_device = create_devices_for_udev_device (manager, device); - } - } else { - ply_trace ("device doesn't have a devices tag"); + node = udev_device_get_devnode (device); + if (node != NULL) { + ply_trace ("found node %s", node); + found_device = create_devices_for_udev_device (manager, device); } } else { ply_trace ("it's not initialized"); @@ -456,7 +542,7 @@ verify_add_or_change (ply_device_manager_t *manager, { const char *subsystem; - if (strcmp (action, "add") && strcmp (action, "change")) + if (strcmp (action, "add") != 0 && strcmp (action, "change") != 0) return false; if (manager->local_console_managed && manager->local_console_is_text) { @@ -468,7 +554,7 @@ verify_add_or_change (ply_device_manager_t *manager, return true; subsystem = udev_device_get_subsystem (device); - if (strcmp (subsystem, SUBSYSTEM_DRM)) { + if (strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0) { ply_trace ("ignoring since we only handle subsystem %s devices after timeout", subsystem); return false; } @@ -578,14 +664,15 @@ watch_for_udev_events (ply_device_manager_t *manager) if (manager->fd_watch != NULL) return; - ply_trace ("watching for udev graphics device add and remove events"); + ply_trace ("watching for udev graphics device and input device add and remove events"); if (manager->udev_monitor == NULL) { manager->udev_monitor = udev_monitor_new_from_netlink (manager->udev_context, "udev"); udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_DRM, NULL); udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_FRAME_BUFFER, NULL); - udev_monitor_filter_add_match_tag (manager->udev_monitor, "seat"); + if (!ply_kernel_command_line_has_argument ("plymouth.use-legacy-input")) + udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_INPUT, NULL); udev_monitor_enable_receiving (manager->udev_monitor); } @@ -629,6 +716,21 @@ free_terminals (ply_device_manager_t *manager) manager); } +static void +free_input_device (char *device, + ply_input_device_t *input_device, + ply_device_manager_t *manager) +{ + ply_hashtable_remove (manager->input_devices, device); + ply_input_device_free (input_device); +} + +static void +free_input_devices (ply_device_manager_t *manager) +{ + ply_hashtable_foreach (manager->input_devices, (ply_hashtable_foreach_func_t *) free_input_device, manager); +} + static ply_terminal_t * get_terminal (ply_device_manager_t *manager, const char *device_name) @@ -655,7 +757,7 @@ get_terminal (ply_device_manager_t *manager, terminal = ply_hashtable_lookup (manager->terminals, full_name); if (terminal == NULL) { - terminal = ply_terminal_new (full_name); + terminal = ply_terminal_new (full_name, manager->keymap); ply_hashtable_insert (manager->terminals, (void *) ply_terminal_get_name (terminal), @@ -684,6 +786,74 @@ free_renderers (ply_device_manager_t *manager) manager); } +static char * +strip_quotes (char *str) +{ + char *old_str; + if (str && str[0] == '"' && str[strlen (str) - 1] == '"') { + old_str = str; + str = strndup (str + 1, strlen (str) - 2); + free (old_str); + } + return str; +} + +static void +parse_vconsole_conf (ply_device_manager_t *manager) +{ + ply_key_file_t *vconsole_conf; + char *keymap = NULL, *xkb_layout = NULL, *xkb_model = NULL, *xkb_variant = NULL, *xkb_options = NULL; + + keymap = ply_kernel_command_line_get_key_value ("rd.vconsole.keymap="); + + if (!keymap) + keymap = ply_kernel_command_line_get_key_value ("vconsole.keymap="); + + vconsole_conf = ply_key_file_new ("/etc/vconsole.conf"); + if (ply_key_file_load_groupless_file (vconsole_conf)) { + /* The values in vconsole.conf might be quoted, strip these */ + if (!keymap) { + keymap = ply_key_file_get_value (vconsole_conf, NULL, "KEYMAP"); + keymap = strip_quotes (keymap); + } + xkb_layout = ply_key_file_get_value (vconsole_conf, NULL, "XKB_LAYOUT"); + xkb_layout = strip_quotes (xkb_layout); + + xkb_model = ply_key_file_get_value (vconsole_conf, NULL, "XKB_MODEL"); + xkb_model = strip_quotes (xkb_model); + + xkb_variant = ply_key_file_get_value (vconsole_conf, NULL, "XKB_VARIANT"); + xkb_variant = strip_quotes (xkb_variant); + + xkb_options = ply_key_file_get_value (vconsole_conf, NULL, "XKB_OPTIONS"); + xkb_options = strip_quotes (xkb_options); + } + ply_key_file_free (vconsole_conf); + + ply_trace ("XKB_KEYMAP: %s KEYMAP: %s", xkb_layout, keymap); + + struct xkb_rule_names xkb_keymap = { + .layout = xkb_layout, + .model = xkb_model, + .variant = xkb_variant, + .options = xkb_options, + }; + manager->xkb_keymap = xkb_keymap_new_from_names (manager->xkb_context, &xkb_keymap, XKB_MAP_COMPILE_NO_FLAGS); + + if (manager->xkb_keymap == NULL) { + ply_trace ("Failed to set xkb keymap of LAYOUT: %s MODEL: %s VARIANT: %s OPTIONS: %s", xkb_layout, xkb_model, xkb_variant, xkb_options); + + manager->xkb_keymap = xkb_keymap_new_from_names (manager->xkb_context, NULL, XKB_MAP_COMPILE_NO_FLAGS); + assert (manager->xkb_keymap != NULL); + } + + free (xkb_layout); + free (xkb_model); + free (xkb_variant); + free (xkb_options); + manager->keymap = keymap; +} + ply_device_manager_t * ply_device_manager_new (const char *default_tty, ply_device_manager_flags_t flags) @@ -692,9 +862,13 @@ ply_device_manager_new (const char *default_tty, manager = calloc (1, sizeof(ply_device_manager_t)); manager->loop = NULL; + manager->xkb_context = xkb_context_new (XKB_CONTEXT_NO_FLAGS); + parse_vconsole_conf (manager); + manager->terminals = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare); manager->renderers = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare); - manager->local_console_terminal = ply_terminal_new (default_tty); + manager->local_console_terminal = ply_terminal_new (default_tty, manager->keymap); + manager->input_devices = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare); manager->keyboards = ply_list_new (); manager->text_displays = ply_list_new (); manager->pixel_displays = ply_list_new (); @@ -727,10 +901,17 @@ ply_device_manager_free (ply_device_manager_t *manager) free_terminals (manager); ply_hashtable_free (manager->terminals); + free ((void *) manager->keymap); free_renderers (manager); ply_hashtable_free (manager->renderers); + free_input_devices (manager); + ply_hashtable_free (manager->input_devices); + + if (manager->xkb_context) + xkb_context_unref (manager->xkb_context); + #ifdef HAVE_UDEV ply_event_loop_stop_watching_for_timeout (manager->loop, (ply_event_loop_timeout_handler_t) @@ -918,6 +1099,8 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager, renderer = NULL; return true; } + + add_input_devices_to_renderer (manager, renderer); } } @@ -1023,6 +1206,7 @@ create_devices_from_udev (ply_device_manager_t *manager) ply_trace ("Timeout elapsed, looking for devices from udev"); + create_devices_for_subsystem (manager, SUBSYSTEM_INPUT); create_devices_for_subsystem (manager, SUBSYSTEM_DRM); create_devices_for_subsystem (manager, SUBSYSTEM_FRAME_BUFFER); @@ -1085,6 +1269,7 @@ ply_device_manager_watch_devices (ply_device_manager_t *manager, #ifdef HAVE_UDEV watch_for_udev_events (manager); + create_devices_for_subsystem (manager, SUBSYSTEM_INPUT); create_devices_for_subsystem (manager, SUBSYSTEM_DRM); ply_event_loop_watch_for_timeout (manager->loop, device_timeout, diff --git a/src/libply-splash-core/ply-input-device.c b/src/libply-splash-core/ply-input-device.c new file mode 100644 index 00000000..be473fc5 --- /dev/null +++ b/src/libply-splash-core/ply-input-device.c @@ -0,0 +1,509 @@ +/* ply-input-device.c - evdev input device handling implementation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Written By: Diego Augusto + */ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "ply-buffer.h" +#include "ply-event-loop.h" +#include "ply-input-device.h" +#include "ply-list.h" +#include "ply-logger.h" +#include "ply-trigger.h" +#include "ply-utils.h" + +/* The docs say this needs to be at least 7, the code enforces this, but also never uses more + * than 5. We'll just do 7. + */ +#define PLY_XKB_KEYSYM_TO_UTF8_BUFFER_SIZE 7 + +struct _ply_input_device +{ + int fd; + char *path; + ply_event_loop_t *loop; + ply_trigger_t *input_trigger; + ply_trigger_t *leds_changed_trigger; + ply_trigger_t *disconnect_trigger; + ply_fd_watch_t *fd_watch; + + struct xkb_context *xkb_context; + struct xkb_keymap *keymap; + struct xkb_state *keyboard_state; + struct xkb_compose_table *compose_table; + struct xkb_compose_state *compose_state; + + struct libevdev *dev; +}; + +static bool +apply_compose_sequence_to_input_buffer (ply_input_device_t *input_device, + xkb_keysym_t input_symbol, + ply_buffer_t *input_buffer) +{ + enum xkb_compose_feed_result compose_feed_result; + enum xkb_compose_status compose_status; + + if (input_device->compose_state == NULL) + return false; + + if (input_symbol == XKB_KEY_NoSymbol) + return false; + + compose_feed_result = xkb_compose_state_feed (input_device->compose_state, input_symbol); + + if (compose_feed_result == XKB_COMPOSE_FEED_IGNORED) + return false; + + assert (compose_feed_result == XKB_COMPOSE_FEED_ACCEPTED); + + compose_status = xkb_compose_state_get_status (input_device->compose_state); + + if (compose_status == XKB_COMPOSE_NOTHING) + return false; + + if (compose_status == XKB_COMPOSE_COMPOSED) { + xkb_keysym_t output_symbol; + ssize_t character_size; + char character_buf[PLY_XKB_KEYSYM_TO_UTF8_BUFFER_SIZE] = ""; + + output_symbol = xkb_compose_state_get_one_sym (input_device->compose_state); + character_size = xkb_keysym_to_utf8 (output_symbol, character_buf, sizeof(character_buf)); + + if (character_size > 0) + ply_buffer_append_bytes (input_buffer, character_buf, character_size); + } else { + /* Either we're mid compose sequence (XKB_COMPOSE_COMPOSING) or the compose sequence has + * been aborted (XKB_COMPOSE_CANCELLED). Either way, we shouldn't append anything to the + * input buffer + */ + } + + return true; +} + +static void +apply_key_to_input_buffer (ply_input_device_t *input_device, + xkb_keysym_t symbol, + int keycode, + ply_buffer_t *input_buffer) +{ + ssize_t character_size; + bool was_compose_sequence; + + was_compose_sequence = apply_compose_sequence_to_input_buffer (input_device, symbol, input_buffer); + + if (was_compose_sequence) + return; + + switch (symbol) { + case XKB_KEY_Escape: + ply_buffer_append_bytes (input_buffer, "\033", 1); + break; + case XKB_KEY_Return: + ply_buffer_append_bytes (input_buffer, "\n", 1); + break; + case XKB_KEY_BackSpace: + ply_buffer_append_bytes (input_buffer, "\177", 1); + break; + case XKB_KEY_NoSymbol: + break; + default: + character_size = xkb_state_key_get_utf8 (input_device->keyboard_state, keycode, NULL, 0); + + if (character_size > 0) { + char character_buf[character_size + 1]; + + character_size = xkb_state_key_get_utf8 (input_device->keyboard_state, keycode, character_buf, sizeof(character_buf)); + + assert (character_size + 1 == sizeof(character_buf)); + + ply_buffer_append_bytes (input_buffer, character_buf, character_size); + } + break; + } +} + +static void +on_input (ply_input_device_t *input_device) +{ + struct input_event ev; + int rc; + ply_buffer_t *input_buffer = ply_buffer_new (); + + for (;;) { + ply_key_direction_t key_state; + enum xkb_key_direction xkb_key_direction; + xkb_keycode_t keycode; + xkb_keysym_t symbol; + enum xkb_state_component updated_state; + + rc = libevdev_next_event (input_device->dev, LIBEVDEV_READ_FLAG_NORMAL, &ev); + if (rc != LIBEVDEV_READ_STATUS_SUCCESS) + break; + + if (!libevdev_event_is_type (&ev, EV_KEY)) + continue; + + /* According to `https://docs.kernel.org/input/event-codes.html#ev-key`: + * if ev.value = 2, then the key is being held down. libxkbcommon doesn't appear to define this + * if ev.value = 1, then key was pressed down + * if ev.value = 0, then key was released up + */ + switch (ev.value) { + case 0: + key_state = PLY_KEY_UP; + xkb_key_direction = XKB_KEY_UP; + break; + + case 1: + key_state = PLY_KEY_DOWN; + xkb_key_direction = XKB_KEY_DOWN; + break; + + case 2: + key_state = PLY_KEY_HELD; + xkb_key_direction = XKB_KEY_UP; + break; + } + + /* According to + * `https://xkbcommon.org/doc/current/xkbcommon_8h.html#ac29aee92124c08d1953910ab28ee1997` + * A xkb keycode = linux evdev code + 8 + */ + keycode = (xkb_keycode_t) (ev.code + 8); + + symbol = xkb_state_key_get_one_sym (input_device->keyboard_state, keycode); + + updated_state = xkb_state_update_key (input_device->keyboard_state, keycode, xkb_key_direction); + + if ((updated_state & XKB_STATE_LEDS) != 0) + ply_trigger_pull (input_device->leds_changed_trigger, input_device); + + /* If the key is repeating, or is being pressed down */ + if (key_state == PLY_KEY_HELD || key_state == PLY_KEY_DOWN) + apply_key_to_input_buffer (input_device, symbol, keycode, input_buffer); + } + if (rc != -EAGAIN) { + ply_error ("There was an error reading events for device '%s': %s", + input_device->path, strerror (-rc)); + goto error; + } + if (ply_buffer_get_size (input_buffer) != 0) { + ply_trigger_pull (input_device->input_trigger, ply_buffer_get_bytes (input_buffer)); + } + +error: + ply_buffer_free (input_buffer); +} + +static void +on_disconnect (ply_input_device_t *input_device) +{ + ply_trace ("Input disconnected: %s (%s)", libevdev_get_name (input_device->dev), + input_device->path); + ply_trigger_pull (input_device->disconnect_trigger, input_device); + + ply_input_device_free (input_device); +} + +void +ply_input_device_set_disconnect_handler (ply_input_device_t *input_device, + ply_input_device_disconnect_handler_t callback, + void *user_data) +{ + ply_trigger_add_handler (input_device->disconnect_trigger, (ply_trigger_handler_t) callback, user_data); +} + +ply_input_device_t * +ply_input_device_open (struct xkb_context *xkb_context, + struct xkb_keymap *xkb_keymap, + const char *path) +{ + int error; + const char *locale; + + /* Look up the preferred locale, falling back to "C" as default */ + if (!(locale = getenv ("LC_ALL"))) + if (!(locale = getenv ("LC_CTYPE"))) + if (!(locale = getenv ("LANG"))) + locale = "C"; + + ply_input_device_t *input_device = calloc (1, sizeof(ply_input_device_t)); + + if (input_device == NULL) { + ply_error ("Out of memory"); + return NULL; + } + + input_device->disconnect_trigger = ply_trigger_new (NULL); + input_device->path = strdup (path); + input_device->input_trigger = ply_trigger_new (NULL); + ply_trigger_set_instance (input_device->input_trigger, input_device); + + input_device->leds_changed_trigger = ply_trigger_new (NULL); + input_device->loop = ply_event_loop_get_default (); + + input_device->fd = open (path, O_RDWR | O_NONBLOCK); + + if (input_device->fd < 0) { + ply_error ("Failed to open input device \"%s\"", path); + goto error; + } + input_device->dev = libevdev_new (); + error = libevdev_set_fd (input_device->dev, input_device->fd); + if (error != 0) { + ply_error ("Failed to set fd for device \"%s\": %s", path, strerror (-error)); + goto error; + } + + input_device->fd_watch = ply_event_loop_watch_fd ( + input_device->loop, input_device->fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, + (ply_event_handler_t) on_input, (ply_event_handler_t) on_disconnect, + input_device); + + input_device->keymap = xkb_keymap_ref (xkb_keymap); + input_device->keyboard_state = xkb_state_new (input_device->keymap); + if (input_device->keyboard_state == NULL) { + ply_error ("Failed to initialize input device \"%s\" keyboard_state", path); + goto error; + } + input_device->compose_table = xkb_compose_table_new_from_locale (xkb_context, locale, XKB_COMPOSE_COMPILE_NO_FLAGS); + if (input_device->compose_table) + input_device->compose_state = xkb_compose_state_new (input_device->compose_table, XKB_COMPOSE_STATE_NO_FLAGS); + + return input_device; + +error: + ply_input_device_free (input_device); + return NULL; +} + +void +ply_input_device_watch_for_input (ply_input_device_t *input_device, + ply_input_device_input_handler_t input_callback, + ply_input_device_leds_changed_handler_t leds_changed_callback, + void *user_data) +{ + ply_trigger_add_instance_handler (input_device->input_trigger, (ply_trigger_instance_handler_t) input_callback, user_data); + ply_trigger_add_handler (input_device->leds_changed_trigger, (ply_trigger_handler_t) leds_changed_callback, user_data); +} + +void +ply_input_device_stop_watching_for_input (ply_input_device_t *input_device, + ply_input_device_input_handler_t input_callback, + ply_input_device_leds_changed_handler_t leds_changed_callback, + void *user_data) +{ + ply_trigger_remove_instance_handler (input_device->input_trigger, (ply_trigger_instance_handler_t) input_callback, user_data); + ply_trigger_remove_handler (input_device->leds_changed_trigger, (ply_trigger_handler_t) leds_changed_callback, user_data); +} + +int +ply_input_device_is_keyboard (ply_input_device_t *input_device) +{ + return libevdev_has_event_type (input_device->dev, EV_KEY); +} + +int +ply_input_device_is_keyboard_with_leds (ply_input_device_t *input_device) +{ + return (libevdev_has_event_type (input_device->dev, EV_KEY)) && + (libevdev_has_event_type (input_device->dev, EV_LED)); +} + +const char * +ply_input_device_get_name (ply_input_device_t *input_device) +{ + return libevdev_get_name (input_device->dev); +} + +const char * +ply_input_device_get_path (ply_input_device_t *input_device) +{ + return input_device->path; +} + +/* + * from libinput's evdev_device_led_update and Weston's weston_keyboard_set_locks + */ +void +ply_input_device_set_state (ply_input_device_t *input_device, + ply_xkb_keyboard_state_t *xkb_state) +{ + static struct + { + ply_led_t ply_led; + int evdev; + xkb_mod_mask_t status; + } map[] = { + { PLY_LED_NUM_LOCK, LED_NUML, false }, + { PLY_LED_CAPS_LOCK, LED_CAPSL, false }, + { PLY_LED_SCROLL_LOCK, LED_SCROLLL, false }, + }; + struct input_event ev[PLY_NUMBER_OF_ELEMENTS (map) + 1]; + xkb_mod_mask_t mods_depressed, mods_latched, mods_locked, group; + unsigned int i; + + mods_depressed = xkb_state_serialize_mods (input_device->keyboard_state, + XKB_STATE_DEPRESSED); + mods_latched = xkb_state_serialize_mods (input_device->keyboard_state, + XKB_STATE_LATCHED); + mods_locked = xkb_state_serialize_mods (input_device->keyboard_state, + XKB_STATE_LOCKED); + group = xkb_state_serialize_group (input_device->keyboard_state, + XKB_STATE_EFFECTIVE); + + if (mods_depressed == xkb_state->mods_depressed && + mods_latched == xkb_state->mods_latched && + mods_locked == xkb_state->mods_locked && + group == xkb_state->group) + return; + + mods_depressed = xkb_state->mods_depressed; + mods_latched = xkb_state->mods_latched; + mods_locked = xkb_state->mods_locked; + group = xkb_state->group; + + xkb_state_update_mask (input_device->keyboard_state, + mods_depressed, + mods_latched, + mods_locked, + 0, + 0, + group); + + map[LED_NUML].status = xkb_state_led_name_is_active (input_device->keyboard_state, XKB_LED_NAME_NUM); + map[LED_CAPSL].status = xkb_state_led_name_is_active (input_device->keyboard_state, XKB_LED_NAME_CAPS); + map[LED_SCROLLL].status = xkb_state_led_name_is_active (input_device->keyboard_state, XKB_LED_NAME_SCROLL); + + memset (ev, 0, sizeof(ev)); + for (i = 0; i < PLY_NUMBER_OF_ELEMENTS (map); i++) { + ev[i].type = EV_LED; + ev[i].code = map[i].evdev; + ev[i].value = map[i].status; + } + ev[i].type = EV_SYN; + ev[i].code = SYN_REPORT; + + ply_write (input_device->fd, ev, sizeof(ev)); +} + +ply_xkb_keyboard_state_t +*ply_input_device_get_state (ply_input_device_t *input_device) +{ + ply_xkb_keyboard_state_t *xkb_state = calloc (1, sizeof(ply_xkb_keyboard_state_t)); + + xkb_state->mods_depressed = xkb_state_serialize_mods (input_device->keyboard_state, + XKB_STATE_DEPRESSED); + xkb_state->mods_latched = xkb_state_serialize_mods (input_device->keyboard_state, + XKB_STATE_LATCHED); + xkb_state->mods_locked = xkb_state_serialize_mods (input_device->keyboard_state, + XKB_STATE_LOCKED); + xkb_state->group = xkb_state_serialize_group (input_device->keyboard_state, + XKB_STATE_EFFECTIVE); + + return xkb_state; +} + +bool +ply_input_device_get_capslock_state (ply_input_device_t *input_device) +{ + return xkb_state_led_name_is_active (input_device->keyboard_state, XKB_LED_NAME_CAPS); +} + +const char * +ply_input_device_get_keymap (ply_input_device_t *input_device) +{ + xkb_layout_index_t num_indices = xkb_keymap_num_layouts (input_device->keymap); + ply_trace ("xkb layout has %d groups", num_indices); + if (num_indices == 0) { + return NULL; + } + /* According to xkbcommon docs: + * (https://xkbcommon.org/doc/current/xkbcommon_8h.html#ad37512642806c55955e1cd5a30efcc39) + * + * Each layout is not required to have a name, and the names are not + * guaranteed to be unique (though they are usually provided and + * unique). Therefore, it is not safe to use the name as a unique + * identifier for a layout. Layout names are case-sensitive. + * + * Layout names are specified in the layout's definition, for example "English + * (US)". These are different from the (conventionally) short names + * which are used to locate the layout, for example "us" or "us(intl)". + * These names are not present in a compiled keymap. + * + * This string shouldn't be used as a unique indentifier for a keymap + */ + return xkb_keymap_layout_get_name (input_device->keymap, num_indices - 1); +} + +int +ply_input_device_get_fd (ply_input_device_t *input_device) +{ + return input_device->fd; +} + +void +ply_input_device_free (ply_input_device_t *input_device) +{ + if (input_device == NULL) + return; + + if (input_device->xkb_context) + xkb_context_unref (input_device->xkb_context); + + if (input_device->keyboard_state) + xkb_state_unref (input_device->keyboard_state); + + if (input_device->keymap) + xkb_keymap_unref (input_device->keymap); + + if (input_device->compose_state) + xkb_compose_state_unref (input_device->compose_state); + + if (input_device->compose_table) + xkb_compose_table_unref (input_device->compose_table); + + if (input_device->dev) + libevdev_free (input_device->dev); + + ply_trigger_free (input_device->input_trigger); + ply_trigger_free (input_device->leds_changed_trigger); + ply_trigger_free (input_device->disconnect_trigger); + + free (input_device->path); + + ply_event_loop_stop_watching_fd (input_device->loop, input_device->fd_watch); + + close (input_device->fd); + + free (input_device); +} diff --git a/src/libply-splash-core/ply-input-device.h b/src/libply-splash-core/ply-input-device.h new file mode 100644 index 00000000..ecc88982 --- /dev/null +++ b/src/libply-splash-core/ply-input-device.h @@ -0,0 +1,92 @@ +/* ply-input-device.h - evdev input device handling + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Written By: Diego Augusto + */ +#ifndef PLY_INPUT_DEVICE_H +#define PLY_INPUT_DEVICE_H + +#include "ply-buffer.h" +#include +#include + +typedef enum +{ + PLY_LED_NUM_LOCK = (1 << 0), + PLY_LED_CAPS_LOCK = (1 << 1), + PLY_LED_SCROLL_LOCK = (1 << 2) +} ply_led_t; + +typedef enum +{ + PLY_KEY_UP, + PLY_KEY_DOWN, + PLY_KEY_HELD, +} ply_key_direction_t; + +typedef struct _ply_input_device ply_input_device_t; +typedef void (*ply_input_device_input_handler_t) (void *user_data, + ply_input_device_t *input_device, + const char *buf); +typedef void (*ply_input_device_leds_changed_handler_t) (void *user_data, + ply_input_device_t *input_device); +typedef void (*ply_input_device_disconnect_handler_t) (void *user_data, + ply_input_device_t *input_device); +typedef struct +{ + xkb_mod_mask_t mods_depressed; + xkb_mod_mask_t mods_latched; + xkb_mod_mask_t mods_locked; + xkb_mod_mask_t group; +} ply_xkb_keyboard_state_t; + +#ifndef PLY_HIDE_FUNCTION_DECLARATIONS + +ply_input_device_t *ply_input_device_open (struct xkb_context *xkb_context, + struct xkb_keymap *xkb_keymap, + const char *path); +void ply_input_device_free (ply_input_device_t *input_device); +void ply_input_device_watch_for_input (ply_input_device_t *input_device, + ply_input_device_input_handler_t input_callback, + ply_input_device_leds_changed_handler_t led_callback, + void *user_data); + +void ply_input_device_stop_watching_for_input (ply_input_device_t *input_device, + ply_input_device_input_handler_t input_callback, + ply_input_device_leds_changed_handler_t led_callback, + void *user_data); + + +ply_xkb_keyboard_state_t *ply_input_device_get_state (ply_input_device_t *input_device); +void ply_input_device_set_state (ply_input_device_t *input_device, + ply_xkb_keyboard_state_t *xkb_state); + +void ply_input_device_set_disconnect_handler (ply_input_device_t *input_device, + ply_input_device_disconnect_handler_t callback, + void *user_data); +int ply_input_device_get_fd (ply_input_device_t *input_device); +int ply_input_device_is_keyboard (ply_input_device_t *input_device); +int ply_input_device_is_keyboard_with_leds (ply_input_device_t *input_device); +const char *ply_input_device_get_name (ply_input_device_t *input_device); +bool ply_input_device_get_capslock_state (ply_input_device_t *input_device); +/* The value shouldn't be used as a unique indentifier for a keymap */ +const char *ply_input_device_get_keymap (ply_input_device_t *input_device); +const char *ply_input_device_get_path (ply_input_device_t *input_device); + +#endif //PLY_HIDE_FUNCTION_DECLARATIONS + +#endif //PLY_INPUT_DEVICE_H diff --git a/src/libply-splash-core/ply-renderer-plugin.h b/src/libply-splash-core/ply-renderer-plugin.h index 6817dac1..483ad27c 100644 --- a/src/libply-splash-core/ply-renderer-plugin.h +++ b/src/libply-splash-core/ply-renderer-plugin.h @@ -26,6 +26,7 @@ #include #include +#include "ply-input-device.h" #include "ply-terminal.h" #include "ply-event-loop.h" #include "ply-list.h" @@ -76,6 +77,11 @@ typedef struct int *scale); bool (*get_capslock_state)(ply_renderer_backend_t *backend); const char * (*get_keymap)(ply_renderer_backend_t *backend); + + void (*add_input_device)(ply_renderer_backend_t *backend, + ply_input_device_t *input_device); + void (*remove_input_device)(ply_renderer_backend_t *backend, + ply_input_device_t *input_device); } ply_renderer_plugin_interface_t; #endif /* PLY_RENDERER_PLUGIN_H */ diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c index edebc030..75492885 100644 --- a/src/libply-splash-core/ply-renderer.c +++ b/src/libply-splash-core/ply-renderer.c @@ -368,6 +368,34 @@ ply_renderer_flush_head (ply_renderer_t *renderer, renderer->plugin_interface->flush_head (renderer->backend, head); } +void +ply_renderer_add_input_device (ply_renderer_t *renderer, + ply_input_device_t *input_device) +{ + assert (renderer != NULL); + assert (renderer->plugin_interface != NULL); + assert (input_device != NULL); + + if (!renderer->plugin_interface->add_input_device) + return; + + renderer->plugin_interface->add_input_device (renderer->backend, input_device); +} + +void +ply_renderer_remove_input_device (ply_renderer_t *renderer, + ply_input_device_t *input_device) +{ + assert (renderer != NULL); + assert (renderer->plugin_interface != NULL); + assert (input_device != NULL); + + if (!renderer->plugin_interface->remove_input_device) + return; + + renderer->plugin_interface->remove_input_device (renderer->backend, input_device); +} + ply_renderer_input_source_t * ply_renderer_get_input_source (ply_renderer_t *renderer) { @@ -452,4 +480,3 @@ ply_renderer_get_keymap (ply_renderer_t *renderer) return renderer->plugin_interface->get_keymap (renderer->backend); } - diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h index 0b4e0323..5fbf819d 100644 --- a/src/libply-splash-core/ply-renderer.h +++ b/src/libply-splash-core/ply-renderer.h @@ -30,6 +30,7 @@ #include "ply-pixel-buffer.h" #include "ply-terminal.h" #include "ply-utils.h" +#include "ply-input-device.h" typedef struct _ply_renderer ply_renderer_t; typedef struct _ply_renderer_head ply_renderer_head_t; @@ -68,6 +69,12 @@ ply_pixel_buffer_t *ply_renderer_get_buffer_for_head (ply_renderer_t *rende void ply_renderer_flush_head (ply_renderer_t *renderer, ply_renderer_head_t *head); +void ply_renderer_add_input_device (ply_renderer_t *renderer, + ply_input_device_t *input_device); + +void ply_renderer_remove_input_device (ply_renderer_t *renderer, + ply_input_device_t *input_device); + ply_renderer_input_source_t *ply_renderer_get_input_source (ply_renderer_t *renderer); bool ply_renderer_open_input_source (ply_renderer_t *renderer, ply_renderer_input_source_t *input_source); diff --git a/src/libply-splash-core/ply-terminal.c b/src/libply-splash-core/ply-terminal.c index 686b4f4f..eee23c74 100644 --- a/src/libply-splash-core/ply-terminal.c +++ b/src/libply-splash-core/ply-terminal.c @@ -80,7 +80,7 @@ struct _ply_terminal struct termios original_locked_term_attributes; char *name; - char *keymap; + const char *keymap; int fd; int vt_number; int initial_vt_number; @@ -117,37 +117,9 @@ typedef enum static ply_terminal_open_result_t ply_terminal_open_device (ply_terminal_t *terminal); -static char * -ply_terminal_parse_keymap_conf (ply_terminal_t *terminal) -{ - ply_key_file_t *vconsole_conf; - char *keymap, *old_keymap; - - keymap = ply_kernel_command_line_get_key_value ("rd.vconsole.keymap="); - if (keymap) - return keymap; - - keymap = ply_kernel_command_line_get_key_value ("vconsole.keymap="); - if (keymap) - return keymap; - - vconsole_conf = ply_key_file_new ("/etc/vconsole.conf"); - if (ply_key_file_load_groupless_file (vconsole_conf)) - keymap = ply_key_file_get_value (vconsole_conf, NULL, "KEYMAP"); - ply_key_file_free (vconsole_conf); - - /* The keymap name in vconsole.conf might be quoted, strip these */ - if (keymap && keymap[0] == '"' && keymap[strlen (keymap) - 1] == '"') { - old_keymap = keymap; - keymap = strndup (keymap + 1, strlen (keymap) - 2); - free (old_keymap); - } - - return keymap; -} - ply_terminal_t * -ply_terminal_new (const char *device_name) +ply_terminal_new (const char *device_name, + const char *keymap) { ply_terminal_t *terminal; @@ -167,7 +139,7 @@ ply_terminal_new (const char *device_name) terminal->fd = -1; terminal->vt_number = -1; terminal->initial_vt_number = -1; - terminal->keymap = ply_terminal_parse_keymap_conf (terminal); + terminal->keymap = keymap; if (terminal->keymap) ply_trace ("terminal %s keymap: %s", terminal->name, terminal->keymap); @@ -879,7 +851,6 @@ ply_terminal_free (ply_terminal_t *terminal) free_vt_change_closures (terminal); free_input_closures (terminal); - free (terminal->keymap); free (terminal->name); free (terminal); } @@ -1101,3 +1072,12 @@ ply_terminal_stop_watching_for_input (ply_terminal_t *terminal, } } +void +ply_terminal_flush_input (ply_terminal_t *terminal) +{ + if (!terminal->is_open) + return; + + if (tcflush (terminal->fd, TCIFLUSH) < 0) + ply_trace ("could not flush input buffer of terminal %s: %m", terminal->name); +} diff --git a/src/libply-splash-core/ply-terminal.h b/src/libply-splash-core/ply-terminal.h index c701f2ca..14d75d13 100644 --- a/src/libply-splash-core/ply-terminal.h +++ b/src/libply-splash-core/ply-terminal.h @@ -55,7 +55,8 @@ typedef enum } ply_terminal_mode_t; #ifndef PLY_HIDE_FUNCTION_DECLARATIONS -ply_terminal_t *ply_terminal_new (const char *device_name); +ply_terminal_t *ply_terminal_new (const char *device_name, + const char *keymap); void ply_terminal_free (ply_terminal_t *terminal); @@ -116,7 +117,8 @@ void ply_terminal_stop_watching_for_input (ply_terminal_t *terminal ply_terminal_input_handler_t input_handler, void *user_data); +void ply_terminal_flush_input (ply_terminal_t *terminal); + #endif #endif /* PLY_TERMINAL_H */ - diff --git a/src/libply-splash-graphics/ply-keymap-icon.c b/src/libply-splash-graphics/ply-keymap-icon.c index 94cf5b34..4455f032 100644 --- a/src/libply-splash-graphics/ply-keymap-icon.c +++ b/src/libply-splash-graphics/ply-keymap-icon.c @@ -82,7 +82,7 @@ ply_keymap_icon_fill_keymap_info (ply_keymap_icon_t *keymap_icon) { const char *keymap_with_variant; ply_renderer_t *renderer; - char *keymap; + char *keymap, *compare_keymap; int i; keymap_icon->keymap_offset = -1; @@ -95,7 +95,13 @@ ply_keymap_icon_fill_keymap_info (ply_keymap_icon_t *keymap_icon) keymap = ply_keymap_normalize_keymap (keymap_with_variant); for (i = 0; ply_keymap_metadata[i].name; i++) { - if (strcmp (ply_keymap_metadata[i].name, keymap) == 0) { + if (ply_keymap_metadata[i].type == PLY_LAYOUT_TERMINAL) { + compare_keymap = strdup (keymap); + } else if (ply_keymap_metadata[i].type == PLY_LAYOUT_XKB) { + compare_keymap = strdup (keymap_with_variant); + } + + if (strcmp (ply_keymap_metadata[i].name, compare_keymap) == 0) { keymap_icon->keymap_offset = ply_keymap_metadata[i].offset; keymap_icon->keymap_width = ply_keymap_metadata[i].width; break; @@ -106,6 +112,7 @@ ply_keymap_icon_fill_keymap_info (ply_keymap_icon_t *keymap_icon) ply_trace ("Error no pre-rendered text for '%s' keymap", keymap); free (keymap); + free (compare_keymap); } ply_keymap_icon_t * @@ -273,4 +280,3 @@ ply_keymap_icon_get_height (ply_keymap_icon_t *keymap_icon) { return keymap_icon->height; } - diff --git a/src/libply-splash-graphics/ply-keymap-metadata.h b/src/libply-splash-graphics/ply-keymap-metadata.h index ef715ae4..d8b13f1c 100644 --- a/src/libply-splash-graphics/ply-keymap-metadata.h +++ b/src/libply-splash-graphics/ply-keymap-metadata.h @@ -1,139 +1,256 @@ /* This file is autogenerated by running: * scripts/keymap-render.py > src/libply-splash-graphics/ply-keymap-metadata.h */ -struct ply_keymap_metadata +typedef struct { const char *name; int offset; int width; -}; + int type; +} ply_keymap_metadata_t; -static struct ply_keymap_metadata ply_keymap_metadata[] = { - { "dvorak", 10, 113 }, - { "al", 123, 44 }, - { "amiga", 167, 101 }, - { "applkey", 268, 126 }, - { "at", 394, 46 }, - { "atari", 440, 81 }, - { "az", 521, 49 }, - { "azerty", 570, 104 }, - { "ba", 674, 49 }, - { "backspace", 723, 157 }, - { "bashkir", 880, 119 }, - { "be", 999, 50 }, - { "bg", 1049, 51 }, - { "br", 1100, 48 }, - { "by", 1148, 51 }, - { "bywin", 1199, 98 }, - { "ca", 1297, 47 }, - { "carpalx", 1344, 118 }, - { "cf", 1462, 45 }, - { "ch", 1507, 49 }, - { "cm", 1556, 59 }, - { "cn", 1615, 49 }, - { "croat", 1664, 89 }, - { "ctrl", 1753, 65 }, - { "cz", 1818, 47 }, - { "de", 1865, 51 }, - { "defkeymap", 1916, 170 }, - { "dk", 2086, 53 }, - { "dz", 2139, 50 }, - { "ee", 2189, 50 }, - { "emacs", 2239, 106 }, - { "emacs2", 2345, 122 }, - { "en", 2467, 51 }, - { "epo", 2518, 68 }, - { "es", 2586, 49 }, - { "et", 2635, 46 }, - { "euro", 2681, 80 }, - { "euro1", 2761, 95 }, - { "euro2", 2856, 97 }, - { "fi", 2953, 38 }, - { "fo", 2991, 47 }, - { "fr", 3038, 44 }, - { "gb", 3082, 53 }, - { "ge", 3135, 51 }, - { "gh", 3186, 52 }, - { "gr", 3238, 49 }, - { "hr", 3287, 48 }, - { "hu", 3335, 50 }, - { "hu101", 3385, 99 }, - { "ie", 3484, 42 }, - { "il", 3526, 36 }, - { "in", 3562, 43 }, - { "iq", 3605, 43 }, - { "ir", 3648, 40 }, - { "is", 3688, 41 }, - { "it", 3729, 38 }, - { "it2", 3767, 54 }, - { "jp", 3821, 46 }, - { "jp106", 3867, 96 }, - { "kazakh", 3963, 112 }, - { "ke", 4075, 49 }, - { "keypad", 4124, 114 }, - { "kr", 4238, 47 }, - { "ky", 4285, 50 }, - { "kyrgyz", 4335, 107 }, - { "kz", 4442, 48 }, - { "la", 4490, 42 }, - { "latam", 4532, 97 }, - { "lk", 4629, 45 }, - { "lt", 4674, 39 }, - { "lv", 4713, 44 }, - { "ma", 4757, 59 }, - { "pl", 4816, 44 }, - { "pt", 4860, 46 }, - { "se", 4906, 48 }, - { "template", 4954, 142 }, - { "uk", 5096, 53 }, - { "us", 5149, 50 }, - { "md", 5199, 61 }, - { "me", 5260, 60 }, - { "mk", 5320, 62 }, - { "mk0", 5382, 79 }, - { "ml", 5461, 54 }, - { "mm", 5515, 71 }, - { "mt", 5586, 56 }, - { "ng", 5642, 51 }, - { "nl", 5693, 44 }, - { "nl2", 5737, 60 }, - { "no", 5797, 51 }, - { "pc110", 5848, 95 }, - { "ph", 5943, 51 }, - { "pl1", 5994, 58 }, - { "pl2", 6052, 60 }, - { "pl3", 6112, 60 }, - { "pl4", 6172, 62 }, - { "ro", 6234, 46 }, - { "rs", 6280, 44 }, - { "ru", 6324, 45 }, - { "ru1", 6369, 61 }, - { "ru2", 6430, 63 }, - { "ru3", 6493, 63 }, - { "ru4", 6556, 65 }, - { "ruwin", 6621, 95 }, - { "sg", 6716, 49 }, - { "si", 6765, 40 }, - { "sk", 6805, 50 }, - { "slovene", 6855, 122 }, - { "sr", 6977, 46 }, - { "sunkeymap", 7023, 174 }, - { "sv", 7197, 49 }, - { "sy", 7246, 49 }, - { "tj", 7295, 38 }, - { "tm", 7333, 57 }, - { "tr", 7390, 44 }, - { "tralt", 7434, 79 }, - { "trf", 7513, 55 }, - { "trq", 7568, 59 }, - { "ttwin", 7627, 90 }, - { "tw", 7717, 56 }, - { "ua", 7773, 50 }, - { "unicode", 7823, 124 }, - { "uz", 7947, 50 }, - { "vn", 7997, 51 }, - { "wangbe", 8048, 126 }, - { "wangbe2", 8174, 143 }, - { "windowkeys", 8317, 188 }, - { NULL, } /* End of array marker */ +typedef enum +{ + PLY_LAYOUT_TERMINAL, + PLY_LAYOUT_XKB, +} ply_layout_types_t; + +static ply_keymap_metadata_t ply_keymap_metadata[] = { + { "3l", 10, 47, PLY_LAYOUT_TERMINAL }, + { "dvorak", 57, 113, PLY_LAYOUT_TERMINAL }, + { "adnw", 170, 94, PLY_LAYOUT_TERMINAL }, + { "al", 264, 45, PLY_LAYOUT_TERMINAL }, + { "amiga", 309, 103, PLY_LAYOUT_TERMINAL }, + { "apple", 412, 93, PLY_LAYOUT_TERMINAL }, + { "applkey", 505, 126, PLY_LAYOUT_TERMINAL }, + { "ara", 631, 62, PLY_LAYOUT_TERMINAL }, + { "at", 693, 46, PLY_LAYOUT_TERMINAL }, + { "atari", 739, 81, PLY_LAYOUT_TERMINAL }, + { "az", 820, 49, PLY_LAYOUT_TERMINAL }, + { "azerty", 869, 105, PLY_LAYOUT_TERMINAL }, + { "ba", 974, 50, PLY_LAYOUT_TERMINAL }, + { "backspace", 1024, 157, PLY_LAYOUT_TERMINAL }, + { "bashkir", 1181, 119, PLY_LAYOUT_TERMINAL }, + { "be", 1300, 50, PLY_LAYOUT_TERMINAL }, + { "bg", 1350, 51, PLY_LAYOUT_TERMINAL }, + { "bone", 1401, 84, PLY_LAYOUT_TERMINAL }, + { "br", 1485, 48, PLY_LAYOUT_TERMINAL }, + { "by", 1533, 51, PLY_LAYOUT_TERMINAL }, + { "bywin", 1584, 98, PLY_LAYOUT_TERMINAL }, + { "ca", 1682, 48, PLY_LAYOUT_TERMINAL }, + { "carpalx", 1730, 118, PLY_LAYOUT_TERMINAL }, + { "cf", 1848, 46, PLY_LAYOUT_TERMINAL }, + { "ch", 1894, 49, PLY_LAYOUT_TERMINAL }, + { "cm", 1943, 59, PLY_LAYOUT_TERMINAL }, + { "cn", 2002, 49, PLY_LAYOUT_TERMINAL }, + { "croat", 2051, 89, PLY_LAYOUT_TERMINAL }, + { "ctrl", 2140, 66, PLY_LAYOUT_TERMINAL }, + { "cz", 2206, 47, PLY_LAYOUT_TERMINAL }, + { "de", 2253, 51, PLY_LAYOUT_TERMINAL }, + { "defkeymap", 2304, 170, PLY_LAYOUT_TERMINAL }, + { "dk", 2474, 53, PLY_LAYOUT_TERMINAL }, + { "dz", 2527, 50, PLY_LAYOUT_TERMINAL }, + { "ee", 2577, 50, PLY_LAYOUT_TERMINAL }, + { "emacs", 2627, 106, PLY_LAYOUT_TERMINAL }, + { "emacs2", 2733, 122, PLY_LAYOUT_TERMINAL }, + { "en", 2855, 51, PLY_LAYOUT_TERMINAL }, + { "epo", 2906, 69, PLY_LAYOUT_TERMINAL }, + { "es", 2975, 49, PLY_LAYOUT_TERMINAL }, + { "et", 3024, 46, PLY_LAYOUT_TERMINAL }, + { "euro", 3070, 81, PLY_LAYOUT_TERMINAL }, + { "euro1", 3151, 92, PLY_LAYOUT_TERMINAL }, + { "euro2", 3243, 97, PLY_LAYOUT_TERMINAL }, + { "fa", 3340, 46, PLY_LAYOUT_TERMINAL }, + { "fi", 3386, 38, PLY_LAYOUT_TERMINAL }, + { "fo", 3424, 48, PLY_LAYOUT_TERMINAL }, + { "fr", 3472, 44, PLY_LAYOUT_TERMINAL }, + { "gb", 3516, 54, PLY_LAYOUT_TERMINAL }, + { "ge", 3570, 52, PLY_LAYOUT_TERMINAL }, + { "gh", 3622, 53, PLY_LAYOUT_TERMINAL }, + { "gr", 3675, 50, PLY_LAYOUT_TERMINAL }, + { "hr", 3725, 48, PLY_LAYOUT_TERMINAL }, + { "hu", 3773, 50, PLY_LAYOUT_TERMINAL }, + { "hu101", 3823, 96, PLY_LAYOUT_TERMINAL }, + { "id", 3919, 43, PLY_LAYOUT_TERMINAL }, + { "ie", 3962, 42, PLY_LAYOUT_TERMINAL }, + { "il", 4004, 37, PLY_LAYOUT_TERMINAL }, + { "in", 4041, 43, PLY_LAYOUT_TERMINAL }, + { "iq", 4084, 43, PLY_LAYOUT_TERMINAL }, + { "ir", 4127, 40, PLY_LAYOUT_TERMINAL }, + { "is", 4167, 41, PLY_LAYOUT_TERMINAL }, + { "it", 4208, 38, PLY_LAYOUT_TERMINAL }, + { "it2", 4246, 54, PLY_LAYOUT_TERMINAL }, + { "jp", 4300, 46, PLY_LAYOUT_TERMINAL }, + { "jp106", 4346, 96, PLY_LAYOUT_TERMINAL }, + { "kazakh", 4442, 113, PLY_LAYOUT_TERMINAL }, + { "ke", 4555, 49, PLY_LAYOUT_TERMINAL }, + { "keypad", 4604, 114, PLY_LAYOUT_TERMINAL }, + { "ko", 4718, 51, PLY_LAYOUT_TERMINAL }, + { "koy", 4769, 67, PLY_LAYOUT_TERMINAL }, + { "kr", 4836, 47, PLY_LAYOUT_TERMINAL }, + { "ky", 4883, 50, PLY_LAYOUT_TERMINAL }, + { "kyrgyz", 4933, 108, PLY_LAYOUT_TERMINAL }, + { "kz", 5041, 48, PLY_LAYOUT_TERMINAL }, + { "la", 5089, 42, PLY_LAYOUT_TERMINAL }, + { "latam", 5131, 96, PLY_LAYOUT_TERMINAL }, + { "lk", 5227, 44, PLY_LAYOUT_TERMINAL }, + { "lt", 5271, 38, PLY_LAYOUT_TERMINAL }, + { "lv", 5309, 43, PLY_LAYOUT_TERMINAL }, + { "ma", 5352, 60, PLY_LAYOUT_TERMINAL }, + { "no", 5412, 52, PLY_LAYOUT_TERMINAL }, + { "pl", 5464, 45, PLY_LAYOUT_TERMINAL }, + { "pt", 5509, 46, PLY_LAYOUT_TERMINAL }, + { "se", 5555, 48, PLY_LAYOUT_TERMINAL }, + { "template", 5603, 142, PLY_LAYOUT_TERMINAL }, + { "uk", 5745, 53, PLY_LAYOUT_TERMINAL }, + { "us", 5798, 50, PLY_LAYOUT_TERMINAL }, + { "md", 5848, 61, PLY_LAYOUT_TERMINAL }, + { "me", 5909, 60, PLY_LAYOUT_TERMINAL }, + { "mk", 5969, 62, PLY_LAYOUT_TERMINAL }, + { "mk0", 6031, 79, PLY_LAYOUT_TERMINAL }, + { "ml", 6110, 55, PLY_LAYOUT_TERMINAL }, + { "mm", 6165, 71, PLY_LAYOUT_TERMINAL }, + { "mt", 6236, 56, PLY_LAYOUT_TERMINAL }, + { "neo", 6292, 68, PLY_LAYOUT_TERMINAL }, + { "neoqwertz", 6360, 162, PLY_LAYOUT_TERMINAL }, + { "ng", 6522, 51, PLY_LAYOUT_TERMINAL }, + { "nl", 6573, 45, PLY_LAYOUT_TERMINAL }, + { "nl2", 6618, 60, PLY_LAYOUT_TERMINAL }, + { "pc110", 6678, 95, PLY_LAYOUT_TERMINAL }, + { "ph", 6773, 51, PLY_LAYOUT_TERMINAL }, + { "pl1", 6824, 55, PLY_LAYOUT_TERMINAL }, + { "pl2", 6879, 60, PLY_LAYOUT_TERMINAL }, + { "pl3", 6939, 61, PLY_LAYOUT_TERMINAL }, + { "pl4", 7000, 62, PLY_LAYOUT_TERMINAL }, + { "ro", 7062, 47, PLY_LAYOUT_TERMINAL }, + { "rs", 7109, 44, PLY_LAYOUT_TERMINAL }, + { "ru", 7153, 45, PLY_LAYOUT_TERMINAL }, + { "ru1", 7198, 58, PLY_LAYOUT_TERMINAL }, + { "ru2", 7256, 63, PLY_LAYOUT_TERMINAL }, + { "ru3", 7319, 64, PLY_LAYOUT_TERMINAL }, + { "ru4", 7383, 65, PLY_LAYOUT_TERMINAL }, + { "ruwin", 7448, 95, PLY_LAYOUT_TERMINAL }, + { "sg", 7543, 49, PLY_LAYOUT_TERMINAL }, + { "si", 7592, 40, PLY_LAYOUT_TERMINAL }, + { "sk", 7632, 50, PLY_LAYOUT_TERMINAL }, + { "slovene", 7682, 122, PLY_LAYOUT_TERMINAL }, + { "sr", 7804, 46, PLY_LAYOUT_TERMINAL }, + { "sunkeymap", 7850, 174, PLY_LAYOUT_TERMINAL }, + { "sv", 8024, 49, PLY_LAYOUT_TERMINAL }, + { "sy", 8073, 49, PLY_LAYOUT_TERMINAL }, + { "tj", 8122, 38, PLY_LAYOUT_TERMINAL }, + { "tm", 8160, 57, PLY_LAYOUT_TERMINAL }, + { "tr", 8217, 44, PLY_LAYOUT_TERMINAL }, + { "tralt", 8261, 79, PLY_LAYOUT_TERMINAL }, + { "trf", 8340, 56, PLY_LAYOUT_TERMINAL }, + { "trq", 8396, 59, PLY_LAYOUT_TERMINAL }, + { "ttwin", 8455, 90, PLY_LAYOUT_TERMINAL }, + { "tw", 8545, 56, PLY_LAYOUT_TERMINAL }, + { "ua", 8601, 51, PLY_LAYOUT_TERMINAL }, + { "unicode", 8652, 124, PLY_LAYOUT_TERMINAL }, + { "us1", 8776, 61, PLY_LAYOUT_TERMINAL }, + { "uz", 8837, 50, PLY_LAYOUT_TERMINAL }, + { "vn", 8887, 51, PLY_LAYOUT_TERMINAL }, + { "wangbe", 8938, 127, PLY_LAYOUT_TERMINAL }, + { "wangbe2", 9065, 144, PLY_LAYOUT_TERMINAL }, + { "windowkeys", 9209, 188, PLY_LAYOUT_TERMINAL }, + { "English (US)", 9397, 182, PLY_LAYOUT_XKB }, + { "Dari", 9579, 75, PLY_LAYOUT_XKB }, + { "Arabic", 9654, 107, PLY_LAYOUT_XKB }, + { "Albanian", 9761, 139, PLY_LAYOUT_XKB }, + { "Armenian", 9900, 152, PLY_LAYOUT_XKB }, + { "German (Austria)", 10052, 252, PLY_LAYOUT_XKB }, + { "English (Australian)", 10304, 284, PLY_LAYOUT_XKB }, + { "Azerbaijani", 10588, 172, PLY_LAYOUT_XKB }, + { "Belarusian", 10760, 162, PLY_LAYOUT_XKB }, + { "Belgian", 10922, 121, PLY_LAYOUT_XKB }, + { "Bangla", 11043, 113, PLY_LAYOUT_XKB }, + { "Indian", 11156, 101, PLY_LAYOUT_XKB }, + { "Bosnian", 11257, 126, PLY_LAYOUT_XKB }, + { "Portuguese (Brazil)", 11383, 279, PLY_LAYOUT_XKB }, + { "Bulgarian", 11662, 150, PLY_LAYOUT_XKB }, + { "Berber (Algeria, Latin)", 11812, 317, PLY_LAYOUT_XKB }, + { "Arabic (Morocco)", 12129, 249, PLY_LAYOUT_XKB }, + { "English (Cameroon)", 12378, 285, PLY_LAYOUT_XKB }, + { "Burmese", 12663, 139, PLY_LAYOUT_XKB }, + { "French (Canada)", 12802, 237, PLY_LAYOUT_XKB }, + { "French (Democratic Republic of the Congo)", 13039, 594, PLY_LAYOUT_XKB }, + { "Chinese", 13633, 125, PLY_LAYOUT_XKB }, + { "Croatian", 13758, 134, PLY_LAYOUT_XKB }, + { "Czech", 13892, 99, PLY_LAYOUT_XKB }, + { "Danish", 13991, 111, PLY_LAYOUT_XKB }, + { "Dutch", 14102, 98, PLY_LAYOUT_XKB }, + { "Dzongkha", 14200, 155, PLY_LAYOUT_XKB }, + { "Estonian", 14355, 135, PLY_LAYOUT_XKB }, + { "Persian", 14490, 118, PLY_LAYOUT_XKB }, + { "Iraqi", 14608, 79, PLY_LAYOUT_XKB }, + { "Faroese", 14687, 125, PLY_LAYOUT_XKB }, + { "Finnish", 14812, 115, PLY_LAYOUT_XKB }, + { "French", 14927, 110, PLY_LAYOUT_XKB }, + { "English (Ghana)", 15037, 232, PLY_LAYOUT_XKB }, + { "N'Ko (AZERTY)", 15269, 225, PLY_LAYOUT_XKB }, + { "Georgian", 15494, 144, PLY_LAYOUT_XKB }, + { "German", 15638, 128, PLY_LAYOUT_XKB }, + { "Greek", 15766, 102, PLY_LAYOUT_XKB }, + { "Hungarian", 15868, 160, PLY_LAYOUT_XKB }, + { "Icelandic", 16028, 138, PLY_LAYOUT_XKB }, + { "Hebrew", 16166, 126, PLY_LAYOUT_XKB }, + { "Italian", 16292, 103, PLY_LAYOUT_XKB }, + { "Japanese", 16395, 144, PLY_LAYOUT_XKB }, + { "Kyrgyz", 16539, 112, PLY_LAYOUT_XKB }, + { "Khmer (Cambodia)", 16651, 272, PLY_LAYOUT_XKB }, + { "Kazakh", 16923, 117, PLY_LAYOUT_XKB }, + { "Lao", 17040, 67, PLY_LAYOUT_XKB }, + { "Spanish (Latin American)", 17107, 355, PLY_LAYOUT_XKB }, + { "Lithuanian", 17462, 160, PLY_LAYOUT_XKB }, + { "Latvian", 17622, 116, PLY_LAYOUT_XKB }, + { "Maori", 17738, 96, PLY_LAYOUT_XKB }, + { "Montenegrin", 17834, 192, PLY_LAYOUT_XKB }, + { "Macedonian", 18026, 181, PLY_LAYOUT_XKB }, + { "Maltese", 18207, 125, PLY_LAYOUT_XKB }, + { "Mongolian", 18332, 162, PLY_LAYOUT_XKB }, + { "Norwegian", 18494, 168, PLY_LAYOUT_XKB }, + { "Polish", 18662, 100, PLY_LAYOUT_XKB }, + { "Portuguese", 18762, 173, PLY_LAYOUT_XKB }, + { "Romanian", 18935, 154, PLY_LAYOUT_XKB }, + { "Russian", 19089, 122, PLY_LAYOUT_XKB }, + { "Serbian", 19211, 122, PLY_LAYOUT_XKB }, + { "Slovenian", 19333, 151, PLY_LAYOUT_XKB }, + { "Slovak", 19484, 111, PLY_LAYOUT_XKB }, + { "Spanish", 19595, 125, PLY_LAYOUT_XKB }, + { "Swedish", 19720, 132, PLY_LAYOUT_XKB }, + { "German (Switzerland)", 19852, 316, PLY_LAYOUT_XKB }, + { "Arabic (Syria)", 20168, 200, PLY_LAYOUT_XKB }, + { "Tajik", 20368, 87, PLY_LAYOUT_XKB }, + { "Sinhala (phonetic)", 20455, 262, PLY_LAYOUT_XKB }, + { "Thai", 20717, 78, PLY_LAYOUT_XKB }, + { "Turkish", 20795, 121, PLY_LAYOUT_XKB }, + { "Taiwanese", 20916, 164, PLY_LAYOUT_XKB }, + { "Ukrainian", 21080, 149, PLY_LAYOUT_XKB }, + { "English (UK)", 21229, 185, PLY_LAYOUT_XKB }, + { "Uzbek", 21414, 105, PLY_LAYOUT_XKB }, + { "Vietnamese", 21519, 179, PLY_LAYOUT_XKB }, + { "Korean", 21698, 115, PLY_LAYOUT_XKB }, + { "Irish", 21813, 77, PLY_LAYOUT_XKB }, + { "Urdu (Pakistan)", 21890, 227, PLY_LAYOUT_XKB }, + { "Dhivehi", 22117, 120, PLY_LAYOUT_XKB }, + { "English (South Africa)", 22237, 310, PLY_LAYOUT_XKB }, + { "Esperanto", 22547, 156, PLY_LAYOUT_XKB }, + { "Nepali", 22703, 106, PLY_LAYOUT_XKB }, + { "English (Nigeria)", 22809, 245, PLY_LAYOUT_XKB }, + { "Amharic", 23054, 134, PLY_LAYOUT_XKB }, + { "Wolof", 23188, 106, PLY_LAYOUT_XKB }, + { "Braille", 23294, 107, PLY_LAYOUT_XKB }, + { "Turkmen", 23401, 142, PLY_LAYOUT_XKB }, + { "Bambara", 23543, 141, PLY_LAYOUT_XKB }, + { "Swahili (Tanzania)", 23684, 267, PLY_LAYOUT_XKB }, + { "French (Togo)", 23951, 206, PLY_LAYOUT_XKB }, + { "Swahili (Kenya)", 24157, 228, PLY_LAYOUT_XKB }, + { "Tswana", 24385, 124, PLY_LAYOUT_XKB }, + { "Filipino", 24509, 119, PLY_LAYOUT_XKB }, + { "Moldavian", 24628, 158, PLY_LAYOUT_XKB }, + { "Indonesian (Latin)", 24786, 259, PLY_LAYOUT_XKB }, + { "Malay (Jawi, Arabic Keyboard)", 25045, 423, PLY_LAYOUT_XKB }, + { "A user-defined custom Layout", 25468, 423, PLY_LAYOUT_XKB }, + { NULL, } /* End of array marker */ }; diff --git a/src/libply/ply-buffer.c b/src/libply/ply-buffer.c index 7392ee6b..e91eb0d6 100644 --- a/src/libply/ply-buffer.c +++ b/src/libply/ply-buffer.c @@ -181,10 +181,12 @@ ply_buffer_append_bytes (ply_buffer_t *buffer, { assert (buffer != NULL); assert (bytes_in != NULL); - assert (length != 0); const uint8_t *bytes = bytes_in; + if (length == 0) + return; + if (length > PLY_BUFFER_MAX_BUFFER_CAPACITY) { bytes += length - (PLY_BUFFER_MAX_BUFFER_CAPACITY - 1); length = (PLY_BUFFER_MAX_BUFFER_CAPACITY - 1); @@ -257,4 +259,3 @@ ply_buffer_clear (ply_buffer_t *buffer) memset (buffer->data, '\0', buffer->capacity); buffer->size = 0; } - diff --git a/src/libply/ply-list.h b/src/libply/ply-list.h index 2a3e187b..1dd848f5 100644 --- a/src/libply/ply-list.h +++ b/src/libply/ply-list.h @@ -56,6 +56,9 @@ ply_list_node_t *ply_list_get_nth_node (ply_list_t *list, ply_list_node_t *ply_list_get_next_node (ply_list_t *list, ply_list_node_t *node); void *ply_list_node_get_data (ply_list_node_t *node); + +#define ply_list_foreach(list, node) \ + for (node = ply_list_get_first_node (list); node != NULL; node = ply_list_get_next_node (list, node)) #endif #endif /* PLY_LIST_H */ diff --git a/src/libply/ply-trigger.c b/src/libply/ply-trigger.c index 620fa9fb..dda73d3d 100644 --- a/src/libply/ply-trigger.c +++ b/src/libply/ply-trigger.c @@ -30,16 +30,29 @@ #include "ply-list.h" #include "ply-utils.h" +typedef enum +{ + PLY_TRIGGER_HANDLER_TYPE_HANDLER, + PLY_TRIGGER_HANDLER_TYPE_INSTANCE_HANDLER +} ply_trigger_handler_type_t; + typedef struct { - ply_trigger_handler_t handler; - void *user_data; + ply_trigger_handler_type_t handler_type; + union + { + ply_trigger_handler_t handler; + ply_trigger_instance_handler_t instance_handler; + }; + void *user_data; } ply_trigger_closure_t; struct _ply_trigger { ply_list_t *closures; + void *instance; + ply_trigger_t **free_address; int ignore_count; }; @@ -90,6 +103,62 @@ ply_trigger_free (ply_trigger_t *trigger) free (trigger); } +void +ply_trigger_set_instance (ply_trigger_t *trigger, + void *instance) +{ + trigger->instance = instance; +} + +void * +ply_trigger_get_instance (ply_trigger_t *trigger) +{ + return trigger->instance; +} + +void +ply_trigger_add_instance_handler (ply_trigger_t *trigger, + ply_trigger_instance_handler_t handler, + void *user_data) +{ + ply_trigger_closure_t *closure; + + closure = calloc (1, sizeof(ply_trigger_closure_t)); + closure->handler_type = PLY_TRIGGER_HANDLER_TYPE_INSTANCE_HANDLER; + closure->instance_handler = handler; + closure->user_data = user_data; + + ply_list_append_data (trigger->closures, closure); +} + +void +ply_trigger_remove_instance_handler (ply_trigger_t *trigger, + ply_trigger_instance_handler_t handler, + void *user_data) +{ + ply_list_node_t *node; + + node = ply_list_get_first_node (trigger->closures); + while (node != NULL) { + ply_list_node_t *next_node; + ply_trigger_closure_t *closure; + + closure = (ply_trigger_closure_t *) ply_list_node_get_data (node); + + next_node = ply_list_get_next_node (trigger->closures, node); + + if (closure->handler_type == PLY_TRIGGER_HANDLER_TYPE_INSTANCE_HANDLER && + closure->instance_handler == handler && + closure->user_data == user_data) { + free (closure); + ply_list_remove_node (trigger->closures, node); + break; + } + + node = next_node; + } +} + void ply_trigger_add_handler (ply_trigger_t *trigger, ply_trigger_handler_t handler, @@ -98,6 +167,7 @@ ply_trigger_add_handler (ply_trigger_t *trigger, ply_trigger_closure_t *closure; closure = calloc (1, sizeof(ply_trigger_closure_t)); + closure->handler_type = PLY_TRIGGER_HANDLER_TYPE_HANDLER; closure->handler = handler; closure->user_data = user_data; @@ -120,7 +190,9 @@ ply_trigger_remove_handler (ply_trigger_t *trigger, next_node = ply_list_get_next_node (trigger->closures, node); - if (closure->handler == handler && closure->user_data == user_data) { + if (closure->handler_type == PLY_TRIGGER_HANDLER_TYPE_HANDLER && + closure->handler == handler && + closure->user_data == user_data) { free (closure); ply_list_remove_node (trigger->closures, node); break; @@ -158,8 +230,16 @@ ply_trigger_pull (ply_trigger_t *trigger, closure = (ply_trigger_closure_t *) ply_list_node_get_data (node); next_node = ply_list_get_next_node (trigger->closures, node); - - closure->handler (closure->user_data, data, trigger); + switch (closure->handler_type) { + case PLY_TRIGGER_HANDLER_TYPE_HANDLER: + closure->handler (closure->user_data, data, trigger); + break; + case PLY_TRIGGER_HANDLER_TYPE_INSTANCE_HANDLER: + closure->instance_handler (closure->user_data, trigger->instance, data, trigger); + break; + default: + break; + } node = next_node; } diff --git a/src/libply/ply-trigger.h b/src/libply/ply-trigger.h index 162a794c..bb088386 100644 --- a/src/libply/ply-trigger.h +++ b/src/libply/ply-trigger.h @@ -33,6 +33,11 @@ typedef struct _ply_trigger ply_trigger_t; typedef void (*ply_trigger_handler_t) (void *user_data, const void *trigger_data, ply_trigger_t *trigger); + +typedef void (*ply_trigger_instance_handler_t) (void *user_data, + void *instance, + const void *trigger_data, + ply_trigger_t *trigger); #ifndef PLY_HIDE_FUNCTION_DECLARATIONS ply_trigger_t *ply_trigger_new (ply_trigger_t **free_address); @@ -42,6 +47,18 @@ void ply_trigger_add_handler (ply_trigger_t *trigger, void ply_trigger_remove_handler (ply_trigger_t *trigger, ply_trigger_handler_t handler, void *user_data); + +void ply_trigger_set_instance (ply_trigger_t *trigger, + void *instance); +void *ply_trigger_get_instance (ply_trigger_t *trigger); + +void ply_trigger_add_instance_handler (ply_trigger_t *trigger, + ply_trigger_instance_handler_t handler, + void *user_data); +void ply_trigger_remove_instance_handler (ply_trigger_t *trigger, + ply_trigger_instance_handler_t handler, + void *user_data); + void ply_trigger_free (ply_trigger_t *trigger); void ply_trigger_ignore_next_pull (ply_trigger_t *trigger); diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c index fb0c7e8a..56c9f898 100644 --- a/src/plugins/renderers/drm/plugin.c +++ b/src/plugins/renderers/drm/plugin.c @@ -51,6 +51,7 @@ #include "ply-array.h" #include "ply-buffer.h" #include "ply-event-loop.h" +#include "ply-input-device.h" #include "ply-list.h" #include "ply-logger.h" #include "ply-hashtable.h" @@ -94,6 +95,7 @@ struct _ply_renderer_input_source { ply_renderer_backend_t *backend; ply_fd_watch_t *terminal_input_watch; + ply_list_t *input_devices; ply_buffer_t *key_buffer; @@ -158,6 +160,7 @@ struct _ply_renderer_backend uint32_t is_active : 1; uint32_t requires_explicit_flushing : 1; + uint32_t input_source_is_open : 1; int panel_width; int panel_height; @@ -166,6 +169,8 @@ struct _ply_renderer_backend }; ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void); + +static bool using_input_device (ply_renderer_input_source_t *backend); static bool open_input_source (ply_renderer_backend_t *backend, ply_renderer_input_source_t *input_source); static void flush_head (ply_renderer_backend_t *backend, @@ -884,6 +889,7 @@ create_backend (const char *device_name, backend->loop = ply_event_loop_get_default (); backend->heads = ply_list_new (); backend->input_source.key_buffer = ply_buffer_new (); + backend->input_source.input_devices = ply_list_new (); backend->terminal = terminal; backend->requires_explicit_flushing = true; backend->output_buffers = ply_hashtable_new (ply_hashtable_direct_hash, @@ -908,6 +914,7 @@ destroy_backend (ply_renderer_backend_t *backend) free (backend->device_name); ply_hashtable_free (backend->output_buffers); ply_hashtable_free (backend->heads_by_controller_id); + ply_list_free (backend->input_source.input_devices); free (backend->outputs); free (backend); @@ -1236,14 +1243,12 @@ find_controller_for_output (ply_renderer_backend_t *backend, if (!(possible_controllers & (1 << i))) continue; /* controller not usable for this connector */ - for (j = 0; j < outputs_len; j++) { if (outputs[j].controller_id == controller_id) break; } if (j < outputs_len) continue; /* controller already in use */ - return controller_id; } @@ -1744,9 +1749,18 @@ get_input_source (ply_renderer_backend_t *backend) } static void -on_key_event (ply_renderer_input_source_t *input_source, - int terminal_fd) +on_terminal_key_event (ply_renderer_input_source_t *input_source) { + ply_renderer_backend_t *backend = input_source->backend; + int terminal_fd; + + if (using_input_device (input_source)) { + ply_terminal_flush_input (backend->terminal); + return; + } + + terminal_fd = ply_terminal_get_fd (backend->terminal); + ply_buffer_append_from_fd (input_source->key_buffer, terminal_fd); @@ -1754,6 +1768,34 @@ on_key_event (ply_renderer_input_source_t *input_source, input_source->handler (input_source->user_data, input_source->key_buffer, input_source); } +static void +on_input_device_key (ply_renderer_input_source_t *input_source, + ply_input_device_t *input_device, + const char *text) +{ + int len = strlen (text); + if (len > 0) + ply_buffer_append_bytes (input_source->key_buffer, text, len); + + if (input_source->handler != NULL) + input_source->handler (input_source->user_data, input_source->key_buffer, input_source); +} + +static void +on_input_leds_changed (ply_renderer_input_source_t *input_source, + ply_input_device_t *input_device) +{ + ply_xkb_keyboard_state_t *state; + ply_list_node_t *node; + + state = ply_input_device_get_state (input_device); + + ply_list_foreach (input_source->input_devices, node) { + ply_input_device_t *set_input_device = ply_list_node_get_data (node); + ply_input_device_set_state (set_input_device, state); + } +} + static void on_input_source_disconnected (ply_renderer_input_source_t *input_source) { @@ -1762,6 +1804,37 @@ on_input_source_disconnected (ply_renderer_input_source_t *input_source) open_input_source (input_source->backend, input_source); } +static bool +using_input_device (ply_renderer_input_source_t *input_source) +{ + return ply_list_get_length (input_source->input_devices) > 0; +} + +static void +watch_input_device (ply_renderer_backend_t *backend, + ply_input_device_t *input_device) +{ + ply_trace ("Listening for keys from device '%s'", ply_input_device_get_name (input_device)); + + ply_input_device_watch_for_input (input_device, + (ply_input_device_input_handler_t) on_input_device_key, + (ply_input_device_leds_changed_handler_t) on_input_leds_changed, + &backend->input_source); +} + +static void +watch_input_devices (ply_renderer_backend_t *backend) +{ + ply_list_node_t *node; + ply_renderer_input_source_t *input_source = &backend->input_source; + + ply_list_foreach (input_source->input_devices, node) { + ply_input_device_t *input_device = ply_list_node_get_data (node); + + watch_input_device (backend, input_device); + } +} + static bool open_input_source (ply_renderer_backend_t *backend, ply_renderer_input_source_t *input_source) @@ -1771,16 +1844,24 @@ open_input_source (ply_renderer_backend_t *backend, assert (backend != NULL); assert (has_input_source (backend, input_source)); + if (!backend->input_source_is_open) + watch_input_devices (backend); + if (backend->terminal == NULL) return false; - terminal_fd = ply_terminal_get_fd (backend->terminal); + if (backend->terminal != NULL) { + terminal_fd = ply_terminal_get_fd (backend->terminal); + + input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, + (ply_event_handler_t) on_terminal_key_event, + (ply_event_handler_t) + on_input_source_disconnected, input_source); + } input_source->backend = backend; - input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, - (ply_event_handler_t) on_key_event, - (ply_event_handler_t) - on_input_source_disconnected, input_source); + backend->input_source_is_open = true; + return true; } @@ -1804,12 +1885,28 @@ close_input_source (ply_renderer_backend_t *backend, assert (backend != NULL); assert (has_input_source (backend, input_source)); - if (backend->terminal == NULL) + if (!backend->input_source_is_open) return; - ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch); - input_source->terminal_input_watch = NULL; + if (using_input_device (input_source)) { + ply_list_node_t *node; + ply_list_foreach (input_source->input_devices, node) { + ply_input_device_t *input_device = ply_list_node_get_data (node); + ply_input_device_stop_watching_for_input (input_device, + (ply_input_device_input_handler_t) on_input_device_key, + (ply_input_device_leds_changed_handler_t) on_input_leds_changed, + &backend->input_source); + } + } + + if (input_source->terminal_input_watch != NULL) { + ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch); + input_source->terminal_input_watch = NULL; + } + input_source->backend = NULL; + + backend->input_source_is_open = false; } static bool @@ -1829,9 +1926,30 @@ get_panel_properties (ply_renderer_backend_t *backend, return true; } +static ply_input_device_t * +get_any_input_device_with_leds (ply_renderer_backend_t *backend) +{ + ply_list_node_t *node; + + ply_list_foreach (backend->input_source.input_devices, node) { + ply_input_device_t *input_device; + + input_device = ply_list_node_get_data (node); + + if (ply_input_device_is_keyboard_with_leds (input_device)) + return input_device; + } + + return NULL; +} + static bool get_capslock_state (ply_renderer_backend_t *backend) { + if (using_input_device (&backend->input_source)) { + ply_input_device_t *dev = get_any_input_device_with_leds (backend); + return ply_input_device_get_capslock_state (dev); + } if (!backend->terminal) return false; @@ -1841,12 +1959,64 @@ get_capslock_state (ply_renderer_backend_t *backend) static const char * get_keymap (ply_renderer_backend_t *backend) { + if (using_input_device (&backend->input_source)) { + ply_input_device_t *dev = get_any_input_device_with_leds (backend); + const char *keymap = ply_input_device_get_keymap (dev); + if (keymap != NULL) { + return keymap; + } + } if (!backend->terminal) return NULL; return ply_terminal_get_keymap (backend->terminal); } +static void +sync_input_devices (ply_renderer_backend_t *backend) +{ + ply_list_node_t *node; + ply_xkb_keyboard_state_t *xkb_state; + ply_input_device_t *source_input_device; + + source_input_device = get_any_input_device_with_leds (backend); + + if (source_input_device == NULL) + return; + + xkb_state = ply_input_device_get_state (source_input_device); + + ply_list_foreach (backend->input_source.input_devices, node) { + ply_input_device_t *target_input_device = ply_list_node_get_data (node); + + if (source_input_device == target_input_device) + continue; + + ply_input_device_set_state (target_input_device, xkb_state); + } +} + +static void +add_input_device (ply_renderer_backend_t *backend, + ply_input_device_t *input_device) +{ + ply_list_append_data (backend->input_source.input_devices, input_device); + + if (backend->input_source_is_open) + watch_input_device (backend, input_device); + + sync_input_devices (backend); +} + +static void +remove_input_device (ply_renderer_backend_t *backend, + ply_input_device_t *input_device) +{ + ply_list_remove_data (backend->input_source.input_devices, input_device); + + sync_input_devices (backend); +} + ply_renderer_plugin_interface_t * ply_renderer_backend_get_interface (void) { @@ -1873,8 +2043,9 @@ ply_renderer_backend_get_interface (void) .get_panel_properties = get_panel_properties, .get_capslock_state = get_capslock_state, .get_keymap = get_keymap, + .add_input_device = add_input_device, + .remove_input_device = remove_input_device, }; return &plugin_interface; } - diff --git a/src/plugins/renderers/frame-buffer/plugin.c b/src/plugins/renderers/frame-buffer/plugin.c index 97dabeef..2ff76b43 100644 --- a/src/plugins/renderers/frame-buffer/plugin.c +++ b/src/plugins/renderers/frame-buffer/plugin.c @@ -46,6 +46,7 @@ #include "ply-buffer.h" #include "ply-event-loop.h" +#include "ply-input-device.h" #include "ply-list.h" #include "ply-logger.h" #include "ply-rectangle.h" @@ -71,6 +72,7 @@ struct _ply_renderer_input_source { ply_renderer_backend_t *backend; ply_fd_watch_t *terminal_input_watch; + ply_list_t *input_devices; ply_buffer_t *key_buffer; @@ -108,6 +110,7 @@ struct _ply_renderer_backend unsigned int row_stride; uint32_t is_active : 1; + uint32_t input_source_is_open : 1; void (*flush_area) (ply_renderer_backend_t *backend, ply_renderer_head_t *head, @@ -117,6 +120,7 @@ struct _ply_renderer_backend ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void); static void ply_renderer_head_redraw (ply_renderer_backend_t *backend, ply_renderer_head_t *head); +static bool using_input_device (ply_renderer_input_source_t *backend); static bool open_input_source (ply_renderer_backend_t *backend, ply_renderer_input_source_t *input_source); @@ -260,6 +264,7 @@ create_backend (const char *device_name, backend->head.map_address = MAP_FAILED; backend->heads = ply_list_new (); backend->input_source.key_buffer = ply_buffer_new (); + backend->input_source.input_devices = ply_list_new (); backend->terminal = terminal; return backend; @@ -298,6 +303,7 @@ destroy_backend (ply_renderer_backend_t *backend) ply_trace ("destroying renderer backend for device %s", backend->device_name); free (backend->device_name); + ply_list_free (backend->input_source.input_devices); uninitialize_head (backend, &backend->head); ply_list_free (backend->heads); @@ -651,9 +657,18 @@ get_input_source (ply_renderer_backend_t *backend) } static void -on_key_event (ply_renderer_input_source_t *input_source, - int terminal_fd) +on_terminal_key_event (ply_renderer_input_source_t *input_source) { + ply_renderer_backend_t *backend = input_source->backend; + int terminal_fd; + + if (using_input_device (input_source)) { + ply_terminal_flush_input (backend->terminal); + return; + } + + terminal_fd = ply_terminal_get_fd (backend->terminal); + ply_buffer_append_from_fd (input_source->key_buffer, terminal_fd); @@ -661,6 +676,32 @@ on_key_event (ply_renderer_input_source_t *input_source, input_source->handler (input_source->user_data, input_source->key_buffer, input_source); } +static void +on_input_device_key (ply_renderer_input_source_t *input_source, + ply_input_device_t *input_device, + const char *text) +{ + ply_buffer_append_bytes (input_source->key_buffer, text, strlen (text)); + + if (input_source->handler != NULL) + input_source->handler (input_source->user_data, input_source->key_buffer, input_source); +} + +static void +on_input_leds_changed (ply_renderer_input_source_t *input_source, + ply_input_device_t *input_device) +{ + ply_xkb_keyboard_state_t *state; + ply_list_node_t *node; + + state = ply_input_device_get_state (input_device); + + ply_list_foreach (input_source->input_devices, node) { + ply_input_device_t *set_input_device = ply_list_node_get_data (node); + ply_input_device_set_state (set_input_device, state); + } +} + static void on_input_source_disconnected (ply_renderer_input_source_t *input_source) { @@ -668,6 +709,37 @@ on_input_source_disconnected (ply_renderer_input_source_t *input_source) open_input_source (input_source->backend, input_source); } +static bool +using_input_device (ply_renderer_input_source_t *input_source) +{ + return ply_list_get_length (input_source->input_devices) > 0; +} + +static void +watch_input_device (ply_renderer_backend_t *backend, + ply_input_device_t *input_device) +{ + ply_trace ("Listening for keys from device '%s'", ply_input_device_get_name (input_device)); + + ply_input_device_watch_for_input (input_device, + (ply_input_device_input_handler_t) on_input_device_key, + (ply_input_device_leds_changed_handler_t) on_input_leds_changed, + &backend->input_source); +} + +static void +watch_input_devices (ply_renderer_backend_t *backend) +{ + ply_list_node_t *node; + ply_renderer_input_source_t *input_source = &backend->input_source; + + ply_list_foreach (input_source->input_devices, node) { + ply_input_device_t *input_device = ply_list_node_get_data (node); + + watch_input_device (backend, input_device); + } +} + static bool open_input_source (ply_renderer_backend_t *backend, ply_renderer_input_source_t *input_source) @@ -677,16 +749,24 @@ open_input_source (ply_renderer_backend_t *backend, assert (backend != NULL); assert (has_input_source (backend, input_source)); + if (!backend->input_source_is_open) + watch_input_devices (backend); + if (backend->terminal == NULL) return false; - terminal_fd = ply_terminal_get_fd (backend->terminal); + if (backend->terminal != NULL) { + terminal_fd = ply_terminal_get_fd (backend->terminal); + + input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, + (ply_event_handler_t) on_terminal_key_event, + (ply_event_handler_t) + on_input_source_disconnected, input_source); + } input_source->backend = backend; - input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, - (ply_event_handler_t) on_key_event, - (ply_event_handler_t) on_input_source_disconnected, - input_source); + backend->input_source_is_open = true; + return true; } @@ -710,17 +790,54 @@ close_input_source (ply_renderer_backend_t *backend, assert (backend != NULL); assert (has_input_source (backend, input_source)); - if (backend->terminal == NULL) + if (!backend->input_source_is_open) return; - ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch); - input_source->terminal_input_watch = NULL; + if (using_input_device (input_source)) { + ply_list_node_t *node; + ply_list_foreach (input_source->input_devices, node) { + ply_input_device_t *input_device = ply_list_node_get_data (node); + ply_input_device_stop_watching_for_input (input_device, + (ply_input_device_input_handler_t) on_input_device_key, + (ply_input_device_leds_changed_handler_t) on_input_leds_changed, + &backend->input_source); + } + } + + if (input_source->terminal_input_watch != NULL) { + ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch); + input_source->terminal_input_watch = NULL; + } + input_source->backend = NULL; + + backend->input_source_is_open = false; +} + +static ply_input_device_t * +get_any_input_device_with_leds (ply_renderer_backend_t *backend) +{ + ply_list_node_t *node; + + ply_list_foreach (backend->input_source.input_devices, node) { + ply_input_device_t *input_device; + + input_device = ply_list_node_get_data (node); + + if (ply_input_device_is_keyboard_with_leds (input_device)) + return input_device; + } + + return NULL; } static bool get_capslock_state (ply_renderer_backend_t *backend) { + if (using_input_device (&backend->input_source)) { + ply_input_device_t *dev = get_any_input_device_with_leds (backend); + return ply_input_device_get_capslock_state (dev); + } if (!backend->terminal) return false; @@ -730,12 +847,64 @@ get_capslock_state (ply_renderer_backend_t *backend) static const char * get_keymap (ply_renderer_backend_t *backend) { + if (using_input_device (&backend->input_source)) { + ply_input_device_t *dev = get_any_input_device_with_leds (backend); + const char *keymap = ply_input_device_get_keymap (dev); + if (keymap != NULL) { + return keymap; + } + } if (!backend->terminal) return NULL; return ply_terminal_get_keymap (backend->terminal); } +static void +sync_input_devices (ply_renderer_backend_t *backend) +{ + ply_list_node_t *node; + ply_xkb_keyboard_state_t *xkb_state; + ply_input_device_t *source_input_device; + + source_input_device = get_any_input_device_with_leds (backend); + + if (source_input_device == NULL) + return; + + xkb_state = ply_input_device_get_state (source_input_device); + + ply_list_foreach (backend->input_source.input_devices, node) { + ply_input_device_t *target_input_device = ply_list_node_get_data (node); + + if (source_input_device == target_input_device) + continue; + + ply_input_device_set_state (target_input_device, xkb_state); + } +} + +static void +add_input_device (ply_renderer_backend_t *backend, + ply_input_device_t *input_device) +{ + ply_list_append_data (backend->input_source.input_devices, input_device); + + if (backend->input_source_is_open) + watch_input_device (backend, input_device); + + sync_input_devices (backend); +} + +static void +remove_input_device (ply_renderer_backend_t *backend, + ply_input_device_t *input_device) +{ + ply_list_remove_data (backend->input_source.input_devices, input_device); + + sync_input_devices (backend); +} + ply_renderer_plugin_interface_t * ply_renderer_backend_get_interface (void) { @@ -760,8 +929,9 @@ ply_renderer_backend_get_interface (void) .get_device_name = get_device_name, .get_capslock_state = get_capslock_state, .get_keymap = get_keymap, + .add_input_device = add_input_device, + .remove_input_device = remove_input_device, }; return &plugin_interface; } - diff --git a/themes/spinfinity/keymap-render.png b/themes/spinfinity/keymap-render.png index 4f8c459dae4d06bea19bbc844260d559d21d3df7..91a3eec9cad505470fa7c5494b2456099dbde0cd 100644 GIT binary patch literal 71852 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 literal 26108 zcmeFY`8(A8|33VZt8^u#5?O0f$d-K{6%w*%->OOWbs7u?ZOED}WV;ZujeTEB&B!)c zhpaW07)*>Y7{mS2_5OU`_kADtA8`NheRUkwfid&k&d2#U&-3}($UvLr6!$3r09bVH zYMKDRWl8Y=(kD-Ve@CN+4#0m-JkrzF1P+h>{L@yH1OS%+9nD+!12R{q{WEPXkm?7x zrkc_eu^VsQtz>Fi-X4#q^JB7Ib^^drL$41O2%e6s%fqxY4l>4M`xZ3Ap^fmuKp8E>6lcfUj z;49e|KGrj`8wXhWnPzS5UxPq4<0(>2k8OjU69v7_CKOTa6}V$FJZD;W6(rh4|MKA_ zF;>>oHnrFMXxmVN$dx#PIN(RI=YdJM)>+4IaVGFv*!p~7VHJSxcL4GT1wLyls|l#O zdT24O(Ydm0$u|q_P{R3E>An!kan0iU+ICwo##FOgsS?dR{5}Wn2-OJU&FV*9} zxzqHLKh!$Qce$v|J@2dZYeJ|_;#A4-vMP=XZUZPVc^?lGc&eO5URqpipI2(lANLc= zE4x-D=3j0A&oNt+M#ni$-|31`G1O4?U%4N5=4iOa<98@{e3=zly?wFl_Qg^G!TE9W z2Xe3n-%CaNJgZ+cnXR3ml|=1dx2=YyB?d~CaJMJC09c()P;l4`R~^R8`~&h8w|~|> zSCtR$GuGP~Zxwq!Xs~`as|vp~PvG)hbwPZEoqZWxcH2slTQ?JN;b)DUY>vV^SpH@} zuuI~`zQ3WVo!w!NOR(U&p-wC1E(d3!bEe;Lx zl-_8x&@)BZMg*q7-eWU1`2b@(aGGSi%PLQVEel5-aNWGYCk#2o)XNKjzTF=RY*5oSN;T6gf#-xg6=ZqJW* zAU##af9%RM>n5DMj5W~I+~x2ve0{gJwRPW!9Vr+#$>_{5&OB!U*&Mu+zkz;IgUssX ziaO<}A6>6l_eJIutWNvSO4xla$W<>ygvJxDc(NeGfX_a`QBsQ!A)7aW2B7ldO(yMu ztmCl0RG_tC)OAhd&9$S&|MxLoo8WH|g1kG=z1aA*JrDlFdhuIvAfjUlHq_Is80Yo( z+#ulj_XE)|9!AAWkPaz~t!oU@sdRL&1b<2N62w#|F_^J4D{xXdYhZ10aWQ07N(>^o zVn0x%Z=Ifl**pv=WA0%_=x+-CkOC1VPj%ey(oifeA@|n*p0WOGjx!11F_T|V0rHv^ zgLi&EILw?9f<(~vs!MrUS>{*}>eshiy``n4ip`6r7pw_S(luTvWwtJhJShhr3{H!0YNqe0tz=XeSC5MR(f(st-Ej z8yLo~L7Ygl9fucvcsu@?_Uy?2dFHk23%b%N<3vF=74NxDqR%|T`}s6XppstbH1_|w zN^3K1Gz|E{SuS{LyMP>nY^+r1)bi8pw%XdQUlS7(UX78tF-Bvx&e5hes`)p}gKDu% zkD~{%jS>BgvJ~uXMWGYL%HU#^MW!t*EG$KJM{CZ1X7EyC?7Rr^y%1(0CMkJ%t7c+f zCp+K>DTHZOkU+9LK_Z{T1>#u7c*@U|f%VPEYII@`WHzEu|Ms~B~ zbwr6j6``D+NZ=sg8!lEV1DMj%jP!X~Ftr05QgKQAkC0Mg}dB)EHTN zw8;73j%f%wl;e&K+Km%oF88VF%e_^bU7@M@u9EdCB-T=%9Z3!!>0o0BU=Iu8f(^)H zR2v4JgL_PEHSZfa!>)i3k<3W61UFTbo!^8b54gNstskmqMSvN8?8Z612(9}zt2pDk zexw;xl46{?Bt+nLzkp}qtDk{L_t5F#|E}l76c@v*I=*{7Jv|mDRL``}E@RSglH%gi zqkg9yUsV@s*<^nIdGS@%_k1uv*E_@cqR}>BmX+N}kpE zzib=dDm^W+pC;|5eXcgp9QgP~-B!Ib9g`;c#V7cAZ(6WU;=BQ56Ef>_X7@hT7wU1g zcVG7H;fpGX$}1ysUz1*9kLqC9D*3Ki1K+iWA)>Xs8qp0oxE;|QPcK};-}Kh*D~4$6 zZM{f3RGb#K#e7uW@&YqHBeln{^WT$6K;+8%QP(WCxnS@u1|L62*U;3wf0}3n8H#i~ zXIyvT!Ug%LZvCJNt$7b{{~Trp_ByG()Y8;EuR2x**3=O9iE2kLUTo^IMwtJwBoK__ zBEtY8!<2^R`ZU$8qJ5>L6k6>=z?7E8q(nxRRKc)uay;_xJCi9XDV)bFi7MGTc~$lU z!wwa`1J~z$UcP||LGs*t>Wef#3+nh@4%;1BECt^i2w|Nw$D|4U7#GlS@QT^J$%}1p zZJ5MQMt*$z|2l2IVh8Woa?@beRH~u`Vay0ycvWXJ9^fBs*d>DV8r2=oV9Pcq3pfFa z7Mjo}G0XF@8UG~{AJFdc)92XrPsPHg?%NJFd3(Tr-RBc0GTLQ)t{&hbivaPA-xz+g z0P5!x9C%>c7h&}b0kx5}rXAHRou)u*{pJI{D8kNP>_~wfDx33deO;v-`PYsi+`Wec zaM48nyJ(vaCZF9EfNFbm=_ek>6L88U&$%?UZW~{RNzv-AI>&A-?>GtKx$3FT>7fp{m?p25=>t!%uFcI& zZI!HnRPXu1yTJIdIV<2`;?8MJ&7`|Fp)qkqxp8Y&wzjQ&VIBG&D?os2%XG-(n+kQW zhYugxy;c10$B(@Bs=q1-lBd(9w7w^-%!zhk%_@=8Auw^I86!7cE(HprL`p{=e0~x8K3nof%{di>)$F)r%@fgxz>5AIU8REz$v00+X)WL zkXkfP`Ab_ThcF7*&!C!^I!(3aRpT$~pZB0tj~z6RHCCTg@`FHnFt>wNM3y-r zzV={I^bE8CF=gz!e#JEw286i_cJlZ}ObhAQIp%)+d2G){BR-KqixE zzMpmfOG#z_E{i?dbld|zcx`ac>4ST&T*q2K(Z$iOW}+26>PnydN8OeUuxap|_KHC| z&Mqd2o-CIJ7wrtTr>Np}H!T>WG2bPaLUu_qUo5KHcZfwW{9EW>h2s)H;tYWd!4jAF zUfcd6{eDv4+S*z-yqw827XlbCdb5N%00AwLvM1;UyjTY&?}m{=p}NVn1~w##6=;j5 zQbk2Y`?p@8G#@L+5wx|9pQ0nD7&=7&G~@3M0III0Mki&+d+3G-Z`%Vx3}I4Fg22hx z1@{k3b6yAVWSlz_M(XS9Q{A6WGCZJXs|9%m?EL-_;isHc17u#%8gzkFGjtjNAci!K zy0&$3)g(T|^9kuB21RwJdavHnjsT`wrace+6L36O1hhUSRw0gn0>+Lt`jTea*5usA z(kMi{y1wSRV@#8HSS%)OHnKay+}zwAuYv>N`COP#baxw23y1-Y?}wLLpLlw%+i0{C zmjKT}R8z;aX9dqzyP%E%N#a7YdYrAg1;ftk$l#}be%p3FyrI0E8bBu({7&iU_lItw z;}15{_6=L6+j|#M9cHrMy$h5GtMMsQ-F+st$X9Mo%tu4J!prcapFe+ojlDx~f%wXY zWgJU8@f!~7Gqf-_pOIBipys#lo2R5gHWffb_2NFS!HZQtUfD)F8ck5fWP_Kw^VN^Z zc~~`_#MG$nUd=cjQ@S%Rwk=e^vte?$9)?!-WX9h??}@mjo0<={YQ9ep{Q5(6c69lv zL3&0;%aHw+_Rhd%uZ!Q3D4D=-82~rn+wLmnu!rc~;$&!)3Cked(v$!=z{)s&1(M3J;|1%}0{bD(w%ID~*lA_3N z6vNbo&RAgIQd0t)w+cDTyeoDwrQu*?#J*H{`xr`1ZteZ$-By-PhojD|ebil^G~?hT zq_e5Rt|U~qoB|H!II=^svJAO zZ<)Cby1jSpxzc&puH^KNzY(XavA3;cWoJ~egwAJ-62rVAL@4l}HimEed^&Bls6b%x zN-8`4;SXhVGVi?<#Jg~$5~q7+QP+L7!x>XSA$_=rnq#lDxZ}guP3aHNq-+R^nFrP) z|66fF&ENa%y9&|=C3%Dx1FF3S%JbT1v z`nkxI8L)t4*p!dS?9DE@@{4c56-MX{{-hbQg8R7li#j)ay9)smYXOcwm2qIU=iX2| z-b9jfxx%9AT6v%1bJFJfIjEV8gFF17txp-qaG!r)An8WlaZb~|o)lk5JRw}KF1PST zA;gB_#kVQ^J^Oo&lOge2u7jwjn3ljEaG z5n|Q0UA8&O;BBn-@VNHtpxo_aJ0fB64c6riVCnV)41usa`98z_848DmE0(C#4y)|~ zl25`zsXcybB}eMp14}~(d+eHeIUI>TD){SDO>ptBh@y~%OJSkhJTH$C7Bx`Q8U<@m zcNTiyE!*-}A51P0m0Bx4BAO&Vg`cKQe^|ypiRJ4Q{b%POB1D2L9Jn79vy|NA2cFm` zJh2!`xQ+3?7I!WX!RX#*b(FiR$wxj!2DTwm^%=0lp7BlkX zX%aP|21hh9rM2`BWs_Sy;-)9_TxKWci|yDyL(3rcIcr`SMCM@iF709Kzr{CP-x2E5 zD+26EZoAOzKI+SV8v)Pg==S1@rrGOz6S`we$~aROt0ly~k>=QzM|Jxc>+d9xt%0XQ zrA4wLHt&~Dmcf#aJXA&d^sSjgb3xA>f;95ybVul6xm=lHh4PcD3&90SqN3!{tbC5Q zhxTx`atYxUwx5azk^ohge(+hnwDul-K4>-X9;?~R@XtJ!IhcMVvHo7dc2>Wf0C#rX z&!B7$;b1kSL)SY6&uE;cw|zEK^#xlxw~#pOvWPdI z{eb-RTq&^BsU#A=z-^ENFO;D2g&($6=w@3uEFf2D&<)k5MWiHcvD9VCzu+u)r#Wqs z+U&1Sk1Qi_BNuVBkcutdd%tjTl0mInAIYU2TUTn6Q_NCA>q!p7)t+J_9R*kd|Co=3 zJjt?UyD&DeZjP%pYP)Dr%A~V@|LgrRg+g(0ae9tH5gZzpKC*ZYa6jQ~2rx2Bvp02e zCC#ue0gC9s%Erb38D6&=Kxf1dW4xZ8UV~xc{1r@E#umc+3E=*hH&!EpRV~QHW%(iq z^rX)xA-*(09sAgk*Q1DtBtz&f6?_d&@#(K`q70c2VwUL!B(;W>1L~ZhPIeX8PNsqF zq(IzWdq}E72+~Fq`VuC@7bAspud_C|_S1F=ma!0EI8*ts3w$->+_g3wF=WvLm?|7} zR`mq|YX&UZlI#f`Cmxt|bg*>R3r7va5_Z0TsOAtgpDg$lrZr!#XyQ%H1Re}o^)--=@!2;5 zNM{qy(V#yKAihPyQT#mEjgC6&@(u;emfvDfYc`w0H0Ju7>fvuPs)(K%sXF8kbX`du~g0ZLX`SD2Jh;~sqb9yw^D^ER};h#cHod0 zymKSV3>zw%4P-G>e|6>njelt?r_xW2F0@nA%iSi=N-kx-g0TT>f;tjXm?=n`vF19< z+)Qt8FWYR56OOLn@%^d(TRw(y5)6q>f(uM$f5Q!COVfq4Pc03d8&@i5nl`eMfNavY z0?dnskwBOkV=6>CMeyr{qV$=`$?c+P(we{D^*Fs#_ul2Sf^85d*wnCwscg|#@4@=g zLH_pi;lm$gySuxkz9D|skVHfMHM!ZUB{9a<`lRsJdB3c{^LdZ=qUejr{XuZ3Nerz8 z)NI8#fl)r%+AhdR0)4VcU$5YN^b>Ut4t`i(_`W_iX^c$iyYLEdu zuW)6T%AcxaR=i57$lb5x(msRtPw>kwsG1%M$OLwj3~YuaW2DskH(Ht|ln1!?%-;Hn zm1 zxRFr=uXbP=c;`H9$VxuYUm2r?i?lYJ-SaghgHb|1%EWt+z!n3%vbWR_EZ`?I< zAbOpji72n;TMZD`yn4(U_XEL#-j@3dSs|joR$^R*^(osuh%hVZyF%O$mC80%oB`F3 z7uI8bY%(jBE;dX`_k@XX#*k|_jfg*cf7i)NYCc+?(2e`6YNjXg+urwEUu>Ra>cMlI z($0*jZ2R~@cN+&ZRGp$u)}hVh*X_O{3d?34bOxf(8Wn3^@%ZAEqq?ACgooOsAYaw9 zX+$ejm=Kwh)w+Zt>&}X_6UqbQTJE>^jM3h%2rRS-m4OmNxYAQ5cZ$ATA6=Q~Bx)n@ zD=4^RrFy`o9o*+cu*HK9O=^Co2uPJn&o(eP`yJ9(pVTzTK)12qt{45{hY)?-xKl53 zl7@y7dn+X0N2R5tkl)3bF1RVm&94{lQ&WPB5Vs~!mmnks3@`nPUeZC?kTfOfZ56XV z!rg3Rm+R24EhoC3mjeX*loA5vfUeD#Gr~;DJm!mza%`5%2U_t zSbwU_xpmM6Lca>EFO;$IYnl=MB5Vev-~>!7NnEj=a2otN;;Y`PJyq@iwJw%YCb?kJ zKQBltug~ACPJV%}`d;Qfzfv=GqKvPiYQbV+mq#3gQ2rhW2Q0#cW0g?|7ICww2{+>O z;a9}y)l^{VLFT9n_tHX7wNExH0d~OWoiPkZ^mduxJHj`+Zt<2>kRX(bFICef0huRC zRur?ERv69ALz2lc(AW`aO=PorEV-WtudCqEW=c>^g`>_!o!#*#9m$G zDlg^0pom=BuCD?>ub3Y$h&V3$lpJ2V%|=CV^$jzeFi9?OR>O_ zTK6wD^ec~Xkt0y*v{#Y$us-``igA)IvfOw>eSL9|nuBzv{UUY))}!TM{}x0_s*y-5 zn~fc9kYXKq{bhZ27oK}63V&wa{P#PPK{PjK%O*`AZu1RxoM7=pwdf~(-F>?666+Ym zj62lu2qZ(V-8}Ojki0LST|S?-LNS+rHHK%sIs-E3cQn>Ii=*{6{6~AcwwXw z(Yk;zV^ASeKo7wyxwWvi)pl^$7P*pHAB41`QT5l!r#uA0FL+64;W?dy!{fK>&eBz} zK~MIyIN(!S2C(9_WGNO%C#ZPHB`g_srGk#*3J$yIgEBvc#hA&zXJvpDe&n z2vmSDi>AWUx3gmZ(CEB}A=sZj=vs;4`>f*(9 z^cdOG&U&xM3Q1GRkUR6eY5?Z$$uKLF{Wop#3rLmCirvzeSEfXjLp@=vg%UU$YUdux zy`IJn{R5XwC|v3-Y;)Cv!?*nLG@ljkDcrpdZ#mM3s{Z?rRvVwTSr>*-+a&Aa6PkH* z;x=2GY(5@p&o1UL1{6ku6!aCa$9aXn&SkjJ4G5O4b19FU^6#`6jtzGh= z2x#%1?^GYe=sZxj{S^?_6=YjD*5+XEVZ(<8XJAoUQlHsO@?X?r`AuUF?VaZDC zc>AC=Q9Rl%=xmr-bTeopHTkW5Pij8QIvY5}ijF;k*sEOwyX)RUEnl?csvkkG3iQ{HVZlY~-2Q7VMn?f8bZwZ1;c44G5Y62|A%JpKIqE|dHp8_zdx?-_zyhJu=6HlY_Kc|Tq? z((1cn>88E#P>D$rR%c~3P`ByJQ~9o|d$Sj_um1t|#<3^w?8cs_Dca<*fb&HaF%|0H zzm_9*2fjSvSMRdT;zrPVd`l+LbNeZl^<2J=7$2H{hB0 zROo^CEStGm+iK9gDRbL*XeMS_?Pir)1exTxG{9W*hb8~m*pQB&7ZzZF{dA-jk$77( z*;rpDV@sIeT(CrAFaF=;2mGtK1*+wLOCC{SF|jhnZ=o-KR{*M|7WIscwJVL%n|252 zyoa`r&*u>M%`j#QiY~Wi7B_WEu6t%6R*RPfBD>|levh-$jp6-aXD^H9d_2(V4~}M7 z#ebcb5_Y1fx-Vj{IYM_CHD2;P9*w_!|ME8qZwmS&q7Bqjp5v3F{6-tc85<87!ctZ5 z@OM-blpKGKR(n24^TFx{?W=LGFLgtHI~@ah@Ly6FU>-Ay*0iddyH28JnhSxV+P8^r zPH}iV!suzHo<@!k3Cir!MmRHuJG@SGXIZ*uCOcMVCCpFt^UV?=QB}TLZ6GX>G@Gx8 z5;@YDMJ(~VQ>k>tx9wa?Kng_zUM^{La9SY6?dqKms`fbeRMX~Y?Tmj|D|N#%v@qw& z<&iG=y+Z575Dgxu>m{42YN-eVavSJcd5$bUMXLqxcpsY!0_-DTp^87Q1BWB7bpvvk z?r&^Wy;kiyiJ1}*uhsTeS5V*j`zoyN3r$T^;-|TyME)bYTLzagwr{DKYHxQ_7SUz< z6=GB);`8dAvLRU1nBhB&#QCwR0Rma-V9i%O)nhirj-30$O4NGMUyOfAm+13qA*^mw z^;_NC<#L}*dB6Mft)umr^1H0>#^OXXw5$12SCF5+Wv>yH?eT7ksBEGHHH+j#ZiGt8 zP77rV;g5wz#G=SEsbjENrJ|?PE#l_5wmkBZ{NjUPbuYVf`EyWtZTd+`M@No@oP6Iq zz0FmZjzB-CEiNd992YftuW5jVhvGW1H%)CHf!51_fBB(Yn{Qf#a1k(~oAT(`nfI0Bc-rhbWIdV#t z;^T1SveQ9+2SUQ0X>@cnr>60iK0u!KAZpF)C=QA6FQP!tD%4~J9=9T&S9}t1wdjmO&>8e zY^w){mJ0gIyTil74uCiIR!;7Z9i_-0oNjn@n_j~|e*w0E%LOFMju5&K!&FC$%c;&; zhJeg2T(=mJ((rZ(I6I;B=@_4 z-bCsz_;Nw&K$%0w0Ua3Is(;-L2ZKcZ;xB`F9h5AE8Bbh97|b^f%&=Tt=mpf<)|-jz zncS^=p-0K2P+n;84jhQ{69dc6@j0HbxVTLI* zd7H+{Y*tqUTgM|1R=r#&N#FdFaA%r`z7Dj$!8*IQ@kGp6m0^sOzemGlOW@Iz&y0gp z&iX*lfB2~Oc`?kXYm4;aB&h*hk%oy{m*K&T=l-kX8-*-9 z^84pI>(>iK*e6&Y_NmJrh?^R#(~#5WFqa4uK(ET z{xy3NEJ95SC&L1ZkY9w>ZFL1NJt~c3dCH2h$|`(nkG{dPw0xs|an@u0eXgolkiLru zGvDXj?LCRXff~7b8?N}I9KzGxh17;vsS15B8BA-yIIY*$JF|^a$~&Lf0`+TrBB8)c zyYlNl9*c_hDXUoB!`zz zz>9pB6(6+2d#<5Q9knpG7F;P-t7@)x(oPdI%5JgMX0QI+?v#s&p^J+WcEZi(boD>-_Hl0zgoef@WJ68Qy}v5!b;=t!|GdPg3Es@wmMWRmr{ z^n<{=Ak?#;PCFm$M5QzrHUhH=16dV?ly;OaHQrr)7BRiz8eMJI<6di?eEnoCTX8=+ncy*^#Q^b`ip7R_HeQi_3Cxz0TGZ>1L5q zsSDyx$K4d`cu6I_q5nLe(m*qd{Qzmd@O^a=o|bQx*g~sV9AT%ShVGt^vUt)T5$;qj z{BE`inF-oXaw&{sJ>;AC=MlA-uT(CLT(bEDcS9b2rX}~mT4NqkaMGtZN9gq0L_3;* zXbU&}IGY1UmbIy6U=g10*3aRR+@8@twIeN9w(YK-M+Y^0*=w?RdN6fIU>eh`uSK69 zlAXdnX%hGmwDx9r6L(7~-*MXVSEyb*w(SIVdbl;eUfy&a-gT$V)g|^-D(Yf4S8>h8 zvhWg(gs1Ll6`wl}R31@%PyyuHX6S!HE(QFy?W4P2XwEzHV$$HIUJh1PR!E1Hw&k2# zn)csje`IB3*vMj9AK#mDVFqRBDlMik5V1lTcRXB&w|zQlT3ds|r54wU^=YwEOWA=d z#l2dODvR$zp&XIay{&()0ev_esVjkbOPGBki+^M_1kVZVd+k{e6rq>h${@an?RZIj zvrj;nxJ~`4941(W=(IiTy?^R+rKQT-PLC6p_T(^`S%FBfe_#~g`JLeK ziWKk}Gu_TUN5goEFffUo*f{lB-Yk*P%u zukQvzek#V%ETP2tDQvyOk~0Ur=()SC*R3qms7aQTMc-)z9(6+d#2moO*9exTqg+&s zRNLQ`l8ig|_EZ878$l7u5Y)i)sm;U7!QQrsS8OLkH87yw!xq)eG&G4x$vJN627hlh zVn2K~XhynITSep?tPe~RN&z9Wlh+{ehIHB_xN4;6U_VxaxKddCqxzw^>)qx@FbS_r zDXjouGWCc>5AOG0kHTI;C2M`hu$HeevcVz>mY^JzuIIR`b4pxZh<8QECTZQAq89<# zq5g@cqYDow+*5T(CZAam*g~1IB_* zlKV?OxwR0)$j#5_odc#EWDL(aNwsWPPzSA@smXnssB+MHz5-{bwJXDL+mh2Ea?y$4 zY_T|@%kiysrl%g%l5;<|h*C&>1Y2vGYW`pCGlRXmkIBkx8<}5APaxLNBOP@yK`pHV zwcE6;g|aQ>vRd){U&>|~{s5VPSgSEhw{WK2s0|?Zw6)*dkO>|^r*P#B1#tBFa4O+z z(Nysv^;18st}*;CW4_oRQaYr{k&I}Mchl260Mk(f#W<4s!CHY*uYyiu$8m4!dT)H+ zz<~Yz8+SNww}rY*snWquAs5r@Y*Uf0^&fn6Y%e6(A$A>f)-U6a%m212&|cG}tH9~+ z-B%xhdjXW_LyisvN6yj)$*wrmW*R5|-QRI6*g0Ss z#wk_{!%e9jJcTp$K7H7!O7J+J?%bO>0qd(lss8FQfu?}*^aU`OB(3%nrLcZ538tPA z02;T$*Kn`HS(dx0B1e`5i*r0(ZteyeK|#$qOn?F>`>^`l>YmKrd|SwH${P4_``Q)b zB3daY+0*q=eqa`dS!@H^cpD3&rTflnCoG!WC+pY1u%N*4-=EhDWiD`Xf;suc z3t;vg?#1o`gh?&d0Nat>`OT!3H87ZDeUxKj7ycI$lLN$5tN6h+jQp&sl^|dGz~3vl`A%DbJv^Vlnhl$KIp=| zWz92Eh_-gAlVNSVm=p)|B`;YjiRriT1s69{>j@?(hSj4Fbz4Wh>_pRu4=ctss}N-` z!K}CBqFzBJN%(HcrkZT;Sr}h1=ZXj?wiwZEK8|}{P&I&!s~SKaf$=7wl=I}l$=eHisS9d(nU+$RooMME>Fs0?3M#=>HI-Pe`HxI@gE61+e?R>t+y;dRI!AP10$C3ue{l&|W4n5GBsJ+wHakvEWO^I&g z9W==vGXtHrE3dmtGC1oh7Kr&J`)1M-(h0Xo@n&+VP8rdS9%EGy-#V#lbb`Yj<1H-6 z5TZuvy}(>fqTsFoFAo_s?^+&F^k*eFve_sIfwWCpWvQpSdGm!&3E#_?yqiwo2b)jw z^w^t1C(V!~#Bku@3!Ey3uVaXyBu}8A*ravsB~Sen5J{#qF+k5f;L<1lj5Z>>XP!w3 zu1}QY9k#_rjM9JWiBvt^KfIp9x#_S&AZ=@dx-b7$i0 z5aL&!7|Rc3O16I|nUG7J2roWT5gs~kEXui}ZW-ZzKYLzxR>>;fVwactA^3$gNu@CK z{O6i`x632MDf(t*d?WIngs6PEORl}j8M}Um-boXnh0H<)qvlFcdBY5a`Likc&9UK){Rxi2<+^0{b6l#@9n zwOHLcU-rJQLe}4Lp@Tf-X2h9{aZ2Gg&I>V-@yo4@LvZAfmgJhIa0Qe8SMh(aF>04D z8rw7!Xd9&TEu~1cV%pmKuUbs;Cnp+*vX@-Bk7&Y+u{r|6q6pdW4Z~D&ppt<&dn6e@ z_Iw6P#uq`!_;@WTGyRQpP2YcrquSO|xyr&a^1y8C%5@RZQn5qcRGI5zv9C58wgRTs zO7YfYDRK3kS#3#MXvGr zEJnbGH|N+Ke=(`$9}?9-hfcc=>-%v_pdE}-PXpTp@+sDuT-c2!A6|zOb2Lm^>M=#0 z&McqDVZ`t&p}PSfRun2kcGJUK@qhR3Dq3i@LJ|>S&T~qsgRw&nP2ew?y|8leX0va&8NL}Om`Ez9E(FMKvSvLaHZ|! zuRVB5SK&xUg-gSvmXJMs6al8yL;-%LxgG{}C`Ts@um$rKoYd6`(=El*<-KZaGNbry zz+gZLkG0p_tZiwdR;ga}b0_-7Sud-bx&NYEh|Jw!8u#>0jFwuYqbf+VC=%UdQUZ)0 z?(v2(ws|nI@dw|eqS$old#No13v(^w`%k7I(Vsk6kFV9efeB#DR76t!TIf)~!NBWW zf&v)sJm6`ws~lxTCl05<>+_?0vottBHB_m;?zu0|hjryD>CpVfKEA7;tGnxmXr1`+ z+=3=U4tgc`yh)1^mkq-D0onJ8m95vCMTC2|p8@}p33yPi_k1e(Y2=IIED06m#tTGX zT~23UUBE0#EWn@jy_Tu-g{X6bxo@WEiiMdKhNU#Vtt_1IukGX!*h6Y+H+ z-Qollm5L2)VqNi7+cBZ+2XVlcSy1bmirFnx`)o zy>-CUkF>mqt75Of1-&snD zml`Oj!pRsI5&7W42&h>=Rz$$SJbSPm&roASEb*RCN9ZLzN4*>P-2CeMbVP|D>CzI` z?VA(Nho08klM%UJGVp1XOH$qm!E_Fp=6087!F;y153fIXrGyu|k(YJ;6m!+VDOcNY;V|jh zbfD*O$kl|?@}pDA+mf7-7(3?*m^cQ^noVwm)Q`4{HZN*))tKM!BRO|uhyQ(fJ#zuM zHujvU5%YC--1sZm{0n!3w34u$ioF}i$e8VJx+xYbpM&Qpg1Gall4P6qUb<%f2zOea z3bdWT+4y6~D0c%Im|#gk_jX+Gx#&p5Jm0YiR9zo4^P589RKmYK;YN5`mROX>e6(nl zd~xv#LJ6vtveXZ$=DFEI^L+wt#F1NU^B0T2yHM8F)_c`bi-ye^piX&=9a$+=I5_P$ zT8Fo%6}LM~N5F*o3tzo@g*b|8@6Egb6Qz_a11CFI(;vsYz~6HVjOD<9d;Y_tz|0lM ztUN{xyr{H~2JNj2o$i?UDV8}oU?%nZ_8UQ+gJ$r0g@f!s8SgydzVk+0)ypd>P#{fE zXAzj+yAsE}t^GyH-GCmnur+Mh@qO57YrZ)oRw_tK(C&g7Qzs(7y%VHHTSV~mk`?1R z80QS8^_PHv^>!4E-#KPkynCVplu_ds`>t}bEZMW0Vfa>{+*osaP^q^C^On$x zD^T3soj;*;rWS%_1`}`zLWP2vH5&%ilAHG!k5s^Wv^ur08e-vdSWXHa`c|7U z-otLd*z%V;@`hNd(dk(APQMpPwx9!VktAsK*9|6Mx|);)1Tsc-xXWj#Fo3qIBtyUh zD$40~cMwRBACPJ^=U>R5rTk+=FMi*4!FRQ*(N$=n`Y3Y&_#eq-`~6_PdJ<%EwzFp* zm-5*boPn)dMDSLZXrRp&i~^#DWKyclak4d`i|8zxeFqAe&nwg|lEiX2SLND+#!ZY#b+6GTM|O??S6My-vFlJk~2`98LU~U$Qh?nx-O| zm6RucE0TESPO%O2WzUMkQb`}o(Q!c~7E@Bu@+T?|hr_Yc=dT@It5a?Cn)J8DI!EVi zCQn)Y)$8XL93OozkDG$c#4RX2k^|MZGO0x-NaDdn+YQb0T1SbLWqlszmk#&Qe=PV> zFy+Pw2OF~eWzcS*#w zaZqVlgTZ{}nxhEoTwA2!(7vK^XJeu0rDr&wh{hRz%R}MFC8odZ*-E*I!o>znF^|M? zH+z(eu!!M8eH~sb?!@o98F^TroqLG3!K=-z^mL?f*xK=qVUYeGl0`o6G2a{~NMA-9 zvVru+eV+GjdMK|2*5=`EXl82@{=I}{!LN;_BQ?!Zy_mb@n?2S#3P;;%=%Tw9pe&w( zVpq_g~ zi+pb1o>cp&zf6(ZiK03h!QP`Wqea#2RYXp}b2eyj`RO|I99>DB5%jm4fSVPA-lZV8 zWN^a{#3*F8KP}2^#o94%Uy?XzW`-WSDJfg^KUsh|8G24zb@iq;=)4q?IA2%MtR!Wz zQ1`1*d6QIwPhc33jb&#v7woHEfqs-YB>tDjxdc3D`vs#w=ugb6dh!Dzka|1XKgQu$ zqc-VPB#6f%aK805ujI zfOw4RXUN+z&b^pE^ghzZ!SHo{tkhu)3>6m<*_|x4=sjk6=Z_B^?xs?D9nE8bg-Yh2 z#02i}O*UudSAGjE8A`Jq={*}NymlhBi3|1^v@Ks?(v}bk(_k072B|Kf?bQ@Fgz`>5 z(*vmbiSwR{@()75c;Sn~2FvgnjuQ2hTKw%ex?wIl%keuuv(2?#+Uexze*%46*A4a# zL}5eJw(!8FYks*W@GrDe`a3KX{q2>7v^>WC8Pk4j)DV0vv1kvkoPz}A)I;z>51-=p znE^S_1h~*i+?xd>yo|9@McYT0*+Kr=Q6@YxbUvkMexL%__aPnc-QKJ%YwOn~s%|$n zu8atjdQ0H0bNWn{fvjqlBZ26%irHE7;XMSiFbCF$PDj^wv!M$yQqhi^-J&>9`3m~5 z;wMnA4;{NbZr(uQjl<6=TX8#@LJ^-uP$gx#ci%wc}*5w)ZE<9X-l6!w3Fyr1=_j zUAn0=VdmI zPli&2$s+YWvb8SxP|Xoup<(xcxWfZ2-TH8hlGI$qyoM-?-I0w6Rr!uEuT zdhY^4)K{K{#ckO1*z-xFE)b%GL)u)d3FZ){l%>ouq+q$v#Chwu`k$1#@ZqHc)-}te zhf)d@>g%Pih>@TP1%Yw{+Q1!}O;@vjKRptvwS@D}4Hi%X)hp__>J0ZfYjA^?64)C=4tZiPAJ-CTJ53E7xZ|GxAH?E8 zf@NM9Fx2(f8wFM7r0}*``FJHu5ys8#pez?*hZBuo!SrQt;EPC2kQR%Yr!G7EqHFx1 zSRh#;nDMS+%WxiXN_3Rz7 zu(PTGVtZ4_j0EdMCb z{LhAk>e6SvfVY0=)0L!eWzO{C+_nqet0@ghd$HUy>=K16Z#|jbBLPWJ9W=LMrXk%O=-t?ALTvFsc(Dm{xv%lY@5|t-o zQ*NFTef@>fz{T-_g1ac&-FHpwnY@$VdM*pl4U=PRG((0PmP4k$%xH^CNMyUmR4I8H zWx!Ku70IussZlEn${%_ubJ5Ye{m79$S(2qJjTUl8QOQ!aG)dNJ>|>14 zO4%Z^4U@_iMnaY`sAOa?vW;vbgNb1#WEsQEbE@a}d+zu7>-{{>`{(PQ`NuVLUg!0l zmj##^QHEE17ecSX=#csOIEvrVP<465T>Tk^-K9}j@WOkK3 z2%k<}yFB*A{N2S6jLnLg%$Cg`3%?pbhhzNe#RDGx}=06@77nY&L52<9bIYzrEnCSItQx`*aNAo&kBtiWN#9 zTzk=wrJY@^ARZ{+_-A&k_ReuNs~oq?Ct;w!>ITFQyL;TXN&@X^^opK9$D!~3W$KYf z&#AlN?Q%&tsx?%$M8x$v4`Sh*FhL9uN&r>rJ;j}fX?6$`xC zf%#j!ojL2YZr8)zR#Rk+^4`*8ri?Bc@Bo<&&KViDHwg!r#)4Lh zx+VufPc8*wA7z(;{AmHGJ*6AA15rO;ydj+(kL~oW#C8Y_mHg_oCcYFb`QWp%_!s2J z2q3D2x7tdgWFi8xd0jWkxTQv@#mmsGLUug@C~F*~0O@4o$Scr2);1aALY5R>_WG9> z2o~Zc69n%|H;+7poa1|94F=4|!Sg{FX2y-!@4-@m1{I-~5#5yfp?|dJB`79ufhr*x zx>1v12@FGw|4tkWRC)vCv4EUqCQ`+UivRrD*qi+Ngh?GJ&j+9|`GyrxZwfc8S#!SB zzj@bc^)dus1cu^CFg5_g@~%laj86<|7yx82*t=lR zS+~OD@q)k+q*oQp=|Hj_AWK5ud%JVRBc#9x!Wu{oF`fb*_)siy-4B3QnKHId)WPkz z0;)uN-?&9R3f{VuxL2PpJ&%#p-xtRqOT+nl7qUJ88Esnut)Ece;t$3bh#3&EvG9fd zw<4nA)Am=cgr-G>X+C;R0&Xl-c&&*HFxD6ozF!nL1XhL-T7~a0#qUfg5$>x13mD&S zWi(rU;1OFzDfkS=+i$8MPeX#+qBJ9<$!jH7WS$sj;y%I=v1Hg&i|U_6ti{@XsYi~8 z^c`_7uEcj18lWGL0?0$wz&!xW4qS&6ov>>QG;Hxw9Z)B7;uy;g5W9CMfI3VCB`mkA zC)*_B0~)P9(svNC-%VcoGFb1us8xJ-Nu79uEb{u{SHb5CAfTW8 zXKwjg2fKYt`g$5>T6Opp)9(>m>P|rR`0=h{COKgQJBl{-d$%DDq)4Dm? zs~tPcPCGYM>Bh{=9j!LBT<5u-P28&}{C%XGx}jm+w#5ewp4*-s&CAWLyUw#04Z@lE zJ+@%4^mV0I-)>>Y*Cd^St>E1lU@DFtJvuzZ!$7R(2UdVkj2YbwS|`1b0+7k9)D!a! zGKtyj`XOR4y$XDz4lkrtvUqVBz*r-Q69}SiVS0L6(`Oty%dVqc(xlzao!e^?H$f-0 zXAXd|Lx#=lO4P}zr_`5o7X&p|mE#Z36adC2pZq{fHtUWuBMCaBtR&EkV+am4t^U>^ zZ#w1*#l;E9fb3K+qflX6N%pxTkDkuyoWj}Ax7f&nU~w9P4^I2`cd8G#NQ~rxgx}#U z-Df#(>od6H-Yr&3eEaBw-}$Mu>e_97G6al)Cs+ zZuOFyAxO*2T)Pps1~-lS*&bZ4uM1x}Z@CaDr&i3&4-+F$0wwkCg`FFZbz-Ie8H?(Z zqpEBxc@U_5_xds0ItI0mzJReZaYN3fK_6^py~SL#(CPKmTH|O?Yv1Z8l$hg98Op=H zt;xXSg;sBm|p(;WPUEqxSn=X{Un!><-*|_vobi zK}W@Jd#ygM9~7ozv!FB*>XRbRVuhABL`XLrj%&@#%-Z|ul+d7>d`#3T@r4n(h)Mj} ziVuqC0TP1Z<8XB)x>v;&V~xy&4UbqQ2`6P!en(x)9Hvjg^{fyrJU{f&0O?CLZRpgli$O73B3Oj z#ME>CGiyH_CbJkBE!`^;V!Kq&kcMX&8XMPNpVw~5qFg4>e`(|5cO+0nQrUIPrw}ak zTgM*Y4HcNUmxU}+13b!xCW6+)kkTA;DCNl6wQnLjhtw{tRJr)K=^8r%Mq^2b)1Uj4 zeBiA|689#Ye&Gs`!Uhy{sD@wIj!TIG{Y%&#xS0IN-*6Tj^pZue?%=F4Dk3m_z9-&o zJN##%5-sh{oZDmIp5aDfXg`bPCa&wZ|5~`hSg`XD2h+g)K>aG{b;|G8c8@`s34)`W z$+yPBWK}Gjq)b2SEBU1aL|*^!ARC@4GO(|y>Dqvg^MX!5t~eDGTn_#bxxjTY?K#C(tH=ZWvb&Rg_@F3~Mz z3~zukW8DZtE)%EMw7LTHt(sYQJiQXIOND`2zQ*{ z)PbUy}6g}^pL(IZowD;9 znsmZg5q`?ezw@HPQ&MhulH!%o=4Og?<%3cuh5f-~kF}MBlEx|1~L60(37sUjJp}DkM z$-VXB$t^F=qCI(wGon&bQi`D9wS#co7)mHa-R-A7Etz2UBi_R6W>@U<9HX{v?jM&< z_M8r;lYVO$2puqaDK=umf4=$217w1l(GU-=PLTOQu5BAnPCEG0m<(`0_o(5_IGdo+E(REl2 zw=%K$2dwe{td<$?W0oZg=gqFX`f*vuhP>qxR(^*(v$LD|sfMca(eZKgeEk~(hp+r# zJ?unjiLGkh`6iOj@7Z)j#(P#r#$)oOmge-zwo=~X12+v5MXxZe%?i5G2^|EY+HCLD zINpJA7G{1ie)G_F+W-wmid>CyHsP*xW2mvi!6p#Po{MC-TYyp>{U^Nc#Y= z=h0NnI(;KMHpL*XmM^2)flS*<%R@Uvvo93jl2f>hq!uR>*VrX_EVJ&tzaE3a{yYFAxT_k#tmgr zvHymaoQo@i^lW*Sk(}|1D?OM|l%IN)%U^F1S$aY|f;Z2BQWM;>w&~gOYIQ6uG&8Gm z*k(Dzt18~-_}Rc3yCzdElZ5*`H?8kRbCrol!;%$($LHhrRHVhdxlm$Y55F+^iyrQH ztY!WNbhF|LVpqbvS?%~^t%=#@TkqQ1+rzgvX!5YekDf0{@G`*^<21w+I;u0lz=8;K z0)7%sVy0h}po*sKFx?rZgM|R0O93`=h(ZhZiq{(XX^~yM8oz*gyiK zX7@;8y^pE4V)b@syXnKu*@K=(mfOcgj@E%9MS=u4;>+7b!k3-^n$XH0^laOAE7qoH z^^QJL`IAG}T1`xHL1HH=^kYgwGGYHZT~Z_>h=_qjAb@ZyXx(-zQj2bv8Xff7YfsZ) ziMalCn@GpPmUr)e3SaIol`=vKaTJv|62PbA%CFXdwZ?Wm&>Cn$RbK?H0qI6^-}z5C zo#evzaMTYcJodldpzqTpE0qNS>V6g5P&1U!C7Rl^nFOL&Tg4r&n4?t z@Vlm1M}(GJqe}YrC<*KhI+AK|#34HV+nQa|UN+ii!B4(>JoNj=xmDt$f8mp(;stYn zPnTd*E>dAkEzl8#%c;1pa5AQro&XQWz1@-7H&v{(^8@%rmRE{<4G*nk|E4ye-2s>= zaV5xjYN`$lVN=QcqVpTI#Yh2qGc z+=XMtSHH-J$Habt8|%&U)#ki&B0Pw7wMNmo_fF2*V&s!{Gdnw(pUSA^jgAq8^Yxu* ztj-LUHgB2L`!1zLB?*bhIQea9AQyBg)yK4w55Ji>rZUeExup>L{${3?eBO;;)qj)h zvfL6f32^a36|D|Y)6P3eMAnF3d%R9k_DjqgebXLVr*v3sL<$nW5#zc)A`e*A>~{;p z?tbE@z|1Y@%cwLWchgxl(VM_TMJ;Bxr}{iu^$Brq4qJ4_h{n4-EV`Xn)R{ORrP`!X zPAesh7KW}8uPeX@^7ID&ovYnlWO<|}x}~ic=)SHP(de1_60S!$LiZZ<9((rn9~Hi9 zZStyl-CzG zHx&Q6)s&l;gS#+0t*=gVRa98=u9aJdo_FPGD_`>M)Jsb9!(2QSz>JrmFplzHvM>Ny zm=$Z|!tapXNb|krJ6aQf<kV-_O8XUEW?P)=qD`F)8i?a;|XT#uP04-5cIo39Y{6(Nj#vdLZ9wFo{u&26wl(m9A^|q<8VW1Qyn~sG;e8D1Hv+-@A5wu)s$#xX`c51t?A2mz% z<_SrXsmG4iX!VQua)~<^?_D(&JJ7jn_C)l7JDZ+sVh;3gzIJz$>ZT2a3A@U*P#rK6 zbzNAhY_p=DW#ib!`=9fJZ*UK3-!KYwpJ*L+=Ty-6Yr~7x+WvKjk_tf)qL{?NNFsHW zg02ZhXT2ZJKHZy>#GL0Evu9>V8d-+n;gXVcias{f%ZrsGi4=UMf6^EDCT8DTE4?kP z&^I(hI;K>&O;W4NAr4F7MF!6z4M3?`~9j>3*)Kd61so*nJqV9{I zrBTB2T4erky}g>Ve-q|b(YZlUL_g?#+nf^5vpGe;Omy7f-zd^;jtb(1SkEr%r)<|^ z!*dF&soR=dlgAII>8CPw7--U3HulOEfiUnomC;^c|GI-YKiZ;}J`rAbL|>|h63ltL6n_-@-1pVlJ^JUZCI{n zJ_|uJZ+_vCE((M~&XSUx7JckNrKhul3#|H!<_J8MSt7?(dLza}`rbu$S&24d1Z3pL?3Ffc%;n`p3(dcXqmb>l0JMUqr7g!}n> zBE@_C|5z-#IO(;iDeP?VcJwE&JLZ%Zlu*l0yfw8rufl_NgdNCQoX)WNNLrLL12<edAGr$$O^X1QXANpCQt#N?*@28P$;;Lktg5hnHI69WczD)6kp#mg#MB_7Ia z*eG|b`4>S(RxmxtsWBb@B^gauOvS?!1mNl*6aO*R-I>JVb7gc;T?gyCJ?+G*7Q9e9v**&BQ8%hiC5H|kNbbZHa9$rLAdQCt(!DFh6RRH;n@3!IX|V}~whnf)HMVHO<*cFuN(Eiv`F)4{v>6rQvh+DdAnS z_};$$Q2C4&^_|POWrJ!0(IwYN&&6iG&I>JYYN=V$icuCH^_~|HD`Z{-SNQsWL(ZMh zcyW`XJ4AYOti|0;56M6H&B(fy$TUAHZa4awZFV+ihTPNG!Pf{@_* zhLF|Eb-g;jEBYf%X;jP%R@0%=W_{{o+3(RGM^hwcSMRo=GjdTgTd{C&@IOT5Q5T6y z|8~W`;bHz*#2%sKTj8#otZSc&3}w7uF3`~(I?|oAB@l`K4eF>*CyTN*g|3DW$iNA( z`>4R#+ERCX+XWXGWTKWr!2%3j`?@H0WbpfQ2Lx&1>mK->ZECxs-Ao*f`ohXR(v6+C zOG;jm@L1V=Y7I*thqt$(q(9p>XP=j4eX7n z=wx@qU!1ZjtE=ByRfn6mHK`qKHnRd4nHTve^352I9u%OR^JDzo9idmFtHKS^yN$(O zkHdcw=ev?(nspaM$81k#G#a*mnG@H>q(kDK@6Bd5;byfKIrx<+8#V*XL zbJgI@XQUO^Kg#+%V-ufgM(BIdK=D=X(+ zPysg70=Ie*aMf|2qDf)!YMvV;bY6;eW^y2P1qXHyihvc6ET05LeoekqVsNA}<$aQR z3Iz=Ur6OwC(|nSwl9Lx494t`F`B5o}WF{yMWwhPE%N;no8K9<@8!!6QN8#>|+zk^cv%*-TGyj?q|8TItInXy>^MOj}x9rF) zDM{>3Nosu5kujVyQ%)tvc=-!%UR2Y$cKJgc{H2iuYb+ac9TcVPe?)NZXQxS>?JT}|7T{Eri2E9eUeq`iD zX4EnfoUek=<|@m>|MS%sJL}3$MY}%ot(|QefD4quaPI!?g4gRw2khGOup>hOU9!rf z6UvHfRQ1Zixv}%J(88^7p=Z~dtlSDF>#}nl!6pU8NUZObNKz#--K(V_*HLMTA_`q~lG1Rr*Vq+}wNxP;Vy=G9^~jPj p_}{ENHph8AivIuK|AQT9KnN|AcW9scL+}%c&X`)75Kdmb^B)&fZ9D(~ diff --git a/themes/spinner/keymap-render.png b/themes/spinner/keymap-render.png index 4aaed5abb487524c3a2ac064cbeba1eb6656a89a..91a3eec9cad505470fa7c5494b2456099dbde0cd 100644 GIT binary patch literal 71852 zcmeFYhgTErzb_g^MUY|#se&{`Kza=zC=ih*y$g{V0g+A!=nDc$4@xg0ksgo|dQpL( zv|xaQ9y*2=sS!fC!@JLKpR?{+>;3_E?YNYPm`t9T=liMi)=*!YnURAL1OhQbbRIkb zft+pt&!x_v1OALY^=K9Na?Vj#`vK_qSWM+0d0q+4SN%e z75y!5H?61MH@w+99GKWI=9Bw#cpyyQCvL@lrSFnn3}jcc&Z-@kv+JRcbm?`p@Cko? zF7}je&i%>k;cx+qyA`K;uou#-&ks1>lh*L@>pc2p`b1yPG{DsPnbw0v>Q+upLDfoh zZ~d)X{DQzS{m+oe}4SGzpC?;eLm0YeFg*)x<7sjH2YvLuJKkJ9SD@`8Us2?V!cF%cayE} z-_hpEe~gjPyPsH=QpL`g?HtKMeU436WAEjs6xcN7i%3f?r8zC;0OXrxEPC91yq zo0JeU$3bBAW*lPO<2ZRk{Rj5NiqSAoyP@1o0hIPvvCXR>8O|Mb@TCgxTSpg5Ebz{E zXU=52Iyetf-zf?^1qv_XG!(>hPM-^60DibhU8Uo7AmfD%BbIVl%f;NA z%s0(Ywh@ss3}5NHc_L!BZwSqv1$k|Xht{&LyW=zOMq1n$IHcRf_EwBAd=g)3hA71KG2Pf5?ig>rlpr@J9^|7(= zZDVe(fsOUhH8;+aqv&qO^c9v9(dA2THk15cjVJPgK&tgcVMXm3;q~WUZ5VZ(K5ul_ z>B<6c2>&6U4C?2Xi@aY0e~2#3jGg|vA;Na*arfW9zhv~|s>jPr@{>i8{ma}+WA2##?DX`#s;;LF zOsJLRIG?_^Y&Y)?`4nZo4qjY=AP;JAf99`k1sM{%ipg%}KLR4`Qn6fhmVSz?#db@V z{~4)pS)IX^3^p(^wv=g0%c3V+nwvxXONWC$qoQ<`%<&0=wq9riZDL~L6KR0E!p)oR zBYQU!by+6$W4F&}S-BwE@qHiOE!M42f8jiEdS3;0%82J+jOybg&ASJ|bruya_Nz0w z53(uBL`W=DH818c1Iu&N+L)ysYtz?P>=+`S67*m$qIy||w+EAazEn3a%79TmHZQWY z$O0!yctM0DkGns_f#1W}9x1#lYFCUX|0IX-n61=bdScQ`CYO7=z@XXCB1 z`<)E4aUN*}*%d>*KIcF;1%TaP&*W{ADralkPbYF^?+ox)4|*B4oga-tYqF6WMxpuZ z%Zb?ZD5j50t9@fO9SDqud(2Rt-u+{q_U9?$-Mvw!pMQS%@S!JGlFb@Mg5x2=h~EcW zxMPPKZF5gD3Jj3jcOY$v0zU%~QNq4_!)$z_WASdAe*KjO`tR2|gt{cVwf8l$J4RZW zAlDX7t&wMci+*BM9Zc7KuQ>c?a%t=?7@KGZJr7N1=WWv)9Q??8!Ug@>-*l?fT^|QId(sfTShLO?NoMi%aXfwKfBmJm%v808+|WV;!N}P#_rC0 z$fvo09!FNuNAvC&WOdu!dbGzQzIj(;0nT)0#U_?Sbh6vlDj5l@D5swK(qJ)e^lEYA)2M zU*%MS8{=Zu5O2^uyULpJQ}vp(OPP6|=QXo8@4$0Ei$ z{H{1|u_?Pht%|qz#zR|4;!UP)y*Wc_;5&5OjFM_mDRCH_Ezi8cfCo7~9P>!2q8|CY zmbt+*Mk%6Ol)CARGEmF-QhO0(lUMG3ZdUPmrCO%ASizgIg)X61(VrQ{Nmc zM~-~T^leZ-EP4Ei-P1?NUHcv>7lw+)okW*z!sY<5pxOX`syL+IuWYhCJQ9R`JV zi2%QGyh9bfzsG#j#LpEz^iTvA2zBjwqvU)wv#|!wy{gFWn^8pDdlP#Em+l-3wY0NS zZ5noOd4g{j%oZhgA{7a4{`+1XRl5d!A^nxxVX8I`HYQ?Q!QXuAXKEUFocw{EeJVouC3jT z+}qpZ{mXO<^tEkxc$nS-##V+gNPQ;I!Vf{JZE%+>F`)J1F%_y>^=-FVsS}PZIf%+A zUXY9ZFzQ-zCeb6^J}jVv|W$PoSdm!ZgrB2M})EJSVHi?}*IPs?0QaDf3(v|;?rrv;WpOyVd{8u=fi3vJ zpi;UTn61CW2wPh}g2C20eSCb(|1w>fHlFPMTUPLaYWe;!--z|<^%agpA-;GJ=&OLM zGUybvLh|{mO-?^;4zG_&qzcfhM%RHu^D+MOk1`6p-fz!x@y0cPulcFk*x9wZln(EM zVQX&Kw5ctVKvSQexI_y`zZLRekrrdnLNh61%<7# z3Ls4J!;_xW?ri0N(AwU63)5oRWpw*2 zgOY%_W#l-bCp}`*leb;b_Q_~uC_niev^Ss(V_!oE6@egOagqesEAM~e#!~YQ%d5`Er&U=V(3T6!{!R>_uu^!d2a0aM8UTOlNqVosD|^h38K73)ejms-)#81{L|MJz9&A7c>Sm?a^gx+ zR$YjsTjmh^R#SC#b(q3WFO*ww0fA;!x5BLi5QO44bO~?wy2pE^6R#Q~mGI|VOE>Ki^gXXU49p!m%!f=uzLY8Tv?mV;k$_l~7oMynMb7860VqD40}G=%ks6ee$ubcRIA z=&1?1!Q;O?J4`{v2=uwcA5sJ$JT0U2gEEI*Q!auKY?@kjb~YmDJoUkCg9~pPkNjS5 z4?gc`3k$-oq@<**Pk7cH+b<66K#(f+??H0L(B;UCc(yK~zuQ`h!;deeuzp+mTvb+9 zmIaIbIaPQVB>>5p7E?cO6$^#cGjFh6C(sk^&^dLQdq!%P);P_JRdC7Zq$1jb!N`V5hm<$-Z%(h=va z3>nL-ZjC|FTOVa>SCjH(g+xq~2VKluX@WzlcKk7{uMQE1C5ZG9;vZi^T42BXz(J%I z*2_M8c9b4}-A(inb3&8W;&^1&o)$+s&%Onbw+%u-p0Q$)QDT+5e;$4l5|`P|wOTz| zeOfHJYPmM0=clS01linw{{=v&e-W7#2Lra3xRX^@yp7&I*}UK0W5ZUGp=?*TB3C>{ zq)Bc5C2B`i%oGNf~~6n(NHqbANv&7uo+4wxK#@EeEte7p|nTjYPx z(>akTqbKoU+Zi&t+f7FH%V8%p@v{-%7^OVuzqC>69mR>$3~+_3TJS=Z`viu$?q6Mg zAE=*NJvobp4{#0~auSV?zAe4|2G<~rQG5IP4)H})YImysZkptxyo-yAn$og#X=y3z zZ~vy_9L1}CV|Vg+rG9!PlqJVWYL{W;IiQ{=|1|23nUYji&P=(M!u1c1Rs4)xA#>7O zm4tR_tfcl!qvNYb@kR)l<+$mgDvJ42o245NWXOPDpn7^@6t42h@<`G@qFw2KTTO$TAH+Zqrf|Y!*f|N_Og4%*;fOGsi)NsjRYY*0 z20)d)DUZ%at=~jGGq;SXE-P9SVN4f|5hKkM=U-fzx1cT0MT}cn@BK%z(1Wff*MaMS zH3@_E(geUZNU61~YBa`0w{d#N5OYgu|2nn*rbh9kwM~=cR1; zcEX@KSK3Xu*DsEpB3KQQeZ`Zv-FM^+m&5ES$4ifti0oVSWHOm3CME_B2@O5Ekeq${ zL`(6fvHrT-A#bQQzw*<&?_hSHP94$E+;t`*c9+SJXOm6iGTx^6;(T`0)$a#_e~s#7 zl?YlHJhq2RbkK}y3WqVb0|pkEx^8x3#%wtuGPG< z&e!Q5U->2=5%(wcaJ-eu5d-#k?1=PXUTEwXpfVuTt*nA|fE|4c!p6F{WeYzBf48E|C+jPb_1rR!+yRJ0 z3c%KmlYCzb+<@j(1IwqC3qNlK!zKDgqH|nvU%YdB%p?%s)Ij^O-n5=FArTRDJ>7~Ew^oIwe)bUOoEK3N~VfBO&Z*3QaO(X z+nQIVuFNketTT5d_J^b@N*4BwJWt_)>QwN(`DLXnM$RFO!8xG))dW>#y}=cL5v*Hu z7p1*r`Jyar6 z^kqU@|HAtish?B@th$9er@5-33;LGr-Y?X~u2fQj_60XYEv2!>ZLiCv^~W!vLo_ho zTFIYc#P=(_!vI`Qmt6D@YCj(kva}}jwxu-_^;~DrH-?Zad(018BV*IPE%lL%S3HPa z9MDj5&7eMQV|jTQ*WcS4f*wj%zo&5r{#*ByL;lfQU7ZEx1Chpf$w=7{c6*&UE5!+Y ze7GQZ#ESL+l8OeXSFoq&Iy$HQ8b*CC`0hh0sdNs37_;--d#=3~-;>r8X|WgY!^`iL zYVzqVnO~@K_d`Zj;eH6#mV5kTP-jNetNWD;u;tg*XIrj2Jo#@)ctcm=wNNxzP5-5R zHsCEVKDFyHsT)TCLtQOb;Adr$S4M_ZSA5(-b-yyD*%~hc7IG^I_^mz#5)&8KuRx;_ zCM(dd2qNiak67yJXtj$Ng}V4{zpTpH{ZhQ34-)FoQL3(tU)}tYbg_!1p62E<~k{^T5jD8ikb+1f(irZ>*3mlz$7RS&% z_-8x)+E6G%hpxqjWOOZq*3&Q&(ol$}u$ElrwlPt&$E+7aYAxujW<`nN&7Ma$EiPEk zhCuanSrKI`6$##p&5<@N_gpHDG}3g(Y7~3()H1>IQnyQsVGSi;Mlo>>2r~ghSICqk zBVy8U@~<8J@Vpf9YSs0n#?m$qwTjXwf&Q36}RyT-Zu zL)MmTkFuAa>fZvjX9=~|qQk)^YTT4H2XC&o9Fj~hx z-A%QiQK7@XqQb?W*uqst+uOTJ!=MLkBKjh%RGZS^|AGyw&JE!?%TR`a3p1M+xhZ!v zUYKE!ZCm=v!*b<3W}+l~q{1U!wLH0*jpoPsd3{SQ^8{a$=HH6GZx9}G$2iLcS4%Ex zK&ah3z@~hN*VaZjdw7URVxO_vrVD@M6UpbDeMCtgrq&Rq0PM=a?2fu+*pb{Z{!s(s zu>xwKZ;arC_T0u;XiDe9!?{^yjU401@u3z<)C)tQ$NkzzdGV7Llgk#1%%1VVOp@n6 zKWChg=l{ATsKN)>d47=OJnB{mr7!84dJ|Hq=uFedKu#}al7`<>Ew^)XF(r>fzw*J4vcVB3GxQC z`H%%U1wdU@;r!E67_ByzO2Bkzb;&3QyF~_cuZuNI*w)}5$p|aqt}%07;R)6ChR$Fx z&5>0NbTgNK?HeGgX&g``Bv0!vS{a7bt!`XYS67$n!yT#On2~wq|7AsQeE$s%`Dt3O zv2u(}6pAdqGr?CwCvaPDuo!q9>Z3**JQ)fM%ktL!<&`dG(Gx8!|9=A^_+KE5|6f3O zY0Tz!?qb2raR|+@ljXOb39lb+|GX=k6Mm`*2k4^v)~J%JNfg zmuCUXQfH1-THLrc5CPYz%!WRn;hvX1a5}D~v|t?#IFr-nZ8RIiC3g=s8vLU*W8Jut zOKFFUprRO|sj$ytr~k6~s6HOt{)H6p=W0}eAfeX|)_47z5Pe_05}w6YB0XCQ09GRr zE2)+w0P`rF^lYomO1!=~0??o^fH+B!P9+_D9yHchTyR7a8^XtgvwiV{-A9Kdoi;o& zV&$9f6yt6A(C-U>l3_tXds%4fI=j*xa0HHn>O&Z__Fo&@>D$zZge7SL zZr()h`fdX}^=Hq<1ZO;7_MW(pqkd-P=)acXt@Cr?jg#wYc7DUAbyV)e#+aL8e*v#b zhs&$zx_9hyQiYt!I3QsYhEldC0GZE9v<;Yqw9;MiX=4+%PtAgrs=KN)GXt zhkWcGyGSm1pvUPYab+*CCXwJmE7#3T2@6?>QE|$|?8csavW2-L>gq%Kg3g%OC3FC5!$S zKCxuE#qO=>7jB&)oqB62;0-qUbx2+Ix6iFjg}06w@pU-$I%&pgMEmf%6U4pCi^-qP z{X-Fzl{JXVL)MpCbJm>sw#4_;@cCXw@Ke-B0{`Q8fpMH0QHGsJIVgkhz!}M+i<`KIWS~uPjNL`;)6Tj?p>M!CyU4VMX z!+O<~wm3=o_XnJFcRWHV`SWDKb* z28T~t(|Rfz3y%xlDe7In=95v-+%LSSP?0H=3I>-G(mtL+;gXuyQ`MWZZWbMix@JCo zyh>R)?=&0fp4^{t6{nX)8bJMBgE^|u)W^oS+(fxLCL4uLkjO{x(f>vwyZ;l3_y8o@ z{y&figD{gpbOldIzH|8hLLwiosHy)T(cfrPdpgm$E1nyE;LIz9<&sw&Tk|K0nkLuX zphaC+)f-lktOHM*F?ck5B)r@HkiG~liMi!YO*!gaZ%hsMQ&Y=zY_0XnjQNso*yFeF;H9z}XT2pKMDg{>7V&+FK<}(?&&mVBy^t?8Ze4X51Yi9v8N~FD$jB zRg7ybs~%UoZG9@e3dyPGr+v4AC&=hgWS9G}X)%#pp%W)wVK}bW$sS-Rwu){yHI1~? zP|sMG0X-KuY-&C^6`;=llU4osKR@UGHUnHABD!p^qyhQBs;7K zDsNt=loAx4na`uiq#=^2u@^V65yB9r6LwyY8~=>yP=y5ddA8?i{)E1PO_S#Zy1S~> zZA($398hUR5+pz4!A(U^>3%L$V$Z`^vuee|qUau9Y1tW?nh<%kB`nMeuco{I4i%0J zwZcmaWG4q5-x6rCz~?S8-vkZWA_csXwy%?BK%kFILp~tTRZUw)(2lkxYv5MVky@;z zC}2xT^c}1X@_eTQsZSabPlF6Aw*ZC^<(3g@if<2&YIQ}o^s{fB{nt3u)(y7VmByyk z6}UC3L68(Po~IynrfiCpyLMAz*9L^eh#Rmf4{I z3_b-mb(7@cH$ZFX?Em>f`R`O!z21fd1uWS=VjT@nOna1BZ`bVU7U^dbW#noePg^>H zV`5?k0gn)Y)ZgL0{xwx8b;FWbj8ZK^i~7j(LX;qTQ%{5I6zCOXz#sHaryX?U;)48g zyo{Z_UW5H9kl(K%T1Cyni&C&PPB^XA!_~uMEw|*nfhB)`R9ng(^;@!m>fWT&@zaa~ zYk@;FN-Vuyt%?u|7=(hbwFJRzz$)mkBB(yV=a*q<$pU-+$9>BFtMzUGx_AJxXPag1 zXkJ)t&zQ~T#kYWNmM|PIWZxW8MaX#`+mMT*e-w;DH91WY<*)~k!a>D*%F49Gci-iZ z3BK;JL1v2!<^q$#TXilv`?;o(g^ZOc^m?(S&5m(Ua~;tIcgOw4<&x6%UjU5|B$v~L z?dPB**rBb@(T5qR@f*-uOBgO?+ZEyh2{!2b*10I;Y5%00$=o^UqB=aI)$#9-o=Xhi z6MWLi90n4t$Q(OCibIGQa2~9XR%ik@8be)K$X-jQW+}_c?mUA~wl94Zddt_6f|4XB zDwKzD2=`QudnIC?vm?5A}(P*Eb)XvyNf@a z;1-jtNO_2>d$u6{gI8>w^3Zh1>f=%3K!EL7$HClf`}ypE{n))Cu=N-q~z4%Fe*3LU%+uk5 zilG{n&m5h$^U?GspKep@V_cttZx$cHE@g03_|4otst+4fxzZJM*Gc#8jBoS-XI?># z@vZ&@=%l#|srBWVdle6n&tffg2Dbr`zSsSwjTExgw+I+&Q>(DhGCN*iac>$Zn3nl|Usg&J6SB9zU zZ;)@y%99m9cuh zYE<)bxwt^@I6oUy<#*XTw`kMlQtE9~pzCaFKZgj>p&BX4 zd?Ruh!^Xrspvd={p|)Xb&lQ$rQ(k_A1bumXqRl!K zd-+r|!6^VDI>Q>W){+;$I}_z<8^4+E$FDWtGAs4d^fT5{bq!8m(RjFEyjDJr;xJ@A zbFGWHe(I}5$&U+q{az|)fjqWC#6$jWxewGMlwqpL~;kDy{*Lw7=F~=)3KIsD%DNvZr{81euc5xtu69* z{P;DIsqLg%Ed>k$d@o53;lConSKvYNGdJ#*jd%m*!fFH7Cm(?U+Kp)Y{%|VhZ=*+% z^Ojn|U`Nm|Q%0}>ptpH}RH_v4N?cfQI{W+6@IjeuDeP(uf#rzY?~)U=m@jB6{g)nw z21I%FArYHa(T~H0{e(;(ihSmM^0gY^r^84<-K_&SVqbB0G$#nx07QERgg-%M9~i-E z3YUkn_36-bViS0=2SiIw7uy0gXVxBB;V z1+)v>{B7e)&gGoP6P^qopEEB0ZyhJAll-k*xHo_G@A+pT5lTPMRtvAaO-=n}y;ZfN zcTPj;cNUvG-5piC(AbRdtBwulZ$39pZXRW?Ho#MAtkBdxfVX=5p#XxoO&M4<9spIO zqj*KhxC@b2PQ=T9Js7R6tQxCP=tCl5Oajit0s>()Z7+acnNyH59s|m>oM*FXfRyJE)AQu27vXU(mdELV_g<&U7L84)IZZ5YT5n8d;Zk_<2G!)ua;$@gc{P#?1fa7bVwqpbT)e&#w1-=Js^DSKl zin2FwK9{0J6|@^Sqc;3yu2Ih{qkl9T1EdHBgH@z#&&Exiq%0|ti$v+R*Pt`^y3`$W z?tj6GaR&Qzs(PX)Qxp&AAQkJrO2;qK@C3 zD@Mm1JwD?|l@-WqI9J(>=EX9ME)X{hZ$r$@%yIxKmMAc&>>C9L-^xILz5Fl7Qy#AH z52fAySG`A7Ius-MY$IY?pEO4|-Mh$Ibdg#w$q2jjYR>z(07$9!Z;H=7P?j~k(*MSR z)QUVK<+5)AIqtDic8UF|TzsT{%u5)f<81Lx1E4?w5|#oQzkuY=4W5mewhG7 zRhaCP`No6PiWn~_EDTeF_gc}$fDkEA==+z1CXs}#UKb$g&kPQu<=?p#%MQJ-t&x4#o^aBEY@YI3wACNE zO5xR(BV{Img*ZLy7{@TpK@*I4^H<$ugv4fgGkchIi!BQ=AHEf2%{6@Qv%iPUdat-W^-}YEefyM&di6Eeo=P(T$JX%{ z00DM?x6!|AIPdU6lIjfP`~Aq;U3+U-n~igt=5)jQC!28A)tQTO-EY(t>+SDPZFQL2 z;+kD`fUZW%clJSpuqr~o>yNP`pyXj!I;;d831Ekcr}*|wZvbb^5E9UTl#;9tzv!se zVMUufN%r%po1941I)Jjzq^GANkc-k@h#FLY8F#CYqdun%e**MYEEMZdt;(^Zwe`1E zdo)=Hvf27B?8>LdA|)jUn%tc9=3BMt@(MQy#^342#ALBsf}o-MKUNqt7vU!poO@Hf zAq{uw9F`^Hb&z$DRkTkcXh<7|loy7)yaz!NPn>WMVD+zGZzPPFvvP$Rt`Gb--3Pt0 zHm0jc-(dir3}HZ^zgsDQFBR3>-yiBY!n?G%SU&VNlQqXWxCjKY(=#w=v%|9j>mZ-~1VSh} z-a}b)2N39tXw8wtxrhOl-B!M&y2<8~v80djsCK#RIa zt~Pyqm@^Bw%jlxdI1s7>J=9Qpyg#H%DlEgjZai%Iw#8Id$mUOY8D6pZ zG3j;eur(foZ<^=4-*_jPO^w&w-j;oW!N1o0Gx`olPRi|ds1RNnar$m!K`=W zy=lmoow*ms2hX1iy3xOPGD3^OPt={{BAPCWGAnq`_3nRzSo0$)T2yU#@EIcyqjkCC<6;kboo%x4Q)7!n&>qbP+4ZDKALp$3D&e?y3yO{ry~1O<~7JZ}>?ok3MYO0Eqk- zROv~JGyv&4A^m$$2GNL$a+=yY5`dKRY}%SmUHPo?&=ZyGeCz1s;*Y&NJ;EWReqj1; z=i3YZ_dDHy*OXqm^z*x@1diYH^semla>Frp(DY^6*Zs~N?c}5*BY6~gk*|Lyy;@dC z{o05G-`x(NWp>nBbeeqEuGh=;-0Te}K9A0rdKk|vSGWbyUOBTr=rfnPNJzh+6N`_N zNb<|4Iev)5*8J~{d6A!b&jKB#S2t5m30f>Icd-Mw%a7K3SfGB`OJH7OUB=bySeoK8!tA9GeIivRmmo+-*XwpCE-P8eIO!u z1yiv*0&=7xYV%o_~E=GPhj~7)0Sg)_-okQ`7;?%2<4TzmZK6pOI&5*d2oz zfPH@tc-2{RzkMUZt9X`1XLj_t7?N&{C__~^@j}41Il5SPB z{rP^ui)R;}X$hpfPl1%T3^l%!a09w~G8RQ}R1fU%-aLd3k*;6?s~Zm>0b4Q-h+6KD z-(u6E9yP{bc1dNJ>`brLJ&Zx%_bZ|JnCS_0U7J!KJ9>f7?AqQJC-mi$0 ztjGWgH(QBcn(gpj+xEcP(4UNK?|dIz{;ID@=sa%qg29(<(%f`=DEW$ZMh## zT7lNcqbVy|7XacqR=6v`=I+F%*&_Q>wz;9bOK405Fw&OwLUobxK${Hzg^HNHlB?j+ zlOooJ-l_4A$LvO<04@J>&_M0bkDi6=FTjs}w;Wmm^%mTMtaqow#6&&NXRHH8xEn+w zbz277+k(bK3EE1KJ%FDnEu*AGUL;7y8-Q`E5m62cfq?U3L*4fAbxvTViM&ap3_Z`X%Dv>NG?wB05MFy|-T zf$L|S5Hl(Z-2!V#7stPvMz*P|DMi;VCBmp?(B3WSDAkt6#zq7{ZZi?2L>gbJFl4hE z66W>&iw8%Ab^^~NdM5e0ePRLmf>cF?E^$k+WHTUWSP7xVH20h_D}`#lHCBh zdsa>CcGGKLa;8>O^pfGe8B2dB1d&xoGL7V42rY9m5;+`DA%+53P!4cyucT{+0fBik zJt?(-Oca+x7`uM1RRqq0`13=7jo0lg zB}D^!a0FaA=(}yFP3I>lZ);E6C*m-*9<`!)J!!O z2)9o#jxoi@mqX1x-b$GS@jM(0KQXEXH=wEVQ@(?G#|o=002EW61Lp3q2P~Gi8bG9` z^^wXsty~Yh_c()7yk!$hDdlBbi64J*v>OYdp6CS-_d1{#yH31M1%4C8K1=s2%;5mV z^@kr)kqVSX1{Z-V{)wLjf_Q1pMwc{akpKNR{ND(Xe7vid=p5eYW#wG2=}NyHO1TQb z{Ro+-$EF=OxZOPcWwga57j{~6LboG;*E6kZF~{UKa!-0{Ni}Mqfb>HksGDjr>)fr9 zIzX&u%6R7S^!(hNxrj+C8m#0#SG__)^G0gG<4V_kQk7GWETb#S*gejL^nt~JxXa&L zYNXo9L9EFl#PsCgn0?^hOV9HpYR)*EHyBSB5$Xs%SbHQ(iSWy_t2oQO($rbC5dnKEY=Q1;jTi*RZKk7cdX>Fg*-OJM2nzjJsfM?i9;QQ>KY{#>OS5>=i2s3z<4mWC^hozP< z`P_605%j*|8pQjgaocDYu6R7M{Q48|V~KZU8X^2zacT&4D<(_x!^-)dA{wH1u;df7 zv2Un<(w>F*;-iRrk=7=^4rJWmQ|9%$BU^ot$4e`emz+6DZA+53Tw9|r1%?!K#|9XZ)4!`8auB)x8IPJRFL1k4^KH=`j?mNkTXUDO>sPrlQ^+?uoQ6=Fyt% zXJ)eyxPX_xq8LBN7r8$kU$7b*SWNw#q#B-9pCGZW*?4T#MRO=8$mxyM76-FziSQ*{ z(LExLH(Y($PzwqCjHH(O%CZfy`-BSNc#>;m)?F?rA*Ofe7(<9rzSa|y0f54q0*Yhy zVt)|&0DK+|0vnVwPEum!#JvkT*$h2|1)f|7G1KZUO7;Hn7s7fjU<6MA;x#JRr&16C z?EK4+Fv;Z$AqiWHZe1plT8968_x_-rv%;y-6jZIi!WS!8qGC_0r%$b8eYBquiy`98vZ)L`PEdjGCd-pfv6z4tY$NRK#c@ITKDydqj>Bik0LD|GC3 z@39H`*gCqY{T13`h#J<$ z75Kqiim_>Y)YY{Z<<-Hnvi?f?HhY0N{=arDTz!Nx%v?-|aa)qu1?66ZDt26Wp~T*F z7*qcH$a0}1WLN9WR$P9Q@Xft8)~oF{m`@&0fFKG*O5QGQKguZ}+X_rJ%8mZpO207| z5-^G=tJ<~c<&?-F2%j6)=P`c{Mat&7{CW49C~;!aPt~_2Uz@AGi>NWMeQ(UtO=KUx zcFS~Bn>C0Bx_AJSTsOls?~UD8oPE~&$+Zc&Uua=dzZ`Y7L3pHQuXKL&3sEw@DY63h zu-T-c&Svb zmo-Sg_=L&dsbg7XhWk2BTVF_!VpyO?lf;t(@7Z!!&Nf%h8iqaBtiTthwL7h)W^0oU zn<_mn_?pWr&3Q)McB0t}(#&#Y9++ZpBELxxCEYK*^KV9i*}Nhn%hFtG$#T$dx?C|C zf6{biltu|V@23P~=Jhu04X-CQh{V@_fD%ua_j>6#|E`<;y+a{#U}#K9?6jEer_+GiRGxogX0WkOkySKpyP_+6gdQ z>C@{-c+Wcf)^EfQIrOC>2DUZdO6`Q(RaNI06b~a*jP6kQTi3t1;x`Zra*Q_Sak5yWjvvd>IR z208+tTdau<=fopw{7b*Le(pgq!-xb?n2LBr)konBuo3Fl9=1!#-<)c$p>rYjLtNoI zrSI%pN={gTGK@qnaNpse!wlfi6D?r4l@=91ZOr60{{9qmR7&1(~;v+L4aVAzeoltqug6z4P# z^d+nv>(VFia0EtX$W$}#v5WXt$dpQto!TwMbke}m)3U0nC2u)_P+Astt6m6gd~RuQ zu_55YURj;D58iAq1cko1M1Q^Gpmv7DH(b|dEz)0V7q+-HWpo7}?qnb3O8b-_tGFcl z?&a6vtd>tOI;pOf@+;kpx0#jdwJ9+1+c;;|rP0+l-KcMJt#>Rmt^DmPgiC@52yv?Q zFW?;`j}X$bzr7&W`n@u1;;cGVnVk-?X$v2cTPe|$zDeHm4xYWJH54cpeZwhT`SI`` zVQFGR<oR83OC5BTK;^eOT?ctg;3BNOwbATT&&BvOP&j- zwCpdJ8mI+t|2~_pNeejX46VYkYxE`)=G(i?ad#*N3oW&lejbH;A?w;xs*Y1DqbND# zN+tYub8VDY(4f~8Exeq_#Po79W&Alhnxgoue6Ts;Fq1n4@~sx$g;+nlmz*M-kAHA} z%ezOV?c%R6(x1AL)i&i^Vpd_FMa|JxW!>nRm$(+dUHx}jWlI1-5nZPs4b*}dPR zl3*=uLzF@l*AoK$uOYunhfQnf?Xec{(|VI%;tz@U`+S9}8M5NvB+m);M0fyz_J#UJ zuCN1>NHL1bKeu%~yp5G(@UWuHdn+)OS|i;C-Ux{+S^0ZsAD$WQnC)_d__GV~PczAA zCrgS%oqpFpxygO>nv%FYOcg~fD~gw|{QiUxBhAT)UtRM$TO4JLV93Luv%=`72y%+Jhvp&*mbS z&1c^t)m-0VJA}+>vIT2iue2TuNBg z0G=fa6R^LbmR+CEA-!sDsqK>;aMRHe|KwoR3sqjBh^4^o{@ZDX=270iB5_H?3+Ok7 zKcVLz?w>|Bh5izmOQE%HzN%0>Y+dqdy!gmkei37DX*}2LX5)|8+9N&#oB{oj=N*M7 z_uHM6`+-HKXSphqAcIxGTQ$ke=2HxXP66K5eLMr5$H|~y85Kgab_!C3aKG++#?cmOo*Q>bPo05@M!{r49IxQPt5Ha5?7gOLPLLTe#J zDeuZ1H}gf(aS~!AQq-w1UrK?+2k!2^EDPM=u>=^Y&yJs>TXIo70=An!4MI1Yfhqy; z?J)DMRP+)sR3))0#e?K#XMg|Qgsm)Np!+OJK5RtKj2|2G-&TAv{Z-mGBx+kBuOol% z#e|=;^P->?X@2=zIz>qjzlZEM7~I~dn|Rr?1#I}kxyx-(&7Pi~C4lGEk^j=)*Tpv= z`!R$Qr0ZhgRXxahj+l9LrD9KHj$j=$+snQs4)dtZ3#vq2;m80EH-G|ge64~q46pbc zHg!dX($pteZuniY_)fd6-`Ee%en=+=)sinOyi^I6@5@Jyn~M~#sq%|PTk-xF8>3Ag zZ2)G%t1%QP zsLVvM@=l48dtbjOr8dAVVL)gag^U#2#0{rxAo@b;AoPI{AC_4=q&_e@+#w0v3au?v zlAyV*-|(Ao&SlSzosoA-jX|^ZYcb%s-D_)2sW+(&3S8}3fd_X>#oh8H3RE}(t;?!> zl4_pCrsJCXsDYk&DhuCHYe@rRUt8PN92BQ9Yl_`~m1Hjm27||GJdogCAc?KGoxFIG zY`G=mCI-ZzNa^zdLXr;6=i2Y*{s^M^J~@lyi>67;-3cyl?eU^ty61nx3?+8Mss&iE zo_s^BbCfrD(O8hphe3nfHMC&E-`HmE-g12!Y%k2!Pg1-;?31zItx|aBTHi6>dtR3I zOAn9wjgOT$6OqR#8ApkHvaWqM+Pk3du7t#~4WO;8(RFMIrQxxXKVQ?)=Xl1Z^XOFA zoi)T|-+aGOSa6~8xb)R}roM>zi9lzE@;IZx=wo@O?a6y{>bqs#(4 z{3)YL7LQ)R-<}z@lki!GnDS?+&H1hS{Px)Qo|BBM?5M&C{@Jsbj<_W0d2sE9@!gE0K^g8{%(p+X6}Zn9>z^MsM?p+h9&eUt+7*3Oo`2fbb@_p$ z`L8?;Xz{694=5MwyF0xPu~5zR)P&3JT)$6!{w&P9U>@rxlwdK={CYCCSRnVToSf-T zMf&%wExWf=76(7##uvZ^mxmfCmJ1D?{@lifM1L_!*A5TsKOkS+z0 zZs`~V0qGKu7(hU}q&uWzK)SngBpjMSQW(0McjNus=RD{Ao9p75*?acd>+}1@VshkP zBI-&{o9K%|O_tnqP3N!U&A~+O>zQk19;Y!aww_Z}Bm-m-3%fqaDT{l-u|pThXHU8W zSnfq}uG3Yu0)_o}C6XHs)s`@v_GpHEz?-yM;%X<9XcrMO6_8f?Qw`SJo0x5QN!RA8 zgv#u6m{XZxS_I5In0+P0iEPjXagpJHGGTBBDw@}eo4|Z`?Gy4 z0!fE}ErXN%rNm1UZ$G=T+MgXb!J|2EI7UC8mIX2fygaadX%fZLMJ>|sxy;SI;P{qj zv09k__iwEf!j$j7Pj9_X#n;1orax02u9qThYw?^99JqxbFBdV@BuD zxHePqjSth-Xl_VOL|q{HbPCLLZhq;cf(RJk>*h~cb=%}mZ34u@o$J{a-5T0eb z2-4W5UPasjvKHUA@mMVh;*PTfVnBV|&3LB6cI${)FEL%?X%C{Q|EMm zEM4*a#gDL^&yj?T$@`R9%rAyFzG-ZScqpf&Nn6|Vv$c_RC<}g1#K`cBY!6GPBnprW zM73(uOsiYzb4^zaPf6|(<_OH#?CxjE9zn{T*K3YW6D{!*Kyg_b7oN5=|LQ4OU(Js5 zA-1U;2OS&(X)$#`VURjw&Yv2th0kLo=~zMCK?56Mi+||iYkQZk6TuK4$;B4sB$shxPgfkX z&-lfg@2m0bh-CjyYwQx#|R)mt}c- zdh6Gs`_O@TVZYHNEp#CF`lapN*$J+9^~!s$(^h_z*;{W9j>1qU;ghdXM*$4*D{A{l6R)dV5##8#)( z-t6Zj@>ih8ZD$IKTLHNt=H;d)vn>OAG6#)k3p>Mky-Bdzu}xMSERtXqIzg7-=gSmN zW`E5HWqyK#QQpqj6W9mD%dC9iq`>Y@t%p6Yu_Jv|$Nb(f9DY@;P%KH^Lka4T2VVKU zSj$!$5U4f>NAQs@xKuedZ|dqxYJnzb34i%bU;i|<$mhQv=54UrJ$?R-p8mTsU>k+9 zoZlxK3=-SjsfOJd|F-1e6Uh7;2Iw}u!0znfZeh^cX)3hRbo8=hc^}<(b-bfEkOhn` zf>EA{h5YK{9%|A%aep#%nMR(zm)n<=X6(%p+yy@apAjX&I!x_MG%&4I`7fV!U5DG< zViT?>5~p3;hU8VhVWrz)7(47tcS#Q98uJlWEZ-v3+Bdb!E|xsPuHmb)?6knRTgu_n1L@)NO7AGtGeu>Lg4&bqAJ zV$^j#q$fhbZ(IDy?6jO)=8oUr(?xpINPb5de`OKWx;hJ8_e^plSYC;wN-QU4u^A@A zfZ>Z`?jFN;v|rL0xH^{?K^+}BH~q6|58}-nkT_Y5jFvF$Q+VCgqum3k|1L?grW#V~^#q)DQi&KT{&4k*e^h^2q&BO+c%$~0&zQ(C zjdF8;Pa0l%txvJW5cRMvkHo}DGpFlbmYJ>qw-C&}M&?I*)_3#cAHs@!3z^#4Z_^@nbWu|f@^OTK)=VpI28IIVza(?|J)>M}1^vx6D z(nme90+!WePnT`oSW<|s@wZsFe5)U1J^g@bRwa z^lh^wp)Sea>^c;-lPijuo60%hJ~bliMA`~Q1+{nPtGU>KHlXhXgfW)8#hup%9xD{v zZJgWsaCfBBoU}xKpvc>7Dk{y~VCRtD>8^uh#g#FrmsQG7i8HF7J-Z&TvBQqzs<$=9 zIS=b0knV%1R4}G68tvB#Rj290<-+?ce=3trn~QE+^{+Ou!)sfVHWu(>d25I36VWk zVcx}$Zn$lbL>;W0*=*Wi#wm4yN8VR*dhI^0DAl{(lRU}$SqVbHxWlm_a-aMIh8dxV zm5LqZvj3@QMr2PsQQA~^J`@|PsoaD%l_YdH3D`*L0|WJWpp3!imGYz|=ZhDoKh-gP zkAV2-O(`Mxd`t^K24CpusXj7`vjLiL{s%BBN?@8mc-0le?|?M-$rRa7e#lcz*`CQ7hNp?b{CtF359y=qa{|kcrF1AuxR;>kbD3Ts~-iRybMwK(O!k zP1niE$!hiKl>UATFr(T3;8WMo@C96^+#)TZR=1#a@GE*ChpSp+Td*q5JP5;fwrc&} z3JMO7j9VAcN1}Bg(NRbefLY2{PlTG_~m0&O{*u;wcN6r0J&eX{xZ@@X-<^3d&Xn9Zq&Ycw+`PV*Xb~@Yylkv zJ^i*(tFb-tWStw=wHf=DumW8^wbr4YJp$5AmN|cS2EcuVu(xE=FW2n!>Y}S}uVz!b zv2qssk>T;iKhC*1G7V`CYeJ>0<27E5K$6jc=lUw7Ezg zM#{jBSJVQ&iX&NEY}RGDk&?s*7i6g$6RTn!bTJ3NsDA@AAhoSM=#s% zTJA1elcdr}YWv>ElFGwwNOr7E7J6qm&m;3SQi5I{BT>xn})*fprLQw(0S?W7Sd-^b@Yi&+Q&S#_z03D zcMVy+wWn6=XMY5<3p|2-td`s*BsSNodUkT-6h_Ph6h^?! zE!@e;$>4gsc{iJi>1KYTRXzKBmR!eO;kC@yUmM@%Z8zFhve1Mw`=Ea{&0-ke>aR0< z+x8aTgo%K~=Es&17w|=MdKu06HPM*Q!G0J1y!h|k@k$AUe;L|%}Ngbl%5Yr&h zEk4G0RnUOsw4+9^WAKmE96U{=vC*)cpR`;w^@^@csAsP`ODk1MvcB)VkuY2d@?IZ` zO>Tyxy3tnKNyaC`)I3{^Xy}HiS+$3THlpd=lRhsJy}Bc1;}KN9pnrj-U7!3>N-Ho! ztIv27*Z^UhkWV*E0ePd1Be5rWJ8`ui3}^E%DZcgI#MAfj&Ogu3q+5f8G%3d3wjpVe zV#`u-ao6Nr$Fans;JJm=ZTr8m!e}PC=;T0Gg%UTsmr0@DA1NJ)r9uS1 z_dZ8IC7V4lusSRha1F7Ql#QQ)?2^ZraVMD@dNB3rD$>=}l`EuN^`@rfaz;YzqkG&p z!$pRb%kM0k-Bc>^G^_b!(qle0KlvuM6gn65L|FDB<{D>{Tp^4*{0wKMU{_E*yzadA zj$PfdW|x*&-||e zWncZ*{&{msbkwB&J%yh`q19DAp!^jBYp*-UF(>r2ke60GGcN`$-4(7^k8+WInWC{x z*X@ff)Sa48TwEL;e6Ou=nxH}Z>h7j(q!q?_JOU6<;_>6W-f5Q_EqV5KFq@|fAy52x zBEhPNqLSBq+MQMy?tUX;KW^5X?wq-gxcbd3hV99)pUW?FsTs}kCMqp3X0fVZohiij ze=`rt)kcA9UB@Mn|Gc5r_bIS+PObgu=&0RA1<-{QtFisK&yM@Sa`<`aym4CF^u*F> z6yJ5PV&a-^SvJdNPN+RHzl97e0{PoGo*0Adl#$z#q;42enI?bJ1^E=I8i$!b6>V95 z?{(p@y+Azy$3y`Xp#LDyqIo1jOT|2sX^^%nag{rMKfVeoltaEbVLKuM(~I2^qm|%7 zF-L!nK&bG86~9bNo7VneO!AtTMoZPL9TnQn^9?g|ns@=K7+rE%PtaMCwYe?rb2sMO zYoxQ~3`5k|CB*L$m6095i-FXZ<*OYr~A$4{T{y zFeE#CLm@gX7$+1JGXEjYwlu9xG^oV#^8Fr1>J;-cDQB`YgJn_|Iu7`vm{IGc~xE3T$MO*^qd&mVt{(FD$blo4y(#y!n#OGV!r= zS5pIV3L$FHIoJd27k`c@^H?`sH*gUzeYq*&MhkLH>F-Dca|OgXyb3sO`nq=eN4UK^ zHA(U4&ScMR$Rs~k{er@5P@US*s9)bFaAbPxPyMXfJEqr%H2FI=d19*Y=lYQPkO4E? z^ca)4DF5NQH2{Cmj9@)|v@G(Zff3IL-^DcQYk)%*V^3gn;#Y>gu%>;1Bg>5M zM=Vow;@>J>1U*2|-Ss~R;@Osn)*Q7Vx=D9U6bCKRJk1hms34~ey)sH{I)|xWh&7L+ zhu-<9q*lK&-?4g3X;g}1e%7siJ}-|@d@4;*d|0_Z;Wk1vrcPC)D5}{j*z<+PlF-!( zL8s)z+1N0`Mr@-)bh9Dz3NoA-15q^b&gN70Ht^Us-EXS%;A~^t6WVP$!Fc8I%-TFW zG14Pa1`o|&%)K4!o3E+@ZC-3OovD0U^{njE6gi6O%<<(yBfr@+tZ5>yI|(v)fIY zXu8i|N%p3Q5gTmP*D@GZ78q&8XKjAP$Z}d)m-SIhG#(&=>=56kN z4|G4m-+Cu9pahqx*Q#G+x<7edSo)x$Q0 zz{x53#B78uKQrB9hXUk=!(9VEo<*GIC&^9w+K%hj1FR=-1N21s%CnuKuGS?zxI&wH zs^9j;H$3-_WM^$#C1t7z*tm&mIOR^_p_xy03mQ74Y}@>T#mf@}$;8=bOLax<@Kw?a zlwgNfH!=1XDu8pTG29~*$6TOuu>)|T)%wb>U3fo^R@G)dO7yAn^>1ht3d7m#U*>tc zEIySSJWh_3lgqCR>2?Wg3~Zn&n1kPCgz@dNMJ_TUr!xoh$k=L=hDk8+b1?c{;n4VQJ41~KfUH`I` zw{8CyG>3S4dYS_pfA`bt+X~b#S>ri)C|^YVRA%$|C6ZH9uNa`Ghkdg3tog<{@t#lo z$R1r>6zv1Kyp-U0js0iFHqba=YtLf7KdE1VG0BnN<}s-(Xe8W{nVIP$EFco%@LRv# z`QVxxHAWeJFAA)E-ydsHqAys3?opOoK@$1#O+=svQOW~!UlN~+abOBP)vSd}md1;a zbqt#@22tRYO*|6-mOhjV;niI3he6W{P>p#yERoAjeCo9IC|6D48Ol%E4hI`37}JE! zW%wx>85u2hnFH#5@?rfhFk5og{yu`P^QdDAuujn&2QbQy4H{OH=cM0;U>EQr9xrF; zBR3y?snpnhn$nK2Ik@+w72Ed!Ed}y>2;D%@{FEmOB_ID>Y!JBKRYdt18K*2~B^%|; zn%^ecuuq>qRe>tUS1(pPjm)UNOsjzn$V)fivD)`0Hs5?PFVMW~kG(ggpEfvI00d^ohS`RieiX-FUG41Hx{W>mnzIF#UE@RV3ZHyIRn~&{96PEdda6(QqW!h$wpH?iTN#a0<%3?P*+YxWD`Iqwk-Fn0w zFZ7flB6@E^zg^D;QmJ8$4?o#zf8?l_@+3YT347#N;&h7-c%>Qrc7ZGRo))&Us9g4Ciq%AxRQ57D=Ff4KlXdyezbL5 zsKJKm?6m*2B}%F;Dw~_qK$F^7?f3Hi$`KolX>X(D5CjDgeF4_<;y6r?zwE<#15!cG zA%L0Xm^&Y_kXn$@RWsSKCo~NVn1Olbbo{N4R?)n0o?Wk6($Fyv@RNAl?@m<9`NS?* zA;krE<`#YG)&4K;(d(s%3gN~QD3`gNY?x%$55w3#u1+u9^`y11LERt&0OlA^i5Sfq z=h$XE$-itfcDCUtINaqQFdss*nT8NctMzL7hhL>%3AT&&4TH@H#X6QI&kR zJ%-~mzj~A}IOy_0=yySSp#7~=PueCRg;38xU=Gie-oqkJReT$tIsD9PC4hX@QmRKn zae8aGE|(F!!sranh;4?KN5&n6YuK>3*JHgOmbLnuh+l|JxOPX(~)-}zR zol5e?xmbEi-UPdlN?lSzDMs?yt}6X>2!oDE_2;;YN(~5+= zM}zqphjLz{hFh}rYsXNkqXZ5`)4jRQ%@yyFL>_DUV+w_+dMcR^-r$IYs>;jaV^kM{ z0DJj02SP%Zr@8kvoOIiyX-Y-@J=H@($d-nN3sC+P7>~;V$O(`oXw2m_yhlT@AUhhW z6p#7BLN1HtBFyXPzKA~>@~UtpW4&(uExF;*@r{|~9Nln(iOsF8rZJ(_`zzc@_kU4d z%md|}LHk2u9|3Y(A4D*O6`kj2dy#WH3AwL+BVO#8i<~~TIcw72T6=#H&kW0k;o)ay z&#Ee1+C;I07ral**&2mQrfP>;BOz^D?zz715;0AJ-=0MMm-z~h)iDXon?312wLA^R zC9#e=pgT|5v6nwI9}YQqfIj5(nZz_We>+0pHbAP-aokR-eHinmC-yX*>;tqt@&PTu2A?DzVqE@ZV*gU;dc0JcisVrrbsAH zhChtn9>cC^L4s7Y;z3O%eJJ~@o@nDcb`Dq5Gl(|TjVl+A^L(qTtyjvf z1K}NEvfZUZ|z7K^n9&d43MX<3$;WqZy)2%-3vS{c`#QN(>R`Zxw z?r1T>#E?m=3}ru+s)!B&9TLXVX*EW9XA|HR+57Od$G+MFFgFb(77Eo7o5nifQ(3($ zq7^Q_2}}4GKanoVRGamc+2<=Vh4|uvO$65B4VZ6kgQ<09gu9GgLO??&AE<3!-X1PLTbT})qT6>6*busLa}li>>7Q$G6yaHB(q>~8s#D3C#3K7 z+p!4$sb;h1F#rND>au>6Hd~GVq30Vp$!u-P^Ej%%3b`G|;{Z0Ul$y7oGqv&i$ukM4 z3*r;|=e}4S+XsBW@&MF-OdK@*wk~#pr2si4RiI<^aJk)=?Qrtp@d!Fhla1F<1?p|; z>RYWwu2O_`cWTFqSdppM<&N z&fT!=FB+b?YKG%Hq^Wbu)FVOh%EOzTuJQgO!BgL*n)U>VK6`GbOB`xAdXWd0UwyO~_w!v=~>nYmbH z97ILAJd=A)8L+fzEf1mF;JxaYrgqv$v82&ZXr2C|UDecdm1pZw16SqCydO=oZz|TS zHywDy@t*d~=`IDga_tXv%F=Fw42$Ovn)z}_CH;PLlgB-C)?@gPb;r7G0Z3_b^_ZCqeAv?t4LejN z*4I(&Qd(ZG6>KA*nLU-|TmP6+_PPCn3MRbi(fG}K?0Ynl^xL`M7o5FIHm2M+rfk?! z|6$4mfGG)t{tr_UBAcczs}t47qqXY|y8<@b`)`!kT)%rjmOH*a1*J>2!1cjCXS0^R z6#!J$kdzMf&K#NZd+KvdjNO`yx=NskXb_g$*sgrW{~7`5mpIa&@5&h_*(C{m9u#q# zZY>Yb?=m-%h7)eaD)`iGP`=hj5fQl|*v!kILnS>D?b*b3(X)DfJT zWdr5rK|anFUpdbmLy$S{ReiVl=-goeS+v|S{&d@C(Gr}fzM4Jsr{kv}>xBfyn^#vV zJy&C_MSaFta&u}L>25tPkk5@7E||~GiQl%bnH;FV$Ms9@9o{FHp|kyeUJ#w+{uaiTqXp+v!^1q(aGtyYqd|ak}x7q-? z2eN*K2M{=Ul9=sW>@PUcAAmRqmWUFlX8SL!HfH8vl`2jFbn6d-8|A2(!27e!ev!n| zu@oZPG@gd-7sfyJV09OfLsu~e{C_@;B@J}*GsDey_&2)`O*P>n87{=u2zkQT>yIw) z4zC<~NV}gcHfoo*cgBFRLHp#6#SVX|g9BfA?7ds2>!T0Z_p>VF%3Zm3|E(z1v;H=H zGM2+W{0ZB2*dQz>|1V#i>j_~1aR;f%qA2Cdx+uv1`nrD(C*&b+&+Qw`|-;H;HLgy8^GHKT#nB`5}3=O0nr6ODfJ^iWxQ58g<{x4 zEV2ezm$}z(TNmx`cS0(R0iD7tK_iPV(3!2!0O&wK^^@e0xatJ-c+K;j+2d|rgnMVc z1To}!xJF4ku*Sqa1Yd^^_@Jlro~=tLAmlq!z|zC$m*bbwJ(macLdNC=L_R%;3xdJ* z0p76+fN=-%e6@nYw5%Z&ebW{e77|7UBLa>m4EC(UW%1jzfMA$ou{;5E{>=lehw-YP zptN=iS5Xh4*UN4vd=St_qQflj+|jUk!hQ+|%P3jvvN`5}D+xp{5r9*9;nH297)(ZNB$VbPu(-YAzrrsQ0cV5r2f9(a5R76is!Ghf7c#*s-lNcw@O25_{6PhO<>E1(hnKGRiva?t=BC9wxePfPPcvK6K~L*bscf^m!qvfi%)W9zaypLxQPBd{3Sz_#!F(HYr=%jG z;`81pEF-d#MuEOl@jVaaxzq}5>O;}K>VTeC>QnL|VxK8B{Xf!K2{T4J%wHz`ajM|2G`G3HUWO6W#}Uw<%VZ&z%!M9W--b#_>QWXj1`d}yPFDV&avK}ko##At2$=7gpGCHz^w?u1ngDR8`Eg)$Y_Dn zK`Q%(KX&ztZu89`u}RC>q32f54E*nlLwsmdvv9ktgQ!>Z#m3_*t%m zEm@EK3?ei>Wi;A8aOl)2tFfKGP~A^iz7+ZTV>0S6e^*1JAyhXTnl&M zM-YNu+{%ri*z{)Y)acnN+OQEzR^cUkV!9z}UhSd2jlwbP5gD{5rf=;sZ%33P?k1}O ziwtaezmo4;COE+#B7pKhT{`6uL;jQ^u+Fr-)BYlBx|C%2-Yv)H9gowId1&Q`Kwz2W z-!C3-?5Nk$6=+YRJ!qc)7#zecJay!8YwKzJ9oXcZ19uWa@Tq&(xr!wQikWJ_+1Tc1 zHx0Su@zjQn<<1x1J`EtB>o=KqVCu~hnR?UXgU4o*qh~lw(yi}q+lYk3C-L=(d<35# z?D=mvu9j!zEl`sn=PDezf6Z(nbx+vT_s3W!&I;5z$M0>Y$JlI7e_4hRwCdRpHDmi=0`!>_qxSFo(vp&b)>tR5jB<4zHf)v)Io^|H}I z)2HN&F8r}_>{{jqAgna!vrE4PcGs?{1qihVU)i8=z0wC|QZXl>@!}jc5UEs z^9GkVG?i6q`<0zq$h~cwoTQ&II@scQ+8;(9+%w*vd(UsdJ8pm&q7LD_u4~V*rdITrX6Bi5^h3A+Eo4?Us2;B>t*M-T%kMWK z%LSjgFF3X5PdnSPK~Is6oH}O^l$$W8YnwiC?!ZWy!?e0xB4=MybSF<|64L|uC^p{_ zCv>Wn-UN;MC^j>?%JlzHE2)q8Nn3wBp|kzW<`m(2+$^76WXIGa_;fpA^rpI!Q@d(B zALqS|e;iHwT!dcAHMwgiP1}FGnNdX?;SPaw73)^*OGsV_XEe+n7$1Jyz`(iXKAC+k zJpj=&&$hRj2J-8`TK&!JPTc>2KKZucADfbh=i`UCiF2Z(-bash_}C|!8>luxhi5l- z?l@mZ8Lwz0ilO$?#GHo5c)2jn$w{zPC4eq(wN{!!xch1|u(iw)jM2G2+#J8#xlX#v z{&7r<)&hs}+p~s8?v#p@1F|KrTvjP7YcpBr`5fOLv6fKzPt)p-eYx@?vYi+btG_~z zx>cL@J30QNU5=NvzniyTv5g5^CljO@E-$qyXn_c$)sIT`z&~P=PFDfx7FFP-X#wJX z=KYxxZo31fxP4(MZ~=5p7+l}_P<6~e$PArs{aSAIfXPiOT8An*tx-K-+b2u9}$cT z-EvJ*gEu;!&7-H%pS(&2_X+yIwn%UYPko*_ttAY?ylYFqPJV?c@BOkGraE=$z%|oT zF0V_5|AJ3S%Fw+Of|7&qt=`}#vO%P}36;LYr)@jX*}d?RJX-``YAzXTz6x`$&U`ScdNDfD*}@p{e`gW$T^1E<_EG&FP~cPW_C?8 zf7sa+XNa~?F$!)~P5M%&<6+ca+aWTx>i0KYA3mjb2HNvdLfu*}a`5vuZk&&V050HqS+Ra4@kj}RBcdg6SdN9~=W|88^5v+6*XDdz2ovGPM)RJfMj z(Lc6S>#tmU!&BJsk1dmOwhRtWp>M>QdNE>u_0;!LAuO=pq$!>&SN2;?=S%)&u8@Y> zj< z!4_$!%f~4HRYBWx+}XJ{3ifuJH4p zW+3?v$pp@P@xIA$ww2y*hnzP}f>y+r@2e6K^nBaevM_F#QvR@k`ZP|-ti9rCkB_@i zX~It(O;dZmu$i=n8VOcET24+*YD*s-HrIw7&zx`{Rz}~fzl}DS3DiIJ!1#pCWE$?9148}@nEb%ALuHZn z=*uU-BLNJ05ODocvfDZwQn!& zN?w1K_%XFGu(Mj2VrC=WuiuZW5aTfCqj)$}I@w<@NF-~#V4NMC-`0*@S> zEy`GHE}a?Dw$Cpx*#}nn>|@}BE7QdTRQ9y$HZI_I?4w*L0i=O9>F{2PEn!#4f%h9e z2uI{{V66v=O(y0LkDzVpw;=>)aXENBZ(*p8tBK94^3U1{5+*G0JZ^Dh-_1!eKedUyLYp zXu~98WNa1%StdI7KY@I+8uxSh)@4zsdGG3I#9AMe0+1yC#SIwcCg8C3cyn{J9`~*Q zuuw&|L$YmCiYvEdbBgsXpst8?&abs?KWcq+HsB8C8At#-n}|9*B{dbqO=hB)JPbEH zHQN_~Qne2t+JHwIbK^hkd_HkCp>zP9`By;iX?tOO)8xekVLEJpK|Z!Hd0L_P++u$g zm}KanB=fEnmfoO0cJlIA1ooWr%A6c@&|s9SYz#^v@}9AWl|9q^Fd2(3f26 zW&rbqVl<*kE;#G=+x}puxz7M%x)$51?P@Lz^o3A|qQ6rQV_P`93XGWqt+&KI{K~g4 z1H!`xK5arK40W)W;Ix6julQ*@Q~y_;urPt`DvzA_D>dLg4FdHPsy5L6%oy=N>7+lN zmQt=01Q7e#7DU}HaM2zWes!Hch#i4Qs-F<3AQYAx8=dFjMbVy>i!X`{$?#|kBJa!I zLChXiMyhuzQQca*@l#;Bqtenww?z;DbXu(R;2mGCUs_n^dFyq_=PG6TI_ zdO+fh{QJ{^nPN2sWwOPJ+BUBZhVkGk$4hr%0><-PmIF#3p#S$qX(Lw|;+$Qt%fz<+ zwnHq*e6|Jik8kSdy!rN=X=OXWw5uQvSaTc(Z+2gS5ZVg2%zh8C+<{QQiNOP^I-cJL z7D+KQnjAwfyv7Qi*Ia}=p5?Har(E<=S%);&oO*>76Hyb8&^9Ff7s>FrG8`zM4%>sJ zvxRy|OG{e(VF$phVn|+}Jz|Ns@PTI%c#MV}D-~yWT%b zr+P}#Xn56~Zn2vOAy5D7;BD3TBaS`^%>>H7xInZh@RVZAiTSr+ubyS->aY4JX7hA~ z^7<3qxTd*GKlerYl5=tck5W^!_Qs*lf6l=1`vI)>A^bXtYYVj=fhRl$eMO=F4{%Lv zMAN(L{2$(W+cq!+@Kzx2SEB#$*5+6S_an!%<)bj5rK{bQm7Oi;e6UGP3g2*Sfp!W; zF0#=dL_TaQ{ns-n{yYbn+1b2vu63Whi9(;6zF@;?=~KPa!ZYt;hEYXOCn0aBaOoB6EmA8?H=<)PoT9rDhJm`J}uRlf{s>BP#`w7z*E!58{ap7DjG)yay_N&LDh zWz85b@KyUu{FaA#31R-$XJviFVOjwO$bYs#u7r9nn3wd#I0d<{!y3$|z_ti9p>F)j zk;Vt?2)uA_4q4fSyGecIBS89zkE%CzgSyrk=QP$otOF{u+|F4aMng5W8-ZNH!1r2x zr0{VQVqdZvn8{vy2#=8wkbq&owVCLA+cQrrSWH>XXf*oxH!0Ht8%T6akzhdR=02YP z=HhqXB}XG60-y)g7-Ddq|^n0501mzzPk8|p4LA^0=$dfbZCkgNUEM_9EG*Y+<5w~`l^>3esH*gd~?c(CG} z1IMAUfL;TW$;VL%u9b`SV7@&MzzX`~!3t_}{ghAccbp<&vnml`KgG%Qttc<;_nxqI zx-Cvcgvit0^K-H$i$Ug$n8^Log> z$?Tg^HwJST9Gg6v&!7t7e5c*z(|Qh!6kWzdkY)2D_!L**zbzTkLf(4j&+TjmH*MZ$ zSG8{M?LZXlc*v z$Y2sw)TcML&n9hQ*27%=$JEKOU8zOBEu?=&1UUSY@-A`!DX)4FGXHa7u96&29Qk!-J2J8W){(^ zE5IXnWyTff&7e$s?~@GReoL5TTPiXOW`2zWPWA>C(Puo8R3q2iWe4PN9#(#Q>uf_b z`i)Om$8YuW&ayaTS780)HTM<`yG(dlUsvZkdY;c_S|5r2G+hVBEF+G`@g&ZKU%xBk z5ypY^2usWa{9~xtn4et6e6vPa;Z1S-*awFX%G`I|YdAHGeZh~L7G$3CHT!ZsNVgu0 zH`eB=axGS~-d#CE@Nk>?QR2z!M1>Buh$MX}W@0echi7U)c7k&Ci zP%k=xD?i>t>G;&6yhqs)DykY%E*RKLt1}G<&d5;3)uat6l(1C|7wbxb<{gTas(!{8yfMmE2Ceo|g^^oLEaB$y*mWf% z#*6EWmEe%@Ze3Z>e*r6Iuv9V@{|8$LPbCpKC_5_-*dcrCcx-A=aE=IT(HXUH>BZYR2BS=~Iu2=kK52r=O%qoO-|J2k#U ziSgZ@P)xP}7q9(8twYGb8T6(+zo!q=fFU=z+cc?BJ!)RWBv+IGraGK*^mZ!?Fm<)# zSz`+dJG|{P)?KCluhsLz&$75=UG9PO?zd~iFSCd0iJHr?JJ=A4=92nGE?D*RyD-*# zxE&Mp^!C9BC;niz?QXcmP$(WQy?ZwxoFNTY97_8A*NTDAb+2DYJn|X>*OR3`Smd_M zWO;K=(A(g?!-m)W*v4qgqGCV@ttaM18d=*)zH;h~Oj?n%gIj*=J`5Oq5SqHeDK zGyCN>wf<+;O|K<38cZEZUT4!P3?Nt_dz4kS#xp}GX{WAMm0lCJ<;fr874a~FTHkb@ z3r|J9L+Hsacs@R+Xl1lxRfb1PuNcDe(>#`<3B~s0OMI*p-6Cb#Tm?YD9HM`DMwpSZ zgQVN522ML9wlN5L`Kg(O9F_{Z%j9llWWEg!-38q>O(So;$CW2c6>LLI{^RcaRuN#& zZo`QLQz%3pa>l}IT%IG&*Sw<6nVy;WgZs+jyEfxX46ZR%jdLuwSbgz11wlI%+a%Aqdw<__`~IDpU%=gMQs$)E>V;&RSN zqLGgt@@u4IWcvmu;M4*ZpxJ$oFLqT!Y6f-0&3Ry^$^6*AyRUd2@OnCKH}PEjvi&I_ zfIbv}>IVoAUchO|lb{jQ3v*B*zP;!hHdm|Ef-Hyn`7EawW!U=2V0KqqF(46S^MbaP zwu1`eUgC{SD|W{^C_COW74G>3;R>AB5Z;ZQKb2egJ$h5TWzpUj$k5(*Rer16J#Xk2 z-@{!-&U)3tZ-IVyuN0|5D^F5CBhVP=;5Dd_JzwRQKCOe80}>E@us}XB_ryT?EF8G6 z=M+9bTI9ZHa?AF~#d=?XL?Fb3Qy)n+ia>SjI-ms>7ocl@6GaSiFuwZGuHW_0_b(gE zs4CEQoC8!8@0?$AQyFG`xjF222YHvx?@F-C6CFEZaKB?!mppo6nc^~c*+5vogt^=n zu+Ipj@Wly(a`=OA!}o}9wG~926U~5qogk1=5e7-}UHqj1&SxkDq~B)NEz~W(8n|R; zqeODSRzpRGex0|#)NRJ5n$?oC9bbOD%H)X#sDj4(J`>P@qA?stm-opi&V7CWmxbs0 zB_8XXxZl{Hh#45gRQphWnTPM4*Y5p9i3LR4f$Fe=-tLHuBr_I z%2gtPW2W(!)jRZ4CSQp+F4`kZmspHcc&1l*QnIRzOrWo(ff=q(!*A=|NqvOf!T2M< z^Rs<^{rA)pp*k&cw=gP*xM?e6D8n&#rO4V>`k^B7WK5!e@l0?27pEd#SsRd&by0r+ zs@VCxbmHINx`Tzo=KQjjHIKZxKsnL+DgW=^X6=r!-b%x4?wp;Y_ z|1ng`g$U0k4tRg25B1pDAROS{;%ClP!0}`FXQXVciz_^RnJ9vFy07C|NQ7K2R{hD) zKr_4cx{zeCEWRn)16q5>X&2>x<*xt?*g)N2a?LXJhSb3 z-q19S?)Ub*;;-3GyGL5Vzx5?Q07X6Xef{_7%X$H5Jlze8#enS?wZr-KM?CmH#Y$m} ziRd-#l+vr~?e2=DkXhDa@wNVGloMpjYQ$k zV`xHA6e#NeFxJ-0I44K=i{Op$nI4_V4EX4-dEtDG(Uox^zSQ`JtZVG~iyy0P0Vq{! z%`GvyX4&D{JE{x+!0G$nQ=n|qlC>|z1o58ht!tD8HSeIt;p%(2*4zmG(1kP3p8u1F zlR2a6q}2R;21eWO7Pb!&)gi6r>S%PM|J^Uf{O(1GcaYS|E_8+Lsp36T|5It4s z?XXt|Ml(`Z=8*<28?`9(IW{R_Iy2%P7xxQHW_^z^)Iz!j&*hmB3th)<6_K|bHg z_-;}du9R#iXhadZ)u;2-ukhq?ZBEeOExDEUwYJ)CzxwSYLmQm~0~BjvMf)hTmtBxk zZ^z6xiVau)2;}XYJL7;D38YJ<2+LYVTk*bWf$`ZZ==E8l4Zx1Vq2KtuY#{EK;w$>% z0jN1WY&mB}T0R;E63blr>a#S#s9EfLL4tP;f))k@l!#8@^cL=#gQOd<9(MqR4La4A zx${`CGfun*dr$`KL{h|m;GVnsU?)RFh}@3o3L&`CN-ifNj^9bnuP3ajxjF?UQXNmQ?F>SM`A1gN>RwT!Ow(V;egK^kvq zZSBTeF#qaxmc+pf{VG^@0q;5$yR9kTDIfEm(%g{?$;ogF2oKq*5)=EB1l?lISyR2% zhzczojxM!7=d9)$U=dew&L#>x`-}I~VvoC;*0Kl}mxOm`84M?`-0V28v4T>)_8)db z9rUiAeM7e$DP34Q*xQyaaOG9)=>`a@#@#!aT^bn{r=|aigD|7fRrT4oEyB#L(X3CF z$K`_I#Ot@6CFYoXr6j|U%L|u?w#kTqE9(g`WH(u0_A@NOvZIb8du6VR?MP?F=W4w? z#M`AZb&hk0Wn1E6!6Px#0orlRlsLx|SwE{>a>-6sTQydViXOH>)xwb!j=wIigT+nf zuP!v_(gQ5GpLZ%&?gkqV9PoQOck$y>d{( z-bILH&^zc{yk}u$b-co^5kQlH1!ru!OGO**7SI9Eck7jdfxz+ncB8v!UQ#z-k`!&}!B zkrQt~ft_n$OhJ15qj%kvu?ofh`WIK&oOTZ$DL+5!_0LK@@J{@4(!Xv$i=zx}>#P=A z=<{XOob@w3_W)RdRjJ4Ubjyd)*doPlW+K<#f9z5Qb z*~x}~ zm!n<|OwB*}rW>5Z7Wq;nS0Zc@B#oG%SmT**!$wT9C}YAtL-Hsq{o@SrqLi6j(v<5* z+Y)xMqMw!D=vZ8ysb977Wl|Y@*~U6_D#2R)aFcc_XGhZX`ug>sDL+ZGR>Mz-<|PjB zS1mBsL;|EhsXkge@qs7d>8CVdr)h}soR52 zv%`&ZnPdvc*WTs{a)ZR4Jky20CkbpZzdlg-Wv_88!(wR67)RtDsIB;WVHP51xZlFI zF)P2<)1Shk;(lcxU-PR}mSlR(4p%GIY{HQYv6HuY3@gF?3mReVe?05!Ed4CqN`9p( z#)G1<{MsvlY*4D_d&QCA`eH^k^WA@rJ7cFK6B$^)vRBY&e&D!+Kx=*7W~`b$BJH-E z7@+Iq|7DGQw6`hfBi5B!+eXU8jUi0)U>F-a4N3dd(prAUmd;?Y7Pz)yF#ba_=SZ6s zyL$M~uWzR;mp=a?PZ~FX)ynU9eAuSXl~}6$ZLJj%bE{re6%wYx>mBt$#2pj)Zu_B> z{CKDQH)1se&iNk}>$Itr$XaK+o>;Vlp#`Qw4I3EaW~V-ObN4nqtQK1vj(eB2+|16s*x zb>&O~L{~2_C>uH!ANgW`?)tc_6-%~<)?eF-!(G0|{p24TOgohAZhVUKbEaYy(x{Cy zy_J!v%i@B&m+NPBwY{e+m|8mQC|ZT0$~5uf41}63-vrC-dzMzvrWyyk3#_vxs5H+|JjL|=!(F;YiJptWw?#L|JCVS1u zd5k8B%Oi!Wj15jn_YS0rl+4@UAqFv?>n_s{JT2H>JcFPDXICY1)Di6JbRT>rNQx@u z9~5249$&EvUKM(8l^4YI3KQuLG}NfLqjV%q3R_n#M=AWyh= zhvj+{`0HMF_kDW|vI1kK`pVCVG~;jb2mMWI=58AQTkrH9sra>%K()($OwPou21y9s z{`fIhevISn$J>7G%i@8VmiZ2KJr9{ZJz5=i5e~(fLd8}dD0OneBb+Wh&!<# z|HR#aH#teuEMGxQTJNeP$p0PzT3M8RC9ynUgoqktbVjKFvrmWc)mX(B-sEDifSdfp zhTQD>g&7-5+RvT&_3M{C5XN!6%I-TIsFs+CW03UP{sRMIVEB=x@s8{&mrj@dQq62t zd!DEMI3~@de99A~N#dU@U2d=iF~zo=JWj;K7?x*4eM$+g@UKFbb@z$!mtS0`n4__} ztS38gNfh||WH-9lN{05&m7kg*$^r~oz7`nf{^LV-B5LBs-$_Qg{)gaM8J!nvqwhM< z759?_IOcZylJ!6S?aegZUOUM3t${M!VY$JL|A@O_YdhXyd91UByvAvBEZ5^LPvo6` z8iUg-&?<)qV;qzr0=^WPb!1%1q_J(s>5s=`c_E-5upIPW-+DO1Ju@>TxyHbJJ&(O! zg{ZNA>s}F9DRLH<3;5CUK5EW?)Fl1hY~_~d5SBG5B$+$;;af(kKV?0$oZ5E{sH~eX6Cp}0e;7@2{LvRL4E25tA5-H>=;=K`_Dj$dLca;rd*dWV_$<~@UpdMZ&Gd@s$jL#D=KzAzG1mp^C+|ZxwIyZ<9$g~ z#|dAKeUeq>IT`iURF)eSdE0^Plkk)9{?vH=Q-hA`WRo8ZoC&y3kJwfZ?}^kOGF@b4 zHTlVP55sESz|W={@*!VH`oO+(YK7y&U3x7cd=ri zqr`h_6G3gIW7ERz%IJ@UAWf2VgxM_hc}7VpZgK0Q?D1*IcW~X?VSL|hzOYcve2n?9 zqs!#V?cq(*FiYN+Vq)fQVz6829C$Z*v3N_V0->5KT)pjco~u_0NJPs{CN}x-dzNfq@Rfy7qVrWu8?n`eg`lP6Zcqp6 z(N7z4-&^()vD{lw=6Ls27(MekND#THzzVH}gQJe8;7d2UX+4k}Na+58Up8$D8h@ah z^2E3ORqDafu$$<6hiE@U&i<-Uhkn=nD_CBo|Kb#hH4>~+c=k2{Sse$wrL#`KlR)e| zh5h1ugt*Sc-#mS%kBr2!33S9TjA*dTm ztc7W;SBxCx=)uaJ?TON7Bo5Byechb+E(#fx!|&6jsQc$g$+`&EG?ZUUAiB8_0N?Ki z)2ksa4zjk&9mS5m&hQT;X%XBsk8KJL5%*bt%a;^jfp`GJKzFuoX!(1lkAYw|r(a#jcK`IXXDV z5L#7SQ-wiy@=T-oUp=IsOISFu_>3O>SPNLIu7e;DK{6Z2l6L5L&(*U7X!_#2E5z(4 zfQRi7z2@d(;;=x$_H|cZ6V(s4QEfvO7%nhZ^b;>kyHv~tgYbDl;zslWlAPp^CDDAs zp0S5i^k;9I~!i|pDm!@nM_^$h@es4fIHt+tHzH$Ay4tnsrUvk`Ah8vp)lf3)| zNoqV-1@AeyW@XafEF_FYiZyu2)6(8GZb8S)fMB^=n} zpOxqkezEs%U>{+6EQg^1=6g|P2BrUGedPC`$UMud#7C19s8hvhG!5!9=T$*mQtf_H zbI*Iq$s_8GBuk-}+rkjXP>Lm^5VOlVL6zR0pbTq>Di(#}3d*3WTHz+EE?;7k zS6s#9Gmz&1N@}5T&GxumHEi$c^;_lGyOiE##Fr>tMJITMFHRsC6!wX2Q7>1KsAMdgfD3%Eb|Zv0FQ_=e7_kB6kZzRj;JeS6LEPhIp)bkonh3U*4&@P zS`Xk)-5u{}J&~ii{J%(IgN!-uF*H))_SUzE2bSf)9p;Mvq4Be@WS07e43G%BU1>T` z8WC#>-YlX)vlt4HnZ0*t4bGf7Pg%S^p7E>FhvS=vT=EwW;_wQOPD;BS{Tq8ygHxNWLcJ)a z5uuLul>SQ^5V}MskC@jm^71&G0l zde9v`{qJ)XO>T?BI3^IU2!^qn&94nNh&d1ezDv?*{^p-y<@c4l#4%1!oQ4F=LI)8W zO1d{#`%oPv7%v3*>alr$4?b^PETz(LV~)rsOaY;^lcVQGGPzqG>qIThR;u zGZxp(_hP8219NnM4fkZZPwy9}Rkd$H1(M=t^1@eUyN z6w)Y*OZl_;vhZk3mPuTZjsUy)bH_jwO;2NV`jCu$8A~PY`{`hq_u2%iZ6^Qw-*iR0 zL<6$5w*eT^3%LI{r+ZFhPs@b^uFmLZoI$=c$^DugVn=Xji$zIQY;BZQvN?W+!@X+cR+vv_ikR2A>$H5;>>vlNvU`Hnu=hA&Y7nIPXY1l zl?8DB5_k&6Zh}gJfd8H7HL&)|9pP)9-pT`4B-WG_WvXe?TQ+E@pOsc;5nnn;F)(z< zt%YTMKg#iF%`_5L9wCsyOiYOle;Fwq`Hun?g?4F=W8mj(ee&;`QX)EO^%w5TEa&h= zWlN4!vWNAy$o{iR>X?6*~XVDd;$XPY#Iq`G|ckJN4_Pwb*EXk@*{&0At6MzMMoLu4X7 zfbUlb0-3#mi|h?QiI;%lX&2ukgbiQ-fFWEwK;Dv1%skd&^h$C7Yq}>OY3f$@TRg~_ zkOxjF(N_-eeLT^zsDX@_{*f0WVPCqgG6EXVmeNxib zZ}{}__n14(RxgNgi`1W(^hxiSlfn0kSNHq+G*{TUW08%b-Y0j7P}Hy|Kwa3Ci-*E7?o-PTvBkt+dSs`y9SM^i56g@}Fw32mo2oMHEbzDi!oTci~gBm1&iLhpPK1 zwoAdh0w@ViZxW6A@1$hvI>xpR(_TO+bYzHLc(8d4ef$4J^Co=VGDWig@j!G;}j*dvLQr_{`7k% z^Wx0pqC27bEe=k?-r#1CD0hu*W=^;XdUf#!gM#&uDql2T$lGQbEo-~oH6go#xGN*C z?FG*`X`o0=U~ratB`oX^sF3z0WX8P#p|C@L>BHn*;_$jzPACBH8~Ub#(9gph9Q|{U zv7BuEg<~egL&pfatICs*DwIP43LhEnHrUYN@u3_07T02c;z^QuOGu?;y?*JVJs&H| zisWE0-RC~BiZn1+rEnL_KMktQO$rzS#syJ_z6EuWEvpM2P+C#u>${8Op21u(eAVxp zXW?%U@%r7T=}#!pPwu4QV-~!ZdGG6)h-Zi0S?rJh&R}L*O$mteB2XfJNkNutCaspP4%w;hJk-cL#hpyv@_c@Zho=V+!P6&apqh zClkvL;#CIr)SO)RWV~ zIF4_E+&MRhmg5QyC_Y-goi{_l#LLI{J@_A^&&@{D6Rhv$P{RvR%^haq!@?T>ArHFN zmOiP*$4xxnvwFV$qiwh%mG0ULI;M6=yeyPs5}F5zQ7hL9XQ|n2IaZ$C;Rs2qcl@R` zqh%HnW9^tf%u_VM8r0rDdE60?kz^2YDZbz+H^{^mJ*{$xp_JZR#@c}T^$sqIMy5chZxPl_G*^@EUDCb9*zP($|9V?sGNwoS*; zOABC0aHs>{Z;OdLg#v~dgUk7Fm<{seycye1`JQ@dn0(ulu9H2dY+yb0_Z7AYF;8Xz z2q^&|Bq_XFVXw&Y4AjS`%gM>g!suTyhQ`$c@=W}q-}|M!&V~a11j0k}6UxUayi|+g zoZHvg_MKJfEUR8U;~QmDaM$8iy6p4m$GABE#1uP*oz1O$7$KMm0=Sz*bSf?mi^&B) zc!jxq_6+NNVOo9Qm}SA5L_tyhEf>HWOUGh&cWqkN|0-@^F6GkHC~~gD(xT~2A7Orv zZ04|vdf*!#Kb8lPGbAtit$pYAr}mKYA15!@07biV} zT0MXWT(-p*d#bzY<8h*wf}H7vXHOqh_dVRgCODlPyehCY+^~5w{k}u+c6wZFHUB-k zT(`LoZn_XTkaC#N_v@M|;!35sT1L!rRP(ZQe7(T0P)Z;7yY7r3Y~2PQeTweSY<$5! ztLm9r)#ej|^UYT4=`-`?yKklC?Anl!RGwptU{9EM;>*}K*kEOLajt3n@QY}TT2F@f z;V`ZdPP^QQPQK5Z=a53qk^Of7G}>jV8H&Ne%gSUlTwozY!xm?{3G7-{i1RueU`v3- z81_YD(9qppt~26SrpvIf(V-h{@-FV~?!2$?_V!I@#lSn)+#cFB z{(%ig((CK+{rYI~Uxd|n$mY0dYL?{_aTl9QlLr$-4K>$z6<05Q=B{~l>_uPchUlSy zBy&PT9#Az&(HRUy0Ir185>*w?%(@3Pj0?NEd)@8TV`Ru}&kUveSzMOkFJQiWRb6zA zlv)IRiXHPzwwJOOc|$V3wsW%ik6 zjvBwYg>8dKV9nqp4QIU)naad3Qca1yUcDn~BJ{=&lhQ7i zrI?MZy5g$BWzreBxe{f7zb9WHu*vlUOSU%W&-rT+ak#ako3SvZJXhOmB=8mWfB2y2 zslcU?WgnK-HL0c4?2U!&&)?M$tF`amMfXRqq$C%x7$N-L2 z8=$ALAkw1=`fKEzCTHg2R(|~i3HC1v{n-@4g(euGWyBiE~mP&MlHlpmRE80@_Mc!uW z;SwQ_?_ND5bPQRWH?BPVcGQfLRR0`o6#jYg^@v#()drloqaDdA1b7jm4KvO!!U4t8 z`bllKW~^-Q&6NpVaHuKTn+D-VD1a!h5mA%N1ss57a46C7<{u{bes?t*pzsq=u#1s{ z7K|l+1fU`L9pELIdV`TEHk5g%N(z9Lv`YJeB6gx@mZ$j&6+==<1go+>k7fCC*E8zv zSQETk$URz3^^CuV?jQQ=CU}`Wz-ulU7Xy6URSLi>j_8Ium-` zLza+6FL`ht4N<8d&DBria&>nw09bgC_VuU7&2bJ_9g2i6VW#AQrRlPrT-UVpJ30)b z+W@CQtN)i&VM!DicNE$28n!-J%f1gE>bD7f@rH8;he{!m`)P(PJod z32xKGwQ?GdV1)iZkl=-ue`oV6a6WgqTWCzwy?;%Ti7m(}k7YwR7vuDLnPL8s7aC(O z=5XsN`DKp$^8T^Q-|)dYo-!gD3DQJPMAwLt45cFx-}DmL&x-5BDv-o43I=OHZX400 zaO1yzE#M{}jkc7lbVOz`KWnd7hycc4D2g&6OjwcH3Px3<;`DU3Z`VB=Nq=L zom_vpDva<|`{)QVbmD-xD~u=@?YDg$c!9rz;Ze=C&-^Zc12|$+f%6a@kdvuKym^VJ z;L+M!D&5A*UpBc0z=?cRcpDg<|eVh9XintOezTUS#Gfm zPl3;mT(qV?S9{<2#7GqU+z*~~wB0R#x}&L~e&dG+1I(OccZA8AE$aaRM^(u*WK z4CR(~oMub&;bV!F=ntT?RCwH@p8GT#ilUoU|~PfFkeT z=$eyXoK$UM5l98eZoBS2dkmvX>Zlag{Bg{K&i z*Sf96@;$a#$(j=is|Zh>2I8aH^n`si`fOX zz)f6AyeTXv1=?~tJMRHbuF3}_vxlO4;FAtD~-?On%a`-b& z|4!K}i+%Jeqsg;h=!RF4O(KRURW{DmD&7ld2yMF^(G?7b;#w@f&zBp}veA4>^%NGa zr?Mb$=W7lp@Z-bgqy8T*H{)| zLf7&;KA1jyKKpgjtMlpE-9?wVB)V8HqYdKo)U=MVv9TvNe%<_NsApwiaTE`l;#*0y z$VEYtsjY9ZnsG^)Y}hQ7S%Vc@5=o>iYk~WYa7Gm}0eTd<#XX%uQz<}T<@<*i%yB10 zYV@0=-m)}7k%TAat6w2b^p(zn8Y@W3ehZ7lAIeO(hM4V+sge(w^72)eG-}<`)uK;X zqJ#ozQFl+x;(ZQZ8DO=&KEYowUd+OiMEajuxiqrwU+$AqX_T{n_Y{5mo?X`yZniP3 zMv)=5xjRinBuP2i&H7cTcHGb@z0x1N!X5FB3|_4_0{Rl|fY9jv*&*1i0zia{SO}lw zN4s%;`@fR0xw_C^Me~M9hYK7DL-)PQg!|3ivm$I9<2sQvOY;T5H**mxYySasD%MxA zPszXieEJi4@e%BEZ!avmWG_MaA9Z0McNHU{js2wEP!rvqut1%p{~nqTz{4Z{hNo>+ z?gV%4BFp({*7_wK!{g%6fl2aDFx?G{qA@Q6N=rtKKKch;Qpf_(4e6F z9@cGhuWD>{&fxcgA?}NMJ(o7a#89T&zElQ}&{N8#VIB-0>pwtop>Q^Z#r7Ql6s#fd zMcnkFD(X|JPwCQ!Qs1c;vY3bcIT5hmqw3CGJNRs_#m}jcfOY8FpHrJFt!uyg6%=*= zlwfmp;a%Q#Hi%Yz7k#t#u~AnIQjQP^YP2sbw0G5zugpGAJ~2s0=W^2c_jRp@s6SBJGB?8`xdRZ8 z=yV#e@aToTBQ_9oVuE69|7DY5_D?NbPC}yNvcWz+dvyKf{MH|*9XIEwWjTElM1C^w zg_ACuiN_IyHxjV4#4Z!QFSPxb4yGu!k{h&U4rD2(&zpug4Y}f7z2BXls2`O3183@B z<5R46`;7X+apllkJZku4IO<&81sM=a{$mrg@t1M~bDgGx3E9Fc;Y@uSMkED`Q(9OMBXMT4(LEqd+K-ZnCgiR z6%5`Q>0A2r*(d8Jq=PAJw;|>Aa5?2pd02;3tZa7MVmdd9q)#ZK>iHw7b;-4iy-*-o zb(Dl8Yk?g~@%KE%NwXn@^S>0lXCI2VYDPL}ZyTA2Wt?Z)f(0L%ryw}+;L}6^5Jk7O z0*j=@3P2Ee&<}On-X@Z~UpaU4s(T)3zDaPyl`A$LJb^6QoX}HG{)?SykEsw+$ zzczIlJR@f&snxplW-8M-ei?P`CpINHd0tdlc#jPTujQHpfl24yE8BtDje@f~D_ehy zvzrg9`@VvRr>$((3=ni5tWg}Opgu!!^e%Vz=dA_@KJ8jKed8d{(9-R^6!l8R;)UPT ztpCV~ApM3Qu7nAdMxIfhXsO`x&GZh>M^P#wL(vHelCRUMjr0 z<*oXr+_bwfxd!-q>H#Z#^K18I<~ksr>pe^-C1(nn0}Pot(Gcx<|BN|!a_yt*K@w}c zu0GFxpO^z}w8y1C5=(h!62M5f7um;oUH+!E0@G~H>uH;_hS$KhS$XzSK zb^nmPHnD|^Jb_AS$7DN83${hp?!7WW%W|bvaotg;4;h#@tyU+IA-oFPQWbA^?&sXF z0*h+WPhN^HC$_6-*m#?h?W+&xapy7LzBh$TPm0!V?q3o*_cOSp6R!N7Gwh&oS%}PU zv&?uq!DSeR%>ZqnK{b+fBmLb?x>bI{{WAr`Az6s+R!)pzkNl>UJr zn$F~NZ1Y`xXZehzV9Q9F)z>tA>cB6k+7#E}Q||0_(g@*fSID<|8G*{K#W5;UbSsJ# znw48eY({bFpd)KMbi9HdQ=!2xX{tpf+QqxKorl?TTFDN3uD9AyPc|KcRJ>k!b@Ls> zfYl4{&5}bd)MJh_8ySWS0OsLX$oXsV11u|}S|-lRSmjMnpO6O51Ss|7Q6BpJrED`P zS9n|`83GJ@KwdyX({1&nnOXH-Xct7jbNm0n6`VM`EqukL%0Rz!zqaWGzr`X#;g>JL ztisg%(S)12*2e0#Ub$q@58)j!>4eqF`}MEMC7=9Ct%$HjtpqS<9M*Il{Cu9NWyS;j zG;wsbYrlqAW{Mltf(P?@Lr^P?Wz~)NLGhR@vCA53!M7Kh)$V4wwCoY+LKnUR1%de76nEZYY!H*az% z?&2ddT2#Mrkam?-1ZIYkY=|qV#`yA7T`Z^?SX?Mz9&^Z6;sXJ6kg+4OZrZlDZrpwI z;m+k1iSExrMW*<6TEz;+RxB`4VJTq91a8QQg(JdwY3u$J79?`$3Gnm7j9g&Z--K}& z{K9tz4mW)-ABnjQD~1V z{kD?+E%?za6?(wl=YJ4_mkAdYckllqh#1-aR5?M1^xMyUh75{eT<_Gk&%OWbB;&mH zQmDv3;q|rFEx*d)V9icT$&L@Z~H?azc=E5*LohaG^ZZ^Qm~fMWeq` zzTL^ABPa>-px7`|W{bj6bLC5O?~9P?yHtiOVqp#N*_0Q_I`5}D{(4iGq2Md?75ROG zKwzE&cIy%6?ikg%8V@uG^k7bV2b`#gH{I^^L1A~``v^z5fMBrf@WaU!jNR*!#jK`# zoK^yhIE9u=8}--3_b8zIO~_btr|<#U)xf+GfRiH%AzC0=3UIgbzc#5a58q$&+OArc zsUZH-J5VFowA;svwcjbbFEJigO|B0B18T;EXP>)ZOpqqTMqCjv=Z-{W^xuK+x_BZ0 zvk)jg=hc7ah#mUD-?DK5dp6N@CsOE+f;tbG8}IWa-up&}8}#aPHF|TJc0AXL3O)$rqmCni9ePuA@WF2?=A}stHas+@VFVcWr<#rEH3Xi2$#Z^Zjw4i9}W+okgXup z8R0&J&%{sN;74^hOGQI$tDBk*-Mr;O>XRsS@!gT0)=;c)TiIq6F*Fk|I@rD(ZQcWa}O`k{b@Iv|ytpInr~HzB>1 zmrqA4Vjx(-lbS9m8X4xL9X}i)MQG#2=C(y*Ye(u289f09rB7Y!rZiD1y;_QU zO*XaRi;p_K7Jrdf-IVP9?%xO^2NCMZOhOu?X3BDAM{A*ZKb;m?Cj|UxEJ@;@H}`w> zC>cvGi#}pv=uFTU+Np2qA|A!SV(JH>;j;1=JHgk%WfXg*GOFX8yE>aP_sO zm&))skz0=QaBPL8y?m7ae2`1QWL>6JzLjs?pGK~G8%#u|ha;5Uyz|ndX0iSoB{WrU z$sv0X+LZRP<4<)sj+#CCAB%q$yHcqKjt{h~3%f<#kQoAb1#=!OJ;KXPsav5>JwF}m z)nw&6e{tNuud zNn#;S%*VI}tKfP5A3uA~>x`Ctwu$Q5I5g8)+ATq88>L}(%}C#LGNqLx)few*z&a+aZu(L5;TbW&DX> ztE;PPFmoZ?ISuR`!209BHB(c5k138505NgQaM)|L)B$6&FwvnK%*-o>$PPwQ2ODh7~O1>W*`3adKaXA~i zliO+@wz5Ogjyq&_+b}7-&C-#JCS-|^8uG3m8h!;OH05sx_td?@G$ZO5NMk>rz2kTM z=~D&5>nGmA1^r-eUsyHo=P0~xZC@wvXHn&ZT*cp?$#po<6>QULnhVnd1~OY22C@no zvM{{$Ute)?@epO@_LoO>kX5um>!0uRYeAUKg0r&*$up)gCy^tjTZdXa``&C`t=y3f zgF!BTPtkS4jzd8y;YrA#AUA{Ch^A%4T6j;PCi?77dU`r~mhEbJMe!c~y3>>`^MZ}B zGjF;T`u2v-HRm#Ig*GzPC7PG9Wqm2(JrffX6;VBiWO?DP<8Ln{f>vHgw4SwQOZse1 z!j@-)aSRc&{a?nCUzh9@V0<`mt)3mCW+@H|#xh&<_MIz5{f-FT=YpCGBDE`ZgFCkn zV%CmE6p8r~tC1&om zccZ{-`=j57H#vsQQ!<;f97;DnB5UZ9%I^5?whK~XTw_a?Y^ZlqN`0nPEP`VC?J`4c z9Agl%*G@vLA?PYoR7ulaWADP!?T>|!BxI_UC36nHtb#Jl+W5!K`6aWxEpNZlZi{lL zM#;X!av(xc%U$R5m!U0VZ`#CpD9RdP9o+8p%PA9m%RYMLmxoxJAS7EaBj>&@*=yM4 z{&8peXb6Ijt>$E+6nv%3)L*T@2fFn>@mrSnXFI=eFDyJ5>$Ec2@~pxH!kv$)ys}V^Ex+&MM!Y<%2Co-LsI5JS z)xBUp=ZBv)IMJs{X;hEm6zEqebMzL8jSs?n_vg~YbxWD<&o@Qxl-9$nOVva-^q1=S z8~l7DK45n>>UB!{R%%8p`W|1JLZhT=qnZ5#MoUdl&+4tIFJTS-a63tQ{d5Nq%aOC1sDH3{L>J#+96`KX>Vqod#T;KY2}FNkQB5iisoKe=)Bj}574Rw&)N zB<;|S^F#YXgIEGqg2~0wMkcx8gUiKvXMeG`dyFHfm%*&vH5_YKJ#psc-ZD&m;d_pA zj!l~0eb|t6V|y%}qg9{~1DS6`k8pqXen4B?U{LyKtGK_wS14WD<3X3YW^WfG0km;r zI7af-7w3sx-4*||dBh{9VlBpCxyIsYNLn6@tT@wv0cu^SK)AKns%yK?TI!#3ZF+m( zuqJNw2jOXAjBmQ8LxqA?TGrgI>bIu%G0qYDUn~Z?on5YvZ8AFZK4pAa+nx*O8%R{7 zQ@S#*1}0#B4@iNxHoQ(vdD(Rn!W3s)wYf(9d*I}yCt2Ck+vH)%8f|LhU9bHc@AKsN>cmi&;9K?L z7DH0$f2QRNB;*&>KX`3<@-ej8RO9Wy2zXQ2R^DEOPIk^BaDJaTM)h4C&c7h8zO1gI z_@FST?$Xcxgo~2P3XE|CshUZ9Ge=j7%1ny*i8WFGI4I1DJZ#NzJWH+rgl`cJhugDx zeMx$seK$Vpi)~!@5=!i3F0Cu_4#y~(q7V)Qy3A1$jaj`(Q;+gRg2@;|1`Y{u6e(feKzJIdkkIt)%b1Ks!+)eLUw-GnUi3LB7 z=g)U%jeZ}iBHANl)@VF9xQh!Q4<-dj=UojN2N2H4U{YlqtkuyU=y~NV#crOqx z|F>$s2xE`grXL$_*AWfk%nEi@9X~uCz*N5%=@@Hvi`;MZd-sw*U#c#o}Lz&(Unq^HF)u45_ec#(DBwH;;(xXC;WaAE*$aTD(_8Pf`r}xZE zXO8`f!W>22@b-v)PQ2_1lX4W)8-{Z+9mIx|)Zq%xYlzptEjK~4XW+6mI5CZ+u@?~P zk}*?mpRph;?2?7JS@D}(>7p2%{`2Y2Y1 zJOkMo+S0vgg;}uu;8z8tOGZaoY~yr3m%Cm!Lt^J-Y3Cr+%i{@b;S#mgA5yTNm;LSH z)#4Uxl}t>%9f&5_z>u=|SspfO3ztB)UF*b<<`s}_N*Mj*AhellOr6qS&hzHNo&*v zucusBsyGa!00^3EUbJ{fS7+rz0iLpfe%B8y|12-_`ZKER7L!&c47W(PmX8XO!fb#L3B z5J#V#;t>bHae0XEmcv!~@)H=-M&TO9S$b4dc*fN9binrC z>jlsUesa+eQ+oS8`XD!IM#^T-&(GV;0Hp@;t;3;_iaJY6OXdtbKCMHjs{B)O>Pyu> zLTelIEw=$OtoaWaKHuC{NNgp^{*l3zQk|o{^p`ifGk2NeD{fRLy)U7}_c5xn*HNVVuZ+J85SL62Dj@d~3kVvw9 zR`Y#TzD1?YpjppuM!`w&pp91MsrBZNG~Ph~oU3%DBBV8Vf3^-++nC|Y@a-b6#kTCwbr&)CB9XS>eR?w+*wvc@Jiu#$;Gx^Hu`z=q+twWpYfi$=)7j4h zn^1*se2Nr+mJOL&&NaH5E=*i0Yu1Wb*nILSUphx(i)aW*1(Q^m!3espSISli@Jz^Os>U)8kiqL+;6 z8Tix^tBu6f$@L3@T{dRyrWb>@Nq{ z;XyX9y%K~h0~sEfzfwUO`Yl52(34{&RkqH*YZ7@Z5^tB5{vuuvzIAdxcDri2KICKl zAu@;gg*mb%nA3MOSYuSeHW0lb1yTb%EmrNF|9|K*{C9<3l!#6Pt`X9?<{sqLMhd~r zn$8@3d2;4FBjd#5ZGlp(`_f-9w)>m6Ep}QQ9=O4QLz8_oJr&6sG~lX$R%oHR*Bm5m zrKur}$&N;~aa@|t&ue|Q?aH$HrB#%ho5<%>vP8FhM;^TQ>NIVs$bpT&6e~@}6-EbU zceSCKPtyzsB>I8#!i$mZZ=Lp&EHm#6`{*eE5RL72$#1LdJTVPHdA3YEC(r95*he20 zh0pRN3b{r5cjRKh$!2NW1onlzDo^R;%fbESD?)cN{6a#8m5o`rD=4Q9m%eI+q^4H! zv_A|5>mcS^@s8m=!qE`l7}Y#_<>k?d>2&4g*j}s!b$r;+ae2xX8gZt57`phvFXYx? z^@!S;KF66G7^p7-Y>Cf44$)I?AFv=m*>G=)FeY?CewW?o zPjPj1J;s1L#{HImO1PE&QDGsCJ(Dy88Tv`|Vd;)v5creVRhCO*AaVSi-D?_)Hev-$ zH^#yRGwXS))?)18-nP zlHL5rZOD{l)jDP6Fd2bmi_LGN*F~4blPDamSA%3{#(1eQzv;SDj3m)`PP@!OgC$uC z_>!RMR&7*mZH!LsKj0cNgcNfx+<0z@y}0QQqHri(wrd^AR-fC#KKvi-D!@atRu}&t zcBN9-s7iK`UCCvNQ_Tar1;J0jZtyvp8<)E=UkZTmoQW*Vwth1ZtXpQz3l;SQM&LV5 zKX0Q*Hg<=7i_oPLoSd0Z;3z_ZZyGEJ5;>XY%x-rU4PnC}U0yrl>GLUHwq>G}WfPkS&SBfYIC`CFb5h)Q+LTI5_>4-@0O?s0m1PD4nKw9Xbqd*7{ zAVMG!Liz46Gv8Cz^Zxk$y=#3>)>2wH=Ww5W_TJaNuDx%C(fumj*I_a@P4MSEo-Q6o zdOS+viM(v3)SUMNW5j`&FpJOiE-@weU*qCS7q+;iVeJdLUR~XGC$?goshD#DYmNhT z#WnP-)G4^`Z2EgjgUYz3NqKx6YSzj6N~^qr2~CnC9639Q&{~Vkt-ZKC(s#*(AUIzs z&(n5W+?~+C7C{npmPdQ)+3xV5bSjIqK+z}p024<6Ox!n?D`Pf$YOS~`PO>(1n9ifK zuyz<{7l@~hIrv7tlF00g3iF7rV+x*=$FAwBbN4*I+hTn;b+fz&jgCan`3UEIisLDm zI7S)y7f25XZmUz8u8e6~t&%4>b@n`_X$4^D~&}F{~0E`Q_VaON`ls72qF$m{}(3jAF;PodyInbNteaX_T_8jjDem0lyAdr7 z_sLrq)Lpd^sT#~tfD6hi3rwi3aCNsT!L;q!;b!=P0spFQR5EqY#IOC4^_980=SkG( zXy5c@qr$aSkpi+zLaSK_;u5`7Ppo{(XkhEQuJg@hu53O2l6AV;@J&vVXi~>tg2Erm zg;)GqqAqCZft*s6J<48BW&8eUNS=m<3L}+9Qc@_pDTEomk(8Mqy#~rbo>7IHChEmA z4{c1|D?gAQ=-q2EulI!Fa|>1_)YExt?&=p?9zHc>O~jl@FjOu5dAFp8Z0C^G^Dl-j zXz{cXOAm8!l#}kEwSB3V_KwfZHHCi|j>R=QhU67$XA0atA0cimY%jj#JD|{MrrKFI zGM$lOwXx=czPd_|Y4*EXH1%V#Sl_Y2BPZi(sm7>+XhB8n?A{IPXXE%zFFZjRuOP=^ zo9-b_xcLUbztlfrZ9GXyQd7LAIpqB*!JZ~JSU?;;yn2Z+xm+~B1^yQwXCUa(nI-Es zu&eQ#K&oTf1lGd*?MU`)QMj>l*%KLVIy%EntW7iJBVjU0xTa3r!TGbFTlpDeAxA?zCisTlzX=!`?uCTDI+VYO+HI5>u zD>}}E_d#|i$P)KPgNC?y-#A_FNJ_!8iwqfxx5-G-@mbGQKZo|lKgDftne3*2p!^Z7torQ1z-H?p?Txe}-m?0z z?l4}RcGG+&xp32}bLyqgQp%6-Xg+D-u=CWGV)Q8t3;82Id62Nq-&neuS+jP_*3VD2 z+>Fh9d&R(Ku(52VUq@nh8AKXGR_`w9#GC;Cwybn1tfgHE*hV}(ARjn) zmpuop3&Y6J7dJ@Y@!kaCPT*nq7I<)k=r;O~na)LJt@1QQGfhO|Q?_`gfc?jRn$L6?O~DC;;rGc`NYTnmhzyAsq zm`$l4ay+3z=7g<&xo=hCx68j0z&z%8*(=xXz0ay`+09ZMNBsc~kDr%nNUotnNiS~8 zQ8&s?`*dCCFW&Fk90i+Kxr$t(DhlnRGJ}2ds;Szn-kH#OW{tU=;W5#YYUZ@9@^}Cg zRj&p-EZOZ$Bzx~VNTcCkpP2m|J)foPJ{t>OC=|WTUIo)@PDco?KY*|7#~@s%3;+P; z$dSm4erg-;9Sg=NXSc8W zZH+w-aCjOQOy#Pesu1l+Np*2qSpdjz*rWt#cszc;NvNqTv}WtM)seBJ6Q`yW=ylNf zl1kpI0J%nX)A`58$6YsK8Y(SgvU`zJ_M^<*T(FXAT+)_TS@2E+blw@805EX}Q&yEF zoBra+B|+7zf@PrK9u*wJIoV=PFXE7G!SC@KcOb#gk)+@lf$(3yv2Kw;%-shp0U0EL zp02L00a$a?T@C+D25>S6+j%4^Z7zd(M9%DH2p5imUZG zqSjxH0j8oARCldew_>34N8l@A8gusV_!Vo`lZ+Ng;J}~5+T~2)Wy_mBWbjXJb+nQ= zIMs+E$D{^<@i3N+i(vTjXR)p5YTLvF{9X0C3R=CA#9vd2Y%rHgFU)BVE=Ec&0fc*J z1$Elz6e5bRBTy}3pzPY2<7x3m^9Vmjo=As~mu&h0y(5Tq#kij4)a%b@L?fV0CfhV# zPq0t-1ek#9XP}X0wY`JECg8W7vi-uv)Nad6+R4vl7V@q0NHROaz8Mj{#w}s#izgdz zjc+J8B%~v&<8L%y7s_jJclLATZiQnaeoZy8!KS)3)1<3{1XoBgfmC%vg$E(k{uy>t zDfBs_3S+hLkL{%>#rC1?aL!#h5YZDUQYATV=|w-^#|zQ(jJkg4SJw&ERcS)8nd1G< zCA);gGF2OovvGcJC%sj^Y(1)$kF{YfePm_TFg3P4R~S-a9x4bJGYT`$Qg>=ne|fIyJ@rd z{LZ*kUXgvC0mIm^zEApTn)mHi>Q*eZlaaRRlZoY1k(Xo7MHiVg*vMe>7ni}(;XYP6ySO5$fs^ouu!)`{SMf81~E2Amg|#E?--}&jLj>*tO+P6 zjajp^w0d2d{%x|#reC@TKlOS0woN!PMRqIybTT@8C26^>|I@Afizf?71A=0mc}prX zeMFarpH)oIv5EMw?K7zTf-ohAEB^(Gg2BE3ipuP)u=o=6XGi%Ch)#DuU+Xw}HJtY~ z+(%ZE?xpr|a?E?Y+((bh&bm0SvQgtbTr(|9R8WuV=bDyDJ=OtD~`3ywTST3XNmQ zv_?>omY*bTo^=i1n&?tp;f%8X*0cAH_^oSG8rwk13KK`W^_1$3#=|{?!7g z;>=NB%;^_dx9+gYJC*FRvU)Fc;U=EZS3d9mwJZS&v$pf3Xv+Hcq-rV=)X|=XZ^7Uz zQ25GmjX6ib_54Ivzko8lsI08)9ulCMsr`EQonLDbGFbMUNEN6&n_B@WDCwbG!sRRS zua?d%CMozey$Iah#H<=O*HjE|>Sj)Te2*=Z9whZvMclL}7-2d>v$#Uq*)---xY}2h znkl=(V>WWwowVSctYD?qxU`i--)T5wqiFjrsTEp&t^ZZIbcUG$}rf`ST8G3?c3OB0?hFpSeH#lj{>$? zdz!WecwHqJHHbgOE^D>;aS7^oNr|$;&PVyg{Mt4_N#a>}t@wGE&q+X+wwT2y+Tb2I z+m9pNBW61*L%Qi0xf!Qv4SpoH(Ro&)ZN;6m`_b+SQ}Ua;R!2 zIJm)mGyt1WhKzNIz(wTN3f(i|q!m_&-@$>hwv7RMYfkh&Pb!HA7CuD%mq`t6XuI*o z?}!NTE-siBScH2lZRQKlMHb2v_=Gu`|EMgmf` zsw~XiJG|6PkK!U6oa%ZKccV)u+WphMWAYJB_^ZTao6S%KMOEGYXG)IzO3jx~?_&m8 z;S;0hQk~|jZR6;mUSPLHHirw;VKDwZTsZYD_pqY36y8IXFYh!ho zxUB>$KMlLqaL*0lUb<>0!bQT?6P-yxxwRV2BYiTQ|1XfN!G`&p*6&J$%T)zD+p+23`- z-R80;AFm#gfA?H1*eVdg$95D2H6Ct5la^F^R^U472S`#!qH&{gcL(_aD#^nTpr+b5<P}Kmi_tcKX zmXyAC*{0=-I1(<&LY|n^RX(anJU*Pxo97^qS4sQUb6axCN+_uDh+Sr91Ge&X zr*sN@Bred@wQ$ilCAa3BNBI4`cMn+6r)sQh`i#z;xpO{3H>X!CylvJb1~Z|&D*)>% z3WwI%KEQQs`S%P^`9`{Cetc(u$20{7cW+1w(2@%5bkXwG#B8*hFMepfEbtSTAJQ#`#yP#rAK%}?i^NqvKw=zI3B~ELDa)?+dc_qc%hLOHQ{6yT&=M|Aj}d~K z9P5}dh!JDG^XaJ_TJ`;|Gl!k@6w(7%-J|<6I@c#>B6- zX_M0}gJ?JI(dRuixpcmoa>buctExmkApcleT@luB#SNmCTuXPVc?`BfY6+MPgX;L9t-NK{2!bmXTad zqRZ;)WX)%+Qs{+!+jNQiN8|{davV8q#B<06&-eLoH6E`{Wgx~R98=MV;ysf|DL$o` z*WYpSRV&fTf>U=CrwUpLiau6T>bkQLM%&vHwv|Fv8{>wd(|9UXKHZGfo0ug~ODe6G z)tqba`f85atWceESZ3d-GqAJ9lQvb9cY!i2pr4BpUs35n`_xbK+v!S_Dj8d6+02`1 zwA@lo+77O98~?mu4xr&nECU+iZ(A4& znl1CL8cgUFTxq-cjyRJN{_VFRfo)SQgGCr=nKyhA)BSNRHfP^v>#lD+y}X99C6Bi| z>G)^2;W#_Nd(GG&nQds@Kg8Isr8Uho9vMk%ZjBvBy|Y#JtO%c%{H7Q>-p6i|`_o!9 z9+|mnY8xej{Qln_ZsNVPN)vF$DPSYx)~4={eRup}Y0n+(d&WQ#Ux}lns5kqc(swRh zLaY{sLOs9dmkwk0oM%7u`gv;Gn+KK>ooPIC+m_`;lG*Z+x(>?C^}6)}m8aYv>F*69QPGNPw7NMK#eUT^B^14aG}Q3ku}=<)8=bt?lOY#`&FQRiN{z z^CMSGXC4rv(D{vv`;-*cC;@>JM{txi#ljfUVWv|PzS|p%THksOBPzqLaq3|Lmi#$w zeAloQRkD56aLnCU2IX15iY5gLx=p<*19BSU{;>xO3h5TS2=JSrg5PEzV5#vK7#uw8 zVh@Mpr1@$r{M7p9r%U^1G?tZG7Alv9t4EwkSK%x0aOmtG`wf=_amvqUTI89^9gAO= zuis~HJy{_YvflLI;@V6YV3jQ%_(ldBEs>awx0D6f86^T$yFOLf5Ib9IsgqDgvyYO* zxhXn}50Ie>9bhq$nI}Mq8rJZ8YP01R{-*Q8>!6A1CUood|ZOX>{Mb6Kwc&X$SW0~;3)>iiyxx! zk|(F8&hmjFq3OOkt^Z0*Z7vN1sVNxh*=*z z$*K@82G|0mPZ2gjRC6wkqlq*L;CTGm>(9Q&p%;;kLt}_8``-|XIxX?z^U_ttId8S? z<8jx_gj%+=#Eo@b7q&ta@a5mUBZWH(R2(CmVX3I$Tgi19UpCQezQwuEy@%kr!rjPU zg@-fKj}8J7uQbhM(|UguzD=P@G{NCI5*8jP&j-)HRK> zi6@It&J)+iAN&PHxlzK))3+Q20lfNgE?s1tE;2S}g&McfH0k&yDPDH74L9d9AtB5| zgp(~AKT7sgbm(^*=j=JY#Lo0N# z7@gbBz2|Ch8)nS2gmmC(%dnG=Ei;QA320iLbES?+teXIm`{a?=mjScbqhbWWP{HpV zU;2Obo7A61OS^aIa}>{EY~LIy+o2rhDU9&7lq%|+3xRZ zJPm0V#eoXcLZ^8Ba_(rrQ;T`&v{=6S0Mn1N1Q{oJ_M;R&4w~1V^01qgTI+`SI&Ubs zQoPS1jjV9tty7~X`Z7;p~0pIp@YW50c<$T+4XlZq{&(m=4FJ1W0=sT0PnbVD|+F9`5 zs@=WHlFAaQqPSpJIRh$N5rKVa`t0}lFQeL2UdK9BGr-NsXum~r{+b+h;#u=a&b$69 z1;3QtyXNv!4G@^(nVL2_msRBn;-t~Qd-4eG#?{`sy*5prvC^Xz0Z5spWi<>oS~UF! zTiby)!5&^Uo9c#^S&x<%UcYu@-5ll1fnA(- zlP7DC(82n#*t$~NokC|DCer;_dT*g~rx-}GTk3sJI}Q{cTR-5#?mnRng?u>xFkFHrHi(0X8Fg6NRBiKm~7jRlWw;{>hx#F5u>A?*S| zJIP>q@IVn0&yX5VXZI~E5^ze9Qm<9hLB;(8&!S<$0c6471Zee^k6s|cm#6=Mf7Q%h zdb63*a81LntFGsVkEr#nKmC)a__1tpN9~=xPR}fTSt`nx=w(?$#H1n92_oG>KWI(e zg%v%W+;|r*SX#r}G#1GIP2o0@bk|bK)Lb1z44*Djwp7?tqATNN^2oWA2;uo?Hl!FE zUw{I5Bwrl4y7fIb3F{y}&uu85Z90zDi=|$e_fEx-)b%K8owc>^cmSW}5BRK(wbf&0 z%Q6mX1CQj?%3 zDmB2Nmzi&Vp8w%L9Id02BB_fnbJ`tZDY`y_C-_Bj#32UvG|c|xuhi1b_1k5>-&jHB z4gZ$hZxAn&TF`18IKQL>J6*ZFHFf|$2ydmzRl}54%~m+~JujNwiHSy`p-IbBfug z#`X`?1a!FgXGOdxjJ27X>NGwkx4r{DtSK#}sl2c$_1(+=@P;(kx_8FaF*&ks?XMp+ zG(F7efW3adqG6T_7&R>VU0G0NC0|lcHo-sc=jvpA+36_7e^wn%XRuQycS;!Sl-@U# z>bw&|*-*5y!y!W1DTE{7Zk?&XhLYUuu5W(9@6`9+0s3XRvUj%lTyy@08WVg_e;eTu z>)$z{*+qL2^INZYs8h9PC_5?yKm66pD>nu37BO(c>#%JmWhxvSR^6ByO;V0UG*J(Z7cu-Kwq}UCNQ7TT*HO=&x3J5 zwBU9{;?Ben0<&9uk2vv>Z@;SQl3gkL_due9_TZyncW$Bmwngq(?(% zzD0r}wux~x17Gmcw{zE1?3YQvBFa5wN$)ud{7mAH7liLh_a0DBcfQEpZ0Wv!dtkI( zaF4|7S8O4?S#C@_>Etk-yQIQ4z2;xM>FZyLG*jnMLrluH`hp6Acuz=RlB-MokEOWJ@?($F(?!Qv%wbgL^RV78bWdY;07jI3cb|l7SlDu1JUinGt$!(g6 zeQ9lI>GU6yRg;lsOd9C&yy@7Ha+h~F|IG&ho$qwS>*iMdoA#Xr*ITg(0#T_EGvw&h zw-qRjIW}wp2}p&@hyBT7pC{IbK(g;i+$}wbIV&qGT6(|z)YlELE|fsafLvZ6r2WEW zx$S}ITSS|1sB6Wr3i?Xu^y#Sm`vgx=a)DC%LLwp}0xYRg;5df`E2hoq(;9Pcf+s{2 zqnkemx1)-y0bMdZ0`yyD@s$*A*wd!zeQ{Va{!rKJwa#rc=ZdnrA?6@5|&FQCvk-^x6dWM=4gZfJAIb}LM zv-B{?&eDS%_Y^9sd$gA;K!Y^B7l{Jq#A{n_xd@lpGIi&)Q=8RugD9DE-YKB(71@*nlt6+m5jxY)xVj#S|CUCysSs5rj6XU~Ll{xI z+9+|J_&~|Y-8IiZBHPfpZS`Gsx6UW|E;~12-eXmIOomRt@-o(kb68})C=9( z;rU8cA(sqOXH%V|Txd~KrgTYzQVDVDX$S7MxtRFUVzSt*f;h5#p7iQ(Xd}IH$0^%6 zwZGrr;ZB=m`7pC|cQPWqzgFKl=UIA@TWq}S-=HQJuVKjT*+*;T3aZid1UC1Gbqf%n z^*~A-l}cT3g0EDHgDQ>Ilpk%f$sv48F5a;xXGib(NzxCWysw*F?22g9I7>vsW%cfV zyXwXjXEpxqsw<~F2c^hpud4H!rxj0M+~HSb&20I@JlW!(T@QB6!h2%q2c5W>~}K8~6( z6rtM-s(R+Bd2U z@5{BeP}P8}Lk)1Au25P#NCLal#;`;1z$OgwUcxGE|_1#ID)! z0wrXTpSlXJqu<}ddC6^*A%je?P0}3eKA+=$D;zr_Ii&1B`FK6R+_=X(xlPO83RBb- zR603}HV7XzOtlZ+?b2rx&aDe6okOJMdgG_4CPM_2Dq)G|SBiaasdLju&_&nix|xW1 zPrB~BeqTlw$vrMJ8kzGb;+h9f6+TaMELZWZicBm}IZ7s`T9AJ7!}_S{==Rrfl6lCI zTX3|cwpgS}KPk&^0G(&u2{exOdsRTn=BfHLmDEpI+bW(Yvr6WgKw5H1Nt~ClQuKsA zz%8Z*r}#M}S!t)eH5ndsVAIyna9*3u>$Y2qKxNcFg}8rGTz1tZ0(d)V@L zh;P1U9Z*SYyLGuct$>=GvYWPKZ=K$x?`oOC1?1||fnY6F3LwRb8lAl)REUVDh$oOrs~Inea|_j4x6X0 zt~SPmpi=@WpeE8#w37&(rzc(fvL>^+?fTBM^cJZb5(KVIb3h0?NyS!BtKeT5)UuqRuZqsLMvmz*_3uDUxjFI`Q&Br^6#jPwgS|r819SCG&wy3=@_$B<<9p#!~m5dES!H;JPyTx}* zRwDl*-m0`=dp6^{ETH&avTz`j99qDj>zmUl@RV9~?0iB^8YAR#~$!cOAfv{RBD;}eQ&CARugJj*p zJmc4P#naixstVOqL`!l`h<_OHLkbW6dP$UQMj)N58nwO#nG)JH>%UE?e?~qGpN$BV zOj%2~a-C``Zj7>;+^q9+b_m|&%e}dRi316XeMe8qQx+^&eRcKbhnoP%V+>clnqOiYJ93G zL63C{$UldG_T~l{)B6BQRJQmVW$7|dmeW#KNyuP;$s)(lV*2{Js(VNUAJ?7S;*D=wio%SdpoqE;+n}Z#}ntD2tXZ)9eNBEF|5niT~mDR z*;18d(*d~yl!5UyduVw=5%n^5YvWi_sjnLp$;U#f_c zsvha=)l0R%Ya6Saj`FQ)^R$vk4{LFeW5?07z8;7JYfOte4tnd1|L(10HtsM>R+z5p zaT~_jmeS-t{!;1DbgOML6elAhJiQc1hDpU%j;qhA?m_y4efgri@pT zBOuZ}P7xlR?LnG~y`(xVrr`(2UK*>dj2<_OQ~WjI6WsW*k9JKF<2u@qJgJq;PWQeW zL{q5q8%`R_({$rNUM78rtLEdhM+kd;e&PnE5DHg~V;tm3PYZST zV@Nw1hUYu0Bg;SK`h1%T;|DpG6}WeAs;SST%gGUfZuG}HsLJ4Qjk!9YY+@DK_#ZB4pYNh#=cYhY$Xo5hv4&BkXX{78FHaU$3 z;OqL|;EQDwI-hbspOVbqFWJVsk~)bb)CkC#gipsGLvw!B>{?h#tP3U{zcr1TRd1ot zt2V4e>ztUzipzqQUQ4&iA(t3!cDjS|&0me>gEv#u$5rG_S`>A>d1ukSpv{i*M^(5S z80}OE;8*XUYrOo_>&db0?QI+VrCzh>UGbs@?|ITVD7T@Pg49wG(QZ42v0yyJ9n`ig z>sADK0E0k@_I13K$EfZp|If5-LxT0NJYHX2;D?$X{fr-Iu`4skdk0^kh&WW)TyXb? z*-RUyQNsOF3)hvXJx=`ndF=h^y(9X6ob;=zDUbX8DO)ZO|5c?#DE+7g>OXX>fdJfT znbBhh9w8x2=WasS){Z5k$L`HM=&{>v_$6YMz?RD4gsJOJGsPpzzNKL_(IcRF%r>$r zZkvZx7p-~v3h1({t(%+a(6pS$es4d2UBw3O$UibRwp}K;4)j69ipm=IykK7-eP04} zc?Q_P9zKN-6{ql$!qwp`hqZ0ecuobSo335xqam)lAPg0Vr5}0`OkyObBGR;wc*v0F zWw%_rpFU@2mCqWQ&-b2re*Z}ov0S{{-b)TN;o)D3FE4uDR4+~*ue8ZslKTy^0gl&n zQBc)ld*R-F_NCVyLV?XcrbFBDdYB!r`|LK{v!3op@ePTfeJ)*dZaFIj2tPo1o-&j3 zC!}9%Jk%7;)d_i4rUUbw6V5Zen%8hnwIvM#fvn9bJvi6%JLH_oHVk|j;5Hc@Wr1<) zjJ%!Z{Tt-tqw9Ps#v0bLyI=swBtRPxtkJ*cgGPMUGf_;sm>mspW+;U$LUc6Lm3yHy zG^wi2`vjV5o;z z$!qB9kawlHi!}*Oc1b}X?QFBYklXq_^m=YrQj9^O#b)tUNXr)2T&v%62ImuErqFI3M=SSUL3R*sgw(!*qR^ z!g1;5y3`l`ne%Uhv%!g3)baS6htA10XdQxNSmE2w6&JO&`Go5YMyzI>S{m9^;ei<3 zus8{M;iAO(LPWZu=#z_O!TIjnY!uA1m-2Qum}e$y7fcR)4u(P?Hw=r%4@2D4nvUFK zeo>lHdKesk3l_i&S@@b}^6^#U$4QoKUF}`(E^&MWXhx|FR&rP;Tn33is8_*FypdxW z7kxgj(^(t>`66gFO^WT@5h({>EM!^Q${T4-go(p;^pYc`kp*O1KYsIjX9hGIqWv2N zT2Ui8n6uzq3m^Ef4$p$h1>BypsddlZ3%DlQwrymxU_Vn3^ySnr%OQweOU@>%36|(~ z^(O!IX~xX#EfjUR&Y3Z)K^;^yA3+D+Nay&UvDRKlhMW`FNEd7zISPSPfx$Gn>v+(_ znqA)i+xOzUm?o~swz9}r7D)S_&Z3ZWX5o`jFH>yGQ`Ub2*YSlPdklO4ucIAE{aY?u z9b&42-t*u<=ZqOGkt(d-_ZG7wTeNlf3vzjH43DTDj<^!PMsQ=!B4&S0vE7hntlYs% zd8FwC{IY>oy^uueUSu`3Q!BfV z0A(|51EXx%G+XXA)eK`U+PZ=Ff4VUGUyY3A5iqh(!NeQf5XhuMp2edntkgVoA|vgv z{iX2(8}s_{*2Z`bJY%b-j(7O|94}uSugR2OqB>cT6p0zmFA!DA5Rr`iJ1i@xy!-Zt zAZEv8BsBQ`fIwbwnKFS75SG(0mf;~7O!=1B(k-ofOq*GeM(GOp&`+I`> zgf8tWJux9+0q^k{G_M$KFI*_^f7K%xxRg;^QwQGL`3Wx?S$^oig7UBa7Ypk1Jahxu zqPWbLO~R6X_oxP9iuAHX}Bgtc#Pz=2APk=OXOTs(AR-NE7zWDM$|)#Dc0>eg{^cRjg8 z8GkY`>sV4+_{4gwg}=sn7jRQIN&!qrH{ToMq70il7F-x|Kitknx6fcDNMbBkZ|3{f zrWke+#{RXT7fb)ehO8MjWFYdd4L$nXhHeDK%r94ETUoe(Oj<^8otzWtZ#OD4FjL~{ zM3Z4?4f4tN8us|~DB zowXlmqFE>B{rb)zIv~#^wvE3qc7B3$*>HKMuKbpr#Q#9EgT+_-pINWVc|ly;ntQ%ANm zw)4-@2o97e!EJHKb}#>)l{7bXi#zWzVo&pHen4s=TaAhIKI5g3k^>6e^laU)lvnyA=Cu@CaXiD<9=wcN_UsNm zS^s)n08-Js=kg{_BXQQujPcDsgS?5WGgF71E<)|&e;cbNfKkEjo7H=9E;|Tp z9YE%c!fV_Gj<-;W6e>X`RDnn371>9 z=S+JUArBmn!WuuUZdveZp!|2_ci-VLEgl5*bO4x@FqN=)v*LrwafwSCx{&uA+xo1d z9Eyh^FSJjA%q_G%r_owpLqj|IC_|3u&ZrPRiawI@^g7?_>8QLIl?uRiwb|w{LELVP zAA{Wf9p?G?@7xWX5&{A+BM5@!^r>6@)-GmKN6@;6Qv&P!*bekypC2C6WvzR*-j@oL zqhv;BYL|P-2PgEQxv*WS-e5Ow8!$`jnMz8R@Vpy{0Dr%3I4|2AVSIW{Ae?gO9NRMa zmP0{|d|E6c#Ju>P;JGTks?1_0g77$+X=RZ)P2S%FE1mYVq)|ho6pC$-@JJH*1u8~O zeqekV)La|<*0XmS|615-B=@Pld3Qe4KEz8+iKzp)+*^t(tQ1*mXykqVO}_lw&+B!S z#i3YB^X>H&&HGO^b?%NW=qRc^A3vg+Kd!i-XaYhZj1dYm_wSrqLA5bLVMzbAze6F! zM!Kb*aq;Na(Dq}+MOv*s;kJVjdKss%ngS;w+kFp!!9N!HS${0GCAPtaRs0$`EH1(D z$cxj!iE;m*omePvVn=}!3wq-eE$Mx>5`l#MAJ#WBIXF`x4{?xL{f=sU(Ejl0jbadF z6hvQ}o*H7M33`T4n`Crry;`V;e79^-6urnoe#VT`v|$EU{rKujD9>LHmzh}aROt3z zi&WqJYI$_{@?}9~HhtyaArRAyqUVn4EwQXyJUaK7dhEjMsx}DYVOb-gaari^?I2e&ZT?6(j|IPpD0g9ov>)B&xuFa}ze1k^-vWnYMp;Ke zs2@CT=gSI56QPPGa*X|D<>4!wcQFmlN@oRDX>`1nF1tb)S0O?HKM(HjCwx)T3G9&; zH2C#O$zZ}g{^t@Et-l(1#(XaZV~#_Ff;|iS_<(&8v&xvjIV5wv!vixwywvD-Vq-r@ z+fB4LzvbM zkX>S<$3gN{#~|{Q8M8hBEdj*o1i^Iy%{d*7IdRslH_#^t5b6J5F!y=+NB=k{D2PqS z>-OE)zH;=?i}3$%*2WKHHuIpX?k|9}qoDKN;GhjM9!Z6u{|K_)y2tIHQ5P=pFHeD} zqaG|NV^tNX5{yg%@}3#H1$oa&^}JAJ)WL`AVED}&*Si!wIcaBm&&SHwv-g%7e+Kjj zE9=(nWp^V`|Bef8_!-FS;erXy`ZlR5dvK>BXwn_rGa4=!$_P7duw(1!281>M)nQYd=*%d^|R*(iP&3^i1C9& zEW{J3x9PYj}WfcFmkJUXU!E z+YNp8*4sw9HANDV66w$35XlAp+N*z|l_BRYZ@?j&kcDGQ3XH!W@J=RlM8Pprv3`loXac)Hi?O z(uNgC{$^5_s<0p$X0)6pTFQGIakj;LwLd!DFg sHyHl&+`>M|<9Ct&%P#N#XP5KkX8+xb6ZbhI4pOW;ntB?gY7bxiKP>|dUH||9 literal 26362 zcmeFZcRZW@|27=e(n+;dD`>SwDN0c@t`^m4wDxS9Dr%L~NJ+S^)?Sy|wTjl>D@Lr+ z#11urASy@+iBTdV+^6gMeedV@yI;@q|MSOv_Eq(&kn{YE<9)o3$3E~6$BT#hx}bx@KcAcP<3XTHp!>SFP5jbVrhU_e z&EeYnxP~UH`$=xDYkw*9pFRFPPyEA+m$Zz;v8sjfXFEu}6K8jBOJ$>uo{PA1^2^!A z!gel&$8EPxoUC$ip-m+Q-)qa}e*u3HNwl@K`sOd;0v)(Zr z`d4IeHy6^?92Sr0{@?5Wj==w~MqngsT^MAXu`*ssx*Z=MFV7p7DCV`kva<3QEhVg= z#bWU+4-apLdP11ei;4en<1L;NM9u&$QtM56fTy8{? z5c_|*ii8GMM`M}5cZO}u*0S>$`&sxr%~;<7Uc3>zrO@!wCcp`dr5#zzneoaWZlE=K zQ;@TBO?S>>*O8#&#z_0rEt=Y1?YhNS!2`k zv)mz7w^y$g{Y5%**s4T&z10H??JO3JGQRXo`drY9!}&!VSK}P>elAFdmi0M0mFwut zpzeEjvme(^9wZqSJ(Y8w?3ECdCygJVpx7AB$B!PN1>1C@73h3%_5#qBsin7apE5Es z=)(5g<8N#UTB-%GBfcbPFRGY*y1t3`HBWLu~8bI!)eF7ck%*fHWbkwt4-KzLYK&D@k7 z>(02ox0B2IZh};rdOA(lo9|mKd$gpT$F#dm<`tcZ%9T9z;*Rxxc$%*J`UH#=&TO{& zv`kVTDPFmvHTi`G3VS{OcFN9zy)D8ZA9gY5nV^yGg$qe)z<7MG;1U;$wou`L|8Pgy z%ZLTCJv#;pI}S>h7RwieN`T%d^7HT*vz0)BTiLU;u<-NCAD%dR>Bt*-kmQjag&NH;>AaO>;QqSn_+g7O#QID-0(FR+4X^~;Z}o71zKk*74H zEQ6L%C^Q40IhZr%FSzj$76{u)SxYqkvJeghN0*Ot%6$ES^c-VtJLgE6`T zOh?W4LfOpc{KZ<6B=+AJCoMVgRfST5e?kvw%m{nr4=`3Tyh{SwcNfGBdcy~Oq_2xS zJu3-Xl$4Nwc#T;)uF8It|>Nm5LZ?*XR1yDA6z(+V?K_|ChP44vv}3=R(F zjOZHHo&OU=b&G0<4ZD71=g+VJ?l$fIfdM%`uHgpN7|CdbEWSAX?XmE#j#rM3t&2D1 z#6*|v1|*}cQ?oiZ4xCC(l^pjr*iiim0rp;wrr+uxU-+}G=&)A+vqf5etgHJvdZ_*i z1?u(shc8H1*~^yx+$4JDB+mp%K}5{dhdKqvfBpK^e>;gAth&|=8&D(TA<&*Xo>SLh zzoa5!&BeqXTZEpAyL&w?Ow*~>N=R?sgM&5Azu6#7x}39dhaz-B)-I>S0(*{!hrxqg zF9gjHmfj95ZIYR6^;rsw=-$F? zLCV7QRd1fcfIjJYgSY|F$YD{q$@}VPT63E;A(fN4T98XRQJK41CEvf6XkGlKFl6}E)1?5a*LnT=b@a(L z3J9FFEA-~q-GgDa^d>ZVZxNUQVn%8z)gqL}JCfth=i?{Yj%$zBlWsh+*7Ne4QWa#HdmYTcv{|H5L_71MXCH@HaF z*$ezuXlDq?mo*K^x^jNkGfqF#hSx25b`lX$C%nWrbvU70w?arUC9&Owm|w|fjV~Hs zu*EOEwL3k_2Xa3f*P8VYNb$v8?CtF}RL1N%(prHr>+*eM=@gyjz_pdTzVat)LYA3t*_Vzq#39GA^6vHF+#WX+6pJVUT9{NvXQ%t*9 z$1h_Ibaf{Z8!{tEJ0s!Y;VMDD*?$fjC}Ui+va+;0d`>(3pVMd^1=-bd{rnk;(2{D-eRAQZETA%B43R?PrU+cvm;fpS47e{{W49k#}uW^98g&5n7D zm`MX^D%ZZ_3lavkj4i!&cT*CiAAQrPu=vd&e=`*TV&4r6u#o?AnV8oB6BULD#wfT; zm;JJ+uTywi6qCgGvn(2F=@`W*3DX?rALfa}2|-(q%reEQi2N{Zkm32br{_Exh@X^Q zGP!3(S-LBj!#PY%N!j7!`AHKUv=B@Nb{x3(aL4IGZJ(JJz&>J6&=0YBq1}a346y?i z5Da#>H7XG6Atv_Yr43ftQZ)V{xI+AYvzVMpMP=o!wvi&5|A`L(KD_!D=b%xHim(!% zID8*~LMkk}S@G6sXrH#ESw_W+?-9`;h@EW$up|@D8)|wg2PL!JgG{-K20>Z6N_I7) zy;cN@6{$yTemp!(Dy<6tbk&Dh2ogyPC|7tT7m*{sWd`7zp%8S@^H<(IP(8j9E5h^w z1-f0~5XbzvphL>{?^W<3zR+R)+%cfYvnpbM@!inXm78hurM+i9E;<@CF)9QID-10l%9SF#Y3sb4hJ;nR40nJ24qyVTu)Rw6^v}HhO`Ap8Qb; zc>04=Z4aN8`^SXwKU6r&6D=IPs_^6tqkeo zrHZ9yE>{{C;uT)yhwVj@{|4^aU?Jc~eIn!j^@G^X#{YWuBc0?ffKK!9TvHez#pud? z5kjZRUcWwNt!pPC<|qWEUK6{;zM~Sv9ntkcK_7QJisZ)^gxyYxR=~Nbq=~N38NlM0 zoauInYH)u2dU<~SJ)*2-cbS*Dz3Trd%;xy4FDU(GRD+)GK4;rD0Ic+M?=eel8hyeO zOa#py1zFhHLENSry@>$uE@4v0NBqJR7C(mtcpmJt3@7V7NspU+R@JGq?e7hhFzGU4 z^p!>b9EHVDu?;Oy^6GRGT_;V&%}TCH*1B{oO5v3VO8eKZ&kC<>t0&M!UF7IFbx}eO zM(7`+4%(y5H2WK>ZI46yi%g5{oT9=(nitxHqZPD&y;aY$seL_4c!!+;3dI$GDrHKF z@dPy;**Ov95~bh)JgYtbnl16jS`c;4&G^0I-n}g1V(lpazA7q(O+pK*2*i459TnMbcL7{4TLe?UfUCpc?6 zcZ-ieA27XjOdCKuuQr-Nb{F)9{D06~Py~RUMTeWpN9O#>8ZLLKwK{N$g2O%Fa5$r8 zi-HflsWb6b_kbg40VqUd_LPq7{b&u)4zPG%MKQ2a5ni^~#YEKp$lGQ!@0DYd?_QV1 z?>g67iQd5M8NV3iyLj>9SRQ4?r-?-q^Sb?F)Eby zRewKR+O2<-)?26OfGk+}J89c7&W-rGR>UQ0BGF=tDivXuj?5_btQm}*HbN1BZ6yCG zGZW(D?7U+G&1?0KN2B-%;6VAC+-(v< zYR=BRlT+FcFmWfzxl3ra2sgvWYV*-VGnPwQtmYx5o@&@E1Bju^`C@mrwQgj&)|=Tj z$-KP08MbGSeMbvR%_u)rM+{6nA18a;Gvy46Arifq+(KGzXS2~Q&<;mX;2|tI0h4}o z%@qXfYq~AUeVV%{X4IFF=3u=`tw0h4DQk=D)|kM zW8C(md$=1zo%ksgt`+b_JQG zIT@udk)Jm;6O+8{nB36{PYX@Q$dhcyjcC%&RnWnR?UZ8_{FQHdm16eHf!S5}ES4gC z&K5w>_r<^Lhc8xt^lJH$o|wp3ju|@H8(7{DYQ~o^&EW|~fpo)@V_4M>dPfXfm~uVy zMhjZ9a%F4*eJ4B-vQOuC2Nu)0&)}@qwFXXJfMlU@&-;Z?-yOwN<#Ft(r^=8q@kx-7 zFPhj=jGFsJuQe54beHOn0)LbyhIdl+c^tTT^rmSi#fvMStnk#4FmQUOS>EI~dRID@ z1aT{SKs%3%cNxG}xglSIm+NfXO*pE&S*!jtO?f`LW5{St61kf`!T!(Im9jBQ>d0o~wyNJ>hI-_Eyh--tp`E>R1yBhWsY z>s0-E9)LV^K!1z^spgp{UEM#p1mZrjRu5nqpZxXfng~E~lIduXUyYC{Q~l1rd4CEy z*v`NC#GKu;Y_qc83+=1E^d)}gMN|VwUsQuz0i*d6;9S=TC=dHv0I}o%1zs2HenLY| zAIQ1ZT9pI68!Jsrt=6j45#*=M#XHr#Nv2{_V1(7}c-{F*)=cs91Iw77#-8BTvu$Z? z;N*gG^Pfg~E!orVfj$5~=+@y7bq%;j9{twg%uXo1#baC4@p+=#_ckIaMTokRe;W z$FiXe+f+CI<})5O-_6B--~NyHk{ab=NLYDUS=*D(9%t3j*TpuhL9g`Y1;MXv@_37S z5gs?K$#vp(F>0rnBAAq??k$W(mpA_T`Z#qE<<+ZKnKdr>vNOQnW;F_?Vj8nyBT1e? zX=RJ%hHIWgWr44yKQz3DP1vA>^mr*?_HLbHS%L=G-soZ-z}R>(FA*;9&h2#W*@Bo} z>eV}MNsW1JpBWi>`T6z$%lbnXDY=EpQ^<3Ug3m1^+asxJ))Vx3jeaO`U{GcH!8V^5pNmN+sS8iJ$G$2qo2NMQX; zw@={Vbm2seZ z>m16OH4LxB%{vx2g^r3R2VtJ2k2#;jE|gSwrgJ^n+VPL=O)oOp-oqOqEuyZ3Z8mjz zXGXW!3e{(Ub|wtz2C{)yu>P>>+AQUo;_C}fiXe4rj%6i^gxpsPMhi;cZS?~GbR*TV z8r@P_y;AkfNOh|>i)!r3*dH(4H-=y%Wn){DMKn5p0?Gl-aQBZNBtId2ElWH;1GA(hf#9-mPLmd3dXEj5sb~-S9+-?eWS|0o$8F(glX+Tf zdl2TF$UuVHxx!c&%px&?-JoYPXz{O5C2Y5E*2$nd*wRKdcQ~vfpl@hs8A9dw1K)hka%VrI|L=+2 zX8GtU5$xp|$xL>_;&*3)Phz2S>eBCVnOz}H70k2c4fK{^#YD`St(m&~A>!vb%~*7` ze#NrvT3L3Z^|^H}c~#iEOYdrRSyY7eYuXj>QSIrj-EWxylpO`S>umqerw8eGnE>p# zDqyBQS=1r{Spo~*S_}`D1oOPi_4K3>J;B-~!%H^7Be%z}uR)?f+mm|5j&8>@kz#jE ztdx2XC?=-=eH`nYVL*lv>fAIS9WHDjb9=Xx4tH~>Dlgs z#-t=ecPe4KBO@aK*E}1vL_fmgtRxuS8b#XS5tviIQ#{((#t%Eun79^%(-vy`#1^>O zascjJa|dD1Fj`Js+jb z$LO!ANWv3ckt`b(Ou!eTJ6D`kw<8J^-8qTMHOQg|-_~pRXLH^DC`IEs83CUmpgml-H0A0EGHm7xz}OBSx~U%J2!DnW)oiUKvV#hfo1vG+WTu&SjL1=Xc(GP+N?! z2K7Z0+;Pt1fZ(K*2{hp6z!eB#n`1%>gqE0|-n(2a%-7XbZ=>KcC^i?hsOzmgF+`_A z`G_^6i-o^59u++kQeDzG+7pe~c5*(1%|XmFn=$7H*o6m`0Bp`d_k`c1Jry13>8K*N zhHP~BfG2S@v90p&NY<13tlgs5+RE{#fCW;lM$AfG@M?Ey>hY2bUWRhQ7Ej7lYb{%F zncjasHNZUOI=8(UNjZz#(Bs(B_I-x6yK6i#$l0DlLw{R&9Z z?7|bXB8+M6@5r;D=2Zn66n@O~BC20~jDOR=uob~vE-tql0t^)q?7H$H8!oe`oXZEm zHBU9h7e!djPmXLsU;l?=doh~zFn=oBX*Xt`G7cVGgtZZyAD9kY?kb&~I?0PS&3$2x zJm`2XvccbQ(DR#Yf}YOkPg}ya+kAOIqMdL+x+i*0?w1)Yeoy}C;%-;qs%hOVzPed@ z{ZwhGurAtRw?PR7=Q!ce0u?og$uGifo{dcvyHo0-yzSov!70@-ZOJ98n!f=$$kZH7 zM{TdKH`YxQ^~uz@0ebhb3!m&i{}zB0kstj2d2{BKS9Xp9^$tTigJxZTxbUs|Q4PMM zVo=3YX+a(>TX>F8}?UN!gHeovW?I#MvKjtU3KJt(uz%WMYeSj};VfQP?aVn4G5 zS${OHB5$x%SF9V|`$!UNH?$5Dg5L0k&opw5(V(!wm^CvqGvj?VDaV>Vp;Oza-}S`U zcOJsq{x=(DUr!k?DL);8=DuyV%0tqdWozkijVoF1^YHaUB~$@}map9fq}(UazGGq= zWQ4>OkvgB%$uzbA^~%?yfNr|Di&laUt!2EbW*h_kqOKVJ>^ifq43fVXhZTU%fM$0` z9Gm^g0~y0QKh(KEQ3~2OF#)IB?AhzVZGoV+eHK%my&|94EPpm`6X1`zQ3`;3+z&#= z@02u^*){K4>ab z!d7}rxO_yH5Su1vo5tT#Uv$5)&7OgKP1Ly&dfdOJtlVI61tkkWxiyaafthOK(rdTkG(9$CvmZrPj4vD>i&(deMn+!;DI$ja120i zI={H{Fgk!{;C$mj#)WrNTm#YBTTe}U=4+jY^Bj2KZ9xYEH!*(s!O*W|>^XKmDJ+VE1~}K2e{X#a)65-xtyPCA$wsc^{s7mxPAEQ) zVq86k@5ZELg?DAK*H;h*{S<<5{7^`m_@7buBExUl9Cq^Mt(zk48LL6J* zuN^{qNtw$bj=~-tdoyixU+!=`1fh^*i`G}8MW)?p+JjC?1Jv_GVPJj*x_QMmn1%R& z7tefhSI@`MkNB|#nF~P6?j!J`G{CHrV-c+$4edVd*!q++9+|+FXea3~< zQa2{+)2DZQphpGy=|9r)(ANuz%7UM_FD^rnVB!Xc)7$@ zf8n_rr#zz8(sH17!%L{*Q^(*&FJ|X)0pf3mo}6>*yDfQ|cjDYWf2CEdj7xsb7hcrh zOY?U94838ntn{7a6+EtL5W23gZ>J(DyYPIX>d`~XUs7C&WZ!U#W*VX?_>DG$V0cJI zLDVFRS_Er%E4X+1Ie67kepOn(VZJCT$zo+?egBA9>^b!YAu z6(u9+;e?2X!;ELo)68a2=@8To3FI}3q1Pw-k-@(HqE=bkaO7e zG1VAO$mjOjfARmxJJGr#ias88x#;Y#fS3n>#F7a}EbXud-@Qi*#@Xu+*n*NZL#VA) zEH#I@QALkee;YF&`0r^60%D4A{$GwqKt1H|$qP{T87V75sSgePpUMRx9AVO84=~yyijI=(b#kTQIgzA2&@L zX8w$d#n<+mIoM^p=}^|CT|yUuI}TQP7OUw5S1~9$M+{Z`6}wng;o= zbZB=AIx;Yx0n$OfM?$^QfL7n9@ZRb=k~=Q4KD*rh?sxQG>35%z9H*tgJ8Br^OfIIIMe zT4FKS*Ce1nfihlUQl3;qM0oUqcJF0u85%Ca*AJbe3!v_B1#?l=H=i30GY*Zt*1oHg zTV()>^~MV+-Pe`lSc{tR${nf)wYAcd0KJtuwDcA!zn&C%o`xt=SZrx_fc6>iOq|sl za+@~I0zmZzsEKVVx5>SKV`Bs6SztVs9JY5Vh%5miS5Sk8n>o>2RX$CK)UcID0b?|- z-OMk5gmQrg?)hTWP;WjQ@DtQ;tUbP1--G2PtOFvovVy{T&`q4?X2?t<(A>2m0D(jX zM9uP>CieIBp(WJdK=21?ojWw1>DRBbIbQ`(Nl7+UwaR4|(AZt$n(`*}R#9FL_Gq#Bfkx1oY14Rs+8MHG4*vwI1ZfW;5_JCE zDY1=@Kt3ULhv^6~=LgU}{ia^u8yHQFwlOM29#Cz*(&wnh2uU+uK>CB-@9o?sU4j1(7 zt9X4sV!;m**;rAk5{jbbpL&uZEtP=>`}*SQ<@;A+Nc5kBvzVVDUlkT(K>;Fz#@cx% znH|4>|BjEVPhwlEeb31~@O$EbHt_L}vBm-ZO%1UhOkYPYuZ{k0%60Jais~|W`HHVC z)icdf8zoz?mr`9%3*?%OdR5(!k9t9;PSb2`Z1ye&`Fop}S^$iR9Tea>&e`A!g_p#` zXx1b1|5Sx9T@bYgfQm9l33&ipdaEv~jM2QjJ_7^w(UbJ%SE#!{O}`YR0r~^TUGcU3 z+_>;Z6=~y?@rBjyRA1Z{klNr@qm)#05ig(t6WaH&p_KcB3dDzZO5UVruyLD zLXmfA1}lEwbajSkBkd|e9xv@y1ysJq7VE0`KFW-Wfkqt=S~qyCIqVN!hkV-In!rcMU^RCmvpYrx)S+!)`_#<&^w9&{ry6EE*f?E4}j)Cxqq`1 ze7v+YL&naYd^;Q|M{~#u}p=h$4b53E($W6Z8IIM2&|aii{9ky zSc=CPa^WJnHunE14(999uR|9z?LY4bKwbmI!RX)OKt3!E52)L5tB$)3In5#=8UIId zz_X;qA~7k2*6s}pFG1RsECxcg_fUmA13LJN8ap4}bt>LF%p-fIRr$JmG)u9C%zJ_7 zMV|wsZ-NdskYy5d820z6m+{9`fF2<9LTQ%LmaS6>G~N|UEJgCL#Qe1nsOG*P<#8GWBg|`ea{;2_I#R5%>}yX@`~Z29%o>i? zlvlx|XV_ef!;5oW0JTllx_DfSljq(c6Xt-%BQP_k7bX{KFK4pin(f*$EKzyCm z-TE9b@oJYiJTBx>YpMNH8hw}Il_McEtE6}Pfrqx#yIEBoX4&&iEXrZ77?Np z`0g72jucZEH@PaBwSkclL**HWqGIeF-XplE$%obp}S)Gp4&_fmH zWpwS3lj}XX$S$Gti8nx>g$RMKSba)onB{+*ZvBO4ToEgO)J(k`qkSblolJv=2g)DW zd9-^BlOpq^*nq|&0Tp19Z8kp~p9#3pFXw7w*$2~DvLLzsq+o<#OtV-~R8yO8Vo_Gn zlb1pwus(%@&A7L`Nzo}({LJlw{jjmIu&c{{9t0FS2oKzO*}J1|lt(kc z7~)lbqjs+-huu<*(x}xO7?TLWG?zu)WZ05Yl+xwM(&_dFi@9U%o2AF)*S$RnOduX+9&%$fEV51u3 zf(PH{wJmoJ*YXgUC8=MF2P|t@c0V9)lQ*Ld?W;Z~&%lvlG^n_U03R-c?P6%%i#ji1 z)4vnJ0o$XC&s+i-(kM26wbQb#;AkTFwx{Tq*s6Qh#Ozu(BX44MbfuvbprTw(Ho`s& z7<10VES#)RYA-IlYghcX{2GXy-kRC=^bI^yK{Ld*Q&KP=v z4GkVYwvFoSyah^DNqd~E9rdEgW^JOZD&rw_w?0C}oXY`)&79F*e!^vX4>~o&Jmoce zD62r)pEiThf*IUFp)FeaB-$9cX#V+s!%bsI3$xSB)i6tK2W(z*tw2-vD(g~c{9W|I zhmopnPuf-91?Mw6D@^_(UmZuo{9(Ax+@DGybpJx{H(%k8b@_DeSe6)6=I`wkd?osv zbR^-GuuGKM+{`jn#}fHG3Qq0p?7SvpR-$UBJ9fk=A3`z&lm=!0k%b8`_m;P4N+`2p z)JEG(jqh8c5gFFj0k$!R9e0(28^D{(dd@cihGoE_!rOz1U%1NVX$0}TO&xVhIM6PF zOcuGld6Vr(DxZDWq9e)4d~xDI*|jVW2Wuy{RinA-VW$27QZCUgljlw*?bm`|RX}E_ zU*G(b_l-V=G*PSF|BjZ=NAZeQ15f+mE~294E@`Db=sSdv?C;ipP#MP}vVP|Jly!m< zF~!fKG<;hk$jpn*qQ};+pI_a&u~PH6Hi{MU!{e#hSGcqkC4hzp!WhFqI;+;Kxc2#c zaW5>126SgxAPa)+p2-EhEGhonQ-?tLIvokz#)DmlntptrSZ7M_MpE@(iuS|%WsQ5~ zSLuIKjtK3P{OH*Jy&sp4d@|-+DajKGn7?koH#v|trw*EdfhQ0qFk80WYNCRfwK)y} zj=9EnQ9bg$;NMJYX*);kWKz&6!fdAS6qk0zWfo*lgkn0mU2H(yf)x_2~8EI*< zuaTyFZn9+n>g4_>Q8H5i(4DVM`A8qNdDW=8eKI`d_Lf-e)uxX zKc^2VdR+fS{6Ru$U!7-BU8aWUmBadR48&K8snAwateb$5=o0Y0u5?4g7-aXV?tIv{ zrNjMsX9iGj?}4!gr=P*-H)&I@Dx$|`PffQ zymh#i)l(m3u8VYyQbW5&St|VU22qFoCzb&+$zHEa^3}Z25CF)=Q)I)BAuO_D2#}$2 z0jTJyXM%uGL+9g(r@rxF30!L!AX4dD7tN21i(=OY0i~vCYrh%3xo7~!CId50B~qot zVvkh}BD#NW{NRU~R!>aDYk%GQFAwl5t;a^&^!r^qAnp_&wg+%{?rj?J!1Wf7XlW0) zCy5PVp&?O|B;Nr9;r4x-ruV&H9B6*FPc3VR@=DjKI&ZYSNrYx33p`{KFBv+jVd6 zjS7TyGIYd;*zoJ36P_#TFws|VC6Of+(peH>1K+3E8xXma8awQBVc zj7>5js2LoRWM7B%P(sm|YsMFyoAPR^&IJ4xwi0BT3~?3Tma7$dUum1~ESlW=4dXc( zieLBTQ)5VR_hvq|>iJeQXXJ(CD+;uwufA$$C0z4yVcyq$)HK~<5rc;RDn3kn*(F&- z6jj)~nJFuhPJX^snX3j1PM8)UnQ%?yDN!FVPxbtRoFd(={)Neu&vIlP^96*zX-q2_ ztRdfbXyWBd(+zn^_hL4N#w58e(YH;Kb@WIP1J?$wz+vDh1z+Lqx!**+dA!_TUbi2@ zt)Qk+*J8ao`y(gG8(#~g1C@VAMimbdpr+9a6N^&rF5a%dfei(<7|^T+CqPSGIzrC0 zJ}6=CCCOTk85$ZM@VV1A?JtWtUh*79L4&b6h-uC|2E>&cADcK3{N{_#rkc$_ySI}3 zw~#7w0*+E-Qz_GO(C#RrL(hud2d4r04yS-Pj_=qyH*e406e#P&VDf5%j7R}o#USia zxT6ds=VgnjI3Pi|M53IulYgk-jIsxO!I;JM`CU!!^_1>wJB=z|kRC$h)H$C(dlfIP zCC#@cNk!U*iSxqqJAP*-T@j|K=1zngHGZe~Ra-yzsJ%{dN|A{R-SSI}_2llmRl{hx zGO3@f*?YC?-S}OCN$=EcH zGn}Frcp!$5-hyQ99tf-%4b+-zS1r}ewBjRR8rdyULnbVxp>N}#si$xQg;fx7BwN|PcCA`P|{ z7}L*v5rCaTmeq*h?YQ19T*JBC;?w-1X21&}l>f33QHD)LEPnQ*`jw8lPRZ8n|5+61 zSZ#19K}Yq-&NDl2LJ8>lpt_8k&?m2w)V3q`TdbE<8l&N9R+HUwe(#XpysKdkdU~XL zwXq9;QVz}DOA?_s*_zUPvq&*)wl~jc91_m26kl$FV#1}N=5|D z9G}$$#h!~}UNZJ`e0w@5K3?WYa55}u)3YqXFIvG;BWza$CeTXa3fE(N<7;_?h{Fw4 z927;g^TX;l&c#6|SGR>jnrB8GugV4^|8&9)wQW88!2RycPZjiYhd_g!$!FaCe zhxWPG86nW}FliE(w@~y8nR4K808;=8NwBCLcT(E-2&aVi1DDhzc0TE}Z&`I!(ihg$uO$Pr zzC0-A*R@+1w9BD;&OY-ZzLYX6-4HY3tp-vZ$c|{41lPA#RVyNMYx{&RcUE=P{UEfN z|3ms@S1SbPpEN1(TYFpGBY6q5bc_YOzgmvase^5piX>^}*CYg+e$SrYlQTIm8!Fd6 z2~a*2`cnWjC4=(C%~ox#tlp(lC}SskkC9i4qbcpCRskrO|JJ}z{pg(l&< z@_-g-londL4;EVAMRTfUuQ772?zh}Y&9X*09+67pv)Ap~3caY8RXQL1kztm2qO`R1 z+Ds11<^e%dCs>83fTbs@XBMd+Mh3i2wv?SIBoZ+2y!vTka&)?mI=67**Ja#OaX6zi1bsmmTnOFNDL2H3Ad*;BU2t5t^I_w>(C-CL})b-T00Q%UW= z|I7NS47+;kR}Vlth-x^de~#27G)isny$>ekRO3MaI4GRjXit1cDb0F}IN0xO%?DJc z=0+kJu!j(5g64@Q`TRV=2Q6U%cXg=~w%)l4iy6Sq^-<4A1;V_cM|PZJV)wp=p>Nbu z*MY2LETArgz7I%0DLeCA_o_fXd<81%Pe*5EKle8gcpo+;URe*2M33L=0w)>u1f-8>qyh@&)w8odLIp4~4V((xsktbM?E{Kp$|Rxy}sd;hW+ z*4}&6RFVt6dZVG-G*_ze?e_>?x(Y^flz)>4+IR39KGDd|$%Ssc_s9EXFMGlxX2W!7 z^(JPk1=sE()SKJFtdqkQL~qA)B48)F+IHB{?r%Omte&s|{f%z;nNIcnt$v~P=FOX% z9fxbqH7b?Xd{1{^8V!fBw_!RPWBCkm#do&yKT>M{hSGX}dOwi^!WpOA1PaIP&S5=y z9Z-i*1emT?!d_iPTn%O)-$$91{z0Lh zfcF;w6jFh0SpF9ZS_&j25mPUt;8VaATa7U`xyOVj zNW%n7M42f!Z-qs#wtE%u6FeikJ~TOT2kMu`Oph?JubGMMZh>LAcMV+2UXY!+=X=wP z@rLO18k_S+)wN%IZd}j_H8DOg%kI&9g23It^c|j2Gho>riVnb$FB>o0{9(q6R{ZNP zUp2+^KW=`ts7s!2vVRF4{imoi1qdTEuEmgh#PFDOR! zYwAc*Y-s<|XiSRv7c=e2Mc;X2F{0!V)zVqKAb44Zu5PH-xmzqbk4!yF&JP9rbbxVX z_tCJU`(tMN^rx5Tvy{JTa+p~-X{|5!SYJwMcl?E2u0d!lVp&~vDWxd~22qMCbqdSY zXEKz+qU(8Wwa2{V{4Blw>qL$A>PMBZrA}Oz!7yFZ6V6(Z_@|y1W{52`=~Wz)Nc_KpoDY03Zc9JRZj!B7`P2&hM*sNF)0Uf=b-p3(jZ6$ zbp4iKbSSQ`Z|?@vK%pAe>eio#I6Xoci#vN?QA1`fFWm&Ldrmh1wj z1!&d$@NN}Q$T~43mv)3EL6PWWh@WfOTH9D;Ye=ahkhA-jhN!!T&5On0f4Inq8|bA zOpN)LhV99?(+bjERMKL3^d-Di8m{YyoDYflf)fR)E62i}e6CjzVf$D5+ z;$n*Cb@H!{y5QS+fo)NvKL59=uve*csFsvA^89PjFSTwq#%Q^ONe&2;%Pk7=`X9|p zLFB!FM2cs_b=QGg_ckVOy}T)jTX+xk|%f>{ZV@~a?5EhVLty#MNoH4c4wfkWW zoLEy1f*qbrszL?|{JBcbF6wd6MW8uHajBHvvF!qDH4{DmGS?|g%EHLTwfA-|Ln0&d z>UDi!m3s{7Xn44Y2m-#RB3piO*1&*%!Zmecu+gx5v)(oQgvUZ zxLVmQ(41rdp;)D<1q1QQghiiLnNI^c_IJ<{b(aliNJ)>Wx$Av}bioxspCrFzIN1jYtWy)QrIx*FKwm?&cQ8Tkb7o825!%aawd@1akC zbFWNa$@B+g|4QC73Rj)AvpBkiP>U37WB)PK7c<;8<=T3QG|+QBNDxT=w4WNPAny*q=e5~P1O*beb0EyxYL7Y*$B?#s=OB>qvINUT4^bFyV zJ-qZ==5yI2!~xOnkTOW%SAjDq-oEdzCZ^8At>%bK;7FA5q1tXksH7YNAwOE!9on|x zz!DL;`Rh#5_<*A~n`ddj{e1{ouGqCfpfvjfDUufw zl9C4;D0@wyOG_o;x?tBGf#&R`%Q7O+o3Q{K^T*ObAb`3;*k<2cDFTdvBX8URyK6HJ zon;vm&B`pBqS~n!4HZRMcQBUjETIoG*Lw2};rKvbfaBnVw?%r<^UsP;cU{B7^S%V! zXO;rJoc~pG*BNvJ;5t}e?Rm@7Ahv$ajhqz=o-ABw1)`vY^$8uwgF=_lY8-^=SY2Hm z$ocGYk&D`s4l}|pVw*><zS3CmcahgV4G@XrV4}X@9)8FfnLfvhITC{!%EIy*d`cw?T3_M;C9c#x{5Na zxD@a{uP02oR4^WQR^PkkCvCctisrnvl7=SBDoM-}?mp{MSpC=uney#ia#)0=DFy;@OX!aVe1^c_^y&WY_ zmO%GaZ((V)q6QzjH_H0#sGNcVQ7|5#Qu%YIR{^x*O;+lHual2ZQI=Xfqbt7(n15Gw zu<4_2&B_hxvBXhEdnT76UB+dF;X!BOC7(g9{gSpXaIL;zc_tn>^w3sE<`bP zM{XK~^2ie=wt6$ezTyersOBSc?;842x^mJhW(ala_Jf;2n#;3A)q$B$UPt=K>~Uq- zmn>+m8}};v4J%SF%FoQ4^c4-&ENy1>m-VAsFKf`5-6G$Gg0e=o@OoqVv>{|^MF0KO zP_?0uBfIxUh?Xh!9OIDbsw2qBxGCC$g^t`l!p}V&ST;<0d*aTmku^srC%l7hRv`<> z^<+2T#H%~B{Y4jK^gVX1Fe8yCNo%d~zr*J0JSmk8AE58AEI;gJ7rdWyifiqd+v-QA zZl)JRnv;SG8k1;J{Q2c9`ks(=5424iUPh6s)A{*ftWfNyNUg()(#w!)s7}toW%H^$ znySIbn#r0dt`dGueXb$tv|D0t@kjrF<33izBF3+pr}oZdA%Yy@-`D8)Sw;J@7cRGG z$%no+#qFxU-eA#d+e0+Meezgu5A@i!?~U-x8s`sz%d*?kFI)qlO^$l&C?ia0+i|AZ z*tI>`Q zY@&lgD0){{mmvA=WrhgoPF)CDHCF82(bW|na%}GeG|4uVN>!}^ipNn-8&s^rLw7bW zL|YYn*f~)Z0Pv+@)}^C(s%`7%XpkJoH>rI{pjKg)l}Wv##q1c1_LS^t2JNCVUMuc( zAeLeUIC*gp8?gUe1OPG}1TBa}d4MFEeczS%;m#kCuAjwu|5m%MO9sk#E=U`g?pdI) z@<3GnbV7{-&OuK_yYNG8&c@C~;8D>wF)`Ua8RZl=9$^h^a}~qxFC&3f=pkp*)((h( zZcd~C_DZ22ZxmGTdO!$syI*tdg9uq|>cBJ`5`_UNIJJ}7Y;)aeV?vLL(e^Ip!8L&Y z0hNKS1R}bfq8D{5X|N{jDuLuiXMa|(s32+wBz4;l9i3Xizi?1jiDkaa3Hj21gYn0 zchfe;c5l=;MRp4huJ=h{U%1P1>%^$aT7Wm!d<%y3BiYYXBvNdE@c{4) zSGM0JPqdt~P>YNiJ?!LfONiW6_7epHmW4@%_a2Dzhbr7u=u-cirO1;#D}oTsrZ)Gp zD=;WAyYhtIlG))=53U}ktw8e;ttVcpVYve7mt*f$xBa z>1OP8b$RQIzO8+3cxEinnHOlvhMBsZ(^l$Aj;Yb|J{-|DVYa+E2-dV4dwx8}Xv(hy z@h9_voPaox8t{m#pnrU7^c0PHU3B(wo7N@_>HVl~yzmNe1ks3fe)+&b4stbEF67+` zu5jQiL;N-^2yV!$?hFtR!Y_dCEgh^CS==12b?%7(Q;%B!jka0UNPrP0-5dMC7J|i5 zK6z3g3G}8>ONG(9#jAhn0^Q5Yq}=hhS9_H!$Xom|Lvs0kltNbEt1IFz)g{#g7Lx%a zLfX(v^j#UQ9eof7#r-`Hf<52uc{Eu=Qj0Fk4=0~m5&q>NN&-zn+gw?B`N-xrtl4sP z>nOm#>A)j5&K0hsyBwqAvhB=+KES2U)Ke^PCw1O-xQpv)Poktg((pbUC<_4tK>(Vr z{Wt_6PX)N}K+}uFJ#EJicL7ZxBKIRrZ87Pm`6ZCy?96?>*-?LU`_OqCZJHdc{2_ZmatXgGhECh8z83~W2dK*Y{pXF36Gy%a zp(wP^n&b6v0roBazEi$#tE5Gym9J}_8zUA~_C0aSmWqcfNcNyp1DlFzbpM?X){Y*h zOQM)Bt3FOG2mLh|GH>xVLfU2a-S}-%gn=6G#ioX&5?;#^xMM+XkS+Oec*6GY9FDgI zTk`SZExn%CjR^%BM;0|PkvR?Z$NTvL9+!~o`mf?aT_b|*9p-0e>?E|u?_dW`Zx#uO zysP7kERhG6M*a?;5^@OkiL4LkCISOD`)G%PeuSTB5A{#rSXcx!V@;~b+kIUdqt^;H zdhe@gPcj?=pq{gp&HrUBxqVW3nJ6u1r|q`b_R*P)|!hUnNJMgM2Rss+!%QIb_PkwE7$Z z2Mz&C>M;n9fI`?)*xVowpLn}e(hLbKSh6a@i5DSLJkw{Q@n*X6S7pW1ZP>Na-f1st zNen>n9(Vo_B#<9sSorCOW)wFBk9+ard&eufeDV8Vb^e`^?x85NubT(OFb17MYncG= z?nbgrOii`w<>8-Yx$C6;^S0y>%w!$aX3u>uj(2pG?K=yC9&9*n@uM}?K`g6W&cZpW zHw!hdpz}`abZ69l%Ar9@fY7wG58D#n zK&1Bh0744Z$Rsh_8EIe>&kVittdC0cg_xJy;U6lY}Iasr5yXR z&yM+jn+Q_rej?E)yFYD|Ci=Bp_9UtrtbJ0o{3S?785(UBoJo=m-|+L8=kyV9`Cy6L zJpp-lHFYvQW0bo&;3HbXUs(2_n>LnwF5O|H77Is30}3TjDlWW1TTU$A=c*jZQI`cY z-<}B}@YW|7ud>0~@#7PlK;_&F9AVIxY)HH8Mu?dS3xswlWy2veZ8YWK-oU42n){P0 zR)X?>vMv67>eYS!M89>R zTDYO7J&}@{BJ-;XL)Tg5-~+bjhYW=6o)Ch?{0X)5EhNG(pQNvR_vcG3to4FywCF!w zY&jzTn|glX0KB=Hs`vTGDm+#7P8I521Lanmwxn6R-CW-xMR$Z7M%yTC)a7E8T)!Xs zY{z*kP5aKKO4znAfq2y3Yziq8W4y3swNUR`o+Mbx`dN0%`kn-4yFG0AW9etveNCf# z?tE~zud*~PSPvUNdby3H5<@LeJ;f+XNmk}q{!d-^r5T93ikXQOoBl-Vb#LsWVauH< zL`Gj2)T|)v^~0nXkCQq|A$?`lV_J`wlc9&c4}Nn3{VQW+{!NxUkL@`CB`& zut&*TZrOca=bQecxVB=5gY+}U#ZlduC5!RVpb%=ftC0PtBiv8f;lj`VnJ8Zxx|} zp=!HlGOAm}xQ;=!ai6Z#46co|9iaPM_l4SL(eK=M8R^wNOi4&X5~Vcwo-~tCrJ)2F zXwadBtcCL;8|BgP6RF-tw20^O+ruIuPKO|%ClQW=%{@D%0RMg377__ttOuqgoJdE| z03G4rpt%T{&&1ym&rDg>`GPw&pK=W0iPBDyj zR4>+{uwBVENVDm!t0k#=Pc)yCKx1^amoPZ)4gkShTxN_b6ul2qOAflMGKWgEh9SPK zg&!5yGNY>$|EQ3lX3|&BP(W37j%K+gEC@MI4SA}NavW;D?X0DB_UCFKxTk%%-eQDQ z|JhxcKNL9WkVXW79RTJtPoas9>Dv>xt@6iDgD@9QTG&##w=>+*m9%F=?aJL%nk3Hw z>NDMiAIBY4gZo^-M#I@)Sgbpvm)X8vnq=hsfsoJH03|Vb`+m7G_asjC1`fR7pjAnb zgw~_?+!}2F1aq4wkvX+c2(VPiD|UY~ZQs2G>Mt7hZTr2ipV&9M|Aee5VjReN^c+6X zvD=qS`v;5hIpx7NSUQzy2^%AX+)J_X}2nMJfFE4vpCM`z~QB(oDT8E5me{VN&yD&}o47%9O4)dyUjyKlTzN zIQ@Q;jUh7sD*S{2`BOE0C#$UryMe?-#|m^v9n1XX@5|inqka#pc{~`xuW~=!l=8rF zE$0ufkk8+U?*wX!LoP%g8n?D1Lx-oVe9d&}VL3hUW#Vr_MGui4pVQ9VM*JHu7Jc7Y zU6su`dZ26RtLC{0Vo_1w6J)mAgBA$Di^B|-E3jtv)$KVsRy zrRVucvlKH>@%v+GjAg|=X!NmX1xG4r7{2~YWATB@1AJ9l1_!UcC|)-`CNPj0O3kBm z=2WQSGFuoE^~5P)hui+^kL}rY6pjCqdqpAT!Jj*(v6sF5;cm5@a7LcV3W^N&R}%WmV*l6*HC(8dD#BLR)R1yfk<5=sme1pY z`Eoj|3=l^P+=~I?eF75&ntElw;v|i+(Bq9ue7zaglqwEV-O{W z1m!m?PI1aX&oyFxnCm*chojFG1<<4Uw0^u7iLf428a+*Rj&oxDJ*bqgZCcsuUO~z( z-dblenf8E%qYIL+h-l`Ux1Og*zv^~;z0z_(d3HF6*DHtnMD4ua2xE)#G-ZHfa`s6a zs-JEm6(J#!hZUjDQmKqgdYZlz(V9h8XHp|xi{kMumn>%oDy!Tl(Y zsi8#RY)5-G`_`L@jl+zprO<>%X-V36gbqocn(yeoV`(mb#`QGId|8CqPhoA-(XgWR z)(8daj!8^!u^avvKihvk0t?+>7zI6ELP{|_xD#KdZ$GymHumo)9Ou^#n5Ll{z$k{G zox{Sy(#%8u6br^k7p?cE%R4f^QnJX2Rb;K;;aH)yTgtP(4$8A*F1)=TNQWBtovd{b zsga(Nr}|68MpQN^Gi+b0RTevREAgOYV)}dKT=p&U4%GEn?x$iOlbch; zJtn$_?raR6XS&(y%u{FFVd(-0Y@5S{pp-LXg&DhHU$kh>J1w3QfRPRZBk8KEd6b_m z#IGS$#Lnp1na{j{jGSIy7$k`CE8tF|&TLn2+5=(sVJ7gjG{Gqbg|wJQ@q1WQUqvA(1XbYX%QIyRP|666wM4t#C706{QR%NH+N+N#fb zp5i~KL{Q7_Q#nn3*SvCVb{O-+L3d|id3kwUf^3dG#j6JkOfFovVhFiA$Sp?5)9;5q zXzTO%*4^E$kF5VP38#`CV2Ju}&|Qf<6vRV}8JL`e`uepd6tzFX`*@2ixpeCzenfL* zQ*^UDpykA~SW!D0;-~R?!=jo~LaVSwgKuYQ_DjoQRhHmqaNAcW%4vlen-gM~J1mQrDXk3JdzlqDq_}PnTTPx8Y zbg+X*sB#{5gUSsv-mWW61sxlBNnz+=+Lx`%HJv(+JS$gXZy?pnYG+$&Ho}Q{7uz&4 zji-Q1u#s*owF`1x(PzCyra~CW^I9ne@@NLiqsI?t-k5%aO ze(0E%f1mz-l+4~Y*O)5-7bKIyejgpWTeTOFc>q0LQ#C^a10p}#ESIYzwe3*0W>C~U zTwFkDei+=g!#3aiGNrS$q*p18vz$he<7Zo4+Y-V(S?bET$vOt9s4@)tT212b1riD2 zp5Qb{ui`5r2nMh|ZvK&3r_+wMju+)tZ{OS~9$b(-O}@zE6lyW3WX*htJPw{2#xzIZL(1H; zim?Qk65!OR5@aj`hw3NPfjRqCTxXB;*PYAI?qE5dG1b@=3pe*xpHeBoMY7g@$kQ-o zEZ+oT&n314mMiL1sUPcQagO`@Gtcnh5KM+?3G@L5@tKs@cRR?-+dHzQ=h4&O!2yae z!E51bF`znZe?%+P-BBBAzRQ$t&FkEH(CKa~V0l?Qeh6iV5sX?99=rJUBe}?PQxXD6 zyJaG%4AWXPGx0)L$m0~#G#T%3%i&y6t!0joLuP$TR}))$m7Yf|mm+bH);YKzL`b1= z)Ng?PG0}X{%EJ+T$`=JVvTr!uH*LJ_0WOM}?Gx6T$EYQ|J7N8Bwuw(Nq|q;u>!xo) zJ{X<|9g`ODwG6#5E$|z1rJ{R_k>y`5m5yPqazUCid(#yNQY^Oqtb_!svBu^E3|xY{ zE%8;I`~5+*PgPLz2umKfSk)*v9SF$eISsV z@NOP(zz(4yHMWz5sWRp0bp#mf_|V0&k}1XPzR2AUBO(Hji^R}_^BJ+is@Ei!;5Ikp zwy#--G*}VKiYB=@1FJF;z_Mc1{z>Iq?y{bkb7S_t~K|R2XV}r*5wzxE?gbh4$l-rk@8-!Pt zz|V9T4T8_on6>7mi~rq0RtFr744mqd@55qvs)YF}W@=7)T1HIQsiFF{&WM@b->nTGq0N z`+M+~Hc2a-J9>Vfaz9}-#loaTcPO0?((!D$jgC(@HzeevK)-FG5nzTEdPb5nn9zZB y|E&pK_pb?^^=m?tt}R+|uI+z+{s%^2M?vbW(y6#hse_z1yQ*iZTYdTFz5fI7m}Rp7