From b13d6e767bbd34ecca7a10513a50eb8ce2c09bb5 Mon Sep 17 00:00:00 2001 From: M-Jafarkhani Date: Wed, 15 Jan 2025 17:27:28 +0100 Subject: [PATCH 1/6] Add Tests --- .gitignore | 4 + diffusion2d.py | 21 ++++- log/failed_test_initialize_domain.log | 36 ++++++++ ...ed_test_initialize_physical_parameters.log | 38 ++++++++ log/failed_test_set_initial_condition.log | 41 +++++++++ log/failed_unittest_initialize_domain.log | 61 +++++++++++++ ...nittest_initialize_physical_parameters.log | 63 +++++++++++++ log/failed_unittest_set_initial_condition.log | 66 ++++++++++++++ tests/__init__.py | 0 tests/integration/__init__.py | 0 tests/unit/__init__.py | 0 tests/unit/test_diffusion2d_functions.py | 90 ++++++++++++++++++- 12 files changed, 416 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 log/failed_test_initialize_domain.log create mode 100644 log/failed_test_initialize_physical_parameters.log create mode 100644 log/failed_test_set_initial_condition.log create mode 100644 log/failed_unittest_initialize_domain.log create mode 100644 log/failed_unittest_initialize_physical_parameters.log create mode 100644 log/failed_unittest_set_initial_condition.log create mode 100644 tests/__init__.py create mode 100644 tests/integration/__init__.py create mode 100644 tests/unit/__init__.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..cc3ee5e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +tests/unit/__pycache__/ +tests/integration/__pycache__/ +tests/__pycache__/ +__pycache__/ diff --git a/diffusion2d.py b/diffusion2d.py index 51a07f2d..acca4164 100644 --- a/diffusion2d.py +++ b/diffusion2d.py @@ -7,7 +7,6 @@ import numpy as np import matplotlib.pyplot as plt - class SolveDiffusion2D: def __init__(self): """ @@ -38,14 +37,30 @@ def __init__(self): self.dt = None def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): + assert dx != 0, "dx cannot be zero" + assert dy != 0, "dy cannot be zero" + + assert isinstance(w, float), "w must be a float" + assert isinstance(h, float), "h must be a float" + assert isinstance(dx, float), "dx must be a float" + assert isinstance(dy, float), "dy must be a float" + self.w = w self.h = h self.dx = dx self.dy = dy + self.nx = int(w / dx) self.ny = int(h / dy) - def initialize_physical_parameters(self, d=4., T_cold=300, T_hot=700): + def initialize_physical_parameters(self, d=4., T_cold=300., T_hot=700.): + assert d > 0, "Thermal diffusivity must be positive" + assert T_cold < T_hot, "T_cold must be less than T_hot" + + assert isinstance(d, float), "d must be a float" + assert isinstance(T_cold, float), "T_cold must be a float" + assert isinstance(T_hot, float), "T_hot must be a float" + self.D = d self.T_cold = T_cold self.T_hot = T_hot @@ -67,7 +82,7 @@ def set_initial_condition(self): p2 = (i * self.dx - cx) ** 2 + (j * self.dy - cy) ** 2 if p2 < r2: u[i, j] = self.T_hot - + return u.copy() def do_timestep(self, u_nm1): diff --git a/log/failed_test_initialize_domain.log b/log/failed_test_initialize_domain.log new file mode 100644 index 00000000..c9262ec2 --- /dev/null +++ b/log/failed_test_initialize_domain.log @@ -0,0 +1,36 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +========================================== test session starts ========================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 5 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py Fdt = 0.0005000000000000001 +.. + +=============================================== FAILURES ================================================ +________________________________________ test_initialize_domain _________________________________________ + + def test_initialize_domain(): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + +> assert solver.nx == 50 +E assert 100 == 50 +E + where 100 = .nx + +tests/unit/test_diffusion2d_functions.py:22: AssertionError +======================================== short test summary info ======================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_domain - assert 100 == 50 +====================================== 1 failed, 4 passed in 0.32s ====================================== +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_test_initialize_physical_parameters.log b/log/failed_test_initialize_physical_parameters.log new file mode 100644 index 00000000..6dd67a46 --- /dev/null +++ b/log/failed_test_initialize_physical_parameters.log @@ -0,0 +1,38 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +========================================== test session starts ========================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 5 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 0.00020000000000000004 +F. + +=============================================== FAILURES ================================================ +__________________________________ test_initialize_physical_parameters __________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> assert solver.dt == 0.0005000000000000001 +E assert 0.00020000000000000004 == 0.0005000000000000001 +E + where 0.00020000000000000004 = .dt + +tests/unit/test_diffusion2d_functions.py:41: AssertionError +======================================== short test summary info ======================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - assert 0.00020000000000000004 == 0.0005000000000000001 +====================================== 1 failed, 4 passed in 0.27s ====================================== +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_test_set_initial_condition.log b/log/failed_test_set_initial_condition.log new file mode 100644 index 00000000..f76a44c2 --- /dev/null +++ b/log/failed_test_set_initial_condition.log @@ -0,0 +1,41 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +===================================== test session starts ====================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 5 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 0.0005000000000000001 +.F + +=========================================== FAILURES =========================================== +__________________________________ test_set_initial_condition __________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]).all +E + where array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]) = (array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., nan],\n [20., 20., 20., nan, nan],\n [20., 20., nan, nan, nan],\n [20., nan, nan, nan, nan]]), array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.]])) +E + where = np.equal + +tests/unit/test_diffusion2d_functions.py:59: AssertionError +=================================== short test summary info ==================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: assert False +================================= 1 failed, 4 passed in 0.28s ================================== +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_unittest_initialize_domain.log b/log/failed_unittest_initialize_domain.log new file mode 100644 index 00000000..9dd772ce --- /dev/null +++ b/log/failed_unittest_initialize_domain.log @@ -0,0 +1,61 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +=========================================== test session starts =========================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py Fdt = 0.0005000000000000001 +..Fdt = 0.0005000000000000001 +.. + +================================================ FAILURES ================================================= +_________________________________________ test_initialize_domain __________________________________________ + + def test_initialize_domain(): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + assert solver.nx == 50 +> assert solver.ny == 71 +E assert 100 == 71 +E + where 100 = .ny + +tests/unit/test_diffusion2d_functions.py:24: AssertionError +_________________________________ TestDiffusion2D.test_initialize_domain __________________________________ + +self = + + def test_initialize_domain(self): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + self.assertEqual(solver.nx, 50, "nx is not correct") +> self.assertEqual(solver.ny, 71, "ny is not correct") +E AssertionError: 100 != 71 : ny is not correct + +tests/unit/test_diffusion2d_functions.py:77: AssertionError +========================================= short test summary info ========================================= +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_domain - assert 100 == 71 +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_initialize_domain - AssertionError: 100 != 71 : ny is not correct +======================================= 2 failed, 6 passed in 0.26s ======================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_unittest_initialize_physical_parameters.log b/log/failed_unittest_initialize_physical_parameters.log new file mode 100644 index 00000000..d97dde1a --- /dev/null +++ b/log/failed_unittest_initialize_physical_parameters.log @@ -0,0 +1,63 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +==================================== test session starts ===================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 2.0000000000000012e-05 +F..dt = 2.0000000000000012e-05 +F. + +========================================== FAILURES ========================================== +____________________________ test_initialize_physical_parameters _____________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> assert solver.dt == 0.0005000000000000001 +E assert 2.0000000000000012e-05 == 0.0005000000000000001 +E + where 2.0000000000000012e-05 = .dt + +tests/unit/test_diffusion2d_functions.py:42: AssertionError +____________________ TestDiffusion2D.test_initialize_physical_parameters _____________________ + +self = + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> self.assertAlmostEqual(solver.dt,0.0005,delta=0.0000001,msg='dt not correct') +E AssertionError: 2.0000000000000012e-05 != 0.0005 within 1e-07 delta (0.00048 difference) : dt not correct + +tests/unit/test_diffusion2d_functions.py:94: AssertionError +================================== short test summary info =================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - assert 2.0000000000000012e-05 == 0.0005000000000000001 +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_initialize_physical_parameters - AssertionError: 2.0000000000000012e-05 != 0.0005 within 1e-07 delta (0.00048 difference) ... +================================ 2 failed, 6 passed in 0.26s ================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_unittest_set_initial_condition.log b/log/failed_unittest_set_initial_condition.log new file mode 100644 index 00000000..4b25cb8a --- /dev/null +++ b/log/failed_unittest_set_initial_condition.log @@ -0,0 +1,66 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +============================ test session starts ============================= +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 0.0005000000000000001 +.F.dt = 0.0005000000000000001 +.F + +================================== FAILURES ================================== +_________________________ test_set_initial_condition _________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]).all +E + where array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]) = (array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., nan],\n [20., 20., 20., nan, nan],\n [20., 20., nan, nan, nan],\n [20., nan, nan, nan, nan]]), array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.]])) +E + where = np.equal + +tests/unit/test_diffusion2d_functions.py:60: AssertionError +_________________ TestDiffusion2D.test_set_initial_condition _________________ + +self = + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> self.assertEqual(np.equal(_output, _expected).all(),True,msg='Initial condition not working') +E AssertionError: False != True : Initial condition not working + +tests/unit/test_diffusion2d_functions.py:111: AssertionError +========================== short test summary info =========================== +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: assert False +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_set_initial_condition - AssertionError: False != True : Initial condition not working +======================== 2 failed, 6 passed in 0.32s ========================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index c4277ffd..d1583ad6 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -2,14 +2,26 @@ Tests for functions in class SolveDiffusion2D """ +import numpy as np +import unittest +from unittest import TestCase from diffusion2d import SolveDiffusion2D - def test_initialize_domain(): """ Check function SolveDiffusion2D.initialize_domain """ solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + assert solver.nx == 50 + assert solver.ny == 71 def test_initialize_physical_parameters(): @@ -17,6 +29,17 @@ def test_initialize_physical_parameters(): Checks function SolveDiffusion2D.initialize_domain """ solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + + assert solver.dt == 0.0005000000000000001 def test_set_initial_condition(): @@ -24,3 +47,68 @@ def test_set_initial_condition(): Checks function SolveDiffusion2D.get_initial_function """ solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + + assert np.equal(_output, _expected).all() + +class TestDiffusion2D(TestCase): + def test_initialize_domain(self): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + self.assertEqual(solver.nx, 50, "nx is not correct") + self.assertEqual(solver.ny, 71, "ny is not correct") + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + + self.assertAlmostEqual(solver.dt,0.0005,delta=0.0000001,msg='dt not correct') + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + + self.assertEqual(np.equal(_output, _expected).all(),True,msg='Initial condition not working') + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 8b54d2e4bedb0b1d48088db1e72c73913f6eb7d4 Mon Sep 17 00:00:00 2001 From: M-Jafarkhani Date: Wed, 15 Jan 2025 19:45:09 +0100 Subject: [PATCH 2/6] Add tests --- .coverage | Bin 0 -> 53248 bytes .gitignore | 1 + diffusion2d.py | 1 + ...gration_initialize_physical_parameters.log | 96 ++++++++++++++++ ...ntergration_test_set_initial_condition.log | 107 ++++++++++++++++++ tests/integration/test_diffusion2d.py | 51 ++++++++- tests/unit/test_diffusion2d_functions.py | 8 +- tox.toml | 12 ++ 8 files changed, 269 insertions(+), 7 deletions(-) create mode 100644 .coverage create mode 100644 log/failed_intergration_initialize_physical_parameters.log create mode 100644 log/failed_intergration_test_set_initial_condition.log create mode 100644 tox.toml diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..be21b142fb3c2cc34180b7f81172eee0f8843af9 GIT binary patch literal 53248 zcmeI)OKjV890zbacAO<`;-N8xsv7-YM%S%rmTfQr5~HvlCMK1!F*Hq@=Oq8MhQv;7 zXKjThmJMkFi4#}EiA_ixI3Xks9JwLr1##nXK$Q?kNN|90;P>|njttNi{ zU!VUgPMVxPb<*-Vt2u7N^x0u)rzFeLvy4fSl%YqK9`TZ*4K?1OwcN8kXfq?t*q>$f zv(l*cj-+46&g+HI_p*WpF26n!eeY-hS5?euvz9h%dE*=R$S)x|S zSG=V6IS&|*AJ z9fZb$__A8du86MUi8552OWZXV_)K&*92T~^AyLyQrM3Lr#Gt0rX#z&6vzcj+X{r49 zxO_DoG^41tqE)J|3B@(J$uJt9YH-tQx$!`9r$I6f(H$k@J`$aw;uKO^es+9NaiZ&t zQnaz7ol;Zz-Mi&>*dxTaBp%7WLWm>XE^ymKaQE47n*Ji&n0IlQGCrBq@=xy`lyQ*- zqa>cSYv&U|mamTm`VAWN#Y5@KvN+Ps@(X;maLKIGXwoz-m%1#C!Ql+R#D!IpE;h?f z%MaSG*bSPen0vbU4I}98$M$s9RB$r0EjkD6RZXDjKh-2Z>WRRzLauLJ)8R~R#|DugX!?df>d?lvgFjgA- zMduXhgo6kLWRuh>J?f&j#TiE$ofRWi9REy{Ohl{=vl@1HQ7Jt!E-&&8(S@_oant9% z)!b-n0XRDI#7ya+_$U8_zAowO`XAe}fXFliAOHaf zKmY;|fB*y_009U<00JF>QDu)DzYUPcDC6nqT>$a z00Izz00bZa0SG_<0$U@{)Ksa>i!Xchh4^B_T&!Bf<4&d3;I{7-PoJJ+b1U4fSRVI^ zKKI1$-V~av{-R?S=r=xs6NP2}(2+xr2dBLv{W^djY#LRoR%?kb*&nJJou9;@uhCyf zQi`)fPSG$dO4u+c{u4JH2m`+wC|+s07hy{r3wrKYy$?^AL;T8VRN z`)GQ2_1_aUe*bTax-^o700bZa0SG_<0uX=z1Rwwb2>dq!imXUk@%g{3|1HrU76?E9 z0uX=z1Rwwb2tWV=5P$##9zX#_$)%~-?I1q_09Sx>u1+KO=w9vnoB0eR9YWVuVxRw`@!qZ z^1_#f%&uG!8C7!%oqAL$ul>A#?fgfVWi26sBoawkP18E~{=fdMq~Fqi*MHG}(!Zk} zED(SI1Rwwb2tWV=5P$##AOHafYzqPLc7d#E!77;yR;n7T6eUU lL_mE1ANT*;q_U7r2tWV=5P$##AOHafKmY;|fWSQp`~&2_0{j2~ literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index cc3ee5e0..f166a8a5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ tests/unit/__pycache__/ tests/integration/__pycache__/ tests/__pycache__/ __pycache__/ +.DS_Store diff --git a/diffusion2d.py b/diffusion2d.py index acca4164..f897ca5a 100644 --- a/diffusion2d.py +++ b/diffusion2d.py @@ -117,6 +117,7 @@ def output_figure(fig, im): def main(): + DiffusionSolver = SolveDiffusion2D() DiffusionSolver.initialize_domain() diff --git a/log/failed_intergration_initialize_physical_parameters.log b/log/failed_intergration_initialize_physical_parameters.log new file mode 100644 index 00000000..a5aa44a8 --- /dev/null +++ b/log/failed_intergration_initialize_physical_parameters.log @@ -0,0 +1,96 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest +===================================================== test session starts ===================================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py F. [ 25%] +tests/unit/test_diffusion2d_functions.py .F..F. [100%] + +========================================================== FAILURES =========================================================== +_____________________________________________ test_initialize_physical_parameters _____________________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.test_initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _w = 10. + _h = 20. + _dx = 30. + _dy = 40. + + solver.initialize_domain(_w, _h, _dx, _dy) + + _d = 20. + _T_Cold = 400. + _T_Hot = 600. + + solver.initialize_physical_parameters(_d, _T_Cold, _T_Hot) + + _expeted_dt = 14.4 + +> assert solver.dt == _expeted_dt +E assert 7.2 == 14.4 +E + where 7.2 = .dt + +tests/integration/test_diffusion2d.py:29: AssertionError +---------------------------------------------------- Captured stdout call ----------------------------------------------------- +dt = 7.2 +_____________________________________________ test_initialize_physical_parameters _____________________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> assert solver.dt == 0.0005000000000000001 +E assert 0.00025000000000000006 == 0.0005000000000000001 +E + where 0.00025000000000000006 = .dt + +tests/unit/test_diffusion2d_functions.py:42: AssertionError +---------------------------------------------------- Captured stdout call ----------------------------------------------------- +dt = 0.00025000000000000006 +_____________________________________ TestDiffusion2D.test_initialize_physical_parameters _____________________________________ + +self = + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> self.assertAlmostEqual(solver.dt,0.0005,delta=0.0000001,msg='dt not correct') +E AssertionError: 0.00025000000000000006 != 0.0005 within 1e-07 delta (0.00024999999999999995 difference) : dt not correct + +tests/unit/test_diffusion2d_functions.py:94: AssertionError +---------------------------------------------------- Captured stdout call ----------------------------------------------------- +dt = 0.00025000000000000006 +=================================================== short test summary info =================================================== +FAILED tests/integration/test_diffusion2d.py::test_initialize_physical_parameters - assert 7.2 == 14.4 +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - assert 0.00025000000000000006 == 0.0005000000000000001 +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_initialize_physical_parameters - AssertionError: 0.00025000000000000006 != 0.0005 within 1e-07 delta (0.00024999999999999995 difference) : dt not correct +================================================= 3 failed, 5 passed in 0.27s ================================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_intergration_test_set_initial_condition.log b/log/failed_intergration_test_set_initial_condition.log new file mode 100644 index 00000000..f6580f13 --- /dev/null +++ b/log/failed_intergration_test_set_initial_condition.log @@ -0,0 +1,107 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest +===================================================== test session starts ===================================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .F [ 25%] +tests/unit/test_diffusion2d_functions.py ..F..F [100%] + +========================================================== FAILURES =========================================================== +_________________________________________________ test_set_initial_condition __________________________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + _w = 20. + _h = 30. + _dx = 5. + _dy = 5. + + _T_Cold = 400. + _T_Hot = 800. + + solver.initialize_domain(_w, _h, _dx, _dy) + + solver.T_cold = _T_Cold + solver.T_hot = _T_Hot + + _output = solver.set_initial_condition() + + _expected = _T_Cold * np.ones((solver.nx, solver.ny)) + + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + + for i in range(solver.nx): + for j in range(solver.ny): + p2 = (i * solver.dx - cx) ** 2 + (j * solver.dy - cy) ** 2 + if p2 < r2: + _expected[i, j] = _T_Hot + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, False, True, True, True, True],\n [False, True, False, True, True, True],\n [ True, False, True, True, True, True],\n [ True, True, True, True, True, True]]).all +E + where array([[ True, False, True, True, True, True],\n [False, True, False, True, True, True],\n [ True, False, True, True, True, True],\n [ True, True, True, True, True, True]]) = (array([[400., 800., 400., 400., 400., 400.],\n [800., 800., 800., 400., 400., 400.],\n [400., 800., 400., 400., 400., 400.],\n [400., 400., 400., 400., 400., 400.]]), array([[400., 400., 400., 400., 400., 400.],\n [400., 800., 400., 400., 400., 400.],\n [400., 400., 400., 400., 400., 400.],\n [400., 400., 400., 400., 400., 400.]])) +E + where = np.equal + +tests/integration/test_diffusion2d.py:64: AssertionError +_________________________________________________ test_set_initial_condition __________________________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]).all +E + where array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]) = (array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., nan],\n [20., 20., 20., nan, nan],\n [20., 20., nan, nan, nan],\n [20., nan, nan, nan, nan]]), array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.]])) +E + where = np.equal + +tests/unit/test_diffusion2d_functions.py:60: AssertionError +_________________________________________ TestDiffusion2D.test_set_initial_condition __________________________________________ + +self = + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> self.assertEqual(np.equal(_output, _expected).all(),True,msg='Initial condition not working') +E AssertionError: False != True : Initial condition not working + +tests/unit/test_diffusion2d_functions.py:111: AssertionError +=================================================== short test summary info =================================================== +FAILED tests/integration/test_diffusion2d.py::test_set_initial_condition - AssertionError: assert False +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: assert False +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_set_initial_condition - AssertionError: False != True : Initial condition not working +================================================= 3 failed, 5 passed in 0.33s ================================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/tests/integration/test_diffusion2d.py b/tests/integration/test_diffusion2d.py index fd026b40..28e9dd08 100644 --- a/tests/integration/test_diffusion2d.py +++ b/tests/integration/test_diffusion2d.py @@ -3,17 +3,62 @@ """ from diffusion2d import SolveDiffusion2D - +import numpy as np def test_initialize_physical_parameters(): """ - Checks function SolveDiffusion2D.initialize_domain + Checks function SolveDiffusion2D.test_initialize_physical_parameters """ solver = SolveDiffusion2D() + + _w = 10. + _h = 20. + _dx = 30. + _dy = 40. + + solver.initialize_domain(_w, _h, _dx, _dy) + + _d = 20. + _T_Cold = 400. + _T_Hot = 600. + + solver.initialize_physical_parameters(_d, _T_Cold, _T_Hot) + + _expeted_dt = 14.4 + + assert solver.dt == _expeted_dt def test_set_initial_condition(): """ - Checks function SolveDiffusion2D.get_initial_function + Checks function SolveDiffusion2D.set_initial_condition """ solver = SolveDiffusion2D() + + _w = 20. + _h = 30. + _dx = 5. + _dy = 5. + + _T_Cold = 400. + _T_Hot = 800. + + solver.initialize_domain(_w, _h, _dx, _dy) + + solver.T_cold = _T_Cold + solver.T_hot = _T_Hot + + _output = solver.set_initial_condition() + + _expected = _T_Cold * np.ones((solver.nx, solver.ny)) + + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + + for i in range(solver.nx): + for j in range(solver.ny): + p2 = (i * solver.dx - cx) ** 2 + (j * solver.dy - cy) ** 2 + if p2 < r2: + _expected[i, j] = _T_Hot + + assert np.equal(_output, _expected).all() diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index d1583ad6..80c3ada7 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -26,7 +26,7 @@ def test_initialize_domain(): def test_initialize_physical_parameters(): """ - Checks function SolveDiffusion2D.initialize_domain + Checks function SolveDiffusion2D.initialize_physical_parameters """ solver = SolveDiffusion2D() @@ -44,7 +44,7 @@ def test_initialize_physical_parameters(): def test_set_initial_condition(): """ - Checks function SolveDiffusion2D.get_initial_function + Checks function SolveDiffusion2D.set_initial_condition """ solver = SolveDiffusion2D() @@ -78,7 +78,7 @@ def test_initialize_domain(self): def test_initialize_physical_parameters(self): """ - Checks function SolveDiffusion2D.initialize_domain + Checks function SolveDiffusion2D.initialize_physical_parameters """ solver = SolveDiffusion2D() @@ -95,7 +95,7 @@ def test_initialize_physical_parameters(self): def test_set_initial_condition(self): """ - Checks function SolveDiffusion2D.get_initial_function + Checks function SolveDiffusion2D.set_initial_condition """ solver = SolveDiffusion2D() diff --git a/tox.toml b/tox.toml new file mode 100644 index 00000000..d0009197 --- /dev/null +++ b/tox.toml @@ -0,0 +1,12 @@ +requires = ["tox>=4"] +env_list = ["unitTest", "integrationTest"] + +[env.unitTest] +description = "Unit Tests" +deps = ["pytest>=8", "matplotlib", "numpy"] +commands = [["pytest", "tests/unit/test_diffusion2d_functions.py"]] + +[env.integrationTest] +description = "Integration Tests" +deps = ["pytest>=8", "matplotlib", "numpy"] +commands = [["pytest", "tests/integration/test_diffusion2d.py"]] \ No newline at end of file From 794a10d15a5cf8770078d4e93eeee989e6823139 Mon Sep 17 00:00:00 2001 From: M-Jafarkhani Date: Wed, 15 Jan 2025 20:18:06 +0100 Subject: [PATCH 3/6] Update Readme --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index da66993c..a1aad251 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,16 @@ Please follow the instructions in [python_testing_exercise.md](https://github.co ## Test logs (for submission) -### pytest log - -### unittest log +| Test Type | Tool | Method | Log File | +|------------|---------| ---------| +| Unit Test | pytest |initialize_domain|[Link](log/failed_test_initialize_domain.log) | +| Unit Test | pytest |initialize_physical_parameters|[Link](log/failed_test_initialize_physical_parameters.log) | +| Unit Test | pytest |set_initial_condition|[Link](log/failed_test_set_initial_condition.log) | +| Unit Test | UnitTest |initialize_domain|[Link](log/failed_unittest_initialize_domain.log) | +| Unit Test | UnitTest |initialize_physical_parameters|[Link](log/failed_unittest_initialize_physical_parameters.log) | +| Unit Test | UnitTest |set_initial_condition|[Link](log/failed_unittest_set_initial_condition.log) | +| Integration Test | pytest |initialize_physical_parameters|[Link](log/failed_intergration_initialize_physical_parameters.log) | +| Integration Test | pytest |set_initial_condition|[Link](log/failed_intergration_test_set_initial_condition.log) | ## Citing From 4a4f2b7cb0d01721bd4c7b668334ad35460228e9 Mon Sep 17 00:00:00 2001 From: M-Jafarkhani Date: Wed, 15 Jan 2025 20:18:55 +0100 Subject: [PATCH 4/6] Fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1aad251..d1f6b737 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Please follow the instructions in [python_testing_exercise.md](https://github.co ## Test logs (for submission) | Test Type | Tool | Method | Log File | -|------------|---------| ---------| +|------------|---------| ---------| ---------| | Unit Test | pytest |initialize_domain|[Link](log/failed_test_initialize_domain.log) | | Unit Test | pytest |initialize_physical_parameters|[Link](log/failed_test_initialize_physical_parameters.log) | | Unit Test | pytest |set_initial_condition|[Link](log/failed_test_set_initial_condition.log) | From 03154ff33d8a34a6660c58446e37a8e5cf1eb296 Mon Sep 17 00:00:00 2001 From: M-Jafarkhani Date: Wed, 15 Jan 2025 20:20:14 +0100 Subject: [PATCH 5/6] Add Coverage Report --- coverage-report.pdf | Bin 0 -> 164934 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 coverage-report.pdf diff --git a/coverage-report.pdf b/coverage-report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2e691d6d44000217c15453caf0b3dd154c78c97b GIT binary patch literal 164934 zcmd3P2S60b)-EDSmYflXoWn5WoFzy`L_mo{&PkM@k_99qAW;E{N)|_^02=*K%79s z*Faoo?CRnmCkJQf$+CF)PJ7Ku_Ku))ZQ*u9 zKQf{?Rb!&BvBG=9qFNw#@MT`{T*twE_%Z`&&T zjIfAEzD*|dQJ=TBVDBX+~Ls;^_^KcE)47B>oMNR+_E^F}J`&A2yO%+=;o2}A=TFEl2e6*+?GI04c9O!^HjVClvY$4iCz*IS zWQL^oA>Xuim-)MH-fKu9>HR`dUF>fTUg9Kjk7jw5?WBA6BjUh22eH9om1nKy;WpIjTS%ByFwjY;B-6P9VP1JCOTW{~770;P22Ay)Vglc#fhW zLphlvJzyXtTKrZco;f>PW8}-kGRjcY1?0=VgN*hlQ3vKQaU&;S1Opxfv0qn{L)-rYVlXkcf(o#+vtM_FIykah8<-iJvrE|; zIa>p6ab#Clm!{?9kamSS7@0dl9oe0rj!xz_rmS{%oy=@)SfK|eSnoJ-a&dCAn>krq z8QHq9n>gFR+R`((F^0Ob?H4nO0RIk$KG(h(hlmK*?aZe0bF%RswVjiT@Ba(ijjRkD z9sjH0N2h}Snc+PAFuS>U*m&T5&cg+>o134F3k(Fo-{^BQCnq~cpwoe_g3Ur~05AcA z2x@F=i@SAzW}(L14J<++4hWJ6`{Xy8j7J&OFw5 zIe?+Y!^g+Qzwc!b7zj5Y{5TGV-rw;0|CNzuY;I!W>W9$@bQ7T`T738bHkqk<1k@yJQ+HUWNN47`P@8w#}dUKw{-Hz-`aa7>ve_7 zA*i$T`x@tKi3wcQ93 zYPA-O9@{D!|8-}L*>so=F@|!g*ki+KbNRx9M5N)ZJxP$uqe3fUDnVsNYth}2rFZu~ z?(UzxjKn51m-A~HE14~SrmAYwCWqZ~XJlzsaL99GJ}4wGjCVnte|K@TTXSz`@||`0 z?xKIt*Y}bY#kXDCBN%MMc=SIaew|vI73}`>=+_H!M%#1Fb++tZ^(t?i=Xj(L&MVus zD5DrDk_8Wn0qe#{B}O%YOdNQNB}X7e3`r&nHoW4*}HV! z9}hc0CYgrlF14PA%HBG(CY1Qr!fdEzJb6+Le<3v+a=rq zVU8nxBBB0GNqFJneKOrFYE6;blXi<1k>5UVa6Wb|LA}Tv2K;rf63Uq#4N_Di$h2Tc zk-=$hAVl1v5{t>yRuuD>8nq_AA;$0j++f}7K?^p?Q=;rDq`+cpyVaa-4axLXl<8vK z=h;_V(>%-D-f)gx-HE#^lg5VoIF_d{^dm1*2+Pf2aCdX8by^~LUbb@*WhPaDjyJT# zICs-V$Sw7@`E&vp;H=cdaLZ~2l2Rr_1rMSTm( z?I>(GFTW&xd3y2Fhq9)vw|?h$aAqC1(!63DNAOV1$3PnI7)xu^re0-=(bo{ zG*Sz8gtfMMkwOs%$vbp>O1|Q*KFO!?6<$vCOsp|AS`{pc>!bH)!iSA&b%hO^>@Ih` zZWA5tmK7KsFyo@~=<*o%Dd=vxY}6hO4f=9bgcPg2JTWQZ<|}8zZ>{W@`IoI%m9qqX ze7L0EfN54Afm71)qF7FaWs`Y|TG9l`D&;#4I*mdHeb<8dcxf+)e5;N`(6h~Uuy2+} zHgTs+qVC4L8Xl-jN)^ABXWIXV7u&P`brcbGQ;Z*8LVU6k5Qv0#2J_eemS98I!>|~` zcIjew5UJ=-J~KNsJ^PQLmM>hlD|7A2%hD@17X3$q?+;gQPWI(p*`2Xp{#^RC@~-=v z@_Wdh=$`i23X+>u4wPZ8sdiQl=T^k0skTPj>*>BF8cR_$kjp&m^fMt6*Kr!wfpUI@ zkhqXstE(RuUO}HO_z;58a2v~+^4vGsW%}yAgk7@^96CuBUjeCLyQ@s{U3g;-2O{bnw5;t-qU71m~5K0AlEF?Wfm z6|x?SoHKrze2Es9NE_7a@M@-Eyrj>;Wt?B(nS%s=FZu-|l51>cQ&{q?#OM7V=T~++ zdlT9QPZz1R#%hm8mfbdQdG}4F$ zYm0~?Ip|>;FBHF`UTiRabI$AvrIJCMRx=V+Sa7g>FfPr-R17nH`2b>~is)cm{JCp* zjNy>GB@OxMxYX!bxDDUsJHiZQ#!@7D@7Fldh;dZ*KdkntX$&Hv?r!gTORs5IBp-@+GV4ehR4(MU z$#dbRNwpTscOW2H(eysJ*b*Rv$50VRJ1%WbTO@XoYmzYw&z*_6%Laj#j>WfMOE)VH zg@$Abe>9V*{USm>GcoWP#>XhR&@b@mV~|FqmK+xks+wQY{B^T%!$_6oiY)qqL1VCQ z-EKB#re@?vWRhhI-0N#!2uPx|Xdbl_^qJ$n>uh)_U(QBs&Ptp`7)-Izr4dYcD{?(p zlDR(kBjZBw_pDE{=PbSAn0vG#882>{t~p~Bcd;sGGshQ5 zaC20BzJ{NjY4t4#dzK)5$cY74;)nVL`QnSIb(dadjtE{3l@?>Uo=GWAn@txOW9BUe zrDki?X7nbCu?WWyc~Yrv@uD(ZJM<#GbWM8XXZ~oddzIlz=7YHPnK)cGO760eGM9iZ z8Ih;kHzd3xc-xI%pJwwDF+(EjO4fJIJ0I}1KbezLV0?QVBdWXdE7&VEhF^;JfyLC1 zT!r&Cm&?#q<-bi&sOyFguV!ddVUl0_MS$Xj4`xmGeLniwT=gYA!A+$e%P(2)mujH` za&wyX(LF&$mDlMNFvCao)GjGH#o`K#Wpds|e5DYkQ}_CtRgHy32S<{2Tv+Kvjv4SZ z?jAGkVtQTc>v#jz3{A6^S{H@`l^s~%A=z5OK-Yiar0j)HSXp!QSp62nY)+V-HPEZyut71~#{soyJBpR2B2=Kl5|GDE(z z^!xenk<4NrV*R*xEV;hHVYEwemXo~J@_ri_&9g7-Sk9RbUR_4#!&QVZF&Z-oW=Y?b zXVpV}_PxX9E50^6Y5ODEyn!-RhV2&d3I}}ZUi;{(pVtP`enjY-w+B4y8)kBt`BfG} zXcqs}{Cm-KTMyDxsx3sf5!ME^@f1mmIF(4IN);Wg9t9Svx=ysK&JnLPu$_XOwp7g( zMgr>RUOUx|-os;bY(vR1j$L0!l@6xJ3YHnA=;7{(Hx%AtRwCu$c*NP>2VpWc8c6cU zFH3)m)@|E$@7VQ?TlLpf9uR>ng+V7s(pH z3QrS$CHW3J@;#a!oxIH+fj{lcDTz^7bEgt;*zm-QxGd;@ggw!Pz`z&OE8dXFc5b7 z`t=vi)1#mnwyF&3yk)YawhkyPYJOHMuRYl+9?uj+z~bNS*2NT7P;9PsyGPF+aD zoFfk7$u$!jUG~%{rPue_v=`8H6^$2Utt}@+`#^^_VhFC~|=c|HrJ}9YJ0oT|H zAt%~9u0lqB=goBSrn$D86V+%-Wx=H5Z8>aDG0OV#84@LDdi!}u z6t0#MwtZCT^lIe1JytL@ze_p=9U3c;xY;Us#dP80H`|4eVaC-)lE&VRekK<~G4WVj zt%zH{6&PrEH~DQ6N%4?Fu|F-OiyIeR)6nQglfGaK(P#_6QS);|ugq`htl`o!*WoMb z%l7kNPLSLSztW&a{Ww_KvPSi`wWwN;t9e@f;w0N@@`c*zOBm>s{A{M;p{gItRfiTY zy+^Z78mf8TXjxt|)ML%SQ1(49ptXPSrQrP3T75_dZ*Ie=d2X@j_xFYAuG>+Pq&%Ec z=(CE$HmR=+Sa{V0`73{%pX$2U>y3L`K(l=ySG{mu7d(GA-}{^Rhk34Tqj=p978rTu zcfVZH(WkkPzK!ZF8jF2%tbJW=GtMauo;VuI*rj@(c5xhvvy4qdLzfNvIl&Wj=@)Pq*Z~(;v^D zx~4?Z#(as-wCaYC`NVpc-sMXI8aw4q4P_+OZNYNaq;eyLR*Dp-ZyG1~SWt#1OrLui z&UE!gm8J2;D~u~h_t!txSo53P*KN62Q7rJGjNcj1)RPu42>YCS<@457>E7zLsK;`9 z&cK!3CDE$Aja{t0?U*0)yNmOswpCwTmJGn_+tFhu~IG6JIgeJdwiLZOT76Ju6s3Gi+-_{7d1A+l-N3MrgXa$9E1SJ>LM)Jd`$Pjd|7uCA>rI#`C%zqTH}AdEPzCWvWrAw+I| zBosMe8@#b@tt$Xgx}t>BGztIjUzuckc`9pc`ob+9{-*i_r#YMJJ8P2Y%jLt^o+2Sq z&A!j;pQ+kfE-bj@Rf{lXK!kiZQ_#Dd7u*m%DtEao@7EjIX1uO>YmHrQgxz2CW4+D3 z)fsUsO3rqXaXuX{hMySJ)wxDtSmp66YIJAKZxo8!gCkj6=LT}WBL0;J?+Zk|#wGt- zr;3prj>sLT71g*t)IC-s9({`b^*g5*As|%$X(aO zUA(@;TCmRvErdJB8)e&Hk`B#a#aNSgoblq7Ps^o;zLB{y<;{*Ib91gVBK)HPoEBPc zy4LKw@uhbP&22QPZ(ld)9Q(SJOB`T}Nj&U|wRx%5HPm3~2V1m3X6fL@rCKL{%9uPv zhOqmbm9^JEZ_6w=+Z>`hzkZ@e#k0Hhc3SiHgq>hsx52`6sThq?ulLld!4l0c zO;WVf1X;brZ4lDCxD}FD-ZJ8djKOxz-ZYB|(_rSNA3ES#qzxN_P!j`W7smK(> z`Neq582^u|f#l1`2FmX8T@^@r+z-zWwU)krmDJwD`XQr-+UH$!yzbiq_Xwh-*3XV@ z)3=9bsd>wdWLolf@9^H)y!kdK!^4y0t(#=Ghk&Rc+4{phtJLqTojg%CvSF9gX*eKL zi>}$@kh$~bnEJvLpOfpS_*{7AA64~xC*v5DM-5jccDoS?KJF%4xz^f4@KeObB7L1E z&oOLYl=qAN#r1d?K`wc|{rK4(9eUuY;1-s6gj@SE}7LCt&Eq;mADQpG71lSgZY`Uu?`C@Fh{9<-V7Pnts!oM!| z>UMMrZ5H8d%?>yBI;>oq4|Jo~y@H~rIpskM3~iR`)mC-)(-Tne0p*KcY}IcGC2kZTKDy>Cxu{J1IUu#0-Gl);RCYT)Wb zORVr#L0bhfTWH|)@<^tlH*~3fie;hrjep6~moEH<%dsf7KG8qF$w2OiV9#nj_NO)< zdC>P=Ku~7bX6gCh(_KR}~oTK@I9?>+E0zb=+Uy2Y5S1 z>QI0X0Hf@%Yd~F{KU34zX`jdgTzVA(+Fu)0Lu0?n1=?RM z-2cS`+FvD70~YKLc^CUtwE$KIjFO}K%9s2Ie7u{ z&S5zpi1ScBCqD@I!0SUeK)~nVHy8vtln>zq0iT0%z{`hrLAXG`=b)S$1UYOMplt!4 zgK}OFXyCT%s+(5$C70w0W<_A`txcT{cKzv+a_^QkPQuIEX!V#nc zqnN0HU~~)M3#J)}3#Jr^3#Jc<3#JN)3#J8#3#I^w3)VJ>3)U%eGr zfMsRmq+;LzD+Q=n8U}`rAa-?tLIx`Xal<_F2jc^Fe2nq2AI6URqMd;_0@ynW=Ei`= zFx_q)xo%&tW7ol(mbQXg!w=^?)+ma6fay{Crf>zGF|5Bx7#s>;TZ6#I2kFcAlB-9dgXa?{Ijhvkv_i20}?t?%*<_P|y?d?}Mt-a%ZJ&47917HzwRMP&rzc1;CE8x-f zM_=>o$LHUc#B(s_j+w}LL@}QIrvARTgMc|E4sul7eudM-!P#0WphLv~XTelZ+ebQBDNppCdo}f7#O#YkZ`<-%{ zlVmx68xXKgR|E0D+z+q_fa}$c>VBp;E>TvMU$%Xf?di>9p!@A~w!*Vc~|ET3>3UyxCc=}`1zy>M!D00JUoUPB{QU1Ts z=U`6o5zG0`G-dIfG-ZL0PBO3>XR;io!T(CMgE=8bEk6^C@SQZff{#v8uo`Ex95&?t zSE8Mh`-tT*s5wHz9lgzj)i|5QFzony;}{I!@;~ik7=)avAso&Bz*#uDf#5?L z1dnqNyz@bDj~wmtGr!`!&Zt;lX#NZXMw7J1E66`Ri`QWo7pEq z)zMTL3|k00P2x#rp9!n}1%!sJ#GR((Z)Tr}RY&t>Fl?RgG>IpfeI~H_7a$t8(0H1X zznOhvj(0R^26lD-t^0)IWBV+3ga1O_3~&52vo(GP=>yyYR(@gQ9QZy!XZUh1a13+J zQI!7kdjL*b{sSMb=N?08$kF^6Ugb2k|AW$p3&s1$319X;5v6~N;$tZ^@UZaj_2l6K zHLNX|cm5Yq8n*I%noEucF#IhFf6Pm;c?@zai$3~x4EV~|Z{2nu9*y$I@sRZQwMCCz*XFxcV1R8pc~VP08PS`y{x69Lu9&tccSjo@Dl!;ObvM zX&5czG$oIleaPrIjwHttX;_uhB%WY4oE-A^#`eGQbOQ_B>tKxa4^ z1~`UA0>ICK<=9728b)C`t&!h+ds4mwIhISq2r{Qh{0~YW(rWgR6HcW$5v5_H><`R3 zj?yq0r?qy_lZSL3SX(e7{$5Z1E6+M$e4x{m{LRTH!qu@{8pbv{P2x#rp9QY|4V3=# zTXKGzN`5o@M7TPZOT)-iXEpmwaP=>sG>lqsnv%!O{+*NopPY{6(tm#E&To!9p|{}# zhrbu(`^$s>_<jYe=mUl6_kb%Bu`WFHz)sQF-&W&W4Sbpgn638lgvH~T>Tp; z&HY#RImgY0vqS%wj^Sn>%ccKJ7(E%Tj`lW8i@*CM{$E%h1jC4(r}fQmW}gICT*q>0 z7~kqNi6`_noL>6(g8W}WX&8z1G$nsC`=or2>sT%gMvgH`~B@oP_OHekg%kVW zxOu?x{WG8HgeU(03T~c_`wKqg*dDt*<2shz!m6CnY&aS9Z;qsY12@mcQ3k_VvcKcz zvFsLB<*a6(Dc|`QvRj`0p?jK=$AkQ2hV!xP7FOjni6;a(OpCugUHl8#EsUOgnv%bn zePRZ7EW3r#Z%>nWlG$guh5I*f69z1&Dhb0)Fnm+Q0RSBUCVZd+8-5NR8N)*XIEE*7 zM}c#{mm4e#8e&V|)F zP1rH#9_gn8MUTk(%bf4I$%+EqzUkUNUO(p zAb}3IU%+Mn5F8PKcYE%;@?h%#u)z-24)6_+U3hK)g466lFxERjYK3_p1ZN|I_~7CW z$e%E(q#6j$-UIQ&&+)^uH_!n$>3~E7j2HM>INJkAm|*+|;QL^i91Pzb2pq#N2g7&& z0mtz64;N~HXQwa|!0_FBz{AUf^Y90-z&JcO58q`693PxN*dqr%*c}HxxLF0mH@*Q0 z+kr0*91cF%&jnB006h=<2|n2Q13vI57``***5O_O@SnFez&FlmI6#4&3QEq_0AUr_ zFZm}BPZXSN>Mpa6S>42UzZ2KI^mMt}t!u#*3v#qN_t4@t^LN`V`t zL(cNiQV1jHfWmyVlp838g~_qtI|9w{ZGLbw)Q(j8Z+DRU4pFn+e=W8G=x`MM;VLCy zr>g?=?*9J4KMDc29o%uqN$p<_9K&XdBa_9S_i9KQI2l;kn(oU1_9Y(dUj$wSZ{T1l zXJcaf2Yeltz|R4172kj1JRq7Ket&wXF9;qfXzZHi&^u5E6$hvZ6xc0!uwfUzDE6mQ zXzWtvj&@cCcYzTP|9=WN6#k!qf7FQmVR`^T@Hfo^yJ~qLoWSeCPkT!x9|u4G(bv)c zxQDK*(Kon$|7FQkgR|dfJCZoz;NX@A3@NUZ#5NZG<*8r_6%{!yMSPZbjG8YZ(lgYP z3WGE=3I!%EHbcTL^M6w8$){pftXD`UkkfoZq?Koh#bn`;r>FOI+vAs~srBUDq>`k) z-Mo^dihhV24;j*fa0FZq2P?zwwt2lh(iBRBz{V*IcH-4sSs@uGZN-q4qOS)ivu6UC-N;!V@CwC|f;!_^6k2-u=st;KPr!}$aE zJ;|`65T_|v;sq>sk>}lA5dvI^I`f#BS>wvKzffZ$WFdA|<>nUCFnrQKFH8C0C$xxZ zD!#Gk2f`d`*l1i)MwFC!tsbHo?SsLaw9BpBMcl{;hUY+EH8^v)m_*ZgL97>=Fei$b zneLKno}*FRXq|fUr12+dB}o7yvishJ2jW<0cqmi)*aeL5QPW0Hr^O7Us2a|z#r0y6 zs&Hibu45-usi34N%o9JfqE^Zi^@vxsew&7$$x2%G{I2?^7jh5HMQ2l2vd3m>g-3mc zsiO0QDk?pm;@rcLlq9;C9YTaMLvD^jgK-`^r9(Vu_|3T3~#ky}ab~eK(ptWeS=AD_rCsc@)k>SWjBiK52@%Nr&yOqhAj2+cS#TQx4L2 zC?tSgJvBFendOJ!*Ix=#okRu1!*86BQ)-b4B52P)AaO10pM<53fg91K~qzMRh#r%CIyvGpKNWLn(Ep*aFiOkqMqRrB#ymQX>^6ig9$3m-B^3G zbM1!A7Pq-KGA4Q0AUiF8mThv~FzRB*o7=)}e1`8n8(9@{m&MaEaZ(MD6O!VR8*^T~ zxUs#tMZ6;LQpPX}Br+h9rlm<r~9Vx_(Y~!(XAx8bWpHrk})oGInx~)S#n7G>TgY@xvNJM}-$msWL?4lTx3oe)_oj8Y>qlYwCYcLri2s z`eeZy$fMJh^`)t&-pVdn7w@Z9#gI|mxM9XujqTou8bsgdH_}(=G7Mi&F-(3A@zKkr zt78`bbU~r)UaFR}&4$xWjhvjArk2633%4qGD8Kw%@Yw*GXt>1qisJbj`6pNk0UyYi zi3k~-3f_rP27N(YER1~=8-2$!eNDGZO-ND`V~xe_=4$XL?#)NJnjDjwI@ZQ%IZ34; z&Ks{f*z-R}1v9*RN7JZ==QRs1wF$6m#)-LyJ8BtBXRB|Ch$x6Dy7x+E=0dVXmYu=G zd0 zn?>mHl<>1LpN!e^shXL37aa-r#4T3*?CHxyyNHhss^3Dr@p0Fx>|*Zyx@+{~ZYn)~ z)7!rK#DezLsftT*50ile@LM4IkhucG zBC8a|bK)TXyXl`BP2ROc3Y9A+q-O_ZIA2mH880su*@)PptzFJBxw{!So^p2+FFVJB zZE@o9%=d*sB_Kqb*z=n|p*0XNuxJ_-Pz>{lxeuuZGFOSYE}?g@O4zEKuHx!zWc+Y> z_r=het`4gJi}BSf3d0zG4Wb({uC9H?@2rY%4D|3$ll4u!t)C(a@#h^PO2@eQQ!}_8 zYOEsRjw!AAIFaS@tuZQvMkR(!Uc{yD9WQNpGZ*_OI!F;FQ$$V`_hz5i(IY&)C}l>9 zopqN2C*u4F!XECotG+*DJ3`T_I#-wxk~*;RFR@3?xRS&#UNo2F>rbU{b|o?y|7Jh* z&_5qZ``Y_=T7F>S^Oz0`*pI$B%hsvuyP^r|H>_$sxabpZ=ZS${5bNPXtA%mD4uqG= zLAD+_w;_Z-`oM`-&Hl2D1b^1(g`IP|pgqAPX<@gR(psYMSTDwp)m44&HKLM;Xp0;a z_2-sSMy|iH6V6uokn~mF)|$MLEp_Mcl6nq9cC z`G_qAeOhAeHJ6VmB|^|55sr1auQyEuO+>h{&<|S4((?MCWAy8MOd3{m) zh{wI5JO!p{F=>!No6D?12-cbQ zrpe}^mS4X<3`xJ7BVZvoyCLpFg&3ayK9DO|234Np{Bi->2SZ^IDo>gOsR+IZrB~Fc z%`}|eZIsK+x5g<7p9I*s zuAXa+?l(c`PIlmN@4Hmw(Xm?Lv_kVn z&pl<4?p&YQmVHli4O&}od#5afCH+o>z~C*2o?z@HI_ge3{%Oe->oUKjH1AJ#5my@w zFaDT=_V~%NBg#g;PPslPr7*Mo{d(KLR``XLH~m;8QbSeV<@H;#N^2Br`RAqRg?%d` zu)vX;TS8>g?#***WiJqT*7$B4I5s7^Mo%J&n69)wiVOy^8=@}B;cmv+a|j?h%R>F_ zd2P~?QwU1+8Fyt~$oDKDL^NOC!2Qrgf0MmkagfiN;gfuZLLXOb??ZX^fUme|f(B2q zha>|(TKurzVw`*?w^Z%9hGmXt{X8#!L@nL~gRz!n=#d-PpS|YgQ^XlbPR!uotGT^i z{&vU;5mv4!=wKpW**Y1Y)N>TZg(I;+c3SqAk&Ef=TYz;I!40 zZjje%QAY^MbdrkrM2~5|{F5+%>5OH?zpNYmCJk?UVfh-8_bL4kUQRGE;VgetYfHhJ8$`5C65%XjP#yh|IZjN0;7 z8Op*7*op|As0f4*mg_XO zk>P4zQ^avRSmVTNsUfVX-e}YfTJl~d(oeJ|EvNjG(&%d+qfkHGHCfKgAI)FlAT&YM zHP^LFlS##gE_OY8Scy_YHWw@-5aQ~Z+G@sS(MWxg>N@p*S0O=@H>1Mv(p_H`uApdO|g|utrTC?3mCI z=_uv#CIIRd-gB2GmD^0;P*r<7fy)q$l#jzq|EowEinLNjWLumycMF$=*1ghDzg}xZ2M=O>ct>BvEsTQhMHRCH}29JI8>vk_K)kL zef;mM5)o&TX6!L~1)J7T^MqggXcw^o8k!NBDc1^2=-?W|GH)o>G_thB;pFV@?jG#n z)JA@KaqUN>M-FqHSvRSZcEuBm$9^dcvBeKn>*Nybg9ve^5~$h~c|L8^t}Dp>_$tcZ zoQoHJ2~+V>Nxa2CE^0{m_T(H|>P4Ez&E^({IWZsJf}u^T;>sHsj7jA?-!W50D;-x5?yOpw}BWSSpZr)mn@K1J$lcu4St5aUWsgSq8 zPhVDz5-OLxwGEtc-VET7r(Th~`l!N#(#di1MM=h^FlcdhtEzjQSAt+8$q+k#R9u9j z!rbg^T3-Cq4j=gth?~^Kw`8EK*#s=x-b}py0NOACkaQp8uktcwy}Xb|*GrgrdJ}Ln z3oQE0E}5l;KRy4H2eZhch5I_`t8kQWk~eejfYV*rUUZIoGFpm}cF`rhZ29H9dDvq*6yDB1E!p-3r48LJo0{1i~E zouM@R8FX&zb<`!i*JT&!FXE+2eOC*NVtpKK6UIdQvO0}-8gsXr4tUdP(uQ`iz;oZw zXH)XRU5!oEG_eh_Qy&ZQP0iB<^^6HJDTQk|g)m`t#c43#wsQ zTq+S%%cepJNUp*%K!K1ZJQNw^Kwrk>Y5@6dAlGlH0>7?JG6@WDaPzp z@ZMHOS>SGhq>PO$g3H;gm)bVmetue*&8hB4>Qa6Qei0+0n889{7I%4_-F9zoVMBIa zQT)wDa&X@5`#IYp73}E=)DTxw{!wGSv|dG?w)uGIDcg{?!9`@G9i^d4?P#6Z@qUD7GGh~< zAGTv_J=wKO4s%Eft}2}qpf5ndK-SQ3_{;?b4cVrN6lR{DzG$&T`R@}vC{Jt*3;@xp zc}kxIEw5Bl`TOf#Dl<&IeG9zlG_pp(@;V@3&vK}Muobv0;(cFq*sCE=FIuH1?8vtY zRP$cN{^~QhdzBERb?@_!81GjfGjH6WI$vgojP``af6SqifNXU(kX9_Q@J>Hnb$8W` zyjJmtRgVP)RQ5~6y`U=YJ8-!KpFa8uYULZ#)84v-wwn&w+r}l!1yq{jsE**(e?O7Z z`L*FP5mODzE`k)wlY*I<81J^K$M5dEL4lNKeW21pb97`!mfq$0InJ;+ivSccX}y@7 zxCJ+bq*Kv{WVqK9k7c#VRG62q=A|HS!EG~x3bC7c+NQjg!gJMSeV1OB3AI&HGH@|+ zKpr-OWHr*;jN42&`ynLpajyRQxIq^mhD#e!2FVZvHQXb7+|EKOc(b^voJD)Jg@v@} zCRcyHSuqOMTmwrG{~AX(3mu!nKY1^_-WQZ zdh%&1A3Y9`Phy?jSl?EHMfXmqP1h|so2M-{E=^ORysw6;q-^9~=?$zaKl=Cw?iqNO z=T|ZgPY&O_{e^ls$J;P6+h=W2*`f`@$lzmhjhJdjjo5TN3JsEGF7%m-76U_%%j-8< zoqj(<(zxT}kZKsHW6_vxjnn$SMn%m?@(YK6v}Q_+`{tg#BtyI=XUVxIg=HWt?9;x2 zO)M;h)#becBJ3u_aUAr*81&+vS}_^)q8s!YE54vTD4{cb?%so+8QVCr>y+U?B`<#Q zmvg$(pHRfxY5&x`V+smax{>t3A|PV9&?6xe0{KSv&~ zqz?8zlv~Xnx%Qnaw;<7vKf4D7O<}1M%Tjr@upfe46hN>_8YC_dar2tBm0pg&@4ySi z(tFb*n1wxMJVjX6eiHG0I$unP%^}8v!K%e1^~EF;#U$GJJ+~M#-l<66F`)h8TjE57 zU#5^-=*ZgO$jbTUVw{b?dq{e2DCB~?XtLrUZs+Y(5>!)d_^oRbJmcoEqG43KUL?-K2LPdzX>tP$)VyOYl*+a_pacV|q72fw0E@^K+UQ79XR@b~(12 zD2=@&urD7u*jLjIO^gtyXtQMUj_Eo@e{VQ1Ez2=(p*=>0WI2RoYpL}mYBbaIO+0%&Xc>7uIwu=5&ag-Iv!7*m zBqHQ|7A8rrpKtF)zxH0g7mnPo`gMC>i-#H4M zrHt~!8ou#8eyDl5!`|Y2{r3*aS2vKKeB_@Fe=bwn$vP{lZq++EYf?;{*kEAg>x(24 z8QvxI^o2wPJtpUjBE@LcBK=RzX*DBgWUhMVPx~r8^sPi)F1;tK|B`xmPz=T68+M2q=U z>bZNO6`{BD24-o6`y{W7j~)rjJLBGHX4WUw#Guz87xWlG*S_ zmWT{4CGlb7oBaI!KPg30=^04f2vxn7!eWxsG3+MqI=Kf&%(kgJrS9sgNH(3ffj&@w zrXY;8d4Zxvx@VMOF-cY!1Bf#KKlc$AZFl zo0jbIf(tD{Uxwr(I9z$}BrV-oq>>Zn7aw$RoNc}%@fLmdrT~AqpiFVm3VEsE2g!yU zzNYbaLkaizd>n{+=Ta%r$&EdViAo29f@tZHUcFQK>2=ThTmchXzrKn+F3y{$fj{5! zbANf4LtGS$Mxbu+eQOf^`>y}R;9e? zy#7>O@FO?h!0m{!VGbt^`B_>I)_0vZS~B%OWVB6cQhJi=_p1|`h9sr+vYzK@bPcEs zsFbj0TDoh9Kc=|(^Seaeu$YI3S0Q>}s@2b24x_teWvtqyq4w;b53MS6;=R$D*Be2a084r^0vpZ{5}EjFM64Y zY3k7fxAdaXfxw=bw(GjI`~=ZrNw~Z`%FV>W&r)PETCeNY8_Kt&EL&GrzNHwRw*D^6 zqfA0WO7ac?-`f0nyZ$uN?YqCGoM){H(6gs4$pV<4YCNxLkD4xb&qkV12qXli0hG2?c!2gF+jgEip@}}}cxl#^vN znm!vyfJB2pu^Ts$r~{IvQM@*9`cTCtixW$1ki_D&d;pO@+u@?ppESjOgyKo68Ze$= zpbF)cTI>n%^G)`;9?e;{sGeWlqD*;_Q}lwM@h+sSw&A`Ei{ZuxJCNU=4@LfRawp!G zP37qe$a|>v*-p=qMIX7YjMImwvAjdIA{)ji zeb}Sw9i+mr24xVL`HtZDH`3k94&fbDwb;fBJQ%(~r3S>DcgbE!6WZ1$YsC3m4g1Z7 z)qdt6m)x)qR+*5+m}mr})dIg8N_KRDRVTD|9^DUeA79iAuC*HuT+A+~pmt?Oykkmg8KiEAwt}*A5xJA87c#`p=o@4aoOM>xn;9$)LWP(lg=&{urPQ?J!@f zN7^NjUo_n%uo0sa^)t_Ak;D=8n~7}-HM|(O2_DL9iDMXP=l{gBN!;rByyz(MyzKHK5#k(cHy zU22<59#e{1{!oD6xPil>0VQApz9eWxz20$z2HnB6ne?|0Wg;3Q^h8-V6cP2IeG`49 zMs278%YejY3R(5B;D-2+zu+b%OJm{==w~CMCpMNorDy|FisZfDH=*;5V_F^SW2o0f z9wBdd=2oLsUa>5Qm~T|qYF-~P-|?NVg}8>z*M42RQHk|olya9OskYXgJ*knYl4x#$ zw~~lGb4gmLW_^@asAYZhifizEeQUP+h0x^+tx)=n+YGJ|^U|0}<8CTJ-0oOB`mA5Q z1%%o~>vLTF?t4AX-l5;^5PgXJVM$pfbZUd%Ol87St5LL?uKfL-G3WB8J7ap;L%}f{ zHe91u+=QR@CZH_NEPXQdMeuxKBghaD%?HdU3t`L#BxgBbEpMgz(vxce-{|(~!P5+O+ zGP~zoa+dJQt3}^ue5?_DPf^}1`u_HHPruR)Z8bgxnpB?u zYDn}oWb9*mX{uuM*AcwR%k&G3Uqj{#{B0YtvUhNj7uW4@w>R82P`5YTHb}NNc@k>Q zRbpmz)s&84Tw1c`%V}{TpVaAkNbSzdCo-k87umCi?67s`{zAg;>h-A=qpFCW&|Bd> zp}X=*drN@{yY<({SEz{`wuTfOwnp@tXZ-sTJU0RpJZ0Nw{L98yBrTLg(nlp8MVNf3N#@ew?-TT5HcW*PLrUV~l5v2Xsld`G$RTQI1>4 z&_>_d#M1VmHNXG>wl8=eBzO2P|IzYWo9LQJDFWY^=^EJpj2M92Yoia;Zw5*j0jlAw zOw0gp;Nl7wyTG7}V$#fvkPBLap}8^%8!H1FJ0k?l0#t0)wfseCofQOOU}9urVF&7B z0_+JBeSQlgGeZ)_&%Z8kS)`gC0%$z5urLBu@8|()0s|`}pqUI5#7181Qs)!dye?I5edj?LtB=G=Z>44h%#S!1%`#;3v1;vCe zj=11q0388rDLxbt6Oz)k1nQ(406k!0>vXwW!N~@=|1S&>c|#);8(V895-NU!hkAwp z3rprgmK{(;C!zXs8n9Er&e9U7Pkqsmj2Fxh6(Bc}6{u~^3Une9n2|~IqBtNx!~!I? zS-?Q5Y5`uCTNDeGkrsX*0RadOyGd}n38;g!H3TZzb(bX_$8{2 zZ8%~Gx;~22Not1r2mYB>*QupWQ70GkkORJ{2|CU_M&mRBhTRo%fv0H@@(zBJWrv{3 z1RsjX${`DNF6n&S`|?Ux_Mk;-9V;7V#JaeN5Zr7K6Cq>-7OyyOjOGuz&-t`Kli497 z!U=qQTvVthklbT$iiuZvYX5S3LuR}Bo)4FG^vkf)#%9Do=@@jeW*mJMMX5e!7XGxe zfsXkVxQ`SXvPSoiG4(&%5N1t>5itbD3318ayUVc@*c}*j)c*Y0X~tAMHBnk#)r%L_ zDw)p4ck;G*YBUlB=jICLUg^r4Z=Dg^S2SRDqf)-{Fa3VDT~Nion`;+OSR{zHR{LGq8WMGq9M{XEwUbb)aXj6{H+1^UdV0v@d5LnR9n;2eOu^qEoj z^)tSpSN+nQKYGR>Cg!i7u~G*o3N#2_xMwm~2Rhnw8ucVFmAdV04BqJ4+QzL7-ADxZ z99c1ZsBEeLh@-+SAvDaRg62*gU&Te9(}!|u)q@+3Y3&%xb)1u?A-p+-Jw$_sFk_Xs zqwU@Y9?Le0^$`1uM7!zeg}o1PUYXl!hlJHV#nr;6WJf79ySc%;0QWdUZ0q~31zj=) zf8uVKSs~xtjiN*e0SJEVklGeXW}7u3Qz4s<@^C7nXoBeur*6HcPnQ|g)xI}6IWQ5N zK3k6qNno+hw4`_Bl@=f&giXmUIMP*j0t4lsQk;c_)CrKDG@{vzV@njciXlZ^RnUu> zzh==3!pED$_k-hjN{07j`FIcQqjhlqhuO$NMWrUHZl%{G=r~a&Tu3Y{GcWo!I)+E% zDhia@wyUcUV&KCcZP1pS?RFI@=rK~<$!mN5_$}^X)czbKt z>EHzSmxd)>2X92Ryp5keq#Z=oSDSS++`*O?v1|&+Y$E4eP?$5J$$#Q;zt!L=dq~oY z@Y~djMhD=DGUlo~Lm&I}t3@mj=Cdu#@7wjooiH+jiR}AL!g~DI{IM|~7-pX6-CapD z?-zV(pyP8?Z4_GzIkZcju1)#KATyhzk-wS;DP+} zTO+LMM3&|Y1Mhl`MOr>>1aK@$r<^jwl$Ot~MakS7IMAZ)J!x>fWmMTQaEsphaJ(?} zkdFegVKccTGBGk@%b>4!OsDsDrZ_{d=xtnG|LdHGAf(tNC99EO@)EI#MMpoLs}Gmx z_Q*zzG}t^^+)k_Awa>3e6b+dEXpCI2`F>`Muzka8Q&Ny98E1qaU&YYiQ<$Y?d#asY z660`gju^^)vk>ndUtd{hzb;e(@=ZJQ`UQOB22_-CSez}+H?z&1!MN6RF;^vF6tFcO zDeCw^(dVgOy=h*X5c?KNN+-NcVg^t2pyU$_WyI_EouulG7$w)*pR-79RFa8{?l@D4H#mU89Y*7?3`~f_cDC`>Xdy({4Lf!#uzzl==i#4^5sT^WAIpPR+L$3@w~jbpM0;R1eH2P*mI67NixC@K!9O~%)w)B0 zHD$79j_TDW6)*`yVY?PaMoP|%M`p9vfL_6Zz1pc`^ znNNzXxFxdTM;ssiip*tjDIv86!{LXaRt8Kw!aF630&#^bvFh~Nvi;QyX$NtNc=LNh z#%;?r-l^8lJH!k!(-x^agu0UPdv$dzsnA!%*dlvegpFQkxKL&_40SGtw6d6_@XirS zmahu`Xuy2+#{Q#MBnuPxH!qd&2@<4n8$``3&)h%Q5M|2WliYZn7|!U&6)%^eZHk6)kQX7E2*noyS9gw*8=?-^ZosEhZti0;dcT zPHkyUXV3$vdqzdQ<d@?FYjjW$)}%BH`DM6!yC=*ZVdMBg!XF$&wa;RQb=2B>L1nB4j2WSbx?e?);vcZl__xT9VY(%~~-10~#dh#Z#GE zGTF=?thi&>H1hea@qJ%D#fqs*6w;5mf6Sq@TK+2S`U3-}sO{@`aIPV??2L`N3@@-b zh>RtOy=OAJZFv}(bzeTqnI<#zBlxhbcJJeL4b1zqbuKPr4=A6J_GL}#ss`eZ>mxkO z^2(p0IgUwBHJ7)DAW!u$9^hQ3dHk*mHYuo4xwHIuE+vIA5k(t?cK^ucUfsBUlYMSV zorUF~S)L%jV*^Himl?XGmWa1dy#Za%X#SGAr{7?*A~aodC3189dq`F5lKeqZ-b^oj zFRsRm?kv$woUvmVF5X1K1G8&3a@hq4no9yPZb@*uw&ALCX3ouJ#4{}2lk2_%sCNz; z`&AE2u0||4;d_QoVf*e>MUSLORJcia`1=~vR3gdqG9|cF;g%5WOsMG=%1^+-3+|nO zV-Nfe${1pD6%wlbS3WVTC$(-m-PqiI_=#`|l^6={M`Pt+(9 zF<@+Y28V2KaxL4w6y1EiJ{@XHgio%k%kBk74ZjxLEsjE&sN-s-PfYS@u&x_PCBh_$ ztvWdb`z{eF=}m4;MDSuj)1ZKn9`CI3BdjDRs_u-&nwLzl#Af%eO3@lIun;a*^o(fm zzSH|~KtsAhl>U;lId^v@^7&I*w~c7YGPXiJ%D`|!Zbb)B1ma8oS5KPh(+FrtH0Zge zYU4+tHHp=Y34(|ORYVU+d1%sW=;JW^?!C7`G&@4>&Nv`;L$pP6Ml?5fPQH!X4QYN) z_8gT%EazPry{Ih08@71k^eu<}<6`NjHCb=*Y#UgnPMHf1`s&7ri;FF^f7F#1iAX>3 zUI#ONgI1N~#BMZ^Ak~~;p7G%X7a?zoW%dakpFi-Y@U?8X9&VV@!&Y*|HGtBns$@$- zG>@h3l!x4T=5gp8*%Q|;2W&SglSM&!(3!mWjrZMoqQYoQyU{ABu%4x=$nE|lVzNA9 zB?r8-&oZ9^JK-NhNhR(W>MVgfID|9 zCXoN2`|O^*kv)#`ppv4KX%L#p%>Drq?xK={IHzFd z{tBCVcG8m5J~~ocUiXL1#j{%3@dFuChEe&)0Ut zT;)MY&l@KP+W6Ox3rB8l^d%HpMD{T|XH$ue-Q1$P*;c3mWw8HRvlu)o?bdPSQ{?se zdk3~?^)k;eiD9>Fif09`6r#|&W7TUvq2-}iuW8>g6r0u6mbw)hLS10s1bRTnePh4- zPF}h@l=@YNpdWSPg&FwExcW@AzW~_38j8Odo4V#EW`HHfpm3K&S^==yE)D`X{D!vr z#w2&7A6lF1ntk4>VrXJyYzwF;{bJaDHme0bo7KSS(hBr|VQ6Qj3z*%%v4elLl|jtR zOka#?0O$k4TE7_4K#j_a>;7Vt{|fZKnjF90#BZz);EETmmeRGgHUR{o04tG^nT-w1 z_Bs89k%a!YdoB!Z6Kfk=L1SI(3p-s>_m}?%gV{b`>$BAkq~$OJ89E?#An%19#LfZ& zPW&As`Dfd!2Mn|lctrpG{80}8)$uNtn%{naNBg6` z0}`Qrd*r`z8>l07fvNuZ!@>vwhRHvS-G3DL__F6ByXF2rvS5JpraMOe{qMhh@Mp&W znCF2JKT4oV$mHOcArfUKpu2LuzDlb0}R#tsZoXrZ+#tTG{41`Xn2aonv}>WxvXN z{risk3N!y3aMCY`>(8L1FFGOLf>K~o{2odIM$4aBS1;=eeLs`G2(%ahbM=Yj}f;q4qB(P?UL zz$b=xe3BPy)7CN|fJ~U{Zx_*RKPyhM$UI@OdiX)d&aAkqHCmyk&QlTpX(4i%4sp-K zSw)HXwNH?Ec}qlhI(!%#4qI!l8g||wj=n3EvxYDmSh8$X4DAk9-pz=btz?W%FB80- z*b&zIT%L{XWUdp)6}Pgp69|oy(~k+cg~*=;sd827Qd?#B`@&R>!Iwg>XpC*83HVMu zpDown%nUki5?9r#c=buH!6LH`X%z=?k)GT&adcs3#zK8^!)oRu|Luw}#RoF}k;6LT z!CmeZgt_N^XVA<=gO9#{4**um&y83x^SADVa0v@PMkJp@_GXPM2CdtxT#8EAduL-b zl>8neTU}R}q94I|)wi(4fTy|Zk7ip2`H%8X8s@!f0*5`M8T!vs5BnB<$=om~uYH8X zvQ^~rl;0@GFvtvOi;=c07VLWbe1rgE+%q6)zL00caQpRW5G#>c-Num%$-CVPGSLR>2o=QJ=Z?Hq)g&h1QkGXBHl;A$3==X2x>NB^P>6I;q!eQHFec6}xIo z=ETB72+!mPFHq3eatnX7^s;?3H-v-vQ9Mb|pf^u~-0NTX8hV}M%t4)duoy>m zmm-W9?Y&I%d1Ob~yY?&#!38h>QHg-QowH>1su-+JNq&u;G;_Jd)`dGHwWpi9z_AK% zst!*0$sJzXG`#AwGS-3m)|v=9VuT27W5K2&T>DE5)LNO@z0=*f3-dH@46lnSomLH zH~qU>d+|F=Ec}177XLeY=YRSwCjQGpYCpimmlcQroAzQv01i-K&R$r!7rp%%Vq9+V z1NQFc8eiX{=C7=gKU%T=CaC$Vb>tT-7R>aO70blV02DO4WTa_fWLOEQI z5vbH|sOkwbVrphuhGo{!l_^Nbz+$59GCLA7rVG^EKdl$INF#Enu zJ;30#x+T}Arp>$6p3H|mSV|TX|8jJWotW{#NcpTjZUCO}(zvXTta7<@Cr9^eap9Yx zsAP&mOl^O`>}FS05SgEKUMN8eMm+7<&=3oAvA`#|V-A{_Vc$8pNfguFTtCijBIvxk z2p0G_($q7>sJ`SK!>%URVs~GOu*j#{1!E^Q4) zxmF!Anw-(k60ET#t-MCF+j`&9GBYmSzYHyI^q4q-_nB^+ru!LVxE6h_|@tTOVe~NppgtQW(&W(Dya+`X7!CX)dwsr;u5xrFD z#+yc#^~hCJI*+tMGSUxNYtV<*y$70t?HkmD{D%rXN5)-wZ6yvc$wA^q9Ojvfm?N!M ztlG1NAFmB^J^g4Q7;+5;#4?&d)2UD0VXu&1DhWR(iMloBR5%Cs39>SD6Xlv%(TFp1 zsdRfk)a%F;H>|+W0lar=71JfCabn* z^Nnk2VH!C?`?<4bRKGKYH+vu{nR2|V5RO%>S-=KLNxL12F!g)63x^Vs@6_$k9PA3r2^t`AR$=0rXD&Eho?~g+a}p=SpY-Rm zZI*4f5Wt;UnW+d6ao;_~Ln%)$Fs&YcS=Nzwo9znGRikKY@71U}$;Rj4G#M>T;a7*y zxq+-6t?_MGM~fAj*<{Jr#g%a=@)2b#Llk+5t9acIwOb44Hs^=~icAu}hjc&?^ylUf zKq&lmiUQm|+0Xu<)zAJQ@NhHEUGZD~_WJjD>x-j0i`rVOP(GfZSK1am@*#4T;o|No z%ZzrryB+4ePBk|@LJ`*#PNyrAX2hoa;Z+x^;>$!y7~lwtL?$VERH#S+j3nk`_DoEN zhYWjVaNExbDBh86SV&dE_0WUP-U}tjc@KUtzS5&1`6@0@7GosE?#;;3zU70Lye&g` z2)W)*9atf3acRYoNKawJ#Y0wH2l>{{)^lo7iPtK{k`40Z#O{e9=eX1FN@&`mw%F^Q z?3i>hP@^y15H2po-Ijb;rWX)znyZ~aVaffY9{Y+Z_p58@*TB?g(0cbz#sLL?5C_zD z00Ldw4=rt+0S+zjPg_KuUr5^lh$8-Ugb=7`_M-?P@N6&c^ujT72~ocbbN*#0p9P@) zUV!sI;rjYKhJp3-Hy|JUMWXV%03pi{mY6R~&0p~s#LNO>U}0lozn~<4iCg_z`|Zn~ z{~?m~ca0tV9%f>?tOEK2sC0pLF5wUWhJNv08UYm*Kd<-lUn3)c_55?MufGK{0s`1S zcQ+8wS9r-W!90@v$pjygkWFIh9TM*oYa(1f=##VThC$*$eKvYg4WisQDs=HSyBQko z+qyHPlIoJHaD>Y6SYjnvp28Gnr|e~DXd$LqK}cZ*#nMo{#*Hgd3$=^r@W67>5FW8L#C&5u~Hh+5?cxLVbwIYiy*X~2+s_4ug*t`~R> zT@t2o(C(FY`PK=##&wz;Y`k>An;34=VFI2mMXNZ_*a%ho*f!mzD z=r5sz#(L?fP{xPaU@8Vws;GH;?Htivhe)lT_1$9#;m@h|*wi$WO&7CyFYadzN}@$C zxw47xHbtyi4;$aX=Syv=ZL3GP;_r?flRADoR!@6p1LA^klRWKx<=atWA^w4y+6QK| z6Lqu}2p+y8(D>= zi0iisV3$pKnpt@jPJ-U&I>E_E+J!*05@llhe9%Rkmc1t5MxZqgJMBNQZj!L6pYD~K z)1UA3ywe|2FokH+LCLniWr2cT)kS|S*tg~EVa z?1ZbPzYibcwZq_RxHGSWX7#&jL+;rg2i}Uz-sn0xKZU>VS!3Tlriv;5l5K65l$(xt z`E8dhPl{9Ip?lgVmt|19ejsRfHL-YNwS-@f!C(!`HUi>SW5i(mZuI^&~-7sjR*|2k>q}1bkw%Lcr{;2le2r9?&GCp!2j!)m*R$va`wml`FsnG5}-(9(4xZM)B zb^7V{f&1K`XO;$Akby~=EIx!-{(wL*vGqdX_(bT&1Q2azA=x* zRW;Nqcg4XzkTJS(w6kbu{4tt` ziSENfjZ!`3X+wL2e~Vdm~&7{H1bh%P_$%9N5p@W!wWe7B62eMDN>2hYuXH-u%^E8nOy9Ct(0gI$hnsjBrlHp6tQ!$SP@6R12;i7 zsbl5QbL_X!?hnII69#lws>hc?G3H`9nkG^!iE0a8eN10GuNC$~+(=+X7;ZOzCEQVHXR%WVZxjVN}ZPiV#O1tSV2ll-6FPRQE ziOgm+j1Yvjd!s}(!yZ!cXe^J)1&!ccZ;<1AYK$==Ps@(dV^)Hmt_@ms-7a;W8%Oq`$)#rm*2f;PS!Ih|~S$f597!&WmnU_K>))8m9kG%9 zs^Lv1{!)Pq#~wi#IWzUN3HWyw&O(hD6LC+{A(jdg_H?pcqGXsND(?l`(Fd#r)eul` zj;&x5AQzb}x9&7RTswSh>Sh*pp2x9z^F()T&KF2x?pcm*esb?S46l6elTy0-l7IiM zi%h5u4?0}Gb=>$7=4gFH>#{0Qp+r-tI_9T`A-B4 ztwULS*31#9g!=nFWOc-@c`@}ixuj{Fe&N^Wj?4Q(!7RduN8^Rp85oQnnV$1mlgeCg zDk_qYLn51CrfPt^GEYO|UYGV2<3Z(87UFO0HGZFOl--0&>i%#izJ+*o>bQmn%E~=) zSbxKz2*y}WXE$klSkQ3;IVdL5e{2;)pqr&OYa`q?$#poMDLhtB#69B`XrT*#^YX= zud(8xK2^LmW#rKMY$|H)GTdfAHOi0L{*{aCj~sSjmT!QZW~kH!<<|GmCg>jJW0Dc` zUOFF=VVqYVQ0;84+{3H!R>LYO*;;=*A1Z*2SEsvopXjNQ`2+`kn48Z%2MnvCZWy&i z_4hv9A%pyKsl^}6?E+Q?iU6jmqkG;}iug%88z<4W z6cpP$Ftf0+U(CKPygW=23E>rWWtzh~6`r|WwVz&8q;jEbv;qcdP1he~=hnA)xLTFQxNDG=H+cHQI;!76J z=NgR_>uag2PmAPz3v?0GIeXYh`BER6a5MIY@S=^F2S0G*tDafK4jPy!Rn&JfXuuLD zSH2-jp?GUyTR^8&E;vIhCf%@T)#@nUC2Zneh zQ6pJtA11p(quv<|;3>`Hvz8oI#j(weT>geUDN>OJ zF$$c8_VPN*S}%_mNLGArnciJdHmKU%h-q?LM=6+Vbp?M6&SL&%)KJ{Lck6SB)~(8N z*HBt@Hps5QhG*fzBjgZ0-s{YK;poaU!v#G);cYT^J^NMexa7^u5fEcn-2)x#I@Frz z9{v2T$S0+xxOAtrg?`F}+nPzCydTu&#Hh5nZ=0_zsf}`W zR>6L>mci7%Jf~GTH4ZDLuhEu@Dg%;qs}xif&%V~<&2`;LnfCs3^#aVv4}=`642(B*t#3bd_txHXOpt|jP2!dNz-I(Lb4)v17;woyAAG%vnndei{5?7Z zgT4yG{NbehHqFltn3QV}U{Y%RGAWO5wN2kY@AE7foxldlCwfT*Hq*q7;DkteB|~E= z++@7x$@poegSMws)eB!(s&6K#qa7sXA-68@B-%Tj$|)Jg-VctBHqsQ)cZj0gXN;*V9L}<<`U3!!@OVA!cnu+OIU!t6+z!r;P%cdBaIl$`>0kFwg+wp z{@c2|sMqz)^bm*lLq>3vO?9pAZg#8s3<+}s3wXZ$b7(8*>lnw^r~sZ-rcgQL82ZT5{wZe*T*lG3?zoT^BcHO&LWXg6sL=9nF>E1wF&42 ziUJ6<9;A3P6>mq=Jc0hS?uq}3VTogxy^XYJ)Si-?X_61;M9v9eUPXvjO_XN2{S4%WND*`wJBBLgZMO>6v2^`v$qVk5 z5urg<>e4`sS%fr>W1gw_BsQKcJ6}l2JJOGhaz3#vEqXWSyRp3H`L2)h@5}g#p~pXg zAt>ZB`i7P5L162wWq+lxeMarU zpu7Ms2t$n^-DOZgx7rG^ziPWeaHqJJJ;nx$S>F56MEl7Q3p@K)sR)hxoDgqc=@-DzC8s5uN~;rKQdHc^Ky1jd3hD2>_FOyAJ}6N^72Y)GY0P^?J4jE}vDDxEK(Cx)J1oH3W0 zPqoN5m#-|WeQes!5-%%cn_0n|PmC!7>pp-#GuFuwyn8s)5 z_%_WDyUXE;>_E95H96%?C}jSOwyP)tPbK9UP08DJm7a{q!4@`+7iYKg#e|W!HL%N- zaq|gP`b{1mt=b7;j*?oZ;dyQlZ4kgQ2g zg{HgUT_zZjA|X~(ARS81PuK985xkaq6UiEnp6Q``HRB>H+NW)c} zu*TQri20V7aQz6E_3HdPn69_5-QC6cqkOTUc4}J&Hzw~n5;9=~B^sJ6sP-)DJRgp( ztt)7>db2#&2Iox3@1w*+i4G3nKG()U{P5zT9xMo__%=l zNhj7-VU>Vxi`KkEXFCins7-k04oH?*qp^Dhc;l@eC!-O|+yJ9rouk=@Q=gbr)~>?_ zjQv9oj1?9SB4ftE6;#Rx7#RrTq4GE6b@Uoz`aI(u&ZXrYIqCWiQ#Rfwh^Dub5E>Jp z%P!_tE3M$~NHzt;@Dl}(YF+CgUfsAoEhE#sdbGJ!Qh0QVzCMILc(MzZF#n7~AVjl| zls$y0Z4NUQRDu$T5y^7Dl~vP;H;PcRzlF8Yi5x?^>t6T{j*?f-0#v3LiH)^jm+^|y zcm~`cw59&Lx)Z3W{6kMc8};L?s5fmZyiVz@PuJEtF|NmT@@bOUjMxrxk#k80Q%QK{ zygI%gIk(UY2x~lOHRh_0xv#9w?GRraHZ=2UU_8LLn;BB~B#v{8ONBkWAZX~rfWbU- zhc4C-s&_28mgx{OX%~O&5blGc_d5%AZClT4G)gp@w5?I+!ZufS@7P{H%N?y zn)9Hn9sNN~BQWSEBba~8tv2a9Ac5hhOco^W?}BUV9mVVq4_$b4UZ;vey;syh$H~;m z5RoG{X=p%99TN>c=pGYNh>5thW^75cLZ)W4V@@*>%yBg$$K)AxUzRJerw!otdK7Q1 zX6aColEz(hXh6-*JH0_O#$9CpWZVDl4lXU)Rr>w<`P?TDoyiS^?Pa4~?VZ>)3{P5* z)JSKFJNKhoU?dd!{lX8Rp$cidK3SvlO`eT$n*|lHPH{kan8EDiIOo7_?V2>*hSI1r zJF0dZAI=?f-saATRUl33P!}&_iQKh4*FdsT%HO|kH*MYh{cHAXIP)v31+%Tb{3|Kocu3@lz*C{@}KMl`A=#am|5U&=0o~V>b;+7%YRm?HCXUcME*Oj)8~Yc z3oqNnhycoC0(1Ft3rKbTY~fyR2||FaO9J_~UbdfPVEj$IY(E(qhd{ouGt3nw3II0u z*a?Om)Xmg04jDLptUHHO*OWG#cAY~LrQVi^%B7aPPc@XlG9Q#G)QAjg-p9VjLFRH2H%Q+3-Oprgw(lNE6D5I?S(-<5WL>f~hf5dp%M=hJE$9ydsQ|-A$H}S_?#k z3OwE(*+?AoXGis?As%kik)A>(c?|r6YsBF^G1-0AP29ow>-<^O#O?^`!4C=TNO(4K zTjZET#xac5d2`${527i^hE{3t1s9XU>A42;l0l3-~<^)%F2G2P8%<~46TON1zhsgx$Xh(pRePj_9=mfc+gr_W4VDjkg8sTQC z`bl^&tmEJegF^ymdDOC+Lq%%W0s9P}Gw%d-AUj-ku;V8zNyV1faBlqYr33;2$fH`) z3Jb%!!V$Pnu|x+9_Dmla%M6##q8HAsMhbbKo(%23+dteVzS2j({5{44U&>1VMD{Zq z>o;Lxb7hH=Ikt--{*q4vhWCckb4jWF+5OW>&B*+x5zi9kZXkP;5EQkF-ReTbBx%2{ zR(mA`QT-#Th!VF{u8S_c2daYBQ&U&)8`JE}`FE+J5hwMJ(_W#Xa8FQ6sMJaWA|SUl z{jadgJ;+y^=IObg8FdI%ivpp&6K(%8z!*xwLnKw8CwDgR+QK?qu0;^eQQoXTB_0>tzV+sOlg0BC>nWjlf4=0U(xF%Td|VXcXo@RQFG!9G zP!f5YN2=aqZ@N^ zD}qS;;!D$``<2@nMKQz8a6Tr}@yu;&xvaANlkJLE_)ev=38lrRTHzEG7T_Y&QbH9H zhKZob6U`^|DN{@L)5pirsyUPDtac|fH|L;|KM^!^c#MiO6Q)1&=MU!BjUiMVBdMvl zO7d}%*i%3GFiv;5CZB9j-aNM^rFz!MMI`G%^(|V4WPKg=5}neiHjrCJT{b&zRIwI=C1l!$(GVV*`AK`Fc2QEnouy_2TJaL{rysLWXh zX8-YK!@vy=^#$ixHaz5b`0aeLy#AXZr*hPSD^Q{@??ZPU$2Fvx;estLe@2Yph1v%63bf(yzLFP?KT0@({al z5Gp_?mdogD&{2gU<}zh=oV=kMOUO{O-P`$Gvc#KksrxJ%NhDa*>e$mklLc$*-h{PN zQrPe*tmEyJL@=K)2x8q9_q}3<@7OVK?cW_ZxX$V;scrx_d)AYt7@M@HcpP>|B*Afb4Z%sA41@|uv|NR|e+oo5dK^J5oN>z~0QzPI?c=6R(r6q50%S~S$+x1axLtRxL$79%?v# zWnhLLhRZYy5qsr?Oo_>u*QxjIaP?cp76uFTIN30vuq{vPvLFyg z;u$niW?!1rjK6;_DnoE3{kQn?W3KQNCC~%L^Z}OU(d50Z3-%mNU~xL z%YU}hi|6{mS>1i~+8}xm#zTCnGGR`?G}!cgJWBMSO*IRqm|0Q(6$o@?(=u}WN5)4O zoF#L0-nJ(i{7*iXU8U@Ohr2d1>0n7(c`HE`wYshx!eRHIz(5Q6St3pCM}{rLtkYa_ zd&@8f-0pxA#Zn>s45*a*-KEClI27ms+2A}X@MB9{(8bh zVeiq$L3D$}SS7n0%(mlKT}H4wJ0)GuX18^WDqXjkGVbY-OE1t3a% zC|DPL-))z;@!yxv0fGQ!+b|UUJIwMf1{x@bc2+YRLz{t+T z`af4F`!ja;-{D*q2pa>K9m4jfvR8h_X!}kyx>57J zg+oRR*?TmBrtvXCOK(5ZrWj_yW|5kvD8EjNbu0ehvb5Yv7ewQovXOf6!KGv8Zn67q zc(B3_x3QzzNS7Wv)*f+a>#&JA5akmgF7oS~^^mc}OpkQVjrx#)1Di7{1PE^k#0bjT zc?)Et0v2nQtWsRtQYvph$6Jn9NV&;RCDIgF9eB2GNfzL-(V()%1qTqj;XFDH&K4Ph zMBdjypF-+-If=S14hH-KQjmKwiaGX3;9K%7apQi~GoW`apEK053;&WP>)Z zQtGkLK(FvS^K;Tutw`->D^{oZV_5Hp66)@hJ7SM)eYiWDCnlJ1H#ploKz1)-m@uUu zyQ`I@SEEGn1M{Ge|LWlCgdo&YZuae3N=$z*A)}Lo^1Ex^ie{Ct_OdXoD-UcuNwOZp zsHI$&`$Vh8PyB57Q(j|>@K&5zKAomm=XNQoy$9|~`z}ganADH`ZweR1RFH>rlj>5{1I<>VNVy^(|c8^yTUR zqn+x@8&GCDzquRsLa%_}HfmoOx_M&8SdslM`OMHUiOqH_q|#2_5DpJ4;3VBOzWlPc zOhWK(L0TajIF$FqO`|QqeX+fZI^Ycsa_mycMs<8sTZRll)^M`SZ8(cNpH}Oc81(^( zr`sruv0WG$%xuZ%&y6y+$kVzUk{PE z-7s9;00ldYwd!^_EF#xIGDIVz7L~STI3y85!<@5Dv$Wom`hMm^{*wKTS|U}gv&TGT7m`kmPgJ@A>I9ykN=tq zb4xWG@fqPrk!jv_Ci*fNd^9~&P8WRr@SWAnY}sNSV?=iXvq@HaI4FV&J(X%AuuyfFk(VRfkxp$LzYO?mjD z2cINseXf?I7y(pEVyt0W>$Fb46DI(57M8}Os)IDo#9-BhqFYam#_2Hqh?diIq6-2l z*lRYEXt>vh6B~Ku)6LAH$X5+B&8<*RgI^mxWq%Lj9}gC3>5A)R?G}ZFS#{ZB0~ctS zJC`zDeOMB4AW9LrZmY2Pbi16wr(kBc5FeYH;VnmJG^K%j0MY#ZC=>bl!%AAeo(c2& zJJn#{56|%&l9ZLC4vOXm6T-wFPtok0hG)J`aj7k|5pR||6cEV7X0t^351RR$Kdr6e_jAo z;0Qqb>oT_VP5cNzvHvdt)SslDFtdNNP$?-&gin0d^QmVz3)pp}iE5rd8^aKFp4)Em zgkhE%d$HlkM_?J&0&_zO?a>{)nQN(A4*}g{Qh^1$KC5H;=;Sra5g(&~>Gl13;mB2Q zX!Y^3)Zn_*dgIClipVV_aCK(DmXCz*%ez;j9$3`q)-4oui1`;TiqEhh$<7U2$qUNpB)*22Qu zVZY#TzJ}hhf(;}MqEWDt^FR&WHGd@!Q`{2g8WeH3c zk{6#u&9 z`AoxD#eC8@u1-i6MCDQT$4pKNuhcWqP}n!|FvZbJy^k8B@JPrlr4~X`CTWRACKR|<||=fyXMYM{CkH@h-tS z2;iglwJ6{{bBn~dnG3)%bI4$XZS!rizK3@Z~nXQBD zBNBVWzLcs(6r&FU$frr+LfF@}s|^!FM%(39;$5=@mr64Utf9@A2y%YZvY(8If|17=_1n#}(j?Sq$cUWqCX33oUWE;DS zLzs`L@c`Y9)}lK-91+i{9GE^_0gmY6qQo=Z;1Ug_;>mW<4`QSX*7qdnM(L1xu1XTbRw zy>(BV_NXW;`WQAv$Wro0UG`N5@2?>2UtOF>=m*7le!2wDPl$AYz8aFh-o;-=1_Kl` z{{>L;7w5=tp(Oa?i2$q6cSU&q4A}Z-&IJT7E}Hh&d;ozA@P7$Yzk(H@OwX?yzlT`< z)AmDt$NP7Qk1hbzMe!l8*<2T;Ep9~fLO}u?S8Ea#K079|9O1?@diiHCL znm}nqS3bhE4wv?st(4RATxj|QcDvLYp$4gxH(-1aV|=1yb?f0@8)s3-HcZ{}MfTZ^ zAWfaFPa%Hv7XF=13u<*ulOkM@s$9J!l>Dj-Im|nfa3#;1l*0TJl2|84;v1qxo95(O z6K&8O3ep*1LcABF^mF=}T(+2qF?WGQg>j($W=sYw0YYDD;p3xaPC^8XIpnu0C|+0% zwie>CP<;c_H7O}g4mco5DZfow{usPsc}#M5WA8)Rs^<3;*PcBGWsoK=5==r*`4H;u z?IXw6dz(2@&N<)K4OUX%Gcb9T9+stG8BXMYqxgXv^IAUib6rXiFT3dviAT;$EsV=; z8|LVkgzp6RM0sNu7?E1b=?b=jMYVmiT6>zf&~<}m-pLkM)8T~EyEbvL!=l?=Pv4LB zRjhp5*p$Z*HG8%Ze%me@F=pY~yZ6p;8_)v}>giIRdMPgHSg@>XMs*g@n!Ck$$|lLx z(Dq9fnMCw@w7K!)>g&`$})}NurT%TA1}cx>eL1Gx=cQjKSY* zr}l&OiOi_Dlc!QgaZLOK<(o~TSA|azyLlIx&Vr}ri0=i!R{voAX1aJy|Af!{zrwBm zXN6nAOg|Zk_^%G4X11?^z!&%bFXEBe z3h?m!Mfh7Os4I)m27p|IsaV@igNHVqFNX85q2C1V{bvK_eQGzu++Z>}g4l3!p}Q;) zf{HSGRH>e3g#F8+e=h{lgAz#2fKolBIgL+%zZXuZCIyMBBC@bMtlTblZq%POluk>?7?BX>AH7sd zaIZxq$vyAN$@>7ePY=D7gAS-ARAbb?Gi;H$dbAL^Eq28t8_aY2b&a*nWPyi}vIM+= zzO!6VH7s*9k@jBq!wbm-r3pKd?-#Voknz8dee+wr#s7_F!skc+gP_3w@0Q#@W5R(z zmr&xLIpwc9_ID%~fAn*IvEJg3e)8LW{}o&Ow~%4}oB#7$AHdJcE&le*-`oDr$^iPk zR{mA{e@|)=SRp?9<348`fq!9IUJ5UQFJGA#4v&kz`;4e=YUGQt01~2p1j#gFG+dEox|$-^&6e?UN*00@b2#itayTSqu&!M z$aIpnve z`bOVlDKOxM`#I;pf93Z6u5x=|rk`}9LcXoFC9EWIgO(M3{2g_br^YPmk`+yqug&>7 zEnnP{(sibgy6v?xCequaCd^c^Ec$2cau}8`%-nQ>ejD!8fh(iti5c{ zHP@VD_TI-B>-ldg#X_p>2pB|?z*07!qns<*(>qRg&Yzf4?D}S%Pw>;Nz1A%TkMs~R z6{oK0SuoZN~@6ykl8=6DhW@iWkZi%eC zvV*#0@x|MEfGP$&FWFWx zyQzH|=v2ta>v|G~8QuwE(Od1a=eW$)h1&6MY}(;I=ccqqi9Qi65%>TzaNif{(G-P) z1%>5Joi(Huo9GQI?3JGxxS|Vee4a}mS;Kh|N;M282#wBXZRF|XM)Pvp?-n=@VINvM zeh{N5K?~Ifmv!YRRD|dRYX|3*$?%V5YeSUt54ROeEC6%bA=@fh;wapcdA&nF=Ll{F z`r!b@Ba)pqLHj6$vN+zOQ)_Fi-CUhs-_nA~?c62rT^B$jpi8O=JD` zI5i(+Pl?GqWl|-F))Dt<>6LFriyaZHP(m8k2~8P0-Qjlj26e7CMnhkstRTDnPJ#J+feE{3fB31yuh@$^dJEtTS4MB`hcOO0^`piwCQrs!` z_O4PamqD(tPaeS`MNuqNPW3UaJ)&%V?rR*VIWe*1Fc>32S=`#Xtl?rf)NCt&YBDEW za#iV8?&v#u8zxO|8nJE4uIAb+WI7Da$YI}lw&L6NtFHKK|5gr@ zJ&TdIy}7apv{0-~I70{$Lz)2VHAh}UE*1Q$Hha7dC_Sm2{$5Q>KN>OQ{>jkJ zdcO?$6`0`<;tgP+RXY^xy&bN-g{MTN97^?7$C zijY)*_%vY6yU4=Z7@v+S4Iff$V$O5#aaWZe?|`C~^PSs=13+UJ;fAZ9?$6r$7co>8 zwjX1uV&rVwh<;B{46~hWiwToQQn@1LtI7f0%=9eQGKxv-{PdMWytJNQdF953?L zX512EyxY4g;!9lT#FO4zu?FEI_KPTGx=_sKdnGGD8|HIWe@-#C_7d<%3EPf?;&@-P zusbP_zvJH^Av1IV>WVqG>t8vJ;$u#h9upXEo(G+y@8UK>dY_=!xSKLDp-rsPSD-OL zP;>3$#LVmNhj6MJK_bpXsx56W_p804DKtI1Mi+<{+VFrQX(^Odi)BpMB~5Ex85FhD zivubl-h<}~v<1%z4^woyT$Yl0ywRPW$9nY)J-sS$Sl>*uechU`J;3N{;=cTsP5FIH z@4tepXZ?YzXXE;N61T8EXuZ%faI@9tCmKCGl3EZ}eW=5s$-_sM-9 zoR$X*SUR5NVPgJq+0Xim90@bW4|9iHj7+g8F^uSXaVEPU7&*!A`szFAxf=zZoC<%ES)woL)!_-{U3@Nd|@ppb=dsFa8476zP{ zSoWP^(oy0KzhANx4{guQvX)D;_9DFsk*Q!N%5%Y|C(6N|c&;P4|e^YsITBs=FpW&>C)O`oA3OSy+Ej zG0Xl3dPtR{SVst9`wXqV8LoGcmjway^2`p=)~#&JJdC5aoa_lSga}X-A@~UQ896PDeHozL70Oo3v79Ch^1dxQ4Bg;d{7rTh%>qRD^ia|QVC?K1Kn9z;Uhqbs6XG+ zuMQQ?(m)5YeCW;Bip+8rhbBFqc|M#;ydjXVi3I~#DUip1*os&-9~&vw$@7b|-Y39- zPJ-xt`PImrN3d&DEHhbQ%m{;p%GF`=NO6TBTxhtMNqI>gFxCEr5Z&$^JF0eif()Zc znXX5LQ6h0QRhWu^m}IIv*IK74(C@G;F?6l&4Z_ zJlaKXOb+m=7d;}#-P3*5;%Kxd%B=-dg;zXz;F1L;8zk%ARO44p!c+P*tbUQHHyWJa9-Ra2Z=Ufe7K;dlM7C9$s25E9T&&F)7yLF_@iHuI zu$1gFbf)1_0Dbtx_&NO|cE@%1S9%0==Z1o7UD2>H=BGgM&Zs6cX!#(2;|y$IqGz*g z+;|cgphsPI>m)4dL#TI=o&k3+%-o~KnMbt1`a4w94VoagwsfV9^}{#0F-q0# zti0s!6gA?pfifER$Tb;0%{}^e2)2za0KAJk)bhJbJDN64e32{XovjL_3Y9q|+9P2k z02>l>w{E-QBK8xHw$=kO^#0(Fa+>3kFeBq$HB}&JIq2zDT-Z4dHW`h0xYC<0)c({< zlvyz?D;;at1*?T_=Mn2q`>8T&I8~ehYDbO~q=Sc_6UbVkINU;1=Gd!Rvh=J!$Ch6q z$Gz0J{nBPKbu*R3k7K4HiS#<4mMpOGU?A6n!~Yd>-wDZ#M3WDRGbaT%7%|`HpNG~r63%QB~5dw zy)HSr`zSa(afL1T{G(7wyRDxhXe0u-WQ_kKpTVqPK}cVMch_!rQ|NKXHfFwAXf-Rw zC87dQ^Pyt=)FfcE_JS>fo9WTibWc*8?p~?l#-cq|AEe0`jZqz%Z z`7XsdIOa!mYlUDl$C~q$`{HfRWaA6Q6_BD&WhjnuV2fzpzZNsETL*hnqg1a$p(u)< z_j0!{zO3h=VJ@1eL7p76b&s<9R0B76C})8!YvbLN zLO<+VFDo|af!MBDwsoEK0If7LU{+(F`So$*smh49^e%}PoHaLJBQYR$LqyN$SQ&9i zg-rCQWCY6)J)gZF-V_doXE_ok=kOO^-fdjd_+6IO0-EV zUaxeNNP=yNc27O$#k63V2zrQ}BDM!}=Q+Rp^voqA?rK ziR7+~TIx<;69m;-^E+pLL~Q#JJhGeuxtmQ{{?YVM6G= zf%6eWoa^$e*R*Cjx^ouNOT|L#D9AT|6bueV+(J|c(W+<|BybGFjgS~LPZ^nTF|yV* z+hABTEFl_16e-}Ga!|U-gk^in?3T{I7KOLVz6Ti+I(N;V)2rzJC}5ppwIVV`k8IYE ztUJG`(O4pBoB8D-YcFe9$}$>8y+Urfkqks;X(CQdC(B${Bhj=G<^~m)WMw@qgP$cQ zYW>xsZIS4RGFBec<1rD@6O>Hmubfd#pho-``jyFgpmXc<#u0*$O)oB4$-FTQvOMAg zn4ZB~kW3ys@4qH)X_g$pW(sp8r-@N{uf$!Ce2|oc3YFZeg$7gmb&9}-K&@tZnw1OT z(IhpGS0V|KjhX|sc-Ur{ZkP5xz0KsCvddpl7!r>=~MaM5JTV6;zA zEfKtCF+K9eNZA~vx+x^tR8$v!dZQ&nc%&H{ce1X7Mq$1GBV~!`LR}^YS|TQ8bx~H+ zkMq?GlhhsISmiojQQ zyN|1vV+O9fn(w!FBrAr#Mdjr9@KI@#e+wy?Sg84(6LTId?10C1q~=gc*XFBw0kBmP zO+hWA7)I@}onF}_t7L41lJo_-y6ct#0 zs#7u_;zM!Ee+TMQhY$I)p81RP0XyIinpPRd)o%epf*;xm`Wv*V=w|UnhEhpKm!ow1LgSDeeqRD>^mu6Yx#Zh_x46h^Y3gHCfv4r z#Ni00pV+*bC5W?+P?ci{CVY+dL~wSVE2Ahx-Vdgx@LUDQ8&P`?Hv9@-X=b$49nYLn z^g~dE?aB( zB?2XDu#d3BiPX2nMB#%*Vfl4?UMgsM)kl7cPqV|s4at>CdDb?!)o+-xW+ zbi>*PmVkZE)tHsptio5ug-^VOs6&kLYjHf?_Z|x@&ntE(`TOk|MRKru2WO;HgMC)l zdB@kbY6BIUQhDem5jRSlE0{2NZUF%=41tbLNuc6XIX{f(Ev~%z`r|cLa=l^x2=V4% zwtCsy^0_sJVC;1~Ve{ZB30CzNQ3MwKx1Upn>stVu1|s=kr<3PiGOZ0zT&bs z9oMj1wUlt;Xx!6iDbzdvywuN?#FF|GfJ$rX(J7+NVn z9U5mA4b4cVp;XaY2^W1&FW=Ifx1{Xj=nfK=GCWziK}Iwob&Pq;=F;3V-r2+kPApR<_pVzUb-k~s@Xp7pFU>yrlB7;aeq;kz z>}@HZ|AKC2jXrtI*qv!;p*hdVECk9`s%XoF3b7C`Az+Uz40WL1;5`0;BR4L1I6N50Y{= zvbHe(F-nM@nFW}1#K>OqsRgizHxV$T8vqRQaeiu}4n+0-N~vxRVD#es54#7;A1LX6 zow|&fll}WRA>iFJKcJ7m*a$8l1tTOLP}K5$exH%%H*l7vxT!e9HXk8 znyrPgoyk)mr0|;p;g69*z?1y%Mhg8U%SULVtz~&!;um2Zp79i68w?nG`$t}ae`LhadfBeNPoMOMwZY*5?4$)>T z!kj;kzkk3UAlRw1m zv)#Y`zd)A$2LiBczsOqxV?Mvfx5QMsV<(spuIk`eiID9gPB`Pb&93fDsk-L~?SzTi zTfv0Up;Y9U$^~J3&kq$5zBCV@OIPR9>GGwd-Q_y^6;I zP=@3z)kbVahfyH_B&43yOoY>OXnri|TVWK5h&_o;-NhQQp_h+(!WC>WAHX8yX1!eN z)x(}zCvx6fW*Ef>L9kwq1jl=?tdxsHNK7@Y;Zjb47(+|y;4))# zw8e7R<-C?eenyd|r`m7O-azVfn)*gMq3g)n#I#e=vuL0HxN3H}C^G_*nwjpgZ0YI7 z8_SAjR-J4^?J}Iq`Xq#>l_ivRwPRbRYhxH8{L}986WaOyyfT*!N=No2JUhWCkeKx? z8b^DlOZ4VzT8*wIn?Z+5icT#kN2zU}Y~K0FG?7Y=J4D8OR);@|^)r$@W};|SEV6mM zLK1Xo%=x;gDF}bVI^Yqyr)m|^k$3fArn$DzlOc`K7u+!g=&9EQ@IJnAlLe6pg@p2n z3~RS?aOp?pUo~8dTARjwFXo1ze&X4&{UR&D#`Hs=f|!cb%N3@Fh(!?St3v`;+2gmD zcjK`1&r(x_Ii-j?mY^W0AU};l_ReLr?6C*4F~@JkQ6<6CsE!tz+rP-+(0he}V7|$r>BCjQmZ7CrF5E@i@n+oyBLmY0rO}O2 z_9$+07t^kDiL)e+5xOv}L+7oA&Dv{KAU*F;{ATCCNxqH(%=pGnC3s3l-VL*?|0~iojhZjCld>w-;{~<0l47 zd7Dj~Y-C@CqP?N=x7hu_hYSlKH!Naf!3CynLu9%-)*Vdd8BnTl^mdP**98a`_&9Na zJjY;E1I_2{G%nLlLRFmeem4GCU&U32@6?n(8IYSuFtDqVA^KkE3+KpkUTIOR4a(DI zL?LE@Gkb&e&8nR-eFL_Vg%h8u7o3FY(!AJ7Rv)cAKc+DjpLrp#>K?j7y}NOljwORs zc7o?)lUxZ&ANNi_;JJN%r_i|ZGZ^%t2FNcAtU!+J`_Tm${o~mF(1&h7^8~|o_|l|T z7q0J;gsaRR>zP-ngQp<`U~#KJ38O_}ayX#)OjV>FG*2e=D~_W)(%N`~ zX;L_9bds-SV(iaAZGb8kQ#+1P}Z>ofC;wP`P(5By73Boc|k5ad9OjeILL1=~8D%U0JVhVhK zPv5EYt~4lDdh+sTuih_`4gi)PWUX?_QjXtbPTtLWZf$FPanh?y7k6yIZ#{=GgQj0% zJ~G`fbU`Vgd;&qySo21f%qRIH@V$!)lCAB$6r5qy|Ah4fs?32)|M`23ssQC;U30&{ zM2}IzZg0$8+NKOFP6)E3WN;+#@M(d@nQl^y|(IfN|;$_szX;Y5rQIbmmm-$=R8MBs%=+K(Nr;%bhP={5^ylo8x zYN4(?;3-a=bkLpJZ8eBtl=E~7bfxKM1veFYr_dLKadtm@9KQ(W|CrE3EUE<&n9v0L z?oBH^Q3tHWh&RfT(&=5Mx}X8S4rQDw)$5Sw+PI%2QJ{l2on&T~l=OGYkjHzWs;*03 zJ&jSidrY9{d{FY{Yt?7+_q^i1SOY)1vtPu9SvY>68N`%@UP2JV)Llh*8PXAx?5E95 zO|@;`eb6yKvnJg36MU>DiU!W8R&U}a-2Pa0NhS#)An)8}*L#e^)%q2|AcXOvC6xHd zXKL+?E`PT?KYcM+@&jAt=F_UcZO1j5EL_=-LS{u8I+KB9n9lvSpN42h{rVvv?cR-< ztaU?hghmL3E?aWrKL$gbEJ76~u!JNpi3rWF)^<|7k!+0$O`{WXvR2F9xrR7-G{Ch> zQIydxO})%#Od?1MWge{&zrjgK;8s25v5$~99TTvL-1{mW?os5Oqehr@J7{+o<&i-w zAz_9^s_pp!@zL^fXWN(;5^F6NRckbqv5`RrJI!3aS3&7XbI;{4ol16TRRcIN$|NPCX@pTrU->h9 z8~+Aqxt0k~j`6ZdFe}qNUvo0t*uePQJZSaCs@o!bSgnK|%lk;Z?c%3LXUkRxL1M*c z1-PrMa*b+e+B_&Q{p1n(F9p@_Jb8*EiZ$kKKpqrb#^gf0cr58|OGiDy5Drx8KJi5I zjI@O0VecJRozk4XzNW}g-7U!Ff+%B_NZg@Z?i}XR+w)R>cLeW};y(YEZTXOW`d^5u z{HW;qdr=j(hjqeVYP$YrR0W9Y{NJ@uKLQZ{oy80UB!9yzIJoY;_rLA$uZyn!w)6bu z-ps(tU;oX`0Kfj1W_AHE{Ug*we_TlaBWwULDEdbb0{{$U`EkoX;yQmk2Y^-lUvQN_ zUiE)s1AyGj-`6gGRnzsb*1rb>?)wMJ!}9mR0zMO#hb7N93s@lP!FheKfbI6}rF*b| z_rwA$=>D5B>|WEw_5d*a2r2v`yYQa~DSSr>{1*4c`5ghs{!reY9w@Y>X93FU0Kf+V zVCTFK`~rr80oXZ+Y~bkGI3GS)!!ZLt0e52|vW5fPW8&XF{5p2{VE_%is#-9o1VA<1w5G@Klw5J=lM(VnIF1C)MJ)QeWtzO+QhH|I z_0Fz@fP!ntujT-)(iXMSXsOgC8j`B)*9|vSVz53bm7eS`__QyebV#&RZlfnoeOwvl zPr~@lukyn?AbTt>sm>0;j@6`^{&JFKVgE%WhlTS8Bu7n&=Vb>I%vWzXh8P5}sO6)T zzJB(-+Z`mbTkE7xSg^!A2JH~++(ezK=*}>>-io4D3)1rea|$o^sGF}~UG1D1%!HlLruJZFAnu1`G+T@%U5 ztN4DVQ^i6=!^|PM@D|5YFiEcF%Y>WN*eJe*b)3eNP1?g0srl7vEC7Ck%O!>jZXs3f zRDt(#G#V(i!6O7LddhBccT~on9H}rRy!D(sj{b$T1F|Y<9?YV~2IByxCvi`~NYXqx zrc#6}R2X767;?(D8b4Buf0R9mNKm_WQgq?;Qo8inpR!ml?jt;j?O!t#dksapfbCu1 zrf>mHf0kJFvsV5^RD_x7hwO%Y{me)r%rM}CsVe7Sv3@9RO$ur*8D|Csx9pQ?K~IfG z;Ng~ojgnAJEwFUmUaufT<+kcz`3q%|_uOf3HaSJUv;F83Co?3xy4c~_JfvI@9al;E zEYVtFxAjQuvrO6{=wv$y^UrSg7xk4u#Ps_G_>b8px^of(P{^dg_>YBVz5M8l@P+8V zC7WJ}0VbR7-C#?-XqXz#dPQ#8nkN1=BY#LUl|ZfAV+)LFEM?k7 zo|VmZp9q5FDs!lxy10f1XMTiWLV^{o2-m??WrsksE@)o_wKfPZTT}#`>EuiBnJtM) z@H2CST9Xlvn!HoHWlzK)m%M_$=cgfSgBB5~xUdlGk2_9i{8KJCJSVYkGWPT!lp3Vb zQpTkNa-(q@O}waIJHcl1+uW!Oc`}tdHr`rjF*3iDSrzLrWjDv?Yr^vSREXE44d+7p zlg9gQ6!|Y|^PiS9@Sdu?XYjt&dHH+2R`&Y`4xFa`DO}+F(EV-rzHgfU`t+A>A2WdE z-?F#~8!)N(eesDuawcrRHOk-aXt1&Tl`53LS?im7aDP2u$j|?=fK0{1o`_bh`aX2tL-Y?E&KR{^z3F7bv685)g{5MB}`8&XijpM$RfByse4?lT@ zA2L<`f+qk>K=|YM*8&uIAT(UjI$I-m*gj(miB;Y=vU)R)Y;R2tpeu7o5xMo5fXCk^ zYKfZ@*$Y3r%%nzJIKxYA0W&5_cL=w71_LhdKT!)#s5`0j)wU}9K;NLZ3N3~0d8`y{ zvw%IEOgAo`zBk_fr*nGGUVjQsUJoaenL=vsrrBaF@w2CZxFs=vv`p0JbqWRf z6rNKKR{fIiI_xmE4g}Ay6(jQUEpI?hYHW6X(oo+y5C4L(?jJMM{YLBk@=yotF#i+o z9q@Bj^5F%2SQr4`--l(v4+{aHL;L^i`}>P)AU3w|mIrPra;h?A6HGAE>u9>o*zH{* zN7*BrYqP%7{u37EFOB)Zf{44@A#_*`X<;(Ow~pZxKM=89*3w<1os10`dP@e($ZyGt zTs-q&fNfG!6EfZehBa4@_*r_MlP#9vfekttomPrgBtD`u--t*pe1V~y1Nk2774n>> zvHJySd1iYOBlH*#_tYm{F_MxtWWRTen0ZpEDpTE>&-y`OHxZ<(R^IIi@0wfdI-6qh z8ZuN2n$yGaZ`6{kR%G6-L{<6XR=^aBH4lzCsGFwRtxEgt^gE!S*s&`y7`J#rCnhBf zgD6Jvf7zJ6p-)epv2HkOORbcTHMu!Nbc(S#xYzJcL@P7*?rhY_C!&6Ve(b8@ZF> z$GmLj*QH;?ed?`Jb(*F?97hF>$~W(|#RR(Lu5>r*F%3{QWlERUI(BMQgnXslA>b)& znie-YRb0L!K_$uzUSpAyr?O)jA)mDue5gdUstem1w=!U~EpYk9hkdoS26V-Q9Cuxk zH%^XR$-N!R!}Tic9FB3Owa}7JY!7HGUT+Kuuepb@^81qw^vRj=Vd)krU$rvarbs_e zJGd)#*3P`~zJWBcys`Po2*&>1vh%-_+_P}9d_UBSy_9*`K?EbVUL1f}kLGK{=RP(T zczpX_FGETk%!5yZsSm_Id_g21ju{oEk(CS<x(99A2Vi)!=+Ur{9Ne90rk#qGk^6k-l)BM250?VgIM#ECPpU;B}J;U z2pXLG2E=7)1@aO?u)RnVZ>YkQ&VBm!@Q6FZo;A|qRvkP(xuX6yog1+0*jRn zIy1|<`?gr!7oAnd5Lmfs0Zx0SA>vs)E{EMbm%7BpUESpedR7_7oiDNnATg$KzpTkG zgu%VvW@Rdz8ld7V?B{XbM)ISQLb-0$05f;HE4fpjeYT2-VGW64lT#tw+`dV@J~IVE zTAl6MT7|P<{ifArtZbE{L8LQpb@Ba|Wu}|~8W*kUwHVUU2FtGFtP;ezx1NK1W~qv% zdD}wsG8IAPLi6x5n5D*8%-)Q8gnOSAF7*?1bu1`f*=o$4p?USYdbUgDpGZmQi3Z^h z1f^o23c0eRN#)79_LS*PQIX5!It%n-cO(vx`1uFRx%X+#y^hDW@!(R*bU+u0Xwmm< zaVbduOobPz<||HrR9GjukAr9i*A)?$=sq6f*WG5|gDu-w&kbkxmeKBMAx|SQA8$FL zT2}SP*G_w8`UQh$*&<5_#&jVqGCZkP?@U3SacgwX?~_*PsJRIsr^~qOZjd~ zyUYb+WV~@P6Tc=%y!9na8#uW;nLk0+V_B;C$;${tXnv`yaQx_Zsi{f5B;$gq@1i~T zYi&o`>n<(j8oj=og3>O#d>M{H1YJuTBWwsJAL_pZDrwRTceg;g$kdB=>x+geZrD1o zj5dy-V`^XD+Y3XAWdJA-f(d@KweNn&EdjAJSm9<&PCiu-qt!&pW)M6O7`Gw@FvjAf zY=GnBvV2?q`M_ZzUS1Qvv`(fAFU%o-F$D}f5BY`{+pU?jyLBbzB{cp^_!T-;aB5h7 z1 z01)|+$6i(59PO_Z8=>!1K(`cDLphwZ3q3bUr9U+^_|FM-R;yKn0k@}0s*Qg7SAjP9Bayy|R=UoHqK>ZH+R=Ar|S9=8rhKb(_tlEBPAMikD)r)KPS9x{Z2DIWldce`P z>U@6aTO%Y9r#u1EQf;K=)KxrvLU~mE&h;zi8~0n!Tkl&CSVLQkpS>Kvh#|3Y{GdFS zQm}j9!FMAAjHpiJL1J4zZ7YI^7-mq+V8XQ!MIi&6QiGYOvftpBsdt8i zFdhV^+LU-72x!CW9E3l?ML5-v{4i)hO#ikzM&GDjxOg8F>Z}75_m;rz@otQOhavtx z)xKUjk8fxia`f*LSMt(+^C`%d3~bz<6p668NTf0}@XFwq&Ox72Q@~U| z1_k+(8LHsSB-R!eJYnR#5{YLB0OPfq#@?kBMM}?MC>9AKK;N7(B~LgjuOHA*4X$L% zgB8KT-6)*qsA!WfRg-OH8bypVMYrB6Sol=@*hq6N#OMen)xr#3SH3o(H#NHVW^}uK zJ&gc%Yz2NMG1hm_Ty<@sNM%)8<(7&Yq1q`YC}rI~4?eQzBZQa$W-1gGe*rkB@f8Q1 z^}5-IK~uJniE=wstece&F|COlkvuU_@8m2x}{AmylGRJfdj)j1_k z9m_tM7j>&tD4tcE>0I1yBBcQDAAH(i_#8aDqX;&XYITU$X0Y@nqrOp#_H0(ySB@N@ z2F@S>^(=77L|^Qc_tc9IP@4)O;)Kf(k4o26*feFQ`Bwq%_-1{}eCc~%_fFO?kwtfK zu7B1Ge-Rqw0Q}GkfkSjLFhp_o3fK$j0d4Ly5oPDKckE!(V?FuI9s7RJ&+E}JGEijE zkOkpD)z5>$nNf1e+U7|kr$XOggAQ#Qn|3mB?PvLY0*#C1hZ_*ooyAp*At}06bO&LkAVd6#PfhAm}67&z+;)-@QQ>tYA@Q5402B3QG7rW$wQnl z^jIX;!VRc^h8)c2rXbb;6~B?R{s0lrpk@ocMXhzNqdIPt>qaUMXw-&(T|Ao{qt4wM zGp*Pf5=WOl0XNiHy|M7(IcB1F3GTq?-ol9aX;64J!~n`#{_`)`FSDx?Uwt`o%XRIb zGT%o)<*TLql3o2CKoBN|5}Nx_+e4fr^{|S9w9!t-Plonw3>*0dN$MvlzYQPhJZ35) zBLFD%M}_P;zaIbGMo;}=Vgd#ar7E<~tj*}OUd}@ciLXh)bEX}j_wC#NQ z7&`3Leu)aLCzbF4Fo0#Gs9D3#O)apmG;r#PHRFQ#J|Sq0&2`#OG?I*hCAEyi#oJ0< z#*HX2m7N;bs6q9qrQO6!teG{eO)-7TUG2m%b!K;M(v1ofMC&C;W8@dZMh(Zg=)@Dj zF&w6<2jbq&+juIB18xxv^w-4}_Lv$eiWHl!cyD5ug-Uy`%=tuE=gUhEvr*&gfR%Gx&ZfqQCsS`{w*G~3uG~=$hWnOn9FOj z9}QlXYhb?tQ(1ZZK79()JksYvN0vV=r1~sx77j2obkVo_H6r##W7$gw-?GU3uxn2J z#Z}kh-YZ+>dS~k0Yl1tF&>Y>fpS>l&2)}XuAcB;O`o5SEMWx&==@Rkn9ZeC@+%rS7 zPy88@PmHY)Srt&A$q^%Ta#^h_=9ExRVU4ItAI(3zggfVb(}nE3X}pC2E7q|2Qbyh# z1knjg`e(QIi_#>H9}^%x1-``O)Ce={)Lx)zyvXbBMe2yXK}6&s*r{*32P-J`2_L zxnaFb6O6MDI z*1;+v&I#tJs3c7h_(mkxG{*2fuqg7>h=;s?b_3cOaLsXgp z*W+Pj=bNf(jVI4Prw(sZ^f8USFpVrmw&B7k+!Z!Ybx}@dFAwRB;zTv?e>Ch>$gIPm) z-1D!CnO9KjxVXz!XxtsK6J@XB3J(#zRZ8Xo(B6F3eIW37``)@PhJz(lR@Fv}s-6Z@ zcr2gd3l?;JI+8q<$?{i|c6|j?eO4~f9h}_XY1FJYybvy@ffsHQ4BB zd88%7kE6rE4dAo?I_#}o<1`)fO^6`ke9Ll1=7$EaI}d%>-1q$0iU#HkPYHsM!i7lhp5j*ou!%6zAp`<xFVS&G zJNZ_2WLRf~k$X6}n;aTr^F9`)KL5nunvEMVp<@QtH$ra?6qtQo(99_1wpE%sneZ^o zXGne;&HAM{{UQD^Fx6Po-j!WN!qafCMX|)Tc~*?g)3C4a$_}SnY=wv%XUjit{7X|M zDY4ANTlSUA=bsldlbWJFbf98T^RL++o0y*#2&Gq2m{0SoV>|3pccfersN#D@l>!uBi7Fj>?bp2Ja^JB` zotZ6e3>IX_IiQFv;QG383+{7BTUku_qBl6rmXuIDj zl0X0dXS4t_3)lT=xqy-&=KDNQ%q*PW^m)K2LZAg;x}Tz%nICunpmjg`{A2%sBi8?f z*7%?3v;I8xZzqlaY_os=He(gJmkHcIDOQntWhSf0ePAT321 z)KYT%BB{mogW62&`G19;s78!r_X)xrz+Cw%2{rFor<*v^pc!Wl%?iOomnzY5qrHy` z%FG_9c@_P*cn4XQRr@iy(Lw14A5%IBQXlqAM4g!t1Fv0aq{&q{GrOo};dFZPeDh z#pMsUn0)=++`S3nCdx37htE_Hy6>iKB7E$Tli%t%)t{ zPkhtwR_p%)-;|l@ACg|;;rRmJm5AwYqL_NUO|1S-B|A8|S=XdMt|4wG{XU5h)Gq(P(WNhX9MPBRAjIDoW zY&CiilHL2R-$0vR@M8bW*!pM2*8fY!R$xA&U-AzA%-H&8#@2sr##YYnxUc`#dHXYC z>z^50|Lroia{ek~%Jf4#!9y)^CKzD#FMh=rrJ74;z<2`Uo4d-uRQ7&EIHikX?88_bv(+(S6;-apL7x5Y5JR_C{p*cxU3?v< zv~iQlxR9CBxzIzs7MxoiS?~IuzR=0poyiw6rrvtBG`d>7_)Ycdgc|t;)4jKsiK%nP znT#Nt`d2?elQ_SNulSA0{$4T2_E0Mum@ML3eN8rCbo)bn&4<`^8#n+EcfJ3H9mrv` z0ps9*|NN~?>HRj~EcRE~Yhc*>ug!7am;7`~(F4YI%yPq|c%oZ3Gu)=1q>L7D)J)#7 zLY8gEMa{hQ%bAu$>-NilqckFq2?c3kvj#*ph%JSu@Ax`3n^a;y3UbORS`?HH^`vRW2D>#@=T<_@I`j5J^Jew@;KGUDAnYY$$9de$0w|5mGV>c4%^~U1% zFl*cBY>$_z7-yB(=FQLI0NBb3*Vl>@gm-17#y3q|s**P5SE#ZibeM3&xi{cKZe?BpR;^wU!+8l<&fQIR+9{GP|wd0)YG@vr~|)--jd8# zVx`%-sYDutwgw$O3Wfvv-U?AZpd8lrS>L*Z+vS(s%@NSzNzy(q50g2XN|gQ>K8v#{ zXBHgFsW#NI23ecWQkA43xywU@gzMumGt0BPwBQb_!h9H}zUi_2R&V>HhT>$-2Ov!O z@lln(%6=|_4Ky=@IsmBf%Zu9D#Y~?hLgwKkh7QCMEZ1NTa6nccOrG7G@R8egGES>( zO`nXecQ)m`@2Ot5;z~gF!dE!G;ihZLS~=kSAZC` z{+6aSukeh1jKWI4@+AL!21e1=vzAuo!UvWVoy-e5WP4r0WAn{E*J}seRE@Ls^SkrC zb8rgI$N4|$=nn+zFZkv_LgM?-jz6So?$43~6ON&QbsK_qIRcHo&&5Lr%*E5h_)->5 zPcj92lf{WKZnd_8g6L|$A)m_7xbT$qI7=hQ)$)1p2~?$$QSorm$0<V0_=}3975lLI}D4c_tBTX`y|c)i(`|Biw?IE`P|gj94tm zT1=#KnABywE;nKw6Wh<{Cw0~yQtVO`_x?RL%l}bG{5?ni zJ;$(!eXrB_d(QB)V_3vRe@+%XkU{rk(L-A52Y%$ix=%~}07ieafVzhVVc3IppO*Ro zCVH^$(^5Yy%^xgad$Bw$bsj9>Z((_G^dBs7U_HSH*ZW6>#6upq-{$gfD*qPaTOE#jTB;pNc-cFBkyF_}gLuz{K){YP}=D+a7g2wX3PgJJ#g0-?ktMmb->l zkU>R+KSYm?;KWPj3BOW*=^)H*V8N)R1=48bVgI8QVO$eoDXtm_7O5I5U|o_MBG2Kj z9F$P0oWA2>(j8V;8^HL=a0Lg4(Qq9t$I81oV~uDl0K>At>zVSb^|RCMy|d{7{yJI| zzr2m0u!+u(!@-onFU~-Yp+QPRzPRD0On?n4fp~~W)Lm|S7x*HE5exE8jaJoFo}R!5 z`vG7$U+m2}Wl(!L=#UeQf|yIOSM9obwa)nMi-0JQqaJjYTW$M7gn?_O$Wkm#o=vWU z#6vJ~Oine<>j$%daDdjFZrg-qLDGZpL&VJD%+Ie)q&orQ3_(s}-K+vES6Btba%QW} zhMtjzLkPY~XkZ*V)t)nW2Qtkj=mF8384K>1rq+eistiH_4eJ>j{Gk~Ml%b{sx8yGL zh?9&~`cojx%QB)F5~xuU|5-N#Pn0hHus6Emt%U+DM9u2Fx(F+SeeGuBsRNo^T}T$$ z@BkGgvfKnl6&<#yUh8@R$GK0F&+Se$c9W`>pd9fN8mw+O=q~K`=I%~`hXwbW;Sqv= z!YQJNP#ALffSS7IRcHjVJ3+;4i1&)OlURIWiR8RSa16xL6r*m2E$Z)IJS!=Eh6t#g0`e zE2I0UBC%4jZ7uUr+{9KMNtVQ&^e~NDg^p`Bp53r>G%umvRkS~az3-*1$`q(O48sLW z#EN`xg7jOEPDapWjU2qWC)e_~k96CLI(@@GgCe{ZFmfA%Ls+y(5n{AHX9!UYN_E4q zQ-p^y=eay!M_=%976y}GyA4NJre|H$*%0F?ULs>4ffh6GKu}%Ax`^tE4J67}dO`Wz zw^^62W!xTHrWCcyewNejm^e(^T8P8L9$kP~u7+yX*lYfr9&aM(8E?34{Zm!khEIXf zETe{~Y3=BT;Y}nvMuw$*c&5lDTW4)D(rG=s@Icxn?O6)m6@Rk+DnGmYz-azZhRO*2q>yF+E8 z3q-%ociH$-(ms-*RL^Tx)8raCC0Dr8g&fv71Kgl%+yQ~FMwC5CVO3QGdUJ1s>_(UB zQ5DRi#Sg(Zt$Xc=OV1Ac&Yd=usObq`rB`x=+F>O|5n?wr%ew6|oi3uJb*bsL5gx#X zn`CjVWUZ=-^H@;23}YMl^$+_giikMNZRE@kUL8O3ruifs%_Oo9ztal)R-%UHTGbju zAz~oB>5-iz?NcFsT3^GXNnbu)0WXvD_nnT*e9IJ~oC_Vw@kZd!h@%_K+XByV@!BAD z1sNHZ+3KS?3YWc;0>9RTzkrRGD7PRkdVf;k&#sKhHUiHo8R*=xwdxBAgHjfxYm~zz zk&C(&to~NzJa~|LEs}hR+aY;^_B28OV;(~QUEr0;CV@prg}8QPmU4l!HaC50TqEtf zcfJXUJ+!Nchw8N|{3L|vxGU8w)i$BlUDg)U5>)~dk=tXZ4X0TfUAS1S1up9%=lNOZ|ciBz?n6=imX^mjGosXYUnla~gHKAS#wkNaBD>LtpDRbnc+ zll3z(hhTym5efOCrO}2q8<+T`tzFntC2&(EC{vqGa#+nWk2V8>d(ej$<6z+WMEpe= zX`2jC6!|rqA*E?G;A=%KR>!~?6z!8(R@{Z$JIZxxmnMsjO@wDVW_Z`@&0aWW`i*Q> z9Lgb6O4AOQv>OvJ41SijI-q{%;E(=+zau!UqHMIy!fG&&PJc-a!`-JK9>WnDGF7@+ zr6``xP36tk(u6$76t5QDr_t*{WxXmzXl|{+pLrKsWk%)96ot)(8(n&cQkfa6?Q9NS zs-!edX=qh6cWoXlEcIlnbi4{~T(a!Y&{fjZ)YYmv={lv{L7vu_#+S~bX0(3Xa7@$jEZn064({Zb%Nps;$k|8%+U8@uk`zpzg&4d5@aWAM zx9a(8Kl%01kv$eRc|OKzy1vd$VS`Q=;#|ob3N6q?!+znl&$KZj&D=~LNz?Y{bJ1$M zYVNd7iRwYO!)Ul1S9gc@aiOXC`H>~I3i0%;=xwO@h;xhWz2?5XduNnA*SGmo;NJK) z^m2+recWHwPM*jlV=KPlWK^GzVSUQmGF2fOR%uRr@ZTOaW?%B>nT6a!v5PsZ zc9`z}jX{4c(q3~3N&ebHV6*P5jmV*qSC|`JG+RO6I_k#SzL|n!i^K;75h)W93AcW+ zW_jkW_O2N~>3d3d*6V2|+eFDY&PLw#CUv!B+C&Ns#zV6pEYDg$O6sVhr^nC2%HdUC z5y)a2EU8?%%jgZ&p7kG?|k!q-{>FQeeSvE-o5rZXYc)6YyEx{mmP;0%`n;V=q>z?$<@ShN)dimn081}`?H`xPls-ix;qw(pEqSTP2!ciBh zwx##4I4aFZutFn6IdOtHg)+bl1ZQi2ZP{rWC7fMUn2WF*_->)>ZMLnYs!XG5x_cO` zFY_kZ@+RO}ajXquhhu9{=wreXix3=Rj1qM1yZZe`uN7EPo-y3FiBEMUqm`p6QZ1k- z#d%VUP-wE5366jKiRQRO9&H+3_j$GlCW7d3^HbJ=ATtsRs`&k9Vi5TE#kf^~na9$@ z_Z=gl$iX6E0FSpwih-F>xrNF-V@(!R34L-Y!|FY20W$>cC@{eZ0w;l-j+5%yvV&>X z%x7lvCN1n{08ja{qAL$^Te{c4rEYyVZ;5qv3zVmJNwAF15ta<&NSZwKI%pjtKT<3O zw{UdO_M$v>H124x2vFO`7Yw(V)*{j5!|BMDKtYm|t`}N|O$&JMVH-UBN*rUjsMAxS*Q0Co|V7*-d z0i)=lc19JWff`y_Eh< zUW#w{*iEpnZ;dlh#A@nV$h4(d1`X>Ua5Dzr%ii6l{~#wKN268otV|Juc+~z!Ndeg(gT5O%nYm?ARbvzhUQ&g>BAOkxG=eH^%06RMa2k@@X>m%@%*0@YBYd`H3Q=i82wY;{Kfl-Aa~vK1;0yJg z5{UZlnT8WA>5%VK4T$=VGjDQE4{fEnCB>7z-XxVI4%Nqd5q~n)nS=L=V>#upZig8r zb;)6WFvYg&<;k=AieT;W;8AERH{mj6PJ)YwjV4jbLeq?A^VigTX8|KM7nj>TqEY6R zNL4R!QqYB9q3p1O1ewV`?|aFwthQKKZBarghRCvfswmUE+1Kr}v;s z@pV)VR!o>tIf~fX$B$mITSf8dv<^Nwi#BApu5WT8I$CjBeUv!a%iC<~W_@vwXpQms zCwArhF5Td_044M9znGbc=?>1l<8|f$c{C>|KnW5(ykml91-$_}#tN#m1<^x;Sf4?G zNRS%hw^x68_isigLGa2iI{$Z-zo6)({P(nvraJ8UQ>gHK#RSKfV38#+f<)OO?cXdQ zyJ!0okhzSxZ}1+upJ7y8I*7s`$CNCjUlc%gW?e@cG|DHfm$OeEa{95P zWY+VEGWqm)q?VFUAFEf5e58BFdaz!IsLB=$?3UHfIBr3e&401f@4o;0Bk|i~RoBwg z0`$asWNN2tY-(jqq@-(Q4|+)5d9{**ouPxi2@#{LwVkD|#n*#sUj;Z>n7%#Fzs@J( z-{zBVSGl_gy&7od_`?M7yMQM<8)$m?s^7^83LmL|)AeL!xr-%zn~J`>Z+_aBzf0JA z=Z1Ix?ru7evoSC+{cz-NW-+z1cMvwwwY!_1q;IW3YNiGbCZNa0w>#yJ!H@s6|2J6RZty@(^p_a|v-64tl)lOn*jv=P@$@#C{a4cgfMf3{@Mp(u+vo$UF&+@TjP=K zys%ofsABxb2P)uxG!`9_MABe>+SQ;eu>ECh8dR@D8c$~Eog9-lN4{%GAt4?1{N zIzH3tDvM7e0haKy=Bu450@x27%3geKh-jLf%hw-EAVHN+_hfsGu&08ejXW-zOG)P5 zpHM=k9HiB;LUNK{(>4^p6sMcNSi!pvi}OimoH5uqnILB+vI)T{I{kJD7}j>WEZ%ON zBYt)eu=~UlMo{4Vu`b)ffX}WnVz^G@s>INkedq2PP#CMZir1mC>gWO5&71ouPK%Ah z>u)|RK^)I{WV}MzQ4X4T=w)o@+#~14ENlW{cn|_J+n+K|x$Ot#o#DI9)HA3zTx67=!p;J< z3mDF9(lH0DBFC9EgkmiJa*yynAkiLL?kf=Ib0z$+=_(S+04BZ3g&Uo-XH`mWP zhSTA*%|6pQ34Q&GH{~l*A|kpfqqL#{0!-SIaP?22muu*c8*=<+hLEyV(0uZ;?%n6# zxT!yUQMLld6{Fb8_+V*f1$LiOw3eKW83HhbNJcf*V@UAY0VxcUX2VD#UrCz0U2-*2 zvVLh@;u>?J;WR(SmHUx6EV6ovCvakKJrG_{Sc=&<9}%6?66qzhtP-(rpv8e#gt_n_ zu3wt@yWF4;p#f={d7KA(gJln2zE4RYViqx=Y9eHA794*dausmlz+$AFRFOURv>R2` zW)8iu9NZFXG{SX^USVY@gxfc<({2~Jd3}Ut={UfnkhPT*C4sUB&@i3=U@_Y>z;Q)N zlzh%t1)nJLJbI=J(~IbpEVQq56VAp)K{S_Nw6eB9^Wi=lRe;u~q?%N?aB;~NE$rl{ zr3C_Wm-{!5E~C`m$h9L`zsWcact0P3N(TLVmcSnBGqSaz?<-;nsDH!+}-fXs# z=}%_Z!6ROu(R&%eq#n0d`Y!LN6DGB-qrC0+Va`zGC@t#WDH;SEagBYxygYk0h0N6F zZREh~ov|>?f5VRT6VWFi(=VcY|51wlS184P<$C&+)zFW^V={44cDqCfBJ0IMcx|HF z;gc)h(&EY6WW}rmGIOCJOj%%UwySF?{s@1VNOpyGNZqa1I#VmNBl(3# zub{F@6UoJu9UcO3qJ*_jV1&d3U(mr0xdv@5yJB;g!{bppGa8m2;J!PaeI`JthGST} zQHejU>c|OA>!{8Pfx%r!ux!v-SD%)ENKSCtgtnmx+rAp9!qFFky)P`BG4n#+oo(BU zO|{F-58wW9;BXStYlPyx3vq8S^b`vzZ?reX~O>fBr0ynWI+#K=r=6$b>!NPo*ge}~MJ!cZrJX^&Q_$r}0x9TjYhjAc z73}x3Iv_FQr50wc7tSL$C|74Y3w^LM=V?_!)xEF2sF4v=&# zXdUwvs-^4hXK}_o3VVwV@DjD#LC1Z{eci8f@s}1TFZ%2J_XFexWcuzo z_-B&~^B>sj`?>F?MA6atS2_@hK8wg#p*hrVZf9VPp?CI(_jKdoV2k7>@W2YGLfBlC zh(#V?oR@YF=maXS@!eP}JZYHRbII*P-)!NYH+#lkR5to>(hzc{jxy14B=l0gLt>OL zSUk~FM=xgNncLRNK_6R8OBBviJPJ;vG7Gdl{*N%>c@hVI{ZI#f5zhXFr3dSeV)HV} z60smI{-$jV4*`Ome)qnmgY28nuOR3@aysUqMjPZ%ph5<~CkG_R>$btRniP=Bw=WO} zA_g4Ck>o74WfS_pg&o%EL2hX5RE7ytS7?(4Q`~kZgB&J`RROL1LY`1248 z0R(y{pAgg9{4883R@^9cBUF?G3{0C|#uO;o#6EP!R^H&nfG&Z^(4`RfbzIzde(tv3 z!?gKk&k_ZLU|9I%5r4`@CWPJ^y3&J)N7{h}y`!BxD7s-w!}1jkbl9=<9-Ta#P$-V~ zUw%pqRIYp5(OJxpuzb50OX-*hpZpPec*G5658|D98(nskukyN%73;26!aymlrDv*- ze5OJp?Syo>Y229i8&5$z+-AJzzQO8@hio>Jt}4x4=9Yb~pRCu1AxK4dacz{y;+yY* z>Crkp;gqD6)JOqOJ>-hO&?$xC)t{N+n0mj`z1l5D1UL; zs(3+uH*-eq048_Ho}RB%NJnwDkXJqjWaQRu^9dNV00STI(kX(B;|@3oFC&7&x_v5p zq^R^F=jm6dAuMP zt|(I6$j!@>2N!k`6C2C%Wy&g@R6{DQL@3w^l{^TnTT3s-_xh(kq}Gj+ox=Y_=@tOn{ti&whSgd~SN$ zfk9vIl1}gKQbnF#`P z?a%k5%HNs&%tw9^GGyWSL4Z_6Nvd*|33hfHT~k15nU*6;`(7RGVi= zoE@`X@)D%rjCmgur#A>aXOz`q?#W4Lq3TkY907Fr#$}rM0sZx6 zRwIDTB0plft-`IuVC8k}D)@p^UK%m`2~)BH7DVAvBk@+{WdAMlWJ5(pTG}FS(S$E| zT@NIKQxuj=)fBUIc!oi*jAXeHz?a^IP_Mr;7Waihsjl055f3jt*KPG3T<_o#^b`!Q z;1oXGs*XH4$6ffm;MEZ%+iDBPj26kdS$P~G2Ul}I}ddJgZiB56RjgQN|j;RSYpU~T>; zpo)N6li_UReJ=wBE&*euvQTOnYl;TFw){lH$K2CYW!%-1_a<*P8~t+ZGWsP9@^jay z`$Yz`@Wym?Y^YGSBsk(n-9?RGXu4Arw7(zNeAdfqn$5pLC|$EH`ZI_5Rj?EY_A-n{*sM5pKhb3g$1+qeH^});2 z&jVWg30Mf9cKnwvqaDiFYt8~ zW^&7O5&dMNOD>h|nx@?Q<_4|_hxc(|Jf1mlGIi)OyujjmXd*@Ex0FBRz{kX*`#Py; zk<>5^JNm?+1&Z`j zaX*nZ1G>=eKL6cd^5Om#jh}~@?Z1uhCil>>yOJnq7IGQhp3Lfoa&s;+C@INOw zwScx)C@h83S{F+8%!JW(h*e*)aOFzmIMAT64ndJ0nC@PWQ;B~x_e8f$aSjGn_~Z(ZavF46&5-;`DZL?h>zYL) zvv=PWb^p-%nqUE$5DeyLzV(ZECxGS0aAS;=9Rx9g$XR+0BUAjX-|7!_WM&t$Ck6c|DCBPH#TAh=xHmWsbOF zG909z`A{a$DKez3o8kijO)g`9m@eO>1Vb<)LonPK2NLBrQvYLe$l0TjT-P0r>(_X> z0B(0fWyp`5qha`{;`TROD5|MOqEG0@#%OPio^{Q2d}K`O5y4h@c5);UzxGjoT2qC} zV{Il4oX~D#RCA;J<$jB6hlN^BY(AmXTWRcPqU-F8gG%okmw8KUZdQ3`+>XS!sx+^h zugqG-Zp_4fX1crG=r61>+1P$aDg-fhAklKd&Yn@%`)I6zRL4wM!Ut~Z)T}V#gwba#-rEoB2XjYLgK5>v@DQP|c{W>Wh)PRE?*Ws@ zmCd%5=_APaMlwi{hX`H4&08}ZR}G_jj_Et9|njO7#cuBnClyxG)?)j9C4tl7{Ug+w~F zaHM8@pAcjK5Fb-Em>`WTa(K4r7kS^mb7)3ezd6_Zto4DR$4z?R;gDG;Tpg1CBWtL- z+6SAdZ%GViB68XSk0f+5@HAW~ZIvZud8s=Z*2yXmjw1%2T;kUDN)n{vr?tX!4v7cN z-kQZcWD*p=!di7nowF1@T{$%8+MGQlp$N>Tezj;%&0kxDcz7JpQW?0cmg!$B%?L^7 zH0Gt=KQa*%{e160_e^CYzpcg0^aT7^=@81@v^kCIsS9gM z(-BEt(@A|X-P!&pm~DOqp`ZEqcL}F|wkrfMeV2ynlKzDuhzOza3gcD)JE9zMUm|~8 z`0}%PFnOR&`~6tM>`{)&dmbSa#`Tp4QjdyRTWy!+R zb^P^Y`&4jElyYM!9o`qeb=euuiBmkB2UW!G4xH-T+wz8{yFrnHxu$kr^GrY~V|5NP z>`AueuH9B|*)vPK+BTNG97*%?sn*W@nL&OLIR>!(Ao6yX1>VW@An?pS>@h_+5w~M3 zbO2Ee-a!uk#9J^6(;axT$8U~0>KH5Um{UCbPmI=h6O%+utHn<@p&!Tes^Wb#!Ka{v z!`rI%b%>IbYE|v0zxn{)-=C8zF6U|b0Sv^PqCK%W+K9uB#mZ6*b-Dx!F>=k$9-G}S zPA$I4&WPxR3=j~dFTXCS-FK9GgE?KQY|wOiyqBTo&2LpjKFjEcTNmS>GddZoX~_ki zK?Z*DiN+`5^2{kLEH7c91|kCk+%*+h+XU%^tb zZ|SlON@7H^O8TkSPnMbK zO9}X2CCUQtAjof1!SB8J9|MsA0FLiLWDp}2h{%UCO?h&PNC|re+(!@@H6w>k)Z$N?0@7KI|u>1JD(Zw zPY)1?tn9yvdjD6@)Bj&S3t;)bjZ^=-SsK70_KUF+00h+B8tO;bk zLms}o2kIG+`M3DOUC)5be@WsM1%O(AmBb4KRUZ9iQv9>E|od$5pC5j)N* z;;2!}h?l(^rtmDinan~%sEh*f4XDZa|#kE3?2XuMB%V=#%s zX!E|Hjg@4DJr_Ksx_J5w5dXwo#jX!{*icf^|Kz34+G$$TQIi7L66@HuetsH1_9>O* zU}<7w8dsWaG6pw+nlBTVL9Dl zQbnd!{uQgO^@fh4MMZsYqS9!Kk1}3V8Dg~#;pp6LZKWjiHCvjZ4ZIf}9;7{&gPm_9 zCw~~%_`SMiL&!Z$c@8RuK4)9MZg{O;Ql`$=>3*)9aJ%E~Ni#?JyZ8zfy_}r*BC}-l zGa{bP6mP@SdFphjZ3`y?A?s>01;CXAW|O0v9rtYjn8t!!A1|)t}ZjT`RO(<+mVg zW5ch}lX*P<@NsF$N@IS{cIiTpvNlH9TrN0%N=Gtc(5sf<)#veB2$u3m|DTQVuL9eg zKL8?k!H-oUgc*ByZ6EYoy-Z3aCF{|BkPJKCBjZX%*r`}LzZVeDS;P+bOFmSv7O>vs z*(l|R=kyb{(!p~2wV!PfqzX>js7Hhm3>FP91ds`_QXl)2uU#x9blr0#>NlpR zP;Qj(7r9~R%7<>z*|0xTd9BK0b_S`>NPsqg{CXyRn|lvKt&HyzpX(Vy<*VdTIwO=y zoHLu*2fW}0G)d=z$cGaIh z8uMevs#cIkoNwAK7_&GVqd#DU%AM`-X~enG#m^EHKOM71Q?|3x>LVdggo+!(E#nNC z_A7)ApgtSk8D27W=QtRUK17v3!XVPbqt&zD2{44_m&4`X%}-f%c)V066A!hHKOFCP zr~=UoNANtn3@>x!!PeR`%G>A&w%sh{_bDbH1-7`kcOhbu1eKktw^@x{>Y&IuFG|wPEhF#FyD>^y(+?*QEQW@7hx~FlR?fXLYJ$2t!5jU3T93NsUJj;8k zX!6WBwvldq`}xEA)DKV9ar!R%WU(1INFdbkgxocjpx@@Z_hr+1JPcTd1!&5MDK{?J z%(%aTIFZd9vsjZOo888$pOL$=@)p50-Tj&2ei6Q9V`2T?aH1+wsI=^`v%??^Qga!3 z-IgXH(Ejr-tw8F!%6-x-yskwjKg4=O%sqrhN?C}X7jvb3;6C%`AaWdZ4$$djVz*W6 zW_zQzAe(v=dzC}>w);4Fp(o;HDG|RwT!49er2`(q^Bxj2JL5q;0j6s&BEh*k)o~ut zycPn4QhFt3o@TCopz}GO9a@`E#+58l;_eeGgDiZAmZ+c_rO5UI9HL{G^`ev-(V#l( zhYZ50;OU#s9-J%K(A&-QEPOJe*z?XkpW>riOV%uf2zL`U;!&PGgx1ZKrCSs#=g=El z)CkCO*o8Ja!hI|V)CtuqRL&+t@j{-VO}2uWFKdyUFMRL@J&{Ik9d6-%#&a656%)jM zn@n@{6q!7scsOaW{*Jxot$<@b$06o|;5_0^YaLh!Gi1fpU7R%r;V=i?8|yWU@brbp z(=5k*HbYP5*5jR@I7QU?W1k({$Pf9qL}fPtl`-%0kZqN+8QEljeFz#)ZX#ir<(VQD zxqWi>43F8O_({AA>yuEgb0b>aB(JdcFan@4gm+YCBt`MatKzEGo_bQ#O^oJMwwith z&d67mUe6?tE#N%}C7Q<)1t%7AHwrZhB6+xM_Fg%R;v8Anm5EZ6qX$2QkalJ-mWS*C z?}Ffw%JPk2?L?IE4Yd+TdIfI3OSVd zwBpJ;tKFIiPB1Y8`x8wi8{N^)iw)`mPt4}QBxwOQo84v^UesNHXX)@gNl&aH=jE&G zv+JvCumd1#^v|667Xftu;D_M3mV!hiBryVrj@oi_O0&{`6^Lj&rMcwg}>&N-3Wpi{QKVJ9EHahT;noC>2R zE_?3s6j*DD?2ks7@?gq=t`$>Tt1W&1{@$yHAM38;kx|BVxPE4-Uxj5kf3Os&NX!bv zMFE0kFMS|FpWI|nhds;#(HR_dfu%}OiK9z!lJtj4Xqv#UljyR7k0&7n$I@LA7}<&P zYng4mEHZnM6el?<@>I6Ww{4ECnSoM(Av9!X)GeVX=aK4hUVv3>Kqe#FNE#7Rs(MSp zs*;)Q89Vw=&Y66dw?&(8n6PS9i4MzB)R|D@J(%Vo-#RO~;}1AIZ;BEo-sbWxvI-4N zcs|HTt2YVrU5;GiWvQsOsH0GV<{#*G9ws+J3*rFnmiv(B^V0eT? z=DzTXjb}`KJ@jm6EW-K9t(KzrvQ@`zKk_&Ob!_Cs_h3aSOBo^c6{4ZvnrDfrr#=B4 zX9fY3=+wOXK5B2R56`gtV~5W!Wrx6)UcwD$AI+cH`&Ut4)*thQ6%?$xnP9JmsXctv ze2E_njhlWDcmBLUZTdka%nY^MBDW}j2$e8_uD~VOa7hZUvD0p`Zq!voWVOf?yq|}w z0IZ*bYe}bPag~nmZdT2TXUFC1@8-RC&?p@3RpH{R%L^DFS*+83CZV= zwkcg^WL@T#{nm>xdp|zxvl1jCiuul|ntYT7#;E^QtfIyunW6R;O`Rp$^c#0ed!s0s z_YJ7qm5Bz0+z-Pksm5)~9LugO_;(v`z#6BGA%14T?{MBf+YJ7l+~s2vc%cz4<~zpm zqu&_E4euDoh2XVJI65~#jN`Q1`j#>Rr<>yMD^w;ENFxrJD zXY)t_bZ=E_?vj_)k}5B*Y%>USV=f(A#Ga*6yr(%T*@c5#M-^3(05OgaB0aXpNER`88MKBcqX`#3gWx0S*`+(W&K=u4ZUQq_S2ThnM;C2 z9gj0C9>q{-j7C?SJeqsPP_%pnh2ZT~_7kgqx2gIUz|PE^-^eGv@-u))g#HQG8So8W z{ujc|f0{T9%6|SwK-a&2E(q}b{Ur7;TA#nSfBp)TeSEid`t$$)qlwXf{?%XK1tm}a zuV?!Pf^djmLleKp*MNZEl&HTy`tR}@L@$o-4HXO)aM#90tiX@!OeaG@3X-HKb)(yop>f<} zwz;~gBUEelaeFM1o-ZlK3)(hQaah_GVNx8%dcv1_7N?uz0Uq5w@oZQ$PcdkuVgVnG zw|qEcRn9Ag?U<1!a^d$ShXz5i+b5;;7lSL-JWAmDc^pl^g|9N&#B+m~B|{;L)fJJDSe$o56Ei4AlM zeHCc3glA@B2OYknL}U8)mxYz>FY-;lpZT}g(SX2T1U{MBe#q#Rk(WXhCWf7H57QI~ z&U`d{%=O&L?X#u02cZ@ef%N)&dw}WNf(vAKP)G^XU?T#s0q@raz$>|ks-FdsGeKFHJ3N`=><5`bVj42EK7~mK^rH@)r-*~ z>e6~{oQ3g+Q|>J2C3v>Z33CtC>jDmh(Ha6UV10w2b&ga5*;!F4Nw}+nG%HPcH4V>t z&!0f(YOSrTiMb2g%cthpk%E=c_%@kBMgu=PMWy8sp45f4Z4VR|1wXmxZ3SP72X=i@ zxfFhnff0(|^31BwgVWo)t~d$%?MqaJiWI~r;%Dgo$d41Yu?#L86@OyA@0{^puqgmA zff(iP7V}>>1)wqiCpHDZZ!_4xU{k;h0F_bw%5wMr);V9FS^vs!XZuo3`rr4BclY=I zwzLvf=KrK<{PT-#R<{4H&BnjeviGK8=5C^tfwfWM9W$zIL_*#zIU&iVt0@5s@IFp zeb{)f;p~ieeRiF1*nX%X6AVH}lo!^1FXMUK+0=BEGgvIR&QPb+8bfE)p_ETEc-G01 z3T;!8R~|crCiIJ@EyE}}R|^HJ2hj}RvFkD2uU_RRdN}jyAcI|!vZ_dB6cBpq;bpZV zMtf-ky{!^FUVGBD(cD9yoEXT&J8N2nR_F6!W|dOqVOC|_1~bL+>BVC7bSYi&dcShd z9k(qhX~0tthu?AlV&s0?)y6FOakjtH$-NPJjn^KcpWS$1nSy(gc=^1i-zCYef{8I^ zopn7i+pTeaNS_iDDmo(Q=jYS~alP$^%z;fciF#vx*e1W-%7>k$O(F(icV;Ye19!cF z_2ESixB}XO(K6lMZo*xwhI651geI+O)CQF02#J z$oyH{(((=z8LibtOSVLv(FDb_>);ZRRh%w zLk(XFcP0)}BO1wMYM~^6f6y|WTEB0UkkFHSIzfdj;;Qo@z2IyK*SczKCv&!VAQN91 zC5cr_bhbDwlc|=xxbpTHjiflC82&~YGL#B-Wz&2m)Jp|6%7TvMmmN&=SjxJ6M~ULp z@?O?~{5zJXY;v#6P7~eD*HlG63KX~0b?~=xrmsBHbLs}SMn6+I&&jsw(`Hx??))%5 z_<_UDB7LpAZnn|JBp|Q?CAE{2-Jgc;@p!X>B&e)VPPDp(g&da#G5_3SzS87Uy-JXOcwpue-1c6Cbw=gVorhb?NO zpE!M&j)hDf$)n)KfE&`h%ES=<VhsTkqqU9tQH2u?cXz5fjI1u>r42luO#;p)IU5|F4Z1+!PA7G>o^!D= zt!GGr17z6}*?foOWi*BYjBLgGMg8^c9Me^52XvWpC<0M>f|u}Xx>DuAyf9gqG#X)! ziuB5xPpg-!XAu`!a7RNdr~F@X5L8(}%!E1HJfPp`mfb{s*e2+(Sij@%<9L9xgI}uu zyjuIUR*~5K$XtxZ@^H&GPP(M_hzBm2nQ?#$7?=vYHlCfe^>f)l!fSl~UjCkkmY*gH zxq|11pN3ypGIDoNJOUo#0&_6WM%g!*-NG$F1U_{es87g8@aekB&N-h$l(_LfaeQY{ z!$YZRR&y5DLO!f}Wh=2hGMvkwt9rD=;nX{i%|SKSZ+w(u$6i!{*Qmcf*T2_QEOYLu52(@ z*dqZUa1W$jtcK3)LL?4+*m_Oj9P@xi&D1Tw{=mcB*x)V&QXWoDPMk+#c7RGHrQog! zl#JA(!oo)~q8T&1WUs~RXG#jK>gT9V5UqpjEW-IR^DY;Ubt@P6$u7m~7s?8~&To=a zW0=W|A`T)DWCjJqpz~n-h4pL#VEj{YMVMeQY*T_?x~=h)H^*Y-11L#|))_m?& z1Wa*0JR~xT(xR=XLTnTmz-_F>ulJy2L}I$XB`^?iFC--zMz3eeB}n}hhq|CNVdG@? zhl8ma{Bi2MN6dkN9ex2>X^s<=8$dz!qYZxU&0)ur%}@E~`F?!6v1Qu#kGJJUKe=5z zvF2*U%rhr$V1LfnklM-LAgE@)A?L@3d7|)8%XWm2bi)2ZcAm6Ae0Lw|Q-9L_3x3U_ zW$%!Ymo%5nS;*c=9sKAgjp&yGBi*77f+N=4n>S~%7gy{X%?4bA+0IbSq#L_+>DQKm z)|{K{C~n7yl-^1scxf`%h?F<4BcEnUud}6{H@tOF9WgJ%y)gHC%BonG1@!ZJXR+QY z`BMA!Ms=1Ni9->2n;e|mBunfEVKvPuUj=09eAW*Q&G z;<``}WW+CAWpo(3|LG`Z=pMhKgt(BMu@4s{L1grYCj*&S4h1#Igs%np=M0x%pl;kT z2nupC)v0miK2vOPqP&*i$2=+X^Fo)qg4(^xPT23yC49088RL?YbQkmFxfbRvfnX!uL<=yj?*4}q8OxIH zCVHV5g6BLWCcUSUExB<{6a6!pNC&$K)x2cZXeUvAwR{AN8r++k_iAb(UCfy+r!AH> z@T;dqlp;#@dkD&$ec26t?@gR9k8JFaS@;>=(Wo9{= zZ=Z7snr{~j$$Ta%n3Ob!^pqN*5u{a1zL3N#QN|H!jZsTB6-{d5$w&-d?S)F75J`Noo~)opo}tNb|+`yd93 z_y{``?}<++zro8sn#&$Iw*xRV?-4=dWGcFX4nb`!ht{mJmt@CfA4fg?jPAcy8{u_i zks6spN~Jb|zJG+{x3~3T6X)cesl@fGIFk<(E`0Q%EsBXU*jArT?hFmJjjYUq0cuSkZ9a(rI@`EgYzoHks zY*H1+#gKht1JB;1tU&N6jkx%SMm^;XB6_CYFj5T~t(f|G z%oClxi(!A1vAJ5CWK)+l>Zhm_>spkBPQ^o>A_gak8Bazvs?veh|Mnw-of;e`0lYKx z+iZDo^o+$U7k9WQECXXfD@NjOqm{7d@q!D}#YR?DF_t6Fs^Kvjg9ZdA&$}%aF-adQ zV{%cYAsS5Dna5h78nD#YD@3=8+QM%_ZK_9aL)yZ`u%wJ5#;Qk4#f1tk(LIt6DJ(Wy zF-pAnyx#V?2JCacJ_}K{n8+$_3k)PLkGS3yNtS-3FkPf|w81Jq_Y4rMZ#tujw*k&6 zlXtP|%FN(|K0m$%SwzJ8=J;K&<4X0uC?OHyDz|P2RXy`V(PGsZZ|+4w3h5MrH{wL9 z+}ZxrRUA+ZtE2=MR3dzRF;Q1BQD&?97)PT%9wN}^^I%>kKCK*W+Twh43ElXhE4`0K zF06$3;FWG2#i*z|M7?$nF;EW%e9@;znb#h{G@yPDsM;Apkvxh7JZ+EYWLjCh=Z$8B zO&k8{(ZhQy&;lp}S&|qo+-&Jc?A5K0X~LDF5eRw&gGn}+5V-=fJHa=~ak*FogHOR) ztbGU{E>gmrr;V7Neo#O}R&Do(c6s0n~cWD<3jMTO9eA+5%=CEM3&9Hcx0ce zB``t{4dl{xh(g6cC56M6b)#THiUTRrZ$jR&Ve2{KQnbgXaQkvf%w$N#i8o@_xdF*N+O}O(?bHmjcA3Z!ur<6RRPv=Hccp%e5URj!7ivPd8$LW}kHlC5DLXPL&p_=Q}-Vp~HQYU9Xlu4%UnXkN1G4?r9f%kbF=&?2F*xG5i5IJm{n|tthd1?A*&bWyy?SaC=t+6{mX-hJ z!WYka52906;Pf~uCd^%EB^q~;D&8TXA>27*+DMz;STC{IaYEaeF$#g=#i1X~~q_ z1YFGt6$xYZp0wPL6$Mo;YA<2r=-gLdHdr$&)o<0>U!Cpq4^{4~k2^WfCB_z(Nxx}4 z=}0fd=x!aq?KaLJb^G__#fsj1%Np`ULqw7d-|oold8rv+Pm)r^(x#Rt+de#M*Rre+wVo!OdKhG&yO2cxO)7^SZeS7cUkuErv@pUM*2R}%48 zUc5bRHczB08+@~I;I?pSy8F=bh9LbuAt{``jr*IjGqO4yUdymUae#R{X2T$c!UqUb zs}~w$C$E(g7vZQpd3imtYD8T}Hjv|K`!L)U80?LJ^!+R=%g>SC?kDWPd$=+r=Gi03 zIdkzF_D7Ur*`M)W_7J)+pm?gKWOBB=)@rKqx;h212C*Ib6ZlpvH=UQ8#hjnSy;|nd zcw1Y^YEiYmwj9ap&gFHqvYta^vC&F2yh_*!$#2KRiv9?YYgt@6NMI2jRX@|a*DnKz z!r6CD8}rCxq|favqZ}EzqAPLEDIO|KqzrO145C3=o>hgUOob^*Pt!I@nw6d`Ny`J@(fD5Q} z^_!L$CxC+i0LqpGVKjHw`JyET1WA1XIXPJVQr`+XhXur={|7NKkmMK>6Oa=m$npm* zneU)}R#pxM5St$hI}tsQorQrFRMQ9`x|1PeX9u#dfI>YiAT6=Gi`=mxf+7SUoCu^P z2K)jffyl@1Y;f0KAn?2Fy6+)E(>(y1}6=Oc*s(Y7``36?kVLv#-0OT#JU*B>W1g+%SG z-*YZbB)7*FfoElMY;m4rAh8>|^PpbtVYpd}aqx(^lT~Y_U$w)@+!Nz~353XAuCceC z3lKnaGDAU47pIUPQ%;R*n3lE{&kbWA&ge?PRNjlOO`%P>6%xQY!Y!79@TN9dMV?m11iJA5ef$XsSr zkIK?!p{a^N@$eeFA==;eXZH&zit|^u%O6UvLHTNb&sl!cjQKk{V_%*0N1d^+Bd9D8p*$n_mM{ELVv0Z zi_!(z^1hoQ*bfU}>b?=d_@Uo;)@?((eS#gL_PBZB{ZLxZ$=}rYgh6V2ky1{e8_9R-5R$LH zGJA5)0BuDwbC3%wodq#Q0E;!ymHq z`VGv4ae|+n5|bhcp1fLRrr^&x(qA?r`%^~yv-RbF zA*22K`uwz2|7gRQ|ApiFdn2-cP*-4JV)<`lEI&>2Unhl_{;oFq`3iid-*4~FP3#W_ znfVWR$A5IkGyGq*js0N_{he9)1CGP`yLu|aCu{eK1%1Ln%)hmt`;A#)_!|rK3E=(K z%=Gizzt62O{~<;8AI%#J!=J>ow3Q@k);^W}UXZo;DZzXuUD73uu6`5K^6z-tPS7+k zO=Yd7;a7)<2!;*b2U2|$Ng6tYqSoHJD3D$g@xSleoI*>XImBEzhGWc^3t+9Q?eVDo z!HZNUfVoEJ$;0{MQQiEnCyCR^fh(%D2d!4dW+Q^ zTuUX#X(t3;4N>gCHV$5dBB<~hT2l*9&X}?m>rM&3aC}em^S&tZ5G~`wBnI;VVxQuu z-IrLAVF8FNyj$@M62Av`I{#n;wTalDQ267Mum&(X=z!b0nTYRmp->wB2~u!5b_trP`5>w6&DUQlj)@PWZjAM#6G58pppdYV*- z?qXq#`}G4y^$+O>`i=vu;CjK?E<%0OusXz55*V^`ew}CTiV$siU*q@g$r?1JB~M8M z(i#_JE)r}@Y&Xl^U=I#2tjTha?X+sVij4AXO~6h_dJxMzW|by0%zw#B3%e!9y{_9^ zDJzlREoT_gGd8=G%;IPkQC16p8E;X6PJ-ywhF%>bo_uHp%qr8kPEZZ8}**KS_uFh6yFo=tD&-Ddq_8TIqE_4FC={Cl_KU&Y+jyD)-wxTmY?>-M@W}KcA)WTdu!yf3jN8p!RfPU@>yU~8;dVH7ia;w z9f0=ws?2?UI%n1Xh&VG!5i_wzL$ZuH?BeQ98`xAj{|suiV%zi=Gxvv$>wmz$ezw{D zn`Qi$LK4>hl7;>4V*lqY?BDkJ|3291?|+Gbk@YvT`oH&^o%z2F%KA-r{J#zh{SmAA zpE&;CUA^%?F$4c6|Kqc!;IF;N-<`zI`|new{!<&~Gv4!u+J)a8q2JH_R*~?#F4jMI znEzxX4dG%V>Spao5aSvxveQqvRjinDh7xg}CIjkk~xa&(np zV|z{RU^)00)@BXbbuHx3y>=y2Ut<^qq~Nwh_VirC4{FL8GAxjNz|J|<+lo+~>vBQ5 zIT}``luc#7KZ#Sgd;8~+6d+6)A{Pn0fgo3N@qAxgeLk7j=_%M!YJ*1gx7jJWp$KND zNYRe&8q-5TQpee8mexgd;K%YXy5h)N?-`jCP%)#(Z+A#I%CC$BknE41&Nh!qmlk(Jg*q$Cf&!JiomI6TN;R1xeIo~0e$n=t47|EQ zkp{JG92Xm1FWn>yUNKYsyt_A`9gI)vVY8xqvL8*9S*(X|eZJSD4o12aCd@n|M+0L~ zjEQw18CS5;K7B5T`mE-6MID11ZCh8LVIDr@6X#kvK^rpl`&cm;jj*}siO*{(q2n%V(B^J60P03W}G=s2uwobB|xh;|xx>0MGcZLIHN zezf;LMldOYb;kn*5$&9{hNv+ST~c!0!BM=lWt>;M8@gK|ZfX6vIq3%rl43@U%YjTm z7W8S;LKd?9aBMX|KkFqX)#U_L3|=U-eK1o<_$J5YC<95c@Hi*PaSoY<7fOJtQiAuk z@cpl}kpJLx{|`7pY=3G5^x2i;zYt~kz0&kQ?*sksa#9!=>Dg%i+kBJ%6I=KH_xFCP zzx_M5{9lT)|E3T3w8_R_?Ly@w=B|s^qj@S@@LiXu_O@NbUy=|5{i zHF4yfBKtKQfQ+=c=hv=I=`Eb}aCBAovfbj3>^X43c`{sER}l&aPfuT)-Lm5BZr(gS zUCuAw&u?DOA<+S#p9M_KG!Y|Dg=IPL#Q`)~?SG#1$X!BvzX9>T1-dyt=`24PVBouh zRJ~bgpJiOQ-_3&Yp8|kbza(ZhY`xIo0#JVic(=wG8b9|u`bFlw4}kB!Jk>%wwBafY zq>kOS8W}n7@chLWpb8T}1Sg}lB@BMjjQ_*N@CM+8z`JGKVNKg0h81)Z z8la=%g!5~Tk83#aq`lQjvxO`CIaspLo;H_e>o22$1)yhI{`6tt(yL>h18CBCp|^Gb zNQOlKSAldOa9|@s1`oWBxQO@tZUCzyMSx&KrImQPr&cfIxU3%_R?Qa?Q8F9#w2wH( zM~s^h+UHfS@0)oX57Jg?u0fq;DN!K-1{qtzQ%1H(WN(k>#qw;CLxdoWT8ndH;ymKvoE-`2NT!;Xv~CEf+5$WtIF((zuscr`JR`Np> zWf)D$6tte8I?XMVn2nC5{=}A01aR+S7||k_K;0J1*ca;oHT04AY7n5zJWbETV?BYw z-cR^cpTKpF`iTU)(3KiwbD+~ahy@jOetm+BJ}|=@_)#t%kZ;DkNgPNhKu!{}yI@G! zQe*Yu#-C65hu^J)rY_VNgDl8V`5O_7ervv7!OJ&AVLpO-^Y4eiNNTOAarW zg^-j-aqbThZW0g`m8{DbAr#mxHjtHVoJNk5+!fs%UK_`sjJ46xdE zuOj`plKD%w{Fry3WZA$TPFCcw9sv^zRn@$Gnu2ENl+%+*PeNwsRPJF)$XadOxZ;ms z9)41BejR-skq$%g=%eXL1Hcu2Aysq%C|403$mgLiO4a@c@VZ~WK;9jbI^Z%eP3ZMB zE;dqd^%jo8_=Q|9t-e7+KeZ6K*n>Fq94xtw?F>cs=LWM=GY_Q*AgF9xDO|4FEj zS6665RE^cdLIg9hMjmr|PDAyV5`!F6NOyM`<)+*nJe(^SaEJwG#0(oc3>#*3d5oyB zC=_eHhL;`K9r!Em9K<8=yZ=B|F?<0*SyW-p`pyHHV2VRx*=LI9VCfU{W#v3bH_=4W zn>4K{G!C?2#*8Rs@m44sOI^nJIcHv9IuBIH*E`l?QSsQ4SUz)PUpfz{+RkfnY|^At zxlpDFFAgR&&pc}5*R3aC4;cLc(})$JF~i;)A)2Q!CyGB{Ii9+Y@trkotdtd)HjKnV z)3~Y6pt^V&$eEbJLXt@^&(jfw-s zBs!GQ*dz>mfFOZNkTYa?ESYI4I=ZdO@W~OW!vcu6H-tB4 zK{`?j7GXMW>jOH=!h^HhFI;aKf)hLz`x7$LwZ^Xdj{@)Ef)nYeQFv09JK#soozABN zeXr`ik$u1L&}L?!cu;b-uwAc1NM0oZGNt9B`U?BVaCLuWsS8HY<>p0+JWh?>s{7-r z99okd4HEO@PWG}sr{TjkA6B9~#|U~AOv0mZu2Nq0dfZMDfO`!}1i?wZM*G1@-uki9 zeF*r2$=q)GAiie{g5#?9!iP`#cwYIu3A}ez>;I9 zIL}w9x>A9v2%l_3X|V{1*&vyMBBIgV-yI1u)u{cI#8IM=OB!(AMl^JRoy!$#-zpdZ zwbn2@ZjF^&;Mn32n)G!_+dv)}UA=EBVOZO2Yq`RmSheT1^o*(M8ZsiS=Ua37IG zDb$j4LKtQ5&*V6@d8I`WJ3&_70jV6QlpsrFN$BciopSQVYp4{;X&?jF>bB9IkqYHZ z<03=XYH7nwBUDPM+V@4uAC5!`nkD%$pxLq92e?*I|VYxC)(A;oy?P-q%x5HTxa#Eh(>KddO;bS3_uW}(zXWo=)0h2FLyC_At@I{X4*J>`i zFmW=6iv;}_zX&F}Zc*y7Sl}S_r;iihkDvuwZ*Mpw@zYH?zibhmQQ{7$u`=m_1!%&a zJd=Sk{0tmEE*-O^H`__N7cODxGvbL^vf=3Y>$w9i=GyK#TAGe=ygLu zE&x=KGBaJ56Y}&z91s~y_J`3QBZOa#X24?1jjl#!M2fCPWOT*f5g2sdh4Q+G;`#1OLRBUELlu@#&KaU=xta)3+4$$k1-APgkemmsJwbK?_*eTUy1jFgBU(gq(#Yx$=TDeXftVys z#Kek3%Mfs*++#H2JX1_i3r_j^zAKGaX{vU8PiyfDx!pe-wOP679Y#)m&Jv^EN|N_( zHPpA6+8e*wy;%hs@55&c%LOoNTs1s*v=nLVf{Yc=1GD(4K^Ui&ikX4Q=b_mkVs#vf z{bBGL_QQc=IX5AKYFjg;lj13e(~rl2 z$C&!NFK)A?w=%j2)(1)Qp(NEyvi6W2YqhRG+E0aR`?wxSbu3;%^eZJ~!O}!4VMdKh zzl>9irIhmWly*!8_Et?%@~5KaMhiklzDx_(#e(jZx$UI6xN1ZS-J+o;4eB^1KzHYf zHQwJ^wx8I$y-cV@F|G9mWjc#C7rQsVweK!FwYI|JBI6oumlmQ}3`?e%C4MB)!E>i2 zeN6OTxNB+svfL`QvT(Zh*}A+1{lUN&1VkPDBw{6?)2O;mbI0B?Cdd}MkE2P)P^Gn` z7Z_jhRLmSB!xdM@XdYHNv63}}$^qw2BzMQFlXqPy7M3{iU_axl}6JZ7s_9P;?(jCdMv>-o&&XV1T3rUOYM^Ofy#eqP`U3vNUGj%y^&eNuzh3y?2LA*w{>3W! zXX(Y?m*zjvi@#sUKds+CWP$%4Dmfa0g9Tm3>iqO`Ogj+(cZ2JBX(d+6bMm7|*!M6u;1oFqMjIf&L?*g3hjf?h2 z1)rwR*C6=7+FAWIf4rZr-Aw#`uK%jzZ+*Gi*+v52H47a5Gi*Vt=GX_eaT*}B z8DMr^igwNUO7tvp1n{*JP+X_ha;TKbM5`hLLT?=~JH5^FXfl?MxuX^ppaRf4&}bwP z&P?n{7dYF@>x8e$axRbxZ`{raINA)rx6S@;JLh8c#ZL|3QVHPjSw%?g=a%|D5db?F zK;}rGDvb!wEG|HPeC9&APN%*l1~n-Ek0+P4X%;VMyPFq)o*;l*Dt!GnxN=a;b09c+ z2>dQ#fPJ=GD*oYm2z!12!U9befYHDL8%Qm z>|@^MiP{;bekoh28eOe?3irsm^4HghLQvcHT3zD%L~yyaoR+90dYd9Q{K11s$83O0 zXlE<{_mbGWsBG|)e6V=??gW=$6WC_sot8U%-vi>((TJ!oW!&DlsUZNt8On{qC09!$ z5DEM}JOG=(@X_Agz!ZZ$Ag2DZ$#6XM;I8@*i9NRJz*us*)eOx+?6ZP!m^p9dtYKS7 zO~~^SR{gy1CVa;QUfHuxO7~gsKLg!1xh}yUfl~uLebqMELi7!iox@&HpJ=XYJ3kb3 z^Hpxw?Yu@UpPaOwtNBd4#%VY{qAvDZpWu<FZWv6WzXx6M%$fK1>bJVSLwI&0rKSs zmA%>xGNioJDpbtzE0#C_&bV4;8N07NZX5BS*Ij=8hT_wgE<{=Nz#F}Ubpk-&*%Nso zpht;EzO;!CnU8hhpFybRzB?;C!L0)D^!E&1ix6Fl7sFNnirP;rh8Kvm0E<*_ zTeebwf}7qlHt+~lke*-~^g>x^863mbd-7tf_l(Qg!w?wAi zvd#!PAWWA2bC<04-D+LXZd=XON!>88m&Ea#AU2!+q=$acn^HCxiv){+ojwx-j*)M0 zj5fgWn`_m&0#FTINdSJZzLSttda#n4u!d{`Orzdzn;efAj1eq;h{rhqI5v>fekwK? zTJR5Dja%BzcoH?q-ptGbXrn=2H{qJFLN76G^U9_c#J^iEEkY%Oqjf>4gEsaOe12ru zkAS*ElH2EGL(7XrbiK=75YxC5JnzbG*~b=t5S^ffE%NYe4pZJOvf}||LkB~$fqs5q zID{N5T7Q))sGmMqo4C#>>%NVf2ZIrW#ejFYET+)QfjR?L{+Zv3F${G908j-dL1gH^ z(E8okKwAcJZ3#HTWCj*(p*%9UhqLbvR5(NP%9=vPq>I2tX>&DLoc2}Y0RSQw6Tq)c z!p`UcYe9b9GH$~89`ts}=nlXa#MeV^5bZrW7;&E)HF?3HM-#bC^Vs^!+yJXO4CET{ zny56TrR3H0>2Q(6&?&N=<(>}^7!1r8!3TR+4`??B)VLe_Fo>iIMs@i52i>Xfnhn5u zpwkwFJ4l|qDDAAbZ85C2_fNqM{-88$zZj5 zw4;7uTa+pDE5sVU+Lth=ejZhLa9uZ-K-hteTS+$9vRxGDBI(lL(6)KZ!+AjFqE^K? z4%rmNSYyI=3UsMa&yxt6KCC%ohpx8(t^gjeXTlr&Zc{q;06bCag4THtQ!j_)oPm)! ze1=d=i@tB{{vxXptyk{cc<@_&&KNq8YFl5gDjpTupfCDJfP#&4!_Wx>g9(2`J1043 zJ#t*3O^bfVuO#gh!X=H07908y$jkA4k*r*Bd(2Ih%OPF8&4 zoj{I(*zT+xQot4`2{ zk|5gX@r_$(qvPWXPaoowXN!BMc88k7<4gOx@aoP{9rej2@>F(F?IKH?<<|o}F~UeV z@paOy;9fugL}bMQ5mUV7x=}@c#}W~fsr`#XYRxwsTO7nwY)!?}l(~f^{Rh{VFIR-- zx~HAR5bq7Sq^cg;t`kbczO^r}Z|lPD&CFg+BF(=#cN1eFJ}ZozgwXC$LUP^-apU_Z z`$LVr#HQTm$P$^NcAPSFIm>E-{j`Oo8XZvjy1$aD;erf4Mif~bADUljgYFRu`=*Txe=2aT24~+jsshjWU?*BS+cUov|9)X?l#=Yt2g?`iP}501+tbz99CJtay|xDl>U)6XN*Hjo%h z>s%0)A989j5RMY=H>A8ub)vMHUKQ%H#tDitSYjc|0Sl=gT(9pak;x#{v1OGi`t&3B-Uf?1Nvk zI1^fZ8;%J4n213cR0ar$+0$`MrLQ}vy`r+X$O=YXhNzciMo2+Zmq{`J2sp#@ij)X5 zm`M00$tVzDE4{CFGAInZ{*hcuD=M&7SV4Ng3VoLqdM~PUw^cGIn5v=o9D1+0bhr5^ z5M&sAAg**5Ve>!=x*zkg^bBPZX4J8WJ@lQ(&U)ie*YTDZ6A+amVG1Ulmh|@V$&3AumMFU80W4# zk>toz0y)isZZ#Q-L(=3k&lr4*l<8UKe%?9Sq@?(80@eMu$j_0U%x37d3hZI!mvTQi z)!{F0sTVd$@?)8g533cL$brOAzF466L~1VtL~IW#cCHhv(XIZ)?RGoo)uxa+Jm=T* zNTM%mWJWN7R^@?A<_CRd|h5}L)< z=n7~Z_|TGco!fRmOPrix3Z^`Ad)~y4;U0QR($;jX6U&^w?Y^Ird62oN&|@0KMc3XjpskD1MoZCKW|g@gNg_quyrIq1IDa-0PmlEF zd|fJ8M4B$nutqu+l0l%qj~xTJ%n(#{j8Y@hNF$X*V-(1OJmO6-Tw;q9m_{5!Mp8|& z1Fg!wFToU9lsd2kU!$L}WsZ5(z-)@e;zk?ipczKBvigR^ygNV_xURw08RZjGADUBQ0Hyt`jXDWvJp_ z(c#Q^F8l1%#)ft}*#oe`t=Z>Wlc|i}Jiu*$g$q3KL$P*^+0;@CCMye!aTG~exS%MS zHK6bk(mdqM8{91FY7L#3DcN#jt5m+%BuGliNTRD4X9g;p44f-Ve(yt5(9Cp7r5ncK z*o$OL8IN2W!zdX#Z;?JY?O03UZ02+*#Bd*nv8pikRmglp`teRf015Os`;_r!o0I;{! zpI5!HNa?{OCHWP0V$1+ibIP2`v5^YBIk;Q_iA8`!5CK4l+9eS{M5d7MtRqvsv9tC$ zz{W>!I|sVb`@19n9kM^z(8YaolRpr^KquaDz+$`jr65h8sbNkZ)1N58?$bTVQ-M+w z>20RVh$SYGg=Q`<{N%%$0QjY zbYP&4RF3(Ad_W_PFBs&Jz!Hr#^p=>=o%`6qR8ai3Kh-)lbk!3<@DrxXkY#GZeR;l` zylaO53sk&0ily>&=OQEwz?s)Hv2MO5W!cbRX zLt~Ta%S%;G!}Kvgom*x+J?KwDmL4-0v&1k<0J24H*+(d{&~o`&>bOW0zH@-dzTtIe z1GKBYIicq#gd`zdzNTO%xTc?LF11na?(EmnUs7MT)p=Xwt6>CgbHI8vtbe@FquZx? zb@6{F!L;1yZGLNYU7}OVJA^;j(d*^+`FTXq2lR>!5XN0Yz;(K_{Cx6IhCh(OY6aYA!9oj6 zr=@2O;=*IiAcLhq~=@0YOG$K_g9foVI7CNa)x(r?y=pmMWEHPw) z`vDrU(Ma#VA1lt+1!2_;wB3 zc0M?cHT*JQibN}nLN$gUgPIAL0;)q6h3>iPG0kDkm~ySxuTVQF2$UlGkaYNP&<%M! zD#6Eh?tCTS1hn?UEey?J6BpJ?>;kFi0ijy$BM&#OJtM%JVt6A+nA79lZMV(jp1hs1 z5S`aBwx>ONMAj^f+GWDXpG&#HZ_`K<1tuQzPg7{%-8FH~vGfos9RDUv_C2c%FFki> z#i9jsMKkf%oeJ4(Q7g|lMa$#c@-{F3q+drknLZ1`CZdZeVRQr#l|;hiPm?y?_yHbD zcc_vhqI$FTg~KxeFIqeGc2ER&_Is>bq&83}h!EFO(H!}dG1dmKuL-4UZEBv)oO?4f z6*6%h1Ih%g*~#Ff<;4sFFZ;2-EpB9p8?@- z6QKd*ivMLMfYX9ZD>QQV3&}lc-+$lVC!e{lyBHF45Z&Su2tO=A4IfkvL63-9wPG%J z6Hx@~Fu{D-)OnHAci|^-gSl=MZ#XD)mjkj=R)2IKk?V)Nh@ZDz+jS)gT0l?}tTe453}ufhKpkixC_w(pU?Ha- zn7)d2VA%J_@Eb;g2mq0_w$Qk=bK0a)@Ot(0{<<=?>ci4l)W@aT9@f-XKPGdlGP$?u z@Sg%wxF5%FQnn{ea#=199YG`3NtLqqR3n`UYJA_VD{rC@n-+z>i2*QXVWZ>zVcwXL$HF=2l;vSv*b8uXc%1hIu>1cQD#4t$v%w z;jmq4-#CStz_rv;@oaQIJ?>lIY@GLSyBpSEBeJw;J2_T4G47-LcE0qnXe3k{`(*n4 zX&h~YFHO-EQtbJf^(C_eN2gu<@=dpPoYnQ!~U! zG+sK>8%7pl-_`i=m^6PifwB<`;!>NzvI$cr(a!nGJL4bLOTnHS4TnK|?xwf+%^voY zKi*0#zLWEXxLN~%R2X&={Vezy!0xUKvtcTxF|Q}=oo76}$%Kv~DQnmOi81m(+{Y`1l@Il8~u`0PsY;p#-Qz%&gEPPL<9bRsQ+39-ry6nS2L0^LU>eRv7 z0|oI!6CzSY{?LRp=@~%m%vRmPSZ=xfG4C4O)hUXKz)bd=rGNB1CrSAi9JL#^>J7c% zy-_enEIS^t8tgKV$UX8{d`WVGR1zj>q~y(LOauuY7|GZ!$>_skFgUx`Im(d8nzuOB z-q0m_skS8XqB3zmX-0H@;KAV6!LJG-*gu?H`tJ_Muj_KwRlUkqBpuv7o}r#voU5zy zT45p7S?;+EsOr&?^?YDLL*y(C&+XQaT4vmwPJjMtAL3$)YQl};Np&W^De@1MOh#fC zWsQljH?%U;=HeMzML93eP<8@j;Mb9)E&55iKoz8tls2D6*Jugh8PXQe((UeKgI683 zD#vs3Cb0{06d4UDm5A>g3;$JRp5Mn32Bim09=aUb5}J`}5M>tX1ZpKTe6rhE5H)lb zeNQ@PWvdXGYnyURa--InMA%9AN1eZhLJZ4K`%@FOj(EWmBx6UD6Q!Ui_;74IL|O5L zP>L9|Qj!BUhp-sZ>}^z05A#Lf;i?GZyY zD6O)RrU3JB+4aCaftDWR<)Wf~6nP^ogZ)9Qn9|0K?ydyJrlPSd%XApoT0(H}@Yb#_ z>)~J3Dqxs(J^KRG)>}GW%Wh}0&X=FIC;esQR|W@l!}UyFD(hPiF2)PYnlv{o6upqD z{U&DO)O<3EYVDG7u>zGjxujLSy6#n`CQnCxB!r1pP-4t7v+_Q<99GtuxYh=S99!6s z^MPN50p;9WB9Sr;&eb;ysbl48ngmm8nf_J)A>&h%czzl%K9Eg{srxSjMf*`S!ktFV zpknHADK#@`BJ<})$w=lX9=FDb7ceR45kuulq`;nnNp*HU-f0-FgRikq;Kn^#J-18* zV_Hs-O07cOvs*hvf-alIv{|tG8sCorx; znn9%Clv$+UzEVlR^ju(Bch*NmDOE)0{w>fQ$~!f$1s6rk!Ni(@@P|l~L-? zT=lh?QAbKs4PzG_y6-T}eC~(+M`(eZiM)5lE*~Qk?k^6rJ@R2I+#R-WV|IAdd@7!m zuR+&7X4OwQE)_{{k0{9e)s5>FuH9+H-{pk>&QVTu8uJDgk-pZP)qVsNV5(=R8Nv$# zxmK=WU!B}0%V|;@hsSw(c^4dX?D9t<6+Q$g9~bMW^#}(r$I5BpqWdKJ(i6U!-M9>K znQxGbmh<}BajeNk&72UMF`7cx5cG&0Aea=`1>0_8(>uO1OAy~sAd=|C24|!65L8C7 znwNxHql~-q7%N(Ig$rZTx#l}Q<6V68<_rvXUX;`5))wYj;Y8x!I86qmu|ABxER*F` z>K<#@b72a8!CO8aPJgw`W9;;4vWgfCq;=2d{#d`R76ElKbU-1|EovbEQh5B?^jYf9 z?k)WG>_gJEbMe z2!>7f#42(KUHs8f78)8Wh(rq48!WA#oFIu(ANz(1?U%Wqp!d{@@Z4YOQ=WX{<^wgddjtpIi72@7u=U@e#CA8j4&=|0bvT;-c zmJn5TQM4mnBBii5_K>*;sE~hTtetOi(3aXYr_*xD0puB+N`ej;T&6+#t?k-?`Nqef z;OG=F2Br$AF7as==>#+;6ivO}3Fn zM~uX=kX%}?(#Y=9LT5qKgbFYR4n;J`m)9dFAgu}r^>PaI#=gd!JG7L;dy1LYOT-;p zkUeh!TMLQIR-58ESzexx=x~>rIs7qjXj)<7u!N(0=aqq=);NC<$u%W1n+g2$bBMd>%kL%Bp{VS=uMLe^>g@)P)?vE%3$XN*&y`kHbC5BJXu z-b$YM%Mtb*4cj zssfb~cWV44u2IU4D@Tr%ivg(o$n$MV-4Gi}-C~BjAAlBv*O>xOIg=Tk@&h&t*!L#)Qq^K)Y58mW1*0c!#AKPnTOl%EtNzS*G%u3!74ebm{w+v~w5>rq&sV__5!gj6Wgxs; zkyGh$^Tve9YY({Ak@bOidC}S3Q$fyq4NGd#U)Qi69Y`(v8VJ)ssMlWEU z!Wi3wCF$D-^KR~Zb-$bj@XJ>iSUl<=N7!)Vkhyi2IXp=(vOm|#Wu1`htiz6zk;-MbexoWpslfTI6VAJDS6uP$~{qW7#x}>Hb3EQ zu|F@gcRgAk;Np6}Jrm)Z1S$WP3+dsDyU6;|V4+HvlB(HMO3P&b^tN#U<2*8>@^hf2ir^*6Rgcb!){A%ThC|dg?gG*ML57!u zod9XEsU9YBhIElZrd6{?vt9GakAodrlB0T|UnU)kKjj{0(N-KFI~OeAMPGGlQ;CHH z+TrMv>}_(Q2Xa;WXpD#Ag~ch4uOyd|AhQf5OX2u)93hQ(^6Z zP;#P6y$%j9Hk!AK@GPAXtuYtSQ^SJ5pTOTuEm_G%fkw%5u=NHk9%mBL{t(A`R_7uZS< zHU&S<^1FQ1m`tc@AqyTVa>+bqwWA@kN^Kd~LOgx2dn<|M#btdAjsaxe+L=|XuD!eR zvH=S3+e*KAosF_)jVL9Sshtih6>wrq@A5IOK;lBk7|na|bT~S;a=>9Ut^e#dh-Bkw z(0=bFP|{jn;wE`^L2?3rgklzD=o28T#Z69{265E2V{oKcHJDhba8prKc?o~u=0H6o zYubdNj?1PXGgcLsxoDWXz7th%=a|qnV8uRy`~^-#(T>83txwhjV&J+R?<8t?uI)CuHeMNWogp z*H&FTTpaQ!${QAfDsnmsS><~B0l5i>9Lz2K4@n(;;9oDB*!NIxdQSW`rYqK%?jHXLH;h?FpT;@Jh^9(~1u;`@Hn zN<$K!1qp@oJw&eC`?NE2a*yOb9Og5i0WSq7+=2Nqq?V!DIx}(taFi|xF{?uW(l%cJ z@6(?LH6(y1Kw57(S9VN?6*Ang6TU#HfWheLKG*SWIZK671=qT_rIN>EphjazRII~j zM+p8EamxBvi1vca!~V>W{rorgx0u$CMa1(toh65z5WEk7Iq~=s94rFSVtsLbqE}@t z2f5v=!LKoFJ9q<817_+8ZKN(z*YCS=)kU!reVKBebdKy#%l`0&d@>ze0y4h}MXIw@ zunF9pgA7{d_ZS}7ael6}JJcT`n~{2KwZv~o%il%h)8>fWrGU&VV#B$i@G=%ahZ%pP z)nC*dbl_I^GbaW@B^_?%9Qq6rcli=;#fHqM+_bo}NK%P`mZeC`O0nXFnCvto>=HF2 zF#kFhG8L?20I>y-scF3Cg&QTkao(g~2)9iT_lcob237X!(MTz0|5`b6h*_#28nVm2 zgbcaNB$?snxDAwrkk8PwI8#DTarm{PUpiP8!+m=oZ{jCjTY=S0()lZ8^@<@(?tURL zX`5()j6})R^=p4fk>{jlR25ngnXMYz5>l|sGa0$laW!<_;SpW=>l2$}CJ+#zVJ879 zlAJd#_NISUF!0C{%J5u^RD>E6)>2t~THV4iD+ViuT#1~ia{FoDY4$zBQ_DHdwbHp7 zW<$uHb8Wz;^XL_b)i^W=At_>AZ}nn{$@ij8S;H2U0vpZYrZI|FZ?QJw*6-UzzQV4J zWrVH3Ew5KGrMHpFXTyh08dJypB2A)J;KS&30Wh3Pv5Vc?f~wF3q=I_WoLYmS*tEjt zrYX?2*tG^?{cMJ!mAfU(yQAjH1?*#!;c7@X*d2!%Q&^8^omK8`aeU7s)@_&Vd~LVN z-Fc!>l&AG4Uw(b50C-c3t;B5b%>=YR#$5yMgf@h<{x5>UIFHnp|t4v2+Hgdo+pJKOmXOcOmJ~9nE z3USJ1wY;T;JTocfG;%z=1DPZ@&e(W=gQF4V#YRsyNKZ1YAK`_?0;QhC_tUDu*q4_ddYtyywXp zs7AC_d#*{XihPd>bSgaex(vW71mWZ&rF77AB3|tLwJE7veFzU+A6My$;WYBWg&8bY z3>zKzmRmC8|85|fzGU3bsw&<*v$(PSna7g&ksDlQ=K679Okox; zOyrG~Mj&V=UvHMbX=yND={p+UWl=fn(CsYbmU<{L@%ilB@cDqk(i_0g6}zG9E`;zM zJt3*fN(~f5ck~bvBdFG(C1h$ZEiql9ibWjPNqjCwJ$`Ki0b2)Qrdy~2&E(iPI~jR+ z>7&EEz^dYk)71i*t9em^$#|tjyI%jD;j*2!(#tAo@6uW~nT%)4e~It;5bt1%{~-dg`psi3}a1u)hA%*5TsCQ>*B$!1zxCPIK@=nTB3MjQSa$&0p0!_1U zE73C{CnPTdA`m$8=Y>y=vIH4`k;9)n40e8PMja52@{-ImY#FG$mFIy9x^|R#L3Wc( zXKdCUWg!M~1Qwy>GC5>%$QaviF>YKb*Eg1?lMWYs#0_zP^1@GOqq%Yfl9P>}BvzOs zVck`%XbiCqbFNVrjLSSDyxXFnkSrV?ji}?V0Ry8PZ?;q(*VJcnASH`stQ~UaJ*s>RAKgHUNOCq=B;4|!D$c}S7gBJ( zx;IN=b_rLq3q!rIv}qirWgDBo@Jnh4?GAhm*gMU2^>Z?su_0X19bZ9jx8p4=B$XJp zR&cmHPNO|Mg{pT1PwixP5OXnA46Nr^4CF9fkhgUlO{MBBZ}uN6JZ%EhIJamkZr8uf zGm98hjrf9q_hrKuX12H1pmUCOE$~8-ue6_a{tV@KH6^~WPYU!awoa5BQhzwvrm4L% z_xu0T+q1{jn05WiB}x}j>BcE_#8BsX&htFyc`6m%G*VP9sS_!oD7r~=3^XM_JrAus47ypu!giz&hd%YEKH_Ve1i4Q z_Xlk`K4%4Iez?xRI@C$eg0`H$Yc9L=jLj5X^}>$I)+ZX?)akb#uL7p4EcmSD9g?PH z$WAI~c6#{w>5~e1jR%zB66PsR}QQ%s;JZdP44a)T>QpxmMYhay9;E z?i^RlHnMPzA6xq{cDtLZtKRJ4zeEvHXAkg)L|h*`!|!xdV%*uN#LLfSEIAl@Na*$V z{#9kNs|;OaZ3n;Y=gBw89NW|8@w}lW;o@gaJ*SGbrz2(Fh>UKpzmpdK?(Vp&>n3dM zYnClYN#NZndvfK&P>W6%^N*hb&EucSC68QN=v1h+H*u@g(#?b0?pM@C1ip;BKcOqT ztD$Pj_?$|Y?N_r0HEUR!&tI{CBkg2r!tCxgd{j%A&-@y8WZT4}If=V`RRT^X=bf&t zXZkfvx2xN!rkc<#qb7Sz>2X`YrZ$ZmlgNvk`)IGVXUoIk%`<1svf1LeK|L?@`~!Pg zy&+cCN0pb#xDHS9(v~r~5k03R>F4q%#X*hXAIDnntY7pbDEZY1xfFZ;5_Zffx#mU# zamu~^#-3vf_AU0@Kf-rR#9h6o$~MI<;?pbcJj?1%S60>Pn4eOt)zN9Ou;UWX^AFps z9MfE7*}Q9luF!17-4~D53A^6KbQ)UZF^-1g7pD1qN`Ca{UoQies#|;Iv)zgEk0NjA z*d!a-PTOi(=Hse5u5iaX!vOWj0QFJwLn8I3+bTF#EZ;eL{ehJe!|we#rqY+M*>$cx zacZuT>}1C)_r!$$wVz~tCahm!sn_*7JI1b6(N)Q~!9Z8@-1f&OKFvGqns7Y-jJEx& zAY0>gUb+iwH-z^6P#5YJtz4iiT)J97-F}*G_Q7V?K~}2t$ptMBKOWV z_1kQy7o&bK>SB*Wx6(E15$kQ@3$8yn{dvw=({kpV!tETBXG%8NuIjx{T`w11Ok8|z z&t6lPJny3p@rNC~t+H-kU)A1vt)z9j$*#&b7gav&F|-Vi_l^1EV02^1^l8T%auk(D zUh>vpO(dyqZNkX$nhX8yGZc&B3k+tLc&puc_qp;sB1+U~WxWZPy;+H3tds`dK1TLB?q9ttO4 zrd5eWp$!H8ZozM&b+n4w3Qe|_2m-bj^!1#|gl|I2`b#RO`5oC^c!-x)dTM3efs!1VpH5A`px3%BVzXQeRf589Jm-xS>+{nt+`_FWxhxkN|n%IKPm``i1LD&*OOjc4wc z*V^rrGq#9Z*=lHgFMoKfk@5RAHRj!qq*Xu^FJ6cTFH27zQ zhR&vH-}P0kK?`^9Zpj@rl9!!z^!kE_R)K#WbTN-t*D9Jn`TpPp=zJ7h+s95`AWgm>K1> z%mxv$Ro)MF1?1k@I4F4Q2GydQ6-no_&UeH1LynWWBDb?!;{P(%545u|0MMrwc-;h)b!s6ReBg`8a_+YB&grzY2EcZjqT*B z4y|Eg(_UY>rgQSjoGzJWPgCK7PM>GlYpSE}+4SZ$yiDb1H^j=?oeQzfGdQtUdw*tb zdG=Df=rt>-VfEFwOqcJFubX{`_|?0OR6O!Ldw0BY;Aqn;N(r&@RX?33@@{DKxA#>> zc1H$ZD(WoWRbgFfy&-OWYOmZ2xnK94N-s@!a2LO;thn(DIi>nhD8DF(;G+I1}2t`l#_}(?g@qJc!rj@2%JBeOrF+mR<13d|&#+)>-b6b30X|(?@!YjfoSa zR&jcEO`&e?CK+u8O<^&2lZrKVjjTJp%5!<*iznO#lMRgjtcfbYA?8_aDKnQpdrnnp zmMdo8Jgi{L-;&m3qFE)=U1BIVOigRYS>C4@k3&(mHZA%SGENrlS?|7x+3p-SF`-8{ z#&~OmZs3Uc7wHd29BRDU?C&4r z?+kTn!f!ua`?FFqb@J+^$$t+O?o~eVBo9aOsYFJ5l1ydIUW zZM{KT{uk&p6XJZxK5tXQ87j^t+ah;t+SN^dFXFsVCSr0-BHHWhiXCXTCUVb9>0>^`nbB&vf=p{5C97Af*Tg)nZQ0+g z&y7Beim>=JZg!fBiA6?JU+`xSBds^-@n&_cv|jw~6(Per;)XQVyXtravrWZO84b6} zlMWnhaZEKV&NzCcyZErq?Q}o+V{PV_VSjwUC~mKnL8a-L4s%pr7{L2JH4|eYG>OI8ZlN~{&zKYl8W2-4o+ z9cjkTn)EnSEq}-3Qtm>yncCwqYX0o?qGP;Pjkvv5N@tDRyXNGjz77|s2`{S+CY#S6 zY4ALf;OvGVaPRq?NH9nJmt^m$pUQ|XGOm0@u!D{0Ej{7G%|A*HyoyRq|jG&??i zviS72jLUbXj4iwCN=7`rrsSE~IHo2_S>y34vwNoWwH*DaD+clWkJcVkxHrmpZBeS4 z-P71|g;l01M^~=ZPk1liy}Nb7rszgD`HqOd_?vB`rug^`C)=1Ly%GGsdf6z`HyY#0 z$6X&)^0?~!wXm{%hwdzLvG-IxRnwfetxMCr`f8&pH;VI^|@F zFlzL#2?=UZ+4~O8n|_ZTx9`BGSK|Kn^%Xtytjr7Y#~m#W95Z{Ed~NDf{?1!78i&DF{tyfC?)@MgJC;X;vkf&Ho@1zN`yPY%o2;JMiNq9&)X8U)AwJhS_9b4pNEHaIaR(*deH;Z?; z;J%}o+a1qyPxJNThRnax(z@TzA^VcpeCxW>(rDFoV$w`rl&$*Imzo-~AB}xX=S&*l z?H1Go{`v^++v6>?ruIKC93B37;pn<@^|Iip&Vj4F0^mK>DzD|iJg77M?@kRO8eV#R z?a?6l;1aTI^?Z1H$QrRMBOd<(p^V>mrJ(8m<&_%trcuHWsW*)SZTsunw*UV} zjqW0nG=fg=oJh=r{nI=Wif0iF&mDT5LaA_g-T4JVibT*K19&Hfa?d>X?><8F26u*G zj5v-YINsOUcnl%g$n!{8C?V0nNvPwH;vnJ z*>bAt_FYBy->M3!qznK0b3?g?g>ZsHYD)buqkEs)U6sR^i=TOo`|IMMP22C872Z0O_oepZ$nw2|# z?B$_GZa=?LGvWU-Yg$F?;5A#9#S{)zU$sziac+c(dCG|Js1t^>g(U)~(7_kOrk!^E zags1o&1SC8NRR%%`csbwh{@hGsZuq~;v6h%lnA4|hTtmLJv6pSXplAs>?qAFC9y%$c$`20 zR!ABq5U>~zB%Ksco&rl*Y(AEjIE?RUfi6Il#H&cdXdniG5dsm)1A<^Eu!_=Sp`j5r zmV|fu2%iZd3052#3tg@yz3!!G5z+z<8!MuqHG(uAMKY2GL{ejE5ltd6fq)P&=y?bT zA%W}z@aO^XMA(@N2u{)<>HBpB0+N7&ktmFk6c#}6M7R!;947YyA&JSjKq%2>>G=rw zh^|3WP<8>qBf&Btd=?M{MWQ-Gz(&x0z#0;BBef3#7>M!!1Pjw?fMN8(8sG?#`Ct*0 zW+?L@DW{37D?;T(a=enR>Ifdop}GL(1>-$I2%%dRG8Uv9qXh<|d?uj6ILa4NDBw_9 zNYH)k+(?$e_68;q!y{;J0N4QgfNJ8{J_eYN6yWobAo=K6Fikj&#OWgkppT^S`6vLQ zYk&&kFad#`8@MA3CKNJ=EdhxnSsccob_4Keh{BOG7edH~!9)xOqXaB^z62!@U@#g2 zTXa4sUV_m_ffd8>z7*(|mS+kgO$?90&yoh`gW++Qe}ni}QXOA<4X7WAtw9fPmQX|# zTSG+P>w*u(WSkyA?r9NJdO>J`Yzm`=fs@1VCY7xN<$8W@I}NC7*9nkbh$(Dz|>*d#unkQ9I01>#%n2o#y)=Cg=wLK+3>sU2o2GI5 z!m+qd;Y7F{Cn(GZK=gw79x$DlUj-N@2PF71lz-4^N`#&{L_?Urglf!~pN6{zEG_}l zj@c`cAkkO~JUofnSdwH1@LQ0ZBfN*`K+;%1>O4q@n@~A`a0uFTp?EBI<|Ii-dN4}Q z2h2jx93o6CmIoMi=1?;o%QZ+6k0T%+!etzKCSYeYKpY0qJ$`QBk1)PK;)C&z5)1$% zuviabILzlkngUl22(Ksx^9$exFk>{mjcs{ z+H49^dkhckF1j}wl1_9DXu5{^c(|6s@+e46vABeWZg8j!(J&a51IXww{h%2dJ2x6! zC~9+Pmcs5vAlk)z0NghU(ET!CV^R8m6wIG9kV~RAhk@__-3KF4OhkVf$mvj?G89-q z6c1uY438FKF&6`jLC+Gb3wD+e*#|@GFc<()7zZbZ!EiqTo9yXRG@H-E%IG8d$W)>qWZxKLGqEk zu|hEJ7!1E_flL>tg<>(g2DgNmT(RJf&@*D;8VQwC7OrVf-m@a8TZz)gg7#xD5tbXU zkXB&xaUzU=90Ysld>oiHls*pljOr0^3fnISxhZOgIEWcg9)QV~w2zXC!+>OrryN6J z@g&@oVlo7`o%lXPxV-}Ri{=%Q>n3y`gh0rk{t{puYGWZPmNX2N+6TaBRA&Gt8UO~| zN5?`6ft(v$iwaQr0~mHcF1bEMZJp#635^{A2A&387Y-QF4@j68_&!T|Z@?_n4-ydR zp?4VogBq&nSctQ+`M`akv_Nw}^vosKW~e`h>qIy?bPb9@V-UcD&7pWSgRe_tx(|sJ z&OZWtH#Q&mZuBe(7Rx^f_zDi^9|slzp$~F8RA-<|4vUQ?VMat(Arhczl=mQ2XeFz~fL|mGnuJG$8(7_aQO^V~oMDm>=*kn+?}+ znBNB&jh(L$zVb%-3|fT7@{lZG@fyHHIDHTzq5K0eMeo8TH@>KkB7_VUI|2;L2jS8i z)Eear3%4T(jDkxP3d8lW=hJtkcGfB=5O3kmXqpAo=s z^vsN1Rz^s^H-uj(I0puXz%LJg6v^)c>;rrQp|A2kKQago@d^t0@?9d##E3{a0|Of; HTe<%M!^)TA literal 0 HcmV?d00001 From c1eb43fcefa77cf6ee92746ab93647a81a2e69a9 Mon Sep 17 00:00:00 2001 From: M-Jafarkhani Date: Wed, 15 Jan 2025 20:21:04 +0100 Subject: [PATCH 6/6] Update readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d1f6b737..15be3317 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,9 @@ Please follow the instructions in [python_testing_exercise.md](https://github.co | Unit Test | pytest |initialize_domain|[Link](log/failed_test_initialize_domain.log) | | Unit Test | pytest |initialize_physical_parameters|[Link](log/failed_test_initialize_physical_parameters.log) | | Unit Test | pytest |set_initial_condition|[Link](log/failed_test_set_initial_condition.log) | -| Unit Test | UnitTest |initialize_domain|[Link](log/failed_unittest_initialize_domain.log) | -| Unit Test | UnitTest |initialize_physical_parameters|[Link](log/failed_unittest_initialize_physical_parameters.log) | -| Unit Test | UnitTest |set_initial_condition|[Link](log/failed_unittest_set_initial_condition.log) | +| Unit Test | unittest |initialize_domain|[Link](log/failed_unittest_initialize_domain.log) | +| Unit Test | unittest |initialize_physical_parameters|[Link](log/failed_unittest_initialize_physical_parameters.log) | +| Unit Test | unittest |set_initial_condition|[Link](log/failed_unittest_set_initial_condition.log) | | Integration Test | pytest |initialize_physical_parameters|[Link](log/failed_intergration_initialize_physical_parameters.log) | | Integration Test | pytest |set_initial_condition|[Link](log/failed_intergration_test_set_initial_condition.log) |