From d36bf0429da3c287d6bdd6db3e4a2c00e4638c93 Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Fri, 12 Apr 2024 17:17:01 -0400 Subject: [PATCH] Upgrade to upstream elfutils 0.191 Drop upstreamed patches elfutils-0.190-fix-core-noncontig.patch elfutils-0.190-gcc-14.patch elfutils-0.190-remove-ET_REL-unstrip-test.patch Drop testcore-noncontig.bz2 Add elfutils-0.191-profile-empty-urls.patch Add elfutils-0.191-riscv-flatten.patch Add feature flag for reenabling elfutils-libelf-devel-static and elfutils-devel-static Resolves: RHEL-29197 --- .gitignore | 1 + elfutils-0.190-fix-core-noncontig.patch | 329 ---------------- elfutils-0.190-gcc-14.patch | 33 -- ...ils-0.190-remove-ET_REL-unstrip-test.patch | 32 -- elfutils-0.191-profile-empty-urls.patch | 96 +++++ elfutils-0.191-riscv-flatten.patch | 359 ++++++++++++++++++ elfutils.spec | 74 +++- sources | 2 +- testcore-noncontig.bz2 | Bin 54684 -> 0 bytes 9 files changed, 517 insertions(+), 409 deletions(-) delete mode 100644 elfutils-0.190-fix-core-noncontig.patch delete mode 100644 elfutils-0.190-gcc-14.patch delete mode 100644 elfutils-0.190-remove-ET_REL-unstrip-test.patch create mode 100644 elfutils-0.191-profile-empty-urls.patch create mode 100644 elfutils-0.191-riscv-flatten.patch delete mode 100644 testcore-noncontig.bz2 diff --git a/.gitignore b/.gitignore index eb85273..fa7036f 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ /elfutils-0.188.tar.bz2 /elfutils-0.189.tar.bz2 /elfutils-0.190.tar.bz2 +/elfutils-0.191.tar.bz2 diff --git a/elfutils-0.190-fix-core-noncontig.patch b/elfutils-0.190-fix-core-noncontig.patch deleted file mode 100644 index e8a7f07..0000000 --- a/elfutils-0.190-fix-core-noncontig.patch +++ /dev/null @@ -1,329 +0,0 @@ -From 0fba72fed595f77ca19a57553096ce3cc81cf8f3 Mon Sep 17 00:00:00 2001 -From: Aaron Merey -Date: Fri, 24 Nov 2023 14:52:38 -0500 -Subject: [PATCH] libdwfl: Correctly handle corefile non-contiguous segments - -It is possible for segments of different shared libaries to be interleaved -in memory such that the segments of one library are located in between -non-contiguous segments of another library. - -For example, this can be seen with firefox on RHEL 7.9 where multiple -shared libraries could be mapped in between ld-2.17.so segments: - - [...] - 7f0972082000-7f09720a4000 00000000 139264 /usr/lib64/ld-2.17.so - 7f09720a4000-7f09720a5000 00000000 4096 /memfd:mozilla-ipc (deleted) - 7f09720a5000-7f09720a7000 00000000 8192 /memfd:mozilla-ipc (deleted) - 7f09720a7000-7f09720a9000 00000000 8192 /memfd:mozilla-ipc (deleted) - 7f0972134000-7f0972136000 00000000 8192 /usr/lib64/firefox/libmozwayland.so - 7f0972136000-7f0972137000 00002000 4096 /usr/lib64/firefox/libmozwayland.so - 7f0972137000-7f0972138000 00003000 4096 /usr/lib64/firefox/libmozwayland.so - 7f0972138000-7f0972139000 00003000 4096 /usr/lib64/firefox/libmozwayland.so - 7f097213a000-7f0972147000 00000000 53248 /usr/lib64/firefox/libmozsqlite3.so - 7f0972147000-7f097221e000 0000d000 880640 /usr/lib64/firefox/libmozsqlite3.so - 7f097221e000-7f0972248000 000e4000 172032 /usr/lib64/firefox/libmozsqlite3.so - 7f0972248000-7f0972249000 0010e000 4096 /usr/lib64/firefox/libmozsqlite3.so - 7f0972249000-7f097224c000 0010e000 12288 /usr/lib64/firefox/libmozsqlite3.so - 7f097224c000-7f0972250000 00111000 16384 /usr/lib64/firefox/libmozsqlite3.so - 7f0972250000-7f0972253000 00000000 12288 /usr/lib64/firefox/liblgpllibs.so - [...] - 7f09722a3000-7f09722a4000 00021000 4096 /usr/lib64/ld-2.17.so - 7f09722a4000-7f09722a5000 00022000 4096 /usr/lib64/ld-2.17.so - -dwfl_segment_report_module did not account for the possibility of -interleaving non-contiguous segments, resulting in premature closure -of modules as well as failing to report modules. - -Fix this by removing segment skipping in dwfl_segment_report_module. -When dwfl_segment_report_module reported a module, it would return -the index of the segment immediately following the end address of the -current module. Since there's a chance that other modules might fall -within this address range, dwfl_segment_report_module instead returns -the index of the next segment. - -This patch also fixes premature module closure that can occur in -dwfl_segment_report_module when interleaving non-contiguous segments -are found. Previously modules with start and end addresses that overlap -with the current segment would have their build-ids compared with the -current segment's build-id. If there was a mismatch, that module would -be closed. Avoid closing modules in this case when mismatching build-ids -correspond to distinct modules. - -https://sourceware.org/bugzilla/show_bug.cgi?id=30975 - -Signed-off-by: Aaron Merey ---- - libdwfl/dwfl_segment_report_module.c | 37 ++++++++---- - tests/Makefile.am | 8 ++- - tests/dwfl-core-noncontig.c | 82 +++++++++++++++++++++++++++ - tests/run-dwfl-core-noncontig.sh | 63 ++++++++++++++++++++ - 4 files changed, 177 insertions(+), 14 deletions(-) - create mode 100644 tests/dwfl-core-noncontig.c - create mode 100755 tests/run-dwfl-core-noncontig.sh - -diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c -index 3ef62a7d..09ee37b3 100644 ---- a/libdwfl/dwfl_segment_report_module.c -+++ b/libdwfl/dwfl_segment_report_module.c -@@ -737,17 +737,34 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, - && invalid_elf (module->elf, module->disk_file_has_build_id, - &build_id)) - { -- elf_end (module->elf); -- close (module->fd); -- module->elf = NULL; -- module->fd = -1; -+ /* If MODULE's build-id doesn't match the disk file's -+ build-id, close ELF only if MODULE and ELF refer to -+ different builds of files with the same name. This -+ prevents premature closure of the correct ELF in cases -+ where segments of a module are non-contiguous in memory. */ -+ if (name != NULL && module->name[0] != '\0' -+ && strcmp (basename (module->name), basename (name)) == 0) -+ { -+ elf_end (module->elf); -+ close (module->fd); -+ module->elf = NULL; -+ module->fd = -1; -+ } - } -- if (module->elf != NULL) -+ else if (module->elf != NULL) - { -- /* Ignore this found module if it would conflict in address -- space with any already existing module of DWFL. */ -+ /* This module has already been reported. */ - skip_this_module = true; - } -+ else -+ { -+ /* Only report this module if we haven't already done so. */ -+ for (Dwfl_Module *mod = dwfl->modulelist; mod != NULL; -+ mod = mod->next) -+ if (mod->low_addr == module_start -+ && mod->high_addr == module_end) -+ skip_this_module = true; -+ } - } - if (skip_this_module) - goto out; -@@ -781,10 +798,6 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, - } - } - -- /* Our return value now says to skip the segments contained -- within the module. */ -- ndx = addr_segndx (dwfl, segment, module_end, true); -- - /* Examine its .dynamic section to get more interesting details. - If it has DT_SONAME, we'll use that as the module name. - If it has a DT_DEBUG, then it's actually a PIE rather than a DSO. -@@ -929,6 +942,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, - ndx = -1; - goto out; - } -+ else -+ ndx++; - - /* We have reported the module. Now let the caller decide whether we - should read the whole thing in right now. */ -diff --git a/tests/Makefile.am b/tests/Makefile.am -index 7fb8efb1..9f8f7698 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -42,7 +42,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ - dwfl-bug-addr-overflow arls dwfl-bug-fd-leak \ - dwfl-addr-sect dwfl-bug-report early-offscn \ - dwfl-bug-getmodules dwarf-getmacros dwarf-ranges addrcfi \ -- dwarfcfi \ -+ dwfl-core-noncontig dwarfcfi \ - test-flag-nobits dwarf-getstring rerequest_tag \ - alldts typeiter typeiter2 low_high_pc \ - test-elf_cntl_gelf_getshdr dwflsyms dwfllines \ -@@ -212,7 +212,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ - $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ - run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ - run-readelf-dw-form-indirect.sh run-strip-largealign.sh \ -- run-readelf-Dd.sh -+ run-readelf-Dd.sh run-dwfl-core-noncontig.sh - - if !BIARCH - export ELFUTILS_DISABLE_BIARCH = 1 -@@ -632,7 +632,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ - run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ - testfile_nvidia_linemap.bz2 \ - testfile-largealign.o.bz2 run-strip-largealign.sh \ -- run-funcretval++11.sh -+ run-funcretval++11.sh \ -+ run-dwfl-core-noncontig.sh testcore-noncontig.bz2 - - - if USE_VALGRIND -@@ -738,6 +739,7 @@ dwfl_bug_fd_leak_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) - dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) - dwfl_bug_getmodules_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) - dwfl_addr_sect_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) $(argp_LDADD) -+dwfl_core_noncontig_LDADD = $(libdw) $(libelf) - dwarf_getmacros_LDADD = $(libdw) - dwarf_ranges_LDADD = $(libdw) - dwarf_getstring_LDADD = $(libdw) -diff --git a/tests/dwfl-core-noncontig.c b/tests/dwfl-core-noncontig.c -new file mode 100644 -index 00000000..04558e28 ---- /dev/null -+++ b/tests/dwfl-core-noncontig.c -@@ -0,0 +1,82 @@ -+/* Test program for dwfl_getmodules bug. -+ Copyright (C) 2008 Red Hat, Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3 of the License, or -+ (at your option) any later version. -+ -+ elfutils is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program. If not, see . */ -+ -+#include -+#include -+#include -+#include -+#include ELFUTILS_HEADER(dwfl) -+#include ELFUTILS_HEADER(elf) -+ -+static const Dwfl_Callbacks cb = -+{ -+ NULL, -+ NULL, -+ NULL, -+ NULL, -+}; -+ -+int -+main (int argc, char **argv) -+{ -+ assert (argc == 2); -+ -+ Dwfl *dwfl = dwfl_begin (&cb); -+ -+ int fd = open (argv[1], O_RDONLY); -+ assert (fd != -1); -+ -+ Elf *elf = elf_begin (fd, ELF_C_READ, NULL); -+ (void) dwfl_core_file_report (dwfl, elf, argv[0]); -+ -+ /* testcore-noncontig contains a shared library mapped between -+ non-contiguous segments of another shared library: -+ -+ [...] -+ 7f14e458c000-7f14e45ae000 00000000 139264 /usr/lib64/ld-2.17.so (1) -+ 7f14e4795000-7f14e4798000 00000000 12288 /usr/lib64/firefox/liblgpllibs.so (2) -+ 7f14e4798000-7f14e479d000 00003000 20480 /usr/lib64/firefox/liblgpllibs.so -+ 7f14e479d000-7f14e479f000 00008000 8192 /usr/lib64/firefox/liblgpllibs.so -+ 7f14e479f000-7f14e47a0000 00009000 4096 /usr/lib64/firefox/liblgpllibs.so -+ 7f14e47a0000-7f14e47a1000 0000a000 4096 /usr/lib64/firefox/liblgpllibs.so (3) -+ 7f14e47ad000-7f14e47ae000 00021000 4096 /usr/lib64/ld-2.17.so (4) -+ 7f14e47ae000-7f14e47af000 00022000 4096 /usr/lib64/ld-2.17.so */ -+ -+ /* First segment of the non-contiguous module (1). */ -+ int seg = dwfl_addrsegment (dwfl, 0x7f14e458c000, NULL); -+ assert (seg == 32); -+ -+ /* First segment of the module within the non-contiguous module's address -+ range (2). */ -+ seg = dwfl_addrsegment (dwfl, 0x7f14e4795000, NULL); -+ assert (seg == 33); -+ -+ /* Last segment of the module within the non-contiguous module's -+ address range (3). */ -+ seg = dwfl_addrsegment (dwfl, 0x7f14e47a0000, NULL); -+ assert (seg == 37); -+ -+ /* First segment of non-contiguous module following its address space -+ gap (4). */ -+ seg = dwfl_addrsegment (dwfl, 0x7f14e47ad000, NULL); -+ assert (seg == 40); -+ -+ dwfl_end (dwfl); -+ elf_end (elf); -+ -+ return 0; -+} -diff --git a/tests/run-dwfl-core-noncontig.sh b/tests/run-dwfl-core-noncontig.sh -new file mode 100755 -index 00000000..1245b67f ---- /dev/null -+++ b/tests/run-dwfl-core-noncontig.sh -@@ -0,0 +1,63 @@ -+#! /bin/sh -+# Copyright (C) 2023 Red Hat, Inc. -+# This file is part of elfutils. -+# -+# This file is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 3 of the License, or -+# (at your option) any later version. -+# -+# elfutils is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see . -+ -+. $srcdir/test-subr.sh -+ -+# Test whether libdwfl can handle corefiles containing non-contiguous -+# segments where multiple modules are contained within the address -+# space of some other module. -+ -+# testcore-noncontig was generated from the following program with -+# systemd-coredump on RHEL 7.9 Workstation, kernel -+# 3.10.0-1160.105.1.el7.x86_64. liblgpllibs.so was packaged with -+# firefox-115.4.0-1.el7_9.x86_64.rpm. -+ -+# #include -+# #include -+# -+# int main () { -+# dlopen ("/usr/lib64/firefox/liblgpllibs.so", RTLD_GLOBAL | RTLD_NOW); -+# sleep (60); -+# return 0; -+# } -+# -+# gcc -ldl -o test test.c -+ -+tempfiles out -+testfiles testcore-noncontig -+ -+testrun ${abs_builddir}/dwfl-core-noncontig testcore-noncontig -+ -+# Remove parts of the output that could change depending on which -+# libraries are locally installed. -+testrun ${abs_top_builddir}/src/unstrip -n --core testcore-noncontig \ -+ | sed 's/+/ /g' | cut -d " " -f1,3 | sort > out -+ -+testrun_compare cat out <<\EOF -+0x400000 3a1748a544b40a38b3be3d2d13ffa34a2a5a71c0@0x400284 -+0x7f14e357e000 edf51350c7f71496149d064aa8b1441f786df88a@0x7f14e357e1d8 -+0x7f14e3794000 7615604eaf4a068dfae5085444d15c0dee93dfbd@0x7f14e37941d8 -+0x7f14e3a96000 09cfb171310110bc7ea9f4476c9fa044d85baff4@0x7f14e3a96210 -+0x7f14e3d9e000 e10cc8f2b932fc3daeda22f8dac5ebb969524e5b@0x7f14e3d9e248 -+0x7f14e3fba000 fc4fa58e47a5acc137eadb7689bce4357c557a96@0x7f14e3fba280 -+0x7f14e4388000 7f2e9cb0769d7e57bd669b485a74b537b63a57c4@0x7f14e43881d8 -+0x7f14e458c000 62c449974331341bb08dcce3859560a22af1e172@0x7f14e458c1d8 -+0x7f14e4795000 175efdcef445455872a86a6fbee7567ca16a513e@0x7f14e4795248 -+0x7ffcfe59f000 80d79b32785868a2dc10047b39a80d1daec8923d@0x7ffcfe59f328 -+EOF -+ -+exit 0 --- -2.41.0 - diff --git a/elfutils-0.190-gcc-14.patch b/elfutils-0.190-gcc-14.patch deleted file mode 100644 index f81bcc8..0000000 --- a/elfutils-0.190-gcc-14.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: Sergei Trofimovich -Date: Thu, 21 Dec 2023 09:23:30 +0000 (+0000) -Subject: tests: fix build against upcoming `gcc-14` (`-Werror=calloc-transposed-args`) -X-Git-Url: https://sourceware.org/git/?p=elfutils.git;a=commitdiff_plain;h=ae580d48278b9924da7503886b37be34378e1b04;hp=a2194f6b305bf0d0b9dd49dccd0a5c21994c8eea - -tests: fix build against upcoming `gcc-14` (`-Werror=calloc-transposed-args`) - -`gcc-14` added a new `-Wcalloc-transposed-args` warning recently. It -detected minor infelicity in `calloc()` API usage in `elfutils`: - - elfstrmerge.c: In function 'main': - elfstrmerge.c:450:32: error: - 'calloc' sizes specified with 'sizeof' in the earlier argument and not in the later argument [-Werror=calloc-transposed-args] - 450 | newscnbufs = calloc (sizeof (void *), newshnums); - | ^~~~ - elfstrmerge.c:450:32: note: earlier argument should specify number of elements, later size of each element - -Signed-off-by: Sergei Trofimovich ---- - -diff --git a/tests/elfstrmerge.c b/tests/elfstrmerge.c -index 56350bb91..4eb58bbb5 100644 ---- a/tests/elfstrmerge.c -+++ b/tests/elfstrmerge.c -@@ -447,7 +447,7 @@ main (int argc, char **argv) - } - - newshnums = shdrnum - 1; -- newscnbufs = calloc (sizeof (void *), newshnums); -+ newscnbufs = calloc (newshnums, sizeof (void *)); - if (newscnbufs == NULL) - fail_errno ("Couldn't allocate memory for new section buffers", NULL); - diff --git a/elfutils-0.190-remove-ET_REL-unstrip-test.patch b/elfutils-0.190-remove-ET_REL-unstrip-test.patch deleted file mode 100644 index 0f5599e..0000000 --- a/elfutils-0.190-remove-ET_REL-unstrip-test.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 010cacd89b847659b3c666ac963269b06a8c5058 Mon Sep 17 00:00:00 2001 -From: Aaron Merey -Date: Tue, 28 Nov 2023 16:41:35 -0500 -Subject: [PATCH] tests/run-strip-strmerge.sh: remove ET_REL unstrip and - elflint tests - -These tests can fail on i386. Remove them for now since stripping and -unstripping an ET_REL file is obscure. - ---- - tests/run-strip-strmerge.sh | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/tests/run-strip-strmerge.sh b/tests/run-strip-strmerge.sh -index aa9c1eb..67543eb 100755 ---- a/tests/run-strip-strmerge.sh -+++ b/tests/run-strip-strmerge.sh -@@ -69,11 +69,5 @@ echo elflint $stripped - testrun ${abs_top_builddir}/src/elflint --gnu $stripped - echo elflint $debugfile - testrun ${abs_top_builddir}/src/elflint --gnu -d $debugfile --echo unstrip --testrun ${abs_top_builddir}/src/unstrip -o $remerged $stripped $debugfile --echo elflint $remerged --testrun ${abs_top_builddir}/src/elflint --gnu $remerged --echo elfcmp --testrun ${abs_top_builddir}/src/elfcmp $merged $remerged - - exit 0 --- -2.41.0 - diff --git a/elfutils-0.191-profile-empty-urls.patch b/elfutils-0.191-profile-empty-urls.patch new file mode 100644 index 0000000..dab4d9b --- /dev/null +++ b/elfutils-0.191-profile-empty-urls.patch @@ -0,0 +1,96 @@ +commit 0ba2e4aa9945019a8c6db95d27d142b660a63a79 +Author: Mark Wielaard +Date: Tue Mar 26 21:42:39 2024 +0100 + + config: Make sure profile.sh succeeds with set -e and set -o pipefail + + profile.sh might fail with set -o pipefail because: + + cat /dev/null "${prefix}/etc/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ' + + might fail when there isn't an *.urls file the first command in the + pipe fails (the 2>/dev/null is there to hide that failure). + + This can be fixed by adding || : at the end. + + This works because : always succeeds and produces no outpur which is + what the script expects when the command would fail. + + Also add a new testcase that runs profile.sh with bout set -e + and set -o pipefail. + + * config/profile.sh.in: Add || : at end of pipe. + * tests/run-debuginfod-client-profile.sh: New test. + * tests/Makefile.am (TESTS): Add run-debuginfod-client-profile.sh. + (EXTRA_DIST): Likewise. + + https://sourceware.org/bugzilla/show_bug.cgi?id=31562 + + Signed-off-by: Mark Wielaard + +diff --git a/config/profile.sh.in b/config/profile.sh.in +index 3f4397dcb44d..84d3260ddcfc 100644 +--- a/config/profile.sh.in ++++ b/config/profile.sh.in +@@ -6,7 +6,7 @@ + + if [ -z "$DEBUGINFOD_URLS" ]; then + prefix="@prefix@" +- DEBUGINFOD_URLS=$(cat /dev/null "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ') ++ DEBUGINFOD_URLS=$(cat /dev/null "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ' || :) + [ -n "$DEBUGINFOD_URLS" ] && export DEBUGINFOD_URLS || unset DEBUGINFOD_URLS + unset prefix + fi +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 9315ec3bbe4c..344d6706e16e 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -209,6 +209,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ + run-disasm-riscv64.sh \ + run-pt_gnu_prop-tests.sh \ + run-getphdrnum.sh run-test-includes.sh \ ++ run-debuginfod-client-profile.sh \ + leb128 read_unaligned \ + msg_tst system-elf-libelf-test system-elf-gelf-test \ + $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ +@@ -636,6 +637,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ + testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \ + run-getphdrnum.sh testfile-phdrs.elf.bz2 \ + run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ ++ run-debuginfod-client-profile.sh \ + run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ + run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ + testfile_nvidia_linemap.bz2 \ +diff --git a/tests/run-debuginfod-client-profile.sh b/tests/run-debuginfod-client-profile.sh +new file mode 100755 +index 000000000000..7435ced83f15 +--- /dev/null ++++ b/tests/run-debuginfod-client-profile.sh +@@ -0,0 +1,27 @@ ++#! /bin/sh ++# Copyright (C) 2024 Mark J. Wielaard ++# This file is part of elfutils. ++# ++# This file is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 3 of the License, or ++# (at your option) any later version. ++# ++# elfutils is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++. $srcdir/test-subr.sh ++ ++# Make sure the profile.sh or profile.d/debuginfod.sh works even with ++# set -e (any command error is an error) and set -o pipefail (any error ++# in a pipe fails the whole pipe command). ++ ++set -e ++set -o pipefail ++ ++source ${abs_top_builddir}/config/profile.sh diff --git a/elfutils-0.191-riscv-flatten.patch b/elfutils-0.191-riscv-flatten.patch new file mode 100644 index 0000000..a96d339 --- /dev/null +++ b/elfutils-0.191-riscv-flatten.patch @@ -0,0 +1,359 @@ +From e39336df6588c3f9853be7d02819aee262ba2121 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Tue, 19 Mar 2024 22:43:10 +0000 +Subject: [PATCH] riscv: Partial implementation of flatten_aggregate + +dwfl_module_return_value_location would fail on riscv for functions +which return a (small) struct. This patch implements the simplest +cases of flatten_aggregate in backends/riscv_retval.c. It just handles +structs containing one or two members of the same base type which fit +completely or in pieces in one or two general or floating point +registers. + +It also adds a specific test case run-funcretval-struct.sh containing +small structs of ints, longs, floats and doubles. All these testscases +now work for riscv. There is already a slightly more extensive +testcase for this in tests/run-funcretval.sh but that only has a +testcase for aarch64. + + * backends/riscv_retval.c (flatten_aggregate_arg): Implement + for the simple cases where we have a struct with one or two + members of the same base type. + (pass_by_flattened_arg): Likewise. Call either + pass_in_gpr_lp64 or pass_in_fpr_lp64d. + (riscv_return_value_location_lp64ifd): Call + flatten_aggregate_arg including size. + * tests/Makefile.am (TESTS): Add run-funcretval-struct.sh + and run-funcretval-struct-native.sh. + (check_PROGRAMS): Add funcretval_test_struct. + (funcretval_test_struct_SOURCES): New. + (EXTRA_DIST): Add run-funcretval-struct.sh, + funcretval_test_struct_riscv.bz2 and + run-funcretval-struct-native.sh. + * tests/funcretval_test_struct_riscv.bz2: New test binary. + * tests/run-funcretval-struct-native.sh: New test. + * tests/run-funcretval-struct.sh: Likewise. + +https://sourceware.org/bugzilla/show_bug.cgi?id=31142 + +Signed-off-by: Mark Wielaard +--- + backends/riscv_retval.c | 123 ++++++++++++++++++++++--- + tests/Makefile.am | 7 ++ + tests/funcretval_test_struct.c | 86 +++++++++++++++++ + tests/funcretval_test_struct_riscv.bz2 | Bin 0 -> 3821 bytes + tests/run-funcretval-struct-native.sh | 22 +++++ + tests/run-funcretval-struct.sh | 35 +++++++ + 6 files changed, 262 insertions(+), 11 deletions(-) + create mode 100644 tests/funcretval_test_struct.c + create mode 100755 tests/funcretval_test_struct_riscv.bz2 + create mode 100755 tests/run-funcretval-struct-native.sh + create mode 100755 tests/run-funcretval-struct.sh + +Fedora NOTE: Both the riscv specific test files weren't included + (funcretval_test_struct_riscv.bz2 and run-funcretval-struct.sh) + Because it contained a binary test. The native test is included + though. + +diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c +index 0a1e02f81cd2..50c451a4ba32 100644 +--- a/backends/riscv_retval.c ++++ b/backends/riscv_retval.c +@@ -1,6 +1,7 @@ + /* Function return value location for Linux/RISC-V ABI. + Copyright (C) 2018 Sifive, Inc. + Copyright (C) 2013 Red Hat, Inc. ++ Copyright (C) 2024 Mark J. Wielaard + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify +@@ -105,23 +106,123 @@ pass_in_fpr_lp64d (const Dwarf_Op **locp, Dwarf_Word size) + return size <= 8 ? 1 : 4; + } + ++/* Checks if we can "flatten" the given type, Only handles the simple ++ cases where we have a struct with one or two the same base type ++ elements. */ + static int +-flatten_aggregate_arg (Dwarf_Die *typedie __attribute__ ((unused)), +- Dwarf_Die *arg0 __attribute__ ((unused)), +- Dwarf_Die *arg1 __attribute__ ((unused))) ++flatten_aggregate_arg (Dwarf_Die *typedie, ++ Dwarf_Word size, ++ Dwarf_Die *arg0, ++ Dwarf_Die *arg1) + { +- /* ??? */ ++ int tag0, tag1; ++ Dwarf_Die member; ++ Dwarf_Word encoding0, encoding1; ++ Dwarf_Attribute attr; ++ Dwarf_Word size0, size1; ++ ++ if (size < 8 || size > 16) ++ return 0; ++ ++ if (dwarf_child (typedie, arg0) != 0) ++ return 0; ++ ++ tag0 = dwarf_tag (arg0); ++ while (tag0 != -1 && tag0 != DW_TAG_member) ++ { ++ if (dwarf_siblingof (arg0, arg0) != 0) ++ return 0; ++ tag0 = dwarf_tag (arg0); ++ } ++ ++ if (tag0 != DW_TAG_member) ++ return 0; ++ ++ /* Remember where we are. */ ++ member = *arg0; ++ ++ tag0 = dwarf_peeled_die_type (arg0, arg0); ++ if (tag0 != DW_TAG_base_type) ++ return 0; ++ ++ if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL ++ || dwarf_formudata (&attr, &encoding0) != 0) ++ return 0; ++ ++ if (dwarf_bytesize_aux (arg0, &size0) != 0) ++ return 0; ++ ++ if (size == size0) ++ return 1; /* This one member is the whole size. */ ++ ++ if (size != 2 * size0) ++ return 0; /* We only handle two of the same. */ ++ ++ /* Look for another member with the same encoding. */ ++ if (dwarf_siblingof (&member, arg1) != 0) ++ return 0; ++ ++ tag1 = dwarf_tag (arg1); ++ while (tag1 != -1 && tag1 != DW_TAG_member) ++ { ++ if (dwarf_siblingof (arg1, arg1) != 0) ++ return 0; ++ tag1 = dwarf_tag (arg1); ++ } ++ ++ if (tag1 != DW_TAG_member) ++ return 0; ++ ++ tag1 = dwarf_peeled_die_type (arg1, arg1); ++ if (tag1 != DW_TAG_base_type) ++ return 0; /* We can only handle two equal base types for now. */ ++ ++ if (dwarf_attr_integrate (arg1, DW_AT_encoding, &attr) == NULL ++ || dwarf_formudata (&attr, &encoding1) != 0 ++ || encoding0 != encoding1) ++ return 0; /* We can only handle two of the same for now. */ ++ ++ if (dwarf_bytesize_aux (arg1, &size1) != 0) ++ return 0; ++ ++ if (size0 != size1) ++ return 0; /* We can only handle two of the same for now. */ ++ + return 1; + } + ++/* arg0 and arg1 should be the peeled die types found by ++ flatten_aggregate_arg. */ + static int +-pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)), +- Dwarf_Word size __attribute__ ((unused)), +- Dwarf_Die *arg0 __attribute__ ((unused)), +- Dwarf_Die *arg1 __attribute__ ((unused))) ++pass_by_flattened_arg (const Dwarf_Op **locp, ++ Dwarf_Word size, ++ Dwarf_Die *arg0, ++ Dwarf_Die *arg1 __attribute__((unused))) + { +- /* ??? */ +- return -2; ++ /* For now we just assume arg0 and arg1 are the same type and ++ encoding. */ ++ Dwarf_Word encoding; ++ Dwarf_Attribute attr; ++ ++ if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL ++ || dwarf_formudata (&attr, &encoding) != 0) ++ return -1; ++ ++ switch (encoding) ++ { ++ case DW_ATE_boolean: ++ case DW_ATE_signed: ++ case DW_ATE_unsigned: ++ case DW_ATE_unsigned_char: ++ case DW_ATE_signed_char: ++ return pass_in_gpr_lp64 (locp, size); ++ ++ case DW_ATE_float: ++ return pass_in_fpr_lp64d (locp, size); ++ ++ default: ++ return -1; ++ } + } + + int +@@ -158,7 +259,7 @@ riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie, + provided the floating-point real is no more than FLEN bits wide and + the integer is no more than XLEN bits wide. */ + if (tag == DW_TAG_structure_type +- && flatten_aggregate_arg (&typedie, &arg0, &arg1)) ++ && flatten_aggregate_arg (&typedie, size, &arg0, &arg1)) + return pass_by_flattened_arg (locp, size, &arg0, &arg1); + /* Aggregates larger than 2*XLEN bits are passed by reference. */ + else if (size > 16) +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 9141074fe44c..9315ec3bbe4c 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -284,6 +285,10 @@ funcretval_test__11_SOURCES = funcretval_test++11.cxx + TESTS += run-funcretval++11.sh + endif + ++check_PROGRAMS += funcretval_test_struct ++funcretval_test_struct_SOURCES = funcretval_test_struct.c ++TESTS += run-funcretval-struct-native.sh ++ + EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ + run-ar-N.sh \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ +@@ -635,6 +641,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ + testfile_nvidia_linemap.bz2 \ + testfile-largealign.o.bz2 run-strip-largealign.sh \ + run-funcretval++11.sh \ ++ run-funcretval-struct-native.sh \ + test-ar-duplicates.a.bz2 \ + run-dwfl-core-noncontig.sh testcore-noncontig.bz2 \ + testfile-dwarf5-line-clang.bz2 \ +diff --git a/tests/funcretval_test_struct.c b/tests/funcretval_test_struct.c +new file mode 100644 +index 000000000000..df94bde0a42d +--- /dev/null ++++ b/tests/funcretval_test_struct.c +@@ -0,0 +1,86 @@ ++/* Copyright (C) 2024 Mark J. Wielaard ++ This file is part of elfutils. ++ ++ This file is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++typedef struct ++ { ++ int q; ++ int r; ++ } div_t; ++ ++typedef struct ++ { ++ long q; ++ long r; ++ } ldiv_t; ++ ++typedef struct ++ { ++ float x; ++ float y; ++ } point_t; ++ ++typedef struct ++ { ++ double x; ++ double y; ++ } dpoint_t; ++ ++div_t __attribute__((__noinline__)) ++div (int n, int d) ++{ ++ div_t r; ++ r.q = n / d; ++ r.r = n % d; ++ return r; ++} ++ ++ldiv_t __attribute__((__noinline__)) ++ldiv (long n, long d) ++{ ++ ldiv_t r; ++ r.q = n / d; ++ r.r = n % d; ++ return r; ++} ++ ++point_t __attribute__((__noinline__)) ++mkpt (float x, float y) ++{ ++ point_t r; ++ r.x = x; ++ r.y = y; ++ return r; ++} ++ ++dpoint_t __attribute__((__noinline__)) ++dmkpt (double x, double y) ++{ ++ dpoint_t r; ++ r.x = x; ++ r.y = y; ++ return r; ++} ++ ++int ++main (void) ++{ ++ div_t d = div (3, 2); ++ ldiv_t ld = ldiv (3, 2); ++ point_t p = mkpt (3.0f, 1.0f); ++ dpoint_t dp = dmkpt (3.0d, 1.0d); ++ ++ return d.q - (int) p.y + ld.q - (int) dp.y; ++} + +diff --git a/tests/run-funcretval-struct-native.sh b/tests/run-funcretval-struct-native.sh +new file mode 100755 +index 000000000000..798edb3b61b3 +--- /dev/null ++++ b/tests/run-funcretval-struct-native.sh +@@ -0,0 +1,22 @@ ++#! /bin/sh ++# Copyright (C) 2024 Mark J. Wielaard ++# This file is part of elfutils. ++# ++# This file is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 3 of the License, or ++# (at your option) any later version. ++# ++# elfutils is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++. $srcdir/test-subr.sh ++ ++# Just run it, we don't know what the native representation is. ++# But it should at least work and not error out. ++testrun $abs_builddir/funcretval -e $abs_builddir/funcretval_test_struct +-- +2.44.0 + diff --git a/elfutils.spec b/elfutils.spec index ee877fd..b386010 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,13 +1,16 @@ +# Rebuild --with static to enable static subpackages +# This is *not* supported by elfutils maintainers +%bcond_with static + Name: elfutils -Version: 0.190 -%global baserelease 6 +Version: 0.191 +%global baserelease 1 Release: %{baserelease}%{?dist} URL: http://elfutils.org/ %global source_url ftp://sourceware.org/pub/elfutils/%{version}/ License: GPL-3.0-or-later and (GPL-2.0-or-later or LGPL-3.0-or-later) and GFDL-1.3-no-invariants-or-later Source: %{?source_url}%{name}-%{version}.tar.bz2 Source1: elfutils-debuginfod.sysusers -Source2: testcore-noncontig.bz2 Summary: A collection of utilities and DSOs to handle ELF files and DWARF data # Needed for isa specific Provides and Requires. @@ -75,12 +78,6 @@ BuildRequires: gettext-devel # For s390x... FDO package notes are bogus. Patch1: elfutils-0.186-fdo-swap.patch -# PR30975: Fix handling of corefiles with non-contiguous .so segments. -Patch2: elfutils-0.190-fix-core-noncontig.patch -# Remove obscure tests that can fail on i386. -Patch3: elfutils-0.190-remove-ET_REL-unstrip-test.patch -# tests: fix build against gcc-14 (-Werror=calloc-transposed-args) -Patch4: elfutils-0.190-gcc-14.patch %description Elfutils is a collection of utilities, including stack (to show @@ -126,7 +123,6 @@ Recommends: elfutils-debuginfod-client-devel%{depsuffix} = %{version}-%{release} %else Requires: elfutils-debuginfod-client-devel%{depsuffix} = %{version}-%{release} %endif -Obsoletes: elfutils-devel-static < 0.180-5 %description devel The elfutils-devel package contains the libraries to create @@ -134,6 +130,22 @@ applications for handling compiled objects. libdw provides access to the DWARF debugging information. libasm provides a programmable assembler interface. +%if %{with static} +%package devel-static +Summary: Static archives to handle compiled objects +License: GPL-2.0-or-later or LGPL-3.0-or-later +%if 0%{!?_isa:1} +Provides: elfutils-devel-static%{depsuffix} = %{version}-%{release} +%endif +Requires: elfutils-devel%{depsuffix} = %{version}-%{release} +Requires: elfutils-libelf-devel-static%{depsuffix} = %{version}-%{release} +Requires: libzstd-static%{depsuffix} + +%description devel-static +The elfutils-devel-static package contains the static archives +with the code to handle compiled objects. +%endif + %package libelf Summary: Library to read and write ELF files License: GPL-2.0-or-later or LGPL-3.0-or-later @@ -156,7 +168,6 @@ Provides: elfutils-libelf-devel%{depsuffix} = %{version}-%{release} %endif Requires: elfutils-libelf%{depsuffix} = %{version}-%{release} Obsoletes: libelf-devel <= 0.8.2-2 -Obsoletes: elfutils-libelf-devel-static < 0.180-5 %description libelf-devel The elfutils-libelf-devel package contains the libraries to create @@ -164,6 +175,20 @@ applications for handling compiled objects. libelf allows you to access the internals of the ELF object file format, so you can see the different sections of an ELF file. +%if %{with static} +%package libelf-devel-static +Summary: Static archive of libelf +License: GPL-2.0-or-later or LGPL-3.0-or-later +%if 0%{!?_isa:1} +Provides: elfutils-libelf-devel-static%{depsuffix} = %{version}-%{release} +%endif +Requires: elfutils-libelf-devel%{depsuffix} = %{version}-%{release} + +%description libelf-devel-static +The elfutils-libelf-static package contains the static archive +for libelf. +%endif + %if %{provide_yama_scope} %package default-yama-scope Summary: Default yama attach scope sysctl setting @@ -265,8 +290,6 @@ autoreconf -f -v -i # are executable. find . -name \*.sh ! -perm -0100 -print | xargs chmod +x -cp %{SOURCE2} tests - %build # Remove -Wall from default flags. The makefiles enable enough warnings # themselves, and they use -Werror. Appending -Wall defeats the cases where @@ -293,8 +316,10 @@ trap '' EXIT %make_install chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so* +%if %{without static} # We don't want the static libraries rm ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib{elf,dw,asm}.a +%endif %find_lang %{name} @@ -385,6 +410,12 @@ fi %{_libdir}/libdw.so %{_libdir}/pkgconfig/libdw.pc +%if %{with static} +%files devel-static +%{_libdir}/libdw.a +%{_libdir}/libasm.a +%endif + %files -f %{name}.lang libelf %license COPYING-GPLV2 COPYING-LGPLV3 %{_libdir}/libelf-%{version}.so @@ -398,6 +429,11 @@ fi %{_libdir}/pkgconfig/libelf.pc %{_mandir}/man3/elf_*.3* +%if %{with static} +%files libelf-devel-static +%{_libdir}/libelf.a +%endif + %if %{provide_yama_scope} %files default-yama-scope %{_sysctldir}/10-default-yama-scope.conf @@ -451,13 +487,23 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Thu Apr 11 2024 Aaron Merey - 0.191-1 +- Upgrade to upstream elfutils 0.191 +- Drop upstreamed patches + elfutils-0.190-fix-core-noncontig.patch + elfutils-0.190-gcc-14.patch + elfutils-0.190-remove-ET_REL-unstrip-test.patch +- Drop testcore-noncontig.bz2 +- Add elfutils-0.191-profile-empty-urls.patch +- Add elfutils-0.191-riscv-flatten.patch +- Add feature flag for reenabling elfutils-libelf-devel-static and elfutils-devel-static + * Wed Jan 24 2024 Fedora Release Engineering - 0.190-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild * Fri Jan 19 2024 Fedora Release Engineering - 0.190-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - * Tue Nov 28 2023 Aaron Merey - 0.190-4 - Add elfutils-0.190-remove-ET_REL-unstrip-test.patch diff --git a/sources b/sources index 658148d..6091854 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (elfutils-0.190.tar.bz2) = 9c4f5328097e028286c42f29e39dc3d80914b656cdfbbe05b639e91bc787ae8ae64dd4d69a6e317ce30c01648ded10281b86a51e718295f4c589df1225a48102 +SHA512 (elfutils-0.191.tar.bz2) = e22d85f25317a79b36d370347e50284c9120c86f9830f08791b7b6a7b4ad89b9bf4c7c71129133b8d193a0edffb2a2c17987b7e48428b9670aff5ce918777e04 diff --git a/testcore-noncontig.bz2 b/testcore-noncontig.bz2 deleted file mode 100644 index 514ad010e00499b9a75a98800aa20ec61596d491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54684 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 @UKR<^xB}Ly6d%v346q%-3;eP-Bq3uzN zQ`@uZJ1=7?KQEO1YG#g~<<4{SsfF57Ta=9sfu7aEC@EGru6)0YX1=18V16QEt6H-3I-sHN zl=efam{ar?>t~F&;FHQD}Jv>SZvF#;|san&s(~OGgOHk z^#2Zgr|z*>b4KU#mT_^==M$Vb>{=p^ZWlBh(u)H<9eKIAc`ySk zq6zNAS>J<}gFjPOj#Pi;UqaH0Eo)E8O-3KZ(rhvB!F$Pot(XuVW*i)1>wSmixH`Ua zD{Ig(un#vFmF<7EElJLl<_3=~*QsxoQ5skvH}5bzeUnhbM!lwg*9i z+QO!H^a!{aZgmVyRD|5SWQY6kl2u8KFtDmMe0+6Z-CH5D{;MGkgjqA9 z9b$uU^(!Ln-s%1lDFHjx&)`N^C;F;rpUiqz%npHigsZG&9#5rngdR^d#@W7ysM|eq zo9hh|JodWvCSPSyHy{LKWOD{XrKjh;?)~GREn^ZR2L-5ele-cCQf(B)i3Nv_y?~u#cP6dJzYnZoGhsyhDdR`} z9F1kBJBhh{4<55boC{4T48sYJIIeL2?K^+>VBy?T(6ps`!y^aii6{6|*ZI`x zvWya~>J@L`S;c?4U5>MRR@ERKmW9QjFk)or^cQTYFc=CnIEX6({hO`8;l*m9H~t-z z>&CVHlN~n$lnY}*BtRRcX`5X}LYu*6nHJP&<$VrbYeuOuBbRf01js9S z&$gs@vZ!V=8$YWQe=0Oy8vfWgut~{}d>^$0sF&1g@+i(HZ^g_+wSj<~DBgS1i0&p8 zo$f@RHK&KdW!Q+8D_*D7Kg8*MRoj@#43wb=M4fvoL5`pDMQPsB1#1G}&tRYZoHq4m zRxob1an4>}JPURCVM@~8l_#c#dg2oX7`R@@3k5koN)=&O{ zomkagc6*-fY7s7%Hx!)jE?3uZjeptbiWWY4;pp9{3OK&RiPp?0@dy(zFA)N$ihD!$ zK$ciUCX_(4k*dl+jpx>n4*U6qU{-dEcTDAQA~SlR!2qxX_d2U-8H#L3cEtwHed8Ln z{OxdD8#y&?kL8mCaU}&1xf=ki{9)jQ>$c$6I}tsO;hhhHr9GouJRYx3a*0MG5>@ep z5F@LWdhDLsI&;L_4y8Y#^I!dGnfG<8urL;&cO_a$`~KnC2LI74~`X+rp*GC>(MOEv#4?d#o17lIgvZ z?7q8e>-xE)>>4)Wu|K!UGd*yu z|0Axm-Yi0>FR%DZc2Z4+g=iXIHoy{fXUQ)sGFueIV^p=YF`eEM10P$(1>o1${X)7B z7{2d9#GjMjC);s#&~5M|Ilu~GVKi{{W%_=6!l>YCv45w~;(x@weueP;(FDqU^kTka zZd_BazE6mj5279X=aP&Jo;#UnWup*i@QBiVxy$2|AC`g_G(A8lSslyUv&SccF9tGi zb4Peoc3byHI9Ooz(bFGxO`?CL`Ov<}9^z>`fMjNYirHN6B6yq@Sl=yLiG93Z4=wp% zhq;+gjv2oxc1b3p&m-$s3tPZYhx7r1f;@eoEVL{df%f!G(%26=0!~2tdur$JtvWr12?Azb}0SQdKr?@=#5+_H4HoN`>P)~5TG0494r~`=$9Ls zvw>wB-{k(QCioHZ26TAwckUH$uAd0H!aupD(oBRwVPQG?Na(3eg&umdw?{R9I5@lg z;6-zjbzLGKO~rN>z>xjDYJaAsP1sV7@fshd*OcuV#iV2IhCWgDG|})Zfdp}oA}Fs^ z-*xka6f%yR74F5qjatl%20oQkQMb`SNOJO)f!k?9ej7ijf?i)zZn5|da zbCWM~JKrYWpA07s&8kn<^?SMK_iM&SVnm6}gEh@BFB4;RgQc$ z-NC*(IlD7vBAsLhwt4LLIU*1`|MBJ2%k$&e1M=RVPnpBsfTE>$~>OA=6e&I=^Gv5%=##tfE37gr=Dm$^sMa<0kS@Fl{w|GURj%cow=CRwpr=z&bg|{P~xodh7RJjYQV$ z;tPXX-vEo#`tF!6)vcde{<&7C2U~7}thh14yGh}0e1Te=oIsQHg6LBGRju#MZ4H-C zXn#&@L3F-4miQRZ0mH@Xqb}y~n5@78wt!o{}eo%t=Oa{IH&d`yqWG`E+$<-5^ao^m) z{7WFlOg0@Q6iZXYAeDztr4zJ#VPFF^eeO_Cxx2}$Q93*$C?Zl3mti5}Af+gwf^{Jt zA~hIiQDlMYc0h?9yu;j3^LU<1^@<>{X2_Qbk5nbeD#xCFSO3cxl_FY}G0oE?qzY*y zNO0(`R(%I?_!PKEfzsq62!5MLR*ARb;O9F8k(5R)VKg1f=(yrHhW((GsgZ;YmNWL@|SGQ@o2$%}TNAzZpC*l!npp z8_dvT02b{fp_M$DHGr3 zz92>f1lTD1gMBi88u|oycVb5)(?t**pFk;1Pe<2Og98BzDar0PW~U%X*zH6%*3+wv zAQn`}BbrPi+n`zKbzMqk-mPy^%b6uzUiv(`V98@^() zIQ!#V$IfPbXncsY4h2=Zm+!*s%aVG8$)*{m?go*oMqYeM&cWdmn$4po?#+-xaYFel zWf5tN&$$__bhAkkkr?o_RP<5s=q2;sytLD1uCwcCOuKO+yxiCn&pg zH#4|qA4|T5Uo)$M6LVCbk6}2ayld6^k@6MMtRY^U?AI~j!5z1Oz_%e-D(dtEqN`mF zbMO&Yblo<+Ce&R17bd7o_$5sw%II(`#`Q{p^gwEVBKoCw4mW0PkyNI_=PcHmUICDb zLIFONfzC&W-V_iCi&s&F3<5p_nZ|E}o~nd_Eh8*61VW9FieD}DrB()Zid=)BbMRAg zV6>fyP?dO}5{klGe1Pwq4VzDEN(sC2Iw-00PUmGntLWm#5das{BFO!FB3$fiCG={% z^MbvmFPZkQKmqN2;sWJM8{@R}>c%i_Z{s7eQ9`WlKv8&DQ8Cs)1Qw~{x#Z!t-ec*49lZ(|6x$}=| z-Q06KjBmui!zjT$d2sL|oRzj82yf*eZ&fN8NxkD6e1az}a@=+6<1cAkT%Lm2U6LVG zqNwGUq0p<>?nWEla82|;SO|ICVWwhDz>HNe6V`fI-l}j2P%=X|J-@FO0t0Yr=efZZ zJ?`2b?@4>g8`rvntB#fyEdO5`Dre~ast!+q{`?az=ln9*!bpf(1K`4(gwC~^k`861 zBu@Sl+}LtW)5P#);iA9Eku!taHZ)&0j^<9ndnK^Cg<0&CbR9C-%PT87twZOZ0{PWP z&5b7d21k`DZHaOnXMh|gt+A`e8;y;x$D6F-k+pW`nBUt8$fJVQ$5*^n#I=P1D11cB zLPLNo80q}clr>?T9#PkeU@z z0sInjeQj>Kdj#obvElakAA#LiE`rrdD$Z4NfSUnP`vFo|OsmZ*Qy;WDY3sUjcq|^y zF~-i@XHR`NdBYzy4~!qZUWJG=Q5LYuWD^)_KTZ{V6Avc*s`=6v$%|j_{6cR^PHiSc z!~^!wbH4b98-;{XMhPO!&PMhXlZSI?>qeY%d=inOpK&!fdDEX; zWX?Q|DR6)cNrS+&hKwiar$bRbtX|llR(GeoUiNO?KupjC`J2OSzS0UTtjpVtY{Lbcpbyj{Y?`0c0cTlCyD%@ zKqw0*F8iZ`3m@^@xZ$6MnY!bK#EK0E9wJn@U_O!MWZAV|_Ye{^cwpa&3l9O2ef$+C z`k@3GL@0^uKY^&$N-@K~F^&)1sY8ze6E=M4AbN7QKFcF-^vS?DV6-knwsc|s+>Hk} zfq?7Az#}FB>-N8QLvFx9kpyo0-{<1O$5vq+CY0HfPDayo;351^rwnll0O5bL`3$aP zWi-mCTEchZ!AFP`EnJ{6i?9Bdr4^edZQAsPAw;8AjRq}x%!ny(MyR1`_GeqHc+rAY ziw->^5+hQEIqpHZUjfsx5L-J?fI9?IO*l&;=L!DRUKL=g!qbIc=BVd^l~!i3xBsp z8AjI4@Vcxn`LTP8wN&HxBi&ivmz`DV4uL|QHF1>_*~-XC+(K7^fQ7(QcT# z)dbLqTvK-6W=&Rul}0v^Y}aj0@#!>yhR11Hq7Gi_Z>`Zk;k*Ou{3QMvY&ey2LAhyJ zAYA8}E|5gEHr7`m^dhlxKGjY3*PRTKW`0TwAJ(Z=TEBs!7Js5<^<@{=J6|UgE-loX z533lE-E^$7-U+~@+teK zYR+u3BrH$Ao186)9A%0}Di&*t)C!_PWUcG4;||VPc44<{)mJd=dg=CtK5=}eNJ0n` z;-01H(8H3FY9hM$yE%}Cb{=yBmM1wgPD%y7qIGSVqhK}GG?~cvDIxpy7Aknqtf!H6 z{hvK!*aZz0`I7ToQoaS1v$Q-Fy`B=TaxX~tyB>kOl_$vwj{0Yv0Rw^R!KnjD4gTb` z-(TOd*>ehrpudyz{28?g?PK^7Us#s*r)nRB{;hopQ#o~v zU{Q0TQw*0Wqd5w+2R;QdAYp8**|T9uXC9b(rr@xZz?q@uhQ;5X15O_UkSyY#6xweW z>=W=5DB`pDw>pEBCYRiOg8$HY)7;SCYup6_qzoiYD1Df5`bIoXyY;ROnq~B4E;S3J z%??!%;5j3l1bgZ%#Grz);yGu7AmQ$C%DhCeO1-o(++J#X*Poxrxs}u_4qg0%q_R zIsUYQ!Q+LoE5-=Z!yS^olNyx#@hd$xafwghJ=;5)aASb9E(}vpM(Ar+eIBjIX-p&#$yIo$ZPb z?DJsBk_oSw75r%^r8C7Ixb6H)(t#<-*=>K-oK>L}aULX$Wzm-Gxa*CwxxDSUgu6|% z?#jpyu(!OCoPU{z#Lh!(j-$YywH6NG)WNJbnK1H)Xk%1Z(b>JyWNLZ6@3)E7-GDG) zlxbeOspfJuGs?nh4kc{PNgV#{f<+dRE(jVjWez5>zXyRlEz2|OJY(thwqC85*rSCB zv>VHPLD}v)Ua&nfwa}5`q}PA-RK9c~CJ!KaAVq^iwnb>g4H`va39hbtuzsPtaK4VB1`4wv5gWRl^eo7VAO;N;C zokqJ|R>}SO*RrcK@bC|xXAOO|Jfqj(vT)LJuI&6NmP=rst7oT&6WTI%VXUQl3(3fS z3|Tb0OwkIGkdyyO%V?Oh!1YIND*FZ18u| zfpI7I&z3ES5u}Xn@}cXRhVzhO7KQUS3x)&pKy*qVqhQKQc3?Q+c)3j}b}@s3PD<%KL+UCwKN$+u|SeYyCGQ4;o~nQl;tZH_kLZ#-a_^;wuhj41Je)lq)jjHrhh+~@cf|II=+i(_4qR<^Xljx(Hs z6x@n1dc5+zklUrCv^BsOjokrci@}3)C(v?|=2iz&hCpAxclP3_*4VRH&H2LJ*LF-! z%x$`x?Od=D=s`*4=eoy>p60zfWPl8w-Q0UfCm1>0+pxhQ1xbt`BpcN(fp9@EipV;v z!WZF9vAU4yo>g^8HCK65Uj}!A;IzVnLQy8*!&3X-y%RWZ!(@HL98Gm7X?;9)B7 z5TgD}t%MumoHIWw;#B%5ME2@G;3nF(dlL7?4Cx0BhJi33ui-oa2ZM!q$KI#G?CpJPwG|Y=J=HC!m58^spZJE6ikzm%q@qa zXm4Aga#m|18&OCI+rUcIHdK~2y2N`Q5>REp)(!pXyH|$Hw5y*&43HO2hGHe6mUOGR zWAOK?vQ#hCRB!TgHp>e&&E#m-fi5bQYKUIQW=|w*iwT{{cRN*}h#me?{%pkw(*!}o zB9kfzLcjQ~mh8V@X>?!&wVZg~<^OT-@DG->Kkr#AfHHz00_kfnc;IXw*nYUWU}${& zPQ3ixmzKxJc|%R8ZWCwOm3-T*)s^vC9dlOFZJmEOFN%pgpLyU^r{e99(T7jDc^>0tclcQ?^e!GKx3 zRaS{u=&B^C)(psJqXhFWU?-(QzP>Ejb*&NKe@3(eWkw2+8?g3snr2D9Ok}XQ4 zJFV|nI76@FX{(N#IWFZ0HkmLsO!s`6)mzYrhzt|osv9MOBT}!_CDsxc<#J(K4m|4I zBAk0@wxow}TkZ!T!D7{SW55I!@5_lku9S5B{uF$!zKyLQ#Ra$fTX$KgUkv$>{>T@^Ajc*On`JhkOBrjV)UXK3J)#*{d zU{}o0ey*TNu7C9qzbfv8cqHa-o?R~fZA@`Y%d0;}s}shq{8>y`UI>e2Aqs_$MX$H6 z>RpeQQE)QWuCL`PTH%Fzf;kF_G7RffiE?0m$}}dPe)BVb^_vT38K*a5AWl@|6eY&e zBjYH{IM|Ck|0Zr=SzB3>tkJ+}#*JZ+Z;4Af zrRJd6lzh=dTjR%SG0lLmaxnXD=LlXc3_h^M4F?66#1cp9CsHV-YO-6kS@p*|@@~{! zXCDr#g|Kl{GF)@(ZQ1erTv^ExG08hsBV4^dreDzeWWHcCL?soDbmJSpKz!nrvmv|xS6cA|pbx*J)L(+k~ zV4kq$D`Yv(g)&qdcOKFe+=u`!*|#9_ApAg21aM}0Dsg34bm(>NwJyct62g$q`Q3e8 zB8vtWgOCCzOE8K_q{Deq7%xS59J+&128>qbyxBLJWU~9pB_kLv`|m{LU>?srpv$Z) zw8H`p__twF4=H?@GQ7m%@n2Yh6Mpj6KJw~w>~o`O&m@4$j9$E~SKF2w^1heOLyJL4 z(U?L?36q>Xz)=m)ry@Ib`*ZtU8!f5e%DVO^Z2S*jP5HX+5g_pOEG$;h539p<(D>T1dqr1%_nS>+po>~|mR zox?}e)S%=zGnXjsBP)so)PS+UxLQyJIffA}sk?ToxyFyL6(TQUnF#SB%WTn!Y0b7) zG)7XczQ3Ze`^Oh2{wzfRlbaIgLVzp}`tDTVq!zVTcxgz+?kv&DlW@D6_R z9tjt7$`K`F$X|}O;SX-YnR}PcA5+O8nJ(patO2e=EZx58XsaToFnS4Zfx$)T&rc2< zN6-Wp@t(GZlfup9w{bEOg8D!N;)4e%f9T%LJj}8Bg;pFig&pTY3sn%LA()#yr~6j-T27T_#hf%c%Stv9#OIpLNzoB|_|erDjY8Xmr_$(GVZ3cgo}(*vpzzL3yJ zmT4@l`-^K>Hj8>R4#hf(oYu8P-cb)N>}49Va?_!?H`VxolMnMt5P+@wB3$`U`LZSJ zHo?WRPv2d}!M&VvMX!a;AHj(qUl^A3B2IhrG3VmrcgK~zf4gh5!a5#hehZ3H2@Xga z9*0J3J;h<=it9@3H-o5&x}_D1TcvKlG2A{CFo8DM%{}#n*^v4_U5vaSXT8D4Tr6b` z@y?K2>H#u35Cc%(KD z9r%LFoyDg$6ty_ebG@hW>$wZf2NR05ML?i`1i}qJ%f~o3wM9iA3Drn3ZPmGAkU=Uj zL<1*a=GRCE6`1xG&{OZUyFZ-#!I zr{^_&&q0$p(rL>Pxxmj#aDWosX@k0a8S$K_tm>2#=CeW`%ER=UP@_n`GU-@U;YkHZ z-|DIBT%Aw(@AT2S=_0GB{}5sEPtdP!K%ANOuaPGAomKqd3IIRqD7QC{cHtF%3QnVy zY|QDGAO7i|z9G^L5O#NwDx}+A36EM8D-<;ipyw z9uX|vQL$#O{}iAd#WR@FcYZRlVQQ-@&u(DuqCyk4iGXs~1smC1^LYq|-X!k3A+63CJ1kC}=ZgA98#cuYIx zM5-em+Ov%xgDSUo8Wp#+b(MIb$QDKf<1B>V}K-t8E zushcZfImEEKihsIMx|5@P)Bg}7tAT6T7YN4U))kl7X-#}-Gr%fF0MtC8(OYJbIX$o z**x6Qe}pGqHC0YUPvf31JeAQCC(yIHKh{;!ILQuK$wRP#1*Oqy|107Kv^(!QRdV+B!aM8={oheh~)1(8)Z-O z^N_Q-by<>tf&jZsY_c+iLedtBXRc;sxpihlHMYl;S$3 ztt7s@@_mcs7@awsSPwYMqOe%ICsNOR{XeqaF-WtZ*%ofwwx(^{oc7b6w#{kVwr$(C zZQHhuZ_Ygz@4a8dipq@Km6?10*%4KhwUQ5~IfdhZ{v41>YRkaDtAN^;@E|{{tt*U>788WTU^`DmIK?)mYao|io=Bk-#1;J8 zODB1fc#AUaYi_7!`oKwe3X5=+YuM*E!1Y;DBN&X>cIKt^yHfRsxTY>hoCy^7$J-7U z_ohEXMbb2%jDA{?k46Pkm&)W=3W^Yy))g@rgiNJtTmZgga zJiHsvziSY!dd9KK@r1|;bcp}lEPj%K;k=AY#MEY%j)ukqC6WRggZD^Q zfH5YWRCY?*Y(e4adXkDZu(ccpDHDYN+hRjtgzxU)uUc} z+z{N`BW!O&C2t*IY2O5e75G&h1~Hsmxk3$+h2LQ|-hFTLntlc?ScQp^+UBI=B~aZL zf$`{s)sYcrDii5Tj$zx690{hJ#yRup<0F6}=t1Br80ohPD|K=Hvt?NkIacNVU0;`2YC6t%KDg8`bDb!8ZJ<)QY+7B!N&|;wzR{GmVp-pY_|H9WR@E z0l{*oG-AzYDo#ht3GCo4uND*XrR3H)Mu*+P3w|G#p}{cD&RT7)LzKO=dq&J~^p-w7 z&p;feoNOs5OIitJ)r1 z^-}^ujCH_Dh7ivA{kmI3iq5@-sLrPE71qcpMjr$V z33HBoy3`8G~8r_SzEP z9aJPLz_4*ryoLFwR|~#Ha0N6&XjyDDOvA)>g+sl8#MRY36x2Y(<5NpFz;yP9`YBwS zyo~OF`iRM_z)+GBByJ^8dM^o>IvqIZHNY**5{&ArNaboiizwkY8b>>OZO&?LQudf)2@ zegu)FQRZS5G&Mh4J?D5b-aNNBc~N{&p8w=&Fz;(^adF*Hz8$nRA+^Y-dw^ z=;*eW6I!y|Yxj(De(Vx=0&`|}*AZRohwvr*ada#e66HQv^;@5kZ_>8qXd44J4UWrA zkE>$1rn|Zgoi&f{Ze$0;AZ7M=4mevQBq8baKxKzq|Gvf1$uVk_HpC3ywF9s3I+TH= z`~fY(y?vk7-)peEnVpq|m4kz*dB{G+WRuzY3}~D@&}vH$5L3R&^eRiv7i&brM1Epx zle@b%Ph0W@9b#5fKkUiv;lmTHt0Xu_=aW_p>NpCjxn*VULXjAZSiAi)`4l1`iV+@4 z*01kCZ(fD0_pJ^mevkXDW`pInKN5#L}NJxgU0)IEHKf?b!iT z*(?bX0>KXTpHTBu$pGXS5tl9*8imr)fpdcF(5Rwtuzqm}c?!gi9r!59oQ=@)tfC@s zieH#D1ZF6thA339xS(2j=h|sGpkgs22iWNEbT!+}fB1)bp?u-QZu17%h|oj0%QRH> zS-ap;hvpC^16T&luGL(@RT)hqrf;rFxe6nihc#C&NwCHf3XHkkP90U&l&L6Rlwk#; zgMzAP`yj6eVQ}L}pkQ*v!44P?zOx^PT{2&o0x3L)Z!EGr2+fj()(OWQET;+-#3n$s z7nDK3BNb6e{3dEhMRl3Oe%n^>?xJG^*Q<*R!0PQl0lT2}f76QZDl}kmQBWezw--b5 zDPNNw(TzA_Hm!#iw{ui69Jgv-V58l|+K?a#C0mN_gHMe|J;LT!CQ@N!aDMbh_PAY( zpbXr8XU^7Rk$hw!L=sEvyKKE$xT~Z3(DL_K16?RhtM_g#q1RGYB^fxl{VHoPmWwWG z{)VNU5P+p9U$VHXyQ)8CFL~%7`2@WjdLybCN2a0;5=RPND_eYkN^PzE4*Q!3_$P9 zA^Ze1%K%uxHrXtck^3w+xsjS*o>rcmaG>i+0576f2<(g8!GMxd zK*z-g`HSG_rfvFV{PEbG8Q!fcceOS*nO?{Z?CuOjVfPE7y!Z^=v9zRJTXOk5GTQ6X;nl+c#DDE{0YPyi7? zV73qcM634=1=gh@4=@QmKnYV}HzXlm5Rsi!1U**B?j^o)*>qvW#jLyfpi!msw-Rn% zIV~fI5h*%G9P#KbQ%{Us$@&nc1MQ94&H;prnd5xfm8thE3|u%cfK3 z7K<2~*Q1}fa?Du{uc`OYgut|_uj=Mjs%0mtihV;(rq} zBkBzzHQZf{2+So_Pa-i)Z2{LhM9~)Esk^u_=?#lo78m??o2pijvAxtnOShQ_PP?%Icz)uMLGEz>N z(f|ZnzQqZV!zAds{i9^+(vEPFrC&AuhDiiBDHG9pkdrY}a8zI5wV#^VL?uV<*#v{A zIH-F@D~iDA82wpevLp$dN~%4Zo8fCi_#RE307=a$gGDK!8R#B}8~(+M{T9(duoHS2 zH?bU@c(OXt(fPLGC{%k~XjW*qcTK2sG7)h&^enYwOQDfFtcjo-SlxgIM|Ol$k&aFiabin} z$=)Bj0v;S<=)hpoSwX$Q)uv4lp|teG=MLU!`V>S#Gm7Wqb(ut7mP&QevElcQXzsXzyRI*eht{3&m| zBJReTS1}rGPTfRx0hvYkWg16f8kI`+IsXW}eP@QV#t4!MF5m!Gzwps3P${7etx=rT zEsnJ2SVIR7%Zwt%3$d{DiVe0ex<=uS`R_A@AcdyNq3r_>)ec)1<(!$x9t4H-ttTy_ zw$jd2vS*u0#M5$3UwvIZu6TvfJ2A)26M z85kp9cDMQD@V-GY8R4DW?DsL<09RnyXnD`zK8=V2@`zDVzxFT}<9B7M(RGymE}fzJ zBgk^5Fi0*CpI_UP30rSm7u;6QI9CRC{A4`BFYNdwC=%SvZ=-=K?{*nSw$|eTm`L&Q z{t*MbND0Kp0DCpFmJA=7!xn8sEME!pJF6qe*A|HQy4(Hl$Q$Lt1ocTW+f2)K=3zzwn@xfz|qeB!0F-UloOSLw;f*1GT z!h((}@e~!1f+)b3%&s|xgLsGFGcf8m_p-+xoN_{Mu+lFg=e-U^Lvz)uk8k zGS&aH)Wh3x)|leWe`kM+AkQ4K>eLLa5x6dTAkj2sJZ8xkR>qdE|B}nW#y4G|wvaw# zf73Si=DuMf>4tNagKILh(UG`IUmstJYtd=0pkrAIjt_4L9=5qq;5Tk3Qzeh;Z^=b? znX>jKIv3PzF)>EB|D|F$j5Lat|NVlgIy-cEcyUEE0f9mL79qI-g>A{t3c^C{$yCnd z$--RZ)9&q*`mtqtmY(P!E^8^!)n_~UNkqOO3tfxq-Rzf&t0b6Y3<2eQ?ZdlOa;QXF zrYOO%QE^JytYs^q+7@Xg%os_Be=C;#uZ6?xUeHHx_gORp$fw+shia+=In`+1jdXh`sD!9o&zo%xM@Ll{U16{)-bA3shSs z8mE=47%hsm4hW?)KYZ^pPMqNEq6YNxtzV|_DQhjnyL>`nJ{K`V88)=@06;Vc%N*t7FyFeYgSH^Zt zT*rmh(Uu(N%8oWSp1u)uz>~IGjVLtL4b&L4K}H_eHESbUvUHN(&a??n_toxQJQMBg zWScghL5~~2HB5d=ntnQno>36{_tFVM74;g?q!g33kv0dpfdUN|v~S!v@#l5#6AvKz z8qJT}OC;!l+8>GIti_r(dXwY~X+I2s8>h?2W+ZkZYX{h1b1P<+_`?PnUF=lRR%#5A zvc8$54CNxD!9g6c zpp>(GX(__MS1~J1!0hqez%I1$r3GPIrVanlIQFFNJ?})WfYzX8g+pJndZ@{+Q}KnR zp+vuAto123qv~l5P6g$Lz`x%QqIKIA+=OoQJ04{MCBBJ5gk<#+z@yP0-o~oQiC9;Ds;> zg`)q66wENv(eg;BU_^7NM9syMG;n}$G++Q><{-ovNx5KSm_%k&Qb>iMFLP3RbU=!; ziO3)TGN3_UK)wuG5n5yUEC2`q4}(UGF6tWu6NW6Qga!agphg4aiYh4wA%jyFAi;zF z1``YuW+DMlCYJp!BAN#zvXX#3g!vYAi>N>DV7OVNWGz?!2k=R z6~Uk-LZN{u0+`Uk8^c+l&|qbWKmcfpP-xVR(87(>iNwF_pc0{_V8uv~q4H#5$iV5~ zq3A?mW&?!8$VmQGS(>NuhN*7Wb3m^zZsH17+*o#Pr#qX zv>hky6PQJZ&xu$$abXtW-!iUVJg5l@Shzv`Nz#FYoVS(eOv}%CMf40$(%>p>x#aJa z12!)tbbApuOAY2lmW=huDd5&A&PuX^`xm1=FU{GA6@45lB~u#*6ubI%=l(y%A6=V! zMpY(M1N`#xj+~RMA32ndDKooSyrwL@XMbhFw@MW<7(LypN)&kISF3XxX1vlI@w%TX z%NL;%Jo5|jY02cQn3a(bf5v7+kUh#^Ei4v-oSbo^$~g!&+oW8XZqtWR%hqUm5ca_Y^OK`-sJz|8{@h-mE@|eFP)_pJ}4GK z9Sgb(H3x)mLIDZV196^L#&6pPy4xnzlcEq`N@ECUY5t1K;h=};M^UsIk(N)23i zECYC{%R7k)3{4EMUNA*Lz{n!4W~`E_8nQmLo>O}sBIA5Lg=p_z<^aB^!>3Ng3#CDG zJ&Ky=U2MD;l}}~%-y7@hs;MfzUC+p#9F!mZj!{h%y{CogEc*j~ca zUy=(Q;J#$YJ(9I71kkYl)eJ{*Sl<#cZlexu3=gP%qey)6sxqXfe`lWtoI=?pNlSdU z>%i~!5&c38zc5-JQ$vyn#WQb?^)i)fomBi+3J`f86eZRp_|TURk0Yw*4#(k{QD5i=mDc!alv^BU%_fZ*e< zzemS}AKn~*)D1*z9qY8uuP-4W*WiY#64hqu7BX`YV$7f<6(b(OeaF3Uer^2p6Sp^4yw$`!h_2Fcb|g-pqn);L(PcX*ylkE2 zq*gcMV{APIJhEUu2hctJdxQn%q?v_Rl+sJCk0rq<{P!&gw5XbV^Eql(e1~p=$T%^H zsAF97XGtusow2d=>S)>U6unJvb8OF=?IySZVR#9cCXO(?%@GYIE4BsojDm{vHcK_R z$M^|gSxCAHEORkABfGZ!M?dr8jr_;6^v63K? zGPKT352WBU=gL_CB$0+D?ZWDpvQGq=#m!p7-XE~|q`GYEsi`jW*@m$H{j`OE?)_ER zTzG)@M7+`7xW!5cvDYK{n}BAyT>dCYdyK~t%zWn7At^WHV0P``kA7Od9b>5 zcyC@Hc!Mg{<4F8-5DxK#i4fTROH^LM#ZKjH5$hP4zgRj(V5q-RXC#G*)j^WAjO)L$ zh0mSnZl0{FFk|-Yxqk6myAL)!NuRxVf4wr0e?YwwX_RF+L@sU8RZV`D$^E*bGM`Djiq?1_f_)4OqhLUz;Xh{1R+5?Scyh0|%c<~Pp$vX(e6Qaeu+E^i9`t5w~>K zy)OMC!H~7-)fGdReW3C%Wo7?UJ)LnsU|+9m198(_uzGk|ryJdp@T2C+wdOU=P{!r) zJ>*c6?w6_CECv1`6kM?(OXTAXR?aHTidUVfA(iMuNo0twQ2H{>kpiDL z{Ir7L(b!H;k?c_`XU2p|M8GCokIq!Cf^d6lv+ng5uG`rR@1c)>U+K+DrYZhrSD-q@ z6A5_Nm|S%&{nSWO%s*hDZkleWcJk&t9GOP$5ZN;(YNAF(#NQpy0D*C&EZ&h2Sf5fI&DBy6jRsdK}6igTwH8{@9`VRrN6n-0&m9oi}vnkd@EQhfv9Cj{e1Q0(t&>0kx zC5YWx(I2#ja7Lxybu0sdHlz`g7)oM1LIXHSm1Wmsqi)tZSUxAR(7|(^Lh7OW>v=Dx zyV6K1v5$2Mg3xwjieM!EIzj=4pRHn2h$lsyPsCHOgh_rV#&%v)VJO%^&G7;oPr@}q zv$8`HFlA~nAxW88Q*OIu9L5%?D>AsNp*lf+eIh`_P)LII{8VGB`EyFFW3p)>^hdWU zoeJn}!_UVgpE_4EhQ~MN+`UDE4#7uquN=NM$1=5H_Cz9}BbaS81*+=mq2w)phO_Hh zHvv2hntioxdz^cm7QkC!ps`!_bIKO$#y22^w7YCQ*L|&oqUw z{urq?cYSqBQ~K57;=*mPIo{n(X~Oeo#gKRC8YiVKH~9Bf%mZuto=M!Ae%GSB?_(vp zTR!&Jjbu*5F-K{i=>Z zuKl=~L&K^H)MI;8Fo~GLn`rb&Y(t_db2i1A3v63-%dGz*aF4#y?p%3!c983Hk6~B8 zCWSPYc|_V$@yKj;`>7~;cksQc>5rEeNu;aVYwH?^wEfANBzKw;;wT54*$9}3kk;`hmG!^!^nW-x>{C=lgkytbthrisJLqy@!51ZF{){#4-cqeGdt zqQ_y;yoqtkVW;?CvX89n0nFs6)Cv4KXst2@LiRaGi_~x{&}a z>RbJ1FoL!)xI!?nBcu!GiR7$?l9$LjEfPcQ_7+4q4sY(6@vSfbeFNja20x)vp}>~~ ziE^D|o1xiAFrNmL|4uk=I-s_}SMXq7EnHewW%O<{9b~czwe5H97~HOPRF~X`9-Z8? zRBN_3TnxB={rVn;7T9$bo!#5r(}RUE0t!xXO;l8xP9XIH@;5=Pyxu2X72Sl8iujTE zOc~w#-B&?;!SqJv#5up2o#u3I=z3tD_qbj(5a78KyE@5t?v*BOx|Vh(e%WKWI{Ski zqf8jhQS~+6bI8r4%_F0G_x*937QH-@B*OCI{7!hag38v^vC$o$__*|?yrPNclEUST zd)r}LBxtT8715>2QJSYO(-;i-eBidj(o+d+6zOGxmyz4t>Zq9QY7q;OdDC#qb`J9K z$(LAekq6rBfDISxZO z+gv!c{1&Nu^!O>;bST-z$k3}Q<(z(Z6oEvq8nY_xtY4Gl4c`MGF$Wgj!La0BjkSCN_2m7mW z%0uayeiD$)s+e+VoQz{*vA~l~=p~~Vw~(oPkrQ>qU%Pv?c)Jv`b?39w<1-6L>LU89G<@Fx43lx_mqV<=^vcfGJt(!etwRfbO?Oq_{fAI$Su%v&H1;Q80@&Jyw>(<#lu}7 zoysOJK*;+?1v+syF1rGc7a^0_kdbFIuqAd%>L>RT&N)dPhXKgot-VJcepAJPn(t*SFxcOc0A!%SdfjLYl{233&Iad zI7jPM_d{0`gYS1|`C?)QhUav~Qb>|uah+m*$0NRYuK%sXvR#z236)59(W`?f>4N}d zN+d%Ri*&E|^I2+Di1SfivI-t6LWJvHbVof1_ zTl?c{N+Gbmmd_mKR5Nv1rJmrw1bcNoI?SOuNeb#2vzFsuXq#PnJb88MJs;)}+o1RF zI-*E`e_SM^dPM{x$F|0KaI-x*`v6OFV1fJ=QXn9A7Kg8Z>ZgQ^P)E^i#BkrvdudIWlgEBSpJ;n4xKp8AS@R?kU$b8U|T;BeH;e zc4Mzf+QV?%bBjn*bXMg{@r!(NnF!O{XH+ojSozR?!N=mNtg~+ighp67! zTIk;imU6CEG+|6CqR_Zz4~<*Xb&svL?_cKjO$HqBz8~129b40FO^aswyhD))-*}8W zZbFgR^O6U9wSET1YI5U9XR+Nekzc}4zWX_ZPDm%R5k2iuq`}i2y$hhh5buQa{=Wqy z2E485KHA=0c)j4M&wRQW=FdeT%-4N+yE@kL)Xrir2Y!tG-=UuI7-sxNzMJh=Acr)C z>K7%Yi~6~q9C_d(X&=7^%!c_=5~!}dG36i@3}?$Ute4&u_K9W_(`*=Oc(^B659j>Z zZEx+Q_(}M=ryz@W4pg-kr!^3DY8)JQ(omP<%sSIy|HecM!{NrS{O$ARrG9**3mJUX zA@`}W_?i)I`sKFm?c(;{1ltPZd%7c7t<5bz66v7Q2U(@86KFg-i?5EEvZ0#BVI*jD zC;yBb*}dRv+kM*U9(x_{=_v?<#3->sN;K^IV)BEwWQfp`Q{_DPmg)1Cb(MccBT3r5 z_Sww2I&~%t1PNcS&!LjAw~5I+k` z)SWw$yUvF7`ZxdRrrW2sopk^PP~-=8X8AIdC;GeH50CqGr?8@i(?h7~K6B0&Zdp{* zR$5k?GhL`slZ9?cOgJ#wMzeZ!dk2UO-|Dgm{*3N7U-K#l{WT;l&tfq#4qcj)y zF~aF3ekCi*c8m;F4K878ts7KAlt)4DMp*3Gy4_4E=Ba)3c^b}I1VOxpGf$^mXt2RT z1=p`jUplu(S$`W6YTQ$D88+GX-VwjxlVgyoAI|Jne8A@(lZ;D<0hQFua51oD&#$~C z7L)p&X>rAIC5g!v2pUXZR_n)V`oVYig&S1^HRJYZYhG6ivr~OitoB~IMFV`vMQZwP zXuSg>I7GRE0E=G6T!?%>QLsR8!J&i9+G3M+$oQOAkpqlOH9p;v*$>r5vGvQAO)J8# z=(fk;sIh$<9Cwf(#uvvNPrbf*xkEIwrfbIS-UW|MzE!eI5{p^SK27Ch-0W}omA!^J{@*3O{6@YX<}X^y=!r2^aaQb%$GRRa5ckpcB%zR~6= z7aBM(>d~wi6n9}H=mIx1_A9xE4I*iT;-XZQDVMtTl?xCse5r5yq22^xDkkj3G6zWDnek`pG*dJ zyIvOsX+Y({Kv*N>j_%&ihVn+Yy-&0}0{m4}eJ} z77|F7lP-Sv>w40xzKbiLZ`6}_J`pUO`XDD5%&v*is~pRWpNFk~0U&L65)9g(utdfG zY(EX2&Z!E>#=!(~18RKlEk*klEJa>4ij1^*Un(E{Ysoap98pDe@kasHP|T~Jz~W|m zVBq@nN;6sD**I06Ez&`25y!jV=KiOlKwiSPXWw=W<;KL5^Lt>@(7?KrnV-Q8fpb5- z+^6sEGkwUNEQ_gU7Zy@Zl{YJA1v+es$pREa7pl$hWK(zPpj=QANPw1ikr-eh=?owj z)gwXz<41y$umJDX(qU$&j_@MKvkH~{1v_lM!wXS5LOEzLA3zUEU$p{v9+b=qX8fT# z$>yAGCn}3g;t*3haKh;PDV8mSW;MhiVJ%#2l6V6QG@l44^rhuEKyUD?=+w?Z$^CJz z3{+|!KFEv}p5)}fb@7QWPY+$zO#|L$eh?>DrUa!;1$}D*oOS&fGyZ191p+0^-$rYG zP;1nIKCAAh3Znc+ScD5CPuoDCdbz9>(%q{oV+pj$kK4*$VxytU6rtHvo>lN-T%3Qu z_WS57n$)VoTwhz0eR$4t0%3NJF|a} zp52ce*(YAJOFvuPV65-zTpeepN!G0haqI)hISXjN7K{}&I`X%EuY{L%{xSbVW!gFM z^GR=IG+aloZi!P!(Vq9Yu;<=yMd^(a00xLAq`9jO z{m-Om%6W`yIhDkSk3_M{Do#aInnrY!2LIfy_*Q*-eeT`n&mMZ!ih{QeZA^ZZg3DPf zT>$F0>VBbsuSK}huZ4Vyu-S}4G?T{Ztz+Ev!zRDgQ6}#ZH++gu%SfiDAS}O6*j_!%DA%Ribe6?RtRXP6U+n}#gJN|$_-YekECvEEk!%+A z+rKc0Jb5&DMRFJ7aU1M#BvP?PP9Xell!qn}p)gF!#6`6oUG#EwH?4aUJ>HRVg+ykq zuAP5)4PhZO4hI%a36On+1>FPz{hl(`Sz|xI(;O@xDMs7+JeD4}+>#C)hyn*pmA~@2 z;o5%&F=n@D5qCp9mSnwL)c#gpOGy&9D3if7cLQTzJyo1PU^rKtqYD(Fp3q!+gpN7R{1A z?hfab-hI|ITA5i3RbxJ>!h=TI&eM&c9uk6H77sTcvYr))ff}I}B=r^#Hnd9ZoA+S1 z8oeL&$-i06_BRCV^E6z|EPg_?4FN$Z0nzHg zFU^-h{hmlYK4Eb6SQ=sPSllt~0-Qu|e$cpb2_+(m`hq^jwQUAmGp1yvsOa}Se7SHu zz+bs6s}YdP5S91eE(-H^zhLT24et5IH#nw1$3?@AJ#JquF9Lnk+-^btwJ?Ut%Z5eH zH4dwg9&zAyAiq4Ok%e~S9e*keP&F356z>cZkiMYmCR&3L&h3>?d+u}^=0Rv*Da9Z> z7Po8L@A7=Io0EvJEzu|d{nA20UD2Qat(FoquWyS@rl-y#*D>crI#glzd{^+A87ReSm;W}?wopZG{AtG*eXfz+H7^qi zd#H>oTb zR=9P~$QlYa%|=bs@#Xt^5YEkEND=?!h&73eHfJ`!&kC%E^PlX2rw|o>LOTmWqZc@D zC{pu51A=hvKzfyCm-`SR|f8Rz};(^q?T&`x|-UXU);yrprF~|(yrwU%DU*)w?Oi<;U zi+D@AbP0QlntJGe-fZL{te2Lb77S9E}~Ob;b|5cG{xe5XHzOh=~eI+d6$lR zI!~;FjcmKm4fT2Ypu|>?UyL`?%LgZ5*>iYNc|hIR(-oAx4=c;?v1WjxAAz)i-D{($ zgIMYBampMl1o@CV1XR!;0I?^?WGHc@Z=6Eb=gL|R{^ zfGmA%M2guZ+D=BYRlr!%KVn%cd3WbX)jPG#8^24LCH}nLCybRZ32czGs)lC^JK~#g zqWYD|ldyu=!qYd3CGS@5Y2RBj>2F>D-Hr+LAoh&b_G~w2MYj>C*q^^8e>elzeV*O| zie7bZFDC}4iU0K-*Qp9)wlk9%nPJ(twy8u%$mo){aHySyU<8i*rB|J85JkizG>18O zJdvT-?V>4S_!pkf6>6^ppcUh7Xe;5YofAUx2fyp6W+cNqS@(`8?!~aw?j^{?lKjoaUfFDPbUtvetEr(SRM6|IGuIiaG|316iB04T{ow}y7twBg3qR#o{@$C#A>hz8p}#^2un;Mi(*^EMRHL=X6q z;_%OIIziZDgU4efk2;ko5gNG=GEOMgj2q0LOy^O+lW{g_>fbQGK*pA zQ9lXT5R@fFbV8i3JegAma$;xGXf3v|M`3ScSJla}p%{X8`S)e9Tn!w4+;jEFI+B*E z%1Po5n!&Oby*@V^M=d!NtXfTBVD&8-f6GEl7?e=VA0|0*R{JwLMqe;Is{x zVYY)`m_Ed%ntAQ3;qU3GO-Y}S1Lc_Hm>Jal8T;l znjZ-S_kCj>&ieEU+>v^UF`&8Ri_ezv!6>k7n}CSGIzmNOm2fS_g=@x-Uh~|)YPz)_ z3sHAh`>8g`f&(#90#iO`iSOGCKV&B33x!UP zmO^lcsa<8%M z6Z;lSge5*2eWdv#fZBEJI+|UVbE_7>in2{^Mh@Tf#^+<}Y3{5i6z`SK>^6xU{wnJB zAOPn&ziXFjyioignk=AGIh!AwVNASIhgU;F^Zn>s0}?sO5wN*au|v)w%w#K~Jlgz+ z3;9M;wS56-e}fnuO=S4DFPolRJ`TrcEKBWRygptB4fw7rE~e%-yC<{^hpLu;tOXnR z7$_S^&sJobua`qoDhVuhuuUE2-^%NhS-8(>3$j!hTC8$h*A#mXpE4%={bh%$8W4j| zhZqKDHRa|0MhEgI&~_IDUFd%pvc=soBj3Z9L~CKg2^fe@u0MQ-S$QIAzsGY_whvr*L}UFHurBfv$Z3G z;1>>c%_o(2_DK(aZ4N5*V{;QS_R$)FwKBad<$raBtbS-#f15e8;Uw!1)n+H2SD-#? z7}+UJAOpXrv3LpUiy$TGdYA<4rQYcQ*rsuZQ2;sTH#={6p*nOYd>J44l2OoGkDn?+ z0UvEeKU~Y&`@6YhxpvMJ-8BvHEPJQM9xT~t?lHX$ z`=WpLu9`xW;W5b!;=u;N6&7{Xz0QE&gp%cqkML-5{&fJcsmwij>8Li*U0>v*<~7{D z)ifkF-yEPrZ$FXx%4#n-Xq{uQC`Y%bFBimefFHp8CJYAdnwp1oT`S?q!#qCdaKd+w z+8!A4q(@=129>cHKNDc)**6x_dZ*3 zzG@*&Ysx>nYM0&=xT|o_yyP^UoB{N;U!9(p%vE2x2Bt^l4(HfA{ZLIw9_$iqGe=fB zo9x0Zm_#m^WU&6jT0ZCavW4+}M+A#xHbDF*qtg7{nC_J6K7lN+E=8V)T;%OWHrd_l z#;bVEsr;EI3!h>#odU-Z4?azi*jq{n9qN%1u&^F!_C7hLX+N}LVAjy!M#s52RsQkj zu%gA}SAW!u$#u?;UR8{cVYa|_rhiub*V5GD&PH=VTXbnyicEL82Y{Pg{MSn9sRZYz zv>c<(7iWFMNA#HPK*Rz_`6AXTtH*=mSEjn-7GwHnbw|p;=#hnZW?jVwM-vc1@q#tH zdWym`3((Yt4spG>P7u&$o5Iqm&BJ?@##4BOBP5-7{d}Pw@k+^VslL4+@Atm7HUF{* zFiBCtR}_5$AKL^sjM`r11h)P2g$U~VSjvZ&bx=(N?MpLSjJ@E4AQ-p-+NiE+hCpa} zGx+PWu3s?FWWO$J{R3f@G2oT8AW|6N#MojtK&!2?dGd5}Q`?euj=fJ7ZrADxYeA-_ zZb4TKNjug*Ie1ITNF5VO6|q9GPl&CH8Y8l0GgpUf7iP{PxRl+){p?CnLq?w;E}%ijc`ZeR z>WVNk=KVUQ@8g{RvgGQ^wkXVlt*?@ZP*yd1v`X1MA1hW01p4>qIePL_Q&P{)Rja)e zN}yIa-(DP1dlINb=hsSv<#1rv$jU0P{nXKSl>BVBV150RzQ9vHBIyBJ!TQAVik9Br zY#F8IecPHe%y2jz@|W>t=8INHA9|njAhp<@(Cl?Xd>*tL&!t_|qlTWtlP{VT46X{> zj53hgOgrntZL?*2)Ajq(oKc=oGBmwN+S-Zi)RW*+_~)l(9VnO@n}?evgv**4t3}1V zy6EcYfIs;c3`I5&Kl82d#|g&Sn^_}#=?f2;8OXf_FU$x@{g0eC)N3n5Y6Pl*((v7X zXz*y`aIOrC*1so!ZpcPzlhlZ8BS2Bg26N7k>qj3u@iGwtN5&?~mh3%5{HeewyKf=8 z<^mejgMFqv*A7@cYw1kg2&EUrPbv_R>=sR}dAv7BcZPEgFD25xyeKlR95!&2cbdn? z^Xh$SJDONE-P-|i6X1h-y)#p*Jx)3b_{rBJP%khcy$DOPJsnS#ZhQKe z!UF>on~krV9O>#6=Qj!P?|M~^ITV%S)7!VsbGejw?1WVz&W~TfKpq6FkPMeQyjfke z_ld~JhO$uQi<1cg9rAi{PdYjC*2bzGfqM~03?*zEj5Lm-Qxd1=M=a7zg*^@lN2?+j zW#Lnm-g1L`EwW@iA1S2jFSqCwt=zT=KDkwEb5c#f+BxuUNU+BZ98XX8;787}vDU!> z_>Vf#V48hxQ8AohtOg@dROzIX$G7v3!0aq}OMhp48l&${agRNFLq~lJrM`1<|E0ZwDpM^wExcNHlY--snGl7PV0>n5hNrYZ+$gj{*)t2fm6Av z0HFjyi4y~v!1#5CFeR7SzzAoiCIHK2F|fAmiq<6Bbq}c3EhMNKE8~m9XbMS;-X8fv z*8s5wTClE`pU{qAm<+`y%%J$f8Mh^sp~h*V>#Vx}!J>;MC(B{CYF~zB)^-+&dX0U| zA1DSN2r|jD+glr^uEH?_MY@BTwx5>S9aUFtOX2r!Q%}Q=E1!+pgcpZck-7NQ z5gR2LgtHdl`v=7j4M|)@0-~Xu4Qc@14VDh$2%J(e2>G{=VtO+r6p@kob}R-Z(mG%> z0C|l#fU1AbZZDI5?WiNU`G@?9aBLoEl{6n57@XK9jEGS`Bs8LB91he-kzJ9%_bJv{9= z)KGsZ&>VYtQerWoHDfqH?T;~HQra2@)2Ocj`#gE!5SW})q`R5u>S+%6xG^GLa}5f) z;Qv?Ec}BCr|7|?PjJ>5sW7Q^BOHjlpiiXwi7>;h<@cQMAuuF(M{u?M*_dU|)cafy1p77x@BO`}Z-=1ovtUiJPjUl&J*7SUIOQ=M zyKi($oasWeYTudg^J+npyn!|Tl^I)k)0z+mYg%D){B%#q?!aaSjtmf`?D$aAWCr~H zbAj$g(zKyjm9RE>RJyd>VXsOLk!C7_#7;}d?JfCxYUYz%&MMYHR9pP5h8j(UX1!bM zD|z`*ztr7lzh;qIeldgg!f6v0)ZqYZM`TkugLJ9rqF^)e)}jl;#4|{PSzDAyuV5dy zC^gd$vnXls6U!)lV^9iMTqN<0p)Ckt!#X85bis_q8iHmiz*%CVZWeY!I!R#Ar=gfE zMnoT`04~<{$(_k?IKHfTZ!^%pQC`j;`8WbduO$$9!cA$bPu0+xmKBMH7SJRF2oZYBSLk3XW#ewnXlGA+g1gJVpzvchs7P(NA(Fq3XZn8n?|!kp4&$ zI6hgIitD%kiMx`L@>+sjwM|m-g3gAOft$tYV3?hfYygA+dv8cr&WVx zv_Gt>yjSM49+@5Q-O}HD)m_@+6a?jV5i=&^4K^dlj&|sv?bpuJaNjfmkVI(-M2QiQ z2y1f?q}#p}L&9uTx4|fR%C&M<0Qb~=4PJu?-C71bHK!|K-aa01jT#tGNUDd*GrPXBOHg~jy8-~L-W3oG_@M)VHYUZqpJr|NC6!qDn?!_ zbNCs&+@wl5Z7nJSZOgUw&VG?&E^cOyi!(L0m0Zry+4#|DFyjNE6Tz<_ZxJ-gzm<1b zLVd4RTppBYT+GFAWEf=mb77Lwx8S+x!sNWz5s)CsNBtRhE^;tO!F(y3q6mFGMQLf` zjHulfoITc2KP&N@k=@bR@Z=E8xJ0?ou!_?GgOAAQy~t#&B_1=>DT{Ols_>?(;EAYD z)eUkOm~6gOmarMF2^YkPWa6Os@m2E_DZOD?MhF#EPz7uY0riop`l?vLpVwf;nOPOv zlLgKcB-thadHa=atc-@9xGr+nv|>ZwS6!1vnb}c7r?%Tuo&8@ zkssdy_88>8AmpbGP8qzjU!raR?xSsq(5S3;Zz^Ce7k0cJ*b6v1_r0{vr5RkL4tBZf zqWE=)WB6z-9HPAOd2YR_;jv;?bBEM46x_J0-3ekDzDMijpY}$sh9D*z;{GzGG-NTj z9&$hHI5>-WOIMs$u!5= zp!f(e_rUqaYewqdZElIAjS*8wwzA$W+$4^kHp9l4kVu=uD&_b|%p(%HnTqQunYp+Y zY>MS&jr{DY@Z(D3J7UP|WSwa`Ucxd7$Dzk!`jJ>`WhxZ`PXIA} zVRo5jzmKIL7S2f(0cHt|pj+3cFVmk)#a1ka! zE{0BCKQSz~CV3j4j+VNh-+ujoTM~|uC5E8_Pmr7#DeeMI6Su`qQ(?h`#JN;jiiHiG zTyZ2nfKQxTVYHbLKyk(bFdgjqCxMKcam_S$l@DP9mjHXWCQG>Rx^0h#o?A}Y6vx1o zStR7lZXz~)x;M;n$MB*fwg8NiqmeQtg@{@<5NKFC9IZ|XT*^XBaFI+c4P5qavOaBgLLnE;dM!A zg_z=M_3kJTVJ!W(OvqyBf-(F3DytrH1f3?RP&tOVwUJrHc<7fMS+Ma`wy*luAn%)p z9~zCsAz}z!rb)oVZn&}lc>%R)iI2>A6;Uyfv*U9$N`W$hW~roDFM>?vmpF)O+;D7z z3INdEYgvF?C$4N^)mf8hI|(%@qd3UntwhoU__aRf9*Zj3m8W3WxRZl&>{Pc{ zlyZ_b<&L^%h7!#o@|rE_#BBWHQhoo?_MS-Y#bJ&y7Z0x%d5u94!$tVIy8>>4cs4dk z*HNjz)iBr!q1r0yICtrNQgU_o&y%mFL$ct9 zV4^Ip71*6nPUNFF^M3resQA?hm!3dY%W-uj zyzIi_yhs(acfD24=M#^0|ElDAxDet)D&(T0<>9s$sx&lhQJZmFl97rtyl5CR5xh7g zXipG(A|cTzX>p!w3oB@%v%IB}T{h z`AVwo&wdG(pFFYDq%NK7V!>pb{{6sHfl}@0nHj6ScIi?=Iu8S!yTNGKQ(JDE1)3bz z)L+vSNbPf`Kh~v$~&1^rfy? z6R;e`)8j=B=m2$81sU_|wEHN4{+v@%6PM#v^*8(#_g;kN*IXTi8PL-#i94ny8o$^{d&V@j1HM)`%fHXL%^#NNs<% z1EpX=!?B&{1WD^VEU;cA>s7aM(o<%RAc(wf$co{@awGAj$xCCQei1Tr9BZ=BNovP= z*~VX_Psj-k3`J;q`*vtTvX`&rg2wL_7lY=^Z*r2#<{D)f?nH?bzGRzPnS@koq_dHw z2}u$WOumYVxCM>)`da~ZTKneVvyPxTNPeH?CCLH7ww;0E1E0v8W)BaKr@V!cIdZe!7eDr21Wf$?^pkp?D%x3RlBIaeS|Xse^4!uSp&aWmWq35%X9UImLmU>1zA5ooY{;vp z)JjP|m9O4u5rAW@&Hw-d#tK3lJfToptG#!0165tGjtlvHd#kMZ3+Unx;@P*&XK{n+ zx-?U`*2nf(x4Rzh3k^c!IsP{VIr=`MJ!H?gfP3B9xALx?KN_{1=|KK$c!M{i>+&ebep-%IU5{z?A%Vx^ViCMp{lO z&#BA6jwOE~ZvM*N3MsUcTh+ z@i!X{r$$M&o>uteg&~;hs?9#By2;6-qu99eyX#DarE!({?(VL*1w+@^pSeCjJgo@E z%pro>JRA)Xu!+hbo5>O-I$)bKhQ&#^eOuTenN)e@e9!z=<=Q*8o^;RK_;I$qf7w0V zTXo(yt+QRtJRo-zcao~Nq)H{$1jrj4qONi)8HC?&5)8J?5LCalpRm8yN&#Oid!O4) zMOPie8@e1K%Wh`3KZ$8?uEwfA=#X{pcUed!js=T1MBt)9iU`?1VJ1z(RNoY7`tO`B zyQYdKeVzO(m0{hTRhfD)AKkTVlG+o{KHZiWcv z#eax@;q#wIk4+o9M}IFR`C}pq8%iLQfDpjqyUShOhnUSDKNe405AfSY1v8x&iT`wR zZNa_OrWA=PT9N6#aJo|1s-LO2X>60L@V`1Il_z`o{kdLoq@JQ*c=Z{QfljCfG5ZlX zQe)M%55qnxp`>r%JvYU(G1TbQE-yt>6jX6(Uktd-7?`5g{Lbx?4?0bc9a8uwN{^cu zpa#xc#lP=c%Um`chm*F~?FwJJEzh=xemmzu(g+h2Gx8deaFamUUW|qm+f84Bv(r#g zQc{9Q`RsqlI*C=<{>ARYX?E%J6CJ}xuB{;)yF`$Z2EPJmX+@95Fujz|@O0W4h*_Q; z`^#D9JNsaqIvM}@w`=_q`F@6~`*JVOlINbgeC>E(kGW%y{9nw+#>S4r#5PAf2m_QJ zofTR4+eiQH>>U0uZ7xZsW8zN^iHO+rbDN$Cc~e}H}tUM?;jJv>@A zdEp20{VJ6|S`+rR;mV>dvE+5c-Of4lKmR7E^vnSkc&K!_4evE#QV6PXI#!a@mtLi42zjun0+wjeO6ms&KBH{^~l zskUMcgQF#&mx_wi!_mYOBovIjDt;Ot>XfGKGaBtkAIx8Q+V3mXm@FTPpWV;zn#deZ zfbBf@B(eq5t6^+O=s>`^w1rF6788#hlr^WdQS9Y-&&J#LU-ZZ$&mrXYT!3Z9*Tp1+ zajh0`;fj(s6%`c?CYRTL{)Tt0Zn34C;hulV`I{`sdpG&@1RL)=hY^~Fi*)zZnDGOB zzdR;+;oYVmGLKJTAZhd6M5nQ5#{1IF^O*v^EU^5+Um+3pg#c;L|?WRZ&O@H6~j z(u~SP;8x7m%~#8Mu)WY@M+x|Z;C7GE!8zw7))VF%Buft?NZIMOaR(fM*wxQx!`fQ1me=%1l!SB{VTBo<> zC`3+MXShqoJ^;8Q9jO^P*PJM;w%Iope5T5@uF`Uqqeo2ov+IXbfKY-KY1sYvG4#=v zWero;Q;&OY8cj$h^Y{7%q{{F`RGt`HwnhJuQ@|ctpa{VOw9-r8ws|d7pXc}PCGMy~ zyK;aHo-DiiV984sZUJ1bTMfQ^^`vbHJz*Pns}JLL`M{v&T*CPZ_Cfa@UkCXkHnvLW9jlvzMnRd)>g6}Pj*{I&G+89LyL4;nsRuI`FKT+ z=-m~5Yw@k+(PECokj*`J^=69StwMTwhuYkL`+@9aWbHYjI^97WT>Q@!bo138LrSgn zjWH$sTBhbP&5W2~LmQ%Toc73k2{OT+$ZWG>LKN4JhcY37Vs721tTy=}r+^no|GgHD T*}s3k9B94<(ceDJ6Sest^`bu7