From d530515ce592171bfda7d8ba181bb91b5144eb03 Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 31 Aug 2025 12:15:58 -0400 Subject: [PATCH 01/13] MAINT: Update logo with brighter blue color New blue looks better in dark mode. logo_plot now also generates the full logo rather than just the curve. --- docs/images/logo.png | Bin 92316 -> 81443 bytes tools/logo_plot.py | 52 ++++++++++++++++++++++++++++++------------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/docs/images/logo.png b/docs/images/logo.png index 99989a252a1fe56aafa502f77afb5a11b1e6f47f..0066fe765086bab858df2e29fae691b5b25a69a8 100644 GIT binary patch literal 81443 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 diff --git a/tools/logo_plot.py b/tools/logo_plot.py index 672ca0eb..c4130366 100644 --- a/tools/logo_plot.py +++ b/tools/logo_plot.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -"""Creates the logo plot. - -Creates the plot used for the logo; further edits are done in Inkscape to finalize the logo. +"""Creates the logo for pybaselines. Created on November 15, 2021 @@ -16,6 +14,7 @@ try: import matplotlib.pyplot as plt + from matplotlib import patheffects except ImportError: print('This file requires matplotlib to run') raise @@ -25,11 +24,15 @@ # assumes file is in pybaselines/tools image_directory = Path(__file__).parent - with plt.rc_context( - {'interactive': False, 'lines.linewidth': 2.5, - 'figure.dpi': 300} - ): - fig, ax = plt.subplots(tight_layout={'pad': 0.1}, frameon=False) + figure_dpi = 300 + with plt.rc_context({ + 'font.family': 'sans-serif', + 'font.sans-serif': 'arial', + }): + fig, ax = plt.subplots( + tight_layout={'pad': 0.1}, frameon=False, figsize=(1710 / figure_dpi, 473 / figure_dpi), + dpi=figure_dpi + ) x = np.linspace(1, 1000, 1000) signal = ( @@ -42,15 +45,31 @@ + utils.gaussian(x, 5, 880, 8) ) true_baseline = 2 + 1e-3 * x + utils.gaussian(x, 1, 600, 300) - noise = np.random.default_rng(1).normal(0, 0.05, x.size) + noise = np.random.default_rng(1).normal(0, 0.01, x.size) y = signal + true_baseline + noise baseline = Baseline().arpls(y, lam=1e7)[0] - blue = '#0952ff' + # for reference, see the matplotlib examples + # https://matplotlib.org/stable/gallery/text_labels_and_annotations/rainbow_text.html + # and https://matplotlib.org/stable/gallery/misc/patheffect_demo.html for how to make + # multicolored aligned text with borders + blue = '#137bff' pink = '#ff5255' + text_size = 52 + text_border = [patheffects.withStroke(linewidth=1.5, foreground='black')] + ax.plot(x, y, lw=1.5, color=blue) - ax.plot(x, baseline, lw=4, color=pink) + ax.plot(x, baseline, lw=2, color=pink) + + x_lims = ax.get_xlim() + ax.set_xlim(x_lims[0] - 200, x_lims[1] + 200) + ax.set_ylim(ax.get_ylim()[0] - 5) + text = ax.text(1, -1.8, 'py', color=blue, size=text_size, path_effects=text_border) + text = ax.annotate( + 'baselines', xycoords=text, xy=(1, 0), verticalalignment='bottom', size=text_size, + color=pink, path_effects=text_border + ) ax.set_yticks([]) ax.set_xticks([]) @@ -59,7 +78,10 @@ ax.spines['left'].set_visible(False) ax.spines['right'].set_visible(False) - # save as an svg so that it can be edited/scaled in inkskape without - # losing image quality - fig.savefig(image_directory.joinpath('logo_new.svg'), transparent=True) - plt.close(fig) + # No idea what's happening here, but for the first save, the scaling of the plot gets + # shrunk legthwise such that it does not look like the displayed plot, but after saving + # again it looks correct... just overwrite the first and ignore whatever is causing this + fig.savefig(image_directory.joinpath('logo_new.png'), transparent=True) + fig.savefig(image_directory.joinpath('logo_new.png'), transparent=True) + + plt.show() From 4b450db48781519605b7e68cac092ed8f7c0924f Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 31 Aug 2025 12:19:31 -0400 Subject: [PATCH 02/13] DOCS: Switch to pydata-sphinx-theme for docs --- docs/conf.py | 17 ++++++++++----- docs/index.rst | 3 ++- pyproject.toml | 2 +- requirements/requirements-documentation.txt | 24 +++++++++++++++------ 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 0cda6fdf..f764cd88 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -227,16 +227,23 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # +html_logo = 'images/logo.png' # Theme options are theme-specific and customize the look and feel of a # theme further. For a list of options available for each theme, see the # documentation. try: - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' + import pydata_sphinx_theme + html_theme = 'pydata_sphinx_theme' html_theme_options = { - 'navigation_depth': 5, - 'prev_next_buttons_location': 'both', - } + 'icon_links': [ + { + 'name': 'GitHub', + 'url': 'https://github.com/derb12/pybaselines', + 'icon': 'fa-brands fa-github', + 'type': 'fontawesome', + }, + ], + } except ImportError: html_theme = 'nature' html_theme_options = {} diff --git a/docs/index.rst b/docs/index.rst index a111a75e..8852e4a7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,6 +4,7 @@ pybaselines Documentation .. image:: images/logo.png :alt: Logo :align: center + :class: dark-light pybaselines is a library of algorithms for the baseline correction of experimental data. @@ -22,9 +23,9 @@ pybaselines is a library of algorithms for the baseline correction of experiment installation quickstart parameter_selection - performance algorithms/index algorithms_2d/index + performance generated/examples/index api/index contributing diff --git a/pyproject.toml b/pyproject.toml index f7de4786..ccba352d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -87,7 +87,7 @@ docs = [ "sphinx", "sphinx-copybutton", "sphinx-gallery>=0.16", # first version allowing strings to specify gallery sorting - "sphinx-rtd-theme", + "pydata-sphinx-theme", "matplotlib", "numpydoc", ] diff --git a/requirements/requirements-documentation.txt b/requirements/requirements-documentation.txt index 18c77d8e..c574675e 100644 --- a/requirements/requirements-documentation.txt +++ b/requirements/requirements-documentation.txt @@ -7,14 +7,20 @@ pentapy==1.3.0 sphinx==8.2.3 sphinx-copybutton==0.5.2 sphinx-gallery==0.19.0 -sphinx-rtd-theme==3.0.2 +pydata-sphinx-theme==0.16.1 # Additional transitive dependencies, generated by pip-tools +accessible-pygments==0.0.5 + # via pydata-sphinx-theme alabaster==1.0.0 # via sphinx babel==2.17.0 - # via sphinx + # via + # pydata-sphinx-theme + # sphinx +beautifulsoup4==4.13.5 + # via pydata-sphinx-theme certifi==2025.1.31 # via requests charset-normalizer==3.4.1 @@ -27,8 +33,8 @@ cycler==0.12.1 # via matplotlib docutils==0.21.2 # via + # pydata-sphinx-theme # sphinx - # sphinx-rtd-theme fonttools==4.56.0 # via matplotlib idna==3.10 @@ -52,7 +58,9 @@ pillow==11.1.0 # matplotlib # sphinx-gallery pygments==2.19.1 - # via sphinx + # accessible-pygments + # pydata-sphinx-theme + # sphinx pyparsing==3.2.1 # via matplotlib python-dateutil==2.9.0.post0 @@ -65,14 +73,14 @@ six==1.17.0 # via python-dateutil snowballstemmer==2.2.0 # via sphinx +soupsieve==2.8 + # via beautifulsoup4 sphinxcontrib-applehelp==2.0.0 # via sphinx sphinxcontrib-devhelp==2.0.0 # via sphinx sphinxcontrib-htmlhelp==2.1.0 # via sphinx -sphinxcontrib-jquery==4.1 - # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-qthelp==2.0.0 @@ -81,5 +89,9 @@ sphinxcontrib-serializinghtml==2.0.0 # via sphinx tabulate==0.9.0 # via numpydoc +typing-extensions==4.15.0 + # via + # beautifulsoup4 + # pydata-sphinx-theme urllib3==2.3.0 # via requests From e474288dd443be9003565d710feec438bd9f179a Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 31 Aug 2025 12:22:10 -0400 Subject: [PATCH 03/13] DOCS: Use different symbol for transpose in equations --- docs/algorithms/morphological.rst | 4 ++-- docs/algorithms/spline.rst | 28 ++++++++++++++-------------- docs/algorithms/whittaker.rst | 26 +++++++++++++------------- docs/algorithms_2d/spline_2d.rst | 10 +++++----- docs/algorithms_2d/whittaker_2d.rst | 8 ++++---- 5 files changed, 38 insertions(+), 38 deletions(-) diff --git a/docs/algorithms/morphological.rst b/docs/algorithms/morphological.rst index 2cfe47ca..540d1878 100644 --- a/docs/algorithms/morphological.rst +++ b/docs/algorithms/morphological.rst @@ -419,11 +419,11 @@ linear equations: .. math:: - (I + 2 \gamma D_d^{\top} D_d) s^n = y - v^{n-1} + (I + 2 \gamma D_d^{\mathsf{T}} D_d) s^n = y - v^{n-1} .. math:: - (I + 2 \alpha I + 2 \beta D_d^{\top} D_d) v^n = y - s^n + 2 \alpha Op + (I + 2 \alpha I + 2 \beta D_d^{\mathsf{T}} D_d) v^n = y - s^n + 2 \alpha Op where :math:`I` is the identity matrix and :math:`D_d` is the matrix version of :math:`\Delta^d`, which is also the d-th derivative of the identity matrix. diff --git a/docs/algorithms/spline.rst b/docs/algorithms/spline.rst index 714dbc69..8b86abc4 100644 --- a/docs/algorithms/spline.rst +++ b/docs/algorithms/spline.rst @@ -45,7 +45,7 @@ The resulting linear equation for solving the above minimization is: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y where :math:`W` is the diagaonal matrix of the weights, :math:`B` is the matrix containing all of the spline basis functions, and :math:`D_d` is the matrix @@ -263,7 +263,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -312,8 +312,8 @@ Linear system: .. math:: - (B^{\top} W^{\top} W B + \lambda_1 B^{\top} D_1^{\top} D_1 B + \lambda D_d^{\top} D_d) c - = (B^{\top} W^{\top} W B + \lambda_1 B^{\top} D_1^{\top} D_1) y + (B^{\mathsf{T}} W^{\mathsf{T}} W B + \lambda_1 B^{\mathsf{T}} D_1^{\mathsf{T}} D_1 B + \lambda D_d^{\mathsf{T}} D_d) c + = (B^{\mathsf{T}} W^{\mathsf{T}} W B + \lambda_1 B^{\mathsf{T}} D_1^{\mathsf{T}} D_1) y Weighting: @@ -364,7 +364,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -413,7 +413,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -463,7 +463,7 @@ Linear system: .. math:: - (B^{\top}W B + D_1^{\top} D_1 + \lambda (I - \eta W_{intp}) D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}}W B + D_1^{\mathsf{T}} D_1 + \lambda (I - \eta W_{intp}) D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y where :math:`I` is the identity matrix. @@ -513,7 +513,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -573,7 +573,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda \alpha_{intp} D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda \alpha_{intp} D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -626,7 +626,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -673,7 +673,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -735,7 +735,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -780,7 +780,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: @@ -835,7 +835,7 @@ Linear system: .. math:: - (B^{\top} W B + \lambda D_d^{\top} D_d) c = B^{\top} W y + (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y Weighting: diff --git a/docs/algorithms/whittaker.rst b/docs/algorithms/whittaker.rst index 78cd3ff0..945cff95 100644 --- a/docs/algorithms/whittaker.rst +++ b/docs/algorithms/whittaker.rst @@ -31,7 +31,7 @@ The resulting linear equation for solving the above minimization is: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y .. _difference-matrix-explanation: @@ -94,7 +94,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -247,8 +247,8 @@ Linear system: .. math:: - (W^{\top} W + \lambda_1 D_1^{\top} D_1 + \lambda D_d^{\top} D_d) v - = (W^{\top} W + \lambda_1 D_1^{\top} D_1) y + (W^{\mathsf{T}} W + \lambda_1 D_1^{\mathsf{T}} D_1 + \lambda D_d^{\mathsf{T}} D_d) v + = (W^{\mathsf{T}} W + \lambda_1 D_1^{\mathsf{T}} D_1) y Weighting: @@ -299,7 +299,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -342,7 +342,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -392,7 +392,7 @@ Linear system: .. math:: - (W + D_1^{\top} D_1 + \lambda (I - \eta W) D_d^{\top} D_d) v = W y + (W + D_1^{\mathsf{T}} D_1 + \lambda (I - \eta W) D_d^{\mathsf{T}} D_d) v = W y where :math:`I` is the identity matrix. @@ -443,7 +443,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -496,7 +496,7 @@ Linear system: .. math:: - (W + \lambda \alpha D_d^{\top} D_d) v = W y + (W + \lambda \alpha D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -543,7 +543,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -590,7 +590,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -652,7 +652,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: @@ -713,7 +713,7 @@ Linear system: .. math:: - (W + \lambda D_d^{\top} D_d) v = W y + (W + \lambda D_d^{\mathsf{T}} D_d) v = W y Weighting: diff --git a/docs/algorithms_2d/spline_2d.rst b/docs/algorithms_2d/spline_2d.rst index 2480d703..1506be82 100644 --- a/docs/algorithms_2d/spline_2d.rst +++ b/docs/algorithms_2d/spline_2d.rst @@ -43,7 +43,7 @@ solving the above minimization is: .. math:: - (B^{\top} W_{diag} B + \lambda_r I_h \otimes D_{d_r}^{\top} D_{d_r} + \lambda_c D_{d_c}^{\top} D_{d_c} \otimes I_g) \alpha = B^{\top} W_{diag} y + (B^{\mathsf{T}} W_{diag} B + \lambda_r I_h \otimes D_{d_r}^{\mathsf{T}} D_{d_r} + \lambda_c D_{d_c}^{\mathsf{T}} D_{d_c} \otimes I_g) \alpha = B^{\mathsf{T}} W_{diag} y and the baseline is then: @@ -68,20 +68,20 @@ memory and computation time. Let :math:`F` be the `face-splitting product operator `_ -of a matrix with itself such that :math:`F(B_r) = (B_r \otimes 1_{g}^{\top}) \odot (1_{g}^{\top} \otimes B_r)` -and :math:`F(B_c) = (B_c \otimes 1_{h}^{\top}) \odot (1_{h}^{\top} \otimes B_c)`, where +of a matrix with itself such that :math:`F(B_r) = (B_r \otimes 1_{g}^{\mathsf{T}}) \odot (1_{g}^{\mathsf{T}} \otimes B_r)` +and :math:`F(B_c) = (B_c \otimes 1_{h}^{\mathsf{T}}) \odot (1_{h}^{\mathsf{T}} \otimes B_c)`, where :math:`1_g` and :math:`1_h` are vectors of ones of length :math:`g` and :math:`h`, respecitvely, and :math:`\odot` signifies elementwise multiplication. Then the linear equation can be rewritten as: .. math:: - (F(B_r)^{\top} W F(B_c) + \lambda_r I_h \otimes D_{d_r}^{\top} D_{d_r} + \lambda_c D_{d_c}^{\top} D_{d_c} \otimes I_g) \alpha = B_{r}^{\top} (W \odot Y) B_c + (F(B_r)^{\mathsf{T}} W F(B_c) + \lambda_r I_h \otimes D_{d_r}^{\mathsf{T}} D_{d_r} + \lambda_c D_{d_c}^{\mathsf{T}} D_{d_c} \otimes I_g) \alpha = B_{r}^{\mathsf{T}} (W \odot Y) B_c and the baseline is: .. math:: - V = B_r \alpha B_{c}^{\top} + V = B_r \alpha B_{c}^{\mathsf{T}} Algorithms diff --git a/docs/algorithms_2d/whittaker_2d.rst b/docs/algorithms_2d/whittaker_2d.rst index 0a546ff4..48ad844a 100644 --- a/docs/algorithms_2d/whittaker_2d.rst +++ b/docs/algorithms_2d/whittaker_2d.rst @@ -32,7 +32,7 @@ The resulting linear equation for solving the above minimization is: .. math:: - (W_{diag} + \lambda_r I_M \otimes D_{d_r}^{\top} D_{d_r} + \lambda_c D_{d_c}^{\top} D_{d_c} \otimes I_M) v = w y + (W_{diag} + \lambda_r I_M \otimes D_{d_r}^{\mathsf{T}} D_{d_r} + \lambda_c D_{d_c}^{\mathsf{T}} D_{d_c} \otimes I_M) v = w y where :math:`W_{diag}` is the diagaonal matrix of the flattened weights, and :math:`D_d` is the matrix @@ -54,7 +54,7 @@ Eigendecomposition By following the excellent insights laid out by G. Biessy in `[2] `_, the dimensionality of the system can be reduced by using eigendecomposition on each of the two -penalty matrices, :math:`D_{d_r}^{\top} D_{d_r}` and :math:`D_{d_c}^{\top} D_{d_c}`. (Note that speeding up +penalty matrices, :math:`D_{d_r}^{\mathsf{T}} D_{d_r}` and :math:`D_{d_c}^{\mathsf{T}} D_{d_c}`. (Note that speeding up Whittaker smoothing using `factorization in 1D `_ and using the `analytical eigenvalues in nD (great paper) `_ are established methods, although they require using a fixed difference order, and, in the second case, of using @@ -63,7 +63,7 @@ The general eigendecomposition of the penalty matrix gives .. math:: - D_{d}^{\top} D_{d} = U \Sigma U^{\top} + D_{d}^{\mathsf{T}} D_{d} = U \Sigma U^{\mathsf{T}} where :math:`U` is the matrix of eigenvectors and :math:`\Sigma` is a diagonal matrix with the eigenvalues along the diagonal. Letting :math:`B = U_c \otimes U_r` denote the Kronecker @@ -73,7 +73,7 @@ can be rewritten as: .. math:: - (B^{\top} W_{diag} B + \lambda_r I_h \otimes \Sigma_r + \lambda_c \Sigma_c \otimes I_g) \alpha = B^{\top} W_{diag} y + (B^{\mathsf{T}} W_{diag} B + \lambda_r I_h \otimes \Sigma_r + \lambda_c \Sigma_c \otimes I_g) \alpha = B^{\mathsf{T}} W_{diag} y and the baseline is then: From 8cb3d9386b5f4e393161d50d2423df288bd518ac Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 31 Aug 2025 12:23:44 -0400 Subject: [PATCH 04/13] DOCS: Fix indentation for lists --- docs/examples/README.rst | 2 +- docs/installation.rst | 24 +++++++++---------- docs/parameter_selection.rst | 36 ++++++++++++++-------------- pybaselines/polynomial.py | 42 ++++++++++++++++----------------- pybaselines/two_d/polynomial.py | 16 ++++++------- 5 files changed, 60 insertions(+), 60 deletions(-) diff --git a/docs/examples/README.rst b/docs/examples/README.rst index 24f99432..90dba3c5 100644 --- a/docs/examples/README.rst +++ b/docs/examples/README.rst @@ -4,7 +4,7 @@ Examples This section shows various uses of pybaselines. -To run the examples, `Matplotlib `_ must be installed, +To run the examples locally, `Matplotlib `_ must be installed, which can be done by running: .. code-block:: console diff --git a/docs/installation.rst b/docs/installation.rst index 7a749037..e0db316c 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -25,23 +25,23 @@ pybaselines has the following optional dependencies: * `Numba `_ (>= 0.53): speeds up calculations used by the following functions: - * :meth:`~.Baseline.loess` - * :meth:`~.Baseline.dietrich` - * :meth:`~.Baseline.golotvin` - * :meth:`~.Baseline.std_distribution` - * :meth:`~.Baseline.fastchrom` - * :meth:`~.Baseline.beads` - * :meth:`~.Baseline.mpspline` - * all :ref:`spline ` methods + * :meth:`~.Baseline.loess` + * :meth:`~.Baseline.dietrich` + * :meth:`~.Baseline.golotvin` + * :meth:`~.Baseline.std_distribution` + * :meth:`~.Baseline.fastchrom` + * :meth:`~.Baseline.beads` + * :meth:`~.Baseline.mpspline` + * all :ref:`spline ` methods * `pentapy `_ (>= 1.1): provides a faster solver for banded pentadiagonal linear systems, which are used by the following functions (when ``diff_order=2``): - * all :ref:`Whittaker smoothing ` methods - * :meth:`~.Baseline.mpls` - * :meth:`~.Baseline.jbcd` - * :meth:`~.Baseline.fabc` + * all :ref:`Whittaker smoothing ` methods + * :meth:`~.Baseline.mpls` + * :meth:`~.Baseline.jbcd` + * :meth:`~.Baseline.fabc` Stable Release diff --git a/docs/parameter_selection.rst b/docs/parameter_selection.rst index ad4cdb35..944d459f 100644 --- a/docs/parameter_selection.rst +++ b/docs/parameter_selection.rst @@ -12,42 +12,42 @@ adjusting for each family of algorithms within pybaselines: * Polynomial methods - * ``poly_order`` controls the curvature of the baseline. + * ``poly_order`` controls the curvature of the baseline. * Whittaker-smoothing-based methods - * ``lam`` controls the curvature of the baseline. See - :ref:`this example ` - to get an idea of how ``lam`` effects the baseline. The optimal ``lam`` - value for each algorithm is not typically the same. + * ``lam`` controls the curvature of the baseline. See + :ref:`this example ` + to get an idea of how ``lam`` effects the baseline. The optimal ``lam`` + value for each algorithm is not typically the same. * Morphological methods - * ``half_window`` controls the general fit of the baseline. See - :ref:`this example ` - to get an idea of how ``half_window`` effects the baseline. The optimal - ``half_window`` value for each algorithm is not typically the same. + * ``half_window`` controls the general fit of the baseline. See + :ref:`this example ` + to get an idea of how ``half_window`` effects the baseline. The optimal + ``half_window`` value for each algorithm is not typically the same. * Spline methods - * ``lam`` controls the curvature of the baseline. The - :ref:`Whittaker example ` - also generally applies to spline methods. + * ``lam`` controls the curvature of the baseline. The + :ref:`Whittaker example ` + also generally applies to spline methods. * Smoothing-based methods - * ``half_window`` controls the general fit of the baseline. The - :ref:`Morphological example ` - also generally applies to smoothing methods. + * ``half_window`` controls the general fit of the baseline. The + :ref:`Morphological example ` + also generally applies to smoothing methods. * Baseline/Peak Classification methods - * Algorithm dependent + * Algorithm dependent * Optimizers - * Algorithm dependent + * Algorithm dependent * Miscellaneous methods - * Algorithm dependent + * Algorithm dependent diff --git a/pybaselines/polynomial.py b/pybaselines/polynomial.py index 01196004..49efdfb8 100644 --- a/pybaselines/polynomial.py +++ b/pybaselines/polynomial.py @@ -378,16 +378,16 @@ def penalized_poly(self, data, poly_order=2, tol=1e-3, max_iter=250, weights=Non size equal to N and all values set to 1. cost_function : str, optional The non-quadratic cost function to minimize. Must indicate symmetry of the - method by appending 'a' or 'asymmetric' for asymmetric loss, and 's' or + method by prepending 'a' or 'asymmetric' for asymmetric loss, and 's' or 'symmetric' for symmetric loss. Default is 'asymmetric_truncated_quadratic'. Available methods, and their associated reference, are: - * 'asymmetric_truncated_quadratic'[1]_ - * 'symmetric_truncated_quadratic'[1]_ - * 'asymmetric_huber'[1]_ - * 'symmetric_huber'[1]_ - * 'asymmetric_indec'[2]_ - * 'symmetric_indec'[2]_ + * 'asymmetric_truncated_quadratic'[1]_ + * 'symmetric_truncated_quadratic'[1]_ + * 'asymmetric_huber'[1]_ + * 'symmetric_huber'[1]_ + * 'asymmetric_indec'[2]_ + * 'symmetric_indec'[2]_ threshold : float, optional The threshold value for the loss method, where the function goes from @@ -761,7 +761,7 @@ def quant_reg(self, data, poly_order=2, quantile=0.05, tol=1e-6, max_iter=250, Notes ----- - Application of quantile regression for baseline fitting ss described in [1]_. + Application of quantile regression for baseline fitting as described in [1]_. Performs quantile regression using iteratively reweighted least squares (IRLS) as described in [2]_. @@ -833,9 +833,9 @@ def goldindec(self, data, poly_order=2, tol=1e-3, max_iter=250, weights=None, ('a' or 'asymmetric') is optional (eg. 'indec' and 'a_indec' are the same). Default is 'asymmetric_indec'. Available methods, and their associated reference, are: - * 'asymmetric_indec'[1]_ - * 'asymmetric_truncated_quadratic'[2]_ - * 'asymmetric_huber'[2]_ + * 'asymmetric_indec'[1]_ + * 'asymmetric_truncated_quadratic'[2]_ + * 'asymmetric_huber'[2]_ peak_ratio : float, optional A value between 0 and 1 that designates how many points in the data belong @@ -1421,16 +1421,16 @@ def penalized_poly(data, x_data=None, poly_order=2, tol=1e-3, max_iter=250, size equal to N and all values set to 1. cost_function : str, optional The non-quadratic cost function to minimize. Must indicate symmetry of the - method by appending 'a' or 'asymmetric' for asymmetric loss, and 's' or + method by prepending 'a' or 'asymmetric' for asymmetric loss, and 's' or 'symmetric' for symmetric loss. Default is 'asymmetric_truncated_quadratic'. Available methods, and their associated reference, are: - * 'asymmetric_truncated_quadratic'[7]_ - * 'symmetric_truncated_quadratic'[7]_ - * 'asymmetric_huber'[7]_ - * 'symmetric_huber'[7]_ - * 'asymmetric_indec'[8]_ - * 'symmetric_indec'[8]_ + * 'asymmetric_truncated_quadratic'[7]_ + * 'symmetric_truncated_quadratic'[7]_ + * 'asymmetric_huber'[7]_ + * 'symmetric_huber'[7]_ + * 'asymmetric_indec'[8]_ + * 'symmetric_indec'[8]_ threshold : float, optional The threshold value for the loss method, where the function goes from @@ -2189,9 +2189,9 @@ def goldindec(data, x_data=None, poly_order=2, tol=1e-3, max_iter=250, weights=N ('a' or 'asymmetric') is optional (eg. 'indec' and 'a_indec' are the same). Default is 'asymmetric_indec'. Available methods, and their associated reference, are: - * 'asymmetric_indec'[18]_ - * 'asymmetric_truncated_quadratic'[19]_ - * 'asymmetric_huber'[19]_ + * 'asymmetric_indec'[18]_ + * 'asymmetric_truncated_quadratic'[19]_ + * 'asymmetric_huber'[19]_ peak_ratio : float, optional A value between 0 and 1 that designates how many points in the data belong diff --git a/pybaselines/two_d/polynomial.py b/pybaselines/two_d/polynomial.py index 8faf6edb..48ae2c71 100644 --- a/pybaselines/two_d/polynomial.py +++ b/pybaselines/two_d/polynomial.py @@ -372,16 +372,16 @@ def penalized_poly(self, data, poly_order=2, tol=1e-3, max_iter=250, weights=Non shape equal to (M, N) and all values set to 1. cost_function : str, optional The non-quadratic cost function to minimize. Must indicate symmetry of the - method by appending 'a' or 'asymmetric' for asymmetric loss, and 's' or + method by prepending 'a' or 'asymmetric' for asymmetric loss, and 's' or 'symmetric' for symmetric loss. Default is 'asymmetric_truncated_quadratic'. Available methods, and their associated reference, are: - * 'asymmetric_truncated_quadratic'[1]_ - * 'symmetric_truncated_quadratic'[1]_ - * 'asymmetric_huber'[1]_ - * 'symmetric_huber'[1]_ - * 'asymmetric_indec'[2]_ - * 'symmetric_indec'[2]_ + * 'asymmetric_truncated_quadratic'[1]_ + * 'symmetric_truncated_quadratic'[1]_ + * 'asymmetric_huber'[1]_ + * 'symmetric_huber'[1]_ + * 'asymmetric_indec'[2]_ + * 'symmetric_indec'[2]_ threshold : float, optional The threshold value for the loss method, where the function goes from @@ -547,7 +547,7 @@ def quant_reg(self, data, poly_order=2, quantile=0.05, tol=1e-6, max_iter=250, Notes ----- - Application of quantile regression for baseline fitting ss described in [1]_. + Application of quantile regression for baseline fitting as described in [1]_. Performs quantile regression using iteratively reweighted least squares (IRLS) as described in [2]_. From 37a93780bdbfcbed745f838e7d993302637fb2c9 Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 31 Aug 2025 12:47:14 -0400 Subject: [PATCH 05/13] DOCS: Fix typo --- docs/algorithms/polynomial.rst | 6 +++--- docs/algorithms_2d/polynomial_2d.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/algorithms/polynomial.rst b/docs/algorithms/polynomial.rst index 105c6b17..3f528e65 100644 --- a/docs/algorithms/polynomial.rst +++ b/docs/algorithms/polynomial.rst @@ -25,7 +25,7 @@ However, since only the baseline of the data is desired, the least-squares approach must be modified. For polynomial-based algorithms, this is done by 1) only fitting the data in regions where there is only baseline (termed selective masking), 2) modifying the y-values being fit each iteration, termed -thresholding, or 3) penalyzing outliers. +thresholding, or 3) penalizing outliers. .. _selective-masking-explanation: @@ -176,10 +176,10 @@ The figure below illustrates the iterative thresholding. The algorithms in pybaselines that use thresholding are :meth:`~.Baseline.modpoly`, :meth:`~.Baseline.imodpoly`, and :meth:`~.Baseline.loess` (if ``use_threshold`` is True). -Penalyzing Outliers +Penalizing Outliers ~~~~~~~~~~~~~~~~~~~ -The algorithms in pybaselines that penalyze outliers are +The algorithms in pybaselines that penalize outliers are :meth:`~.Baseline.penalized_poly`, which incorporate the penalty directly into the minimized cost function, and :meth:`~.Baseline.loess` (if ``use_threshold`` is False), which incorporates penalties by applying lower weights to outliers. Refer diff --git a/docs/algorithms_2d/polynomial_2d.rst b/docs/algorithms_2d/polynomial_2d.rst index 064c5b28..cd0845dc 100644 --- a/docs/algorithms_2d/polynomial_2d.rst +++ b/docs/algorithms_2d/polynomial_2d.rst @@ -27,7 +27,7 @@ the polynomial estimate at :math:`x_i`, and :math:`z_j` and :math:`w_{ij}` is th However, since only the baseline of the data is desired, the least-squares approach must be modified. For polynomial-based algorithms, this is done by 1) only fitting the data in regions where there is only baseline, 2) -modifying the y-values being fit each iteration, or 3) penalyzing outliers. +modifying the y-values being fit each iteration, or 3) penalizing outliers. .. note:: For two dimensional data, polynomial algorithms take a single ``poly_order`` From 353e96e3a31b87dde98c3fd1678667adcf3b4939 Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Mon, 1 Sep 2025 18:22:40 -0400 Subject: [PATCH 06/13] DOCS: Add animation showing iterative reweighting --- docs/algorithms/polynomial.rst | 15 ++--- docs/algorithms/spline.rst | 5 +- docs/algorithms/whittaker.rst | 109 +++++++++++++++++++++++++++++++-- 3 files changed, 115 insertions(+), 14 deletions(-) diff --git a/docs/algorithms/polynomial.rst b/docs/algorithms/polynomial.rst index 3f528e65..6ed21762 100644 --- a/docs/algorithms/polynomial.rst +++ b/docs/algorithms/polynomial.rst @@ -142,9 +142,9 @@ Thresholding ~~~~~~~~~~~~ Thresholding is an iterative method that first fits the data using -traditional least-squares, and then sets the next iteration's fit data +traditional least-squares and then sets the next iteration's data-to-fit as the element-wise minimum between the current data and the current fit. -The figure below illustrates the iterative thresholding. +The figure below illustrates this iterative thresholding. .. plot:: :align: center @@ -179,11 +179,12 @@ The algorithms in pybaselines that use thresholding are :meth:`~.Baseline.modpol Penalizing Outliers ~~~~~~~~~~~~~~~~~~~ -The algorithms in pybaselines that penalize outliers are -:meth:`~.Baseline.penalized_poly`, which incorporate the penalty directly into the -minimized cost function, and :meth:`~.Baseline.loess` (if ``use_threshold`` is False), -which incorporates penalties by applying lower weights to outliers. Refer -to the particular algorithms below for more details. +The polynomial algorithms in pybaselines that penalize outliers include +:meth:`~.Baseline.penalized_poly`, which incorporates the penalty directly into the +minimized cost function, and :meth:`~.Baseline.loess` (if ``use_threshold`` is False) +and :meth:`~.Baseline.quant_reg`, which use +:ref:`iterative reweighting ` to apply lower weights +to outliers. Refer to the particular algorithms below for more details. Algorithms diff --git a/docs/algorithms/spline.rst b/docs/algorithms/spline.rst index 8b86abc4..b7950790 100644 --- a/docs/algorithms/spline.rst +++ b/docs/algorithms/spline.rst @@ -51,8 +51,9 @@ where :math:`W` is the diagaonal matrix of the weights, :math:`B` is the matrix containing all of the spline basis functions, and :math:`D_d` is the matrix version of :math:`\Delta^d` (same as :ref:`explained ` for Whittaker-smoothing-based algorithms). P-splines have similarities with Whittaker -smoothing; in fact, if the number of basis functions, :math:`M`, is set up to be equal -to the number of data points, :math:`N`, and the spline degree is set to 0, then +smoothing, including the use of :ref:`iterative reweighting ` +to calculate the baseline; in fact, if the number of basis functions, :math:`M`, is set up to +be equal to the number of data points, :math:`N`, and the spline degree is set to 0, then :math:`B` becomes the identity matrix and the above equation becomes identical to the equation used for Whittaker smoothing. diff --git a/docs/algorithms/whittaker.rst b/docs/algorithms/whittaker.rst index 945cff95..dd2dccba 100644 --- a/docs/algorithms/whittaker.rst +++ b/docs/algorithms/whittaker.rst @@ -61,11 +61,110 @@ and :math:`D_2` (second order difference matrix) is: Most Whittaker-smoothing-based techniques recommend using the second order difference matrix, although some techniques use both the first and second order difference matrices. -The baseline is iteratively calculated using the linear system above by solving for -the baseline, :math:`v`, updating the weights, solving for the baseline using the new -weights, and repeating until some exit criteria. -The difference between Whittaker-smoothing-based algorithms is the selection of weights -and/or the function that is minimized. +.. _iterative-reweighting-explanation: + +Baseline algorithms based on Whittaker smoothing use +`iterative reweighting `_, +in which the baseline, :math:`v`, is calculated by solving the linear equation above, updating the +weights based on that baseline, solving for a new baseline using the new weights, and repeating +until some exit criteria. The major difference between Whittaker-smoothing-based algorithms is the +selection of weights and/or the function that is minimized. An example of this process is shown +below using the :meth:`~.Baseline.arpls` method. + +.. plot:: + :align: center + :context: reset + :include-source: False + :nofigs: + + from pathlib import Path + + import matplotlib.animation as animation + import matplotlib.pyplot as plt + import numpy as np + + from pybaselines import Baseline, utils + + x = np.linspace(1, 1000, 1000) + signal = ( + utils.gaussian(x, 4, 120, 5) + + utils.gaussian(x, 5, 220, 12) + + utils.gaussian(x, 5, 350, 10) + + utils.gaussian(x, 7, 400, 8) + + utils.gaussian(x, 4, 550, 6) + + utils.gaussian(x, 5, 660, 14) + + utils.gaussian(x, 4, 750, 12) + + utils.gaussian(x, 5, 880, 8) + ) + true_baseline = 2 + 10 * np.exp(-x / 400) + noise = np.random.default_rng(1).normal(0, 0.2, x.size) + + y = signal + true_baseline + noise + + baseline_fitter = Baseline(x_data=x) + tol = 1e-3 + lam = 1e5 + + # do a complete fit once to figure out how many iterations (ie. frames) are required + _, params_complete = baseline_fitter.arpls(y, lam=lam, tol=tol) + max_frames = len(params_complete['tol_history']) + + # do an initial fit to get axes set up + fit, params = baseline_fitter.arpls(y, lam=lam, max_iter=0, tol=tol) + fig, (ax, ax2, ax3) = plt.subplots(nrows=3, tight_layout=True) + + ax.plot(x, y, label='data') + baseline_plot = ax.plot(x, fit, label='baseline')[0] + weight_plot = ax2.plot(x, np.ones_like(y), 'r.')[0] + tol_plot = ax3.plot(1, params['tol_history'], 'o-')[0] + ax3.axhline(tol, linestyle='--', color='k', label='Exit tolerance') + + ax.set_xlabel('x') + ax.legend() + ax2.set(ylim=[-0.1, 1.1], ylabel='Weights', xlabel='x') + ax3.set( + xlim=[0, max_frames + 1], ylim=[tol / 10, params_complete['tol_history'].max() * 10], + ylabel='Tolerance', xlabel='Iteration' + ) + ax3.semilogy() + ax3.legend() + + def update_lines(frame): + # frame == max number of iterations + fit, params = baseline_fitter.arpls(y, lam=lam, max_iter=frame, tol=tol) + baseline_plot.set_ydata(fit) + # until convergence, output weights actually correspond to iteration `frame + 1`, + # so do a second fit using `frame - 1` to get the correct weights for this frame + if frame == 0: + weight_plot.set_ydata(np.ones_like(y)) + else: + _, params_weights = baseline_fitter.arpls(y, lam=lam, max_iter=frame - 1, tol=tol) + weight_plot.set_ydata(params_weights['weights']) + changed_lines = [baseline_plot, weight_plot] + if len(params['tol_history']) == frame + 1: # in case tolerance was reached early + tol_plot.set_xdata(np.arange(frame + 1) + 1) + tol_plot.set_ydata(params['tol_history']) + changed_lines.append(tol_plot) + + return changed_lines + + # matplotlib's `plot` directive does not display gifs, so save the generated + # gif instead and then embed it below + ani = animation.FuncAnimation( + fig=fig, func=update_lines, frames=max_frames, blit=True, interval=500 + ) + if Path.cwd().stem == 'algorithms': # within documentation, so just save the gif + output_path = Path('../generated/images') + output_path.mkdir(exist_ok=True, parents=True) + ani.save(output_path.joinpath('iterative_reweighting.gif')) + plt.close(fig) + else: # downloaded, so show the plot rather than saving + plt.show() + +.. image:: ../generated/images/iterative_reweighting.gif + :alt: Iterative Reweighting + :align: center + .. note:: The :math:`\lambda` (``lam``) value required to fit a particular baseline for all From 43cf24dd2caee8926e8d12399e5e1c5ef9cc976d Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sat, 13 Sep 2025 18:39:10 -0400 Subject: [PATCH 07/13] MAINT: Update logo with thicker lines --- docs/images/logo.png | Bin 81443 -> 85284 bytes tools/logo_plot.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/images/logo.png b/docs/images/logo.png index 0066fe765086bab858df2e29fae691b5b25a69a8..7814a29fb892bd48603f60e32289032cb9cb2e79 100644 GIT binary patch literal 85284 zcmZ5|2{_d2`##2U5EGHek}cVWWZ#R*PPQ2uOCcf5V5|{IT973~*~&hQrKToZBgitg`7r&*acn+3A+&F#b9|M1a&1a-NcnLeo#3`780VYZN#~5B>5X!*Fz+h^8(mwpr z{CL<^Bs_0-cSHo!d-{3JRF;H})uYc?)1L`K@iWZ|3Rk=?aIW{l8X=sGwVVc_+0y2m zBJn=r?5Q@V*cGM3#hbe;U{qHrr`(sX41Q!vcFPr<2>$sd@BP+h_#2}q@4tPHx?=hy zXRD`1=W;t1(1f3NIzx zU4HRAMIb@oNzm1H5>IC`peR$QL@z^FOgMD$0_6*5#M+SW6|kzdAiM1U?VV;sRL;jd?nk+k zhQ?A8YzmMVCS>dP;Olur117gMNRxAtrLnQ6)IXb>blp zHqG$#`freH&UrjwJ1i{zUB=9?p&iS|SD&EYEqs+Fn22r%s(sWl*MBoE_(0Eq_p1E6 z0G=gPkHB)2h70k$yjb!rh7HCOv9Hv!!XQf4XiYF_JKKK@!c^;krb^sS(?{rKb9Vy? zCO9NmWOi4fIu0xf@sAy)72A*bt5rShA$RkpdAm>$*V4sm6*AMnhYtPwp*x$5S`-%c zAIs^?>(VNDc`lvma4CHbU>K7BuK9*tEcnRJZQ4f^HyJtOBzs2fX{#Jc`u9{%4ahXy zOR{dbYqFVdHytVf7I`}bm~6YrzxyGc%$>YqJ6hHiQeXLI;nIH0Ibd7%dH=km0_-RI zqX303v$b<8<7Xu$B!%Iv&q+tsX%k}mXS0fJW!w!&i|5?q>(;h|SS2O49C-Cb@IDf!3dxgaZ1O|mc@!pY3uSzxXQbSDmhFwHrxZ9K?teVm zMAT(f8%L2jUI>J=VL}#AcFa}>!cY|3FAJQuA_AEGu z!uE)R`Q|`;Tz`p<5D!n?B4j%L<$*N~Ndwu*5Bsht2Vhg=c{EH}tp10b3Bi}O&>xqo4Z`6GpaV#n}J}EK)r1d#wJ5h!hm#Q;;FFC|sH3dW>H;%Exq%7%FRrLj*+Lkwa-ZG~ znQKc0rlmWUym$JQuoKNFhkj|<$0gXN~3 zOObv#@`UC96|lMAj^c}{MSTr@4ku8Ay655>jPkK!5Cax{hNc4>s*AN^i{G5To$I{7 zg^LtftMJJ=ZCvb2KOlX z+<44eXgCa|gZiWCmd|x{-$uRIJEym3(`l!8>__m@3MSf1Lx!IMSF)dwwD|0!M*gzN z=%zH8_gTuEs;%A{E%JkHk|V;5{fC|B*j*hhN2cr!Xf<2FqkzF@-Gr*vOs`zSST^C5 z<~K#p12!3J81;LH1VmmXUFPWM<%m!(F;J<1kbjgX#<>uynAc^&F&w8E^(_;p?O4t@ zd63!*GDPnVRZEpc`m%AGqOM5{=8K`E-)n2HGm0e#eqs8(6WhPZ=%RM`(a?R6maCMr zzIa!CWSv(ft6wE$ilL4!%FciDw_stQ6)_oYBI~jY~x!u<=v~(Zle>8|VWF z(sg=Ti?YeieRkI7sx55hz&+qBaul{Ep>XE#du^8j8S z&W4-ZxLeo1O7?tO)0=I`T|-{ST9(sRpt6^1?^7cT{a8NMSot2YeZeihx$1}+Ko(oX z5Ff_%LxOugora?Bi7obpyD0cv@nM0JQ?OIXzk?4ZTEV_9ArhaAI1ReIFj}}Yga!~) za4!V)ETwb2cr^-uj3?NXbmSM`2iN7(R5lo~vAb68a7$uh98}G>{Kyut7sUi!mc$)r z9o!`f*}>MjuXH)3enjT@{)+RkSBD?gg&`GfG(a4&ze{&nG_O)u3_79Fho#TdUDNgz zlKkR#P8|&kN*YisD3?Bs4CK6Nj5Po!o~{S1R-Z(BHA9xpk49Ii<9W+0F~lV1HObX( zX~NibJwne{@>?)%TlKw7o@F+f^fW2?nmwf9hZ<(v9zsN=ioJ9Fj501214wSsvQRQ% z{Mryy6PB=JmfSHOa#pa{rIeld1w}5oZ(JeVm1*lT1ZLrGU|Rr!7Wq`Z_`Ds>iL-cA3UEA3DGrdn-pmx6!hi>x!crSmigrwP>R90qsrSe!^6%(LUYZ^*+lMP}tOZ{eyWEiGQ$<3o|MmX1 z1=c90m1YXYf8sP^vhvq-sZwojErza~wTd)AekM?Gg93cP4lCIwZ?+24O2w z!2&-%*MLYqgp~e}-0}uGByz&?B`f@VtT{ieB>u857rfH`#xx zSHL1Fl<3P~AHDqP3_Wr1@6Gyj`nV%Q8F0Z0DD3ON?~NNh8M5=|J+&jnQP-*JP{;~L zgf8W!aoml&!!bmMl#eE%PC9v_3X`%~b=Sa|Cq*~6N1|BY)Telsj0`*uRFuhoP zUf(yCp#Rr45fOEViRwerwmg!=jjIxY)ApxWZZ8|(7JJA2=!ybVB(!>lsZ4C{_KFK} zZKFkvpxp(%93+}%62AgTVfZ{v_|VH4@jPWc;Z(lz=Yrm6ao48URCQ8L)|aro$s2%X z1;>K&DoMXcKj+LWp}wW_H$N()?m0`fjQ05b!$_wQ!m`Mk(m(!n5hL-=w`zyb7IQC5 z?9Pyu9}2Ipuf@GasT4#^=u4&DT-Qf&V0K@me!JPt!4V%WL7#VOJ_*m zxfNaI0_WmEZZeLK>b$$g@@cj<%2GhHnKoA2gjS4ui~*>l|MupKm@1UkM~hxOAzj$^6V>GZ;IB^I8r>ga4EmyZ)(<{ z(~TAumfnsnlv8{oWi<$LnpetbnB3GwvWa+rhbL{e)^!-k90UF2Rb_x{`f4KbH2;|+ zN;*BM$z!J=*=596B0(2Iuso@Gw|vWdHUm%fRa&bcb%Fu3>vk=>RpwOV7+#QGg}o4* zgKx$~M4qj<25TMes_ltv6{Hm=X>xmR;|K!TSCD?^TZg}b_@zRU!gN9}GaeM`EqFlr zV-JqBeLFTI4lAs_`RY{uLzk3uT`LDDGTaZF#-ND#pncu@{7A!3BugU|Nju#5WM!8^ zFcpD*tJceTFcf3$>j-0zxmt%)PUS~S>W9q`g4js_X!Ja$qt>b_nVUCj(px?veln5> z(6h5c63T9yJ41_k8?(#aNgn~Yipc8CwbhAxrL>|c7FzDl`1#y4y7+ljtAq3)^Yvyb zhma(pJ`_2A{PE!duRN@sFiCP1`w^k>ylpSu$kIL6(+qv~zS_P+`X4-j9fMQNQ$UwT z`@Z>h@9+yy3ovakz9kAJTIwUao|e368~0YX2;KLKr#D`CQF5)+6t% z)T(cV(ZZmI{tH|%fb3F1;%nHSoW!%edN#U>pB`Qq8nVmC;cUWvqMBMNuxKaY?^(I1 z)NOq0)^;gW`_)}}K*aawp%%NYr#xG#4KTmUrqNGtnmy63n(%1}ler2=pS1ct%zal9 zd=kWn8HlJ#fZYh({BDMsHttPp=E27Tj1+!uyqMhN2Z!!fj))(Oe?DHwc=Zd?EK@BB zyM`6BqJ)!2_OG_YWSEzSY(40|7N~dg56tSY7YjT?S6$SSAJiKagAbWONm7S$GPpR& zKR{LkUT-M|68AXuk?{*wxCrs;R;sbkJ+XI;NPh(-rjer|-|uy7Jw-4+%6W&Dj;4)c z0>+tPg)Tvyc{N?D5%JgZ0DWfAv(JDQ@r@?bXfbfHbpofkp0&ObJJ*7C$f zJv9Ce^fE>`V@L+r-DrS(EhuJZm`>xEFA4eu%1yq7k6Blydh0E6C0e>>wWCYqQk2PD z?gg&{RLGRd+rMM_4BjKc;Nt!79*{ai-7Tl35}hlI(6JxA6l#j8bl6|K$NnI|yz1ag z=i{-$tFO)^j3RV!owz`jfYxDgZoEYD_XTdeo7Kjs7`ogAz&PovS4|V~)Y+m_pFd$V z1hZ#Y=a$usuf9*gXiqPllJg_+6EOYe(Lp({t?g(Czm$GhX{MWuZ%1qDMRn8)d+kr= z!cdXr#nhfDjz1k>46Y8SCL4i>_zbA6zQrjjs;5 zXzkts-2fMBdoT)Cm7o#^LS}wj9q{T$dyA?dJoK7yr;)@#R#%G2g)h@W1n}fWg5cwX|N)mRmI)pn;*6vPalJ|d4 z@g7YcL9>9hmoBr;|6IvuXvyw80?<99hR&7c2GvgS+cW5L%StN8{2&Y259PH$hy-@C z#q9Pp6p1NZ6+7&L*Ty050RT6#N26Ixp*+SNJFm6*ae;I?yiqmC{JNbn6JSsF_Hn+N zu+d33PG=cxq9_sdr@_=V$EPhFWB`1mIwY?OOcNSZd&pO z(N^q|pu0oW{lSae1V=6*(MM0BUG`P*;|BY!=YomU&V^_L_xw7?*$hyl4PfNfQtogO zy={d#iD7Z1WW0H-xt;J``%5`>0ZIWfugWfRwQ9$9u#0M7mKrXQ@h^|&9^F4L0x!hi zg!0q~x!=Qvv>gh2X~*?<5H79%gwS~J@E+#pQa)E%_c8?O|A2z_L#cg%UJlmGH<2Wa z6|D_|Y*UfUd~8yXN&jnYcjKVYU3-8AM|4_GD@+B=e6GJ~=!BM93s%X%AoW=0kN+TP zs}&8EnZ?V~`G8AwE-a0`L*@@uCCfS_$h0+c-_y{O{vZ}ACNLyGjSlGiw^a$j%hrc8neBEkkwXvEsKXw}I9_rS`(^z+om3 zc5{+?yOX<1SLy)Ul!EO9G*_+yA+qypIL)DM#ph@1T(MoC%pM+XOJpI+%BGzDw5mB& z`o7yc4_5p6x;zM(HwKwg-04YhG<7@nl6y%u4S%5L-dWsZ_J1)Drxrjkq5obI6Ed1wC$jv#jtJ zA!N15*U^ewjiZrCQ`c07!14QCW}&la+I#(jqX1Dxs^$w^lOSglKaG9a>0F_t|L$T{ zUKQOX{{{6jn8?_)u|07 zD7=lkl_Bck@{@0TWD3BSlRM0C*r1TUXH{cAA}qWKmam%S%LdPjF-&YbPUFD7chFiN z7M?s0zNA_Wqw$}=62MN|8US3Mo+6+5ywR)VVY${u2qg4k{s^U zrd8EkOJgYqp+a+)3SZqzK2|~L(RMg;Igf@n)99sd&aG9Bm5JRagst)cR z_4!hVJ!dnHg1p%aeQ=?QzXGllQodv59IyNvvY1r2wi#2H@mTPJ3$>>qza-;Sz8;a) zBjO1L>C{+F6h+3Ba$YeeQ+xx(`#+nu1OStx@0JApH+u|G4sco9v5DKUjoY#K7~%|G zbVT)A&@w4VEu;qRrpHYJCk0GoOnLY|U_BA@HuARc?O0KYl*i^mg6_RC%}25wuRfA- zSZ<27op8#b4aQ(#Ma!T05-+-Zt8}FqI|$Bo^{j9^7CV>--1!@zC2WE10=~Tmy0{$+ zNOrc*#vv@TXux^7Z883=nc67T@*_FiTJX%oG!R8S@`eO}$Jhf;K94GyNi9xmeg~Y{ zhwF7(Z%EwFMaY=#;oAs8$jS9mwZG=)kY4(PWymGScxO;HWftvDL^KXucx5YAWngE= z0tYjo#U&{<+V5gAj79&=#jHqlNv5MurzCt8{N*!1X*x#Z}14???EFdhTreVA834-nBw=5qNUhK@oVa zoXtOL?SwAILIuqXzOp?l(-YN-#Z!ACRVqdhBmCBuQpp`cN1RT{&IxJ3Nc6-z>`Tr zNdMgVyC9koQ*PV?gxOxo92#I>@|WX8H&!Ck-+NR&tqNpWt6(|_s;my^9Ca?H6VivQ9aGFx-HmPOR( zD#QbHr}`*d?pc`Tm1X?1PFql!B*xAOtG|@1uIsuFN);p7#3$gil6jG<2bbs3pI)dD zd|y{Tv{HEk?P6R>p31W60hpY|m;Qa2S%CFAuwxili@hxSUdZDh*{aetk-APB^yQ7S zS!y)a-6F82E#~zi59Rr@2OTn{N9e(QKl!zp-g;4_h)30yhu~HWvB+_d zMLi{AwEw5{2Q;1D|J!U|L%*|H1%H~?@<}?~iMeI8K<#W;Ai_MVOF6D6n2Y!hqoq~w z8k$2f(jJ4%+*{&nufzmE_ijKqN%+_w1A|dSzAuV@ci;I&oXTMU+D_DkX=gr#<@K&# z@Dkk0z7oWq3TSB1OJkw=sI5G%h@X%kYn#&^kKHJ?t3ek4r_7!YX1@nQr^Rb1g89*G zZMVRHkhwHR#2unW^3(#cLzeq&=Qm!45}Fa_gtK|j#x&`js1 zk= z+amUE5_JWn&l7tKnO$A*|i$o9b2&k9l?Svgae(h}FMP17w)v^MYt3`+C3?2P| zo?;9ZNl}!LxL8V$H6@Q$+3F*CAM-fv)>O}B?3+^~zlCR87}bR$0er|Y{&YI1qHbH3 zG9t@e267O@*w4l3P3ND$Y)?>tSSIM|*ov683n5R2j=Zc-!M;c>t9j$0>t1!fc*L2j zZ49l(P}&y?LS1hiElfeyAZsh38U&of!?pEDDA&pV7le9QB% zMe7xrtgO(Qyep9D3qOm?%}@?qc1)sbS>8Bm5A?y^XuU$S>sXM|`H^Zji{s_#;7YBG zeo{s08SKvAH3(# zJ40vA9HWDMXGPm-cR?H>C0fR4oKtXblib=Kx5q@O`Zd9xJ$T$l3Pv%cX+ zNB4hfXsmzUH=Nd~os9~RfPE3L6hM4Iem-3C9$m7237|U;ddT3+w2)21`?v|E;i;96 zK;aGW4f&-nGl<~$j~t)K?VzHt&EAeZI6tSo!1PC><7@FusC#4GTEy&Q3s81dPOHZ4 zZ@zg<(C@?nWQRcw;P!u7Q&K^!!XL1xuOPQ({?{^WNDj|SM37Ep96&ph46=ubmm}lT zWW1aF-rF_eLabkyip)6MBXw59uXye$F)GynoakDLcay-w5mUDb$z3S zIc0=%A1&@W&=%z%RIX;tU(U%6QWqB;haBWXdVvrPSC!Kq&;Pyw{d z5H>go6HmN1AZ)@Fd9G!HUQ{)>9oI!bS~+HdwRau3SOBxJV<8_mC}fYa zSr7)3zU!oe2dHEGw$hO1AmYyo$TdDGGX4p=)(kI%dZDa+CSY%Kz<}kJq)au!@(xi~ z&ut8VvK@kDg{~k75E6f)6j!^2g#1(7;?KVf@un4nY3=mizUC9j$)ANwNK>8;(r~AB zp}9yo&6`8{_jXn)LL67w~5_XqFE-uy@)bZnl6? z)uYj)i2ebNzmxQRx{E)T`aBvUQwtR=SoIvHCg>XR3zv-`UI0G7hN5YE-id?OV8BSb zzM4tyTo$Li0IAHEBO;$E=7NG7)1&MORH?jQwyh%h1=9;+)pTp7*t?Ue_>v9?yQp*P z@Gtjhw@H8?J7Rd^=%@-!H_fs1aE~Y0-vf5l*s3TIU$tn2c($Ws6msJu zkWm$DJ&@bVHCm9jJKUkl=caIxE6Nwd36Kc>Xh?F#y}1zUT@`(-m8#D*uSUM~b=R~f z!wi6fxUuIqNPx}1SgP?8Bpd%+IpvR4b}WvO^*vr+m-0F8N#m)!$d|6{y7RIgE+=Nm z_kS-7C60-esoxnxu-#9>E2Zc-O9{%?6#&7*+c=BXG0Xc2hMivfU@o>9a+B;LYuO3A zGU!RR@L~->wx~x20ukG7y6R-Ow1Vjb$V7|^Dp~NS)Y*5m!8~>%#%#MzAf}H4CIr-F z6$fGr4=-L#v}}1mM)($`dPCNf1JoBk@g<%Z7hbT53ItA(tCs4NGkfd`cUZY)J&5mi zP&q=S_0u>YGAdPB12r-oWk~_J3mTjso0!*%G|tY{hMqq;)jG`TUQqYE?6rsK0%GLX zs7>o}+Z*8edOsZ={Xm)^?~2Ou85?ID`B=k}h-ykwu3yuE17Jvs2f{=I!%g03_L?Ga%u zO-j!NHJP(@(HE#?x-yZ`QoVw&}ho4X>$u}q2300A- zujCR{)@Cla*;&_1F6^}uZBOi(NdpjmSXq^{l^ib7h@(2K7gaFL!PTx~7e=iE7`jEsJq;MHdL(sx_^(MsBW!Gl}$y^z+HXq%Qsa(Fuqo1fv?KQi@<}a z-=HA1wbQYI@0^*t7zb|Pf?maLi0-gk3Hk6`)&^rWyRdbo-|@APT(Xa(3}~SU(foSO z_V8)-ZHCc{ReB@PUplTuUWTAgR!Xa_AfrmLb)jh`tzNmW+jVdgYEP@a#$U(&9`vu0 z=f#va2C+A)W;WisB}FH`?a%Xyz!&zK*iS(6xvE`6T@{+soww^V4JBOdm&=jc4??B~ znjIJOVCetqM=rYjG2`9wl1Pw79&$$fmeb8Le^5EY zB%QI%01dy}c63kzK)V<9Rsy5@koglR8etnrNR_d`NT~yI$5#Wif(T~8v!}D88$)iH zE`S6W6n}|Mu)f{18?%ei*b5xEbo^+MdKv(CWq;`gDEu^?cwpDOakX{#nHfBrM7b}YFxbO^&wz4}UO{jG6&b{wl zREMid!Jf)*Cc1jOq&d0iUUn$OF|U_U3#i=`@j?IO{k#i0M*4l!OEz~Nga*arLnA(-t7M=7R#R zF}=ZP9(w{Xo(hvMCEqT24vmQTj#-!n3(5Rk8QJE}24N22+3u^#Y{{9AECjp9*uSeN zmYU$3_}-lCePJhjHfua~XLI5&)u|jTP)b&do2Vh;Yd5`gvLI zjWr9Tek;H)++Dj`G`>=u=?HhVeah3!*3KG;X}}(qZZMu@C_B_!z#IVd#!g|?M%CBl zH9(gdXMgtV5Bz(1Ca;+S#DT~5 z+%SEfU>4+d5ttUE;d_K1*GTbNCH}{2lj#bk9mAS9X*<{NHd}bPkV~G9;{9!- z@finpVyApk%Fb;tuEfSCP33UVYB~3xtTmTN!$Hag?KNjms|?DXRe;11tE$1P^Dj@2 zjL~Xnx~|qV_46|Tg4HlyA#Q`YV((bq9M5VDF|n*j^}cniss6j^@@TposCT8^gHMs3 zvBDK&3*H?+oeuK-m=Zu3zw7#n99`h*u#*Yq->mS6GR~??s410k*V)~&1l_IJt>h_y zw&Ouj@ry|uRA^q~iXd^A?g3A;XQ0e|!}+0iGE&$#%1*OIZQq>f*U@zDx$gU1{H`pz z>3~cH!coDmYzhpHg1ur4KLF5Oop{KN_XByvqt5EUUxIU>j~0*h0-3=6?6N{OrBaAi z*>9XmP}c^X?iu+9a*$s90CXoA3V1vko&R*0|Zy6SCav`#V&43lxlzSVO$Yb_IQksUpAIss4+KO%^ zt;3-JAUV=JQHrj_vp>Dfik1I5epKX!B^>yQNP_N1u(tp}T;kIlx*MN_F%3ofi_fyw z+K@7b9*HR*CJZ53cs5+_v{h&T*~M^7A!gy|1lwe77}5((i?GB`$qyn?Q*6%|<&&qJ zxNy(<9G<^rT6vbu-%P%vba0f;Z2-(jS9T4nKrWkx7l619Xw*5&nGM+1f~n8G^!)~f zf>Fx9JZ(wI)>Vi`n)e*k&AvQ#{_Y%*Kl*T&_I zpjCUm(hqdnU0xTP>2U*Pq8y<|-OpP`DmX0_lPB*d@BnzweY)%7LrQ3ZqV8Ip$ne8~ zC6~3283Tu;wC>iu>bxrP)#LogOTfK4EnZ9lehNsQsy-1rI)SgXTP9o$7wCy{_Q z5F-T|_06=t8+mc*n1RXFQfAW>bCefX-q9y1p`c2nD+_EDU1aC&MBx0(kcQf8fsuoU zjKur(=i`j5g*;M?Y4qF}KMfY>EUgqL?YD-mD|&41qfGE6+VumF+Ii}8Q=g?G2(__K zfSm!7u3BmGt=+mbFkL)TVwu+d3KM+1{M;N?da0ok^mh68DuDDeUB#5jAee~7oZaCB zJ-#_p^uF|c*%Y}tH8B4J@+;d!VWC@6J%Dch89F+7*eAJ!@hXYN3a9jIOCz&Ddqt68 z7S&+rhjPICFr7u^{5Utraw%JlFy`1bSU_B=s;O~iFo>f9%_=?YR-)N+ekWmEypoL0 z%%RH{EPeL5Lpwl^XN{(jM3aoutL#3+k}sr=MX;kP>q0e9c6U4~!VH*JR=NP_FI8o; z3!IRZhn~pt)+0nRY&~lOqP!TQf_qL~(?P$RvIO6KWQyGF)oS9xYG%XOX=5oKdhB&> z05K>TGfSvM(qe;|2kOIm5&Fe-PcT(8fVOMhc=iS4U63&SeFC^DZ-aA-IREl5Mg!$6 zB?g!U2ut4&DO=BF&QRo9_D`Jih{zRzpVb+1Y^JsR4zIn+1XZtJS{)3uv!+%vVf#S& zZT!9c9!<}w<~hc7#VWi&rB2ji9CQ#O+mzYhiiEdwO2c8d>V7Qor7Wnd7GfSr++Kn- z#5r(3ysB4Sr@B9ThAAE}Pz6o#}{h{djL0VxQRY8$!q_-Qmtm$dm zJi9L7{8jTH`Zz9u;(__s%YaA1xOpC#ZmVabRiiVy%O~OEjy6rpB3!`5k(!9tH zff^?_H=jyFfcS3Ei@PkC$GG~u-GD5i^3m#KbYN~gQL+8Iso#Fvx_DvV!S4j7ExsGG zg!IZ~i1Tf2oI*Y$xm5GfnH8SQy2` zV>2*azXby3pyuMfMqoBF#egnT-kyp;;_oQ&9<5f^RP7B98jZeLUuy(vLY8^|c|0DdCVY*C}HSOGXYyc&pbNM7?`q!DkT3pAU zEd#Nw-&V=sUeQ9U|3bO*Q(PGN`uTUB7skK9C@nYcEr4zo1>Mjk8C)fh&u_Yh&su$5 z_%eq0hWVbngv8(;#0LkSXHMe3+(0w~&9t>r)tf;n=yI{|Y8GdlMv@~-Q@xc-jw7tA zVoN#i&qfG5Xw(TfHktQ_n`5gH_h-UQV^+}Irw zLhj&FHLQoT4}w;Y7~=l4VY}14x*y#)u7$a1PYq)LD&`+F6$8eXC-yF>`9u$3g%|WC zZm%Ai3%%fW;xRA4$Lj7E?od;goviJP)c}ExVFUVsp-sl%IB<_@Qr;)oO9*i{dLh3T z2>1tuEp95ZUG?yHu{fal`e&TJhkyDUQnBsNHRs;d>YHF*pq_Oar1{kb0Vcreq~r;l`oW2E1hXAc5pi}7b2*i0zk8wM{19!I3Y-@u3i^^?w0Ocvay|=^E@NY z9Ie1r4Wbna+jdkew{)=Zr9}n;-sm47hO_d z%SB$T2DkPc?e5j#G&+ta{d!=uP!F0lndK2Ee(SpDKnx~Pjiz1Dvm|~LQQy1>I_=Lo zPgo*<+C<5rT%94^%Gs$Uxa-&lpqrgTG-VeV^lGkBV201djdzYwK|5iz<0N(!?>I0w z7{Ih9=*LfM?{v_eOpU+{|9B4Nponj{7%TyU2dx#W{UvMNv_CAnPWLU4FC`{pIB-(_ z@C(;kgqZXne6}g&0?||4`P!8Rt&fOxgm{0a{n>QxYz!_v7d9Y-)N}26DqiG~Rh?SK zy!{@5OTo?~I8+7wqB3+*+b33v>yUo`89hV`^zAA+wqrjK0k<7^$LK>%YMEGgC*pI) zgiWz7Oh$Hq8z*|4EK5j#wv%JDfKRwO4CA|u0Kx#q5$!8MC1Mr@K1Nivktz|@)lq+z zMfv%!QyrP2Ks(s>`DJE80QLeIw3Dq+W~VEXdXpeD%}Qii4vl^+zDUnqLXWfo=x2>( z^k}}0T}Cuk7e)e_nKTP>wXJA&1|Mu3GgTXk6cH{!@qv4!DAfR&4ujkQo6;v?9zXXn zgqwryFMQhCgd3>=oVGJZL@4BiU~m5tL|aaGlHCwnr*3`$RP(-)xsGMb!_X!7ad`W6YVqnp%t2 zNC{05W3Zf4;{69H%|M;|9{M1S9Ii5rOdLB8z{&3bbuyk2E2rz&Tpg(P251J6`D4f0 z6VwPo5_xxTRMmXp269YW%@&|Ck=)w=0FjMqubqnoUimRv^ZLi`->SILMxsOOcG{muxm0wYY=Gr|zTx##@LHR{hQ49f-3x7vkS;W!z`M)SErTiu048Q>F92B_Kn zH97#SP&_?0`>~72yizyD=*}^qOam=u7qDv<6+n2!{>fLtU>y3OU^=`VBx9$M-yy4o zMhiXnI{{5RxR>=uL_}4K(+ceBJJgig*$o;`<~u2t>ALW$etO`{q>ulukG9 zm@C~WYdczSZ1SxObYgmNRL86#4qB?2rGQ|W4wxz^(Mo;R(ORx)UToLdB zd3G=rSgP-VHK*hBV>rEc80AzsqX~KS?8CiLcEUa3>h8Or zNRGN1T83eiK0eYp#bLy^ z9?<0UJV9v4C^!Ew@tTh$Zuc~F?W9?&!_^D#Ae}+<74rOVo!S_r1L@TKmyA`}6e`2g z;fpl36+8cc?Ts?o(E~Jt*x-6GhUS%$X)}}IpYk69%G^-OwrfR)awgFd#`^i;0Lu5M z>#JU&`t5pPWgTDbdtD4$5$6L?7+{Jz0fSWzr<+nfSSL-L-DJEwAbiiFXX@0$XWBU8 zpWrH5Us#T=Rj)iL0{<{kuYP~EvPWv%uS%yOuI5gSMxy4BqdcKL|Cvvx|F%R%#7m&@ zCc+1WZY3@65`CIG*MG-prIrh1AJF^ar21MluC3_Jz2vFHEyl!#`7hA#?fN?tfz%~W zz%J7IF6L*ohxBvDj?K3Y+k*Rqcc}Y$(pc$KW@S+?0&YbbzLFr&2grKATlb}aHC}N? z=R$a%0%_V)GMXh|@aL^0dHvfvkpST}fu?HpQrAH2@Uq z@HZ6~%ITD?7Us(uf|26|`RvW&kTLZEhj1Tu2?nP1e45OWw zs$IGIpr?Twus^HPiUz%WO;13F&`^kXrKBKQ0Vt)g z1(M(jw=(BOZQD^dQ$GcjmQ(pI#8;XD2aAtq2?2aM)H9;d_1lpFe0jjlo$I&FcZh4b z!{7>SzTc;x0hF@NvC6w60(dI{!fU9e=G&#NxQPODzrXH>qE=IBgw($?%Qjkg&i=z1 z$o>xl&O;I0*g`<3GcM&`mpWV}bF}iga&%MHEl^Ukz-`qH3L)VG7c%y5IGeSlb-O^e zTZ{f&rMV-k9i3(i@O@G);x{skq^Ni-$PqQjF|Sg+iHP&^xiICASrEm}F?-PGmx%RF z0u&HPRaa=grTk$<10XK(Bf<9$JV=a|!{#!>moh(-u}}Ds!w6jwAWNK$QzfZz0}hpj zG{hvGgZpQrXd*hbLpdN*>r+Yy&7B)J#D;#}Z;vq)Sk(2{)Tgk`B$r-_`EC=HjP^f~ zt=85;wK*>jE{9!Cl~tWf!aQd-c?H@|HQ(sb;RF5m7%2FL(V6<$g=Ip4S7ja(i((Yo zV+QoGt-}|Vo>@y+ZO2N+YG?|e9f|M9>`Bg`_pMz?QKkjf6UhRN&#i*acE8?Lara@Itr42Ezug>dyzxS>mh$HU< zbp}vAR0FDNMcB7Y2e4LS;%z46%@z1YoNNEk1JI|hKMd+}nv6oVYGh(9pSA_Bto@WP zu4&E7%rIK9#C&C&uK21Vu76?M5%k_3f!-V7?AYiPQ^cK`f|Q-rp?;2t=i0)JS>Uoz z;(kjPnc?83I?zScdK=dcE~N<69_c^>J_9m%TND7+^T0T|YJFwiJ5(M7cbJ0NaaDt> zCA7Z5eiso%JXM9uf<_Ps!3%%rq4^S-0)swTj5`Y2be;I?>Ja*ATU-tKLkF+-#h*i? z>{pdK>V|U7M+V==D9@Z0gt=s`DqB*N0q9aP^XF5^Kahl3=Ucu}ks>uwf2l$(1Y9B# zEXj8b0Ze3c5PN3mzAv}Gg!o&3Jv2z`Dm+dtQv#inJ|UWpp;8URk|O~k+@=80FbZdl z9VQ_X8~P$D*w;W8QUl~<~8l1SHVqe zJ3yQ1z`eDJGxDznv}_Gfq^bb&Gj0b@78?-m{R<`_kp~o8z-o)=Wz92;;9MyGGFz2_ zJGkx9nwh6IiDpk3pagA80#*cpurAeA>H8TzmVbofjRGjTFVSw%8)yZrWq02*?%}VQ zvbSRUpHG(*&SV4|-!8|eAEpLM3QBv3fJ}m581N0k$yw-8s7ZNQUd3IW$ZrdxtiT+!0 zHQGbo9iUNBlM;W`GF((m35lmgU_nmN{e%9{un zTM(_E3cr!523jg7Ym@a2MowFi+dv^zD6*chy?g()jg&ahRL63n48DHk*bdZ{b_3kL z%jn1pjyTLr^3mXyDa39dKxU6+nRG;+Z`q0mx?@7or!sDr>We~B$T6xGbO)Oj57B9fxGp5~DrZo&} zjCL-9@1FU_{c)b<&xa!Y6W|*#DA$D5BQVY$JmBjgAS9sNu|OZAq9dY9z`Y~mcKVko zm_7szn>Hb2W^E1U{iEQv5Ahs0*rU|tT~{n+HjEozR-(?~!~B!v?}Ck?H~^)rZ1P!N z`>v;4;pYS&wm^=7tF%DpszOZSm9(htBXxdD^ zoC{>C9>BFMIvd=W>P)v*2DGzr}i}(A>?mKG>0F)m^(ktN4 zPhxWnae_I~K4l%Ul8ldfaH-W{-kI{sc5FT1lXjL$84!@6?$+rhM(sZq+8mp` zEYF+y={oW6>iy;fI?DM!!9X@?HyVhKZYx?#h#|ICBzxw9>qf2m{2q)iI9t*$=D`+^ z8MvR>vu(O2+?LArjNwG`6u4IelNo3}4}}5f_m2#Ye!QJ;tq^l?*8=_!?9YW)qo&5j z%=BxTGr1u7`ha_J2fZ6+J4Gcffkv^@m;GXHSou$7bslxEvYJkGpbpt@^5kJ8rgn)Jy&jWQ)Dsc zMkrj$dGJTYjWxJkg6_juYfwmE7h4>oaSF|&MQf!)XO3&l&4t7Q!Nw`zgz0o>HV7ow zAY3}4Mrl|s#B<^K^(!p!R~lqI6RB8hzZUT}H$JRXl@$P>2@thpW}nHG`Axq?lgfwc z2vJ`Va_0+vxAA-Pc4y5AF{Sw565@@5X+ddwaV|c5*Y6 zX{$T^+UtdHyTMD5v9?9wxx}f?WqseUx^}TT>$x3mgTfPUTR{f)pm$Duf@ZD@{Y+lE zl(^6+;#>BFD(ou;Xt*Erl9lNDG_;5>E(&z_TQi7fXpX?R!7!zGbaxEgbj=V=0@YA| zBqd00u1RPujQD@7eR(+4-}|>ENrY0_2}KJbJA;Z+2_FgBNyxr0!x$u6wy4OSB|`Rn zAB{E3SYpC37>umLSjPSw`h0)i=enLho>_=Uk7)$lYx}Z zO~5?4FQ_<4ml1_H(ruedyE#)+hcTCmtuC7%dM;@(DMt%!Oz3-mCljDP4o13Up1b7S z8Sx2@x}il}@E1z6r^?rKhm8=|sofjCsAjPqdfy7BLRNAqI-*v6;jeM#EM_fag zd@A_^KsK1dpS4H!m)0?tH3BMcH;)@%z{2OLVTrHxe`o`h8}0#TfJJ`$@KUlLJF9ML zZAi5IndY&0W76moU1R^nbr=>bu1W0A-}?s$KYmD-;Lb%&-Nf)FD&rYyj@*jFpIc`` zMvuTyN-p{jMpg))YJ5KdayznOPS_s?W-b_VGCpe+h$_%!w8=wsf{oLsOuSW_2jwsc zH?IN7$v_k+iEelG^psiw{%H5hT>|hqiGiw&e8(JqH{UL+yZb3k&nX@nhTN&vK_O#HK@*b>;-f^ID2d}UR?hIUMk_!&?_4`c zrbq<2U~w#dk+=NS+77NPqQs&p$d!C zFj^8FA>;8AKjjU-o%S1^wcb4h)H|tZ$!FC^l@9hgX-bE5)n}?`2Z9T>DX(~^_{kA0 zCUaQN7~JV(cuiFZuuTE$$W{;y`M^y$XJ_;>MOjf5og;S>q%WO1aShalrK-n3c0Lo# zUaYe3e)CXE6or0dh2Ebi);}H@x5je@PIH{w=NX?mvt>=eBiB469Cn$ps{XLyqL)c6 zGDeU<8FgwU-;~*pOvfr$OM5`8gIMRaoXSnk{L34nWBlT!x;4r~et(j^$U;J)pJ=MO z?>y79{-S0q5++D3K19M*2R!3xR8%f>?69?=Sxbcc5MhpcqV_gj6|i928ce{#w$_so7I`Gmst{f42KW{q;e7ky&YYt2J) z@HJB_>Eh^bd=A$e)jXO$mmmlYzvV{B;fVv%hQ62fHiB1ALc}LbW-;P=a)tZ`T{a(_ zLHZWI<#D0Tn6rgDU{}j)mK8D&d!1662+*ckYRuVW+v|#;u)(OKOl;Ztv3<*+5uDyj zkE(8m)9DjjJv-j3r@qS{I7pOtSq3iCAAfPt53tb>7_(&wVXBVSDxYmsR621NOfd>g z^^tQM{Ftteu8Q)FShM9HRS~-uI&5Y$Q}Ox2(9^KFV)6Z4758{OmLjqI?EUH6`wENQ zJ(gwD(Q1eclH|ZwK1Ds*@}RFunO2O7c21Nb_Sk>=ue{4QVT&WYQ!;kF@wPc5{#LM8 zAkT!U>kG`_Q)kE9blXA2js}C>QSvogbCyqh@RvR96SWtx_r%pE4h_x(j=83&seRnF zir@7(r>O8~(3G|{Ky)*ZJ*k$|1l3LUR>eE7%8%MwkKrZ6<|V`?D~eIJmTBnweuY6i zi3s*hbI~*VUo!k)E)M+qABvFw_!I(~nER>GSrC2@ymkFoxTEr~g2Y8{{ilw*gL=OxZd zR=wRL(-%nEa5rs`lyeNUZ=o9#~ ze6lyk>^c6!=CtWif#U2QGL0c}>G`dhKSWCSnR?R!zm_tEC2G6dGduMq#sKK!IR?OD z`2qSm5~c_+u-;MUO{dFp)YIw-)B&G@*Tn|7P;Sh^dA`XdkXt9^KJTT5Q={JG2ji#> z?{B#NlZ(Dte&-#MNA)E)Ks+u8|$jXu76#bjw*@QgXD^NFn3=<$x2ir5m2v$wXF-PGf6LP{|1#(o38I` zaV1T`-TF@M)Wz}hSGS+5Yd{5`J%A&45VDwItE7%5ux}+J;H4IuiI*RSsPe5wZ-3r| z3$P|_Jq38&^qQU2O)}RfJ~HqxXm>@cHYtIr1&ITm34fJpH2ZmnpgxnURl+Tcj@i}i zav~dvf{bMt?&q)hd7sJum7AfZ>NnpO7eqsL|4fRc8Y!9H^vsfZfA)ZFECZ#6uzqD# zvhZ-mWm-`SklCQ#a}#_fIlv}s9j!7jOWl3in7Te?rtry;AYq$kIsZ;Rx}3Z$EEU&2 zk?jrRr#`JFG;}}>6342EU&i_DsOKV}FfX;H@{cbXEK8m8QC`@umC^3D65Iu$PgPG| z=aO@d21vXFco@Y+!$^x`oiXn0p0BhFm=(Tu9#^+`0<`$f0X-o51B_z-@Sr|eGdzj~ z_UeTojN_?PC6^S12N{S3WYGSrTVI}>PjWuj%1=MMt5>DtI`!_6+FuX7o5$PPG3L3` zSNB4Cw|7eRadL$#yxx36X5WlHt-r{w!?P?NzUUZ?UwHJB2?XiDEN zt|UxloHk(QU{4=%=!QHf@?w0^v2f6=B~vy0u?_G@@J8l_S;>9fw#{yN^YUF6Q<1S4 z<9)v{%-tsRg_X_dX($f?ts}RuO^|F0`L!Pu1L!QAHZYP$l8|XWrO!*8L;G_e8KjE1h*^+Dt zAGs%)sD>#K>KPKlaTFmG@f6JF^N{r)7sON#+%9+r>>DylIu$tr$}YwAIY_kt6M5XSt;=n1Ukf8rKQ>2{fV{`Lx)G|%C# zhOLzN`2_kCcV7RPGGK;NcPuRXwauL+mFA%{fB|pI-MbV5s;CW0sC0>;KR)dZa`u+H z1u5C<1m+u0-pC-B-|Pw-ezfcM4tLBNsctIaBu=>SCDOT3v8K2MyjkrNpU+wtCM=dS zG{=3;AO=>Ng=Us-W@uF5eGxwG)&1D)ArXVo4&xS_8SyOXsuI9 zQifkpm~(SFyJekgIQ%~E651Uk6J0}r9K{=;{Nu}efep&W)B6?9AL_XYvk~e(pRM8k zfT#(=EPdLmjaF4dkR9{e#|4W_RV+8}jLPl}H(ruRlgh95e0WiEnM)vy5W!t}RrKBipI?c2C?D_Y8ow$ROD|23c$BZtR~UXLZ(hKy<>tOnRR+-3k5ASlu1 zzCHsL?^%03e+1zE@X%q6T|=A9TwSpCOcaUbN=@=UL$_2@J-51_9c9$Cju(VeS8enN zuh=vO4`gf&G!}y2DOVYF3$0{piwPf>QvZ?zmfoYhf9IunNFn17nSl8T7gJ`zo#AD^ zy209I-3~1RB^Q|v+fQL4Wg;y!cmUKWyD0QId~e`sb$W7(uUXB&^5bbs)a_;aG%d^^q^`WGBENbp zNqfQ3J}^7q<0uOJD;z$eINzCl&-8lZIjnFSx9VEKJV`Xy{s*ZobkAHdZOQi2FM7X~ zAyQnpquN?Q;&zClBbPH%%x(rqT7Ue>m;<;z`oQJSz7PKyq$0@<5_4_JwIbZBF0H$} zwqgo^0uJOs!X9JcE%e~|L!{AH- zkFmiSd$qU7J?nG0BA z)u-Ld9Anr;`GMLQY14kpbRjFSpfK_^QAoKT0SRUAdfR z2^^ng@;YkGc~APDe3g%N6PYIDbarS8S`{l+Cq6@jujMtK#F z_NpKrw{56B^*GvtAj35k8|8%U-cgcEP>Hg9QvPfvL*DOqQxfj9x5{c&b>jil+#CMF1rB>Hf=i z5F4j|N>@l(;B6KAB71_WllI|b(#=~lPz*ygO?AsZE9A^y3iGeNsKZ>rEgD3wF_}_s z(f3m!?BQexEIAsmn3--S>X!PN6xs02;6d7HDU z#3aHTKEpcb;hI0|6j{!OVsdxW)2qI|h*VOgPx2m4UJ~Z#2=mK8$x`iw9Eish6|)q&twFGR|TfpF(`>Z+z!)JAKTo4VfvT6-!M#fHp2V?u+oT55*DASu7&N3*;q6wt!DYd*QSrq|M#s6OfeByN@VY%& z)dTUM);P;2LU&bY9D}KsWqu@YV)cbntyA+sH1yd?@x}!_bvcu}g5K4U6AsZYO1{W7 z%29vX$k{6N)US6^7lIOK=_;7NLgM~RHX!KCmy2kjTpF$-7UAkT-TVuM`W)EH<3kX~ zIh1TPEuLX{qc(gDjL9^!XWwO;Ig#94dF81AuYeC@xW!>h_<}mvU4K1DA0ddBP`{>7 zXJ6ZS?27gWKYTEqv<>o+(o=cTOO~*6D;Yxgvva`-Ft0mLiFq2)v1EXMw)Q* zqHAuU`+(q}ymW>tZx!$^7Co%A8w#8CL^c8KN&%qmOW zPHcKXyH`` ztmL}+X*;$Qb>3`^$woZ7WEOr~vOX`V-IKG+=mp4+Hh; zOAjjmL62^3B(IU;kIRPS-^mr;PrqOrp=NO|nZLN}Uv$l5X2@2yI7o9`d3Eu@%?jqK zzCQ>?oAFWKA?`}B7k02@%5_(&X{S=EYxsbax4+g38z|KGU}~7GeCp}+9$CU3#XU)m zl89pnx%?y;}$?&`3ph|_mkUynf-dXWE9AYyq_UK zUlmD`-jbZajRkP74fP!xBB18Z{KWP>7tUcL^;G+x4yIjl4e}7yEvcdBxX6_=OIi|# zU*3Br74m|y=Gvs>y1KiqKKo*_2O;q%D$kiju1jfBHC**JaPP2|P@qw=%bw$GN+u!s z(dIF{W#I0+2ySV$%d+RN*v{IDuX)igK-~yvf9rt;oI*<+7?I^vC7WP33wBl)$BGVGAs0%pP->C{?0;9+k(^PQJ2L2to)s&9)_8M*QjU>xR3V{74c`T+*E z5Ljp2g?{2*9I4X11vo>FoNLY+kcvn!uAn{D`rFOn!W@CK(C@nK+x)PlhwfoY%iCJ) z58OeLl@TJ1jQfeb_~y&aM1F+TQ>kBp1*#f5Zez{5(RA6e$bdw8?K|cIm6O&p2b>G= zztsFOE+>&H@fXO9!&(gIDP==3lUIRKEuF>31QclUv zADRf1hxx!CPQ>LUfE_;J)$%vS%jaU`s%aeIQ6f?vM7}Ng*7JL*c?<8q@_SGw1^l?m ztrGl?LB$pj+2i*7!wKLELhYr&nzt)tOmA$_7d%`i4;f7ZTnP)i43lMTqpgVc0I4jg zHtbbR!X z?VRr4X=+hE*0do1`85Uoow%IyhW9QeZ_55c%PX4RAb_L}wrkb96a*c>RC2I*;P1%1 z4g=Y7YWBca{F3A>oB0r9auGY)HugZ}8~^8rO!u3plR_P|g8oU8|6TZp^!E{2{U-yM zCDeSleXVEGrWSf@>u8&?`dVwrb2T1~eg-cwr+B0#nncb3T+w)vzfMs?=dn;{NMzTy zL<{ScQ~mBJ3;3nHEd?!3a<@h5pL_oI&R1zqY{~({`+V^t3y;4ji(i_2?#;1fu)Xgu zIjI5iZ;W{~kb;)aJ6x-{o#dT9Ie!Q`4zcX{!vHB=)(|ivL*HbtQG9Flsjp0JsHsE( zd&ROsNvr0FK9`*m!Y&mKv zioandqm8JzHkqcyp;`cA^l_rPYhaC4^kA?*YWIUL7Wf?v7odx_!{usSaGt6{uVU}! ziE(@>lm4f(P0&e-Uew1rU~7{>;m2Bqbr zi|d%U(ML8}@A1rV1oIiBE--a1rurl=pR>>Lc`Zj9Qd#2k+5qOacev-O>Juz=gw~HT zdM2iP@u59gYM3K?8w_^(cSmi-6E46taop~lq&r_-W-%WR1{9U;zF6vHt8a23G5*r} zM~-b1PoRMVR3m4vP4eBK7m&|Ki&Kt2E%o@tUw>_{ey&)a4%h$g$g(079| z0*d_KZbY77c2}3B&Bv82miCOzji~!S21S2zj;NiY_CiSf9zLKTIq+yWdh^{xE=Y($ zCH>jz;J-TjZOBEeuYBUmlIM8pULBjr_`4fOh1hq4I;)J7zpEtl(ZNZYKgcZC58#WO z^^A8u15)2K@w!UXx&RpF2-(#DS;(3?Mb^B>@}CvF>ZxP#^w}-S7eB85ZmF$Ms$k3d z_g1e$PNsDr=J!!0M!W6M=uLiR!0Pc^0t^jp0ECwj_5rdKAn@;o{)&;Tp&7^U1QgTJ!dSpW8T;M`NBEL;L;C$GWHKy3G6j zs{UxQqQtz)vR@k8eIB(Tm1VD-RI!SVyZh=oj(cR(r=KlE**NhmZDrGEN|I3x7YGg6 zeff7rcu(&9iqrA?qR`BU-kj)Rs8F@+FNXOWGk=7L(g~o9mdvCx=<5*N8Gm@!W~#4J zl-pBzJA5obk8Ox?kR0|!GBduME@o`>>7U2^so9QzqN>Vad1W;6KO@i*`F8~VGB|`B zP4tnyK=ZHcId>Dz?|)4H6W!| ze`_GCu6$$u$!ar^BNO?J@_z35ZDx_?=e{XZWGPCNf~=$Zk(#RSJn*9-yA8tyuJ3$S zP@3L(VNTMaY(v+Eo?7qiSEOmm0&=C3HVF6^0OagYDq=!;~6Ux%()enePqTzMgPr zU18K|Ep{vT0nt~?R?ZN3>c=gn_M|7V(-#c20R;*{%MSP}lY$w4s2DB=X%df3it7=H zm!I^Z@fG&i{$Dk9j~tNo(}g~JF7`ojPV-?hUmF&~>atwk2JP4?8YP=7l865lq)>6j z6D#H;F4CP6p>&CBu^qA4zIR_$x@A8-MezCxf_t?2hA+brQ$Bj)(M5>6t0~LZrl3KU z08uSsq^Ba7+Cud&t}Vg;S#_Y^ZvGYc&+}uJCSA6!RiPQyJFBowHir3^$^EV&hd)QiK|J{In*yjCzggRDGn9jWr zoJjE#Pd(#e_Gizibv&Nbn&QS_-!8n;!u?M6%Vj#O@XD*^K6-jK38gGq!S1Z7C31!qbCZO`dv0YiAFHg5$EwBsIP$!4Q=^8Fj2|BvHgmT zeS}j&?@C3GyRGVfHA(2JG$1fBe}LP?(J!k>`w+7)nikzqG4%3VEGu$cQ;X^uJ1|Ne z|F@n;J~+T#(3fxrsJ+bUG7LBCzKqwnW`k{-YHh4ISf!oo|M0^%G>h z^vMLTPr3Vupec)Vke|A5-0@!i7DjR7f4e;UxRxYF{JXIjrH|Av3R4gJ(>L`bCnZ+T zu1S`M1Zs#tgs=gF+wy_6ng41p<*a+h`XS-xf&`alvA6}9_SGuJA5>~@^|_z44dE+R z#*=KvG=GeVWQr4hM>tJ7Ge|CV^!)a)+B0j#o#v{uHFna3j1iM^PJ%*5+L%Uq+W2IA$BHLXVWTqGXBj(e&F zAwnY+71sPoNpt_KyJ(;Ux5iD@>(2qGhdb3^bg-+8^BH@9+S&hkd1d}%#BBk)Akh=? zg7WMOCr<;^np~pgcRS(bB&-ppzuwC!AFb?c9ESP9@wG;#fZ>|fZ(POl*o1hQ9|*FL zPlh!b+M1=IOU-ngR}b3hz8@(uO|`*`EO6oUP{%)>VmkC>b%1@;M&99HIXNHWef-Q) zpl-Inb>w}^_qG{pf))+xqHo3+)V_Xg>l)?MykgkC4&X5vfO(2pzNJiz(|GDJV@bE% zS+TmZtzT6Y9M}*ZQaLfMER8uQv5w;(E*RGxY(B=%PTEr?usE(7_3!?Z(vtE|oeO99 z>TAWN86mYYb-Rr6^0Hr8ZQd$7fD;w^y!LT+u=X76e&!cRE##h+Hg$uPdLTVv&sY3l zaN`<^SRaJQIOVzXh$Xm=2?Hqk9~luKMXWDq#0AQ`Y&$z#!v#Z^ zSR^K)6Za5O0fQGNHoxGZCe#y*!Rgt?fRo9(nON^hPA(!hWu&+aonS|b?8ATTakdic z)hBNuwC~=Y^2MGt?F*CGXQKxfCdX3ooJ_$}d^b2LC$$hn zkWzDVQVx-DW7*`mZ+DJulq?$$>s50ERRvebRjW`AAD3lc-p9ud#sOMfs|>OkeT_ ztL~d;VVGh5C+zj}dlCzk={2_7kzyK2^79gkuwMwApS0DgJUbqC;QCdjg0u41Fb~qx zTUHJ_Q+kVO_gX`?dYTKzhTC#*z3z=0c%t zA9e6b_SkT<2Ictaj2_IL_T&A(MzBD)*wKV*+!l23J9Aw`J>J1cZCjWx^q*4rfg>-Mjb8P8t#S{w!`l|)-<%m4hz z`52qy>>g{|`N^AaFBDtUSETb-+glrN4>eCM8{{dx{O^TJ#|0tQ`BjrP@57XGD6{8? zrtBwzrt{xxf{zo`2XqF(%^KlF?r48>DW8fpviq5dqr-aCw-m57sh6t$&-H%;c8}4u z6+U_mmck-@>GCTr3PL8$22~y!)O|61&Hpnp%2$sgXIX5Llp#?>uQPV7BG<5o?dSr| zZ*Bhny(nuJxIT|0VE*$vmUfI4pWJOjY-B|K`@GI$;3Brs-L@!qlks@&{KYA&ojrm{=Y3I;xASGu_&Ij|NlqO9s6wmZU5&Pc&|?qbWYwkOB7OV%WSXKX~<_l zhg9C;JAS22kpBJe-+#1qg&B}JO-DOE!LeMMY!vqpJicNi^Z4MJzjqKcV~O)WQr!_T zp+!3R{A@oCjDSuaQ@5S8=e%TFWWv<+8ct0biA@iu$XVoHO|SSYwd z9glC#d#V4J>HEL!|2$&v|JJ|%*8zSzr_XR#Iji3*6-|{)^Zis@RE-dsKF)xCo_cpW znms@zK&1_ndInkiV#x39zr6$12nWJ znG_kCvMR*vMc(Uwk)z{oo*V_U5R8X%B4iLWzXO5Zpmd;exFv9E9a6;UMNW{Nd^V8c zT|p%+-*^DXfr<6(p>Mu(2b)!kwVLY+(r?}7Jv$fsi(#Li4vD>5k9|snI8r(B^nIFi z;3k8|Zl+!PkMvo?js^d=S1O)Tks?aN3vIFmS(O;hB|%VfbR^r!OHVIwcySV~jbUeN zMnc{vRcwrmbwB9)6@|u}_Ij)2EAmT2x;lQKP~e7x&)b1Ym5k^y?)36S)+-!!dqIdr z+!*MjZ2&`%nOD`GqM}hM-iQLm^f_T#RN;K^R9be$k>DC+)g2+BY-TyY1%50Qq2qpR zhLxCwrc!S(x{IeOUxW)&ShiM;C@W?@$oQv@!Rxdao7c@od76EYi&auodqhDFwo5+;D1T1k5!e+KNRf|J#x%8&CBPqss&i2;%s zH)4}Q8`F@evZS!=#}jAl-YF{3VQ3&(*n2UZ;P!MJ>{xo<+DCRX7iY`D;M=32hnH7Q zZ?$lHG965e(_px;T(n4nzZ6$&DygC;M!87MN17m0o;2@>>p+VKDi_&SitO&V@)4v7 z)RWQP4T+7UAEUDzq|v#5zI?DULAxK7IIXb#9* zjQ1KmmZ9Lv*)I;K8m0AO@KEaW?s5%L^DSN1Yh>ihHw+&Un^EbrU+{h6eipoewA6do z9ct2=Rs0Z*A&#c=od#wb(B#XLpAfg?QFUA-QCVa1uLQEv2J3?_wPEUj_^k4yyfsMCxoSG;wCmqw&l`m3yTX$0xs`7IcD4zI zpz3HzYOp;`mS7DX$ZOVX@Lu`&c^{{X{f|>FecT?c2%GnjMVck?pokzXzJ!YcPL8<{ zJcYC1@Y4s+XRr33-zL1sSjFU+V zh349K-}Vk#NFJYY4s8l3E}45qCi{jy0#58s=HT%%4Ek9CEsOJo6us{hQ}4OCU@{Ws zEB--$ZZBeS_N&7~kvzkMWga!n)Cki3yv#7m3>LVrw|GBRCO?}rOyA9OR;^8I9kL3~ z!1u}dC;8W1d>RMLycz^lxyU|Bz}v|6J;hnn8*uR+Q6JSE2$bfW; z#sS*vg<~H#mzkL!YyGF@Op&?q1G!rczVD~o6eBR(;2=2|#ePwMe~Ey+fvmOMLTfqa zk+(j*d{M^Q(-zx5U!eVu#f4?VqO|=~avcpgUK*h$GqC~~0~S5_C8tk#Xw%iRR|<>P zl0M8T>-Go6XKr>3g{{30)FBmH-+V$D>qC;e0JaTNT1d?x355Tzs! za>8XY6wy1tV0!GF8H>aBA+oYIVm)xhqIH=H_N0voN!dE7%loXuc<2NwAPG0d?M5*i ziHFjLs@s`7aJzR`A5~!P&Y1F1F>u}yl8PUvfknS=Kw)$FZuv}`&fbsprT05qUBiZ| zO2zl^c=x6WUacB^D!w9clS7M|0GZTQZVILl?->;PKHqW7X-9x-TD3MH~jae4XKyqdY_Q@BItG!4anZwvnRQ-0o!tZO> zrRvwbwbi&s8E75Go=TTnC=g{=8=vDH=s30l8a~Uza&Y_GgQXi0?>vUL7o&@}M<#7B zA4Gu7O9Km)fW=G z9vc}6ruBC&#a*_PsuIbsNl57Fd5gH4+p&_)le)5s&uvry-*Dg?*H~G|Se2u>hBJnk zWz|}BM1ZVHAu15eKSVGoB*p4`EsBEzjP4|(o)#nKOmQezm!+Fa%l8C9J6kKb?Jc6g z*k|-88`kk_{?|{#hEbNN%xm$PEWsPh;dCFLY{b69%o5Z@8hNqQ$ga!w+FNt;(Zh7S_uh6fAfR+Gm30fwq zm2bfgCPaAou%3Y}zm+KM(aRCnGylq3g<5q?E+d+gvpf8Vt5RZ?*ZTb?Q`H?Y# zZ4#I-e2jb@Lvk|Y&WG#LK3v6oaQXuXK~+8^O8D@wfa36?*ZF>I22F(*mkKJiC#KA@ z>{~&~%2wq8>g%|@eYc%Mc5BzNpPCp;Q|bsr1kn}{Fke&d=YNj!08(tr?751$hb0y1 zGVs177(Xa1pS=!Tm|X@=|EAzHFaPA*|^;J%L* z6K4(oXj0Dl6#Q;v!_yB((M_ z`g}uS%>!n)&_|iasL-8<`N{TCST;WyerJ_$aTKI%t~N)G@B*(*pE4W(-gT% z*RHvqeTT8(5^R@8M)#p)4eM7<*8fjPEbUd`jxw=2-f7LFG;lfRL9?x zEU#`G#=Onh+pYduoM3P^sm2T`2I-etsY$s&5SnZ-W0^1*Kc6j}x;`&~kPASz!y873 z)u#8PbcOYPJ{TY8P;k{5YL~Vvem<>hP~|k39f_&8=4%?Ow9mMm3eULJt9UVZDtjU7 z4m)sE-pv18W@e%)&E)vi-~1{3G7iDX}~PMt1n1&SSm7Ds{?-J#{MH;4EF_ zQA2&mJan$so37G!<^v!wsYvOXIB=&gk=L#n^kG zmT)unYgkH0!%9NVAK_)iS@=^nRKeP>Nx3jIn|Jf{wM*1AQjVh?l~x*eOn}YWqZKhF zeg!2h&|?KMbim)%@4i>6F}>$GJ$0nKMR(45F-{0J6}AZ@<_ZWb$Tl&1S+N9Ti++B& zb3OItx?_MR8TI~D(h#Qm+Bj{EP5;Y6!}8A$mY21;aoLA(2TXOqs=Ze*w*v;zo9IMK~wEe#7B@XSq2sVoh55W+-0Q zt=?vAd!Av0c%b;Td^skDf#E_!?(XXf_4$^;YI!9{YiBp!FSQb9obvlHL=w{+rI7|% zPe=X`fr*z;zPh^~yl`XseKzr@#sGZ4;KImuD)+w3L6t9zG-wiRCcQG$fQ!iG2kbHD z2#+V%V;+blCXzl_bV1SQZ|Pwa{@4lT*4nmvDAYB^qY76!SKoCsC<|mA^3fq5<1=ip z0&zTBAOHGYdcO%}Z?aTcyr6t2^KHGKrRs~j>m!6NA*x0a$-9w2+FethJ4en@LK5L?^`JH zEk<9I!W|=7AU=!yy9fJBZQU*Xsa#j>xK&>AZX)0-i;%{K?WO87d8Cdex( z!SD$=JL^o*L}Vm;TavyLx6?U70Dx6<56?VMzIn{+uyB90`4T}Fp%(GEHgBhon6UXq zI5tUQs#GT7GX3V@cDP^q>M+BP`E3pp3S;izDRQgfLEv!S4zEa5ge6mg~PcFZjf3*XK=~#~Z{0QV+t8%8}iy;BPF(b6G z(G}QCBNluSd;**pnUZi z4`n7hqUMlXU*kvN7Otu8Bq4QOcI%-PtcD5R+e=f46Dm7ytLC@@>q;gPnWq2H`$3b| z6jwhrH_@(dEB;6TAdjshy$;g5ZYnsNoRf0!3O<5voOk$5==L(3(G8>c-mQVoo3wcu z$zcd~X)1zVhV|2JIjcsE!_Ve2XvIm{fTz`9WgIRyQ&H?0D9CzDKy^2NI%37ax`a^tw$j&rVblD!__V+RWCORY`UV=s6 zW?GL-p+}liCtldFrH&qirpK*&yc46&9UQ=Fw?zw~OZ{sTJ{y$WREN-7b*dY@o44fR zeL>=JuO>p6^}K#X+7@#+d^UPPvYdjDIF{gixYxetS$~0~1EcblfO(L5`*zcwVGdtp z$T`Z*ed1H})!w%(jaf43%iAR2uSpusP9o9KbOpNsMF7Ho+p4R4$ld?kcuy(+*5%vN zjjFftO6^=}xqWB9l+`47a#X$v5w3euN{S|7JuHAYmP& z5yik8tpJXh2_l-+`K7}{Eha}3I17WZw~Q@HI)CN5MIcz{uJ(a&o6KJoIr9a~zFx2&O93SZei%T@;MXHm5tChS8d#g7=Rw_w)MX98y;F zY0`f#dJEUZDuNXul!<+qa&{j>tY>H&w{Y(v*7F0aFl=68Aq*K^<;7JbKl9H@3A``n%|eN_>33^6RLd#vA*yo-INsKpnv>*KwY7l8@`~uG4}O<=#{hF z8fsvTU-a|aLTQb7U~Ktsd;Ic4;~&Czdqn6wpZ=q-S{7E@GaAtbv> zOXHeVRByK@#S7t^Rf{H33`QDawPL%SY|0vYxlmDVrQ{ zzo~2WPMrgJ1wESfGAP^w)i@VaYy6sq3a8rMymdgYz%Cr!T3@zC)1F4=$PNGAN%X=` zsSrrBx@#r^som?n2~4YB)ZN4-*1&YG&x2__G>@`yQ0?jvPNUifI$TQP2i5sCn!0VW zrqep~iV8&)pN=4hr&j7_T#P*kzWresNa0`5Jt0{B!^RWIPO&J-S%W~d${)`#1Q zmp}JP^}OaJMR+sSo+uw(b=#m98E@R|6D?bNb1^>~>}>4Za#L4V8o*1`Z+wX{Sr4ss z^}|6Y`YTwCW~aBGW2p{f&f69=mRPYy8^JH7$!%^V7MgteI7ez|R|0ox*N_ft%|vU- zv5^Y!P`^c}@g1QOUfvtF5oM(yN15Q_W_+mFEiLzL^U;O)B+)cI;ktlfKHX>-$!;=d zZR2)sSWf#W*8P*4(~vlxF_A&WYDTH($p%@)=7lfk5Q|IMv&CIG*Q;(UkF-o8r6OSS zu3<~kP({ky?1wW;I||#zFuj*r*R{Kn<1Q3pcLLI}w<(l?+w;C9x;U?;d(QIEY*rKEJ@To3r7tzcWZ~)pX+IAS zb>CyyhB&hJ*J?ngE55rRObVovRc<%DX)<(H&K@?&ZD}2+-8l$iCgy(7uo#|a>L@z3 z0^+CTahZ?UrlZG=QJADqR0o(Zre5!fuJ7jTfBl4Zl5mDHFL$h1dpoLG452 zlcyM-ZAHXp#QgiZ>bfLFV;Jl4TD}}be`aC$U4q!oF00jA7xA{~Y`3P7xxfV@f8v&R z-DkcPFK!7Ygjq_;{`?Y=^s6(cw45)=_JwvvL2lTw@&s-{Y?HC`DZWNCA!Vak#fY3o zm(ByW5w8%C$|@S2fU1kz(wfj&49IG;wXv8BZ+tiw=E$}~pg{;jP^x=(7KIsmd^D_8 zgaaEo3tfjimcD&om|fd&i8S>K*BV%vSp3q9%ba2`{8wtu z?jEZ&RZq?|7HNlG4!HNq4s7zXxr&EL1$i3q5)-}acSTcI2$mV{$&gT4*9qU2Ck{=7 zmxUahn5Vb8Kc z+72j}TR)xmfjFmexZL4k>aIB4jnFf?dyIntldMHTEjKXUDkP7Svtr+LwH7qVI8kCMsdS zB5IZqe&k1BH5rx1wQ3zs{0ODZH?Dp~<7w#i*hrmbJ})yjESkfQLMqLdi#n2i{`M&c zn-=S?2U#V@aVBz0LlVzulx^0-lr?A#zoqe}UwPW*N(@60S>ZOM$n{On&C9`4VhB)D zvwDQI63F#Hd;e1XVtv#~p!Kg!OS}rttT_5fxSB)5!6L6Vi3b=Xe~nkCxy*uk zKZSc6{FP)Ms@d;2Os?9BXF0bT$)K6sS^KA_0njleCA4fLs0{lrCPb@>zqP9GRjzNry9;sV|*h!5RqdwLjvZ1rsP`GNp; zQx$JG-sMt$X&-UA=!hjI?W8ej%zS~8a;>BVmocPhY*GA4m9U*KyL6{@Q*ZNL$J>eRU zU*#yVuVz*MDU4z8Rfyrt`O--w9lswid`uS8ude)9aagG)T+r!ZA38^HnGD}#G;XzZ z+rJ>~Kq^6Vk0MjRn*%}l8T#)6_2ujc9DU*q$8*A z*Uj?M>V`meofP@4tEeDlEfb4c;?MAXdBU}fFTo(Mq7gRA3Y#hyd+0$X2@C|>u?2ua z)tN4}Qa~pYPcQVv+4)fQofQERx|+PnVXS90$W9N`k+gV`0m@lS<)5ywHNID&?5U7#zVaXyKeUYDboQ_IyO~*O{vm1T^&~?Y`_7*t z;Hh3INfG!aACDWeDrA#;@K{N2puah~S0-9j#nZk1BFQCABilRG^J0Hza_Ut3A$&Fl zHurIG{-5}vx0kCtod!qnE-l@f%-8+0hXs5=<_UEp<#!JF(viBtr>@Jl^Txm2$&iW1 zb>*aW=BuQcDkNPebiArkhs@3k_%qNcRsx7QE!mYzSW$XeFQ9A@xRN`YJIs+rWwUC^ zi@ih3yB5z(<|@lip3^G+`Qi3VVGRZ-6E}HwV|TK}(uuE>!1lcrCOc!PbkY9^O(U?D z)}HoAHPF37Pw2HRP6eOb4m=bU1=yW_{emtV@$b&9e$-7Jp%t=NzwVNH%MG@;!Qpld zNSG&Qqsxp^J7d9Y!VWE7`PFVhs-OD<<HCa_p$;V*z(Udu25Dk1g9M3w-=-%T=MHXy534enAgncv%gL6$c30=uxvVoA}{S2K)gnMkRKLq+H%!tiLs z>z8ZWM7BwdU~ai%4d*@)l$@^qD9+u(WpRf&%4mDx=Hy~3USi^oSu+X)&oBmQG!MVYh-9g3oy1j%4aHi zU(F4fwA&_#x|aktx5Hafxeuwv6y15p4hOB!Xp=`rjz=HT1>pBeoVdRlX)tX$W|k9a z-X*P?6>qC-9PpwFi;R1Rqq{Bka@1d<7!D(vbKoiS)%?@5iJy0V6vZZ$9oejN^grja z?lCDz6flBkDTnYWf1-(s((c~djfj)hMfA$EqnvSg`iLm+B=g4oXR}NA* zy?|WREAXxu!uYJVU9!Vbe4g+T0MuFU86V}my_)r2IN+K!159yBQ8L~_2`?Z zA;t)`is5<`8a5T#sU4b+*qOWZ^o0DB-~|SY~K(F(~3E|CGG z5g2;t?v#=ehVJeZr1_5TbA5m2=ef@8eaG5st@~_Y>lI!0G!18an{aG>uzsosBzM8B zvJazR+ijIRI830~jub5VFr5mHAF2ovM1RICmU+!Qy0WnT?CYM^X}AOM@*-STHPy{T zNgjz4eCFzL;S2b8FUQ21u-M=KVa)Bh8f&BMr`J2$3+n< zzb5MsvQKL3FG*dDdg-}m0?iUmEH03@#-(RFgOJlksb9c)A}{`dB1p4+nK z+(_kX5xJB+{WDe%5;VO}TGFuEf*cmO1_~S6VX?Y%O)R~57hFAKZi-BoqqFX?Nn|XR z-cyf6mOt+60sfn9UnbQf9RNpd|Ti%M~D2T?{oF>DfrOB z<;eZ|<2f&_uZWl(8fYd#9+#!lba%X z8~Dd=&?n6{q|%Q&*E!7CLtX+UuPliPkZzIf$<#W{Gf=>c$y%sxsj0HR^mAUFC094m zB2&Ydji1a8?YA!kjGk(0R+r=i@iH-$vaozMmlg~wF3~YP`WYSbNr3C#ey1KN^eW$$I*FLW;>ya~DR^+FID;r1HwSV|H=m+MZSM-XA>!m-D_=21grs zG|GqtqVZ5MLbft@Ff2d+>~|i?X`SO?EF>$A!_>5t4ft_n3}?-CTn&Z zQ8ySFzeIZTSoHoyyq4Oa*6JcPG}Uf({{7}#i*5T~mxlaM(L_=k5ufj*y}hNcI82pH zF?x~6t3<2n^D{3IVCkJK^7j#tv*0=*=68J?eIU%UMMB;3bFF{>$iP@nPJ`JnqW5E9 zI6js>$OyG+ZSBfq&LuP-UV9jUs_yE#p{`y9FO61b>ixGMvYvv{V)V5SW|(qTTVcSn znCsR5ps&oCsnwDh!rNvXYcr!(w1NN{fS}BI>la#QTXF>SGZreB$m9#+sUowPaK~N zQ(;Oi@FKjzBQ6;{E1bPVbp(z4=JU7aaC>^j<|H`a1>u&>4JCR{E^GII^V}dgj|Ev)qkB zSy}n#0~EI{EJ4_uTbMcd1LBHKf3g*;+Sw_^`5KA7ADU9+PjS-Pp;cr+DECt!zBtx@9dX zEG&WNl*Lkje;XSQgvT)PaAvk4u4b*mDQ5+Bk=5j*hfAb8H>f8*)R|9EAm7khaPvTn zKYLCtfwn{Epv`n|mQ+ky`Y2R3@LVFmDdtI+XL zETYf$>P(L_O-y61Vj9`1*315S=;@ReKqtU&#KBRdDT@QL=-(2ac0$}V)V^w}4?GmJ zUTUg;bcMMp7Ee>_PXCdEngPWuJ$@dJ9HCw5`K3^Hycovpc7*M+$N(8-g|q4$GU8(f z{{a85s^Jgkm3at<83=?mb-Df!zd^f#tL#l|#ah~XAV54aeFc4?-T_k_#DVn_YYpeaiupDSBy}W2bpVdH60ns9C0;`rA-=C ztPpiLknnI5Q0HUx6%Z(nF6SqWwrE)@P-%PCNX$LhS_+^;kH#MQxb8e_GmeIG6qjvf z+YTSzFxVSFrg@4xqp9B8R?I3UuC;NKqWL9(n@6xf zo_}QbcP%ov#9zpvLbV~41+orP8G;BFgy*fj?C|w1Us7#|i z)${P;OLXo>UDbDvayV@AXs1upBEX-G3P#dr;dq*Vb_P0NYNE_b=>9aXzY&R#5Pd;J z|EzMqH|Sv|l$81%Kpr3vz=?y?!f&cwg6nDUl=O5a*0!a_oPTrpmjinV!c_9}b39zU zVBgu(Q-!026#I+aK2LUcY5H9-X{n#Umd1%07(9?@wA<{bhrZWO1$ybxFK%cqt3wu?cKwBZFza;kJ54C#nPI zTe1%&+-_WKMw^a5>KN7v%>RdU^50Wq98=+AzN;pV_j!i(>@c*q$1TeRrYRK)U>P>QU|4byS$6;{**~nlTrMD z%@sNmf(5BPr~|$W2;Do-XEOToNAy0@$}T>XgNDUf;eK%26Kn{i9)$?aL!~*vafs7p zGO~QwKyJVvfQ_N7aK0KBk>;b{vMBf85@x-c#8zMHq6Hyasi&&pEeBfqPa5VGgysT4 zswxe}C(32J$Yyo)(pfz6lh3{yvKU-aEVaUGB*Mh;`W=|h!0bc0@8<=NiVIhMAat%q zV{K`yOuZW(1_pHJTA9Tu1qzW?AjJn0Is-Z(3X8UESQF&idBl6JCql#frbD~tg8O`y z3_#JA1-vH)^YtHB&Uv@tejQkohP$zj5@-&SM0(NKnwL8R8Sg@03-DHG+Zbw+vr zMNdr&>_nuHT9$(|L1ie`-L6YDyTAHJBCZyIjxEya&HT93mVt!#rNi_UbXhp0h%HtW4k$Vmmvix9mH_;*pgHyLmg*L1+UOxa!k&8M$^LR7F|R zb<-;OD%QS&qI5Vnz~=o|SzCwt(!=-Lx9^D=-As$#4ra+yY&g_s8GjAnll9uRXT(w) zm^5Tt?u3+s$DuLdS1q-E;`WE5>y?M|-_zP3wSt}Qw5%nG`YOyYhNM@p?y(%?+fl&= z6Hl*wqOY&sT~0>X&j(h59gYOhz>WB9;h=JCYbDVPNw5}(rnGEp88Ez@)NvfxW%lo2 z6(5FW-M9|F_N~mAuBC3L6N)C`7UKO2OY5~Q(KzWy8V=l&%nlo9;-I>U)syU1IZJP4-T)-{uN!oj}^6>XGC&VX*hUPZhEZd^ecVDAwMhmP;UOsFq-!TcJ z=^eAeN2UbBXesOQc5uJGxs`mvypUsiH~5M^do6b!ZCFoYxvt95iV$)}szLDP$%i}2 zf$F0PZoBI+@qDX+Wwha5Xc0*_Uf>)1Nfy)c&Y&j73{)s*m6f%>Az^-g*xe#i-Aci&Wc$nFUECo_iYL2RiVDjMkIUz z;Vme-m|v;sNAqXRzmZW>$2aoPiv22|D%-kf@f{gnSB?xAt>lxs6r}Ui;-3{OjX^C~ ziO2tgc4KH7i$V7;0F(6m&y1FzkOLQhRVhwyu*(k?yO|6y|9-yjK!HzQzW>DpsqE0m zX4axK@TU`m?$aRs#M|d9VsH8Evhz>>Ix-*Tddr<6*!BOjO(076Qv`ngESr=r6O1$$#7X*?;ouBFxITJq8Zt4 zKl@8>f9g%*rxsdkz3SAP3k5@8=ZZkr7(;~Q?M&Q~)&<38(2r*Oe)>C>g??0^nyF2AKvR_78*V$jVsB7T#@|w>!G2gO=5xq7zi-^HKBk zDE*Vs7BKAN{aZ3N}YmxD|rWju*0$NTB;q>ey-n8XvN?3BxQH!sTt-0nO+|lh&~^H8`5r z>gu{RSLX~iD*-|)mh9BuH%DS7j60VoC_s0_4O9+?T^X5aL+2zfWNT!88v`kxu_?LT zpj}#8f>3OcqINq>U)fNKPU|3Oy_GU4dz`O{Z=Ob27LrL&o?up>$h$0L%YUis{d(FV zcxi02^IGr8lLqU4<+h1>{~o^TJLqeVquUYu&SjvV&_*;$Z9q%eY1c&P>azUE7N3yR z#I-hxde9q6QGx)Qro8bP6gdKc% z;gC};%}8Pmy42AkD=IU1$uE{k{vxyg&q2SI&Q0RlWJuPToaD)E6+T5CY|whmRGX_y zeVrz*OFctHq{aTIIRd~1yni)!UfNBL_f80v+0_UCe zK|^>Xbz75=SL-7o)*g?ee-7-%y61%rim;X?OI@zCnJx{RQi`H`%yQU|gObvXX0{~3 z!@vw1Ogd1e26U6(rK8etnvs@37k5GG{fT-h_CHWHk40#=`&4#wiD19MI%DX^{ag6t zetfEu)Q6up>?jpRQP#nn;j1rV^I#*9^&c>h2LYN6JjTjlX$ z;_pc99MXWQE37HVR9mG6tlggnh*gWMSAPAy9^RuaZi~p7%Fo0#TZQxO>2r69inR0W zA}o60hu)FZ`&72UvayDeCEq!jEx-sAtGc%BrwE@J4Jz6Y(=fu<4+(K^rP;(!7?b+X z3E-38wjwo9phZIPNpAS$g;olxb43pqidg@s`P!Xlsr%LM{VnR&+p+St>?ZOCVWR}v z0Yo74y0B|xxP`j9W?!N_*?Bc@$y@0X#O0kROlA5doK6*rm`D*Uf}PF#Q@gXlKcIM_ zw4+CY`VPvA*S1K91btV7w&oUTdFa4xi}mHz)^1WSs<34kb!T%6G{&s}vLRu66ps{f zi6Y+TMQ^VHZ7q_o30m>Ks#Vz|>fkE1_8ptM3>fX3&3d(AFwc;Cp+7!B`qVe2m2!@1 zA&x`aw6E{{;ENoX1i@-$-RQcBo9}xgS7@P*eMg@py~YloeC(=yssbftfiG3_4~C*W z_Ri6uKU>~j2O`qxaZ7PkVd5nnI5UGQ;+Iz^1mo%*$*b2CHPwZMUmfZF`-wEmut^bj z9k;*)D>;0!5n5!x3eQxBA}kbY(3GLH!0YD2nxt8H@pnR9TYaWI7jCa_DS7NU>FFEg z%40l)Z~Hp`9!mU}+Gw81Nknn}sTf{pad8!Ui2t|~4D3Bs3E!GR>HdyE7qE9Ql|*O} z&`swnxrdL@gZNQ-p{EJRk_Mvzqe0#oMZTVLOd`|JX1gr|X-4j%QL;|g;UYmnZRwI= zBvRr2PXh2f>>)>Zy~>^yd~!%AnEJr`!L{zYH=2W3l03R0vZv{$TA*DnQxqC+&r>YyPPMQXOyCW+ce`^0Q5-S<40_9WSME-W>QG{%N>O4)Bvzdbco z?os)o=%ufZSiRQM+ccsH z-%8w`TNJCrwM!&hqtk#9E2QFdj`#WNnxDf25N^p^Da?1+Vb)d+pLd@CF$}!Cu7NL8 z$Eyl7l#v?gwcHy_z7Q4GQL>g1%n#^W7=CVr`Jof!94lG#kmQB?R=+a#EkCUkLqt%< z?Df3FEs(|zAExcVDf@=5yyl!Y(e{3=Z`8ir5nE?CC#qQaF_!+ZsXY6uMdrc}@&<`} ze;&1aF`Ctv6pEYL*gwA?H-&70`zntp!$c8b;wqo6hVqHS@J zDy5+={NhEDaEH1;)!XAw?XlvvHja&JGJ+h;$)z_dF&^xzzksls!)MT?1OO_-t8&ySP|YGc|N-$75K zcuN}gN?v8SYU~B*RJ8oz=LalU6}C5=U6Do@*)?@ZKu_$U=PQfrPoMs?H@tF#c1*XD z8LqIg)hxj-5!WNdc{HVWi!N?Z9jSSF=<4Q+j;{%AEre+CpIFSKiMFF-8qRj0R5Vw8 z`;_H7m^oN+iAQasAcHx35i%jF1)gc5#5BQp@jVINXNUN}GIDG5oSLv%s#OQ3vaAYC zv`)#RoI#sn(Bj<-iae`t(;w`5YdfHi;u0BU>=s+nGnJ^#jNMuG@v>gx7GSG6-DPF1 z*YEG{6%0;rbcXcoSG`KL0WX33`khuK#%30pYGC%@{axmwLgwRZ9fpciFV$tgXsA0z zins;VcM5#)=ZV#Bg;eo4X7@uzsZI~Hp|Z2K_qH$q<$wx4&muH}n27!Ddx3A-DeBzC zMbSmbr6YSuD;&L~URZr!{*1hX4DWBob<4__e9Iu+RJi_QyfnIee87p?hLc_fn*+y3 zysN0LpzEwk$HRqLL**$S2V}uGEmWyVKZ$OL9NZS4L*~f8L4H$Ww*^k{BCJu$?)T)| z9GV61z$IG~;I@tUpJWveVWyU}zgQoUbI6u0ec7;>>Gf5kdK8Lr*O-5BkDwZbALyQ# zC&~0HC)Aq3;uOQp^aAe+dOr%hgin1&nw+8*R^7u|Ju@ynpD;i6%(f^?xlmiR2lytG zvf>sk-6hopGI6Ffbdn1+=ge|)U2XMV3eze%#U@GmT4#a$mGKwCNLOc%8b8l!F4SA* zR_{OK(qXw!X3WueS84yuKaMoSgQE257vZV0RRAZX`q;{cgI68|v%@9+KYPrd$dQa)B2Q~SHMhaIDuORLIct60%%Tu$2twuvSt`uK;mdHHz&v=x0p&VnS69{h1gZjoC(Gu`KFBA&7HBKsl9|Cg*l3(dcGWc)Z{zQGiJ(tVJZHJ3hU=?a_+-wxW8ogyWOV)Jg8;w^}HZ-Ofi5H#Jd4ZpAf^tnYq zRehOkA_l{TPsi+~(Q7MZsBbI-Ua{FcmKx`E^OWEkW=2?nDwoj+Xd&C#2e^0^DKTHq zn&TE|J|FM-F(jN3)Y(;k%5Z`6^*LYQXpJdZ6sMg|EoAb{nt)4^<-*ZAE6R5HHRUbl zla(@8YfqczhrC~GUYABDscfJX{utVl!1F+wfS&IZc6$>_`z!nM^4AYe$ye354Z5}2 zgrD*%`OoP(2Dd;f0C}Z9+bnylOCr?BsT2=&WJY%QqDAH!GsN7e$6B>JP1G0KtYlxwP`u5W4zN)+s zv7E&Q8c~DZLwP^GE8tazk{a5!JP3}t1HFNVjAP8slb1o5`OU;1&IDJ}vEgK_D1qDa z5Lkolh96P1Ce(L)4ruV&m1I}7YJM~R z*_SwOuw>`CE~SAICq2$%%n^0yu40_!3uuuxeDYPr-rK}LCO;ql>*%d0(sD zJknY!uYF36We|D ziP<|DbUwQvEA`=|zbDCu_IopC;Q7CA7zHiXpN8cI*gthd)j;)N6w7Fk+_t2wx$Lmo zyKLsO$eQGKpg!AHr1mh38p1dsDGlG?t3Ix&rdR6uym;EWIrKfP{PE4biIbDdkH=UeAEDCu9xyRF%%HU$B2CV1hZy|~TM1}n zNs+Tnb6cX@>fW_z^Q=L;peD}U8*M&!v>8ddPVC$Iv$LzxitGr@H*qHA$vjSaDWC}| zVLpYn7*lU~FB_Yk&}=fYr(_Pj-+CvJ?IBnJyU?P-fvH-4eg9bX;BrC$$QoaEVT`m( zb1d*1!OqP*iN|dPZ7j@fIE8;vMv1LE_#*09SB&738MZdb%~;mPE%+-AwjAQ0T2*dE zx_|%fM;I71wB*1X+AV>tJd1t+*c|^>~ zJH)RV_IpD^WWPi$1X9OqPg4My{PA^HB2d@`lz9`?*zYo`_X*e?U$R!(2elEvK!t;l z;v}(B*VwC%)4}Mu1Gm}BBkLp`&>tUNuQbFFwuYxY#Nr3I=9+KjFfdh1*FyCpJub9> z3Z=tQiILDJu`e%aJ^(s75g}CU3h0O>^qy_>x?7*)0loW_&)Kmm#!$ zT{ry6!TAz0T#Hzm&mz}8UTuc5_`1)7yV|Dwh~_h04b(|r9U#5uKnZ$X>IU&Qc;%Rw zsEvk)G`q$27vq6G=I3(W-8@vDPq58ieUVZP8;;1}$rz5%#$wi*XKh&h3p9j*-|R2x z0fz64DXQq~7Np0dMOONevLP4dh1&3XY)Stk9cxpF;v?)Sr-K2=-ugf*_($VHi;-aO z1u8L8%Q{sv%|ou_vkn5YT=3P=VmC9!4J}?lQ?&`iEYODJ?k@ItGNQW41u53apXA$X z=6<>Do~ZITE*6h@a2qsHc~Dn$dE00+K(4*-;U(4J8o*X^COZRk6w z#M`G1^8SnT-VL6;(;q4q!xC{Q6RF)$4^l-sjncEo$WDZZT`}#c1^Q>xSs?K&>}CRG z9=6N+VlMVym$P9v*@%$>@D_>zCRMv$x%dN1-ivs@Wie{-E~YM}#WJ6vGKp+`G_#xC zHm$p8g)mIzaY`&+#^!X-=D@348i~|x+!)F?nEap0R(iuL%dOD?C;Vx6Y;N|m_w|Bp z!J^UJP}9#X&6$+G`N5%DGd)F@c}=1x@%XmE)BwWf;rd@r%@n3WS=$>%XD

Sh-0f zF3vTx(InKLs?;jjf77}nPS$XZwH1aZ2nI5{hU^#3mK^5~%)5%bPI;HEH?C%Q&w6ld zq$DG5S1i)-TqQ=`J%7<@eOf-F7Ogl?UME+})A=J5(FGpAT@Ccfbevwt zO#_0^R4UavciRd@@r(6>9vf(@6m~7ccG|Jwv{>yB7BPga*)y%tw0BG?6L(F zc(wk}^D2(kLGPaPW@fUatjMWL^2r*Vg&Pzh!&R)n#0wODo>^k6j=D0;MtkjKs^eO@ zzaH8M^fiHx4kwi1L@2i8T>q21Mw|It{NOO{Lf3Eoj^Zb}*{20D)HCo(x>49K_7{!( zCkj)E&)ESntHBnDYd(!7wJJ1B$c~5GeU67Wqnpn^;F~=U(QHpu8yyCY008^SdARg$ zf2A3?Vi}+n%%^WV=xaYbc@9&Fs^lI-)zVTcbUjR^AnA6$ZG`IF187rf6n&bv^$o(h z<4FLG)NPX)$%$GvqWZxKNNny!$q(^W%>N+li~kDWjGFJglA5nC97@yMo=Ypd&$z7T;&J`(kbXIERgGKm1cH%rH{@y_uHQ zmBz?_$7?|5XX9yKk+4ADw;i|AGd)+LaozT7cNFy-p8Lfs>fM~$^pJVT9&Z?5d)~ZP zi{oR{T=I05WIS_t96PFF&*@{yQ~QnGl4`pB)2}OK_3?8vl^o9~BGc)pOH4a3*)3UX z@o7EY zKaNe@B;~x=rz+2MC7`LSv((&AZNxfbDSs5kPdm-fHE{jOIcCUJgY!S$7?WzaZf<$z z^y8obwuxRMefHkIzZLaN0xYEd*2H|eaSpSbxllvB+?P&0_gMeAUk_3%Q4fUzO)3~U zYVmC6mP~w2nYxf-n|(uyBre5h>}{*k$BMQZST7clQ1inN+Y^l*&ar#1?AF4<_xo3tb|2-; zf2unKGb<)IB!bDqrV%MJCKDfd>_5-%0S1cGkkG&O{_3Prk+=iluF@~u?GCQU9DG*> zN)Kpcn)eq%hTS#Tb1TH0E6|3j*o$$;=?R*rR?9($1#U-%igFQkr>~Bdf){R5jVcAu z{epi8+Pr$TJ(|WR&`hTcwY4cZ7o@sOeL)d@uCXMBSa)|a;J@%_r5zBQncjF>o}6}b zIU#hFJ70GeKks!J2DHm~Frx2OpmqQ)DXB=4ZAo3AGs%;;*7^E5pS2G6sh+(VDikfX z-ZGAWt4$$K_5H5q$wS2G4d~b*o$F3|V~u66{}H1~H zP*ak0r?`Iw7+D}kN8rFZ+LiOxd^+Rsd5}6wEvm=!u{KTT;Y8rD`$M|W^hp!7wBw}r@xc8=~#FE&{Z z31Jo%m#hOvm~_2z(5OXPHfd$~{UdITKTsC{vZ*G<-!d+9WUCSKZEU8p@BMw#*87r8 zG9JF}MAJ#SDPE)mmyzRAU~akf9?S^vL7fwBoX=d^-uVo(a(=oKG~V`of0I@oe?OA; zk9x3g2-&+-5d%=23)dgLRRX{ll92<;8tnCVbQ8^i3EdRG61ry7xW_n6KFY5%EwVbfmZe3#2wCKMjA&?hWn2pVRhJGIm{8<8rSJMFTYW{$OX!hWm~M}K*dwx70hRi9oxnuWwZ;w{j-w- zM}Hl@jhvX$7%xI7dZUQ6a)q z$3awegs<<$4A_0%;ai?X1z~-9AX_hE2L9=9eWI?O@*hn*pXF$;JkFiCbiHLs#6pi! zpR}1swpkyh3}kMNtCkNF_k1bY+>uI4uc}!kKi}c_?p5&j?E81*hDmjuX`?pJumZk& z03g21bZib}T{xt(bzoJ`7ifPlKcpF^3vWEKDsi^Nffm&Y@Rj@5e{P*ReYLyPZ8?z? zLU%iq&2K1UL*vbQF*$Ji%wHVKr%hr4OQgVbrH-M&yS2XRi9v>#X62F>FKzPJToRm zL7w+}?F~4p_!OVV26mZs z5}nZddiQ0>HSqp|_MGJG59#xo@9%6(EKZs0%4I1fb-Y%9L11Rt> z+?-~IN2j=KDzK6E{H3|u-p5~0ZrA{^+;`;K=ef9cV>(v74dBtzc+p*n%V*#0f6Sk# z5=JFlmr;S&{NWpY3E3A;$ahCl9}+jqCyb~~%rBhWG^b@IyCK~A^XT!bq6d$0gH1xX zd(z1K6OeFVT%f-(vaF&r=51U)Q?JXo-SCmg2 z?twzsBgUK%zn-yFgR*}NS+`@4&aK|8hWy+ojz!u)=6SY1M+OB=7@mu+WkGBGo_fvT z?eY5i+AG6&o^^_q&p?OZ=(OJ1mX@9i`o0o=TzTGA6IyC8ZJ`^+XsTjoYh#quhBty%@&#nK1EbTKs)$)q@_PRS;X5^pw5vvJk<%C^+PZ#rcGt;} z2WV7{$o{mM`0H24i`}zF784cUGt!2(v7&+$SK>YsUh9-P6Xd_Rx%1cvEhx!D)m7CW4veriTE|ESySr&B$$h8E209saDXHk*%Pr@Qc zxVdtaZ6`BT?j|Z7oiADznU6$K;y@zWFOqnAlu@Z%({Cz+%n;4brVoPRUlX++m2_wy zG3kU4gq|P<)JkojYoc@`6BZ;|`+v{N56e_E9&JYJs-Cx?-{BZ8uBuEWC2@%;j_O|l z_MMaR!_K(h3gA<>>_`50Upy!Dl#UQTW201pLRekRbW!uXjaiDy;dvZ}-DJ{1N5oCN zk70|m8d8=jOFIhG4AGK?_2jYjqg@{r zA1r%bE-hvCWe!3sE)@*OhVsP>bzq4r=AL&xW@#>}shVY;)|fC=x=t7~Aea z%_}U9@SJcK%>@_4FuQ& zW7ojxp{mk&9<{R{Nfh_P(8>9G#(Gst%9Eq*@gB z(IRt|C$AKR;%B_}2j7(LUqwN_71=^!Uc$FP!4=&3`KXJ5Ch$pY_~bRTh@K5j2MDJH zu(?Uh9MX>Hj)at1L2X+!gVFiEwwv$+sul4$OnYOP%6x^@8H(2-T7ij~;NysDK>Qpg zzl+6LNwJpGPIh(4J+5XdPuW}U7+^PJ`n2~Go|1GQr0d#(0Q#zBqfYzq<*Y{FFC;nW zko@o7kgj5M#Ag-rWStHeS18_tV$w7+-v8i}j4YEVU(z(Q((~FjOdXLEe#5fx9d!xb zA24myXfzpPWZwY+BMUtAC458!daulK;SQgihZecY)ckXwVEj|ILf2DMZJmFJIarCu z&S4*tdIujSNaz&k87gc&3zx@vgJB(5N(!IUr*R8wQ&)Ne7*>hxMI7Jh9f{d~jN5GL zNVxi}`Ruh9AA>L3wm_OaD?E})@Xem*G>2|&{cwiz7Dna)qSVCKvZyW)aNa7&+?%L?8vr3h?JpSRNMV@N4Tgr+AKn>2&vv+&e9KS*sp=A8= z{?Q*%OkSEZ0^wV7+yLOJ7PYe;^cUn>^RGyY;KVYn?P!3HfhZ^)S zs_USlD3F=i98hPj4n;J#`i5wCoGG6*?B2|^wa#JwTUDFTp*j9^MNOb|3g4bP=o-3# zO6Cqsv}HE9%NCZYg*cpor^f)-Gzop~G22Bq=z8S%L1e`ha4uj0m2)i^YoO$Jfuq8J zi*Hu#6_wTe2Xd@A>Y-Q{Ozben453rN`n>z?>&k%`h86?FJ>vbgjQ*V2OE_zyN(oE_ z52n%#v^7Y{KNoV$|M(AqvZC27+y{SgT>dg`s4}8>maiUwc`^LvHPwPL`zsgdNY>?> z$Ih3}v5d5firZlZt_teHd6S1hgALc8i~U2W`yE%!Qks z18)OGA!pIyx~vc(4q{b+Q)pkP3*41B5?zx0GUuL3d!s4TuMk#jc`)NP$XYrVhQcnI zSN_JbpVuWa{7d!JCpwQO5w61npJq$NO!>$g_o?%ZKUp7>#V1Q|%vn6G{I|ln|I=R_ zbX5;WWUQvCH=d&-i<>|tCz^?GTy3gP+$h&=tje8D&tDiWG9h8>I*&#Zvi!j_OFSoe z7x-^PJ4oj+#f2o1>@S?Lm+VMt@U>en{gt=z-kdvPCm+VR19*bkX1?HZB&?G;^$<-K z-hAot=jn3+OqdEUvtlh}@$;GqGwjfl zu-&{VC0>P^|0ES?Bj2)m5XK+lVTp(<7+!gZ&y{nSr^^QcUUEnB$bN6g*`h`5LIjZL zI=a1{A__Zs_DZGw+s3LXY!n-KK!g&dRbc!Pf@^)su_t)LG_mPt$z6uu*OPSS_Lzd_ z=bwz6QrS7@1^#=uv%jWA<@1W(uL)>}MXA*q?|L3Dul)ETI7&J3YT7xcm~}H|1ScAC zW+^FXemY$2r{47gxB0BCdzzlf0ka`!mioyE(=;1opL0bCmi{u zBwv{fDAS{fDz8}JVs^Pyl7PgU2{|J$G|YaL$EmL60f9N1l02>1rtL4_3_^VrrxOTA z6lC=(VG$B8?x2Q)Mo{Q_BenF|Ab+F!cOl;>Dif>>&@tjkxVhg?S~%9u=$RLw$OhiV z2HD2dK*pvTcd5QLj=z)gvZP)Z`#iflqB1uwQvfCm3s`wosg&!gix0+`p};o@x{&rV zGWXpiW3#gUv|A^6Pslo<#_M|uMc7F;$-`Nx}j{LlYFQ$I9Ia;bS*vjX=Csr%5a(|U~v|?rp>T8zHJ%w;f&9B7pM68(Af606o zRm7nsd)QWL?rwh5ff#sTlX zfM`baw@aJgO}Sn;ZohT}ytLTny2Dsj9mV2&;%Ie3ADWn6oNdSF&bUuCws7xCmF*+b zMr7?SQSd>2_$@>)Gq(%OCN91UtK9zO?6I9!v@lt3U_nrda$jLnW6-BP z?ZXObe-iKbS)1XXYU>!*Xh8+^NizRaLi1{dPg)q^;SQt;yuW6nv6`%?7lx-h_9Wh! zPbKnu3%qVD)7H}jj^d6%vl>fFJmE$4Z1{M~#eySSfM;z_hA_rUj731gRIeiTt5mCo9E=<{fArXpbs8)9w-(19!Fw zHd2@bdR+JClJk`*4g|M-)%1`w02nu}B4`9|MYfdEI)Twc6A35iyD(-$q~a~xl-UX= z__{n?*DW3S6&q7^rv~Rsti9vrGsr9&%Kd_Wb89W3-HrpGKOxcL7xm(3Brg!!xela1 z=3?WULjh#T%fqVCGStTyB zyKw8megjGieW0((vYzQmtpyGRJIA$@MdZfOZkBh~Z&8|0({O<5!3K>{;{Lxs9&Fl( zVSK>Q(kU)qf@<5aH=dquOxwT2?|PzxA7f}9L5MCh8#jL0-k0}+=>3P)ngw0XgSiaK z*;#D_noeL?KsD;p$b4VjS=E^0RrnKzu0IDh`R3;ThHGuuUICPuk68cmD9{fDbiKa} zSrV0|wouqh9{{Fu?>=9>zf{xUn%1B8QF90g zmYpLv18L3@NtrNBHEn?m<5i$pZ!G|+j27iTNSO4sNr_gw;dhE7#tWKy$1<1gU+h zc%epcBK~g^gjokOh6!w4>A*&^D+8Q=UuewWL*)oa%f!ZoB!zp)3cXN36$dS7Xh?@r zn{neDdlhb;>gtsEjP73tHeQS`Xz!)Rhja}YxMqk%8cgy0sYUaLKja%Y;V$ndcm2J& zDEN829ThC?^R+#T=5BMyJUSiw5K^vVQ6eJzSNGD%N2qJ~v75iFY)OgFT)y~R+OS$dbxoff5I<%I46}rv))G%2%_{i*b z9PrsZ2ovIEthK9H)rR|^{X)N*PZ~yW>I&}0fA5L$y>T+mYP(8YD|v?%j4A}oq|7M$ zj*nlin@fa*|0>Y$pPLLk^a1F_)$jiSK06$6nOn`crPMdCRjBb#(g5a0yoa2aK(ihj zLYN8$m*}yXE@N@@Kg~~{37t|*O%-x;!gX$xD9B{Rd z#(i~IZ@-k#+PYB1L$01L=oOV03U*{qs)@0&;`7xK(rt#n7t-Jee7I~Mk+n|+t`m7m zJyiGyUj|;l!CHi&rp}2S~IS)ksFRVy3GD`UaFb)N%OO#gRR21+938qIaz@F+} z<)ViXi;1K+UrHE(P>anVF6khAu6w=rhbcxbVVG=!`ATYHTdbpP{f|(Sj`5g!KW|M! zcpe+PtCHbLxX$5XZ%LH>l~~VA^oP~-95N9|r%h>d7-4QhQ!3z<3_=wmK(Au@j3Jz9 zTJIj&kJXXZAp)NS<2?uJ&CbsM_eokMN=+s&e^I3>wgJ{}l$t0?hIpFDw51LMPi&=} z%(VCh@U%b(;EdXkZ93eQV#J$I#rrdhep3=zwDc$RKiT&y?PeKu!+(oxQIKMwE?v8< zl>TDASdxYFdCfZDs;Zg+Q2I)Fl${cxFB>edaE^lNE`0E5(R`oxkvB zoW|$31aYrp=Mk>2K`t;r$><@XhV+m7i>VRvdSkvr+pvND>a;lVm$;{l2Qwuq_u5)R zgEtZ9(GnTxSq^)4VHz(F z^HPQB{Q#)2(KYW1U@7Sw3(k!e15iG{uF}Zh+L++BHEnh4*A1lmJoQ=IM)-RbVG>ya zM8Cd!XskXS`nz}N*62SyMO>5=CWSmYXSXeB%UiRXGtH0lOt#(K>AQ%_U@EQFaJAa-4P(4kKxBq6>0Xe4?Q7=qBHk+*7T;4uF{!|7O-cdI>E;FVgt%ac z-@w2nLx`W;z#qjAVs;qCxhIS#wuamt_3iqD-%<*Gmt>fv1G;SbBAm_KeHT}Y*W{n- zmF9W--F*c`%$-jIqA_)ZA(0X86Uk)M3QQ;}{uu{~MRjlD^!jrK&JX+F`xq8UNFqob z{md^gr|MT(D09AlWshV~a|?F6LC^dXDWM2;CP2Q++Q?I0Wo3t{(1-W$&v4R;>s3dx zq|(jz=`{;IB4R-*g_ zoZywnqid|GK)+STO9#f$!pG#9HjV{>M$giN9Ya~6e!h}t_FKi6d8}IUdkw(q!$`qj zQU6GB;kho;7$gK^w}rUCVH}I}+xO1_DUJ~&7RXO>K52>3qe-XLVDLm3TPk9Vzq4&z zHM(Y)`V%FZvi+wRZRqGTRiX!S5t2mL#TC!Si9bu6(2vo{$qK=0;vs&f*n`u(LFeo9 z4I5e9gSCT=Gf#I{6L0GDayDFUv|k^E?`fgZ#a!+>s#5tDejls@!Is~HNeIjbLVk-I z5X|f}R)SW%>0{kQX^9I?r-U~Yphj_+$tORBe6OCaEnbQ1cJ?(BF;=%?-SBAm_QE7- zm~A3Rn~?V8s!`e)E;+euIGk`xt19FA+3t>_73T1v|e}dh~ zvT-Cb%~DAWQAEJzRfT^H8mP%%Ri~B*Sv4rLC7M?&KBv^Z%zBcB))vmi7ba0k@e9Mv zKbI#WAmIy&$(+CC9~j6BS!!ZcOU}(prIZ7@>UU}B90IJYmj}S)`JHpxgA8mV3bECj zrWJ%-Y3VADZi9I~v*)j%Rvu2QjGSCCy>6$gCDejI!E{x%h){Si(@WucL!KkcKJRs_ z1B=nuzDc%NnTB|NmVd2@N)9&k6$bD!m_ABgh-T9NlG_D;9omoQyrGGNpAc72J64r` z=0Px`8@Mx|O_q!QJ;qj1E(wq>vjuZJl@{D!&Z)0YTevsVyW{FUDU}{w@w2$hL~Z*roY{`utj(dbd?XaB zZYMJqJKS%Z6)B^dL%(Au&vJ|rgb@eKcdNh=Ak*KsoYp7vE(5-fiKkA#_C}Hvqy%Z9 zem=Sgbw3-Etyyk@ACg|`xC@3bIadAzO(JAmr7AXW&^BjWw@r_~Bt;frvF@fdQG`Z3dfz@P4 zx2Tt?fptOU1+lqN#{tyvTKTWkO`{$B;g_}v;i0->D7kme&Hc1oWK6I!U1XM@xW3_w z?&G4YAkrV>97y5e3o7P!S}TtWi~}WJq$^dSmSsY!Tw_R=19Yj@ZHPH%gxkDbbc-1>esEq& zardK+;Igjc={-?Vp_B)C0S!G;I3Ib7Dvc15)sstphh~vFd9_<(eyL+>`H!szB4d zo06c306&?#v4xfZbYhtEx1n}Hr?G>9jkR30;?43)N;9JPzN}5)ij3tjmH|zQ zCqdExa-z1XIVsmK1ELvguB69;=}jKF>!8ofoQ_ovcAZjn2;PpevbYZy`D@O zi$R=FhOe3F_8Z^yS>heZ;l5@Xd{T+=$hUua7N6=B2g+Fbj~p*o2}|2}7vL(uy4*+Z zv9d@taJ_%XilSh6Q4<>UIjNQnV@(Xr6g4y=Ue;9o>Q46Pi~C;TfE3Ph2VCx+i+aRz z$?fAKgUjK~qFY|8ZtfT{VyDj`y!mH?!*Ksnz!d{fSamX%cZS(0>t?}B`Ux)7^3`#k zW~q!>x{`RSdwuBS3b}+7gl1XnbzKnCLM5Bhn~TMDX4?LChBxN?+LpEEsa-cE2+8H!H*(a>wN-ZKp6)!Jk6aTM`=T1?z4KcVpdszU z;cJ5I33dqF0S0vZ^G=N8QaIAmEB6Y9lkT8%!(+>yxxV^^njP^{5k^e{5mdmyU74 zSJ%7j(=QFJs1a*9y;&PL2Tdt>yxKSi)@}5ZNLv#l_9obl%-V2ko`nA1&epj=8l5m< zMwlOAw|TtCFJvx);$8S{f!k6;6CCUV&|{uMrkAgWXqa1oz^oV;CHoTH*fZDO*+nd* z5T-}r=dvx-`!%wHRM7pWqrkuM#&RU>!76mb9hM z2zzb-;{h-$9bsE63ghHvAgTHC2}u_tk1*1@tQ!;FgHrf^fdPqNK5nGTL*V>p}&UzOdr z*W7SaT6%t|o;?n9B2|PabTuCgH8WT{r`yo;P}iJq&JAY(CH3@+B(RMJt}>BAzm!yA zOE*2oJso7`Y3hntx4Wp}j2dHOYNh;_8ki@?BrcP8hK z=qZOV4frVdQ8`Z@5?BWf%wpTnO-?1Ivqv^;z@uAvIz-#yeG7rl&^`JcO;V$MnX+%4 zXHjAX_@bF&V+UxSB1MFBwL%SoEkFYC>2gzrRo}Ds%?eUl|4mCr398{ z0X|kQT(AI7IDp9Yk>IF_7FljnR(g56clv0p8XlrOk|!`sf`;Dd&7$@v_2PuH^z^WX z2D(>Vsf5^>gUee-gxx{Ts1;r`my->EKn|9p>ECix(YJBQ8$MSYRd}e~D#Oalw&Bv` zl#yjBN4;d>sqVdB=8bSBtetFdlw#(vDlPtK2&Cum0V&zSowny1J3rlJ(O z`;E^`+5$hfwp-{r?$&c}BY)=F^%-HGfZ|f6dMFU+)9dyNL}MoM?If|A^D1fgj{v{U zwn_5v#+~!z^c&XGC`ET)Y@c3R7!yrS_ELi^#nwY}ZNkmfTkyJAP|2J$Zwoy1yGK@I zKY5Inna1bsfTt1`I10vLT9oDLeO4N;Q{V4rfblXhC7J3vA9?<^ zfV~qg;tkvu_*OG5MG-=J<0dDr9}lR_InjTK(ZOACCF+^%f9t;{Be4Y92+G3;55|4m z)!>Ja?aaDkS15?*Y_dIJuw|O=Q2AI8*5hG?OvC@CJjZSC;eEN=`IexhdfU11+|(FB zZ4+Fbil!Q(&?A4g{a=AYDb`lQZN{JDX>!<->duiqoM@|@?PwF??h}t32JV?20#o?sq1_JYqONiO~8 zoXU;`UGMYBRH4V(EPs)Fx)b?JJ;u#sdV9usWt9}PwEJgo?`|#6o`3E0Onzg(u)&zC zdSs@LSWe}FocbzCFvQz85@0wA{EO z28OOHZA`PXg^i`|42N}rU)=Ywf(K{~%4mBqirx2IyndsJ-n46p&mdZP;wnoi1NH&l zDe@;IEjeO$X6CD%by;9OCakHyAzn~#2)#JDu&BHaM_V>DxIC!B1T8KMlMB;DDgf$B z9RVYAw3L-kIB+-U4~Y`yn|e(kZLxPlOL9@Hfl_<^^zc@n!2(4RJH!>U3g}t3F+p+n z`{Qnv?*{FW*)v@x5iA?(!`oL4x6@68)|HZNMtH+^azd4|i~LgANUX@>5Lz--Dt2rF z@ebuWV~QdPb=2T4f3cjwzt0wJBJ9@}&=NqnQs{O+$CDu1g z$~d>OFlrRJ_MR4gbn%z7;F3T+TjLLC9kk4B;r6voD{$WkDGlnYIXBJt7`2(U%%6PY$uzTc$ zFUlKRij@2KS3)!qRtp_~3lX_~W~cJA;9oWBxFr=_xnh}pZ+`e*%G~_&BqPkX;D-+{ z)Gk($>Lo!pPzYi34JePpYo0eU8ZS&rRpIOSx$!4szR8D9P6}`Jq|zxBRJo)k;sWyu zZUZh9yZ3!)ARsuNDX3sC{LdJhGqwx0obC6{`TUOcKlx076z zDu~vI)<_4)iBQ+1zoCjf_Egg`K4= zS9G=cOu2bJIHQK>n+FY}J9dAOgQj)3UtD;8yW+)#LOiA_qNTnuq(}nx37M@!W1_FA z*jfX8UnlNPC%`G&<}Q#B_oLT;uEt(x;*(KlA1K8QDKP%fztC1w)g zDxIYNrmt+65Ic4ly)2XR^yJZAl-tsC?LsaR1EOCOleUm`4n5`}nzhc#Yo_lRv%fzs zUPev;`RIrky)=`uOVrPPq#A@rgyOR=1+Fut}YVm@Zi-Brvx%q2r_3kdN2h;{) zzhV;!XLq+^eob;Q(lF>m1duSut+!p#l>SNM8M?EEsJq}Skl`*7hycTc#0dQ%>kFp! z*%!oSWW6>h($m){;0gW~Xr#sTa$=|pq6`LEN% zP*DT(3&eZZsGr(oE(9|VG6F$~H3nJNAV@jH z*Gg6`RpO4&Z1vj;zI*A$tHoCkN%VoX>0MszUN<5i^7LQsPe8x-_-a15kSr#y1ArRf z`zN_}p8W76iRX|=YXnaHru;!GAk7t_}OtOwQ@ zL)DfVA8dig6QiaSBM1NsW2%`9GklhghbWIMKjRo-0vxjg?UAm!nU4YHP5r%ESA=SQ znztSNs$pj?$5vWmzd0K|izNUR;P8T`uJ=D(*g)=mwVVvKiz~(f7s>p8{HRvj5XOA; zdr?i~ejNvar5=5vtQRX%V=BKrKp(B*wBLo`lJyDrb=K4wS#f=azhG8iK-KS`AIevK zMJAMA(}GkdBpZbkD&gClqCv!z0#m|r_eLA1{=eYnV3%N|b%rM-IZP5%om#YD06)V1 zIWZ(pbzI@SRJ0zDs95XL$v1-qk9cJ32ABR(v8^@dYaRx_EdF5P-pUxzoyZ|-u_#96 zr}&}Tc@pE3b~$v&5r~|U70n&(JK(dKG^`nwvc5z~GUDnZ%-`DaugYUvep51^+{jbC zG+fX#9Yi4!<175Fhl=n8LzQZ8zL+x`IR-J}S$a&xSvMuNR5sS4 z&eXN#bqV=^@dG+6hX{roe5l9{8OFw9p8bQMAqEG_{$y3B+~h;$!R=+32B)_M?tjxl zVtI|h_e(jc5Sh|pg&QWHMu&*fY#(GGg98TJIp{HD{4MzcxYA>&A{@~b*kP%Tz|wwN z1&uv2K{P{XOMk?DsKvUmsCk!GS}ny?4p3(b5;6P)M?8-TPCshx<=J4W@>B5dt38TT zXxj5V2WZG8@G6UU5nBc1zwSSO-rgv*^?WxlkEhvG$FxKkM+Wxs*aju3^2uc-7)pS$ zj6syO5DZx=`}rajc$EhsW`K!R0{*EZwPx<)WEz&`6F;$Ar&d12I-LxYkM>edc%T9N z^0{E@*x-X&Rr&)$(qwgF^wZ|1@Z{l=yj)Ka;Ud@;WXp}6ilVD34!}P~hKk{x_i#*N zs@XLi8h=?ikI$tIb3g_hVUgH0^y$6S7{ZBjR&d0D|LbIJD(4GolHD=&P~C;@JGKPbcIEjsQg=JI}JIu`afy=apGTeamZVu zbv*&fQVOP&Adn<@!CEyLH@%S)d= zvZLU-@N%<6IY+XFvlo#suhCeMJ0q%sdr$!|Q1!15$l^3p6WSQJcs+$OZkZg=_*yL| zi`Yd4>}#nCeu^iE5-lYL+s{thh@k=^gRsPw=$%HUgwWg&A423X@s5N?N0!h=#kvw_ z{D_0uW^wf6h^MJJk9TTTz;TXzqp7gzz%;`55b<{Vqoc%9PtaYGRXNQ=NojG%`^G5_ z+yGWOk%qy}hx6TaZ}+^N6`$3|1N+0#pi7}=t}?@5p);Mz=$xn7$|Y?R+}xvctIrXD z`Ke}qsBVjofzA*A*pK49p)Y>99C*HQtmI*ZzXx~mI?%($_^N)lrbJDL5!vu`;xSOk z-PIVQEe00}D1B(n1?~IohI)ik8JX2QHtlM_nE^V$6)Vx&)gPrLyxH~)$uv06D}>S6 zK9v%JD!P;EuNA2^`1_Eym5RZg1(gj5tuacHgcOND_x1M3=vuX9*Nj$G$u_Td(lX55 zxL;Z2#_|$jxx`=+TQMf+dk!y_+&=w0l-qq)SL2LNCmh%N5dfjQ?(aKbxm0R@_AY$? zikPI20_YNclp;QJx)304mD@Qb<*L2^+;K6ya{q|ZdB-7LDN)fpR&iS>ebfxxx-tz= zaar0+G98Q4>p~l?=laS}lZWo+Dyu%W+X3tQqP5?beo}}R`_LJuZGPZu?)Nt0i$MdS z%s$0i1x8$@TY%}#2jxeShkD|ci(&fxR)}gRPaj=~QrtjDEdFfgh0TH#{;aJ6kXpP! zp}i}Hy?MQ_>2b4@4wpG-G=4(%HC)*M4E6Yp5Q)r=aL^Y(o1=8*Zi9FCpD?(ml>%c@ z%f-(SYB_9ypgsGXabJrI?>)}n9wS>$*sma6@E+z492!#h^ z8B;iR3OH)qRxALQMjxMi%|(!!uXac4>=O`RN_l!RhfS%ZhaU=cGt3p&AohH>Uu$iCO&N z#D8pPDZxVy?^3}Esd~efzx~!k6h`2~LC#yzu2kp^F=s~Zhb~fqYacJrNhS3Eg-c`p z$b;>1{cm9_k>%l%swJ~6fJ`&MQ&P6=F-bm7rkY8d!(z6uLmN_MI-^S;m6po(#0`U> zo?;7Z#e!X*a(?uF7&n5ux+Rg8Q$*+oC9VP{Gz0u{DOWXk-Hiop#Zm~ zvd48`z&3ize7~jxUOR-sP5Gc~b1?|qBlDrFrKeQ8z}7d-aFV( z5RrDAAAafmG}8lmP>a{;(q%K^ z{&rtyj89ID8w8$dQRNk6lx4i@d-6j?yY$7Wu2^(ZK(zgFv+zl^u{i|uY zz~RYBdlq=gBw!_d_%pbh+Ltli0zMX)zGGW@u3?FUEZ|3Fd+=gTw*TB!1MO@*yyM5x zbeHhpQQbU4(ZW_Bcalvuf0h5VU`T?teG7G2;>(Ui+?N?v18;?)-?3zH%jE6FS--ZM zUxb-IEoww<)k1AUbdZ%;+-18iAVY+U$lU*a9&*!)KrW3^v?!M+RsT$;diUduug?uI z5v3KRh@Pk4=SJ}%ccFelnMeNIBM%UX74 z_x<8L&n#9>XW0hC%$)V!w=r;lvk!g!>mubUCQ#qo z_a87;!UPSPyQW&-3hOaKS;{#9@)GPay8h2lmEDw+p*Mm3OXhmjK(JdCIxGgu2<%dWY>m#BTEXbWU>!kSV_?1usr~>v zCH5Z=wPLyit}TOYu{ua~z*X&!#(`xcDYs11~J!{~`Iu4y{V^Q_li2#f3`4JK;SSWsxu$RlhZfwm#8 zxALo`FQG-~VL+*-EPYRGI#80jfsQbT@QrjCErIG>050m}kGJ2I?OXZ0WMR0~Jy+U~EYj0Vr>GMx@4>x+&*2+(jpKxq4&z7TBfWY(=Y~Lf z0FIA$lXVw^eJ|SHNF*6fj`)~c)9O`~#GDS@d205O6x#o_=|>?RmF0GoF$XArUO`9I zLF`;pcaul{4;Tb$hkj_Wi@*}E2$_1bGV#~X%JadX(7IN!F@|j0WnM2OCvY}1>RJp) zVz3pYq7et-o?_Idg<|haVar(&p!WqV#W5l4g;gW27*q@YcO9y;@Gt4V8PR^w9yi58 zi8ylqRGHxt77uDs%Ws3_pgm5|zy%^VpKGJ=IhcA!bU(ic?Kd$iqOqMM#-%R@Uj?%& zH7TXk!ghw_ku0QXIC9oQzce z*k)v+m#5gCK~!<1Y+!6m`5?tsRtnd0k4R2&Y^T=MLq`Y**-a254naS1q&zcSleS zvku`Ft=HU`MI4epT&Kg}u-#T(?>53oOFNV(!+#t4Jl#nT)pZv=OF1|>Up?J3sX>xW zp|qMpAQ?4@h1cPcu6AOKJ(9$+TXkA3^W?1?Fr+}B-_cO$RBPzz7X{BPCs_0ZY%p#3 z5AhdSS#IVPAxs335n`(Z^(Iy?NnaPEJwwZ_(3fy>o77s!tt@rTPMn*9T$wFO0vrxN z=!Bm+GBw#OS}qzdKKPLMK5ar|(YNpqoYk-Or{sWse+K0a>WYV!U}hnVBNZYvq8Fet z*gXFGoQdJGBq@jdLY2XMO&~vf!F=hNKDzsBW7kc2X7Sn;sfsAYX@S5T zdwi*%n)p1$){o5wOaEuBx6^&(3sZ(3=U>}l1rOt(o}R|z&6QRKodvp~IuY3SC`BSG z7pWzJGE7Q#C7 zL_#%PNr&)-S%j7^YnM}ah+*fJ$UW9#g>R@{)5Bb;Vjl&>C?`Ia{ z06>T!@?#SZ0%&d>CLMe0M^FHfN*jY{Sna7lqy5WQv3@Po3zhd`S(w`#=)RS$)MZq5 zaz6{wTxoO7Vkqi3Fe$j9=4ig*m?N{ndVKUMisGnQLCSMK~ zv$_&p5@^UJrVGR) zplVy=Kx&CL?j8H`ixeOr{6Inm^=3^t9)lL*0-gX_TwIT2?6~uLCl3L5hKH$9zuM{v zmF*sm(2E!Nc?XGFPod6}Q$yk_?ysM)v^HshS|cAMgVp)DdUm+{%R$1nD{cBEj&dPL}GPi&_P%fo352ro0Vnd#$P zKl|8}Uz>e5zK0xrxrhc)B+J+Rcz2CM#)O-iXKAHZ35q>HbLI37w6#ebb_PDcXJQ3^ z60ua(oQxPz$w?e{3al0ZsjKq%oVQlvITq>;XPDd|#zs`Qp1#6wd%r(ez21#;1``2T z?`V?Kt98gk{>*%3oR#%W3F{>iBw;>QLO_u5mxR4hak z;$4UYclu~UM|gytPBU=K-Aoi8pd+x8=9`}nk_f8*J5GMT`iR?p8(QC!;-{4uFB zQihvn{v0p^l1g{VJHo@D_vlK^WAbCll&(zfm?b{vuoy^FtOlbg-L8f8OXR!0S+-Cc@sR+r$~M@!a*e}u z7;t=(;_#_sMIpf#T!SQ_zbw!4dTiqM2tgQ_US^I(pWvo^uw+@-Pc2MP$gJYYx%0|2 zRYteu@A!#6!I?d;HgGVW2;c+yK`IDHQd-4piv=+w_=Y#PJQX%?u__UHf zg#S>>#^{rzBG)`MBj-`DVQWtX7FtaqY7D2BL+1wQO4}{3Aor^+_HYR##;{X}SB!xS znhCzk+#9Vo^}vP@07S~KVDxz6ZE5>%vNxUu{c~d)=++-$ZGJ2KOF;Z8YIRrkZS!xO zZ8`nnYOm-u)<|b(+e`jVW#&~aIG{)qSsu*V0`lFSYS>uz_$n9XRD0m9B91;Mx{k$< z2a2G+o&j5@yVil{mIr-pwtMyNrk9*-qONppy7kYYKSDhUO=Wtgc!a9H?VW-9H)o%pS?gy6{KPo}l&)rE)K| zEfb~~;OhbOfe#1Og`B0;Tm zSFf=oE+x^@e7V7X+;Oy__MLs%T~$qe*py5g3Ey zu%_^0Z_|&p_V!Uq_4v$oaEnebeCV%qchGT>w$O&ExdLhHS1`4%du%FhFmiT~+Oe4L zy>pEyJRu~xL)cfr#|ef?3iSpBtANN2L2mQ#p=bn{m8&0 zoty-796xs*)9THUU0EFFkA2|atytJ<-mvwQ!*#C%)SZ2?;~OUGbTLyDmTy@A9E%Ai_F|wBuK!bw2nCZI=B*GXA=6USScB* zw)h&0e2|shq=UjFiYM8$-u`IxI9tjr1nJnVXePW#Oi>S_|+K!OF(@|3|d+1qZ3! zz{)@Yq^VVbT=t%Mu|yb(g4p0dq&A_X%u6xk03Y-^oWL590!l22vdKHV>&a$M)k4Ju7b6!oY~L zS$BAZ2>>;iOj!Rpbw4&m`Cuw;p67>B^tb-i#4w*ki0>SNqtwyxyr4L5-PJ5GI?oaM zk(&v`eAKITe<4Osbm^QTD9FqYb=;($uNj;2ICB~N#zp#v?8g12TKvTohEYLMOnh(p zoI6h~a1FSTc;$Br`^fkJ&KnK>5KZT!lCRppD>C0l+khe9s%bb^q81S#J@*OUdCKDY z{GE;V4=Nh@pI^Sfi@Ui0>I#IzzL*$Vg)B<$qmiQM_l;q?>fLbI(Lm^=J%8GcbV zprBgiyM6Y87trq=A;In^*O49Jf@oS?G&QUaU(?fh;~8H&X}zX{ zk|0f>PdkGco^PXN3_1{MfDLJabl(o^)KfTJR9T?QA`J}lz1exmdT5km%s(jmu>dzo zmX)lv0^8%&keAC$3`6)QGA5lD_@NHbA9<;&-rm3>Hy(WE^)P{wi}T$L%E88giQ(N% zj*qu_GT`@Yc6=nMs@H04odOZC-xO)`egx4;*VaFQlB`snKYW_BVc*&5H~*cM@f8r+ z9h}PBy6H?=F9A@$B2de*02DX2byRT@#SU@vR z{UJdcxU6;Gi9Rj~^uX?XyYPeeSJcT_ZLhM&J^K6Rc;Br@iEL;x^gUl4NW5BG>|(fkxrX&w^9kwsh65P-*X2)b zV=V$@Fs~r@#MBuLge=qZ4+bqX6KMgn?0}U0HPk7|d!b}%%0rr|T=s?@&F>92NMzOf zSRhm+_Tc4y(bhJk7fu1R>wAP^7?AD`TWelUju4vjiDav@1lU?p8=wWL@D zsTqCDJSkhdDWH~I*c<_Ufy}^7Y4zZjPBshazUO5!_3EARv&3EhmOTG$ZFMzVbw3U> zFp#XjwKA}K$6Nb=ATY0jtp*7qiVP^qvq5S4G3{5zys<1fOu?iB-{0jA_D*;6;kTb6 z;LwrjjrZjZ8R3Eq%h!o=mNZmczV-?I51>;+{BjEc?%U!%-(T6Sk%l!)yvrPU24%-_ zVH=_b<-cfZC)ZK%`buu@N-Pts_nb`l7Wqb|emof|Av_2gc=jJ3C;5ETpV7I53}Lcp_JX8J zcw1IoY1Qt41yv)DYYLIH8RO((hLX%VDL_0~#LY9TkbaRBvNhEv{RauMg@q!R)M;#V zn2UkYM}beX4rqr11&tQ)&2QRSf!8QJr`iYgW3JTeG#8cu5z(x$~2%3LkS_P$4|)`kMT`A6udM+-VTmMXpQJh z*4$ZasfC;xvXdT&p~6A_4xY7$z^=0}s)gx532QyJAu^VurS>4k@2dqzkGTf-=f&Q5 z5{o|_eo=XZGY;m7@H>PDhS4nUek+`ZsY^SK9a%wb7G#B1(Zbp;x;EWcB4Uq-mj z=TGqyPoH}xraFNwSlwBCw6?GO?vAFC0m<(N1Pl8}HOP8syhxt-1M9w@CijX9;RHgm zDg5h!1@nr~inwZ1MZlVz#y~!DN6?4OXi^sWEkqrH$gJ|e<%zI+%mj+fo0Y>z90^IY zTQSyEVBfPW#Hf)OMZ^zyrDdai;x;d24%pl0GE&RN&S7&0!Chg~41tfJ-#@oTFW2bQ zZ~e?W@WfG{@W_rD{@DVbRLlOK+>azLMKWBd`K5B>waJBxUTmO@b(sC5$l@l&Cp@|` z6Gv$aRgbM>?z5J2l;ss`?E&_kammQB4B%f{n|ggK@M=ZmrP$!@@Q%ZLFRTFR8NR%W z$svU7;$n~2dq!>yH3aXeNg{h^wiA#7yF?c0Qux)db2B^TjbLsyczAn){{})7#l#3HC#-m+V6q-gM#|&jm$qwAw)|Vzqrh z>CPKmgEY`UdkSKKnnZoig)2a4T!Gw;07w9H0gew)-LO4HC=BUJm#xc_EfUKWMqa=< zO&m#Q7N$&DfIeD0(9~AR1@p@m$!IreKbV}{_s36a ztCN|kAYYh~^F7nr8mK~o8}+`Xp>af`xG2I-(<@A2uz~jL2U5u9&D|m7_SxHb9^6P$ z#3i7GBHTH6>_c*~*`=9`b#fEHF^;YRuJ};FZt2qe4XYap?kZ- zZ-JgF54HCEYiIGZ=!kdzVqg%L=1R(}nTRYz<2_p?1pNWLu^S+4mA5@tZBYzzWl=UN zT~fH_jMN<8U>2)h$HT-PK9DOdb(z+5mPiycmO~Y#W=)dC8!sTl@Ku!|SwhakBZV2y zfR8* zd(|vvi4)_vKn%I63_P{=_+s4mbXXHcjao6i(mBQWW;pxehui#zKyLO6K_Z$59A!ve zzXD!ad`pYCK4K9Sf-=c-@^U^-{*9Fv^VFu-X6m-fE8&PtOdhWt`P9$i`*ia9eXuo7 z1lpFl^5WNViXO+_ybE2;Xt*mI{Hd$lo;*uNjQ>2ng44-^13;!q^6L@+H$t{`{3QN& z0iVQ=A;ucBH?TVBvG}6w?gimu0j(&VB6B7adC||&NLy4q%|w#d6MhJ!NihS2D_YH6 z$i8BL{CH!;+7>QxkNv3Z_R1K<5YFma+fDZF8?^}-Gq^62eZ8x?ytzr^T= zcCz`4&?ZaCOzrRNi$Dou7=z%uUA^CfJ|oDU3wtvW!Z;CqUIw;~oZfT0Id2}+q_<1J z%f3R4Nf|?c)bs(U%q&N=W;mKg^H|npy!8phE3(#)Dd5Ft5+8&_hrg zUCk9i{&CDp2FnYka9|93aF;3hKYt3KbrQVu_B-7XYW=Z~MIV9MfNJ?T(nM?(D1E*2 zBD>EST)g??t|aqNmz?)(5f9Ux7|(hxBoiK26TITA6~Zq6Tgxv)5s>wUX{}R1G)Kx$ zTaV{oCYSJgAkX=mUB(YezYh}*mci6!g2&iY-n`Y zX^4m}2+n?BkXf#bv%Zapc5(JhN&{D5h8OzoKRz+NSOH4I(`R^4TY>Js32 zhsV{Opx=GZydULRa6aYW7$tsT8JwF7Qdp!vcqvazo?lGjBkh3@Y&dJWU@2m;_U`(m zrL8+{Le~P34OIm|r^4!33??noEqtPzCPf~Iz+W#~zxdlNKapo=JfsZK(Iy5>pNd=R zN%Z$?7xp_jM38t>kIVrU9#@7|#gT-$)?#)wZ#HP8LQtFttV3V@$HJpcim2}`H;l5_ z_2U*R>4LSQJ9KwqKYH6{COJbxEX-YOde>7a=RM>Gde(&*Lm4yfV}y`@F+;tJIJ{?Y zAd-(Gy_d3ld0%rzZ!pNTq`u;<0kjq0e(^~G@}G~uKV$x12P!V8at4LHp*C`rg9ewV z$iOGpC)1a;$qV8-*T7q?2pb@dj6H8u4elC*t#ax$dft9$a^ykHElYw&!jmm5NNFu} zp}J&m+x0Bm;DyIYGuyzPIz38iyGOl4=T;~c7cbI10pz>O@y6ZVxDf`%;c&9}zd;w7 zGIV2!iFTMpZ(v^JL9%xI%o}ccxHg_Cjn0Y$AsK_q-!UeUkyr#BzI8fVIy>EI0AY!R z$IUv&ul6I`W<+h#+RM((;!vlFJ2y3$*90*Ix84{7VWdg%A1}Z7MX;oo=Icyae>tFd zMV&B-L}pepAR^FiI`KVE+!-1jM(0toM|(i`P=sa8vO63jS*h|5NY>Qqcf(` z*x1Cq-F>V&YxHfI(8*P<3O&c?DluatJS9+X0lg=Krt@j`>>&O3!BN-SJ2h%}M-p^a zHE?GP*i0iXRCK5h_9L`*CyUBn$Mo|>Yog;g7#DRQdAIaPHB@mnknC{|eo*t}YkqwR z&Tp0kp^$_xT|BOoAZt7(x);pvkzZ_*YBDK*{dkAnl+0zdsOMN7{##pXp%(vzJYVFO z>$A@wCb1%@D?(%D{%-?KHL)7%?BmS?5Qig4AppSYWY!$3Bn_n8~aSeXAw zD)meem&4%0=I=-K{q)Hvx&n#hW#m1G1D!Rzu6WGsyM{Ll8%4V%Y()|FOOgk&$LbHz zl^ab7(hI>h3L3XSuBc=C%QNO|W*oPAX1Hl)nn7oLzi6kT7%H%?{juG2`?Nh1 z5s@jIS$k8zANEnU>>cb=VA)(kAbm(zzgkQ!zTro2L>sqHY$uuhPxy5XF3bUp#M@ci zL)g^%`}R7C2&S6CI&J*t>8;qPw$2gb!->dL(Ne@hq=v_lg}WC@Kl7jJsq+VSnW?EX z(ja|65|%!3b2Yz(?bC2}Fnu>qFDVGO_O8bfSG&T>lhFjvZi6fJ`eSS9UMB&i4rljKWGyT$WWQR>C@`?ES>r@2r2c^s-d1I|o_5$<@R$3f zTmSv`dNEjPk)eNz&%4bD_gO*q5=a_*ji)_`I#*Nb(!m5^Pqt1Q2;RtC;B!KUIiWvh zCVhD(5O<0`Yx~9H6Y@J6|2?C;#?E)Wp$H(08lg{hkfbQiN-?p~zFR$N$ z^Tjs`JDJhzl>5*K4=t`X5(=DDv|guSX$cP?4|hhUWitNTudZ5VWsg%rbFRj<-Rn|C zbICTwPZWSJc2-03o-rod;!;&6F z=8Dl@sCAZe*P8@)C8}`;$}d;FISoE+y+^(@H8--p^schwjqmwD74OR^#vA ztmbWv4qN5mr*n0wf|jz{g_d{5qf??#x6rD!y9@)vbZ%(U^_gK=ym55S063mP@O|d4rrY%sth% zQ>u{Ui>L%Gm1OpK0BOg$Q*h36`%o*k>I$j;doN^hE}L?v&7%&xe+IQEM#e+~_hS~r zsK36>IpRd9O+IQY3kYXB(XG6lKY_a*6~e!KCcEVTZ9JdG<0rrglHxQ-GP<2oy>?Tw$EH60)QueGm^ zin9B{Wk?kP=?0~dl%bUnr6i>r1R1((Xb>e8q-y{rr8{SU0Vzr8hM}dq>%RK^{Jwkt zzwcr#7Oa``p1sdL`<%1S-p|tvl68EjGZ3>&7>JHN|a z(}F^V=4svX(-Kd27MxD;Zt3IHG6bEWIzW`xZW`f$e&xFfDGB?T>zJ|pHlbJe!!Df#m}t;b#>c@4uixQ^d%fj>4Ai0sUYHVz3kdUjXTo!t#Wlj8CG0 z8;6$M)rDQGCQvpVzycMOD(E;L`Z^`AtSdZfZQ%*)-f&=0JzxpxlZ_D#7qvq{%yNqD z-LFa>L~rXXE(%`Gi|HJ5_(*bTiNT>o12!sO5|;*Xgr#1C6v{4uWXvn)y`MihdF@Ef zd}iQIjg^}juktfP6(Re)3209-P-B`LNh9@Opc+Nm@fAgMdcQVUWn~nAsex{i0f1(% zH+5jg!fP~PP6m!LzW6b;kTT51dz^(uFFB`MKqqEjt{s8~(E!K;=YgMZfJ}m%(?sil zmG+Q2|3emw@#|OlrPNOW48kg&IJLsIN>&$zy>ufgubW;jS#dyMCFk4CPflt|u zj2j8Yzncoc$orK;sw+38bK-8KOo6LGN0NWyON2-O1iubsK`eyYsu7Qu$)7uUv_gM{ zoUBH#(__zR-jk05sx=-&ua%3n6l#eN7PQ7YxRv#i0n|CAoya3}?KnW41pU?xB*+VZv&N9D+ z5`!6+RuibGdt8WFU0iNKSEhZ|WDP>i@QJm3CHOW8zq^|McOD%n89uElXUQ%{(xtoY z9If?+@cnIZUlFld1&zB}ATJh{`V`SltyiR>UA{W#WCZq;y#yC{Uo6yyUK>q1Uof$P zEv{brJ%Qdib(jN?@DC@9-Ckx|5oyhST9A$W$v0$XR$rp+;3sY=*M?b$_M6a8SAU6j zFHx>PFRp+%y0A=;-^JHYBGK<0%XmOk$=f$V)l`h`H&;^+urJe;e-dRo-3^AjtNFd{ ztJ2^EdFm;w9fUgqg=!x6>AFXXx^T5jNHcF&#})F6$#rW@?W6$Ug2;CIvUjY?IA`k{ z@vsSz*swH4dO4^mgoPCXIY4#|UU_%A1B4A6K(@>af(R^`=_oQFnvyn+bAJ(_-eKg{ z!K!narK-`!1ZQjnI7kB&X6%~m3?6Ub*3W9a$$={|l0nHx?z?xN343u$Pzonq3OOtu zBO14ggj?Gg=_pJksy+kY;=mnARrht*u27LjQ%Lm$1K_WDs|5dqNIC_ov26AsHq)#& zLL+2FIa{L&E%bqdPDa!+m!k{j;XK4amh7Np<1BL{J9+5ZC1< z7m5H7;3{p`TGl%ZpQMakPEH?1Ajw5>2lfLvahCiV1e+3m`WiPn=6pjQA*^BS@b$ie zYUDR*fXX)q!1Id#+6F}VWEJb~0fm+k1Gxjs+X&w)0EU^2j8qitjQ*a>@(wSbSX!ai z(PHqNFN0}bW~|&jZ9#twd+Y|S^Xn_<=slx!A2rNeCooVw->FPNfE;>(2HqWQgO^@ z03S-d-z1Syva4F*-HNOs@Y&jg6M%t0GO#uE14z#(Vq=FW=;}ty4{HF-hc0kOpbi%{ zn!}N{$l#DngDfQ(=P_LDg<_u7s1+RhegHx$FaO{v>J^~{>KN^cmsHvO#ru`n^m4uB~Q?I#g%QP={;TVXV4@BBM zLzSGK0mUlecT_I<9jSTMKoSP^?^JS?qRyzkXsZzc;F!U`QH)Yzh-?fi{plkJ=xi;; zrfo4PVxwCClzGUS>l`fpa2`X{$SIK85K_>&xB@;#PenSZ5Kn zSSfy}O5uk5`&5)Qs(ylo!#}4yFW1rOmVe&wr9T+ zgx^aZx>sYc=DOV>VhDHo){t^~aQd722|yN8d5yct10bD?ilwdVPAU#`L-e!+(-`Z{ z4YyAZql#1O0aPBYrDG=x3A|yxZx}fm^`SF(SJbF@U+?ql;NzJmZ@=y2Q<(#2>yNu5 z$=<>EdBClg-HJJY_iEwoDFSSBCbf)|n@Yn0ATuC|q1sOx*7*YXi4h70s?CpHDP~%j z5;evYb$*W1;M04(j8@1pBQ#U}Isqf9YV7J&ev}=&a2_4ew{Q$m(e zfjh>o%&8q){e|J3uUIc0n&8N>u`pq(qffqlaY8O9b&ow&O7M}cS{Kp7KoUJUsk?zi zARu4DgS!5dW%_Z#s4SIL_u=KzT(pdo^YBL*M&J3;abNk<-ZYme{-Ly|Ya(kRx-_Y= z-`Oz^gqe9t&o^~3aNOiO4ZL@F3`PY%tPev3pK^U7jE+0Bc;t`GhK3H`*sS+k@VQq~ z7lYt7IOIdo#L9ev46!-rb~ti&1W!?EX=;`i6oemF3yi$~J|fMC$w){O=@*E0J~{c3 zn)l1G0KdOUVl#Qiwb?G+j{fN5!VT;OliWxN-1A2WH^pTCFEAXf=1z6PGb8B9m*+4s z%Lnt~*BB$x47LPg)eU)*g!e0WMkLv&7)c_C!YF+!XzF!A7g*>YH^#@|dGd9oB4Rul zU)c>5YQ@~5@5Cl@Kbj$ePJe>vhsjZ~17&=TDbiH=zIH?yyD73Kdm}}MgK7LFzF`gQ z89|mVA!Q4FtG@(ngp!g)*3#RJO==3!wLcYRD9red_nzclWmCSDTUm17@dj7o8?}Jh!4NZvk=WNBQOQW4 z9P}WmT=696lcti=?j>^m!6%~dc1NfU`7s_QMf7xH`L+H#imc1y%?elH_OICD^-w~N z!pG-R?0L-06P_(kiif6skRn18y#=C%PBsIJ#aT{x$kXxCm5*0G_LON`%+>gIsu|)i ziL<1*(t$YJ7PB9|$t=X9hm0eL%5!-5IYIFF zNB82)^B@tApC;m|Da^95_7Gim4^I6U;bBYqJtwfYF@Bo{Z>0y!g$LaObY*`j*xyY* z@$5?`$BMayP_th$6H$cINrh0g4LkXSMe;Xw% zG217feBntj%zG*uCjAL%2sx1vor;CK&u#&aO#co)&f$5*M5%S z5`&><#>T{=O5Dx31hM1Z#*%I(&9fQ}=I#<=M*+cuohO^kct(W=>veXDj zHW(T&PdDH2;dZX>QMu(4$B1MB_dOEA_2<1?LjCpS$Z<5t4$o4DG%oaTsOMK=E=rR{ zS4+30FM@n%B4)0P=qxFD``2Qw51}yaZR1{H;r!Ckl}`z!AR;0)I$6Bg*>f7?Dj`tm zxo#a5dPmahfEPeR0BdP09^)=q8Qi{VNR4qNv&-Bu&ak7dnj$bThm_V_X4Cceh6m>F zU#l)uvWpoHclb-HADUEKqx#~~d4qgilpftao=e<;xF#o2o^l#@8%Maak~QNh3RY(6 zqrMRL+TPtW-oG9{*;ycXT0_4~**F|KUE@4D^KSJEDKep98BeaU?s##JI7Z6}9bAZJ zkA$-jew3+q8obhyh^^Y4Bkf7jo3f@X%nPs>8lmas3>5-OwqA$R+vyAljgt@!tA*nn zFYXxnxE*_kNpJ2!?pnUDm)kwSL*<=-YnFUueKO{1(BlB8ZPZ zo;o>IVjm#^--MVDNVa`c;nHneodW*#s^fetW%OCIx3=lvCi1(Lb!4a<7^?&b^0gk1 zTptQ<;5H@hBrqveS>p)s7%DBLkP}4+ffAD@Gx-Gy;g*qF0(Mt822+N~n4G zV>=m^a1h{lAex%yfQp?z4YGM~0gBSYDTbg4rRs`i;WVQ`Iy{;hF2n>!vUhG7V>S2% zoH{F*ed--GO>g|s5;Qek_lg)juJ@wD;I&WJ)cBUCdj-)murtx5@$eM&5CI*Q{G@rC zgiU&9bUf8J8NQ@YBxfTb1DFG+q*Y%XGr$fX?) z8Y#ZZ_snyR$7qvZWrZA;$@K-9$w*OL%wJNU6UsmRt*$9coxM8(rE~8EASWSlKfCAE zk3(F-NcvPb(=mJ|dig(~-w+6+NoEJ;9`ocaGYxJSzH}#LA`?rDAwGWCVi`wG#$}@I z%R8$ipDc!VZ1AM^%eG=+GE!+B-}WL+$OB^q?RbzamW(I6DsiCA({7ipA0}SCZ8Nqt zJ2aG?wpp{(`FXa&Xv`ADC|`)c1ACK8h!G(dfuoB~Rlt;^ux4Jb9N-G|$$6IjYwhGY z)58*-YxP}sl63DH?G^AEoj~@*xig-oHsVq7ME_!?9zR@XjtH%4qwWa^)ALu$K0O#` zL!`dP`y96H*Vj=(bQaD5*dcO zdUA0&QPWyZaayd`^1^1EiHtnv1_Ur*^pVsN5n9PY51YUF-Kb^8PviSK3K6sGD;yh( zzuHUVVb0CNa4^gXqmtixQprN3_KrW7&G3uRbaB0zE%96mpYt7WYN|Th{w+F@VT=Bo zYXe>zYy}SeYmR<&d;ZD`z&1(2(>OEK^Ya?oJ(`F2yjDVPVpKy_xQ)8<5;!xf%12{_ z4)@fC(8|6oN}3kHlqpkEd#b<7GLg+D$Av#V!Q6B8vGCGmPaH_=6UTarHbHpb*{X%} zro2>B(F}_>A6^{v7LtQpfd+xmbTl>FKU7-qHY1+-;%%}>0ppa&y?VJh&fH&BfL{}3US_vnGr1nUJT1+- zn2fMAIIZOuT;FS_dVE(Ip0Od3F8g+Tt1aYlz(CTZm|vNU9=~iMgEu)L*F3b$Eb7(L z#u~9lhKh%1zG6k~*T9~&eu$OyKv=bSjX8L{H{*rwCR*2Sz-EKO&&U0}xu47CMuVsH z#6=zOrH^L|lG%@EO448=zK=_5@pbr7#UGqVd9g}|Q*(7bzPtWG9qqd|K}_V~;MRYv zptoXoHlA}CxGIEb-LM8MXfo^OHnO9)LX8_H79=20eBqRfKAxmoy9GL&7Pxz+i6{~# zS!8svI7DrnTK>w(e~4RHP*-Qd;yPrIH=he^H*IFSn#&zL$ z57)}z*|e_HeQ5TTs?R{`9J+ONp?P`L;y#Nc668*b6pcMU=;>eq|$FS{FjK23fn zDxOnvya>_|b3*^Rq9VEZQQ86BB3ak^0A(%=_9lSxG|fY}3Y2ko(`Ady$I?MOEXSB) zsURAlTN~#tNeK(|e4C7fJ32M*amGnla&xUQ#VsJWlZHXvkP~&3?EW>dft(AOJ-A-C z(IB4y*4}E|Rp;GsbB!9h*9K@X8%Q%>&NOvMN8 zNxBpcknybjip*ea?o=S-%0VY%LVlD3@U;6mK>SI#dGvx7b?qnq2BNucHMy{VE8Yyc z!g&C4z-#HOv0p$W?^gUm23FOSa!B_<-wtDQKTi6wv7rU(N=CNd=s7Sj6emsEAW0>i z5VkV9lokU?9pI;4+GEGH3gIH&9sEZ2v}Zi%9ha4<4YU$y0K#|+R99M^7_j?J?R(mU z8|Fd6@1pO_>%xN-a3QZpykxFjknw&sScK8`(t#X=(U=f2aOEy2qlNl8w&dGWnu1$b z@fItB2Zahooo_8(zM9WE`SkRg*T!2Z1^VwPdU#iJ;p0C<;1VsovCjDC7zTiiv_Z289RWb7E=;E2&=cAE+Xj=wvbLw>_6aWYf4ok9 z2|3}t+frE3Aybkr6f$o+JG1nT64*>jOjiX~LKJPN-xpvt-7&C(*tuW{l&mG2| zUZaETDSdrR2ODW=Q#o(EQ7@2*`-?O$d(Rev-3-Jn1V3nM=G#lv?scY3i(JoooLxt5 zGZ{EZA>V?%zrl;F+=P3#2$1HIE{+fvL)s<4HUnEV#@#+ozXjiv^^LNfIHaUT2q!t5bTvEh~x#rsA}D8c~mw zPUh7g?WOyEX)t(auB)!I)^6oRBin}^8=!8e<0${i=dh#gw3Tg-6!F|u>=GjRk}m;W zn}K0_&w?#YL25(Nlu)Y2UtuM7=?>sk@Y!An%<$u_;n%c8A9dwb;uS?vMt@oq3^KLxo=GUr{ z544|C&_d4dq7e^orsgdn;COmE#_ZCu3{W1yZ!smHZag<3H)WK@`i5Pe;Q4Jrc5T3R zZY!-AmvWohJ;sae;98^l$YjXL$K+~q5j%VXyOKgPU@^7YZh*TrAZ^lI$XSXHf_N)g z1EbKME}2I>#&?`6TAwL%^ovrWughLUOYBYmL9SKu1#!$-h=(+XBv94|P4iafKxs>x zkpyxb0rNn4y!`OoDtvQHb#jD@)t9b1-w(NAhPzr`RKd6ZmBHj)vTt98IU9qs>djPO z>>h+!$XFE;7r)=4JA8f=BW+u>t!q}Kh(ot1|QA!n9ilJ>jgpvb$1EoNg z%0N0%ZZP13SG()6df7JVFw|r1e3kHs*9KP9709a7%&Vz)8~2=!$wTEla({a#oL<}1 zqu=$8GbGTDJY4_Lq5e6QEIUJv5u^oHs9ZphdGW$#3K$M*$FXXM&TLsT!jKfU+p zwe+4)MuAK|CW}qYl11#U>K!9x2$)#SREImpi7i@2(Hxj^7LD3^bB7_h$b;@z;=(qf z67yB%(L)jZrsjRfECC#`$P9aZxd~AL-7-nTpz7h};uFv*vajnfLqHaO+n8BU&5eY?^O>aq$hv}JkujYS& zAUrC2VqekMEVCRlh}JI{9PLcNs6g=DAltldZ7^WYtpxqTvHlWo zXeM>n=_Ax>tWiSxwR=aA+ZrMBLZAJg?A>}vuAQo_&74C)b#M^Q+*a_qd5+Ibo72_V z$4ZK^S_i#pPqt0#g7fQ>ZG=u$VdMDYJ6B|9Imxs;Qj-3l8){Vk_B8ZY6~RwddH+~~ z3@5U29vJ<6W53Ah*OHWC3&<$aBF&`~U7{nk8UxDMXAu|gbpHA4)i_SS$>JWP|A0c? zlw%Tkg!?|wDZ6p8@XM!rc;M;jb|nRNu>Kb8DZv@h9xX~ZV8bzKx74^(MabS{=-VLB z!`QQ5WpCDPH{L{~JgKgF53GFyL*4Ec7|IxQf|b&SGyH_>Z+eR+L_CP+kR2H)^Is3G zJ8i{M22WhsG9>ny>}h?UU84i*->GA9e#vUI5;fFZg>d_2w&23-(v?`O+Dc8Q zO4#Wamz@k~={)IvCz-Z}*T92je_+ zf~3g=Zu^wbuGi|o-ffxpOsKxuxnJzVxUM&kqf-y)btW@MSVGZz^C%3|1wM-nilX8m z>a=O~Q=9qe2TAU>R-J4Ru8>KK8jq@GJr-^Pt+LC;p8c~7v{h>_|GZhs+uVV=yKh&b zc3eLUZp^;-=zqoORWclZVhYhBm|25)!UPt>w{@-ql$=jyVn z)wC&uQ&_dX67K%T)NQ_@#Vz$sK*fn=^J+SKy92yoE>RfG=p~q?!>jAG)1Gfmxmob3 z`?<1YT)ua`rWtN8m6yF&Sa8PW*@7aC zAj~EhZ&$F?JM*AJCO3}c5VCJH$HkS?bgi4J5U_i+9Nl#z)@RmVFM;YCyJ6v_ct{el zUn?ekWv4>OibsK5Q>N(b%aU;#Lq4~%-M`cn6!>i%fOApg;`*9-oouSUkFFH~uk&OW z3OdhdyczH}Mvyv~bgu7rt|cUbYZ0(ZTy3YzeX}G$Ux_qNnXEAMV!pDInc1KF<&uye zYRNy*4|3b4ts&$wId;y)DVpM|^hC#qXOb26@`_ywj4qyZ| zes{s$5Knk^l2F9yzOt3PcThRn80Z!Yk?)5=_=8`0oQv=WW`Dh!2?Y}AO*U+C)E)xu zSjhKVxW^!UxCqY>s3gaC_em8@1No5E;ZnrMVY}HrHPQ>O-Fv6`3M&ctD$N%PVX}w2 z9ppd6*7}1a)_F$;E}!7J_*2Z!qQmB5#o2_{l(B0%PF-U5o$vKc% zpi4hUXtD3=S@rhPWdDBj*Ul$aBbF?msQSM7T{mPKF6ewzs;(}|&xZh^G>4t(@z;6x zq501;Kz<82E0N(YJGv;kJ!dCY7c!I7+bH_fNdf|QpU3B==bBJZ5y$jX7Th{il39|l zEhcdY!P*eN+k|xAgsS>?xOonu+<^y|1HVeiJI)e&?~dxv*pl&(?;=7J&<74$Ht^vh znbXbj8Bd`%6OO^FtM2B+Acx{ecIHcHVRq679Q+6CXXaiwJSNrIxT)jp{q@ag9swS+ zz0Tb1$1;%8&#=pPb%GdDGReA5Lyu2I)+z${Ozvb?U1#-i zGP*>cgEj1f<8D69ZRRoev-Q{8A_5(aar*6dldiUGOP=ir@A^7TI4buH><$T{$9<4O zXzKOGEt=*g#;Z}U^XhhDBLYS_#JEgG3D;(%p)G0DQ@%997C#^Uo^EY#80&m~sb1t- z3C;o=J;)Z%N}ul~8{7Q++?V>gcH}?+yO{YNEc8hH9smI;^D8p2@O_Or$YL=EMonOV z?+W?mD`r$?hCA1_%Z|*Q8;c$zg}Df!JD`7_jWTQ23-8&!!uiq7s=}aE&DeBF3%>Ns z=(JWn4~k>BNx06qkK!<9dCc+6*8e3Vk`6I*?$2A6H;3D?!)NG6*B`q8jx3^plceJ*J^8IE50#as(Kom!2d9XzKetp4~;SMWdC; z1#S%tytW=F)BU_?g4o{Pd|V%wU=MPm%6wfjHd>x}-jo{yoYgl(@rB$?Axb`J(XD|3zgBX`H6mM)LYUd}fyL$JE~x*4ox%s6EXnOd7vgK7odPmo)GDOh@_ zX+V;67ZIAMyz*J)SN;{+SUi#m5j`1Fy*F4kGqY+k_8CTV0m1r3-IeK}6#y&Z+{k*p zkwy3}nytn1{e@-R?D26?alSZgoORF?(Z4X>XFDBz?HaNQgM*+{6v0DXS)pzeFYtJA_gn+|}l2Y7z zskmUNIDRkVARGc!=BW@NlLaNjq-ILX4F1}TC4%yOEvnegU1zWzxGBoJ512jzv}|$u z)&C*NVe)7I|0fTJq&lYz8yPdnansoQ??!9ZWs$&fX}h>|D4GwE{7XH65;A6w|5I@R z2B$v*`H9XjP2u~r^g?J4x|ALJkH6z$&fjMOYg^t=!t?3q?T*!P;OMV6K&e3U=VL_B z9$}N9)#g-O8@7m?a-kkwDPqZ2Vbyi^lCjj!RXO$Jp^1MWM>f0@)I}F1a*QMfrcf2a z2e{0!Y6`~h>bGx7kmY=|hGX^Y2$@!gjkp|VM@~buTuCIXqn2UR z=sqO7>8obYj1>X}GG2y-CI}SJ+$nh9I~5p^)+aVir6NB^x4k)F#6+Xt3ZzR8<Hs6!Inb zZqnp&T1gf4p?}nNf0>BXCuB($-qeMa9?POz)g1DT`vX@g%-!!dg-B}1*v{jw#$*ZV zV5N${xE9p6+(H8{RlZe)NCKg=xOsB2fo;l*d;Qa z!T4)g>^?I@E3NGUzncKbY!NM`l2{`#3UdJ=ng`#m$QN#hVIYXk{neMO>Vwl$J65-H znNbqcy;MUJ2_I4O<1m??O%GDuho6-A5U!Ex``8Pd{FUD$ox?)k5&_X@CPp?#<{zuD zO9rD9-kE>}nnNU=f!5kZnCT}0jhkJ$J3<7mmsQD)Q}qem(a!zHSlnNjeb>y9PtuBN zD0tk~)co}m*0V0*YEryr&m8YLI=3c#L{lL&ax}#&o4RfI0g%9`*1Aebh0IPu(?MV{}z`~)q%ePt4V>-H(R8vY=SM&#E2oCI|r5s7Hy(gow0LDLGS1MTh_lOG-7 z+Y_#zU-beo&^I=gd>HR?pyT~*b|Pim#Mmva7Jlx53IYCED}F3~4zXL5r-UY4#k)3I ztc>l|p>iy8V{+VtgwcvF+E=MFmG--?Kkt39`pyydyzm~%IITn@GHG7E5jlU;N#7!# zl2DblPm=y(A2PGD*w<~@s&7_8!IP%r!@*Y>!wnz+lQhS^t!@@LG)|2MwixPrqITGe zSe1+V_(r0sUz$fRje7#!kb2<4jqr>YkuZrA?}p~;MV#u6pF{g#GK!Z9db4L^I6Uq4 zvA5Oe4jr~usil|Rn+-IE?YG8}d4l%sB8gF_{ytQ5Hj~Y1#XLp7?H>b9y0qubT<*Dlw^q!KH? zEcMWJSy6cDJvl32*{e&(R;?eGyH<;*0$vg%(MAeD@QiTX4d!C8*w+ercnX8#J0C6B z`0NgZ!Tm?4*k^+>UKMoBljYQl#323cPA;Y|MbWY?4ukYkua)><$)k&(?ik1K)P#n< zrIL79@nfC|<2>Vf5%dyhHTx}BE;j>1jQmc7KQV=q_#~tF#QMFg73#1pJ5u6v7unA6 z(EmMhm%rot(MIheLTG2UKFzy0&2e#FFF4X)&2aI9KM9i){_hcy0+th?e9z_S9F=I@ zOyF|5K>aYOo;vL(n{*XUuYxQy>6ia|vd#W{v~&UHg7gPAtONDbiQq58$ATrEgf>NC zyIL4LZVhUG8;&-T`=bgaZuI`B-DMUoB~)w}d>~numz^}?Z#R$l{(1WlO@23>H`Zil z+T{AZ@9@9a1Cmf4B9IBvEUncE@a= z@jeScX+-GH-sWw78r{jV8kPXAWPiElF#LTQlm4_wef88)!6)yQlwb+nSJcqTauoa^ zqRqnt!HlqyI=5JC2uZase?B}p z-NBxF5?gfjT3$rfvK>$!PwM1Nwg%^435Fuf^WY#rE8Ze&=tx>*yyP7n^j?sAax$&7 z?>TZ7DHKS&xS|`RY=T;*#EcYUrtD);t4ZkEsSlG@ad$2HI|!jP;=kX`ly>ux+%o(! z=C*o5q!u)hRAz@&5QzPdoC4s~7RNMLcCY}FF`P_(Q7+Gme?lUk$lJJDuA7CyIRbLz z3l09Y67t^%>z6~VA|7`hD!Q_1+@Gno{!3Z z?Pn#^viy~aVK)zmtA%DOxXd*bJ!c(S%f9>GqwkScdA)jk!_4#LbZ-J*o*Syb=d3gr zcV)l5X<_^`T4??X7xI65@Y0L@k35F&`sU5Cy5KjIXr^vCFT1sf#mb^}+F3GJs2g`} zPMey8CGi8_tbG>SV5pEak~{epap%4m##+Ukzb((_AR=xh= z&%AP-q`hU)QXer$iWh>x5O*Di-fQ9LbB2EidQcJ~$<1wn#{GHNtr&}H^;W1YWl7^{ zAi1cx-oG7;jQeeSG2HN!<_JN;LJk%Vhqoa(@FFyBkB7_nTj4d0D%n+^J6bJ>Bj^Tg z0f+L>6TSROiJKX4yf1hwMZYjK(HGCTea;%@5ng&;rsLzmxMy&o$M{#1L*U;z3=Hcd zG2CTdr!A2Rg{lh~VOy|xog=rt8lt~#%KvZdQ}T4%8`eJ-TK3UxrDT)NY72R zJ($8^Z49Sm_zHcE^@@<~@8@Ei|7lG?wvbapx~QBb&2E2cP(yZ`L&(I9c|ViaF+vUV zU+0*e{!gRkl4d@v39D`;Mfs6a<1B<+T#B4GnaO?f+NuA^L;Ob`yIxLglJ-+Gfpz`0 z$7C}qeG2r<2s0Ve{Vd3dZNn7P-;NAT0}DT(^|6Y6%@l}%bfLT2bt{zNGJ%<_8PkWA z3-4dWujl+@NjCVvr{I1an!`07-~4t=O-WOUBj|BV9iM;Ccuk4)JJ)!Jp!st&Rob?4bOsmjmlE(pjA z=J4ucS)0D{bK>Mz-dz0guxNy*wlI-VvOrw$Mb{cw}t=r$kl!hKYsDItv|mb|Ey?#EfH83 qxc>CyzkkgBnN0uv{r}?wSN@Ulb2UsPXdlslM_yX_Wr>u@yZ-|XZj%%M literal 81443 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 Date: Sun, 14 Sep 2025 14:03:48 -0400 Subject: [PATCH 08/13] MAINT: Add public data creation function to utils Will be used for examples in both docs and docstrings --- docs/examples/spline/plot_lam_vs_num_knots.py | 8 ++- .../examples/spline/plot_pspline_whittaker.py | 6 +- .../whittaker/plot_lam_vs_data_size.py | 6 +- .../whittaker/plot_whittaker_solvers.py | 2 +- pybaselines/utils.py | 70 +++++++++++++------ tests/test_utils.py | 38 +++++++--- 6 files changed, 92 insertions(+), 38 deletions(-) diff --git a/docs/examples/spline/plot_lam_vs_num_knots.py b/docs/examples/spline/plot_lam_vs_num_knots.py index db1bc9a4..a5ddff14 100644 --- a/docs/examples/spline/plot_lam_vs_num_knots.py +++ b/docs/examples/spline/plot_lam_vs_num_knots.py @@ -72,7 +72,7 @@ def optimize_lam(data, known_baseline, func, previous_min=None, **kwargs): # Other baseline types could be examined, similar to the # :ref:`Whittaker lam vs data size example `, # which should give similar results. -plt.plot(utils._make_data(1000, bkg_type='exponential')[1]) +plt.plot(utils.make_data(1000, bkg_type='exponential', signal_type=2)[1]) # %% # The number of knots will vary from 20 to 1000 on a logarithmic scale. For each number @@ -84,10 +84,12 @@ def optimize_lam(data, known_baseline, func, previous_min=None, **kwargs): symbols = cycle(['o', 's', 'd', 'h', '^', 'x']) best_lams = np.empty((len(num_knots), len(num_points))) for i, num_knot in enumerate(num_knots): - min_lam = 0 + min_lam = None for j, num_x in enumerate(num_points): func = partial(Baseline().mixture_model, num_knots=num_knot, diff_order=2) - x, y, baseline = utils._make_data(num_x, bkg_type='exponential') + x, y, baseline = utils.make_data( + num_x, bkg_type='exponential', signal_type=2, noise_std=0.1, return_baseline=True + ) # use a slightly lower tolerance to speed up the calculation min_lam = optimize_lam(y, baseline, func, min_lam, tol=1e-2, max_iter=50) best_lams[i, j] = min_lam diff --git a/docs/examples/spline/plot_pspline_whittaker.py b/docs/examples/spline/plot_pspline_whittaker.py index 79d8eefe..29ab1262 100644 --- a/docs/examples/spline/plot_pspline_whittaker.py +++ b/docs/examples/spline/plot_pspline_whittaker.py @@ -75,7 +75,7 @@ def optimize_lam(data, known_baseline, func, previous_min=None, **kwargs): # Other baseline types could be examined, similar to the # :ref:`Whittaker lam vs data size example `, # which should give similar results. -plt.plot(utils._make_data(1000, bkg_type='exponential')[1]) +plt.plot(utils.make_data(1000, bkg_type='exponential', signal_type=2)[1]) # %% # For each function, the optimal `lam` value will be calculated for data sizes @@ -97,7 +97,9 @@ def optimize_lam(data, known_baseline, func, previous_min=None, **kwargs): min_lam = None for j, num_x in enumerate(num_points): func = getattr(Baseline(), func_name) - x, y, baseline = utils._make_data(num_x, bkg_type='exponential') + x, y, baseline = utils.make_data( + num_x, bkg_type='exponential', signal_type=2, return_baseline=True + ) # use a slightly lower tolerance to speed up the calculation min_lam = optimize_lam(y, baseline, func, min_lam, tol=1e-2, max_iter=50) best_lams[j] = min_lam diff --git a/docs/examples/whittaker/plot_lam_vs_data_size.py b/docs/examples/whittaker/plot_lam_vs_data_size.py index ac936a3a..6387bed0 100644 --- a/docs/examples/whittaker/plot_lam_vs_data_size.py +++ b/docs/examples/whittaker/plot_lam_vs_data_size.py @@ -88,7 +88,7 @@ def iasls(*args, lam=1, p=0.05, **kwargs): bkg_types = ('exponential', 'gaussian', 'sine') for bkg_type in bkg_types: bkg_dict[bkg_type] = {} - plt.plot(utils._make_data(1000, bkg_type)[1], label=bkg_type) + plt.plot(utils.make_data(1000, bkg_type, signal_type=2, noise_std=0.1)[1], label=bkg_type) plt.legend() # %% @@ -115,7 +115,9 @@ def iasls(*args, lam=1, p=0.05, **kwargs): func = iasls else: func = getattr(Baseline(), func_name) - x, y, baseline = utils._make_data(num_x, bkg_type) + x, y, baseline = utils.make_data( + num_x, bkg_type, signal_type=2, noise_std=0.1, return_baseline=True + ) # use a slightly lower tolerance to speed up the calculation min_lam = optimize_lam(y, baseline, func, min_lam, tol=1e-2, max_iter=50) best_lams[j] = min_lam diff --git a/docs/examples/whittaker/plot_whittaker_solvers.py b/docs/examples/whittaker/plot_whittaker_solvers.py index c32d5d55..46ae43da 100644 --- a/docs/examples/whittaker/plot_whittaker_solvers.py +++ b/docs/examples/whittaker/plot_whittaker_solvers.py @@ -103,7 +103,7 @@ def sparse_asls(data, lam=1e6, p=1e-2, diff_order=2, max_iter=50, tol=1e-3, weig for func_name in functions: timings = [] for num_x in data_sizes: - y = utils._make_data(num_x)[1] + y = utils.make_data(num_x, bkg_type='exponential', noise_std=0.1, signal_type=2)[1] lam = lam_equation(num_x) if func_name == 'sparse': func = sparse_asls diff --git a/pybaselines/utils.py b/pybaselines/utils.py index f08556ee..0b8a8f75 100644 --- a/pybaselines/utils.py +++ b/pybaselines/utils.py @@ -161,9 +161,9 @@ def gaussian_kernel(window_size, sigma=1.0): Notes ----- - Return gaus/sum(gaus) rather than creating a unit-area gaussian + Return ``gaus/sum(gaus)`` rather than creating a unit-area gaussian since the unit-area gaussian would have an area smaller than 1 - for window_size < ~ 6 * sigma. + for ``window_size <~ 6 * sigma``. """ # centers distribution from -half_window to half_window @@ -1084,16 +1084,24 @@ def pspline_smooth(data, x_data=None, lam=1e1, num_knots=100, spline_degree=3, d return y_smooth, pspline.tck -def _make_data(data_size=1000, bkg_type='exponential'): +def make_data(data_size=1000, bkg_type='gaussian_small', signal_type=1, noise_std=0.05, + return_baseline=False): """ - Creates simple datasets for use in examples. + Creates a simple dataset for use in examples and docstrings. Parameters ---------- data_size : int, optional The number of data points. Default is 1000. - bkg_type : {'exponential', 'gaussian', 'linear', 'sine'}, optional - A string designating the type of baseline to add to the data. Default is 'exponential'. + bkg_type : {'gaussian_small', 'exponential', 'linear', 'sine', 'gaussian'}, optional + A string designating the type of baseline to add to the data. Default is 'gaussian_small'. + signal_type : {1, 2}, optional + The type of signal to produce. In general, examples within the documentation use 2 + while docstring examples use 1. Default is 1. + noise_std : float, optional + The standard deviation of the noise. Default is 0.05. + return_baseline : bool, optional + Whether to include the computed baseline in the output. Default is False. Returns ------- @@ -1102,12 +1110,12 @@ def _make_data(data_size=1000, bkg_type='exponential'): y : numpy.ndarray, shape (`data_size`,) The y-values for the example data. baseline : numpy.ndarray, shape (`data_size`,) - The true baseline for the example data. + Only returned if ``return_baseline`` is True. The true baseline for the example data. Raises ------ ValueError - Raised if `bkg_type` is not an allowed value. + Raised if ``bkg_type`` or ``signal_type`` is not an allowed value. Notes ----- @@ -1117,19 +1125,35 @@ def _make_data(data_size=1000, bkg_type='exponential'): """ x = np.linspace(0, 1000, data_size) - signal = ( - gaussian(x, 9, 100, 12) - + gaussian(x, 6, 180, 5) - + gaussian(x, 8, 350, 11) - + gaussian(x, 15, 400, 18) - + gaussian(x, 6, 550, 6) - + gaussian(x, 13, 700, 8) - + gaussian(x, 9, 800, 9) - + gaussian(x, 9, 880, 7) - ) + + if signal_type == 1: + signal = ( + + gaussian(x, 4, 180, 12) + + gaussian(x, 15, 400, 10) + + gaussian(x, 6, 540, 6) + + gaussian(x, 13, 700, 8) + + gaussian(x, 9, 880, 7) + ) + elif signal_type == 2: + signal = ( + gaussian(x, 9, 100, 12) + + gaussian(x, 6, 180, 5) + + gaussian(x, 8, 350, 11) + + gaussian(x, 15, 400, 18) + + gaussian(x, 6, 550, 6) + + gaussian(x, 13, 700, 8) + + gaussian(x, 9, 800, 9) + + gaussian(x, 9, 880, 7) + ) + else: + raise ValueError(f'unknown signal_type {signal_type}') + + bkg_type = bkg_type.lower() if bkg_type == 'exponential': baseline = 5 + 15 * np.exp(-x / 200) - elif bkg_type == 'gaussian': + elif bkg_type == 'gaussian_small': + baseline = 15 + gaussian(x, 4, 650, 400) + elif bkg_type == 'gaussian': # a more pronounced gaussian than 'gaussian_small' baseline = 30 + gaussian(x, 20, 500, 150) elif bkg_type == 'linear': baseline = 1 + x * 0.005 @@ -1137,8 +1161,10 @@ def _make_data(data_size=1000, bkg_type='exponential'): baseline = 70 + 5 * np.sin(x / 50) else: raise ValueError(f'unknown bkg_type {bkg_type}') - - noise = np.random.default_rng(0).normal(0, 0.1, data_size) + noise = np.random.default_rng(0).normal(0, noise_std, data_size) y = signal + baseline + noise - return x, y, baseline + if return_baseline: + return x, y, baseline + + return x, y diff --git a/tests/test_utils.py b/tests/test_utils.py index 26b9893c..f1a1f6cb 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -831,23 +831,45 @@ def test_optimize_window(small_data2d, two_d): @pytest.mark.parametrize('data_size', (500, 1000, 1001)) -@pytest.mark.parametrize('baseline_type', ('exponential', 'gaussian', 'linear', 'sine')) -def test_make_data(data_size, baseline_type): - """Ensures basic functionality of the _make_data function.""" - x, y, baseline = utils._make_data(data_size, baseline_type) +@pytest.mark.parametrize( + 'baseline_type', ('exponential', 'gaussian', 'linear', 'sine', 'gaussian_small') +) +@pytest.mark.parametrize('signal_type', (1, 2)) +@pytest.mark.parametrize('return_baseline', (True, False)) +def test_make_data(data_size, baseline_type, signal_type, return_baseline): + """Ensures basic functionality of the make_data function.""" + output = utils.make_data( + data_size, bkg_type=baseline_type, signal_type=signal_type, return_baseline=return_baseline, + noise_std=0.2 + ) + if return_baseline: + assert len(output) == 3 + x, y, baseline = output + else: + assert len(output) == 2 + x, y = output + baseline = None + assert isinstance(x, np.ndarray) assert isinstance(y, np.ndarray) - assert isinstance(baseline, np.ndarray) - assert x.shape == (data_size,) assert y.shape == (data_size,) - assert baseline.shape == (data_size,) + + if baseline is not None: + assert isinstance(baseline, np.ndarray) + assert baseline.shape == (data_size,) def test_make_data_invalid_baseline(): """Ensures an error is raised when an invalid baseline type is specified.""" with pytest.raises(ValueError): - utils._make_data(100, 'aaaaa') + utils.make_data(100, bkg_type='aaaaa') + + +def test_make_data_invalid_signal(): + """Ensures an error is raised when an invalid signal type is specified.""" + with pytest.raises(ValueError): + utils.make_data(100, signal_type=3) @pytest.mark.parametrize('half_window', (1, 2, 22)) From a6095c0b23cec7de5c8f7f0b65c53bda5fc83dda Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 14 Sep 2025 14:17:11 -0400 Subject: [PATCH 09/13] MAINT: Change default plot behavior for docs Matplotlib's plot directive will now show code by default in order to work with docstring examples. As a result, have to manually hide code when desired in the docs. --- docs/algorithms/classification.rst | 18 +++++++ docs/algorithms/misc.rst | 6 +++ docs/algorithms/morphological.rst | 24 +++++++++ docs/algorithms/optimizers.rst | 8 +++ docs/algorithms/polynomial.rst | 17 ++++++ docs/algorithms/smooth.rst | 18 ++++++- docs/algorithms/spline.rst | 72 ++++++++++++++++++------- docs/algorithms/whittaker.rst | 29 ++++++++-- docs/algorithms_2d/morphological_2d.rst | 8 +++ docs/algorithms_2d/optimizers_2d.rst | 4 ++ docs/algorithms_2d/polynomial_2d.rst | 8 +++ docs/algorithms_2d/smooth_2d.rst | 2 + docs/algorithms_2d/spline_2d.rst | 20 +++++++ docs/algorithms_2d/whittaker_2d.rst | 20 +++++++ docs/conf.py | 4 +- 15 files changed, 233 insertions(+), 25 deletions(-) diff --git a/docs/algorithms/classification.rst b/docs/algorithms/classification.rst index e54ba443..fb687afe 100644 --- a/docs/algorithms/classification.rst +++ b/docs/algorithms/classification.rst @@ -17,6 +17,8 @@ method. The plot below shows such an example. .. plot:: :align: center + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -75,6 +77,8 @@ points, and then iteratively fitting a polynomial to the interpolated baseline. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -206,6 +210,8 @@ the noise's standard deviation as belonging to the baseline. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -234,6 +240,8 @@ of the median of the noise's standard deviation distribution. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -263,6 +271,8 @@ threshold, and peak regions are iteratively interpolated until the baseline is b .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -291,6 +301,8 @@ other points have a weight of 0. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True scales = np.arange(2, 40) # to see contents of create_data function, look at the top-most algorithm's code @@ -327,6 +339,8 @@ a weight of 0. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -369,6 +383,8 @@ peak positions. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -397,6 +413,8 @@ slightly reduced, as seen below. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) diff --git a/docs/algorithms/misc.rst b/docs/algorithms/misc.rst index 169ea7a2..08b8f3f3 100644 --- a/docs/algorithms/misc.rst +++ b/docs/algorithms/misc.rst @@ -25,6 +25,8 @@ with user interfaces and is not encouraged otherwise. .. plot:: :align: center + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -81,6 +83,8 @@ as sparse. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -205,6 +209,8 @@ of the beads function. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the second-to-top-most algorithm's code figure, axes, handles = create_plots(data, baselines) diff --git a/docs/algorithms/morphological.rst b/docs/algorithms/morphological.rst index 540d1878..6c8e0aaa 100644 --- a/docs/algorithms/morphological.rst +++ b/docs/algorithms/morphological.rst @@ -13,6 +13,8 @@ below. The algorithms in this section use these operations to estimate the basel .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -80,6 +82,8 @@ method. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -212,6 +216,8 @@ erosion and dilation of the opening to create the baseline. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -235,6 +241,8 @@ create the baseline. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -252,6 +260,8 @@ kernel, to produce a smooth baseline. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -276,6 +286,8 @@ and opening of either the data (first iteration) or previous iteration's baselin .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -294,6 +306,8 @@ resembles rolling a ball across the data. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -315,6 +329,8 @@ then smooths the result with a moving average. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -340,6 +356,8 @@ tophat (Top-hat Transformation) .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -367,6 +385,8 @@ Finally, a penalized spline is fit to the smoothed data with the assigned weight .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -433,6 +453,8 @@ multipliers. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -452,6 +474,8 @@ of the jbcd function. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the second-to-top-most algorithm's code figure, axes, handles = create_plots(data, baselines) diff --git a/docs/algorithms/optimizers.rst b/docs/algorithms/optimizers.rst index 011caf55..b6ac5194 100644 --- a/docs/algorithms/optimizers.rst +++ b/docs/algorithms/optimizers.rst @@ -26,6 +26,8 @@ An example of data with added baseline and Gaussian peaks is shown below. .. plot:: :align: center + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -88,6 +90,8 @@ added linear regions is selected as the optimal parameter. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -225,6 +229,8 @@ algorithm versus the individual baselines from the mpls method. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True x = np.linspace(1, 1000, 500) signal = ( @@ -283,6 +289,8 @@ the name). .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) diff --git a/docs/algorithms/polynomial.rst b/docs/algorithms/polynomial.rst index 6ed21762..a8e43351 100644 --- a/docs/algorithms/polynomial.rst +++ b/docs/algorithms/polynomial.rst @@ -150,6 +150,7 @@ The figure below illustrates this iterative thresholding. :align: center :context: close-figs :include-source: False + :show-source-link: True fig, axes = plt.subplots( 2, 2, gridspec_kw={'hspace': 0, 'wspace': 0}, @@ -202,6 +203,8 @@ of the data since masking is time-consuming. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -326,6 +329,8 @@ baseline to data. `modpoly` is also sometimes called "ModPolyFit" in literature, .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -363,6 +368,8 @@ and both `modpoly` and `imodpoly` are sometimes referred to as "IPF" or "Iterati .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -394,6 +401,8 @@ The plots below show the symmetric and asymmetric forms of the cost functions. .. plot:: :align: center + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -475,6 +484,8 @@ The plots below show the symmetric and asymmetric forms of the cost functions. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -508,6 +519,8 @@ is reduced by iterative reweighting. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -542,6 +555,8 @@ quant_reg (Quantile Regression) .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -568,6 +583,8 @@ based on the input `peak_ratio` value. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True peak_ratios = [0.2, 0.6, 0.2, 0.2, 0.3] # to see contents of create_data function, look at the top-most algorithm's code diff --git a/docs/algorithms/smooth.rst b/docs/algorithms/smooth.rst index 38f8ab47..965e6eb0 100644 --- a/docs/algorithms/smooth.rst +++ b/docs/algorithms/smooth.rst @@ -27,6 +27,8 @@ kernel. Note that this method does not perform well for tightly-grouped peaks. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -157,6 +159,8 @@ index-based width of the largest peak or feature. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -177,6 +181,8 @@ data. The baselines when using decreasing window size and smoothing is shown bel .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -202,6 +208,8 @@ incrementally increased to smooth peaks until convergence is reached. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -219,11 +227,13 @@ ipsa (Iterative Polynomial Smoothing Algorithm) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :meth:`~.Baseline.ipsa` iteratively smooths the input data using a second-order -Savitzky–Golay filter until the exit criteria is reached. +Savitzky-Golay filter until the exit criteria is reached. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -243,13 +253,15 @@ ria (Range Independent Algorithm) right edges of the data and adds Gaussian peaks to these baselines, similar to the :ref:`optimize_extended_range ` function, and records their initial areas. The data is then iteratively smoothed using a -zero-order Savitzky–Golay filter (moving average) until the area of the extended +zero-order Savitzky-Golay filter (moving average) until the area of the extended regions after subtracting the smoothed data from the initial data is close to their starting areas. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -278,6 +290,8 @@ is then interpolated back into the original data size. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) diff --git a/docs/algorithms/spline.rst b/docs/algorithms/spline.rst index b7950790..e6f88831 100644 --- a/docs/algorithms/spline.rst +++ b/docs/algorithms/spline.rst @@ -11,19 +11,19 @@ predominantly used in pybaselines. B-splines can be expressed as: .. math:: - v(x) = \sum\limits_{i}^N \sum\limits_{j}^M {B_j(x_i) c_j} + v(x) = \sum\limits_{i}^N \sum\limits_{j}^M c_j {B_j(x_i)} where :math:`N` is the number of points in :math:`x`, :math:`M` is the number of spline basis functions, :math:`B_j(x_i)` is the j-th basis function evaluated at :math:`x_i`, -and :math:`c_j` is the coefficient for the j-th basis (which is analogous to +and :math:`c_j` is the coefficient vector for the j-th basis (which is analogous to the height of the j-th basis). In pybaselines, the number of spline basis functions, -:math:`M`, is calculated as the number of knots, `num_knots`, plus the spline degree +:math:`M`, is calculated as the number of knots, ``num_knots``, plus the spline degree minus 1. For regular B-spline fitting, the spline coefficients that best fit the data are gotten from minimizing the least-squares: -.. math:: \sum\limits_{i}^N w_i (y_i - \sum\limits_{j}^M {B_j(x_i) c_j})^2 +.. math:: \sum\limits_{i}^N w_i (y_i - v(x_i))^2 where :math:`y_i` and :math:`x_i` are the measured data, and :math:`w_i` is the weighting. In order to control the smoothness of the fitting spline, a penalty @@ -34,7 +34,7 @@ The minimized function for P-splines is thus: .. math:: - \sum\limits_{i}^N w_i (y_i - \sum\limits_{j}^M {B_j(x_i) c_j})^2 + \sum\limits_{i}^N w_i (y_i - v(x_i))^2 + \lambda \sum\limits_{i}^{M - d} (\Delta^d c_i)^2 where :math:`\lambda` is the penalty scale factor, and @@ -47,6 +47,12 @@ The resulting linear equation for solving the above minimization is: (B^{\mathsf{T}} W B + \lambda D_d^{\mathsf{T}} D_d) c = B^{\mathsf{T}} W y +and the baseline is given by: + +.. math:: + + v = B c + where :math:`W` is the diagaonal matrix of the weights, :math:`B` is the matrix containing all of the spline basis functions, and :math:`D_d` is the matrix version of :math:`\Delta^d` (same as :ref:`explained ` @@ -76,6 +82,8 @@ residual belonging to the noise's normal distribution. .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -207,6 +215,8 @@ to perform quantile regression on the data. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True quantiles = {0: 0.3, 1: 0.1, 2: 0.2, 3: 0.25, 4: 0.5} # to see contents of create_data function, look at the top-most algorithm's code @@ -233,6 +243,8 @@ between all but the first and last non-corner points. .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -257,7 +269,7 @@ Minimized function: .. math:: - \sum\limits_{i}^N w_i (y_i - \sum\limits_{j}^M {B_j(x_i) c_j})^2 + \sum\limits_{i}^N w_i (y_i - v(x_i))^2 + \lambda \sum\limits_{i}^{M - d} (\Delta^d c_i)^2 Linear system: @@ -278,6 +290,8 @@ Weighting: .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -305,9 +319,9 @@ Minimized function: .. math:: - \sum\limits_{i}^N (w_i (y_i - \sum\limits_{j}^M {B_j(x_i) c_j}))^2 + \sum\limits_{i}^N (w_i (y_i - v(x_i)))^2 + \lambda \sum\limits_{i}^{M - d} (\Delta^d c_i)^2 - + \lambda_1 \sum\limits_{i}^{N - 1} (\Delta^1 (y_i - \sum\limits_{j}^M {B_j(x_i) c_j}))^2 + + \lambda_1 \sum\limits_{i}^{N - 1} (\Delta^1 (y_i - v(x_i)))^2 Linear system: @@ -329,6 +343,8 @@ Weighting: .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -358,7 +374,7 @@ Minimized function: .. math:: - \sum\limits_{i}^N w_i (y_i - \sum\limits_{j}^M {B_j(x_i) c_j})^2 + \sum\limits_{i}^N w_i (y_i - v(x_i))^2 + \lambda \sum\limits_{i}^{M - d} (\Delta^d c_i)^2 Linear system: @@ -384,6 +400,8 @@ publication, as `specified by the author `_ (note that Whittaker -smoothing is often also referred to as Whittaker-Henderson smoothing and as Hodrick-Prescott +smoothing is often also referred to as Whittaker-Henderson smoothing or as Hodrick-Prescott filtering in the case of a second order difference). The general idea behind Whittaker smoothing algorithms is to make the baseline match the measured data as well as it can while also penalizing the roughness of the baseline. The @@ -75,6 +75,7 @@ below using the :meth:`~.Baseline.arpls` method. :align: center :context: reset :include-source: False + :show-source-link: True :nofigs: from pathlib import Path @@ -208,6 +209,8 @@ Weighting: .. plot:: :align: center :context: reset + :include-source: False + :show-source-link: True import numpy as np import matplotlib.pyplot as plt @@ -362,6 +365,8 @@ Weighting: .. plot:: :align: center :context: close-figs + :include-source: False + :show-source-link: True # to see contents of create_data function, look at the top-most algorithm's code figure, axes, handles = create_plots(data, baselines) @@ -378,7 +383,7 @@ Weighting: else: lam = 1e3 p = 0.01 - baseline, params = baseline_fitter.iasls(y, lam=lam, lam_1=1e-4, p=p) + baseline, params = baseline_fitter.iasls(y, lam=lam, p=p) ax.plot(baseline, 'g--') @@ -409,7 +414,7 @@ Weighting: \exp{\left(\frac{\text{abs}(y_i - v_i) t}{|\mathbf{r}^-|}\right)} & y_i < v_i \end{array}\right. -where :math:`t` is the iteration number and :math:`|\mathbf{r}^-|` is the l1-norm of the negative +where :math:`t` is the iteration number and :math:`|\mathbf{r}^-|` is the L1-norm of the negative values in the residual vector :math:`\mathbf r`, ie. :math:`\sum\limits_{y_i - v_i < 0} |y_i - v_i|`. Note that the absolute value within the weighting was mistakenly omitted in the original publication, as `specified by the author `_. @@ -417,6 +422,8 @@ publication, as `specified by the author Date: Sun, 14 Sep 2025 14:30:45 -0400 Subject: [PATCH 10/13] MAINT: Add doctesting job to CI Added scipy-doctest as a testing dependency since without it doctests fail because of matplotlib's plotting outputs --- .github/workflows/python-test.yml | 27 +++++++++++++++++++++++++++ docs/contributing.rst | 18 +++++++++++++++++- pybaselines/classification.py | 2 ++ pyproject.toml | 6 +++++- tests/conftest.py | 11 +++++++++++ 5 files changed, 62 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index f7c53771..59ac2471 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -124,3 +124,30 @@ jobs: - name: Lint run: ruff check . + + doctest: + + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # only test earliest and latest supported Python versions since the examples should + # be fairly simple + python-version: ['3.9', '3.13'] + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + # TODO will need to think of how to handle doctests when they rely on optional dependencies + run: | + python -m pip install --upgrade pip + python -m pip install ".[test, doctest]" + + - name: Run doctests + run: pytest pybaselines --doctest-modules diff --git a/docs/contributing.rst b/docs/contributing.rst index 656fbb4a..cd58e852 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -49,7 +49,7 @@ ensure `git `_ is installed and then run: git clone https://github.com/derb12/pybaselines.git cd pybaselines - pip install .[dev] + pip install -e .[dev] All sections below assume the above commands were ran. @@ -136,6 +136,19 @@ please ensure the documentation builds locally by running the following command and ensure that no warnings or errors are raised during building. The built documentation can then be viewed in the ``pybaselines/docs/_build/html`` folder. +Running Doctests +^^^^^^^^^^^^^^^^ + +If adding new code, it is often good to show an example usage of the class/method/function +within its docstring using +`doctest format `_. pybaselines +uses `scipy-doctest `_ to ensure that these examples are +correctly formatted and will run without errors. To perform these doctests, run the following +command in the terminal while in the pybaselines directory: + +.. code-block:: console + + pytest pybaselines --doctest-modules Adding New Algorithms ^^^^^^^^^^^^^^^^^^^^^ @@ -146,6 +159,9 @@ If adding a new baseline algorithm to pybaselines: ``pybaselines/tests/base_tests.py`` file that should be subclassed to ensure all basic requirements for a new algorithm are met. Additional tests should also be added as needed. See existing tests for examples. +* Try to add example usages of the algorithm within its docstring, showing basic usage and + any noteworthy fine-tuning. Ensure these examples run correctly by performing doctests as + outlined above. * Add a short summary of the algorithm to the appropriate place in the `algorithms section `_, and, if possible, add a plot showing how the algorithm fits different baselines using diff --git a/pybaselines/classification.py b/pybaselines/classification.py index 2d520bd7..5eb72ed5 100644 --- a/pybaselines/classification.py +++ b/pybaselines/classification.py @@ -987,6 +987,8 @@ def _refine_mask(mask, min_length=2): Examples -------- + >>> import numpy as np + >>> from pybaselines.classification import _refine_mask >>> mask = np.array([1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]) >>> _refine_mask(mask, 3).astype(int) array([1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]) diff --git a/pyproject.toml b/pyproject.toml index ccba352d..002a43d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -83,6 +83,10 @@ test = [ "pytest>=6.0", # first version to work with pyproject.toml "ruff", ] +doctest = [ + "scipy-doctest", + "matplotlib", +] docs = [ "sphinx", "sphinx-copybutton", @@ -96,7 +100,7 @@ release = [ "bump-my-version", "twine", ] -dev = ["pybaselines[full, docs, test, release]"] +dev = ["pybaselines[full, docs, test, release, doctest]"] [tool.pytest.ini_options] diff --git a/tests/conftest.py b/tests/conftest.py index 65ab1267..bef4bda5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,6 +14,17 @@ from .base_tests import get_data, get_data2d +pytest_plugins = [] +try: + # ignore if scipy-doctest is unavailable since it's not required for running non-doctest + # tests; if running doctests without scipy-doctest, the doctests will fail due to expecting no + # output from matplotlib's plotting routines + import scipy_doctest # noqa: F401 + pytest_plugins.append('scipy_doctest') +except ImportError: + pass + + def pytest_addoption(parser): """Adds additional pytest command line options.""" if hasattr(sys, '_is_gil_enabled'): # sys._is_gil_enabled added in Python 3.13 From b916795dd42cac6fdb7a426bb4d6219567bdc0ad Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 14 Sep 2025 14:56:51 -0400 Subject: [PATCH 11/13] MAINT: Fix typos and formatting --- docs/citing.rst | 2 +- docs/examples/general/plot_masked_data.py | 32 +++++++++++--------- docs/examples/general/plot_reuse_Baseline.py | 2 +- pybaselines/polynomial.py | 2 +- pybaselines/two_d/polynomial.py | 2 +- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/docs/citing.rst b/docs/citing.rst index 2e11f376..b22ccc99 100644 --- a/docs/citing.rst +++ b/docs/citing.rst @@ -8,7 +8,7 @@ research: .. code-block:: text - @software{pybaselines, + @software{erb2021pybaselines, author = {Erb, Donald}, doi = {10.5281/zenodo.5608581}, title = {{pybaselines}: A {Python} library of algorithms for the baseline correction of experimental data}, diff --git a/docs/examples/general/plot_masked_data.py b/docs/examples/general/plot_masked_data.py index 412d9fb8..264d357e 100644 --- a/docs/examples/general/plot_masked_data.py +++ b/docs/examples/general/plot_masked_data.py @@ -5,20 +5,21 @@ There are cases where data needs to be filtered/masked before processing, for example a faulty detector can result in problematic regions in measurements. In these cases, baseline correction on -the raw data could lead to severely incorrect fits. One such use of masking in literature is presented by -`Temmink, et al. `_ for removing downward spikes in -mid-infrared data collected from the James Webb Space Telescope before performing baseline correction. -This example will detail how to handle working with masked data for the various types of baseline -correction algorithms in pybaselines. +the raw data could lead to severely incorrect fits. One such use of masking in literature is +presented by `Temmink, et al. `_ for removing +downward spikes in mid-infrared data collected from the James Webb Space Telescope before +performing baseline correction. This example will detail how to handle working with masked data +for the various types of baseline correction algorithms in pybaselines. As a preface for this guide, the author of this library acknowledges that masking could potentially be handled internally within each individual algorithm to make them "mask-aware". However, it would -be a large change to the codebase, and there are many edge cases that would make it a non-trivial endeavor. -Support for masking following the guidelines presented in this example could alternatively be added -as an :doc:`optimizer-type algorithm <../../../algorithms/optimizers>`, but, in the author's opinion, -making one single function that is expected to cover 60+ different algorithms would be fiddly at best -and very prone to bugs. Therefore, this guide is presented as a starting point for users to adapt for -targeting a spectific baseline correction algorithm or group of algorithms. +be a large change to the codebase, and there are many edge cases that would make it a non-trivial +endeavor. Support for masking following the guidelines presented in this example could +alternatively be added as an :doc:`optimizer-type algorithm <../../../algorithms/optimizers>`, +but, in the author's opinion, making one single function that is expected to cover 60+ different +algorithms would be fiddly at best and very prone to bugs. Therefore, this guide is presented as a +starting point for users to adapt for targeting a specific baseline correction algorithm or group +of algorithms. The various algorithms in pybaselines can be broadly grouped into three different categories for how they handle masked data: @@ -47,8 +48,6 @@ from pybaselines import Baseline from pybaselines.utils import gaussian, relative_difference -from pybaselines._banded_utils import PenalizedSystem -from pybaselines._weighting import _arpls x = np.linspace(500, 4000, 1000) @@ -83,8 +82,9 @@ # To start, the mask for fitting the data has to be made. This can be done by eye if fitting # a few datasets, or can be automated using some metric. Many # :doc:`classification methods <../../../algorithms/classification>` use different methods for -# excluding positive peaks; for excluding negative peaks, see -# `Temmink, et al. `_ for an example. This example +# excluding positive peaks; for an example of excluding negative peaks, see +# `Temmink, et al. `_, which uses +# Savitzky-Golay filtering combined with iterative thresholding. This example # will simply define the mask region by hand. fit_mask = (x < 1900) | (x > 2550) # 1 in regions to fit, 0 in masked region @@ -160,6 +160,8 @@ # "Mask-aware" versions of these algorithms could be implemented, as shown below for # the arPLS algorithm. However, the "mask-aware" behavior can be closely approximated # simply by using weighted interpolation, to be shown below. +from pybaselines._banded_utils import PenalizedSystem # noqa: E402 +from pybaselines._weighting import _arpls # noqa: E402 def masked_arpls(y, mask=None, lam=1e5, diff_order=2, tol=1e-3, max_iter=50, weights=None): diff --git a/docs/examples/general/plot_reuse_Baseline.py b/docs/examples/general/plot_reuse_Baseline.py index 17f22bb0..c308bf9a 100644 --- a/docs/examples/general/plot_reuse_Baseline.py +++ b/docs/examples/general/plot_reuse_Baseline.py @@ -10,7 +10,7 @@ matrix, and potentially its pseudoinverse, once. Likewise, :doc:`spline methods <../../../algorithms/spline>` will only have to compute the spline basis matrix once. Note that this only applies if the same non-data parameters -(eg. ``poly_order``, ``lam``, etc.) are used for each fit. +(eg. ``poly_order``, ``num_knots``, etc.) are used for each fit. This example will explore the efficiency of reusing the same ``Baseline`` object when fitting multiple datasets for different types of algorithms. diff --git a/pybaselines/polynomial.py b/pybaselines/polynomial.py index 49efdfb8..46c0203d 100644 --- a/pybaselines/polynomial.py +++ b/pybaselines/polynomial.py @@ -1383,7 +1383,7 @@ def _identify_loss_method(loss_method): """ prefix, *split_method = loss_method.lower().split('_') if prefix not in ('a', 's', 'asymmetric', 'symmetric') or not split_method: - raise ValueError('must specify loss function symmetry by appending "a_" or "s_"') + raise ValueError('must specify loss function symmetry by prepending "a_" or "s_"') if prefix in ('a', 'asymmetric'): symmetric = False else: diff --git a/pybaselines/two_d/polynomial.py b/pybaselines/two_d/polynomial.py index 48ae2c71..b92eb9b9 100644 --- a/pybaselines/two_d/polynomial.py +++ b/pybaselines/two_d/polynomial.py @@ -790,7 +790,7 @@ def _identify_loss_method(loss_method): """ prefix, *split_method = loss_method.lower().split('_') if prefix not in ('a', 's', 'asymmetric', 'symmetric') or not split_method: - raise ValueError('must specify loss function symmetry by appending "a_" or "s_"') + raise ValueError('must specify loss function symmetry by prepending "a_" or "s_"') if prefix in ('a', 'asymmetric'): symmetric = False else: From 73a4ce3318cfb1c550a5c6796b95a820419da02f Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 14 Sep 2025 16:11:12 -0400 Subject: [PATCH 12/13] MAINT: Turn persist-credentials off when using checkout in CI --- .github/workflows/python-test-latest.yml | 2 ++ .github/workflows/python-test.yml | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python-test-latest.yml b/.github/workflows/python-test-latest.yml index c42791e1..81f79f1e 100644 --- a/.github/workflows/python-test-latest.yml +++ b/.github/workflows/python-test-latest.yml @@ -40,6 +40,8 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 59ac2471..fada8bd5 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -40,12 +40,8 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - # fetch-depth: '0' is needed to fetch tags for hatch-vcs (and thus setuptools-scm) - # to generate the version correctly; only really needed for jobs that would build and - # upload to pypi, so ignore it since fetching the entire git history can take much longer - # than the default of fetching just the last commit - #with: - #fetch-depth: '0' + with: + persist-credentials: false - name: Set up Python uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 @@ -81,6 +77,8 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 @@ -113,6 +111,8 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 @@ -137,6 +137,8 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 From 0714e78ae186dba51fef182589d66840743abbf1 Mon Sep 17 00:00:00 2001 From: Donnie Erb <55961724+derb12@users.noreply.github.com> Date: Sun, 14 Sep 2025 16:17:25 -0400 Subject: [PATCH 13/13] DOCS: Add docstring examples for some Whittaker methods Updated the docstrings and added examples for asls, iasls, airpls, and arpls. --- pybaselines/whittaker.py | 297 ++++++++++++++++++++++++++++++++++----- 1 file changed, 265 insertions(+), 32 deletions(-) diff --git a/pybaselines/whittaker.py b/pybaselines/whittaker.py index 04dd3b6c..bfff13d2 100644 --- a/pybaselines/whittaker.py +++ b/pybaselines/whittaker.py @@ -20,21 +20,35 @@ class _Whittaker(_Algorithm): @_Algorithm._register(sort_keys=('weights',)) def asls(self, data, lam=1e6, p=1e-2, diff_order=2, max_iter=50, tol=1e-3, weights=None): - """ - Fits the baseline using asymmetric least squares (AsLS) fitting. + r""" + Fits the baseline using the asymmetric least squares (AsLS) algorithm. + + Iteratively calculates the baseline, v, by solving the linear equation + :math:`(W + \lambda D_d^{\mathsf{T}} D_d) v = W y`, where y is the input data, + :math:`D_d` is the finite difference matrix of order d, W is the diagonal matrix + of the weights, and :math:`\lambda` (``lam``) is the regularization parameter. + + Each iteration, the weights are updated following: + + .. math:: + + w_i = \left\{\begin{array}{cr} + p & y_i > v_i \\ + 1 - p & y_i \le v_i + \end{array}\right. Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e6. p : float, optional The penalizing weighting factor. Must be between 0 and 1. Values greater - than the baseline will be given `p` weight, and values less than the baseline - will be given `1 - p` weight. Default is 1e-2. + than the baseline will be given ``p`` weight, and values less than the baseline + will be given ``1 - p`` weight. Can be considered as analogous to the quantile of + the data to fit. Default is 1e-2. diff_order : int, optional The order of the differential matrix. Must be greater than 0. Default is 2 (second order differential matrix). Typical values are 2 or 1. @@ -59,12 +73,17 @@ def asls(self, data, lam=1e6, p=1e-2, diff_order=2, max_iter=50, tol=1e-3, weigh An array containing the calculated tolerance values for each iteration. The length of the array is the number of iterations completed. If the last value in the array is greater than the input - `tol` value, then the function did not converge. + ``tol`` value, then the function did not converge. Raises ------ ValueError - Raised if `p` is not between 0 and 1. + Raised if ``p`` is not between 0 and 1. + + Notes + ----- + In literature, this algorithm is referred to as either "ALS" or "AsLS", + both standing for asymmetric least squares. References ---------- @@ -75,6 +94,47 @@ def asls(self, data, lam=1e6, p=1e-2, diff_order=2, max_iter=50, tol=1e-3, weigh Eilers, P. Parametric Time Warping. Analytical Chemistry, 2004, 76(2), 404-411. + Examples + -------- + >>> import matplotlib.pyplot as plt + >>> from pybaselines import Baseline, utils + >>> x, y = utils.make_data(noise_std=0.2) + >>> baseline_fitter = Baseline(x) + + The two main parameters to vary are ``lam``, which controls the smoothness of the + baseline, and ``p``, which controls the weighting. In general, a higher ``p`` value + is needed for noisy data and correspondly requires a slightly higher ``lam`` value. + + >>> fit_1, params_1 = baseline_fitter.asls(y, lam=1e6, p=0.001) + >>> fit_2, params_2 = baseline_fitter.asls(y, lam=1e7, p=0.02) + >>> plt.plot(x, y) + >>> plt.plot(x, fit_1, label='lam=1e6, p=0.001') + >>> plt.plot(x, fit_2, '--', label='lam=1e7, p=0.02') + >>> plt.legend() + >>> plt.show() + + The parameter ``p`` should typically be chosen such that the residuals, ``y - baseline``, + are centered around 0. In this example, the use of ``p=0.02`` fits the noise better. + + >>> plt.hist( + ... [y - fit_1, y - fit_2], bins=100, density=True, label=['p=0.001', 'p=0.02'], + ... histtype='step' + ... ) + >>> plt.xlabel('Residuals, y - baseline') + >>> plt.legend() + >>> plt.show() + + An alternative to adjusting ``p`` for noisy data is to simply smooth the data before + calling ``asls``, which allows for ignoring ``p`` (ie. selecting a ``p`` value near 0). + + >>> y_smooth = utils.whittaker_smooth(y, lam=1e1) + >>> fit_3, params_3 = baseline_fitter.asls(y_smooth, lam=1e6, p=0.001) + >>> plt.plot(x, y) + >>> plt.plot(x, y_smooth, '--', label='smoothed data') + >>> plt.plot(x, fit_3, label='smoothed fit') + >>> plt.legend() + >>> plt.show() + """ if not 0 < p < 1: raise ValueError('p must be between 0 and 1') @@ -99,16 +159,36 @@ def asls(self, data, lam=1e6, p=1e-2, diff_order=2, max_iter=50, tol=1e-3, weigh @_Algorithm._register(sort_keys=('weights',)) def iasls(self, data, lam=1e6, p=1e-2, lam_1=1e-4, max_iter=50, tol=1e-3, weights=None, diff_order=2): - """ + r""" Fits the baseline using the improved asymmetric least squares (IAsLS) algorithm. - The algorithm consideres both the first and second derivatives of the residual. + The algorithm penalizes both the smoothness of the baseline as well as the first + derivative of the signal, ``y - baseline``. The baseline, v, is iteratively calculated + by solving the linear equation + + .. math:: + + (W^{\mathsf{T}} W + \lambda_1 D_1^{\mathsf{T}} D_1 + \lambda D_d^{\mathsf{T}} D_d) v + = (W^{\mathsf{T}} W + \lambda_1 D_1^{\mathsf{T}} D_1) y + + where y is the input data, :math:`D_d` is the finite difference matrix of order d, + :math:`D_1` is the first-order finite difference matrix, W is the diagonal matrix + of the weights, and :math:`\lambda` (``lam``) and :math:`\lambda_1` (``lam_1``) are + regularization parameters. + + Each iteration, the weights are updated following: + + .. math:: + + w_i = \left\{\begin{array}{cr} + p & y_i > v_i \\ + 1 - p & y_i \le v_i + \end{array}\right. Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with `N` data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e6. @@ -149,11 +229,79 @@ def iasls(self, data, lam=1e6, p=1e-2, lam_1=1e-4, max_iter=50, tol=1e-3, ValueError Raised if `p` is not between 0 and 1 or if `diff_order` is less than 2. + Notes + ----- + Although both ``iasls`` and :meth:`~.Baseline.asls` use ``p`` for defining the weights, + the appropriate ``p`` value for ``iasls`` will be approximately equal to the square root + of the value used for ``asls`` since ``iasls`` squares the weights within its linear + equation. + + Omits the outer loop described by the reference implementation of the IAsLs algorithm, + in which the baseline fitting is repeated after subtracting the baseline from the data. + The outer loop makes the algorithm's performance difficult to predict and often leads + to either peak clipping or no change from the first fit baseline. If this outer loop is + desired, this method simply needs to be called repeatedly, as demonstrated in the + Examples section below. + References ---------- He, S., et al. Baseline correction for raman spectra using an improved asymmetric least squares method, Analytical Methods, 2014, 6(12), 4402-4407. + Examples + -------- + >>> import matplotlib.pyplot as plt + >>> import numpy as np + >>> from pybaselines import Baseline, utils + >>> x, y = utils.make_data(noise_std=0.2) + >>> baseline_fitter = Baseline(x) + + The two main parameters to vary are ``lam``, which controls the smoothness of the + baseline, and ``p``, which controls the weighting. In general, a higher ``p`` value + is needed for noisy data and correspondly requires a slightly higher ``lam`` value. + + >>> fit_1, params_1 = baseline_fitter.iasls(y, lam=1e6, p=0.05) + >>> fit_2, params_2 = baseline_fitter.iasls(y, lam=1e7, p=0.15) + >>> plt.plot(x, y) + >>> plt.plot(x, fit_1, label='lam=1e6, p=0.05') + >>> plt.plot(x, fit_2, '--', label='lam=1e7, p=0.15') + >>> plt.legend() + >>> plt.show() + + The parameter ``p`` should typically be chosen such that the residuals, ``y - baseline``, + are centered around 0. In this example, the use of ``p=0.15`` fits the noise better. + + >>> plt.hist( + ... [y - fit_1, y - fit_2], bins=100, density=True, label=['p=0.05', 'p=0.15'], + ... histtype='step' + ... ) + >>> plt.xlabel('Residuals, y - baseline') + >>> plt.legend() + >>> plt.show() + + As stated in the Notes section above, the original IAsLs algorithm used an outer loop + which subtracted the fit baseline from the data and then used the result to fit a new + baseline. This behavior can be emulated by calling ``iasls`` within a loop as shown below. + + >>> baseline = np.zeros_like(y) + >>> data = y + >>> tol = 5e-3 + >>> max_iter = 50 + >>> for i in range(max_iter): + ... fit, params = baseline_fitter.iasls(data, lam=1e7, p=0.15) + ... residual = data - fit + ... if utils.relative_difference(data, residual) < tol: + ... break + ... data = residual + ... baseline += fit + >>> print(f'Performed {i + 1} iterations') + Performed 3 iterations + >>> plt.plot(x, y) + >>> plt.plot(x, fit_2, label='single iteration') + >>> plt.plot(x, baseline, '--', label='multiple iterations') + >>> plt.legend() + >>> plt.show() + """ if not 0 < p < 1: raise ValueError('p must be between 0 and 1') @@ -201,14 +349,31 @@ def iasls(self, data, lam=1e6, p=1e-2, lam_1=1e-4, max_iter=50, tol=1e-3, @_Algorithm._register(sort_keys=('weights',)) def airpls(self, data, lam=1e6, diff_order=2, max_iter=50, tol=1e-3, weights=None, normalize_weights=False): - """ + r""" Adaptive iteratively reweighted penalized least squares (airPLS) baseline. + Iteratively calculates the baseline, v, by solving the linear equation + :math:`(W + \lambda D_d^{\mathsf{T}} D_d) v = W y`, where y is the input data, + :math:`D_d` is the finite difference matrix of order d, W is the diagonal matrix + of the weights, and :math:`\lambda` (``lam``) is the regularization parameter. + + Each iteration, the weights are updated following: + + .. math:: + + w_i = \left\{\begin{array}{cr} + 0 & y_i \ge v_i \\ + \exp{\left(\frac{\text{abs}(y_i - v_i) t}{|\mathbf{r}^-|}\right)} & y_i < v_i + \end{array}\right. + + where t is the iteration number and :math:`|\mathbf{r}^-|` is the L1-norm of the + negative values in the residual vector :math:`\mathbf r`, ie. + :math:`\sum\limits_{y_i - v_i < 0} |y_i - v_i|`. + Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e6. @@ -242,11 +407,49 @@ def airpls(self, data, lam=1e6, diff_order=2, max_iter=50, tol=1e-3, weights=Non completed. If the last value in the array is greater than the input `tol` value, then the function did not converge. + Notes + ----- + The original publication for the airPLS algorithm contained a typo in its + weighting scheme which omitted the use of absolute values within the exponential, + as indicated by the author: https://github.com/zmzhang/airPLS/issues/8. + References ---------- Zhang, Z.M., et al. Baseline correction using adaptive iteratively reweighted penalized least squares. Analyst, 2010, 135(5), 1138-1146. + Examples + -------- + >>> import matplotlib.pyplot as plt + >>> from pybaselines import Baseline, utils + >>> x, y = utils.make_data() + >>> baseline_fitter = Baseline(x) + + The main parameter to vary is ``lam``, which controls the smoothness of the + baseline, with larger values giving smoother baselines. + + >>> fit_1, params_1 = baseline_fitter.airpls(y, lam=1e4) + >>> fit_2, params_2 = baseline_fitter.airpls(y, lam=1e6) + >>> plt.plot(x, y) + >>> plt.plot(x, fit_1, label='lam=1e4') + >>> plt.plot(x, fit_2, '--', label='lam=1e6') + >>> plt.legend() + >>> plt.show() + + For noisy data, ``airpls`` underestimates the baseline, which can be mitigated by + smoothing the input data before calling the method. + + >>> _, y_noisy = utils.make_data(noise_std=0.3) + >>> y_smooth = utils.whittaker_smooth(y_noisy, lam=1e2) + >>> fit_3, params_4 = baseline_fitter.airpls(y_noisy, lam=1e6) + >>> fit_4, params_4 = baseline_fitter.airpls(y_smooth, lam=1e6) + >>> plt.plot(x, y_noisy) + >>> plt.plot(x, y_smooth, '--', label='smoothed data') + >>> plt.plot(x, fit_3, ':', label='noisy fit') + >>> plt.plot(x, fit_4, label='smoothed fit') + >>> plt.legend() + >>> plt.show() + """ y, weight_array, whittaker_system = self._setup_whittaker(data, lam, diff_order, weights) y_l1_norm = np.abs(y).sum() @@ -274,14 +477,33 @@ def airpls(self, data, lam=1e6, diff_order=2, max_iter=50, tol=1e-3, weights=Non @_Algorithm._register(sort_keys=('weights',)) def arpls(self, data, lam=1e5, diff_order=2, max_iter=50, tol=1e-3, weights=None): - """ + r""" Asymmetrically reweighted penalized least squares smoothing (arPLS). + Iteratively calculates the baseline, v, by solving the linear equation + :math:`(W + \lambda D_d^{\mathsf{T}} D_d) v = W y`, where y is the input data, + :math:`D_d` is the finite difference matrix of order d, W is the diagonal matrix + of the weights, and :math:`\lambda` (``lam``) is the regularization parameter. + + Each iteration, the weights are updated following: + + .. math:: + + w_i = \frac + {1} + {1 + \exp{\left(\frac + {2(r_i - (-\mu^- + 2 \sigma^-))} + {\sigma^-} + \right)}} + + where :math:`r_i = y_i - v_i` and :math:`\mu^-` and :math:`\sigma^-` are the mean and + standard deviation, respectively, of the negative values in the residual vector, + ``y - v``. + Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5. @@ -316,6 +538,24 @@ def arpls(self, data, lam=1e5, diff_order=2, max_iter=50, tol=1e-3, weights=None Baek, S.J., et al. Baseline correction using asymmetrically reweighted penalized least squares smoothing. Analyst, 2015, 140, 250-257. + Examples + -------- + >>> import matplotlib.pyplot as plt + >>> from pybaselines import Baseline, utils + >>> x, y = utils.make_data(noise_std=0.2) + >>> baseline_fitter = Baseline(x) + + The main parameter to vary is ``lam``, which controls the smoothness of the + baseline, with larger values giving smoother baselines. + + >>> fit_1, params_1 = baseline_fitter.arpls(y, lam=1e4) + >>> fit_2, params_2 = baseline_fitter.arpls(y, lam=1e6) + >>> plt.plot(x, y) + >>> plt.plot(x, fit_1, label='lam=1e4') + >>> plt.plot(x, fit_2, '--', label='lam=1e6') + >>> plt.legend() + >>> plt.show() + """ y, weight_array, whittaker_system = self._setup_whittaker(data, lam, diff_order, weights) tol_history = np.empty(max_iter + 1) @@ -346,8 +586,7 @@ def drpls(self, data, lam=1e5, eta=0.5, max_iter=50, tol=1e-3, weights=None, dif Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5. @@ -442,8 +681,7 @@ def iarpls(self, data, lam=1e5, diff_order=2, max_iter=50, tol=1e-3, weights=Non Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5. @@ -510,8 +748,7 @@ def aspls(self, data, lam=1e5, diff_order=2, max_iter=100, tol=1e-3, Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5. @@ -623,8 +860,7 @@ def psalsa(self, data, lam=1e5, p=0.5, k=None, diff_order=2, max_iter=50, tol=1e Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5. @@ -718,8 +954,7 @@ def derpsalsa(self, data, lam=1e6, p=0.01, k=None, diff_order=2, max_iter=50, to Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e6. @@ -842,8 +1077,7 @@ def brpls(self, data, lam=1e5, diff_order=2, max_iter=50, tol=1e-3, max_iter_2=5 Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5. @@ -946,8 +1180,7 @@ def lsrpls(self, data, lam=1e5, diff_order=2, max_iter=50, tol=1e-3, weights=Non Parameters ---------- data : array-like, shape (N,) - The y-values of the measured data, with N data points. Must not - contain missing data (NaN) or Inf. + The y-values of the measured data. Must not contain missing data (NaN) or Inf. lam : float, optional The smoothing parameter. Larger values will create smoother baselines. Default is 1e5.