From 60da4ec07ffb29fe88605203547e41d8db86a31a Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Mon, 5 Sep 2022 09:09:53 +0200 Subject: [PATCH] added p1 --- .../2022/Project1/html/._Project1-bs000.html | 696 +++++++++++++++ .../2022/Project1/html/Project1-bs.html | 696 +++++++++++++++ doc/Projects/2022/Project1/html/Project1.html | 719 +++++++++++++++ .../2022/Project1/ipynb/Project1.ipynb | 821 ++++++++++++++++++ .../Project1/ipynb/ipynb-Project1-src.tar.gz | Bin 0 -> 193 bytes doc/Projects/2022/Project1/pdf/Project1.p.tex | 653 ++++++++++++++ doc/Projects/2022/Project1/pdf/Project1.pdf | Bin 0 -> 252836 bytes doc/Projects/2022/Project1/pdf/Project1.tex | 621 +++++++++++++ .../2022/Project1/._Project1-bs000.html | 696 +++++++++++++++ .../Projects/2022/Project1/Project1-bs.html | 696 +++++++++++++++ .../Projects/2022/Project1/Project1.do.txt | 106 ++- doc/src/Projects/2022/Project1/Project1.html | 719 +++++++++++++++ doc/src/Projects/2022/Project1/Project1.ipynb | 821 ++++++++++++++++++ doc/src/Projects/2022/Project1/Project1.p.tex | 653 ++++++++++++++ doc/src/Projects/2022/Project1/Project1.pdf | Bin 0 -> 252836 bytes doc/src/Projects/2022/Project1/Project1.tex | 621 +++++++++++++ doc/src/Projects/2022/Project1/README.txt | 2 + .../2022/Project1/ipynb-Project1-src.tar.gz | Bin 0 -> 193 bytes doc/src/Projects/2022/Project1/make.sh | 2 +- 19 files changed, 8497 insertions(+), 25 deletions(-) create mode 100644 doc/Projects/2022/Project1/html/._Project1-bs000.html create mode 100644 doc/Projects/2022/Project1/html/Project1-bs.html create mode 100644 doc/Projects/2022/Project1/html/Project1.html create mode 100644 doc/Projects/2022/Project1/ipynb/Project1.ipynb create mode 100644 doc/Projects/2022/Project1/ipynb/ipynb-Project1-src.tar.gz create mode 100644 doc/Projects/2022/Project1/pdf/Project1.p.tex create mode 100644 doc/Projects/2022/Project1/pdf/Project1.pdf create mode 100644 doc/Projects/2022/Project1/pdf/Project1.tex create mode 100644 doc/src/Projects/2022/Project1/._Project1-bs000.html create mode 100644 doc/src/Projects/2022/Project1/Project1-bs.html create mode 100644 doc/src/Projects/2022/Project1/Project1.html create mode 100644 doc/src/Projects/2022/Project1/Project1.ipynb create mode 100644 doc/src/Projects/2022/Project1/Project1.p.tex create mode 100644 doc/src/Projects/2022/Project1/Project1.pdf create mode 100644 doc/src/Projects/2022/Project1/Project1.tex create mode 100644 doc/src/Projects/2022/Project1/README.txt create mode 100644 doc/src/Projects/2022/Project1/ipynb-Project1-src.tar.gz diff --git a/doc/Projects/2022/Project1/html/._Project1-bs000.html b/doc/Projects/2022/Project1/html/._Project1-bs000.html new file mode 100644 index 000000000..e11873fc6 --- /dev/null +++ b/doc/Projects/2022/Project1/html/._Project1-bs000.html @@ -0,0 +1,696 @@ + + + + + + + +Project 1 on Machine Learning, deadline October 7, 2021 + + + + + + + + + + + + + + + + + + + + +
+

 

 

 

+ + +
+
+

Project 1 on Machine Learning, deadline October 7, 2021

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+University of Oslo, Norway +
+
+
+

Sep 5, 2022

+
+
+ + +
+

Regression analysis and resampling methods

+ +

The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md we detail how to write a report. Furthermore, at https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/ you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. +

+ +

We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. +

+ +

The Franke function, which is a weighted sum of four exponentials reads as follows

+$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for \( x \) and +\( y \), or as in the example below just a set of fixed values for \( x \) and +\( y \) with a given step size. We will fit a function (for example a +polynomial) of \( x \) and \( y \). Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) \( \lambda \). +

+ +

Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. +

+ +

The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)

+ + +
+
+
+
+
+
from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Part a): Paper and pencil part (also as weekly exercise for week 36)

+ +

This part can be included in your theory description of the report.

+ +

This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer).

+ +

The assumption we have made is +that there exists a continuous function \( f(\boldsymbol{x}) \) and a normal distributed error \( \boldsymbol{\varepsilon}\sim N(0, \sigma^2) \) +which describes our data +

+$$ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +$$ + +

We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function \( f \) is approximated by \( \boldsymbol{\tilde{y}} \) where we minimized \( (\boldsymbol{y}-\boldsymbol{\tilde{y}})^2 \), with +

+$$ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +$$ + +

The matrix \( \boldsymbol{X} \) is the so-called design or feature matrix.

+ +

Show that the expectation value of \( \boldsymbol{y} \) for a given element \( i \)

+$$ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, +$$ + +

and that +its variance is +

+$$ +\mbox{Var}(y_i) = \sigma^2. +$$ + +

Hence, \( y_i \sim N( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2) \), that is \( \boldsymbol{y} \) follows a normal distribution with +mean value \( \boldsymbol{X}\boldsymbol{\beta} \) and variance \( \sigma^2 \). +

+ +

With the OLS expressions for the parameters \( \boldsymbol{\beta} \) show that

+$$ +\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}. +$$ + +

Show finally that the variance of \( \boldsymbol{\beta} \) is

+$$ +\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +$$ + +

We can use the last expression when we define a so-called confidence interval for the parameters \( \beta \). +A given parameter \( \beta_j \) is given by the diagonal matrix element of the above matrix. +

+

Part b) : Ordinary Least Square (OLS) on the Franke function

+ +

We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( N(0,1) \). +

+ +

Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) and perform a standard ordinary least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. +

+ +

Evaluate the mean Squared error (MSE)

+ +$$ MSE(\boldsymbol{y},\tilde{\boldsymbol{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

and the \( R^2 \) score function. If \( \tilde{\boldsymbol{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as +

+ +$$ +R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

where we have defined the mean value of \( \boldsymbol{y} \) as

+ +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters \( \beta \) as you increase the order of the polynomial. Comment your results. +

+ +

Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. +

+ +

It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately \( 2/3 \) to \( 4/5 \) of the data as training data. +

+ +

You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. +

+

Part c): Bias-variance trade-off and resampling techniques

+ +

Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique.

+ +

With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. +

+ +

Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! +

+ +

With this result we move on to the bias-variance trade-off analysis.

+ +

Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). +

+ +

Let us assume that the true data is generated from a noisy model

+ +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). +

+ +

In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). +

+ +

The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function +

+ +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +

Here the expected value \( \mathbb{E} \) is the sample value.

+ +

Show that you can rewrite this as

+$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. +

+ +

Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. +

+ +

Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. +

+ +

Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \).

+

Part d): Cross-validation as resampling techniques, adding more complexity

+ +

The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. +

+ +

Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. +

+ +

Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. +

+

Part e): Ridge Regression on the Franke function with resampling

+ +

Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on \( \lambda \). +

+ +

Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. +

+

Part f): Lasso Regression on the Franke function with resampling

+ +

This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. +

+

Part g): Analysis of real data

+ +

With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, +

+ +

Or, if you prefer, we have placed selected datafiles at https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles

+ +

In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using +

+ + + +
+
+
+
+
+
scipy.misc.imread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Here is a simple part of a Python code which reads and plots the data +from such files +

+ + + +
+
+
+
+
+
import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. +

+ +

Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples.

+ +

Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. +

+ +

At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). +

+

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.

+ + +

Format for electronic delivery of report and programs

+ +

The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:

+ + +

Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. +

+

Software and needed installations

+ +

If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as +

+
    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+

For Python3, replace pip with pip3.

+ +

See below for a discussion of tensorflow and scikit-learn.

+ +

For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example +

+
    +
  1. brew install python3
  2. +
+

For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as +

+
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+

etc etc.

+ +

If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely

+
    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+

Popular software packages written in Python for ML are

+ + +

These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. +

+ +

+ +

+ +
+ + + + + + + diff --git a/doc/Projects/2022/Project1/html/Project1-bs.html b/doc/Projects/2022/Project1/html/Project1-bs.html new file mode 100644 index 000000000..e11873fc6 --- /dev/null +++ b/doc/Projects/2022/Project1/html/Project1-bs.html @@ -0,0 +1,696 @@ + + + + + + + +Project 1 on Machine Learning, deadline October 7, 2021 + + + + + + + + + + + + + + + + + + + + +
+

 

 

 

+ + +
+
+

Project 1 on Machine Learning, deadline October 7, 2021

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+University of Oslo, Norway +
+
+
+

Sep 5, 2022

+
+
+ + +
+

Regression analysis and resampling methods

+ +

The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md we detail how to write a report. Furthermore, at https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/ you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. +

+ +

We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. +

+ +

The Franke function, which is a weighted sum of four exponentials reads as follows

+$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for \( x \) and +\( y \), or as in the example below just a set of fixed values for \( x \) and +\( y \) with a given step size. We will fit a function (for example a +polynomial) of \( x \) and \( y \). Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) \( \lambda \). +

+ +

Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. +

+ +

The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)

+ + +
+
+
+
+
+
from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Part a): Paper and pencil part (also as weekly exercise for week 36)

+ +

This part can be included in your theory description of the report.

+ +

This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer).

+ +

The assumption we have made is +that there exists a continuous function \( f(\boldsymbol{x}) \) and a normal distributed error \( \boldsymbol{\varepsilon}\sim N(0, \sigma^2) \) +which describes our data +

+$$ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +$$ + +

We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function \( f \) is approximated by \( \boldsymbol{\tilde{y}} \) where we minimized \( (\boldsymbol{y}-\boldsymbol{\tilde{y}})^2 \), with +

+$$ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +$$ + +

The matrix \( \boldsymbol{X} \) is the so-called design or feature matrix.

+ +

Show that the expectation value of \( \boldsymbol{y} \) for a given element \( i \)

+$$ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, +$$ + +

and that +its variance is +

+$$ +\mbox{Var}(y_i) = \sigma^2. +$$ + +

Hence, \( y_i \sim N( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2) \), that is \( \boldsymbol{y} \) follows a normal distribution with +mean value \( \boldsymbol{X}\boldsymbol{\beta} \) and variance \( \sigma^2 \). +

+ +

With the OLS expressions for the parameters \( \boldsymbol{\beta} \) show that

+$$ +\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}. +$$ + +

Show finally that the variance of \( \boldsymbol{\beta} \) is

+$$ +\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +$$ + +

We can use the last expression when we define a so-called confidence interval for the parameters \( \beta \). +A given parameter \( \beta_j \) is given by the diagonal matrix element of the above matrix. +

+

Part b) : Ordinary Least Square (OLS) on the Franke function

+ +

We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( N(0,1) \). +

+ +

Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) and perform a standard ordinary least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. +

+ +

Evaluate the mean Squared error (MSE)

+ +$$ MSE(\boldsymbol{y},\tilde{\boldsymbol{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

and the \( R^2 \) score function. If \( \tilde{\boldsymbol{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as +

+ +$$ +R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

where we have defined the mean value of \( \boldsymbol{y} \) as

+ +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters \( \beta \) as you increase the order of the polynomial. Comment your results. +

+ +

Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. +

+ +

It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately \( 2/3 \) to \( 4/5 \) of the data as training data. +

+ +

You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. +

+

Part c): Bias-variance trade-off and resampling techniques

+ +

Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique.

+ +

With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. +

+ +

Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! +

+ +

With this result we move on to the bias-variance trade-off analysis.

+ +

Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). +

+ +

Let us assume that the true data is generated from a noisy model

+ +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). +

+ +

In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). +

+ +

The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function +

+ +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +

Here the expected value \( \mathbb{E} \) is the sample value.

+ +

Show that you can rewrite this as

+$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. +

+ +

Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. +

+ +

Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. +

+ +

Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \).

+

Part d): Cross-validation as resampling techniques, adding more complexity

+ +

The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. +

+ +

Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. +

+ +

Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. +

+

Part e): Ridge Regression on the Franke function with resampling

+ +

Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on \( \lambda \). +

+ +

Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. +

+

Part f): Lasso Regression on the Franke function with resampling

+ +

This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. +

+

Part g): Analysis of real data

+ +

With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, +

+ +

Or, if you prefer, we have placed selected datafiles at https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles

+ +

In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using +

+ + + +
+
+
+
+
+
scipy.misc.imread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Here is a simple part of a Python code which reads and plots the data +from such files +

+ + + +
+
+
+
+
+
import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. +

+ +

Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples.

+ +

Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. +

+ +

At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). +

+

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.

+ + +

Format for electronic delivery of report and programs

+ +

The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:

+ + +

Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. +

+

Software and needed installations

+ +

If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as +

+
    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+

For Python3, replace pip with pip3.

+ +

See below for a discussion of tensorflow and scikit-learn.

+ +

For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example +

+
    +
  1. brew install python3
  2. +
+

For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as +

+
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+

etc etc.

+ +

If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely

+
    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+

Popular software packages written in Python for ML are

+ + +

These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. +

+ +

+ +

+ +
+ + + + + + + diff --git a/doc/Projects/2022/Project1/html/Project1.html b/doc/Projects/2022/Project1/html/Project1.html new file mode 100644 index 000000000..19569cd9d --- /dev/null +++ b/doc/Projects/2022/Project1/html/Project1.html @@ -0,0 +1,719 @@ + + + + + + + +Project 1 on Machine Learning, deadline October 7, 2021 + + + + + + + + + + + + + + +
+

Project 1 on Machine Learning, deadline October 7, 2021

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+University of Oslo, Norway +
+
+
+

Sep 5, 2022

+
+
+

Regression analysis and resampling methods

+ +

The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md we detail how to write a report. Furthermore, at https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/ you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. +

+ +

We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. +

+ +

The Franke function, which is a weighted sum of four exponentials reads as follows

+$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for \( x \) and +\( y \), or as in the example below just a set of fixed values for \( x \) and +\( y \) with a given step size. We will fit a function (for example a +polynomial) of \( x \) and \( y \). Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) \( \lambda \). +

+ +

Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. +

+ +

The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)

+ + +
+
+
+
+
+
from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Part a): Paper and pencil part (also as weekly exercise for week 36)

+ +

This part can be included in your theory description of the report.

+ +

This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer).

+ +

The assumption we have made is +that there exists a continuous function \( f(\boldsymbol{x}) \) and a normal distributed error \( \boldsymbol{\varepsilon}\sim N(0, \sigma^2) \) +which describes our data +

+$$ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +$$ + +

We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function \( f \) is approximated by \( \boldsymbol{\tilde{y}} \) where we minimized \( (\boldsymbol{y}-\boldsymbol{\tilde{y}})^2 \), with +

+$$ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +$$ + +

The matrix \( \boldsymbol{X} \) is the so-called design or feature matrix.

+ +

Show that the expectation value of \( \boldsymbol{y} \) for a given element \( i \)

+$$ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, +$$ + +

and that +its variance is +

+$$ +\mbox{Var}(y_i) = \sigma^2. +$$ + +

Hence, \( y_i \sim N( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2) \), that is \( \boldsymbol{y} \) follows a normal distribution with +mean value \( \boldsymbol{X}\boldsymbol{\beta} \) and variance \( \sigma^2 \). +

+ +

With the OLS expressions for the parameters \( \boldsymbol{\beta} \) show that

+$$ +\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}. +$$ + +

Show finally that the variance of \( \boldsymbol{\beta} \) is

+$$ +\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +$$ + +

We can use the last expression when we define a so-called confidence interval for the parameters \( \beta \). +A given parameter \( \beta_j \) is given by the diagonal matrix element of the above matrix. +

+

Part b) : Ordinary Least Square (OLS) on the Franke function

+ +

We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( N(0,1) \). +

+ +

Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) and perform a standard ordinary least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. +

+ +

Evaluate the mean Squared error (MSE)

+ +$$ MSE(\boldsymbol{y},\tilde{\boldsymbol{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

and the \( R^2 \) score function. If \( \tilde{\boldsymbol{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as +

+ +$$ +R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

where we have defined the mean value of \( \boldsymbol{y} \) as

+ +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters \( \beta \) as you increase the order of the polynomial. Comment your results. +

+ +

Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. +

+ +

It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately \( 2/3 \) to \( 4/5 \) of the data as training data. +

+ +

You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. +

+

Part c): Bias-variance trade-off and resampling techniques

+ +

Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique.

+ +

With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. +

+ +

Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! +

+ +

With this result we move on to the bias-variance trade-off analysis.

+ +

Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). +

+ +

Let us assume that the true data is generated from a noisy model

+ +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). +

+ +

In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). +

+ +

The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function +

+ +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +

Here the expected value \( \mathbb{E} \) is the sample value.

+ +

Show that you can rewrite this as

+$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. +

+ +

Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. +

+ +

Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. +

+ +

Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \).

+

Part d): Cross-validation as resampling techniques, adding more complexity

+ +

The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. +

+ +

Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. +

+ +

Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. +

+

Part e): Ridge Regression on the Franke function with resampling

+ +

Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on \( \lambda \). +

+ +

Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. +

+

Part f): Lasso Regression on the Franke function with resampling

+ +

This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. +

+

Part g): Analysis of real data

+ +

With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, +

+ +

Or, if you prefer, we have placed selected datafiles at https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles

+ +

In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using +

+ + + +
+
+
+
+
+
scipy.misc.imread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Here is a simple part of a Python code which reads and plots the data +from such files +

+ + + +
+
+
+
+
+
import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. +

+ +

Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples.

+ +

Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. +

+ +

At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). +

+

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.

+ + +

Format for electronic delivery of report and programs

+ +

The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:

+ + +

Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. +

+

Software and needed installations

+ +

If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as +

+
    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+

For Python3, replace pip with pip3.

+ +

See below for a discussion of tensorflow and scikit-learn.

+ +

For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example +

+
    +
  1. brew install python3
  2. +
+

For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as +

+
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+

etc etc.

+ +

If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely

+
    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+

Popular software packages written in Python for ML are

+ + +

These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. +

+ + + + + diff --git a/doc/Projects/2022/Project1/ipynb/Project1.ipynb b/doc/Projects/2022/Project1/ipynb/Project1.ipynb new file mode 100644 index 000000000..1471cc967 --- /dev/null +++ b/doc/Projects/2022/Project1/ipynb/Project1.ipynb @@ -0,0 +1,821 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7d5491c2", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "5e4e2e72", + "metadata": { + "editable": true + }, + "source": [ + "# Project 1 on Machine Learning, deadline October 7, 2021\n", + "**[Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html)**, University of Oslo, Norway\n", + "\n", + "Date: **Sep 5, 2022**" + ] + }, + { + "cell_type": "markdown", + "id": "b03ea5a7", + "metadata": { + "editable": true + }, + "source": [ + "## Regression analysis and resampling methods\n", + "\n", + "The main aim of this project is to study in more detail various\n", + "regression methods, including the Ordinary Least Squares (OLS) method,\n", + "In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports.\n", + "The format for the delivery of your answers is namely that of a scientific report. At for example we detail how to write a report. Furthermore, at you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. \n", + "\n", + "We will first study how to fit polynomials to a specific\n", + "two-dimensional function called [Franke's\n", + "function](http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf). This\n", + "is a function which has been widely used when testing various\n", + "interpolation and fitting algorithms. Furthermore, after having\n", + "established the model and the method, we will employ resamling\n", + "techniques such as cross-validation and/or bootstrap in order to perform a\n", + "proper assessment of our models. We will also study in detail the\n", + "so-called Bias-Variance trade off.\n", + "\n", + "The Franke function, which is a weighted sum of four exponentials reads as follows" + ] + }, + { + "cell_type": "markdown", + "id": "91b922a6", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*}\n", + "f(x,y) &= \\frac{3}{4}\\exp{\\left(-\\frac{(9x-2)^2}{4} - \\frac{(9y-2)^2}{4}\\right)}+\\frac{3}{4}\\exp{\\left(-\\frac{(9x+1)^2}{49}- \\frac{(9y+1)}{10}\\right)} \\\\\n", + "&+\\frac{1}{2}\\exp{\\left(-\\frac{(9x-7)^2}{4} - \\frac{(9y-3)^2}{4}\\right)} -\\frac{1}{5}\\exp{\\left(-(9x-4)^2 - (9y-7)^2\\right) }.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "cb6e2566", + "metadata": { + "editable": true + }, + "source": [ + "The function will be defined for $x,y\\in [0,1]$. Our first step will\n", + "be to perform an OLS regression analysis of this function, trying out\n", + "a polynomial fit with an $x$ and $y$ dependence of the form $[x, y,\n", + "x^2, y^2, xy, \\dots]$. We will also include bootstrap first as a\n", + "resampling technique. After that we will include the cross-validation\n", + "technique. As discussed in the lectures for weeks 35 and 36,, we can\n", + "use a uniform distribution to set up the arrays of values for $x$ and\n", + "$y$, or as in the example below just a set of fixed values for $x$ and\n", + "$y$ with a given step size. We will fit a function (for example a\n", + "polynomial) of $x$ and $y$. Thereafter we will repeat much of the\n", + "same procedure using the Ridge and Lasso regression methods,\n", + "introducing thus a dependence on the bias (penalty) $\\lambda$.\n", + "\n", + "Finally we are going to use (real) digital terrain data and try to\n", + "reproduce these data using the same methods. We will also try to go\n", + "beyond the second-order polynomials metioned above and explore \n", + "which polynomial fits the data best.\n", + "\n", + "The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9a3092c9", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm\n", + "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n", + "import numpy as np\n", + "from random import random, seed\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.gca(projection='3d')\n", + "\n", + "# Make data.\n", + "x = np.arange(0, 1, 0.05)\n", + "y = np.arange(0, 1, 0.05)\n", + "x, y = np.meshgrid(x,y)\n", + "\n", + "\n", + "def FrankeFunction(x,y):\n", + " term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n", + " term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n", + " term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n", + " term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n", + " return term1 + term2 + term3 + term4\n", + "\n", + "\n", + "z = FrankeFunction(x, y)\n", + "\n", + "# Plot the surface.\n", + "surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,\n", + " linewidth=0, antialiased=False)\n", + "\n", + "# Customize the z axis.\n", + "ax.set_zlim(-0.10, 1.40)\n", + "ax.zaxis.set_major_locator(LinearLocator(10))\n", + "ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n", + "\n", + "# Add a color bar which maps values to colors.\n", + "fig.colorbar(surf, shrink=0.5, aspect=5)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4e4d5459", + "metadata": { + "editable": true + }, + "source": [ + "### Part a): Paper and pencil part (also as weekly exercise for week 36)\n", + "\n", + "This part can be included in your theory description of the report.\n", + "\n", + "This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of [Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer](https://www.springer.com/gp/book/9780387848570)).\n", + "\n", + "The assumption we have made is \n", + "that there exists a continuous function $f(\\boldsymbol{x})$ and a normal distributed error $\\boldsymbol{\\varepsilon}\\sim N(0, \\sigma^2)$\n", + "which describes our data" + ] + }, + { + "cell_type": "markdown", + "id": "3477adc6", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ec544bff", + "metadata": { + "editable": true + }, + "source": [ + "We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our\n", + "function $f$ is approximated by $\\boldsymbol{\\tilde{y}}$ where we minimized $(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2$, with" + ] + }, + { + "cell_type": "markdown", + "id": "8dca3b1e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "90c6881a", + "metadata": { + "editable": true + }, + "source": [ + "The matrix $\\boldsymbol{X}$ is the so-called design or feature matrix. \n", + "\n", + "Show that the expectation value of $\\boldsymbol{y}$ for a given element $i$" + ] + }, + { + "cell_type": "markdown", + "id": "af3db03a", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(y_i) =\\sum_{j}x_{ij} \\beta_j=\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f1337f34", + "metadata": { + "editable": true + }, + "source": [ + "and that\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "id": "00934e8c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}(y_i) = \\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4aae2daa", + "metadata": { + "editable": true + }, + "source": [ + "Hence, $y_i \\sim N( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}, \\sigma^2)$, that is $\\boldsymbol{y}$ follows a normal distribution with \n", + "mean value $\\boldsymbol{X}\\boldsymbol{\\beta}$ and variance $\\sigma^2$.\n", + "\n", + "With the OLS expressions for the parameters $\\boldsymbol{\\beta}$ show that" + ] + }, + { + "cell_type": "markdown", + "id": "743efbd7", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(\\boldsymbol{\\beta}) = \\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "d69e012c", + "metadata": { + "editable": true + }, + "source": [ + "Show finally that the variance of $\\boldsymbol{\\beta}$ is" + ] + }, + { + "cell_type": "markdown", + "id": "f5c16cd2", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}(\\boldsymbol{\\beta}) = \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "03a15d86", + "metadata": { + "editable": true + }, + "source": [ + "We can use the last expression when we define a so-called confidence interval for the parameters $\\beta$.\n", + "A given parameter $\\beta_j$ is given by the diagonal matrix element of the above matrix." + ] + }, + { + "cell_type": "markdown", + "id": "d6281541", + "metadata": { + "editable": true + }, + "source": [ + "### Part b) : Ordinary Least Square (OLS) on the Franke function\n", + "\n", + "We will generate our own dataset for a function\n", + "$\\mathrm{FrankeFunction}(x,y)$ with $x,y \\in [0,1]$. The function\n", + "$f(x,y)$ is the Franke function. You should explore also the addition\n", + "of an added stochastic noise to this function using the normal\n", + "distribution $N(0,1)$.\n", + "\n", + "*Write your own code* (using either a matrix inversion or a singular\n", + "value decomposition from e.g., **numpy** ) and perform a standard **ordinary least square regression**\n", + "analysis using polynomials in $x$ and $y$ up to fifth order.\n", + "\n", + "Evaluate the mean Squared error (MSE)" + ] + }, + { + "cell_type": "markdown", + "id": "078298ff", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "MSE(\\boldsymbol{y},\\tilde{\\boldsymbol{y}}) = \\frac{1}{n}\n", + "\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4cffa699", + "metadata": { + "editable": true + }, + "source": [ + "and the $R^2$ score function. If $\\tilde{\\boldsymbol{y}}_i$ is the predicted\n", + "value of the $i-th$ sample and $y_i$ is the corresponding true value,\n", + "then the score $R^2$ is defined as" + ] + }, + { + "cell_type": "markdown", + "id": "30d8bdc3", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "2f93611c", + "metadata": { + "editable": true + }, + "source": [ + "where we have defined the mean value of $\\boldsymbol{y}$ as" + ] + }, + { + "cell_type": "markdown", + "id": "af430693", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "48c719ec", + "metadata": { + "editable": true + }, + "source": [ + "Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five).\n", + "Plot also the parameters $\\beta$ as you increase the order of the polynomial. Comment your results.\n", + "\n", + "Your code has to include a scaling/centering of the data (for example by\n", + "subtracting the mean value), and\n", + "a split of the data in training and test data. For this exercise you can\n", + "either write your own code or use for example the function for\n", + "splitting training data provided by the library **Scikit-Learn** (make\n", + "sure you have installed it). This function is called\n", + "$train\\_test\\_split$. **You should present a critical discussion of why and how you have scaled or not scaled the data**.\n", + "\n", + "It is normal in essentially all Machine Learning studies to split the\n", + "data in a training set and a test set (eventually also an additional\n", + "validation set). There\n", + "is no explicit recipe for how much data should be included as training\n", + "data and say test data. An accepted rule of thumb is to use\n", + "approximately $2/3$ to $4/5$ of the data as training data.\n", + "\n", + "You can easily reuse the solutions to your exercises from week 35 and week 36.\n", + "See also the lecture slides from week 35 and week 36." + ] + }, + { + "cell_type": "markdown", + "id": "4e67fbf1", + "metadata": { + "editable": true + }, + "source": [ + "### Part c): Bias-variance trade-off and resampling techniques\n", + "\n", + "Our aim here is to study the bias-variance trade-off by implementing the **bootstrap** resampling technique.\n", + "\n", + "With a code which does OLS and includes resampling techniques, \n", + "we will now discuss the bias-variance trade-off in the context of\n", + "continuous predictions such as regression. However, many of the\n", + "intuitions and ideas discussed here also carry over to classification\n", + "tasks and basically all Machine Learning algorithms. \n", + "\n", + "Before you perform an analysis of the bias-variance trade-off on your test data, make\n", + "first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and\n", + "Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to \n", + "indicate possible regions of low/high bias and variance. You will most likely not get an\n", + "equally smooth curve!\n", + "\n", + "With this result we move on to the bias-variance trade-off analysis.\n", + "\n", + "Consider a\n", + "dataset $\\mathcal{L}$ consisting of the data\n", + "$\\mathbf{X}_\\mathcal{L}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$.\n", + "\n", + "Let us assume that the true data is generated from a noisy model" + ] + }, + { + "cell_type": "markdown", + "id": "adc6df99", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "8dbdee19", + "metadata": { + "editable": true + }, + "source": [ + "Here $\\epsilon$ is normally distributed with mean zero and standard\n", + "deviation $\\sigma^2$.\n", + "\n", + "In our derivation of the ordinary least squares method we defined then\n", + "an approximation to the function $f$ in terms of the parameters\n", + "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", + "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$.\n", + "\n", + "The parameters $\\boldsymbol{\\beta}$ are in turn found by optimizing the means\n", + "squared error via the so-called cost function" + ] + }, + { + "cell_type": "markdown", + "id": "6fac8e39", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ee3e42bf", + "metadata": { + "editable": true + }, + "source": [ + "Here the expected value $\\mathbb{E}$ is the sample value. \n", + "\n", + "Show that you can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "id": "a6bb9925", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b5ad5eb7", + "metadata": { + "editable": true + }, + "source": [ + "The answer to this exercise can be included in the theory part of the report.\n", + "Explain what the terms mean, which one is the bias and which one is\n", + "the variance and discuss their interpretations.\n", + "\n", + "Perform then a bias-variance analysis of the Franke function by\n", + "studying the MSE value as function of the complexity of your model.\n", + "\n", + "Discuss the bias and variance trade-off as function\n", + "of your model complexity (the degree of the polynomial) and the number\n", + "of data points, and possibly also your training and test data using the **bootstrap** resampling method.\n", + "\n", + "Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$." + ] + }, + { + "cell_type": "markdown", + "id": "a73b957e", + "metadata": { + "editable": true + }, + "source": [ + "### Part d): Cross-validation as resampling techniques, adding more complexity\n", + "\n", + "The aim here is to write your own code for another widely popular\n", + "resampling technique, the so-called cross-validation method. Again,\n", + "before you start with cross-validation approach, you should scale your\n", + "data if you think this is needed.\n", + "\n", + "Implement the $k$-fold cross-validation algorithm (write your own\n", + "code) and evaluate again the MSE function resulting\n", + "from the test folds. You can compare your own code with that from\n", + "**Scikit-Learn** if needed. \n", + "\n", + "Compare the MSE you get from your cross-validation code with the one\n", + "you got from your **bootstrap** code. Comment your results. Try $5-10$\n", + "folds. You can also compare your own cross-validation code with the\n", + "one provided by **Scikit-Learn**." + ] + }, + { + "cell_type": "markdown", + "id": "a429f1e4", + "metadata": { + "editable": true + }, + "source": [ + "### Part e): Ridge Regression on the Franke function with resampling\n", + "\n", + "Write your own code for the Ridge method, either using matrix\n", + "inversion or the singular value decomposition as done in the previous\n", + "exercise. Perform the same bootstrap analysis as in the\n", + "part c) (for the same polynomials) and the cross-validation in part d) but now for different values of $\\lambda$. Compare and\n", + "analyze your results with those obtained in parts b-d). Study the\n", + "dependence on $\\lambda$.\n", + "\n", + "Study also the bias-variance trade-off as function of various values of\n", + "the parameter $\\lambda$. For the bias-variance trade-off, use the **bootstrap** resampling method. Comment your results." + ] + }, + { + "cell_type": "markdown", + "id": "8bd929d4", + "metadata": { + "editable": true + }, + "source": [ + "### Part f): Lasso Regression on the Franke function with resampling\n", + "\n", + "This exercise is essentially a repeat of the previous two ones, but now\n", + "with Lasso regression. Write either your own code (difficult and optional) or, in this case,\n", + "you can also use the functionalities of **Scikit-Learn** (recommended). \n", + "Give a\n", + "critical discussion of the three methods and a judgement of which\n", + "model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the **bootstrap** resampling technique and an analysis of the mean squared error using cross-validation." + ] + }, + { + "cell_type": "markdown", + "id": "3e3756ef", + "metadata": { + "editable": true + }, + "source": [ + "### Part g): Analysis of real data\n", + "\n", + "With our codes functioning and having been tested properly on a\n", + "simpler function we are now ready to look at real data. We will\n", + "essentially repeat in this exercise what was done in exercises 1-5. However, we\n", + "need first to download the data and prepare properly the inputs to our\n", + "codes. We are going to download digital terrain data from the website\n", + ",\n", + "\n", + "Or, if you prefer, we have placed selected datafiles at \n", + "\n", + "In order to obtain data for a specific region, you need to register as\n", + "a user (free) at this website and then decide upon which area you want\n", + "to fetch the digital terrain data from. In order to be able to read\n", + "the data properly, you need to specify that the format should be **SRTM\n", + "Arc-Second Global** and download the data as a **GeoTIF** file. The\n", + "files are then stored in *tif* format which can be imported into a\n", + "Python program using" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "55525e16", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "scipy.misc.imread" + ] + }, + { + "cell_type": "markdown", + "id": "b0565121", + "metadata": { + "editable": true + }, + "source": [ + "Here is a simple part of a Python code which reads and plots the data\n", + "from such files" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "838330c6", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from imageio import imread\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "from matplotlib import cm\n", + "\n", + "# Load the terrain\n", + "terrain1 = imread('SRTM_data_Norway_1.tif')\n", + "# Show the terrain\n", + "plt.figure()\n", + "plt.title('Terrain over Norway 1')\n", + "plt.imshow(terrain1, cmap='gray')\n", + "plt.xlabel('X')\n", + "plt.ylabel('Y')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "f92645ae", + "metadata": { + "editable": true + }, + "source": [ + "If you should have problems in downloading the digital terrain data,\n", + "we provide two examples under the data folder of project 1. One is\n", + "from a region close to Stavanger in Norway and the other Møsvatn\n", + "Austfjell, again in Norway.\n", + "Feel free to produce your own terrain data.\n", + "\n", + "Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example [kaggle.com](https://www.kaggle.com/datasets) for examples.\n", + "\n", + "Our final part deals with the parameterization of your digital terrain\n", + "data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial\n", + "approximation and cross-validation as resampling technique to evaluate which\n", + "model fits the data best.\n", + "\n", + "At the end, you should present a critical evaluation of your results\n", + "and discuss the applicability of these regression methods to the type\n", + "of data presented here (either the terrain data we propose or other data sets)." + ] + }, + { + "cell_type": "markdown", + "id": "2cab51b6", + "metadata": { + "editable": true + }, + "source": [ + "## Background literature\n", + "\n", + "1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the [Lecture notes on ridge regression by Wessel N. van Wieringen](https://arxiv.org/abs/1509.09169)\n", + "\n", + "2. The textbook of [Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer](https://www.springer.com/gp/book/9780387848570), chapters 3 and 7 are the most relevant ones for the analysis here." + ] + }, + { + "cell_type": "markdown", + "id": "d6ccfcb0", + "metadata": { + "editable": true + }, + "source": [ + "## Introduction to numerical projects\n", + "\n", + "Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.\n", + "\n", + " * Give a short description of the nature of the problem and the eventual numerical methods you have used.\n", + "\n", + " * Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.\n", + "\n", + " * Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.\n", + "\n", + " * If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.\n", + "\n", + " * Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.\n", + "\n", + " * Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.\n", + "\n", + " * Try to give an interpretation of you results in your answers to the problems.\n", + "\n", + " * Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.\n", + "\n", + " * Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning." + ] + }, + { + "cell_type": "markdown", + "id": "57dcf3d5", + "metadata": { + "editable": true + }, + "source": [ + "## Format for electronic delivery of report and programs\n", + "\n", + "The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:\n", + "\n", + " * Use Canvas to hand in your projects, log in at with your normal UiO username and password.\n", + "\n", + " * Upload **only** the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.\n", + "\n", + " * In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.\n", + "\n", + "Finally, \n", + "we encourage you to collaborate. Optimal working groups consist of \n", + "2-3 students. You can then hand in a common report." + ] + }, + { + "cell_type": "markdown", + "id": "de4f1cff", + "metadata": { + "editable": true + }, + "source": [ + "## Software and needed installations\n", + "\n", + "If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, \n", + "we recommend that you install the following Python packages via **pip** as\n", + "1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow\n", + "\n", + "For Python3, replace **pip** with **pip3**.\n", + "\n", + "See below for a discussion of **tensorflow** and **scikit-learn**. \n", + "\n", + "For OSX users we recommend also, after having installed Xcode, to install **brew**. Brew allows \n", + "for a seamless installation of additional software via for example\n", + "1. brew install python3\n", + "\n", + "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution\n", + "you can use **pip** as well and simply install Python as \n", + "1. sudo apt-get install python3 (or python for python2.7)\n", + "\n", + "etc etc. \n", + "\n", + "If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely\n", + "1. [Anaconda](https://docs.anaconda.com/) Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system **conda**\n", + "\n", + "2. [Enthought canopy](https://www.enthought.com/product/canopy/) is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.\n", + "\n", + "Popular software packages written in Python for ML are\n", + "\n", + "* [Scikit-learn](http://scikit-learn.org/stable/), \n", + "\n", + "* [Tensorflow](https://www.tensorflow.org/),\n", + "\n", + "* [PyTorch](http://pytorch.org/) and \n", + "\n", + "* [Keras](https://keras.io/).\n", + "\n", + "These are all freely available at their respective GitHub sites. They \n", + "encompass communities of developers in the thousands or more. And the number\n", + "of code developers and contributors keeps increasing." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/doc/Projects/2022/Project1/ipynb/ipynb-Project1-src.tar.gz b/doc/Projects/2022/Project1/ipynb/ipynb-Project1-src.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7dad0387e706f2fd9180086c0ba298a39aaecae0 GIT binary patch literal 193 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 zμsv4s2U$+xos%1?YWWg^DjU!8MbU2|!%>!xS#s1{s7{X-$5^bX6#KY_%k1--w_ zD%M6$-E@B%SZ;qcqqvEzfI}E)f8=@f{tJDfr69A!q;v* z+k}Y!+H~$p#j>3vcaYM$VT@BZ3|6eOXRe{k_lHU=~hn9@*cRxcZj*-UlLi^d?4wm}IV52_v_K_$S`#85^={RIef8VN-kL3X zcqVoi%G?oL@v&4s$+3>PBe zh92NEF~@>zB&;=k)*yN%__^Rh0Ks(WwExUZSMR)lv`->LH{t#S3dj7Qr7ff%1c%%@-2#dpsl`cJM(b^;69hCf^iP$Zxh zvQzNhZ9#_5ACFE$uCMn+5hDXL70OtD6P(5PSA2@B3(ko$h3>?f0~)KpIc?l#jU=y( zfw?qpz~Idd4qJ}skIBjg7R&k{&ndEQch7%F#0BUNxXDfS1Zzs*>}gTi(}j9VZnJ(w z5x)9b0wA{7LOGFz@)n8It4ols43=qJ$cIn4-^>)&C+ENGzB`DbykThh;Zk7CdJb`hq%?3Y94UD)!M zttX*G*wEe&+quvujJfQb+^W`J78;A3Ehs8E^xjho>$ro)TN!R^4*L!8NC#``EpBXJ z@$Tmw^nde{RZ@|{9?X2JXa?0>Z*}#)imCzxy7TEzl2Ip>x*ELXqdwCS5TI%i&j-P) zlW0WiVpXitXbIcAtv~J-4+%{P{q<5JLjYF6|E!=u$P}}@x3=coTSxU+K)Qhpvnfs9xF}bgX1!KF~8o_*(Wzd ztQ$0OYuU3Mn@WVG>0_!PWxTN`D+WD89NP1`e4>rJI zwQEl-M^I1f>vwK#Y^H-{$IKXG#?!^E1=*PFNWB#qw`he4*%>v5EOpwp{v{`2=%D84 z*15(N9+tU8x#x1xnm>OXc^+di9g1)v|Pmy)bz8$gtEznQeU(kyLUa_#RIJv~v z=YzD4!8U@%&DB!=Btt4R&(*UdE?-V&oRb4m-%=zB^Ibw`?3S z?Mm>1Va`)|8xI>5BT^#!gl9(}W5}-SLqNX8OgJBvFqNz{A?A^U$PELW`y=pc))l8H9e9275k&B4b&Cu(U*+K7&@;Nps`|e2g8R z!@VVMErM#bjZo{?I$E__SI@G}V>F$2$`RZB2oai+#w|X?zsi04lLWjSPDbGtPDGl% zO`Xo@gO!$&#rAePl0(ooS9y3D&n)PL5Cs!AAL;yt<;DzxJ_s7eg0xRh2suljUBhC+ zI;#es8RdKU3JJR#Y@oM64jc?^xwrqoqCU^mN{r%3 z_`oGpUdJ%|QZzO`O2URs7}(ak9)F{2l7V2&ccQq?hpLLcsm~GFK@NIqD=j9|pw=nyn>=Fr{O{V~<~0Mf+(wXS2u4-C@?8C%r3o z1?MHZm?FG!H7`V;7qkbjMNqR(*Cmj2Fgz4^bbaxkK8bi?VyNTf_0F-*N|}4fls4)9 z`QQ_Lzvqe;EyojyUkoWvI^}9F$*sNaPCc9)g^j@kr$UJ^BbbTO5;a1nTvbLEYij0M z$$Fw}`Zsrv~eIwVM6DUte#1+J;cWnn5zs|D;p>I zFz}ymBSW5wHyaQc6hx_+)jB|9vj$$ar(4}vJBH2B`e;@icE|2UhAuK?&6`l;vS;ZP zJ5Mf~)=8R_h_S?=X6Vw-*lm?IH`VP4zqA52uc941>tFZi55HbD5L%Gc>Yul<(P4$n{ zf5dWUopzZxP=hHdr%uh7B9t--Rzo~xcff$R;t%^sXco6RTmqgVGl7OX4?5Zj7j>;83)gdYFna#SstxVVzVED+(7_a3*jC-Cy2V6vZZB)Vb|sf^jmnht5*o z1qhP5sjxsB!tTotuKYXxPe}Z0*>hKahMx3=UgJjpK;wOMTgD~uFE!=PE)m=0P>XWn zLx{+OaaM$+Ak`>wIU{FvNY~t;O+}?YBZ_%}GE|S<0k%}$#rKF1hdMOT`1*mf#6Vvy zDuZI0YVryX?r5t>w zI2unvNzcC=fzCjuBdi5gXg5D$BwEYBJqTg(|Nm`$NQ(?@?h z&`3&d-T2^i|BaJI86v)OHd5RI*zk;Ox{--O8w`&iJk}Oa$iPAm9R;hC<+7G*{k*Q( zxu9ff3xrexiG0%Ex7QG?Ux&iEwLZTKs24_C$I??3RfM9RwDITfwV@-m$Jct%#b(!9 z1ZzBvEemPJyBHV+qS&)^95T|1Ig~KXC5P<y)>JlznwH+ZQqJr$bn^3689sEL21p3A8vK%&W>O2jyq^7@I$MX35+mjo5%Jz4yZ&@-+NOa-Tnbzde|sMPV(|Mvkjn41?)S*atj3L|Cd0%AyH^vp6~kzhWT}aRbgq z#ttgO&wD5%sN+P_oXwVNM;nCFf;;(P&9mQ>#$zg3tu%&(54NPS8ApT_LxN_YA>MlTrCRV)+87!TQv*g07XAhLKGntk%v-^~Y>Mve`l7 zFHsvd-&>X0-(0C@ z(eprkB$JefZm{??^s<*yot0g*#wV zTIMREz&%+fLdAiI3L^V7;FuH}nJXKvN7Uu~oY1Qpj$)KWcEN|<6xOK5V5T8u>~OPA zmZjh>*?yg0DA_x$!i7QlEv-U1d{jjDR3r~Gw8j$bt&=1yF;H$S(2zdN+x4GdZqf)= zZiQab2zWV{`rjI?OIj2r;7Gd@TlV!g^wZT}*lm~K_QR%g z*a8}ix=c+c9lC7cKJV`GL3mswT3yntvMT6yI`8Uh*JoQ;rl|{RV>N-)z4}Y+d_7t? zs@LMi4wen&+FNp1ukUB_VNzhj_rw#MYls9KsTJFPe2_j> z*8p&`0ug0c8a7Y#Wg91}?Ry;q^*5S%H(%C`V*Y$n4|H+`H5DY!HVmj3ewU9a+I8__ z(|RzY_n!bPH2LmyX>YHG1t*;AopLw}?j?X1=4?FNkGJ(X1Dyo%nqmQyW02NC4b2mQ zeQ_&Z1FNud`dsIjs21={{NkNG7$b8L)>tt_su|bF@6&5FUULB^bq0?b!e$hmSf8K& zddF{_F1Kr+ZXc4{X3hkLA32})N=*fQ)*mA(v|WY;7~4HXdXf)uRv{jrm2y_qbLH5Q z^$ziqowr2Jq3yXg66AXt9E#4iqZ^l4g_<7uzH4|%aBvhwN=$gg zd0+*n`$rJO0~$@T;9qXWc~U&4pikqkZU=K(_<^vElQI`>7wY8gn?tccN;b>HnLHG? z;Y+B6gCq0}?&95U`%6J*q+WvnI*rI3S~diDfpWdYX+57pq3qaA81yhh4h#FfNZM#P z8@+FA`oky+qG4Gvy_sd9->PE)@FaDngx_73+}f}v>2B*yvoPh5Y!jlk4icFU7NO)H z1gE|H>)`zR59p}I`Z{@co(_#u{PHfGGMQE<@Ah10?0xQjAE>%iC{WkCbyZ>0wd|Ef zl>z$DQ>IhW(A0XW;Vbb8Ov~#Jo9|SK_^v+^lEOjdCu^r1VN(vgO16&N%$pD0G@bZn zY}|&S`8Lq=C+b3Pj@>YpDnJa;$VLb5r(FW6i%Ias|1P&I8GsK?%**%o=iB2*psM}w zI5L;9?ARf8dh?43+-dR&g->KlWfu z%q;)w9xP2;J7s4a*?*(qkW`C&-h=_q-vy zDg=U_7u2)stbb2e61|%Y$72y5%mKeI_qVqOr!jheqhv4;bHdP?f~!1$`RVK8qW#(! zKB}v%%DD)3%BhluZ@sKl^Wepn--06pY+#Nh#b=z&nmAuqb3UK_fA$A`?{y1@ z@f!lPELf}!FN|vH32jq>S!K>Bbzex%qA{6uptGjl!yBCN2AtxRMSzF4IIsui(M^X; zt619`Z<=@~SE53N#W=u)b8^#zt+HKK*a}tjMeB@8{eQ}dw{sNcXXRJnD0sNwPtuk+ ziQb6jDq!TI*ZE9-PqW?g-nnw5j9vVHb<^SGfK6ZEp?VqNbig+_vg<#0SX7ZA(`_x#va-O^XJaA6^@Y$^iL`}74kG44t~`42nndy? z5$dlzC#p)gf?#9%>-trD9*5qb7hLHd#tn=6&f@tF%FwLFeJR(c_(YB?{DS6{#*ll4 zQc7-d=J3!rXbo1>XO%WJU7z)R@v2CzP23n>o+$;zCGdiJ2WCvhRG3}#RiFr&d4Y;m=ib85zC|zUKxU#yCQuU8 zWB{)y72L+f)HF1$Bb2;cOasIw@c}t=v_kWv8lzKRmxiY14LkGqW~9vHmG1(v=!1%I z2a%q-7K5qgQ`|Eu&(qN_K2bjl$SxG^ko;h3LZ~1pOJ?VlO87bPB%J|Qq^&-KR{M+) z1S6PUyUI^ar(3ff-^&H-j6rAxeeR_|^#(oNy=HgxNSn^yPvoSD|* zXIVVnn>H6vjYWS1xb6C#vcvB|>AQK^2x>?yb#>7_eX<>5+H~0~nS0wx?!Y?Bp)aEe z!9gIPJ$KH6l&cB}F`Tm<*P7+&OlI&venQ*;^?u@*=H+4#PJZnV?JNlA=2=q9X8rJ` zHbYDMr1r!IcyRbQL6R23q`8D%f4^J753a}S8YBdb@*@FTd%rBMtT2ndzT@4@#rm3J zY0%g$_Mu9kOv6_l*og#`?iS(lY=3C>3Sw^pBg3LoVm9pu>EAn?0~H4&{TX=F6moOG zJue~{!%!^cK=^{3$haUpLm(2u`%31on1AS+Sc!7^Fs5a?UqH*IRpK9}UoFudz=aOt zwISvMenpAY$UtFq2T=pJlavueld=tv8C2r&9U(>8f#c zPI<47jHsDeJeB+?Q1UDi?a77JK}wWAcyfSoTrGh;JR7+#f(A5zIPdfRNN~jguT12W zg1HqjKVSKKxrlM2`yd!d)%hvLMN>Qbfk;djyWBaHsqsh?Eu~^ot4~Mnz%eYC+2&Hb z39x>!M7H>y@~25h+@`g0FM0=&M2Oor;oq2*1eoVAoPr6|H$^Cgj{+u zv0E)>35)G9Zsi9JQaf#;m=@x83M)g|PKo#U!AURs+_UafWPFUwgG1b993n74$_`Yc z%86{bec`2<#?@=;Oe}r06DWfPGwqH8dko7SmP=oFt@ON1uxp-l<$YI+G8&^j7_+Z^ zlM9)ZYwKh+vy-%Q=aou}hsp=lXMsA6+spm-Wp@1Jr7I-2|_wSw6l@6#S7U@o< z&0@!vPGu0N#V!F2@xD{DcsMmSx@-c6l_jMSD0L8qFY~pyx<*hTUP615x`jHcDQcus zVWN9=Xla=3@`npJ^klCdFjn+p4YtgJnhvToY4NOm3LcXd>i26_soaGU#e!J`0p%c? z3Vi;4a*r1R{TQy%ickkGskE^#1?CnDlQXaQ6}Rhv!(^EqPkn&xTnt$ew6VB}Zh4|8 zI@NHI!X1G-skkpYhZ z5WjeWAo^Z0k4MrW{A1s!4xe7FT`!Z2>&S>68*#zz0lu3)k8Tk} zICCGrI~{a3qE$O?M%%r*PgE}$m%CJ@QWGttCiW4Hh4N2LWrRO+STzFxI7KcrZlHXA z!dQ}n;PjhzdRoFsG20hpzCo0fY(TQF;!z5|@_X|)`qKG8>7e;rEyBz0>mX|o!{cp|KyByuVtItt zX#u=YyhcSVYa|M5P(=TSv3H2lMG3M-%eHOXwr$&W%C>Fulx^F#PT98Yukh~Vf0OP( z4|8P>W98Zr8^JlC5Wb8h;`7-=35F*+B~~UX+jG}I0J+N65*|_G^*N$WpGRVp;cawQ z4PIBU`aa+&#hjXP4+1}Ht0xE~8c^n8$+?{f_@A#d``m@p=gRi zD_5kYySqG(B&mQyNANAEfmLP|Z^zbjBz^$qcB(pfQ|Qae&-c433zw-hWMcBLmD!1+ z_-y$!#EMo#SKhrYRGOl7bHaaM$=os=W1y&wRw8SJ)7)@@iRP>^`oOsP=ifmt(OspN!o$wxv)jH>{VCpw)C>c9664>1|M>g+!N zxyI+)6L7Sq2_cR3Y=JvzQ^XRq<_o3Fsq7D;oCe!&z2o?lrK7)x1fk$-wLus^ntt^K z+BdSXapBkM6>_yd#o%rXA%@_OaZS{pIt7D1|4PTbbmUOEzdbclyh|~&8E$8r2fzJipP=BJ5weH0A zolUFz`&e@d$zAu>sm&Lo+or0`8Wl=Zit4gT zXl#|IWPBs<>I>`&X+iEpPa*J*+Ay=1ClVLN7S@^y5R~Fpghs^+;>_o*LU^ta)YI zTSb3z<6Ih#+IBBAEA^k4(%$@i^TzRMfnu}#E=DyYHd{^nv4^0BmsY+QmqX8W^1L3Z zwq%%1*4>EKTRoO*a2F$;?vab=+`F-=z-PP(rty@DZaanoLm%$Dc^O-0R*3J3PvREz zm07V#m^;7DUB7X9R{N}bVvLDU@_Rg5-_gAjOMqLxRLNLN7_0pKf-MiB$T-XJfFM=8R`=vSrQGVXUhbk0HxJ8kun_PgD?a0-Xm%zV( zkqQ&VyZYyV2`q9_sqb^@%{OcRbgguJU^7+~rtPrpx|MmjV&F&btwg#aib8gpMZnXC zD;@q#+tI4$HHZs>IwMjZhyx!&fQIfMX8D_M9AOPp2!tGRSs*q)9b5&bt9=;)F=18$ z{#1bsg+F_09L9{83fu&AKw@To;eCy;6`HDzLC|AZTiziQxKAwWYaEB}TdK()6{uYUp_o+CuQw?KO{;&{EjteU4ZSJ)HcrohMaL z%Y6(ITM25?U&|DLs7KSoYY%CRflE-DKgx&_=u<1HF>K!GkySWOq$A&}s$ur@2P5LS)lwSSk=xYeNU9He~F}L_2UxdV)62bXE_2Ob;C zn||hw-A@rDIEO@t<`I^X_qJf1@ewq2My;qxZW$YZ20J(bgvwq9nAzK$$?}ADFB59s@(~1 z+XwdI1v*I8DGNrJw-4~gB*Qs$v3^>$Z-WHO2bvL8=L2^AySUM~g=p#!(r&C=T&br> zP>6l3RJa3H?wC(Ogq_M7q!vmD*ucdA?{Y!=@JyXJE7+KITY*ny zR4J?xTZ5CTEe<+-dYOfYgm@C6(0pJGG=J?`TVZvJ{F9FfZ1=Sft znMokUWQfzs7g4$6k~F}ii+A7=`VI>Y2*PN}erS45v5H>cEUyf8=dlL}u>6pWiyQMP zU7-j=#->iRkMtR#HCS<)Y`<+s73@>fhGv;3u8%&{L)roLP0nXj2|Zgmn5qt~7_EcW zS=9EdOGWEwddsO=0j2~lD+D^P0Ptc_9Qf$boeit8`QwcH=P43fn!kwKXcQTAT0#v7 zrHMW)^+o!hFop7@ikBQ(d=cNSbs*F^tc+*%$1nvrZGwLqHL{!rqO3KUBG$76qS)mm8bakw~^i>-lSUBti*{sBXP;6%$lG zXY|Z#YtuX!(MZ$%?ifu_DnX-eNB|Is7u@&N{q+*T zVQ!30SOX_`zun_>$MmBf)3yWpcSj`qTDGL3mL#TIkD%I4z=L)QLj#%uMN2g4+DSVO z4w{Q-iU;ZNpPFA-pR+di#SrsoLU=w9t+e)FymyKQ@wY7X`a+PgD$N|Nk^!;No}t-YgE{gfdQ8 z%X|ryBawiH6EdRx2{a+D5uhwMzaR+kmo93}ys!)bZ zQN=9hzxAD^@PiQLKx5C-0u>h83l$k|ovN;%T}CWn>CWZYg@&_aX$VYkQ?Ev`>~i^* zk1yin-#bEq?EslYdAtbotg6{ze^g58Ov_OU*(W9A3*+_=&HK_F3MZ!5omYh4?n(l? zHItn3!S#p!EoOXqhpQ^%Md{byt>vSJ?~enR}euzW_C?QSA3fj)%vM5-8ZX z6H);{@ddoSl2^lBR@qh+i6?%h(!-vq!)#u-_I&ncUYp0dX{J&u?`~+?ttZ<}9ZH+< z(Jvj>{wklRd65sS{;vIzk!LCT()6M*m)Ay_mC{RF_IAoSva;_7R9cug_7kc9-x;Aj z@-gDrwU9zZN|-}tO1)))hap_Qx@_+}b$UNShl>bDpYm3OpVhc<#P|s7oPTIs!^d68 zF&WK#zve?Ona~t`ieW!Fd(_la_=EGS z2m}`gNg8~)wP}AwyUgLe?>^h@k|5%hAbL|ymSaI3kdpRu@U3g)hlQrnkKEQ)XW2Yo zL@7<>KjqZ#zu8zOX&1DYz_+ZR0V>qZeieVtrZwdF7EIEln;sDx%gLDHxTDu0cI|Wx zxOGms|Hd&ttd6I+fXbx*tBKn~wm3qF`o`A06&#iBd38k}^XltV9r(*-Dfb~gx-eQO z>#AgcV})$t)g|4`5?dTx`moW*1qn{7eej>DDCA(^H1J>!&dov5q-TBc#w*A$L|8ZO z7`s=lepRt$onIuL&r+R{mx#!suyoG}6KM(8!rZfc zRZ~aN$i(99>aj0m;0Y{%sPcL1B$o)HB8U4oCFP71%e>Hr+!f8G`f-NPwlz#?&^a(({$*PQJMZ(p5fCTLf@%pER|4~{CJhQ?TMmV2=;pxYZ8-6 zNEdI)h5S)e3R9Fgcr#($NgOrrD+~gXSN`WzeSC=3>#t9Ub_BwKM#g>{T44b3`Bo6A zI>t;E%|T({x6W8=X0O~Nu+<$3e&ppY$hVp#CRFi0B<2i$LvMHfu7Yf4B70h3(^#RW zC;H1k7fo{c7S6}_pb|K*|Oy~8kvYJ2G|=27PhugQknvyV$S2B&6|FJ znRokcL|SyYDR^$zHWl>syJr@K7LAR13s8^`$XXfES;20}jDj1}%AEY|5n4!W zA+k2_mf4Ai%>}MBno3(Rr!>SMw%8V2<1CPi@2JbJpcF1T9@n8?J^GK(-{b>2gcuPq z%CbwPHZ-P5`#@=k?3^3@sRTT3dvJRtUIuQhHZuk+(~wlkjP44G{ouf}{hzYDAUAX8 zpl!{+MFSlA{YDtia&DW7K#L*S$_><2@eyK2dtNLw9$FeF?BiN~bOt!ovFMx?M4#Qc3 zgP^}Y%9k3JJq=^uPD;sg_V!J#o&<@yo2lx48hWSqHQoPdjSgnX zrxQh0HZNE+)Rx8xHS0K+ZledaY}WVRwQ%N!ZJ+{OfFwSyDqKMwtq8x2zh(>~gN>SMiBj!2Fng zoO;7zXkwZZ>wy!T=-@F{Qw`sgSA=AwDT*}rYhPvnNBPQ)CG$27Z8;1ZZe#G3SDO(b zUKZB*L==$^SVn-{*y){is1rqprQ+j7paMV23&r>KF}~FI6N!sd4n7{Fvy02YE3X(i(f%9Lst(%RS?tUq`_>&sLlLAYRd zYupHkB9}LY)Y z03Xn^7Bq6RAgj z6ihbo#ij1NpoICA3B*iAG(Wdt9ED!$e>`bfT`nV&3aOPNuuE3!?N-7Crt?R*DPrIl^bjyFw zOSb;e&pKOK)jj%7fw(U|rD%*biB(Bt(0fv4ZEd8$0cnMEH={o1Eeyj;>W3(6Abfzb{*cB zT@8AWD>oe6A6U4dW5R?P`=@U`;rlq#lXfQC7!~R8&&1M8Cpr)kJ$7Qu;V2>fbITn6 zI7OKBkn4pT%00CGmrp401(`?fNb)}s6ZikZtFo{${h#Hkty;1PTM{UJ08J`Rm`0sz z$Vm%(Tp!A8qQE#$II_sMfg~Li4=R;?)6|c*%FC)UskpHRb7G9^u_y&7EsgqRO#!5yo40*s_jUrGAMt1)A%Q17?7P$Mm+Cybs;yiHxOmi;a$T z$CTY?TjezTg05zoqAWe>ngD9~#zMOr`JGH(E z@w}?#X;KsLrZLzHaaQLfYucKiIZ`S20LKm)xay8v8{IR^G%8|QTu3YP<%mH8tTb?A zGd1^RWu%XXZ~O&A6FVBp^lGx%BEfVGiCH23?4q(p@fG$F93IJ;XPoo3U?$yqp)$7zsIX@;3%%|m6{3W$oh*|t#ysd!O^&tI9PFYDQQo=l@eyGe?U zNmai5C-#$*Ct){;Gzdv?dc<>2#9(j!ZJ%^GlZ(dYknd>S;!hOF-2>%2p^y+H2Xkdy zm4#xiF-!-@B($J0#*II6R)6907T$r3rZc~s`Q9lF*2$?375sWV%WInI3YxBn#rNfmUJO_B(_eXg{ym}R3qEqzq%miK z1k+F#h@r3uDLU0C%lel> zltLDce5$i^$4ph;|1yO!pYeuy_@Z zD8POKsi|>MbUJxzjtqf^a5GOz;2aJ@l%deLO6q4TUa*UD>Ch>T{`_o`69GPN>HD@7 z!jbWtsJ)q;2EK2N>&{iz@5k9Fh)spJ@KZ3S&+e~+{k0#rX@kLSc-7tfQ-M*$Q1oScPPGx%f019LMP?M- zu@C6)Njd^L_q@-Pv5k3F^Qm5`KnSC23 zUiDL`CN_eYY1PoZVGsRvpXV%p(xhFVfu~fe82@PF-A}BT6WnZBa5aJtmf?q_o;;l< z>0D&9H_o{vVKcOL5g3(7bWR+P?XO5Sr)I^)Ke!7`ULp+^T2Np8CFYoYz@oW;E`epB zwrKx{b=fJWm8~k}Z|%;%OY!erl8L>Sdv(qZzkSffXTFQ^zVCqG0x@@>ltP}%+XJln zIv_PpLhZ3GE+@fvt*B|;;i5xktj3QZ!eoAb5+8lxNDkX->Usi~_Ijg^ce$!MG7uoT z2aq+0G?QA;JY!M;>)AmEqB0*G{X?blL`3TaBLQzx>0VnrKzUkuU-1bwx6ylo{w}nh zhX<8$?6X@6f?zdqhc>p|7b2W5m3+LytEI#mRv^j3i2fol*n4NrPvb`78qDjp$33|7 z9*%n~Vue43wgY!hOo#|*DEZgo+E_ia6*&f#B`&ch`eRyT7QR~9*d2b{c-+`bhZz=lqO<|mz9p0 z%VcnhKWz}lw?CNnw^ibn53fa4_oCf2RC9D}r$NzP3?m@MOAhO3=j}uU#@WM~0`>xz zcF>KRod%BN7~)AJD%h)>S?U@$US$DY3|ZfiSOu9OL=bHp(KU6Kl>-Z9EBx-VQmpe~t<0^X^P z-~n1BpAhvyy?V8tUw?}4)#IBsqtWWw=AwD>9y4jz>E4(sofs7uQ+PqpMkISTcXROt z7&PeO1;P-jm0-H=(fIs>1Y*0&7mgabLVulyY6MlyL*xkVP2W4@z8+x>aDmr=g>A0jBaFepEZ!KCQS2dd@Zws8;sjwdU0z04vMbf+)FsJvRv9LR>bK)%>S zuCr@0bFMqm|PP3b%G}6S|tSGGcaUXBr+5Ny(R9bKU6SOh^ zhtK{;Dm*hY_y2j$HLD@(u*HS+Un1st8w*l%kyzBC6Xu_8#e(zC)!U$?KYt?$Afzep z`}eRB%z0%RCJG~ZrH&oBzPP?llgRy&$@A};-ha(K-VRiE$>43OdSu)Ip_t$)>bYvA zW?sq^-3%Y;)_eAC;>!Dhc0U{6d1f`0gCgnop)py~d6fSpCKyn5BXfMUQGP#B)GvL6 zrtsaIUQjANTBcS*_bVS-s<5OySz}4Pw@_EBX*VAjjU-)9ZxEhFjY+N)MM z1;KrUaHNOk3fQ+5l$R?g)&lRmpr^|Y_fN=ng)B*$r>zZpsb*a8>rg>=gg4HpR&ROX zy?~wbBzx+?)3CyD4O}<|Xz_95ukal8@bl;RcB~&ueflyTa6o49z{d#K^Dhc=g~t=H zaY-8ZMq(abZ5`*JCo{NQfi%b(0G&m;3U29+?=G3Ckb*!qW7d)JS?W!hO$X6?nL$`G zx*`dUiJ1V*u>D7K>86i^>uR*gr%R@|P)R;N&!k(QmMb$L{Xwa|x-cxp77XQ|XIvcN zw`0l}lt$ZlROSi>bVKIyGU$C+fZ+-U(^USn7Z0v!l0^+ncNrJiL%lD|^{OBJDI;)H zbK|L~6a*$b(2`8vH_~b9-R;tV&jQPRgpov<9Vn32y~z<4c?ohDaIEGn01sqWgnglb z!)MRwwc7a(Zn9csDm61FhO+2U|I6d)Srq$`hh9WZeg6)HkoD=41qgX$Q?YPW=8%N7 z;6tzoDBF++OEv=g(@XHe-Zt&%O++>Qj$^Lgq{4xjjKF%!8}ZHZV%v-kQh~iF9#eEe zmX|D8!%7@Hw6)P8Msz4D02cFKEI?gttz&;=Ik=5>15E;fo8{R{q&J}edOI{)aDoe& zPh`Scjlszlz1gfzO%Y9igW8Erq@(wWn1??ZA;GC?Kx92}6`$P-m@ukuQ#6O(=sODf zdva>VypXb#ZibYIbOA?IZyCA_=v8o|)LIyLy^&~HauLxwCd<%p&Xh+0j{={PM%BS_WJct>5iW{91#C=sm7>s! zuRb1Q)OWq0G<00A842UN-9^F&K0)yT`ye3i=^9^8j}w_YWfTP@p#5~={iYx-S0h&T z?iY1F{krFV4H2kiOUNY5@^2D_(3&$vz%OBgA2+0Hb6o8}wYL`CwJ%}QWdt!mRQF_6 zKqnGD*HB&JbmIIZ#Qjr-4@b#Vv&`q7FLVp3dIBYDMgC7wm*JGM?FpEzbK`z{A;}cm zr9a2d+7f77?!#u-A~EvV-;()HVGHFsdTlBj4R}>z@agQ!wB)%{KP4FLl=k(zT5b`85}Jcfrqnw z^%c$#R<@Ou4kYyH=|D>u=C_HPmbhC(;|;Qe#ch9es?nb*_;uOC)JLtO92i|zCnnm_ zw*+o)f502+NFn~0ukU}!K4d0hX60o2f9o+=h&b7}|Nql}Zp{C8LBz$z`hV93xPq%K z@2m>^=kx{vVR0Rv-yx@lUmRu{Kw@QL9g(7iT0{Y%iED9{l7g1wW9} z{ngoPx2WCAX?|;d698PFabM4TN_@#6IQm5L;DsMzq5#Q&s=21kh6MrGLCilogF;0Cg^rYlk(C4q1u`K~ zy>KGMCqh&N_Y@)k=>rF1;6VtZG*u7q&qGzDuwJ&!?a2aRX5tc&k&_R;NpcBI;s*x? z3o`{WK%Kxj_18i{bOOij8&QFU{Yb(vXj`I9iRviLkB>_N9mk^ulI9$DegFw5rLqnn z1&0##5F-Tc(Stq<-6rv*w9YF97DT=ffAP8 zz?Ax^1c0DU?{T4=MTZ=Ygm;N5a3_8+?#CB|f!xSJfzI28`#(j4k(Ch9RDht}06WF| zcWmuzH4rXJLEYV=MpR@6cTbff$Vm4$y~W_aICZpex1dh|pEIa1Zmu8u;lXLqc`%5V z=ion8KVhBh$Uj@BV8Xy7fkFkL9b`a<(1Gv4x!?hqOcFjqKaMcp9DA=w`)9y!KwP_R zz|es_BKE&f--$#HP(We#!C>#-!LXYOhW;d{p_N6zuS9rgupN0 zS|AP=lwd$VKi@Xye$z~lTr=?B4)27d7;5S(OzJF$-_<7p+-YeCeL#Z#%uYc44OmD- zWMm95i5>c2U#tlNP@ikuKcpI{r%;em-(K5WKA(Vz-2kV+E5;y4(4W7ui2l=hP=Qx_ zV(lQ&z=Q3Cg}cek5*;ob7^NdI2Cmgn|?Jm*GFKPSbjf%e64B z2kkn6-<->EkL9ju2lfcRH%nqc_N@hAF3x~8c9En@CBw)N0W@&;pA?3GO?iLVS$LR` z^WmiVJw@0+Lnx>(#=Y9Efx7m8kdNsp0Ubo`haZ;G>{wX0_qygo?WhpMNJMN0H;E1& zCP0FPy4*ZMzQ0DyLP|gok~`r*_SvvNTtmpA{ggChbO=ad!aI0G{Wqb%6Y#GhME2;f zayU20(*`RY^)fO`kH$+%{R%u?qkz$}q~w|?Rwxl2aB zUsouXy3FkjQNE$-5sz|?dDrWfO~oLrgB;tRuIK(HKP#@T1+jPYV}m!x-8>aHOj2Ob z{>HWStSlHwvxt zwCGy;CCD#`0}B{}RZvGq7WE@QSRFSt5C>Xy*73n$_z8Ur(m1lpDjT) ztCI)C$l^4N=nWj_07n|h*8kj+RQ_)9v|1oIEAxZW?ju@exhp=d4z}}Dyh5`LnAoZ* zXOO8A8IHfcsog6@u9QjjWN|<9rM>>M?uQG5FWsx2X9m-o(cP5G|0E{t zbW2E9C6tCZNuu0P3`IZK!mLuI5oH$1eOgp90#iJ8lHe$`EJz_R5l#U!aK-vCB}Z!) z^pK-4E)Wr^fFekw;fe@mvDKp_5Gw-VHq!qjx(=eN#2fT|f6mPwcYN+&dJ4?1; zK0>WWPuaq%Mbz)D_JU$QC=_>g1+HeG+?g{55ow?2fh9RqFArP%xtegnhKS}nHZBhg zxF-m_O%fX3I8Ay9sR0P4z0nbPZOp5b`G!YYe;_Xe`TV1l0!RU>^0eibkF9Xuj}?Ii z`v%Gl7oK61eeoFeH&lJop0hN>m#2;GuW|@Wl96ec{#kR4L6$W&R>5V9YU|%SF4Rh_ zc{e1K<8@uuy{Qn@R!iM3;tp#Q2FsAZ|3z9;lGkEz&vUY1d#8;gwEP7lXFS)6e~_Gv zA)uL+X_2FzXihadE?X*iHGKJ;xR13L>xe>bMX9V#p~|i`gbKsvH|o0>nnFFT+$kT= z#cC-|NKfTRaDe+bwNP;;yc4akm_r1Y%}1#LRD&9UAjHsjgLEwv&7_aQn3N2QMtb|h zob@8|P0ZRQHzpyOLRLbX&pR8SeJnL-Pp<>d%eHAMsEf#J#+!L+Y)yI&;DbbkKoSib zaJ32Q1esn@)k^_mqfTA@`#^fpi;U7U_fFObV#E zm0r30d|D1obt^ov3+&zKZ!OcZL`I4{%fRC4o0;IFX&vood5*rxV)5oQa2$QjDN=dP zVIm@`oJ&MiyvM?=N{2mVJ2S{~bHN(lUDRAx)xZ~tb7rW9Q(*tw?) z>W41XDQM{M!$EKR$(j4;Eaxk^h{gp-gIhR|!X9@`^T}46@W+vn!%BVAop7Htb2nYL zr<4EWG}%INr%Dy#W=S}X84vtU9$jFZ!NyOp>BrMV;Y343Yf{CO%G%O`nI`sYHQ5hB zGN)gb^UDFs2 z0Dn4e2T@7WB3=+YXxvO-MjMw5;S0JpGiw@7Yb9rzy|;5HZlC>J|Es7O{;;@A?!lyE zKI>FNopjI4zbj@D8`v>xcq1FyPs8ZgGGQ9v9~ zI;k>C(NYu&1F5WFuT{-P>T#Fm)K6ZKQ)#7l0|gG)HKL;_t?4URn^ZzSpxzc7^zZ0h zgHLk8TlQ_7q}?gLr&&Lm1Mw*{N>|e~O^afqJqZhss)*AevRiKq{}Q54w~bXmMXWHt z4g@)y7%F4vCQ%!hWD&ch1dtsH^~fUc#k*WF=c^STML9n-(CFf?&^a05?k;IXPx|W< zu6ubm^Pl3G)bm?ZoZV|f%U9D5=u-OAMl6O#WrhWK4hQXSEPM;gz4ivWg=EmKq?hV3 ziB$4)yr;;9*rVoRbA5!yq9{Eu z_kDVa1w~Cery^(Z5-GAQoh4T>kF1WnevY{64SD|LYV$L2kkKy)L8h$4@Hi$hUX0c< z``(*&p1IqjLpQkJP^Ykw%kd8L@o4ZQr{D^R<^aj9*##?jacui3b`S~5V)spIyS=G1 z7P2cctKfJ*^)kZmpfL+q7)hOSvxffWsHE@5Jdw>@$5OoAwXyT| zdulGT{bNr;KoZ!n&z!5Vuk}q=9e~uT)K&nzN3J@Pkr+>`$`G%@tuSt(Qcx`+iRw)^ zSxwyU`V|(_J;8fySS{>uS~qG$60i~qR%486mnY_) z8`Fb(1ZI_=$*G(pN-JkqF7&B4ttzj~@IcI`rGh=^>_)U9_rLXmJ5b5eW!l)@ydyW; zvpVrf%I9S&?#)}&u+FggN6knen_g8I@x&p^3}3fGkubR8@bVwsQu;~Qc1CWv%Ir|D zva;2#l5BZ10v8(mU?5hT>=|O$6?kvwUay2?!FazIA@BxEv;ahxvuY?~uw^!6D0D0D z;l@8{I5E$JSD<@I?dlP6Zhr6W+xBi}x>_aChosxhhAn=m*gvCOR*|8K=$K zif3~(L{lCwMU``@lXjsY4tg2P{&J$dHKH&~Esj=hunr7*Xgvu)u8yIWioFVMju3Z( z4&wMcu;ie!nUXz!ZZVPJHEa|r9E%6H1U1dyUWXUj_#S>FTjztLRN(c?Lg}$zD>T@g z7WcawdyVlfsaDdJRREQpEjFh{Lr?Z8Q#QoB2G?CHffpUX-=6JW8w>Q`$(1!GaGlqM@qV>F%Z_Kf;_Q9#aUS=nzV2r-qu=|3<0;a)&3Z?Bbdn5(3j-(|c6 zCEIuE{cz7O(%)YZDAtPYByP;z-yR(o5#*!pW|=g%ZtAF5nbUTYQAfxv2mNVF;RNX| z)rQ_J*fB4TL&JtfeFfJ1%WK0kGBxEMLABNc1kxH0-?V8|9T^c$wi7~kY1IvRdW?SX z^K^bdT0Z~}3Uh|Crs1Hh+VjvuCwGZ2W7j-Z=sH;+CM}FlqSlz1ftHd`Z`;>%EI6Ni z03&4%N0cRp_WrX7ry~MCg$rAnG5qYMQ81w7Eae$VSlXsasyRFBH;|Hy%=fMTsK~a@m=YSVPK(ESL$ZV`l8r-F7JQB(F0CNB;`?T@ z)C}|4j=}wb(yU2K3y94+f7-H9PqMUx&H6jb(i2v|VH~-|60_L9N;ooTDTFHXs13gz zE|GIssB-@vN4h0JO#ngeOjuPuE3(-jZ+v%N5~g{L zgUxwjAt2V0yl=8<7Qc44#jB4AR;_Z9+ao~kP2V22iDG}iU$_T4^*4>NS!@MI)9_#0 z&x!>Ut!&=igD$Yd%k)PH-^|+I>r82!{69E%T`l)cMtHld2UsjL^bpB6WebuSB{;o= zuGWn@fO#kEzisVI(X&@{)JXmro$Un@2PcdRKzO@#LA!(-m68ZFpsE`zC2f{#9i4D#qaa5?9n~#@VnY z(+z_F$WqNFHVJ86cXu=e{welOmOMC1WU_V~(5#JZzI7x$jlvt!A8y{#5xO*- z-$ZFDBYh5!-^>pk+kWvUVIKcznjKuu;`q9>^J8mz}zM<<7w%Z!!a_!3Ns18W@LwiOYwmnY*PtAtjP#P?5YggE0MbR*JCXQ7`qQ zCHFv0se1=YCz31w&fEHkxWgTkwavacLvm^u;VYnmVtkJEwO#NG*vN~<2_}P{&kydd zeSd&WWl2-n;${|eo%F8!!mL`wAo3C?5Tr?3R^v$C6sgSkLqIuLQam@L9kr-W3e-sV zTvsZqh|=-2Iim}}2iE_$?PKWjWUoOd@0lrvrfj=)!8dvgqg;sLsos^bb}oF?Orggh zG}Q)KVFaCR-VbRto1`MpZvDOb0uYW+j+;aF4p?{{JE;*|aqLof{R4k*S73}nNUUYJ zsPHrfUGGOQ+tF5$J1vR72i#9<@thc{&YKcDmK@^QmFoTk*%8APgK(A|dyN|bLE(I@ zs4iQ*Bg2}*+XI&z{ih{pAy1QVRC%%CBPAQ|Ef*Vk?}CuAU~`7~F3CWd6dFN!h1D5K zCr!pB?9P7nUoxaz$PC^*tc!_`*~3clR^5}&K<@%8N%0tkWij|o_zTu8;xgADVsJTQ z^j*JHog2WYKbWtqzT;tdJ7x8`y734I%WGRs0ZG&Nw4{&Dr{`SFQPQC5{A_|K(3gPu zeBw)v$0KXg5?f-5jaGCu5pG>st!tjbvvwbCE2#Eu@#(`Jrj1G>jf~sFGUuUNIGBM+ z0{2A3xT;WjxWRp|;5o1Q&+S|Hlf-*Hh=rM$nc?is>&nz^8Bna8Z9{m`;XZ-jgpEIU zQzSKwIP$Trf9qRMcZ}7n9i7+F`?4zaU(I2~^hagIA97Z`CD_2Tzo* z_nUaW!<#PpXj%5Tn0^AW_H+liRd)m8f$soL2#y_M`eE8 zB3Y2*kdAgVzqB3AO?f=6PP&CRl;>()@VWgfvf!I#-)Dxj>{?3p;rS@7pf#tL$R_Xa z{0~-%a@}WQ%U7U$jyziFlAf$Voq2+`?0St?MY(h}%gbsr23bL_#NgU@o|b?XIk5bB zdMxAM--FvssS#z+JJd@Z>g4}SVY{(m=*qU9%o<4@?TkXt;UUbdOATmYWU_pmc6z=;L;^(Mq42NX$&5@5tD~jfyZnQV4_Ih;F0U7AyrK(RA|yruYCq# zFgiFvQ9Q-g)1Kmo?z`|Q&z~)>H97pdpB0vbHmi`or0@mm_!dXBHQ3cy8|$=>hsjXw z#xol}4FY1k$CM|r*my8w=vY5A1f6Z`%-|Gh-`EG>hFmEL?DdQCyLYVWH{9e`?nCfc zksR|Argh`&`n%WnJ>%Zs6qbyO!(_CQ>j7;}#sBl{Yvug`u5K@#6rG99@Uo%$#u&6= zUOsCdc{{qg@km6g-_l9d$c2>F#P{4}|6HxVk2mP$aqSt1+(g=lJq+wF{5}<15o&pu z!t*(N0)1vql6AnEaKs}|3wOkv!uYEQ}lR`jG}f$R61BrWcF_r0P3pkL!iwTL*_~I2d^JKWe}9Xg*4yJ{t=k( zf%=GtDiVJJGMBt&(_#-bXzWFfICTl+Bxs+M%*6g1zcL(Trl_+=OpWFTNNHUgZeSx6 zMY1li#$}qhSQ=QJt*rd*#IWs;_7AnGaZ;f$Ml~E-uVRg$rJw%6Qe<#;Bt0tTu!?U5 z`<_GZ^MaY&-tETv$5bn^mJB0%&F98^?rqARSXd#jLGUxrXF>Mu-?@jzqNdhz-`YD? ziP)nb-)$DvHF||U;e!a1rgN6+Ynv1w;y@QCulH2sSmaU9k%M?+TPb+&+CT6m(GmFT z7^V!mYl7QDgKrtRCE9GxJ7w#7oF=|lYt6mn1C=p`hSos6`9u!AstIuWckn`QZ)$ba#xak$aN)m%f?^{#t+ z;Jif}hpfZif^IXx)}M{Gos#cl!P}RHWY08{)??mu)hqw)UDuP};KWlu#YZ*n_`7J` zfTWt6Bp4|m87H0Vl)SdgpTm8fR=lf9XF4O6bL!$^X59maB-!-Tv;f=e-Fn z6EDV)rHZ{tWAhwtqGrhvi}V5EFsl)~cY55B{mZ9pyRD@`zrm^t4s0l(tSPGLzjO=c zfZat^yf`)83bCWd7Mn;dZ9D$PMC-YUYCGTakTe$iAJ38t*VOjUsY&j4a8x~ z&sSw(Z5_qnx>#Z5y==GJ7MCe7edDP6g6B|1cm1* z8-GF*Qt|vy+F4~@$Tc9Ueb@Ro_|)cM9Vlf?_~6WH^zl+d<_4R%V7~j#M@pKDyVI;w znFm^-IfacH5R-Fwo~NjQq43BQ`M_qKrSk-gyZci{Xi-O;%qOXg3c#MBv3@;&fbPor z#x+c-@p^aUf_jeXVSic!ttgr%H zj{jtSEow%W>n6?r9b^H)R?B->1DuiLjajFuGeb8;s9#@yWaeypVZC}}k*)}you!!h zbyrik`+ma`E&))V6jSe}>H_4%evfF2!PYJ~C)vmTwF%tF+^?vur-!08@Eg~(%)Sv7 z1o(`>rZfIcIx|!_@a&-%J7Xdnqsph(oL=(F`o6GT+#jVIyiFBE3b;Dfcik^|dTSNZ zU69}eF7w_34dDVr@jieD^xL~9%*4HeIntclcwi>`lH!QtgdWNmETN)avx5cimfflE{ocEF5!hg01%11fH< zOr_2u`D0>dPnnVHlOx z^gyh8fXYY|j{N@H8UoZx>aXn=@#lweHo30{rFZWVLjTM~XwrM>ykSXciYkr^My}Bc zRn&2_J0m66U^!`g(UTZNIp$~WO3$hI=&qq}URpveDSh9Qkev{OQ}rRtDh;WAL#Z(Q z=Yfzq?d+v7!WUSfJVqGsI`)_*Yka-W=C@wct4axU#Lny2XIg%GIKjnJM0QO!`~w@% zHa<8nSK-Y6kFj?M5{3!bB-^%a+qP}nwr$(C&9`mawr#t6zSxM}jfwdWbE{(=D=PBI z91GDGGlI0?JXAuSte2dx{@??IJzIsVwx=zRspE*?U*X>OR88){G7p|JfFW@7DxG^w zsF@@(V^J=lge>0v@3ULqxzj2*pOyDv?OXfm%rFtY14Kwsyn2P^-0f_6F&6Sq4MvLA z9-p;w{+u)jZw^wdE%^hy8wMQz!Zjo}RgK0|VYqr9)%*bWL8Qm}>F9(r5fq-%*`njRkh&apc39?iJt#OAbPC_mZ!XyRnjU1__@ zud!vNy*K=atA;Uv6ep~hT7`?vK80x$?0C7rVtVqpa}gV|N%mn!sb6m$x>U!y5d&Vj z1ZCaQ`s0ED*hYezPrE0vH~ytUn!Y z`2WOO{GXWFf2;)yGvoh@RQ$(UFfsmrfW`mDS}?Nz-?J9(peiXhOMJRgP!dn`gpJa{ zAujBT2Tg#|*NcRtxKKbyN>Ebeix3i$64Deqq_9X-FNOBsyKirQ`A@#)a~r;=S=Og{ z9cNj*X9org%*W~Bg|-J&7AfHT8UQ4q6js*N)B%D35F|7JK#+)z4j6>IIs5+H5gaiG zcDE8NQkVEBqU;>QM_9^19y-h|3lsuFOOOE2zy^$z4eclpAP|89N&binc1i(A!_bhx z|3Cp?S)gv^h6^Ly9$bYtH@tQ5pVx@{VNU@2lada7`i1~K&D*h&pacOo5#YVspI#yr zB9ILt!iWy=djF&bXl?Hf4v0u8&TnpL0UX`X1-dpS9`6BnCE&gL0dC>kpMr)0^ksp$ z5X|58dms@U0mNP<-uQXKEJDKBhhgD#faN48a8CSik0OHxb^@-B0EJy?1=c|0K7(ss zzysmmpWFZ%0N(Fh{KfvHLPUPx!UPH}%+Vnx(IcCH5hTbt3aX1p_YaN+zy%Z<^hF|) zxj(t^4nYOE1a0ae`>ewOs2)E7jyp&Av0cJD33Yk4LAMj-`m#{IQ%^thQWY6Q|1~q? zoE*qKSM!mUVB>iCKJ*6p&#WPazKVVP*b*gBU>vFwGsvS4d{LBClk4bS$S<;rJmXKp z-2z4gkqn2Dh61!x1H1)pLjQ6Nj<13KZbANn>boQEp9Q%ABCN&s11CVdzrZKva}Ptq zd9-^D0)PKrytj#hfB`d*ECV-$ZV@Vq{7v}54k7xluOT@Ie*&NtSc3)u&ezZF$*Zjq z1s5vH_5Kz9=FL) zm;OyY_C^2nNh>|LIDN|Q|0X~DArQ<;knizRu06gyx9fr0KEDVR{AOGICt(RhotJC) zd#&^qs6!XRGj*r6@@t3ykT{0Nxu^?z4jg(;z*G3*H+cewbL`v2i{AtOFdeFYJKBRx zRa9WPUL%5xi~>YpXOEy?ctNPARqTiN>2YLepR>;d3Id||H|7fApz8$?Akc;Qla&zy zLSXR;{b?H*3LvQ64t{JepaFsq(xr2^_QLW<7Wo?+_=gAy1mgQ^7z8M|w|Ck%8S2&9 zq5Jlv&9K(rN|Q z$U2jT_5?mik%9Z7*CQDJw$P)Px8+j@UVW6QuUg9aU!P;@`t82Mstwf62zHcjv^+5Z zp*IqBl_q~fr|w?O&*i#@tLy8aXCT)+hDzVR#Pt<2lFn5Y^~sP3ed(N?JyMq?o{8Nw z-~M0pf+ZgYm>8$pW~$}vVTW*B)?iSF?atRr(i98(BKd5mZzVkWVoHU@DrO$Vo*ED+ zrwh`%5D%)=9As>H%{Ciwh%8E{GfTV`{LgSPeNfcOOs_mh-N)O@U5bQ6Xs5@K=$a0# zv{P{~*a9J43(Mk|9p;(If7%7ER^vNEl^wSo0@_0h&gB%&wDAk2SXU}nJ;)j98i-`s z&0CH#XHPK2Ox0gbKySyxJmaOe4pgo~jx%;?t(5-hs$ZR@edZbiS7C-3>e7|3X+C68 zqoU?|xnMlW=UI_B-@EQ~dxgaOk|cRcNt*u12O%wWo1LMFg$}@M8cm(XHpB2h5&N$Z ziJ_VNx4TM?kuHUz}M7$F)VL z%5-E*blfC;ZoO!v&yaYmm0__&y@X1MF&c3GX;Z_v@qcjY_HV{DQsl=$=xK;=zOa&@0(C&H?#3{(-{p;d~#tXZvz_*1pxYt`5 z$}Cw@*0ZY@X7rpOL9WnFeAR~*@>FYfau;hxizJbWw>miM0_GHbbG(jk`9z`N%Y>9C zd>Av`_#YIsysCPm8z+_AAV_6QXs2*8z&m^%c5;IcpPYjhTGbCKRejlDe?Q>gX|Xl^ zwXC_~l8(l34}R@WT1M_9wWM@5SX1&6C$bPFU>=nNM_KJP-o(aH&fibutRSYsINn%Wo{>L6FQ1+ zxJEaT?IB0_*S8(?(Y^~(V&>C}JP5n@Js1&}>BAQnxEKe!PQ;!5UKk{-`q$FqTScS^ zg8t>MCBKSXc5iQiqGONlL5(Mp46X($i%P}Yv{R#< zdC6SxDBE@$E=xAQ7T-10e-@P5$KDDq* zzTq;W4TT#o!ka57X&&rgkp%1q-O!WB5X5Zs7Otxz1F5EIiml2E(eia=hJh!}Ig{j7 z`FHS6YotBO=ZDZN?ax@g%2&%`UTs?FuebKO&^2iv%~4RJaihKf zyxZ3sH;Y#Hx#%6+4-KF{o@24ag01(n&-LyVAnevh>$k6+Psq36H@OcvTPd#`*XA|S z%}oer%i%(k>X)Pl4dTUcA2!hoGdad@P){prcAGA_eY)hsjf;_xnEjC=J6ayYCDKQ& zJVvw;J5Jd0-#@xouBdhHh}yXnPm1xn!Q#f0_IquQF^K-nY58U{R#bZI(v>JBeBGtP zt63tce;opha{UBStE(A1o~dZ+?<35>uPc(Th|cU8stl3@bh3g4mNqt)HTl`;|{TZWnoFzrX;j?!1w8}}yW<=f4Wcqbi}H-&DxFEwtB6f$Jb&GZ*n zH&+mN!>jurb}&ISGr8O~3MLiu8yNhOgSG>H<&ES&|C!!|Z;c`|d;=Qnlb;-b{#k!R zvpP{z#TZlj*)y8bY>)f7Pzw4q(JtZOI7&jFRD{6rds?0NmW1igJg|LV0P6-s?RgQJ zJ%sl6*k}BB5*Jk-;XktGIkj%=DHixt!xeoB%Bq4A^NyRe{+_$u0WZeQ&VS!Ed-tIFCo;AKf42m(j5D@!x_rCp%m0n@ z2GbK$Sh?pUziHi+a`BbI78ZYbkY2uocSVJw$hFeh7UGWR#|w%3O~mIu+l5Wp=lck9 z(6`k@7_qJ6EutReI{@PrGbknz_La_$3AZ3u1a`&~*yUTavVS2kW(6hZs{ACVSgbGqBLe zL?kg8rd=~e9+i$RHLJT^T<|wnO&D6rg*y81&SVINJ~byN#!}tUv=>%R(KV`yorw)o z3}5?7%ilwym9`@mY`xBnf~${vj*eTnpU{#@d(O^rE}c*!%edz}%_XC6+Zz17A+&vv zWNSj^Gq0E95DtrI)}z>s8*F%22&&AGiMNddS~of|+wQ&vqwpoqDS?X5+$7uJ4hM>e zsMCvo`12+@26JZZ#qgh|!F{0i4TZ2>0dN4bzu_dAii=P7Oo1V~s8@EF2Xuy6qq{{J z9NhGmmf)T?WaU%7r`l^({>16JAHzef-UhvjltEKj5k~b{)d_fUA z=m&}PC`13f?SvRZP&YvJRWIEew{N&ay2&HhxvU zG!3B>OE+s>D2BpxK+C5Cl?Y5>*Jc1tC4}nkLa&n~rrx`eJ#_lVZ{eWq-kNtj^yni# zC0FG9&Cx15lv&3ZB0F_cKa+gL#|m?2&7x$g@){!Oiz`i#dtP$9T1HN_4Qlti+q|{= zeQT-<^3qyoKUn+8gs0>*pLpc2K4%uP-Jx)g3!GkvI_bfCSrWy`?f8Cc?)dH^dg~tr zzI!W5u4hLZ9R90t!~4_sJj>_36g_>=RMuzX|A$!JM}Y^P6=Bmm>MP2-oYye;Md)`n z9c5BFulj8vFC+TDtkWc$@VvVuo5a6I@#qQM{ZPx-bFCqk*XrF;c24(L)m_}%;HNu@ zhha_Og-g7#ukLIH`8peWX~J_mDyEub{h}Kxp&S^(j|pp%Y__yD`l^50t*iMW6b|=6 z8aF$5{3`dUD?dtEmOd#iXhhx3%+-WW&-N?g?fO)WH@8R|;Bn?0JYUBd4n)tu$=Uvx zg>pP4m(5j5RjQV}CX@LDx)Wh<44PDUWeuITS~NE@JsgOU2j@kPJ}hwEqDrScYu8Be zb6g+LA<06*!w-JbQbCo5FWzR4h0q<8S5HVvB|-130ioJycEQrTK5XP;WUbh(k4TL1 z=CoU;%#qQ3aZUuKp-$E$&pYli)PtqucswE7Ce9BdxQkAyP1az}+|{?VZ9!_E-Dkyy zIe&B;3r3x&%5<5VyQj&~X4C)pa0Wp=p=6&*TEU!9>A1CYEBY%N^ym7tB*h;@5UiUN zIlIU{V82vz#L`Pv(xa9&E*I8NxUPfT7Y;6c9WUhQT_f-+D=puH&lYqY396o7k>+1utE5B= zZ*}J63~u3(Vf*|CDB&#>4T7m1?ciJo3i*@@g-6;3Uv`G^9#|?`tm+XFM-~m0|9qKY zY61c8`V{rAkVhTX?86Qzc5y>lQCm%LrWb6bLcQA6+MJkSG&Y2ka~k&gQd4+pHm4jc zdk@t;{=m4Y29~BWV7jKk)5L3*$NvvZjj__RWKf4dU5Iiie(~9H@(b6PkWZWbx)fgi zSZn0x6&$ssi!~ZIpMElC#O5gMI??T@PPrKj0_K(s5+UW+#apufw!iEqhOUNB3#B}& z?n})7IOO`jfJCd;tQ@8uk+cY6CDwxcZbYMeb`b-8^xcHgOJE4ML1KIe=E3>P3vgY- zS!smk_wO0y;LBxa_)vZsKPyb*uR=s$Xmy;wiK(d9?U{UwEK%Zy1V+W3sCmK4Wjo%A zd4vA)6j!F7IJ1~i7lR9;wok98U8;u8nI3x)=A{K;z|%JRAk^5j6VeXHvSw(J1JnK7i()E zevF}rNJV@Du#*Nd)pgVj{L*#OFxc3Nw~~!s(|(3N9lMGmJ-=S~I_v1Gkgo@pj&nuzaEDsOm?7GLbcOKXfs*2=1{s<^<`t}W-&!3j4GJ6B zDo7c$cqAC}!84|>Qd)C<5c>L)ue`h{@Hkmu`q}fo;4jk+oNycEy59!&Pw81D)nzTq zDewVM`_^LUG&-AyZtT-)m5+KOrrcIWJ%<0QU^I#{8@_pzZV{w3w;C*w zO%%F2wW!7{_3PE2oG~Ws?S>xfP_yA?XvCply_uA4`iL1TU|6SL9G>C1dD z5Ol`cMGn=!1rrpRYwd*}Jkt|{WBVEO?M<#@Ek|TNF*BB?$=Jj!w$FiUO@542FeB$t z^pqNpD|r(+(C7wEp=jp3AEY)d%K3x>1RjPFm4OC|RA&oEi4Z^!)%= z+(SU$BYRU>?vJF|sCg!t_q3W`bG1J$rG%gz?Rt|0^Roz%KPKI9+lW-;(EgQFNQ130 zXy%4JPs4~j<<#Cq#OfZ*h-$iwH-Tq@64hpPPeWGb`H*Y-7`3#HqXcdo4w#iIk+*1{0QG#WG-Uf!HPeTj? z4aLFlX?K9_iBE8nMI< z>h$=3y(h1CB$MdA=Fg>bTjRZEfxF~Kukq%`x#Vh_+y%FeYF45@bp<}jDDBE2 zl<$I8Q9-$kg zE2MOZkXRGGj&d&KqyZTs7j0jakt5zI>=->g^$8pCH1>B2k+R= zNeq8qC_VRi4GemP(thL&3w6D=D!iB%VEr+&Y1Rf=N`L&}0|^4z=ZN=h7k&m@Cgf{8 zL{onqD1cNlB~P9-VxCwDaWRb4kDqiFS8~jEuWN{P?NFyC{v)(i4y<71kYM|3!asr) zo^e7I%0x9+I^C5|27DMM(hPKXk3~S%Xl;Ld3X?Z3@b%Vlrk}Z?k8bP6v5K|E7fxDQ zaH>V84u)eoT3`ffkC*U@3tMhctL>sWAWq50;E(FfgS{nD$HF@IB$pO`6R-_-akw)E z>b>6FKV!P!SZ}}3Fc05Mcg~Yo-YidgPh1XAraDCJ0)8R44#7t}c|vYNzEYKjQArLbPY#xp-7sk! zNDJ?HqZ-_JY{d>|j2XUrEg7voukLkSQ^TCk(3eW9At^-85}Jw(aJi5mS`DaYhqm_7 zzB2W&>}U$;qSQBTd3~zL5s`}bF8ptMgYB#ccwS%}WK}q6l=YbME(R^kwmc?G)rOUb z>4i4{FTC?brFB#pE&3Wz?nES4ZN?hmOv3ugO+ZteS@t2!aVqF-dVh_|MbteTetrWq zIh>{;gAkpAHmNrkcGRB$aFSx%*pj8cu)viybXN)A<+)^CmXqywhuks+Tw{TOh)DT` zn4aJQSo3rL9;oG$b1RNN+6kUN(Rr1RGNqrX$K@~WHW1|`2=S;?t7r(AQMwTGpJB7nP&EU_5$sph;;Q z0AEott6wq4A2b!=ZMM{4(qpnzMl8^Hx^&8sC4R&lR#JI-6g^J#C?6@5v2$5vnlY(& zz?j2^`!DtmBw5K+T~7Y<&~pb1t3yMB0YzQj+NGt zh_*iFm-HZ~$cs$8qr0xs;tqEq38PYNEAkV6G8s+y9Bez7I_;-<3%Lxm(#YL>oL?@9 zm5qGe3qnrCGTT5jPGYl4UVJ+jWw5FN&4h_?7(VKV#vCdLOPOVdba0gO{x%)9Yh>@ z1I?jq(|=qycz?m^b6HZ9(pQhSsU@JWkgf>(=n}rnf(k5!D&Lt{h3kB`Iysc-WXuQe zeI|oRCq(K%w%ZQe%PJ1o#}^NB=w3? zrhCXKNIud`LU2h<7=!lD_uad{|AMh3Ja#OK*B@U^(t_%KT={A9+(L}~-??Xu(xUtv z4O81qT8EPby#^15d)NoSFyk4zply>g!R=Zj(Mqbm)O(0=(wct@4!2}-ij;_cG0`$E z&KdPzyx?Yv;76NMGBZ&rpUyq{qO=x_Bwv zi*?E3FM_5BWZvqOUq+cvcZyaskN(woP70C`CdKJ?dVeQy#UDMHU;eT?A1kM@=o2c`Of;O>2@CA%}^#=3M?Ibj3uQHLY8xzQ3-o;jzwUe%udml2%>< zR@=(~!x%;7S^yEe6K@1M@)^AS8p7Ye+?U<{Z+TWIU(mqVueuF(Im|p zkD*qqwd{rxh`+X@7~IKK^GL3BZn_g=q?f8`R6Kvg%Q%6ZM&*BJ@G4d|?TCGx@Md(R zCO|totHr{w*MXcBC5ng{F^b)<9*WN8x~<3^9+W=`<}?nR>N>ZVEp`TF^3!fd+8`x4 z8gbrh99sU;)q>}_(C_j;+bYo!q z%hQWYjYfExyj?GmO4Mq~O)PmGLF&O;H!0%Oo@_1K<*~QYP?7Q2u0c6jd0yT!=F}soXzf*<96X1C)H2$aYcau8%3dC~ z+Vp(aOCo6=yc>1QR<$2pJ2vYsPtMt^Fr_O6#{e;mVbtAxf`&ze<92!0D)Ch}!{0Gr zK=2}KCSLL{A4Jr&OC4M}S=L{9W3swXp7o4b$g%`%J%o2*WP_A|6WK{PoAr>s6|Zgi zvfFys$jo#Y-Oti3;_%>Y(hl~PS2hsLi&C5ZF*PANq<0*Gb6`LR_hyQyfnLu1%*RJR zBqV)@jrR!9n{qXV;gnpIcViiyOTODJZXth(85%Ne1Xq0loOl>58^e=HG6Jv+2mH;= zvPP@PCQ6O?5&%>RoZ(}R&AyO_y=BcfEFN%xV1+ygc%a&EW?~==*6?QQl;JnZYA{W_ zc3o$5qeHsu8~sI@h*Pu+EUC?&N${I}C$HXxylGX8sg_DcwDSW;6PNZR`2Xau^sE$}~70NL2JaqyTXzwd$0OD*2Pk=!sDw*N+ z)8*1^CpyAJdIOAjSJ_-a4Lv4juyiu8Pn`HM({O^t;vVlG+{K2Q6BKcH?->wn@5 z*#8fm4I=>)3k%c#&lxaruyFj3paByn2Rr-!<9CLl7qhf+F?AxK7qc;RF%>a2wl^__ z;^TvIc5yN_w1x86{O959fwTGQmNP1MBxAGH%G`*xmAT%E)fQ`8+-O^DcmyVk^&~yl z@%Fm?_5J&k=LvRq*tM$XeV18Cpa{kkk->$LEy=YWjG=*%=?VA#|oeUU}rWO)&D`c`JWSDJ2%G`!0vADjLpoiRZMlyg*LZfnwdZNdk+bK zCp9v&H+u7)ToRl=_06u<$LTW}_)qw{HnBjT@#e2BoC72CS3OIb7@hyeBsKLE@O4bh zwV>In*ejX+f9dIjYUuuZ`i-rn>6Ah+8mu3li@$pFS4LN;${Y5zzje$IRIvO zWa+ZK%HOP%J)^X}!#1>cFK#Xlpy^l}-D#iN>6zW#{T|(z?P&l4b9H9@JAbNQ?15$n zK$%(@0ej)!R>l3lC^}>NTY&u!?eEd!y()iN{ull1lvCUAEUxt}FCdwj>4QuZTmkzb zfuBF~_#b&XNp)>)QDSc9%RjsGKP}7+%?+>Lww=EWi>#kAsULq1?G6bo&x}ke?LZlt zzuU__C(ML}t@-G6?e(ml+HrlNm%Xp?S6hQUINa(zbF_fK(A+0~7yD)lBV+s1L!kZd zt(ogu@V}wA+K0Xkpo|og;SrbR^IvnFU#6r6c1MPmrZ#{ECkLRIoZMKRgUmg%fYe~% z{h3F$$ucuMe^|(X$c0_N=TjgD7tjx&Y22Ixe|i#f@Bqobn;9VoDKk$d{6XySpG_ijL?9$191aa)Sk-;}xn?Krvv%lI# z=5J&9p&zkD7ySF$=+nP|dlcD!knds}+mko=Uajo*&RhIoeKWW^xqpcJGb4xi_pt#d z_+0k3Ezd6hSepOBN3y3c@$YN3viu8iLNWVo_Wg79{|gNyFbBtGmZe^5yQBMKP-Fn&)b>1Q>ccIh zv43nE>*K%pQwNITFaP8378S+i>Bd~|-~@!J;lTkwn{5;IwBIh@d_N$Tj)*a}W~c)9Rnvf@ zxFRX#Oq!WpqBG0?+0I&*0#U%{Mmw^+>x?(e^%3ooAzh)i{z-$r(c_p~jJdFhzHN+& zS_|ys*#U&}>KTiPXS_t!EX-w|h91I84t2b~5Lzjeo>KmrS7`CDfI?Q@5e~2iFKHE5 zd4s6w9r)~q(WDd}{$1$MM~O^CVL{-eW^<=b0?7qelLA6hBzKOEyR zbl{hH2ABPIHOOgWXGQ&kzm+pSEO-N7y2K|yr5^QMtwYFbe#*5zTmsmSCXB-Px88SL zl)HgGd&_#z1PwF1OPsc`Clq0W4(z322|W`dCT0W+Gdy+o_X7L{jma~4;KE->;PKii-@&h|z z>A4Y8ppowZTbG(xnxA!ZucsVYi|3#K#kcI~yYrGcw=Dv@ux#<+nwaC1pH^HbUvt58 zC$dSx^tdf`dathuxoSUu?)Un7oe3+BW>V|fetcp=2*3gN){CFGw^hPQ0-BpVKXXZd zOrzVtM&tLG1D9KG-%blZt)YZ{?m98z>qFNwwl1ihpCuz$MUnv-q)8Q$*YUBju*z;B z`u9N~UP#f+i@J3nie=hU{%DuXYG%`gmTD!f{iIRyXZ{u&Gwuf$gONWLLqCrQC1oG< z{9CO{U|@yb*m2J37s_H8$F0pmuRT#=(#t`i4x*H8?By6+CnYUzO9Yg&`9OK|o)8YyqKV_aYCG3sNfs9m2kumR04PZ z=tPL{O}k4XUUBBSnSsIS z|&n#)yz^Q*2ZKWx!Ec%4NAHj(FkE3LL(Nf_{0f&A4$VFlMGEz^aDI zydKo~it1UA>4(Y{E)yI&r2_#W+m{c zzPn*qDQ(56Rksq$F9%_5NPkGo7*e~Y+?K`Y--|$?B6k4@f_(wA`q#yu75|`LQ_Sr3<+^a=fnExbA;6?4H_EB< z=UhI{HrFsyC^0nx1p6`wYO_^-5u9u(Wa{>2(u1Q$AHO^5*Xj&7v+1EUa7=vau-kk> z>BrO$oR{L45M9O&lPQ+99WrFnC-7CuK~1#kGsz2$C~Q%;&0EVB{53@fu6iGhB~A$i z&1FQFAIKrKz!@@G+t`z3-C+`gu6Rs!=1iZm< zn)ug8^|J^(_n7{Ul`E}_{EKAnjx06-K@K8I0r;gl{OBxkv|(s+e(55Dj)A&*8Oa2Ve;xcq5kTHfF#h| zX>B5hxclT0y)gBHf;{{`0e&F|W7_4wzAjaIRgi3(LkPy?lQLB2Eo)-*I z^W(TvLJZJ6<;DWGWSJ-K_n$r>U+x!~d*_HH%mFc&K5;w4 zttcBBnSpuDRd$x>m_C29Q5K3^RTM5-DmBtbGN!8D1NR}W-4{cNG6-%|JUV{uvAO$M z8*5P#W=Rlke6i&8Bn>3gMYnu%|ILw+Zn&Jr^P;mP?(xCH^zIFTO?+R!0H4L*J5}f{ zx1cG(55&nf%`;7ex8gkSi;%ualDNx!XBuVG;**mNrxab=)ii6a2P&kmj46&c-d>+E zDp(DDd&Es)4a7w4qAvN!53IBP6~U_K1FB%`OY>N$BsDe@I}#zJ$@z6W?N%*FJqkAd zu1O$m$P#1NR?+uGo%*_y^eRRY=p_(672mRq3#)5yeYUC@Le$!62|XWHW7obk6f|&; zd*g1Rrm`kKE}s@SDv$*}Hq zD$&T6U-=z`+Lakfkti<^tghgyt;V0YCDi+;^2G)0uOnWE^);ZDjWcVyFK=3=vo>qa z=Y!Gl_>9nvqWVLNTtP=I-@M_@7|NJWW?=$R8)z7va%FLZUp1DAUmU=j>n5N)s<$;o zE=QZ2^+C@}arCZut!F(mAjS@bfoJ6*bKj3b^DCxr2V%;v`%&&x-Qx;tQf5qHf!VNH z9wh$tOV}V|Ft$1Ci0^JOGiDV8m83LZ7Et5>QjdjUD@#}eMJk<8pvHF(t0S8Iyl8lk zTYA*^;(JwOoxq*_N@$gO7(K%!koS3z3WolB_g;UQUw-4|7AA3Y~)>8Tf-R$_M z{0LDhz~H4yt=aT?jig>F=nT)L>^&FRJr0L*3l&SU?_p!SJID{h0EX zK}$D_ecG9<1%}KK$G+{pEP0&9D=MmPI_gFgNU3|L~wmg zaPg?DkK~7qquKK#cKX_+w|f-$0DxOWjOluPZD?J*ZPSDdYBR(7W$7yjW#YLj`>a+> zLIY*&BH{?y()mR(E(E zn}h8r-WI9$ySsSSp}62w&D@~ns5E2gu99Qgn80RF)ch_Pkkqi$M@e;rc$YlE<&AjA zoIBFNTPpzyvjc=A=R*W_K%-NyV*SE@aete$8^*(E6v~^&OX;g-IL-%()0;zI+P9Is z25%0gH}%&H3^H-ReGHl277g3}TX@e61P@#cHw3#R#+LTlRXcYK4wA4gPstkeGzogK z`g2FLMR4_Fj1Z;DmevK97g^e=gkGgIlYLUnXHjw5nmK~*6>V|FoFrfE$LoaV%AF$Y zWX!OLB<43w-GZ#g31lk5jjdv1#(Fsr~kdyXG;siK=vURRPx`e zX_?2Zi_Mw9uf9i8OcTgy7>o{&ok_z)qm%Gz(lXDyu`n*y>+pUDMr>)W0KWdpWO`tW zN>{ck*dm01zLhh!0^?gUatSZC{TTd?R z)-FV=O@??~N{Zoa-P@>XYK+tz73+Fq5j1WxE?PZ*L|jSCj?2xp*#`-AK;Vbn`QzfF z+sU@YwCfjzu+OHyV$sL8{W9oVMjuf+w(*rxF1I&&X(+gsJha_cr2CJ< z+H}1sk!WuUMq7x(N4_JRcn6`5ddT4nZd;^_0(aXniv)fdan5 zt`Wwr;`aEiEShsMHAA{xPH$mMkD*>)Ykzw8reWONAcCY2ZYD5J$xJQyBcg8*o$gnR zUVBMyg508*ju}+{n*94X)*~;#>rNE)YQ_zym%Sueut$L}5QKF{MN((4q4d-9@GvL` z%bl<2HYX0jPerX`-3Ouf@A~rde+9jOS*Cl>X$1dSzbTQ3} ze^R{3nl_NUBnVeKMoeoI8LPc4+~=d7+e~3^OB{vh6o<&-PBwO7`ef?UZJ2xw=&>2} zzs?>*1`ZbO*j_435hCA@2Lr@0{I|2J?C4y4DGF-W7RTF*bH#S0CXecNNHF8l|Cn+E zXGpEmL?y7%eA+uXaH)`4M{L>b03MVXR!2 zy-JlE_vU&Eb)z(>{y}f1HGLTDwL2{lBZkzgh2BZ)BV`bo2qSTIWIawLpUU)vwcJ05 zayPc9?|f1a+f3-dw_9M-^_HP#fZy|xo-VDe_WcY%U(P2#oCzX#geXT*r{fC>?1@F@ z?;yYAUvf}mKaX{fqzhm$%*t|hVyqG-oN^Q=jP#@+^dWl*!Vg^pT{`nRL+P`%p=izj zt;iBrG7DVHR0i%@<`6m3c8X0YsnLw?PnBmS$3)gt6cE^Yrn~XX7udsMge+*0EanyP zrhbGal}deJ4HxgKulT0$Xbj7CL0R768J$9Rv@qBUrir`&V0OIW(cT|B6o<-?^_<$pg|o28e! zm+m?dHKx^}nQ3R{>U3X*_wn3&QYI*=S*rqJTEZIsY*Q&y9t(}v;IbAl)vU3F&(V++ z7F4UvH}IM2%2w?&*@N?7@uOX*>kuSK;n<?j>CIm~_=Z zAn0y%Xd20oj;CLOj7RPdH@Q%BKFs4BOfZ+xEIR`dTCO7UWnQzmI_0KWdAlOQgkK@D zQ)!xdewnS&NQs)ePO+!(4FR7UIu4dPS~fLYeC+mtF?_d5_|e{L881_Dl&QD=VO4;z z0y#!RpJ6ZZlKukxfcws<<1he(L3lvfbHgH=Xg)W%hH?sofC4L@!ElW}XXDE!<{_`U zDXTX{@c^as`hJMqfWS9)fCWE-+LWFn(&7|ad$$Y{6ycegG^=u6sfQDjMvaF9Vgf?O z4{|U8eN(b=I;CM06~U#4+7Sdc^Mh6Gv(vQ`P&gHfT~UT}11vMFl2|c<6vP3BM8N%1 zabhsOOmg7Jd7gSDJA>M{byu?fqw8IP4jBBs#N&+FLj4nP9xLOxkXvEV^&%Fl3Dzqn zzsj+Z8p=nxBjV(??CUmkV*@^DZp9%7PC~xJJR<7rbRKG z6_xaHQ-ExsXK+>|>AcpQTdc}L^lrUKk|sJRzQqPCrKcNdK%p(~>n6RegB@(1{9~z) zsi?P%Re>-Iv(nwQ#Qwhd07e7z!fDcrxOmN>y!&7@ zqE?lz3N>*ShdE6yn&isw8{Bege6UkQiw$pe4{C{qZpcV~_?l?@jdAvK=y0B_e!I4$ zc7XJZAeX?6U!BdnaRTXIlEmh>D;;;Tg9hlECZsUa!ikKaMRhmv)ky^_b^h3zZqeRs zQCi3)<79cz22Ebm9`v8-8yJ5309)+uqV~QLS0X1d5dg&gps+jtG*cA2^SVte5&SFj zxbZBL=EdRtA8^l+J$peo5$I2FL_$z_IA4frTok*Gk(hoOFd8M@rqNiR!@3_ZG=cmT zDL^ezZDghCk$747Bw_9`cnL>bDP-;I>?lv!n_?g{yp3DlNP!iYT@B&C4=BM-QT1@r z&U@WZPLS5aA?=j-;Jc`W8+eX;eZ%w$mZy;(a90lPkv);?N~xlH&t)9<)H&XsChx}q zG2nuj+4xJO;2B}V2cPZX+ZCA)Go@(*-3_@VXBL^R*wzZ0l7lIlK@AOCcTJw_ldT^vwk@jOeQy>+KNA z`5bPesc0EwAXnhHFHbwUO+s--d*gIU5fU@Ph;LHMkXrd&7yRp`VR!b%A(@?8{H2s+ z<%PHi@g1TnIjSb*j!c)#7?@W@)JaBI+#zeNdaEH6a85cEa_bmFvNLLMLz0s#_6$v9 zU$9w+jQq@T`L~JPc-Dg`wxx|G%Na7&9Cq6~`j8navP?ANi;|4vwO~_cTq_&@zkhZ+ zG~|Ehn>ZeF$Xiz0S6I?sXeVe2!Ww~5!?PRLl?FjwAn$xBEn#*z;l9PbrXe|>-K?1K z$Za5f)6@>`jqaxduX)^QrFO22q6mA&yuoRj#);+FM{lz&Rt9*VHFDiR@%waY0}6;{|h%j$iI>a zj0a1<91WO`GBP{4rt$6c9yiH(2ti|I(8o}BG>_o}rGS^#7d?&@Ui$p&GtEPAHccp! zWmKYhf6jc1cwuK(NrlI~GT%s)J}K;jAWzo%XB2elzP@YrzENf-HlCUhnv%>eF5-9V zS6&pqA~)z0M|M@=OT*E$;aEK84^Nc>t}3_=(}gZoc#%J5sz(mcfyYVy*yn5_5piAY z3q?xt44cE}mYsd{Lz)iPc6T|~9sAH+7J3#O;v*G+{=BlOdtks*=-IKq?KQ6sJ=d@= z8;ih1mKKe45Ya|kxz?~zZ6q>pIP;>QTe8@WmQx%fp{Iegz(7FRnA+b(B6|j_8z_fb zI`BLUUMpT5)HdF?&j;Zp&$V%H0~xabCpNKAPrIsd4NoL>p^h;&g7E+dwI#mxNcgCO zyZDn@iK?HEiqw1THe4&cokqD0R_(EvHVOwR_T)iy>94kYpEuJZZ=g!4E(_@V1U7&wgEboZ(2$58qDJ}R`|JDZa2eqB`E1T=Gz1iaYHqXNC zg<3+_P3X{tS*UE%#D^l(ml*j8&Ek@gYgn|T9V8S8sbcc#FXmN2V_~virM_#Cy<^G# z`CdPo$cKZyE6@%%hbr=7yVF>3UB6mO&O+^B$5c)0HW0_o@G6edNxoYtRMRDQ0jN>a z9X?o@BMwe4EEyc2X!s6Z-oM`zZ&=|Ayb*k!V>k23FTFP6?d5ud-u=3^SE87srKjcX zR-mG!IdOX{1cgczB5ps^^uuy(`np^@{!U4cA`MAUa&&NJyAB2`d4+$I#do2I7 z%7q7=6Uh1W|^Iu&QvYXRs)fGKG)NlRMonO!K zqK*5fDTqm4S@?}x=I2_#FP3}XK}~n)aOlospevQ?k8?hH)SvT0;}NyfbF2O=D8Ds8 z>hgg1cfWT1;?6^bSC?6+N5o#9E?WTIQ(ahI`)dYlV@g2u_;-vnw{1LQ>P) zZ&^KDvGhhg%e$Dp;^3X}hNJ&3Le=Dj2`r;kH08|YDcFd zS&%qQt99~C*AFzaw9Dg78n$No7ohxHxi3V)$A~`24>J?ZFecSTQn3-4Mv<;uT(_&W z=Let!m;HzrFs#x=N5K}#2#9?V(oR8;Qh z{=gS(bETnL@Q;(e>ctgiVV<%!CIAz10J|l&=4^Tox8OP-k>}zFOnIv7FQ+s(=?UkE zjBWp%dx**JMU5O!3XSs>nDNSJ&@$4wD5ax*d)l8yg%&BtrDmnZjbJQau@xULA8LZ7 zJ))|AFhaL^nvW{8x12A;cgGOm*AL|MV5*FtoyA)EzTABxuR(#$!V=w9sayD{%N=v8 zD=N6Dgh*sHF5*UO|BbI|!BdupGCT}H-E1#nFuL!lNVfdlmbnaPzbSmZ-K@Z9igQ}B zvoAvvL_Fe^D^=f|KebB#r^NbzJ1?s*N}YV-*;Fu91^KGNAb z@zZWemRe4yj zj6E<>Ut6*cp88P=2e&n!gnLq=ez7sUASB@jHKKI&MXn3Tao-jQf z-2B4F(=ropMMV$iXx<#uP|(1mM<;R^*71ad1y9H#{Kf76vEkOTKP5!}s(s)RD}N7? z&a&=vG;Kr^O8I!y)*CT8$ij&XE}#@B&rJa?X3emA^Y06lwIH+6Oy&I=%h$*gN>US` zyYZLGICVHWPPZ%K6R5@>I^lJEZoA0JFzf~_!M)E(e9zaVSBm4hWRi4b=q)a!-xxd- z@U>Q+Lf{((f6Vp2-y66*sB4T9YMT26citN&E|sY8>y+Lp4cJC>`bEsZYbktXim9Q9 z@>o#K;(e7pSvm$ct50inELF|$3+Z^0Lms{VMmm4Bn2IQ{q*G6GG*CxaJ=Th+q~G3`w#4OUXvU zakDs*+wZsms^Psyy*-=shjwf1+R-sp3r(wmMZ?%bQff40bTciL@%8v+6uNFyfj*<^@Sg60TSK*g}?K-LgZPT@` zwFK)5wDyo#U!Z?Qg{FW@z!Qhba@6TaKF?GV4s}D!8c>l#pM^0FLD-`rAPFqM=SA*z zvb4b3Nu^T60{GZn@1>olf>)uJmjlkUB~Q9b$W3)S0KiBVO`MIlSIwvvaK^ZvmmG1V65uIui;(;^!e%jvjIIWTIk@8CT| zkR~Z9e^*Gsvk6X&uxmHC#cmjR+%20>^`m-(ug1cVAD1@4on?#w@RGJDds6I@Pxmm` zF9(6SyWRf+Z{HZ~o^_s9?(W+!gCrdzVJmh)JZQT)<^0JFahjKJ zv_TG&GWjty*~zWb=!S{sMDOk@tadGSu&28=m(TC}iSq&`9E@-2D#p+{N<1al0N)Nz z4^DA$XoQWm7#`zllCV<=$?H=$U6JX<_r@|OL4Gt2elCMGJ2W>BGgv>6C!-D$PlxcN zF3WlH@ASmedr8iZ_ZuGN`2uK&l9DOZ~_(mfMW{&j|buRG9Y9 z#-$$)Of@sN#pj)!%lQae~qRyJcHO(m!VZ|$?Ue^-n?V2TiG9)Dhbb-m(2R~Rl}`f z!~TG9byM5wbR6=NI{jR*lqxqhO-joD~03{b%e-m~*zzrY#4I4-JELHOPG= zfUrlCYsoST+f`L^xDfjoRgRcn=N%uqLf5wjdn^#+@R+-(qEbF;q$>3%HZDcN;GHd_ zW`_4Q4DIbe8HQ*L%Z`1uHSg-;ZQ{o5G7~xA;;I9p?+;pA-LDEbN)sqY$_ZE*%^QwH z#rq`U8`&MZn{lej=7yy+Nv%q$s$2EBG}M^4x*CvC^w9ZNe_ie-3zO&t9$;*jb<9l4 z{2;)VsIYf4?Po7X%3q~AD0;%^KOx$~02g|1Ts_1NIPuz6J3MAvNrYeq3xDO2dVfA20{I=>DoeRdjY@>;UEy@oFeGn9dlwi@%TNe8 zR8=q1fxEN_Y^OqbX*)c}xRG~ObW^h1IVnk>0=?A7v#Lm7*-!zM}EYVk7H>n0vB1B4>L;n_<$QYrb6p*}0? zW&T{{jFU}XD#4i3qHkKwgmOcG8?4!I{uv^e_4;Cuh$zU(4eK;z*e?4gzAY{Ay4QLV z;{sxG;_Jpt1bA>*TY6$jxS6N$s;ZB>5y%E|;zFlK=GzmdemJn_YY+I0m5nDbpWVre z`@#*JR0ap@VU6#a@r}n)KH;W8kt2RKNFUWvMSAb(MHofLc+HZD9L^APzZh=P?cUwf zw>TPGxtdl$sgD_7H~nO#vUvQm=?{T><9-2tI>cj!K3w19CcCl{zEJ?Qgr!m*ogOLg zyGlCL=zmsyO@}Zd;$-XE zsrFs>wy(S%_rsD{8ozB~+ExO3FeY9KDOs`w-E2BK$!_Aw?n`;shG(XdDRSmxsj&%L zA*B}h_`Q11P9JYDj0XaXr$C=p)O%zdKpldQpSNo&T4bl$hBsov>O>WB|J}#DpC9vg z^_Xvl%qNXfqV-@8Aw45}YA6-IY}Sn!$G5H2LhNqPWRJMfD{^Sw;O;?6F3Rv?5hpaq zkRY$5(ZPpwi027eSnviq(Qsx_Q<6T|y8RSa*`}r?XFZI+`Y;}i6VgjY?ql|lQGxNv zs$wJkv(Q4Jp?14Fmgz8z%@E8xHjkkQO&>gVve&_t@v~Vfw*ChUJe6l81xVWQ@8tN+ zujbZ+JxSh^qh#3$enTZEybw!JaFlBtT9DZi%YGid-6tHzhb8wPJ~Hv{@}Q24e>AWW zS6;+oN2jH$K2*v|;Z0<;$!M1*jl?00oC4iv=nC%*d}t3``2p8;fc`mt*jp2y$>+98 zE?4qoSqZ{5^Gt)vwsEL1j2*0PiK6Y@NADzS^qAUwGIg|1DE*}q<_4qA?wC=BiI)8i zBzJO$NFD5zRfLh5i*ntJO$yC0i0JrT7>r$YX_Sh1?nGs4aYA2GIdZPQ zNhjb4Onb8!8?J6Q1uzrjoAaS#H_Ty8tR<_F}-w@r+W-@KI{!ZKplqbiso5#z?uiGw+G^^oWnlxI*g)$VTi-7 zem*WfK#)h&s}Jyd==yel$2lX~LIwhJnZ1ZN0P0=*oSqIEj%>IIvlK-R&nkhGy@EPU zMbWYCTsuS zRe;oL+$W)mooK>oS~VO*Y@PA$%jY8LtaLsK$tc_`19ysa{%3Xx5Y&Zki2=c~;VS_X zVHLOWq(lF}r>g;cVPA2{Xf2llupA^)OBm_9Z&zOFU&zX$z}$K5@%s_5={BnZGSau2 zx*_Q==nlW+KsxE{Lo2W`PKW}~@>658M|&e&>t$O+M%0qJzwhrAXV}S_b1Ez7vJ-;X zPJc!JS}IBta{@&#Q8V7?|1`@;+9W_aV3xi!tCG)WG{hIVAA1(#oUvtc0^>qRF?PC~ zYI7)>$QHI1{kWR=`F6vjDeC*sh(4Dcz4YrbQjkvmWc=mCaVe!hsRSV*0rTja-@ht^vKf!p0%P=H zOrk%-z$QKmTTKTzQ&4Wkv}d$J_KwJjca;XJ&W$g6Ka3Lp=NtAnY5J|7Gy_XqjF&PG z5Eebc7+I|O!wg>&lkY>&zlhr{*iRnAlExz-%}ByxcJL$4v_aDUTrc%s>Qlw}7$dEw z;xTr&_J8~#n}AY&sNun_3F|ZAS-L^zQp)~L4vJ>?bC3}XcES5T531$L2#6bck{KI5 z8_Hx(y~KITY**k0h;^?K*x~iW5a+-Q;tBCmN(ze*ejg&-axrlNO`UC9b$!n~*nPQh z%~6$P$r!4OzixY^ZtNUVYWZa1>6MW!4!sp6#dXfdeGgiR$ZbIR`C-FzkXS@s9>6cT zUsOYx4OWu#N!+c|0AlHzB*w5;Yw)!8DGbL#xDr22x$bj%#T}A1RgP~-ep$L#WES;t zj~#uG9an5^^k-mWd3E7qsr#THf4Y*+>EUJ~beva>cJ!|+tq}1k`f+vch44;ug+)x2@SMX7_Sg z{pAtLl)&f$4*OJdID)E*SbWJqtiZJkm#mJYN#JHE5Qn5!P+@!KkwclB&#}hKKMTg$ zNs;zIP=se?TLr=C#`agD)jp)rp}H!c0(J^VUw+b!SJ%W=x!Nk80~=l2EH(`5QU!iD zdEokHpFhXtmtPNOqa8q)Nx2{;2yUUWuRqO|O|^-v#jIE@BDz^*bhm$4I5}!E1O@{h z+F5C7g^arl7ca%K7?i)Y#v_&qp&h}#_bHT^>eh(<0#E7KCM44MS#oeVlc^=ujK99x zHrc$3RCuQtx5kQO$cnwoB8x*Na_Nc_J`vMDufAw&P9M-dnU8$WCnd1sjOn9l@Du5m8{GYr*U)0z4~r=784;#h1Evnk0e2IC!}>GAc91D8+>WxNCu+`?hL$?Ob) zz0}ytR+&UfUA?$66kl>kcJ7-bLOLcCjq@c^@5C0%qjm^8nZGFL)LI+63og}bK2L_n@8Bc>hXP>Q0mW(YBCbjpf}GWZY&>qE zUvL4_SCd*nLu`rh^AlW;un?~N%6!>*Mtju@=iW)D-%#|<>*br##r&}xu zxQx{!hNKXvW_p)e%{PbzEN}q5V)y{4Sn5dL3u=9;>lPaJ0z%f8@p68CFhj^$WE-lZUn{!;-O?($-?ZR31Q#F~;P- zwp1?kNO@^Dy>j07&+`i%{T~Iy$o!$X&=g9)v!&Pq#g> zoYAK_Ek;r5B^(gIdu^dHCTVpkTYpI~Xsw*U!wi=zjpPA^eW;^eIcbFPV#>d~mo{hI zIulroM=v6%W-ma1OS7?SXbPy(MZ)E;VXR~ihqzSz2_&D?VE=IieR-BlJGoSqJ^usR z&alK(CQN0(Q5UyMT{dC;BA8ZEy9sgUlJiqA(SSbv4-aQ^7a{8b+TJr2eTW1UE(5yU zi6dDlHb6}(jnrA8QZz4#%4|7pv7(zzh9P!ERV>826=@3^I(N>2(!K-wCfi(@&HNq$ zl5U-0rr?BE;eOJnM!3o-9j&n;^N+8W z$}_=}%Cc&|)4+Zfi+Oz~LHpECL@C0*#$$HcK-KNVzjA_b>u2X%%siTo%4`$24_mz? z*c<2C1OV;g-8c<)JOL>BSBl|$M^PkQV}egmVRaggWL)i)-)8CmBNo&ujn{^oO*9x6_yhf(l577f|#ZxmV;b~NWX^S(7-$n!F9el z?sb2(DuPd}Or%}db~%I^5=OLxm|xFIRJdZ=hr5^|&cYwV+ER)IjE+s2S;Ar-aMOoe zQ}@WCeVj3ePq;_2&P1AT5UmDX#^Gm?B@)sKZ5K2LO(wA zFYSm`(lW_`c_iK0Fb;(-xlj+an@AY_{#4hB7PTJSkKne&UEl6O1tZ$MN~*k5 zr+4#0nL z8!QbSb0CVkEtgR<;7bBier{KTg6=N*qovg%l#0Q<}6GqmC@ads%0lAut{AQrl8@V z2PAuvIfaeS*RZ}!Oc?||L?5=?-A&>H?HL{(K?pnf0-hF6=~NsmZt^u{%EZ%Diz1mI+7BNSdRN{C zZ|eI_E^SfMH*?XQ(=`w2@N!3#A}cI)^u5h!S%(Og`NGXaYI9x9>PcUlXc1cXIt@>~ zY9$K>Hf8ifFLYl++Zse~ROg{fF0vSD3#6>bPwhN6!AYl&&zs^?gGwaLVPh$qoO1mO zbtc7iY9#B3tr83jwq%bnH!8)RF=FT*Dy+YS^8_g3;WZ`GDWnmS`^>xCr4(sp6ECTM1vI*L=F5A9C3a(?iPL8Uu z)%xkn;La+_=I`=eB$M*K*3WauWO5W{b^0C%RFQs486=B|VE>q_R+>2A2HwnteiDn6 zy#EPq$5j2%&&sjVPEGd}Mx)^?_Pkq3TpXUADnNVyf9dJIg?8Iz?_=HL59<3pQ+6Ya zg-nrT&W6InlbALwJL`IV<%sdgxw>-6Z|=KxA}@A3D4XkxcLj3&=3-<>mz}HlA?vzv z?jgQ)t#WSk-+LipY456#R>)l7HE(3&)(~9vx5f35pn+CLVYGY~j@+{qqy87yu!*Qf zo*3v^Vbz9S+hvRc3WFmuE3M2(jQ67-kqNS>UQYZHMAKnL7yWAly!xKL<_1g01gLn@(a znrVrDtlMNKt!czqkx_c5{Y`n4Px-cd_0+=+Rxht~gY6Of|T-dx^9jl?tdgM3DJvy1&o?PDheHf}Ug$ zUP1Owi@q@$3mu;pf&@((sH^(!E+{jsa%0)oQA=~vDV^1j7kWjmPpuddTf*LZDXCt+ z1%c1(wo?>m`C~oK*NVz8uQh_Ki^#@^y#Ztq?8I6@y=sLU!^P3*kM~O43b6W54kTwEg&yS zs`NGCfH~RkHQP(sD=(Vk0em`?YI|2lSQ{@40{N0(Xc1q~8_qf)OZT)3xH9oAKbRZ~ z^EwZNmBF8e=X@=y2&{;16~yAUL;x^?BrVv{F3L659B?qX z#=-3e*f!{^9>&#ni|$0(J+v9`*(VgluN_;)1w4qwdO-V?z~9Hf_&~<&MU&xXS&Yc~ z2U7aFz?VhT&cV$z@LKUpd;_mSAF;UDd`hm zL!SYK?pK#wixH==@kZm4c*W*j7p-*}By@h+00S><4@&bwi4#LSpPPsuhVw;1R z@0gQe$PSILlpTUrv7iZ9)O2Yfq6z6)`?{F1PDJr579x!kdft{5U+fqy>*7GT&Sa$k zJbQuNSgo!HcO%h;X5%Lbs^~pREpl&FC9ToV@6P@}DVjn!Ja;1g5hqo@gaUsjpu7nN z?pTCSF*aS=yN*q$dv2w+wxNwiBavJDfb3%4>Du@pGbvP18NNa$F?RwzMrds?LLt$0<{NR=6n6994wT=cpBF9tLD%(q2dQQ_^52rOHI5-C3{^8;A7 zZv@7`=nXor0d$(&_zCsRp}kyY8b^qySQs2^Av!8i?_A<>Vjd6(uwIWbvNf!v3=+N9 zDS&u<%FjGAo#hqUSAQ=;LOO$MGFMQwzR|3rS90Y;;Te!;{LWV8@p-O$$3h3W(eZXT z@o5UMNb6z{-x*2U+p>een7C}x^39NMEE&xuC z%0Hz7Pz8?_@i@v!(LPU?0cl zn~JSqoX+D{4XNO(^f3B6hO~bg@>85tF5tXe22%1CnWM>$_7Fyay<(;C$Khul&kNzT z=^^Xe7W8K-;N2Z(^^JhAaeB-vR?1d5BeE3+|Hd}h7@o~W`oDB+6sJdn#*q|~MND>S z$+>L+iRu!2N?x;$F~|Rx%(vCUz8)A_CPp zCALV{Xk$x#8i52;cOP+dTqc1Y-HC8L2`qjldBJ!trI)LV1)`#Tg`buw@w1$E@fH_X>6)J(_n{BY=K5M49RFukkL?SBUjOlHpPCLsa zFAbc)FB|RDrkQ-{(Mp{6m2L)|*Pnle-&}_{9NDK=SI-TxBw5maL(>X|WVNNf_(UFr zEH$XA^kuj4Ik)oNrA%xOhpd{cq+@c;<^ zl@znaSok7$mMNp87$<3Ip{4($tjk0(^VPNZ96lpWXv$+3wVxk~6m66N!$nE==eOpZ zlmDgW&D;Fd8cq^m&;E6e%~|T{?T3v3BPOydX(*i?fcF}4IKqOGxoArB4sdX(su>t8 zem~^&B^wxrqQ(XO7?slqp0nNj)bf$wyBeK&=qcg0P3askYk@M$Kd}<$(sim%<+e$? z8g@UH(`!mrBvGy2EPvNuzhF@Mv}|6=E=1E<&VV<)<>w?MQ5Q+sg;F96@(@=8xy=Iw z4)_50W~OM_bgD{|wqv!?`sr2ZS635wbFPdlSf#8E0y~HzB$UA>QHe^8*?lL5e{X`h zfDH62KjWGek6|1fz_1++HSCKXfs$+*1MAhl8p6JFw`P4(Zx)4&H6IPdEu_rh@}K|- zKeDsM8_?Fcl(N>Ayl$;&4I03PE-{{OTL{E1u+VP=Z8nnqJCF|va1N%-qbmv;uwq>^_f2)?`Xy1Jdc@2KQB0Z3liQ9sfu@Aw+ zM-`8(+qR_%05Hc)SJf#;hbX%b-j+uDL+lH&v9Udh(EC@wF$cnZ{?dLut(ZzGa zh&uUwHh6=Syk$Qbo7i>lmmtx1-)Fria&lHPouo+&`a4X03x|~8c>fio6`y2G$lU0u zfJe-m&YpUBdR%P$_z!SW@<+77;HDN+IC&?sCa%`K#2cUDhXJkMvQotC z+Dh+|qtD059;W>v@v7hPa{py~Ubpim_kMjX`VsMIM68*4>#_fQtFaYuqQlaCGJM_OUFd$!#BeZ|`>+DuCY4NLA?P2!X= z$xBwE*lght+Zp`B&{_{VNTyjAOuAdJ6Lbt>^b5#cF#p<#;=ETHDdk|OY`t5h+GJ|Q z4f!xG3DQ9yg=?7@V;|Mz@$|w;Yg!sS_$Y83S3Ox478ph5FczDC5Riwr@373sd(IOjQ&R=S4 zVLtalljazsP3)TPuFk8uj8*MRf&2^AG{fZS9fOSQN!mb=+XAy)Y#DoM@A|VV$4Hjb z=Fn$gFoF6)UjT~PFk+oM7rvEj%mwmG`A*aMOpcRT2yf%|BGmCv7JUIxU;sa-NzCY++ zMh_m*H>yyb4Vxzf#;HwD^n$~WfS!wv!Ib$hPh$Lg?Q$<75{j6{pSD#+$r-sXs^h7! zxCr|J@Ufh?^#E{ZIs%U~Wk1G;vt}~{NU2qJdQQ=MYph+&lOx2Ul4a7$2uq(70%=gY zN$CFItr!F3+^yT8A?a?%Tw>qkq(3QT%}Xib0T%a9mWCbmi|wioXHr7t=?DFPXGpd? z3~f^*Mjm`qC6AG#+Nocl)fmxoxZGAjYd%L7Q-Bezh`HErKtcA}7wx_8zbGU^oy|9E z4=)xeW9TT8vf+k4G+-lw^`LAI{>L3Q!J#YQvWK)$c_bWuDc501$+GrAxs{I6IuJCl zpG311{HNbkmp-2(f7JB}aE(j^Fc-7!l}a!y##DCzkCYQVluTA~`@Pw0h=F=Zwu#8D zSRCeNkGZVP`XWU(Ov)ByK7RMei1~KDQ>fzg(j@-;E$@Wv`j9!W?}w9K6mhGsWPqGkaK1W5s>VRtWIOm!cr$BhucNo);+WC-)& zRuNekW}|hffwVG)=C?knoswSmYF=13EaCd#;?$JYzOx~hzf!r0 z-56c^y2Qd1gJV-2x!3HZhXJ+JQ6KnbM6Oo!W0QjjM8`^&_RT7geAzjGX{B?PO1K>Z zg|dVa>;*e^DO_T7JZ@wQ_9h^wZ7p|5dd=Sa_O^NkY#{dYG@V5qm=&#FIWnCIuacy1`$|=XZY#EO`yW6!dSr#%dT-wMLyd}D!tL2(V^k##u zl5mKzR;({e!~O%u*>jEq*|px1A~eIRi!IEaUt9x5&7WDL=K+@OH|D-FV$rXh;W}dzeII2mW~J^UWEcZ3v*fE z>$UK00S;^N(_G77(%C1L)-Tu-M+f4*|9=}qK@q&5lg6(`O>BnnP>8)Yxi3%7n;EyU znQgVYbEDM4BC_-vTN4>uW+5iem$>ULJJFIhz28|jxmqo>G*ZWpvR?wz!Xg5N7%-$* z8nZ%ch>s&}SKBXIP_uvEMWhM+sUV3K#zd#cCO?2HZ7Yg%#91*J={APf7dZZvU)RQe z5i&jno6QVK4g1@YGRpseeIFbk{1D;jN2gE?iR6}) z$!9SFpx0FP>X&OhC80f7{pE#x{_Dsel#B}_R-;}HuXSYB2a&LE=0EnEsx>zLXRODz z=(1p;fVXB`@JhNwU-?+%$_b2}0x$HJMDy|3SSPFYvd3rF)&?*o`7XbPFcgt5BnS_xb97Q7!XY;2^uDe*;F*beKl;+Q>C7OVTzTX2#EY zY3vR1rAEGO(bdntorJLJcXky|mtRM!V=@BKIUPFih7%+9uH6mU0`sH>p%OPEW_+qN zX>*|U25%qXmlJvAN=r}+slUkxqPoPh1}-w{#z-V0WHek>yPP>2dsV! zd1Y0ZN^gMI+#1Tg@|BU-dd?kB;0}{rC|EZj%4fL8#(;OO^|_R3XO3Bx7$IhCB6jZSa-(jtYAcXmxZq%`hxk^OuOKau!yJ%fZurQM){-#L$PV!(X@E*2 zM_T6k&XL6Fq?c1eIKW-fhNjCu?Aa8QY5YcwJPobGVKAEs$d__$#ui3mP_G_Y;yDHH z_X2wP0eaVSULO-5Q9>Uie@aHf`b-snTZ~qVU5x_55u#vKbhGDyxy&m1>Y$XRl z9m(6zceuIo)3vFx#ieY-zgsfFuI^MtcBW4@pi*5d0u^&=C%$yDhEQ9kCE zb+l5l#JNcqxe0K#W7Y#(CqR)`j|MFT(*)|o9w+JRc&y#|w*KcGx21ueaM2Ss1Z!Q= zI`KOoK#zUm;KsXol^JkY&6b*dJhC|ouB|*3;Bwvyge46YSMP`F_tTt+S#hn*g*TZ) zJDkm2>arKcpX$h$vOmYN+W+i)%W0uyCahPAk*T5(^zQqHT0wOPNYxEa zsIa|KB12O=F^prG#P@7LCZ_kXjxAow0h2uEv!S5q=7x2itCdl5O;oObk2K(+=oE7+ zNF-2JBZMGEcTMUbXi`28rR)j12iiHy*l5*z=ck%N#olP*$*a$qFMcGZPqy5!d^A?w zXQxGas#RB&BuDRRY+47!-OJ6C6y#o#$8W4G*4PioXgU?Ok*&*^FZ7!WLBMbp%5Xgn z_|%b@o~ywXZv#?*+-_taQs-_sy2F7*uq#{sfE$3yXh*#937Y9z#}cDvVT4EAH~y5} zJ&1r1;%n9dO#Skciy8g+iE-8cnpU>VNd{_u$73f3+MP+O;|Ped~fMpGgHYt50PyI(`Uu~S^l7IOR43OyXz%|rx7 zCAEe-u%9h1N$fE{t{qrJYpj3Bcm~=um%QoZ3sQ`bv<6Tv277=SqiMxDgk6AgGiz9d)$l zX&*sD3k>)DWWd{?WUc(^5nk=S5$nu<2Nl0+)F|?C}9*q|m z>~^#gYaQ>y$$%5o5D-Qv}Z!gTscbBUq$sB^gBg2~FicU1Uu_kcLMS#Qh#z{kci) z9hMrXvnlpyC_D1$u&7}o!99(}%0x_!b5ONP= zR*drNCXD`9TmQqrbZI=NzkX=gRd+M=Ziw|(rI3LH^%B|#H`=oS<5dk(x|p4ekHC802uicViCeCB4*c@sjn>OeWvbD3ghXkGm&j z)NX7DKP1oQ`08{Lq_Fgl{-{WSdf`@{En!x|>$4IU70_aCYV0<{kN)L~eDo5@cv-qF zX`5p)ySEfRK!KN@%7QUM*P-#mv6DBEaUeHlF!{~c%iGQ3LGN5?`;UNkeQ$6M)v2I+ zi7}i8SIpv>;zjn!l>nR_mURM(B!XU7ZO$(WxuYu)Nh6s9D2t^uTXg4B$fD~aP zo~g2@8q)>C9*OrLEpCOsG=)}k;+~KH8iUsBiUW#U@kT2d9SZlSo4|7;Cc|1g90kOt z)#e*p5!JD5WNZC?pOrYH&wlweK%xvZ{?0!7}K`kUF8=s{5LNixxZ{OeD4Xec0 zHbEIeJJ_j%FslbjRP>->_|`#2+NcF%4D7rl)@^jR8UFv$LFmxC1jyirP%`0J?UAp$ z4NOH~*xx~e(^-$XSV}}Q$rBuZm{*+A;08`uGU#CWH}ErfIz%HOm5v?D8h*)F7fPAJ zF~GZ6zM2xj#n;jJlwTKdyJ|p8D^X{My+c8{Bzfm5tof|OJvr5N*wg`ID2-|Vx(|(b zb`9@LTGNoXESdjL%`bcKdE`}k8YRV`#uLXRuyrU0)tLQKgrFY$N4fV{9By{^_)!?V zrkT1Q&f21xARUzyCb~|vnJZdSICrAB8&E-MY#2Rahbp3yJ%BBgCyFRF%E_sR_*gC& ztmrsTOJF%X#_p&Qk2aG+2uiy0=OGEFWZQ7S!nUa>RX%?Y(uGu$#9B3M&nd0t+#Yi$ zF@00|++L1vn!^Py*h;c7xQ=nT)BcDAjjK{9*~mq9xMFJK{=FLO1>%I^0<&|C(d1<8?2%73ic zYuo%c&i=1`63FDv561uqdfO)q1q5$>snfvOCO5or5i|}-*6gKcilRH$CEFjW54?2| z=40~5*Ly?157-i8XG2m~onwP=v0-{1b&R<5oX*Rg=LJ3Ou*{m|C~+c4NK{gV6e2W~ z%EZTpcVis!G|zHpyZlybS0~v|awG~5vtu!w;|}uP?EKZ>uC~Kp36AL~$2|^jDb$o<11LJYb5EqFhPt?Gi?rTBr3FCMZ5(xQsi2y`%ey_(b{qIXz06;3T=f(=$<=R zrR5p(O-5b;Fd3VUV^C%hiTCS(f~(XvN_!SC$_vmeXDnb1*m^1Ph)#SLIgrNgrGnn6N$ zt&}9f(&p9?ZkS4R zS6-JF+nER^a1Pm<1B(V5Z$w8^b;Ot%cV8tUxgd%s+08-+wGm8SP=1AKlN`$hrHnAo zOOXZO(GrzA{A|j2+YAXy$S%b2ypn@D>&KNwLJ<5KN(ZdIX$`Lt%X|LB$Sd4@%Uo2c zy*zxZfZ`&soR|M+u%AoWL|ves!uMMuV$z)zU%qM2L=}aQSs9dXDyJoaxzj?U+$EO0f=0!Uea!ac9AVHMS zxn=*5(|7#ofk@MA7>3yF^LYM$x`mlKIjRz|&-}|~FvbkH4TMtk(nPwUGPB z{zy#ag6n^>AY5NlC0W zHnFF%eHJ`I#s0I0uY2SE-(~1Z6%13U2s!jb&*-c#FZ6A)xl%{Hf?@NXH%4%&7MJ_z z+Nv)q`V$S;#z!Bl4-{T|*_SNQ@MZrQq@EM!Tvi&zSS#q9Vf{&aAZ^Ewe03roigSSK(`mONm6dUZTudyp!Po%o(-GpFdm0)`|q9~k69BKryi zdc@^CXISN2{Qu;6O6p!`CR#kGgs4|?BaDLtO8RhqaT#INiTX*$sy zN?gerMM!PLjDz1I@viE+JEu+@Bac`TJrd33I1pXFy2X zQ)fUa{?`#TnJQ~L)-I9;!|__P)Vp`jc>sSMmPNTC28hwzrE#Otd}=@5eP#{-JvE;n zyaqbfUyR(if@f>`@IE7z5fboJQ^dgQXS4g#K~P39VIGhZ5@F8v@E(k8e!w

}thd@}i%=ojF46);kWJVU>?NtMgTnB|ukCR4&##<4m z{l;4_4!&vXguA!uOHkaoevx>%J)!<4!<#%l_A5|X=3hD@Z_9X-nMK+izlq(lQJ0TID*@XLe3PZ1GbVB^ z%JA#$DzIf-qP4gU!_D!BZnFr>uOAi%l~ZGrtuU+HMKua?>FSab9_mK_FwTy&g@oCs z_+&B0Li)Y&jFOApVvbDuT9+Iww*O+(?Uys)*PABN$R~!0r9=3MsqPy2da9sN0_k(z z)~ZoCxeDrJu6M238`knurk+DZOXD0V^%_b-Tc3%S3&(b*U~vtyMtmG-US`XD?Sm!6>g>6%g)5rgLCAVKn)oM{GF8KOjRJ5vG zZkGIdd3snngav+6^_oIBi+b8WlJMiu<4fwwAz}5KWouR!zuna9qUQFifi1iDA4!Dp zSF|kAN*H`tsGYdoB5Ga2(5}(OF`GSN>2A zkL83vSjQab(gLr`7%_wi{b<5y?W51}kI4(V(~!02cWc-7(RUuQg0TDylodjc?r*2$ zjLb7^celvpfXymSgMJ&b<+h>_l%g~#Ek>Tb#lb|0iB_i?S$LGMDuvz#&H2IQk;A8X z$NXSZ`V`4-2=qB1q{6xS6Cu5nD*#S~zhHt1^ezc99DF*du+w|Y=GJO@o7A?!GwxY092kqL(D!nBrp-`g# zef)6)`ZbN*GYA z#`9ca^UjE<@E0`yISW^;`2i1H&d5U=Jd^g55uYI3hx@c7neV+_g}O@)4QOt2;B2x) zL%*%-O39BhZ0X!>59c|ZX=q;e%v#4$I212Vc z5hT&Tl&$GeZ*<(qxmj43k@RppZmg3?=|K`TPLReg=ym6Xp(wNeM)XlM!sH_3N*qyC z#SRK?D9orvV=g(pg`z;L1>Hs}-lQaZQg=+X`D80YoTq@?Sin6m(*5p(=M`@8Epxca z=A{YAoDF}(Pyq!ZqW;@M(Lc%r=)p!WNbv|W07kshv$dLdsXmQOoAgNrWl2z89^Yt_ z>>Z*(qT=jSPU-vaYc^7{i~qV2A|Ka)1?zz?6>aD~ZXuAAj3zX_>#KwhB%1lA*`}_8 z*})g$A5~_rau64i>VZqE9_%&BE#&dIxorVE6}|#2#ql7`Dv3RIn(=h%F@2#BH=mT# z-0`UCp$-^146?^*-mZNwY^ljqu_69BnWAR+(K@yss#&+2zhXj%fcO4`b+0uq!qt>X z=eNbu_H?}Tl*%T`O!L+F-acw?*n>k@%OezyRXxc%_um=&AF{*KmP9t2zP&ANe{?Az z&048_3i-S=D>2{8oU)~OyB7LfiQ+nr;`m*HEkeLN7I2&vvqN?gR z;}Qymplh6@`+<$uJ$wdhB?TC&NB?{u+#G5Ydk=*)hKfl0j%nN;-*Nghs=p%nX~(&^ z;#@@)POeObk4k7g!J#Kcq1G&=ha3ELRjsDkwlc3A^_zX$-f<@M@$~lR%yC&iiHdy~ zRV#P?od%#d`HJge{97UmDu@06+R13tX#zAsdZXk1=fLw~QNxsXT3LP!gTQc{KX*12 zt+}qU^Is62183cf>T@7>@|}@TZzMxdrX^ovj#sj}n$dpvBn+px2Xy%+C8O9y7@AJ= z{`0g(#~_bM1(o^&jgj*4Y}V=fE%|M`WcI3-8o?WF>XhoEgC_T{hC`|)ZEeLZ&s zYoz?V)W0lX+bix!Mm{X2Ilxsa{SPIaIOZtt*fMD&#Xq~)_>I1S20|e);TYnGmfStK zrnBhJ$eoQv$BTZ7dAYQrqyy!@p*)5|FsjiMpCevq!BH8fne$e7Z4?W;$Qw_BCkk=S zuVC^FTbjsENx64RtB)O>y~@CljjKgxy;7c zNkt&4JP9wggA}s*N}PC-O^?s{6Fwa|QG!mS9w@r>#@a#b7z=cS$4KY zWZ+|oge#CoFs6(1>2OHcIe|;9n;(uqZ~yfvS3Bv}^Jb~7zhiu_LBFF$T}y=j6ui=I zW6}DMFs$gI(3H6U;Nz(<)`!L%ZPrTmcns*L6ek-Jn$^%}86IETq0#?oKbD1^6%k;5 z8cD{1VglXeaxj9*_ai~r%!tp7VtupKCcY{zvb(f#kC_fN`Qrlg?z*KqW6rm&?c-G! z?LIXart?i)AEkUR-<^zG^xZ*yDo}9+h6vT-oQ;9633TSm{+|lQ@7|5tz%I?dY*&+08`+PN=8TAsj~fUIcnCf1fw1CaddQom zkp+#y{J{>%4sYvvwVid<%pdD^yT-Zz>j5D0UnNE<-+q6krR96+aajvn1c9?7*A~8) z?uDkD!ZX>I>jgadVGj|~fqGNBj#aKTPnQ!M7mu2xn@?<==!Wo&dG$QFZuiPTI%)R6 zZ&4O6bpp37mWJhE>@r!6el0OGXVrTi1CWkG0Lly&+BY2&g_Mx7O~1Kw0-Z#fiqYtC z!A4A*%_pG0!cN9gGz@0>95dGJ2a^CEBcBayC)pedaMSQlu{h%P4M=j@!K{(e9{Znb zH{^aE?42YQzu-kMo{2jGd-Ab(-0@A7{#}TXEE%|z`8sSq>?teK4FSdao|fZpD4-*1 ziN<_|9fM(Z78Ie3fpHWR8fk+uw5~AqK*8t>C!}T62v9lhD@HAz4PW5x7|ky4^3#M6 z8*;$5ka_PFXpXw#sC#OG<{^S8YP;(OwbTBcT__)s}>91 z11{~exjh~)u{Y-E9&0E>iHSIqd5h7)MUho49rydTcLn4QvX4^ebmPT5uy!z?z$D9? zwdVSLny42=N8u6C*ommdoo1_-kdk*Z|%>R{cp zbyN{o$aR_H^?08lGPaD#vz-XXqGr{8VpTGPCdnjAGnYmPQR9?9Dk}hSL589e(>`U6 z?MbPq%~1UKP&bhcGz3rFNwdZN(r+FCWFqr5&NaHZ6+G__=yHMIs(?>X#hOtOCmk(88tPQg;dsVkhnMPY6&i2cYSeEsrmjj(*3o^n0<5`IwWL#Yi6*F6dA%P zCKv%3Z)i8f(g1TKwkh9150V{lIa+y3sT8?}*wI@7x!Ha7Dy$)*n0&hk435wyLy}<+ zb&Ve>L7eAU3q~1JE353F{)Kc8@LmR1u@UXlp)|_|UoHr&mTiF!%s}CXGSxeb*G(gX zgkB?dRJwTGjf4f-$`Xv%?&R08LPT$U;ucDcZ++Fl?po%ZFnDtfF7=~0TE7S75bsqS*czXr?Bd}Ck7k9}3U1D~CpgFbV+L7RB*CDhB6+?_% z)1PAv1=k373AfcoXNKDFqE`hbt0{1|eEkq5C|JA}N-I)XR1?);k(6+$Z&|FdLkcFhhp1>=?*c5f;Uw5BI6cn>|B0hYm8 zjQU+qQ+4p4Mbi}5UF_bb#8Q8SqD!|`>^(`Kg1ScQwEnb8c2${>cMG%V|BIH&`G3(; z8QGZs7cG^Am5Kd7LuSJN0jCl&v2rl6{C{bw%_hp)S{tm9ot;W;U^KXaot<95A;S9z z{X`r@0`?RF_Ru%@+CiioU~W(|WM#WIP938!FR|DvohL<3yjFjk&&!usG=}MjPV}+D zlelT(V}z0Ni>rYhz&L?9HOL4NQh{XI5D;w9xVR+L7{<0S4oJZrAz?vYw`_naF>Y!j z{sPG&AONFr`O~gJU%g*6fu(-{CHLPD(h-<3AoW4L!ZSuaGKQAdS26`H7wFQBX#o-oNA1J4 z26e0h5vT^z)aUhYDQyZR7f=;e(UM7uxNfd14Qpf`0{pazTUuI7HUJe5sWcS>>*Hbg zSGSa|Z`GD^4t7`;e63B z_w6p}D%EHc#rm-VF>JJTa>F(>dU<%%Yk0M_HwtRktY_nWAC#FGT|(Riwrzmw=Ka-& zyweN1w{P&qE9-=R)dT;wh87rK0l7MY_)a1PeM?)scS)|5sC9k$LGr>2{>aNj_<@0J z3+Vq@9)UP|R{NWnnTgVeYW2&lO3JIP^YbMC z-8u>2xA~UQ0eR?PB7y7$ieLS?`875^IQ>G<_;zceC6K*ky}h;lt%3|!*Wd#5V{rRy zHfx>p-9QypH8v@3Wm!+%4Ko{|g7v_KN5ST1_tIPVvxJ(ahyr%!bO+)OvIP{YmLSQk zAt{85r>D_b@QIa|e0`a{Mf8{N>Zi!kiy}NNY4=C7#yW?#=39DuVK75yb9`kOl$IXg zS6@q>+-tLo2n&&x^oKU0Ie24u-yaFqPe>S9iD|h zf`(}8^z;Y){62rR3kEp?Ro~ET>y7*bio2RMf>3?mad{& zLOVF#0jmer$gimo-qafEfBu|Cf638fAwoi;$CISr_d>q+DiHqBg3SAg{m4Voxg)5I z{)sczV#m_5t1HQ@=?t0fEq$l&?BYICc{-3?LD*Zxdz&o&I>qJef_Vlk)PFgd0jmdi z^ZXooEf4A2<|m|sQ*YsF5x|Wl{;)abn4b`-58)fq+r|oj_`0$BPH@+pJ)38>y3$29GkwUAc6!@d$XSJwZ!JWxPHjtJV8%BV6YS)AG~37b|EZ3{P9LJv$K z5tRi&8rqe5z6f^E&0W{#O`X%jq~doAIE*p^>2N#-!Su4hBEq<`E*$l3vFV1|7~R~@ z6mQac=8`1v96oP6n)z)<)M2)Je~)+x8@1h60^+R-52W>glS|*d?hx@gp-%RNzpG#S zpj0?GAd;SOHWOV0DVmy)+z zS^jLxlZ8$w+%h?TWUt}$Jn`n!ak@Z(j?Kb+yng0@tEh?j+-R|9C2F4bAs;dNe4Y84 z6K@Cm#9|0JpDSbMhZgRrpWdTcg^2Xj{DlUXjgk8%!&&=}=C14v@b12?F5f?+yi*DR z0O)=`RT~p=F&vs^*qjpf`mk9sUFwQ)tbr-qESs2fB+570ttraOWymU4!s?cHTY-2L zTK95qTc}9V{UxBUA|HL&m6?WAmPE@^{iAB=!nK4I#fAzjfKi|3VX!m25iw8ELeIHX zh}7{OW%mKnw8{O09uu!ev@IFEshonu*}oeP7=xYl`J>i`7_2?lGXK%sDZPMs;GAak zw438#0BAG5{41H7*Tsi&*Xr2!*F`SOP=HdGHW%71qJTU;4F1|10^{;Ub!7<_5=N_M zl-Ntc9~FJq9(&=v?J2enXmO>y_PdKVmhNt}fuYAapI?}UF|EWp=~IbAdB5oIp$p>I zyLS@_Q*Ll$f7lauMMYjdK#6dwCTK)?_-EInmR?!f_Aj=OG6~!h0-2jolU3Jat@JQp zuF}{q@6{$Li#5{BkO})CnLKH;CH1$I!AUvOK~Sk_k9g75o-ya*uYoRTm7JOic0i;2 ztpWrJe#_z?b-kLd`Oca|kvqF_EsG_aFq`}mW)XcyRpYEugbtj?;T0{32qs8`4Ub0V zc|5u*oZt^(=y}9vm%L^08Jv-LR#5<0ik!sJ|0BKsk+!0JeG@1b7kpb>-;2)eh4|&v zr@{P3{xl7Q{j=vZp=j==a3*SLM4t1GYFp7zQI-4Kdejo@3v87CbTRI0zjYIV-KlvJ zT!q^@tTMc{4telz3>N_7B3B#*?r89OFt4gq7bY$q%yR$247?$vT-(g67Dm!{0A{mb z^RYpP3=Z;H^gap6R>fAgMa5xIB?{dyraHxee8gHxp+9pRNwog_ zJjF;1&rbsc+Vw>^cz>5w7rf!S%gT9=%=`B%0IW73;l`hu+EbBi%Phiw=hvr{F!5s& z)wIEmcyWL7v*C5j8jI&6x+Nw^XSK?L11IOFKi{x}TvDj#YR&IpTC04oFiHOmyloa@ z_KvYGKFK*vhUq|uL+kcEnYnVzU244DS}_$=ka0T74Bnr~Hn?*pcEn!%Fkp8Mb;50F z2^NhFc4Ly9cks|T<)M7fKw}@A%?~TBlLarD@zL8=^1lR!>X2~w%TW00N0p6(5f+J% z!kJ(QWW99Hyb%^F)3DnHk9FNt0PtPkDG>k>mp%O2OqAA((>|*-kRdR@E}D}M69v$> zxqBA}y5WpLv@}YL{)L1n&A51>{QjCxd~|;Xkn+lUP+!ad@TR3;J)V(}c3vbfmmu5L z$1G$<<`SgH>=f9VYGXNX-`mamuFn}74&C&Uo>C^N``4iLta&EBo4%DeGb|gE7ZrwS zKOLL8ww9kgjm9X_=lVF+xp(5!-nvlYhL92WGp1uM-ubt@d&q`jMyWhY8NzxYHy`~; zc-IR+@NpQmsh-Z!-5GzLdBL%6&XTa>#e>oOxM_~jOrsaG%Y=c#PcqqWRv)+{+n`cA zQ)}6glcul}LzOdb*5t#Vc&3N%ra;r1E%P{&E>cGU+=p>OiQYkUSdA&L4fFCZW8F!r z!Msjsr=TJ%_*SvQ$)P*)l$!Ce?UX(DkeV!_>oiH~LG$ zFpXAs5D1vjFS&T#dqTkqGc+QH&%JnXkJKn@Kh0^ez9{bO9RA&q>3^BSaHqI#7+t#D zY{PZp-Zfe%sPSuE_=LQBhjG5sSla%p3F!4M01tUYrf8cV-OO<*qg+>D|0SZa%s;|q z*SJ)QLTKbhpMRz%rz@!!vw(1e=^{Nk21y2c>7QFLMrINqen8F8tZ}~@W(6a}JKwID z|5B#>Ep*%DIBWd^cn^HaBe=Z3(Y)1xrpd-kD?KZYEU_zOh;0XF5^BC5(e!?$Uv;QV zvGE*&pfInyOAD5TET?dZmHK`E`6?Jusl!MS3t;ZO^Bw^=;4*-0vI;yH(qu7j;@_%U+R&x<_ZQ8tjah#O@rQBGr54UUD{EA{ z8W7hEG!y`=#ry71xd@<*|7l{ql1}`n$J(bUG9><5O@;4FUl{-Oqwq!`u_ocp+lZ04 zw7S+&YUEdAJgapS>vVi+q!znkz?=b>1yz>8Zn`%3FtqR`(MK%@VCZ-gS1O0XHT4D|kj-mWRQn^t-g-mp)zh+2^kWg{!U+ZCu$9Zh_}t zJB=}N3`8>v{>#8d2wTQ8nH}|?H)D27!ceCgm+ZR6#u23yl67$QrXq`rq7uzebhCh6 ziRZbwrZ3a79FIs~KUr0_p(!L-GjZ8d&)}xWKinh%f8no>i!^&T*8kBQ^!TbgWj{mM zoN41ar}nC48N-pPz84pKGr0WR#q5b&g7ps}AG(8pJJGu#3w8DGp;-$oTlx}lT8)%$ z9&@pj8{xcLmd8PGR$U9$2u-~QO8U!$G|r13t#uNx0agHKXLbE;OEsbj?9_5_3e->t z*l+y?h*+4^cQfyRDFl>1d~MGyF=?B)IpeemIIk}SW5PbnXNYp@R;3~7hFG~Og39(I z+Zt3PDv{K^9+AT-{24;tbqv`hS{!G)2DrvIz-$~z_8Bkr5iMT>9NgkPX)zS_y&lkX zXKrlye%4-?^t=;2$}_4MvvMHYmBk>=ZUyZEf(~R&9a_})Q{AHI!X@e+)phB8W@rw) zi4RrTw{unVQxsn}wDF+c?liav7QF?G)x{#GyUu$=o-IQ?l)j0=Hwd-*teudFamE$0 zyvuj5tP9~VMwy4%`@{{d(W^T7h#258WxI>V5Rg%Yy?XKyUN1oewV@c>DYTZ0Au2ait<1ntXZC1?OeGrEezVqeJB z2a!;K7em4;H&qXRfDA@Q0Aby!?QnYlIp4$Z+g0vMvcdgRzfy&Sh^d#29xiL>(n#kT zpKbDVd+g#*@sULK=YAP_Jd!OoEG9%H?q=xh&Zm{jEaw7Z=V(+9R4oB#mxIC&vG?G_ z_&g6TnkI6mk2E#Gp1ZQnseJ!EAO`VtXWZZ4*ri-p~zL=nlv^G}T2xW9RH^WQX5@%sB|4 zqRoOthmi|}#ey06yD)-5@(bH3G}tae?CUTxy395kH1xBj2qi)1Mos%*$0bzFS9Z9Q&kH5;q!DjgJJK0}v@&)b~eU z4yMUO_uXN)r&Q5+g!_(1pv)ff@KtiDa1sU5)i4qhRlV0I4)%6TiTJ}r zpSC|dtLFp|Q)P!XbwgWZy*@^Tw`roSO^ag`B-j2NANBBv1tb};_FwZ^smh&wGdoyX zYe#A|2~(<$4GgfFrAe-FC5TRcQ2IbY4T)9rHtYt?$f>BUps8WVf!RN$5G%@N^BHF?tblf>D_E`vHH8un;i z+Ll<{h|G3dg%H{;f4`mm4t9yj3Zva?6fSA?cFwkW`I9+xVRQobwiJiY*I-Kaq+XIi z%VV4;9`>lz@lzbW-n;JaGTID`_aoGqlN7a9T)YP(FLT|}5 z7K@~B9eRP}uI30Vi(~5BVaHd8CALML5hE#@6@kE82kWRNgcmHb!2|?2wHL{k+<5mg zh^s#KZz2GzD0Vw$EhD3%g^{KXD7q#+5_iBO)#92{3m#8s{PXIPvQA6Enu8efeJ$)! z<)6jkq*v6z4nQ^_cwU+ho;;8ShwCVR7CGai-dXY-Yl{70IO6Vh{W@vsE^5^fmZ#x~ zNi|DLCRezfZb3#8mU&^$mLrcP_!DNcq{`2Bh4%MDJh8ICxRKkjDeMYuki)z{R1Qv`K z`}6`9WkRIQ&)WrD0e-Y{{aM_JjiM@zSn|)pVirB3P!F2D;%ht;ZxRBrNW}vFL#> zacfv5o6UwK#NQ9^&BlUmq-J4g+SO6&)v;crgPq(G6wEU~f0}|8=RmgLtSakzPFv<& z`dPxeNAg*(uV^jNgULs0)Y1Nc{P0P{nQ#*px#F)KL#|DCT~R$TycNiWiMWF+CAWrx zC1vvV_s;POABeB9Z^<^vDm^Q+>Vi+G!=AaOXRju%xK#_91cW8wti>MWw`&7PE3nyO zs=_$*su)FKWL{^FL!|DI3EV|PiMuBhjH{xs>a76Z;8&(Plo5ssR88-~&zmTe-PH#G zD0hTve?Ui@&A5ErAvH4oCHR=^TOj^#&>v+TNeVnlx={6YNfMijXE$8~0X=EG%@;G_ zuG1#2#f@9G<_$3h^lK(3mtUe;x+X?tXOB=|WXty|k9i5WeB&_wkuqlyGnhEV+Kxz& zyr?sKl5Q@N1M}JUT`a4-S?(lB(fc_vZ@l9!ygiM==XO~9dTF{6fFvh<^8%}m9??JO zL7v5eV?8-+^yW}7?HDUeOE+0A3sy6xjuO!k#}5RAhqp>itn~$R*L|6Iei89}m&N(0 zN?pUlfbqqWR=B@E*~laLUz{J1;3N{XZW%VrBXM!6p+UfNXHLXwjR-=|aRSN?C$Y#% zV4s42n8y*oo>h(9%q!R~WgtNo1+R=M9s_Y@Gd!b}(Z;p&6VxA6Jd!bji06sY4}yH3 zL*5HR#8M!gPb9SMw}Gn+n&k(BPj}Y83|E_oe8!6mgIQX1o6Z~jSKfg^WTo6WEgnyI z$M9-a?xNClC{skuue#eHg&{2UBr>biiUtSKm)5`H)eRtIwz6x=lN=txU6HGLqn^ll zwpjR}`WjZ@&P4^2!X!jHlzCi3R=ktmfEsJ+1lEAPxS$zts!r&KFG}X-}in-7oWQBu+leL4! zVJPj%GS*x@xo2~uEvMZcm8YSSXdh48JN^1|oM5=!*v2c7LJYqRl3h0+*$o|s38`0n zj35)ESLU$=*p3`BpaZQ>&bR$~w6qQ$Rd*DI;`y2vCOwKJr)ii4qj$=6 zRj0mx1EVr|6T^0%a}g{_&`4^7RbrwgF2)NdN)4(nY!;N)bo+Ul zQ=zLvY#v9>M{4h#sM8=-X@2chpVBcUba^bE*&d`;3~eV&;$r(}d7ssVer6CjBMyrs zQ@)VfTET8^8kPOZ>iq{v)gDK;``6r2ld9~Pgawf8^G&L6n|xxgrd!cu=xjN7=5J)( z7I)oiP;H<<2gOlHY7;q~y1j`h*2x5E1R!_r3$?v9a3b>OYM!;gi$ZgE5_z-pB;c$Y9e)^#D}KzWCim+QmiB_|Z`UOWDbeCHT{w*v#+M!WtfVed?my`nQT zCACzEUo~}6t*2{Uh0(i(VfP}NDJ+GjFD(OpG%Zx zL+?E!y-)POS|Fq)f;Ko3;wU0RO<11+J1XFwwuUkO&!i_r0lc`O(&j=HonDW6_Uc zXhDTEt+%|Jr~P)|7P%nSF;{a@8SlN!JDohy0p^C`KGG<2^A@^B8x%&&%e?G&YC6QX z%={H>YTGJ8J0}(nHP4A<tjd z@}s)C#_@hH3oB{C4wQqY>;;UU4}+)dQrbj3)*{*387239C0c@JK!PJeJM4w`FXWt} z6q_+e^pq~z?LOY;?dJ?t_N~JlVJlo#B~}smhNas<;ToaCV$KG4C0>SZ(N({jRI0|* z26x>slW5$XFDi}7(wpr>p<{+hQDmd0>-t6ND3-Otvq z0FX1e(|U@ks(EoyIetN6w7hbc_)=!Q%x?FsD*iiS5b6*2s7jivMER@x!}s+Co<^5m z2Gd&`;+4Lgk@dY3YRkUMQI}-??qBX95$Zp*3+v`93pl(V8ojteoHP$ozHjq;KSacd z4$uLu{HDi<@uDlQf>C!PyVKH*z!2(zm!3fqz!OXPi>+{KtuSz=Jc$Hfd4@MFVs8bH z?FTvg>mb8iEwHz=nEmn@;bGe%_8X0I}Cvu@U zXM`kg7^m=_8$=!XQ8QCS&!yZzC+bE}%h_Ecb~n(-2%-y97LyK;#|_yY;XHrBe&Hr* zovkl9Joah#(vFbu2fS{;Io;z=%z#WX$l6E{$4Vc-ZfjxEl?Ykk_GUGKl&R~V znTunj;^nuzEpV3EZPzc!DM02H8pntfHECoRx#tW|^?YP%t({Jh#)LXn9C&q$zEvp9 zGo5^d3nv;4OzJ|~(nNLHB8}SUApfxrscMl4F(rR={^|-n;ZoxUp=Ndghzt!e^`op% zb>+nTEh2y0Th>B`?^n!6YMkKl_tbZQbQ^&~{5S=0C51cDEJf@Mz9Gk+-?fmJkLH|x zJ#gg=yHq!oJJZKgyA84S4cW<>G}eHr3z;sBrdPAlampq>8f^$y5GpGHP^*qiBF8$@ z?RZQ*UoYuk< zaiDiCd|t^2s59n`Ig|w?Y_K=%Ov-G@Y{_hJ(X}+!;MD7P{Y@M6g7PGYm-3{ule=9R zMxLsJm3hjofx8AJ0lSh*wmFZ=UJixFNQm(@3i|^+|n2iiS(|$GT#IExxwr3&t7TV2kO1WaXHV%MR zUus(}qPEebYOdd`iOO$oN&9jsqdaB^_Np^F*?&cqa!&e-b1WUUO+r5_yl?jk>2f<# zp*FP-8jEd*l}3!uaj#Dj2xw!-DW3V%fX&Q>Avppe;t&dWW9&SPs+ zdcjWMJ6m=BVva~XN#n}$SZ+%Mr=JQ zdHG6q;l*Gi0;ZQ)4i|Se9G&6^(HA~s8IqFnd+Sok`Lvm62N-rFiag}`lQn#~Na_Qb zpwpD4Msd$yeLDi^mR{a@&oR-UXs`^)Gt+K4;8g$2XDl}FKJuDY$qL{NeBIJdI0*6) z0zY$MEQb>ozK-z)fD&5$f@uwr;Ctxr^&Z27S} zw|TC@trk$09spjd)x-`77W1%{`NyN;eAdk4ANZ;Bwv+$0*iW#l2S&l5`Nqg|=8G2r zPDkHI3hItLXmSJ)d%C2D>18-Xz$n>W;q}IJ9K`Mwtoi#mPw*a?eLQEp%~l6M zb1Mn`$766X%hY+C!O3mNaZ_ML$ZkpB@KLZVo1deBZ?mSSa}}6?H06dtuq^D9ib@i% za2^=%`4@&qAn5A~er(5uT!&nu_qyPo>~dtb08+^#cWKj=kjlukZ$5PiLQ$Yi!A^Ov z$S#lm{^k8>!I(&ik|dM?QMX}H+MD90{&cFIab&C*HELh5a8glZ;>EI%d#a&3IRS$B z*ds>F6@BOc(-7wn;7J2TN4!&OWe(+ac6@B>;$5G|oC*$lc@0rAxU7Wx5a?3b*k(Gr z=z6m6M^xq30MnN!d(z(3Yk(rzYil%Ewh3PalRhCf!jgtkrEIJ~w;*K8f;Ab|QN-ntwI<{)jhLI#m(HChmfB`ze{ZHU&`2f`aQ40mP>E*95c z^jWZj>9UrX`LKC8{}00UYY>zzFc7a#_>8r*q-=vPRG&@{#mfh6q0xCZ#_YFBHye&J zrb`M*<{vg=tu#ncSuZ6S52Os4$5}2M&8y6p?Q`;* z!sC385R&DAW29oRN>bYX_MP@VG>n`S-E~Pv(1K zXsY=66%cnVAg*M!h-^>RBR%a&wR@$nMpjAc4=5^W)@E5{;6c4JC|kWyXx;H2Jh(p6 z-CbU_QtPQMrJKtYcFX=w2wH3oJgNBtT`w?5IX6NlMevWCH@=;&ZVti)?w`))3$Ya)D%vCUzW9A= zpVolH1%BZQ`=$nyP6W(bybEwdeIoO2`a8o%D6Z2HmWIuyM>+U7+u81E1agGeOYdxT z+MWB%xDq^Dbh!JHBIpF8&X_hz9avT>#5dj@Ij>rJ>G7fOtU)?6H=;*boRnGEaIlr> zpt;nB{yui7RlF6ZzlcgW$wR$Z+7eB9D$6xy(mtMPSRE*Z(l>}gHO^7C;X_-(yp#Sz zp&=9$E8?REu~kMnXk5yAoqfH#RUyY51I_4u)&Ls(CWHgIljaZ{M1w(QQ`(4?A%w|gq_WE9V2K-d!_1~tdtzdj(?fwN(!J(4>2`-mwg z6#ihkNnQj)MTDpPB(+W@c8R#Fy7ZX?OB2E~RM7&WW+Ze=Vkgsb?R(`}lJ zB>Qc!C;CM~j0u{cxP`mbn2x0QG7Cye#ejr(uF{yJ-4sE7-`Joe=1+fEKt6sYy zgl&pv(x3`9JQK=iPNlqcIHRctPva{DsxKhX^$Y@Jyo zhhOq&de{jq+TKM7xHygz`tf=2U7>*_bVfJRU|J*-D&yFwPbb65u{ar^Ua`s#(@{+y z5`s0iWwjQ{K<$T4RC!dz^xT_Ux1btlV%FfW8c?-1`;KUJN}M0O!U=$43YI_@@Tesh zkKqw#w_7VJ{?E0jVQzc?onTn)&q}PTWc<0I%bk*K2}$A+%uWD1X#WKK2?koBc4A`V zV>smu%rS!pN3%u3VVtF*@C)>H)C?|@@D;lgZCGXfd!XKFK_9$J8d8>uiIezo(qpAE zNqNzFn%`bc`1@EADL1SCwGS3mw$J=)+&yP3Zr<;2B2$H~*eV;Z=wv=&=IzZ+xUs$< z|F#-V-tCaCy+r8oth5R?k$370ApzY79Q)a*v{RDDD|K~h9gN|${J|Ies;b^6*o~eD zc%xR@3)zvXL2(YnQM|M#Y!N{3i`981;ji6Y&PVsHb5?6Y4(h@g_+>9_xYi#Xoua5! ztE!|9!ehbXJ@*V$MMXRW5UVfa$ZabI!2Vxknn@d(pI6g)gHB*a-t@QQtk(PbVpm`y zTD+D--`8>F!Hn=$nm*ld;@voz!$K2!6&f1x>y6;D0_sPH^MCsBHx93$iv9+5nSz9v z+x=|4jZzFquq^|&wz70Bq{W@!MI(K85tEL)bDHi6(ptp3hBQ!{1#v}W#~l^(HRHb1 zgZiF~I^L3`%=s-k6Bnh?ar$1Ri=BZCC>vhKPNT9n=|THUs2_$_V(B7E`7|D^?Z*#p zoeyRyX~~Y$?>dANMxK79FQ0T_Y3U|@>3hb4p$d6Wt!V`#6Njnq0$A+KHeJc9K&Sk> z8}V2I7rP(fyeN0hJcv&VqHOlS(n)T`+!WP{gmvv3I%nsNDr=RGO6q)B2&z+*IT+@Y zBCPt|@6D^^#`JP;Bd3+;Cd(0Q)PiO;gvj`ZBv2B|mUyObuX5$&f6s1`-*#nt>>-1m z;D9B<@qe*(552-DO}l^>o@Lv%ZQHhO+qP}nwr$(CZGAgubOvwIzo3&IRM%Z~eeRbo z<6C6P&?-{_Coc>x(Q5jYn)O?!`BVty&D2)%=yrHkWqsf@%nMBCJlPt%HUaA0#n-nq z?B&iKdE!W_X8BvP^7*Q!uZ^Vf%v6bNK=6sKuJrHm;Wx_x4hW--sBr@JhnCmnZ}}#{ zzGgNdIf76Iw{N&eUefuK53nC8_gg-U5tckE;H)|=ydM!HK7wnkV;BsJp6D(S&^3_( z$EA}^@%(Ue(|;}k3`|AHc%7L&WcMIN(p?5F*}14ovljP(6JH+CJ>U3?4xfSi5(GovHQ4{65IsD5Y-GgO}-Bz!5xj&BJ`~y55z@@+I>!f1Mq*-!mQr&%9o4#F9nk;`ml{765_DqS__I;w_1@j+Y;i zL+pffqUG4o*f$T4tS7nDt~j9}Wv5QOgz8mi^kI4lxHXF76IZ$Fge=^z^e6DbX+kiZ zJGnV%B+X)lkdiy!lheS6#`ozdHu#)1(OY*K6XwY~m-q`X7bj*G*0U6{m(W+QtdL?; zNZZYHu21HrJ}zmjGD>iEz{oYgAerzmT5$zFoiWD&%|xoD${>wJibh^jsqwpV~e00RlKUZT@EYLN|DvzO7}ZFM<>!ao$NosdJi6aQ=$eLWNM<~HJQ)$+Ub_vV zWE*%1Q3h`t*kT=vt-mSc*h%em5q%j(+G`(T^@lt2xdxsLCs^!L5V=I$dRe!+HTr5> zWHeh{9o<8(Q=k;ESfaHg)`PTrXZbZBqWADwS;exBnj2?NhR$g&9rco>Zu5WF$6T|U zzLV^hL!y{CI@e!eEU!=Qaz26Cty;Arp(^Mh z{l3YMS6B?T;cjm$yah8k$w@kPPFlQhi#$KpJbm942HU;PSwNNlAoqk`Tc;wIb+F?( z`Xou+y?oWBI#o!0Q}hYLbw1IFdjX^5k>K=oNKrwnJjVbzaJsOmnzTfL;K;HwBL~jS zh~J$srY1wj3Y&_gz{iaBX7HSh$w$&Y=!!!w>)VgEz-E0*#d_9-77LpUKWOWqR3Vp8 zXHSd|RQW>|AB$OSoiqOxKwkgOK3VXA*|V@MaOciJf{x8DfMY*CVIR4tBJ9$V`apJ=KAnLQ{r&5%s2UC)MI%n_*Wymg*$6=aUH`+ zO;0&si1{X)1_Jx$O5QN!UU!&N1!TH|tW>jtT%m0L%;Lwm#N<&EY?^pD@~gjoO5f<2 zBlz*op`@dgjt>_`?Qjgw+s|FY1+(_wWF&GV@;ss9uFZh`WP1Hub22a9+ncr}QwF+=3YFgnJU*xNPO zhB1oU;oDA`>?_JRGAFN3tL#fkbzZNx@(P*H=(wJFb%MOJ z!L=XThFm>(<;LL7*;{kNaJ7?#%%eoxGq=%CD_L3amzTba$Vr$LFgDd#vm~`lV>VyX zay9D0@2_K?H7nXb*aCCU@SW~_Ey@{LW z=mX6l!L4y@c%iCYNZD6hmsGo@?=y&@UY2*yYfaijoGuCuUa6MFT1WBGJ9;dNlEmCG zf}EACbWJP$CI={&zJq(Hmz1+)Z7}KKl=(jIgebxkE{>{C_nC`)YSAL)wZc3S?C7w6 zLSy#}dG{O%IG0q1&3b5F$teBRp?nLnqh+CCYCn4ePMh@D7(yjv=!5c?xjrW!Eq8`P|)}j?~d(fNGIeEkmo0vOrYFik)de zxgjCb+DtZ1Wc+yS+uZ|Paf|3P3$S=6pXC9Nl`e1TsNMyM5L&|yw>FlTkzi^o{qA7F z%`AXH;=m~6?W9W&B?wbgxn3(nT%V3@T{z!N#{@_U1>qZ<_bX$Euhre4yDhsq>`QfA z043sUH7uG;#v)S9sf3d;Cy2}4pAZ$EG@y#=AGuwJl$`!}_!i48T2L|&>u6U^u z9yo^nWs(cz@>Hu&JB}`V zG?U$=Oh7h>-4|23Ffe#~O?H48>pw$TEg++6T3+_7=fh z@+j6;DhB&$FK)#ZenQc}j$FReXvYJ4C+C<>Gz8Y-$ymGqUI%SC1<4-me}Hr-TXYq5jT_)<_$kqXv%9TTsOs`;Be08t1Quq&3(A;39mL#=Yzz3_)pwjWwUGAsxVI z2V*)I)+L=2Nkp}YY)C=sir55v7sI0c_p7gZ%IisifibldA#2%|_{vlISU?R@_pfcK zL>UcDQ@{-?n64^`a+36xQ>v6W?jAfOx3RAZ$q?(`?eNq9IC)}OW-bBF!GMzNfb}@I z6#h=oZ7<8qbO4(+!${}hv3 z%ZOn5m8D+>kjH+R?xAJ8%72*7LqDYqPN8>cgKGUeDwfedq@Icpp~;H@9gspaic{n& z?ctZYIW>z6k>@o7_r;?SHN^H=Yy>}Dc@uE)KIt)WEB#Orn2Tu*d-mtw85JSJ+<$`A{R&j+ zklVZRZkbnJJNino$~2E>-h9D6u)W_%yn^>(Un-<_4+d_fh8rDZ3+d{|9diW1TNT>R zgxSGi=C#K1Rwnc2MSa$~6b4+8(DM&p^?ot-g_9}R&vS6Ds^-HI4|Vj&d89B@DcT=@ zejW^Lg@%h-;*E?yiNepUo97-%5*`i7&Up=9K0E3Nea8s=ydvGjimcsJcYQPi!E03U zj9%U^wJl@c2eh}W(cPxgCr7DZqt%nLz>5F$Oc1V>I>ulf=gJSvY7np#w;1lngvVWY zwyIBiq7Q|2E>?_(lNX9Wd3l?c^51lyz0-B%Cd-$gMa|ARx6lu{!Jq6_}ui_?u^-Cec1I0QAGf4)9Ql=4XI)GN7W<7YrHEpl~N@R|% z@!@Q!5sGJz@G@!N-x*}f=wnnO*>w{PU5~3FXk2h6$mp21pt)8m>b``Rz<>z$!%LMb z)r>50***6}+ybP?bV5)lk=3cK0fG6myaED)JgIMr?rR$Ehf*lD(+CqSG8dPY(6@3* zG9EeW$gI%qPL1JY_cbBN-T(G8E+<@ac}!2)v|Nvvs*M)j zGdL}cdSw%h?f+FOK+X{mpmd;61@&UOoWPW%JUH=?sv#DEz=*#T6(Ki!z0Td^bfw<@ z$H)}t@^ARwrZ0c>XAKgZ+T$=6<}vep6{^-WSCgjmorVJJfilEf+gq6LX<5Rq3ScU!Q)u!}FG$40VCZnM1?gwAgK zr$!c|=JZ0k0hl4OZEh6=gt`!0A@y}j`^kXU9!8gO%w6NnOp1!0ayicO_Y{FPbrH`R z-r~RAY+4_>(Z<-9kePDEPBJdMT6igk(JSu!IS>UfatWX{T3u6nGoiWhBi^H(%wBiJ zS-y!mcMxppj@9*!&~y758^A`Tb>DfuaJv(ZS)wQUT;~hLutqCRd_}xPh~`YpiV$CB zXMudW^3?U7-;r)dyGq`*K9h3Ms=mr}Xg(j!{o)@ENGZz)2yvotgL}6agqGz1RSlHMEa5vy~d2FL?aS#5{yIr;{A|nsc%q0Q8!Ww$(bul_rTO2{A7QVq$6&MO|4o5 ziz=T2D$OL`2~y4@@yr-XA*T1JVFTDD-A(euheHe&8x*`?{M}!hTCeu`oR06#=(Z*n zg?3RF9LH0;3bDQ+r!7{oA|;j3G!>yM-_;-&AtmDZ`gUu0Pqo@r{dXSTDkVz2MQAlmmL5WiKjl%z>`N zb~Z36iTvy-I7nk>x5o4Or2|3U*8jo;6KrXBN_@%F7{`#lSiH8m#&vG9X!e89ql|+? zJ=m~SwRk4JBr_x3QZkB@N@=z?^HP8cK){wm1=(*^ErcAn3??|Sd)OLG4{ClGjX^+t z$b=@rCNaW^r*U`Z(sGoK*(J2<6=Yn_Og)7ue;?B`&301zjW2l%q07P*enmf2Ayx3k zSHj3%5_g`lqW~U!152_-&21<`J1)V?B@QjZn)az-rE7-Yo58OAK6L&8D3isMfHU;Xlm7kr>`Q z)ihiW`QGZCUyMdS<#=ul+A8HJnk2Jk0q>|!2_2?}128Ydeof*`@4P@1obC6^XLLo_ zAZ}g9s2_MKn*aL}^g66%-2lp~50YDL)M2%*W~Mrn677Da5V$9Fmd7Ld?3R?r76#}3 z;#IHETies*crdNnp!dU{SyHNpATPK7gxA+?loGh$Uc-Kv$e`=-w=K4lkG9%w(l)0P zTfoJX92m1%@C*C_LQpmI@sNBF=yjgoT#tJ|DAb zzU=l|DsG;akf4G#5q#`^miDjQ3oOD!e#OIz9t)Nz(Yp98z%#aLQdqRTT~;qoihYHBaC!k2!iYSOCsw_&{1sB zZ;4y~%;o`VY7+AoxVFxtbR*@@FFG!e3^BFpIA}( z#>y52`<}W2Ztt_e{bbcuUhRw)7D%!BMj7Y<7QN%JetiOh{oC~^2uO#hN<5VR6oImW z`8|_!B5K8wa@ls825oJG`Q=6xs0LL^<5tH*K`$92py2}ff);B^nXVIi&#r^_E6BGO zFYc;&(sLW1BK`&oAzVY{SCFQs5k1H8d^A%PH#w)JTo?MGsAol@o>{5~a09u#)UcoT ztFY%FR<=Gz;c=TXh3exTMrjcCa5N*mx@uh1xx&#b`UGGdw0>kK+k(Zf11*G~wy$K` zpJzc`dBk#Y5qf9;<-wle>!NQBNp%?EYGah1)}gn4idZanRGb%+RBPu;1ZUbKIbmGGU+=0H@c(o@bBnaO2(q3=;NKRTwgT!8tr@=mp8 z$Yw6!Y>xaX7NwY+HZL03mk0fLNC>LE45zW34g+@T zP=G_7T!ORCB;hge2rVVcrMZY}YdkgLb@N%ePq#O1O3548_0j=@2*d!#6btrq4w=YvAAjDLaz6LH_g!$*pd3$Vj=bkt3ge;4D=KyJ|!t!+&ugm+e8+ zH-Gy%x3$dZk6%AR?#ikYO5JBUnug;D0lF;F9@D&v?*wbsxx~^Hx0zHN;?>+{4a$(S z*#{8d%kxI3h8%zw>a|^;E-}oX1Fp`T+M(3qNk+*hL)Fpm;4#A)z5-p`4|GWIw2gSx zB0|9!qS2bq6(!#K)0~lV{pZ13U}GDB+8c)8znPXPr3XI9DvbX$px(`W$8fbnnFOPF zNJYS;9ZDwBsQ6cnBhvV&-HOI21GOkL6{ugYX1q(#3lvC*C6d~DY^V(o>V|Eq`f2B#&_7g8Z^U^ z$WmFMurA9@f}a>?eLX{i-$fyx6Ft_z=spiFHua-|3?$Fhp0y(G{RT@j3AE+xsKpJb z1~t5l8202(6jK6tl4uvbK#eWczI+ZmW?cM*BThs06Z$^4ZX~Q;v;RuVoRv<6^6h+u zNg_IiDq5$XX+LmSvT6V$SFjY_sDndk(!lTy)0_|L^p&sJ1Dhp9;}{@!hzb_ z6>rQJ?TTv|;3s1mfA%S5HIKp)Q?7%W)pqdcaRsE&E!KiqVA>tLG!8Qv7Rc(Hcaki} zi2^o(Qocl2mg#78eg)h*xRw;sxCK={fP6NrA>%qkpgvrPvo_BmhEI#?Yj5Ys5k=hI zt8NyIl7%e;{Ei&qFd7PF^Yb-l%2EIy*`_jDlKq9TZ(&%(Cx|mDL`x{$a zu%ELgE-T=h|CVhS)`C2QWGfy08|LhPuX<`IjcUs~9y@JIWU+k4*_9hQ}U4>O3At_Y9flb&oP&T0t4#=J(>*wHi5xb(f>UsQ@x z;n^#@Ve~q`@Ng_za3u=eGw9J~)^klIrA;DEz>fKxj(xajdy#4m^TZWyn;-0vCmQ-% zbz$n!z|y3dBKQ3+?~SuGEd#-3<2FRH?%^iX68F zx@EX*)I!;!9JN;k%ygE8)Zvj+#DzrU0WC0^^$YLX?2H51FvmKnMub2bpUS2N((@=h zufqnpqzw#Wm6|DwKX%z&b>Q8ZspaVyHlA2#$=$bviZv0Wy`=*CJT z70zDtCT}w;UX-ru4mLbqYO~^_r8p>B_J~~4*BQi(%gcAQ4a!9t}~X0|W7*a*iekrrT3)!ooBKNz_p zeq%>Ikx0ZiIG>U@r-kLjbs747R!V)w8$C@n88HUF%kZ!~YwQ&2wBL*g2R1}PRNnnW zD;#Ylz<~Vnq?V+LF#h$M>I-}1u2{YDfTU`E7*1k(CIsk4Q+q!j$@&h`~@V! zi1Xynqz&0932@hLqUVQdDA>6?z{3J2I1FLQ3*}5->hck#+hfI&*h7%WA$sgCiN4=D zL%`T8W%P!_#|z5E;FS2GB*~FaO>Yed^NM};m+J-|vLE#PfQ98zn3ST-k;rf;gh{&% z8^cRvR^C&rmolQJQMCvF02*G{G90VVV|GZ)WExES^kw6lrj_zKMG*>EBIgkElK$pk27JK@EOZ) zYPP;+*OZ^*e$(zu#$23AROB%5W4cpelFRe7HCQA8C8)Q*`JuBAxInB>{D%~oJJo)8Zd~y%g*|}crw$_uc6bsKuFJj;# zPTV~g`LlJsLIw``l>y$2S|n7W3}&~ZWTE|dN)Xkv&zg@j%l5aTC8me4Z*z5lD!y-w zsQ3fKH!SWt1QEuDAwc0^6Xo0A*sOvlxr^e{iBo|}D_`H7-H(*k<)D*;-GQmWovRSm zUT6rSf!QBFcUhRKtEq3obpD3slc>sL!pY>kzrIWmC)z1wM2HG^@VyAWK`JFT#0Etv z8he*}%hLAT;Ql3H^0}W&4e>fZY+i=J1T#>!c(=%wcR<8ffJ4DYi7-x{B)qwI7Bjm! zE!QE2tBjX!XYZ|pe_6dV07)NTZF=&%>!fm|zwfx^C5wlOJzkWm5Jvk0vBRT1mO4we za`h)cE;7h45ozb(NG=~MO>3$0Fb83-f;0)fklvD}+Rc%!53jd!EVGqQvwQKcv-yny z+^>_Z!nx?MC7Lgo9+=2qV5jJeo7hU?8o&H}nBeo)2IwG(7#zH*D#xvT9 zn0^64>8XRXy~p&&5rV9V2vCvhrC5Ictme)1EFu4;QHlFwrh^W*8%us&6)citxHRMVg*1iAsEC z$?yeHie3Es$z2g~-2EU&bq1tNISGXBp-nJfUGYbIu!5<&D41l#@GYtBcs?AYDHmb` z+vz1Jr=i@Ua?-D@*@BTt22h{?)kPFE)8p4eHB=}csYyUybL}<+?2Mw6$w#oayxB=4 zBW)xbiF?NsLSX|^X1lN&Ylbnp@g!gKfg`<3`a{mQN_^Uo7vz5uv92SloO+;Ksnt)3 zIY^cyo>YA`fzZM4!%fa^cqc1z?(RK!?QnlKLC*MUO^>zoIC2uR(Lo~Pn5`J{dD%9z zE|k~E&}cgto@-x3`nBetANi;7VY)B{5ctonPt-bvybU7(;otGoapCp@dDoD>`ak9(q-&rj1u>Noqj{}06PhlSFlmSDWdI6Z0pi@3qU=4hUp+|*O{%5-{am5T1 z#i|*w0`}`mof%t=c%W(kM?+n_BNQXB~F2(T!f1si1V-N%UEhLq;Ce8WZ!2$0>zD2d3H;#sQ~AA9`LdVc2uKmS8! z4Utz4nVio4aU8+=_2R8u8XUCaIIlIHT(zpqt!UDIeQzH;ZMcrkeSsYnpF?gSn9Ka=psUy-kYbV zZHZ)XuH{glW+`HHZ`R&8_1hl>qu;;Ma^Dm1ajMzP-8Pz2h}5AxOq<)eL-RJ^-B@QX zO)!GOh?Kc570Rx)-BP?D5X+`+_Bt^L20TB>=V=NUIH6G_8K2 zo4?hM8`8^W2om4#FS0d_F>E;M)L%w&QV^h87#BHYS`Te<2Du^|D^T$Z%hs{GV?^V+ z#cZ~s6-Ftap?xeuB>S&IibEc-7wtjmT7Bz=nE_^vvSC+*@yDIL6~TUe93<=0TKnfC zTowA+S|X;yXDKWDfqIst!yPp>L#^!Z`rDhTA9NXq5Pyv`z1w%)uZ&!AqdWXg<98lEu#o9(DN>Bn4!<+n=IpK#n zFy)bmuopbCQfyz0EgUsUYx^H^E3|9K&9Ff5jxwW3DjB9YQ1uEgMXdF_)JcDc-m~Dd zN^JXOZ8&a{69hs2j6f%CgReUU6@VCEY^}>G*6|!%k{s`P2!x5bxB>$Zv|9IZie9-PdV!@P!f-`b=}%|s80^p&)2t|Qz^v`f#!2PR`An{ zx3;jryU?nokLA^yjvskt$MU@ngm!GtX*3iWHOJguCMq8B_!glAN)|tgHX@fuEC`a4 ze`}`+?j@4veS!cQew=si)=VknQ8y+6U9soIGOQr8lCYB7%)cTJu6jcDq1_RVE_Jwd z+R9@%kNZVV#^v5xYT<@ILYgmhhEys?^wPrjZWppRn>P#ybMmw^xO?L|a;L7-c+r07 zUh(=W9KRGfVF*(oGT>_k4W09O;)WviaeE|+;HxDaUboxVUE6ao-J_O+3 zSfo(emCwl@vRERE%_w~}!x;V5Xo@d$|2+r}MFM?9YKdU0(cR!^7&>?myLO*HD78Zh zIj6LwG)1FJC-Nm%w(a7D{l{?Xh<)rP&Y{96p{s(Qzk_XA@@QI+i)9ICRZbS--wv?^ z5v7`)E4aA((v-uEmBEsx}PtdX&Wlx|%iPj)oUi>s-bp5wTfXZ02>_4fz& zMPMpgNc{LFk9~4#_uO}8xg-8c>I#p~8e;NAL4OcnJ3|#yuXjO*HMp9EL<6n8CL_#%!83`8#(pqhFb z!HtVuJ-sV-^Jc2o^8-CM1m9;0j}8zLu~=5|g{uQBNme@T_=A?JQ3)1W-aQry*#RX_ zh})x{N0#%E?V(P?6F}aG3Fe#G2x%IVNGQ*;Xe^y7cyp5la+-uO`+yis>*RhPT#{7= zLu0-J-Yh36+Xp?6tE^N$B&;S+q$6?PfH6HAmmU?4F+Z1; z@P%T;AoblQyJenzhImPkV5iOg4C7NUp0lr(`rlQ6I0b-u-~w|=ItYQGVKwQlu8V~4IMpW<;cIs36JJQ$@V z1_;%c@dMQFY44ldeMI^Mf-@9{^pN&ON~=*i=xfKrUcRntg$mPTG7_g_MaSSlK|#4m zb=Qq7{No! z-Px733>lHgSU-)qBYYqrVJqrxuUPQ2%XI4q<@AiSOGJnUp~T=Z(kihvjE>lyViW_S{M^TH_q>DD=rG zELI1xPLQaqcL>hXeT_g$FROkzXlGgl7%a6te}vH{z4r<|Xo@6w0_v-v+ltkQx2zJ^ zz1-5|fquwBcbms_fe1}M5M;%&19uL6YPS?MPMX~rdhQ88_`gdNa@64*t<^D70I*`t zOq;^J{Q`6W@;E4eq5?ZST~Wq8L7^VJ_D`q-xK$|{CA(h!yp0B+sN}!UHi<_1X&#ld z$#SDsYMm4!Bqhc@X(G*!;>>%ZSP9^mHyX6`r8Ig#HXq#5MwL9p#}4uJ=3~PR@P-7E z%8ZVc5D1~(?)?}9I|g_1L_fKP_;X0!nRd(oL58(}RU>iy>du4rpMs`B3%}_w*DHmz z&R8d3uW)>b9>06mOFpg>X$U3|q6B0=yJI9A?HZIy`6)VE-9)e?B7~L4-09atnLg-U zCY>0|K&ULEaRb;mtYWvBH=^VN(RO{hX2vG_roE;@%NsH+)KMo*_XguKp$d@PC8>39 zsKh5XivI`#+(2FGZHjx8)K;KS5T9ch)*i%eYYXQveEhA$72`kC=v7uz+)f$GaTga! z#A>q(+9``B-2c#{9`Om(AL~3_uPYe=KgxFBj z2--P8$J1d2{b0!IFC6ob3xUrkx}(qfg7nb@YxJ)Ikmg>Dl!}QCUEuc3Pja!(yvCss zG|RXsyRC0SYITY9Bxt&WgwBgA3urnLJkezy+&{1n9VrMF_IUso29X4N|C@G5YQD!e z#S2i+4X^3^El?T&+nd@*5^MQGs3H9)q${q@@ulz?F9xSiRteW!l3jxuRI zRnVQXM8H9eoVJbl&A$Kw$_z^wl}=;FxDKb0i8vAOpY|r%nFuvUvC_YDK261&`rBF-O*D8M=Ij#w(Hn3>%Nh4+ z-W;#85LV*6av&=sri*iox&SG3wKTz|t<%m@)jAhe0z&&Q;|VC35jPG4~y06Zx&PI%r30195_&7P`Xl@|`!I zt`VP33<%@ETH1`Yg6bE8{7qk%(x1xyL%?)a;SxvJf{;_1viYy^CmfU`_OP_z9pskT zLLh4(RHdOVTYxOfa^F&g?3Nme+&BT5#w3TOF4O!e*5F% zUjy8SuqB-ms-7{-cRDgIbQsh!@)Am7gfdHLC=v9*xZJ1L-J6%QKIk(Kz7$?`KlmBh z_t?MH$FMBT$@%_(ET?{{jMc3F`ZATmE+uv+9XvdTc*cdVVyVkj$5 zlGn;OdEjK#6iaL8KT* zOlNFJD>HK<{Hka<;s6*36v00*!2hwj-TDY(cQ60#6cuO{f(Bt#nK=F~W`V~1(dcN2 zt{2$4lp`HoqCnvk%5SSOFxKK>lETsbN{H=OHySG(o{-eH!vE6O?jluNsNvw2Vkc{B zf`~OoY);Gs?-G=DC}$ck4&-$WuHaDKIU-$alU@WlbCnyK1nekO7b~(_TI@sM_MYcE zl3p`E+&=)rgBcMOpegYzIg6p`8zpP8qw}M4C1gv)gxXEf_j1lajCWMapkgVE%&wsc z1^$@r4$0s{+$L$Tf!0$v|7vRse~019av?$e9)jB2?*(mX%ZT`StqC zMhi_ea>oqNGG3snnOR5ks#YPjGusCBY>K%-75WC*-WKY7OkFfitJDn zi3$XKW%Yi9pt~tk_#VHm;kL!~zUQt*ftFAIzLKl#{`CQfTpXbTPSmAny~BP zL*uE6j4W}>R{@l&T_J>C(DSs9e7tg)U9Fl!) zzg2@rt@6>vINoW=l|q1@;9(t=4AbYJ`WCz2P%Nz`C9zXIAFa*bd&arKE~a{Bz953@ zI3xu|?wfY9f4F;5Czsxd{NC^ZUD44&>5`gv7S^5<<}Wf;V_6ub8?mtg-Iz zYu{wyzxR}!A}lYcno1ltN>-S1R`CpY9ly+KTYvccVIx>Bma-)z=bK% zx;#tScGC3pVpifWlC`D6i;gv8>hemiQV+$77W6X{j5N)qVMu}%Vrx0v1VR}ZQalh((*FVu56oU&Q4PNco}u`Y4iwIPo@NQgvzeBz`U*u z+r#D+l0bYL4sB@8Q2;+SMV3x=*qAr{`g$%H<&E{KJ#9yW73vUF($&AFrp(Y9YI{E= z0MuXXhjtzj@|~fKsXI2*L5DI9njE4*YY^P6DzSB3siXAn?i@dzGe7J zk?X>P(dWiF9D8?^!xf3%f%|)W>358IEKo_+1U1?oAwU;_Up_m56JxlxqN*dH?C$5i za~e9pnZipdaxHeHbDgqc#&Nb^L{IS%q@5khHfC$KIyf`$lW>lm3%z)`o}l@9Q5;w$ z=06RF1mAhQ?+4ub73J3~sYjxTv*-CG8}p>QxQeV+9d|d4(v#1p8j%B62&{fwaPkSv zVY~U*-IJZvrBH%j`V+o97s_t`)E$yY+JVb*Ol1UCfs#o_9ZCn|=F(H;LX%-L=7P59 z^RJFel_rgbKtIi|8ix6e9|9)`u9it+d-zWw_eO#aI8j3YR2H+0v1Q5dE>h(yD>OFl zhj<*0TnH?V{9@G_neZqy)xI56YM?E9-Z7t)Ar&Pa$}POwzJ5LsIC-xSHbUI`Lkg5C zBc~#Aqi|=S{_yS9udLj|-iv2CN(L;}i4|Pq$Hco-; zc2a;F@O^6)^dd;%3mIPIHlXuIy|(82X>@}GSK~QTo3A{+fqzyULdDL8f$45uJif_Z zFpUpFYO<6<`KOfS>NVEj%Hbf*aznzC>|rVbW)uX;X;U)_^A33!<~M_+m0pV=-(VM} zvG{&=_O%BT$e^0uE?f4FRlcC)(i# z7rR-L$05ABtu#6mHQ{K^lH|vd+_~BU_O)@pTY{t5&vR90W?M{47ZKn1PsmHV&d2mV zI!-&jA-Bd^335(q{rz#Z!;pKD9P&J_;bL%7&sw-s02+jmr{Fb5WC9;P_Er@l7T>U^P60bSd4pMWa0YJxikp4V6%BNyd}%O z=G;lJd`N7;q7#bh%s32EywzqkU!`Rk&eGTc963*m8}_OzS!)|Jzlrw#fbqEAbx>V^ z3~1H~6{j4!Jj*M$)>E|w)^GCNCb#uM%CBdaNYqjXiL7Z)4iF?MkZ+hXaBrIu*lxBv z=$$^qBX`uR=qi31AfuZ$n4jtq4G*!cNo!;^_UCnb$v1e{S@Ukv1>r(YtQ7KzX1;{aQ{vMf+frJE2ehR zP!rPw-3PkOnJ<|X_X$;ybJ{ZTH*>1CD2yTwFjuCFBx)RGq_qljknQIDf=aeV)rhK% zPL#ERsvuKyv$lVFd4^{jN<(Xk{?Q`+A^&8Hh;a^F+IggBvD;mRCqAO?YJ1qx^$-#I zAiIW_l>(>FCycOsR79b6nOpWYgsie7yEw_|b+_Cw^-!odIZsq-@!;+keM3?C%#ps{ z-FK2n{}8@D)jdX%tPyh2Vhzo-@4S0bpvDTzoLmi#^6xhS^>2cHh&xRu@xRcZX74sF z7$206Em{-V-p)8U0$Khx*zW*Ky#7E_^jZE=-YhG&L3Pq=HmrPWG&HqHo$kBCkP|(Z z5tw+AMOX2E`a^AAMg3p69)96FyMdM6H#_)$sCTo_}=}susgAiih*< z6UY-at(EmvExwo4HVdm=Z+k~3l#JWiQ=xVy=jDS=_?4txWu;|_x)$~r&OG`ZBnv<~ zY#wYOYTN0LDW@jt>5AY73H~Ccb0^oa^9DF75sv~tjv$%(LvHMYHUZN)D-`8Fi7zAz z88kKqNcjg3&j^GP<6gN)SaWtiWtyN%!}49O4@`ip-*dc~)s~}d%!gr+g${&-n!2S? z5t$pQtYn$@D^t)MXy`J^_q_(vkRg0499F?Im0A`rfdMjK{$JySC=0_+sqi$03|dH| zwhSoiAi4rrwx8>_liqvB^EA9yqlu&+W3<=cQV4|c1!)7!J>=|kVJTC?DIZQH(lpmTn?xcjo6N?IP;+4lcXadeV z&SLMb0@EvW$#AFG@g6)lXm=2+hx@K+wjQ{xlEREcIL8e8o;6rUNiyb)hcLpMf`rnmnAt1vVC4_JkPo#X$9RT$Yh{+Fx5#LU3)|5z1#NIFpqYiAQjd^%BU17{Oq z6C*og6G&cONGE4U69XGa_std+4{qhJFFOT`&rQkk$D90yWDHOusfq#o=%@zWt8@;d z&vfGHR6uNN) z?zu0I+_{0uE_nxHP;BVULHIzTeVA!LGRTn7`f&wtaENt!Vfy}#0D}Lb2ypQCp`f7X z)T^0ri}1*e1qAsV{PY6q04T=<_-yFMz~xaGpit`p@Z(|*pzzc{*_>A^$l3FOgW8bUn?dAWi^!ky3$><^_6&8fKe`HR8^5(4R2`Ge5?fpY`F zvJb?U$3dO-!NEZ_m|>CpGyJ*EVcg{>Y?b?GZ`k0_Drs?Lq){H->HnzEtSY<0a&Yy9 z99_wP^UHAc&jei1{|Mni9(c=(*s}#)$vVE;;~_o|-2lM(|Ba(jJ>hLP z%bWJQS(=k4!8w_+0ywLK4>GN-#YIOChk=8D~Z0C=7SVcUzM z6Abg82&?Z~133f$kg?*_K$62YhL{P^Qj%Z>Zzl9b6bRxUW@l@-@dE_%*$fpzm>TA2 zYi9${#=sP`lnOX6BNPw_0>U#J3DLzD@JPY`s}Aw*b%&c|3;%m#-7D7`IM4cUFg!H> zum2Pc3IVdfXa4kLwPet|@-JMUl?a@E16zJt7rzz*E3-jCd^XE^Lis0I+A+M=}(Bl|C)15mkTqaid-#2R@x{@$U>5E@)qz{Irjq zegi&;q83DGeCf@9{Xoz@X=aUnIrzgC3J{?m0AL7^K5}*u?LR38uOS1UwP}+^>Wjz3^+^<93t`{-~!`JI`=Tqn1B}+Pu}_= z5^O(0w2be-d}~RVKt4YJ`dny0Iej0!SQWu3%=y-q7uSzz*J<9C#b_S%f&nNNBp`GI zDL~9zSp+?(c^o=o1V1z&4ge@R%aX7^FK!?L^S^zF1a^OjCx$~oECj$GeO^r@_yd1w z;&dFsQ8R+1zJd&(zhDf&Pi{=kCDLc1N!->8U8*IzV`gerwxT( zQ1dG!d9Kf|*W(Dgf|FQMiX6l|0rCT39kP*YNKf#`_Q{>_$92fmO+v$>Is3L&n8 zElqE7KzwwNMFt!=gH91ebJ>~KM0ZC6tqY)Pj9;6Mz>>Bh+lbg8n-@w+RZRnV+LKQhu`T28k&SJPohkxXezj>Cwz^-L*`?vm%i z&|9i7A`o7YQ8%Y6*R>z4dvgyP8&y9G>YaKQ&D%O3Oy3fhoewC&xIMD$q%)^fQJz$l z-u%b*n?Y@3PibE@%p1xIqnDoiz#B*!SSSxQ+KJEDD$dl~C=PTsPC0!u#&3C5`jiKI znL7%6-Bc8wO0EHWZD=d;fmgI`OiO*QDurXl0Jl){i=&eX;2yHHct3$#{u_y-tMjj+^t zfQifYJXIfGB7S(N&!33flt{Ddd2Uich}4%FY~#S1MP7{gOPdynWy{t3qQxn8KDO~| zd9xfZ!DI1wQjr#h(T3mdQ{xsYwRSfrIimBBAHSFwCUt7k+l{}?*cz%$pyw1JipJNvTHfsT|6A*_&9hzLlG*YG&d+yZ)>teD4oyXG$+Me+ElgEPP>P zbv>TODZS)y6(<+q8vl*D_y)7-IPZG^E`RufpgdWzXYO?Zi9RHR>LCq!-!{cjq4G6{MIvI{Qtz8EPFV4%tn{Umt zd?}{%X_LkXmx=(FDw|UyQ=hBzJ%csaxh_?bA5|KbIMM~^zm;j0e7tq5Y$smQ%9+=s zlBaZaB5&#mr?Sf`TuN`%w2?{`lBSJVK#J+ZNEs#-H@K4rpsQ0iG);@>1-kU-IKwqx zS1!V79^q=yP&vq)>pz&z1X++Tl{{l$UPt~6B&X%NPN4SRBO4TXC|~$sN8-SmC}rTX zsVAkBvfVq!Hed*hEoq}Wl~XpGCVXl;+~UGPst@Ho0?MX`ivPc-tS5_A#iKaXb0SdE~DxKwKH;soJ&h=WnrWhRouh#Q3d#?b!3SQ2L^DFaGzz&_-h^XC39`L6qYUD zMD!Vze>7b4pdFU>a#vQ7!5XBKOV*f&sb3pcONV}ch{}Fb;lBlGS*~`fpttU(%zh0* zfzH&9$15F@2`7Y66#fR=^Z6^RitNf1f5^p@ll9hm0pa#7ta9Fqgzh`#S;+QAGZ%U9 zxvvmBn(ASQQB5C6`m9NHAD_G2c%$5%e_CZktk|QO+0}Q$gT4@*K*_re+r#=vP})A zEXvQyuF3CL%s2DEn-Ji}=)!2PSE^3R%8iq6JaoTJgK(6ocj%lCI_1F|7Duho2HKG= z%}ww;spjlk&u`n3vz$AowQe#f;~yrdIWW+QL-?DGYtxfY=y5eyM6a-wUBk(&?L5+$ zOY$@j%4c|H|MrKID&}0Zwt1R4PE)a6emlhvwhe$<@lhP6XB9LylPaz=cveP3cTOFM zPbaj_xlb0mYw#*_eh)e0BEdg%bi&+oJ4kh@8py1kmR25*21!WmBv*BuV+R;+>Dw?| z984-T(Co7X;@)-iQ7a(exfggDYZ~kadZ(AktLOyI;U$!|45Z7cNJiVM7ulvfz*|KU z++`_<(A#ySq3ux@9qrUK8czo%DEr82G_&aG#>LI={rM(7eev4_%Y7_R(cAa;)y;fh zG7tF^c^$ZQc6U3|87ER@auRMTPZbqLFad^~+<7-a1L;_3N1{?_=Xcn)a*ROmWy{zo zMe@_&uph1rhsG6g)l~ujb+;u@yMxh!{5!vy;!N4P4SPU)Nq`W`Nfsr!V2icWk6UB? zxP+Ofuw!R~!DYUX9W5;Kmhc{Sl~OvFv4giA=(h*!GRe)s$N93{<|bOUa9IRs;e z!#wP2oEWYp0zYkJ)M^YatMX7_rQ-9-Y45cB;`X_N!sEFi0wZ7~2f}mBuExry`mls? z9)-{BE$pPcSb1*QOS9B*D^Z~b>6GOcek{>VlAE__OVYt3^oX;3uE^*IO{xsTaBWlY z-1qYziH`(^&gj#U^iFO?D@D~>2WEGX&gQ$Rwi{U15I^m>eHt8>nzM$cWQLvW@~I=_ zKgb~(`!u5*=F%z2O4`!%vg-?)ukR0ALK9lhhm&GRwl?p}$wTQgKTg%l%su!Gov`03 zDGmj795xm6{vqe?@e#3Z9rxm4GyFwWY2tBiPJYk2RzQ0(PTOP|GVZeq1rE*KYhQgb z9sn1WfrzPcj>U9&W^#Z{jU#oZ3--ggxc^q)6Z(b1?HCmWR0qqs4221exmF__-GWW( z-(TGPH^yXj3VKf8cXfQ-vX-ZiCp=@%^-Ub)ziebKz}UsIZ#1zkiYYBj3Nj;z`u!-J z_)<(%Tf2@td!H>=C;OMDRhA-UucZ;rlhls2n+ji*?i?@NPbyP31?VoRBkBTtq-O(y z4K2d&wH+$y_%BI96}?D(e7w5r{uF!3ObI2G@J`JeaiN4udE8Hma%Q95_zwPnGFoh2 z{ZB~8{NDhbqMNM|A%l#*xq_qBF9vBsCdPlWn4)I(4vvJJEdPHYla+&!?f;78t~Avg zHpJt-S893>{{F>u(!s$)*(=z(Qtjv%d46_|89+b;SHM*OO9}M6tl42`5X={s&YkG^2^QD6|#Epz<;ziN@UV6DC*CGcI5Z9hen88{b>c&j}!14rVE_{fkJeHy-NU z%`A6-eNbddeM4PgRL&dRoVp1L9RpFRp1xxc?)!(YF7`1kLKk=vlqTaA(UgnK>4-!X zNbXh_n9%j_5wh&S7f`-#FGwn!E}hV~Z&{(7iQuB7CRkV*u+!iobx^qK!Y&6g3=qS9 zTizFf9;6=qbvflrEXxc3>H)pcE@>s`z02GFmYFul`|GaH;mdNMI=C z!Gs_nXars$iLzfrX)I(!!u^pF)V7ck$Q&TEa(uIffc<&HqO^A z8rP^W1Iq-rnC||lMy{d01H80X3?`gM`Ehhr4lbzuG`~OO+`azo{O+`*xsznEni)K> zo@HCsmE5>O+}Y00vR%)`eaumQ9`7zyaX@_-ts%VzlQS-MNMVIO~Mo#qMaC7++NHuY(Z zJG8}9M?55qs%17Z3Q)+u!=F27ecFO)eUguaa;OLAucVGt-Q~MxG{t3p(Z)<)mZeUb-xUi2tU#%0HWkyOY({y zixR|atV3BKEjdj7U}z7){xZ>3s$~J0CuewkfVh!4$h6)O0%V``WDm|^qk;=nENQpx zbR+Uhj#xk#M=SOvMh&yLnAmclR;t=~wOh%1FBiW|o+J%SaSEu#d5-{?5ggXb6LUVK zZ>Ue)l*v9~Cb2IcmcHd(9!VGk4NeD^IJZxo#%j6_e?1alQIg@0v`p!YlUjSt{Boyp z@$$92zTh9{Bu1l`;+O!79Ph^+uH3f@n{3!(6rhpVh_VF}loXz)lqSVtRW`Q+YS zU9uJ8p;!oECQ+9RxH@PJp5>N5`*NXa`cT@~Ry8jWR?eUy%Vza@aAdbxd699%mPU2N zB@>>)%X-6zmz66+G8>R1qU&ELO_pT$j6jxulo)|*cXYUZf$A8URX4IYT9RuNmH$e( zRu4%jv!F0dZUV@~pq`x%j$%A|AHv+1j$+JfA3gv^CxmzpV^2cx8eMCEO7R*K{~9&^ zcFnu8Nqp*^65L~NT_~S?nR4W|S>t8U)wpQx33)gTl%=hMjjCTB`VC4Z1;^6O6Ebza za0%F|D$eK9fjKfPHvX_+6l1syQBIS&isTvKSgYnOa~+_?{2LfnATYk^R51*-Yk8##DKcG%c-Zmnb=fhQp%bJxwe|$? zFdNf`MzYufjpU10{p3|9q~YmY4LTNzZ2z_(CKYwFL#<+0O~vJ?UT#hnyRYc1K1v^YNd7#1qq&^0_M!HpD_ucYoww}e;N7#Lg#%B=DZINpzq0NR zfP@Ed!%3xnwQF=`xDcd`)%0dLcZSN3t!%H4V^^|oZQW^jUw14W-dorOfd~EmD$cJu z>p+vVnSX>%?XppsYR`7^u*>L1;9|GEnS+nhXiMjxm+wkjfSQ ze!i6Yt@uZ&Hk1l*kyIuJG4QxMEN?xn>+hY5c};0Z%$abwHc{c`{0s$xK@A`A2N};hTcB&fv(54bxynkaN!2II0pI`rwC>`{abX{+Fd!4>cHb z{dXv@OFrBnHD@zfloEl&isAyKQFk#y3GtTL+9@?^^elDMO*!J98K&4{P~}a($8atr zh)p<}A;2By)uW9Fdq3J}<>NT}kZBQx9@5 zbPFb@rFq7ZLhShzZ-T#*f60I)%PwHpNndjWC#7kK+m-07agg&wGG@C;8IKwVFDq1t zyNwC6D>2hDE3N)61WG)mi6WA91K3iOVkr?riizY5kWs7wcr~*0G9q0uK>^9CIl%vmj05SIQkm(GdFDt9u~$3u;5wg?;v4AOW0F0x+;M4 z2Iiy~~C3VD9ForwhxDYY8EKjTbwewGHV~A6#Ojm-T^e zzFp`Bm&ysdLT%~gJwSso%><^g-4}grj7{uN@NUbjSh4bFP;XA2)@jrD0xp~XgRDRy zJ&N4?mkyC!?@QP!VNbq{0jN{_WHuSiODS0xcoh2(ZxWV&=3XtHvv5})9brQ0H57tU%Hz`13m6&<^o{1UbIfpuyb*d}#Y&;}QLIAaxTXBxpY!QNXkLGTNp z@6Bl|kGo!7A}=5!f$pfEF=8mFAttee&r30^Kg2WgwA5EN z6Togi&v6j;6)-aP(t5+_-h9=`I(lGZrD9X!lF`Zz!XB>qt8f2KH-J6dAt7KmSs#dT zXXya5&T*2?shIJSm;BCEjc90r_TL*8NF_35qTsp!lu+31MCH*8;f6TA<>7+xOIS>T z*UeBQI}bah2~?SyU>arpWgJ?IJRVzc6tP)}T)GWYG(A4aot?BA-mdT8ExkmrkC z6w$AX;H}|(`RBH+CAu3w5+IDks=r2y^NZV=FzK!7mNwV9tt^)|X8j@iG6+Nh{rR z7s&XF(b4ffLk8;Old1=N=qhQQtQV`ivvc11W25Zz7ojBQgtN(KzKxoal{pQ2bLD8H z_U7_H0B^|Z^+X%fG^n*JN)QJ$Bq~RZwDC>_dDS4_)_NyqLH>Hau&3kg^-<1IWp^sT^AO` z3yq0m_KWqR@#EhSI&|Pm)*-r?fD}g9leMT+V@T3>Qnnhux5#j&0?Ru`-<0dQit0UX z>oshu2M5U<7b42F&k*OK1X@AN?Q*<_FbLwRBd5qf=CT>Zoa z!E>!gNjX^4hHszM8D<&mF)Gc`Fr9nS+p-66y`vibNVp|>8ML>-I{RM}!a|fGXz-|i z?9(Rn0>5*Uo;NAOj2WW5SNDs$)XKBjX|!Z*|4yOMB&FmGG~;K$g@no-@6n#v~>nE2AB_%U>q~UuBc%Edg$o*W;UFXTaN0DhfT1^xCdgKJKbQG z7)u1$;}?6ZE!p3_&H;U)qRSal2P_jF*W46z{KqY- z$?Tjg|F%p8iFTxdt^BV^wZrXt=&Zc0wVo-?^~9*Xlaa}DADX!e>)9F5} zlXSMf7B%d-*1<4@OxYzGvZwtZHh0(jl;!0pZY*gDj?He+|C%z@b=qXTeD|5 zp!ogn?HWGovZNU7u)flA%}&=qMG$hHraal*T2rStehu`TZ&c`**}VV#WOw{s-iMho z6}}DkE%ey%Ch{@DE8vwa$v`wQQ~J%}*8MXfGvnh0;-<~(;g}&f4hLd(bVD)=8gD=n z-=nRil`F;e-p(cH^zpuyOBb?&9TmL*1H(p8YS@cDef8jP$9#=OeX8U~yva_l zm6HavI^yIj^JT5jA7q+3^ouo$x@?XM$+?K{cz&23bb`SV!0v#Sug_zSkK6YGROdJH zt)Fkqqc<<(Z628S%;Ke8?}Q`GZ4A&`170hKU<@KkAD$+01^= zhEfZRayyKw!1wFMLrxAzC5DvG+ZVcafW0wS^M_->i1A1WBXOZ)RJOljUT7iyd9GU z!^zai9mE&(BYgH7LNe6M53u%+dEWozvzS;}{u`t9*T~w$(UgghnTe6(Kc)m`LJk(L z|Ho$i`}#izgq-Z0|7T*W$;nAI!Rm*f4vreczaNMyX^w7-in*{5!je%xz$&o-fDKkC z601mB2x!MC0{oVbg)a)+nSJrX&pCPR_W6#++vs{oIC*NDzGz=la}?yYUxtzlWd?~p z-h;gV1H{_Y*lVi6#<~h@JTx;>08?jY2Sft=DG1EZFYoLOP6`$oOtc%W%PI`g%i!M( z?n@|b8d^XG2HhJRnotj_NN5X%e9;1->JHRMXj+>cf)Ys33;qr6h)BsALxvgT1lVO~ z*$Zat2hxP% z>_ygxarOm4l=a0QM7+f;EQA3mJ>~bT1l@^~v}Evf``!sYhVHW!94XBO^T{E*6&aVh;!8?Mnj|=C9TKg~0(& z%hJ2ESX(Ab+JC143Y0>JeMQ=Lb~?H#@e6A;71B`D-^=a2>Q(hIA14 z-hz?d*5Z>WWZ6e+v}gS@ zrJWa~gBb-f5@YphhX*3KBRBh-DZ__;;}@`4pRDQPO*kSD>M>B8VNClb3+88vl%%wV zlp1v5NI}>Vex?|VUlu%WsI%Blcy}d5NhuXDA`%A3twB!;x01gG4IwUGU8P)M%7H?l z-btV+A)o6{Nbl7i6bI+Ak6RvNE8C+zMx|D!E5U%?G(95Q(9fZ+RH4s?C7~%00nk3I zZ>z@Iy>|0=QKlrzPZ1UmGD9RvKQs_HPcET0BPG}e;ZSaGH6jr98OUA#=h-U-@eu~N z>OkeJ>YM=r{8`Ppxh>_t@XQ#T0G=K^{*Tya&ps?+N@rUmlDJsyK#wP5BJ(7keibM{ zW9=LN-sa;*-rg1m63RD32WpgplK6Jx;q|_eOV=o>D_u7wWur*vP=~)#zv^-i5%m}0 z;L8MfpY*ZLW!;9|7+!Bh0ojYV3i;MNb5YuWvw| zw*rLCZ3{b+y~-~BgnCdH0>rhRu|9&d1dBU#V71z)lgBY4FnUyZxV@zU%e^sl5#Kn! zbg5c@fa?JFui!sr7+Dh+k1JQbFD<^`57}=)LZ+ns`1(K%!`((dP<`RQpdEbrL-^J| zRe7Etc6^F|OnbjysvgCfJ9+!@21qD@c99T|J2v5%d`lT~Rs@)OH7{zNd? zXaIrj!`BgK;R00uK&+D~^Lt!WB|b6b#A@NT$_dg~mEr>!)9&k{wQ+~hc2b-%=&kuIx_ro_ugS2C&*JTG&~+4eGaddItp zv$M?-DOeNLaTF%NTsJ$a3AI;Taj6(>?VK3=mPmV^A1r>iWFmc2V;2svy+E4>yAOxO zJhh%i7^I&<*+y(0Zs|o#nlyHu3rkN$t)$qJ*c(pwwR(>GnxarE~&pg8~)2W4tt1DmX1$xJunC zm74?*9FZ875|q#R!go&K+LAo!kJ%~Ksw^3sWD#t=+S!kcTwS8^@~Stk6Na(ry(+#O zHfPo-V>ZZWC>|f!ithEB@m+45653?&HBh$CSU+98&uQa+1EY}>#Drcek0*t<&O7P- z`eNocQ!2U{_@i{i?bvtN?lH{hSJLU|rOFzEpWNLp^f%XixkisSj}(ztZ)a?cHbZ0m z^DDZwb<0>~ztnzYE~}#Qdy?p+tS0ChskFw3PgTN|gZq2nTX~DoM>Oyt)Kq&Bjx1~_ z-bMDJ?|n6$G#50pf8f zSJ^(4C(2E)u7d%KoKlLzgNOOM%pQ^uYz(Zz;T`ckfc728VnJ3k4Hk(n1?{F~eWknd3ayfsa49URi+yg`z5@?(auI;M-GPpfBC)I`_ zO)6_W90kgwb5qJmX=Ih3cND2{EJt}vnbW4-;QK}vL8ns7#$@WD`LcJ(jBTb!g~6H! zBA7;v;MmJaN&kIP2t-0TG1T@X3JvcRDIE{7DTAKFua|J!>3w99RCO|*HSXoCWYSaF ztFl82x%m0|98+>d2VZ0EXKU0!fZi$Ian+z*sNv$#ATlGgd>w02{NQHgbU(qqxohzO zfS6`zL*^RiD7$e(FXZGqO7Oo;S}LV9f!y}GQUDNK@aDK(s>-`>o(lOz*%SYAL4+;pZs+?tjD=-f`uUs3rK0ZBV8p z;^pU^C{tI8o_LNfXs;_NJQiBK`lWo+(t5;OujMQf_cmZOW)d%CRUGo+^1!JG`loqU zK`*cFoz;1AEKup8Y(wYm74qz~`6LhvPL=1xR!i!Qu8xq#=68xw!i2U}!rho)tyL zt&G@-r6o%&i9d-wr@kF?TrlLkO{fZ+;G)%hQEx4WwG$^urz640>B+mp~7ybAR znGt^s2i~J$;QjDLk&HQC*#_gO&XW2b^26<(DV}V7@S8FPPI*uAhx^W8m(DkFVI2c~ zlR`d7SFbM=jXJdKDJQ#n?vc8Jda=)Bo|=QM8~I=)^czw)rI=HY<$GE&5KHkst&o&v zuem#0WzLpH3yH9*0b|{^D`{S;%bwvnd}?8RGk3#F@!);nmq~Y&M<<$`x%ZfS25peb{g%_eJS6Z!Ouk3Z zIXUHtY2787jqQ&@`$dC{7)_DRx1jwxTAaD9JOr2&z4x`+YKb_d??%Yx+OOD|ceAw1 zv+AQUVvE~8vM%$iwG4izp`ttIW0d1?+AFF)?`&A!FZ?*BbHdQg#lDDI6{Rry8d62E zER&OowiOk4FS6eT|9ZM5Ibb{$u6eIMaH~~xc??CFB}!mpp!eOy3=1w#SSCmJ*wACC z8g@nOF_NdnH=gzmvI2pU1Fg;9W7cXQ|E(U#+kuH)6*Rhp$0{PXQf}gxD#H^Tbs^U4 z!#jz5BNl~_c3|G@#V>L<9>mic2I7$5i}FkRWw4N&o&nbq{p5 zan6~Zd)k0d^w@GgY^c6_6@i_g7kDxwO(!kofAgmL_%`TF+a@ugt8V7>UKg)`oq{fOYK6j0)tdTtRLIDzdEyG-*qK|hdM1KdT7r9? zHVMaV-$O#tR&JKF5!*UCe09Yh&?hcn?%jDVC)Pz7Khe>#sWOW2UPPB(p7HkHWyBcz z-H7Hs_&Y!W7mdy?x^-lR$rK-fiAZIRNU#(MIyNqrBd6)lC5p||`s!kp7$(Ew#J3}g zJF>{<9Wi7EygM7xhw29$3Olsa&OYGpsqZr!;sYX@E!- zRwcTGxoZZN!b^hqCNEt!6`z5;^z{|xE4{*>H3V+7xAI2d%*COaB;aNf#=HFhRKnfl znfr@5<7rx~&>JdSVj&=1WgA-aaR!FZ5X$RSa|ir6dX~$q96C4d?6V=7%B0|2k?8n3 zH^*4ATsIZV;6Wzscgb*a%ai?J1j^W+G7S5m(UOryh+rGGQndvqM(-Px*yoX5HjRcK z7k^PR+0mbwCrEf}F2o#omWUQ&=yQxZ*y_{DS8^=$Ih+`qiMxlQU zvRB!R^ci31hc5vU6l;n7h0DgyAJZFB$Yn`UZ;r+76tq_;r8iuy+HV3yTAEx@N98oF z2Axw!_L8B=8G~j$$8%eb8_UkJFW91YjgWR6PLmt^N6&tx9L#8nC$CD%gmhG8$r=d! z3gI<@le{@R(l&H3y|iP5mBR;`&Y;T0W9uy_}RAZNej=D!N5mv;GZYj`R@)1FtCsUeN8bv?6<__WGJuKKfCfzux zjbWWlz-GXa(@{`0zlQPe`ECL}9;(R2<_to8Spziwq6LDa3if=G>q9DJtf@nSa`MmZ zBchM^!WpEOCjztb%J|3f{jZ7Jcvku%LkA)fhPa$Bg^{!L{m68lVyGDKp1D9dzKl9v znb~AB<)h8EK7%qVg^uD5&4JgiH0mfI)P>nfMKr&?LLrQj#*cL<+3FOsV>NBiY+X7D z)kJgfeZwToT3I2J@2}fcevZ+HW0i{y3~aBF3pZ{j_J&`3hmPPyZ~TX64EV`?W4|XI zIb6`C-f#no1x_RZIWCMr3?fG^^1`0f)F<~fxTxJ;UIf(7q>k>cawngJm*LznkW03% z3KOIOTT#(1O!`s*bv3Qz9?7gVH&+;8MG91nJ$Kg!UMK7A?bOXp<#QUJY(hq53iLNz zpR=J1!)CeHR+iEQSO3PWololNaq*vIqK`_G9uaXuZtP1 zkEDl2&p#A+^uZbLrd8RF_o4Fe*1Ly;ZB2{P?Mu`bL1!v8ix>ionY%PcrSz$>pnjQJ zkhvqLZC2^fS+^@n?B?v_a?I7wawC3{zc`R;pNZJ%^SIc&ap+}JH;8}=t*L2YP|2f~ z!C!sHu;1khFBA2ac-y@r+&ohjfLXqwxa{#8{c1B>9%9*VAo{14KdtZtM;hUiqI4V4 zAC-5r75&_U%RQyEYJlR31*lvNZnVk=3@%*wVUJnacZ)P89czH@#8CM1UZafuifb&G zmmfjS>_2f3Zb?B*#8#Zka$xoRUe@NoBD==8N5D&9Pc)4jD_1B)WnWzHEvAr`ADwZP z|1)JZXVadiWD5YjdDXxRZ~`f#DRRjxdmWGw5qBIbr$CD)p!G-}sg8~BX^#iYq_vWX zGolk_O1@mX;Q(5(!Mk<2Ry^yG!I~-6u}^juws9Mc12@_}lb@@JswYHA0pa$i7df4q z17s>M%Ka5%S1Vk*G0LUqJWi;T8?dQRDjL98m zh|@yj%PEI|j@sqZlni*vW6KgJS2Y>RV7D#R?#Wkld9d!`Zq3Dz zO~;yW)ngTqHnnd`?c!$7fFCvQln~HFti!rIxKL+_NR!z6cm-RRG+KI=X8~o-u5#cvi%Le{WB19+!x?jIqLY8<~ zeALi2?apUEN7I|!op)Y>F!#pz^yH|jQ5)gpZseMIWkpBa>iu#3H&K>yypNP)UBu&f zX9e5xt%?awZ`{FU=8Hn&srzE0<1}8I*71t_yWYcCXQ8Kq2PosIA0Rpwk|*qbWp6E~ z)D^iyL5xseE##UEgK+Cu7GtSB3qOb7uEC5&#fm_@Z7SUcX5f7TAmI_#-l(E;BcTiY!G+u-;sL06uFdItOdz@CjU>zJNene>C!f!B zBO4b0nBrS&h@pd$>}1Cp5a%RQC-l#b4jJ)qPLrxobV)>#i0x== zNMj4pFtikIwVv|nc`4lE9UoX(hyuNj4o!bIRydC*3ES`SlOEV!>ak(-tU zWBmK3-A-D(fEVfh6eh_2wnJ?TbI=Zo_9`O5eTHEHiNcQzeUekZRTC#r${Fyf_I3U>tc)5} zR-JpeJDXIMzN@7Wskvybkhw>DSMCUR-Yb=tL-dn;&dKmQ zjKH+qN`Fl=#`+E9FOY)cvG>v;Ix{YcDNAJo{s)hs%VVuG^zx3_*;Vz^h%v=saX*H8 zVtm={?Jz(rAMFZk${z>T5v%jp<#}3zajtbw^0>d|tH0kwD7$B>gcy2)!^GrZej9pq zAHfon{4H~89r0$;t1;jtOWUWhS)e?D!iu@#FTvoI^O~{dKt>k&nv9Xevo=QM_31Y6 zmT;&OC_m!j0{C#lm#|4;>k~#)7d3`j#K<=9;%MHK@?=z)bc9IuB>d>-Gu6xZI!lW+ zv0am_2hk9F_$&v?nV1I5FND^DGMg-kmVY+cHVcm|?Yr1gu!Bqu zoj5MwZWhB`&_|UFJZXi6Gxv?tZ7G-2iy#;gql@u#xu>DJ2_Ya{RQHyX(@=BW#4U~~ zTNl2f?Y`OBh@l&!t~wnrKhr@k?d*(FjQh|WT_+;5c2PW*r&fBuBR&Hn&0?$b^yPks zva-rLU|fnwW);{=8bs6>Nc$C<%Kq$u;>vd#sv)Q@fOyh1S(%>e4h5D9yFVt{&tXARr7|G!#E%o(> zPt_VACls@tY(WEct$A!&>eJ;zu(M4+5a#rD23~kuJ%#!hU+KF9j|-Kr)`$rfz2Wuu zDG2xWw$ODj?6puw>)p(B&&-Z}@g}Aex8O98K9zgfuqLKxxS0g=^v=Nd0(sqp6NM~T zsZue(V8lfvpu5Vzu|a@j%fYm(xA!^))Eg4U+o)rORR z&0gO;R+roXKYtW9=bzj*k6Ovl7z(?m&pxU~G`>2orzR%y6&Tj}IcGg-ZMmd!dtGs| zE>elPtZGj$VYF$}?UZO!@+xAfk-t6L=;i2;FaC;l!U#<{fd#eEJa z@;5UZ^qu%9rC%Ue&L6pyd5Q7l#oJ*%=%niakY9K>C^#EG0N&`P@P^8>M_0KJKlCa} z>tBu4W#97$8GAM6 z=w$RNc#dR$K*b0=1R#Xl)KZ;Mi8KmsWM9k#=bh(k(_C*8;;58BS%x#eClSV8GKz1m z*{RpJxzq!X2it}`7caO939ck<#U9^bD)<(K#V&Aipt7UHG%*E?Po?ZXvh8geaSsfp zs_zdSmIHaUW03df?i_}t>RSkCkF*!l8#~oIu$7PD6f6becDZsbU<`U?NnqE!Qy;;? zd(sK#AmtwTZrt@X&$;^I9PEau_Mla8&hW+FdE{DafcN10&xT}$RP-FV*0SXSWF0Re z*;x&w4m1vVORedVhLsf{YR{;Bd@lI+G6eZ@EnC;sMKAwyD$G0fAGbJgq-V~uSEZ`O ze1|z`UfuG{RWCRqo@g~eS6GgD39RK^Uq!I;MO5fR*W|2@en37Sx?4PYF*s=!1GMFe zii$!eEjqKJbP}Xu=_BfvlHIj}Fq_7F2$~y;>JaOO@_9w)1jcbY+qiOVpYPNyMS{RU z-ETi6dLWC!;&ez|w9)#U6ZEHHu~^Q}`vRzt39Zugw>n6b`{g>2SRL+*x$JHq+nVm* zV~4Nw8;?6fg8iZr?D3ukJY}HxYxwIp;=JH(*{0Hq5)2Mgl?urxP3iFIsb-o6u2RfZ z4#N%_y)a%}g)KlG@7Y(plP)77ZKpEYqD>}OeAhg}`QB*5csc!9+W!cY3Ad1)?BO9= zD~SXv>m!-CBf&gzx`m`AS?bhans}uLUaL35a-+717&x$L{rY9*5UBubF+xDP*swO9VW*2^Gdn)zMD%hQUEKSXSKI-@zhIxSC-&N(H)19gW z;;1n-(7Gr=NWvjPN~3jo-Rjx=xLKJ&H2`3FbN zNEb_6juYn(=WK#0aDfF=1`Y!+%Ajyy?w2U{oseeb3}!c@2+*F|-F3Gn7YAC zB?J1Y#p}EaKc+k7&raim3r4D`drFSI;{Kk4O5*Utuc6Z6=U2K3<&jpHaU)x@yt#u0 zEi0HZ#NAV#*KtvmKXQXge-Ao$56gbeF7ZWIe?aGL zYO?ZarJi1w?!M}9AE$mGQ~cQr{x_2e`~PAxVd7w6`;V7|nUI;C{eSPl;9z6?zow^} z6y10eEqT(D8bJ1Y!9BWOr6ne9T z^X)&axD?3)j4Kad-|f;A(S1cO&d&1{mF#F^$Mt#{o70tVDz1$?4& zL%O4*a}#pck>L=_8U;Bc@kW745%CD~|Csgy!viv51@VG`2xfD}AHj8XdeI(%M(M#! zFnZV5;w}&K{Y0@lYy$%HmUmQb>8lMbtblCxb|ruWIjnlqFZZcmoxzE~dUDuzcf$w4 z9b$!rxWabL_s-9Rd-cIgfNBLPNA+3241D^Eg9$;q0RRavHQU*KAi=Gi0ciFi-Twam zS#M2tNVta2*}h3|&+2bjc0`B<5a7cUaOOU6{Z>T0yo3V;dUixjc-@&?KSUf9QASrG4iFCIT~Vm8aM<7gU>)iNI8i1~p+iWtvEpEVppYT( z0%9N7Ps_a8VW2Fb1HyQ*Wr(KPE%f^!-~Z5Wyf~|QLFHt4z@)7&{Chql zJR@XW@cWPPfp?nGkP$OpsZj2F&;7dvGh1jM?9b0xPhndC$l^IXBTeY|C)u#B29qn{ zR#;!&8-sl3sm`S#@EenmAf$!w@)F0qMr15_#;`DH6t5&~-$3x7lTQ?pc@g+;!VI`m z9NIv^z!aTck`y9ec->4qx~@wo^`Gj(AWabAfHT-pgjp6=kWyN7Hr%3!QNYYBV(34Z zSrX6*{sn}|3g!@tOqeif?id>RD3~r=Ef+CFU zumL5aBt2&vVbtP|pcv%YuwgScc`yq@;eXO@uUt>QubRr|fV z5TQwa)@$o46HO*EDTzppm*XOo_?kuFJc_nLX&!|noBPHy-ZwM)4RnABG$^@9qrAMCk}b+N0*80sH!=(6F0=%rInNCqrv>`l1hF5r-Z7V z_Qn~lb*%7qL`h!M9QqmV7brp|V@v3fZAEGhmCFG^gB+jp$!byDG7gonqWP><*=AhD zm0Ue@Ei@?UTXH1Wn7yEnas>0D@G$t@b9jOAF!kZjMz%@!OM`ckSXXpvPKt9=jtyH| z6@*wd&eFgpxay1#?%YF9AWOWq{9H=gfUOy+XH(Nq=+Xb-Qh%zevgbm-MEX?w8 z$9scriw4hV=DP?FM_=L2?Pr3uW!m@ZqF7~BaEX}Xw9LlRWOIu-SvF(;ZsrAPj$mc= zEWYIc_?!X1sZU_Iu+@s_`VLi_RAUPba{F;&+uA19yR^b+zA7%MhQVr!Rk84nHfH9+ zAD?!wFaHBmrejz7VbPhdi_s%hhaD(JhN>C981|s8(c2n|9-h+Q{*LvTnSWo9sSNI; zPH99(<@V!e*5{p7)szh5YfmCzZ)qI#SZ~gEmTmG2uh|VYih+sQQIp~;hZ@wc^1US2 za={%qCE3ZRF3t13xo)e%gX8T7h3%kr3N1hl1)4>}BmV)=Ko2*+mp6M{20?3D*dF}; zs^>2Bo_x!ZJjV{zb~@4HJ>9{msQwU{3?as1S4TrJ!g@E$SyN0A zjpngZYWt;Rg-3q(*x5|$*{i;H@}=dMlI(2J#t%aSh7?tBxq`M5`qBA}>r;vDq`6uY z5|sKb7EjTv!XmdazJ}5y@AFF<o zi=16}{?hTOj2ieH(Of0W17Cu%zIQ&O!%r0U91mjptxAug9*JFLNf~Q78?#l>qi|qk zwl6Y@H=Z+S%e80>k6+S6AAfDZzLAwuJ5CLi`A=`7H3YrEV@s{6aSGfwOvKw&aoFF* zuO4&$ne{rS3my~9I=8+7nOasglba5Qk7o=A*XEgk6&i~>8a@@aK3B^M!aik3os@8N zOq~o=mw%dhVMDQn7c|~%#mRUiUGDGS;>q&8;T!c_?^odM!F@C{I5X8(4JdjIkp&nE zwAo!XE~tyGyO@eRsHp7K{ymwN{dgC+`gl)SFYmP;(b}i11;+_HPZ=ox!c1PYAF(bi z-%NppPcNL9Q}3sKr{i^$@nzPS)|HzcjQw*%;G172PXrcx+{NtlT|#NymjGeBF*qiq zViZg_<6wD{6)u)Y8~NV6w#huoaTeXH>y^TbqLDvuaNo5swF|hMi2aI7WZ{t=fCahK z92=jUD^@;*Xe8ElcP`N6oGYu?X$mg=fC=Qb@YP(HKIO2*OsaAn={z@Y%NvJvxewdL z0%+arn4JY7Y$9{RKT`-|rQbVO1#O;x*_z;TIcYiVo!LWn?Y7z@lkSf@UZ&N;=hBa< znDGuDCbn5x$a@G!)-OgqWmbCJemGY?#Gm8}yj^<}wZ3EG7m2unz+NuqJMri?3q)$@ zdYBM>%r=E}U z4tN^1juzT~PW~1=MquJ+rFY4z$H>*5sp@icwkX~@RQ#TK=jl9!`+oF6QCWAsZ;~dN-`!{ z?evz(c;%$D@wCe|2tJsX*eE-0@9kWySXiH*)W7y=>gQr17yrdiX5By4QGU-&i7B09 zuGN1VzVV4Ypk9p|s7Z~NbaE zp31~|OnmRlD=_Np7L?<+cyrhDgeBy=Roi|#L<^1y(_dGw+*e!AR&;GS`Zm@Jawm7< zpg3)vCfqKH@DMQ&)n9H}D&{hOOaL6&N*jR1J8T)SKbY+?2oee)LE4={kCy<7EVXM z? zBBI0I{Fq}Q^snB_+8ljZG@DsHM+V5AmOSERb5yLetEX9VfonhvrRM&TeQ?c#I+aNl zr?lAWFuTPA&8h37`q9svR3tascxIB-LyrrE?^pP)>CUwk4sIFjk>sMMr8uJxo`gYhS#aXpUSD`mu<*fR?+oLMc(p!%u^C`lzb7cHq@}>^WG>ZvHZAQH~ z^R_cgoq5}5muHoxq|=HOn=;#t@g^YGO!K~9^ye?iP`^puM7ml62hwoKeX0`MYucX7 z0@$bX7G}gr{<(&}1ZYvMT;)2xE==VQB$R2n+pRKzue^B^IiAsFyuOo)Qe?+@nM%uy zqXh~;hkzz+D z+w_i;tE;O76wm?1&raSYVp!49jZsjWZL5Tw-MzQ>41z zwBLeW92FB6bS415fIRG#9+ZKpp$f1@`+6oPFuU5?T3cLsIcb)ENe!!BTv0id96;Zt z1*{yaYw(dE(c0Qud^sQ^Kf)a5K@&ilJ0OaGO$nAx48IFN_BkIv=+(i5mB|H=J+OcZ zD**uyi3rfu*|C+O@%2Y17&+79twe9*usXm)$%%^|JUSP)AH^6D!EC`8kQ|UFe-tYK zCq0B7SQBe=D~KNrAQnHaUr9$&1}DF$w7Q~5b`Ge5+V=E3;?;&fOw_y{j*fN!sh@fQUVpTvUm^$)@iq>w z-<$k5+tf$jjjzlOc8mr_U{8EL#n|6%2F19{$XDHsuh)j@egbrCbk$T}We^~0>ns1> z_0F#yChR#rRuKkL4s!};SQF5(J^wV+egtQJ>YALIU*X>xaFP zO3;Ql04{cZwN8TH6xju^f<&sd^~mR6Tq`bwHQ=Mi-$8wI;D)-d>h9o7;!3iyk#X2R z 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

0_pfbP@C@(~kU|(;&-GvG<^jdhP4Z}Um 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%0AEmRJ%6vpmcZS{KY!SdakBrr zSjvOMyCh`Rg~={sSA8x8CjHx(>GWnCUfN+fIl7~emXNX=4OLOn<8*D_p*1Hx__m6Y z*hffbFO<3KN8Xo&PQ*;tHeS6x%k8eRLFNlgT(d3*u<$uIIBO}zxc{*+L!M%?%EKT;pPDnI#VLo$jIvjhIldf~D z_;clLq`cfmreJR$R=#;rq=!j^K9DmTbRCS;EZ-oCm;f4Ro*;`*VkWQ9ia?O7L9Wa( zP1$P^J(~B{bVWvMgB7WgYVdN_ap8HX^}yDn_d-Qe62tm1w-ApCq0!9HCY!Q;MFAt7 zZY)Lfk>;JY-qn#jYjVx2WG@(8LZii&-;g5Ahj+Xs6E4*}`~f$$3H@bD?xfZ!1;F;V z`7QkIAy^nvG@qv*j-aB$IfC&4Ys~mM zUA!Py?YT;yC5yhPEnncex>ae{&ajUQFno0xD#w(NOmd#$&20W%=PEI&q-0j2aSaA4 zqiBsgsyw>R73qV4-4(w)rZF$*k`uq~m#g^B5X3K`m$5~j)w-LE>RHWV2ZLLYD_Dupdmj%qoDyq z+ThaC4vk1P_6UP^+&5-~zSwIt7jw{7^u3(!9j1yT5} zS;Y6^*JmuuE>aLHnMR9gLu}7#+j=LQ+$Ly$Ruc~MO#SgmT{I%eYm(CtQ)nzwyYS!m z3Oz>d7O*3`G>M^KA+h!M16QBQ?k-bZcufU?nFX~a1w7>uOUijQqE6{<*V!O!>4wzr zez3!x1}4P-^@DPk4VU1G{er$ONo?9P{Vlz!?K-=qR5h_I{+f@({KltjLbAk_*UCPj z0$*UBVh4qJxg+Yc0k|S+j56OJ%FD8?&!IEE46<%s!FjChT4W!yB@5C)cnMvE9K^^! zz5c0)317Ur@e%dM%=_A98UC?W-UpMUdV(HIdF0=>bX>luP%|B&{10v11>2@d#9p*N zFMQCTWDXU#U$~bK9WcN)8UqGsEf^{Pu=;G|*0wFVcQmTkUd53(m`C+t_vj7Dt2JHQAD!gvXNNNPK(}H(%6~;{}srt+PdPe zCpZ$@AWiz>%lxK5(yDU%1wPH_{;tO(W`<0gM}55WR=F~^u*Fl=`fG~BdtE6%JAK4y z+ktLn_|M^6LZfXhC4q66xavX>0*hL8xJkr>g^};@*)f6yp&h2PNT!>50R*cpM*M zckl2`SXMI`BM?ewQY1HqsQ{LKa;cG-u_KNh`+uV(?4DuCwTAXfos{pSPrDlJeUF^6 zxc~Tt%>$uw@vz)0Sc7hzn{XJAh$ZBaUMM#zqk~mH3^;DTg)}v8BsfL3$CdGzBjlC^ z{c=q?9fsHwJgg1hk*r389V`M9${FXCpePd`A_Vd7g&xUn36ndy_kk_I$rD1M_DV5| zNl$6}eglYR`Q*XHN(D(m{pl=KwVG@6%E^mawdrs(U2a{8_~2B67@4J(ww@EO7ElI^ z1m$r{x-)_&J%CP39-778w*tALADdXPBU??Tz6s`VkOZ9K3F~NUbizs8?zE3`LcOsd z1*vUQCA%6vK9ajdGFoi&sH{aEjOij@dZaXAc%X zp+=qr;&F#lo^rFJV880OXqww+7ajJ`Sc4xQ(ocJ9Lmo9tDaM?Q{0F|)Mo7!mrN@A6rb^?bB~5UM}$`1oT+E|L5!eMc`@-i zoTn9`Q1(g=rxuejEY*3NQe+mJ@T6yCHJ~e42FLSRx!g4|z6SU;d0RoE_^t`0@En0D zAf`Fm6%NK)nq6i~>|H&SLf+ap#7y$A1Y4tdD_L^OU4Whvo0ZzM6@e3aquAAQuyDg- zAA(V?msrZyAm@1)@L+Py=g_w8SC2lr+KBQY+Jk^4;UL<)rAWP`(@o!h;4>{0i z@#1BPhts2~%jNKDRlGhA7h4(kndx#%^2np)DFD#J@~HWdFvhNUxe3qP0HGg1I*Ns0 zX!JKZm-=8s3d(!?dr)^D#FXn9QZY-2l8S+$1YCxV^|VvzZlEA;xRgKq-N~7k=bp0p z(F)Q$xA9>e3%-0EnJ^JWeQRb1GiMZ{lx*E_Htm6jv$GtD0(V~5nW^`{UZfO-`Ra;UIM$V@@O|@wKLyD)yNYR+{P_?@qkCeK95snHE(b`PY zPEdDR*NlNo8M!u{$Jw)FHx@k~BU{qcsI%}LmB8s=DV$;UBWW^jt!j{!-xfBz23F2Z zjJti<^oEZM_(U3K%Gq)Gt##eAFppw5o07A}K5)J6GtK#6?J$>wNDY_c6R;*t5K|*e zph!k8Zx9hU4MA8U6@6{p@_A;a#^D=&Wsjbk<64aEnvev7?Mm3Yq zk;`ijJ&`+@JKBQ%A={HFh?dUS`+Q)LOhPd88$rA=PF=_Lb_&;B^A#0kU2q6mQvHk? z32??vs$X;{X!w?V;qbYh{?!w*N(_;Cmuu0%y_C(p!{sN+r#BV7`}m9ZdyC%fYYr5N z^chi%-HZGv*y7PBWdwZdZ-Nnok-7*y9ZLRVgwtN3x_|3vM8bVVXfn+Ik}}Tb*VtQi zy@_vSr+S0VJ!c2^OOXe3LZ!yn-AKIJ6chk{% z2>unNuzdsIzAYTgEyytQ3@Tjmr3~`g-%&C(9-CC2h}xOn*R8~&4?p0{-heZK{}ie# z;j4!ybx&>g2e<=@zg|5@qCHXp9U}s=l$+RR9eIMrTl}FT?EGRsEp(RrlG8dsFj`fg zk|9p>Ts+w;PK6vbDGUXCM6;JZ(_kiUG4`I_k_daZDG zML7iT8aMPJI-H=(dY~P8KN}sUv7(=)X^7L`br`IghwdrvNcP^jUfJ~yrA!VDN(G6= zL+N_yW_feW(s>&BD0x*9qB%k3hBHU0x^WE??d?<20D_JkYC zfIB{qP`xxJaqm7QO+}7}Td4}%yR4dQJGw+aeMA_OL-EeFqSH-G!{cZ}yW-K@8cFIf z(IG1?sh2ca6F^gB7n#3kNPhr^%;z5{ANas~9R8$budtn_TNMyhKmex3(0c^=} zE|l$S3~vMUx7vS*h`nySL_9NOEAKtJvlmL2gZ{dO*VFFmE6$VYiI9~{DZ5Sqf1!Xs zv4k0Rw*tys2jP)tt!FHfi1S7UF`670#gfAj98MWay?*eiOiNE1H;T4^9Lv>#9YkR_ z&It$57|)clIzY7 z67%3vV;9^bMF8vb>viSwrw;mag`oVh-mzY{z*+p&`gvDA0D|?M1P?k3Rtk6-2%WLp zv`9sBUgeOpS)deow?&UhApYLiX~{s>#ez1wmY2OX3H`>9%Q#B5cb7>ckW%C`HcQ2a z^lg)M(S80Iphg05bBw~-NP|_8P_@M-BktW84@m#WzJzRY)-1WxD~}Ar*(d{vKGbp* zYhCCJcXJ-LrCS0ZzT(MYgumGbzJ02I9v5TP6nWF+K<&H`O)}}yJimcXpIO%%=yfRZ z{GQbjNPe!2P$8GbxW<%NlFe7vmFOLa`$>ag7w54{MCN~@#V(tU>OPclFygfOLPSfhN>FABx6EQ>CP znNd&JnqKv%Bn|1L62}Bv_91oJJ`-c^=0!*s-%rHx(41{hchjz8l7v^_+XZ2L@t?jm zcExxJq-#=aRSi@<2-Sqpv$!Ioint~fqms(2JA_KL6`1mSSox!2ZWy^v_&tK~=Ib$Y z>FC{7U=Z~|$s(Q2kK>nj7Su9=kH<|l{>|B52-`(B7q)WYL67Tvhe;z7CmL?t>ipJy zFNL#*kqCoP`n{`kXh~%jRaml^L_XUVU2ru@C0 zC|_jiOEx7RdL_j@z>d}rRA8#zd-;c31j}}KJ|HP3(0xxS|A@dz)*~C%JvLhBRy{rsa}kkT4ex!kftEY*{l&e@^fZp(ykZRNr0$=BCQ*3V zOr)Ifz_89ezQ8gguRpa3mo?Mi)Y;sPLYl8$6i(LTPBHp|m$~T(Z_Kt&5H=W(I1CD* z+f~UrkrpU*ieNO?b#wuF=|L%ON_PNC%HRt9N26YyH@IkheT8+jl9~DD^KuYt>9)*F zYC#<}J6x)d1wp%{>SnW(}3viG@dXvC~%z z(v?{&+jwdpmJ#oUNi$`;ty`+)t_jOiP#Ogr8l@U7hnw^fZM9dt-zCLzbG|)q3qxlS zkt!^!=U{)h9jxed0m?7yFV6_4lHa8LbW6e5Mk|=CC%lwYJ@ll6Yh>%oh|DS! zk?`-uGJ1ww=YOG(nEn^~h=ZN={{oJf2$&c-8UH8xh>4kjo%R10edJ-Pl4IRSS39tS z4RL!5;tqK$cf@jgD@V|d%wyr;4uQ74!`uEv>ODJso$36$yHfRaRrdUGSyPDywKzuw zGx*PKQ~;7Yff*Q@n3-NcPH$s&6=Ha(0EWfAfzb)1o{5RMiC94)f(s}%hxSImNNiR> z4RA6EFW9MZjC^Hj05QqR01Q2&G^&fySd;rhNh7AmiKhe(vnjy$IMyAGA2dAbsP>jGo08BAYv4Ei5 zt*&__0b6h&3}D(An`r#x=Mk0ZhvR5fS}8+U->-uA^zLP!^*)*t^5(qjNfhG0MLCX z7njEG~Jz|7wCr469>cmRJmPy%yHAP`Q#KMu+DA7RTcy-D{n_l~E& zh#vI84|$nv{|w-qfc`%TW5eU;^t$b{IVS*ZV(A2C1QQS@Pj(kJCpSkRj9*f3e<0b4 zUqJ*21Xo9w?_}ZMe5x`3(hqW1#I85)rIv?BMyIbkWM-fa4$t2jwm;7;GB*NpX>#*2 ze-RL%X&T!A|8?#kPG;$OeI`#sP)kThR8_E!w^3lm@vR`fqocXvvG6+_;r2MzsQ934uCSWvN?O$KfW3Wzfp9sOijS|-@@Os z$N80imVlRiV5z6RQnEJ!YQxfP`2IQ^3YkPJ>PERO;Pe)b@0aBuplEHE}ci=iRqha0A)2jEJRx(--K`& zacUb6$cF;T`evqpzCJGTc=1UF5)jQo8PH&>v!01WJzD!GCA1~h``8OIemF?Xc^P9B zi1`TpTZ(JK63)cwsWoz~j7j@II}Fg0NUWIGIvb9$+Q8mCWx}+xn3ifkZx_l;6Pppo zc76+8{(b`jjeN5|YY(5HUli*Vf^Jy``y|vLZenoV#m(r}UkuI9E3SBFa=&XFq0G-w zOG7r zH%svE=!xG^>8Ze$nl;FQEA(xz-vR<1Q{ps=g;Go0p`7A% z#H{z_npbvLreH+kcIZ{TPDv=0A!3lnL~&%XiZS|MCeh#ako)WG5%PshqAy3LNg(j8I;#PIobdJ=7afCuE7+ufesDtOlrpGE4jPyT}TnjzF=r~gKagtilG%@Nr&dOLO zwbl#cpI5E-I^MgxDD3xY;HV&z|AhtX)r;DyTQEUatYxmBC-}~Z3@w6kk697};d%#z zPK)Ihzq35y)8=OUj%(7m#8JDffX?iU#BGBTIz@=aEodd;_q_UsDU;bhJT2eE*Del9PILvIXugH;1o3^dgd(bU{4RAl-B8X%@@0Bbbc+!L$(4%V-+Q_$=C2a;~Q0_ND7rurlQ#B9x*ho{!*t zMpcHgOU1XJ4T+ffQeNMs*8H=A*>!E>I3jAlm8mFX6NVu3t#U+F%o)!_bokYzM`?Ri z?d+q87cF4wS4nUs_SD;IZEm*6kQM+Hrgd~GN&dI17#}af9Ief;cl=-Z=wox^)`z2e$QG(*4)>E>fA#a1s2C9Bv&X?%hcJcf!Re$}!*{lI}*KNCwu zZCHrspg~GLg#lmk^)j3)Ngu4d`M>66r5(Sbh4K5(Qlm0D<0J<^iZE&XXgjyi_L{Z6 zUul!$e%Vd}#TBy_O8e`efNB#27WVr$@|DT)8W+ExiBQM*6VT?4KqD>XrxO>n00#d( zgsJk9ZyIfbwZUpE0Oyv_)mWa`H?FgLV>|dFNugU1MhpK&RuEK%WjU{W7OFQmQPiyQ zrqOy}$&+m^<72S8881olI!U52bh|jn@n`XYEoYqjshDcQF%?)kD3+bh3CI{3wn_h&h9GR%4(0$x)w`xUQf9Zjul?tq?<5vkfl1LA z7kQc2E-W>Q;->mdj?tqr#Pl^HJB>tOm8;pQ&YCHU5C+Zmyc$1+gMD62|89n?^^Bvi z7KDf2_y6iC?jZ*4ksIiULngxr=+{iz;koz}0H17g{nw{jF{k!5eCQ(6 zIF+;vsU>CWb|X~g637OC?53#(GcYf&VawGOVMksl7z{2YASUtNW!-OBqdosh(jRgd zUX5%@WKAhfK@ez_cH3SK#`?;xnXuqj6C{1yVh!UlbAQ+Y|+Ga2KO9 ztUkI^9QS~_Oyt40F~Su0ScE_VrjnqX#wx^1!70RXu;y6C!b(x>rf#tQHSp*+7gnS| zSyK#!njk)tc&7*veYy8<29%B-{-kM8r4?!Mq|na?&(%hwbJO0(v(lUsHnH|c-=T}6 zc9!F!_GaZXb*fj!zZ*q?XHV=Bt+&YYj~D|?uJ=rN4i@U`I!~1`ZsbZ73rM}i;JUAV z^%Z?1`(k4^3)~3i`egylGPKUs?~)L~zj!->Pwc5LbD^%bsn2~vQbT!g;HqozW^Pu*!D_&U zcCJwecqn!dOR`Ylil}`WFdwy?4E+444T3gAi2ypt`3<5nW=jyol0Gmnyh^;wX4j6! z)8op$wZTi~$73nI8@}{SFj>PXRdUqX?&rIMvgZ(dKb-!ST7EqSC#fSGl!zjl}Fm4nf6~md%ycJ!3eX z7o-53zqNv#J6!;#Hv?Uj>dn;k?JO3Rmeb)*h5mKtVudxTHGx-cPunvGtIUho8sn1K z4|1P={EHS^Ks?CPQ!=nUxk)nQ;@{;n6;Qi8ro&BQD?^Uue2-tfX)>l<26B}3({!38|bYZ{MLJ@p@gk?Xi=L(*9XaC0# zjkvpVFo!hdE(lD>%^_W>5-~?B!_Lcqw5)K+!Ed%cW?G%0FSR<|6AqX?n6g*=v-Sfm zrQR@$!`q0=Z!BQ~)vY3>t5Z(_*;=nSp%yYh&1QwP365vT-S4`+YdbY2s;4xjd8**~ zNcnBGMd_SsiEMrFugr=i>BnY3_Rfk*Of51y?P)SK>h&a%AlGL;(o}+&xU8Vwf&qD? zxH-ar9yERHF$V6^yPP7gSx4|zUe`FALMzpQKY9r=aE3l7UY>_~=3;*AjV44g>m8_e zM&0nqgTG&8+#11**^D$a0S~&v50Q2`sqys2o&8Do*foCdWv6sanC1|#n2Ff$b=VnY zD2n@EyT#)oQ@Ax#X_cMsK@fn{b;Wy!<{L{X_;D9a$;~dmQlVe@w;?%7!EE?nv97P2 z@pNIOYc%*FB?qiNuu|3RVB*J#%iHW)1^}=on}S_5Xf>?e$RnT&Op#w{|FvAaFpAP~ z#p1aGFQ19CdQEXq1&(et%?>R|Zuup2AKJ(LCS!XyZpiJhq4>&4E~$QAhk}j`zfO^) zgk_UsoxwnX$JBk3j?%v~AapuJ$dq3V37@T@kryd4S6K|A2&vm&@3*bi1g2Hnfh0dl zSoJ6$@t$$B#f2f6*G@$p?Lt4hp1EHVr-z(H6f9tK_f(=Ibs{KVS$X&}QxZMtEJ1JW ztO4*y91T++?m~x%*9H%>AN&4p1}Ax8b1UXBEa2}Iu7>sId3#JORF`6g`uBaD(6 zJh=vCh80<;+(Mqi`uCjM3Ns4z^F0=Pb5I^R z;{2Vm1?A9t`IMJ}o;;`AtrKA+r4e8W=WA>a<@}05uWeRmQQx17s)NW4t8;4K`$-Q3 z=BI(ahH46d$JHOf=>Ob*E0-e>O-%8{UgE}={E>NXa z6nsOCW{mLFxtXylcFM-Jp$InH4-IcRFeJ-B%6!ahO6XB+dxydl>qc5fYq^W@Q9aaX zgM9+v$%Xa=y`jpWTY%ymn&U^(OHs){?!#wMyVpsx6TYAfqDLc}B6y-3fpzP1ORsoi zpQw?t{9m5h4(CQery@1eJicYXg5}`g&zDAKMr(tcv@nvu;%D_GhL`HKkK0NA(@tht zF~;@>Pj8HH`3rDD$+3+8m^n}CL2)+}#83Rqdo%`HNe6Z(ZR;}?RmA3=2%(%BMJeQf1gDGxj9uAJ|!x_2t0`j;&0kp^x|IW7j`a*28F?ckJi->|&s z`sc{{@OZ^;)X}uwY3DBQ?Vl1Yzgy`Z+`6gcR~3u#&<4ESTy%|Pt7FQzVp?*tyxOBP zbnbE`o^{p+zBGT)b<*!ZZIU(QEQ@sr!C_G=0 z_!X$$7|x%u7$asH0gg(A!lfm7+$r3WxyT(!n%xTun+yg12 zBE%Xi904;)vKO~J>PGkcriIQ;GR=x8z+z?nlsryiCOw9z!W|F#wAi8A$<4lT&p{;? zTdQ>qsrJt*do^a3WN9V~k`@^97dNVZm@@_yj}fT!_C$gj?Wtmn`7`Sm7Gw7Sg{|%A+oe@h zJ(}6Po#+Z@NXp+0cqvFiv!WxBJ8+#rr2n8iUUJg|%y*}sZA@Tv4a=&UsP32R`?B3E zvs;gF>LP;Aus>qVhAjRhs?{VZgjboNYp#fC7~CfTuR@GcO06{!M86Vui)`~5K~+*n zMjd(zqPeMN`FVr%0E~s_y*(rRW-!yo!d5{`WUQ%?(llyt4OR*BOYB#s-7+^qhE7dU zdFM`V)gHhpyeUYakb>8Fge;xp)pMy3x&kr*e<2U@)%BOQWdy zsLXtm9$O+Gf=qG5l4&ki*3}rWl{s~tJ@Y}#*uw{dE8HeQP|blx5#bBP;AQ3t2u*BE z@1|K95ASzv?4Li#0d(tiTQCwqWINuk1E6M8oV2J$QVJeX64m4Fj*>qK;i1fnC+Qu& zEO~DtxSqyGmq4H>VtnlxzuV}*_ZU^QZUZ4c2uAl~@&9|JhGcH1xnDAO+GcoatA%nH z{H*7>zY2S5iWydZ!G0$&TTh4Q@UwEE#)RcOxEb8d>`t0FEc7B8Vt6+evY0Q0N5r)) z{{E-iP)!Nt-F8&^%{qmGIj&NLiLzdprj`ffJB5uQ2uaim@^GKuIIxU@8DE@f#V(-Vm4Lz~SQY9D4&8L2H+bxldN}EwbLAZSP^z~UVH~MM; zT_e-5M#?00A6%b77(RDaTOThxN-IDV;} zp}GgGLz*K01CHwn^QHRS68zFY45zgk%#hgq;nkzl`S5a>HEDc8iP%7auB?0w4;%q| zISGbZ7DAnf^Yt8ApV~r!bQ@L5V{}WnLZoaJeN+JL62A7WJQz;}vBc<$uFne>!Nh*- z!kMVEqnD59O$pOK&|XG*5>I$b;B-0YgXDfFv zY?hQI%t~a`fUY;5m!WR~HYP@0cjoR5$TINUJ;Kb`N7d7)t}3lL6y@H;|G`D&+Yg9$ z>}A!e@_jtKX!+?erAR%VKOW;yJytx~M*%|#FDY{ryT22|Zo+!T5tKVn=kV(|D9lJf z+o5J#N{1R!MT?V89A05i*r(cT-H%(j{PtC#_@Zo^|3pU(e?alkb3S@OT}#FW^N2Fu z7(~DaA22;c;pR_f>-qqdSMXoEr-*lwM0`Q=wb(G%4Zp91lzeCsAY_#s@Q=;V-OOca zxw*U1@-n~&S0A9nxZ->j=d;5W6y|n@7Aw^#n(9(^fNjEah?#P?dxK|@?~g}yWcBLo zVn#i1v3Gx}OA7|hpw3xC!hc4uR^h)8G62}jlAS`fQ#1wPI*iMBZ0uE4#oO;vD=F}a zansdq$$JZ}aGs2??fe_VXuJI{t;7BA822q${L-1b$@l%+n}i%Vz<=2@MLrizLP>>1 z!0YoRsy9ZthHI$WGfo z70{!rbx*{nG8i!oT0rbOmG@)Rf^xDTW<^94!_Z>-l1JTkJSMA6<)ZmNON9u1VY%=K zq}wmcN(~L=QnJS)x37|mMyw9IEkAsNoa}bVNmA5}NTv)Ffk<&j5t8U10|-Ze;dMY5 zghsd>fedj%!WK{WZQa%Q#oDkxoPB1`J@a@qRdAUim5sXI&3?Wb4Y-MA)W+T=KKMx$ z1P$Wl-8;3-4|dE7hFjKERDpdiaV&Om_sH3@)uI2~eqd% zm5D4Su~NK(<#0$A7R_ZpZ$yy_on+Ur-n%;x@a-wcW_}bHhuRcPkLi!So_L=^g7^C< zcp!RNjR$!Ivg|+okz4zy*&mEYz4}KhL-P6OuvFkP9*e5B3$nL=jb0b~7wQB20XFJp zriy<^9$uQ&kymM;M2bpS;>9hv<&zw8y?Wq1m90t$V3JX(|8=Y+$%rFwiy12zf1QUWhQ72{!Fpb|~XbtP@XBZ^o)sbyiN zH!QCoo{M3X9Rhq9W?m#!yJ)*IdBY5YVH!nmnFm?)p+NuWA@OI^I1xO-7Dno(+kQtTmMC<9k36Z&WqU_OmG$Hrt}H?s*U2r zJI0urpX^`0rO7A!Vs_%$s57#)N{l{y?o`bsae7ml*n-O=*Ri}bx8cfd8@>#nmt~X- z1L=eX3#QS>+>R!@3J&f6cQ^S54b>84zy~AZP*e#2-WKDz-ftMWoX=BNKzE6K3V_Qs zlKs3Jk@8G8l*%WpyuvYZ`qP?|n66nORit1xfh-9+5kJj3|6%BmZ@giag`Q-m!6ebK zJ(gqG4EwBUC9Lg}Qc)ErwYy%BQpD-DLZBiziq`#cne)$7r!%hQou3T{(yrAeWhgqmhXpSEunrj7_nE4kt;_~IG3kjejLH7 z`aj(SOgk9%(*b)(RqjOyqVuu{E@XX%k99sr@^TWUV+=~hR{wm73`M=lfbGu$pQ@qI z;2Ex*8+_5IR?#TH@5i(;8~AUh*Sw>{;yGR`gZXLQ(m!>=Qe^xoF3vBfCdWW%{NHej zz@t>Vx<6xn9~$h28u(ubZ!c0t0Ikt6)y)2-C3n5Lko$y)Qb;JEB4qV;TJ9JWUc1V9 zC`iM>btnZswhOzc8RMvgb+CjA+EE4?zXb+4Qfj3}g_4V4v<)#OH>uGAY@fvC9yqCz z6FU*{xEqP#iz*^DhbJ@GYqi_I1qJ6S9_(}rmopyNPM0Qjwcre5;dj0)>%419EpE@3 z>T=QhsBc@Mr=+&JOrh!a07(qVngg+jO6}y);hL$LWsm`C{atJe8B{xMVwXc0axtL4 zmJS<2NlYgScV2mirU1SJGI@Tm7-;H;zxR=Mm4RW!j8**X4HuUTaAITT+%-9)2+XQ| z?9t?wk(9K2Jcz#`3;lxL*4F>};&KX&7$hsC-cJo$!yy$$PPOirmU0BYK$}wU;5Mi@ zSZ6fdDO?jXe)LtdFX0hlzI|+|O$g8oYfpFhn=IthGp!+xxm$7l7#Q@#T#n%J)VeIJ zW|9!luJ0hpYrya^tqpy~PHWk7PB33bzi5A`Mz$79KddrLQh6$O;rZC6`kVBSXlZ9J zx_>x3RQD>QjFOk@kMwD2@Dlmi{7=7&N8n2Eudd$&pjGPtPrXLXTTAz_CO(;ArS8Mq9{K3ug*m z7I*f2B{xnPOy$T1XY5`dV%HOZ6g?&(zg9Y9K{|6$#`;Kocp!K6yY&m$m`_KgZfWO* zP73H{mN~?`;APybb0u8%1zf&E^?p--iN~?vGkBb7LJgcmKwQ$NLbV}2A;+}dl%}2GTIl6(Y zh8ZppikS@pL{f4YK4)N<_q01Q^x>Fk%BxsCcG^Z>@kSLCI6koe#ar8L%|Le0YT%!# z$?TvJ^f-d593JJ4^i3Xd&{N8$KIMljShqUbxrck{K6hFTYOzwGAtw6OXP$ajS*db& z+N8oJc9iJa_PUAFR~-gWeEAhTtl1qsMbV#jhF89o#(Us5^St zl+E7)sUaci{9>QV?1GmnUyJ6f?~xAEi=Qm@H*2ksOzz)F@2W^Fhh4&lXVxUD5v^_5oYc2_CGJok zb;Y;lxdPRb!(W<7!GbM|Q>S_U4`cVxFia0{2l%#a+qP}nwr$(CZQHhO+s1QSeZNK9 zO&8r|en4g>$;ovzaIk7NMYPY!y5+#n59b**GU6j&(oSV9Z9Rt+WZ1C$vYhiuoRQIt zY!3$2!Obz)i+{Q9PiyO{(@zE!RwN;WsFc0^Vrw(8+wH_JMoowxW9qw;rFOk?P~3aT z37R4_J(ky6Zc{gN8dSZQ(s}8h>y;$`==98v{rvFsmCp$)dHk!=6Dw%^%@rSGm209# z=$y#gf6A9N=q-DqRo$*!Gpf5nu-iNdDVAJH*bNuC8P*Y6TfegNCY`fDO=|e?8BqhV zIMO?syXf8jy~;Z(0@cO}$9F0eNlGUc)B|(qJkr!7T)q>F4u32A z4usNyZpFa}21}p7BYbJvWIUzIM&g+r4!)A{xi=~a7c--`7M)q;qSGB-_z1ccD`c^$ zbnP0ia~*oVuSj~y^DmIxG5m&41L9bOz?9cAHa55Co$gLa?6Nc(XrY|1u1DjNN8~$Z z34b#eE+g1hLX*&A;^M|I32VqkJB zTq>0ulwnXT2P=TaeAj2gCeykM4|lf%&8F2wh+Ra9d^CU~;k^7;$W=R3oHA}B(v^K} zd?G@j9qeygfTI}^+VX%*!Jj2-@9vMdS2Ywon-ikS((>HZf8$kvpLQ2bp>D5QQ-i!W zM1is_0qiHa)cG~Cdm!CpRg~DPOC>H$%ckpF3Oe`5k?Ei2S=ej=p{_D7RR$A=D_abr zvJ(pJ%w#>)SY1F(FVQ7n^{5S(>K$tJwihgV$-mq{#sx!3tM!j@04szCt7H23fe+u# zI4J0$!5|KV2 zyTAm-bpB$!A->R#W~hxV2`%44aRsQzXt2V72%_Jgdi`3In$6A%=5WRV1w3V1J8-l{ zMY1=GIT5w~g7}Pdzul5y#u0{l=&PGbHO#d2bCp>U1+5PK;>W|&LQP~vJTEArYrUcr zP({L-0u5anH5sP$#vZ>|g2wAS4;EY$p!#qBa5{y z*9Ad#Wge^Ut7Zdo3BGPRBSKl`X^keCK)d8-*SC|EaR4(gMBeHe(%)C?lXm&RVZup! zE>#%Bu!SY0D92!4-;j_IoeeU25h`uzsaeR(ip|7zC9$;c8}$ZIV=*N*c&u-?vwUi; z>o2!%HaMt~quWY7v|WNpQv^iS9vJp^t%llnci*G{vMav3h}cP+qHR@*4~nrP;f1WP zpRf|#D3C^)5*4Zc6gdnk9P*7mC1Re(h0TmkQ@oUIbEt{$C0LN0{WX~Uyo2ikNK8MN zd+moxwj$akHB;?zIE#g!9VSjZ@%Bfmhe0?Eb)IoUJIp!IkB@i~;@y!PkcMHR7HGgg z`6_iq(Bdvjs|_nxRGe%T^MZuH&8u!p*1^_=BrngV<3$Sv_W(Rt1!kdG%k6lA@pL&V zGCf-{OXO!-J({Q-TEdQCv8f9^^0R<25s9M}IWh$&@nw7F_?v?2XmM-9gx^4)>{=7n zRoxpsM1Kwn%V3LF&5^}*N~)AUfdN?b0cyJlw}IdM{ehI&zFVgzW+D~oS8INkvP03c!+?m4PpxO$z9?ZYRb#izK%1iPhQ!Huw=7dyFg%yNGD% z>aq_*=odXcuQ_lDuh#?vu*B1D=|}gn4Rhe~CgY$8x#ra2d{4>{VKQYOQzU6d^K+~y z9;P>^czL2V8zuK6b-s^t5!}YTNsPdt#<7a8)=4|x`9D^U>4t{3qQ`Je^%7)gxR1RX z_~+HzU$scw0&*+z-`kn$j?gC7Oe@t5{Ljfo>n6sS-TWP9dMK&*%4gc^7}*yTnl+}# zl*p3_Ac3OVkMc=ZB;E51RT|6NqYt6HB))e(%9JJa?$S;yllKtnTa|WIZ`oU@ND-Oc zDqPZ(@U~6MDWjWP>e}V1j_`2l-Xu+%2kSHpKK9GNGdVS+f7@vvJauT0$4+fupa0SA z`_lO=mLg6Kc#w5zcgXObZt-w5-P%HKBcI~x9zoC7-K1xdj;e#X#xBE+X2R8Od($@ z9t(Okv10-vt`dR04C{xzI>b=%OA$eq#A7K~^*H`sr&%jFO7A<>xOn@}uh)CaV+n4> zE6HM{21U(ZLmy{kjk8cK=iD?9{W%XAI3%o~HUsuNN)*-HDs~++z{*t^ziNWN$zu$P zkwjLrlL%uY9v{UazsjRpMN|~G?kb!2t}W(C>dsSA`MvQ5Y~G0s3vkACrkyKpy(6`H zfS24>#FjzvNtHM;A!f{1+&|TEd7vbr|3UNF_-BvNJ?$O+k=pjy-pucdE2u;sKKHu( z`G~4H$8}RPX|nM$-3T$FW8^NZ)`rdOL?($`y(Qec!CcZ&1neII7pZyPo&DRmXAG;Z z+N99vV}1TRsf?k?bGst)-l{P7uD%;^#}N2WX88X)NMJ4gLPiA+PP-8)gVYYGvhk8N zqeNO_t*kb@o@8U%;kY(3JF~sl_p|u_m@ijs$E~X#nB5^QO{Zr^1_DETvB?0K#a95X$k2gVBkSLj4nVM*7PtL<}BB9v6>3+OPaMC^m)!WqnyNm~B_qCTq zIwHVNX9L$aq5I*8x{R>TQ{q)4*xfQ(Jp&JAlSg!P&Wnj2PB{yZY#e%o1nZ9U11odu zkd4jdrT?J_v6fnk(cVE zMip1+GL;${jSp^Bqk=7$GB{4#Pmz&-R+Sk%{EaEKxfCYtSk0=_xBY2sBYU*Tt^BAk|2QRa4J0#t9wGJhX_Il6S0h5e+@NdEc)4=~cNTejRN*KrC9 zGzvosK8~i>V*G@mW__r!vdAtbm3`*sJSS1;Oc^|x$djA4U4rL4eqr&K->ntrNr>=x z*6Yd*J3|#&>ZXMMJc<6c2O-<2=3Cyc<_rBuJ+ngIeNsQD)0sm=+mFm*F%s zU}gv>7$QI7s9=yp+J~*ZCb>kQvBF`G_J>(I^8xdT?K{U?UOuBU4>>IcBtxtxrvvhw z;P3ffjA``u2bazsAu@PAClEE&; zeii4X`=KvP^*Zj7>a#)Ji?p-4PJB0s?@r`;Gg%Kk_abHi&l7WXSy?Wnzp&RKSS|0+ zbv&U@$i}ZXl34F8>R0a#EVJ339vj)~B3~xXxi#85O9oZjUKEcEkAiAfssNHI z74joZK8@)qx8P;A-xg@`yuFbqE^g}q%pQwin460YXXi?r&#<73yvZBILdo2iIZ--f znQ>kVw~(Rd%jn<5>*c@yW~ADmvr1x{N?2&sOhvfV<-jx#eO0G68&LmuG%TwTT0f5( zhz65TB=c3^p*8S;oz0I(i5~4;lxn^An_-$xxC zI49{NaG+MEq+#Uzk*`S`%|YOTbQ71N5-mM#^kc1-caXMySoZUYnnT=9Ib;^XRH6QkqB}EwP%3GJPh`jh;KWK zNEZmohyg((GcS$<2O>l0{D=RWTEXA5K^O3(kdsI7tuU9Ho_J<1u;u+|e2&af$wr+< z5G{0%88=HL!Kr6QJWLa(IkA3hW5$-b#H4x;1!1StwL)` zs2bGH6^{C-YqOd?ezhFQ`q{r!a2RzRDkJ*&?jpuX`-38oIof20R z$bD|rsWM3;;DSXUTj5?|v#8{-b z0aDHtCQpvlw8N&j*2<=lpSCFz;J&fEVN0r`f;qG1q*M**{Ki4^7DM(qPnO(+N5~w% zZsdz{a9I?Wu)L*(%va`DO~bXfi-=&5mvoQ+Rv$vt_2MW>cquO8x>7xPycll1jIqhK z4$_@|$d|?cST2IW+#Fh}(M7dhod^+3oDGPL$nBLDZhv>qV`a+lpM!y*i&%LgClObH zNXR8Yfy{?{^$WEVQ&by}KLt1RPfJ;}`(cV_hCdHr0es2y-X^!T=4<1Z{7hpUyNsGL z096`~;K1Be^XQw_z~5p!Nl1;^#aal6-7g-dMbKR}FvxC1hI{U)%kbxh>q|JbW{GFL zGBpP4BS%BfHfBQj#Kf*HG!}RqC|rGyC^6yWxN!?Jfb)CQaHOy|Pc~`&<8dY3;W1&B z$$QRwBbht@FgM;d9Bt(~zK5RiY7g+;s985$3S7w#ALhi6s_rS5oQQ7-Ud%VVIqLGc z68;SJ?LbFt`p6nBi^P`bG3xzE+VTfeZ}iH>dILG=T#Ef;s*b`mnc3r29F>qjoFC!t z`>WO!>IvTUggcr33oFpUs7zv#-Iv6;iVDUax=~6xzN@;vW zjH0XLi+TEBeCS@LH@Z%shlEtU4E5&3+dNo4fK8IFN?n>-f7V5j7_dMFj1C)Lhlp)p zG(a6*A4jE8f_wZhR{E?|Ih0j*5d$=WLHq$a@-zdi;cXMzxwXyW8xi-yWh2$wTgr*A zVl?DTseOn#CopG(Y27MTa4sO`VEbjrAD9Jc zO~W(IVh-^cveF^J@^&HWtyZp59|~%{3bq)9m-I!;AsGEvx@`v{o2>}9*Dlz2dezN7(FcF$r{TYrNvF8Tm5rAK&s=O)qKj z?-iWTb0hQu$~TnownB(&381uLcuK$g1WgI&T|z`3n_o7g@icsy-=IRbmJ3DSGS%*mhAt7OJ~4d9LANvN_+sAKXT- zh_|Jh9Yyh%!PbDHFf(`V5PF7FvP_Q3^XeOTm#;LASSkFG8EJ12i4Tg=qif;N0@8Bs z@NgbOIkZ}bj#%&_v~-Cl-J0R-mw}DTiBjMEW2V1@{Y$#CQf?H9|BQP3UA1dr@7i{p zYv^I2ydh%Gh0};B_4I5Rn=G|78%zdX!Z3~{$*rCrcVK2^Br6Q=m@0i4=)`kke{)QG zo)~Q0Sig#f5iuVvqWerKf$Q$_0iDi&ZE;^Z#$J1&!y{3KyRg>1Yd;RHN+3!TxDZc6 z1>Z%cn1yv)p#}<@{8*hZpx!cTzH^VnS^eVB zY8e*l!VxG$KOz~rnWM?tlCJS$TL~FY>trviRuz}r+%(%^a z1+NV-ULu4^eq1LkL1d8YKsb3&v{kRlW9d%g(a|)Fhbqi~T%*`#s?4>9ybwJ^7u^(; z6OScA9lUZ9pyk|~wCDP0`zGTm4>TI@(m63(gZr>>ciH$Q%OcdXR`IZ9ewxWvXJ{$bLS$ z(0L_cdqGCu7?@=U1k?w9wywT#dH8_-`p6k;>51cTw6QcR#NKWqR$H!V`-cL&*DPsSypi8n~4NB)3gA4TSwqk_*)=e45`9;f;<@%Zl6M=)SjnAs+1#! zm4)KvEGsP}I78Ih79E>Yl)K5KLGLjX{Uub^fvB(0;4kF}B<35iHqVGJsFoL<(pG2% zp8=aNeY~kiDZ`)IF`XmI42WN!?avnNEEFRdZP4?Eq)-Zh$<5A0k*f8fFwH{X@dlQf z!}AZ^GWdRW8Vs-Aei2NWnIZ6(>zMtjLK*z>qhJFAmA;1c0%&I zG<_4niFz=~AG*4JYnSN%=MA@D0?qp=+~HRnFDpw`DtM0_s1{rX_v} zX)&+o8aEmvb56}ZNfdVG4tA(ebm0ZT6eswpIr2|3lw%WrSpftCbGJR-dtb! z?!|l%?IEB*gM9Mq{zbm4ot~$EsnbW?Shot7=n00Qi&n zx5a{_qI;V&j`AR~V3Zt&3J$VpwwuuAYO@#cFpP*5cgzANG2f#55??!;lv`@Qe0J85 zfqiJt+Srwi@vV0Wq=K#7Vpa@lP)Lu}Q>@G?qXp9QFl-kM?Q&vUz{@W-4@z}MR1z{s z61vFEBiw-ecLXBjojo^z7#VL=`<<28vw>%RaY(lZtQv%b`=fOwuU*5J+5)VqJk9hu zNFG0jdF8_EsdcJl*@!SyPYENHeh=qyRe!l+H5$gw#p@f}vh|?L@s>`?H-pM25w(s& zO~|h;Bp5UwT^vI{l_MT?D(dq!z&|!2TDM}7&V)J$$6Kkr?g`mmyKe=$zfS=!y>2r) za!uT6yDFwS6fg7v5(p}$CNt`UV)7atxet00ys*w32*;7^$S9eJY<}CthKmM;2s!IJ z$b#N)$fVHlZ#5lMi%E1^1rP$wL57`eWAHMaM;r7%(aem-T3O~;pw19nt50TYu`rEB z3rLA?ApTgct8d3Pzt(hAtt9y&8wQiUzXX_}Ggn7^aU}x6GXkEL({IlJ5wI~I2wxPA z)RQ}-i619oJ%%&6eb^tXsW>vHMm!B(ztAs(=d^Mfn~)sOCS+84P8ktTuAjh?W#j?A ziJ3i(jMS;C4#4h=9Gm$tH;8MaI}qwN%YK>$$_k~%VsHfCrn)J+zp8`HS8t;j2{ zsF5FjKkkuE!w|__V~yi#-A>175E}b*)B&iCg9PqhfXL&j902>6D-F5SX3S`|uFhhFWzHtXkn9k_!P`n!^ z9U92p!%n}6Vke&JfXLTipblcWbH#5@ER3yfkRzn6mY@QkdC_)>mD|guvSIqHV(57q zjTEVEUE+{8s=PxP*;y+5Q(I>6{W(k1zrrrnCxGe6brFCfDe1!P+3KPOSztQC$U-KRd(8WNrBjBQ+GyTD(9 z#NcD0yY>^~@JQ7i*Mk&~!R{^|m|K*!NNY#`=NpCc_g~t)%9!1x>b^v&itlTBvJ-MX zx|y7vdGLHbd^wU#!e5#$(Xah;Pyw62} z$uI%KA`dZjlKG_D_k=s}^7NN%-6BV;zK|kA7o^Qus2zGZ z^xi*)_;vC@G^ubY%(v-T5;Z5Sx9q!f#f#5;qvrg)vi5F|=OChvBm0nE&js`rLVT!? zC2rJ*`58;5v#&Q>Pb5K0Q|EM8AM1(Ljy({KQz?$mhW~hkuK82h6mwUR_dGW(>O}kG z0L~5t6#}HY@Rm}rVD(@MKX*V4B(!!pQSm1^z{AmalyE1mhw6195n{<|GRJCfuQn#2 z6Lj|zv|JaCMC$EPW#wx(h#QoEA+X{ zcMKC}P@a_ofBOHz?CR&i77SFe?UFC{<>y;89Sh{M&_AgULOlFeD}!} zV*6JCuet@XVbM4B&)#y8&ma08$sMSJ=akiYSe}5AFxR|_&AE9R)MJn?OESNzd4oE0 zXP7mYlsB;jerz?ftXKoSbxK+q;|$4#7d#%Ak(pZQw{TV3N>X`!o-(_Y>4~>SIsWC~ zK^EaZM3T9!w}=afj_>@U}x!)olt!xh`tA^O7A%wc<& zYW#j3|6Jm(9`9kTXv}s&!)2vTvyv~zj$)7_&_G@(@0hGqBxN1dP|0@e-!;bqef(jk zg>X!y>o%|XRbDks)||+aBwDV^M#s30%S z(Z1*|d8v=#Nm`Wo(b+QnT=X>WGsAVr(-givnwvF~%C;`P$l5p;_ABJVE1F!vlF!@_ z4i`-SR3zmUW2o>P$8a}RU$Ca-XWj7}YueRQoL^)dHn1xo2o8U%_=u>TS_ zsug*?w8a+f5qO8Jcj?7&^Hmnq4=~I>#hKFDOQQPA_U3K2L+G7&I%2BBO;^$M71M{d zBoMy_z_^Kgtut|xCuj8X-@DLc9{FsHFzmtkj2?}wc9p(v}7%7N+!OTwTS zT;oun&HpQf*YPz>_f3)tlOZZuHDt(4^y zzWO2$B1nvj5x4yg=(GKWxVbz4G{wp`Jj0jLbzT>ZUAzfP)FX_6n;#!JN3n>*lrv;- zwkqaQws&NB{@l}afuI!MnR<5tWakL`%l=h};c`V#XSDfm!(~=P$DZEEQn@nm;7lCoC7(^u(3lm|rjYFogZB+C)EpN;pGLU{50AqAKD#2Zo#g zSJUBMw(WDHXOfdefmXzpdHA#4?ld+G!;`BYB#$^CxGWg`^0*ov_^i>;&7y@PdD3Jx4OCQ8Y=1ZEe>&r#h8 zGxkC(6~$EPH^IN?zUhq*erET?U@*(z$2QBw{TwLv-hW{T(J)*+9lG(;^x!EsN* z%lTVpv*a~^9-XK95ye`fLDJ=A5idk-`KuN0xU3;rM^7BXjU_6SBth!Ikk3>x9Bdmu z&?D}^TvSS@o*1r{Sudr(5l&K-{KIy++so4Joq+=%yKbwwp31nbE93hL0);SL;&^QX zqK$NR>x|*#HCfd^QPITyLrj7DSBd-qEd}S{HdZbGkWD$f4u1P#MU#Iots1{e6-n3M zP~YI1f87-VBZBKYLQyb1i$m&tIWmg<7}>4!;$?W^XYzim$@B2k*aa!;n~C zQ+ESj{Ct^EP$(~Ui>cXbF#i79pYM`Rpew!l22Eu|p$RX~6!KXZkr3^4Xnyjj&gIsD zP5Ftg9fg=Q!6j$c19akM;ukssFPJA+uhtDB$tmShNO0BHR4Qt@YC6U2`uov*X@S`f3NBZrt%#_JhCv=Nx0ni>`=dJ zw$Ak)*|L0Ht@-N8+LM%nPII4B2bsD^0h4@_QIvSJ>0Pnh)gki^7T0Kt+y#y*i*Jy$ z&hk+gC%0dK9ssH{e5*x0T&F|2aoc+0Eh%bx6QnB4LywcH6xVX}0|+KakJ4PL5uiH& z1Y4`W&V zf=&H)#I%oSZRQdFVe*I4nPHvKXCoBA?t{!tnH#J=7Md8Y1Z2pgc^l1d_u7c4@HgbT zlo7rr2HH}fEeQhZA{t5oKioiEWYFQ$p00%0g(>Ms98Y@u zmi?=)o+@?!St%HvRy7ixGzFK6T{%`%$u(_@E_= zHEz``0oge>DCFc{TvYjpzmaUN6aBE}Fs>vz_V^8OalUU7PWjYvn}MC&4sLsq9I)Dc z0UpM9Te|p_9^v|qRbN?ug$Je-qoqdd;-R^t9YhQlyDP-p3=nfpk{^OWA6xu!OmbV& z#y2l_S=%FSsY7@QSnGG~DhJ`Z@8Kcif<1$PbUnsjcN0&UXpDSbYjy>^tVQu9+0x?V zvQ2D&p-{Pb3uq4vTYpZRO>85gix}wnGb4yVr!Ck|CJN|LrJDsg8s>H@ctt13sB#Ln ze5_1NBTi?c~;h~ zmV}E3#TGY+NxIbkga5G~_s1&4iu$y+>x!Q;SD2Ql)G20C_2%n)3`lnCRUkha*W`OK zjmjy^fI%VcV_@G994qhr)^DpKg1@N!IYLP#n2s<Wcq3T&&yv-he=3=%8rRu!q+(pU;q+lz9XZ`W~ zUhNbsrUTQ$RKP4GtPrq?$d5Rsa&#r}Z zFnO9@H-rx{f9Ob;?90!PA7GY78`2ClPRnm0EoQm7)7ZbXds;dz+q3woifU&C`q(c1 zf^Y3kHwJH+t7mOcDAQ;9X33qFfp+}OdD*68J}#E7yKW#0Nu*qAkzFM0-W?40yJK%9 z<3K!J@ZL%Vw}6^r4~1q}?4DhusF7gJNOrQZ6p-n>9xh&XXQJ;+*{TuZk``d~tqGAA z)^1QLo98@6oz!*`cn^>-X2+zdLVtvxV;OZ=?{h0jD-9BQ#d9X)u-|nN-0Hj%|6f`x z^!0$=|9)u+R5E{3Uhz`9VR-&>bZT*0MZ%U0DCFo^P3H*a=k{p3RmWv1K`M_En?sx4 z(wS-jG`K4kH!?`~WU>SZPQZ5kK+=oYA`jz(hdHiE_~sKjLb$0xKG-MgpdFkOhNcIG z96Osq9@Rkk3O!f~6$t;UH}}1uaQW46rwjT$0!xXb(>F!_M*VpvE|1K@E=wsUaF-u< zV9w}LsQ*r!JoTVKTKc-D-wZD3{o}~VHtA(Qtpf~|9I1OX93GV^-O@Bp_ z5uCQqP4|E<6JiY#eWzkO<&WeP>Z(XLQaVi7e*=SX^dE&nUSh4rs>$%yTt8=Vb65LK zWMGvd4nI--!$NHdR?3+{dJ`e@U1_GqYS{diymGUjjb0;%mEqV)4vK(=1aj|HtSW&n zFSs5F+yZQ#s4I7U*-rNmV-Kl`(5ALrvtAj1y1xHW_xskxcEEJ7`0;pBfUIMJqAN16 z+1rW7NiI6kcA~!px*&UGuqjTIYQd}#Q+u0$qzo&}CPN*03{~w@hja(tum<)P%(g-O*%9g=3af+OG%-91^lFs|r+2G#{aAOW-e1Bm3h_%exeJs;9%(qIrJ3m7j;Iz+BQ++10VxUaJK>!S z;=Y+u6EIq;B^1Mc$Xp4z6srVL;V3;7`ipqchDR$V0>uHrozn&laE<|Lcb|(3I7hBJ z(k>kQ11a52L>T*1q8TZ8z8&kmf&|-2K`VW6buZG-1`y^)Kyjy*l9%{jVA5t4RA>E# ztbbu)?-+cTEK`($-I-pcexU0WEHVuTuOt%7^q>ZiSTFDyA|=0&Ifc6(3UP1^NX)%B zr|%7L-52z`O`Z&EgGM5@eE5hB3GuMOq^LDJ;VPY`V~S5R64wPwvuO}>FVUKE&q3wZ zLy2iz+B*>mZBQa7Mp_wQT(cWWepSkY;0&vOWmh@a94J3^HDnOywW;D18}944j~fYX zV`x0i49Y~_xKHghzb(O5qxuF0CA1qy2lpR3iYgAV+BU5%+}+!VfT_aZ@pM+hAB^`7 zkQa*+UVjP-8J;Wikbf@7Z^VPG%U<5#3Hr)ZNuI=m|)`dnj^s4jFNn5Da zYa3aHN;f|_KJA88tz9qm021NbDO1S>5o0(%>d947vwwo^BZE7vgmM= z2PRN(PpSHBo0-3YxOwIasXW-xkGgdpflMP}*? z@?D_R6XyMy-&agfgl?|C%MI(!Pv?5d>^*+Icd>2##2;T_P|Ydee5%jp?zc-RVwR9R zLK#{TzjN{9am#41%!Fy3CgKJIQYjxD?Q?ss(ls0o4; z(wW@?ifr}-+@JMgF)57dYmfL$tz@v*B5+XDhW$R@z_*Xxf8B zF^)W=0Y(8w4LF5o zl)~JuHTM4MWo@s{S573+)7)s&tw{f_?~TN}zgkf4bdJeR6bHFp^)U9bc*P_Hu1&jV zIK)S6iUdy9I5*=l*FpAQNJHT8yMZzNX2K~`;}Fbp&~@AmWe_t91q43iKeFCx2WY4^ zBKgtt6LufFW8ArEh=4;n@LL5|VrfSVr)Z{WABWqM1!uu7gUja`+@!;SV5(CVB$g~MRpWqAwZUDW%8|-4+u6GI$=gLedKB!VMBQ^ z5RmZN9E(@R+(#G)P{y-zv&g&uu=}d=RiEEP^iIk$;mL zxuXE8UeyUfpTk;Ly<#v6AS;VeB-A@LXooaiR1~*D#F@0kg;ev;Xx+1KJ7hgX>@%Sz zWJ`M2QC$%tJ{YqNr==M;V3JmJ zg;uihk0yzRUYMwLCjW_m`;bwe&iPWDQzPZ2c&#S4MDs4_g1c{;Y2qf7^2~FHw{#E( zk8Iwxpneq+$z<6-C#e3H@#Z(+z`K=ZYhHL7sbgOQJ;QV#dcO_?b$P?ZyMg)%uGol= zVF2ww`VK{^LGtb+RZ)^njRGKfrYVDQ`#_RRoQi=?nXI3UL=IgIPRu0^$?z5dkMEH9 z24$qq$Zm3@JuF$%1PRFf0duP zCipn0{6vF1%#Bd^=XG`s-)$S(v(YA$D78o^9sMPYnhMx;)nxqnK~os=Ha<2r8jK6E zL(rAayPa&BN}5}j;4b#X6oO$h)@3D#p!KiM;NVvWPf{ud0op?{7XTyOW*THPrCT*$ zyhr+m5L<Cf23>ZkJghs7a*by?`I|0dcC$LW|lvsGuURE z*_vPcyFQezCHJ-Tg|JegS<){@li1P7ny22y9-!a)grYJ(n`VC6Y3In;;C+u9 zc@W?UD$!E>pIjOU>BI(}P=eLx-ZW~9>8$`u;ULyI;7NT`0Wu^m>`7Ke;djF29}U7% z#DcRUjm#7DE7y4sp>aN;75@q=pB+!g7#hbbu28W2uFTQVHOi#b^1Qz|Y%wkUlGt7{ zO|*v*XEV9jIqJ>^@qUDV*3qs7Ii>)UC*bd1VUM1IbRGDe zP(I^t;{a_#4WIYoG7bRR^egmW%}VYAgKCg_@Ls!W<4L$`{iKPEQQLNhj*cYz za{Wdojdykn3eG0M8o7xPHx`5q*$Yp7 z94(=np}e*$;M_K^0Eu0hh?g34ASarX(sG$6lwA&DLtpy0&%`x&(I>8r^jmWx4Igt) z<4(Q09E9Y4y0N&2-qZ^JEkrn!CwTg_FLB6mV_W{d9bH0xZD?YMBP^-}5ruz!E$0)? z35XDR2Hc>r_#|w1@HUVnQTm?XT+1$7B6HSCT;w83u7BOJ_JmQaP7dVD;WpcCnV|HG z1+3902s{A=USW2=aDoOH`3G|7B@=IDLv`zC7`=)lzpoh*)d8pSIW!@gID9T(tk!J_ zK3RSxj{Y1CKy5w>op7qY>{Ps`*l}IU3jrMH%3CuUU@()q0eB>*1V0y**SD0C$A^PP zR4iV1Z8(II#sXlcsom?Zg_4Kl4@~T3I+hzrcYRk85~C^h1LFOtp^hfr6*oKN4PNx7 z6A_)flLl*qNKpJn9mk#N4$9jgEqqzXFcp4+#Nz*7HZ{xt)23!(`oA_cBNICl!~cF{ zCip)?0!C&I4#xjao4U2jR3-bmjZMap8g3NwPHSg(cQ-hhU~sor;PD8>ofgGC{OFE$ zwA5oUzRvY^)B67T_eV_Z=_JdG_c_m*43l`}qzY@sD9ymRfCU4@(9GQM7@UHtG8lJO z;KpXg34s}08yWx{8XKFOiM2HZdI81=8cZ@vFyI>iF9KFz6zJ*d3h2PV_*l3MYyv<~ zAYHwbbYKU%03;;C(u)&t6VS!XA5gV{I%IQa=0z12L~}bR;9or*k^wnAy0$g;L_WrS zX6B#B=P~UZPy%~%1Gsm`);7?LKpKE28Yx-;)5fu?1#|&$Fu<7rHZwRizy?$SNLX1K46=ZdjHWUaz=|2rgoUNWujeXAklu$j zGhhm<{)_)p57w`vdeRcg@``e*k@=4^Jb+sO_rmDvtNhmAk=XMT%!9pEeVrPe!FWFs zz=aI~0=b`>8azBanl-yR1oXye*68FRyd%~$TCn4KF zKkzpvNoFX>~-^?s(4W#}BxN+@w55fU zHSb#<1ZJcU)~*6H2=Wv9YyL-(l2lK?9-AG2H$FK4ZR=#IK$=nkxVZY7-9&$s`6aj3 zxdaC2^lN|1>#qb2;1lP6Q?)jNX=?sd_LpZPRiI6-ZopHLzws~C5Fh(Y)&w8}U;tde z0eNU_HU3LKtF-eGdMbder;+4>(EW{)tTG~0FI8ppC8}KkNFUp zx!?wt)_|V2|JDr!f2q50CZJ#rzO=umPW1oBrtbRBrv7!6q8%gvrw<@qfXYb6 z==$?NyXkk5?B?X4$mRsP{OvCJvo$}nxITEvPx~`10{#|Glf%3@vN(It=h9ZU)Rr$O zt)d+nI=i3xrTybh$C%gxgfK8WH!<{{pM7i>yPntJ?0LPvhHLt19{RoL{F8p$%0hc3 zD5$0mNWP^Y-<741m@`I05qecGt--} zsfQgL90h$a^uM*0E;!f61vW4R3?!_l10ZLQz#o9R3Hm-)@$>|!;qn*pC*#dw=a`aDMRg1+O37pT4a> z{LgFUZ^)kw8UW%Sh!z1oeE=i)D!kcIY?lXYo)LwZXSCdnYwRxlM3>W-C6yKdH45AOpTUq3iN{n$`kVytsEV)d;= z!jOFvEy*sNR3~#3XJYcb&sVHy;#@_l9Pv6G>{(w0#(!7R3uEURgK%bt4F>aM9_;Jp z;V-HkjNj!M_m3d0sdT#bqw%clyK1g<5ey&dVc$g>JlwrYsd8Q9TZft-2w`dQ!iZpK zfLGv@cdHkJiv)y<4EIe&V!VS`sE}^-KXK*pBG)y@_~bpg%6D1N+DI@}r}l&(-|6)Oyp=IDjfrcE1z~2Ed*e z{fB@g&n=(4n1mwtk##jrW%KTHE#LC?^h;S#3JMN!zAlZ=s_iMN@t5+pqt&;VeGc{4 z7$?@-PK%ymB_(o^*-2`K#D)foqElN?G^9~AsK*);v;7B`MZ6{2}{%=tUV$2BT|Ol3Q3u zjbquS5vfsBOLvr5?zoHsntaBU4K`Emyg52d$z3b48ur~ZbHTSL8MXKTaa`sH6v!$P zL*RIIXP!1*5J+?@a_NyxyA*5FwB#qJZy_-mH>x^D`=I0hrYH&Ix%nJmnI?R`KX zv5O@;Bcow&Egm5?ZCyhZ#}Uywr$(CZQHhO+qP}{E8Di~zug@#qC4UZdYJPw$enrC+GAI?)NaOS z>kWP74=?k|QLLb;bFGZc{|S%z1&@{U3mrthi|VA2aO}~>(@$$q>bS4(ihYuPXdADpOFZ!6jD42Oi_d|W z3h*p#NX;sjnjw-x0Y0I6KsxhY0fi^uLRaej;2cAKJELBb69*GH8(rW9kxOM5`(2c! zFNI3TC%%E@H%`qQI{q(cX;r`Vfbn&UIH{KAg$yxN9*3${?{;yov;%1~toQ-atW}oG zD2=QMuJ>QDMh|*iNZFzHlXdiZT{HR13~6(vvLF)N>dB^C5{&llP?;e4l4!j|D6x5|fb_Z*`Cze{E75@R8O@*%U ziPHG)FfAt8l>?6NO_<$W>tgVK+Q^VkuL?@*E(A{oN5h=kyly0~{63`;_cGc4AYsPa zA_tbrQzgzl?;kpze~#-sdp(=?psu|Ox&5a@X*p#Ne#;giIkN&)btk65fEU@L+0_jP zr>tZ4NexRYvIjt|oij8}^S*gLoXijjbH3n@&Kjj{mTAq>(i_8Dv9Kxb> z)%rjYNAvOWwKoJ;f?r>S%R3ky-}JTg*nY_)(CgZqMvQDfEv>4%tH688t0j#3A+DpE zym{=Y_yM?T>m^;Meq$^s%rSQJ_9~G49-v(DO;*^Z<_9FYDXFCYv8xPEYVRv^_$iT* zHa_#37tD*lHkA_Av_xH_Jd&6`Ng1pxId6{VQ z#cC7dn3j&@NqVv4`?vcUZX70E@bh^&-y>0X?p%t8n^0xT%!FWmLn|uMRyGG^(eV;f zH75-A#Gx#H7|-441S2=OCRDyna%blt?G;K{=&{azaY>t{JVL&=*&#Cc817BbAS<>U zqv`0yLg^XRl1UT+UC4G)H**4_bc+v+c=` z*+=5~y+s22S;u4a+)f&s)y|eKs5Kp04K$Zex~Sm7#h%D?%q;&BhN2o@?yfGvU!?BH z&o84nHG#}RBJ&)H(kzM?n6+DUPcuMsv;CxCn|*lJIhi1*c}jICmq!gbm5QH$B;yJ7 zSszNinr5om-$T)k6nO@n@t1h*_=FmJ-~~deIn>mNc6hjVTgc0xDPW*K%a&w1g)w(b zB90p=9q-}#sQN2CD>4hfRr4nVB$~6#UCF9R)!kCaHCGBL0q&Qbm!Vo}4JBI!da_Di z?-LrO3IY{S|IOAMuX%8HS_%8rf#38EthLiIPl{%D_ovQ z-aeUC5L<8HGd62`c9YA65!sWm$uIdDOJ!%;irt(nFd-OjW}{@XJ}2Iov?o2BM}^p5 zQAy=IY-ES+-7i7-cx3-=$YY+>oTl3o)~XjlH0-?|dwi8SB9Biv0=RRyrIec#Qy9KM z_@*U4F;$g^JTAt(ZLKosV1G>A73*uHSFp%hdMn<3Jzu<|aH{Wgy?6qABWEa;s&#Kl zh!O{(B(Wy9Vd#J7CXxA`8IXr~nkpAcIDLCNz{`jN{YeV_*5b^sQ=}3U4USeG2M-@s z6!+!KDU~jncq(R?)5(Z!Y=HE(GK&8P+|z?jpjev$zZofKwKC?HL3W=82NgJrEwiikx1Luy3X>~J@@!Sw zNF~+ruwuJe$ok1ty79|L#bZ(_X^34Uh*3lcreo`}CT3pw${CFolVuBXl8(4)&cO5S zao9@rGDXy$+sh-sc3uj_d+?X!;nB)6Hf63DDxmv?N@*FCXI1%X8GRq%6g@GT3MbCCz7kTnTXK4J&PhBhJ-!Yfhm zf$5&VCF9U&Ph1;&`AvESj&nMi)M4lIBaI?$%9{dw67fC{H_F{rEG${#QWCDxhQO$%aHiv_jd3=+mbZ(#k8!Ih}iE3jf7JW`CZw_-haPfp5n?Z-hog@&l{Co#Xqk+godD!x+dy+ynD*G6?zE~^voG?)@JlGoHzG)Et)zgG;l1?%iT z@P-bAV;?w!@@Dk;gsKnVO|m~;a5}*T+9O!#xp~v_zVe&YzBVGA z3vr0WwlEItZb*UJE=8`$wJ!H%r0PN!ds}NzHTHnLZ)O4obwdu&t>@fMO>(-}|X1 znS4L3_QzVG+mCjKz`awL7N&qHzE*8JBP;VrKG%4 zC!G^adN2G}C3iS#U!n?WcZfKWghQyO=^OX2R6xjMh}+OeYS`||QtC5p&p62L%Hyz6 z$Ln$|2sMx@b{&_)83NGG%dH1uGy#5ze28RAdBfjI{ptSSkIKm~w=z<$w(B1Fwlr?E z;I&$Q9S9gu4NrB{<)ct40k*v+gPPQErmL&!xrdBBmWtdmjOB+>sL8SI{9)-C`l;C9 zklU}rRyJ^zXi)U&?U;#8d42M4;uUp~s-{KrD?dwX6?`W@{UVu{-)wFyLq-lM@Ov`L zCrA;gZ;r6g(y?&|XGc)v4j&+Rdt~S$ZYLjB1Hs@5hgJ`6&w_y`1)1PZaY63*^JQSy zENAEkS&BB8>$vZsnM~}Dwl3fGb*4IDXUj2?dC^z+IDpEem}(WotTGbkD95#PJ|D^n z?uWQuWxT2!J*;<%9Z%yV*>$g)B`JAF<|Y0P^9ny!{0Q|P1~%z{Mb1m=OncIrF0x%1 zs>Ip)QZh~#ia4l6`Rl^mD?+aE&cd=ESawGdir*oFt*Ee))JV5BUP@Sj^g&l0s*@5s z{8zHV3+0)Fie>vIHVM{g`ctC2!r*&aN+3ur-gOe0fh3pYm7vb%i032kZ9o_>g@B`$kgC&Y12xAG{AZ5??$1`+C_nmKyw$`In@>NK-j>|g-8V~jml)w+d4Jc+d>hdWKE!}4x%MV@fT$qO>Lm@QtCpwF954C$oX_Lwk=#Cyal+IaUjD+t~eYyoUQ!@YGUiXC#pqu4ez$ z;6CDxb8h-%p}4O-m+^UKG`Mns@8OvcWV1K4F_oL!nF~*H@4raWgbH+YDr;l^%-mDXFol4 zEw7SFb9G8PMfK4~dElw!l{~`StD291+VPLMpKY>1`4KnvvMt>ni=IS1D4BdjVy}oE z!>IdFN~!E>tr^Z2#C;IC{q+TSEaWDB4Pt74kx+(-K4 z1vwKw=?1FL+2?a)f!T0XEZf)dYhIVy<0|huwD^$To}>wfCn2=n6z#4QYbfup`&?P5I=ix7-~f_@izC**M-{hWX?1& z^mtu^Vbw;ZrC^LhSW-BK$l7FF&zbp4IE}L$+JxoZkZQZS!W(C!+f^kS7&}T`lY{Md9ik>UiBy@S|s;3;+@MU@Z%US~=a(C4hy%&#-dmh}Q(=SSC z0HIrPidGcH9&u<(keX-EJ`RaZysb?jjNj-_hcIeA#PG0p!f#~G&Xh%*m`I#{t4_8j z?Z%|BdTk0MfcBW$&MwP z7X*fFji!3`HV;QkX-dq`7H-AyQWoTPgn~)Xmi?X>Fj~YTsk8Oy;g?0faf`a(0`DL&?7Fhv zl$`@@2bZM)%FnVpS1=b4siOQXb7h9gjkhOKPUTf}NO3w!wJIw}jM@-at0N-SnC0&) z5qjoIdfPWb*5($TyyW*Bc+2I+1`GAhGN6EHGb6xPG*-9EsMKXe7Wm5X3nbu%#ZS3^ z4@#ubpCdx47W{;eI@1TPV07>QgdUdK^wH-xTBep{%1wi79)gIHMc?Q2D!d1Gp#>)^ zieg@Q_^-tfvQ(GrVBZ40wnKucPLe)zPewyd3Y$oNneft|oG~0$$4Et)``SfyRm8Zp zFU8VDOqj$VR#1Q{NVfjo=1|JP`0;ByQ6( z++$wg+@^ct>*hGJu7??~1$NU+n1?H-V17Kc7f)^M0h5XD8TsFfo;+5s{X)1_; zTvHNrk~Z1-kWMxQZn^Qp7_P{oBDPmqywK2RF=7`B+B$}(eh<>WGPBZHBZRzIR9ZD! zm=5_H?`yH1jnide&SIFNWGFhk{}`mbb{k3OAq-FL4=56Wws{+yLw{gkrrG{`tIh{$ z7NlYeCgxO`%CwxV9`lxxK*qW$A3EpUC40Ei?_XGGyMoevMgzIc4IZwl^ z?#qIAy%xW0Y;Ra+-lJ+o%l*vh;3#2fx0Xqp=O%hDPY-D#EYr)Qe;bg_aA?mJtTVwD zEJ%CB>qKPR#fG>n{FRT#m%Q>Lja=yF7BY5;P?=7Cv0N$29mDr4dj>JdSNhd^TfaCw z()`*X28|p0y@-pm^E|wjES%gFbQT_!be5i;-h%~ERfKs@)M^pPLuq@DiqN-|SZrUz zQ}AHJDpByo?5(aiJ~P+56oGC;ogQ^#K-m@2-np{ZRxgy>V445$^7E4W`CKD`@NuJV z3ISu}PXfo%e(zR^Eq05;W1iM4SE3*MC^E0K7>&@gx45)+}D%>zgvZwc8aO%%wFSw6(%=(mkx z113xn`%oh7FlgXbXw&!bimY$!Ml=X)gj#!J_d3?ICr);FKq-O#k*wkq3U`Db9dCG0 zgi>!OD7qB)y<(X*9y|eS#kd!ByBOIGi;`lOSJv;{5xZrUBb--J>)j^v7`ekPsF?|4 z*xhVHbi+%mbCoQ7W=OAG6R3-yYO_gUX*_xLZjc`iZ>hV+sAo1s%Zm(3M7_2$M0}mm z%gOR@=aB_JU-PHL>uMk!{9Eoq#Uhi_&ra%O`1gsVT?HmLdSx%03>`XkV0-9!R`_a) zj{9V!Y>IcZR822WW#;%7Lne~E_XlAGr!)KGDHsQSJr7lNteq^S|Ia7u8EE{D0SwTA zz?QI$nCT^XJ|Dz2HK(BOA5)ROD~Qc2A1I^*7;;(V+?{-G6Bp->hB=M}pkY9e81n(4zh;=3@k>)e0wa&x2GFCd z1@munQ&XD`LRhdAKBOAaX#kWWjiMNbJk&qz=o_G&2aXv!RM_XTY5n&7H!gMSiSBVQ z^Vmezu^jrjwthU&7+lwTlyba#XjnhBQf!`ImkrO(fz5}>ONuM#D;v=Rd**`JyvL;0 z^&8gD)FQ-nl*%@=xWHGZ-etGr!Rg~tGAok_SsP=z#PDR+{JT@b*B=H@xa1#qzV*Qg z&_W>KPq5Gi?t-Y5Bco$9HC=PDWuXG%&^{OKgaSmR*zZOZTQSO?qz4+FKGIL;z7Lra zD^uqQc&NX#E$lcTMX>=leEkPHQ2|XmYcZyyq~Un6`xgVV(F*jaOxE^&gL?2bCT30H z$i=#eMYkt)tYstVotg_Q{*JFP)TgJs!MkbGHz2^CSV36g9%Vpb;L1bDTULw29BtF( zHlUAta_Y8ODTp;Ysc?hFE*M)$({sPgUO*jQnTlepLi}`4oFc@KsjMRrikBa-C13k* zXD~G|S0k7P*s4@aEJOMoI0{Lwax4JNZcIwtJ1(YjeoqX*);h6-K+9M673UyPXN6FX z%h#O##0_ksaa(>0Mm%quo(F4kc$?Sd{y(XmqLXfD^tR$I`SeAPo-7>VJ7nbl#<`k@ zlXJJg2fsxbH1wvQ-0c$Y%X-nR7|8Y&EOY?SzBH!M&n_Ku(lDL0?0}Rsb1t201~R5_ za!X=t0FzR9tA%K;Qt6ZGo4 z*S>yl?s6kFoGO|x3Z7C=T}YP*!1^qgD#Ct~V;HxYX3EZ~nbq`EpT?_wdM_ONDxTz# z;azbxQP)w=nIZ;uaw6f~p8qg8`^QD`edi#bw`Zm}zS} zUam^b&0(4hY0lJGhxU=$jjo~D_RNY=~) zK2p7Gy;Q(<4IQ2dnt#Vj2?I)Y*gUQwE17hU+B!xUqzaoBxDT9$FeVY|g{f@Ms~GJY z_dq0t@{v^$)La_9R|u+mlgaW|cCN9wpO3eiP5v1IY&Z&i*(?Qa0+}KFL)yud*y)f4 z=HyQxg8TC#SxT$=JcnuVHMy{Gv0APZ)CT)_4#fcR`-}OJQVeA<N(Mn{>n}s#I5S`XD&4oh+L)X$9 zOnTL~Qqw8qreFDkD@_ym8_sGz70)|EIl%`!X>PNg&?n-|rp&E*y_?E;K;oV^gD1jYnvVFjs%9|!}4DMxPq|j>=Skis@f^) zEVk47mY@S`m4q`YZvXK@_GX{}VeZ#gWTJDg{j`vmzBf^ARa<{3BmF`Cp2yH2_jz0Q z2EKT}eC4A^20=`KDHYo)6V%0{DJ?V68HwfAn84PIbhKBN$^U-k@;sVBe znXAZ^y4otS38~Q6U8g_`f5DeqdRuD49&PB-Cn7n4qlbqSsre2yO=-I*ff_>AJR+s8 z2-DLQ&mdPjtXDzl#K$G@%%gD)D4d?2ZIiq^STd|fMNdDo!5kc3pL=DN;v0GZ)v2D4 zq;gw@dQxSD9YV9ZXzcc;I7}Hb`|$2c)zF4<2N))-PZ@b0gJZ5ymTA0jc&Rm7oM*E} z0Ph#w9qNRYsl(bL0}k!D0sG{G7g0344H7?t|ICO~*z&Ex;#^dnt{Mb52GYHMG<8`7 zXGgbjz+w?~JBQX1^sbBW!1U!9{rl8*eX02~KbI@e@+@zF+mB*{^T8QTMg@U27(8*t z(c@Cb=Kt|rq0rOe5xW=!nQ0dfbGehJhn7tYpzT% z+)0ZG?OHFuCJD^uh$rV8*`8T(%Q+I&fHxhM$7u4g^Oh?gO)fj1mgM3y-g-VZ_Q9m& zHL(kMVA;ylAT>e8sMPyEgLN(9?rqc7cNU6;{XaqXIK9au=H z9D_$#ZazV);h_$w$TzKSwj3%DzkoTPWER~5!tBDDcs28&Z-Q*l#9_(fV_GBTLbW(t zmmaCGGJwxf1b8kFRLqN?3R``}R@yc?7k-D-eyDrIo>NEYAxcRDJ#)=53ycSx2)DZJ z?4nd7toi6{XmwjRLLyG~D+dY~*U}$N%X+ROSvkBKvDQfFuQ178EN2LV{q><3KD4kZ zXS~sn4duSV<`0xUvq;pWGsWUc@dPd(6MN7T5vtfYeKf>mG~Ur(^lQlt->?Kan^T{H z;mhagCDfBM-eS)HM+<)4)|%Cb*t9O_Lh17;Dw@RbI}Nef#wQCPZPY4)T>*zdi3b`- zeU~ec=Skt+FzO*qj~EH!8My_y@bbcQ<84KLkNcQXd`|@MuhK5dUSk9B_676)jl*i1 zqJ&?T%vv?iD_v4dwnFU4LCddv0e-Fn)K7Iv}Bgx?o~Goqc9eRJj4NKSjaa zc8T>(;Y%m}6=6?j^&E;y*^n5A53W<4qHb+)fF{@d=mf;`RMHh@>$A*6c;+m)O$}8T z`TT(!zG_8$>GkT_F@~-pz>$}bWt#2l!Z5ke@h)h7Q7s6;+#VeU>hQ1l3A?~${VH}O z3Cv4Qk}@a8Io@F!*VOy?qkkwn4iT;M(#CRTpN&DSCI3X%IX(ve1_$)dsqOy=6V-+7 zZG9{0PVn?zaj{GvZZf~4AWu7KjXX7n_!j*J2yMSu=!GY+0=6OYOTZ)>Pq$n+DGt%r z))I>EcA*IE9b~+PcQ8ymFlEyGF;gs`R;F-+mzRl7re? zr5b9};dt!f-YI!#8no>C9KS2XyW%`$Ys8((0%UT7_BOO%6nXKlf_9B(&5(+xa=SHT z{}XuY=;gG!mO2d3-Q9^)cD4dNrq_BdA4AIWrMCh}F<7-GhpJ|*52Y^QF4dh(Av>=B zu~W7rT9{N^nu6C5b~*CYFZ&KIw<^2E5mw{$sm^qboy#o(v>0KCm+qM;nC7MW0OUTq z&1~#M;5$DCUXd@XP>i#Bk6@K@n&%sq~hcGH^v4K+?zI;mSfnKwC?`YXE=q{_^ ze9nyL-{>+7uj|yXX=7me29eO`Oc@dL6mT_9tnNFGDkmfE;<Q+T%4~gf8WC%hEdNEnX*z^H1@tHPU~rmHk;qm%>sy+z`bR+IbONgNTMK*`6`jsAKP#6uOR41>%Gs# zAoj7-4mkV2EefX++x5$d*H1jXKXbu663~Z)-M3+c)Q=+t98j-n?KM=Wxd;H27J!~4 zOZOtul9ok6SYGidQlsjh6h2=`r|=S+#1b$mIntpTccLngyz}2V_g<0E0tCbG_Pu~j z-Xph>#Bjr*oB>npdI&{=Ik$sFXPTrW8WBcs=Q`fciRE1-;yI^IC#y}*P&-{mLm>S6~u zQeG@AJk;+1^*3x}>u{_eNgFY&Q~4(dpT3XtAKtl9K`aHst|yCZ!+c6Nf$o#K(dZzUnH!Pd;E zp0zOPpt1fvVJ9Oxh}o!n73pKBsPhp`DNTs!XnoQ+&4tmv6?z2-8mGc-#alR=c;P!4 z^{JqPk9|DCu&c!{-Hc6b)#J4m1+Z{a!&CBDiaLa6AVHPpzh5^7tCSOK4z~*XSV;Em zdl>GCy!hOnAlcQfOrWQRcVsDOyWu_S_bOxDVCbJENd&DeWkg8{6x5J-4c*#m=3Hfd zIS*ee$|d$e;_e9;uoKzEHOS7P5Hf>SCY+>Pla#Ybt!Mi+=MKqvLh;T;#C1llEDtM@ z{HNj7pI>Y&J5b^SRGfluE6+@h7aV-TWej$-!kzggZ)#VVkmP1dai?%@Q-xz2qb0R- zsdnO7lNh9aNm>DVs0L!+Er2?0u!Z`7oBtbM8^9QCl?f(oBr8oSZ&%AYoei+tvAy+;x*$z&iB99V8=|78CKTcK5!6!-8pl}2CQ|>zxCTGu72}~ zRmtuY+v-u#W@qODo)d@4bO$?4=Q@Sj8x5pS;S!_3M#U{In5HtlB?=+{^K45B)Xy!u z72buT^?YTM=j<8UW|G2(!lO4wX6J&QSwTZl+vsS4Q8Wiv@7*eu7B^4kz53eAM+`Vk z@eJ+$s=MNHvD>)D)WhG1CLh*pShpJecJ@$EA^j83dD8+ zn|1Hh@6b>@)}Q@YJ?ctMO}$^2rg#w!l;;W3cRHE4=>9rsJ6$?X$CH>%LPF?rr5YIGJFN(H|7o z$}3a2s}i{51sgq4zcZv(pio49~#S_TBupt=qK5zCcgtt&AGw z-}kEESL5*qu_54s9(ls2SMJhv6I}$U3Whopzmyuz=NWg(o$ARu6J(o9ah+7dM zCVZ9ww7Q22d{umY}_Iu+na-5b=B5ibCd9 z@B3!gS1xH@5+0JdawlxY7hMRC88(w@4xt`5HT=eKSDlg+-E~wJ`tH!jzM(rg#nUv= zOs|RIRRM9nzIMw^9~G`qr_)07MeYv7gFRdE>^^KVDAJXSwPuK5MOXVcNQ0V;`gqYR zv?{@*vNR+5WBnC}%UJTsbxU;~KMRUYDFD*`MtAfHVNffNr7L_i zg1b61cx~Iad;#8PhcB5~bnIxqF!fAWtn+DRDJnYRA^l*xt1s*#;;NLdrWm#->fh*R^uVIw{FXG^;{OYW-aGNBrO z+(WITUbeZBy&T;5@cv7f@qS#xnCURX)Kre~kk_+c;vHtCp6YCRm~e1*ukxl5+itC1 zvLG{MB?Bi9VAC?Hy#CnDb_TDR=qk;4a`bR=e+csjH3>Ohl**Ury^fdV zQlFUVM_`n|+T@!#yY+;WCxh>=uHsApZ%^nIcrAIg`|2!5$t36}CUJbAE{k49%2Qo7 zm^ZS|m-zwhUc2oPA)HmGysm@v-AO+)JrWVGWPTAbEGCY}9w&L-t91w@}_YoP5k!r|5hS@jt$I<{%|S`uM9bqDDQm2*Q&Aa|p?=%1emrfGi=ZtNwDccBe)V!wn9Z*eF@uM4rh@84ty2`@K z-U-wbo=c98{+fO}T+tt0JR?8?KE5)DlKcVgNLW;k7jU9gc*lvXU3^wr_Mpk`C^!%3yse2rS!mfv5b0MkbTS) zwMi^9EiL8z{gFLwmRcp>`{Cti?z^o5ZTI&6i=++Q?>Jjp<9*45QbSb6=+5E{8hRa4 zFkG65#RD~J4_Y;>gH5`G)R}n>Uy9DTMhVqEhTM+sAchyKB-_N64E{ByesCWjPG(&p z`)rz2jpik}>wC$@q?RkW(lc$x+}D(id+y0irtJ!f%*);IM>9c*U=&Tv*MR=g=li?F74FqLq%GVH8X7|?>fysNJbgxuoXmGDe4hZpSNiuoGoIS30w)nq3*R_5^Q za!cmETXd4WAyecQG`46Sb{B(C{kX1iQG<2}RdiT_V@(lqsg}`<>iIe_KkEL&hqeGY z^Orxx5=G{JBi7jdH)4&QllgxTH6{Wk7G{qBIsLzZHD*@U|A$v2fT9<(v~e+YBA^$u zF?2B%F*UX~F@@segK~CpGBvb?^4M%u^W;$R#_xAJB5NvXa;HHyGK*oAYKrmAoIw!H zVl?NNnZb01V-^;UPB@VwRBThDy4gu8MM)~LDP56uYOSUdRlLKzwDsKm^~v`%oBQV5 zyLtMuW9HC>LcN;^!7QMj5q%&D%EaBjIT98pt|Wp3HX|ls?%~HkoGyC;L>k2r&iVi5PWd)Uda4@A&A~fQDNK zh)RT=pR$_9=Jm}D4$dC`>gE}tWY$)hPp#zGww~fnjS&z4aCW8Sttg%dAR3A%7 zA}3%rg|UrICPO+cPzHf?+&OfyhBwBKf7xxhMqQ+|S?)(=rLfAumag7$MijGvMY zs8j~_$B++P?oTp|kPac?M2Ucf$FWORxg&f^+-xW@dk`#;M-u7a%+RKf77{@w2iw}_ zhF1^?v>Z|UuVk33tp^Lb2*SXUjTDGc=SL);8Umzez_~=RQf{!U->SUwrimTLOh^Y} zKxZnez}eFU5hrtvK&avj$o^=NQ2^-E2}x>OBUr>PlEtM6 zQ#(Ke3?DDf77@)e_r@hOkM3oCM`tFiz=#Sd^P}uPu&2SmhR7edCeR3o5LHlPT0s9E z2GJ(uGOX=uZLmI?=}KnQli|gEs))!R6`%4T(@=QG^$f!u$svd9mly4GctD3euq$qB za&nD~0QPp!`?fWWF$ogufw3{E?_ksS=e4XX=o$t6`J`09fC2=V^sAe|;dCX zM2TJRW+$?_wEM$}?-Rj1&i*&F-I_%eXG-4^aIWhu4?E$-BHxDgZe0tbU9sCh0-Z;m z*K+VP=lHgG2K73O0`gB1t2sjMwlokVAU4#G?SBfI<>ucj%_ThV1*YPPu5zt#2n(Mx z|Jus@c&5L{%um`sya-cQeNCA`zq%#-DBUp)=bauf*1)D9>i8}X8FD_MCA zID1pQttLr95#32|C*c`^3|f3-qOk7!bkgO%8=AK77O$9IOm9~^iR&dD#`WE4`q()F zCs&T>HOJ}QaE3Bk%Fmo4Anm0yR?Wl2ZP^XIU%be%_;+Iygf z*K$14lm2^I`~v3%8GYDn+gi`}ZyQh$KPs;5npMlSk?-Lu1-C!EZ8tL8q!RnBLYknO zUkHfVtB6GVEgl6hcF~)^kK^imO_tjn(eR?=r)PfM`QFVKmrsGF5xbtXb^Bf-_Sw!{D`Z1j?CyVzuiR~(x zbv$D)n4sYxIUtF( zwa}Zs7VX=y$a4p%c2Hq7FslLLyx7Y*PtAQ#@HwYAG{^Gv{5FxmxAQ~pD6k7xI;UO( z!8{I688_=`^N*Er(a>~WLB4BmnnqcE#O_Y5WasOyLuN@J!ggZG{h_E4Sv)3E8V-4v zPL9{5WsU^^b^Nco1huSD<7sD9{Fqn}PI%IG!IRZVDOuNAqqF{~HE<}36miYYVd8o& z8|!ABPGeO|tlaa)2k*4YPy9n*{)~sWu|R3u-=8_N4rFK zJNWeESmoRmMys^pnJccu@A7edE)=vzkE15TzfG%lz+OB5rCYJoO|jhemhWU(j&Aa5 z`BGb6Ou_oHYdNTSlXZ_(K4J3o|E>=8L!sQcX*1YA23*x#9!Tn)>%!lGac4ggi3h}5mr3wxrQuc`DxwR(w>Z0j=Q zdsPyg6z>{`E&?rn_g^(F$+kPu+^;SQz1O?XD6sfORS!~x7NR_ghfm|iohjhr z4g zy4_wT&6V1MVSj=dSFfz?)*aecxe@H>IiHTnuKf!YZ#Eg{k45C~toKoFq+1d39{ymq z_Vre`m}jjix{K4)T`UpV>DC3sw5=YG?bcI^JpZuuboKg?dg_cl94m=u^OtY&6lD8% zrQ|dZ?L62HQhZif&c2(bNmuP>vAS0AqJHt;b_)*`8_XSX%GUcD(Zt$TXIzQc*F5aj zt~k7Qmyd_4TbF3=I2S4ovmSLr3$vSq`<&JnW`q+}>(>mYN0j&BE9U9#URtT9Ne8#98w9V~nNNF1UAeibQ>$=X(!yq~|9?+tHnUZaTh-4ehVnnMxX*3cinn&ZbA$?c(U(u0y4}5C- z-WOP-ovFZLTIEp~>}zI^;ZR`@l}x_SRrBF^`KIe!?Rpg8=}FP<05YE%tUvKMzi~*e-0}bkpr~UUTo!uY7afgJusms%?Mp93p zdUk#ht=*rR#)2QdJH%D)qCdm89Svejq#x|biCR&Kj^I7ZVbaQA^?AFdJ9||NT1%65 za4iO;i`U(3eA4mW%u5N2ehh;I`!$$x9mid=VvO7Y$vjxCn;ljMu*;fmcui=g)u;u1 z-BO&HT7Nn#uzD>Te7@%EOKGP5{V7U0(;hzF^p=``zgI^n*YlB4Ev|3HVPro|mAD35X5|B7Zx<`UJF3ZlkEn%+g8lD*Q3!1RZ$TZ4M zGderW%y2HxEOw-%C`k~ODs@Fl{G*%dT}ZXdMj}!%aouT)-YnhARMh^s{{8sMna^Rq zd-A2*d-Lp{m(CkBQr-s9z_<=Aj)dtkOhH5H00Vb@W95#8ziDWtDE5Nw{DNQP2R8w(BCgRM1 zx|N7U2MRJZG(fZjPI||Jg;Qq^79#C%Wd=(S6(Z$_BM~BIg0T`IL7$Qa2sJixEL4Qs zVdA|6(C7sKe+YarlLq2(Xl#H{QK|@n;rJh+7z>d4F-mL)FeZ$@IvG+DrSXpj4L?B` z0!p|d#0hd7M~L{eK*f^Sw?W_sgdm28h;(Tb)(m~Zb3T)PMYr+DoJZ07YJ$&mq@YC$ z&29FsProf+*c1XL9rh$du!9H)^~N-cd02rI_VVoB_;m7Y;XC4{Fr`e)Ih@p}u|sJ) zQ9kzYJm|)}D~JoXc)>y?Io18Zh*3~$Oo;_PFyUv2@sh@-KZH(%krT^r|AGSuY6!KQ zAOdZnqoRo@%k}U(j&O#AzAYjHoDDz^&;aANL{?FY5+@Y1t|6IL6PI3)qyPs=(qMI> zL&kf;q3MDY#{QCphwFFyz#BEv4kQEupIk&922K)FH#}Ax;29$G;4$>GCLCIuicua- zWFe|S1qB+!z5~)M{xGDY#<#zjoeFKeMdAcL(lFZJ?#AM70tVvfZ}cBUe`!Nddni8{ zs&J7a2GNs{kpUp|;71~{EMDW+J^~}Moka))7)lrK>e$?(8^{4wnXJe}R!0`X=!w`q zTQQ?hqYoj}w8_An9^{~ixmY84obVv-LJv@IrrxjGA0b(3Gx^jw2m}_O4K5BKNvcpI z3APYn8yp-#o*aZez&Hgdh=mHua3lgjxE)SOWu%zDCiN(8zXQxPc}t7Ix93%n z(<})(sRv%CYPFnODIYbX2EuVx#cJ!9T1z6K@!wEJz4hKy80z1%p#7Cu`EHG^ zob&mBNif-7LsF+Ra=I^zo=UgyyUEp!d)SL59DH*yOn*Q0QXD(ElV5U` zS>m2p1BWyAD_T*A#2UA_}Qq~8A>m{yNq2iI>@3)Qo>45v}-PyIC(Fk)x z&$HQ#=Rxrb<^q)w|xRvBB<9M0L5t*PsUdnCMQJXS=fx>6B3;LUnRzLO zTkhrGM;oylvRo3<+#LXXn`l)xFci+ijEI#@ar)nstndVM&9vv2w z>vt~4D&~5>B*U8;R#@t|_oVqrnKx)|AK(+kmQRmhlhZHutKU#dy^c@f>l`F&w625p z!TDf|k$V{rrKE1AkU_WDe%_b#Yj!H(*kfB&<^MHROO54^{r;@*;g?PvxT$GcJ~70c z%P;WkskC%Imyi6@PXo1czt4E4bg5QLD0UxdI#&L8(w%%^_aqP&1ife-sM$#)zd{f< z2(^8CDOhArqPx!Z6KM~CqRQ9Ayuf`;Aw|uWf5XkQVVHR0;m{GN4x zQHW{roxzuw-`oZ@WOtu}aa$k9Ue+h^?GD6dK)2DX@Uz@qVUNq4xp3JLDw2+Sh$#j8 zcm)P5pp~#HqTZ%+`G<76{4_Yg!ll4JVlv_2`o?HECq?%%@~#$DTCh3&exdB<>U8Wi z*OnC@iM7e|d)_QnG&Opnc+fTzCm&j0aPlS}&xwA}m;cu0YoBhd&8w2N>v3!OBEB|E zH$YXaeI(NNYWX7d^k$uz?uG6I&s|$<2WiM7gT}rT=673eq_b|YZRYoI4t2H2%62q% z-&tyP_mCU?{kYxZEoX7oHOdf8`^(5R;g$ZtyJ2kWX(=A9oQA<|>Isc^lgOyd@AjuWgQY@N$~LF4ahm#``B)7O`U2Bt@4*`hGX-W9OTh@?uorcr*4y z=}h%z@9M~jjk<0AR47!`Gd!(eN>_B^xsb;@%axw<$A_}(`J z(P0&S%M!mVsi=;IkALo6R)>jTURH6!OVY@n-d?X)Wx1A+y7sX(cUqcq(o^$n-7&qm zQe(^3?qpObRj_(6$|0UrY-?Wx-?iHy>^#U)p**GeMplS4O8 zYU5EfMiizJ=$Pw4J>^C(`pGJs=&B=)*m>ChI#*$DDM}+>9?J_uh2eG8|;qRSfM@ zuH7sg@unY7RVm@9y#T0qq=we2sK$ayPVt}c&4m4!>lSvT-B3BqYFb{+qs&}0ZwC*L zdf92zpUKvYN%?$YiO z?r-xjtS)6PP>VZBixR{;JGeFWK8bss;dMhV~|xXZO|)z#K=)@2?z&QgC|=!LS8< zmLmw@oFAPY`0pT~^B|W%%`C+$tN@LdR9cl-Fx3fzShusYapZ-?nl(E+{nc`{tJSk`fA>qx4X(f*TpgRh z1bMXr;QRc8?ZGsJPC>Q-e^mG0$^cQVXaWh?_wGqCOMTgK2$Y192;A>`!vsPB{%bDp z>Ky&B5a01^Y-V6&Hq-UM|TDUH>MFK{`Qi7-Lo@_YJ%VVMSj&o;O^Pg zy-dl~#hJtZ9ydBC*1Z5}Rc!~**#64j>6>`gVVFJ-39P{hOyqwVEr0lA;Sw4`b$DC* z?CAiY!Rhz>KM0U54dH=0I{-aEe;ok{slL(mBcA&HK9bA7EWWP|iRCs(%Cb8ou7iN%W&9qnihS z?P0IJ)-nDtyg~A3FbIIn;-8q$H2_-%e*|zp*%$bO5XYZjLZ*~ILUHM1A0mHo z)Fu8fq=E8Za65nvmOlb}fb0`|kjlbOFv0ZmZ!8GG&-8C>J0a@~LD|;I>ddb^1j)`f zd{D9WH}->o51JfYg6)?(x|g8CRl`Lb&z4RFZ2+bz#V;r!pI+egvQan z4M7lxZ(vS>=r83A@Fb`pnd?4Sodh`ock!pavAs`vFq{Na?wA;G;nZ}*jfMW z1iV?Z1nXTu3(#NVlXv{9KDtT`LtIeU=jcWE6v34eBQX7;Q;C4$sHl;gmAu&s8WzfHyQ z&;DFFe^LRf_CHKciFkiKU3O^lwLZ}xo0u_u1fs$-{BcOi%NO(zmzQ5?A&}RPAxxzS z@bmx9{O8$F{_Cgy=gGAGx6ShR1U|;E0epRF0>9kQ67t>fq8^cixxTVG6@crs=PYoY zQ1|yUbIy-7|Ls}%JDHZ?@c3wY5GFA)2&xz#AAR)Jaq#jNuM+Lg`}4=cnt=V_|8VDy z4gm7s)l^VJ%b@`oy5?gMR{@bgmsKBJf~e0`J%~J~A{nSLk#k2tmN>an0uqf5)(&p8 zh|WPd*~I`Y1`C#QwH(yr=CN<>smtwbP(j{ehE{+g7)?OKpIS0oftpa#f~&kPG~rMi zr(UK$%AK*2w;~6&h|Q6Ja&h^KIm-4K_{|lw)Y$0N1Gv*1&btsUD7}@8xA(eQ8AELRD5v$cOR=FVNYZN1 zd9fcRJigYLmT8el7|Q@xX8g*=|cxlo?EnvJY~y80NOqWw_9 zkxEggmJ?utIL$g?7*CHeE%0LRKv7};4(!!_vDD*ae=ZPID{Tqdjv1#98Mfsg+oc(rwcnFFREe9WPCOq`!&qtCI}gcU zs?36NXe8>X_$F$gO>F-&vyx!(XRBO{6^pt%GdVSV6bc=~>w#K^LtY-;EcZXf@yD|X zoqx`H7p1-P@)o%xNO3EM-lqrshSV~?;Y+h-vxcX%UJI6reW%VsgW|D~y-ghu8tIIU9$JAzuM^JS=rqq%a#LiI~^qOSah zk!Q7*!z23Un;o$pm%F~N$VbT8na@V|Dq8WkV%SicJ8+%Ip5p3duGjNYUp)nWC#$ln zhOF8oe}pM@h)$mR8AEdD4bP#woctKLx1-@BO;(uf6=8Gi>C6w&8w{)sO1Ys568ZI* zp$!|tuD|w`r1-KS?eX>{wk0;WdAM#6u?(jl?VmQ;^r#PMuLqo|QLA7Jb*30rIkd-z zjDA5x=t4|M=Z!*HvQgfYvEPy2Z&aJ(bXK&)yA%ma?R+5V&hmlvj`6EQdA0Sz2W0}T+60(sDQZ^ z0rg+mC_E0Nh<@`qE9?fqec3DJ$!iBi&JO-~M!m8vK5s~|YWZCys zN}%#jk++_mo~VVWzYI0@ozS-g)Z6Q3tpVh_you6Bm>JR;;V!j;=1}Yefo^OS=pdj7 zrtRGfNNw-&tqDa+9y9+jX}p@=r$0<&o<}H|WP{UGIFndxZvlM{t>yJ!^Ye5@eE{1u z12X+Zl+bP)^(40SVsfWmkkUO5-R0ND9O?E&>E^(k zW)!i~?##baYWJAsjfN;HV4q2@+U_}*VDc_tE|86?LV3tbrf>+37+G=j#$6~U@(GuN zmIoo-h4Nb-ET-;4P=oPHV>RL!8j>l9lY z%fAj~nPlakp~>8Jo|LFa8duXCvGT~%BO}R5II`c|?`My(h70jWl-{z1- zBO0oB0mtmT7T#>)LkI75X?>B+9H$D~vNlm=S=*9-xHyw2rKk;U-miiv-LbWO7=N)Y z**zU@PVNfPW_Q3zmHBdljj+Ab%0yp+h;+*X@bF) z#ZggIO^0Q*zc?ecbapZ3Sd|^;t{%IVRtp7G5$(_Ga5J~^dWvvC`5Q0-*eMIfP7B{~ zTa0gLV0RD42?Bu_0Rf}I7f8#0 zT4YOB(mMk?5^Iyx#ARQ#8kR%nfdfQCalVc{tZWGekskp2$AwAsThvWl9eC2A5?wu}_bBMvAuUTI?)leRnI2U=XvEc)pgG{L)1&6H4pPjb0I?%k17gtv2dCh1m>X{S8g1BQS)QS=6hu|=U_9eay#5pGHOv_to%SDexiY3~)o;Z>$?<@RHY4v~(&-%xu^m#H(iKtPL({ zYulI=t!%rj^45`yX9h^7)1~Y_@hN9-v&+9fHhC6+zryvtC3<`y_*zLMT zq-!y)L|{|mT^Q@@Y~K>kvP*GMJe6tR*ui_(7O3`8Xrv`mqz>}<6Ulx`x%)wNX}Fv0lVZVI=|Q{*l!q4of5&D`OkAn#?N~?k4Mc~ zIh#lcXe*i+KN^<4=n?xbPReYnu=>uhGo0;ad5y!yWH5+`^FyON0;XRx4Jb5?pO5B` zl}}PfFgC@^r2df4FPFlBYMz<;IEu!ElmC!hEAVHP5#9$@eM{p|6nzkd!}g71Sl7r# z&NTibD#(I=f^J9iOcso7k(MBEUC3&fU-hVYXT)CxXa&Bvij9!+w*ui9EyHI-f?Cm_ z(x^8>KjyLmoI5TyUJJ5BF@XC=hJM&g=0+Odyl%!N3s*8`!S2c*8(YSB*NCpX3vZxg zP*Q6gQ(=vbg27SV%lz&I!EQSM%B$G=Dfc2t^(4zZ2DuEMp%qO^^ShIJPdYX6wjRc(Z?|z8n9lLYbiHlA^3ztApvYW=rFcoRm5gqnML24`>lFGmNO-<_vwt>5x=QU+TwJV8Dr6;qq?opmun76VI* za6of>*EHIKyJ{r$z&7fR48ZmPi(R71PbDj+g2E}4Th>)ED&@I!w;_H2yMcY-&|8B(v{Gi9S{5 za>Vne(NzumgX;eEm*y@j>LB@7HaQVlUnGiF=}4m6NL^xx$B#>tP*~{B_txIEeu!RXo@&Ov5G;FBYA&M zV!VH28`5W(DHR$0EfSRj7Ka#1I#*^kAV9 zXIhO>v*aHqMmu0%xz%g|VHM1{cg!B7cc72NiFSGMsh#d)_sCpQxy)lkGA|RxMgzJh zH|Mq7LfL!kYnanoYhri);72&qyL*~@PYvWmcRtPR#@O2gj201p4{{-7rJKypMZxNL z)PcWGqGz_kO3xTJK>`SiS^uw%O`4R}SI_x-`vTumK*7EE>Y#fxb)?-G-WxuD1wSWU z6+PsRA2lEt-R_n3zZ*lGw^A&(t>F$hgX+k-x_)j+apV^DPuy6vD|3C|c5(^?9#B*7 zNXu@Y%ql&b8rGu%zFnueC*$s$fVetUf0=2PW(;85{19ovwc&o#X>yeFfP%3WzL`fkp;NPdtuZuw5X`>nuQ!R3a#i0H~moI~_kPi;sT;5`00&@x-3x@u{FIDJ=G-{eXX81rv zIXHZHfkm5j3a~vu`pUjg?^&?5@%Bet+?3@?(D&#{Ik~#^b#N=mNQb*9E~M|vb-rF& z+0K>-Q(Pwby5Xg1?dkN=Pr-tFzT}8<);Y+)_RlAz*UZsQ*@q^;Vi-&=h5r?ELG`*) zZ#J`U^2qD5`JCIAjIxR!P~kTAu__LG>Dz@wWcXg26OT@`$iv?bMTs6G5(%{9xgtU+ z9uQTBOJPENG#9r>x&w~)0ZTM1SZ0wR1b4#y{k_J;JI_I6p$Ed_-Dz6%<3% zAu$r$idtM=UngKE-7?7)(w2g8watORq^H zOU|TJC-UObs|85VNT%)ftWF)}&+r7TDfp3FnQ!BQ2T!l=s_lN~ireCxOfH(be*OOlAkIqt2CyL1kpY zUgm>*NUo%3Lkoh69xD5FBok?}pWwiq<#`-r7_Fq847CE+J=xwIirzc%j#n9IF@WXt z8Qr0gPMPoO^Bt+jGlFm`z+YP;+wYJ+JYFrf6c;tvs;~Gvjv9W(oDeSxWJ6{G_ZN$M zkt;b|!s*TFlU30K&BM%4F`=KzNeXv7V8s8zIy&g&Db9F_M-1?m!Cn$Y!Y%yw^G>H@ zo9;{RfKFcg(sLQQMqeGqrpm6pmjri&Hf1u=^A?WP zHTk0$38djAfbX)4y$HZ-sD1iz0h<(U!2#vh>_(}Q|C;&l)ZxWo=$#O=)zknzn;v!P z!)e(PXdWs03YJ_OX{bv978}#SEhkUCv-uRxwl%JKGxk?ELE+<7f^`LL@mvf2J+29Jhc^>4|d)4gLl`)*D_n z8t7DwjyuGS@cixLnIjmz8gbFQ<512%^C()_qJ!Eai?7WbK*Df zQNTx9nlT=AtZItU7fPDvRxz9gJSm!P7k7gt651LgnkgaB zJUu|NxkoG}%J9ibZ(+)uGie%Kr^W|Q*(CwEpNVj$X+A^Y((^08r=SW_D_E2FC&N}R z`w`%4Khc)A^{JNSVMS#%JIF|S2r@~1t$dNHSD=AqJa(%t?VFBRfks%gBe94IG`Cap@dD@)s(?)H?BJ?F;c&uU|Zd39JfUb;W) z>dh?Zw&xO~l>?T#55$C0sZlnuE<$VNXw_HSC*-ERn37Q&Zm*92h{0LOSjT0`(%KX; zI-GvK_k!B(BGF`(z8j9-f9pHVPIYY7Jp(*;_gPr%1*{gV@8PN!-R^K#-SkzcV_`Bo zvZ24cQm+w#*6<)J>Gn>+FbF+p5El4|53q-fAb2riDPegK!91ASG4v7OTi&tDTyKWe zhqNsOh*9xubvQKjJ-xn5BFv77E7$^@?)l624@jmNg;H_4mHeJ?FD*Wg zhKcXxxsG_^EYq=3|LD1x?HLU8c}vp}Ll96d4nirS%LQnzb}X6bQ^ynG!6i zKbxvBL&4mfmCD0VfoRG#o?Mz--5l4aogAMW1vHKvjR4oM;;%}3w*(c%H;pwq94Tv) zJdpj0PSlN;K7?%{RrsfZjp<-_3(i>kOqsc$b0997Mnpbe# zI>OVS08ozl*}C7;m7`r+mYGRTBfA@)fO;)q<%Dspe`QC&fMWmiQIei`KdOKST$XK= zzqoERw6XH@eQIGmHCoI|0;ij)DNxP2P?&5oAF>pr!mxJ)4qvz~FIw+95wpAF)+}yD z{vFn7!%HY#>gbwDmjfy&lX|o4DM&!$^_`{7dxUs$&McTmf`y?hrPek5>u}`67BwVZ zVi`E{>JeTJ~A*fY{R{8wBs|{H@u9?YB8{-Jm=Fsl(z4s0?x$g^&4K4fgWsRHU1Xy5rb99db52??_W0`LUN(iIn?H}#PBpjUX4 zVvavR>gMd-#>&N(aX8?erq_A`+(!k*jz*S_n-+VTw@){c)4uqOjVgThHD6oSNOMtZ z(zHDpCv+bnA;e1a%4prnE`g+^4> zU=*!~C%kI&1kb>ERLT3hA?3>u2_iF10>AB+Hq596BbxWS5Fp#jzjw$g6F@9Q_xh@t z9T-r-^#|;jwOZh|7T`o~sx~2;5dOxGkjyj++14?UT-%~~l!}|0L^pJPEcuu=qANnZ zCqw<8l@}9!f2s;<*@XbsX#lC#yNr9%ch^t5zS^e`0AjnVTC7>%+R;pqDkCfA%NZx( z8y7wq;fr73R*rCv&P)|<|5a1(%d)}k;W?*((@g82PwhjXRZ>5lpEoK7ez5prHN+R~g zTOTs5n8p;nDFY?;aw#dp!~QC{@#h+=i8=V_p{P!wtrSnP__fZFubM=rU|*~;k(Z+- zku3QGnrg4RcJk4(H1C+zjgi;G+=SQXcOv1Apgv-|DLDqd-Ykhjd_nM+SUb?-E9crM1M zV)OHpwiaL+s^EfwJd2aIkeq>b(BxHwYB1-4TBOFUN!@lV+pSO_i$IZ_mv`RY$IlB6 zqCZ7;Q%JbH4n*|@>%DkOOYUzi)vf!}r}jODYPgS%{(FokBI%EeQi-5N+|7E2TUzji zzDjOXi?m7l?$yjC(NC2FWs{vowe;mT*vc-t&xb>{o)4;{I#QfIP#eQ=^=vavZi5h~ zOh(L2mSobL1y0FA$Bby-jajAl4{4R7k;*~pAH1qSF*dm|r_!9(|JLtv4PfON&_73e zfI}-{&XiU4Gn_%VTJYH=O_8rZ_&cTVY@!ARqWi1n&ihIDEle>>K@fHXdc<9Xh0dM8`hwL{F1nqS@rw5#uIMj_ws^ko{R-Vz z=rJ#rj^KGpKDfNP><9FYjvc-YQ&h54N=}_%O2ZwOdM;BgS5E`c52?|VK1TOYNZqZ= z1L<Vy3oGhz7tu&c$- z1hxn7s>oldI4kW0+&s^nZl80GiPNw=MaqT3z&A1yvn#w3m8EFd5>zw zeqUT`h2p&iDO4J;S}@E@qj$q?ORtPzbV6FvS$qyZ_=ey!?8!4;wr2*=v~N5I?9Rf) z%flRvA%cp18QP8$1wk*8}8yBOO#~p&G9jm zPg?+kSztd~qRamfvCC-2qr~p38WYTMM-{s*B`1rnM0L5e@Z$U7I3UoyU~?KD3OBV@ zQh*cN7yPJa;a`t+hKC{T5vrt6FtGH+u_SIY zWX4N~>Wlm6V!Kz^z-Vom>M46pXT-Jit9Sjz=HJ#vVOp8j8Pm7Z&zJIS z>1z+itiw*eN4|un`d4vcB}wMd!;gU2*^)#Kwya@|u+`})#Ju2(_jVuX)OK7ZxwZW4P5g9TS4&+U^^TS4*fW8 zJQ&q0a)UwT{2Bt)Pp*r`jNfX&0Di>SZ956*q{pW##JRI0b6cFss`tq_aCQmI{_D?Y zRKC6eT#OaXB^C;S6+uOV&{lTN4U)&(iW)VKv6-D(PuIdC5Wg>tsEx7A()M7dugdse zvr7LJ;$>;U4}b<3$tY=xU?4T<=Ir#^ZI1PIac4Ho5OznE$-y&c-iw;uYE7XK+}^XW zj5{?f{nhQ2dY%(Di<)1B05(4GQ8`U9#ztoo(jw5U9{Q(WGBK3p1~P0E{V<13BI+V1$3;wqjv?D%5w8F;?XoX|JUU22FUZ|t~cB*|l0 zj$3@c%}=L4lI!rILdxv-l`c>A@PfLoa{Rk@X?2K5I=G>I<}u*9Ya3lt0G1Yl%mC8B z=?g?;G=CM!512G>)3FElmViVu!#}jqU~Nai>oOUUmP80rb@S{~tvil_5uoJ+`NoLm zmE#8otqBc#zAX}I-}Ejbm*my_a!(rd>CYet!uiu9M(cm> zn6YCd^6&J!oeSr>h^-@d-Qjh!)!$Z*1$|6LSbxjdv*QJs_DEQ8K7S2ZnDWe&kJmYA zT4p@snwH3*rtBPi(zOPF)Un4((@dtr_P#~?C9=E7fVVfzpJM7vQKi7~XNhxWQ8~D3 z?1pAkJ3yICz8hU4h#H`1I^WNlNDjXxsl2m_myrLJ4P;f`FYNYc{>+D%9)zVd+3G zx2(tfpOeYVqvnwhqVn2gS`ujDigufs7ELUl&g+hAn^iSUes(Rf03N5()2=BFrWg}f zqS?ZHAah+CGPnOwQM)H^4fq31f-8A6MAU7>GPSz93|9Q;Et6p<0ivnlgRQ8pm7zSq zQ7i3{rc%tlnaTF_?7_A1mPqKmzBfc$mtXxesIOoXge;k0XjfOd5Zr_ zcU{JZ_{e|wcZSc|lBp#l0JY_U9oRAUb6>!f>Ra;fvSP`Po<|#s zQGJDUx~-`)iFJ;y3S~KD0i7;KR>K%$@pCgCjDE&gpw0j^Ras{o7>ww1@zD&wxl~pX z$;Y;a#K3tHw-wVY=_lc$?dzqQB|yy*4a#Uab<0#sx80R;*#+->wBQ9T>IP7HgY{ae z-8+GETK`Jy+}NA%^X{_TI@D(p2voN9_%wrH2+OaMP-PKLc=Q(ot^Voj*Xw>L_v#W|CnIS8^_YPGz{ZVXPyN zJZqV^&pV8{_iKSJVYrz$PUu8ai)tV%U5EYG*!aos!a=qmI9HU69Ns8T6Tj^q4}&A< z8K#-ZOJ}!$IYSQVCh~p)-ww1taZflR@FxW;t9xJMh7pim!!O;CcA z=t8fT&S@9yUyjEmA=RA0Uo4;bgR~6{`BKuAN>OKhpG+Tb!TRoKnpp;Q2I4q%#CN%} zBRkrpP|zAx?T9N?Xn7t|TzM_fGV>pTM}9J*0|8$ppzmB5Ml1?;cm*Y+7{Yh`(tRdG zMKO(MC*yL+lGW+)|2Vr?%2PVwZ#4RfEq@8Y*u>JRX{8Zio!QqM)eK&_-;gfGJP9Y1 zikg+YKP8d>pm*Dsjj9L=9mYiDD=vS&*+9TJR7%<4Cj$dd!h|9Hax{XLROAmBy(;Si zg3g=nF#aq5T1K(;Yb@YZDu=>bLN#JOK9fv+kW4*#pf?b*+63!={iIh}D-G?X8eBp@ zA;AP$SfSXo5Zm@Vwy3Am+vTn$XJX1-mi!Bk#4n`^!V#!y1<~bv2Trl3brzE~zg%}7 zk3jx2+@{9t1FrC}r_{3aA^>)d{y?%KaY*JskF?g~1QfgAMh+*u;=Pi4u;PhLkTR|} z|7PWx0=4LV6kRA}UkWJp9?@yjAM=XNr}WeuFw1>QY|=4iNhZ}@PSTQyi`w0&bj21{ z8S%%Z*uEQ05d2BBHhmb7E&1Y1b~TcqW7O8Bv`%x+TYQ>EP3Y`l@YCpgnVr-2iVt@_ zG`SvdeYSitnB#_*j#~LDL^b9maeh-L9D3zR9HGaNgD=kUGre!kXzmQP88&E9mv?@E zwcUbOLe0?8cXHi=Ff8a!u1swNH}euhqQxNU!d)nkbkppC7RCGr=3UzRS>!(N;K|#- zA{YCUOa}&?bXDVVYemrZk!TyKKFPO?0+n3sQc#pH}jcZ7+^| z3X5B07VFdufv*hswLV)#u7YRoOh%SfM5Jvnn?IA5)zMFi{j3>pR74bJ)8ja|VNwWh z^*}k%F}NM-oim3zxj-WPS_C`qz+Qbit<@Ysp1ET+x#?^D;vtSxb0{W*cZ%1kMQJt* z3ys|Z^Y1Zbu0@^nt(2q1Q1Qe$HjvqhNxVh*q2S)b{Z*23av6E70HS;;19!_5A%;A1?kfTb_aqHaC$*VlO!}e#9qc5&<$zLAlmEQjCf1SLgoK zS_oAI`J1c0=vU$Fjv5ly^?1UkSspt=l>$gP{#yh>4URqa>-XOv7;7 z1A^b_+6(w>5uHnOEnRhrV3Sqk`K_MHOuA(9RGLg(Q=_6kU#Kt|KJLcxVBoHP@!U&; zV6eF1&W?>E!d+?EExe=DLyRrmR<;GL1A`L&&IZpom;i|;u6g(bP$zq=+SndZnpSfFqQhZY;yA$Dvd);i2>)*8hiKA?0eTQD zc?V?8V0d!+DGy=@Yjbv8U)zWEh!>BhZjFQxrQxZ0F;FxbE2*w!RwB|$q6)XKd2dY3 zZyZtu_Ed8j%Yq^`@V53l(|XUN1pC6-O%GFUZ?1(npt)0;nXsM{*r=D8(xL93-^kfMt zOe^c7w!AD$=A z&^D`iY|aqN7aKnQNz31}-K&tO&IL;LQhNpUBo3!Ln4F-6u86726Qm{S3e@1WMxDBe zJ&_A__W=?Q(QpT@!WmLk$B$ndvB#CLpf}#$P=FFC)G8mBf6^&VDIpoK(vM_^nkkjkO-Hd&(FjpR zxew#&SSWtfP!e|Slz|1DtK#)lEw;V1s4*<4?C9AVqnnBIUMngR zKH??6lFGo5gkvLB+7SpzWt7H#VS6zQ^xcMEWs-ZT$`9iq4~74L%mM?q0D#wML(S?o592O6;jc~;PQ-!Zt<<&DRZ z^P(ulewF!*!`j|b9A}hWzw<$)V$iDGpj$y;@ik#tdR(4SohX=i63>{#F`=C<=|{*` zMe&;`&J={`FzUWjrKe8M*h>HAAlp(qpDI16ztMAISnx9)`xPrY;)lGR0qY%95eOa6p7C6^PL@SC?CQ2g8 zSD=~(9G|@$X=f3e2({(4;d;eUhhT;q_6!(dyx}f~^qSQCyxJJu2MUx&TqBzv8Ul`P zH2xZ|J?DQ->B%()+2!Rw4_-wrHQrjLDmQEnp2h&j_T^wr3RkjRQ2BPH-WEF-Qm?lN#gw_h!V zWj}l@+GbF7^d?L+-B8ylBnuFnY8n%qJ$?nGQ=0O`b?;AwXC!#ZDtR6e^v@x()HmOq zICWUbqI>K87(Lf_%?Na7<_9z*+4UM>Z(JQ}o)Sg+Rw{_(rd~~Vq0wE<3so(Z93-6W z3O+;zd3nXVY77va@Wa^W?*Vb&KFE9_hMJU%D4)h{M=BSi=ixM*Y~i2oIfOz-gD zt`v%G$pBYE+1zC6!24sWEMSlw*$Pi^7Dgyc!NSFPJre&>j)==T88Bh4tw0#3kaR zU&@TPF8%W9N0juFZOq$Ed(O_EsS%MrpH>em1VB+mgLWE)xY53{x{N5T+DztL(MW82 z3|sxkifF`ieoyM(DHLZ*mCkuDb;IAoA;-Ev*v#(a)K%sLdH_zsOVNTs1 zOD;4ibx~HoVpeAmN2&g{fBY~LT!}J(%;8)*XtisJn;BL78o(OoY{y?vpPv@qLj{%uwM(YFWcZKqy^ z(!13qQMDAM&p?%;s8LK96-N{0M4%&j4#4G12=O(Bnm9G3s;K$j zT)B@1utl|{HA$c&{QTFTjhC%}(dmJ-f_UNQ&}U3F!_$n%zj#msec|7FvD~^?p`0`#?uWz@VeVZxr%nQ5(h5laOsmJa8M|_nQiiq9HTy-{uEKo^o%wvvd>fIXv zN!Zi#ys)SuUC<%@mrA==XFKe7H6e{;v1PI}207BK_v$C-SRYZl+do&|XNN-ZT8h=Z z@t>k!(a-hG|Mj`2g`O=rx4}UNyEJG(#Ur*d?n4Y5kgSU6m~hHTp!?Npg*4*8i5aw| zdD?Q+o&-z(M7V3Tu)5&>ds7RxHL&u4c@WZj(nuMZe)=JSJhP2QM?lQMVBafL#n&48 zM|-9Ef^PlysTyQ76CGyyv@TTIevZA|9uef0%}1&t0k425pHt_2vHhiUJ&mC506pkB z)3Yr7z>-F|7Of!HpZExZ=Z|{xYM^}&jPW1Ai4xZ?=g;`%`e%>i3(i_n0zu$U%9K0o z>=ZS|dxI0SSf;)#wXtwp!}H2^P(I>NVmbIX)+Ddbf^EHph4!l(ct8e;CBMx zANh*H7bQjXsF1?wWOd!yRZNjt1{dU|9vW(#;I+jE7U0#XU{yk=SIlaMtiQr2>>;XM z%exskTy}VIAi(7~UoFlrNL!~yGxt3(tc_F3f3hQdD*?znlv_0q&D{X_H4?wt>6sQUEs*=C&pgZxqhyH z2#YL$Yl4q%K!)03{)eVG}pv#JxWTP)r;)nZTz%2(-G2 zM(#XMT2GtXuZqQP6AXsQ3FyQtt|SE9WRvL6F*m<$TbtX7DS7P*92Ke-BAhcqHZ!Kw zM1+sGWD@0Pm~!8G)h`w#g7y*Jl)H}Pm*}xveQQ4x<_m?@hqjpIg_zCJkpv7_}0C~?aahIMr9D&{VROyfOGz~StkVj0wroaw>5xWZ7nbL?$$ z&5H(O6pMOP{xpRizH#V~?5t7l>EBK`xQbU0M?U_(0DDuz)A&5uY{k5^{&U*f$R^lr zzSX`9x?Wb6Hy1XrA;mO|lHb&jJc)xYz%MBy+G>(H}m$#bo;eMcr<`!}-_g8DMm;0rhn$Gm2 z5wB;}XTzuPv)N0=(`UWx=3gBGN~YxX(YfXL@LQp9>id@j2+jNx3$x5yLQ`}0E}s%n z1&JyVJ5J!*#m8Zw-dHQtY#{A=2qhY;ubZHPj0f*_qmXqm^Nz)@w<=9%mMI45)km46 zLL?S>iNsx+H=TZ37%dO}Qca*Bl;t3iVx)HKlbSn8hx+O5qw+z$ zd%Bq^jNwOM{RtPd4@r3)+z`h*IPY$vJ3Ukf9ILx(yI)CPtX$)FHV;(zubP#?cu_v> zHEBgzUJ>2!ofALCq&5nP8^vEy>;{zVX~7sMW_`WRE$RNkX^BL*o867E_VcA>gijJ9 z09D~l{YR4x-JiEZH*qAG{vFm71ZW+_q^qN33|)Q?r2&^pgsDLq-tXW4m@&OpAtvIX z5Es|DW4T?dnX9HVYNE_J3LCL+qpCj(LF)9M{D|4dz{_Ihc5+@uG-pSKOIhX^aR;;W z0A8*p$A6&aOW=kr#``XL)x@%8GE@Zb^fR`~l;=QLDMga<2^m`tdKW?cA*J1tnRXcd zv^n5gjSz#^C_b5eseSOitP~5oBtRFci-1Ns#v()Dr7Z2NzE|dcd`9|vf+6`hdH>$r z0=Zc&6P}fySF|82SYplhEvExVmCQj-8!i{rrd)a3LqfC0OmS{(4t$Q$iAmH z-NC`44kNf`t|lzIiC^ly>Zv-5NY&{n0-EWycanL-v;WLvlm2J z=f8rjS^YL{cV8>s_{_Cko$w?~*@f-*F$0qSEPZc-X11V&yCh?T>lx}zLaUx#+- zKGH3RMu@;D3UD?0-g{V&(Kw354Y!S1gD0zZQblu3=DmylOk&mA2X9l8EeWn*NW@1O zIYd_7-ofXDKHGXBAGxmD*gbF{f$w;vF7@n9y|U^o`khNJ0fAn(CWT})1T%igBB6A$ z!ax$NoakfDi*;$dR_YLPTPWT-*MA+a*EXpdp7>MP3r@AAvrnoSa2JnYp&{ZnMGhhM zkn(F_Lp&>!vD!0vr(BJMVvJej^K+O%mp@+dzcN-f(5_YV|1r4Qa=7Od}M0^|zO zsHr&<*J9#H{4W!d_jB2z6=?TKV+@}B01Z{A991s9=&!&~#){QVBfXA|tmaHV(X#Rn zeCXx7DIbJF9AYnSroSseYp!ots;EBCG7{sJs-{2YW^~eshxg();6Rea+Ntci*Z~)N z4*FLrzfR`zodCln`V}3jYN-c}7RWz@yx+p20`Xg3Sq|q@C}(hPQOlO-Rvct_BXqU9 z5j%zpS`A}4f&Hl_$h44FFq>?@j1SnQl;yqc=CXTh>oTbDfrlM6AE}jMxvVVYR-^SD zpj-_LQ1ySWKgIDcc4NBZjWO-D&8WHex2CK{YYZ-z%508^?4s=KQC_8B&*fc}Ab)V{ zKf0eQDnRSp?Y?%er^z8mB~%Lmv&sa7%6+K7_eMz4p-z2XBhZ}Xgk;l!W7sm%9s7OU z>qklDHsiI>lXDx`tn;&sDR;U_%X~Tp`06$w3x-zAvvWmu$Tib)$)*pD~@~B|EP-Xon9;{h1E)sc?^W{H2-WW zF+VI*+A+|EM##cmaAT}2dUzwn-;P@i*3tXbg;Gg%rbWNm*u6GK2&%l;{5*)lm|^b) zshzjrG2!OR1}1X`C6-of7JrmNcMu}OGAb24^B!^rv@-*gB{*$NHtib5%o_Fbtr)@! zrbS^eaB=(VZjG;_k?PG{%Za)?bMhH%cr>x4M6oZEbKr|0&+qX!Eh)+}4i$3?U&xrhrBH-(fi3jNl9p=Rn!^S^r;3q+5pxwr91r&z9e$$x zFmTPy7eIeR!F5&nzI;1D$AqoZ6pSOGdvr$3)1_1sC0r=OI|+g(T-@W2Z@_2{Iw=1} zPm-&gy%$WSB(D)-3)jGg_ydpg>F8p~2l(4hqfm zRFnRO6BX}$SyAU>W6pkpS>$MtcaXV6Kqd=iRV!X@)$tS#WHwnm@|XYl;90RS5R`%P zqfea(J&ii%#tU9B!Vp*<%C*Ce5!L)d-RoR&ys2f|+!7>UQ?$4z=n)SWWUewL2)(<5 zQOEVc!DCioSS*mot59($4*Wh@e$C*BPY-a-lY(QrNwuKmHu?rVZH!Y;ih04_Z~;!L z^C3;deOGl(RnBFI%@5t36(6i80PtI9Sx>AWu9)i7itV{JqLP!v6kq-c>()QSIwH-KcR&hNqnmhn&ie zFc0<#|70)d<`WMIM(X<*EsHS;+j6HB>x^|U9))zZDHdW?K%H2J5V5n^sW?u5)0xai zyCTc>$cZhX+2zv&EfQBW>r6_ZLUxK9z3VtZi8}}mU(bS$3=Nhfz-Z|E z5LAVe$6e8aGN_tHZOb?y#yCk51c-(5x9v^kZY0IHjUvbkc+N@)VnAl~ck~TTk7I{6nnU8H1t^ zJV^eq&1bTTL%!OBkxuA3tOE~!Y=Hyx$VhM?py2+bAs$u-LPdV|AV_x6ZM#?K)!z(T z|26of%gF7AIeutbG$3^kd#exPqFwDmE(z2nyH?n5BJDn`#BX&EKwqzxCXRrhGNStE zi6FpB1J$919Z0Ijz@+QgW$20VULvj9KvYTzHI zd(9}+{~74)!Kl_5um6Cs);&x)FU@DiB2qH&Y*lXBvuihNKew{U!0uu)h z=@Vfxq-ZyOQv0Dn43Rl|vV?-|wOp{YBuOTA`w|Xx_fio&yMO7(cmRHV^Gn@uBAD&NS|!->mV&Uuihq zc?6j!&#Anj_7+T2w`E9L%rgW%pF>ZsIXGFVkHE9)It;D{_Q-jIbAn>zXeYd}BBz}~ zRrQQM^0^gs>W0+oQ4iQwq4luRs75Jh8-4z%#jpxyf9hj!u{rJ^>h5mfQT_{$CJ9$u zUz~sGbJGmtK#LpCwa4k_5070B5LOB5I0Y2;L+PsxSA{g)EJIH{%&(H&avvm!Y}D^; z8@7inrGnv1WG^*DbIR|uLd-om9IU(?MX z6{pNpPH1e}c5~m&S!|J@A?k`8cDSJGR4?p*E2HJsV^FLQz4vM5OA)2t_jX8WX$^P; z-Y5xzUvbsl8X72^$sul6Tg8?lB-G=FJuTN;vBnaC=Tex`VeGjkXf^8YgD$FlTWhu1 z($ZtF#}fX%b{y`%3-h|ev_WBbdanm>A5+c=D1_;CdJof)#`Dr2yQ?PSdqjqs@=O-~J?>YLa2Li`Qp8^9?r)(7Zk^+} z`Z8L^bi3ufu6P(er&~L!pk(0<>}Z(D|!E( z<=4tA1E{e+1ww68jZPk<3%giMc_iIb2?X3o!6g+CB$-Nc6~T`Ks^(+ojE$xlGD`Z6 zdjW@wIQ1oYI{A8>1Ap(J%4+6?VXJue+l)bcC>j0t{zctj*>WS$eBUxqxIV`ZAXIxLzn7rv{rc*N%U zLb@3BO{23WM1u{2To!K61k*E6XhI$OkR$C5&GJ?RBKOrYdjBl;^k5CC;lxPgVdzp< z!+fDc59m(X3I<2XihUIK25^Re$cFc#lLuJvkPT~-;zT_!#-Nn%We{JT(R>|E0}Xr| zAm!iok{MPfXSxZ*OOGCCzP~ts!A$aRkyr47t}EVy=Qi@0J&Xi{lf8hl1rUv_|1roJ z8Y-Vc?u?$AA^^zlVIT1nrg0n*WHOCCa z=kXYrv*Aws$X(@t(2hhfW?tM$M9g{5K;?W(;km`F!?{`PuH-4CpLgB6Fz79+wYx#w z8a`Iy5B~*+H}FOj@E2bWx4Rqxwq_N~7~u@BxrMijWO)N!r_AJ`A-jd77riZV1j}yO zmSTBA0^S?se8QeSkZ%wga@eRZeAf*tHkD&3V+uNuL<@e8U<{}r--}DHW656 z#1Vp2p^-ucQ64i2SnsaIFGl2B&bCx zaukM)^%0@9z*Nr&yDAl#0P<&@t(z`_r~j>rg2Z7-qk&0G$*KR=1Jh=$%tg6krgt&N z$T;}&FuNdstQ1XnKg>g{>qNcCZenhTvv8rKs~{gH?CRnER*XMfe^eF$WntKp zhT%gTQBpToM~ywn5`J*e3_1kv7wpaA<#Dss)V%KiG&TZ#s}@d97u4E9=-H(>_!mN6 zY~u}{B-oZ#{PaH>B3f3Diglt`Za-DZ^7KKQc>g)MDPnXe!=`g;bRBg+1Wj zF&8&2hKVeX57C5arRiqNmjp3uCwF4P;kdug>=g{f+@r$ApLT)PkWc(S=R-i z*gSRH$6(%awGTdu1g6(N*z!S~r+hYeF%zDun1x3rhbT<0M*ZJh){XU|stoRy@sJnX zq|rvc3roqb%>l@8Dg$=7?p}qwFl1sA=&f1YDz^}pxAn%+$K3O0ctJg5Wr;l zRRqOb3p2Ws9X$&Q5m#toj`0v=m~Glqr+>aK-8kYViPMWg&Wt5i`rF%I$c ztm+!pNto|)P4B7vAP3+`J35_-;!;s^v){lA7h)MQhBbGs;Z{kIF$C=3$r#PWw;yXi z?PRMR|Jv6_WSy+g>M)idYC5k-bOX0xFDA&Nt(_PrPrZ>BK@pd#DNUIaPW2;XyYB#& zoS4M;iBm81BH#Txa-nDqL118ZlOvRz6^xFMkG=%5pIhi&{QI81LWTOa1kr#^dT>} z;;FiGhhlU?1e6_!Mn=OZ$G3hQKhi1`em+56+e-b_TLWkSsf$xY;+LLDttluPAv;tB z$rwIgaL73JdG2X~!w)_jlb!>+ejp!$eDoMaz63#sgjZC%!;gTO7AvTN2+5o z0?|1gI`D=QBlfP{4cP+oq2;3Va=NnguFY*3j=Cl=R<*9}{py~b&A-B4%GxvI_SSA{ zKt&Sj22di(Wf`$KgN;z8A zk2&}Q^!DMU8da=iU9U!;v1_n$A9_e7mwDufmGY*~9)wT|U+*`g#mWbLfI`7nGAK`| zz-F~WZB)K^{ZMCOC~jX`ptn2X9Fg3K8oLj5=2TwjVA?lFsq%gQ0zmIJK*^v@ZBttf z%!<&|^q&I7IQxkWs3lJ`Q1r%dj)fiauibM>RfUvBZ5c9uOSP%E;KX*`IiP+(4V{tl z!Mz^PDF~1rK`(-4Zp$`Jqk}`|eioW!y#GXG0$iAlcD0V_;$oPMF3Uv{J;M2?XzeFa zOLS7Q$J7Y82iRY(1UAq=;I+AIF}7 zm40g$Zd=X6KL7nWDJ127%UUIhDG**$`qKtY)@aZc%}2=4hNQ{5CP*pExHcE3S52|o zg196u-hBX+aR4J0lnefE%sHWwzLEIUkFS8VLz3D=CTZwWOnYOnG4>HqD)c8gi=LFr zE`q%YoA$EF6d%9!b!SRD9MaW3`HD2{^nVP)XUfH0ff%OOfJf+1e)!go1-M6?$_r1S zs)TdUSEO>{r%fNsn4rE>-#>TzELUwdPR+UM2{$cgORK+Q0{qy}y^FJYcJX&|S+GAD zylaozmYO@=$875fQ`|S$MbU7~n9!t*!wE^WiIS|Drk}e&V*%jWD$AbFAu}LL;RX5r zXsI`LUPzodc8##OprQxZ>q#%6#V z7%KUlN{T(|<-lwu0{~+@>pSLllg@Vs8 za;US0m{%z#A)XxpgGV2@9i`a;)T&d}|APfi1zrp-W73M>n3ch|9j->OM$)|r*q186 zEk;FkCOP*bc9uAYhg}ITW(e=QzRxoFhRE1h zSCo`;sxuU<130>U^5PI=3j9vOUbx;!^+pWzD~7&ir-;%CjZhhlwz7H;S{mB1(zzrA z_<_IDn{ASavGT&IUr2rSM9gv-(eXMn{z?ASV4(uCCI3;w%GD>RyFvPO(-n|+TEZ4+ zNmdVyNwy56qHz#d4F?qV_plOgE*_?a*J(Sky|IVkOXqap;z4=m8P;b_yR{O!m*fas zBXbXsFV&bMa_bZQo1pfuonXS_+Mu@^$f@=(2YOw<+!fi?^*LS2VS=UkFED9UbnrI)Z5+yJ+sV$Tk zB!ca=I9Emq!h2!B(KvAa(X8rQbhE)m#=^Sce`Qz?S@23hWaRfQ~{49%X~TM`s4;?X8KKTXE1vs zt0?7EHzz3{El02}$N3d;{P>rOMnjb9f_A-hYFiyj^&pk&*di&RPOT`pn|3hd`_|yf z&ZsRE|57@#fr)%^nc!o{gX;CYj)%7fnEa)F6;$V|IvWy!sUN7Fu zXA7xYqpLX0p=H*s4U~e<8`712Ky?y_U(W z6l;27l2}l=;8J(n5S?n3hs|pYTlGpX)Z+&)1^%P#CmZ}ixC<$IJ+RsnigqHYG1@6R z3Y$|)JL6k&;uM!lD<@psoUVINdmL)fC<_2)F|E#~;mLM7{z)I(_{*~lnh zxUAVn8TJI~XtCpQ!Bf+JY%T+;$pbsCG%fdGM2E>RY7u9Z0F^f~BO`8rn!cCK4`M(_ zN;ql!yVux!(21ny`H>C!=^3W+hdZdRW z4T}@HI8>$zHg?WldCE%-_oxfPx&ivOUQnLtp&_lLn=U>Dc;X+>YOd$ThXN%zT<$9&~{~gD@$=8YVRhledZ(pZ03$k zC29*}5!C*P8tMKQQ~17H$Q z(NIia+mCQWd=<8F(?a`2QRIFP&Ox3cgn?!aJ>NlIs54B$@@(=mBkwQ}mB#6w`QA4} z7i+J#-wG9RQTJkAV<~PjUMw&?-#b`&El--wlI>b~u3>w3*oL!i9IQ4rt)pNJP3;-t zz1!hP3is-6lCY9$x2RgA=58$d4L!`3he1rrV+54D{?NKEb8GRr&4+_G5RU65_M$M{ zYOrvQsRV`E6A89&0GJ4~=trn?$dPvENC%3G3o=XCQE>@?ZPLqU1Z&xpwqR_Qbo+Pd z5i4Zp&&a~Aac(P$eWN9Lz)M=7!0{mkP#HIc18ip`dUX$(5poVm5-J3^-_b} z5?CcvZnxu+3c;pZV9~1UggsR9F-j&)HX_-&Q=x5b|JCn>DjKDq-B&W zj2YP#&&fd%&W6QXaaFip-UrXDm>~kW%$t$#;V~2KS#W-!3_J2lpCwe0mI$AD=SfYs zor}*|Stke^#V~6~yc?IPVK2eZ-rVO?Akp3+=RMo^sb_N`cS3F%XYaokuIk&zrTK`7 z45`5%Gz9g{#R&*dn88I%HEM~-gFB%AwI+035yj1mp~NUr7kh4V2fb?!-ENwl)@K>y ztr{Te%!6%2KuC(`$+i0%IewHD+Uiv=3gbuwuA6#aMb;hyeLuB;9`=W9k|oBbxks@( zA4C@ioh{D^prdUt7#4q)6pmXvKTwC&3Sn^fT)huIA>!kKl zqTkxC3q@QsiiM7?T2C{M!IG+GQX;`jyTVm?GC|~tPelt*1>WUC5$Sx@J3@Pv0r&mz zJ6Ii4bcDt7+f!RVJrvw_M*p>;Ufk^{o1^FCzyG8HdNXUdKYay&e zLJ+gHAX^vtHGiikS|j z(22YTt&^co0C9Pjx~P$3d}D&&{a(KBgVvTGv$vC3P|>&}c|kJ+*Eauz&=kgqKK%0j z5SlR9h_A+yG`MHA1@R2&jhQftf(LOrErKIW<}PpTKz+I*BKAy$p@C>EJBJPz`6i5m z+qL9+!0M47vv43wwoUf4peKqy`;~Z26)a}6=X1n7)k4FXJB&o7BGcKcS!n5ORnM8( zQ*>4SGK?WGhjqLPjqzGd1Bkh41Z%~AjbXXBM_0@$l&%BXxElj&m7F@%4854}0n8^! z6d4lV3$}(snP9TzwBhC=e-PTN=n(YyVdBC{)8|)%*C#sA#UI&I2v7^yN5ggJvs(vY zmyEMh{f5Qvht<7Z`t;$^G(Fb~yi2(`v?A!vX_OYU&@b7TDRnJf*I<=oL`o-0FL7hw$tszn1?P!pce%Q=={~HWaOS*B}cY^h%jde}7LMGJTH3!=7zD)&`ppfsnwrcCQ>e$YF?QrPW%!8P#!%_==U;4+)3NI>r^JCUU+sREQra%3=U1 zpA2Z}_NMK}w(n*K=wD#=twVIWbRWikR@Ica+>E5#R-6oeT011bx3KqqjJkilrZ7Eg zbUm454{}P4R%!L(Vz*`DGGhp9ml#M>gFj!qwx47-^!btd(dQz6oS6)zaVO{)lOro( z;NiHJ^(&H!w5Mj1kAPEVq=1OoQaX_U--)r26vY7)Cqf=OKNcc}^d|HqW8c~a_W2AP zMl-(5DRO#C2Q5%@T!vHS^c~(Lh350%8{Y>WiHt=|w80hGDr-G1XbA!lG>%-uwMg{p%`qGk(_rwTwSGK&JoGJvP76%75VPX@Zn zpgR^Fh)f<<-ca|EX%8+IPCr4m<>ywwF<=Sy_w2nsN7$T>am`HHYhRn#j}bmlVZ$Wzx&s1^^PS~ zR{yL0GLW)*?vQ*}$bfgK$Xu0)u%g?6Jf)u6xzwO3kN%*U(3!7q4&iX&=3uiV0j@X5 z6x@MUv}b$YX#-_8{r*b)ZbRY)U5tTgkF$6_l}WbelCgIiYaM_{g@Pg-4g5y& zo{Nxfl2QAyOnlZo0BvboEJ8*Q?*WDM-r*N$#n7!2tY>yvQ_n^?N~GxwfjMlOXHybc zRq5XuU_#p+o+0!h>8BW8AXxAGL8rM^xygrNfyEQM$WW^yz&b+8WOqNGH&HKivC@1c zXiPf`7#Scj(}(r2EWJ8}qP2;W^M@c*uNmT+^h@b)2y@c3BmD$4WT#!83#UzegY(6A zG|`W7(e(^(x}9`eiaj7KY^R}kx_GKgl`Lhsv%FKaJ`P$yGqz40TMNPnlOXzE1z5om;V zmY?b$`C&3ycL0k8(@KXu5^vaFTuBt3ZAVIe`=$;YV9FZf*2(~%b!0r0^;0czOQXY) z_h*{AwY0T4RD@1h75O!_mpixw>XY2hv|TV7q2!ASbnHT>fzuswQ(n|jDd&14b3I_6 zczTy%KC)Q3Ic%hq4U2|!jS)sM0AagzB3XHj-0|WY${aJ;NY;ua;eQ#>=er$(+bTR;h){r_lWV=!gTIc>=Q5Es!w%vm{Xr`s&Fkh%CZw;!uy3l$Oh9 z+l$8^Uw4zSxs#&WF@&OJMOG*4Sbl#Fdw@3G*o&0;X@9Y|*E&vkH_PqjeO`UH^5bo~ zqYrMhWJFM~dM%qUg&2x%GBU!()h&tYX9H$02RJy?dPsOo^k}JWZpK}pkeLAuqU`l2Eleytc z8hy&SfOF1bg*lZ+Rs(u_90Q znnnHzDqgy~s|8|ASpdUX&5xuIK(Tf?kwsBJ%xP6)F&Vm!qmW`=egafp(%_a0L+T59 zV2L!JYz!w$mmGsNL4tSE=SP;kf>T zjt#wzYTCu@Bt4iDU0*caE_B zZabv?oPi&QkTS4Wkshe6Ys6^});zQb*AbJ>f{ZA(Ec16J+@|6V>~V(;&@wtxdz$<| z0VSSX#_l__uP?L$$Y^wPz<)+@+$0Xfy>5~$%q6D=K9&%g8m+FxEguF;Ng9A%+W;U4 zV`gNc+}}f1>;*;B?zt9zf|9MSmcY@wlpbl7f7`CZLJ4@j!8T|j6z+?k6Si{ZASxGD z#)XrjlNj;Chfv4=%W`n~uci#e_hkqTj4?_S%} zb{NvF6E*bWM_9>oxV$s;jYAf9x~DKk8uKZmzh5>jzKS|)Kv8m`%gUlU&8>*O__OyA z>vZzP?{)qT%29)fR_bSzlhhOz?7Z4ioQyv8d~ltq`=Mj#E_i$#G)+AIdNz>f_uWTw z!o*Chq06Ugb>)6vZO>g&nO$kF+yd*p7(Cj0vS>mZtB&0Ks-h#uT(-6)Z^oJKqzA?G z_aYL=!>A3#CP*hvGrL$j_&#{@{oGUU_ zUP2@gC=r69fHxoX&505WTRd*2Qizm~4p6$8&X_)=V%x$~FrkDAY&6aCRLHO784wfY2rIjLLRh}r-vA*wzw=J15?D>~5J4&2dTaIVu* z^zrp7AD%v);4!Y^hcnls#yC532iT=f^s9j$jZz(G{s(LP4-2XZ3h`h()-;SI9o&i0 zQPAE`oJ_}Q7J|gL7_hYr+ zMvLm^KQV$K{Uenb%eDLb#S|?idrC%m$rMUXxCC&^dZ{*ozu@=fKz2%n5}^4GFpuZ+ zdy#U#J&_)DKs8Q?xS(BF@)CJekE#^|uY0GfIFHn2O*AeW*zQ$$|iug7W@2MwhkR0X3y z0BXZrvch_>YhduRAd~)8Nbx6N7+yI)y^z)%1Bb(sa5gB%(q$*@br)l~GGfJ`6#ZH_ zu>nNNwSAecz+0~L)@#6*c3u4XH7;yhn)SmFsa~b*&})9fZP@NjW<9 zIpC`2{Uz|ClWXUxWqNf5n{F5Ax(Vf8(JFT2N^IViQgKjNkx(|REOGBh;GS`uOTqYp z>Q^mMY$qQ9^C1=<3O^k$nHuu^fo&i;xZ7#!9@<{<3MQTAEYtdk-t~9fW6I<$3>$8> zYO4MCu?GLYQ4&okZUn_~m^1Bt>^Nr57IJ`6b5?+VaAoQm$_pa&zcHk@5o@2sw5RjT zg1?(IwYP%|#MbIUM42lo(3(*!a+BAinaBDptM(7NRt~A0{M-2@75#W{)%f12Wgk#< zuHBIF-n;h7LnJtPP%|MbPE4ZG17mR$HOTdhRzs?s`4i4eN2}WOuqW1mk4fDk)%viz z=9{r%7TFI$luYW@rKcVrEuJt4#fr;g5gKg$vR|UDQ2+J&R*wgCR5${dW zkR$r|Zs1eH0Z;M?gLh8;jwWPky`+^+tp>;pc5r&r{ul~nZe(+Ga%Ev{3T19&Z(?c+ zF*Y(FFd%PYY6?6&3NK7$ZfA68F(5HBFg6M=Ol59obZ9alF*7zY3NK7$ZfA68GaxVu zFHB`_XLM*FGBPkTARr(hARr1aMrmwxWpW@dMr>hpWkh9TZ)9Z(K0XR_baG{3Z3=kW zjZ+6y6X_OKc`8P6cSTV_@wXsFNF^u`c>)qT#t>ARG9(i+lFXz`2r-5xunHDj6dT90 z%R?7MQ9uL>f~Y9UVpk%fVnYxM&Bh9E0$A|9bKW~SXY&8|e&79X`L4xGPN1Eu0E>j# z7>e7`$W$lbAL!;!qXH_GL8emaBnt~3f{WoVc9O+1Sgt@Y)ag5fyBvma!nPQ~^*{^- zK1wm5F#yfMi8kMfN(FQ()$t1ulRJUMPz)jf{$${Tp|FBv;f_hwawJNGJAto9V8yov zG)Kqzw*7SADuLw)A3}jYgo|Ja@gg4*gFuXrz_@xy2rHHd$E8jbib|y-LlOlUlSjE& z+X5AWivSl^!15Sa0Q4n;07wE4mPRI70GmokXV5cd?*GTyw=uaI2Y}cg#A}SoLPr;WXQd~h+AYy%u6nz+?%^s-09g|34 z6jzY+`7K7|FrVnVnld=tXcSYSnlCpYf(nHCG6YH~B?v`iO4xhxAcioJzS*K+95AU2 zn&SdGfMo!V<%=l#2Y6~J-0!66%|s1ajTDmtAyEdbMT9W%N75*u7#QGkC9Kta?-+U` z(P%(`@Np0cM!ae_H;t040{G}Bo5l4aX1h%n8$ZqZ&ZkZ`2*<^efpAe%%BFW z1{cH{42>0l5z2*u)iy1Oi4!ELG;;-#P6l^3G7H|-pFB*_Zza1vjKa}f% z@-cyaP3TMq0LkT$nnWeEKqm&Kp%MEefMfe*2q`X@)c`Q_ffiZC1t^GUip7~eU0by4!^4@X_iRCdqm==Mg{9cf*L%b$8o zjcHz*nn|3VM2{w`Ec#7bSD$tvC|`kkxy*bUYoG+ z(@TY)lK$Mcq9P=MfeNBb-js1Ksk#>3w4Q7$Ykzh-yTy|=x2)j(VbPn>mdD%3<3`kN zN*_IC!2-s(5y|DQ+2sXpg|0Vmo$;Qd=vY+uDswu!<>RgkSLn>g)%OnC4o8}HnYFeW zNqxJrTU~a(sB$p%jkpGGT0E`tn9`GBmDF`QIngRoQ5(3>^R=wF;>9_g^7f~jiLxh= zy4>C=N&C8keT)tVmr6BBwJAIfZ04%cItm;iFrf)^x4rgK+w` z?T&A^vR^dbR|p^WCYl;JAZt?n-Y^^TR$Vh7RYiO05{{`iRCSggXgYaOcfKamywH+e zdnGp+xBl(58o}1Fu<{?l^??L_KI(XV^xtsiT;jV`yA@pa%7iiaXIyUN$e@y zto+6GsQmiPWs=T}Emk4U@T7-6LC;M%Y^EcITKhj*GqWL@5Ugx@@l zlA8a#@52Nj<(@UJO1aFsk@D)ylcURw?r$=n85PG#!#qN8~rvs?@h1Un>|}IeYg8ui@>Dop(@E-L}9L z6{RYQ2+{&dZz&`cks3k^po9(rfg}(FLP=;Lg3^&*EC>kF#7~MEDbhqbNCYAvC?cTr zDoBZx8{hZd%$<4P%)K-F%x-I)z1E)n$8WDWXKxk9Igv~5jk6b1D5(J@l#BCE))x59 zaHq7Ot(gRr2BmdAaL70I+Z`*R`r7)N&Sl=?G#J8NQ-MRcW!$}?PxFmtLeHDclzaXo z@YjVVAYlat*H*9z&zF$K=c!3s%*m-jEb^1$FZ}Z%{yxFz0MvHPi3?d;&FoRr8 z8>8H|5i}i`nXug}!>60CP6Vx-u%h1=-Nf)>g|w6hROYaDD%69RyXp2M+0D363*}YW zvbSD3v^TW^k1+8~eU0YbXE!WvPkac!xY9J<6^cOx{HVN&JGqC%6;VBJz?8D<+zf({ zH{`Yjc3;-okX;OVyzI6_V=oj9qV8l%c`ZKYtigZFY#P$OUGqF4q&;sn`%>NKV@cbc z;j~a7y@160{Jg2ICCiT{wEHE=VI+1fN`T;`q}~E){Ng}gSM>YQsdm&3pPZt?|1mWs z=(~tx`sJxG#qzaekWv3nC(hN}Pq14gq_I7D8W=Wf9COn9f?e8yRI zwpVPvhCnz+AHDJ$viO~z!_i)_KHI^YoQ(&9p=R`<-?vyV)`n41cE%0MX)RM*OIpdi z#Rr+e{^p?#KD;FF)!scu1>pM95(6L0yy4rH&mm1dclg)6nu@`YgC4J1t?2}M>diJ$I>F5Z6*GaJp8dpYF`~-{!x|g)okEIu+se6 z32Wsjyt6-I?#lKdfkIASX!!y<5O5<3_btj>H4IJCCn2I(D}nWT6YrE^Y>pB#fT8kq z*uLx^kVu6IIRJvIC%c9QyV5m(0*2(qL>p;e49*g3s{m3|1}cKVGVDq^B%%kwUs^`V z5>NEPGIJEk)f4MRWR~=p*h6IYA<;|~KoFkj0q_X%#rpeWaWYCK*pMKCKPEt$`Hue) z#1nkrOl$&3!_~n+CRM2cq0C1Oq9O+bO96pWOgU2m=0Ay8`lEe)u^1+Up}hjIOv^3x zZ50tDFE3ZLkIx?mEIsf60A~8z5qW?$)<1wbGytLqQU*cQz%VF80jvo7KM$D-Oxuz8 zKrDc16-Wkf(-%$j2*9ENf&Z%rQ-ml&Wd3j-)(7)v!a&NrpEv!b5~Ck(VJb# z48S}*kI9Mt0Ym^q_1`HH2K{d-vfU0HFjmXAPpj;`=e=Zik9Ku??yFpD6hH*6%QJzhMO@h|l8bROEJ{dOrwwqaM!t7&hA9M4R+2PdG9^0;zt z#48oAu*FsCHk!esI{loT&xh)X*T#}4;%h)jG2N&q(I=xep@!m?QIGgV*|brYUHCt! zu?3%D;bj9JZDHs{oTxQt$$y8r9H)Vt;h8rYKAU66C;LtyO_T4WwTuhvHRCWbp^^R! zxPC1{TOI^pN7r%2{Zs}6iyp9;TJW5>;(&~SvqiW7uNyr+mTO@7wC_5nv-o%`NNU5O zd4KqcidHFGLFs6bs@cy2`CPuy=h(3e>-<5Qo5`A6>V*16Cr6Fk3+vL$kkvI=0h+-J z5!HlPHJ+{bz$;|Qa1qx5J&_|NC;ctIQM?BV8y+Ls^Eu)id`)T=LXyil3doKDLxbeHL(&KzHa@>OPoCiW<+{^U#&Fg8b0L~%$=iN-#2QlTbV^eds2=k-K!euoYgiRqoL>y(n&lG7Ul(lQ>RQ91|-?_&z`0atc4 zQw)?tR`e`VKNTLBl+j^Dyq|%nM{VWZGJBlfZE?p|Rq?@{>ztvP4=)lC8;2;BQD^wjoXD|U5!JT_V+P}(V~>E5wB*8z3+B7Nba z2&(~u&+ul;Xiw|tUzw72kD75()n7#dot&IHrbX#cxO&G_z;R|rQ{3lSq$KfQm=lOE{|9gn|x+e`TX z0$a#e9?N#rp1;X@m%^#}rmkt_%l(2q#_W!m;E#H7;gl})Ws<7^ZvS#Cv_fy zAtO=GF#-)e+7Zd1lHzG1cx2Q&hlP+8*LY`teu%QV`NX)bqKGfzisw#=_HqtA$m?lPewZSfDmge=guLEYXC!FZcU>^U0xGtg zmhjz4jIl7+yWA~GAdf7IY`}hV&c^87C<+keQJ*sFlPK~?G&MbMgpD+w_%&iQl+3lh zg&F+7I**CN4t91Pr*38B>~+60&hG5)$mB08lNUkd-0T^P+_^n1E9A+?-4fsNs}(V! z@WZtMmu0a~KrAI?Z*_qq?GFX^`6V8@wg!K)Mj);t$f}dJ13UstvNXf4#a{yPECztf z79}nYZMy}i;S|&NkDtI^miaVUoa44e+ufj0cs9N!Jc}jHRTVp!y`EFPP{YWBYyOa(fUI0wVj6T+J~C8lSnkzLgqbKj)x@(5J>_YY%^Prgg*s2dZD zVHZEY4CwDacUflnj>LWpPPkLKo55T2M8K%8@LcZudEUqG(v!}t;-5M9RIt(7D&bzL z__PwkZwfyzBv(;6PKCMMBaepW-2VX!obR|Aaq8wrb3leSxD)^NnNVlQrS+`ZECch` zQmck-j?t-ImC|h%g8Ed#Zo9iSDomEq=l_?!*TeSGkGj=MQ>d}C2hj^_*pOShZ$zLx z)ibA~@e5|(@596soAl<^*XutQF4p8a{ie0ij8pX$+!v)nvuQtd4b-@v>({^d%*f$R zD0MtGA@sVYJpAYS6EZpR7kPF$>Bx8Wh#tm!yT{AT2S0ZGW_y!R)77sAT#hAHaYz0o z$grcTZ0R`ANaNIstevuTEUqz@JB>YTV3By_QfmHO&c{mKt~$QiW| z#dM?OwmK_fL-IfXAg1E`9d%vBErZ&{B)o9mr%QQdQ1+pNBS8(1pHHJmVLIQZ=%CQD zrZwo=vIcQvJ9ccwWoDQA_Q6H%@bHLw?p9LR04%Jh`#!RPwSh5T+T=bWo=X&dCTOBD zp!GnjwF>P3uIn&f`+$?73CiV+v<&YoP!)?`2g^AQ7YWMk96o|(dMbK1$!)&oT<}gE ziw%D8UDd=rV85p-dJFlOZFALSW`2AANLED}*|&FZ>?7s!(im&M!P*;`X5eQWTR1@%@MVRCK z9TEg6Lsb6;xc?#!C^6V=mZ`%VGr3^}QW+f7z1u%1oskp=S&jh9$iC{z7ms`yFzEzq zYs-qi`-a8wX${)db&7q8_LuJ@mq&AKU&g9=?lbjq();%ZCtkS>cG_KHV}U=7vG3}V zUz8wSa~8{u5TfdGaBvl66v;lF+~DOc;8M@$pjiwaPkM=@rD(Bs-qzEzzPGq_!iVFQ z0c5AK2=1rOwcO8k!gz->#IB(G^jbwjq(*!NOM8KyHDgAiDXEZUKN{l8o$%8Ct4V17 z1xCK;UJ$YMNKPz=?|I{w-A5hsE!9@6y)|i&@KP=AxBHEuA%-qbdgP~xMGMHUL JLf;(0{x3e+mP!Bs literal 0 HcmV?d00001 diff --git a/doc/Projects/2022/Project1/pdf/Project1.tex b/doc/Projects/2022/Project1/pdf/Project1.tex new file mode 100644 index 000000000..681c80e83 --- /dev/null +++ b/doc/Projects/2022/Project1/pdf/Project1.tex @@ -0,0 +1,621 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/doconce/doconce/) +%% doconce format latex Project1.do.txt --print_latex_style=trac --latex_admon=paragraph +%% + + +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{fancyvrb} % packages needed for verbatim environments + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 7, 2021 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 5, 2022 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection*{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example \href{{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md}} we detail how to write a report. Furthermore, at \href{{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/}} you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for $x$ and +$y$, or as in the example below just a set of fixed values for $x$ and +$y$ with a given step size. We will fit a function (for example a +polynomial) of $x$ and $y$. Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\begin{verbatim} +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + + +\end{verbatim} + + +\paragraph{Part a): Paper and pencil part (also as weekly exercise for week 36).} +This part can be included in your theory description of the report. + +This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}). + +The assumption we have made is +that there exists a continuous function $f(\bm{x})$ and a normal distributed error $\bm{\varepsilon}\sim N(0, \sigma^2)$ +which describes our data +\[ +\bm{y} = f(\bm{x})+\bm{\varepsilon} +\] + +We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function $f$ is approximated by $\bm{\tilde{y}}$ where we minimized $(\bm{y}-\bm{\tilde{y}})^2$, with +\[ +\bm{\tilde{y}} = \bm{X}\bm{\beta}. +\] +The matrix $\bm{X}$ is the so-called design or feature matrix. + +Show that the expectation value of $\bm{y}$ for a given element $i$ +\[ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \bm{\beta}, +\] +and that +its variance is +\[ +\mbox{Var}(y_i) = \sigma^2. +\] +Hence, $y_i \sim N( \mathbf{X}_{i, \ast} \, \bm{\beta}, \sigma^2)$, that is $\bm{y}$ follows a normal distribution with +mean value $\bm{X}\bm{\beta}$ and variance $\sigma^2$. + +With the OLS expressions for the parameters $\bm{\beta}$ show that +\[ +\mathbb{E}(\bm{\beta}) = \bm{\beta}. +\] +Show finally that the variance of $\bm{\beta}$ is +\[ +\mbox{Var}(\bm{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +\] + +We can use the last expression when we define a so-called confidence interval for the parameters $\beta$. +A given parameter $\beta_j$ is given by the diagonal matrix element of the above matrix. + +\paragraph{Part b) : Ordinary Least Square (OLS) on the Franke function.} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $N(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) and perform a standard \textbf{ordinary least square regression} +analysis using polynomials in $x$ and $y$ up to fifth order. + +Evaluate the mean Squared error (MSE) + +\[ MSE(\bm{y},\tilde{\bm{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\bm{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\bm{y}, \tilde{\bm{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\bm{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters $\beta$ as you increase the order of the polynomial. Comment your results. + +Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately $2/3$ to $4/5$ of the data as training data. + +You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. + +\paragraph{Part c): Bias-variance trade-off and resampling techniques.} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] +The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + +\paragraph{Part d): Cross-validation as resampling techniques, adding more complexity.} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + +\paragraph{Part e): Ridge Regression on the Franke function with resampling.} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Part f): Lasso Regression on the Franke function with resampling.} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Part g): Analysis of real data.} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +Or, if you prefer, we have placed selected datafiles at \href{{https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles}} + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + + + +\begin{verbatim} +scipy.misc.imread + +\end{verbatim} + + +Here is a simple part of a Python code which reads and plots the data +from such files + + + + + + + + + + + + + + + + + +\begin{verbatim} +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() + +\end{verbatim} + + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +\subsection*{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection*{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection*{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +\subsection*{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + +% ------------------- end of main content --------------- + +\end{document} + diff --git a/doc/src/Projects/2022/Project1/._Project1-bs000.html b/doc/src/Projects/2022/Project1/._Project1-bs000.html new file mode 100644 index 000000000..e11873fc6 --- /dev/null +++ b/doc/src/Projects/2022/Project1/._Project1-bs000.html @@ -0,0 +1,696 @@ + + + + + + + +Project 1 on Machine Learning, deadline October 7, 2021 + + + + + + + + + + + + + + + + + + +

+ +
+

 

 

 

+ + +
+
+

Project 1 on Machine Learning, deadline October 7, 2021

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+University of Oslo, Norway +
+
+
+

Sep 5, 2022

+
+
+ + +
+

Regression analysis and resampling methods

+ +

The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md we detail how to write a report. Furthermore, at https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/ you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. +

+ +

We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. +

+ +

The Franke function, which is a weighted sum of four exponentials reads as follows

+$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for \( x \) and +\( y \), or as in the example below just a set of fixed values for \( x \) and +\( y \) with a given step size. We will fit a function (for example a +polynomial) of \( x \) and \( y \). Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) \( \lambda \). +

+ +

Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. +

+ +

The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)

+ + +
+
+
+
+
+
from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Part a): Paper and pencil part (also as weekly exercise for week 36)

+ +

This part can be included in your theory description of the report.

+ +

This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer).

+ +

The assumption we have made is +that there exists a continuous function \( f(\boldsymbol{x}) \) and a normal distributed error \( \boldsymbol{\varepsilon}\sim N(0, \sigma^2) \) +which describes our data +

+$$ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +$$ + +

We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function \( f \) is approximated by \( \boldsymbol{\tilde{y}} \) where we minimized \( (\boldsymbol{y}-\boldsymbol{\tilde{y}})^2 \), with +

+$$ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +$$ + +

The matrix \( \boldsymbol{X} \) is the so-called design or feature matrix.

+ +

Show that the expectation value of \( \boldsymbol{y} \) for a given element \( i \)

+$$ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, +$$ + +

and that +its variance is +

+$$ +\mbox{Var}(y_i) = \sigma^2. +$$ + +

Hence, \( y_i \sim N( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2) \), that is \( \boldsymbol{y} \) follows a normal distribution with +mean value \( \boldsymbol{X}\boldsymbol{\beta} \) and variance \( \sigma^2 \). +

+ +

With the OLS expressions for the parameters \( \boldsymbol{\beta} \) show that

+$$ +\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}. +$$ + +

Show finally that the variance of \( \boldsymbol{\beta} \) is

+$$ +\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +$$ + +

We can use the last expression when we define a so-called confidence interval for the parameters \( \beta \). +A given parameter \( \beta_j \) is given by the diagonal matrix element of the above matrix. +

+

Part b) : Ordinary Least Square (OLS) on the Franke function

+ +

We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( N(0,1) \). +

+ +

Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) and perform a standard ordinary least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. +

+ +

Evaluate the mean Squared error (MSE)

+ +$$ MSE(\boldsymbol{y},\tilde{\boldsymbol{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

and the \( R^2 \) score function. If \( \tilde{\boldsymbol{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as +

+ +$$ +R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

where we have defined the mean value of \( \boldsymbol{y} \) as

+ +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters \( \beta \) as you increase the order of the polynomial. Comment your results. +

+ +

Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. +

+ +

It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately \( 2/3 \) to \( 4/5 \) of the data as training data. +

+ +

You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. +

+

Part c): Bias-variance trade-off and resampling techniques

+ +

Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique.

+ +

With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. +

+ +

Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! +

+ +

With this result we move on to the bias-variance trade-off analysis.

+ +

Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). +

+ +

Let us assume that the true data is generated from a noisy model

+ +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). +

+ +

In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). +

+ +

The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function +

+ +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +

Here the expected value \( \mathbb{E} \) is the sample value.

+ +

Show that you can rewrite this as

+$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. +

+ +

Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. +

+ +

Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. +

+ +

Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \).

+

Part d): Cross-validation as resampling techniques, adding more complexity

+ +

The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. +

+ +

Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. +

+ +

Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. +

+

Part e): Ridge Regression on the Franke function with resampling

+ +

Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on \( \lambda \). +

+ +

Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. +

+

Part f): Lasso Regression on the Franke function with resampling

+ +

This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. +

+

Part g): Analysis of real data

+ +

With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, +

+ +

Or, if you prefer, we have placed selected datafiles at https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles

+ +

In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using +

+ + + +
+
+
+
+
+
scipy.misc.imread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Here is a simple part of a Python code which reads and plots the data +from such files +

+ + + +
+
+
+
+
+
import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. +

+ +

Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples.

+ +

Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. +

+ +

At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). +

+

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.

+ +
    +
  • Give a short description of the nature of the problem and the eventual numerical methods you have used.
  • +
  • Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.
  • +
  • Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.
  • +
  • If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.
  • +
  • Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.
  • +
  • Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.
  • +
  • Try to give an interpretation of you results in your answers to the problems.
  • +
  • Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.
  • +
  • Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.
  • +
+

Format for electronic delivery of report and programs

+ +

The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:

+ +
    +
  • Use Canvas to hand in your projects, log in at https://www.uio.no/english/services/it/education/canvas/ with your normal UiO username and password.
  • +
  • Upload only the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.
  • +
  • In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.
  • +
+

Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. +

+

Software and needed installations

+ +

If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as +

+
    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+

For Python3, replace pip with pip3.

+ +

See below for a discussion of tensorflow and scikit-learn.

+ +

For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example +

+
    +
  1. brew install python3
  2. +
+

For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as +

+
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+

etc etc.

+ +

If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely

+
    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+

Popular software packages written in Python for ML are

+ + +

These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. +

+ +

+ +

    +
  • 1
  • +
+ +
+ + + + + + + diff --git a/doc/src/Projects/2022/Project1/Project1-bs.html b/doc/src/Projects/2022/Project1/Project1-bs.html new file mode 100644 index 000000000..e11873fc6 --- /dev/null +++ b/doc/src/Projects/2022/Project1/Project1-bs.html @@ -0,0 +1,696 @@ + + + + + + + +Project 1 on Machine Learning, deadline October 7, 2021 + + + + + + + + + + + + + + + + + + + + +
+

 

 

 

+ + +
+
+

Project 1 on Machine Learning, deadline October 7, 2021

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+University of Oslo, Norway +
+
+
+

Sep 5, 2022

+
+
+ + +
+

Regression analysis and resampling methods

+ +

The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md we detail how to write a report. Furthermore, at https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/ you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. +

+ +

We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. +

+ +

The Franke function, which is a weighted sum of four exponentials reads as follows

+$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for \( x \) and +\( y \), or as in the example below just a set of fixed values for \( x \) and +\( y \) with a given step size. We will fit a function (for example a +polynomial) of \( x \) and \( y \). Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) \( \lambda \). +

+ +

Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. +

+ +

The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)

+ + +
+
+
+
+
+
from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Part a): Paper and pencil part (also as weekly exercise for week 36)

+ +

This part can be included in your theory description of the report.

+ +

This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer).

+ +

The assumption we have made is +that there exists a continuous function \( f(\boldsymbol{x}) \) and a normal distributed error \( \boldsymbol{\varepsilon}\sim N(0, \sigma^2) \) +which describes our data +

+$$ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +$$ + +

We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function \( f \) is approximated by \( \boldsymbol{\tilde{y}} \) where we minimized \( (\boldsymbol{y}-\boldsymbol{\tilde{y}})^2 \), with +

+$$ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +$$ + +

The matrix \( \boldsymbol{X} \) is the so-called design or feature matrix.

+ +

Show that the expectation value of \( \boldsymbol{y} \) for a given element \( i \)

+$$ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, +$$ + +

and that +its variance is +

+$$ +\mbox{Var}(y_i) = \sigma^2. +$$ + +

Hence, \( y_i \sim N( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2) \), that is \( \boldsymbol{y} \) follows a normal distribution with +mean value \( \boldsymbol{X}\boldsymbol{\beta} \) and variance \( \sigma^2 \). +

+ +

With the OLS expressions for the parameters \( \boldsymbol{\beta} \) show that

+$$ +\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}. +$$ + +

Show finally that the variance of \( \boldsymbol{\beta} \) is

+$$ +\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +$$ + +

We can use the last expression when we define a so-called confidence interval for the parameters \( \beta \). +A given parameter \( \beta_j \) is given by the diagonal matrix element of the above matrix. +

+

Part b) : Ordinary Least Square (OLS) on the Franke function

+ +

We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( N(0,1) \). +

+ +

Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) and perform a standard ordinary least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. +

+ +

Evaluate the mean Squared error (MSE)

+ +$$ MSE(\boldsymbol{y},\tilde{\boldsymbol{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

and the \( R^2 \) score function. If \( \tilde{\boldsymbol{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as +

+ +$$ +R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

where we have defined the mean value of \( \boldsymbol{y} \) as

+ +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters \( \beta \) as you increase the order of the polynomial. Comment your results. +

+ +

Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. +

+ +

It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately \( 2/3 \) to \( 4/5 \) of the data as training data. +

+ +

You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. +

+

Part c): Bias-variance trade-off and resampling techniques

+ +

Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique.

+ +

With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. +

+ +

Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! +

+ +

With this result we move on to the bias-variance trade-off analysis.

+ +

Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). +

+ +

Let us assume that the true data is generated from a noisy model

+ +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). +

+ +

In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). +

+ +

The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function +

+ +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +

Here the expected value \( \mathbb{E} \) is the sample value.

+ +

Show that you can rewrite this as

+$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. +

+ +

Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. +

+ +

Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. +

+ +

Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \).

+

Part d): Cross-validation as resampling techniques, adding more complexity

+ +

The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. +

+ +

Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. +

+ +

Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. +

+

Part e): Ridge Regression on the Franke function with resampling

+ +

Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on \( \lambda \). +

+ +

Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. +

+

Part f): Lasso Regression on the Franke function with resampling

+ +

This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. +

+

Part g): Analysis of real data

+ +

With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, +

+ +

Or, if you prefer, we have placed selected datafiles at https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles

+ +

In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using +

+ + + +
+
+
+
+
+
scipy.misc.imread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Here is a simple part of a Python code which reads and plots the data +from such files +

+ + + +
+
+
+
+
+
import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. +

+ +

Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples.

+ +

Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. +

+ +

At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). +

+

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.

+ +
    +
  • Give a short description of the nature of the problem and the eventual numerical methods you have used.
  • +
  • Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.
  • +
  • Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.
  • +
  • If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.
  • +
  • Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.
  • +
  • Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.
  • +
  • Try to give an interpretation of you results in your answers to the problems.
  • +
  • Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.
  • +
  • Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.
  • +
+

Format for electronic delivery of report and programs

+ +

The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:

+ +
    +
  • Use Canvas to hand in your projects, log in at https://www.uio.no/english/services/it/education/canvas/ with your normal UiO username and password.
  • +
  • Upload only the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.
  • +
  • In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.
  • +
+

Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. +

+

Software and needed installations

+ +

If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as +

+
    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+

For Python3, replace pip with pip3.

+ +

See below for a discussion of tensorflow and scikit-learn.

+ +

For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example +

+
    +
  1. brew install python3
  2. +
+

For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as +

+
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+

etc etc.

+ +

If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely

+
    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+

Popular software packages written in Python for ML are

+ + +

These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. +

+ +

+ +

    +
  • 1
  • +
+ +
+ + + + + + + diff --git a/doc/src/Projects/2022/Project1/Project1.do.txt b/doc/src/Projects/2022/Project1/Project1.do.txt index 2838dcaf2..5c1b446ab 100644 --- a/doc/src/Projects/2022/Project1/Project1.do.txt +++ b/doc/src/Projects/2022/Project1/Project1.do.txt @@ -7,10 +7,12 @@ DATE: today ===== Regression analysis and resampling methods ===== -Add material about how to write the report The main aim of this project is to study in more detail various regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example URL:"https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md" we detail how to write a report. Furthermore, at URL:"https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/" you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. + We will first study how to fit polynomials to a specific @@ -35,16 +37,15 @@ f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)} The function will be defined for $x,y\in [0,1]$. Our first step will be to perform an OLS regression analysis of this function, trying out a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, -x^2, y^2, xy, \dots]$. We will also include bootstrap first as -a resampling technique. After that we will include the cross-validation technique. As in homeworks 1 and 2, we can use a uniform -distribution to set up the arrays of values for $x$ and $y$, or as in -the example below just a set of fixed -values for $x$ and $y$ with a given step -size. We will fit a -function (for example a polynomial) of $x$ and $y$. Thereafter we -will repeat much of the same procedure using the Ridge and Lasso -regression methods, introducing thus a dependence on the bias -(penalty) $\lambda$. +x^2, y^2, xy, \dots]$. We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for $x$ and +$y$, or as in the example below just a set of fixed values for $x$ and +$y$ with a given step size. We will fit a function (for example a +polynomial) of $x$ and $y$. Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) $\lambda$. Finally we are going to use (real) digital terrain data and try to reproduce these data using the same methods. We will also try to go @@ -97,7 +98,65 @@ plt.show() !ec -=== Exercise 1: Ordinary Least Square (OLS) on the Franke function === +=== Part a): Paper and pencil part (also as weekly exercise for week 36) === + +This part can be included in your theory description of the report. + +This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of "Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer":"https://www.springer.com/gp/book/9780387848570"). + +The assumption we have made is +that there exists a continuous function $f(\bm{x})$ and a normal distributed error $\bm{\varepsilon}\sim N(0, \sigma^2)$ +which describes our data +!bt +\[ +\bm{y} = f(\bm{x})+\bm{\varepsilon} +\] +!et + +We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function $f$ is approximated by $\bm{\tilde{y}}$ where we minimized $(\bm{y}-\bm{\tilde{y}})^2$, with +!bt +\[ +\bm{\tilde{y}} = \bm{X}\bm{\beta}. +\] +!et +The matrix $\bm{X}$ is the so-called design or feature matrix. + + +Show that the expectation value of $\bm{y}$ for a given element $i$ +!bt +\[ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \bm{\beta}, +\] +!et +and that +its variance is +!bt +\[ +\mbox{Var}(y_i) = \sigma^2. +\] +!et +Hence, $y_i \sim N( \mathbf{X}_{i, \ast} \, \bm{\beta}, \sigma^2)$, that is $\bm{y}$ follows a normal distribution with +mean value $\bm{X}\bm{\beta}$ and variance $\sigma^2$. + +With the OLS expressions for the parameters $\bm{\beta}$ show that +!bt +\[ +\mathbb{E}(\bm{\beta}) = \bm{\beta}. +\] +!et +Show finally that the variance of $\bm{\beta}$ is +!bt +\[ +\mbox{Var}(\bm{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +\] +!et + + +We can use the last expression when we define a so-called confidence interval for the parameters $\beta$. +A given parameter $\beta_j$ is given by the diagonal matrix element of the above matrix. + +=== Part b) : Ordinary Least Square (OLS) on the Franke function === We will generate our own dataset for a function $\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function @@ -106,11 +165,10 @@ of an added stochastic noise to this function using the normal distribution $N(0,1)$. *Write your own code* (using either a matrix inversion or a singular -value decomposition from e.g., _numpy_ ) or use your code from -homeworks 1 and 2 and perform a standard least square regression +value decomposition from e.g., _numpy_ ) and perform a standard _ordinary least square regression_ analysis using polynomials in $x$ and $y$ up to fifth order. -Evaluate the Mean Squared error (MSE) +Evaluate the mean Squared error (MSE) !bt @@ -158,10 +216,10 @@ approximately $2/3$ to $4/5$ of the data as training data. You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. - -=== Exercise 2: Bias-variance trade-off and resampling techniques === +=== Part c): Bias-variance trade-off and resampling techniques === Our aim here is to study the bias-variance trade-off by implementing the _bootstrap_ resampling technique. @@ -215,7 +273,7 @@ Show that you can rewrite this as \mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. \] !et - +The answer to this exercise can be included in the theory part of the report. Explain what the terms mean, which one is the bias and which one is the variance and discuss their interpretations. @@ -229,7 +287,7 @@ of data points, and possibly also your training and test data using the _bootstr Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. -=== Exercise 3: Cross-validation as resampling techniques, adding more complexity === +=== Part d): Cross-validation as resampling techniques, adding more complexity === The aim here is to write your own code for another widely popular @@ -248,19 +306,19 @@ folds. You can also compare your own cross-validation code with the one provided by _Scikit-Learn_. -=== Exercise 4: Ridge Regression on the Franke function with resampling === +=== Part e): Ridge Regression on the Franke function with resampling === Write your own code for the Ridge method, either using matrix inversion or the singular value decomposition as done in the previous exercise. Perform the same bootstrap analysis as in the -Exercise 2 (for the same polynomials) and the cross-validation in exercise 3 but now for different values of $\lambda$. Compare and -analyze your results with those obtained in exercises 1-3. Study the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in parts b-d). Study the dependence on $\lambda$. Study also the bias-variance trade-off as function of various values of the parameter $\lambda$. For the bias-variance trade-off, use the _bootstrap_ resampling method. Comment your results. -=== Exercise 5: Lasso Regression on the Franke function with resampling === +=== Part f): Lasso Regression on the Franke function with resampling === This exercise is essentially a repeat of the previous two ones, but now with Lasso regression. Write either your own code (difficult and optional) or, in this case, @@ -269,7 +327,7 @@ Give a critical discussion of the three methods and a judgement of which model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the _bootstrap_ resampling technique and an analysis of the mean squared error using cross-validation. -=== Exercise 6: Analysis of real data === +=== Part g): Analysis of real data === With our codes functioning and having been tested properly on a simpler function we are now ready to look at real data. We will diff --git a/doc/src/Projects/2022/Project1/Project1.html b/doc/src/Projects/2022/Project1/Project1.html new file mode 100644 index 000000000..19569cd9d --- /dev/null +++ b/doc/src/Projects/2022/Project1/Project1.html @@ -0,0 +1,719 @@ + + + + + + + +Project 1 on Machine Learning, deadline October 7, 2021 + + + + + + + + + + + + + + +
+

Project 1 on Machine Learning, deadline October 7, 2021

+
+ + +
+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +
+University of Oslo, Norway +
+
+
+

Sep 5, 2022

+
+
+

Regression analysis and resampling methods

+ +

The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md we detail how to write a report. Furthermore, at https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/ you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. +

+ +

We will first study how to fit polynomials to a specific +two-dimensional function called Franke's +function. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. +

+ +

The Franke function, which is a weighted sum of four exponentials reads as follows

+$$ +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} +$$ + +

The function will be defined for \( x,y\in [0,1] \). Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an \( x \) and \( y \) dependence of the form \( [x, y, +x^2, y^2, xy, \dots] \). We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for \( x \) and +\( y \), or as in the example below just a set of fixed values for \( x \) and +\( y \) with a given step size. We will fit a function (for example a +polynomial) of \( x \) and \( y \). Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) \( \lambda \). +

+ +

Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. +

+ +

The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)

+ + +
+
+
+
+
+
from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+from matplotlib import cm
+from matplotlib.ticker import LinearLocator, FormatStrFormatter
+import numpy as np
+from random import random, seed
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+
+# Make data.
+x = np.arange(0, 1, 0.05)
+y = np.arange(0, 1, 0.05)
+x, y = np.meshgrid(x,y)
+
+
+def FrankeFunction(x,y):
+    term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))
+    term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))
+    term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))
+    term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)
+    return term1 + term2 + term3 + term4
+
+
+z = FrankeFunction(x, y)
+
+# Plot the surface.
+surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,
+                       linewidth=0, antialiased=False)
+
+# Customize the z axis.
+ax.set_zlim(-0.10, 1.40)
+ax.zaxis.set_major_locator(LinearLocator(10))
+ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
+
+# Add a color bar which maps values to colors.
+fig.colorbar(surf, shrink=0.5, aspect=5)
+
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Part a): Paper and pencil part (also as weekly exercise for week 36)

+ +

This part can be included in your theory description of the report.

+ +

This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer).

+ +

The assumption we have made is +that there exists a continuous function \( f(\boldsymbol{x}) \) and a normal distributed error \( \boldsymbol{\varepsilon}\sim N(0, \sigma^2) \) +which describes our data +

+$$ +\boldsymbol{y} = f(\boldsymbol{x})+\boldsymbol{\varepsilon} +$$ + +

We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function \( f \) is approximated by \( \boldsymbol{\tilde{y}} \) where we minimized \( (\boldsymbol{y}-\boldsymbol{\tilde{y}})^2 \), with +

+$$ +\boldsymbol{\tilde{y}} = \boldsymbol{X}\boldsymbol{\beta}. +$$ + +

The matrix \( \boldsymbol{X} \) is the so-called design or feature matrix.

+ +

Show that the expectation value of \( \boldsymbol{y} \) for a given element \( i \)

+$$ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, +$$ + +

and that +its variance is +

+$$ +\mbox{Var}(y_i) = \sigma^2. +$$ + +

Hence, \( y_i \sim N( \mathbf{X}_{i, \ast} \, \boldsymbol{\beta}, \sigma^2) \), that is \( \boldsymbol{y} \) follows a normal distribution with +mean value \( \boldsymbol{X}\boldsymbol{\beta} \) and variance \( \sigma^2 \). +

+ +

With the OLS expressions for the parameters \( \boldsymbol{\beta} \) show that

+$$ +\mathbb{E}(\boldsymbol{\beta}) = \boldsymbol{\beta}. +$$ + +

Show finally that the variance of \( \boldsymbol{\beta} \) is

+$$ +\mbox{Var}(\boldsymbol{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +$$ + +

We can use the last expression when we define a so-called confidence interval for the parameters \( \beta \). +A given parameter \( \beta_j \) is given by the diagonal matrix element of the above matrix. +

+

Part b) : Ordinary Least Square (OLS) on the Franke function

+ +

We will generate our own dataset for a function +\( \mathrm{FrankeFunction}(x,y) \) with \( x,y \in [0,1] \). The function +\( f(x,y) \) is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution \( N(0,1) \). +

+ +

Write your own code (using either a matrix inversion or a singular +value decomposition from e.g., numpy ) and perform a standard ordinary least square regression +analysis using polynomials in \( x \) and \( y \) up to fifth order. +

+ +

Evaluate the mean Squared error (MSE)

+ +$$ MSE(\boldsymbol{y},\tilde{\boldsymbol{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +

and the \( R^2 \) score function. If \( \tilde{\boldsymbol{y}}_i \) is the predicted +value of the \( i-th \) sample and \( y_i \) is the corresponding true value, +then the score \( R^2 \) is defined as +

+ +$$ +R^2(\boldsymbol{y}, \tilde{\boldsymbol{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +

where we have defined the mean value of \( \boldsymbol{y} \) as

+ +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +

Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters \( \beta \) as you increase the order of the polynomial. Comment your results. +

+ +

Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library Scikit-Learn (make +sure you have installed it). This function is called +\( train\_test\_split \). You should present a critical discussion of why and how you have scaled or not scaled the data. +

+ +

It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately \( 2/3 \) to \( 4/5 \) of the data as training data. +

+ +

You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. +

+

Part c): Bias-variance trade-off and resampling techniques

+ +

Our aim here is to study the bias-variance trade-off by implementing the bootstrap resampling technique.

+ +

With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. +

+ +

Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! +

+ +

With this result we move on to the bias-variance trade-off analysis.

+ +

Consider a +dataset \( \mathcal{L} \) consisting of the data +\( \mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\} \). +

+ +

Let us assume that the true data is generated from a noisy model

+ +$$ +\boldsymbol{y}=f(\boldsymbol{x}) + \boldsymbol{\epsilon}. +$$ + +

Here \( \epsilon \) is normally distributed with mean zero and standard +deviation \( \sigma^2 \). +

+ +

In our derivation of the ordinary least squares method we defined then +an approximation to the function \( f \) in terms of the parameters +\( \boldsymbol{\beta} \) and the design matrix \( \boldsymbol{X} \) which embody our model, +that is \( \boldsymbol{\tilde{y}}=\boldsymbol{X}\boldsymbol{\beta} \). +

+ +

The parameters \( \boldsymbol{\beta} \) are in turn found by optimizing the means +squared error via the so-called cost function +

+ +$$ +C(\boldsymbol{X},\boldsymbol{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]. +$$ + +

Here the expected value \( \mathbb{E} \) is the sample value.

+ +

Show that you can rewrite this as

+$$ +\mathbb{E}\left[(\boldsymbol{y}-\boldsymbol{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\boldsymbol{\tilde{y}}\right])^2+\sigma^2. +$$ + +

The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. +

+ +

Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. +

+ +

Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the bootstrap resampling method. +

+ +

Note also that when you calculate the bias, in all applications you don't know the function values \( f_i \). You would hence replace them with the actual data points \( y_i \).

+

Part d): Cross-validation as resampling techniques, adding more complexity

+ +

The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. +

+ +

Implement the \( k \)-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +Scikit-Learn if needed. +

+ +

Compare the MSE you get from your cross-validation code with the one +you got from your bootstrap code. Comment your results. Try \( 5-10 \) +folds. You can also compare your own cross-validation code with the +one provided by Scikit-Learn. +

+

Part e): Ridge Regression on the Franke function with resampling

+ +

Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of \( \lambda \). Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on \( \lambda \). +

+ +

Study also the bias-variance trade-off as function of various values of +the parameter \( \lambda \). For the bias-variance trade-off, use the bootstrap resampling method. Comment your results. +

+

Part f): Lasso Regression on the Franke function with resampling

+ +

This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of Scikit-Learn (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the bootstrap resampling technique and an analysis of the mean squared error using cross-validation. +

+

Part g): Analysis of real data

+ +

With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +https://earthexplorer.usgs.gov/, +

+ +

Or, if you prefer, we have placed selected datafiles at https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles

+ +

In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be SRTM +Arc-Second Global and download the data as a GeoTIF file. The +files are then stored in tif format which can be imported into a +Python program using +

+ + + +
+
+
+
+
+
scipy.misc.imread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Here is a simple part of a Python code which reads and plots the data +from such files +

+ + + +
+
+
+
+
+
import numpy as np
+from imageio import imread
+import matplotlib.pyplot as plt
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
+
+# Load the terrain
+terrain1 = imread('SRTM_data_Norway_1.tif')
+# Show the terrain
+plt.figure()
+plt.title('Terrain over Norway 1')
+plt.imshow(terrain1, cmap='gray')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.show()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. +

+ +

Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example kaggle.com for examples.

+ +

Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. +

+ +

At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). +

+

Background literature

+ +
    +
  1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the Lecture notes on ridge regression by Wessel N. van Wieringen
  2. +
  3. The textbook of Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer, chapters 3 and 7 are the most relevant ones for the analysis here.
  4. +
+

Introduction to numerical projects

+ +

Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.

+ +
    +
  • Give a short description of the nature of the problem and the eventual numerical methods you have used.
  • +
  • Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.
  • +
  • Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.
  • +
  • If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.
  • +
  • Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.
  • +
  • Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.
  • +
  • Try to give an interpretation of you results in your answers to the problems.
  • +
  • Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.
  • +
  • Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning.
  • +
+

Format for electronic delivery of report and programs

+ +

The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:

+ +
    +
  • Use Canvas to hand in your projects, log in at https://www.uio.no/english/services/it/education/canvas/ with your normal UiO username and password.
  • +
  • Upload only the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.
  • +
  • In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.
  • +
+

Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. +

+

Software and needed installations

+ +

If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via pip as +

+
    +
  1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow
  2. +
+

For Python3, replace pip with pip3.

+ +

See below for a discussion of tensorflow and scikit-learn.

+ +

For OSX users we recommend also, after having installed Xcode, to install brew. Brew allows +for a seamless installation of additional software via for example +

+
    +
  1. brew install python3
  2. +
+

For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use pip as well and simply install Python as +

+
    +
  1. sudo apt-get install python3 (or python for python2.7)
  2. +
+

etc etc.

+ +

If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely

+
    +
  1. Anaconda Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system conda
  2. +
  3. Enthought canopy is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.
  4. +
+

Popular software packages written in Python for ML are

+ + +

These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. +

+ + + + + diff --git a/doc/src/Projects/2022/Project1/Project1.ipynb b/doc/src/Projects/2022/Project1/Project1.ipynb new file mode 100644 index 000000000..1471cc967 --- /dev/null +++ b/doc/src/Projects/2022/Project1/Project1.ipynb @@ -0,0 +1,821 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7d5491c2", + "metadata": { + "editable": true + }, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "5e4e2e72", + "metadata": { + "editable": true + }, + "source": [ + "# Project 1 on Machine Learning, deadline October 7, 2021\n", + "**[Data Analysis and Machine Learning FYS-STK3155/FYS4155](http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html)**, University of Oslo, Norway\n", + "\n", + "Date: **Sep 5, 2022**" + ] + }, + { + "cell_type": "markdown", + "id": "b03ea5a7", + "metadata": { + "editable": true + }, + "source": [ + "## Regression analysis and resampling methods\n", + "\n", + "The main aim of this project is to study in more detail various\n", + "regression methods, including the Ordinary Least Squares (OLS) method,\n", + "In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports.\n", + "The format for the delivery of your answers is namely that of a scientific report. At for example we detail how to write a report. Furthermore, at you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. \n", + "\n", + "We will first study how to fit polynomials to a specific\n", + "two-dimensional function called [Franke's\n", + "function](http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf). This\n", + "is a function which has been widely used when testing various\n", + "interpolation and fitting algorithms. Furthermore, after having\n", + "established the model and the method, we will employ resamling\n", + "techniques such as cross-validation and/or bootstrap in order to perform a\n", + "proper assessment of our models. We will also study in detail the\n", + "so-called Bias-Variance trade off.\n", + "\n", + "The Franke function, which is a weighted sum of four exponentials reads as follows" + ] + }, + { + "cell_type": "markdown", + "id": "91b922a6", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\begin{align*}\n", + "f(x,y) &= \\frac{3}{4}\\exp{\\left(-\\frac{(9x-2)^2}{4} - \\frac{(9y-2)^2}{4}\\right)}+\\frac{3}{4}\\exp{\\left(-\\frac{(9x+1)^2}{49}- \\frac{(9y+1)}{10}\\right)} \\\\\n", + "&+\\frac{1}{2}\\exp{\\left(-\\frac{(9x-7)^2}{4} - \\frac{(9y-3)^2}{4}\\right)} -\\frac{1}{5}\\exp{\\left(-(9x-4)^2 - (9y-7)^2\\right) }.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "cb6e2566", + "metadata": { + "editable": true + }, + "source": [ + "The function will be defined for $x,y\\in [0,1]$. Our first step will\n", + "be to perform an OLS regression analysis of this function, trying out\n", + "a polynomial fit with an $x$ and $y$ dependence of the form $[x, y,\n", + "x^2, y^2, xy, \\dots]$. We will also include bootstrap first as a\n", + "resampling technique. After that we will include the cross-validation\n", + "technique. As discussed in the lectures for weeks 35 and 36,, we can\n", + "use a uniform distribution to set up the arrays of values for $x$ and\n", + "$y$, or as in the example below just a set of fixed values for $x$ and\n", + "$y$ with a given step size. We will fit a function (for example a\n", + "polynomial) of $x$ and $y$. Thereafter we will repeat much of the\n", + "same procedure using the Ridge and Lasso regression methods,\n", + "introducing thus a dependence on the bias (penalty) $\\lambda$.\n", + "\n", + "Finally we are going to use (real) digital terrain data and try to\n", + "reproduce these data using the same methods. We will also try to go\n", + "beyond the second-order polynomials metioned above and explore \n", + "which polynomial fits the data best.\n", + "\n", + "The Python code for the Franke function is included here (it performs also a three-dimensional plot of it)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9a3092c9", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import cm\n", + "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n", + "import numpy as np\n", + "from random import random, seed\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.gca(projection='3d')\n", + "\n", + "# Make data.\n", + "x = np.arange(0, 1, 0.05)\n", + "y = np.arange(0, 1, 0.05)\n", + "x, y = np.meshgrid(x,y)\n", + "\n", + "\n", + "def FrankeFunction(x,y):\n", + " term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2))\n", + " term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1))\n", + " term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2))\n", + " term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2)\n", + " return term1 + term2 + term3 + term4\n", + "\n", + "\n", + "z = FrankeFunction(x, y)\n", + "\n", + "# Plot the surface.\n", + "surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm,\n", + " linewidth=0, antialiased=False)\n", + "\n", + "# Customize the z axis.\n", + "ax.set_zlim(-0.10, 1.40)\n", + "ax.zaxis.set_major_locator(LinearLocator(10))\n", + "ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n", + "\n", + "# Add a color bar which maps values to colors.\n", + "fig.colorbar(surf, shrink=0.5, aspect=5)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4e4d5459", + "metadata": { + "editable": true + }, + "source": [ + "### Part a): Paper and pencil part (also as weekly exercise for week 36)\n", + "\n", + "This part can be included in your theory description of the report.\n", + "\n", + "This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of [Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer](https://www.springer.com/gp/book/9780387848570)).\n", + "\n", + "The assumption we have made is \n", + "that there exists a continuous function $f(\\boldsymbol{x})$ and a normal distributed error $\\boldsymbol{\\varepsilon}\\sim N(0, \\sigma^2)$\n", + "which describes our data" + ] + }, + { + "cell_type": "markdown", + "id": "3477adc6", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y} = f(\\boldsymbol{x})+\\boldsymbol{\\varepsilon}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ec544bff", + "metadata": { + "editable": true + }, + "source": [ + "We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our\n", + "function $f$ is approximated by $\\boldsymbol{\\tilde{y}}$ where we minimized $(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2$, with" + ] + }, + { + "cell_type": "markdown", + "id": "8dca3b1e", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{\\tilde{y}} = \\boldsymbol{X}\\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "90c6881a", + "metadata": { + "editable": true + }, + "source": [ + "The matrix $\\boldsymbol{X}$ is the so-called design or feature matrix. \n", + "\n", + "Show that the expectation value of $\\boldsymbol{y}$ for a given element $i$" + ] + }, + { + "cell_type": "markdown", + "id": "af3db03a", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(y_i) =\\sum_{j}x_{ij} \\beta_j=\\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "f1337f34", + "metadata": { + "editable": true + }, + "source": [ + "and that\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "id": "00934e8c", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}(y_i) = \\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4aae2daa", + "metadata": { + "editable": true + }, + "source": [ + "Hence, $y_i \\sim N( \\mathbf{X}_{i, \\ast} \\, \\boldsymbol{\\beta}, \\sigma^2)$, that is $\\boldsymbol{y}$ follows a normal distribution with \n", + "mean value $\\boldsymbol{X}\\boldsymbol{\\beta}$ and variance $\\sigma^2$.\n", + "\n", + "With the OLS expressions for the parameters $\\boldsymbol{\\beta}$ show that" + ] + }, + { + "cell_type": "markdown", + "id": "743efbd7", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}(\\boldsymbol{\\beta}) = \\boldsymbol{\\beta}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "d69e012c", + "metadata": { + "editable": true + }, + "source": [ + "Show finally that the variance of $\\boldsymbol{\\beta}$ is" + ] + }, + { + "cell_type": "markdown", + "id": "f5c16cd2", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mbox{Var}(\\boldsymbol{\\beta}) = \\sigma^2 \\, (\\mathbf{X}^{T} \\mathbf{X})^{-1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "03a15d86", + "metadata": { + "editable": true + }, + "source": [ + "We can use the last expression when we define a so-called confidence interval for the parameters $\\beta$.\n", + "A given parameter $\\beta_j$ is given by the diagonal matrix element of the above matrix." + ] + }, + { + "cell_type": "markdown", + "id": "d6281541", + "metadata": { + "editable": true + }, + "source": [ + "### Part b) : Ordinary Least Square (OLS) on the Franke function\n", + "\n", + "We will generate our own dataset for a function\n", + "$\\mathrm{FrankeFunction}(x,y)$ with $x,y \\in [0,1]$. The function\n", + "$f(x,y)$ is the Franke function. You should explore also the addition\n", + "of an added stochastic noise to this function using the normal\n", + "distribution $N(0,1)$.\n", + "\n", + "*Write your own code* (using either a matrix inversion or a singular\n", + "value decomposition from e.g., **numpy** ) and perform a standard **ordinary least square regression**\n", + "analysis using polynomials in $x$ and $y$ up to fifth order.\n", + "\n", + "Evaluate the mean Squared error (MSE)" + ] + }, + { + "cell_type": "markdown", + "id": "078298ff", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "MSE(\\boldsymbol{y},\\tilde{\\boldsymbol{y}}) = \\frac{1}{n}\n", + "\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "4cffa699", + "metadata": { + "editable": true + }, + "source": [ + "and the $R^2$ score function. If $\\tilde{\\boldsymbol{y}}_i$ is the predicted\n", + "value of the $i-th$ sample and $y_i$ is the corresponding true value,\n", + "then the score $R^2$ is defined as" + ] + }, + { + "cell_type": "markdown", + "id": "30d8bdc3", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "R^2(\\boldsymbol{y}, \\tilde{\\boldsymbol{y}}) = 1 - \\frac{\\sum_{i=0}^{n - 1} (y_i - \\tilde{y}_i)^2}{\\sum_{i=0}^{n - 1} (y_i - \\bar{y})^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "2f93611c", + "metadata": { + "editable": true + }, + "source": [ + "where we have defined the mean value of $\\boldsymbol{y}$ as" + ] + }, + { + "cell_type": "markdown", + "id": "af430693", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\bar{y} = \\frac{1}{n} \\sum_{i=0}^{n - 1} y_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "48c719ec", + "metadata": { + "editable": true + }, + "source": [ + "Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five).\n", + "Plot also the parameters $\\beta$ as you increase the order of the polynomial. Comment your results.\n", + "\n", + "Your code has to include a scaling/centering of the data (for example by\n", + "subtracting the mean value), and\n", + "a split of the data in training and test data. For this exercise you can\n", + "either write your own code or use for example the function for\n", + "splitting training data provided by the library **Scikit-Learn** (make\n", + "sure you have installed it). This function is called\n", + "$train\\_test\\_split$. **You should present a critical discussion of why and how you have scaled or not scaled the data**.\n", + "\n", + "It is normal in essentially all Machine Learning studies to split the\n", + "data in a training set and a test set (eventually also an additional\n", + "validation set). There\n", + "is no explicit recipe for how much data should be included as training\n", + "data and say test data. An accepted rule of thumb is to use\n", + "approximately $2/3$ to $4/5$ of the data as training data.\n", + "\n", + "You can easily reuse the solutions to your exercises from week 35 and week 36.\n", + "See also the lecture slides from week 35 and week 36." + ] + }, + { + "cell_type": "markdown", + "id": "4e67fbf1", + "metadata": { + "editable": true + }, + "source": [ + "### Part c): Bias-variance trade-off and resampling techniques\n", + "\n", + "Our aim here is to study the bias-variance trade-off by implementing the **bootstrap** resampling technique.\n", + "\n", + "With a code which does OLS and includes resampling techniques, \n", + "we will now discuss the bias-variance trade-off in the context of\n", + "continuous predictions such as regression. However, many of the\n", + "intuitions and ideas discussed here also carry over to classification\n", + "tasks and basically all Machine Learning algorithms. \n", + "\n", + "Before you perform an analysis of the bias-variance trade-off on your test data, make\n", + "first a figure similar to Fig. 2.11 of Hastie, Tibshirani, and\n", + "Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to \n", + "indicate possible regions of low/high bias and variance. You will most likely not get an\n", + "equally smooth curve!\n", + "\n", + "With this result we move on to the bias-variance trade-off analysis.\n", + "\n", + "Consider a\n", + "dataset $\\mathcal{L}$ consisting of the data\n", + "$\\mathbf{X}_\\mathcal{L}=\\{(y_j, \\boldsymbol{x}_j), j=0\\ldots n-1\\}$.\n", + "\n", + "Let us assume that the true data is generated from a noisy model" + ] + }, + { + "cell_type": "markdown", + "id": "adc6df99", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\boldsymbol{y}=f(\\boldsymbol{x}) + \\boldsymbol{\\epsilon}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "8dbdee19", + "metadata": { + "editable": true + }, + "source": [ + "Here $\\epsilon$ is normally distributed with mean zero and standard\n", + "deviation $\\sigma^2$.\n", + "\n", + "In our derivation of the ordinary least squares method we defined then\n", + "an approximation to the function $f$ in terms of the parameters\n", + "$\\boldsymbol{\\beta}$ and the design matrix $\\boldsymbol{X}$ which embody our model,\n", + "that is $\\boldsymbol{\\tilde{y}}=\\boldsymbol{X}\\boldsymbol{\\beta}$.\n", + "\n", + "The parameters $\\boldsymbol{\\beta}$ are in turn found by optimizing the means\n", + "squared error via the so-called cost function" + ] + }, + { + "cell_type": "markdown", + "id": "6fac8e39", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "C(\\boldsymbol{X},\\boldsymbol{\\beta}) =\\frac{1}{n}\\sum_{i=0}^{n-1}(y_i-\\tilde{y}_i)^2=\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "ee3e42bf", + "metadata": { + "editable": true + }, + "source": [ + "Here the expected value $\\mathbb{E}$ is the sample value. \n", + "\n", + "Show that you can rewrite this as" + ] + }, + { + "cell_type": "markdown", + "id": "a6bb9925", + "metadata": { + "editable": true + }, + "source": [ + "$$\n", + "\\mathbb{E}\\left[(\\boldsymbol{y}-\\boldsymbol{\\tilde{y}})^2\\right]=\\frac{1}{n}\\sum_i(f_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\frac{1}{n}\\sum_i(\\tilde{y}_i-\\mathbb{E}\\left[\\boldsymbol{\\tilde{y}}\\right])^2+\\sigma^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "b5ad5eb7", + "metadata": { + "editable": true + }, + "source": [ + "The answer to this exercise can be included in the theory part of the report.\n", + "Explain what the terms mean, which one is the bias and which one is\n", + "the variance and discuss their interpretations.\n", + "\n", + "Perform then a bias-variance analysis of the Franke function by\n", + "studying the MSE value as function of the complexity of your model.\n", + "\n", + "Discuss the bias and variance trade-off as function\n", + "of your model complexity (the degree of the polynomial) and the number\n", + "of data points, and possibly also your training and test data using the **bootstrap** resampling method.\n", + "\n", + "Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$." + ] + }, + { + "cell_type": "markdown", + "id": "a73b957e", + "metadata": { + "editable": true + }, + "source": [ + "### Part d): Cross-validation as resampling techniques, adding more complexity\n", + "\n", + "The aim here is to write your own code for another widely popular\n", + "resampling technique, the so-called cross-validation method. Again,\n", + "before you start with cross-validation approach, you should scale your\n", + "data if you think this is needed.\n", + "\n", + "Implement the $k$-fold cross-validation algorithm (write your own\n", + "code) and evaluate again the MSE function resulting\n", + "from the test folds. You can compare your own code with that from\n", + "**Scikit-Learn** if needed. \n", + "\n", + "Compare the MSE you get from your cross-validation code with the one\n", + "you got from your **bootstrap** code. Comment your results. Try $5-10$\n", + "folds. You can also compare your own cross-validation code with the\n", + "one provided by **Scikit-Learn**." + ] + }, + { + "cell_type": "markdown", + "id": "a429f1e4", + "metadata": { + "editable": true + }, + "source": [ + "### Part e): Ridge Regression on the Franke function with resampling\n", + "\n", + "Write your own code for the Ridge method, either using matrix\n", + "inversion or the singular value decomposition as done in the previous\n", + "exercise. Perform the same bootstrap analysis as in the\n", + "part c) (for the same polynomials) and the cross-validation in part d) but now for different values of $\\lambda$. Compare and\n", + "analyze your results with those obtained in parts b-d). Study the\n", + "dependence on $\\lambda$.\n", + "\n", + "Study also the bias-variance trade-off as function of various values of\n", + "the parameter $\\lambda$. For the bias-variance trade-off, use the **bootstrap** resampling method. Comment your results." + ] + }, + { + "cell_type": "markdown", + "id": "8bd929d4", + "metadata": { + "editable": true + }, + "source": [ + "### Part f): Lasso Regression on the Franke function with resampling\n", + "\n", + "This exercise is essentially a repeat of the previous two ones, but now\n", + "with Lasso regression. Write either your own code (difficult and optional) or, in this case,\n", + "you can also use the functionalities of **Scikit-Learn** (recommended). \n", + "Give a\n", + "critical discussion of the three methods and a judgement of which\n", + "model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the **bootstrap** resampling technique and an analysis of the mean squared error using cross-validation." + ] + }, + { + "cell_type": "markdown", + "id": "3e3756ef", + "metadata": { + "editable": true + }, + "source": [ + "### Part g): Analysis of real data\n", + "\n", + "With our codes functioning and having been tested properly on a\n", + "simpler function we are now ready to look at real data. We will\n", + "essentially repeat in this exercise what was done in exercises 1-5. However, we\n", + "need first to download the data and prepare properly the inputs to our\n", + "codes. We are going to download digital terrain data from the website\n", + ",\n", + "\n", + "Or, if you prefer, we have placed selected datafiles at \n", + "\n", + "In order to obtain data for a specific region, you need to register as\n", + "a user (free) at this website and then decide upon which area you want\n", + "to fetch the digital terrain data from. In order to be able to read\n", + "the data properly, you need to specify that the format should be **SRTM\n", + "Arc-Second Global** and download the data as a **GeoTIF** file. The\n", + "files are then stored in *tif* format which can be imported into a\n", + "Python program using" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "55525e16", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "scipy.misc.imread" + ] + }, + { + "cell_type": "markdown", + "id": "b0565121", + "metadata": { + "editable": true + }, + "source": [ + "Here is a simple part of a Python code which reads and plots the data\n", + "from such files" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "838330c6", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from imageio import imread\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "from matplotlib import cm\n", + "\n", + "# Load the terrain\n", + "terrain1 = imread('SRTM_data_Norway_1.tif')\n", + "# Show the terrain\n", + "plt.figure()\n", + "plt.title('Terrain over Norway 1')\n", + "plt.imshow(terrain1, cmap='gray')\n", + "plt.xlabel('X')\n", + "plt.ylabel('Y')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "f92645ae", + "metadata": { + "editable": true + }, + "source": [ + "If you should have problems in downloading the digital terrain data,\n", + "we provide two examples under the data folder of project 1. One is\n", + "from a region close to Stavanger in Norway and the other Møsvatn\n", + "Austfjell, again in Norway.\n", + "Feel free to produce your own terrain data.\n", + "\n", + "Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example [kaggle.com](https://www.kaggle.com/datasets) for examples.\n", + "\n", + "Our final part deals with the parameterization of your digital terrain\n", + "data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial\n", + "approximation and cross-validation as resampling technique to evaluate which\n", + "model fits the data best.\n", + "\n", + "At the end, you should present a critical evaluation of your results\n", + "and discuss the applicability of these regression methods to the type\n", + "of data presented here (either the terrain data we propose or other data sets)." + ] + }, + { + "cell_type": "markdown", + "id": "2cab51b6", + "metadata": { + "editable": true + }, + "source": [ + "## Background literature\n", + "\n", + "1. For a discussion and derivation of the variances and mean squared errors using linear regression, see the [Lecture notes on ridge regression by Wessel N. van Wieringen](https://arxiv.org/abs/1509.09169)\n", + "\n", + "2. The textbook of [Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer](https://www.springer.com/gp/book/9780387848570), chapters 3 and 7 are the most relevant ones for the analysis here." + ] + }, + { + "cell_type": "markdown", + "id": "d6ccfcb0", + "metadata": { + "editable": true + }, + "source": [ + "## Introduction to numerical projects\n", + "\n", + "Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions.\n", + "\n", + " * Give a short description of the nature of the problem and the eventual numerical methods you have used.\n", + "\n", + " * Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself.\n", + "\n", + " * Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report.\n", + "\n", + " * If possible, try to find analytic solutions, or known limits in order to test your program when developing the code.\n", + "\n", + " * Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes.\n", + "\n", + " * Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc.\n", + "\n", + " * Try to give an interpretation of you results in your answers to the problems.\n", + "\n", + " * Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it.\n", + "\n", + " * Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning." + ] + }, + { + "cell_type": "markdown", + "id": "57dcf3d5", + "metadata": { + "editable": true + }, + "source": [ + "## Format for electronic delivery of report and programs\n", + "\n", + "The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report:\n", + "\n", + " * Use Canvas to hand in your projects, log in at with your normal UiO username and password.\n", + "\n", + " * Upload **only** the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them.\n", + "\n", + " * In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters.\n", + "\n", + "Finally, \n", + "we encourage you to collaborate. Optimal working groups consist of \n", + "2-3 students. You can then hand in a common report." + ] + }, + { + "cell_type": "markdown", + "id": "de4f1cff", + "metadata": { + "editable": true + }, + "source": [ + "## Software and needed installations\n", + "\n", + "If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, \n", + "we recommend that you install the following Python packages via **pip** as\n", + "1. pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow\n", + "\n", + "For Python3, replace **pip** with **pip3**.\n", + "\n", + "See below for a discussion of **tensorflow** and **scikit-learn**. \n", + "\n", + "For OSX users we recommend also, after having installed Xcode, to install **brew**. Brew allows \n", + "for a seamless installation of additional software via for example\n", + "1. brew install python3\n", + "\n", + "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution\n", + "you can use **pip** as well and simply install Python as \n", + "1. sudo apt-get install python3 (or python for python2.7)\n", + "\n", + "etc etc. \n", + "\n", + "If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely\n", + "1. [Anaconda](https://docs.anaconda.com/) Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system **conda**\n", + "\n", + "2. [Enthought canopy](https://www.enthought.com/product/canopy/) is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license.\n", + "\n", + "Popular software packages written in Python for ML are\n", + "\n", + "* [Scikit-learn](http://scikit-learn.org/stable/), \n", + "\n", + "* [Tensorflow](https://www.tensorflow.org/),\n", + "\n", + "* [PyTorch](http://pytorch.org/) and \n", + "\n", + "* [Keras](https://keras.io/).\n", + "\n", + "These are all freely available at their respective GitHub sites. They \n", + "encompass communities of developers in the thousands or more. And the number\n", + "of code developers and contributors keeps increasing." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/doc/src/Projects/2022/Project1/Project1.p.tex b/doc/src/Projects/2022/Project1/Project1.p.tex new file mode 100644 index 000000000..854f11c36 --- /dev/null +++ b/doc/src/Projects/2022/Project1/Project1.p.tex @@ -0,0 +1,653 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/doconce/doconce/) +%% doconce format latex Project1.do.txt --print_latex_style=trac --latex_admon=paragraph +%% +% #ifdef PTEX2TEX_EXPLANATION +%% +%% The file follows the ptex2tex extended LaTeX format, see +%% ptex2tex: https://code.google.com/p/ptex2tex/ +%% +%% Run +%% ptex2tex myfile +%% or +%% doconce ptex2tex myfile +%% +%% to turn myfile.p.tex into an ordinary LaTeX file myfile.tex. +%% (The ptex2tex program: https://code.google.com/p/ptex2tex) +%% Many preprocess options can be added to ptex2tex or doconce ptex2tex +%% +%% ptex2tex -DMINTED myfile +%% doconce ptex2tex myfile envir=minted +%% +%% ptex2tex will typeset code environments according to a global or local +%% .ptex2tex.cfg configure file. doconce ptex2tex will typeset code +%% according to options on the command line (just type doconce ptex2tex to +%% see examples). If doconce ptex2tex has envir=minted, it enables the +%% minted style without needing -DMINTED. +% #endif + +% #define PREAMBLE + +% #ifdef PREAMBLE +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{ptex2tex} +% #ifdef MINTED +\usepackage{minted} +\usemintedstyle{default} +% #endif + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE +% #endif + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 7, 2021 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 5, 2022 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example \href{{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md}} we detail how to write a report. Furthermore, at \href{{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/}} you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for $x$ and +$y$, or as in the example below just a set of fixed values for $x$ and +$y$ with a given step size. We will fit a function (for example a +polynomial) of $x$ and $y$. Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\bpycod +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + + +\epycod + + +\paragraph{Part a): Paper and pencil part (also as weekly exercise for week 36).} +This part can be included in your theory description of the report. + +This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}). + +The assumption we have made is +that there exists a continuous function $f(\bm{x})$ and a normal distributed error $\bm{\varepsilon}\sim N(0, \sigma^2)$ +which describes our data +\[ +\bm{y} = f(\bm{x})+\bm{\varepsilon} +\] + +We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function $f$ is approximated by $\bm{\tilde{y}}$ where we minimized $(\bm{y}-\bm{\tilde{y}})^2$, with +\[ +\bm{\tilde{y}} = \bm{X}\bm{\beta}. +\] +The matrix $\bm{X}$ is the so-called design or feature matrix. + +Show that the expectation value of $\bm{y}$ for a given element $i$ +\[ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \bm{\beta}, +\] +and that +its variance is +\[ +\mbox{Var}(y_i) = \sigma^2. +\] +Hence, $y_i \sim N( \mathbf{X}_{i, \ast} \, \bm{\beta}, \sigma^2)$, that is $\bm{y}$ follows a normal distribution with +mean value $\bm{X}\bm{\beta}$ and variance $\sigma^2$. + +With the OLS expressions for the parameters $\bm{\beta}$ show that +\[ +\mathbb{E}(\bm{\beta}) = \bm{\beta}. +\] +Show finally that the variance of $\bm{\beta}$ is +\[ +\mbox{Var}(\bm{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +\] + +We can use the last expression when we define a so-called confidence interval for the parameters $\beta$. +A given parameter $\beta_j$ is given by the diagonal matrix element of the above matrix. + +\paragraph{Part b) : Ordinary Least Square (OLS) on the Franke function.} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $N(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) and perform a standard \textbf{ordinary least square regression} +analysis using polynomials in $x$ and $y$ up to fifth order. + +Evaluate the mean Squared error (MSE) + +\[ MSE(\bm{y},\tilde{\bm{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\bm{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\bm{y}, \tilde{\bm{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\bm{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters $\beta$ as you increase the order of the polynomial. Comment your results. + +Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately $2/3$ to $4/5$ of the data as training data. + +You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. + +\paragraph{Part c): Bias-variance trade-off and resampling techniques.} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] +The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + +\paragraph{Part d): Cross-validation as resampling techniques, adding more complexity.} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + +\paragraph{Part e): Ridge Regression on the Franke function with resampling.} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Part f): Lasso Regression on the Franke function with resampling.} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Part g): Analysis of real data.} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +Or, if you prefer, we have placed selected datafiles at \href{{https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles}} + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + + + +\bpycod +scipy.misc.imread + +\epycod + + +Here is a simple part of a Python code which reads and plots the data +from such files + + + + + + + + + + + + + + + + + +\bpycod +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() + +\epycod + + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +\subsection{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +\subsection{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + +% ------------------- end of main content --------------- + +% #ifdef PREAMBLE +\end{document} +% #endif + diff --git a/doc/src/Projects/2022/Project1/Project1.pdf b/doc/src/Projects/2022/Project1/Project1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a3c625ba5c4022060798909ddb8c70ff2e5ff84f GIT binary patch literal 252836 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 zμ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 z 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

0_pfbP@C@(~kU|(;&-GvG<^jdhP4Z}Um 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%0AEmRJ%6vpmcZS{KY!SdakBrr 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 JLf;(0{x3e+mP!Bs literal 0 HcmV?d00001 diff --git a/doc/src/Projects/2022/Project1/Project1.tex b/doc/src/Projects/2022/Project1/Project1.tex new file mode 100644 index 000000000..681c80e83 --- /dev/null +++ b/doc/src/Projects/2022/Project1/Project1.tex @@ -0,0 +1,621 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/doconce/doconce/) +%% doconce format latex Project1.do.txt --print_latex_style=trac --latex_admon=paragraph +%% + + +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{fancyvrb} % packages needed for verbatim environments + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Project 1 on Machine Learning, deadline October 7, 2021 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 5, 2022 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection*{Regression analysis and resampling methods} + +The main aim of this project is to study in more detail various +regression methods, including the Ordinary Least Squares (OLS) method, +In addition to the scientific part, in this course we want also to give you an experience in writing scientific reports. +The format for the delivery of your answers is namely that of a scientific report. At for example \href{{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/EvaluationGrading/EvaluationForm.md}} we detail how to write a report. Furthermore, at \href{{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/blob/master/doc/Projects/ReportExample/}} you can find examples of previous reports. How to write reports will also be discussed during lectures and at the various lab sessions. + +We will first study how to fit polynomials to a specific +two-dimensional function called \href{{http://www.dtic.mil/dtic/tr/fulltext/u2/a081688.pdf}}{Franke's +function}. This +is a function which has been widely used when testing various +interpolation and fitting algorithms. Furthermore, after having +established the model and the method, we will employ resamling +techniques such as cross-validation and/or bootstrap in order to perform a +proper assessment of our models. We will also study in detail the +so-called Bias-Variance trade off. + +The Franke function, which is a weighted sum of four exponentials reads as follows +\begin{align*} +f(x,y) &= \frac{3}{4}\exp{\left(-\frac{(9x-2)^2}{4} - \frac{(9y-2)^2}{4}\right)}+\frac{3}{4}\exp{\left(-\frac{(9x+1)^2}{49}- \frac{(9y+1)}{10}\right)} \\ +&+\frac{1}{2}\exp{\left(-\frac{(9x-7)^2}{4} - \frac{(9y-3)^2}{4}\right)} -\frac{1}{5}\exp{\left(-(9x-4)^2 - (9y-7)^2\right) }. +\end{align*} + +The function will be defined for $x,y\in [0,1]$. Our first step will +be to perform an OLS regression analysis of this function, trying out +a polynomial fit with an $x$ and $y$ dependence of the form $[x, y, +x^2, y^2, xy, \dots]$. We will also include bootstrap first as a +resampling technique. After that we will include the cross-validation +technique. As discussed in the lectures for weeks 35 and 36,, we can +use a uniform distribution to set up the arrays of values for $x$ and +$y$, or as in the example below just a set of fixed values for $x$ and +$y$ with a given step size. We will fit a function (for example a +polynomial) of $x$ and $y$. Thereafter we will repeat much of the +same procedure using the Ridge and Lasso regression methods, +introducing thus a dependence on the bias (penalty) $\lambda$. + +Finally we are going to use (real) digital terrain data and try to +reproduce these data using the same methods. We will also try to go +beyond the second-order polynomials metioned above and explore +which polynomial fits the data best. + +The Python code for the Franke function is included here (it performs also a three-dimensional plot of it) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\begin{verbatim} +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +from matplotlib import cm +from matplotlib.ticker import LinearLocator, FormatStrFormatter +import numpy as np +from random import random, seed + +fig = plt.figure() +ax = fig.gca(projection='3d') + +# Make data. +x = np.arange(0, 1, 0.05) +y = np.arange(0, 1, 0.05) +x, y = np.meshgrid(x,y) + + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +z = FrankeFunction(x, y) + +# Plot the surface. +surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + +# Customize the z axis. +ax.set_zlim(-0.10, 1.40) +ax.zaxis.set_major_locator(LinearLocator(10)) +ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) + +# Add a color bar which maps values to colors. +fig.colorbar(surf, shrink=0.5, aspect=5) + +plt.show() + + +\end{verbatim} + + +\paragraph{Part a): Paper and pencil part (also as weekly exercise for week 36).} +This part can be included in your theory description of the report. + +This exercise deals with various mean values ad variances in linear regression method (here it may be useful to look up chapter 3, equation (3.8) of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}). + +The assumption we have made is +that there exists a continuous function $f(\bm{x})$ and a normal distributed error $\bm{\varepsilon}\sim N(0, \sigma^2)$ +which describes our data +\[ +\bm{y} = f(\bm{x})+\bm{\varepsilon} +\] + +We then approximate this function with our model from the solution of the linear regression equations (ordinary least squares OLS), that is our +function $f$ is approximated by $\bm{\tilde{y}}$ where we minimized $(\bm{y}-\bm{\tilde{y}})^2$, with +\[ +\bm{\tilde{y}} = \bm{X}\bm{\beta}. +\] +The matrix $\bm{X}$ is the so-called design or feature matrix. + +Show that the expectation value of $\bm{y}$ for a given element $i$ +\[ +\mathbb{E}(y_i) =\sum_{j}x_{ij} \beta_j=\mathbf{X}_{i, \ast} \, \bm{\beta}, +\] +and that +its variance is +\[ +\mbox{Var}(y_i) = \sigma^2. +\] +Hence, $y_i \sim N( \mathbf{X}_{i, \ast} \, \bm{\beta}, \sigma^2)$, that is $\bm{y}$ follows a normal distribution with +mean value $\bm{X}\bm{\beta}$ and variance $\sigma^2$. + +With the OLS expressions for the parameters $\bm{\beta}$ show that +\[ +\mathbb{E}(\bm{\beta}) = \bm{\beta}. +\] +Show finally that the variance of $\bm{\beta}$ is +\[ +\mbox{Var}(\bm{\beta}) = \sigma^2 \, (\mathbf{X}^{T} \mathbf{X})^{-1}. +\] + +We can use the last expression when we define a so-called confidence interval for the parameters $\beta$. +A given parameter $\beta_j$ is given by the diagonal matrix element of the above matrix. + +\paragraph{Part b) : Ordinary Least Square (OLS) on the Franke function.} +We will generate our own dataset for a function +$\mathrm{FrankeFunction}(x,y)$ with $x,y \in [0,1]$. The function +$f(x,y)$ is the Franke function. You should explore also the addition +of an added stochastic noise to this function using the normal +distribution $N(0,1)$. + +\emph{Write your own code} (using either a matrix inversion or a singular +value decomposition from e.g., \textbf{numpy} ) and perform a standard \textbf{ordinary least square regression} +analysis using polynomials in $x$ and $y$ up to fifth order. + +Evaluate the mean Squared error (MSE) + +\[ MSE(\bm{y},\tilde{\bm{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] + +and the $R^2$ score function. If $\tilde{\bm{y}}_i$ is the predicted +value of the $i-th$ sample and $y_i$ is the corresponding true value, +then the score $R^2$ is defined as + +\[ +R^2(\bm{y}, \tilde{\bm{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] + +where we have defined the mean value of $\bm{y}$ as + +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] + +Plot the resulting scores (MSE and R$^2$) as functions of the polynomial degree (here up to polymial degree five). +Plot also the parameters $\beta$ as you increase the order of the polynomial. Comment your results. + +Your code has to include a scaling/centering of the data (for example by +subtracting the mean value), and +a split of the data in training and test data. For this exercise you can +either write your own code or use for example the function for +splitting training data provided by the library \textbf{Scikit-Learn} (make +sure you have installed it). This function is called +$train\_test\_split$. \textbf{You should present a critical discussion of why and how you have scaled or not scaled the data}. + +It is normal in essentially all Machine Learning studies to split the +data in a training set and a test set (eventually also an additional +validation set). There +is no explicit recipe for how much data should be included as training +data and say test data. An accepted rule of thumb is to use +approximately $2/3$ to $4/5$ of the data as training data. + +You can easily reuse the solutions to your exercises from week 35 and week 36. +See also the lecture slides from week 35 and week 36. + +\paragraph{Part c): Bias-variance trade-off and resampling techniques.} +Our aim here is to study the bias-variance trade-off by implementing the \textbf{bootstrap} resampling technique. + +With a code which does OLS and includes resampling techniques, +we will now discuss the bias-variance trade-off in the context of +continuous predictions such as regression. However, many of the +intuitions and ideas discussed here also carry over to classification +tasks and basically all Machine Learning algorithms. + +Before you perform an analysis of the bias-variance trade-off on your test data, make +first a figure similar to Fig.~2.11 of Hastie, Tibshirani, and +Friedman. Figure 2.11 of this reference displays only the test and training MSEs. The test MSE can be used to +indicate possible regions of low/high bias and variance. You will most likely not get an +equally smooth curve! + +With this result we move on to the bias-variance trade-off analysis. + +Consider a +dataset $\mathcal{L}$ consisting of the data +$\mathbf{X}_\mathcal{L}=\{(y_j, \boldsymbol{x}_j), j=0\ldots n-1\}$. + +Let us assume that the true data is generated from a noisy model + +\[ +\bm{y}=f(\boldsymbol{x}) + \bm{\epsilon}. +\] + +Here $\epsilon$ is normally distributed with mean zero and standard +deviation $\sigma^2$. + +In our derivation of the ordinary least squares method we defined then +an approximation to the function $f$ in terms of the parameters +$\bm{\beta}$ and the design matrix $\bm{X}$ which embody our model, +that is $\bm{\tilde{y}}=\bm{X}\bm{\beta}$. + +The parameters $\bm{\beta}$ are in turn found by optimizing the means +squared error via the so-called cost function + +\[ +C(\bm{X},\bm{\beta}) =\frac{1}{n}\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2=\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]. +\] +Here the expected value $\mathbb{E}$ is the sample value. + +Show that you can rewrite this as +\[ +\mathbb{E}\left[(\bm{y}-\bm{\tilde{y}})^2\right]=\frac{1}{n}\sum_i(f_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\frac{1}{n}\sum_i(\tilde{y}_i-\mathbb{E}\left[\bm{\tilde{y}}\right])^2+\sigma^2. +\] +The answer to this exercise can be included in the theory part of the report. +Explain what the terms mean, which one is the bias and which one is +the variance and discuss their interpretations. + +Perform then a bias-variance analysis of the Franke function by +studying the MSE value as function of the complexity of your model. + +Discuss the bias and variance trade-off as function +of your model complexity (the degree of the polynomial) and the number +of data points, and possibly also your training and test data using the \textbf{bootstrap} resampling method. + +Note also that when you calculate the bias, in all applications you don't know the function values $f_i$. You would hence replace them with the actual data points $y_i$. + +\paragraph{Part d): Cross-validation as resampling techniques, adding more complexity.} +The aim here is to write your own code for another widely popular +resampling technique, the so-called cross-validation method. Again, +before you start with cross-validation approach, you should scale your +data if you think this is needed. + +Implement the $k$-fold cross-validation algorithm (write your own +code) and evaluate again the MSE function resulting +from the test folds. You can compare your own code with that from +\textbf{Scikit-Learn} if needed. + +Compare the MSE you get from your cross-validation code with the one +you got from your \textbf{bootstrap} code. Comment your results. Try $5-10$ +folds. You can also compare your own cross-validation code with the +one provided by \textbf{Scikit-Learn}. + +\paragraph{Part e): Ridge Regression on the Franke function with resampling.} +Write your own code for the Ridge method, either using matrix +inversion or the singular value decomposition as done in the previous +exercise. Perform the same bootstrap analysis as in the +part c) (for the same polynomials) and the cross-validation in part d) but now for different values of $\lambda$. Compare and +analyze your results with those obtained in parts b-d). Study the +dependence on $\lambda$. + +Study also the bias-variance trade-off as function of various values of +the parameter $\lambda$. For the bias-variance trade-off, use the \textbf{bootstrap} resampling method. Comment your results. + +\paragraph{Part f): Lasso Regression on the Franke function with resampling.} +This exercise is essentially a repeat of the previous two ones, but now +with Lasso regression. Write either your own code (difficult and optional) or, in this case, +you can also use the functionalities of \textbf{Scikit-Learn} (recommended). +Give a +critical discussion of the three methods and a judgement of which +model fits the data best. Perform here as well an analysis of the bias-variance trade-off using the \textbf{bootstrap} resampling technique and an analysis of the mean squared error using cross-validation. + +\paragraph{Part g): Analysis of real data.} +With our codes functioning and having been tested properly on a +simpler function we are now ready to look at real data. We will +essentially repeat in this exercise what was done in exercises 1-5. However, we +need first to download the data and prepare properly the inputs to our +codes. We are going to download digital terrain data from the website +\href{{https://earthexplorer.usgs.gov/}}{\nolinkurl{https://earthexplorer.usgs.gov/}}, + +Or, if you prefer, we have placed selected datafiles at \href{{https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles}}{\nolinkurl{https://github.com/CompPhysics/MachineLearning/tree/master/doc/Projects/2021/Project1/DataFiles}} + +In order to obtain data for a specific region, you need to register as +a user (free) at this website and then decide upon which area you want +to fetch the digital terrain data from. In order to be able to read +the data properly, you need to specify that the format should be \textbf{SRTM +Arc-Second Global} and download the data as a \textbf{GeoTIF} file. The +files are then stored in \emph{tif} format which can be imported into a +Python program using + + + +\begin{verbatim} +scipy.misc.imread + +\end{verbatim} + + +Here is a simple part of a Python code which reads and plots the data +from such files + + + + + + + + + + + + + + + + + +\begin{verbatim} +import numpy as np +from imageio import imread +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +# Load the terrain +terrain1 = imread('SRTM_data_Norway_1.tif') +# Show the terrain +plt.figure() +plt.title('Terrain over Norway 1') +plt.imshow(terrain1, cmap='gray') +plt.xlabel('X') +plt.ylabel('Y') +plt.show() + +\end{verbatim} + + +If you should have problems in downloading the digital terrain data, +we provide two examples under the data folder of project 1. One is +from a region close to Stavanger in Norway and the other Møsvatn +Austfjell, again in Norway. +Feel free to produce your own terrain data. + +Alternatively, if you would like to use another data set, feel free to do so. This could be data close to your reseach area or simply a data set you found interesting. See for example \href{{https://www.kaggle.com/datasets}}{kaggle.com} for examples. + +Our final part deals with the parameterization of your digital terrain +data (or your own data). We will apply all three methods for linear regression, the same type (or higher order) of polynomial +approximation and cross-validation as resampling technique to evaluate which +model fits the data best. + +At the end, you should present a critical evaluation of your results +and discuss the applicability of these regression methods to the type +of data presented here (either the terrain data we propose or other data sets). + +\subsection*{Background literature} + +\begin{enumerate} +\item For a discussion and derivation of the variances and mean squared errors using linear regression, see the \href{{https://arxiv.org/abs/1509.09169}}{Lecture notes on ridge regression by Wessel N. van Wieringen} + +\item The textbook of \href{{https://www.springer.com/gp/book/9780387848570}}{Trevor Hastie, Robert Tibshirani, Jerome H. Friedman, The Elements of Statistical Learning, Springer}, chapters 3 and 7 are the most relevant ones for the analysis here. +\end{enumerate} + +\noindent +\subsection*{Introduction to numerical projects} + +Here follows a brief recipe and recommendation on how to answer the various questions when preparing your answers. Note that you can answer question by question and there is no need to structure your report as a scientific report with abstract, introduction, theory, results and discussions, conclusions etc. But you have the following elements in mind when you answer the various questions. + +\begin{itemize} + \item Give a short description of the nature of the problem and the eventual numerical methods you have used. + + \item Describe the algorithm you have used and/or developed. Here you may find it convenient to use pseudocoding. In many cases you can describe the algorithm in the program itself. + + \item Include the source code of your program. Comment your program properly. You should have the code at your GitHub/GitLab link. You can also place the code in an appendix of your report. + + \item If possible, try to find analytic solutions, or known limits in order to test your program when developing the code. + + \item Include your results either in figure form or in a table. Remember to label your results. All tables and figures should have relevant captions and labels on the axes. + + \item Try to evaluate the reliabilty and numerical stability/precision of your results. If possible, include a qualitative and/or quantitative discussion of the numerical stability, eventual loss of precision etc. + + \item Try to give an interpretation of you results in your answers to the problems. + + \item Critique: if possible include your comments and reflections about the exercise, whether you felt you learnt something, ideas for improvements and other thoughts you've made when solving the exercise. We wish to keep this course at the interactive level and your comments can help us improve it. + + \item Try to establish a practice where you log your work at the computerlab. You may find such a logbook very handy at later stages in your work, especially when you don't properly remember what a previous test version of your program did. Here you could also record the time spent on solving the exercise, various algorithms you may have tested or other topics which you feel worthy of mentioning. +\end{itemize} + +\noindent +\subsection*{Format for electronic delivery of report and programs} + +The preferred format for the report is a PDF file. You can also use DOC or postscript formats or as an ipython notebook file. As programming language we prefer that you choose between C/C++, Fortran2008, Julia or Python. The following prescription should be followed when preparing the report: + +\begin{itemize} + \item Use Canvas to hand in your projects, log in at \href{{https://www.uio.no/english/services/it/education/canvas/}}{\nolinkurl{https://www.uio.no/english/services/it/education/canvas/}} with your normal UiO username and password. + + \item Upload \textbf{only} the report file or the link to your GitHub/GitLab or similar typo of repos! For the source code file(s) you have developed please provide us with your link to your GitHub/GitLab or similar domain. The report file should include all of your discussions and a list of the codes you have developed. Do not include library files which are available at the course homepage, unless you have made specific changes to them. + + \item In your GitHub/GitLab or similar repository, please include a folder which contains selected results. These can be in the form of output from your code for a selected set of runs and input parameters. +\end{itemize} + +\noindent +Finally, +we encourage you to collaborate. Optimal working groups consist of +2-3 students. You can then hand in a common report. + +\subsection*{Software and needed installations} + +If you have Python installed (we recommend Python3) and you feel pretty familiar with installing different packages, +we recommend that you install the following Python packages via \textbf{pip} as +\begin{enumerate} +\item pip install numpy scipy matplotlib ipython scikit-learn tensorflow sympy pandas pillow +\end{enumerate} + +\noindent +For Python3, replace \textbf{pip} with \textbf{pip3}. + +See below for a discussion of \textbf{tensorflow} and \textbf{scikit-learn}. + +For OSX users we recommend also, after having installed Xcode, to install \textbf{brew}. Brew allows +for a seamless installation of additional software via for example +\begin{enumerate} +\item brew install python3 +\end{enumerate} + +\noindent +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution +you can use \textbf{pip} as well and simply install Python as +\begin{enumerate} +\item sudo apt-get install python3 (or python for python2.7) +\end{enumerate} + +\noindent +etc etc. + +If you don't want to install various Python packages with their dependencies separately, we recommend two widely used distrubutions which set up all relevant dependencies for Python, namely +\begin{enumerate} +\item \href{{https://docs.anaconda.com/}}{Anaconda} Anaconda is an open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Package versions are managed by the package management system \textbf{conda} + +\item \href{{https://www.enthought.com/product/canopy/}}{Enthought canopy} is a Python distribution for scientific and analytic computing distribution and analysis environment, available for free and under a commercial license. +\end{enumerate} + +\noindent +Popular software packages written in Python for ML are + +\begin{itemize} +\item \href{{http://scikit-learn.org/stable/}}{Scikit-learn}, + +\item \href{{https://www.tensorflow.org/}}{Tensorflow}, + +\item \href{{http://pytorch.org/}}{PyTorch} and + +\item \href{{https://keras.io/}}{Keras}. +\end{itemize} + +\noindent +These are all freely available at their respective GitHub sites. They +encompass communities of developers in the thousands or more. And the number +of code developers and contributors keeps increasing. + + +% ------------------- end of main content --------------- + +\end{document} + diff --git a/doc/src/Projects/2022/Project1/README.txt b/doc/src/Projects/2022/Project1/README.txt new file mode 100644 index 000000000..08cc9f17c --- /dev/null +++ b/doc/src/Projects/2022/Project1/README.txt @@ -0,0 +1,2 @@ +This IPython notebook Project1.ipynb does not require any additional +programs. diff --git a/doc/src/Projects/2022/Project1/ipynb-Project1-src.tar.gz b/doc/src/Projects/2022/Project1/ipynb-Project1-src.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7dad0387e706f2fd9180086c0ba298a39aaecae0 GIT binary patch literal 193 zcmV;y06za8iwFR+pcP{P1MSaC3c@fD2H>uHia9|^($`wB3l~BWFOb^QrrJzRQn0tT z573q3rihSl^E1pa%p9`KcAo|IZoSnILXs$gDbpmLldz?pQJMmcLK26Ju!I4jVa%8Z zWWAGKdSkgBPigB$C?nLnxpAzjKI~aufoJ}SV=WEr^1;@qK%o@{;stVzjW}5v$Zk*t vlqk&91TAj8)B?B~fS0AT5*5GtoyN1~tqJ^JzvDQL<9z7>^Es!)00;m8%wt