From bb1337aee85427ca7dfd90742e63f484b17c1f85 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 9 Apr 2025 04:14:47 -0700 Subject: [PATCH 1/4] Flip incompatible_disable_autoloads_in_main_repo The flag flip forces loads in main repository when using Bazel@HEAD. Flipping it now, so that we can disable autoloads by release of Bazel 9. PiperOrigin-RevId: 745526309 Change-Id: I7204470c08a66a15b28bc0b0c48f41d69e1694c8 --- examples/py/BUILD | 3 + examples/py_native/BUILD | 4 + examples/py_native/fibonacci/BUILD | 2 + examples/shell/BUILD | 4 + src/BUILD | 1 + .../semantics/BuildLanguageOptions.java | 4 +- .../com/google/devtools/build/skyframe/BUILD | 1 + .../tests/builtins_bzl/builtin_test_setup.sh | 1 + .../cc_shared_library/test/BUILD.builtin_test | 4 + .../cc_static_library/test/BUILD.builtin_test | 3 + .../blackbox/tests/PythonBlackBoxTest.java | 8 +- .../bazel/bazel_external_repository_test.py | 65 +++--- src/test/py/bazel/launcher_test.py | 215 ++++++++++++------ src/test/py/bazel/py_test.py | 163 ++++++++----- src/test/py/bazel/query_test.py | 8 +- src/test/py/bazel/runfiles_test.py | 99 ++++---- src/test/shell/bazel/BUILD | 2 + .../bazel/bazel_build_event_stream_test.sh | 8 + .../shell/bazel/bazel_coverage_cc_test_gcc.sh | 33 +++ .../bazel/bazel_coverage_cc_test_llvm.sh | 21 ++ .../shell/bazel/bazel_coverage_java_test.sh | 49 ++++ src/test/shell/bazel/bazel_example_test.sh | 2 + .../bazel/bazel_hermetic_sandboxing_test.sh | 3 +- src/test/shell/bazel/bazel_java_test.sh | 98 ++++++++ .../shell/bazel/bazel_java_test_defaults.sh | 39 +++- src/test/shell/bazel/bazel_localtest_test.sh | 3 + .../shell/bazel/bazel_proto_library_test.sh | 35 ++- .../bazel/bazel_random_characters_test.sh | 3 + .../bazel/bazel_rules_java_override_test.sh | 5 +- src/test/shell/bazel/bazel_rules_java_test.sh | 2 + src/test/shell/bazel/bazel_rules_test.sh | 44 ++++ src/test/shell/bazel/bazel_sandboxing_test.sh | 12 +- src/test/shell/bazel/bazel_symlink_test.sh | 2 + src/test/shell/bazel/bazel_test_test.sh | 75 +++++- .../remote_build_event_uploader_test.sh | 4 + .../remote/remote_execution_http_test.sh | 7 + .../bazel/remote/remote_execution_test.sh | 65 +++++- src/test/shell/testenv.sh | 2 + 38 files changed, 873 insertions(+), 226 deletions(-) diff --git a/examples/py/BUILD b/examples/py/BUILD index 8dba6e0384b358..38edb957e57709 100644 --- a/examples/py/BUILD +++ b/examples/py/BUILD @@ -1,3 +1,6 @@ +load("@rules_python//python:py_binary.bzl", "py_binary") +load("@rules_python//python:py_library.bzl", "py_library") + py_library( name = "lib", srcs = ["lib.py"], diff --git a/examples/py_native/BUILD b/examples/py_native/BUILD index 9d52fd68483bbc..3c9f69cce3b38a 100644 --- a/examples/py_native/BUILD +++ b/examples/py_native/BUILD @@ -1,3 +1,7 @@ +load("@rules_python//python:py_binary.bzl", "py_binary") +load("@rules_python//python:py_library.bzl", "py_library") +load("@rules_python//python:py_test.bzl", "py_test") + filegroup( name = "srcs", srcs = glob(["*.py"]) + [ diff --git a/examples/py_native/fibonacci/BUILD b/examples/py_native/fibonacci/BUILD index 10da5110bff0e2..9ebe0d6b0e1db7 100644 --- a/examples/py_native/fibonacci/BUILD +++ b/examples/py_native/fibonacci/BUILD @@ -1,3 +1,5 @@ +load("@rules_python//python:py_library.bzl", "py_library") + filegroup( name = "srcs", srcs = glob(["*.py"]) + [ diff --git a/examples/shell/BUILD b/examples/shell/BUILD index 095cea47250e2d..ceb08da2c348c3 100644 --- a/examples/shell/BUILD +++ b/examples/shell/BUILD @@ -1,3 +1,7 @@ +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") +load("@rules_shell//shell:sh_library.bzl", "sh_library") +load("@rules_shell//shell:sh_test.bzl", "sh_test") + package(default_visibility = ["//visibility:public"]) sh_binary( diff --git a/src/BUILD b/src/BUILD index 761687cc269360..3caf16799f7136 100644 --- a/src/BUILD +++ b/src/BUILD @@ -4,6 +4,7 @@ load("@bazel_pip_dev_deps//:requirements.bzl", "requirement") load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load("@rules_java//java:java_binary.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary", "py_library") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") load("//src:build_defs.bzl", "transition_java_language_8_archive") load("//src:release_archive.bzl", "release_archive") load(":embedded_tools.bzl", "srcsfile") diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java index f320a76f1f6861..8ee94d08e94530 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java @@ -149,7 +149,7 @@ public final class BuildLanguageOptions extends OptionsBase { @Option( name = "incompatible_disable_autoloads_in_main_repo", - defaultValue = "false", + defaultValue = "true", documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS, effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS}, metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE}, @@ -950,7 +950,7 @@ public StarlarkSemantics toStarlarkSemantics() { public static final String INCOMPATIBLE_STOP_EXPORTING_LANGUAGE_MODULES = "-incompatible_stop_exporting_language_modules"; public static final String INCOMPATIBLE_DISABLE_AUTOLOADS_IN_MAIN_REPO = - "-incompatible_disable_autoloads_in_main_repo"; + "+incompatible_disable_autoloads_in_main_repo"; public static final String INCOMPATIBLE_ALLOW_TAGS_PROPAGATION = "+incompatible_allow_tags_propagation"; public static final String EXPERIMENTAL_BUILTINS_DUMMY = "-experimental_builtins_dummy"; diff --git a/src/main/java/com/google/devtools/build/skyframe/BUILD b/src/main/java/com/google/devtools/build/skyframe/BUILD index a0caeb2865d2a4..26b3996cd879d3 100644 --- a/src/main/java/com/google/devtools/build/skyframe/BUILD +++ b/src/main/java/com/google/devtools/build/skyframe/BUILD @@ -1,3 +1,4 @@ +load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") load("@rules_java//java:defs.bzl", "java_library") load("//tools/build_rules:utilities.bzl", "java_library_srcs") diff --git a/src/main/starlark/tests/builtins_bzl/builtin_test_setup.sh b/src/main/starlark/tests/builtins_bzl/builtin_test_setup.sh index 62d7da97f629c8..2a668118dde13a 100644 --- a/src/main/starlark/tests/builtins_bzl/builtin_test_setup.sh +++ b/src/main/starlark/tests/builtins_bzl/builtin_test_setup.sh @@ -23,6 +23,7 @@ function setup_tests() { add_bazel_skylib "MODULE.bazel" add_rules_python "MODULE.bazel" add_platforms "MODULE.bazel" + add_rules_shell "MODULE.bazel" src=$(get_runfiles_dir $1) dest="${2:-$1}" if [ ! -e "$src" ]; then diff --git a/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test/BUILD.builtin_test index c212764c6cde86..fcfffca2f957f9 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test/BUILD.builtin_test +++ b/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test/BUILD.builtin_test @@ -15,6 +15,10 @@ load( "runfiles_test", "wrapped_cc_lib", ) +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") +load("@rules_cc//cc:cc_import.bzl", "cc_import") +load("@rules_shell//shell:sh_test.bzl", "sh_test") LINKABLE_MORE_THAN_ONCE = "LINKABLE_MORE_THAN_ONCE" diff --git a/src/main/starlark/tests/builtins_bzl/cc/cc_static_library/test/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/cc_static_library/test/BUILD.builtin_test index 38127882a02aae..8665e45d877d55 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/cc_static_library/test/BUILD.builtin_test +++ b/src/main/starlark/tests/builtins_bzl/cc/cc_static_library/test/BUILD.builtin_test @@ -1,4 +1,7 @@ load(":starlark_tests.bzl", "analysis_test_suite") +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_import.bzl", "cc_import") +load("@rules_shell//shell:sh_test.bzl", "sh_test") cc_static_library( name = "static", diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/tests/PythonBlackBoxTest.java b/src/test/java/com/google/devtools/build/lib/blackbox/tests/PythonBlackBoxTest.java index b344d57c312b1a..b75afed2d50a06 100644 --- a/src/test/java/com/google/devtools/build/lib/blackbox/tests/PythonBlackBoxTest.java +++ b/src/test/java/com/google/devtools/build/lib/blackbox/tests/PythonBlackBoxTest.java @@ -38,6 +38,8 @@ protected ImmutableList getAdditionalTools() { @Test public void testCompileAndRunHelloWorldStub() throws Exception { + context().write(MODULE_DOT_BAZEL, "bazel_dep(name = 'rules_python', version = '0.40.0')"); + writeHelloWorldFiles(); BuilderRunner bazel = context().bazel(); @@ -51,7 +53,11 @@ public void testCompileAndRunHelloWorldStub() throws Exception { } private void writeHelloWorldFiles() throws IOException { - context().write("python/hello/BUILD", "py_binary(name = 'hello', srcs = ['hello.py'])"); + context() + .write( + "python/hello/BUILD", + "load('@rules_python//python:py_binary.bzl', 'py_binary')", + "py_binary(name = 'hello', srcs = ['hello.py'])"); context().write("python/hello/hello.py", String.format("print ('%s')", HELLO)); } } diff --git a/src/test/py/bazel/bazel_external_repository_test.py b/src/test/py/bazel/bazel_external_repository_test.py index cef5777c9ce876..1540feb80aa94e 100644 --- a/src/test/py/bazel/bazel_external_repository_test.py +++ b/src/test/py/bazel/bazel_external_repository_test.py @@ -66,23 +66,20 @@ def tearDown(self): def testNewHttpArchive(self): ip, port = self._http_server.server_address rule_definition = [ - ( - 'http_archive =' - ' use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl",' - ' "http_archive")' - ), + 'bazel_dep(name = "rules_python", version = "0.40.0")', + 'http_archive = use_repo_rule(', + ' "@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")', 'http_archive(', ' name = "hello_archive",', ' urls = ["http://%s:%s/hello-1.0.0.tar.gz"],' % (ip, port), - ( - ' sha256 = ' - '"154740b327bcfee5669ef2ce0a04bf0904227a3bfe0fee08a5aaca96ea5a601a",' - ), + ' sha256 = ', + ' "154740b327bcfee5669ef2ce0a04bf0904227a3bfe0fee08a5aaca96ea5a601a",', ' strip_prefix = "hello-1.0.0",', ' build_file = "@//third_party:hello.BUILD",', ')', ] build_file = [ + 'load("@rules_python//python:py_library.bzl", "py_library")', 'py_library(', ' name = "hello",', ' srcs = ["hello.py"],', @@ -189,20 +186,16 @@ def testNewHttpTarWithSparseFile(self): ip, port = self._http_server.server_address rule_definition = [ - ( - 'http_archive =' - ' use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl",' - ' "http_archive")' - ), + 'bazel_dep(name = "rules_python", version = "0.40.0")', + 'http_archive = use_repo_rule(', + ' "@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")', 'http_archive(', ' name = "sparse_archive",', ' urls = ["http://%s:%s/sparse_archive.tar"],' % (ip, port), ' build_file = "@//:sparse_archive.BUILD",', ' sha256 = ', - ( - ' "a1a2b2ce4acd51a8cc1ab80adce6f134ac73e885219911a960a42000e312bb65",' - ')' - ), + ' "a1a2b2ce4acd51a8cc1ab80adce6f134ac73e885219911a960a42000e312bb65",', + ')', ] self.ScratchFile('MODULE.bazel', rule_definition) self.ScratchFile( @@ -224,13 +217,12 @@ def testNewHttpTarWithSparseFile(self): self.ScratchFile( 'BUILD', [ + 'load("@rules_python//python:py_test.bzl", "py_test")', 'py_test(', ' name = "test",', ' srcs = ["test.py"],', - ( - ' args = ["$(rlocationpath @sparse_archive//:sparse_file)"],' - ' data = [' - ), + ' args = ["$(rlocationpath @sparse_archive//:sparse_file)"],', + ' data = [', ' "@sparse_archive//:sparse_file",', ' "@bazel_tools//tools/python/runfiles",', ' ],)', @@ -260,10 +252,11 @@ def _CreatePyWritingStarlarkRule(self, print_string): def testNewLocalRepositoryNoticesFileChangeInRepoRoot(self): """Regression test for https://github.com/bazelbuild/bazel/issues/7063.""" rule_definition = [ + 'bazel_dep(name = "rules_python", version = "0.40.0")', + 'new_local_repository = use_repo_rule(', ( - 'new_local_repository =' - ' use_repo_rule("@bazel_tools//tools/build_defs/repo:local.bzl",' - ' "new_local_repository")' + ' "@bazel_tools//tools/build_defs/repo:local.bzl",' + ' "new_local_repository")' ), 'new_local_repository(', ' name = "r",', @@ -273,11 +266,15 @@ def testNewLocalRepositoryNoticesFileChangeInRepoRoot(self): ] self.ScratchFile('MODULE.bazel', rule_definition) self._CreatePyWritingStarlarkRule('hello!') - self.ScratchFile('BUILD', [ - 'load("@r//:foo.bzl", "gen_py")', - 'gen_py(name = "gen")', - 'py_binary(name = "bin", srcs = [":gen"], main = "gen.py")', - ]) + self.ScratchFile( + 'BUILD', + [ + 'load("@r//:foo.bzl", "gen_py")', + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'gen_py(name = "gen")', + 'py_binary(name = "bin", srcs = [":gen"], main = "gen.py")', + ], + ) _, stdout, _ = self.RunBazel(['run', '//:bin']) self.assertIn('hello!', os.linesep.join(stdout)) @@ -294,11 +291,9 @@ def setUpOtherRepoMyRepo(self): self.ScratchFile( 'my_repo/MODULE.bazel', [ - ( - 'local_repository =' - ' use_repo_rule("@bazel_tools//tools/build_defs/repo:local.bzl",' - ' "local_repository")' - ), + 'local_repository = use_repo_rule(', + ' "@bazel_tools//tools/build_defs/repo:local.bzl",', + ' "local_repository")', 'local_repository(name = "other_repo", path="../other_repo")', ], ) diff --git a/src/test/py/bazel/launcher_test.py b/src/test/py/bazel/launcher_test.py index f11c9701d2d465..a2d3ad06c040e3 100644 --- a/src/test/py/bazel/launcher_test.py +++ b/src/test/py/bazel/launcher_test.py @@ -237,14 +237,21 @@ def _buildAndCheckArgumentPassing(self, package, target_name): self.assertEqual(stdout, arguments) def testJavaBinaryLauncher(self): - self.ScratchFile('foo/BUILD', [ - 'java_binary(', - ' name = "foo",', - ' srcs = ["Main.java"],', - ' main_class = "Main",', - ' data = ["//bar:bar.txt"],', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', + 'java_binary(', + ' name = "foo",', + ' srcs = ["Main.java"],', + ' main_class = "Main",', + ' data = ["//bar:bar.txt"],', + ')', + ], + ) self.ScratchFile('foo/Main.java', [ 'public class Main {', ' public static void main(String[] args) {' @@ -266,13 +273,20 @@ def testJavaBinaryLauncher(self): self._buildJavaTargets(bazel_bin, '.exe' if self.IsWindows() else '') def testJavaBinaryArgumentPassing(self): - self.ScratchFile('foo/BUILD', [ - 'java_binary(', - ' name = "bin",', - ' srcs = ["Main.java"],', - ' main_class = "Main",', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', + 'java_binary(', + ' name = "bin",', + ' srcs = ["Main.java"],', + ' main_class = "Main",', + ')', + ], + ) self.ScratchFile('foo/Main.java', [ 'public class Main {', ' public static void main(String[] args) {' @@ -286,6 +300,9 @@ def testJavaBinaryArgumentPassing(self): self._buildAndCheckArgumentPassing('foo', 'bin') def testShBinaryLauncher(self): + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_shell", version = "0.3.0")'] + ) self.ScratchFile( 'foo/BUILD', [ @@ -295,6 +312,7 @@ def testShBinaryLauncher(self): # On Windows, if the srcs's extension is one of ".exe", ".cmd", or # ".bat", then Bazel requires the rule's name has the same # extension, and the output file will be a copy of the source file. + 'load("@rules_shell//shell:sh_binary.bzl", "sh_binary")', 'sh_binary(', ' name = "bin1.sh",', ' srcs = ["foo.sh"],', @@ -310,7 +328,8 @@ def testShBinaryLauncher(self): ' srcs = ["foo.cmd"],', ' data = ["//bar:bar.txt"],', ')', - ]) + ], + ) foo_sh = self.ScratchFile('foo/foo.sh', [ '#!/bin/bash', 'echo hello shell', @@ -328,12 +347,19 @@ def testShBinaryLauncher(self): self._buildShBinaryTargets(bazel_bin, '.exe' if self.IsWindows() else '') def testShBinaryArgumentPassing(self): - self.ScratchFile('foo/BUILD', [ - 'sh_binary(', - ' name = "bin",', - ' srcs = ["bin.sh"],', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_shell", version = "0.3.0")'] + ) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_shell//shell:sh_binary.bzl", "sh_binary")', + 'sh_binary(', + ' name = "bin",', + ' srcs = ["bin.sh"],', + ')', + ], + ) foo_sh = self.ScratchFile('foo/bin.sh', [ '#!/bin/bash', '# Store arguments in a array', @@ -350,6 +376,9 @@ def testShBinaryArgumentPassing(self): self._buildAndCheckArgumentPassing('foo', 'bin') def testPyBinaryLauncher(self): + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_python", version = "0.40.0")'] + ) self.ScratchFile( 'foo/foo.bzl', [ @@ -372,12 +401,30 @@ def testPyBinaryLauncher(self): ')', ], ) - self.ScratchFile('foo/BUILD', [ - 'load(":foo.bzl", "helloworld")', '', 'py_binary(', ' name = "foo",', - ' srcs = ["foo.py"],', ' data = ["//bar:bar.txt"],', ')', '', - 'py_test(', ' name = "test",', ' srcs = ["test.py"],', ')', '', - 'helloworld(', ' name = "hello",', ' out = "hello.txt",', ')' - ]) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'load("@rules_python//python:py_test.bzl", "py_test")', + 'load(":foo.bzl", "helloworld")', + '', + 'py_binary(', + ' name = "foo",', + ' srcs = ["foo.py"],', + ' data = ["//bar:bar.txt"],', + ')', + '', + 'py_test(', + ' name = "test",', + ' srcs = ["test.py"],', + ')', + '', + 'helloworld(', + ' name = "hello",', + ' out = "hello.txt",', + ')', + ], + ) foo_py = self.ScratchFile('foo/foo.py', [ '#!/usr/bin/env python3', 'import sys', @@ -406,12 +453,19 @@ def testPyBinaryLauncher(self): self._buildPyTargets(bazel_bin, '.exe' if self.IsWindows() else '') def testPyBinaryArgumentPassing(self): - self.ScratchFile('foo/BUILD', [ - 'py_binary(', - ' name = "bin",', - ' srcs = ["bin.py"],', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_python", version = "0.40.0")'] + ) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'py_binary(', + ' name = "bin",', + ' srcs = ["bin.py"],', + ')', + ], + ) self.ScratchFile('foo/bin.py', [ 'import sys', 'for arg in sys.argv[1:]:', @@ -422,12 +476,19 @@ def testPyBinaryArgumentPassing(self): def testPyBinaryLauncherWithDifferentArgv0(self): """Test for https://github.com/bazelbuild/bazel/issues/14343.""" - self.ScratchFile('foo/BUILD', [ - 'py_binary(', - ' name = "bin",', - ' srcs = ["bin.py"],', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_python", version = "0.40.0")'] + ) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'py_binary(', + ' name = "bin",', + ' srcs = ["bin.py"],', + ')', + ], + ) self.ScratchFile('foo/bin.py', ['print("Hello world")']) _, stdout, _ = self.RunBazel(['info', 'bazel-bin']) @@ -447,15 +508,22 @@ def testWindowsJavaExeLauncher(self): # Skip this test on non-Windows platforms if not self.IsWindows(): return - self.ScratchFile('foo/BUILD', [ - 'java_binary(', - ' name = "foo",', - ' srcs = ["Main.java"],', - ' main_class = "Main",', - ' jvm_flags = ["--flag1", "--flag2"],', - ' data = ["advice-1.jar", "advice-2.jar"],', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', + 'java_binary(', + ' name = "foo",', + ' srcs = ["Main.java"],', + ' main_class = "Main",', + ' jvm_flags = ["--flag1", "--flag2"],', + ' data = ["advice-1.jar", "advice-2.jar"],', + ')', + ], + ) self.ScratchFile('foo/advice-1.jar') self.ScratchFile('foo/advice-2.jar') self.ScratchFile('foo/Main.java', [ @@ -569,17 +637,25 @@ def testWindowsJavaExeLauncher(self): def testWindowsNativeLauncherInNonEnglishPath(self): if not self.IsWindows(): return - self.ScratchFile('bin/BUILD', [ - 'java_binary(', - ' name = "bin_java",', - ' srcs = ["Main.java"],', - ' main_class = "Main",', - ')', - 'sh_binary(', - ' name = "bin_sh",', - ' srcs = ["main.sh"],', - ')', - ]) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) + self.ScratchFile( + 'bin/BUILD', + [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', + 'load("@rules_shell//shell:sh_binary.bzl", "sh_binary")', + 'java_binary(', + ' name = "bin_java",', + ' srcs = ["Main.java"],', + ' main_class = "Main",', + ')', + 'sh_binary(', + ' name = "bin_sh",', + ' srcs = ["main.sh"],', + ')', + ], + ) self.ScratchFile('bin/Main.java', [ 'public class Main {', ' public static void main(String[] args) {' @@ -617,9 +693,15 @@ def testWindowsNativeLauncherInNonEnglishPath(self): def testWindowsNativeLauncherInLongPath(self): if not self.IsWindows(): return + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) self.ScratchFile( 'bin/BUILD', [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', + 'load("@rules_shell//shell:sh_binary.bzl", "sh_binary")', + 'load("@rules_python//python:py_binary.bzl", "py_binary")', 'java_binary(', ' name = "not_short_bin_java",', ' srcs = ["Main.java"],', @@ -713,9 +795,15 @@ def testWindowsNativeLauncherInLongPath(self): def testWindowsNativeLauncherInvalidArgv0(self): if not self.IsWindows(): return + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) self.ScratchFile( 'bin/BUILD', [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', + 'load("@rules_shell//shell:sh_binary.bzl", "sh_binary")', + 'load("@rules_python//python:py_binary.bzl", "py_binary")', 'java_binary(', ' name = "bin_java",', ' srcs = ["Main.java"],', @@ -787,11 +875,8 @@ def testBuildLaunchersWithClangClOnWindows(self): [ 'bazel_dep(name = "platforms", version = "0.0.9")', 'bazel_dep(name = "rules_cc", version = "0.0.12")', - ( - 'cc_configure =' - ' use_extension("@rules_cc//cc:extensions.bzl",' - ' "cc_configure_extension")' - ), + 'cc_configure = use_extension(', + ' "@rules_cc//cc:extensions.bzl", "cc_configure_extension")', 'use_repo(cc_configure, "local_config_cc")', # Register all cc toolchains for Windows 'register_toolchains("@local_config_cc//:all")', diff --git a/src/test/py/bazel/py_test.py b/src/test/py/bazel/py_test.py index 1c3f347ea77290..e3aba3c1c72d3e 100644 --- a/src/test/py/bazel/py_test.py +++ b/src/test/py/bazel/py_test.py @@ -26,6 +26,8 @@ def createSimpleFiles(self): self.ScratchFile( 'a/BUILD', [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'load("@rules_python//python:py_library.bzl", "py_library")', 'py_binary(name="a", srcs=["a.py"], deps=[":b"])', 'py_library(name="b", srcs=["b.py"], imports=["."])', ], @@ -45,6 +47,12 @@ def createSimpleFiles(self): ' print("Hello, World")', ]) + def setUp(self): + test_base.TestBase.setUp(self) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_python", version = "0.40.0")'] + ) + def testSmoke(self): self.createSimpleFiles() _, stdout, _ = self.RunBazel(['run', '//a:a']) @@ -68,13 +76,24 @@ def testRunfilesSymlinks(self): class TestInitPyFiles(test_base.TestBase): + def setUp(self): + test_base.TestBase.setUp(self) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_python", version = "0.40.0")'] + ) + def createSimpleFiles(self, create_init=True): - self.ScratchFile('src/a/BUILD', [ - 'py_binary(name="a", srcs=["a.py"], deps=[":b"], legacy_create_init=%s)' - % create_init, - 'py_library(name="b", srcs=["b.py"])', - ]) + self.ScratchFile( + 'src/a/BUILD', + [ + 'load("@rules_python//python:py_library.bzl", "py_library")', + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'py_binary(name="a", srcs=["a.py"], deps=[":b"],' + ' legacy_create_init=%s)' % create_init, + 'py_library(name="b", srcs=["b.py"])', + ], + ) self.ScratchFile('src/a/a.py', [ 'from src.a import b', @@ -116,13 +135,18 @@ def testInitPyFilesNotCreatedWhenLegacyCreateInitIsSet(self): # Regression test for https://github.com/bazelbuild/bazel/pull/10119 def testBuildingZipFileWithTargetNameWithDot(self): - self.ScratchFile('BUILD', [ - 'py_binary(', - ' name = "bin.v1", # .v1 should not be treated as extension and removed accidentally', - ' srcs = ["bin.py"],', - ' main = "bin.py",', - ')', - ]) + self.ScratchFile( + 'BUILD', + [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + "'# .v1 shouldn't be treated as extension and removed accidentally", + 'py_binary(', + ' name = "bin.v1",', + ' srcs = ["bin.py"],', + ' main = "bin.py",', + ')', + ], + ) self.ScratchFile('bin.py', ['print("Hello, world")']) self.RunBazel(['build', '--build_python_zip', '//:bin.v1']) self.assertTrue(os.path.exists('bazel-bin/bin.v1.temp')) @@ -151,6 +175,9 @@ def _RunRemoteBazel(self, args): def setUp(self): test_base.TestBase.setUp(self) + self.ScratchFile( + 'MODULE.bazel', ['bazel_dep(name = "rules_python", version = "0.40.0")'] + ) self._worker_port = self.StartRemoteWorker() def tearDown(self): @@ -158,12 +185,16 @@ def tearDown(self): test_base.TestBase.tearDown(self) def testPyTestRunsRemotely(self): - self.ScratchFile('foo/BUILD', [ - 'py_test(', - ' name = "foo_test",', - ' srcs = ["foo_test.py"],', - ')', - ]) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_python//python:py_test.bzl", "py_test")', + 'py_test(', + ' name = "foo_test",', + ' srcs = ["foo_test.py"],', + ')', + ], + ) self.ScratchFile('foo/foo_test.py', [ 'print("Test ran")', ]) @@ -176,17 +207,22 @@ def testPyTestRunsRemotely(self): # Regression test for https://github.com/bazelbuild/bazel/issues/9239 def testPyTestWithStdlibCollisionRunsRemotely(self): - self.ScratchFile('foo/BUILD', [ - 'py_library(', - ' name = "io",', - ' srcs = ["io.py"],', - ')', - 'py_test(', - ' name = "io_test",', - ' srcs = ["io_test.py"],', - ' deps = [":io"],', - ')', - ]) + self.ScratchFile( + 'foo/BUILD', + [ + 'load("@rules_python//python:py_library.bzl", "py_library")', + 'load("@rules_python//python:py_test.bzl", "py_test")', + 'py_library(', + ' name = "io",', + ' srcs = ["io.py"],', + ')', + 'py_test(', + ' name = "io_test",', + ' srcs = ["io_test.py"],', + ' deps = [":io"],', + ')', + ], + ) self.ScratchFile('foo/io.py', [ 'def my_func():', ' print("Test ran")', @@ -209,41 +245,46 @@ def testPyRunfilesLibraryCurrentRepository(self): self.ScratchFile( 'MODULE.bazel', [ - ( - 'local_repository =' - ' use_repo_rule("@bazel_tools//tools/build_defs/repo:local.bzl",' - ' "local_repository")' - ), + 'bazel_dep(name = "rules_python", version = "0.40.0")', + 'local_repository = use_repo_rule(', + ' "@bazel_tools//tools/build_defs/repo:local.bzl",', + ' "local_repository")', 'local_repository(name = "other_repo", path = "other_repo_path")', ], ) - self.ScratchFile('pkg/BUILD.bazel', [ - 'py_library(', - ' name = "library",', - ' srcs = ["library.py"],', - ' visibility = ["//visibility:public"],', - ' deps = ["@bazel_tools//tools/python/runfiles"],', - ')', - '', - 'py_binary(', - ' name = "binary",', - ' srcs = ["binary.py"],', - ' deps = [', - ' ":library",', - ' "@bazel_tools//tools/python/runfiles",', - ' ],', - ')', - '', - 'py_test(', - ' name = "test",', - ' srcs = ["test.py"],', - ' deps = [', - ' ":library",', - ' "@bazel_tools//tools/python/runfiles",', - ' ],', - ')', - ]) + self.ScratchFile( + 'pkg/BUILD.bazel', + [ + 'load("@rules_python//python:py_library.bzl", "py_library")', + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'load("@rules_python//python:py_test.bzl", "py_test")', + 'py_library(', + ' name = "library",', + ' srcs = ["library.py"],', + ' visibility = ["//visibility:public"],', + ' deps = ["@bazel_tools//tools/python/runfiles"],', + ')', + '', + 'py_binary(', + ' name = "binary",', + ' srcs = ["binary.py"],', + ' deps = [', + ' ":library",', + ' "@bazel_tools//tools/python/runfiles",', + ' ],', + ')', + '', + 'py_test(', + ' name = "test",', + ' srcs = ["test.py"],', + ' deps = [', + ' ":library",', + ' "@bazel_tools//tools/python/runfiles",', + ' ],', + ')', + ], + ) self.ScratchFile('pkg/library.py', [ 'from bazel_tools.tools.python.runfiles import runfiles', 'def print_repo_name():', @@ -266,6 +307,8 @@ def testPyRunfilesLibraryCurrentRepository(self): self.ScratchFile( 'other_repo_path/other_pkg/BUILD.bazel', [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + 'load("@rules_python//python:py_test.bzl", "py_test")', 'py_binary(', ' name = "binary",', ' srcs = ["binary.py"],', diff --git a/src/test/py/bazel/query_test.py b/src/test/py/bazel/query_test.py index 57c484e392bd67..b5eeecab9ce170 100644 --- a/src/test/py/bazel/query_test.py +++ b/src/test/py/bazel/query_test.py @@ -43,10 +43,16 @@ def testSimpleQuery(self): def testQueryWithDifferentOutputBaseAfterBuilding(self): output_base = tempfile.mkdtemp(dir=os.getenv('TEST_TMPDIR')) - self.ScratchFile('MODULE.bazel') + self.ScratchFile( + 'MODULE.bazel', + [ + 'bazel_dep(name = "rules_python", version = "0.40.0")', + ], + ) self.ScratchFile( 'BUILD', [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', 'py_binary(name="a", srcs=["a.py"])', ], ) diff --git a/src/test/py/bazel/runfiles_test.py b/src/test/py/bazel/runfiles_test.py index 30d268bb251110..98fd734f2c8669 100644 --- a/src/test/py/bazel/runfiles_test.py +++ b/src/test/py/bazel/runfiles_test.py @@ -262,25 +262,35 @@ def testRunfilesLibrariesFindRlocationpathExpansion(self): self.ScratchFile("A/REPO.bazel") self.ScratchFile("A/p/BUILD", ["exports_files(['foo.txt'])"]) self.ScratchFile("A/p/foo.txt", ["Hello, World!"]) - self.ScratchFile("MODULE.bazel", [ - 'local_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:local.bzl", "local_repository")', # pylint: disable=line-too-long - 'local_repository(name = "A", path = "A")', - ]) - self.ScratchFile("pkg/BUILD", [ - "py_binary(", - " name = 'bin',", - " srcs = ['bin.py'],", - " args = [", - " '$(rlocationpath bar.txt)',", - " '$(rlocationpath @A//p:foo.txt)',", - " ],", - " data = [", - " 'bar.txt',", - " '@A//p:foo.txt'", - " ],", - " deps = ['@bazel_tools//tools/python/runfiles'],", - ")", - ]) + self.ScratchFile( + "MODULE.bazel", + [ + 'bazel_dep(name = "rules_python", version = "0.40.0")', + "local_repository = use_repo_rule(", + ' "@bazel_tools//tools/build_defs/repo:local.bzl",', + ' "local_repository")', + 'local_repository(name = "A", path = "A")', + ], + ) + self.ScratchFile( + "pkg/BUILD", + [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', + "py_binary(", + " name = 'bin',", + " srcs = ['bin.py'],", + " args = [", + " '$(rlocationpath bar.txt)',", + " '$(rlocationpath @A//p:foo.txt)',", + " ],", + " data = [", + " 'bar.txt',", + " '@A//p:foo.txt'", + " ],", + " deps = ['@bazel_tools//tools/python/runfiles'],", + ")", + ], + ) self.ScratchFile("pkg/bar.txt", ["Hello, Bazel!"]) self.ScratchFile("pkg/bin.py", [ "import sys", @@ -296,10 +306,13 @@ def testRunfilesLibrariesFindRlocationpathExpansion(self): self.assertEqual(stdout[1], "Hello, World!") def setUpRunfilesDirectoryIncrementalityTest(self): - self.ScratchFile("MODULE.bazel") + self.ScratchFile( + "MODULE.bazel", ['bazel_dep(name = "rules_shell", version = "0.3.0")'] + ) self.ScratchFile( "BUILD", [ + 'load("@rules_shell//shell:sh_test.bzl", "sh_test")', "sh_test(", " name = 'test',", " srcs = ['test.sh'],", @@ -418,10 +431,13 @@ def testRunfilesDirectoryIncrementalityNoBuildRunfileLinksEnableRunfilesFlippedO self.assertNotEqual(exit_code, 0) def testTestsRunWithNoBuildRunfileLinksAndNoEnableRunfiles(self): - self.ScratchFile("MODULE.bazel") + self.ScratchFile( + "MODULE.bazel", ['bazel_dep(name = "rules_shell", version = "0.3.0")'] + ) self.ScratchFile( "BUILD", [ + 'load("@rules_shell//shell:sh_test.bzl", "sh_test")', "sh_test(", " name = 'test',", " srcs = ['test.sh'],", @@ -436,10 +452,13 @@ def testTestsRunWithNoBuildRunfileLinksAndNoEnableRunfiles(self): def testWrappedShBinary(self): self.writeWrapperRule() - self.ScratchFile("MODULE.bazel") + self.ScratchFile( + "MODULE.bazel", ['bazel_dep(name = "rules_shell", version = "0.3.0")'] + ) self.ScratchFile( "BUILD", [ + 'load("@rules_shell//shell:sh_binary.bzl", "sh_binary")', "sh_binary(", " name = 'binary',", " srcs = ['binary.sh'],", @@ -466,6 +485,7 @@ def disabledWrappedPyBinary(self): self.ScratchFile( "BUILD", [ + 'load("@rules_python//python:py_binary.bzl", "py_binary")', "py_binary(", " name = 'binary',", " srcs = ['binary.py'],", @@ -485,10 +505,13 @@ def disabledWrappedPyBinary(self): def testWrappedJavaBinary(self): self.writeWrapperRule() - self.ScratchFile("MODULE.bazel") + self.ScratchFile( + "MODULE.bazel", ['bazel_dep(name = "rules_java", version = "8.11.0")'] + ) self.ScratchFile( "BUILD", [ + 'load("@rules_java//java:java_binary.bzl", "java_binary")', "java_binary(", " name = 'binary',", " srcs = ['Binary.java'],", @@ -518,26 +541,16 @@ def writeWrapperRule(self): [ "def _wrapper_impl(ctx):", " target = ctx.attr.target", - ( - " original_executable =" - " target[DefaultInfo].files_to_run.executable" - ), - ( - " executable =" - " ctx.actions.declare_file(original_executable.basename)" - ), - ( - " ctx.actions.symlink(output = executable, target_file =" - " original_executable)" - ), - ( - " data_runfiles =" - " ctx.runfiles([executable]).merge(target[DefaultInfo].data_runfiles)" - ), - ( - " default_runfiles =" - " ctx.runfiles([executable]).merge(target[DefaultInfo].default_runfiles)" - ), + " original_executable = (", + " target[DefaultInfo].files_to_run.executable)", + " executable = ctx.actions.declare_file(", + " original_executable.basename)", + " ctx.actions.symlink(output = executable,", + " target_file = original_executable)", + " data_runfiles = ctx.runfiles([executable]).merge(", + " target[DefaultInfo].data_runfiles)", + " default_runfiles = ctx.runfiles([executable]).merge(", + " target[DefaultInfo].default_runfiles)", " return [", " DefaultInfo(", " executable = executable,", diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD index 53e331f398fc21..be42ada133b340 100644 --- a/src/test/shell/bazel/BUILD +++ b/src/test/shell/bazel/BUILD @@ -1,4 +1,6 @@ load("@bazel_skylib//rules:write_file.bzl", "write_file") +load("@rules_shell//shell:sh_library.bzl", "sh_library") +load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//:workspace_deps.bzl", "gen_workspace_stanza") load("//src/tools/bzlmod:utils.bzl", "get_canonical_repo_name") diff --git a/src/test/shell/bazel/bazel_build_event_stream_test.sh b/src/test/shell/bazel/bazel_build_event_stream_test.sh index 9d026a34d07442..bea2d9ee68b2dd 100755 --- a/src/test/shell/bazel/bazel_build_event_stream_test.sh +++ b/src/test/shell/bazel/bazel_build_event_stream_test.sh @@ -185,8 +185,10 @@ EOF } function test_residue_in_run_bep(){ + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") sh_binary( name = 'arg', srcs = ['arg.sh'], @@ -221,8 +223,10 @@ EOF } function test_no_residue_in_run_bep(){ + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") sh_binary( name = 'arg', srcs = ['arg.sh'], @@ -261,8 +265,10 @@ EOF function test_residue_in_run_test_bep(){ + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = 'arg', srcs = ['arg_test.sh'], @@ -297,8 +303,10 @@ EOF } function test_no_residue_in_run_test_bep(){ + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = 'arg', srcs = ['arg_test.sh'], diff --git a/src/test/shell/bazel/bazel_coverage_cc_test_gcc.sh b/src/test/shell/bazel/bazel_coverage_cc_test_gcc.sh index 204c3cb951fefd..e46fcee68e1dc3 100755 --- a/src/test/shell/bazel/bazel_coverage_cc_test_gcc.sh +++ b/src/test/shell/bazel/bazel_coverage_cc_test_gcc.sh @@ -29,10 +29,17 @@ if [[ "${COVERAGE_GENERATOR_DIR}" != "released" ]]; then add_to_bazelrc "build --override_repository=remote_coverage_tools=${COVERAGE_GENERATOR_DIR}" fi +function set_up() { + add_rules_cc "MODULE.bazel" +} + # Writes the C++ source files and a corresponding BUILD file for which to # collect code coverage. The sources are a.cc, a.h and t.cc. function setup_a_cc_lib_and_t_cc_test() { cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["a.cc"], @@ -137,6 +144,9 @@ function test_cc_test_coverage_gcov_virtual_includes() { ########### Setup source files and BUILD file ########### mkdir -p examples/cpp cat << EOF > examples/cpp/BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a_header", hdrs = ["foo/bar/baz/a_header.h"], @@ -279,6 +289,9 @@ function test_cc_test_gcov_multiple_headers() { ############## Setting up the test sources and BUILD file ############## mkdir -p "coverage_srcs/" cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["coverage_srcs/a.cc"], @@ -383,6 +396,9 @@ function test_cc_test_gcov_multiple_headers_instrument_test_target() { ############## Setting up the test sources and BUILD file ############## mkdir -p "coverage_srcs/" cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["coverage_srcs/a.cc"], @@ -492,6 +508,9 @@ function test_cc_test_gcov_same_header_different_libs() { ############## Setting up the test sources and BUILD file ############## mkdir -p "coverage_srcs/" cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["coverage_srcs/a.cc"], @@ -654,6 +673,9 @@ function test_cc_test_gcov_same_header_different_libs_multiple_exec() { ############## Setting up the test sources and BUILD file ############## mkdir -p "coverage_srcs/" cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["coverage_srcs/a.cc"], @@ -845,6 +867,9 @@ function test_failed_coverage() { fi cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["a.cc"], @@ -924,6 +949,8 @@ function test_coverage_doesnt_fail_on_empty_output() { } EOF cat << EOF > empty_cov/BUILD +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_test( name = "empty-cov-test", srcs = ["t.cc"] @@ -943,8 +970,11 @@ local_repository( path = "other_repo", ) EOF + add_rules_cc "MODULE.bazel" cat > BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") + cc_library( name = "b", srcs = ["b.cc"], @@ -971,6 +1001,9 @@ EOF touch other_repo/REPO.bazel cat > other_repo/BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["a.cc"], diff --git a/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh b/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh index 43489ca1e0c636..8d9e5a2566307a 100755 --- a/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh +++ b/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh @@ -29,6 +29,10 @@ if [[ "${COVERAGE_GENERATOR_DIR}" != "released" ]]; then add_to_bazelrc "build --override_repository=remote_coverage_tools=${COVERAGE_GENERATOR_DIR}" fi +function set_up() { + add_rules_cc "MODULE.bazel" +} + # Configures Bazel to emit coverage using LLVM tools, returning a non-zero exit # code if the tools are not available. function setup_llvm_coverage_tools_for_lcov() { @@ -67,6 +71,9 @@ function setup_llvm_coverage_tools_for_lcov() { # collect code coverage. The sources are a.cc, a.h and t.cc. function setup_a_cc_lib_and_t_cc_test() { cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["a.cc"], @@ -201,8 +208,13 @@ end_of_record" function test_cc_test_with_runtime_objects_not_in_runfiles() { setup_llvm_coverage_tools_for_lcov || return 0 + add_rules_java "MODULE.bazel" cat << EOF > BUILD +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") +load("@rules_cc//cc:cc_library.bzl", "cc_library") + cc_test( name = "main", srcs = ["main.cpp"], @@ -265,8 +277,11 @@ local_repository( path = "other_repo", ) EOF + add_rules_cc "MODULE.bazel" cat > BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") + cc_library( name = "b", srcs = ["b.cc"], @@ -424,6 +439,9 @@ function test_coverage_with_tmp_in_path() { mkdir -p foo/tmp cat > foo/tmp/BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "a", srcs = ["a.cc"], @@ -494,6 +512,9 @@ function test_coverage_for_header() { setup_llvm_coverage_tools_for_lcov || return 0 cat << EOF > BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + cc_library( name = "foo", srcs = ["foo.cc"], diff --git a/src/test/shell/bazel/bazel_coverage_java_test.sh b/src/test/shell/bazel/bazel_coverage_java_test.sh index 65facbacd9ad6b..4152c83367481f 100755 --- a/src/test/shell/bazel/bazel_coverage_java_test.sh +++ b/src/test/shell/bazel/bazel_coverage_java_test.sh @@ -42,9 +42,15 @@ if [[ $# -gt 0 ]]; then add_to_bazelrc "build --tool_java_runtime_version=${JAVA_RUNTIME_VERSION}" fi +function set_up() { + add_rules_java "MODULE.bazel" +} + function test_java_test_coverage() { cat < BUILD load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain") +load("@rules_java//java:java_test.bzl", "java_test") +load("@rules_java//java:java_library.bzl", "java_library") java_test( name = "test", @@ -139,6 +145,9 @@ end_of_record" function test_java_test_coverage_combined_report() { cat < BUILD +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_test.bzl", "java_test") + java_test( name = "test", srcs = glob(["src/test/**/*.java"]), @@ -228,6 +237,10 @@ end_of_record" function test_java_test_java_import_coverage() { cat < BUILD +load("@rules_java//java:java_test.bzl", "java_test") +load("@rules_java//java:java_import.bzl", "java_import") +load("@rules_java//java:java_library.bzl", "java_library") + java_test( name = "test", srcs = glob(["src/test/**/*.java"]), @@ -319,6 +332,8 @@ function test_run_jar_in_subprocess_empty_env() { mkdir -p java/cov mkdir -p javatests/cov cat >java/cov/BUILD <javatests/cov/BUILD <java/cov/BUILD <javatests/cov/BUILD <java/cov/BUILD <javatests/cov/BUILD < BUILD +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_test.bzl", "java_test") + java_library( name = "lib", srcs = ["src/main/java/lib/Lib.java"], @@ -686,6 +714,10 @@ LF:2" function test_java_coverage_with_classpath_and_data_jar() { cat < BUILD +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_java//java:java_test.bzl", "java_test") +load("@rules_java//java:java_library.bzl", "java_library") + java_binary( name = "foo", srcs = ["src/main/java/foo/Foo.java"], @@ -784,6 +816,9 @@ function test_java_string_switch_coverage() { # (because a switch on String::hashCode is made first) - these branches should # be filtered. cat < BUILD +load("@rules_java//java:java_test.bzl", "java_test") +load("@rules_java//java:java_library.bzl", "java_library") + java_test( name = "test", srcs = glob(["src/test/**/*.java"]), @@ -876,6 +911,9 @@ function test_finally_block_branch_coverage() { # may enter them (e.g. via an exception handler or when no exception is # thrown). cat < BUILD +load("@rules_java//java:java_test.bzl", "java_test") +load("@rules_java//java:java_library.bzl", "java_library") + java_test( name = "test", srcs = glob(["src/test/**/*.java"]), @@ -1081,7 +1119,10 @@ function test_java_test_coverage_cc_binary() { fi ########### Setup source files and BUILD file ########### + add_rules_cc "MODULE.bazel" cat < BUILD +load("@rules_java//java:java_test.bzl", "java_test") + java_test( name = "NumJava", srcs = ["NumJava.java"], @@ -1103,6 +1144,9 @@ EOF mkdir -p examples/cpp cat < examples/cpp/BUILD +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") +load("@rules_cc//cc:cc_library.bzl", "cc_library") + package(default_visibility = ["//visibility:public"]) cc_binary( @@ -1227,6 +1271,8 @@ local_repository( EOF cat > BUILD <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "math", srcs = ["src/main/com/example/Math.java"], @@ -1250,6 +1296,9 @@ EOF touch other_repo/REPO.bazel cat > other_repo/BUILD <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_test.bzl", "java_test") + java_library( name = "collatz", srcs = ["src/main/com/example/Collatz.java"], diff --git a/src/test/shell/bazel/bazel_example_test.sh b/src/test/shell/bazel/bazel_example_test.sh index c787ad2b0f8bf4..39426b0ba64486 100755 --- a/src/test/shell/bazel/bazel_example_test.sh +++ b/src/test/shell/bazel/bazel_example_test.sh @@ -55,6 +55,8 @@ function set_up() { module(name="io_bazel") EOF add_rules_java "MODULE.bazel" + add_rules_python "MODULE.bazel" + add_rules_shell "MODULE.bazel" } # diff --git a/src/test/shell/bazel/bazel_hermetic_sandboxing_test.sh b/src/test/shell/bazel/bazel_hermetic_sandboxing_test.sh index 3c80da909a5437..d019abdcebd5b0 100755 --- a/src/test/shell/bazel/bazel_hermetic_sandboxing_test.sh +++ b/src/test/shell/bazel/bazel_hermetic_sandboxing_test.sh @@ -63,6 +63,7 @@ function set_up { sed -i.bak '/sandbox_tmpfs_path/d' $TEST_TMPDIR/bazelrc + add_rules_python "MODULE.bazel" mkdir -p examples/hermetic cat << 'EOF' > examples/hermetic/unknown_file.txt @@ -95,7 +96,7 @@ import import_module EOF cat << 'EOF' > examples/hermetic/BUILD - +load("@rules_python//python:py_test.bzl", "py_test") load( "test.bzl", "overwrite_via_symlink", diff --git a/src/test/shell/bazel/bazel_java_test.sh b/src/test/shell/bazel/bazel_java_test.sh index 3cb4b4e2c0d032..a59da78ec33ba2 100755 --- a/src/test/shell/bazel/bazel_java_test.sh +++ b/src/test/shell/bazel/bazel_java_test.sh @@ -94,6 +94,8 @@ function set_up() { function write_hello_library_files() { mkdir -p java/main cat >java/main/BUILD <java/hello_library/BUILD < java/com/google/sandwich/BUILD <java/main/BUILD <g/BUILD <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") + genrule( name = "stub", srcs = ["B.java"], @@ -623,6 +633,8 @@ public class HelloLibrary { EOF # Disable error-prone for this target, though. cat >java/hello_library/BUILD < java/testrunners/BUILD < java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") java_binary( name = "Main", @@ -805,6 +822,8 @@ function test_java_binary_deps_java_sandwich() { cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_java//java:java_library.bzl", "java_library") java_binary( name = "Main", @@ -868,6 +887,8 @@ function test_java_binary_runtime_deps_java_sandwich() { cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_java//java:java_library.bzl", "java_library") java_binary( name = "Main", @@ -921,6 +942,8 @@ function test_java_test_java_sandwich() { cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_test.bzl", "java_test") java_test( name = "MainTest", @@ -1016,6 +1039,8 @@ EOF # With explicit_java_test_deps, we fail without explicitly specifying the JUnit deps. cat > java/testrunners/BUILD < java/testrunners/BUILD < java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_binary.bzl", "java_binary") java_binary( name = "Main", @@ -1171,6 +1199,8 @@ function test_basic_java_sandwich_with_exports_and_java_library() { cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_java//java:java_library.bzl", "java_library") java_binary( name = "Main", @@ -1268,6 +1298,8 @@ function test_basic_java_sandwich_with_transitive_deps_and_java_library_should_f cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") java_binary( name = "Main", @@ -1343,6 +1375,7 @@ function test_basic_java_sandwich_with_deps_should_fail() { cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_binary.bzl", "java_binary") java_binary( name = "Main", @@ -1417,6 +1450,7 @@ function test_java_merge_outputs() { cat > java/com/google/sandwich/BUILD << EOF load(':java_custom_library.bzl', 'java_custom_library') +load("@rules_java//java:java_library.bzl", "java_library") java_custom_library( name = "custom", @@ -1562,6 +1596,8 @@ public class Hello { } EOF cat > BUILD <<'EOF' +load("@rules_java//java:java_binary.bzl", "java_binary") + java_binary( name = "a", srcs = ["Hello.java"], @@ -1593,12 +1629,15 @@ function test_current_host_java_runtime_runfiles() { if "$is_windows"; then echo "Skipping test on Windows" && return fi + add_rules_shell "MODULE.bazel" local -r pkg="${FUNCNAME[0]}" mkdir "${pkg}" || fail "Expected success" touch "${pkg}"/BUILD "${pkg}"/run.sh cat > "${pkg}"/BUILD < $repo/jni/BUILD < test/BUILD <java/main/BUILD < pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_java//java:java_test.bzl", "java_test") + java_library( name = "library", srcs = ["Library.java"], @@ -1935,6 +1988,10 @@ EOF mkdir -p other_repo/pkg cat > other_repo/pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_java//java:java_test.bzl", "java_test") + java_library( name = "library2", srcs = ["Library2.java"], @@ -2031,6 +2088,8 @@ EOF function test_header_compiler_direct_supports_release() { mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library(name = "a", srcs = ["A.java"], deps = [":b"]) java_library(name = "b", srcs = ["B.java"], javacopts = ["--release", "11"]) EOF @@ -2065,6 +2124,8 @@ function test_header_compiler_direct_supports_unicode() { local -r unicode="äöüÄÖÜß🌱" mkdir -p pkg cat << EOF > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library(name = "a", srcs = ["A.java"], deps = [":b"]) java_library(name = "b", srcs = ["${unicode}.java"]) EOF @@ -2081,7 +2142,9 @@ EOF function test_sandboxed_multiplexing() { mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain") + default_java_toolchain( name = "java_toolchain", source_version = "17", @@ -2109,6 +2172,8 @@ function test_sandboxed_multiplexing_hermetic_paths_in_diagnostics() { mkdir -p pkg cat << 'EOF' > pkg/BUILD load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain") +load("@rules_java//java:java_library.bzl", "java_library") + default_java_toolchain( name = "java_toolchain", source_version = "17", @@ -2146,9 +2211,12 @@ local_path_override( path = "lib_c", ) EOF + add_rules_java "MODULE.bazel" mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library(name = "a", srcs = ["A.java"], deps = [":b"]) java_library(name = "b", srcs = ["B.java"], deps = ["@c"]) EOF @@ -2163,7 +2231,11 @@ EOF cat << 'EOF' > lib_c/MODULE.bazel module(name = "lib_c") EOF + add_rules_java "lib_c/MODULE.bazel" cat << 'EOF' > lib_c/BUILD +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_import.bzl", "java_import") + java_library(name = "c_pregen", srcs = ["C.java"]) java_import(name = "c", jars = ["libc_pregen.jar"], visibility = ["//visibility:public"]) EOF @@ -2186,9 +2258,13 @@ local_path_override( path = "lib_c", ) EOF + add_rules_java "MODULE.bazel" mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") + java_binary(name = "Main", srcs = ["Main.java"], deps = [":a"]) java_library(name = "a", srcs = ["A.java"], deps = [":b"]) java_library(name = "b", srcs = ["B.java"], deps = ["@c"]) @@ -2207,7 +2283,10 @@ EOF cat << 'EOF' > lib_c/MODULE.bazel module(name = "lib_c") EOF + add_rules_java lib_c/MODULE.bazel cat << 'EOF' > lib_c/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library(name = "c", srcs = ["C.java"], visibility = ["//visibility:public"]) EOF cat << 'EOF' > lib_c/C.java @@ -2229,9 +2308,12 @@ local_path_override( path = "lib_c", ) EOF + add_rules_java "MODULE.bazel" mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library(name = "a", srcs = ["A.java"], deps = [":b"]) java_library(name = "b", srcs = ["B.java"], deps = ["@c"]) EOF @@ -2250,7 +2332,10 @@ EOF cat << 'EOF' > lib_c/MODULE.bazel module(name = "lib_c") EOF + add_rules_java lib_c/MODULE.bazel cat << 'EOF' > lib_c/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library(name = "c", srcs = ["C.java"], visibility = ["//visibility:public"]) EOF cat << 'EOF' > lib_c/C.java @@ -2264,6 +2349,8 @@ EOF function test_one_version() { mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_binary.bzl", "java_binary") + java_binary( name = "a", srcs = ["A.java"], @@ -2283,6 +2370,8 @@ public class A extends B { EOF mkdir -p pkg/b1 cat << 'EOF' > pkg/b1/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "b1", srcs = ["B.java"], @@ -2296,6 +2385,8 @@ public class B { EOF mkdir -p pkg/b2 cat << 'EOF' > pkg/b2/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "b2", srcs = ["B.java"], @@ -2320,6 +2411,7 @@ function test_one_version_allowlist() { mkdir -p pkg cat << 'EOF' > pkg/BUILD load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain") +load("@rules_java//java:java_binary.bzl", "java_binary") default_java_toolchain( name = "java_toolchain", @@ -2350,6 +2442,8 @@ public class A extends B { EOF mkdir -p pkg/b1 cat << 'EOF' > pkg/b1/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "b1", srcs = ["B.java"], @@ -2365,6 +2459,8 @@ public class B { EOF mkdir -p pkg/b2 cat << 'EOF' > pkg/b2/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "b2", srcs = ["B.java"], @@ -2402,6 +2498,8 @@ EOF function test_single_jar_does_not_create_empty_log4JPlugins_file() { mkdir -p pkg cat << 'EOF' > pkg/BUILD +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "b", resources = ["foo.txt"], diff --git a/src/test/shell/bazel/bazel_java_test_defaults.sh b/src/test/shell/bazel/bazel_java_test_defaults.sh index 11c962d2d64763..3b30e0e9f87e7a 100755 --- a/src/test/shell/bazel/bazel_java_test_defaults.sh +++ b/src/test/shell/bazel/bazel_java_test_defaults.sh @@ -55,17 +55,17 @@ esac # Java source files version shall match --java_language_version_flag version. # Output class files shall be created in corresponding version (JDK 8, class version is 52). function test_default_java_toolchain_target_version() { + add_rules_java "MODULE.bazel" mkdir -p java/main cat >java/main/BUILD <java/main/BUILD <java/main/BUILD < pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") + constraint_setting( name = "exotic_constraint", ) @@ -307,8 +314,11 @@ EOF } function test_java_library_compiles_for_any_platform_with_local_jdk() { + add_rules_java "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") + platform(name = "exotic_platform") java_library( name = "foo", @@ -330,8 +340,11 @@ EOF } function test_java_library_compiles_for_any_platform_with_remote_jdk() { + add_rules_java "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") + platform(name = "exotic_platform") java_library( name = "foo", @@ -353,8 +366,10 @@ EOF } function test_non_executable_java_binary_compiles_for_any_platform_with_local_jdk() { + add_rules_java "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_binary.bzl", "java_binary") platform(name = "exotic_platform") java_binary( name = "foo", @@ -379,8 +394,10 @@ EOF } function test_non_executable_java_binary_compiles_for_any_platform_with_remote_jdk() { + add_rules_java "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_binary.bzl", "java_binary") platform(name = "exotic_platform") java_binary( name = "foo", @@ -406,8 +423,11 @@ EOF } function test_executable_java_binary_fails_without_runtime_with_local_jdk() { + add_rules_java "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_binary.bzl", "java_binary") + platform(name = "exotic_platform") java_binary( name = "foo", @@ -437,8 +457,11 @@ EOF } function test_executable_java_binary_fails_without_runtime_with_remote_jdk() { + add_rules_java "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_java//java:java_binary.bzl", "java_binary") + platform(name = "exotic_platform") java_binary( name = "foo", diff --git a/src/test/shell/bazel/bazel_localtest_test.sh b/src/test/shell/bazel/bazel_localtest_test.sh index 5a387d47f5854c..15071308e7afe7 100755 --- a/src/test/shell/bazel/bazel_localtest_test.sh +++ b/src/test/shell/bazel/bazel_localtest_test.sh @@ -22,6 +22,7 @@ source "${CURRENT_DIR}/../integration_test_setup.sh" \ || { echo "integration_test_setup.sh not found!" >&2; exit 1; } function test_run_local() { + add_rules_shell "MODULE.bazel" mkdir -p dir cat > emptyfile @@ -37,6 +38,8 @@ EOF chmod +x dir/test_local.sh cat < dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "localtest", srcs = [ "test_local.sh" ], diff --git a/src/test/shell/bazel/bazel_proto_library_test.sh b/src/test/shell/bazel/bazel_proto_library_test.sh index b3b9f55a3d0071..63d51a43b8d746 100755 --- a/src/test/shell/bazel/bazel_proto_library_test.sh +++ b/src/test/shell/bazel/bazel_proto_library_test.sh @@ -60,8 +60,8 @@ function write_setup() { fi cat > x/person/BUILD << EOF -package(default_visibility = ["//visibility:public"]) $include_macro +package(default_visibility = ["//visibility:public"]) $proto_library_name( name = "person_proto", srcs = ["person.proto"], @@ -304,6 +304,9 @@ function write_java_library() { # should depend on x/foo:foo mkdir -p java/com/google/src cat > java/com/google/src/BUILD << EOF +load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "top", srcs = ["A.java"], @@ -338,6 +341,8 @@ EOF function test_legacy_proto_library_include_well_known_protos() { mkdir -p a cat > a/BUILD < java/proto/BUILD << EOF load(':my_rule_with_aspect.bzl', 'my_rule_with_aspect') +load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") +load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") + my_rule_with_aspect( name = 'my_rule', deps = [':my_java_proto'] @@ -441,13 +449,13 @@ EOF } function test_strip_import_prefix() { - write_setup "proto_library" "strip_import_prefix = '/x/person'" "" + write_setup "proto_library" "strip_import_prefix = '/x/person'" 'load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library")' bazel build --verbose_failures //x/person:person_proto > "$TEST_log" || fail "Expected success" } function test_strip_import_prefix_fails() { # Don't specify the "strip_import_prefix" attribute and expect failure. - write_setup "proto_library" "" "" + write_setup "proto_library" "" 'load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library")' bazel build //x/person:person_proto >& "$TEST_log" && fail "Expected failure" expect_log "phonenumber/phonenumber.proto: File not found." } @@ -461,7 +469,7 @@ function test_strip_import_prefix_macro() { # Fails with "IllegalArgumentException: external/lcocal_jdk in # DumpPlatformClassPath.dumpJDK9AndNewerBootClassPath.java:67 function DISABLED_test_strip_import_prefix_with_java_library() { - write_setup "proto_library" "strip_import_prefix = '/x/person'" "" + write_setup "proto_library" "strip_import_prefix = '/x/person'" 'load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library")' write_java_library bazel build //java/com/google/src:top \ --strict_java_deps=off > "$TEST_log" || fail "Expected success" @@ -493,9 +501,13 @@ EOF } function test_cc_proto_library() { + add_rules_cc "MODULE.bazel" mkdir -p a cat > a/BUILD < a/BUILD < a/BUILD < h/BUILD < h/BUILD <"${pkg}/BUILD" < BUILD <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") + java_library( name = "math", srcs = ["src/main/com/example/Math.java"], @@ -72,7 +74,7 @@ EOF } function test_override_with_empty_java_tools_fails() { - + add_rules_java "MODULE.bazel" touch emptyfile zip -q "${RUNFILES_DIR}/empty.zip" emptyfile @@ -86,6 +88,7 @@ function test_override_with_empty_java_tools_fails() { } function test_build_without_override_succeeds() { + add_rules_java "MODULE.bazel" override_java_tools "${RULES_JAVA_REPO_NAME}" "released" "released" setup_java_library_target diff --git a/src/test/shell/bazel/bazel_rules_java_test.sh b/src/test/shell/bazel/bazel_rules_java_test.sh index 969260de662ccd..5f0154614710d2 100755 --- a/src/test/shell/bazel/bazel_rules_java_test.sh +++ b/src/test/shell/bazel/bazel_rules_java_test.sh @@ -68,6 +68,8 @@ function test_java_library_extension_support() { cat >java/java_library.bzl < a/BUILD < mypkg/BUILD < mypkg/BUILD < BUILD <pkg/BUILD +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") + cc_library( name = "a", srcs = ["a.cc"], @@ -323,10 +340,13 @@ local_repository( path = "other_repo", ) EOF + add_rules_shell "MODULE.bazel" mkdir other_repo && cd other_repo touch REPO.bazel mkdir package cat > package/BUILD < py/BUILD < pkg/BUILD.bazel <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") +load("@rules_shell//shell:sh_library.bzl", "sh_library") +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_library( name = "library", srcs = ["library.sh"], @@ -748,6 +776,10 @@ EOF mkdir -p other_repo/pkg cat > other_repo/pkg/BUILD.bazel <<'EOF' +load("@rules_shell//shell:sh_library.bzl", "sh_library") +load("@rules_shell//shell:sh_test.bzl", "sh_test") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + sh_library( name = "library2", srcs = ["library2.sh"], @@ -1004,9 +1036,12 @@ function test_bash_runfiles_current_repository_test_nobuild_runfile_links() { function test_bash_runfiles_current_repository_action_binary_main_repo() { setup_module_dot_bazel "MODULE.bazel" + add_rules_shell "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + genrule( name = "gen", outs = ["out"], @@ -1047,9 +1082,12 @@ EOF function test_bash_runfiles_current_repository_action_generated_binary_main_repo() { setup_module_dot_bazel "MODULE.bazel" + add_rules_shell "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + genrule( name = "gen", outs = ["out"], @@ -1103,6 +1141,7 @@ local_repository( path = "other_repo", ) EOF + add_rules_shell "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' @@ -1119,6 +1158,8 @@ EOF mkdir -p other_repo/pkg cat > other_repo/pkg/BUILD.bazel <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + sh_binary( name = "binary", srcs = ["binary.sh"], @@ -1158,6 +1199,7 @@ local_repository( path = "other_repo", ) EOF + add_rules_shell "MODULE.bazel" mkdir -p pkg cat > pkg/BUILD.bazel <<'EOF' @@ -1174,6 +1216,8 @@ EOF mkdir -p other_repo/pkg cat > other_repo/pkg/BUILD.bazel <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + genrule( name = "copy_binary", outs = ["gen_binary.sh"], diff --git a/src/test/shell/bazel/bazel_sandboxing_test.sh b/src/test/shell/bazel/bazel_sandboxing_test.sh index 02981ade9f3bc6..42e36bcf888eb8 100755 --- a/src/test/shell/bazel/bazel_sandboxing_test.sh +++ b/src/test/shell/bazel/bazel_sandboxing_test.sh @@ -132,11 +132,14 @@ function test_can_enable_pseudoterminals() { return 0 fi + add_rules_python "MODULE.bazel" cat > test.py <<'EOF' import pty pty.openpty() EOF cat > BUILD <<'EOF' +load("@rules_python//python:py_test.bzl", "py_test") + py_test( name = "test", srcs = ["test.py"], @@ -179,7 +182,7 @@ EOF } function test_sandbox_expands_tree_artifacts_in_runfiles_tree() { - + add_rules_shell "MODULE.bazel" cat > def.bzl <<'EOF' def _mkdata_impl(ctx): out = ctx.actions.declare_directory(ctx.label.name + ".d") @@ -217,6 +220,7 @@ EOF cat > BUILD <<'EOF' load("//:def.bzl", "mkdata") +load("@rules_shell//shell:sh_test.bzl", "sh_test") mkdata(name = "mkdata") @@ -325,8 +329,11 @@ EOF function setup_tmp_hermeticity_check() { local -r tmpdir=$1 + add_rules_cc "MODULE.bazel" mkdir -p test cat > test/BUILD <<'EOF' +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") + cc_binary( name = "create_file", srcs = ["create_file.cc"], @@ -706,8 +713,11 @@ function test_hermetic_tmp_under_tmp { local_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:local.bzl", "local_repository") local_repository(name="repo", path="${temp_dir}/repo") EOF + add_rules_shell "MODULE.bazel" cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + genrule( name = "g", outs = ["go"], diff --git a/src/test/shell/bazel/bazel_symlink_test.sh b/src/test/shell/bazel/bazel_symlink_test.sh index 42570e9bf736db..65b182aa04e9bc 100755 --- a/src/test/shell/bazel/bazel_symlink_test.sh +++ b/src/test/shell/bazel/bazel_symlink_test.sh @@ -70,6 +70,7 @@ function expect_symlink() { } function set_up() { + add_rules_python "MODULE.bazel" mkdir -p symlink touch symlink/BUILD cat > symlink/symlink.bzl < symlink_helper/BUILD < dir/test.sh @@ -55,6 +56,8 @@ EOF chmod +x dir/test.sh cat < dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", srcs = [ "test.sh" ], @@ -83,6 +86,7 @@ function test_3_local_jobs() { # TODO(#2228): Re-enable when the tmpdir creation is fixed. function DISABLED_test_tmpdir() { + add_rules_shell "MODULE.bazel" mkdir -p foo cat > foo/bar_test.sh <<'EOF' #!/bin/sh @@ -90,6 +94,8 @@ echo TEST_TMPDIR=$TEST_TMPDIR EOF chmod +x foo/bar_test.sh cat > foo/BUILD < foo/testenv.sh <<'EOF' #!/bin/sh @@ -128,6 +135,8 @@ echo "ws: $TEST_WORKSPACE" EOF chmod +x foo/testenv.sh cat > foo/BUILD < foo/testenv.sh <<'EOF' #!/bin/sh @@ -152,6 +162,7 @@ echo "ws: $TEST_WORKSPACE" EOF chmod +x foo/testenv.sh cat > foo/BUILD < foo/BUILD + cat > foo/BUILD <& "${TEST_log}" || fail "Test failed" @@ -228,6 +243,7 @@ EOF function test_run_under_external_label_with_options() { mkdir -p testing run || fail "mkdir testing run failed" cat < run/BUILD +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") sh_binary( name='under', srcs=['under.sh'], visibility=["//visibility:public"], @@ -249,6 +265,7 @@ EOF chmod u+x testing/passing_test.sh cat < testing/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "passing_test" , srcs = [ "passing_test.sh" ]) @@ -261,6 +278,7 @@ local_repository( path = "./run", ) EOF + add_rules_shell "MODULE.bazel" bazel test //testing:passing_test --run_under='@run//:under -c' \ --test_output=all >& $TEST_log || fail "Expected success" @@ -271,8 +289,10 @@ EOF } function test_run_under_label_with_options() { + add_rules_shell "MODULE.bazel" mkdir -p testing run || fail "mkdir testing run failed" cat < run/BUILD +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") sh_binary( name='under', srcs=['under.sh'], visibility=["//visibility:public"], @@ -292,6 +312,7 @@ EOF chmod u+x testing/passing_test.sh cat < testing/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "passing_test" , srcs = [ "passing_test.sh" ]) @@ -307,8 +328,12 @@ EOF # This test uses "--ignore_all_rc_files" since outside .bazelrc files can pollute # this environment. Just "--bazelrc=/dev/null" is not sufficient to fix. function test_run_under_path() { + add_rules_shell "MODULE.bazel" mkdir -p testing || fail "mkdir testing failed" - echo "sh_test(name='t1', srcs=['t1.sh'])" > testing/BUILD + cat > testing/BUILD < testing/t1.sh #!/bin/sh exit 0 @@ -372,10 +397,12 @@ local_repository( path = "../run", ) EOF + add_rules_shell "MODULE.bazel" mkdir -p testing || fail "mkdir testing failed" cat < testing/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "passing_test" , srcs = [ "passing_test.sh" ]) @@ -396,6 +423,7 @@ EOF } function test_test_timeout() { + add_rules_shell "MODULE.bazel" mkdir -p dir cat < dir/test.sh @@ -408,6 +436,8 @@ EOF chmod +x dir/test.sh cat < dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", timeout = "short", @@ -430,6 +460,7 @@ function test_runs_per_test_detects_flakes() { # Directory for counters local COUNTER_DIR="${TEST_TMPDIR}/counter_dir" mkdir -p "${COUNTER_DIR}" + add_rules_shell "MODULE.bazel" for (( i = 1 ; i <= 5 ; i++ )); do @@ -448,6 +479,8 @@ exit \$((i != $i)) EOF chmod +x test$i.sh cat < BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test(name = "test$i", srcs = [ "test$i.sh" ]) EOF bazel test --spawn_strategy=standalone \ @@ -462,7 +495,7 @@ EOF # Tests that the test.xml is extracted from the sandbox correctly. function test_xml_is_present() { mkdir -p dir - + add_rules_shell "MODULE.bazel" cat <<'EOF' > dir/test.sh #!/bin/sh echo HELLO > $XML_OUTPUT_FILE @@ -472,6 +505,8 @@ EOF chmod +x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", srcs = [ "test.sh" ], @@ -486,6 +521,7 @@ EOF function write_test_xml_timeout_files() { mkdir -p dir + add_rules_shell "MODULE.bazel" cat <<'EOF' > dir/test.sh #!/bin/bash @@ -504,6 +540,8 @@ EOF chmod +x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", srcs = [ "test.sh" ], @@ -560,6 +598,7 @@ function test_xml_is_present_when_timingout_split_xml() { # Tests that the test.xml and test.log are correct and the test does not # hang when the test launches a subprocess. function test_subprocess_non_timeout() { + add_rules_shell "MODULE.bazel" mkdir -p dir cat <<'EOF' > dir/test.sh @@ -572,6 +611,8 @@ EOF chmod +x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", timeout = "short", @@ -594,6 +635,7 @@ EOF # Check that fallback xml output is correctly generated for sharded tests. function test_xml_fallback_for_sharded_test() { + add_rules_shell "MODULE.bazel" mkdir -p dir cat <<'EOF' > dir/test.sh @@ -605,6 +647,8 @@ EOF chmod +x dir/test.sh cat < dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", srcs = [ "test.sh" ], @@ -649,6 +693,7 @@ EOF function test_always_xml_output() { mkdir -p dir + add_rules_shell "MODULE.bazel" cat < dir/success.sh #!/bin/sh @@ -662,6 +707,8 @@ EOF chmod +x dir/{success,fail}.sh cat < dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "success", srcs = [ "success.sh" ], @@ -731,7 +778,9 @@ function test_detailed_test_summary_for_passed_test() { # This test uses "--ignore_all_rc_files" since outside .bazelrc files can pollute # this environment. Just "--bazelrc=/dev/null" is not sufficient to fix. function test_flaky_test() { + add_rules_shell "MODULE.bazel" cat >BUILD < dir/test.sh #!/bin/bash @@ -829,6 +879,7 @@ EOF chmod +x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "test", srcs = ["test.sh"], @@ -973,6 +1024,7 @@ function test_undeclared_outputs_unzipped_then_zipped() { function test_undeclared_outputs_annotations_are_added() { mkdir -p dir + add_rules_shell "MODULE.bazel" cat <<'EOF' > dir/test.sh #!/bin/sh @@ -985,6 +1037,8 @@ EOF chmod +x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", srcs = [ "test.sh" ], @@ -1009,6 +1063,7 @@ diff expected_annotations "$annotations" > d || fail "$annotations differs from function test_no_zip_annotation_manifest_when_no_undeclared_outputs() { mkdir -p dir + add_rules_shell "MODULE.bazel" cat <<'EOF' > dir/test.sh #!/bin/sh @@ -1019,6 +1074,8 @@ EOF chmod +x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = "test", srcs = [ "test.sh" ], @@ -1038,10 +1095,12 @@ EOF function test_test_with_nobuild_runfile_manifests() { mkdir -p dir + add_rules_shell "MODULE.bazel" touch dir/test.sh chmod u+x dir/test.sh cat <<'EOF' > dir/BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = 'test', srcs = ['test.sh'], @@ -1059,10 +1118,12 @@ local_repository( path = "./a", ) EOF + add_rules_python "MODULE.bazel" mkdir -p a touch a/REPO.bazel cat <<'EOF' > a/BUILD +load("@rules_python//python:py_test.bzl", "py_test") py_test( name = 'x', srcs = ['x.py'], @@ -1079,7 +1140,10 @@ EOF } function test_xml_output_format() { + add_rules_python "MODULE.bazel" + cat <<'EOF' > BUILD +load("@rules_python//python:py_test.bzl", "py_test") py_test( name = 'x', srcs = ['x.py'], @@ -1096,7 +1160,10 @@ EOF } function test_shard_status_file_checked() { + add_rules_shell "MODULE.bazel" cat <<'EOF' > BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") + sh_test( name = 'x', srcs = ['x.sh'], @@ -1118,7 +1185,9 @@ EOF } function test_premature_exit_file_checked() { + add_rules_shell "MODULE.bazel" cat <<'EOF' > BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = 'x', srcs = ['x.sh'], diff --git a/src/test/shell/bazel/remote/remote_build_event_uploader_test.sh b/src/test/shell/bazel/remote/remote_build_event_uploader_test.sh index 21ef8cd2731399..8009c31049ac1f 100755 --- a/src/test/shell/bazel/remote/remote_build_event_uploader_test.sh +++ b/src/test/shell/bazel/remote/remote_build_event_uploader_test.sh @@ -425,8 +425,10 @@ EOF } function test_upload_minimal_upload_testlogs() { + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/rule.bzl <<'EOF' def _gen_output_dir_impl(ctx): @@ -169,6 +175,7 @@ gen_output_dir = rule( ) EOF cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") package(default_visibility = ["//visibility:public"]) load("//a:rule.bzl", "gen_output_dir") diff --git a/src/test/shell/bazel/remote/remote_execution_test.sh b/src/test/shell/bazel/remote/remote_execution_test.sh index 2de8cd6de97477..da810bf3d3a2cd 100755 --- a/src/test/shell/bazel/remote/remote_execution_test.sh +++ b/src/test/shell/bazel/remote/remote_execution_test.sh @@ -307,8 +307,10 @@ EOF } function test_cc_binary() { + add_rules_cc "MODULE.bazel" mkdir -p a cat > a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD < a/BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "sleep", timeout = "short", @@ -828,8 +850,10 @@ EOF } function test_passed_env_user() { + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "user_test", timeout = "short", @@ -885,8 +909,10 @@ EOF # For example, if the network connection to the remote executor fails it shouldn't be displayed as # a test error. function test_display_non_testerrors() { + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "test", timeout = "short", @@ -1221,7 +1247,7 @@ EOF function test_nobuild_runfile_links() { mkdir data && echo "hello" > data/hello && echo "world" > data/world - + add_rules_shell "MODULE.bazel" cat > test.sh <<'EOF' #!/bin/bash set -e @@ -1231,6 +1257,8 @@ exit 0 EOF chmod 755 test.sh cat > BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") + filegroup( name = "runfiles", srcs = ["data/hello", "data/world"], @@ -2043,6 +2071,7 @@ EOF } function setup_exclusive_test_case() { + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/success.sh <<'EOF' #!/bin/sh @@ -2050,6 +2079,7 @@ exit 0 EOF chmod 755 a/success.sh cat > a/BUILD <<'EOF' +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = "success_test", srcs = ["success.sh"], @@ -2125,6 +2155,7 @@ function test_exclusive_test_wont_remote_exec() { # runfiles. The error we would see here without the flag would be "Cannot find # runfiles". See #4685. function test_java_rbe_coverage_produces_report() { + add_rules_java "MODULE.bazel" mkdir -p java/factorial JAVA_TOOLS_ZIP="released" @@ -2133,6 +2164,9 @@ function test_java_rbe_coverage_produces_report() { cd java/factorial cat > BUILD <<'EOF' +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_test.bzl", "java_test") + java_library( name = "fact", srcs = ["Factorial.java"], @@ -2412,10 +2446,14 @@ function test_cc_rbe_coverage_produces_report() { # Check to see if intermediate files are supported, otherwise skip. gcov --help | grep "\-i," || return 0 + add_rules_cc "MODULE.bazel" local test_dir="a/cc/coverage_test" mkdir -p $test_dir cat > "$test_dir"/BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + package(default_visibility = ["//visibility:public"]) cc_library( @@ -2547,10 +2585,15 @@ function test_cc_rbe_coverage_produces_report_with_llvm() { return 0 fi + add_rules_cc "MODULE.bazel" local test_dir="a/cc/coverage_test" mkdir -p $test_dir cat > "$test_dir"/BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + package(default_visibility = ["//visibility:public"]) cc_library( @@ -2681,8 +2724,11 @@ EOF } function test_async_upload_works_for_flaky_tests() { + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/BUILD < a/BUILD < other_repo/lib/BUILD <<'EOF' +load("@rules_cc//cc:cc_library.bzl", "cc_library") cc_library( name = "lib", srcs = ["lib.cpp"], @@ -3046,6 +3096,7 @@ EOF mkdir -p other_repo/test cat > other_repo/test/BUILD <<'EOF' +load("@rules_cc//cc:cc_test.bzl", "cc_test") cc_test( name = "test", srcs = ["test.cpp"], @@ -3185,6 +3236,7 @@ local_repository( path = "other_repo", ) EOF + add_rules_cc "MODULE.bazel" mkdir -p $repo touch $repo/REPO.bazel @@ -3193,6 +3245,9 @@ EOF # Use a comma in the target name as that is known to be problematic whith -Wl, # which is commonly used to pass rpaths to the linker. cat > $repo/lib/BUILD <<'EOF' +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") +load("@rules_cc//cc:cc_import.bzl", "cc_import") + cc_binary( name = "l,ib", srcs = ["lib.cpp"], @@ -3219,6 +3274,8 @@ EOF mkdir -p $repo/pkg cat > $repo/pkg/BUILD <<'EOF' +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") + cc_binary( name = "tool", srcs = ["tool.cpp"], @@ -3275,7 +3332,9 @@ function test_external_cc_binary_tool_with_dynamic_deps_sibling_repository_layou } function test_shard_status_file_checked_remote_download_minimal() { + add_rules_shell "MODULE.bazel" cat <<'EOF' > BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = 'x', srcs = ['x.sh'], @@ -3301,7 +3360,9 @@ EOF } function test_premature_exit_file_checked_remote_download_minimal() { + add_rules_shell "MODULE.bazel" cat <<'EOF' > BUILD +load("@rules_shell//shell:sh_test.bzl", "sh_test") sh_test( name = 'x', srcs = ['x.sh'], @@ -3555,6 +3616,7 @@ EOF } function setup_inlined_outputs() { + add_rules_shell "MODULE.bazel" mkdir -p a cat > a/input.txt <<'EOF' input @@ -3595,6 +3657,7 @@ my_rule = rule( EOF cat > a/BUILD <<'EOF' load("//a:defs.bzl", "my_rule") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") my_rule( name = "my_rule", diff --git a/src/test/shell/testenv.sh b/src/test/shell/testenv.sh index bec7644250a47a..5ff7965949b82a 100755 --- a/src/test/shell/testenv.sh +++ b/src/test/shell/testenv.sh @@ -476,6 +476,8 @@ function setup_javatest_support() { setup_javatest_common grep -q 'name = "junit4"' third_party/BUILD \ || cat <>third_party/BUILD +load("@rules_java//java:java_import.bzl", "java_import") + java_import( name = "junit4", jars = [ From fb10bf87fc14b8d44162845d3c06fa59e39f5e4d Mon Sep 17 00:00:00 2001 From: Arvind Shelke Date: Sun, 10 Aug 2025 18:57:21 +0530 Subject: [PATCH 2/4] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e9912415a5d4e0..21f84502685015 100644 --- a/README.md +++ b/README.md @@ -56,3 +56,4 @@ disclosure timeline. See [CONTRIBUTING.md](CONTRIBUTING.md) [![Build status](https://badge.buildkite.com/1fd282f8ad98c3fb10758a821e5313576356709dd7d11e9618.svg?status=master)](https://buildkite.com/bazel/bazel-bazel) + From f989632cc9ca935884baf5dbecdf9926abdd374a Mon Sep 17 00:00:00 2001 From: Arvind Shelke Date: Sun, 10 Aug 2025 19:00:23 +0530 Subject: [PATCH 3/4] Chair for referance --- WhatsApp Image 2025-08-09 at 10.41.44 (1).jpeg | Bin 0 -> 942329 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 WhatsApp Image 2025-08-09 at 10.41.44 (1).jpeg diff --git a/WhatsApp Image 2025-08-09 at 10.41.44 (1).jpeg b/WhatsApp Image 2025-08-09 at 10.41.44 (1).jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6766527c8bfe64b4e73783a1b7094f294416edda GIT binary patch literal 942329 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�Qk{7Tc1h8QQ$YRC$lKNMsC*Ow9D^V8_OE!xvS;Jd^7ls zk{nEq3y4gE9w1hUDg4VGlw@_Y0y01@V7a1}RVmabFQYo16yGiGEy8W%qSEG#JBrf< z#$}S`SaPliqrwIT2v2V7nTEH{^__PC*B;2i@fig_x{&nK=tSC7{ss9>p$(#FGGBQ@mdP9r@sw!S;}@@|iXoV9t!LgXzu%s#yEgOx;R5zj`C& z{^rZbHJK+y?I~(X1}5bfnt~YBNw9Nr3sA zC>Ip`cD#zht_OPA=4Wr|)Ii2xAE!KhG_c7=+uBkfZt@l|P!?+EF!4QG5MCfZ2NK-V zFOW=m;EbMBnd3!d@g~0eoiCEQYK^EVeM{wab`kgh`)ngZ?PjS0sw==|Y$f_*)bx-j z1xT&5_oxUK6)j*lQxE~YKF~Sw!|K11s9lR;I$4|}z3tSkH$Duz_p@-9@XLFH315@>u9>!jykCbV&D$%-W>r-qSND7W z6gKu`G?W(0uZi5+0Via+a?Ph-Z@XmpQ#V1(6Gi=P&Er1``s%GP?t^#!`QfRBehdh} z%}I@WwD*VZ%(!N@prf+y4+fUlF9$VxOvi6a?nw%-PmM%(5|ci~t0F z1tsWh3PGWKYtGr9Tl?@|+o1ov7#<|ZZ{v5c?*4Owvnyi5)}6wz*Xw^uIM{W|`fc~a z4PzzFA{Q3*_4~htWv}wQ#?YLn ze%7^80hNA%D7ANrL(*HRxsn~*#fmZpJ1!q)nZ^5R$3rm#z+o9 z3F?BtTb$-JV-ZwbXo>L>=AuI9uRj)-mzK@mT%`?3)b7aCTblNYq|!$K)WOB{Cf|S z{!{*f{Kma`0PT~rK#gtc`ptPO|C39zbNxT~YNS5b8LPr}hn{pTJWlU8%Wvc@J@p$c z$hNz;?6a-c0v)R^?OxtUb{DiYlik5<*Y6#ui~?0co3J=T3(7#yvqCz_!oG;_*ZNZ7 zWEtvB1jSU7AxWrT67DS0)9*Miaeb)a@Q(OQtsB6gWyEOvsd#N~c4JO~d3uLztWM!ST0vV7nQ~-@l#(n zBGO)|5gd> z384)L?9vmDwgl?OJK|HH$f#W-=Qo^K#Tlr}UA6X1PSn}(rmLxr=W`xgyc0oFLJjag zyf-iN8svTQ5o^D&NKfAFwvC;7o!j0V_i|?GwP0)f!V0*6qt1MKKrnJ*U@kxPvUuTg z*xsp*GpYH?P=U_4TAn()_@(u3#N_Cu7d*_*b7Eif)$?ANlc#@J(;_S)x*O6aFhV3< zoqF1H4JXDIb7H8K8mpx=2MPz71PUkH2+K{G*{*PSG=Sf|3a^70`E!0+3tLgoo%|#{ z8{Z!bKuL(@vDiUQE5Y=}JWdQfujMG!QeY2Vq8ybmtaz_sDMrqK{}@*%XQ`s2Bpb7s zDM!sRibfIRHF=vY2ci;8K@1H1DIO*j1$ZNuRqC&^G6+m+ledeRg8GUIqdqNW5_n)!ySSoRbga z%czV^f~$v|mqz2XXbEb9SvHq{?TGPqL0Wu%QRpBD%T6*ug_+!(aO%Lw;YQ~t@4tLc zf9dJ9r_RH#_JrN@aq#w5zL>c8w+~F$=OG<-z|PGbb#ri;J$rxtG5p!Tk`y-(h*OG7+)x*Z6=x)c>Vicd54xuI~@R3Y}I$C{#S}Pm4_-?&-xfU#Z zmJwAVuh{4tquWBxp&GNq4W6^yWtBe$Q~jILTWJ~Kk)1N74NtauG;VER4^xg+b+XHi=(_tMk^Q(MCk>tvH5z?h;QVe zqH)Oi$TmC%tb4GrOm0pA{ZGfx)ZqEGfz?5bnoEnkz4>k8+`0UVOD`d_Q?9Rm9-2C^ z%m2Wa;pu|?FW-MT)!`GRoX@9uyi)H-n|G5bKM&danws~|P7Lk~>nA_>*S0+;7Q+^a zhX1oI%LZQMDsHB=Q$zgB-MBO<1L!c3#m8cezHu&rp*V24km0Sw zrEx^ZBm$yd690Dz{3Mx0hNE$huQ1AE4HUB6B*SHGmdTBxrkgEJQ|nO$!sxXClO!O^ z%^>M(k5y1On$Nz_F#TEz;Yg4p>li3G*`TNo)Z@3~V)Y;q)j<2J$rIT$wkv50&`v$! zH;dq#7a@Q7*H1t5Gc9m!+B(dxKqK$f9&XQ)kC$v#_wFq@Ia`dgdd%SXN}`s-y~mG1~{C0B?NyNinbZp=0O-09Gr*HeSnb{5@x`v}1jE z*}`{AKe@EHI@Q_r?Q@>}t00aceXebPcznhFd2M{=;f;d)_aE}T$30&k8gH-3Ty<$= z$l%t(Qeb-1tB)AAo4|^})BzMk+hmF5w%kxaG9_jZ$nZdyr*-TL?9=0q3zy4n>MFTR z#^2bnHJO{}UmWPAmJvE-vd6ACpF>RZc;XBqXSl@;`j`6o^p+ZK z2DheVjf4t=?EorAVnr0xMb!LdM?}&f){rFd{B2@r=jn<|vuoB>MC^NVL!x!+x?ZQx zcF#psOo9LGeBk88@UZQ&imtwD{_Ud=PnXR!O;wz1%hvWMc-#FvU+?>kPqN(_|NY9!mO<{LH?&dys=F==e`UL z+JES)1z}dGLR8F=GFHY1o?zT*TgtyT%;gnN3Dyd#t zv;PT7C2tKMkBBFW@bW_Bhj$+zg8EYdm!T>;5nZd~tPNqHh$xFDgP)@YCQzxQz?_M% zV}_GzoZy6^>?e}v9n1m6`US#J>Cq7HAj!##L&k6dIcYC>5^vOmaV42oWv<#r$mBbbbAO_Q0! zYC_sYypC$G@IC z4Hojz7;xAcD3KX{=KGaDrI&9#r#}ihLj**$;#*#Q^+IJ45uLmfM+2UpWLP>())W z^bYAav|P1DTAoq)`F2A&vh)-f%<@1ZOEQPJ74kDRG6BbS)#s#e=KShId+Xl$VU6kP zey_>i>5ANaq5d~R2X>yxU9~T1-+cbQr0^S2HB0SI=l=1fKTf#%Rn0Y?j)ky=`M#No zQv=oEEY;S2Vu^j6wm4le@R$X{)ciA!-+uQ3T1kP6#P=RnS6_cqNT*iL!PW*PtTlOs z_5n4`En!m8yjrfL134|gfF3Bsbe(i2VW_gWwbCIHZ?979sJGfpE-lCQ=DK497e>@X z#obHxD%4JiCtaXc&k2YX_d`HN2tR|=ieg4Tt5L6kn^#Lc3R%fUqU9VpS^>G>=4r4c zkmW8aWs_$K6{QjlXe3DQUjou`f2-zC6;;~c@w4G9p6R==Cu6ki5M%zPs(SPENK%MP zBeDz9G|6xOX5Q?f?YX@5Dzx&wSCPEd2CU$+ouNpPb8tB&3ht{ny<|n~D~^0^oKkbbqLkg}7li+toPj zFnu^NkWI98OPDa}+4i{6AOiy=a=wDLYt zLEpqO7t5QNN_xH9bEvEpkvJGg9AaPo7nU>{B2C!c$eLpwf>LsPeER5uZEQ9>WONU0 zNlN!=7I;gQZ{JlVR320R|$w(D89(OGaI%o0dJ=}m7v<+4qTby$BLUGBTTTsuR9=oyhkJ6F#j$QZ0FCD00MjiU?=!lU2py=t~1<%E) zginND2vfqg+n^V9WOme~4Msfb-BYz{{~kdGJf$X*jC)Tw1La6ni%Mi!SpWS$#xPSx zv}+lS(YIWDQ>^IDKHX<+mZ4a_qHHeizO;K(y*Zw4!oz~KxwSH#TT9d+Z@e6oHqI#V zZ(!r#sdA8;kU~_71yHfjQs77)le-@KiSt!de3qMcB3Q?hH4I~)^vw{M@`EqlDyS?e zU%d_r`<`wqm7w6ohGizg)W{>Bb=-JrfDl*_ z9ofIrPqn>f^12bD?eqcou4$bXc)tA29(%YpZg(wznvC55lq z(AA?p#+Frm95QqaL%J?M4|D)L7rHapkv{b>A3qvjH9}6jonT5{cJynM;lF}cn^tPVkrZac& z#A=d{!Q4Hcz;FC8Zui@QyzdW|mOsio+!0TX#;Aj5gH<_>{EMs9*=M$$PFWohH$6F) zwCa!VwddZuy#D+18%p~}`sPlWriQv+r_C4f?UK8OH$IL~&vZ>@H%hAO3h{Wu7WWe&yjcP@sG(7Fi)-g91h*_u(MRj9xuD8_+SO)kG(_ zIOJxHN}31dE4}k@N8N)bzrLQb6)6~o#OW?j4=YsLK~%8xVDG>)ACQRL(Pt5>{Y~|P zC2_?o(UN0G!DY``TUMJ~AS+t+MfmRLS4MmUWs{?7qtV-*FXWb>5Q}*tE}IF=g=Ke8 z+X2B2+UB^qDEY*2Qk(s&HN38W@lJh|5E%CIXV*k)-_r}8yVX;ii~EBfR8)-p=-*!T zRr;vFc%AH~MXWtJV>WOUtV@A@tgbDzXk3_nBO-m#xqGhs*CRDv7CD{@`a2DLcDa$A zh%t+5Ikuj90jIjML7X)?nj<)AQeYS;+`Db+5~%leLmE5Cho^7nioA!c^yQoD)dLrn zN3E?={FqrBqE&0EPXcIsNwEn9;y6~}Uz}UFZu*>~pi{H)u-a0}NgdvTqqW1(2LQFO2wpa7|k>zF6LM7N6OVS@lpj z)#P=lM;B_lW=%UN6zx5jBwC(APfd!;!qg%(Fn|>wC4=FUZ4zC!4>NY0122uXNRL4O zX-qknuBxrD3#Uj)%F(~TSkU|LyL(pKe?AN_}EpJHN{Fo1=pV=qmv_ z$yo^hb-d#1u&m45RPQ@a!CccIEbPV9J<>2yt5a=HdwQdBTbp{S=8>`YjRgNUyrIQ3 zX^4>=xu`jkBEAp03B4N(3UTHOId&!`30-FPFBTx&X|DJ&EnQFz5cLIMq;z!7aVY=2 z3P!~}9K0z@q?p94$t`IkyL=@WroKM9HnzCFwZ_+oNn48YnlNfP9_Apt$!-3-AU_)X zy+_R`yGSqf>nvD-i?(T$&;^L~GPe?l$`Rq9&5zvLqG%wS^j2QOk$;{YoGmPD{&3~g zyTbSxg$}`w%}#?eb@nIycVUZ6h4wx*5Y2094ehf>Z7gbP4&eGwbt-B-r?HV>mBrn| zY*?KSO;3UmBvs{W6~oB_R%*`Zp8PnskSO!f+}!g61G}E(SG;=Cd&>Fh;qv`=e4J(R z=_=Z1ZL-781J3@M9ql#G-?Cmydh22E?x~?p%r}D^qrE4TRehCIdF$tzh4S^^Iq3n^ zv?h1b36tjMMt@;7>(=$$G*3y=Mt8Ji0tj_@cfg4|x2pDqvI9JH?J!)8r!I{W2AdS# zfpuJz1WE^dSqdXKNhP*mW`B)2u_jgt?Zr8L*{ogdG#vw|Iionu z9K|>cPC+a4>PtqfE!nxi|9aeD;SM&~)i+3|Nlr7KV)&a>Ql5T*s0unZxUkiSg0 zpw_y_Y`i~gbUL&6U9(2rojM<9aZTE+dS*>j_|!*x1K$Xl@0-5?_J7w@E5*)JR~z|X z%F3f!YtB8ZC@zokzQj-Kg<3XZo6n3bZ%2%_As{<$_L~zovybpj4gU4h2=*=1U?DUq z*&0Mj^eQzHQN0G_wB<$Wqd*hYz(`^I*ljtki4Z`|-MY!owL<3#sN7CXlP;5_U5K=( z_4ELQmVQC3rMpJS4Lr3WF|A*Yp-CbBHpq9*1U9PGqY^13N2?8ykK{$tAB@Z zbvxhtQ=A~9rgMwPtyH?pJsJpxiHrntrTmTG>gKxJ{}GRr`a$XS>dV&)lnoO(R8sxgEosFHLT7UFY9W5;E=RS$0tJ>OpWQ{3jDKbj@B%KQa2o-%{_L98XZqX$NMNt!WpMHZKHQhojDH z=sLoDwHTs>ST{4rMiJ|a#aAM8qdQ?FTN7vwjk-{6kHutd_t3?Y(*s>)-&7^7mdNO~ zvZqHavs!vXmZ%;t3IH$0H?E?s^XkwyL6`S70$T$0R6w z=e_61XZez;F>=O&yOGU~_0JJOwd^Dpf7j}qR9 z+A#P=eec(AgKoNQ)6#Y$_Y+vJ1qbiJ|W(@$h+Dk;e(I0-Nl=#hI&V2eSm$~T3`F&av(^l3fjyIR$$ z_l?}BhM^vgP`#jIJ;w-idLkfC5rod;BtQh->N`S|2TE^ANH30On@F)pK5m7OSh^)sb zdI}6o6l*g1Bgd1zU#LqluAupsxz^=npm~BS!>cF2+kHiA@X6n=&JHm*6g?E6`MbpZ zah<3+KA$@_Ssv5es=E{RQ~I|9p~bQGJV^$h^V(;s?iP@L>tBoStw}f-wuLs91)T_iem|KaEhz>L|4Q&?7HOW9BdJ!;__}W?_ zY)^0kG^_QjCM6?ctibZeP&uvq!Ieus2{oj5b!(}juF!Tws7UU4+-f2h-MEguO zg~>2Ex~FnRM0B+7BJw+-cki>zI?NoqIkZX$$JF_ptB^?=se$aP3c_#!Q|Twb??`u% zM#1H*B%A%sQsfvHw6Rj}PWnZbK6O}^tOX%U6KXvMaXwbBo~h_sBf^S7;?vu+fanl6 z&J#P!TbVj*vPObzUPkFAeW?WHZKpZMTf1I1k$b z;^wHksMIc~N>IM3zu~W|T+GRMGOz4DSbr16$pRx_%Vg-b zN|>uv-Yx;(+Bo3DflBRg?RAtGX~%I@WgEj`0+xVH!Zg< zvnS1;sf3y3+W_}0%U-qgALj)Tsb8=6ye5o&?;-oy>C&dwFNY)vxhg(foaJc;|M;tz zrNLK@@b?FczgS!ddn?dmN5ZE&{vh8y6Ddud<%tR-Gr%Gz@nLJ_V!eT!!|LPu&3WEO9oYsnmx}v}0mjD~<@+B-(3OA^_ahWukiEU!gdY(!I=Z(%m2^ zsD1I>CRx?jzwZ@3Tj>K6K72rDXDd$Lxw^kA=XTuzM~L;Zv)_l`Rj5BaFm!A3@-<;} zhzRhU2UOj7W^o2n+`Xx_1Qmm#qIzan$i`PfjOO&>tA4!hLLzR&&{wCJwDruW-W2-3 zdg5%a3s3J*g@5(yYv=OwtHYg#bB8AGh6(Ryzxe}yW#8Zi{Zx5wP|ejdw_pA5?<7bM zYS8x{So-m{<8OTWMi8}p^5+{D**k^s5Q$C6RF8Tl8we$MP95p0n0%F@r$G;bE_C&N zL|is)lrYztxFrG3mP0Ao~X_;4|gt}qyk1A0!)>@9EMD7q5 zSw}Z}cWMkh^3)*^oFJl65mHJ89y5|BW5Aepr~$ae5;-{B!P^Saez1b>zj0V7h&V3% zTDKV#Byx@q+Bq<~bfrUJd2&a8LH%HLQZnb5?1W$E=Y8Tz))x=KHS4 zv2O~Cvx?39+L}ilAmmUAB)f?wjt5Kz}jdA^*QZlQ*XbKh1Krz zajXXalhh7zixghwVE{3Dt`mH&11IUiU|8Z%A?h69pk75#oJ6ggyp4y*3Pl09Xe;ki z%+Q*Cmh4DxMc7&d&Evp#AXXoZO(~8fY6!KQ${w9nLr3uL86praN=q$~l>ZrW<*ie=OFbAQ1-2m@D;h&wDcmCMhCUq8B zJA|l4A**F(VDbdp8q}ck3M+z5&TJ4u=*GEO#k;Ey~`Ub7E~$& z@i=b2%2y690;-XjxC@ipu}&N082j7a6gKA|{sruvA$GMRKu$^)RD*=>7^tGI4;4%7 zar3^JW#2#qHBIUp>n!C2bG3>X%sk!Q5`#Glis}UzA)x9DFMx)TMyUd87H>iFh}v5$ zl$-{+ChozJUSQ}JYeaA@Qt>1yB7#Q-pkhP>`6s0h|CQVJ>(B*tvY>|Cm?ug9By6GL z+l7CBx+?6M>bszX%QGD@K2du^SQpa4*D)+L2s=U$B)*_ATWC@Ft5 zuNx1dO-CsrOEq~;N8Rx^K68tCfwPdP&PkeN0C6a}Y7IvN zyOCX*TNgZh(+nCWPTn4J2Il;QCrjt7UDu`_-Qy7g#ifJ#cNTso8De$hjgcLY765rh zG!cW<9(O-R@6=gAV^i(sKfzIgGKr9qO9%v}mr90Sl2nT|fr1_>7Bg!hfXkY<9kMv_ zNRgFY;FcaC2t3fZjCcRBs^UR!`R*B8zvLS)W~H}k|EG3mhkVAe^K3-wlZSChIkO`n z!#GKexT!QwjSlgv8s)7-b9_%nU7$!rah5Ii(GA>WZ|h*|;A|iBmJJ+$Z>&`kLUiB# zPMq(%C=?ufGsJRrdp<Hu1__EV02lGi0GVde*@T0k zU3+*MYvs*M)iF!Qxv`Ro(svWS4lV6^atDNmvnnY_=EYQ&Dz+|EjI9+S4ZgG);WF`L zJyg6r@pM~;U;6xmGjXNNQh%WcT*lKce~%a0X#9kl_j8V)U!E2}dC6*%6T6%z$K$7y z;%3W#xh%;)H<57sbVXN3o%ei|ek|zpiJoZ<%yI%bD zp-Yz0z11f(A`Z;l-fK~hgWgbW>o(tywWi+2*uytF)nRvS%d_6unec`mo`xSA`DS9sc$cqG2nJfKHkOS&fmTDcb{F-_ zx+Ip7#1G9^4mtN!y?;0Oz#pf7H?ZL1Gu5YPHQMR2`}s3exNds7!J5U;#7E|uXYUMF#Jwz_LV`>M>hL9s_oJG=L3vVxdldVF$|AfRy-qB?QEb^1Da0^ z%gL5m&9PXK?Rdy&mKTr>6coa5if@spKM;cxb@E(>G`j( z-~MQAo2ND}@@{$fIAboDn<&ug?m%v!vUyjCHubgzAZcCKv!GQUB?lw!o!68Ck3X+4H0zRz!*S^<*5Mgut=G4o5 zmJ3V&_jJVNSLb=BUR2b7`j0JP2R3$CvhQ@wGqY8r3v~_pJ2d(Qxq84_rk2~TK=C|e zuN5o3&G#jE{VnaJ((7v2X!c)2A3VaW(I3S5ax_pPz}I#1-oo>jSFbJZ3JUdnOwo>& zXP(=(ImOlW^)qSI&6*&}9df$S4S{_H2S$76f;3TVjDSTM}Z@7)dly z!7?&0`^NNKU$p3hIMhv_BQnIR8womH=QxwP{`mI^q1z0XqiBy#TEV(8im^Ph75FF> zxqNo&!Fi<&4_-0V-ys27TL_=>-RhC4_32gwGxu@WMJBQc;zy~w1T2>k!W^lL;ua_P z3L?#0jzSYuK#5FtF5o1Va&NA}hpkY>{n+4)7Z7zypQ4z01xZmok zc%av@(`Q}bh3G8saN+}r!L^x1Lk_cdNRj~Ze83i>lJKIfC+-@%R9+bUg9Oyw8Oq#u ztF|}#GE%}{7bdJ&I^kT5a{hb$Gtt6#^o8%1IL;`4{VxBATqA>P816?R4*K{%JHL8o+&+r-@{ zzC!^n%0P~tm%@*2GWnZEV{y4)NX2bbqs`4*QA%*9Jx}Zpp-F&eA^3Wqyue^N7*M%7 z*lgJ>v567m#zEk-=MlhP2Im+i;t;IN2809R)4GP^D=)6zOr3g>+tHu2@3);d9zUI& zdQfw=boTfCdj~%azwx(EFYW1lVcEIwClF27?b-wcr7`drmP9K9lpTT}VqIKCyvQB` zs_&cTdvww=f^^^4KfE`CiCFGcgRhJL}WEqAVMNox9#V4!`BJFlffUvnuzdE z+|-NxZ?OA8_f4hNK-MA=LA?s|AkEz01bK~Aj3hADTfd=6qHQ#hH5oPY+ZoXTw3~4c zDETUK*N=9{&Mrvd%b5Ho|NM0+7%!P+LcMC!tn5-eh{v_{T#)Ig`Qk~F6mq5Pwr_Oy zVLERQVpgaSVz4dH!M@ex)uUBHvTT5_fP_Ox92Q`K#~>z7jRfj1tUe&r8Ju~n8@XqTmU+#KvmbP{G-#oq4LpxP%l$7c>BdP?cv@l)bN0rhYxO4X@vb=w6sc=0_{ z0q#%OFhfe`>L9U2#Y34$tIezD= zZKaKI82_%<-{PNtb-XQQ{fU>a1gC%M+R)auYE5{>=?`{#?wRPyUiI~ZUT`&x&0a`~ z-C`Ne6L?*R%tx>yMtX->>%AbLM%NxmvPReEu7A4$M<;v$DGG4(@Hos%p(enda_=Za zg9l{aia?ek?r4U)TiJq3YeK&N;BUI;{jf&$93&ZT50Cl)nqP<(P?5%XL~o1wcwIw! zCzvq>$AF_yUOZj)xF~-=0!d#$$Z?cdWM&cE^^&ZPxLK^oHr=l#5dLmBOXfKAD%2m zs0dekg}bTYori1M!g3cM{VaSm2)P0YC;X?E{`fPx?c&-qN&S!KdUu|-EKJ;)o_X+a zN9H@XTLt6bYkG%vd6o~rDJOV)~BmeT^4;$)Li6kxd$p0*3 zwDgQxkp^xp=;Yk1MS%K-fM_(88WNYvByl&fOt`fD5&wt+exInPfbdhpfV`;WfLI(& zN|uOq9jee$V#-PLJpGO~%cK30NCcX&5g`Z+7^z8#OXN)}j*5Wb1{zSx?zZ_11Ukzg zzai0xMt$s?)=CZ}to4<a*p(hJ4uRoxDiU{TU-}dn{Ai~(Y?!AsXXFfQ4sO@ve zxF1<{Ios#>S4kg-fcyB%hRY7Gp7wTCNWn-*AsHwnZn~{R)aMdk!=#y$3%?)O#p{T! z*Zg_pa9|ugx)KhZ`)-6M*!?K7yt+j=9KwRNVzNz2_n;VvPIPZ4L@sUs`mc0rVR6VZ zNhAj`@-i^>@em0A!LSs%-K;P48%B+MRY0^N86ZfnVF+m<&?Fo8R7tYHa1q;CspJ&P zfZXD!sA-HUh>U~NYLc!vxpZlE@lwU2qGxJeY z|Lj9vjetM=?DX_S%gAO0R7rx}+JV~{@VExv6d;iElE%16izN{-ao;;TKOC?~;bU8m zEq{TRBS<8VsCHulFti;(HLy#K{-0KJv5M`aL=##R2fd zflnBM^{ykhG^j^`H5Y9xQ=>XF>@YD%N>gfYl%jT=9V+!7Wy?y=3 zm$~ORJma6Q{`#X&FJE<7MjG2~_cvvhW{~RyagHL04;^z!(R`Ku;>xwkV3D>D7OG`% z^_hxp$i%^r{}Cz?LaqPCCiiM+=KKr9M1y??P(OdYu&-TW(5; z1{GVFL~#R(qw(V33WzDmV$kk^TBQ^eSUqySv=&w(?hdMf zC)}jRe69n^+u7&;oNQ(_N)tJH_x&luW4zt0Wg9;S>Iy0&KeIA`Y_+?58_n z`@b6--0|OySd54@sPv)vi zArf|(hziq>0E(_(L4;;oZxHK^eV{GKuVE^9#VCneoGWRjg3<>BsOr!5lU7L5oZ2n< zq7qE!Qdjmk;K(QL3V;DyFlvBG@w~&L!jxLD<2cJ6gMjiL3c*Q;tqfoT0R1s4e$oWb z8GJbST<{ZE&6-+mXy;K15Q+g5I4D|UPzo+HD%k3U$k zkrtTC-K>}o-*C>^;NRaIYu>i)@WF+$_>6RSmZd|ycg8&Sqo_mfvWK4RelfU4_xi{G z9B__!3lml?J^uDbvi^IsQ+4~N^z#*;=KlD~zTwOVr_N`tzq(HZUo-3xNR3{c)Vibg zWjG4leXw`nV)lagB$NeDJ;6+u5zKIBi%4!HOZhI?cs*@>M1m;*1Orr<1&_eZ3U)(f zU|x=wy2-1+lvqw}+x7)}*gKTrs9Wjq?~sHdBmpP0I8&Px8e+@yus?wk21a~}9g{9? zcVoN^pGO6syKY#)fEW!b-R-rj5A194vj*}-F!ttFPXmhz=qd7<94bZ|bRqEV5#VEj z{vAFy!^BO@;3nTq_f?VM|4IMr zfw!Rh2le3XLBsKgKVEF8e^v70)qfEEpD#D_{|s$Q7H`AObpMGvi@el*qTCD94gX6P zyPHIEr{-zkThhQM_zSP=$kIL4h>3z&P^hM}=~6__Cgi3IN|G-qB#_--qtL<1Z}&4@qn{@x=8 z_iajoz+`r}=dQ)HiJEEU<)GGTPxT#gb;pL!Ge6y{#9aRCItI^dUMit&OYvv)t6Fo# zMewsLFg6fr8Sp#O2XYqt3x0e!wNM4ZEs z5W7g+4+jfq3K(u+)^Lyu$#+}(A0MBcFin82+_LoeafOCtjT?F2#h%P%W|fD;efcmf z?eLzZ2kfmOK?3rid2sz=E+79%TGbbhk`ac>9O&ml$s!Us<6#L%b&HSPivt^iV1@b# z&IYUqjL9P*rErsgE(G)HfftDdE47)5H%T|_*i%gwF}eMaE@-kA=A~sJNC^kzy2CIP z++~IP1l9WlQ$RQglhJtbxLs6yaXQ7nu_!OiN(GZcWnKpT%@Cu*S5i+B;JaZg;HXrw zIbPIG1*cWI%M{sM`GBBECXxtDa%2YTAW(^U0x;jgKwp%F;1Myj5%2*S8uv6)06mz= zchBE=dVH2Aqi<{UoE3)AbYs2o9r<-DgDS?#1PxWGzf6<4eo!8@o^F$cggJHBMsrTR zu6VQ2v+3l}RYe0dpCS5HOLyFR4^q?oItT7um6x!KqZa43!XpERg~IZUg?m=?=fjL> z`(aB$(ldl!Sfzeejg+NvCg6AwT(qwQxgSc5j6+};Yndi14!_18-d+X(Guy5 zi>HeN*$@(1;wvi`_rq3NFnbGt>H;^JV&Jf;9Yg>}PGIM{-zWk+0`3uEGPvqk%s)p~Y}mVD%+kk|2V^W0ktMOv zVQP}N9Df~*aI8~V+a<}8__$$60<9d*N^gw=p7J`oI9IB%+SGUyi3bZTgx^3vZ~?Gd zsNH71;5)zh}3)Y&{A=od_YyseiONZfnV22}_1(oiv&WwmnN~9gK`$0Vo+X)Zv zIs(&UU?(AWhhF_ZL>l3idYCl`QrR7e`R_SaIqheKxmWIf(d);F(e&Xm$JOQAPR%Xd zkzaK#A@oAUD&dQuS?By_MFU(K6nJ$h$U5jj+yhKtXFy#C#|Qp`{~4SvxLh!}U*H#s zi0_6(iKH7>N2XjNhTcSlag*dUxPMDf0ApDp+G`<^mU6J7P-=bnFrtH6)5Bq0S09x? zdTN24vs`XBZ!Uukp@=~amsvotN$~=UXCXL`#aZHh{G>}xP%th5z`_u9L_rUs$H+1k zBuS$f@OKyi!fY6oc?i?}9%!s?4%B@Qa2p`SEmHR4`;Q)!b8wMx@L{7@Ua84QxA8Hr zE0_kBkWBy^@0mrcnfgL;gQgZy(pxoox>zXn!Ik zGRkP7?fj?+*D5eT2+27Cio|+Fl4B&a3M#`bRC0wX7A%78eGsanLINd-f)J4a#SvmO zh`h;I1C)*-AOX}0DVl^N1f)}NTAlX!JnMM>d8{SA#+>iV-fOSD_TG;GTz%^B#CYW8 z@Hz#s*R;=ZDh9aTs0Lapzq@kz&E=a!PAgshDt~Mm`+n7mbBMV?1vsgf|B>;5U*XA= zx~p-Q+-hT5kVdO3Y|_n~L;269L}f^QwEB zl!%^*)$CuQIGEHca;7m>oGZ@3y0{JLqCux~^cc)l%cQasy6_ddKlQ60-(GosC&oJA z&U?B!i5SHzH#wcdg3`8w{=QP}Au2$Z|JU}_*?DIu{qO~aKI_&M_&5>2_Wo5rR_0WF z?rLmwh104HqGbsDFhJ4MudwjYD$EXx5qUR9q5>R8EgRjDvmuY zX57k~Yx*%r!MX159Q*MA^Ubr-b(>eLC}@tpiTu2$>(7E3(FZ<$ z`m=Sh(SYA#vJfM*t2b7l9icErv#tKFXSq%1w#n}gE~4}ll;%ZybY4NYS5Un{QvPjp zh3DDWm`&$A{53J(qBbd(?Xmaljh zyZ}8DaTB0TwCB3L?Vm^WBS244gXr0s@|C*0#G1EJy=*g*Zur$@TX%NY1tseSr^~udZm^T5_@nELTZLj z`qpgp0sJ;w!`V;}zo~rG&wVZp+Uk`P3}>sT_>CL&A7ZCObv{=y_BIA1L_i4m#P3}m zSaI+!y0HWuTPdoj#Br>qZ(@K4eK6ykoIdctvB$YzQ4!Cc`{(bzkFfX4oVErm`>%Il z?y5u8U(u!;54QW@)lY&r%FD^`tZjs;ON^#dwSM?5CuZSY+RN3Q@_D@oSS$pBG{fk; zsetAj&jLXOZ0wPCN-mCt7!n&YH-tgL(;xe3k=69~w?dsa7hnq#0#LNLX*rmo3ZL6y zV8lLi-2a|W z=cYfP@5aqS$@xuNqvQQf3jS8$v2VHa*}yZXx2&kxh}xmzXo!RGVH0Ucvo&Q|fE#`B zUq65Qq5qp|{{3bFo+cW>r028{ zKKvx!0-zCS8q-?gPZRLmcz8No_i%Rh`m>vE(sbySGBTv7p;qwUg_kxCNj*kg!y}Bl zl+(me+NwGP5eQP2Z(1`dimh9=N>b3G6kUU|sz@N+Uh-(OOGORh;9R1IM zXw`pZMU00B$h{3tNRzfFi5k}>w8uY=yWiTfP|8oCm+$pKP&?e5oJCH~n74xGr*8s6 znE)pY&vtUIAKbaIK48sDs`rF@MqcawY+3o}fz6B6{?kUkb(uPhnW{5cUb&cm{KgV- z?LAs!o8akm&h-Pt5PoY;*88owH|rc9Z(uYypt4F>t{kuCb>)(s?sH%75Qq7A`t5K|MDbzq z*CLqRWoh)-S)XS0&NYLyJHWlAPleOf4=O~rMx(ArJ6Yw|{Rl@)LSsQi&%anLX1jEj z6|~CLb(>T4&NG{wcf%rxc6(mKOZ)EOM*oguVJN@dR8fI9Y5v~>0vJGNMW9Ke&4Sa; zX0_9XWt(b@tlLos1P-1ml9w`!UgD1=R#n+;FHW`pbK!KrA@|XyGxZ7U+^kD{t#-Dw z{Fk31UTi+IiXMPg08_TfziYReZj|wSiW_sc*&~ zdRMfsI%D1PzfF96f7$j!Eju*v#mly#fTGfA#Tj*TeSDpBLSVsepE?iE=+3r-20xEg z=y$nn2h_)Yt{

ruN%#cbS{h1`*EnDkpT=s{e4^v5+~%;C#)!!LW0c{KU4eW8&HF z3&E565;EmZ#7~Y&Q_Xx43eEA@qQtnA_V}-GZt6zkAOGi{#`GO8U~~QIuo^B`GSB(o z)yV@*+38o>8{u3crt(?ytu^mEDo^#OpZx40U)D8!=^~l#d2@-#$P2T4puW^0lY8E@ zK@h|6`$M$fR#8vBp zRJ!t^JTlb7yU=q;eRFp$U$8qoq&LfsMxHGpo$_`9qp5z7@%VXtzTXi4g;n@uQ(#46 z{JE=fpR8l-mrjm0{`pV$k|WW^cio3rB$vN|!=hIUjs|`M->`_zo9oZ0J#H>a^FmxR zImdU-S?f(ngrmv*$X?P~SsdVR(_dsCP3a;Q_Hr(+@_)Q}m85JPKX%(lLB%@ve=e?~NAI^)IQe13vWOoK8U0vAMbI(%?p0{%hoq2Z z-M44}^fj1#Ki92ppKPpkKeQZY@Pj{Y_^{;(N>xe zd+Ro#JI1z6e(LDrRU3p`1L`5^6a^GCsMUy^3jCrU@})2S6_w%mJc{%GTwT5XNVML} z_UU{NGs^Y}#scbtgu!8Ho$A{jwt*6T*`)#ILn+5!miQv2Up?{bLGt?%)8*}{=PZDa zqPi=A70s=zxa_#R#mKeyS5wDjni|qEy!yaD=YBcz?br)q$$8mFxax^i;oyn_C)a4F zxD^PE?mE4N&SoEt zF_05N-B)9NZTm;}`ZxMj?8KL{I(P!NRYej1F7=Pp&Sbw@`gNhTXy(r2h$GaN^F2c! ztT|QK5EwtWCG2+C)ei=W{m*o={k(@Zr#*P1!Mp5sSi#jRWgq%$1dn5O2LhyDK|^pg z@|8i`Rg9e*-e`Q+`CfBn+TRLyPDW$YoEs8m%m4UpTHRNFt1duuQshb??u(u(Y?}!H`mwyt{YFJl%RIc>&9GZlT-~a3}w=$=;Z2=9IGQtFJ#rZWxJj8|2EAd zunU4GjUjU_$Ako8lJN7#Sc8I=SQ-< z=iDPr+n8Pp1Ab+OHCHqywfEVXY7l%t82HKu2F!L+=?d6UN9#`@MKT$HXz|0lt zud~`rm}#1r**_KB<<}QJSS*+|ko-JreWTa7U%dshk9Hr9LA_P9bD`*DN<+ZN5IUnQ z+Y0p$y4umrnKljN%Yt5VBVC3f6aE>g{%2&{PrK@(GVJ`B-rA^xQR zHI1#}xAX^$6V^8Ff@mA(I(I2uHst5elPvy)qR8=(W_DiM!_tRE|Hza5_N(mDVt&7M z?Ay+)5koaer7Bn0teFn(V&nyDX~WC0S8u(ncqO0df3;_3sq}Wa;Y}>Q~0f7X0z8y}RS77p( zX8~Gef&ICBX1 zy#xD50RvMwa!!XJBE&I>z^m?Qtn}XV{);@722mmfR}r4}|!xl}|kCS7-PN zq~9x9IaY90CT|Rhcfs<)eTn_$)`>%=o zVw!HC2@HH&1CC}z;oUdcW|MsPh(+{!q;KTipUytO|&Z z7x{R`)^9q$3{`=exG+|9yz@!St_mDlbGGGN^r}wR=*@18k76}Xj=Kp(Lalw(_ zyIvJVQ&&K35b)582|@8+%NER5eiGL-8u4V3C8;vXPUxxIB|NL*`xa)^5PP^uw!T+D z6){R?vw8Y3+YC9ga-xJZ-;dc>q`Ww(Bhxn6h9*NK83czVJb2IBH^G|YtqX&R87mvF z4t>-=^3|HNsP?I=Py9f~M)bE|8oggSb2jE5;5UI^mx<^ax5t3b=!>!D+fM?b+X{+f z6F0r*=IJq!fT+H%FzMYL>bPZ^d`z#R^QLn?uR|m!=aA{hKYe~yHZr}yxml{I9iVNb1>E!aVEnsz+G308?5$8BQ;6D8rnj|S?VT(lE5wVz1oJu=h@ zlLvM$(3ihH%cDi=!`gmxi?l^HxU!c;jBgb=p>F3OC5%PbDr$fHVnB5 z(mPB%zT(zOb&f@@sob^Aq|7Y#4k2aU^VC|krEMj=*VgOuIkvK?;Ia1$e?ZIKBVTyD3ifSY*sAd<}}T7k^@V6Q&++S4p#!zqXB) z$ia3IhHTFx7bnH6rqW2PW<%(NEWhY*UgX--GFgJ%r?Z=DRMy~w3ZBSw%VtfK#w9+U zDq5uvvmx#=%on95k5I z?j5=9x!)j=RNr+FhCN<9Lh6vo%bi;z%Xjc~2&&HHS8$RzOE8%8}BTt;|(lF>LE#c7C z<(|hA51Un}W9SU=G2ev1>K1AsH;91_AWAe)uAJmCHG@R zqE5G~Zj~p?n~L6T4#F~r6*?}qZBZ0w%T=EQTA3wMeSTmSd2qKXwH_({lqckdGsy3k<4uM(|oh;(UAH=*p!L+ z%P_SlB?bJ?#ewdW_NygvQ5)evubCtmjNqkoDUWM7$~b5s=9%K&QeMYX1AmoY*|>h! z_T%Ok>8E#Xn;{P-#l_Yd6ekR)yZPTw|9fwg=P$=~Cj*@7(3u{m8-?zr9` zpkDT~RXLmVC-{}ODROe7-8DN-C0bCVHd=(C9I5PZg@wlt)Oug>B0HHEr1(+-DmEv0 zDum>(PtYa?mUUq(%=SFAVrvMHoWnoP794Qr2*N@~pm5aqDm|VkqylY2nZY}t><8DB zF?w3`c{er&=#&ZF$2X1?D=VAjIo705C1Dn38SBDL#mGn1iq=DxN803L(< zz3SwWGsD!}Gr_4yc_`C{^HDiC7_Q z@b{DgI8A4443Z|+nYT%PW!pyj*;->Xh@O-%iT=zEy;PT3?XEAXJi+8N5*d7E2Mc}F zpYf7i+WJWSiJ(rgSd`jq$%TocSL1Z2tR!uLU|x_(b%w+?YreQ*-ks#vj)!)J_mRnP zPTFf1C-nuaV@i3BHg&y7o*1NY>rDl$G4gZIlOb|tSWEoa+9X!3czu@6PJOBkG+%() z*#!+AuuqLvdA?O>^?X8bK4U{o<<=6foAU~~3Hi?|uQq+55WTxA9FJgw^V zRI-{lY}Ul=M{tmck?S|)4Mj;r+kBQTYQx+q!6TgfKO=Y*iB5i-XRqp%dFr z@Z~C**K=-08$oI14I#O5UZI95{PUvu;|5$E^V%FU z9zaPrnE72HA_GAhy~*S-M-5-;?IoHJOi8S@XN-a;N(O(oe2+Jqkm>Vy$ze7#=P0A! zX{cT((WX}3E~lyqwz78Qex9E=JpOyet`V`g!buec?3ocJ+I5`i$F~gvP9S!u)*E20vQG&qH5hQpQmYM=U5$IpoZ; zLGKwddFO({_rc{z9u?*YeNS+pPoHm)-{KzspO(KAmEKsCt@4XcaQXli?)|+!^o>GN zzv8cJlh+Bzw2fqkOfPb<@N}FI;a=}T;l0#+?vz1st1!9BKi_@U4Nq!eVr2!4PFvSW zj=QzFZ;Ci9%Qr4Jg0whKChv{(>LWWx9o`#9E&_+OM*J{KkY;(7zHz-vi&frz#(sRx zUc+w~^1m^n=eQha<+{qML&%g%;uT>!PM*}5L{eGLt#WL+F=rH`fW(}(Qo`BzGQsQC@rswXC&(PWp&+i58 zAw0g+t}JRV<@FHM(xS1#Y^U~Q_1oQ(d^V@q^O!1^k;PJe3E3$IrK1Z({Xx3gJWnz4 zN0l}6^0(YSWQQ=jO!D3y?E{5NkEPyG8*n8sgcMic!rtOWdRP@@`a%!ej7sIJ`6_bl zDS6AiDf8L{Z4N}UyGp-%{&IDtW3T|^8EBo?h7en}ToHOS#-X6}{FXkF5I6J()rGx@ zz`EHy3!viLB+z&I6(w2Z-6cH2JYU6><#Y|4&0#6jF#V<`S-!Y(Zfz4I7MnP=I0uCA z`0f+$brJ+;G8hLLX{X2$oxSieqGV~ZZ=02=PtBBc)?4#XytrN^<31;-mqbPb(GEy- zh@WJkI<3ryCAe<0u*GGzyOTqk1sjaR~g?NpFfYNy2N zXU`*E;Vg>JKeD!J*L}s%X%DBiE|zYaj$9qJOYn@R_iZ(Ym;H^!Q5LIBkuIl}RE<$Y6v0$~U6+|m&ZGB? zkZBZXD9EeOIhc9#a>WT*QaABjVtG(L!R)NjKg7no!yqJ+{Jbl*2H6WLNLl%%7m#Yd za!c$%>am{r-1im$AwVwTvO}3OFgh*tQFbs7SM=G-H&rrpvZ_8FmF2h|1(@!r(JEa& zbMut)Iaz&nD!Y;EXdsSc4V(~H^2Fz-z}HCc3ALNitpFMgIIdju+qPY9? zu7t(X4}P9=e1UD`KOp!TDF*<=D({)WB3V%*emKUk&IZ3tX^T6im-xd7!6QAN@?@N5 za5an)w9+>O;}GjT5T^G$!xaKXe&R9N>84y;XF4Gxmb9n4OT)XFpOzd*Yv*SxWU|Ca zFKoDrszZj{F|swfDWaP%eXa@`d*)!~W)+NEv77kt*Q9Utnk#2dmX14UKqUcf*_ejFi-ZE{I%ii$8iC-ng9@7Jy zsTxupKJZmr73~-;tp*%tmbwoglpij+fLmgQO@3G~|HTua;1=BEfNGDmd8}4G!)8$c z?1^Qs(k!Y@n4Gn#fia@9!fki&7To%q6^LezYaD?=4k{Z;qY;howNs=n%^n)E`2RLU1-$xG(zAM( z*HpsVsI>;OdmF2^TfomH~RmrSLN_2@O+*C*a)KW1CeneS zw6ZR3!@c7F1OJOj#hmte7Udyn$L7h?-wjL|=jLsTzxoR%6Ba0@%j#_5uq`)wNp3%Z$78gTIRk zoV?h>!+qJ4L_6)N95Hc>P8oO-Lh|H%c;OghD+Gw*8atKfpguL!b`giqg3AbgZjtwx zc~s7m%VKh%BuBjN9_OT@^X*q>@3*opX}tBiBMNCUzh!{A7@=SEn6>WI>r}GCN(IJJ z@%T0KOjx8ld~$gw$Dg`gK`z`^w)b@NB9`WZNvlh4*mj+%F+`>XD!9~6k+WQC$pm{) zr<)3iuGol}!aHBvN5u_G_z0TwM*7#l~IYwmWwj{&sqw*;*r$6U!YosGqz z_T*Sv#peNwAF~w78VAnO(>sRZHljNX34?64snur6rS>$yE%agOb4;yRICn~|vzN04 zABGshD&sA}Pnh!Hhg8`33`xl37Z-@Mh2#7?i>u>wk*xd52N5QN!edGA3)ct#tKv6( z#<|E2@J%9;E1o%&MR&NnqG6Fwcges+9Vlr*^Sw@Oqlx)&n0oH9prB28og0nDdRf>6QY`V7clD6PSmd_DNgxr~~)KaNE&v+DE@SH&*)y)mH zS-ah*_}*h7t!di2?1}FJC1*4y_G~>Wa_ptSc51hixTm<{#8iza82~RQHJMvVeHap6N=4<7Tg1{tJN;?d_ z!0+%+8N;ZVqh!FbxOu@27R{>c&Q^x8Btu3)mwS36aa$mSJ7ebC<+Tp^+BQ@?U)o1- zsH90ELq#2ai7W*`7*);9Xhf=t{srnMOQZ*wpl5c?u&O%Zm4nIYWoAE+DEU_(lC}Da~@3qQnoFK%dD=i$|J3g_tgXL?te1i+ic{9g9a)!$Dn!k~uHJY6z5xaiaDZ6Ei09PsY_j3r_UF=F_KdoVbl@m0YQ`*)$2+Q zYw1v1zP6ppZuyU>uD5eXs&=<9GD<)G%ljW6DUCUD@d0De?si`lCoB7GmL*fZX;;?X zVS1y@w5=M5MYKfijZCx@8MuaPl?Vv1v21~<`Mao>EXCsxlD1G8EuanpF?+H}=g&z2}fi^VBk8wWaZG@FJ(qKLD zoa4j~8}3fT1qtI&D}vS#L+jGU({2?tlo>zS@|Jt%{@vM(jNq{}$Hf4?K(haVDu2Bf z`6g+R?`HV4*e;Nv@tcHcnk?YJJs{7!BYtowk%Z7KiHEWK)`vw!2KlLlUE$q^A(eJm z)dp`;Gw&Y0=I$G6I-rut_^s1`I=2?ZBa7Oe88U<^57UqvG68w?BLiQ0n823Yig-28 z1nU2E`Kl_;Q8_Y7Mi&qR0EfXG7Tuy)2}^mn&62OJ?9yJU8#swL4e*Gm;y2uF2s);G zJo8<}ydsGm2&!txJ)F?1t+NeEIm8g?89FpJ9sA#lVIwjU8EMywlmwYkN&T>BQ2q7;FJnlFQzT1OrG=M`)d$fC z&8m_Sb1Yefl>}%roml-orAB4|oH|3xYKp6kj!&#-)mtN7!mcv*o9)>;$5DABm_{6O z8Qg1&g}Qx;%#cytCMF!NDr=#J-%H3I^@rbmf>Tvye916o*>JE4((0?cXtM|%GHC{l zY5}bDG_HIw>=o%{reo2bCCBwh1fbNzf;p4ipa`Zd%8b(x6EV!jy+id0W&pW6+sfu>u$qqMF4gx1VO=1w@JD72;$^KQc*3%5!o=o<@q}0$cpV4#H%=?%T$C&w+zSj{itIZjiro+99oEtbtAZW^2{n;d-N4Sk4b zhPPkgVBfRoeL7@w?rYE2@Mk8l5W3 z78Gz*<|QO!h9e?_ydnu~{&6N^P?OM@6xP3m`~yS`@C=F*+8QuGrBU7DVb$1Tj-7(1 zC1ZsA#7>a2Mp#yU_b}Bpji?hD!Ll(IexPK=PUj}zY1_=U5R3$kl>@aW`(7)v!^H=W z#oSji3~QS$`K5ol!MqL1p@t_A$L^>XzHv+-ETPH}|K-`0HB+JL@w-#-1(I28wL%(O z9~km!$ftx#hUm~(p+BbdcF!q_Br-FGZGMZn-lm%l&m%td=^v*z#gZwqnqu;2v`rOG zk3D2Hq&PwlxtpJxR`UT9^VgH;M&_oeuq#U(RCa2OjWyf@i#fnc(@lkrTnGd8cic7w ztNRoTv9CelGCo|kP{QmS9A!YQxgT*uoWNRV&F8Pb&Z_KAGxc5!8P%@md(DP$1gR=a zx}v|*BpXfE@E##_B<;-n5$or{lcAFvjoWkGHtqD1oK+%xLaCwtpGtCQ9fsoa<1tbk z#SddaIT#|+7;;rp`2&%WU_IszxZf_op|ry1e)%S0GBDSUMEueYZH-|#f9_`o+-i5` zV)73W55W`N;iivr_1d*9EJaaZOcgswxL=#eS1RCQVOQIGOt)|dPw}j$_44!3k4eAZ zR*#R}6QVGIc)+c8Kpp`X$`3!A0^gj4pcu#|oi-zgCBytyY@7nAv8Qfk9u7e;b&p+i zI8}LOo-2Di!wKcKvaSijLloFVW-efF)_Hj8Hmh7y!PD`TzR;w}`I|RR`sb(75$m+J zg>`II6$18~M|t14Ja}7=p682`?C;wC9CeW`tMW2}Nb=85c^HM6UNy3gA67bSXO^te$TzLbUk4`#$Liwa zH1Y#X!lA^*SLTEFBTTI!!yQ(|$N-NC8g%4)rMG0DspPR{o#gD!!6zQGdgg^U$;p)Y zyy^L)y7|1c=O7>XZDyYJ;=C+p0T@f4FpCpvIPsLaG)*2Uu=l!r8L?zniIBf5Ndtm; ztfvef^ZK-fVP91!iCG5-gk(}9kNx*>>B4F05u8STKHQye>oa8Csh0>c2B<{^v?01B z{oY8zB1ilUD0^Jo_>}5e%yfM5??7vP=Uhu>tcJBOghL?=^>(g@4H{!2$ZFq6mr_dp55uZnoxZFps9u zL`E=RaVJ9^Hss@{3@Yn?gxth=JC$U2zqR^}=IR*7#o4EnJ`BNvWRow_z3#|$Q~|xz z*g!($rh31j<{UR%JFUNP8amEVNwHu;cEB$Lo>wv)d5op~M*Q~ek-i+(K_LQ014u-; zwYi%Z{sDn+Z5seF-2H1F;~i!$&;O-l0{QsA2kC1gy2*^wGNeoPi{cZZKN;Z3hz0lb zhPPjpWY4>sU?A1ng!}w;hVZjUc_p#)B(|p-gflA71+L+N!kcF*TS`68Gr6d;5pzsB z1;l%^4xY`X!>VdlkRF&AnU*?JtBeMaX3HJzdLXJM0WUigBNgWhsm?d&3)5RzGIeUs zMVmi~PC(iOSfSc(;?NTJumM(=949i8xEVR7I}%GPR)SdsP*3uMs{AA09<;-;2(0a~ zGIf=sJi%>6VMbWShC?w6=l@Lko_K~iqCvlAPW<-o@Mk0d1MQc=M}6^%rjlesgbl4K z>pz)`yU`up(hsO=rr0nqd!e<-jlFyf)$4y-b2jA$u#|32VAJrJU%Fh5wkoqP#B{s}GmYK;Ym70H zksSGfWkeO}c6@FeqC46BJaKL54)A}b_$6PyCKoD9s4jL;9 zCWAm`iQpwCB9+&mXP#Zv$3RYXy!8DX1#L=BA zyzl&#-5oSC_y@H`RiwD>{sax_`bKod65-i2gz-B5wHh9>NrY`wRL_Qp;g~#7yI!Qt z>POy-@BK!np{eJ0ro0l&=}{$ZOj z%J$AHF~=$O1OdYTxPv;r#3Yu|tN<~b<@S?g_LeV(*n{?TmIh45o4ozmJR?%Ni9Dd% zA56^dr_5J$D^l5=*Oz`MIdzXG9W9;x1XC#r^cHkA4x_uaeS%sS^qygC#bYvJ0zA<_ zI)+`2aZ$@Bgz1TF>Ff60d6?BOnTAH*Lwt;U4PZ;R*7A=sKGuH5SG@^bJ6~g-uSuJ) zfsD9v7mnKlMIKG;8{Qt?ezd5^Dt}OuvY^OXDA6`0ay%w-{E+ND9cdAd#_T7ONB~te(F~b1P?0})Njg^CW0z*OS za5HHP2Dk+@3TFFUjg3j-3M5aw*{q%F%90;^MY>5A$DQMTK$hR8uj>Mn?Fj;VfopRR z5_?&lyh%X1-*SKA{+!Pn3h6-^`jLzFFJ2+qdce(`FUg!>3#=_6rQ2PHVRbrKib!<+-u}0HY7gRKE(~^yf39ozoA$43Pv^dI%#HmS^< z1*zlm%E-NhX`y#54_6@Zc9{RRPm{EiK61h5Dwh*P4o!Gp)7HK<< zD>fR+jM_FtrN|Q>STSfn&L6+b1^v}CXgszOXMy4Y>KM*uM9L@-Yf=_wJDl8)0u8I`B>`p<2k zkZ);D0oL0o_`5j**L!I^;&(Rn)`+!TwohVh(jObK>nDwCdS@=a9rGsM*n z6`}svaDfgsCw{ecS+~D@(3|gnLm5ffE)AS*!K6LGEE;>F zX~Mvw@~tA$wPjSo+S@9V%ljB7$@|)7gXZ$9A>Q@~vmEcjh zn^t-6Q5sOD*B~7RPF@C7CB{*PdZcnFnYZOKpYs;*eQg`;oe`DH+-@F5N%k)HVeqn78dCq9y+$6$QOboBxMrp zAq+K#wX?vvur$(4?q_)ZV>BI?oPyV zC{7EJBd)adyIT_m@+Ick(1$EdwW;P;Xa?OB*y(eXVuzpb-#+MJ2`(kh3VUGF)sAV~^= z>gH9|Abm)&T#fhWmI2CwTvRejZn>ryd?gRY&o1;n!`;PCXMAEv>a)N(q zfhMi{je^_d>2(8G%Q>hZLlloTI?6fnpq}rK6;22Tk-_HFNFXUZoJ3k>GL<)Ca?Kg6 z*)L!590l{pV;vVa{VKV`l^8p0-KKg+<>{BBlMk{#fU;X15YvLe*n5q_MW829r%{-W zICRa~s~=SC-~9=ylv_qK-eTd4xBIAOXHh&quP8g%ahBOp#Y^|%>9gib5bA)mMX-pR zr7;ZuLYGOiMG=lGK*ByD^uyJYBUNQbk8ORn|X(x45RP92=-6?3&7N__djRZQpA`i)**mnkUGg z*&LlQKYPn@_9ySj1*3-~`X<={mhysNiTITIkPg0LQtK|xe?8pmI@}v8`_(`4O%}jy zx7nmBDivlvH6%s+{%8L1DEL2sn2>xv^WsK(`Ovg6lYKtull7#xC9W4*Bcajv8tf@A z{Y@C?Ui3Zxj8kLtN2V%&oJekas%k@`z&sZM^O{p`U}Nx}D$9nz+64)W=hHmOw*@?) zZLI8Xeq$_>&s6Ii6arkH7?#}FX12Tk;0nnxIp&vUcsFe06eJxC{uTk;l-H70_N5m~ zQMHBO_-}(aRq|9-cABY=7|vW=Eqq2!GWOd}m!#*QZomTkW^G?N@qzALq=ZHmc{bBE z`LzqICzpeE;SYa^80_5y>tQ`=Y8;48rsc=qe&NP;g5PS28Jbo{5Z`1T2RURgOG(ijZQj4S62@YnxNNo`*~=^K++zkf6Xt#l*<7S<>J zb4_ebdaUjU|mqn!p#c{COH zNB5ioS$^iz+>xib%1eo1pYb|VURb}1%+^KbO+!=1>lEi(;#6O{KUP-H0jFixnUQtv zWhO1?Ecw#|x7}~WO5^`&^AGpWT{#w#%RHe}%o918PrEhpx;|QB%gUl^?vtNw`6gJM z7<=%{Fh5`^bT}rqekOiESfel2P1Fp18?C=<))ZcEArzINsqG4Bl6}civdbZnUgZ6kT$L@qhV1<_POmrHpa;0KS>$bfoU*ZM zRDSN^%k#Mzt=u~vW;%k?GC+Lv*B{~wXj-v??9gfoV5s#jEf%K6<+D{4{yOA{soXl~ zHT7elr-H^nRdDL=p>V>@PncXgxj;kr*HgfE6=pb zYME>A5L453VllGw=hc}%8^%n^6Q(OIwr@3V;IaAgUU%vdi%zG z)52XyfE5LBTYrL}=#NLtmw)ye61Jb$AhENu+DxcnMir?zpLm!apSS5lCFe9X@#H+BV&hkPE4eDhDVisBY5FFvi} z7PPBF@eNyopMVZ#8Y-#9669(PWpfoy=tWpo=eHTf8#`&G{k?tYKmpdE-lOFK+Z}mI znYj6BKGF!xpw1waEqetxn5(xBulwC|5mn2oh|xblzBeaiYzJ?NJi#8WyLkF7l8A=>gNU0Wz zYUhhCsRRey?tlEVQTXhxTCcsZoz9yuF9E+<6iB%KR&is`S*2!TH*wq*quqE$n!Q;_3DI zE63jc_jLABc2Itr)E%7S6Yi0HkR(}nX5@FE>1XA9uf$9~Zyl7u1I*5g5JN$w>;PE( z3)gYnJZF`+U|v;WQ_18K5{G z2f$s2qeAP(wtCS8P+Fmn&;h2fuFj_&%{-kOot*DGZFX9RGHSYPOeki>h|aGn3}hiP z0_keut&UvS^}djQc|X4?&#?amB{r;n=NEpzp^aFwGHWBs{*}?Md>HWx6?&?}!Z=qB z6$FQ1ECubiZ)*^%&Fysaz`NtYCyc%t#_FDZ3DTnwP)?Y*h_Iz#y=f^zdP06?Fe}iW;MLy9#k?j z_d5QG8~!^4!qt=9e^qla-#8Z~D-plH`5*6Z3qc@5jt6I2J2i^N4d!d|&!+9gjF2lw zx4+D+?nit%Bv&0|8layyL!bm#s}kX21~II8UTp)KF;kO%Ut8Z?Na-FHu_S|JV(B6O z^e@bOBc?dGh`rZ)0!dkk*L#!*P6ulG3)1kuu;_U2P!|!P1*9rUS(gO)8pQbPQ`e!m zW%69w;3{a~QT<16U?XbP>Y4*y*Ds-aOf(uep_h&4xzH<{=<+`~ywLzpeELflXm%EY zjU9%>OCk4rOM@bR`sbY*%=WnTbLmGtClE%C*z+>Ss)N{!^e=|ev#hz4x3QGhJ{-8f ze1}b!TXvG!oxG!+99b1Wp{z@M>PN8-u*wL5l#Vkv-T`fo;k0Zxil&f2?EOIVM`BIE zlHPM^(G2Bl4>H=gJ7LCO!S>t6X}$h+p1dh#6h#X(1j@K=Bz`efjZS7TAMI}0={KC)Rkw{=TOe)To{1jLVDZi{d4j`mkV?fetj34 zH_<&hJZN%hWG6mU$pZKZFQj4l(N@Kih>m|re){nsbG?cmJWFeevC4DCPD$55u``1A z`;54+`E2TQ+cP_OY3>~_`a7f=5UHG$x;w&#ssA#_iqV^h%$^XM^87|DqqfBt$0B~o zC(=ROy=0aCCyV);E?I5r9(j61d}>0U=Ww^SyDEN*&7an{5wkhOrCnu>wjZt6We(|eWn=b}in4SFVwboX`?!uq!Zbpd9x$mct|N&! zBB}@|5{I>n#Po&fNI@F31}Zewb~0d_s7)675A#h1OG5 zEONSP7UEQ?T~pMgXSO{J5DnL_F05Fud$1^K(KEMHMVaK9@8Uz1DH$EkV0S!xElkpiDYFkz3vpIB?2(MU}sq zCSuYIVO@7KK$S8d&+t+a`HPU0Kq-dhrcRsqqp$e7kCGe~mm;7%Wd8q{`WApDt~A^s zLN`xgEo*J-)&Zf7kVu4}sIegEF3(D_U7xMA)YaApsO{E@3J#V+fapfbc5TbXh&Cc( zjEIOjP^Mid0pk)ZDpsgiL8FA4wmgD(zcbi-uV`c@$;>(b`5)i^nE%|Im)bRRIKVM+ z!Dd?|0J#HY?LI9I>4`w*y?3t3uoXtwT0hxZV9y+6h>zz1QJj8m<_C%E&P1$PjJ+dJ z;`ZN)Ajy`+t=OcraNc@SDMZ3GXS{MQHQ_N$JcfQcDHgl46KR2FqXb9rSTQ?NJr z_F{Dc+QoFBpdKB#g2a1LO>)T9xG)`y!Xx>TR4STDj-OOOQFv|`<=ux1`ymoJH9szx zV5`je^zOtDKk`&Jbt028@ocse)e$O`roEB@Hx0n+T#*w<3qfCf%+ciUQ`?@hJYR1L zFP^ji`mYG&=?ns z<&lc7m?q<-8SAq4k8#S-_5eKPh}bOZF~Z>M@0)M;#^11Z&B-LqzSlJezSrzqtvUJk zCBZoJx@KSU!;3M^zj_CE9BBD9rsWrV^DlirUwr@Jf*9+98qLYgOM<`Ge0XKapMUv9 z6SCa39u&|NAiSzib8SU8X*m^IX+8 z$XTHhgqye@HDvetddsIrCpFwDbj*831xNQC)T6CP>=a&JmuyzHkif;A**_)S0W*gm z{v3}3=w`N~a^krvY+Z$-=BTB!^TS226=VC6pcI2el6p+CHAuX_&8x{2j(%DbqtNdj zZhe|eS`~U(i!NGXnyCIOPe^UX^9TH|iS`s(SUgW~N&!w@PE16$7y2TA$o~1^LWA%S z`Y`6pDbm}xKN&}HiVXg`5wu**f5jezW*g>fM&TkI1G zu0gKrdH^X9349896|*+93VM^^lxTS~<`!+RtItB{E$VO8q||M~hZ8p909=_^6t=jP zsAlv9PbDfCQjSNq%W!cCH7P#|*MN}YNquY-HBN}-gbxJ;$a9RR56~&=Wn-MI71wb?P}0T%|P6t zZ#{!N774zNqI~`HQt+65p24ULH5e8CcCsYsDJN`)rxZq3A2SCBSkaz057R|FUKyj5 zR!xtQaZ0I)oZcg&lUI;OQO~M6r*D40bHYXrg?;sXV2^Q47#bv_F)VD*g3)6jq^}+M zgQ1}(}9>1frFUn5z;$4)kGO+fdNA4=~WD*h{guV;%t17Y@Ev& z%CK|pcv~u*iq1At#@Ep`v+xR|hpn%*e0 zgl{Fw6sv9`7)EGRJPp>vu9gV(kajAE&sq-+4vHuyrzAsQ zm@+K7@0B}qGDuk|Tyaog=~7(&R1yedhwbG_P+an4>cz|X_A6KlY%rC87No=^_!nNL z1o_c&E!@;>f5IA|Za(I#MVCf2GsXNc_iS=k^ezQc!V zAQEi`l+UZ6E$+-i-A3AB4B=+lVP7(o@q6NqvFN{n5k?VYg0%%R`%siupa)v~;dd-5 z`umOZJ(znx(IH@T^sS7pH^8#iFUEV>*f9nDo;>B~1_`AuNnKqOtKNThdTcnM|MWz{ zpY2W1UXabiBGnxJ5LJ#i2o0wzv{;ZkWW2FKF&MH5Jt??YC2wnP6w#;f?N)M`WsvGn zxVNX0$hzVbk$HNxHYW~}q$l!$$~4dm3W-PtGCgXnR{V4j$%I4H|IT_Jb$0)cYC(8A zDT-{v7EgiEF+B?|A3zM+6^s=3Lpcz*i9Bt73Xdv6rGFc~C8>qmh8v%jneoAv*)4N2 zW&;PJp-NGlY;~K3FkCyCv^`O~zfFcIfxyRPbUR~F=V0bqoh)5c& za{!|I*4J8%YE830&m}RFiSGA6qb5wsfWd&O$|e&AkOEz43X0j9as&v*uC4$@GcW@@ z4G$T@pjKl5I1i2hqY4b9i|<}&r}pWDqCBsK@l4lFLO4WBulwh#11^&{!`544!qUKz zVPp~DLRw$rkhXpXpFbn5g7C(u1C0v5*hAq$FDMNU1==p7i*R&385*|6iot3glf{zN zCjbs|Tr zqMG+{|BTklEf~d|XgQj|Uv9=;Wrt_yq3Q+t2n8GBLBb4*jxyMJ1)+kEYW+WBGma{oV@Ad-%-KTCh0bD zAZMbQ=)$W1OXf7C^g7{loIx}94D#_aiLK-7Mb4sg2F?i&lhYU*eZdJ3aZ+ zSdga53P_lu3_YyGuQAG{!HH*tWR-81*n`kjO3%Ox1^<~ft~6qQW|LqoIyd0bLC}=w zvy9e+g1o~JtHa8MBx1aTRn2+kPh$ni#Q=|Fn?{H@Rv4-P^n@dx1a1%ChK6DQgTd1Q z*}* z@%v1xfF!S=Dnkvv#XO--_wpnG4_ASMfwI8k&>!K#%LR$10?hpIY=%D{Kop90I#Nk6 zO!A^=JTC*j0nmZz{1{E`sCUrGZ=o1Mb4*5LM+Hp<3CA$iO%+9}mnPzIW^@K7H$j9< zhDv^rUv-tN6ZywMfYrpzhi!a1S&NQAB@#5566Enle_W`PxF=Luio68a4ZZL17Z17; zN}Ni9g5Y`3w@nPAvTS;am{*~}YRGom4Gu))2nkn1vw)C<<}ffknW4T=)-ZlBuC|~I zz}+!0LTC`BgF0y-LI;$g zXAMs^{=;e%5ZhIqYLl`B)8>{<*rv9tuGGW0K^1HxmwQ5OH7F7$3!O90!RjWc5Mp)- zSwQ7*kR%9<0&|F7VNitR49`+w@q|2T>|z0Zf)6O`J7F)b)WaANvxA}&=$_6A+f@8C zhyht3Eh3(nxT*8G@zuey@ex`O7s@ZWH3fQ`Fk$HBZ`+C35RQC9nne0b5#14%_6(7u zXOfH2{2uMTeTyg63-Z-KiAhouQB7}1TMJtY-v9uOnM@QXF3)@uB-s`Z6W1Cf$-q=4 z+hk@!rA{BvVfr#OL1@n*^hl9C;Y65JO#O#D2##SJviO$SO?ZMS5tenCx}9`RfZP?PGMgfPjxXGvtS<{sPGKT{c>|5CQZyX z5nq1(Wa>mY^4KkGoI{EA0m~A9(kO?40at7Nzg`PGz9JSK0nI@7ap4}Z0zh@B^g{Rz z&%^}LWIbS1$FGWqm7ZK41`#}6I7fJR4nFYvJwf^mvXG#6xM))-X%GcZ#3)yW3NL?} zSTV^yJI|b4vKO|E2O)5oSHi$tE)tI8%_=;nbOPhlRxG?blmE$t2>LUVQWaf1SZ|eyAK@~tT5t9b* z46ZA>V#2G9J|aXYgyOF%7?(fDFc~$WBCi^GU`vkSiLD=hhkSrYC=d>T-u$O8bJ0nK zAX)40$4^f4)Wj#qH1XDKJbfhxPDNWqYcxKN7m_X`1UZAfMGoUe5H{TDWB>g11s;i4 z(Ebn*T+mDvh>MHSHL>2uOd=0w)jt!5nZm|6+ZGoK_Qv)76C8(ASwDht=5Gkf=vEVI*`1bqh_}MD!)>3EBhx024;k9|RhHX)GQ` z!vif@Ppd5TqV~R55%Fm>Do8o(Pv{* zCVuIBvpp2PK5+SQ2?G^eIjpmmZHYM1<44Nbi%}4nlPdK_d zy2x62nzb~w92ncfBN-zhMvhF|lAns54f${etwj70n1Z}nOaeb1QOq@od^rO0$ao>r zOMpu(Y!-3Lmf@LdVzSV3j%X|rQ@}B-J4`u`L+3z7$ALbvz~c_A1qPf*=N#UGqmpnd zArf)8&;l4RwVLQWkn9`msH#9;z~W;#0VfXh65`%*#7$VOg(iUaNq`en_*R0!unJ_I z@T@EuT1pK3Np2&&H~&*fu>?F5|2nY%t9llI6CcMf{(MN4gh+^@B#i^{;LWA|--5Y< zi1P+5ZU8X|%}vPOLKO=b55%7uZd@iooD_u|+v6ttn5bk*NU{`1o>5n5bCS_99Q)%c z5!k}cX}*dm3PP9dReVakXIm0|3gfq@kS%U;Nt)2Bf}oEpq4}HS!_r-q7gLlb%BfV8j~n11L!)i5ukXhWJ^+Lu<9OmpOY5==jW?c zH&mCcX-}5{0KIkxEt)|?Vrn3ht&m#c3`Hjiv9}G#7Z@n?g4u_;rzq0e8X5_aKPw{L zLL}=9*|2KZe#sCO|I9p3ym3UR@GAB>>wh}IBlVcLSa73&WMIAaq*fE}Jp6M(vSiz$ zXaHjn@~S%f$!~@>fkbeljR#dx9c0G1iiQ1EDk}IO|szA+0HsrLS z-Zwtb(~Bg$mMc8sh!m22-Xxx8-(my?^P@fFs3V{ZJ|wC{csSS}LJ^igSHsIAMh`0+ z7me_CdrYDhVOcVbc(@D*WmFV_7;q_{cqz;cA`w791e_7E;iZv!#@~RLu89P$5P&V- zs{m-D(0$fp5%#Cp6Q>R^zV3yvr7jzrGos}z@D17tV>25>Jbl3U-+E#%93!w@d!XlK zJ{S#4Ng{4|Ds?uVj;f9M{CzxUgo@IMn{=CS3O+Hc0*n|W&X|k{K#&+}GX}68kY8L3 zNudk~9%=)Z62m$@IUDX}(4=~_7^XlZK8i*%Bn%=Xv8V=%@}zvJ>=jXy>dnd2p0yNs z4CE8j)QUys6^p==_~SwGeYmiZmPZ^&o=r%cXH>#yC&Wd|_4!f2Lea0oiBw{HJA_T6 zivJWFZH-NlUll@?ljv7UGI~;@gs+bk`z~s-KwOLv z4Z%td4{T?~>yeBpZCSw3tL<33T>F z@RpKi7h{(n-%nwn4*48I^jVOCTNfkeBsM&?9#rJ!L>&&AjvkFbAXV}J^NJ|!3T2># z2$_1MRiLqs^#uaN*(sSQJGfog_|-kv208WOG5dM%M$z zp*yTR6bDC$a25~Y$#i%S&vY9~g+oIW^kT~4pN8DL-bSFYEL1f&dHv zgb`cm#4YqOOJcDZeKL&>YYHKC1VDMM*gyKnpJL5{lzcC?%$$^0Ts$LgW;`O;f{#-a zesQm91I%(cE&&|64oG8m8$cY8h3HFQPyh=&-EszStJRK?{6OFzN$t)0AaQmmICdPj zyn#>f6m2?P|-{3T3f}!c$o+m>Ca2@_~~FZNX$e$$K23gT&bM%7Cr< zAVt~8%)Ev*p}YdxMT-!MEJp5Wyif?fByc1`cXC8p#$|+Gz3~^KYt>Ki5OgmFhA0UE zs;H5~b8u;do;XqwT5hr*sK9?8Vj`a#ptr$+s2+#v#>0)|Y~h?&NNc`1ScWI>Z^AdP zat1suS&b^TtKZ_%UtYl(eD)1#HSg`MvrDA)QT{C4%*Dk}*oG$=u-s&A{b zVXr~o?QN&D=-ExO1K#uUQf5XW^9A-ngb=D#02TeJXEJl`FB`G5eGniH0^$^J{Oh5` zqJGy|*j6E%KolNP!RKBJ9qJ_t7eyxnV-vO}Dgyr-CoWNhdK&FT@09dWb>0>UdT2BmPqTnzXE zL+yoOMo|Si(TI+1hUotQ#><$*}Tb=P+bfG1e?cCUK->Trhc|P6i(O`#W|?l zbad9Im}{}oW#}*jrT^h)cfTlF-DUvH2~h9<0k6tdb9M} z5mw=8Y}DRjM#jJ^zytl=ddBAh-Fi{r3Ysv+~8Gh0Vb1{tfW~ zhiA7{Okz@2Eczam5;yveA>^l;v&D#v6pBp#HGy=DFEY#(js667$G`P+3G2rvnA<>=N~;{56M>- zC{g0zDXkC(%GM=o#ev0XXw3}7w3ssJ^Mpo*N?G}IGD1pWn*z+ACRY6^5gWVtYekgT zr6L+zUEFB1{uA)|`%_?bmE9K=70^-$thNNh+q?Px-7s|X*%)&KkA?dXC)x33@Pxx? zhdQrCf*uYypG0zk2oO$4j48wS;4LHh{^5j;4J36HJ16B z;CzM)6bdBRP~#A7h3;2i!z2J-)NYW-L^VlQ3sAL53YB;Tj?hvolzM;>MI!}5qTa!2 zS{kM&nWoE>m$bzRLi1{SvH}7v_y)UU1v2%4lO+{PSAd*n)r*v^kXG8_2~6pORwZ&j zPqCn3xjYa_A7gx=5UHEj{r3`R7p?FL^eWcZrzjNWR*zV53fhn-h}Ke2eW;=$X<*C+`k?~BTyeKM6?!m4QUN})dQQUBK3qs_N%F7Kx}4O&W9Ha9vG*R z`348#VtoU4D62041P+((k^3fyJ>sGje~dLO4fd>R^}Jm2s{B&`PgpjBML&&;_606A z0ditL0^>?bAlK5AZ}H?5g0?-)$?^X6;uQH_UjS?>WhOQp1cWqtyp}*=day_U?bvwS zT#oO^^?TdB0JE`|7aSh!7{nweh*K2U<=_Y=N`kC30hqX1fnYB`e*~idOpuKut_7aD z$!NKZ@sRQnV>}(0j8^e0;?@^n2F-)35gu!NJrt3QBJjeC9|Ecx@q{fg9rmZ;oCk%Xdj~M`p;{H-X@CX5PJRB`No{C%Ul41Cb8Nsi zLB*bwp`>02hl)@8P}ulRaKy_G9<70-c@;pzGvkGaUMui4Vkb|b@CtUaDXfAMBAp$! z2~l34?Qa3A&m zCWz>h)B@Zc^1qNzbs$!Ig+G_XDG|#>G>AmQ5%kEgf|evv`#$kUKu7!v*B`S%+(?G* zw_F-77s?0SWW?3t37#ff`ZW5AV#aVDu*<<+>8isx0f!5j=-JqgWD|$J-0(Y)Q#dO` z09i=_%3MYfV!())&$i2iRfJeLB5w3$gbB!{K|)gCVlN`}pb)zbB&0Euounan0tE8J z{tZe5Q<$wq_&@WvwgeFgkr+TCUX!;890T21dVxb&YK~#(EdaVTip&Soh z7`Z-QlHf%muHZ_9>G8ihY$2$prIBreycy+W1j+EU^33w=B%!B4fZdP$8&<-!ND@uH z*vgqN*+bzTWf0WUZ36EF%pShPE*h$xz$CJW*rf3I|Z*m|RIR zG(52f@JuN|{fdR~_m2VUL#GoN^bC4c5tO`etq=At#;?laMf|J2;YQzHW%2l5ptIBJF3hEFU;%y6oeLPZq+QiXtBS|?S>c(bBC=Xak2{er>8D$9Hf_#|M`$7Cf4$@z5x z@8B;v1)QNKp{1$=$=XS<9>k9>rci!c?Bg{loAOP7?va2(*qMsN=J==@S^b4_L@Onz z$ne63k&}}t5o|B@N4y}Y36T?v{U|SAKO{OC5BZ9PFpO|bK!y#|W0AtSQ503+9f1V{ zBZ#7tqA1{45muD)!rV|<#2DZ_Fh?kpGFyZdg}*DXqWBO-({CE!-24m+-8U@grq?S`&4DBgbP-K^R zl!1Ch;YpGN{3Ag$5|M;0Peqv@Q=jdT3LFPCS3rTn0y!W6_7|7YJ{G?E0v0?e4#lvT znhP6?i=x5YP{|5$Ks!|opaZO*T#VeM2ucP#irL}W2vj@(Ou*Hx2kM|0=7?Xk*bAQ! zQwY|1u6S+X1N^v zodbUpB?80>8z@pUjhp$P?8QTXtu3jPWEXu_-Cpct3MXzk-A>_|90X(KKBxwzsO$sD z*(Cakf+`X@1uE3@F+?cgXQs!+8h|_Ky=v6s9q~uu-#8NKGby5?kN6_d$7F*Ek3|Iv zs2NBhV4a`_6ath-!;{O-N%ka8nGjik9JsLP)n$S&0Vl@)8zgB=ikxK#8$iTJZph!j zCuWGMka(oFg99cbj*c8WC0I^MqJ`ms6!c;-G)%P@6<{_YE^=%!gpM!aE=H!>KhFyi ztC);C5L&q4o&`||VKk8es9QZL6z3Vtz)n#<(2vKWy|RT+YXykFh!LNnEI`W?fZ?eq zgsoqL%Rq`+fnoqz6n>Iz7Qs~!3cEgk%7PS->IQRdF`70Y5wyCEuNuHcW$?UOidL^D zcr6T+LY7T|Nh+I=nTjPPjX+l((0GOdh?7u&O}ah3sB8dE!spDl6yQJpz)dn!2=N*y zA2HT09(f294-+zzxJPp+kQqXmSa1(G{cTr0ang_=Ac(n)q)V6iwnrNte?ti#U#FxK z5Hq4C;G%w#bauGga?Z)Rd)S-dkEzGhxsn}psg-7ePxicG9(1aEDrS+>5sXN|#QWv; z1?1+d8n30-*;KBZ5!f9pM;4$L(wz6j{^?dJ<+-3r-_zCRW5*L1uE9tR=dE$wR1K0V z*wR(pGVCre)c6lA{qU>v`7f2kIW5hHkM2KiJeR1NzIV&+l;rKP- z7Jql1aVuu^3+WOQ%@i0unW+B$zQJ0!(_Ta~LYnF9VT68Kp{nuZ%iNN!ocBoXyVJG8 zw~ZnVCsVZz@6(v`JpPJ%d#4L0c<)>D$QF`i)3|h+pKX#FuFLh98th6ZgL_Ps{Y4&= zR+~^(d;MN16{E^Y)pyDQdRo-JukT9vT0YPum!ww?y;N&*R=OXsV`kUrnexxpRSLUx zJGwvFImXD}wkcGD(mD4&qxGxgj2I)G!$l5o(lMLTeXt<%F?DgSPWk9Dr3mF7Q!lDq zR-xAqk11)O^x-#_$J9ekcfn=*^TH(;*$XO8s&Nf=?fS3A)pE%v>=UE-Zth2#D!;p5 zWNbY6Y`o?cBmL8Xk31*%9Lm>39AdX`D0O4~Xk%Y$&P`Q=B)#-p&%sV-=`p!}xv|GP z>oFx$aZ^F9fJ*uCvllWumqc_trgpl%s5XlGjW-`t=WUPNm6^7}th^YR#;oGTToh-M zPIydpTsX~5b=lMd+>##KBMtYI&qCSOj$d1(@&u;y#oUAq5fjP{6ZV#Wmni?*bLvCR zcj+I55C0O-v_VG(A_O-h4rSobkbvBf40 zwHK)$Q*SJ|6znK<-#?i(z;%rdvO7oQlqSYul}7G5ER8T1I=f!xFdy#(ymJbjf!yV zG*@R_w#vi1PGkP{H-@q|_)Dv}HKVQ;)njV(q20z0vTIlG1!rRTXm#*?F9qBz9pH@0% z?yCC<*Bo@;7#Q2$&pcnTZ|bk(qh)JUjboU7g{m|5h)tT&c|*;;g8M5L6jGiR_t3&W zSf$gwrQ(do)T0_ss^Yw}Y)X~g_MdmXGkT_mzp(v*_PNc~=baTf_pA3TdhR2ocGbsI z8oplt%|hviKCg)j@9wb^d#WXZ)VR3#;{$DiUn3# z&EOcs#Al&&mUYzJl8KFn9lDy-nuSIB@?PE53f5f|p!(|+zbPv|z4=jrvvO`ayZuMz zIfxkKM9n4bKAL%l#kvlKU|?)S+IhDlr|U8G+uaamN=*j__n2~K-L#(KcF*E|sNysq zIQwUDngQ;?e9-h!zx}@yCDRN<`@}R05<=`aH%?mTPBUj);FLyiify<8G(}Iq!Axk& zmt+}huDts;`|in-xp6)Wr)Hkn^@nHP1x2R*@lT&p#ij?NE^P!&?CZ40k- zBoSo_BGG!NQK2G7stqywC6Y*6{4+GUe^fP&qY>$jLCPliUm)wO9(+ro~nUE|j{QRndf zdAGGcSHAgzm&KLz;I*p(%)s@CV7sM|e?r2^xT zA8ub?8Re}Qh*I~g(~3eWy(8V1ULJqz(ctxkAOCq5VZuU{?Y9>uHs3wkysqlVtge0M zeta>c`lFNjKB?!x>mU3zdGWCGD9q$}^2HGYBj3n~g1DB*uJd;pciB<5B6t1+V+~#R zbeBLG&UaScz0XMAW$VT%Ll*s)n}-C{Qkw#Tf3?TH#N8mIzaQE;IM}sGz5iV= zA8yT*h5yi7o}~}YTsk8?%r&j5apU$EK3-B9+-DsA+ViK5#pj*uh_iM$64Ra2|4Mgm zv-7z3W|uWYH{v`vzpvWuVDHhVK~C@<4(jHE1IN_d5;B4dPR4C08HThd*z-^HYAJXl(Ut447 z8RNx3=k715={?>;?p+7Nee)D^^-#$@XRUQzwfm%YN*Oz^zr>w>{N^s}G(XKlipmSO zDZ<%HTU}!hU0q|V(lw2L@mc7#|BbSzw|w|l-TDVbZ~nuc9_C&X(NQtlql@vmn{N8? zy8wEx&r;`k?{i&`DRqyOu7(iQ1ePbH*5*&w5BJsEZVdRBd$kD+Bz<&%E7bIEj%)<@x%854!8x0! z?=G)3i&Jdu`L_b4L!GkS9fgDL)uD}bvl<=+)b>UBF5OGHoF}seU5_#wWg+ad;2(o= zMgS*OFdNd#M^2K}F$FW77|kt90wG@=&ZpL|6Ph)A=hP}f*x~e(3KiE>#ta44 zW|ki)+SzkGgw?n>Stc<^6SulF7cuC!Uv@5Vtp4E9A39&Zyy2jH?XDN*^t?ICv1X{# zmgSiCvNa=m;uayT5=|}9JD#-^kk{H-M`u{KKfHat1x`ZreXiO z2N^_sV2mn{(QGit5l>f&HnCQ6bMm8GRbkow5|)SEag6YsJK*)q(jaR2{$rwyva?o_4PtgCezCLjL~dUF z2JaC^)-2b)p{}tk_e63%?^*7}Gu6=xKZ*^hD>UOq>CBL`bnbDZDT5QHSI>RGW{%%@ zpt|;@O1Fuz&d~KKi9&YwV^JXxqpB|GjUMkI*orJS#LsbpJ?<=RG7=On{Hj1YtK)3v z!V?!BQyP~Qg6x#4cMZ00`2td|oVsNIRM|IY>%Gk-8$L~&R^5AXthX!7?LFFd6U6W7QyM9xO9DoJTVs|6I{#CSC=qR1O7KWSKjN> z#zBjx1LTxi(<|SFZcD4Zz9F|Jv_bxrrIWTmtDV1Z`Qi*G1r=oYhcUV@YQ{zkB~3IV zU&q#j=!d(jO)9H2ywmqUlIMQ=G|0uTmlrOB_5F70t}34oF5(gY1=oIDwIzJCt75nd z`?O4rbiD})l7b;Lk>k>4iyXM3P%wFaFL87mH{h;4FvN^-qXm?it6=BfJ}Pn=g|LH% zw6$fm(ph5;s1kV&pn_sx&|A}Ed%x%A`LPiqgWAs2k|AYzXHQAZ2&b3>koKQlgWso( zst%A_CH-OAuChrB8<)l{nF|4)-J|);NZ)jE?;Zy9q7o-07Nz z)!WQuhGnu&TOQ4zLw0^yT*>1>HU^edF(ug!hI*UtGbws-C zUq&=aaVho|BMdQ$Hn5#XSVtwZ%4PKiHJx3%mQ8#0zUlyYAAYyb2fqwHP*2^0+xOVc zH&%o;YCd%T$84(z8(iRacrUO{oIOr0@_G>viTpowOece5@=~P`NF$y3%%ByXWY724 ze(q#M>6PdE^~2@4=TZ?HD6q}9ftr0G;Pb``m31F%p^6KMbWA(JOgX6)ISE3qSyw(K z(76#3vIMB>+pe{*S(u5?0>9Z8{&ng{jZ?QgH8rmHxwjUafhIlG^#DR7yU<$%<2zAh z2TsG3@YU7exlxcJVJ48((FmG3f46iPl-cOVxX4#n`%EZoV~y^V%D!vvyC4#Lx`q5 zrrr(s)2`k>uYKw1*FRkGk>_Ko7y7p+($Y9Or^op-^hwvB$qjfwOt3*6`CWL6ano#b z_t|^tthc*EN|!bT>UJD0$%L{$SvRU=tli)z%M=VR>@hX$sCM6DR$3r{+|&VXs=0BA z%JpSG`NR;6fU|b!q;9)G4||N+lb4RJ4}RO~8tU06Tj11OeyjKwTbBNVKeewoTjeH^ zq?UPB=`Qyg6}JXDvI_(H&)}dFUkrKVmTY9E&}}2#`nV1JKs#PpXAvrDwd;tYaGxv} z2D94@j8LwP>n(u2cMm&Cn`vg=X-;G2ya%|fU%CoIA@;W!dBAVOCyDPm@|DHy&}ZIf zojmPu!%JhGT~5}dw(rZbPOI)JdT#An-?z#-97(%f3&t8}4)#btw0YNck%_=?xjUsQ z*Tu*VV&Z7aRhqHB#MVVRq%UZ=pHPA8D)#VPc;PSqvh0O*O;XAd(GmDSgr02h_> z@9EqMW<<{9`ISpT%HfkPaWdDSAyoEPpi$`(_rSlF^s-Y98G%m*N9pS8-MI_0*pVZ( z=M>Cyx7xrkwu!r4OCo=B-z^z|=^XpnTDa}U!B^k#{G)5lDYukga25Ba%H@nCSlKR&O&Z>%QM<-YJt646pxn;_DihKza4+2(jqYwHk7l;NSPnBGjNmjg^%6wa zYB*U~heBR(@nTQ2k`?-Wk_AmNdaB$CmWpKErs|Qv${i*KK+P(P_}ceR&8q^~5&HBc z#q~@7a4zdwIC!~p=2`CLI+ypX&K4DycoyR(gB$-D8+c6dLLuGSp{a9?(p(~>4J!c9 z)ps;D5WH4CtYn9vS!li7pD~5#^XS?s-8qFb*o5xE-DbOVPM7qNH8HDsReJ5!pqvZg zV@&~-QVsW?s)m(!^h30TxZ2&&!HqZDI!v@c0vsjRT{t!P$<(+zs@{{kx%-(AO)dmW zunn%_?;|7syKGMwb(E83bqT{AHWiF3`DqF?%Kb{tIhgZ5vG)Ruz&1^Cy~$t{rLkfn zuS|l=eRYE; zqeHlVu5~(_N3+@uOfa1*k`p>$P_f-ilOL0iZ)=eIk@W(}?(U!S%MoQl}Pb|`V1R1Iz$ z;Jj6XkJv$57K9&aSoncm%}%L`9{w?mrfnhf^y>1Z0$(Hn)Ak zB~@O}S=&FXJ2gOg8LqJ{WOQzOA=WgbM~W`;=3eQk#w?8s))XHgfu*cUaK)t$LDJpY zDc~*I2;1fE(I)&@nirJ&N(K{aD9H<8~8-A*f150Lw{u zPP&zo&LiYot+9G%*)w`RdGwgFSYf8qKj|NFtyVP%Y2CQ#F z|8}tN8JH=Cl6SM%3xoZcM{1w1(9J!rKX;O?NvniKTOXj?{gCKkMQDShqEaF+9dfz7 zRn{-CzBAt`?fdGqY&TaL*>N9cvkO{c6k-Rt9IObnL6@yIH^TOTzTPADyo$r#?3k3G zM|Q&~5Hu$Ygr(7C-mf0&W~LmqNQtA&h-srJfSKxG@+vD|7^^08bh>+VtFX>9ndQ9} zgfBO2&`x>D{lmzhY?ea^oD~R7Q*Axrcws(5l=j3bi?Bb(TitbHXNPw!w`7;&2I6zS z|3D#JIK@rNXhaZSfxz5+F5ZwM?KYBh!&~~yR4y^nCJf?DfP-0S$bC;vAiXRAqh>?~ zK+no~57-^VZ~cF4Y8@H?F_jN%5mONr$KDij-OjNt1 z+nRSAt{bZw{PO+IeKp)vSoH-ODEHrgKs;W_@~6f+q(4KAaCxbWd_#^k`5|-S zN5?xr3Y^6WHm{6{Ra8b8b)R=Xrly3PP8@Ye%{s}6YIncB>9$e$c8)Ey>mImUUMhCm z?niL8tTD;`>T|)lolYIRgqpOHp}_K27y@`KSl8Qb_VZ@XZs5^&*kwn<^k%XlcKKe+*s z3q*zhqdU4Ds}j&FRp~{B>KX$Rr*JCfSY>W)0^&Z1jXT-A>D9yOrFrRaOSPs{z3@R-%-(=TEXCd5?Dlml$T9`nKMULA3tEaZ|;tc#rdTJEReV6Bm%-{C@_D z96BQh_l@;8`B|h&wn=VTva9W;nOi+zlddIDXr!B{RwN3f7`i{xdCMYx>9lmNtIN#5 z{dYTZM+^rcF{_-F;sA?Cd32=bMbWo%4=tYur=MeQ)a@MfVOA5hC8SI z3h8Cx0Z!C#8dc91D*L`Vs4WdYKKFOZx|5L(Fw$IS?Y%Tc7Wv70-MUP}_a=W_xw^BP zsiAXp7?r*A`5x0B@6}y`w4Sy}!w2sVIG`$;=(-B%hMpQe@a*IyYkf&fz%ZZ@>qVnOxB;lm}xrQyycWIQjQwt7dv zdSiGz{dNzsCd`QZxFhbc?s}%FTMswg8cf0(^Z4k1+fhB#qZP|bo`+EmtgZc}XCiWu zuwkl>N;R8LGkNfn9nA1sxkBWLeqtS)Dj}6_XUT9n*0$~fPl~MODTmljg)umUtce_J z-&5H-<{FK#7e(k_fS1>@U~sCLE3yoB4Z3z`jXi=eR&M3y9x9#ZNqGo;a)iQ&UPz5` z3ZUIjtjNhEY%<2u+7;cbP|n2q!DEI9)pDahcNVI2bKlNIME=1}#(G;XTwDJ9ol?>L z(qXvv#}0zdo&BG@@ZtER9b%f8Gx&ZuiJeaLkZQ8RakQo~I>-GxBJZgZpK9y29d>L-*UZ*8}+)_3%x_4-aS zI(8(j6n>7-$<%}}LXi4VWTVF1>#Z6Qs$8EPH4gVbruyh|X#}(CB$#4{{X&3VvL1*A z<6=iX?Cg371vJ;T;XR|+z%2iXottiP%slFNi@B%b79a|H5;`5cM}AIOWsyjyZ|$uZ z0DHI)^}aN#)8wZUNj2GjknYc>TzQk+J>Y)rN}gQD(yO&7AGpOVSF$p4fzbulHCc_) zjNg{`I9J{!0W)`ZP9j_;H|LD7-tDd(agcC#CcL|FV1tMDsXyDEb>t>Ej=r}}J51}L zSt9~#^Hps^*bZ_*f=GGIPP}~O{EmyEP}sJLUDm1OyeOcARD^m4Oo$Th&lZn#Gb@b* z5rb&%bX^3njhvbC_JQ?ybp4C-nDD8CACO9qbzMeG? zOB_AOrRg?i*)}2^aPbitoYN6fV{f6p7VDQIb?MYv zyDd$D>xqHFQ_`Zez8Vi*&b7kj~)$%?v*;X&!#drU$qSdQ&XuZuWQS@eF#RJE&XH;L-Q zK?~s~p5tufSLp)BCDmTPBF#WHwUqL4HBuQiu_Tp|q_YKqxe;k4HHWmKnYupu6XA*K zVP~y8m??5|iMMm!Jmp&Q!DFhZJ6E=&i*Rp+szcKUc08KbTQUP_P{<8!!R;V1ZwyY2 z%XM+z-OHWg1oB{F(`)CS{QMrG4Z+Z~Ins#6kVuy%(u%kssMG_!5ld$;ZPa871kc^3 z?3bpVvb`MPr^|eyS^ti44P2Lj-0e_E_p4lE zs)iv*+}liCMR}e-xwFu(_W9qO-d7fSzM0hiW!A*Ho6kF#SX%#GIveb)%|~iLVQEIZ z1V(9XR|V*-YW!jcc_m9{w`mNqOpSd10WQL23%d5UQ4+#lKT(=@OegWv|ND-y*-*X# zI0mNKAC*VUvxjsMhlx$kGcl`pi~^WVGq`?&N#7J;j8B6{fFbE1{;u82qt1U-d}`9R z3kych|D+WLSVkTo@oI@Mg3ccq018gVm8KPfxx4fwv*0NlTuLm%z zoNRM1V*M9>?#qSRNZ42ozLDUqm-OOPT%Qs7TUHuMO@5_AYIp0OPsD^6ujR@=?P@64 zfCwYf*3b{N1^g#vvznV|t)%;N)NUzexttd}!Q-8}Z4@=(PCRu($ClPJJr$8m z#EYf>`r9@Itv^UN>;OEcONS97LAhOj_478(^Oc6Bjj96;jPNb37)k9|-#j7r!UA8gdjyd3O38D~vGo1_Vo7q<)F)>pDD`zN~h}-4DTl>}w zIJ?xxdCk5AdIrDL?3el@pmAYb}nWM)6lV@u5R+ICS!v46T^9>1N?+S zN<>kY@J!H)lC*>8P^M+m{3x5ZK8&ld>%LkOm(ybj`deJ#k1RNhSL%%1uM`l&?WoQC zu@t(y4uj#1HW?NmeM=3|P!~>rLkR=vKRt^F^Gbu$w8KXYc5#HD>`U+7qj}SfpWV~O zAq7q#;Z%E}531aKqA)J%fR6rWj^>uPA{7ThPrpQ(qNdUh*jk&$ZKa<6hFXzjtxTD8 z?aN)?$aKr!{owEKvk@?14-m!7l{g`jA;4!wHv%PYr!5_x>lhi66LFi+jzZOiHk-!m zF?a9b$`QZn;ls>TlWNajRjKPgu5(t)0}o32nJGtV9k-30`{s53#a~EKZ=pyUw%kkV zTA~^FSn;qCN4}^FkD=5q7&s^U@LOR|6txTr@QukE6K;R->w(bg$4@Mp(lCTH>PeU_ zCey**eT0t|WRa1K4Y*`ki1@N&r=X#nkLc`eHubH=cU_yc-`%O4e_wy@uJ6*t(%_za zcdKA-KWif3LtAdBwKgzfPHMJ!hSq~5l&c7301B5xR^cS~p4 zZfrwx=#JL4M4GBxywPR?B1<`Jz&qL14q z^v8HSX=?8jm$%y9tZ~^QR5H*`;ZF%C#6%3GsZZ_k{G*Nj+b=MvTQ@Zpvu9T&51gnx zdN3{Fmfnio1mq8q9h!A&5TN|cMJl>@{e-fl#(A`^^MTfWiJGweuls6kA!E769^6}b zOXb%Tu;SJ$+ikOV++!rP<@`@TGbOGkIzNWS`d4?@HJvzhqUEk5PL`{P&B5|)Y zgY&d-sG(EYznf}^7N$wn!hd$OX8rHXs@d+YU9Nil+>*E(M=B-hxe*3kSkcQvM=Voe z+DM}10s=)Ug2~1Vj8IwIb^G9iS2P0$GNn5kZLYDEb=Chqmi^Cz0dYs#NBZ^d2U?N5 zy3eoD@nU&4iiH!VhEi94Ia-;3WOv0=^PQzb&Vw7$4nFwBnV#iRj`r@(ygC0Z%e5Dw zqjPJH9c=pXgFDau-RfL0xI`S^vtrI~tf;^CGumwaM82bvNnGGu{L8_(V@K!ieD|Bn zoN%TEW)K{%^@vg2yYXIg#-P;Ys+r-+qw@|FDyCG7xgF)5_gUzZb1$)dw9XX3cu1~D z6dG%ybZcwCr1!K137XUf+DzBpyUon&)g~*A+gtOV{;oP@?&!(5VALwXLY5K~x(JJT0bJwp|)aL)a zYO7Wt>eYhxNS+$;jHYyULx`oI%vm2p>A}=ZQ+;xzPbcIyc~TKkp-n-StJAfsv1h|`;F*&1J?goaeia6efBpTGc@#~Skz+eHQvn>_$UpdD`1e{kw9RO0 zZQtW2*tFL51qaE~6Vj(QRQ;y~>u(3GC=>fsVhd8Fr0%4;RXt3cT(OfaX<|Jl1^3I> z%X1;nPaZz4dV0&a=k(gpZxfr|o6WWxV|QxjPxC+gn`Zxn9L=F6B=_Y@9Dw@P&PHdFV5oQ(tedoZenqII%T$iE$wELw&L07Ey=vrj4 z{^ZCy$sq@6s+0IoAXUAo!QR9!NpG54&p7PStgSo!%0)=xwobLw zdOho5a%V8mtH8oY&%KN{uM0`CD=W(&h=ir_jtK>+?Djq7OvagDH&Na{TQh!oK$a$lI=US zx#sx#{sQ7CBt0r}JKN>`Y*0`ZiJ4!F`CsSYZxV87y8i8lgaQ(m9d(U7DS6?j`rw^1 znI8o7kI=bqPjF;s>ixN}xp)59T|RDO9t<)ybDWC}6v)rPy|D(B_q7RMfF!BwysecCU@I6TOcIPa2_-FB@NsQ27bojJ{B6V;h7_I$Z? zuiXE{yZ<0#{bha*A={kX*2hXN_no=s3)NU*q0je!)zM4RpW-jh@46JfR!$4Id3v^i z)|5$l^53CAzAvrK

taCuCH(@ovBHV2rWY7cd;PQ7$3Rdfg)f5cw(XmT{T-m@sm+ z>aak)Dc*VaaqWR?=j)<~D-)v5c#-~r! zb3?LWrRvE##tBpc<6wmLy(*CIn;MuoJnj9Lx&KP3juS*!0hq-b%s?Ns85ioYt03Z4 z8nU9)TQIn`#2+%%a#v5tE^l|O>z9-UaLHNTjxwzea^c`x;@wW?Yj=eBm3sT!*f@Hd z2Q&VTDP|$k>Di!L)J;KY53}f^`}vJQt-9&6_qice$esb|=98MTlF_PfU*Sg6`wmJ-6JPifcu-qblY;eUaxRqG z57nmJksP?Hwgf@FQ`CbQ*2C8z@`0*a@SHJ7Kf`A?V&;Cg)a$~tF{0(Zw$cjNwAmSP;J{KVBWSdJaOTT_ z!QYoE13B?K=+b}qWl-*ca`KKQh3$Jwus2$JuQ9~&x@)SBcp(*CmQzSDE>=-->Fw4z z_Mzz*SPb^Ms7swUpINiH*qQ72>l#T45+;WhGH{E63J<(E5JB{g3LS1Zr8sN%3Dqu9 zrl=FbOFay}R@^;c8oBBH<4TF(sB70rxA{KFnW)#E4}X66F_H7nykk!v{k;LNnc|Um zwD)&uj;?awGzMDYlb$bs+MmJ1scL4`_fG=RuTRgERBlAxhpH|37JAlm@3vQfe-02xqXKbE;aU0J*7ltAPl9+R@-hSIK4PUj#|ZzS3?$}inf zH(!$q-qLJB#3Lft`eTGs`a*4=@J_h490rpzW<7faUC1bY%UX&`+avP0_hJRD@J&m zFDuS#INI}ig>#6cTV2~N8K!0X24p|(cs*@}R6QtO@wVw=<@w!rg!gwUx>5HuNF8xP zBD|`Ic$Bwd(Al2<_dsCkdPPs-Q@q&M`|vfl$Q!a0^IGQ-MELTK#2iL5ar&dbj(>1@ zIC(!NKfSr~0JG!+C)abtwl6lVaCLY~e7J{fpJVo&dgVzyr5H!dX$Efm%>An`F8WKL zJ3!wFi7Rz_p;4IP;<`D`{al5r_NH6i9OrOV4c$$0^I%v#eeUY()lZqadIqsP0Kl;bfm8rnG7S6GxLrriIY?03F*0&PT(#aIw{>8@11r_ zC9!+=R5C-2$iZExvb9t>CqA%KeQ~w6_5@j&zUkMWKDd~3{EeqIqA~jHYNyWJ_QS^o z%=VCr>vly;pvU4*WuxeFt5N%OIXLWIk%aEJ@uEwK1DJ{{f{ddV2#4*0bVu>!)ljz5 zxDe@fY4yct&M(@sg8cfO?w)iydjq3L=n3k5;D+|l(c1fvu)5*Ovr5&`24=At#hcjh z{rshJ>AeUkG@vLSQqzEZ$b0Kh2KRJ z5I2Fm!*>tolg?7y3rttQwS zAxx5>!eGWR%AI-7P`hK*eC_#jU35*0ft#v5Tq-73y?!uOcy_HUs#GQbcSayAUF9_P zj_(UQHJb)Q%F=M#G@hWVmF!p*ItQDYPX3YAad|PV^$KDJe6m! zN;{?6EO6Zu=T-}zxbsIP>G0b%yELO*wI5USyz26lk& zjTdLZp%mX?#*`DBi$wY)-u?bM=JTKP9!>XUc zTGQLW$tC4`1_bFM?frEEhqaQ6F_IP0?ma^9l+{wl0Z2BD*b30l8KS(-7)u-QT*4(% za&XtG?=`n?{6KU_k6hXMOq7O8;-$N{iR)qSONi`h?-yR<{Qj>7tuox=%ZE+eEch8K zk@2Y_u`CBl4u&4C14k1Z(;=rVw~anQYz696)5a`Ks?XhAwG`CwEY+L1<-Vd^n{re* z65LQ5;d;o)```_&y2ATVpQigNT$xI=r$ST~11_nWMnwBbW*h4*nZG{tF8SYg-9NJp z7n~pOQ#;;vJ9JyHJ3=sjbeD?~dEE#?2UJxmA2&&9|BU1W8^-Urz7l~x9psl>1)m2K zIWFS+v65&DvQ3~mJMPqXN9E|uJ?Oh|4sr537IN>n#BZ&3_n`M?FvWOBaxv0$R46!m z+qFwdR?Db?QI^xA2{u}3VawlAUybnGsxIr(KP>o2%=^YnyA7LO&(a-{h?x z+}g9vGdq~?Z*aYM>cwE~Bx4HT`X?<&5D;mqs z#)!|Jl-9ehe-@>_*Cd>e5Dx>D=bgb+(Xg2NL=8c{FqF0H&^Z@Nlfx}anh0&>7q1`r`700)~?Uk_j|JWCu;$dEd!IJC;grTE;=DB_>vJ8e5W2%WlnISJj1{=$4Mx>84b;1 zA7&GpU_5C*+0h6&qOO1R^K$K_2=_fF7`=t}*&!HaMSCPKQLfj6IhXPH^VO zG`_JR{TQ4ar&XV(hUd)ZKX@dbg|kPnY=5e7o8)4px6fN&fTr5r?ZyIqC#ROPYUhqz zX5%KvgHULJvATuzlAMH`J(v7W zy1gYhdR%&FKeghN>w_6rzg3E&48Av)HII_IZiiwsW=W$IBw8{~$>ZH?*Qg?0>OOrr z&N@d&ty^Wy$C`uHPvWF*k}rnasOS40y<@}Plo@_oy7|f#dtoy*<}BEpQEV#sZvK|G zcM`J7*x>>`n?S_ATyd1&f~d-7rR&oP)9R2)6}Q-{ z>bX-JQ^1vjaj2ce_d`NGlwc{1*cMh;>Mjw0Y-PtkH^k-8oH)p#y_WK<3rV}`x_jhM z=v=3}TS!aZHd#~r7MNfGi6aKmwaAd09@vLVH(`r01wSw@!8=$ zUrL5jj7OTGQ_c(ny=F|dew$|5=j4IohF&`Xo{q;UF_@&<3-|=!;jANvM>yvuq-HY2 zK1*xB?&7GGtTelyk1LTeBP;ou2_u!KiaM?C^83AbuIu zJbY-BeF%noD$+$kd1bXfaYFiNBW^X?^ah(8iygiAun|7^_GaZAF>E5UQ^|HGZ?`eQ z;X9i>zG?qbFpiMH&$)Q_r~z@3w3jaFN;gqz1ItW-J+JlIN&_RHH8ayVR8i zO9nJ-;)M-Re+yH&N;)La?z!glkRV$>J3DnzHdC9q&sFw9Th$e{H&?|6U zsgOAc&izsQRX1!{5L0+Q@2w8I*924SkJ{U(KRg6!TE&-6 ziC@TT!6d&u9dJpS=FJvfc}|SY{6p#F-;TF?&rYeGiP^%^%K0Ug%7o0=4sc>rv=Uv7+%2k zpOQ-I4OV}0AME<%x^}2eGrmSUIv(@Y8?@a_hUa3Y4F{1TTOd<)uoVP-}dkCcZY~F`SQo`!Wh#_!8MJ1LModx!4&0i&KX2aK7@>5 zrB|H}9``L7$E*_u;SBwtkQDh=@`TU_(a896V zpF@azW9!m>=)K>^ltK26RQguH_{m?5VL=xT9G6llka+~eRyKC{!U-m>uN5AeWjjnf z;_S4cJWP=db3w4ogq2M36_mzr)ZjA352e6d0b8shfL%m3hX`d@#|#l}2m65`W)|xV zB3JYa>reY;U(<{ouW3wdCo@za}+e`704Q5MO!x3DI=BAFn= z6^uLxU8s`)Q(Usn81tA`_z0mJP97zQ$9zm?QdV*fmYl(rUe_Sed^>S*#cFj$pfy+h z{JC4thldA$>tyo}-Vfx-4yAPWN$(#EXwGiv@-vDFJXvRO0oE%OrD$>5bHkzD*;v_P z>?I++9JQsf4+3x#QMy6NsG~H@x*&_3viRZ;GYPZZI3&kK68C*6P=b=Q`7$o@ko46d zX>TaM|2K%Syr<0PoEuMOmubv;sA%*>w`*b-pT(9#JzrgT{^w1PTtEGF=99VVX=75Q z`|jAF1vy%@B4`_m)tw@i{P`g;E1zUyGB5g`R-Hiv2Pk9nI9Cm{AQLXkh2)J?ED*Mp zye|04j{&?a6UvdJ?IW1n!W557?&XtVQ&2}UIReo{+e&&k zknT4bOC)SxZoBVQC~lR2vU8oY>~Jtq9b~jiiEJ4N#a>wsB=s(Wy4zb_l*Cd47MjjD z_!`=sTz_2QEB7-b%))XR_-CY!dt-jB&RdP`eUNV)7^$6y5HZ0CgHJ|8z1aWw?$0kC z{AR=8-$AJE=fRqVIh`GOu+x3pP348xPhzg>EdrGTOeLk@;E;jpS*YLt%-Iz(CpIxg5WE`LSJ$aDZYov%ZDC3zH@uPTH*-a^ zm|aQs&(dSDAxDpkJ*Qv|Q2hg;lv1hE*Z+M(QP#^FMFcA(`Eb245wwqp@JYG*wk+ct zA0PQv&u;yB5X@AKp_o?#92zBkcIt;Kmw!r-9DC-djjUizDM-13sqmw66vlp=Te@)T zQVWx8Bg}1-{&BloJz>uK?kwUQXZOD6Ds{W5?lckN98%^B75Wgvxg7kxWxNCeS`BTw(2X3!EH%3PI>M#lf2U?}R}2aO3CR|JD( zM=jP{$KlzCcu=O;j#o^(j~q8tP?WgIV4mTfThR7t!bO66sMX{bEZiE*oVyiL>+&UVcouzr@%Oj@lTV-9#WW*6X-FDBIUgL_%2wi+wWN5eae(41IIcRh>&suOVtyK-I%rxc$2ki$FecYB>({8-sIoS>lk&BmfJD7l_l^k?ImjCK?7 zMw225xX_a6=(-YwtGemK zt{CC7Q(A227e9YhwCXc1(F!L|5>+FH-Y9P%v2D8+wPx$Qlc)Z_78+?2mZ%^RLB|9l zp|$OTNC&f7J+Pnd4CeYXNRL^Jsz)lv$Wh@dMd`HFABvtWov)yDDk#aHZnjg-J=zU7 zCEJ{VYZzAQK_b@}D}C)R$wg0w3ND!VoNPm{4#nqy#|{V? zSThlN%k}_{lU=I0C$@(85OEJQ?%TSFc}7 z|2qH4{5x;nf91*aM|n)_W4P0F@=W~CZ=Z?yS!PHIz(HfHup2e8;_mC}$g7861@51kW?h{hpcWiy$vm<%^4hqg5vOB7UGAZbx>Ij0>;SD@vAe7gxX z^{IvaL~OUVj$}>k1jp>0Z7t$)1-?X zi?O$)oR|H4fDe=H$9UMV0XZC# zf5B6VXeMB}KPR$7p^aF(iI!7vaRG!yY%L@>Dh2n3LOT}~olP35PkDS~b3-@L+l@!w~MMDG8B47)Rbhi_iC0NEth=7w*T)68@7IRR78yB8|QR zTw`-<)q{VwL5XR`8VRhXUs@jdUqj(A{+N!*M?(urx2$pP8g#?X%zt-iet7Pp&j~0d z5UYGl4+AUAD37nG?Jjjcqr!_xCZ+}IPhopo8@x=V5lSRE0}WRZiV0NX$LA1GuZhuE z2z{Jtq{kf;*OensaRZucI}^1|(D#?^*4cQ!UtNxH2S54#5g@W;Pr#yJdcYqzZyJ_I zK-~P<^EC?`F#X2O;J&>YW|jNVj%Bbk4r(OF)Nxev9E3>O96tnkOr}Aabf;I+gAG;_ zwrnxhCKUyrn|rMXRS#18xr%YY)fFL6 zPid~aI{!#JKWvu?j)UwGT0TNm1sK|cC}L20@4DN;TAmuEEk1l~z3}2=m5bCUv=T|6 zCLCe23u?RSF_O5RfJLc$q?|sp>XE$&BU&r?pOJ@>;_Oqb2GMaf~?~*h3lT zAUd=j9!in)K-!9W$TZC)O+k0x4uPcNg*COQE4L!Ski3pgCP9>kuL4#me_(wHxj(HH z92G}hSBM)(g)dgs!XLULJRWe7%543a5M_M)@>k*WbDBYY6BFh`Jc?S4%k zaC80V$yl}2&3(7q_{X2w3uI*SguzmO(($7r3&<`{T#hd`hSy@lBUHj96W67CHz{J} zfo`G9?Z!K7w3HdHOUdhLVYDu=fnTvcZO4|4Cm_5SxoKmA~5ivkH}A8pD@neDa4CCRr* z!1o7S>bcNTE4OGn`|WVv74^Kxe)4G(-(llwCIE&5MCBm;M98JpP7dSTgB)Z@PKD1= zg6LOvzw?R*N;!{V;RNMUOBSV|2XBe*yR;v5c=186`boUh582wE0xygZ%hTVzaL=te z+QZ%L+}aaOum9UZoZJw|F2AaR2Qs11UET*@)h$bm_7r}>kM^1amxMj=p@v7z&%cTY z`PZOs2EN>AGz&r&DN3JW;H3C~Z|$=lSz)koSV4&&Be4M|1#2{6R>pIR)<}3SyFoKf z4rh{wy501y4j?>WpAGS=bQ6LI#>o;R7B;wq3C zFiPmcdP=rSTKDzAg<41_j# zG3hZ=mEI#r3g8q|Oin5s)>samb}O2NO*TAyhD*$1DpOc%fw5!~Ros02Aq@>26CPTl z-m(K#O0aSn@EF%RzP7GdH0xGRPZeS zbPRPaD7OSMVHBO%1cm9a{uyxlNxhFzl);3y(3LHmE(0DWFolc(tUwKLQ`G@?3}$IU z!T>$6EU2Wrsw0ELM~#*g#@<@G*Xxt+*r-GOLL~i@k88ch`<*t(zWwrx`-8r8H$Waa zXqQd+Kno>G<2`Fx@W8xg_*g5K^!2+9Zt;Mx8QDmP{Q*%7>6PLgDnmy)Tw$W4(+Iqt z`a>6*#D+82DhpV!$)#Xe984=4xXM<8OMy||jO5g_l?uj`30J4U{Zf804_%xoJ@DbS zt83o;cZ92N#F=O1-p~o*?y+;;f1UsOd*MZ}hz@9%NnW_0mRtA)AY=GJabsjs6Bl{s z-Ic>%e!qND5@GBQmZeRT9vO`D7%9^kT`~;TbSAvfxR8(IGG5+56x!M9jZAnw1X2Rg zV_35iiLvtb04{FQu-t+Je3nJU^!cHpR1mIqN{>B~(xp~EEnWT4wD+x$-D_nl>Q2Oe zFFQA=x*z)onQ*Cqk@-`mT4NZAhdXr zj12%OBq!h11y{?3_paX9aBAg__1h+w#?vqFaS((&+pYrP8;36MDv*4Yvau4jxd7xX z;a)w`oPspVbgO^dcQWKa&mf=esuoa?LINZ_gbHHXAJd)^yj;(D(VVjd)#np2`J7E@ zEDE9q3K*e;=o>@JEmZgj*jdP78{(1w-FiPd3A_`*>~N%j7(Cq9Kt#o5MyKuklSiWd zLcI6SlG+|&)KT>d{XjqW2F_8L1ca{)&2#Xw4J(;}3JJ2=qWkI|z`uY57`#v_ztAWnlEmGk7RiyMj)X zptdHOtD_S9iD)@2Zen9}L|6+HSHLahAxTQo?n}vnQE?{f(#9_Kh7iYM&qcWYW7Bl- z-nIVhc)$zAndjdxyy`uUI{B>Ds{T2O*y6eSGcg^fJb#K_E5pWso>T_E7a7deZelThaz8=DC|oWv9BX}g`t zZlL=W*wAC9CJ4_-;XOw1nmk%#H;N@hZ$48!ZXA#!5B%xjU>IQGIs-6MFsQqL!%$GW zX6u1luCIT+bNkirR~OC&73VcNqs#5%jrStv{!eg6GXgE!V3`!e^J$@-Z4cxrKi&%b z*nw07{^h_;t=XK^yE2v_ZN2>iD_Z@V6ydbB+Fd&IH(nNj;ke|Z!$xcvL#te_mkdq8@r zfa4lyptUbF5JQtFMK-NX(*M5AVL<*-Y^22JhOY=f7RPB*9$l!Q`WlI7AIi&uShC^5 z1`zf_0VYHgjN||k*o@I-!l;|&G!)?hG|+S`PDv|L$xsW-jg*&N^R6G1JH1r&o;cGj z?fhrPgTIA547s1sE}aY*idgsO-)$o+gdlXLVu5?RH;oU~BQ6C{$s{*qshrt!Sa|I9 z-rvV$@vfx;GS*JW^NpP;jMWzgpd}qhXEl)WT)HTbbZI5RMzOfZa8fGlIbkqKL5>QE zQDH-~&@hmJ0?0lEC7OkkE$8RELdN@!zEq`aeCgc-X|=x$_ryQ>2`DRt9zXB7u`j~4 zfL|W`Nn@tVpZ@ccx!>R1s97K5|8eTtbmQ{q5i_`+bOW$(S|p@b1HUxI zfTal0RpxqrxPRYU{oia3KdHJT3e%|I$|+hThdUIoX+M_SNatiAUO{Nw2=@h%eV0JPBl>Pva2rN_Fmg!(D>Neo54IO?r>^Ky=HNLFr{z^$RB? zV?zG&O+oS`;#DR*JNQb}D$V71hn}5+6oE{AE-P+|D? zHF!=YIVx{)yrJo9gf#^+w>7}-s21#W?Gkx!JMFq{t$LHQcyGVh!BJgrChdV(r%81f zpl!FQ^{WIv$JEb6bm1u5p@YnG40YQrNsofehwN?1;cnSIzoMV1+R~faim;>&-TSVs z&vlUh;^d}tf9c2-U&tJMdwCAzfdEK|x1>N`!Nw(E@9U<)yn8eD}o9<}RDl`t@Y|5if_4Z?wfEji;-@Qt3$%%05cKh*|tKTkd#9H^# z$A~D6P#@Rct@K_3S%pC@^OnXzf^NAc_H*{Wx8ste@8C<~-1UuD|M|X-^gi-@1U#z$ z*#Y?=4Fa@=W^iHq!Cr{E1RLAqWohex&*ep`!7xA&HFbu=$0S`xWrBXyldJB}qQOAh z&9BtGZkOt=qhzOSbP`}DI zN9t8Bd5Wki*PP!}*)rznerT1}CD6@hTdCVEZM%|bri|6Wu00hpNrYf?g%+IsE0+F4 zecS!xZxbgz#D==}@2|yh0;$L` z^{mnEb7HI;uedo$FJ4z&LS28n;k4ITFb{eAp@Jya5JyyYH$r&yR>-~}_a2ZWTH$+U zR&rpC_gIBf75Fz>7^}tDndWq{->FRGTsg@XXCtwV-|L)=e_q(_LLi+j<^G*U)7c}! zKzw-yyh2#-AEzGRE}-Gau%*ZCg*ze7Y9RpAjya{R zKPJ9Z=Iwi3G7rdTZwt1Rh16|RyOp{fj?i|!vw2Un`zFMDSx(d_p->9gonen0)GJ+k zw##+X9hplSfbEe<`=QS7|Mw3PxA`!hva<8u-wR$Y0*n+8bp@|9_^||V;udP5nN_5M zQ7T+vL(TcT*~;qlE%Vo%<~KxN{734uwJ#3k8%vIEwCsmFNOWM<5NgK{)MJUcd6%TEoJRZF$mo{WQ!aP! zkB3ejKi2T=5fHW;m_y5b!M=fX0zHC;5*1X5j1>mM%QKv(AO1(@F~NTS+Sg~-#r)}m zJSI-De3=YV@QS~Z(INM>%Qe3p8U}%U`wZMKVG8}w#YuQ6m#PS2AJRn3W3mQpve~3{ z+=!%+COPeu!o|#?3)3hN`ja!!fhG*DHh7FzSmK2d@4Pf$^h-w?6bGgavyes##o3Lv zbVGIqU)6>d=Q91lhKg|*zyqtt;A9EmVnV#=-1VmJoq%R*Z{D@}=9=H8A6=UM?aN2H zbRKv;hyBU85vIQcSaP`zJL{DK<)o6x9Gz_=9!w#Ld1y%rY4Slj{OA}R5|d-(g4m=y z*mHopXV#v%rXJtnE*bpOV&EU8;Svb~rI3pXw1)hUo``EQ45hFDpXZf9v^SBSx$whT zsOC4KqUB$^8ljxS%Rsfg|GoP8t4B!gAZf{c{`al_?exV?PXe-6x2=_X^9dCKA#i(L*m7s{&TVC z(QC}W)3W~)d^WuXL<{TT=u5x4P=lXenh)9nHZQW>M#uQDIl&awOfI(=n#Wi$eq78j zhWi+F1-vEzGUt#&zpAbq>vH;KQSsWN?`U@Sge=W5AbaEmm^>iMt@~h)Bfp%(R>-*a zaa?ZW2I}c{o59&ehXqgxO-O>7^vpp$DO&OKBjYTtPdoQ=*z+UvbK$iR^$S^|YJ2mw z=kI(u@Mg!*11VKB&Vh~t1Sb`()KD-MK5gjr0belIX{Lsov4u>dS0)#iZ`kLkmN*Dj zoY1TQ&|jg`!v9D8C;`N#4ZZR42WKi_p&ZtaQo?CmIL9P68T0|ha1$M4G4|zhE*b1_ z6Irfe&Gl@&iuTT<7n{)XRz7jzKJb~lykY;#?YFXmSduVgd%7x10Sw zbf`Z7x=_s)Qk06~0hDqA%E?DPq(uJ?_lwbzP4R-#$dG3ODfrR>F;WPc=GlrHe+j7* zqM!DqE-iZLBX^(exNRe6OXW2(&O?P3(T3gv#8Uzb>*0PC zMLmX-ZH9_bYH1e0EQ}u0tT5fkrDG2Ww%rd;&SHbW&|FDT*>rh5LMdon-Vdic;hCcQ zN16=_Rz{~pb*j_Z6U>8bb}6eYRA;P~V~M0ReTDl3=urjIo@n=SfVz@!!*g`Phuc5x zl8u5;)-)g9z-ls3Gr=e`NzXL8Z`QyC;v&+}8w{Qq1mwBpY;HLi@AaW9wZ@n)u+T9+ zE`?F}!Bu9XZkhsXuZNBXJxGz9?;UM!yExD>fwfO@9=?>GB)vwBNmlsZBo zl}{jxdH6yrRYb#`6Rb555t&)fEH;ru%;{gF;gz)><@Qjvc*}H-IvFGc;RS| zYZh&>aLv=Kq85ITLsa|XHThh23NA{adfSMimeR4FTPcp->(_=njTbKd5r&3@%7ae( zqEj5j51Saxe)NxI(_?7S=b0#rj>|R1wBiG^kZ=aIOrl|Sq|7V43!y@EeM`L$LUbnMy$7uwEi-vnyl36=C~|O-wcVT;Ux?DAb=6l#Il~t z@dxUkc*}9M@9L0*M&aE!El7$lHzCD)j;!y~)}xvllI@)0I{cVrA2`X1R!)#{nP^ES zK!|YVChTE7-j~IN=8>W{xL6KH=YT^NjKz;h*$gY&Z>*8C<`&!vbcb2ks{mf24Pngy zm5de>WM~^Xv&9}>#{!Fm($CPFjezwi8VtGhjtCvMfXKtigpa#MXfYmBB;rw5KAbCx#g-(Gi4)S`lYoSf0WU2fz;k zSY(W{1>j{dPEipWXFHs{RsgPNNs{>PyIPQ}JJjp$5CFN1FrZVZq70TcI(fNHlQgS;9DaV>*Sa?V!N4AkaqsFE^9Pck{PTzMAPoPo*H zj3xV-=>0}<3bL#+F538Hg32*biAv6vK`oA)u(eVPX#;#WUcwema|?lJ z;(oMQ3WwFh4+8PfTFRb>R?Zqlji|Ye3`;==T3D+OCh{SBGmMosZfS&iVB;%ijIn0e zIg_w78Id;F*^0#a5uqTsx6todhbgD9Ihzf<0cHnqehtxT2hipX@uu~@&QSS(+QVx=3y|GIEf8q zpwWRyLKCI4LH&9hu`uF1-1hmA9skjNyADi^aZrAk%-lkgQJ;diY($a@aO-2vl*N{B z#PxQrT*c~KFH#L8&ogB^m6!fKV#@DYMvlOIed+hH3u`{zVNX}5ue@t@K-65 z)QXCOk+5uH8JwNfX0-VloSR_#Gy~jq!{cnFiq|)?&K5RF#XZP`qjk{3Iyf|os3!2R zNzRtZhGpWo90?`J&c{@{lqy#8{i#&P815l86gBf5wT9+kgFKguAq|T&F!&@BC-DJ2 zy)c88lkh@4nmB{YM&XD*oXxnT(15R9Lm1;4jd&pLWq}lVtat?0jTsfe zlw3k8a*bv`!$1HjevDNGVvAXvR~sf$0u_t2Wid)K50U`#U_+7(>7d{xe{^`32?rdY z$saz-GMYf`;=}c3q4G)IWdsL70+S!rmkqlB!mo;2977kHvCu#e3ZnmY=970HMJ6f@ zHB&ez;k>}CznSixBC}0s)hvNnv1A=rIA_qO;T>}j2e?`k9|s`mnS4hhsmO*F{Fo#i z9;P#ff%o4BZLc+$Q(3*QQ7)xBb+j-O4Fm4!41S@N6HOWur>KD}+9o6AjU*RnjGI9p z0Oyo1=aGdaNC<9}wp-EHKTgd0F@7)?1AT$s53kNMC|Y@?KR1-l%YkMZZ1ku%KG0(e z>F97EXI0WvvtcP8@6SdSM_D`=v4X~^g&P`&fpt=zYN$v@H53-+0}aa=%`~f-K#S9` z>RL|e4+HC@%N$!HA)7O3nLjEgLDZZmm;bRyhBb3FjZkF)T|I_<^U;SVs_+37guqsgG@*;Yc9M!!P*`HKp)(tQFv=Gb6!6~nW*fY$Y;Pk0rZJWo zirZ)?4gi*L0zi*`{HN-ZoyM?SNVuPPKp4s=xn)1duHqBwC>Oh7QIE&v(iIbIg@Rr1 zCv&FoA|E6y6HNeEo)&UIg323#5eQ1oC9P>tdzKOGCfq1emBQBe5lPvMsFtpzp|Et; zR?CR9p_oa?HjX`@8F@Wl3^qF{)0qnwO+wXHxUhxC^U0-VI>K>>Dc2A_ifG0t(Ii^k z#)Z*r#Uuwjwz6QzlFRBF_=GmHrU4t8pu*%pjE387s6LHAnlTXBh)E~)6NH6Edkf$y z8utK14U&tUVQ?wCWI{d1h+!~^@?l~myjcQ%AzS#Eu$$R_g~1*`*r$kO89da$^p224 zjYhEh$AazN-&j2kbFH{-ij2;JtbX{gKV*~Q4^5N@K$hflOVfCT3AY8}npQSC*ATXm zT4;pZQ?OzSF*I&y_a(y3h7K!VT#J@8z*HVuHHyU94NI*Ce2njv@GhVkXr+`S)hDO8 zV1uaT4l8eFMs60%WOH^6u z;sSg*gD>%;vh{GZgbW>HlXLlD09a_nYl6@L0trvUMFq5H&L1Sb4AEB9c^ou)n67}R)EkTIaOW(j zWQG_@hZVjE(n5pDO>rC49E6rg(Bf&Z&Km*BUI?n40z>FyMi{^f>sjX%NGwN&!M`wJ zh#4UYXP{&`QWy+w9o`3K|2{^s6?SeW!u+uQ;Qz*v&AsJv;M~x8Ouq!A{MJy{tS4b#H z=!y~&2>;XPe)GKHI7l+dl(T%xr;uI_LX`s~cHqPuhU=2J8Qy3&O`t31;3dMDGEhU~ zWL3+Qwuo7^Ow5uLRC5ed(fi4qN{nv??0J+>YpNiym~$U^6OQwF=^XPU+%i>I>kJF4 z2+fcT zN|aXGky5c#Y{&6-;0BJ#3c-V8O1c!tb(Tbzh_q6rN(Q{^E?M9z%^61n93=OXB@|2+ zm<)>(u^1q%k_6@jHe3Vt2)K?RXj7ncg}{59v~c9)Frn;W*g}j`6hu%l8rg@=I1AMY zKn6~jQ4P`JN!pOGvIG;3fB;g^T8iqDaM}pj(nl~Em`NNLtQg{Wfma#=v=5C&Im`+u z#!Z+!%2#3-tqQp=CTD<@p*;})<7QBR=MwO@;Fz#v!DU!W6|CwNM#p2Bs8j>Stvx5Z zTH=|^1x{tPWx^;MnfW29`C&C~uwZw%vshqJNoG{wO3;Ztj0czD#$qr*5Dk-)StIkdCV)>2T|ov9 zaod=1GR6rShjMC!_nC;sofBAs8Xb{nizO`i7rALOu!*DK0ZGjV(EvK6W5LQ|A*-BA zcPHx{Bx;pF*vAP};XPCdpq^MB0X;ml8GyUu`L$_Klo&({GW@VirQ%l-aDXj#S`34z zASO}Pc8KT}3q@rTVHy#WhB56pbcWQ#jnhWKu8W{RCtMhhQ$WCm5zo{IzgKm{B< zP8fskV;mfi#JN6(s@!p7C0CqEf($O852+=P%3;2988@hk)8!!Ow&xV~%G#7N%RwOM z$5lJyW@X551<|SI-;Wp4nNpKVHv};BC}Fr1T@p)xy(3N=^(VUl{l-hLX|YYnTR^VuT}8dsstcH z@KzF9k&Nyj4RVtVvpAI~mu|!LtRxNPWVYQG#&xZoR5dE|O5@Coam~OkUnXm_6J+(n zj5x9oEHCl0o+Mc$Q)rw@dMfzAB@$kZbjB7cjDxyCzCb~SfqwF+FiOEGEX9MVPyvlJ zromJkj!wgBlVO??V%bQu2Zh&_5W^0uO~N9RF|CO7uI3x5xl#Sn7%D#ODg(_du?+$S zbGCx(X;0RQky-`OHqLJYjnz@ot6y*$5D9BI-fpCE38_iuLPL_QWHO)>qKP@JI3Mh5 z7UQzOBq{AM=Xwe$W(hP@X@MOA;I_l1T*EYJOaj4k<>aK2Dguci1hrM5{zjM#l0gZG zxC&eg3fUp5Bq^8z^!}?oK)g@^cMi$gD&b+!0R=*d{eZ!ah{iw!1qUfeLpw4HXwV#% z)D1#GIM>sGLr;RT639ST8M8zXg9#1egoaKC6pxE)P$L{-l}oAd(&Qu<8Ud1=Xy)NB zXEp4?4Yrk8*h!2A$QfJC448D*7>_};Bua9I1ku*0$QA`T9Zvhf$Q4OGM1lmi6TmSiW5fbM}u6r8jzLS;@2_EY?MPg#8;}&`zd&Ix};`KVn{$kN5tx?EG2yu&gj$#+KE34iLfpGHMCg z8jn=Q16nQDs0>IrV!`FGboh&;ey}w_Qp&s?2;LAUxR>uO;xwm00R6{umbSS7=R7D_ zL3k--GioyEFp)VV(+ogBMwLDUd)7#pagrc=LCh%Dh2iQHEJFdH$tbUyFtjNhcjVT& zNlXsGx>Qu8kUUj$a=;W7A)X3}SdP?Ha-Bso^M3A(NT2~w9D)OiI0Xtw6c6h}024s~ zg<#z{Y&JyDthru5cVQTwp-8(4eH|El6__WG%cG*6z@?^I22N6G2S=u1-e1^KgiemM zC^*7i1oWYmKzIY-VeC<8RN|aYMA{REgIwkmT1(0rrEUFNZ99R_LkyT`yD_`3On^yx1BVcL-^b-ZGqf&YqPGNAf zhX^Xra8Dy=#yLHMT&11VlEKNck+oWL3KIAQy@;-#ybc(Ju2N@)w020QX34yq5pO#* z8|4Jb`IcjxnRuAi3rZdwV5P%L;Zp3lo(TeA0BT7gGJDZB8)5SZ>P;n$<6&IU$reoo7vFqjHAr*cJo{O)*;r;^BGaWdqD zXAR^zh6fKJ-nO9E2v4RD3df*A^HQleZTgAFXJH)L<^YQOh`3nNrQ&BL z@O9Q;5MmSsKc*V#OydS*2sJ>Au^2fW$Gy%%JjXB=(Cc?a?hkXd)iT^cYT^Lu0$i#) zHsc67?4Yh8)TvOlf~$>}F^BK~268`1+7k~oTO$-38IJ(1R>YYGdO1QP8=)5PPX|#c zOWI{40V`wcZPMAED{_{2yCTM^IjjEo9N_kG(b*SSHDs%;R9y-iGe8*eZ}Je_T}@gH zpujUA+783rB^pP}djvo23TsRFqB7hh84fCiywc$yH{jY#sGMc2Qh_D`+;AB9i2@>% zNj2H6z}rd?ZzXIrBB>oCK@Qw`gfy}v+R8{vCk_qNrkRKrA(?T9hXGQ_4jEQ_k%A9q z$yC{dZ| zyd=v(2%>yv5vN0dYVJ zSfZqGXXO0sG?E86bK}zM!+fJSe#@YQeh7~_LaS?OQ;9w0N<_7XvdB`waNCyyBw3)P@ioGOU1g(-4@ z6kI}*geHfmV%Thq6Of4DE|LtnfOkl!L1neo1l3MvX)V)&$|z_U+d)|)UuJjq7#gI& z#Z_EJ5*!4oc%_i@2&{9GnE@M#5+R)+G)yuJfbCJu>V7dOecP zF@l;51*LIY;s84Z3Uov$ZbCds#$Z4_t^gP%FdQN%{eXPJ^=7~(3Ya#Cwv@m@{SZKN z)+VCYosb?EteM5P7~X}HB*O`$rc#zECo8E$kTcY#AR!t*#+?uaC%sTyibLMx91$)Irh(=R zsVbGW9Of5}z%1%8TnzKvrIBSEXJD#QMM$e9-8P(LJ7H7;DzYa)H@BxsHbbD^6jD=) z7`uVNfKlyXz#jn0XSj+8q>{}_lGe`+awDVTKxb6a3~cXHCAuoIc~n+ehD7#DvRSfZ zK!b9_a>kL2UK!;2teYZjO@X@x@az&SIYHJ*6J`w|ZDM}QAz)F0GaQB4&T!5l4hYej zZAhIQ@Ta(1loUB~S_p|YiEN>M<6mHHVJE8u+O4i|VK3PNYCUei7+e-$0}>nH{3ne> zIp#xn%!mXy*J>@KN{M|w(;wm8(>TB3FV z*`T1?7L-U}${55G4P8&d0Sn56A?dOf7$=|<7MTfVu{)=yRHiORgU2|{Da%i-Jp5^S zRO1#-7U<6QNtzuvT`puGjU%Sv!HyCg0ql3b=w$=NN3%nS+KJ@Zla)$ft0^h`a>uxy zWfDNeJY54@x}vpU7Y6GUL7FS@;UU=DjxYv9^>T@Zfn^P#$>lOnCaxLc2Ng?&6_`@V z&FSarT&0zu36usomv8|@tZwB0eSEh3;gY|OEVed5dwTk?&chsUAlv1@2~LKzE;4#K zS*Jv^0TOOR+SV@xktMyDO9!aB6s`$V0K|s^RKP5h>`E6H1Jf>d;6=sZ0r2J^zej}X zobe2`;C?^ZFqKsTWVKre|(d$JXzyS)M(>IO`) zKN`r)Mu<#3m?ILO&F%VPfY*iTOzvqLVKDHha1~U#NNbaT=L4p)0mUrTbC8=g#Mjus zlrJu2gxLT9VFRBS9C#vl{0>U>$QtT5%X)r8E^%lQC{qtxnq~>2wEZFiuw$7#@O5 zTY)+SxXqFGakA4H79Zhfj7kCa&?o_vTuEGrsH65vXq0OOxMKsGyb07S2DfHPBu>HrqJTvo^ATDVK0 zYN@5YOp}6UJE2;F^l}ntfRRB0=IM@ljpH$gF!3OnIU);o;-;Vbm>n-^_ie?k0oI30 zPsajK8E|T|0PRnJS*MVeE}RxM)Ru;b`k`h3;~2nsNwUsCX;(VN7#73;bmJkyvk%I) zC#mTe#Sx8`BaoZK3+%`&)Nqs!P*H_7GLuv^*cAZ-I8!cbV`4FbM6;R$I_51bY0TVFMU9${KX50UyzPFyCSp{sUbKpoiHDgHQRGCsW7V;j;xUu zrlUrqWGj;sZA)Y&@_At5xT9@J!Yn8Bbg`_kiZG+$kqUuXF+`z2fr%V*Dk7cW1}h|W z6`1)DXQp2YIa~yTmNF`%04OU((l!d_k)*B|WCD;SSTp0enV{)d1~a^#QC#3akmop} z-o<3I3+e5O*C{ZQM4XlmsENpMmB7ndQd=bxk3l_RV%Qz;R&u?D_{{+4k;>JK5?Q4P z2#T`RfQ87hOcSW>P|)Tyu|e8Wfu$hc4OrPqj~bWfCu?#K;x0bO5*zS?du_uo8;w=d=Qf{}{#_;Zs4+K*{eKAX^lWrHu>% z1t7Jo_K2`e1*>fluxNW81|}5JK!AX7;aUzuwblZv3n0FbUSp_HpETN@!&JhclczyZ zZza@i4KzJCtYJy8JHQJFpfP?MKuh)!hSjj4E25^6^eVvPkm$>j6CG zetsb+xe~C~7>T2ZP|1ld;pl3J>^?lmP6A5pCP~uPVv<)SEdVXpbWU)Iz)%jW<(vQ} zURR0_k4v+L@Ma25gpo{~7UO1esIwQ=Rl)Qmj5okFwWha%TTWp8P!cnNe5AZL@^#*q6%NQ^xwL84|ffie!w0WNprBz**8rAnRSxy}8g5rG;X#v_3l1%`^!WKpho z_ZZgVMBbN^%o<3AB4A<`P+{{#qK(4Oae^aD(3m(942*72UXSO~tr3Q!q|jOt#KeqJ zWOa^s3%+3hL)^?_ zq4yx6WkDh;qH@Lx++;Z-F7FVLahMZm%jKoYG<^sTjHhYHOfnq(#o|E-*Z^7J?%Bys ztGKNqL9ko^a)-=v&|2nqkCSE!=z1}%s{|htMjpZg zD~}ghrUxkATj~+x6ky$q^cs7ZmCFKwJ5^2Iz^&M&Y9DKnqG7DzB5UQCQv3<}K%6$D*??T6!n2To7Fit|_bU{_uIGm;h2IhUpS#7g_J(tdQ=ow|~63v5C};k%38w;y)DgUMN#Z zL{a%&jyNw4GGf4Oef%sO=D7fRD8Y*-Iu#toI8;!Id8vh3u*k>5tuC^*s}_f+CTxA%&ZDE>?NF&WVkEw_Pl4% z7-^g&sjEReUBDI$oCG*s!<;A=p*KM$11tgn7|8`-(bl4p?s%bzEfzJxp;SWGM?g3S za3|8hN+1O-$!3zl47Ax6^s`~@prFSMXQ@e1Is^>gYWp#vgH%%{sU1Nf(wt$GlEMidk$H`Cyb^%79ts^o=;hKc#2{Co^-s_M z0Im%09F#PJUtuEN4l)+Tk9I-TqmoJ|P8LHzvqo4|L_jgZN)(EjNY4mf=)&!;lGRqg zt%FiZFE<7-sM4f$?ue)irS#)awTzi0w8RAzK#Cd=6taZE8eyS}&;nqF#-yEbAb*F9 z>`8nW4sZdPDaS<4Z3WaWI~ZUz>s-;EG|;?(yoY5yB94h3;OaO5&K%IIQzzlUY6*Re z3mB*|z1*2Y$V?4crxG?ha+!|6$sATz3oTr^CTV!>A(&UgKP^J=M6!U8cvgX48mYAf ztz3ck5kUImfUI9z&7qeFn-v0D0%8b?KMKf`;G0k+bUCMof$1t_UWd5G4nmC$)S51> z#SmUKqU{q#+ww)_1W0h4E8(s(RH=~lfS}X`7maarNLu*C^sr3t*PCG--BbA^mo z4a|gvbr{!(!C};ZG)h1{V=n~!BBNmpC|=6=Xa} zW)Vo2N)nWW1eJ5dAcQXAYu%+nI}W1?*SVAJ8x)&8I7YW{oBn^bRj4-xidWD~I*>R+ zKm?^L=6a5R{w^YN!MzA!P#+E&+c{N|FBQCEp;?vGEJX%7C|OJiMFeY-ftM2;tl-mu zb-EM3(;CtOGVh=upcIaF;b(yQ@Gv2wAQTEP?UaC}S!csnj}gv;vJ5vE2p$+Iq?Ut~ z3r@fPQzN&;;5EU>&j zDsct|UX{;0QNlTatQARzDbp?zT3d?%V)p;O7B`4+w+vicCdPPW!|7`AtKF9ql5_$pS~6$Klx%*njfB55oT3; zO#J8Td4tyXFJ-Ym{@A|kR%dBqKomxuw#mzCU-qtT*0A#R-t)f#>GuuKZ_U*S9Ol}- zVn2DktcFQOcxT4yh^9}>!q|%a4}NJq7_!Wz zV#}k%Xv)}DDf4Jxa7%Q%;>Kld(V`DF6BlQ*R(@{#C2`)s-KzPH)9lk-|7=NKL5<4@ z*Ibio_i?Kend3(E*#s4&swscH+#?*znK$s;xll}*AfYof`jd=f8F_f>lD^$nVgShP z^{CKn?y-tGcFH1;F}eR`u$_-hP52UxQ0{eQ^2drZ|&hjtGyIeT5O>?g=&Km5kVuiR6fIdeQE8dxAJxeM2F!c5u}!bK{oM9_yfWJu zelsY4=LTF_Q~7Y>+C@R}!L{Yl%Ibe|zi$Y_A$57i9k|9Atyiy}6}h*Oj^8r_LSQjrEM@x1vwx-S*G^)BV!1+Jju14{yq~6)!H%Ufsg( zUWod>(mNWT2|uTJShDBalaJhr^n%r!t+F8;D_WBC7>a|KxM-3p!Rmi5`fkz6M}LOm z<(g3E2lg4Jv}Ex;*E<Yd3J#bMMPLzf@8o4z_w~uaY$@JHv&3oV+y7I^JXt5MZx0gkYyMhV zK2kSGg^o3(W0!dv*J~ zL17%b>sU(gT!cK;)WI)2B9`~hqrQJ$o(u7NHoM~WE-I@*R6U@-*f9OVcLl#@t+Yel zu|IV9WAblO`776JC*}=8)LVYpCq~8ocdt13u5SHfZ+Xa~Eq&V9lFZV)^@}d3*iY^_ z&GEaI>8pqfd&6J7C@(vmhesVlgVkb(XtBqhKB`Y}I=f_of3n0L%6xDne5esCvM8%8 zmI->OK1t9@;zr+z+NzRV(?#3gm}b=;yr4dpuO4p*(fy~ycjQ!Kz3kKMHD+>LgwIs( zsV9t542`Q3*A+bnXSM~G7cIRrI-yD>h0DonsVS3GOjui1^X^GznA)G$^?Z!lB|qg< zRvMos*tcUSFJd_4P5q9`t@^(iA-a`uvG1k&K>W(?0G8dn6bdLGtWaXoZma5`n5JX{5BYSOvxAK?9u!KLGF0WM+?iHe!G0!tbW+K|MvIXaud@vV$%b{d)|Gfm1hm% zmCJ0cDi#&mop1hR`^~0#gN?wNq#zedzx;ZaS z5Rn%a_Od~aCuD!R^~=Tj(D*GsdE{@%dEV$d^y4=}GlItYH=CWfFA;m*)Qhr`uvhe0 zdC8+dP1-X2-jL^sjXP?LZ5+??e7wYWt9*&ovvpgJ&pybR`xUrH0FQ|sXJ~#N&G_HD_IDjm^Zg!hed2u9?>y+R z-RB>=_!jMe>)lW+FC(+By}^9fdYT+XFMW^R{mVUGc{`X+#3Gc>7x1SC2k>0nHPr9)ePuB za%7Jve7E@ep2IsMwp0l7avN6L9jsr_Ke-`{UOm!&J@A zx4v5s?Drj6Z8GBshQuKcgr>hKG+n=b)1H(@im98KHq<8XzV)Q|lJ>!JyxM7}$D+q+ z#t)hTYOo;hupRW7u2m8LRj#(r6w0my9o?CDV!HeiCSL8}?(k=SWy5&Qj!VC97JX`Y zU!ec{%?DQ=`;Xz0y|m~=iDc`JEiYH|jGh-0%x4VD?)A>Schva)_r~p#Y@w-e~d3&`30Qcvd@%tu&b9ASJSqY`+FBPr$ z#N}hqi40j6DzdohK~8lr3PZ2r{QkDc%GDmPBDPj^*y~q5nRv1Cvs?Y86rO${x4)oh zQtuEtQ(O9|#3tf|lp#!N-4$Y-b3+3pz)J0NgTj*M4NCSuznS{*mlv}qchk3L%b|&g z*MX=YBL`yAuo0|-dzvAA`NN4jwEL%zC9cUS>=QY?07~UCOXm%C{8co0x3=tD&4$_w z1Ful&`}3ubCf*2edGP6q#-pi}xhI0&isLh@9S)kQEabxM2wQEwgU7}B=A9k0)FU5_@C*Ozy5Ea!rELjPztBVx^V=vW zXH}t}_!?!F4EelHzvPvJzI76B^ldz!5$teowdpl>NVJE&)2p3(e>8Q&9E^RpsdiL0 ztp1L-gS#i(%w@HyO?X)N&1^;;nw((Udeu$5(s3KS=S4eJAd5B8tw-6v6@uHhXIPWF zRLmAYhmRldc(t!DycWan_H`usVmPPfhZ7b*HF2P;PIl#{VaZwBTk}fWR;T`WB=`z9 zylCM!1zib%XJ|O+OIpmGxo$U?FZV2C^9(0c`A>L9_g(PwvwDd$i(dY{j~nsd=Qsz? zdhx-@A;`b)72{9nPK2rLLkoIYeObi+3iAR}UG9i8!z|^#Wb_wlenbSAC|wEq-ffa(kI2YwLeF!4qJKE4@}iI|^J*yRx!PQ%xGT zVL=tyepPim7%!8RK3N^=xc}2!-t!_=&+jh5b5S+D519AQd1Nq`k88G2MX zR^a??=&H%(|MT1Sx+#X;_0;6!I`$~-Mrim)O-G;Gyust2W5Huo4Q^{$wKyk%LtE<< z>NB_}RKzTy^ZXic-`kz_z~Y)XRP;LI^(ppc8%k``e^q|x7OMs~t#u5v!*-PH3tb7d zd;NHHFl_Fg>lOXWk-Y=@5MyNCpjm^MM|{1F|1)RtbFr&k;Z(XV=9mz-l6l_u zF%<6JuLh6K@WkW^Z4yu4RRj#<{;)23(IWR^^N#j~xzFq^oAj~8cbas3_rot8eD>YQ zqP6}iySeB$D&{X2!4?d#fT4FDL zU3Re0zGyVFa&0J3C4CVQ`M!Tbbz$~(cuVYgx_@gx)8gokAIO@~4Lzo-wi(SElpkVg zG;?2PIQna5=|^gYESx7G(I+&x{!T(?9vds2F`U)AU6}Eq9cFKeUL~1Yf@8bb+zGuZ|6x(AhKsbuwn)K$c99HD!W`Uv*4T)zkJbz+scSNbG&cMMR!-! zj7S>mf3BIj503n&nZIZ$?^B5aLU;1fh;2M2COY`pI68&|&cIinY|6z+Op7RF5O&^wk zPwk*z@E`78mOJ%;Z3F%dl3Y3YutKwE3R!-WDt{^9KLu=0Gf{Yzj9Q1#7VL;DxK&4Hx#M zPX&v3OZ96?*j3k;&N+lP7o|^mz@(6!%P9Kvdt5BW+%|9Uy!vmqk}#|0SKzSDQSgL| z-vyeBf_$%vm)C#x4t26pT2zjR^id_gpM6ZM-j9h*eF5cvpUyU3H(9&E0gRNtcgBun zY^s013$?VHY1#q4LNug_O`mQMf#h&AIMa&>Y?JTr>0Z}5+;SfQ6XvB(@8mIWa9Ud2 zwp8B`$5uUVE|PzmldG5Nn?mM1I`b!``tic0`etzK;VZM}l9v^YNqV1diS3GB25#e8 z-z&^@I|JtpPDr+0nJX+|mv5Xc#a6upzjnM?tZ#o_q_f4N)tFe{54L)SGGxxm_sJdA zu^aOSM>nMFcJ{x~(zn$MPdpAQ8Z*=X^Sr*}n8U2%fJ*H9>Gt;ejxgKU_I)8I2H2^R zbX~G|g>Q$Yo$f3AfEW0}u9V!-$7PZ823x>;3ti*b-J@6L9=yt#`wpD@qZ4<9tPtJ4 zxY)M~0_vZ;LPaB)`I%=zMjfBjk8R-18~oQ{?&^Wn%F276vqZtVYbCzp?|AG)Y1qoo zDVM>C4}ks3m=_R%4bJ&r{{ORB=?DuPYyB7rDPuL0c3v-=srXO6HE05S{3zb&r z%x{Iwy?tIZUB+WG>0u7f9fkUaG?2KC8;i$^rosH_o|xT8#VU0FAuX5cKQPx8O`mVh zW2Z!y*6F&P=2|<&xntW)sqG(9 z{}wpt|6fjI(X{0;2dlTQZH47*TlESsbAHZ>1W)6az_F#dW8C`{vsqt;O38+-$fD05 z6GEnAww$fMbnH=x)?B=PPOAQm+CCj0>NFd61caa4Qr>(9A?&n%j1i)_xW`H55bgF{!i-;^9JAFa-YfqnRXo**ncw1!%^YQh3|WR z)${Q}YNgIWzoPeP?0ZxD=eP8Cz$@(T1-y{ycmDusJd0)eXD7d`*F7xFcV(a1)fQBC z*X6vI?{zcI?0+u*8lt1tEzO-bumJh!6<40Wc0q6K@CGoIZr$FU$1aHjlOgI=smJR% z?ptFfIQa_wZRR&%9Y3(!!B<)Fn-_Td0r<>jwJAuFI?gre?_{j}SPd0T{d#Ao?cO_Sc*Z*_wAE()8jiqxAp^{257_V11)y$mgoo1IaOJ0m&V(@M2o$k%- z3pb+Q)(cK-PsZ8*?0ECxWH>Er-TeU`-R1i~oOt!pN+lJI?>t-ok88k< zc+FtXL(KQ(-HxOFJRSSXOKeNw`O-Px1I8$X)ZZ@L&aM?++5Emyl2!jIBFtg^XZ_RP zY)=aU9e4b%S>MGBik$>^P0PpKC}JJ^HappD{WZ2$6na6T$XU@*xRP*ty|bN{DdIiYyZE4ma(iFgWTxN zljZ}ro6F`6a)0iBemeZe5bo)N<^#{S*c|lWw# zuUxy@_uo%pM|bXw*X$QaqVoqCxsSdJbNg*F+{1tE8L-YsvnsTb-k|XTapm(j(|?A) z4GSx8n($iMXS+1^=H`J1P#q! z`2J0KgQ7dNy)RBNF4%4oQu@tN*F}rB@uGiSMq}_ZMnclZp#04JdIX1($7fs5L1O(h zer?bC-A>xhzTQhaOw&J}vB{gw4q8r({oDVyam9Mk+MRx;8{mmQ0>e%0g7QL^KR#=s z6O^0pVh5>BeV;ig#q6w+c5dU)r$5Wscg|gGn{wMxP!ydEw!7(jokc z?cefK$@xoMcJAKj`>y)GMaltC54$=Q5i;FKH@l%H1FYg?|H@|FX4{u%k9wM$_w8az z%~u$0=-M()-dL1K+DB~V{5zoe-6(U#OzhjyXeZy|v_(g)ItF*L=Ih!CW(^D1SwD*s;%@L;rJSPXw4LuJj;+H4aybLQK z`1_x%HOr6M85$LMzDZ$!L5_=kVwXNJJ$>zn7qa-?+^g5<@flhbR@na87Tn@_gY9-9 zmu>3KxC>>5O-9=LM{f_DQrroZ{!iT&W9}KO{uisvvW<33&`?vugKJNbVHNTuajKvDC%EeZc$BQ&3Dv!5Y2$&dmF2mM*W}(r zEFkv%yXv$bUO8BG1!|+g75awC7b?%?KYZ$b{_OORP-gfk@6{Ktoa&R)2s+DknRw5} z%97WNzCpaAL3rD^YGTHpdy5`-eD2-o)W&b<=Sy{Ke0P4ixV?X_U2{C(bGU2fvK7Wh z!)SKf+PF5d(z@8gvZWm#()c%bi}8Q+xk8or^+$MF zjDD-tBi-?>@rwoBHurF1vZ6 zea6G;1E}>=<_+@NXCkaV;JyQU*)3J`2G^oM9rd<8B579GKC`~)1IxGn6}v?=Z@_P# z0mBn~`v3m=&z9;#efwXqTZ-omuJ#pu@LAVBk-M?Mr`1I1Rwm^qJ7m&Qa~gJgs1i+s z^mgB%$>3FvcG0>9pZA6zAJ{#c$n|~bGjCw{an=qT=>5=V{D+Tc);*bMQ@T}5wS2kU zt+FMA9md4fyKgn6S&45J?pi!?3b1~6yx4~(Y;7`5O}cPj+;CYEsxYZN&nKKqMV}>C z_T72BpuhBO{U7Bvntv^P2SR<-h4Th>jfr|2_Yd_i<6pW64(vJUr?)xl_X$bQKK-xF zkf!3M9AQK3=E)G>N8pr}&l_BkgA3ZK_s<3|E}HofEOFqTg#6!soB!{>o&SG#NON(v zXfe1Aa;pz#z)}DARgZnfmw$W^_G~g_<0GHZmJ+DqK*|UfT1lwa< z>bJ_H`v95Y*WCqo*1unTV?$wJXd5N+NBg*zPsj2?QNO%7k1hO58$*u4ie-r%CXLXw ze_c25i#s}x!i?#fp_?bbC4~JKB;}%W?%7Z04bJ=*uQq9#OkVlvWR4d9R<22(bW*WC zy_+{U*zI57wP92K@0~NUZ!2*0`v{|CsS9R}Y8@K^OD(j5(`Z|H=!* zBB0vRBZX+u@rnojNnz*L^B#XATvM*6 zt3eR6xlFx9U)s1uUscgGfiDYrRa9OxsGcb!`!8^d3$VVED}QhDg4aFNFugFL zb>)K?TIpB(ORbT=H(rMh8rf`ILf!l}TzY|gu+P0}+vn1wi+Gm1-OguRqZfHh(?-r* zMi##RXqxdVG-57n^~nhBquGDiS9hXC>NDYCa|awYyISJUR*H@x9zBr4_#1(yt=W-R-JMnyT$B$*o)Rb?|RiaUfKI?!Ft+}-MwS` z7V;_<)1&(CeV;8pktciZxjen`B+Z-!?Nvkh5j6{G&mU*d*{x4Z*susOVn0y;9Dde&wkT`1ZitDwUl zo_x=nvavZD;WTg1*!n?y;=%gPX`6&JiwzxnhYwoTnNpHp-%%vX#o~rt&!)Vjg%MQY z{~q08?Ao^PPQ;CUi!c9jkqkOpIb%E<&2XM%)qG&R*;IS=`!^M5#wP}j=RR-mf3L`m zJ$|pZz5JZv)byO&oY}12Dp#J7ba5_mk)ZyHxP4Py66j(dy(_N``G5Di(^TD zy(;_lr}pl>laF?NTNbf{y!P$FsIX;fx6O|uvuBsh+V*{DWLz2XKj+w=6{Yj6*t2-I zFr_l=a#haT)+ymLb9t)o~v3mzQ&42U)TH-mU{qIU8?nfP})a44aINdTE#8jtM!Y2{dB7DXwS9BLod;_zWd&k(&xToe}6%t zL6-Ef_w{8Iur%s_&l<@+OQ$D;a~I}E97sBmQBd=|1llwG>&Y8fnB>3Q9kx*?lL~^8 z0t829FSjpIZPhRJAO0=5toP_wp}@AcY4@$&t!JC!t{Gw#8TBJR5#M@m%#Oq^lXt%k z9B>dO->?v)NA4ispKzf0p<1fn>j%@`LbF}vR@<(` zv9rEsb~QfJ-ylw~Zdxczt-@BhP7?MRLrin`=bHA_L$48ssgD!x(Kq{we0F_%o^>fe z!^(Tx)O@Q5ImbRf!N!S8d*plMRQ(oYuj$r~gFe0sTuXE>#Fg^$jnYqj%hNoLyg2j= z#V>j(LvZ-jT1k#*sekBC+j3Vip5IvM{@0s{utr;Y#+LW1Td#DMH~9Fyrat|;`D4Ic zN=RI^Pl!+|+UfAZ{h0FxV(DME!%kAyG1Kx?;ujH@#Q37}5a#58XUY3zw9oSfmU7K! zdD6$*!$nu`S+1;9Hqlp>ug# zFN%wf18a`(%BIPP;TN?PZ?BLQ8xX6x>;n-tIyKEF`8}yyc%yLJ z-!IyXs@FZ)v8VCq>Nel+RC6hrR*P%*+f2MU`(cu`8;_5oWCbOc=RGhz6v)J5CZPDX z;9FtYC&w-xuc(Yz-EkypO6KD@AfmcnF}H-!d+t!(xi?LTv->V9{6hw{P2RI+%nhvX ztX9tyJge39_5R~%4ZpYl8*#Aoe?Hw*x2$`^8lDlFH8*+ntCr4??=H1`eSVvTH(}>< zCg-~q$KlQX9~&R0o~bJGd#BhY_HR4w{fllAIbLPnr!ahcf6*UPf$uM^^V;+{c5PDB z8_RR>@Jlk}syi~=o`95x982=FHi%b6WH5-1_J_=QnruT>sxh=tS!u ztv4FRcA4w^cD#Uk{(Af0KNS6y;dz6<=|A~PR?zNk=_)m=jN4jgUU*Yl?sQ-{cy}hc$m~8s9TjEVfS=n^4-qSrB#jmdoqb?Y^_g-10?s(-Ie?C)qI8q_5qiu)u7> z#ViDVS~7HL%)d*9Mr=R%ZkhehP<;0Ih4UZIE?Th6ZS%7R7D$?(g=6MZFTeAXuD*fg)m&4MROmW4Dex_PwwY}bbNqdsRxMqDqAxFl^JJe6L4 z{m9;<_J((Px~|E-iKP2CPhCyar4onXzdX!K5Ca!Tz6LczlTQM zkITFZk92g^{XVYXO?&;`Q*`ast!IZgS&N2-A8egEeBAxq1MMFtkIJmaH4hf4+36Fx zA#Wy?2mhJf)dYGg?#Tsi$AVmG5xr=IOKqAU@>y9dKbY^+c);Fc=a##dcb`u1*s)S1 zUvYgr1k@>(bm{Bs4bS}QbZc67;a}l7swy#|KRPiczccBChs*OY^yVwC+SA8wJ)|U` zcy)Qkk5?`iqlif|uNz$(op3jL`4;Y+95{ocjMLx(liX39kLqx1q*jblf?6Tv zym|kH=f0ooy07oLBrI8Ilt9!$24XF>1Q{$B>Wkhn$^_qwdZKeb!kg*no_V?VzTB9Q z>%S*#@5=+&(Xa&xL}_JWhOCFLvUhlm0Z#tuy(w+j)KI)jKH zZ%&E zD}Shk!7bLvgS~#=0aW6AAHLET#<>#x9GK2#yia!443*6ykXW~(YWihmY!8wCg>M1} zvx?wf@W@?*|21b1cnsl5%ekin&#A7BqJ&nTiu7Ex)}xLF2f}{wzCHN$Fjg^yBxknCOBZwz)Mq5B+naWQ*Nj!KD}gVu^yRZrUO6h% z5Q(qMyESWoji=5Z5l?R*Y$+7En^=U{sE`skXAhU7F!MF>n((epVwSfPACMgt3jvp| zDLqAO+Jt`jU_)^S97c2Q!&9pQuYKu(qvabfK%3P3`F+~?<)iOwI@G07agtFGWdG__ zDaYMzbj`n|T_J^8+ZIlUzM@a(g%U%Ln>3&t9cqtRAD0G}OPlaXK5luKQgcwa3~Q&a z;_K+6UV^p`%0F)~Z-R9b6wRH{4RgbVl5M&!$Pukq=#;z_a^T6bBnH7bg}G$j&=?3# zzDD27HI>vn7`jaUCl$ojFxm-Wz-~ENcvUrfTCgak`<0^tLV~9oOY~GdgpOp!1_~b$ ztbW4Eoo*t|Z(gYk?!I`xN9S*TUdO*a(Lv9(Lp)>c7|aw5nCRW- zsFvr4?ruw!W>dd9c3@T=-*-<{in{EG72>l^(mGBAMdBYM_tD~ZE z!r0#2(*;IA+D76y{(RtIWp6yR%FyMQKre4oN%tr*I zrPR)oW76M}JJU@T3%!$MXmh>)>weO?qB9c#mQICwJH>p!30SXRGD~E7UTlm{!n#zI z_F`F~>eC1f^~QrzhuQ~PStSjh&vl4hB3T-b#B=k={6VTqbxE2LXOoM#u^}UO_Fgnu zVvvs6Ot%Ca3S&c+s=nHkMf%c`4|OV|N;x}ix|B=e=43w8*q0+(TEK|2<61EWttd4% z$`ZG>XD08z1r?3JOaeOLPS#+o1XN;0S^MN+<}T?Pf2{C|4!oZne!u|YehOgsFr}CHlvNN znq-D)&``md_UW04fEK+3;zbS`jwd&-KEhka%0x!3i!23AwfL451=;ADmCtkL+D|V$93$q(%Ti&w}0{dVBeKW|-GSckVMxA^b3J6&o6pHo2;k0s1YVXQgJQj2DtEpZ(52CO3*fbU9wj|&AW z=`_ryk}tVfnK`}QKH^&Dzs#9%mt-+FsbtYG*(jUygTc1{cPXn-IxMdxCI_|CMo z&(um@?R$>gfCYlQ1%vWa$MRE4TMn7}Nh|G}Vl_q8aZGPGx#>&xVp-kQtN$Xs)fmO} z=%(u{pEi_Ige1@%Sc9-tafwFdU@2a#7!)S3iF|k*Z%K~Mx$Wy4{3U~N_gR|JlSLXH z?9~{*;S|a_h#QP65iAo z_;E5hQKyof6bXLY*})Wnmw~$C@!VwAO|1KIZB=7;;l|9KcF-Un_4wuoRabDR@BQmF>9}-~gbIB#kLd+-t6V}r)Yg^AoTE{#|)sD)A z&Dk8Bg^Nc61LA*9TAcb_K3)zozNUgq6YG4IrKOl&|I#<-(2z0#chJ0c%q2|+ME(k` z%$K`Y3#CstGhx3|u3-XiUg0~BW-=eX6wAIA{ID#g`I!HWNRz| zBUJ{=z^}jnr^x%*W2@)KKkRI*8*}Y{_#fDP8t5F=wvLcB$!ZGE2co%yl3_W4wWA1` zc4M(t`L~5H4L_q<(hK=b1=}$nuC4e?exzktOfi`c$IXonOTsR7Z@cag@`3W{=+&%wmx0uZ~b%&c*OyFTz{5H9HG6fXyKNOTr80t~U zp}BItsUAsh%>#y1ZbB$=&D2)4wq#U#v!)(IqO)U$$Xoz>&wc%*yOVilK@naBMyo`9 zf&NYxS*686p3#KndR4EB&9EVLjf7aG9S4&8EO+0dKMp*vArGuSTwQ}-!8^Y6I;wrY z#SFLC>ppjJe|Ky4!PNV%)U>vfvn69eXpf1K!OR4&F!j4vYO99gdP8Y2{ z$BGm;9a9I`r*ZK8;@WeH1V1+2@Iu%EF`slMNusAJPx=JFP+(NqtiTmGY=izpe|;j~ zTo~lCZg8=q5hOgaYUku%`>Rl#G3T?YQRMyNBFlhMGv%s%=O-=pSC6$e|C(kFESt$S z%gx$ak~FG|g>CK;$oLc+|ptw*miX z&qhI3IeSyBn1o}y`o$7R-aV}_i-!MpH?;3KiB3N7Lzdwmg_l}K7}gLCrNg9e1`4$y zNtxA6j}Jjbby1spCi_^Xw|BmkjxH(it0+*k*?rPmn`KiyLvqSr%$k&M8pZdtYqf}H zgNc|S_vd-RLK9Mm)D!oWq=?4a=#v?D(i8M7RuTg?|G%# z_J45=W3bB3Guh!xd|RYcpV?~mQ2Fzl9i+N16Xo6US7!JD&(dOiZLIAl0bb$B+q|UY zxDB6Y)SwKgFB81e{(e1Yy$BaTXGjBVPEbYvhd zklG$c-ozQgHRUADxe5bNNS`$|{@SWd3F{XFdZ<~GUXW&)N^QLPWs`rk1jA-kC!m~vr?eBmh|#4{`4ZE=lEc{FrkU3T|-zRi-BU$8kv-? zBL;fd3$B&^26delpC(;=USLnb3ktRQA9#%dwRfcX#!-R+1lyUpn;@(_Kdjm}!O7gA z*3U7O$N9_6;-jKhiO0#gVx<;h)&wS_)>%=$f@=zNg3NNQY~GA3cP8KEI2WFf&@I6l zjrMWr*+{Q;uJK`@=_ec*eRYpnA^-BdSTpTs{^z;5uXxv^RETMHspX?DQf-2nY zDFkXP86loXL2=mHrI>5meLqG{QQ7yk&3rpfekdxo`-_(V^sJLGpM=rN?$1}_$aLdp zYR&{!ik~#7Eak?of|^@KQHr8Bmpamb8JH!#)>ROYI{fW+^;PCHXU6z4*plSM)onYp z2e_(ZeVkwDr(q!nwc&aap9y>G4RmK|5uBzyKODFk;ft-_aXcEJD7@lG_?|66JBv7@ zKDg>*ReV3cU^jTK^b~m?o)W25_0N#7LR*nC#5EUZ8MFV0ShmrRBP>yTZ9(gJ{bxbw zZ`V`oUS_CY^0|Ew)2Kt@0A`9L zS_qc+=##(arhp~8xZ16+#`X6lJL|Xt*0?gcZf1N@krS2U%I0Fza}_nZBhLu7>ld|8 ze2AG+QnCeuDtFhHbk;ngQ087E?7c4CJnXqVr4(lvp6+L`>2SbMlqa&R^DmG^z{fyI z5(><5R}iG~vrlBpk(W=su;xruKn;>fatm3*N_DRB?_L8q<-=Ly>Uz=fnTv5r)(_+= zm$SHuTYGZP4AH(?LQ^q?VFCXhJ4SKDs-?m=!^ z_r3jeT|`$VVIk%3xP}^vAhV9w6Pg4L_Tc*Zz4%>N!ckXae!}|a%ZIzZ_Z8k&8_=FF zH6Uo-teY_~(3Ul_kpkB2uT{im5z>`sE7RBVz8JFZUS5;d7;x8(Dh7x)(FvnI6jqyE)?>K*JqeIs1vntL;Cc| zkQ{Y=5D5K{G5ZkR3;2VoQ*Bv>_?`Pz$Ry#0K1N_VccP{pBbxu`;Pd1yu zbG^=8C3%~&%4;zmj{PP;sAJXjT`I0%U?+&hPKdqom!6=3FJ^+8) zs%vNmmBn_)qd$?WP}RE3vePT59Bq!lumRQW+kxwhGXT2Q%z0Tkm3xnLBT}qUmTx%h=Jyy${zQfv0_{s<5{n34*g;H3#mq zW+)#Qz%zrmO%J^C;>O?AlB$~hh2Z;>MJ*Wh_Hs%gcRK;;%a`1^5ep-?3fA)4u3rIR z?ruX~rxN5+w0=AG4l6;_OZA`Vadf0_K0^lz^~ze-w&`7=?ubBcSNiw-fZnknuFp-< z%W$8)1bDkkTlTV)05SuJu~uEA z3F2^xu{r<-YlwL^#=B)1^m`gc%39>l*FI&_EJ#?{OdB8Yl+EgJOc_=PS!E*wo23WM zVoi>bKH02x1eQ{nuN8o4YF-qbp2WZR;9U>D)ORwiWl6S~dp0XdakhJ~^Ssus@)$2Dbq4F4cBQIxFOBk`}wB-{8GLVpFw938(ly@o;fMF zx!buYGZ*9)Yuz-IoM|k2J+1sD$`TORS2f=j9}2G^tbt9omeH5ZWv;SXuGXQCM!bG4Y(UNgBG{Gq%PVoc73!&#?*` zs78L|1vyMw_6<6U9-rim#vORI6%@cjV|r}e%tXvR{zz!mG>wYC7y1#(gb}w;`jVQg zwC{yBnmL+Ut8~qI$xiN&p-(H+@cD6<>h~vN8jER_rV(y`o9WFBl{o~b#-AI^0cALH z;3)Tpf`O=vrcSF&jy|6~+#E2=2RX$a8@|;mK5+P z%A!RPTD?11PUQak?YrhY&O&8EWGw#qjbWIr;Ms0+z^cb3awz*}Obaj)JZVrxiK)Wt z71R`HJ!#I&juB3TBTRV*@(yEUL!g3GA@&ce%ll)zgC3=(vscT?;sFJoFA>0qLWvZG zHGZG#A*GlRPh@*7(Qd@!K2qsB%7@hSm_%^t&jhiR|6Iw>^D}P+4^`pjGj*j}eo>NIur|$cNB-*Jge{__M~`hC&q!#^fZ88} z;w(sg1ll*fs6T_&QYJzjo26Gv22471f@pUAyq+QhCP~=XM9{{rT0h z#Hv2jQ6)Ni^LeWtnJHAD2eqa&J`Q?D1^oQ3=v9g5T$VL%OaIDbCg*| zbq#zLT<+7SOl%Jzw4?hjA4_=#A!^_&qcdJp?0=N@&K%QaLX~ih1y{nw4u47-tlR+} zJ%)KwX4x2{Ke`GrvG&)r_^$fSx2OEi!50}otL~)vk@3Y=JqTX<>%wyp#{OgI0y+Vx zekk&1mEq_85I0r0yudYi!z|gyFsC5}3ay7<@>LNzB`YTn( z3J^q3N{vi1_IbapeN2_57zqA5g?V;FL`VpXV6Xki!+LRfpG-C*x8s;z*G^9Cu6~X+ zF^ae_QM=bsz4Ybt@tCzoMP8a&of0ffpHK}MH<%fOj`TDg1aTQB-&UOcCUOY7p| zQIMEd_ispQQ~g2__YVPMT4+CQ)85wYsHFFU+v)BXv)5Dm{`tXJ?d_0hvBCSdJfTv( zO?Q36eo_t_)N*1{IE^bfeY&v}&so*aHHRv)oYOse2|xI4v>%t&`Vf9nX#+|jD#PO_ zqF&X!_#3NAk?F+1(o|4@`kV~h;~w_tSGqrVhYNg+P5<$c1G^k6vS<+=aMK2YETss* z1`?KI1-vT|KQ%z_KwG5%n-vxZiI9Th$&v->m&;)?K!uG~RLG*5|2Z z3l0X414?A(N$%iPwsbnzfU>BDFL9eL7s8%I+RGd~G(8h-D9jAcNG;>eM?AgXsO0lP zcGvTi!C9;|D0|DjQPFs+0>e1M!Gy3fd2;rNS&izlN0Z)%BQC%Xe1Z8=#m2VFOU=eG z6ZR^<1|`TP43Gb^FH=>@TtzR5o3FawW#joK|*Kh5y9wvo4jXr!~U zBx(?Z;TRH^*I2!_AJ851#yU&ET%W7!e;uT(J{v3cp{i(;ojXTKDFi9d{mLiBUuZp? z)jS~f%z-vG#&=y>_WZG*(tR$C*sUfxG0GzqXL-%uwZWFk9=5;6pe-y16Qb)0frxV% zo1Q-9BnJQI|6aTHmol?KTKzTp&sVoGS~KWIHL0vhmH zeC+z5%<5-^_#gYcLqr^wao?DhUg^2S{iAaSBXNn)c7rGH%A%XeP7Ta=w*GC#K1BCS zVTIyhyZ!jY8^yS{!#Ar*`%WW_)r_wL>d9ZIf%o#;$|R;k#Vm2Qy!KWMk3obX_5b~( zy68~7B=s+Bs6{s*-VHo?cBQo9yF-<^qhe*16={sViz4Qd`^&?7{@r~Y59ao3%ONTB zo9j1#|D@|ZQR&3DFfCkJ=^S-^u_;uQyJWq!Wz#mSH5{*p5&&&Sw}U$#5W z4vDc1qU0o)@Zad9^IKi!XEX=GRKt(G3uUi&ZYraD8EfYceNukkH9m+)RB%!V zOW4XKHtJ&I&IjlfLx1z~tdAEb_?L12@8Btg%wLa&PXBl%tmk~glo=g-UrF|c=%pnG zxQWlG(1qRl#qk4@OH{67O0V>6LLI?OW2ym#_v<{8%EJ|u^7gR&FCXp2*PqCBx9^sa zd=O3SEGU~~bL-?pnpgNn4NAI|4uY<9-bR@G)cAMX4%A{CuQ~hg@t6O8JHIU80Vzej zd0>#Wvh@{ULc%`;gD~EL8>RXI7e$j#5k-A{E!j*t0gJnAJi9&p!dq8(dEJLWh@PeZ zn&c0h#}AM;626j@!jfd;?WADvJ#~*ZiEb!TcduUc^SmYh_|+QeK2Bx_NO@(I0k@X$ zBD1mrHbT1PpH@KlN=4YUjc*HVnqk;s9BEKGg4qu-lotTyHhbpxktLoGwt}LZkZ`{( z>pTh=nLN_T0l(^X#lbO)xk%l{W; ztz~WJ`MpD`bn4kN)yG16ET&P$M+BzU#Gi{zNtwvENtgq~h|jf18Z>T=ZWF51wQcTY zru#6mjuWr{E-bFh+#I(2T3hp)W@J1vaQSeaI{$p551@H*q&g_ZTJg9LOvFpc3Y66D zE2m%_M$?*0;7s>QOB2n&P4ZR^xMX*D)OgK-Zm3$>rsNEfy-Br4kzW+h3Y|Pyg|zT$ z0?}_6Xcn8ukL96@CnFOM+2F$h59+hTc^h4y$qy>Ep{FBV7`eFBKU=s<|6UEEXv{gL zi+>pR0M)e)Nq&Qxd)%{cWB$b65T&h9@{n01RuSqW(J=zcNC_*-&K1_d}h`iwfV_hZ(gJDR&8xkS8?u zI|p-WLp3#&V0k-MJt6HWk-5)rJamX#OJ^XxfC7v`mnfp=M`=i*S$mz!|7$smyS2^d z_plyo)ha`;)D6v&hqvdn1jMH!?man%FmA_vY=fB(PpLxPWSDU83bTIblSITxj*;gw|j!@6{g~E$Kvg8?3_&m z$g#mXN*a@AK1Ob)`WZ8wm%vbM5whva?8a(wf$7G^!6cYO@9L&sga6&knJ>*mPb$P9 z;!(bZc^`<*iPb|-8A~x3Cq2}G1q;d4K<(jC7r4G>+>`j0`~zzm^-A|At%E+T%al-} z^pf%`bib`y;+kd4Ajco_tdBI8)8|oS0q3MNtYxZ+BTmD5sm?3@hbFk(c?hd39TX0C zaYiTf+-!IlhbG-22>Az|oL8ruq%ePzn2d`WX;U33iPi1F>rB>4ZY!x^6iu+q%p0+n z!A&(!I#A@$OX>bZ>JZ?LMTlAW+w@A&kPJ?Lp~&s^#q8;dM#z;TpgKj>`iAM+@mKHI zshyJ&hs6{Jd{(kq->6XLU#d-)q3wK+t+{Qf+5>BN>PDYB>@CB%6C6sgPDwOwme}`t zDbav4gG>%ASW*uQRrqq>E&w{RtveSk@0#F7(EHX09>3cvLm8CP}Jsad`U~}xha1pXBO^cFFipsfC^}zt$Mts`c4r*;!W{fFHgbH^@ha(l0c)7B3 zU=Oql-tGq+KpZyWmn`>tUcEcMLSXa(Q>zSe?Cr8RF|K_gF;KeuRj&GIb9_)~SAm5@ zRKiiHVn$?;>y_zW<`qP-cXIgO`!D&Wo?94dsMI9eogT+xQo{&QGikQy=C3A|s<(MC zf9_%va@3`p>{Zk%;2vv>MWCTG%t7*~Eqf%Z3oLdA$1HONk^7uYcPc#W6K+!BD@