From 2cadffe8728154559d7ee4c412554624f392d053 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Sat, 2 Jun 2018 16:39:13 +0200 Subject: [PATCH 1/5] Add zadania labs06 --- labs06/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 labs06/README.md diff --git a/labs06/README.md b/labs06/README.md new file mode 100644 index 0000000..e35b68f --- /dev/null +++ b/labs06/README.md @@ -0,0 +1,18 @@ +## Zadania + +** zad. 0 ** +Sprawdź, czy masz zainstalowany pakiet ``pandas``. Jeżeli nie, zainstaluj go. + +** zad. 2 (domowe) ** +Jest to zadanie złożone, składające się z kilku części. Całość będzie opierać się o dane zawarte w pliku *mieszkania.csv* i dotyczą cen mieszkań w Poznaniu kilka lat temu. + 1, Otwórz plik ``task02.py``, który zawiera szkielet kodu, który będziemy rozwijać w tym zadaniu. + 1. Napisz funkcje, która wczyta zestaw danych z pliku *mieszkania.csv* i zwróci obiekt typu *DataFrame*. Jeżeli wszystko zostało zrobione poprawnie, powinno się wyśtwietlić 5 pierwszych wierszy. + 1. Uzupełnij funkcję ``most_common_room_number``, która zwróci jaka jest najpopularniejsza liczba pokoi w ogłoszeniach. Funkcji powinna zwrócić liczbę całkowitą. + 1. Uzupełnij kod w funkcji ``cheapest_flats(dane, n)``, która wzróci *n* najtańszych ofert mieszkań. Wzrócony obiekt typu ``DataFrame``. + 1. Napisz funkcje ``find_borough(desc)``, która przyjmuje 1 argument typu *string* i zwróci jedną z dzielnic zdefiniowaną w liście ``dzielnice``. Funkcja ma zwrócić pierwszą (wzgledem kolejności) nazwę dzielnicy, która jest zawarta w ``desc``. Jeżeli żadna nazwa nie została odnaleziona, zwróć *Inne*. + 1. Dodaj kolumnę ``Borough``, która będzie zawierać informacje o dzielnicach i powstanie z kolumny ``Localization``. Wykorzystaj do tego funkcję ``find_borough``. + 1. Uzupełnił funkcje ``write_plot``, która zapisze do pliku ``filename`` wykres słupkowy przedstawiający liczbę ogłoszeń mieszkań z podziałem na dzielnice. + 1. Napisz funkcje ``mean_price``, która zwróci średnią cenę mieszkania ``room_numer``-pokojowego. + 1. Uzupełnij funkcje ``find_13``, która zwróci listę dzielnic, które zawierają ofertę mieszkanie na 13 piętrze. + 1. Napisz funkcje ``find_best_flats``, która zwróci wszystkie ogłoszenia mieszkań, które znajdują się na Winogradach, mają 3 pokoje i są położone na 1 piętrze. + 1. *(dodatkowe)*: Korzystając z pakietu *sklearn* zbuduj model regresji liniowej, która będzie wyznaczać cenę mieszkania na podstawie wielkości mieszkania i liczby pokoi. From 09af71f29de46aad5866b88ea053356d89462a37 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Sat, 2 Jun 2018 16:39:34 +0200 Subject: [PATCH 2/5] Add lacture 05 --- labs05/pandas_wprowadzenie.ipynb | 2309 ++++++++++++++++++++++++++++++ 1 file changed, 2309 insertions(+) create mode 100644 labs05/pandas_wprowadzenie.ipynb diff --git a/labs05/pandas_wprowadzenie.ipynb b/labs05/pandas_wprowadzenie.ipynb new file mode 100644 index 0000000..a92bc13 --- /dev/null +++ b/labs05/pandas_wprowadzenie.ipynb @@ -0,0 +1,2309 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Analiza danych w Pythonie\n", + "\n", + "### Tomasz Dwojak\n", + "\n", + "### 3 czerwca 2018" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Analiza danych:\n", + "\n", + " * R\n", + " * Python" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Python Ekosystem\n", + "\n", + " * pandas: ramka danych\n", + " * sklearn: modele ML\n", + " * numpy: obliczenia\n", + " * matplotlib: wykresy" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Typy danych\n", + "\n", + " * Szereg (`pd.Series`)\n", + " * Ramka danych (`pd.DataFrame`)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Wczytanie danych" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "data = pd.read_csv(\"./data/iowa.csv.gz\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
1220RL80.09600PaveNaNRegLvlAllPub...0NaNNaNNaN052007WDNormal181500
2360RL68.011250PaveNaNIR1LvlAllPub...0NaNNaNNaN092008WDNormal223500
3470RL60.09550PaveNaNIR1LvlAllPub...0NaNNaNNaN022006WDAbnorml140000
4560RL84.014260PaveNaNIR1LvlAllPub...0NaNNaNNaN0122008WDNormal250000
\n", + "

5 rows × 81 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", + "0 1 60 RL 65.0 8450 Pave NaN Reg \n", + "1 2 20 RL 80.0 9600 Pave NaN Reg \n", + "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", + "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", + "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", + "\n", + " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", + "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "2 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "4 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "\n", + " MoSold YrSold SaleType SaleCondition SalePrice \n", + "0 2 2008 WD Normal 208500 \n", + "1 5 2007 WD Normal 181500 \n", + "2 9 2008 WD Normal 223500 \n", + "3 2 2006 WD Abnorml 140000 \n", + "4 12 2008 WD Normal 250000 \n", + "\n", + "[5 rows x 81 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1460, 81)\n" + ] + } + ], + "source": [ + "shape = data.shape\n", + "rows = shape[0]\n", + "cols = shape[1]\n", + "\n", + "print(rows, cols)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 1460 entries, 0 to 1459\n", + "Data columns (total 81 columns):\n", + "Id 1460 non-null int64\n", + "MSSubClass 1460 non-null int64\n", + "MSZoning 1460 non-null object\n", + "LotFrontage 1201 non-null float64\n", + "LotArea 1460 non-null int64\n", + "Street 1460 non-null object\n", + "Alley 91 non-null object\n", + "LotShape 1460 non-null object\n", + "LandContour 1460 non-null object\n", + "Utilities 1460 non-null object\n", + "LotConfig 1460 non-null object\n", + "LandSlope 1460 non-null object\n", + "Neighborhood 1460 non-null object\n", + "Condition1 1460 non-null object\n", + "Condition2 1460 non-null object\n", + "BldgType 1460 non-null object\n", + "HouseStyle 1460 non-null object\n", + "OverallQual 1460 non-null int64\n", + "OverallCond 1460 non-null int64\n", + "YearBuilt 1460 non-null int64\n", + "YearRemodAdd 1460 non-null int64\n", + "RoofStyle 1460 non-null object\n", + "RoofMatl 1460 non-null object\n", + "Exterior1st 1460 non-null object\n", + "Exterior2nd 1460 non-null object\n", + "MasVnrType 1452 non-null object\n", + "MasVnrArea 1452 non-null float64\n", + "ExterQual 1460 non-null object\n", + "ExterCond 1460 non-null object\n", + "Foundation 1460 non-null object\n", + "BsmtQual 1423 non-null object\n", + "BsmtCond 1423 non-null object\n", + "BsmtExposure 1422 non-null object\n", + "BsmtFinType1 1423 non-null object\n", + "BsmtFinSF1 1460 non-null int64\n", + "BsmtFinType2 1422 non-null object\n", + "BsmtFinSF2 1460 non-null int64\n", + "BsmtUnfSF 1460 non-null int64\n", + "TotalBsmtSF 1460 non-null int64\n", + "Heating 1460 non-null object\n", + "HeatingQC 1460 non-null object\n", + "CentralAir 1460 non-null object\n", + "Electrical 1459 non-null object\n", + "1stFlrSF 1460 non-null int64\n", + "2ndFlrSF 1460 non-null int64\n", + "LowQualFinSF 1460 non-null int64\n", + "GrLivArea 1460 non-null int64\n", + "BsmtFullBath 1460 non-null int64\n", + "BsmtHalfBath 1460 non-null int64\n", + "FullBath 1460 non-null int64\n", + "HalfBath 1460 non-null int64\n", + "BedroomAbvGr 1460 non-null int64\n", + "KitchenAbvGr 1460 non-null int64\n", + "KitchenQual 1460 non-null object\n", + "TotRmsAbvGrd 1460 non-null int64\n", + "Functional 1460 non-null object\n", + "Fireplaces 1460 non-null int64\n", + "FireplaceQu 770 non-null object\n", + "GarageType 1379 non-null object\n", + "GarageYrBlt 1379 non-null float64\n", + "GarageFinish 1379 non-null object\n", + "GarageCars 1460 non-null int64\n", + "GarageArea 1460 non-null int64\n", + "GarageQual 1379 non-null object\n", + "GarageCond 1379 non-null object\n", + "PavedDrive 1460 non-null object\n", + "WoodDeckSF 1460 non-null int64\n", + "OpenPorchSF 1460 non-null int64\n", + "EnclosedPorch 1460 non-null int64\n", + "3SsnPorch 1460 non-null int64\n", + "ScreenPorch 1460 non-null int64\n", + "PoolArea 1460 non-null int64\n", + "PoolQC 7 non-null object\n", + "Fence 281 non-null object\n", + "MiscFeature 54 non-null object\n", + "MiscVal 1460 non-null int64\n", + "MoSold 1460 non-null int64\n", + "YrSold 1460 non-null int64\n", + "SaleType 1460 non-null object\n", + "SaleCondition 1460 non-null object\n", + "SalePrice 1460 non-null int64\n", + "dtypes: float64(3), int64(35), object(43)\n", + "memory usage: 924.0+ KB\n" + ] + } + ], + "source": [ + "data.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassLotFrontageLotAreaOverallQualOverallCondYearBuiltYearRemodAddMasVnrAreaBsmtFinSF1...WoodDeckSFOpenPorchSFEnclosedPorch3SsnPorchScreenPorchPoolAreaMiscValMoSoldYrSoldSalePrice
count1460.0000001460.0000001201.0000001460.0000001460.0000001460.0000001460.0000001460.0000001452.0000001460.000000...1460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.000000
mean730.50000056.89726070.04995810516.8280826.0993155.5753421971.2678081984.865753103.685262443.639726...94.24452146.66027421.9541103.40958915.0609592.75890443.4890416.3219182007.815753180921.195890
std421.61000942.30057124.2847529981.2649321.3829971.11279930.20290420.645407181.066207456.098091...125.33879466.25602861.11914929.31733155.75741540.177307496.1230242.7036261.32809579442.502883
min1.00000020.00000021.0000001300.0000001.0000001.0000001872.0000001950.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000001.0000002006.00000034900.000000
25%365.75000020.00000059.0000007553.5000005.0000005.0000001954.0000001967.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000005.0000002007.000000129975.000000
50%730.50000050.00000069.0000009478.5000006.0000005.0000001973.0000001994.0000000.000000383.500000...0.00000025.0000000.0000000.0000000.0000000.0000000.0000006.0000002008.000000163000.000000
75%1095.25000070.00000080.00000011601.5000007.0000006.0000002000.0000002004.000000166.000000712.250000...168.00000068.0000000.0000000.0000000.0000000.0000000.0000008.0000002009.000000214000.000000
max1460.000000190.000000313.000000215245.00000010.0000009.0000002010.0000002010.0000001600.0000005644.000000...857.000000547.000000552.000000508.000000480.000000738.00000015500.00000012.0000002010.000000755000.000000
\n", + "

8 rows × 38 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass LotFrontage LotArea OverallQual \\\n", + "count 1460.000000 1460.000000 1201.000000 1460.000000 1460.000000 \n", + "mean 730.500000 56.897260 70.049958 10516.828082 6.099315 \n", + "std 421.610009 42.300571 24.284752 9981.264932 1.382997 \n", + "min 1.000000 20.000000 21.000000 1300.000000 1.000000 \n", + "25% 365.750000 20.000000 59.000000 7553.500000 5.000000 \n", + "50% 730.500000 50.000000 69.000000 9478.500000 6.000000 \n", + "75% 1095.250000 70.000000 80.000000 11601.500000 7.000000 \n", + "max 1460.000000 190.000000 313.000000 215245.000000 10.000000 \n", + "\n", + " OverallCond YearBuilt YearRemodAdd MasVnrArea BsmtFinSF1 \\\n", + "count 1460.000000 1460.000000 1460.000000 1452.000000 1460.000000 \n", + "mean 5.575342 1971.267808 1984.865753 103.685262 443.639726 \n", + "std 1.112799 30.202904 20.645407 181.066207 456.098091 \n", + "min 1.000000 1872.000000 1950.000000 0.000000 0.000000 \n", + "25% 5.000000 1954.000000 1967.000000 0.000000 0.000000 \n", + "50% 5.000000 1973.000000 1994.000000 0.000000 383.500000 \n", + "75% 6.000000 2000.000000 2004.000000 166.000000 712.250000 \n", + "max 9.000000 2010.000000 2010.000000 1600.000000 5644.000000 \n", + "\n", + " ... WoodDeckSF OpenPorchSF EnclosedPorch 3SsnPorch \\\n", + "count ... 1460.000000 1460.000000 1460.000000 1460.000000 \n", + "mean ... 94.244521 46.660274 21.954110 3.409589 \n", + "std ... 125.338794 66.256028 61.119149 29.317331 \n", + "min ... 0.000000 0.000000 0.000000 0.000000 \n", + "25% ... 0.000000 0.000000 0.000000 0.000000 \n", + "50% ... 0.000000 25.000000 0.000000 0.000000 \n", + "75% ... 168.000000 68.000000 0.000000 0.000000 \n", + "max ... 857.000000 547.000000 552.000000 508.000000 \n", + "\n", + " ScreenPorch PoolArea MiscVal MoSold YrSold \\\n", + "count 1460.000000 1460.000000 1460.000000 1460.000000 1460.000000 \n", + "mean 15.060959 2.758904 43.489041 6.321918 2007.815753 \n", + "std 55.757415 40.177307 496.123024 2.703626 1.328095 \n", + "min 0.000000 0.000000 0.000000 1.000000 2006.000000 \n", + "25% 0.000000 0.000000 0.000000 5.000000 2007.000000 \n", + "50% 0.000000 0.000000 0.000000 6.000000 2008.000000 \n", + "75% 0.000000 0.000000 0.000000 8.000000 2009.000000 \n", + "max 480.000000 738.000000 15500.000000 12.000000 2010.000000 \n", + "\n", + " SalePrice \n", + "count 1460.000000 \n", + "mean 180921.195890 \n", + "std 79442.502883 \n", + "min 34900.000000 \n", + "25% 129975.000000 \n", + "50% 163000.000000 \n", + "75% 214000.000000 \n", + "max 755000.000000 \n", + "\n", + "[8 rows x 38 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Dostęp do danych" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index([u'Id', u'MSSubClass', u'MSZoning', u'LotFrontage', u'LotArea',\n", + " u'Street', u'Alley', u'LotShape', u'LandContour', u'Utilities',\n", + " u'LotConfig', u'LandSlope', u'Neighborhood', u'Condition1',\n", + " u'Condition2', u'BldgType', u'HouseStyle', u'OverallQual',\n", + " u'OverallCond', u'YearBuilt', u'YearRemodAdd', u'RoofStyle',\n", + " u'RoofMatl', u'Exterior1st', u'Exterior2nd', u'MasVnrType',\n", + " u'MasVnrArea', u'ExterQual', u'ExterCond', u'Foundation', u'BsmtQual',\n", + " u'BsmtCond', u'BsmtExposure', u'BsmtFinType1', u'BsmtFinSF1',\n", + " u'BsmtFinType2', u'BsmtFinSF2', u'BsmtUnfSF', u'TotalBsmtSF',\n", + " u'Heating', u'HeatingQC', u'CentralAir', u'Electrical', u'1stFlrSF',\n", + " u'2ndFlrSF', u'LowQualFinSF', u'GrLivArea', u'BsmtFullBath',\n", + " u'BsmtHalfBath', u'FullBath', u'HalfBath', u'BedroomAbvGr',\n", + " u'KitchenAbvGr', u'KitchenQual', u'TotRmsAbvGrd', u'Functional',\n", + " u'Fireplaces', u'FireplaceQu', u'GarageType', u'GarageYrBlt',\n", + " u'GarageFinish', u'GarageCars', u'GarageArea', u'GarageQual',\n", + " u'GarageCond', u'PavedDrive', u'WoodDeckSF', u'OpenPorchSF',\n", + " u'EnclosedPorch', u'3SsnPorch', u'ScreenPorch', u'PoolArea', u'PoolQC',\n", + " u'Fence', u'MiscFeature', u'MiscVal', u'MoSold', u'YrSold', u'SaleType',\n", + " u'SaleCondition', u'SalePrice'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "print(data.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 60\n", + "1 20\n", + "2 60\n", + "3 70\n", + "4 60\n", + "Name: MSSubClass, dtype: int64\n" + ] + } + ], + "source": [ + "print(data['MSSubClass'].head())" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " MSSubClass SalePrice\n", + "0 60 208500\n", + "1 20 181500\n", + "2 60 223500\n", + "3 70 140000\n", + "4 60 250000\n" + ] + } + ], + "source": [ + "print(data[['MSSubClass', 'SalePrice']].head())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
3470RL60.09550PaveNaNIR1LvlAllPub...0NaNNaNNaN022006WDAbnorml140000
\n", + "

2 rows × 81 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", + "0 1 60 RL 65.0 8450 Pave NaN Reg \n", + "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", + "\n", + " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", + "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "\n", + " MoSold YrSold SaleType SaleCondition SalePrice \n", + "0 2 2008 WD Normal 208500 \n", + "3 2 2006 WD Abnorml 140000 \n", + "\n", + "[2 rows x 81 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.loc[[0,3]]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
1220RL80.09600PaveNaNRegLvlAllPub...0NaNNaNNaN052007WDNormal181500
2360RL68.011250PaveNaNIR1LvlAllPub...0NaNNaNNaN092008WDNormal223500
3470RL60.09550PaveNaNIR1LvlAllPub...0NaNNaNNaN022006WDAbnorml140000
4560RL84.014260PaveNaNIR1LvlAllPub...0NaNNaNNaN0122008WDNormal250000
5650RL85.014115PaveNaNIR1LvlAllPub...0NaNMnPrvShed700102009WDNormal143000
\n", + "

6 rows × 81 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", + "0 1 60 RL 65.0 8450 Pave NaN Reg \n", + "1 2 20 RL 80.0 9600 Pave NaN Reg \n", + "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", + "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", + "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", + "5 6 50 RL 85.0 14115 Pave NaN IR1 \n", + "\n", + " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", + "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "2 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "4 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "5 Lvl AllPub ... 0 NaN MnPrv Shed 700 \n", + "\n", + " MoSold YrSold SaleType SaleCondition SalePrice \n", + "0 2 2008 WD Normal 208500 \n", + "1 5 2007 WD Normal 181500 \n", + "2 9 2008 WD Normal 223500 \n", + "3 2 2006 WD Abnorml 140000 \n", + "4 12 2008 WD Normal 250000 \n", + "5 10 2009 WD Normal 143000 \n", + "\n", + "[6 rows x 81 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.loc[0:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
1220RL80.09600PaveNaNRegLvlAllPub...0NaNNaNNaN052007WDNormal181500
2360RL68.011250PaveNaNIR1LvlAllPub...0NaNNaNNaN092008WDNormal223500
3470RL60.09550PaveNaNIR1LvlAllPub...0NaNNaNNaN022006WDAbnorml140000
4560RL84.014260PaveNaNIR1LvlAllPub...0NaNNaNNaN0122008WDNormal250000
\n", + "

5 rows × 81 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", + "0 1 60 RL 65.0 8450 Pave NaN Reg \n", + "1 2 20 RL 80.0 9600 Pave NaN Reg \n", + "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", + "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", + "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", + "\n", + " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", + "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "2 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "4 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "\n", + " MoSold YrSold SaleType SaleCondition SalePrice \n", + "0 2 2008 WD Normal 208500 \n", + "1 5 2007 WD Normal 181500 \n", + "2 9 2008 WD Normal 223500 \n", + "3 2 2006 WD Abnorml 140000 \n", + "4 12 2008 WD Normal 250000 \n", + "\n", + "[5 rows x 81 columns]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[data['MSZoning'] == 'RL'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
1220RL80.09600PaveNaNRegLvlAllPub...0NaNNaNNaN052007WDNormal181500
6720RL75.010084PaveNaNRegLvlAllPub...0NaNNaNNaN082007WDNormal307000
910190RL50.07420PaveNaNRegLvlAllPub...0NaNNaNNaN012008WDNormal118000
101120RL70.011200PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal129500
\n", + "

5 rows × 81 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", + "0 1 60 RL 65.0 8450 Pave NaN Reg \n", + "1 2 20 RL 80.0 9600 Pave NaN Reg \n", + "6 7 20 RL 75.0 10084 Pave NaN Reg \n", + "9 10 190 RL 50.0 7420 Pave NaN Reg \n", + "10 11 20 RL 70.0 11200 Pave NaN Reg \n", + "\n", + " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", + "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "6 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "9 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "10 Lvl AllPub ... 0 NaN NaN NaN 0 \n", + "\n", + " MoSold YrSold SaleType SaleCondition SalePrice \n", + "0 2 2008 WD Normal 208500 \n", + "1 5 2007 WD Normal 181500 \n", + "6 8 2007 WD Normal 307000 \n", + "9 1 2008 WD Normal 118000 \n", + "10 2 2008 WD Normal 129500 \n", + "\n", + "[5 rows x 81 columns]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[(data['MSZoning'] == 'RL') & (data['LotShape'] == 'Reg')].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "ceny = data['SalePrice']" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "180921.19589041095" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ceny.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "755000" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ceny.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SalePrice'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ceny.name" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Plus vat:', 0 256455.00\n", + "1 223245.00\n", + "2 274905.00\n", + "3 172200.00\n", + "4 307500.00\n", + "5 175890.00\n", + "6 377610.00\n", + "7 246000.00\n", + "8 159777.00\n", + "9 145140.00\n", + "10 159285.00\n", + "11 424350.00\n", + "12 177120.00\n", + "13 343785.00\n", + "14 193110.00\n", + "15 162360.00\n", + "16 183270.00\n", + "17 110700.00\n", + "18 195570.00\n", + "19 170970.00\n", + "20 400119.00\n", + "21 171462.00\n", + "22 282900.00\n", + "23 159777.00\n", + "24 189420.00\n", + "25 315249.00\n", + "26 165804.00\n", + "27 376380.00\n", + "28 255225.00\n", + "29 84255.00\n", + " ... \n", + "1430 236332.20\n", + "1431 176812.50\n", + "1432 79335.00\n", + "1433 229395.00\n", + "1434 196800.00\n", + "1435 214020.00\n", + "1436 148215.00\n", + "1437 485378.91\n", + "1438 184131.00\n", + "1439 242310.00\n", + "1440 234930.00\n", + "1441 183639.00\n", + "1442 381300.00\n", + "1443 148830.00\n", + "1444 220908.00\n", + "1445 158670.00\n", + "1446 194217.00\n", + "1447 295200.00\n", + "1448 137760.00\n", + "1449 113160.00\n", + "1450 167280.00\n", + "1451 353120.70\n", + "1452 178350.00\n", + "1453 103935.00\n", + "1454 227550.00\n", + "1455 215250.00\n", + "1456 258300.00\n", + "1457 327795.00\n", + "1458 174813.75\n", + "1459 181425.00\n", + "Name: SalePrice, Length: 1460, dtype: float64)\n" + ] + } + ], + "source": [ + "print(\"Plus vat:\", ceny * 1.23)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['RL', 'RM', 'C (all)', 'FV', 'RH'], dtype=object)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.MSZoning.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RL 1151\n", + "RM 218\n", + "FV 65\n", + "RH 16\n", + "C (all) 10\n", + "Name: MSZoning, dtype: int64" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.MSZoning.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "data['nowa'] = ceny * 1.23" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MSSubClassMSZoningLotFrontageStreetAlleyLotShapeLandContourUtilitiesLotConfigLandSlope...PoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePricenowa
060RL65.0PaveNaNRegLvlAllPubInsideGtl...NaNNaNNaN022008WDNormal208500256455.0
120RL80.0PaveNaNRegLvlAllPubFR2Gtl...NaNNaNNaN052007WDNormal181500223245.0
260RL68.0PaveNaNIR1LvlAllPubInsideGtl...NaNNaNNaN092008WDNormal223500274905.0
370RL60.0PaveNaNIR1LvlAllPubCornerGtl...NaNNaNNaN022006WDAbnorml140000172200.0
460RL84.0PaveNaNIR1LvlAllPubFR2Gtl...NaNNaNNaN0122008WDNormal250000307500.0
\n", + "

5 rows × 80 columns

\n", + "
" + ], + "text/plain": [ + " MSSubClass MSZoning LotFrontage Street Alley LotShape LandContour \\\n", + "0 60 RL 65.0 Pave NaN Reg Lvl \n", + "1 20 RL 80.0 Pave NaN Reg Lvl \n", + "2 60 RL 68.0 Pave NaN IR1 Lvl \n", + "3 70 RL 60.0 Pave NaN IR1 Lvl \n", + "4 60 RL 84.0 Pave NaN IR1 Lvl \n", + "\n", + " Utilities LotConfig LandSlope ... PoolQC Fence MiscFeature MiscVal \\\n", + "0 AllPub Inside Gtl ... NaN NaN NaN 0 \n", + "1 AllPub FR2 Gtl ... NaN NaN NaN 0 \n", + "2 AllPub Inside Gtl ... NaN NaN NaN 0 \n", + "3 AllPub Corner Gtl ... NaN NaN NaN 0 \n", + "4 AllPub FR2 Gtl ... NaN NaN NaN 0 \n", + "\n", + " MoSold YrSold SaleType SaleCondition SalePrice nowa \n", + "0 2 2008 WD Normal 208500 256455.0 \n", + "1 5 2007 WD Normal 181500 223245.0 \n", + "2 9 2008 WD Normal 223500 274905.0 \n", + "3 2 2006 WD Abnorml 140000 172200.0 \n", + "4 12 2008 WD Normal 250000 307500.0 \n", + "\n", + "[5 rows x 80 columns]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.drop('LotArea', axis=1)\n", + "data.drop(['Id', 'LotArea'], axis=1).head()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePricenowa
1220RL80.09600PaveNaNRegLvlAllPub...NaNNaNNaN052007WDNormal181500223245.0
2360RL68.011250PaveNaNIR1LvlAllPub...NaNNaNNaN092008WDNormal223500274905.0
3470RL60.09550PaveNaNIR1LvlAllPub...NaNNaNNaN022006WDAbnorml140000172200.0
4560RL84.014260PaveNaNIR1LvlAllPub...NaNNaNNaN0122008WDNormal250000307500.0
5650RL85.014115PaveNaNIR1LvlAllPub...NaNMnPrvShed700102009WDNormal143000175890.0
\n", + "

5 rows × 82 columns

\n", + "
" + ], + "text/plain": [ + " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", + "1 2 20 RL 80.0 9600 Pave NaN Reg \n", + "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", + "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", + "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", + "5 6 50 RL 85.0 14115 Pave NaN IR1 \n", + "\n", + " LandContour Utilities ... PoolQC Fence MiscFeature MiscVal MoSold \\\n", + "1 Lvl AllPub ... NaN NaN NaN 0 5 \n", + "2 Lvl AllPub ... NaN NaN NaN 0 9 \n", + "3 Lvl AllPub ... NaN NaN NaN 0 2 \n", + "4 Lvl AllPub ... NaN NaN NaN 0 12 \n", + "5 Lvl AllPub ... NaN MnPrv Shed 700 10 \n", + "\n", + " YrSold SaleType SaleCondition SalePrice nowa \n", + "1 2007 WD Normal 181500 223245.0 \n", + "2 2008 WD Normal 223500 274905.0 \n", + "3 2006 WD Abnorml 140000 172200.0 \n", + "4 2008 WD Normal 250000 307500.0 \n", + "5 2009 WD Normal 143000 175890.0 \n", + "\n", + "[5 rows x 82 columns]" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.drop(0).head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 884d9ab808fbabe7c906519a413323b2b55c0e4d Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Sun, 3 Jun 2018 08:10:07 +0200 Subject: [PATCH 3/5] add tasks.py --- labs06/tasks.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 labs06/tasks.py diff --git a/labs06/tasks.py b/labs06/tasks.py new file mode 100755 index 0000000..0d38505 --- /dev/null +++ b/labs06/tasks.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +1. Zaimportuj bibliotkę pandas jako pd. +""" + + +""" +2. Wczytaj zbiór danych `bikes.csv` do zniennej data. +""" + + +""" +3. Wyświetl 5 pierwszych wierszy z data. +""" + + +""" +4. Wyświetl nazwy kolumn. +""" + + +""" +5. Wyświetl ile nasz zbiór danych ma kolumn i wierszy. +""" + + +""" +6. Wyświetl kolumnę 'City' z powyższego zbioru danych. +""" + + +""" +7. Wyświetl jakie wartoścu przyjmuje kolumna 'City'. +""" + +""" +8. Wyświetl tabelę rozstawną kolumny City. +""" + + +""" +9. Wyświetl tylko pierwsze 4 wiersze z wcześniejszego polecenia. +""" + + +""" +10. Wyświetl, w ilu przypadkach kolumna City zawiera NaN. +""" + + + +""" +11. Wyświetl data.info() +""" + +""" +12. Wyświetl tylko kolumny Borough i Agency i tylko 5 ostatnich linii. +""" + + +""" +13. Wyświetl tylko te dane, dla których wartość z kolumny Agency jest równa +NYPD. Zlicz ile jest takich przykładów. +""" + +""" +14. Wyświetl wartość minimalną i maksymalną z kolumny Longitude. +""" + +""" +15. Dodaj kolumne diff, która powstanie przez sumowanie kolumn Longitude i Latitude. +""" + + +""" +16. Wyświetl tablę rozstawną dla kolumny 'Descriptor', dla której Agency jest +równe NYPD. +""" From b7c0ed29b42cef30f4407c5db1fbb0b3e71369c5 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Sun, 3 Jun 2018 08:21:45 +0200 Subject: [PATCH 4/5] Labs 07 --- labs07/gapminder.csv | 177 ++++++++++++++++ labs07/sklearn.ipynb | 485 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 662 insertions(+) create mode 100644 labs07/gapminder.csv create mode 100644 labs07/sklearn.ipynb diff --git a/labs07/gapminder.csv b/labs07/gapminder.csv new file mode 100644 index 0000000..534a004 --- /dev/null +++ b/labs07/gapminder.csv @@ -0,0 +1,177 @@ +,female_BMI,male_BMI,gdp,population,under5mortality,life_expectancy,fertility +Afghanistan,21.07402,20.62058,1311.0,26528741.0,110.4,52.8,6.2 +Albania,25.65726,26.44657,8644.0,2968026.0,17.9,76.8,1.76 +Algeria,26.368409999999997,24.5962,12314.0,34811059.0,29.5,75.5,2.73 +Angola,23.48431,22.25083,7103.0,19842251.0,192.0,56.7,6.43 +Antigua and Barbuda,27.50545,25.76602,25736.0,85350.0,10.9,75.5,2.16 +Argentina,27.46523,27.5017,14646.0,40381860.0,15.4,75.4,2.24 +Armenia,27.1342,25.355420000000002,7383.0,2975029.0,20.0,72.3,1.4 +Australia,26.87777,27.56373,41312.0,21370348.0,5.2,81.6,1.96 +Austria,25.09414,26.467409999999997,43952.0,8331465.0,4.6,80.4,1.41 +Azerbaijan,27.50879,25.65117,14365.0,8868713.0,43.3,69.2,1.99 +Bahamas,29.13948,27.24594,24373.0,348587.0,14.5,72.2,1.89 +Bahrain,28.790940000000003,27.83721,42507.0,1115777.0,9.4,77.6,2.23 +Bangladesh,20.54531,20.39742,2265.0,148252473.0,55.9,68.3,2.38 +Barbados,29.221690000000002,26.384390000000003,16075.0,277315.0,15.4,75.3,1.83 +Belarus,26.641859999999998,26.16443,14488.0,9526453.0,7.2,70.0,1.42 +Belgium,25.1446,26.75915,41641.0,10779155.0,4.7,79.6,1.82 +Belize,29.81663,27.02255,8293.0,306165.0,20.1,70.7,2.91 +Benin,23.74026,22.41835,1646.0,8973525.0,116.3,59.7,5.27 +Bhutan,22.88243,22.8218,5663.0,694990.0,48.1,70.7,2.51 +Bolivia,26.8633,24.43335,5066.0,9599916.0,52.0,71.2,3.48 +Bosnia and Herzegovina,26.35874,26.611629999999998,9316.0,3839749.0,8.1,77.5,1.22 +Botswana,26.09156,22.129839999999998,13858.0,1967866.0,63.8,53.2,2.86 +Brazil,25.99113,25.78623,13906.0,194769696.0,18.6,73.2,1.9 +Brunei,22.892310000000002,24.18179,72351.0,380786.0,9.0,76.9,2.1 +Bulgaria,25.51574,26.542859999999997,15368.0,7513646.0,13.7,73.2,1.43 +Burkina Faso,21.63031,21.27157,1358.0,14709011.0,130.4,58.0,6.04 +Burundi,21.27927,21.50291,723.0,8821795.0,108.6,59.1,6.48 +Cambodia,21.69608,20.80496,2442.0,13933660.0,51.5,66.1,3.05 +Cameroon,24.9527,23.681729999999998,2571.0,19570418.0,113.8,56.6,5.17 +Canada,26.698290000000004,27.4521,41468.0,33363256.0,5.8,80.8,1.68 +Cape Verde,24.96136,23.515220000000003,6031.0,483824.0,28.4,70.4,2.57 +Chad,21.95424,21.485689999999998,1753.0,11139740.0,168.0,54.3,6.81 +Chile,27.92807,27.015420000000002,18698.0,16645940.0,8.9,78.5,1.89 +China,22.91041,22.92176,7880.0,1326690636.0,18.5,73.4,1.53 +Colombia,26.22529,24.94041,10489.0,44901660.0,19.7,76.2,2.43 +Comoros,22.444329999999997,22.06131,1440.0,665414.0,91.2,67.1,5.05 +"Congo, Dem. Rep.",21.6677,19.86692,607.0,61809278.0,124.5,57.5,6.45 +"Congo, Rep.",23.10824,21.87134,5022.0,3832771.0,72.6,58.8,5.1 +Costa Rica,27.03497,26.47897,12219.0,4429506.0,10.3,79.8,1.91 +Cote d'Ivoire,23.82088,22.56469,2854.0,19261647.0,116.9,55.4,4.91 +Croatia,25.17882,26.596290000000003,21873.0,4344151.0,5.9,76.2,1.43 +Cuba,26.576140000000002,25.06867,17765.0,11290239.0,6.3,77.6,1.5 +Cyprus,25.92587,27.41899,35828.0,1077010.0,4.2,80.0,1.49 +Denmark,25.106270000000002,26.13287,45017.0,5495302.0,4.3,78.9,1.89 +Djibouti,24.38177,23.38403,2502.0,809639.0,81.0,61.8,3.76 +Ecuador,27.062690000000003,25.58841,9244.0,14447600.0,26.8,74.7,2.73 +Egypt,30.099970000000003,26.732429999999997,9974.0,78976122.0,31.4,70.2,2.95 +El Salvador,27.84092,26.36751,7450.0,6004199.0,21.6,73.7,2.32 +Equatorial Guinea,24.528370000000002,23.7664,40143.0,686223.0,118.4,57.5,5.31 +Eritrea,21.082320000000003,20.885089999999998,1088.0,4500638.0,60.4,60.1,5.16 +Estonia,25.185979999999997,26.264459999999996,24743.0,1339941.0,5.5,74.2,1.62 +Ethiopia,20.71463,20.247,931.0,83079608.0,86.9,60.0,5.19 +Fiji,29.339409999999997,26.53078,7129.0,843206.0,24.0,64.9,2.74 +Finland,25.58418,26.733390000000004,42122.0,5314170.0,3.3,79.6,1.85 +France,24.82949,25.853289999999998,37505.0,62309529.0,4.3,81.1,1.97 +Gabon,25.95121,24.0762,15800.0,1473741.0,68.0,61.7,4.28 +Gambia,24.82101,21.65029,1566.0,1586749.0,87.4,65.7,5.8 +Georgia,26.45014,25.54942,5900.0,4343290.0,19.3,71.8,1.79 +Germany,25.73903,27.165090000000003,41199.0,80665906.0,4.4,80.0,1.37 +Ghana,24.33014,22.842470000000002,2907.0,23115919.0,79.9,62.0,4.19 +Greece,24.92026,26.33786,32197.0,11161755.0,4.9,80.2,1.46 +Grenada,27.31948,25.179879999999997,12116.0,103934.0,13.5,70.8,2.28 +Guatemala,26.84324,25.29947,6960.0,14106687.0,36.9,71.2,4.12 +Guinea,22.45206,22.52449,1230.0,10427356.0,121.0,57.1,5.34 +Guinea-Bissau,22.92809,21.64338,1326.0,1561293.0,127.6,53.6,5.25 +Guyana,26.470190000000002,23.68465,5208.0,748096.0,41.9,65.0,2.74 +Haiti,23.27785,23.66302,1600.0,9705130.0,83.3,61.0,3.5 +Honduras,26.73191,25.10872,4391.0,7259470.0,26.5,71.8,3.27 +"Hong Kong, China",23.71046,25.057470000000002,46635.0,6910384.0,3.06,82.49,1.04 +Hungary,25.97839,27.115679999999998,23334.0,10050699.0,7.2,73.9,1.33 +Iceland,26.02599,27.206870000000002,42294.0,310033.0,2.7,82.4,2.12 +India,21.31478,20.95956,3901.0,1197070109.0,65.6,64.7,2.64 +Indonesia,22.986929999999997,21.85576,7856.0,235360765.0,36.2,69.4,2.48 +Iran,27.236079999999998,25.310029999999998,15955.0,72530693.0,21.4,73.1,1.88 +Iraq,28.411170000000002,26.71017,11616.0,29163327.0,38.3,66.6,4.34 +Ireland,26.62176,27.65325,47713.0,4480145.0,4.5,80.1,2.0 +Israel,27.301920000000003,27.13151,28562.0,7093808.0,4.9,80.6,2.92 +Italy,24.79289,26.4802,37475.0,59319234.0,4.1,81.5,1.39 +Jamaica,27.22601,24.00421,8951.0,2717344.0,18.9,75.1,2.39 +Japan,21.87088,23.50004,34800.0,127317900.0,3.4,82.5,1.34 +Jordan,29.218009999999996,27.47362,10897.0,6010035.0,22.1,76.9,3.59 +Kazakhstan,26.65065,26.290779999999998,18797.0,15915966.0,25.9,67.1,2.51 +Kenya,23.06181,21.592579999999998,2358.0,38244442.0,71.0,60.8,4.76 +Kiribati,31.30769,29.2384,1803.0,98437.0,64.5,61.5,3.13 +Kuwait,31.161859999999997,29.172109999999996,91966.0,2705290.0,11.3,77.3,2.68 +Latvia,25.615129999999997,26.45693,20977.0,2144215.0,10.5,72.4,1.5 +Lebanon,27.70471,27.20117,14158.0,4109389.0,11.3,77.8,1.57 +Lesotho,26.780520000000003,21.90157,2041.0,1972194.0,114.2,44.5,3.34 +Liberia,23.21679,21.89537,588.0,3672782.0,100.9,59.9,5.19 +Libya,29.19874,26.54164,29853.0,6123022.0,18.8,75.6,2.64 +Lithuania,26.01424,26.86102,23223.0,3219802.0,8.2,72.1,1.42 +Luxembourg,26.09326,27.434040000000003,95001.0,485079.0,2.8,81.0,1.63 +"Macao, China",24.895039999999998,25.713820000000002,80191.0,507274.0,6.72,79.32,0.94 +"Macedonia, FYR",25.37646,26.34473,10872.0,2055266.0,11.8,74.5,1.47 +Madagascar,20.73501,21.403470000000002,1528.0,19926798.0,66.7,62.2,4.79 +Malawi,22.91455,22.034679999999998,674.0,13904671.0,101.1,52.4,5.78 +Malaysia,25.448320000000002,24.73069,19968.0,27197419.0,8.0,74.5,2.05 +Maldives,26.4132,23.219910000000002,12029.0,321026.0,16.0,78.5,2.38 +Mali,23.07655,21.78881,1602.0,14223403.0,148.3,58.5,6.82 +Malta,27.04993,27.683609999999998,27872.0,406392.0,6.6,80.7,1.38 +Mauritania,26.26476,22.62295,3356.0,3414552.0,103.0,67.9,4.94 +Mauritius,26.09824,25.15669,14615.0,1238013.0,15.8,72.9,1.58 +Mexico,28.737509999999997,27.42468,15826.0,114972821.0,17.9,75.4,2.35 +"Micronesia, Fed. Sts.",31.28402,28.10315,3197.0,104472.0,43.1,68.0,3.59 +Moldova,27.05617,24.2369,3890.0,4111168.0,17.6,70.4,1.49 +Mongolia,25.71375,24.88385,7563.0,2629666.0,34.8,64.8,2.37 +Montenegro,25.70186,26.55412,14183.0,619740.0,8.1,76.0,1.72 +Morocco,26.223090000000003,25.63182,6091.0,31350544.0,35.8,73.3,2.44 +Mozambique,23.317339999999998,21.93536,864.0,22994867.0,114.4,54.0,5.54 +Myanmar,22.47733,21.44932,2891.0,51030006.0,87.2,59.4,2.05 +Namibia,25.14988,22.65008,8169.0,2115703.0,62.2,59.1,3.36 +Nepal,20.72814,20.76344,1866.0,26325183.0,50.7,68.4,2.9 +Netherlands,25.47269,26.01541,47388.0,16519862.0,4.8,80.3,1.77 +New Zealand,27.36642,27.768929999999997,32122.0,4285380.0,6.4,80.3,2.12 +Nicaragua,27.57259,25.77291,4060.0,5594524.0,28.1,77.0,2.72 +Niger,21.95958,21.21958,843.0,15085130.0,141.3,58.0,7.59 +Nigeria,23.674020000000002,23.03322,4684.0,151115683.0,140.9,59.2,6.02 +Norway,25.73772,26.934240000000003,65216.0,4771633.0,3.6,80.8,1.96 +Oman,26.66535,26.241090000000003,47799.0,2652281.0,11.9,76.2,2.89 +Pakistan,23.44986,22.299139999999998,4187.0,163096985.0,95.5,64.1,3.58 +Panama,27.67758,26.26959,14033.0,3498679.0,21.0,77.3,2.61 +Papua New Guinea,25.77189,25.015060000000002,1982.0,6540267.0,69.7,58.6,4.07 +Paraguay,25.90523,25.54223,6684.0,6047131.0,25.7,74.0,3.06 +Peru,25.98511,24.770410000000002,9249.0,28642048.0,23.2,78.2,2.58 +Philippines,23.4671,22.872629999999997,5332.0,90297115.0,33.4,69.8,3.26 +Poland,25.918870000000002,26.6738,19996.0,38525752.0,6.7,75.4,1.33 +Portugal,26.183020000000003,26.68445,27747.0,10577458.0,4.1,79.4,1.36 +Puerto Rico,30.2212,28.378040000000002,35855.0,3728126.0,8.78,77.0,1.69 +Qatar,28.912509999999997,28.13138,126076.0,1388962.0,9.5,77.9,2.2 +Romania,25.22425,25.41069,18032.0,20741669.0,16.1,73.2,1.34 +Russia,27.21272,26.01131,22506.0,143123163.0,13.5,67.9,1.49 +Rwanda,22.07156,22.55453,1173.0,9750314.0,78.3,64.1,5.06 +Samoa,33.659079999999996,30.42475,5731.0,183440.0,18.8,72.3,4.43 +Sao Tome and Principe,24.88216,23.51233,2673.0,163595.0,61.0,66.0,4.41 +Saudi Arabia,29.598779999999998,27.884320000000002,44189.0,26742842.0,18.1,78.3,2.97 +Senegal,24.30968,21.927429999999998,2162.0,12229703.0,75.8,63.5,5.11 +Serbia,25.669970000000003,26.51495,12522.0,9109535.0,8.0,74.3,1.41 +Seychelles,27.973740000000003,25.56236,20065.0,91634.0,14.2,72.9,2.28 +Sierra Leone,23.93364,22.53139,1289.0,5521838.0,179.1,53.6,5.13 +Singapore,22.86642,23.83996,65991.0,4849641.0,2.8,80.6,1.28 +Slovak Republic,26.323729999999998,26.92717,24670.0,5396710.0,8.8,74.9,1.31 +Slovenia,26.582140000000003,27.43983,30816.0,2030599.0,3.7,78.7,1.43 +Solomon Islands,28.8762,27.159879999999998,1835.0,503410.0,33.1,62.3,4.36 +Somalia,22.66607,21.969170000000002,615.0,9132589.0,168.5,52.6,7.06 +South Africa,29.4803,26.85538,12263.0,50348811.0,66.1,53.4,2.54 +Spain,26.30554,27.49975,34676.0,45817016.0,5.0,81.1,1.42 +Sri Lanka,23.11717,21.96671,6907.0,19949553.0,11.7,74.0,2.32 +Sudan,23.16132,22.40484,3246.0,34470138.0,84.7,65.5,4.79 +Suriname,27.749859999999998,25.49887,13470.0,506657.0,26.4,70.2,2.41 +Swaziland,28.448859999999996,23.16969,5887.0,1153750.0,112.2,45.1,3.7 +Sweden,25.1466,26.37629,43421.0,9226333.0,3.2,81.1,1.92 +Switzerland,24.07242,26.20195,55020.0,7646542.0,4.7,82.0,1.47 +Syria,28.87418,26.919690000000003,6246.0,20097057.0,16.5,76.1,3.17 +Tajikistan,23.84799,23.77966,2001.0,7254072.0,56.2,69.6,3.7 +Tanzania,23.0843,22.47792,2030.0,42844744.0,72.4,60.4,5.54 +Thailand,24.38577,23.008029999999998,12216.0,66453255.0,15.6,73.9,1.48 +Timor-Leste,21.50694,20.59082,1486.0,1030915.0,70.2,69.9,6.48 +Togo,22.73858,21.87875,1219.0,6052937.0,96.4,57.5,4.88 +Tonga,34.25969,30.99563,4748.0,102816.0,17.0,70.3,4.01 +Trinidad and Tobago,28.27587,26.396690000000003,30875.0,1315372.0,24.9,71.7,1.8 +Tunisia,27.93706,25.15699,9938.0,10408091.0,19.4,76.8,2.04 +Turkey,28.247490000000003,26.703709999999997,16454.0,70344357.0,22.2,77.8,2.15 +Turkmenistan,24.66154,25.24796,8877.0,4917541.0,63.9,67.2,2.48 +Uganda,22.48126,22.35833,1437.0,31014427.0,89.3,56.0,6.34 +Ukraine,26.23317,25.42379,8762.0,46028476.0,12.9,67.8,1.38 +United Arab Emirates,29.614009999999997,28.053590000000003,73029.0,6900142.0,9.1,75.6,1.95 +United Kingdom,26.944490000000002,27.392490000000002,37739.0,61689620.0,5.6,79.7,1.87 +United States,28.343590000000003,28.456979999999998,50384.0,304473143.0,7.7,78.3,2.07 +Uruguay,26.593040000000002,26.39123,15317.0,3350832.0,13.0,76.0,2.11 +Uzbekistan,25.43432,25.32054,3733.0,26952719.0,49.2,69.6,2.46 +Vanuatu,28.458759999999998,26.78926,2944.0,225335.0,28.2,63.4,3.61 +Venezuela,28.134079999999997,27.445,17911.0,28116716.0,17.1,74.2,2.53 +Vietnam,21.065,20.9163,4085.0,86589342.0,26.2,74.1,1.86 +West Bank and Gaza,29.026429999999998,26.5775,3564.0,3854667.0,24.7,74.1,4.38 +Zambia,23.05436,20.68321,3039.0,13114579.0,94.9,51.1,5.88 +Zimbabwe,24.645220000000002,22.0266,1286.0,13495462.0,98.3,47.3,3.85 diff --git a/labs07/sklearn.ipynb b/labs07/sklearn.ipynb new file mode 100644 index 0000000..c21dcbb --- /dev/null +++ b/labs07/sklearn.ipynb @@ -0,0 +1,485 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Analiza danych w Pythonie: sklearn\n", + "\n", + "### Tomasz Dwojak\n", + "\n", + "### 3 czerwca 2018" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + " * Pierwsza część: pandas\n", + " * Druga część: sklearn" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Przypomnienie z UMZ\n", + " * przygotowanie i czyszczenie danych\n", + " * wybór i trening modelu\n", + " * tuning\n", + " * ewaluacja" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import sklearn\n", + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "data = pd.read_csv(\"./gapminder.csv\", index_col=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
female_BMImale_BMIgdppopulationunder5mortalitylife_expectancyfertility
Afghanistan21.0740220.620581311.026528741.0110.452.86.20
Albania25.6572626.446578644.02968026.017.976.81.76
Algeria26.3684124.5962012314.034811059.029.575.52.73
Angola23.4843122.250837103.019842251.0192.056.76.43
Antigua and Barbuda27.5054525.7660225736.085350.010.975.52.16
\n", + "
" + ], + "text/plain": [ + " female_BMI male_BMI gdp population \\\n", + "Afghanistan 21.07402 20.62058 1311.0 26528741.0 \n", + "Albania 25.65726 26.44657 8644.0 2968026.0 \n", + "Algeria 26.36841 24.59620 12314.0 34811059.0 \n", + "Angola 23.48431 22.25083 7103.0 19842251.0 \n", + "Antigua and Barbuda 27.50545 25.76602 25736.0 85350.0 \n", + "\n", + " under5mortality life_expectancy fertility \n", + "Afghanistan 110.4 52.8 6.20 \n", + "Albania 17.9 76.8 1.76 \n", + "Algeria 29.5 75.5 2.73 \n", + "Angola 192.0 56.7 6.43 \n", + "Antigua and Barbuda 10.9 75.5 2.16 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "y = data['life_expectancy']\n", + "X = data.drop('life_expectancy', axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "train_X, test_X, train_y, test_y = \\\n", + " train_test_split(X, y, test_size=0.2, random_state=123, shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "model = LinearRegression()\n", + "model.fit(X,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([67.56279809, 76.25840076, 50.21126326, 59.21303855, 72.06348723])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predicted = model.predict(test_X)\n", + "predicted[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 3.5179543848147863\n" + ] + } + ], + "source": [ + "from sklearn.metrics import mean_squared_error\n", + "rmse = np.sqrt(mean_squared_error(predicted, test_y))\n", + "print(\"RMSE:\", rmse)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.795295000468209" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " r2 = model.score(test_X, test_y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "#### API\n", + " * model\n", + " * `fix`\n", + " * `predict`" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "female_BMI: -1.18\n", + "male_BMI: 1.46\n", + "gdp: 5.11e-05\n", + "population: 7.21e-10\n", + "under5mortality: -0.159\n", + "fertility: 0.421\n" + ] + } + ], + "source": [ + "for p in zip(train_X.columns, model.coef_):\n", + " print(\"{}: {:.3}\".format(p[0], p[1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n", + " \n" + ] + }, + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model2 = LinearRegression()\n", + "model2.fit(train_X['male_BMI'].reshape(-1, 1), train_y)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5852413468462743" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model2.intercept_" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib/python3.6/site-packages/ipykernel_launcher.py:5: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n", + " \"\"\"\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "plt.scatter(train_X['male_BMI'], train_y,color='g')\n", + "plt.plot(train_X['male_BMI'], model2.predict(train_X['male_BMI'].reshape(-1, 1)),color='k')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 46283858870bd4b17f73664a8d4b58e8e0aedf84 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Sun, 3 Jun 2018 08:23:16 +0200 Subject: [PATCH 5/5] iowa --- labs05/data/iowa.csv.gz | Bin 0 -> 91450 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 labs05/data/iowa.csv.gz diff --git a/labs05/data/iowa.csv.gz b/labs05/data/iowa.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..935b98162b14bb1663219c03218ba0d58a4e69bb GIT binary patch literal 91450 zcmV(yKX>KlKb9MmCyCMgczv1D# zk5~Unzk7B2;d%PbyWj6m|Mm6L&8M%QuD`%)r2PuHSwA_s#X`Z+~3hU)|jN=kHfHbPs>x z^!Mwl`)9v@y7`KCZ?8Y!eR%re!|Cna-9Pdlgu7Q)UvEx-`R}jS_n+?W<(IGZUZua` z)zz0DZ}0Kn%eVM3@jLKe!#n)9UflhD`{4@SD+1_)8`I;@u0`K3CiGeEVOw|9JP}^#1Pa)eZbI-T(DE{bT9JP+tG@`RV!f?br0t zpMJVO{pIHRm#_Dqeo5~keWDjP_vsI$kCShHxcd{{9scd7m-jz>`U5`{{)@lg+&sJb z`VoKe*Q=X<;4kXa`sCU5hx@y`&rg5;m|^A~)c?DPBW zFJPVY{KcpH>wn!`{gM_zz5UPMPcN_T(^^7X=i9&EKTAKle4pO!r!ODNFP>lBe<`>4 z*7Gg?o8=q8=x?t6xc>0n{ii>!Pd}yg^xgF@zoifSw|`yVzPY>qUFwU;NdZ^pm-MB2P}7-u`fM_7sd2_;ydPpPt@crycRf4Q!$}zyEyt z{`SkK56L2Fkv_k>x%u_^{pt1H{pWmL{E(yh`=_Tj=`H?J?qA=XUjFc(CokM7t-F&r z$@KPuP2YO;DG>zB~UP{;u=~!s(~)@WUnxD-o;^PvALNE{IcfVrsb; zZxx#D$Mm!O?fO3b?X6_(nm;k@Gf6^yS=(j8!p+4USHqcUZ*#f-}v)qH+R4M zR&188Pm|4}55;CGn3Gga4MxL<@JY*!Ji!%gmi`)tHpAOuGkjOsX2ywXGZjNMS!Xm{ z1imqv3=)i{X}P6OD^;`JzJDtpv)&|J)arTzdkpLC)h(_!6KK5|ZB8-$jQ6I4XTdpK zZ|R$N>ut0hzP)TaC))L96lc0PtT&~>bS7;DG+p`@JGb2PyZhU;%+PZ8SAYKF?#Oa7 zO1OBjv)oS~{^Q+;+x+@5y>=@u8R7k>o3h-}E`=4RBw5WGaq_fF(>GMBrQHS3ahH0u znk*|WeU~p*OSj)$mlYTDB2G&t8EUhdPCsz3Ci~QZ-Jbq@n?7t>b4H~9J+WoY!B#NJ zO)W<|_4VD`Paje^!J94Q1t;=lZNa6VAG6?|{(%e5SxXBpCYwlO$IS{4rLY=4rc8FB zHD|KPBDdxQt~q@Q+EwexsK5-&s*~d}XVH4@WV7|sJ1{aWm-9RJ6?)&By#eL_vdMoY z^TCpf8ZP#X0lRev?sMlGv?``^X?MiYHNZ2Qx2krkEV}$(`djSa8t{F=-)d*7 z?S;Lw(87c5LfN?Ko21Y|EgX5Te|q{k1$1xjzP#p6Jan%*UwYI1^~1Bfs}vy8Yc`!S zteZ`)0uH@kt!&~H zXS}$|7L52O)1DdDpQ%S*^&Be3WIBi@BQC-8IlY-1uUUcVGrj{u7UPu{^^ebK?|}i~ zjagiXI&ua)4EFX0e2J@2Qh=ORYm9PSgTm*1hd1PTivcaO0@FK#6)4eMdC6nE!a9z< z-;grEvcvU=Cm*a$H4l*6lke)!e_s#rN;&wl-*Dyf*H8bN?p-cEt|ohX{YzR3HK#~1 zo)l&b^6+7{nGs#I(mRg2=3MsTX=gXPRy6+|r4(tsL5L?6g(~S&CSPq9obBuT6s-Jp z@D}CBi`iS)92>Pp`{~2GkDrmfP_0a{ zn!rdUeP3D?dAX%kg*B1yZ}a<`A#+?^ZC=fzWy`W=l<&_@EFG8qSIy3 zfy+=a?f%Vx>S2oxb}EDpaN!o+o11_C34zJsqI-(Lim%qQrzp!&ho7~C$TEku@Vf0% zTych5af())RgKliVA8uYiG?%vr|8NJ}Hx3Qs%N>Ux`t);7R}~MrmDy zG!TBkWmtBGA{4qg7oj+cj?EV4$+Y>jK8R4-6{mdOvbI@qBC3_V>@~(Hyy;v%S5X8!(0lmy2i+=J?bQQ(dr(YDDI(Mc#xUsvgnHS zUVixLt|sZ7w|DXmQhs9N%uUd{cuTW5>kK%U)!pK(Bx?; zI*Iz)>{rf1M2bqR-%dG$g^+g5z5D=~#dgqjRTQnzY`$4^QW-g2bidzx_wMSKg;nQs z8Q@GU0A6bqB^;f0ww9n$$_=RxvuWXBcCo_j4?N42pai;!J~ta(Y)#6*8Ke-dJ@6u$ zFPw5z=M{uRQ9dLz`R@0B-CX}S8PMcy>+|J;i0<9Z)z8~WgFkh=z<=XLjjn9ea?=FD zZd-BBukPR6-G9yRr7St=&RNXXG}bjHimSQcE$r6FUq%NG0T^!Dx3Yd)HzG}c^F z1<3xPi-4V}B|EGuN@lIWLo^-S&>7d2?ApzWZ))7EU?8?;=f?95SDF%A5bUj6iGh!{ zX^uv07(-y%luOab4}YfpSw0~61t?9VBXd}8I^_XqvwCxCO2n9V^~Dn#N<^aKGzQLv zlg%r{)APSIiI>iHqqc-hr+A7c=VhnXtsX|gp^JnU>vlo#m6I+ik?;e7%ed&^ca#hm z3>VL+$Fki%7A}!Va>h0LhaAN6`Ils(;pE7{ii*6ePuZ)9*@iFgll5TzJ-hvlS%2Su z_qX?N-%i~toN!ujiR+YR$p}wuTMkL z-?&#dy4PsHZj?npoSxGDhd0Ignw`p*cHhoco(ht0iFGT_LmCE`VdbUZv?KxL=3G3i zs3WGgoh!YBgN$2sW0OLoqkxQ0VY$het;TqkLfHXvC0+Wfzgx4&?~vb#AEck)~{!=&TxI6{jPVu{% z_ig5H*>i3%old6$n2wSO1N|ng9-Y0Guo%`| zyeRqVmK;Q3XgBYxi%5SZG+_o8(QVXS=IXWz=N1@ys+goqsxG>8q$(RY)5)!wU7I-` z@e|mIOzzb|;IvdArh-WZp1ghg`nEHkLE|a^=w3v7#zC#g5_IClRf@y1;cRK3(kmrm z>07u8r>YTMI#{WXV;~?2o?mZWOyUryqa|ct&;R59yt=vhzfOoDqC*ZZ^Zi;v;XPtU zk>N~!i^XuCf4;xI84@yj-AtE0$C2q=`h4(3YmQ8Z&mF85360tz9Xqm~rGFUW;gm+m z7C+HASHHJl22g0#1SZx@7hStwSE}lc%f&8g=5&4)TBCT`Lr)|%O}861`QO44SHlw7 z9CMD+h`rs$^xs5nli?_lzdWw1~bGX&f+O&bK;f5I4$*q;*mb_YMY04truYq+J{nF>P49J zb59{K)2g-wgo!s4k*M4}9F137hbf%1O*khs1Q+v0PUBa7_N%TIoC1V+@)7ZzdN5E& ztCeySz;xg;mYdR_ml>m^jLk><*>aO9tydSfqb~hTlW;ih;}R{fV5cdGfM!Orp?&;O zS8!tHVw~7f?j=%yh?g;Sjf9b)n+>JI`G`n)glj@!9Th;)W=VgK55tbNraZzMsQ9ha znifJ~G@97;`}sDGvxf&BH1$ds44ed6uJf*BuzVv=15%<-`mLchPHfSzypI@hbrx}T zx^^VO$w&2gyI}yVFYv2Ot)#*d36Z0*_hmg(WU{o}>;Q)4nuq1+lz7B8nHRfDWpxs@ zuAa9k0E7tc@1Xc~-fDmO@Mj9cTDx(bFIz6X<(_`|8L=g7S0ZoIGp(=JSPXsxzN5g^ z>4sWgDXML@XY+T}U(eRo7PUS7@K2cjIR)&l8bU6m6(5{k@&xBQ`sK3NTNUzPQ#w=q zDB^+x(|Um1F!yd$AGuA6n9kN9q%9@MJ_^}7`jUZLJIof0s;ed7ZuP zRJ)ebte^IVd-viFvafuq!N-Kl<#|>`;UIn~MO4r^j2fN6Xtq$0YumGV<#w@k}Nv$9baf)93|wz%Nq(r*Efq+}57 zX44^K;PjNXZ8&5E4n8byVbZJFb*Q(UdITZa>PfC!ZW5Q9tErYe`9%lu%~LItw!<{l zGPVL-0V*QBWhTHpxm37WOSQ^|_3cE7OKy`hpBl=)64U#1jO2+DfIg|9=CJ-|yB?2} zTrzYxt%^{Vsw3KVB$qJ*u+Em*G`W>SPIfxhh-Ntmj4w%JPmA+^+AZuZUx7$+SnICK10jq!L@V1K*QJGz2b9;vrMLo zfe|JW7GmHHyfh}JEqo-U|2Q{C;3b#-;WZehO0 zvqQw(XPyvlqogAAF&t`Oo&IN||_RZDBW%N$Sh2jn0=P>*e;`ei|JjU`T_oEP|h} zHQ?*cfcf`W9Pl32N<*40tW^rvn{V2OmNL%;Q`(T+uocki=>n0vKbb{GQ~dl17tw41 z2IB&4RhYB6{q<&;x9L1-F#@ zS_z_5Z%%tqE8g$NYh+-jX? zjSh_#iLM049=Zv1b^7ZM@7R(Y^zxp~tR_X5ZLMH|rO=W|_0tFMhvQ_qjKguzg|HHE zGb)xck>1Rg{s`9?bkrC$O=B?PZfC$ZG&$1d5k?0e#1mKZ2nJxtgV4`a=MWIA^5vn4 zL@8^!${`_BYVE^lKX?ZJ(d(J9Oi!JfZY(qIf|GqJ(N6=zoYE6VeF%udwD9W**lg&= zJ#OfxZdv3QGE^o}*pQyhKa}bm6*lD|HgiK#yQ!<)mFK#|)#B*61Hym;k~>1Qo}GG7 zG_LOn=@l>HX4=wxz+UYjayozQV_}tstH)h_l+6NribuE zU{w5;}Zur6g>&2nBvPx~pq8 z7E}X*U*Zh9Bk)rC!_h8{vwl11Qk|7c$HoG9$>@AxD6YWE;lZbj*EPmF174z8xz^Px zh<4U?ug2c%6W0z@LziN?6ZYor%hS=(<|T;p)M4KV+mGICBVUC6+ZR!gdqdVRML=#A z%?K({sw7l+BTu{BtmL+Ba^?k-oN2KcZ%EGi9USrwt{5i3emS?2*e(%BT*e{^gV(dZ zL~?Q)W&$hd%n~%djJd)MI}I_Tk+f|eHfZAyscTFak6-&`=L^)5UitXAt~pb~6?L`+>-H-yFE}rVlnw?IZJdH#+hq3U z`s$upaMVFG8DxbQzI9D#Ca!YVl~J6awdP@bS?9@{pZYRXdRS<|R2gPq3Muc~*0nB$ z0OwkmFvJIviSzt0L4t&SPdsH6(LzpZr_(o!Rj4CUwb@Z8p?=XVxQ@P5hEOY?$tx(O z#?6Wk^I50#{;UfOM#q!++M2NzlZ7`F@l=MIcmg-2P3vu3LAlOa*X>RX>Sz>VnPSK~ zqLKvENgyW4wpCHme|TM>7z)H6q21D6-H)|GbmEEg)x*@NJRmDs?TD2CFI*DfnFVxk z$Mezwn{0Znb95YPWOA@q)7vUVJJs%0;wFl67ncl?oy>K1Pc4do91R!5C5JFq!}--Y z7SS9mIe?oZ2VzRP4bBCJF}=Wt=o&=WIy?tG#SkgGh|_h~vkUDq3oM|dT*A_@ob_>K zvUTkEw+m0>W|h^g_9I{OqUUzbwRN(Qd*6|AEiLw#je`2>@205|bhR+~LVM3EoE>PVjS)uyGU#3%uVSaaK8ep0-;E z`$Mj&I#C+YRO|r2-qrx5ko<}p$u=VvQGAm}1oP+)kICEB<;w;2I&P=J>|2RSl-Z~@ z8#G-kuo8Mb;~Z?Ak_-BrbJ!?0Yg5d6n+z7H?+*ojy^{PN_x*D-(XgZk>*MDokkbIe zfh7k^!{VgJ2;_&5K%#R{VQ{J~O-?nOsjLTPdb%CghcRhQTfC*QS{gxLqp>Qy5fA3r z>`6-CuY=3J(uofReG8p#W;orNWkkO|TxYv+eeC1}vAKfe&_ zOYHz+0`JT)*lOrKfmi{KVp1DIGN;b4A4(C? zA)08FtrqAUmob!y2xBVOLAncZ#ONR~X~Y(yl7`@OwY(I#&UFsrWLi0`Gc8aFg@@!m z{_V^ck+&ZRQ8Oiu20o_qN)cni&{x%67yhnv5RK8rc(pe7@&i>j)0?Z~N`P$EOm$P2 zmLJ}D7)C|!V2Zdw?w+?p_y1|zFX zQ3)QR>FA~@DzOa-;&k!5q7rXADfZq$<-x*GQwNyHh~H+2ns`aiVkMq`zJ;dwf_o5v z?H7(gnus!Qzula;iOj9>N|b%Z$^OKf)H0K)fqSlc)$Az<+5{n-)hh}mlWY}3-;%3Z zu6MZiskIWU_$Alc4X{lW-_+)+!XU;RtC%$T#pSA7_#18AtZgetjG(Z}tU0=h%(W5f z7&T-LDQQ_Lket`sKJ5C_zVAc`C*Knu*TFj;pDIZX$< zBx6viDD{%i@7)Ri+>0yt|K=}7*aS9m@G_(m0<$m+zYjHlHiKOp5|*}MuWmE2GKHRg zrax@Rx?G}*4Z0}^{|E)OE(d!&?*RlTHq^LSr0_Q~fW*SI7vnHLXCIb=4HO$Gq;y~? zd78t(9#R`AWw^bViR|27HLtsyC;mB*F~eRQEY&_CB0Fj{%pM#!f26 zyeU<2ZI%y*ScBMXw<9l;)|JeadEdS*P!r^qFIbXZbGGzn7kJE9npl1-*-5ZX} z@>MmQR-NHE=vNq{Hq5i|tl7^0bsot1d|U?3xvfI7%T(84bHqO?D#Pu_fv4mlA@f0CPeypsaYcNa~ z@sY5o^i8$}hIPld4LBM?KzlKYhAb+bh`wA$^d;StL~{q4Gf@4Fu7Q5}4ma}9SvjnV z=zLkLETz?y>me=Tkh)vj2#$xamn+P{=zPhy`jGd1$F$MpTe>y}8zoH*YH2&;<zMginsL0Io?~0d^lrNvLaGdYjfei*ILyUhNIg@C@)G$GymSo zl&dW@&COrD!CapW<%WG5^R|uTX0ddmrd^w6-yWOI(jfJv)0%s*E3PYM3;&bCrh_{-EzCA?m1R>8!TO1_5WPrKpM!Km{_F3%V={ zW+^x39N&`;q1~h)lQW3Kw~;<@!=y=pouXbBSCeD&1#Q)^%&NsU%Bq?*g!B%cNI_}C z>!(O7u2(Gf(|N5M&vgjr*i5E%Q&b>P+pcU<2z8uf7=>IxRpZSLT1bS!Z9U0vM4CNc zgk#Gh1J{NUSr1K+q8u!@#R@u4DbxifpTafcc;@3cqlis?=S$^sD*0|ZR zRJXO z-SCaoZM9Xnja-9yZLTdF*r&ZfpO|y$^#M;D=B}NIPl)laTIhoK{bvr_`^5U%h)JP401ue2&V;bqJ z>d*}i=l4>XMW_YrWpOf42DuR|o3`iB3$zxB9UcK8kw<1roo-J5uts=02;}YtNmVhi49OfJzMwC~={>JWfi(G@SQVE&1K?sq~H1=h5 zy+M~)Z;*%}4j>VSlsE%mDTLDUdUbXC1rD;MJzF9<79a;BsE%Ai*CHgyxfrqMT#L|} zO6;vmv6-WX%u$KuYMG)KFJ}&jTXF}8h-J%F+!C{GFNS)-S&Ui+DWC(mvk#G(YR#z< zy`CvFZI~r{)Ztgd-$IeWtQG9(FS=>Rg^feY&B&wE``ycI!fsl%jhqAY|13 zYf83KzMZ8Dq?J8rKdmIc(qWj^<+@c?%q1yV051W0yGvmGlS*V&1%~r(@DO&MsV*e= z#4BV@g}S{Tl!wkY|G-+qkr?rEK-Ax`9Eor<*sYOfM&m9?EhI3?kG<5>|p7m=Tf6ak3A9Su;3Qq+Hwz!X)C&6GnIv z@s2G7g5tScw`a#OJL$rpqX#oKoUTglJ?uzob-t04Gglh%TA@alfrx3lqp#%sDYb$< z3>0rrKTkjZQ9@IxBA_}mjLa(JJOVn1zwuyhH9F>vRZ6QOp^(K`kTVc}5SF%!N z0d7Q~9zu$0TQXL|lG8&oKdZ z4xqiz4q(9kWdoL*PU?VqJ#X%sa=RL+IS>vo2?XQN=E-unQuZnlQ~O<1a3^Mt2a`(f zvs?)^Vabt(Nh%xH8y39Yf?%nwy)C;SCfXWibR*K12$~q2B7zb8isg4vCxpdWR}CtKdBH(FDRVbTrg&VqIrPakEPvWk_G%K}@fjP0HlYUqP&22FqxoQfH@$bg@$NtX1 z%dGHgaH=T})W|oIPPc;f-@F3L5EjWRING0Y@}D!!Qrqjxab>7ZsoJ=y+VY}yYi^C9 zzPvrg>r|(zcZ2-ZbjaOb4>&7xk&zn>E>&OA(5sCIL`GvijOsyo(d|Q$e(o@bBqUV* zLrT4&26hR#+L^%|7JV|=t5YgTU7LylJb;X21y9mAO}%NjuGp!Z%2%S>{W`!-URR`b zXE}>dCs}2xp;+mKnKooQ`PSp2RBeh4^ZfIsSeKSDKw+3j$II9rqiJ-yIaiOWL9lKr zDsfg(8L>JtFFAKA4D=x0>cfLhxdO1O)u@1DW*K0;T8-);)>~y@V}I3+dTTR}o=cyA zF8B5boyb-{t>(?;_C6sXBpqfaWK9}ORAHs``R2DDKi!<0oa2?`SDa~w<&+hhgD0l& zjIK*bvZCEkO}k`^t$X&#mJ)1ZXXF`Hxow?HWsv?boooh3+1Huq_ENX9B|y{@c+SRa zJ;T8EnU-|5=;^kZ>Xz-bxWUk1u17t&X^nj)GYz>oqT+_z^mfh=!O?!bo`EBHg@aiG zQBB9>(1XgBoz%Ip*$>ZL$hyF$SGR4F(zNAUrGv7}>^8SAA>m*h&<(TAA4 zlwXn@Jx@*&@;KERFeliF@enIM|xgPoj2;%iNMZ+yL zrv#6ck|{z%fYD(Rkk$(8d#gKUA$(IC56R89%}ZVD1DkpvglMc1?!nO+1} zDA6P$5%NshQp9qUdlmXVkuNKNfGzJnD3&0?MCYg*<-zF%xAf1&y(VzZ0jY& zEq?aUGa0w8L&3sAYgn$$xsF68Js38Z(joX6S#qa%yCu${2>iEEFk;oQG-T^dE~Yp0 zVSTt)nCSG$yKz2j8Yrh#^6BQ^NT!X(qcp<0bpfhIuh_K=q&x>CQ;sG$j&sPkqSt@yD6vU>>DOLm6ljdshZXvGoAA!MCXT2 zyv&zJ2>C%7#Z>(bxC?GP@R(Py!WfpERC$rwyAPQEfbAqOvahGJb8shu z?Nq+3&iL=kn-tm!68<(Y*dfR1CU|C0w=lW80c$tniSh8wv5B8^S?~HdJ!s73Jhm!W zUl0`ke>KNhXg8fFbV-m988ciGX$O_a7;e}pr^y(n^-U$n%c z5$8I*WYfu67eG83bDC!sDc7chPNO8V8tcWGaiFxuG@r7rW5$hlGHYRs#|9jFk0a>xb2I@72{m zdm>JJYlYsrqn$8Qr?CUdmSc|wDM0&GE**O_4%4;}iX%KjMtjjTEEYcn?OR|t@Ums= z$R*HFq*~#1fpS9A><%QaGz@FP(VFYJVP!JWgl6{Nig_~DbP>Rx3AC}CIycJbC zptWK^#sMX`vGuP+owVaXCQae4mQl3njy%3{H-K{#()d3C+3_k4=GQo4Cb*_PO1Vh$ zMXG~{*i{mLobRp8|1PCyoBzA|-MMk%gV?T5|4mN9tk?$azKO(ej!v}Wx?(H*Cj44U zzM=A$V&YmhX?kW%Y4Z$mFjwo;m7dvb`xKfCn_R@1^Q}b0mU4$oiLK|->C2Oyxn}2W zzC1#~4`)znLs7vnof~1;@C-gJy*3Rp4kzJBo!PAOGxv>Hl?_L!1f+y1q7#EOW8Vc3F&|Yqd^R#^w*e7(B!&rCfAPy)rh||bOn=5dw$F%LO%iE(}GpWdb;WD zm@pswKaVr%^8K~EwN^XrOfVOF6m{vDYV+%aLbGNQWL?&z;42vhWUiqBIYoxFDwM zhuKBB3~g;ylx?<~6E`)s5s6jRQmM*hY*CJA*}^-+b(PMNMI_%~iR3T3rH(cw5wjvd zv7Gs)mIEzs_2yw{!_i?IT2qRb0TsHL*+ztsy)xx9XTFmA`jtI{pyHx>S9Imi|@Mjqy8}m z*lY1_;3N+BFkx@-iq6Le{Z<@ndH2 zSJqCG`@;dInfmvGi<&gfsi-pIVVEvThNTqvh_Vwk8_47c%}@H@&UbCEy}0I7Lr7WF z5Q3UWp=8z=?)x53*NT8&qF=Q-2T?I5tnPg2-dL(^N+=yl&7n--A@=Q{tm{#5YGL0eSQ1ewDX^b*}+A}u$Qx59>$^8 zt7~0@RGPsJD^0!t1?|SR0k#bltKA8xX{cCjCNwkEz9F77vKWzYPC&%3U>JU( zHF21TUDDLqc>O1P_}NZ|0~AWF8IM7Hm<#Mib}O*KiS1^Z2=U+2!+O?woCBfFYY(pB#}a5h0^pZv%+H^q92pUaj_9xGi-&!xvsW6_b+op2gGNAvfpqj z94WlSKt%%1h{`5~g6&*oQ<};776&Jxd_LbgXpjsGXPILTxg~9GM?kpM(sTA1Mq8{a?lo)@R}z}g zid}$2fZYdp$zJ9Oa7{VdxIvi}D&nOu*{p;qtK-6*)aGvFBxDS~FCU$OVDA!)(#UCw z#E@Uj8#(=f7m#}$cn7wv>ztbsbev6WYl#@6Vwo?nb74g1>bL7DqSIO3Z(n}A-@)c^ zfzej;MR&g5G^`R01@;ygQ-#yY4NGi+vS$%+QYM|e+*&#yHL!B*9gI3`TM>xC7U@w_N64$8=0n*V@3(qBaj(E@D^a`tfGRecf>Dw6)=)0KU=r0=Lj< zPFmkr1WG^5>x`860Ynz87ArtR{LIhVE!(rfc#Kd&xhyrrvaxog^?8mnGZUrvn}QVt zTQV?gfuy!s)Y|o;el^6~?b=GqCMXyDJN|g|d;*}`wS~;YH_CJ=!iy_v2@5N)=$p)^ z6F+7$nCG8wlZoVH+oDo#^0l~qp_C`YWQtgqWs?Vu8(%v)^s2^557prvZ7Bz|p^D2u zY+uK(VL;Z%mDP9XFAAfx%NO3w?zXPpZQVM6jSU?gL#B?!al*7!7?0tsq`liC#om`0 z3bkK+G&JU9&*^*+r*x5W$WSp~2Pl95z{$sR*E=e@Gq98W@|$=JIHj^$g7H+!^FXGf z#JKR3q-kQf*;0#1q|(&i+cF+%66v^^?uc$el_3C6@^pZi7DBDWDw8y$rxRyK0Hy;d zJIdW2hplTB1<(orUKpid)6th(vP!t@a+#KFxB3E^P|4PW1lNl@E!a3%P-YNH(Yr1^ zS!XYRD$YPC_OwxUEX6A?TS5Bn;InyN7S42wj>9rp26SQ_mVUEhL%#sIhPEZ^8QWTq z-MQoBlg}kQ-vFMH3sFmOfYI%?J2%p-5T=Fa!4%$vl9h28S`4mk)N&}!7D0Qkfj z57rz$(amI+e{zNPH1_kIN3ejd!ANKTJ<@itVF?W;ZV;=#pJb^vcT5TgJXobak@j^i z1b}mp?QGaX8WdSZVe65dQxaPyNbD(zI^(%KLjos57-s7n(z5Qb>y;?BDzLpqN?*k* z=MD`>c$C0L)`0&Z zjkx{w=D@Ksy`G+$6A-9UFgyTOhJ1nktaf5Rra+x$5b%h)jKxCXG{-?05SPHj$YRE3 zvU4yaXo;a2{YID=0p76?*o~vbgXFs4mfs<`n3=b8lF|tnQIe7quTw<|0B=^No~nP1 z&D2v0ZIo|U;NEn->UB=YLfGJTX$i~6HD((<1$RLqs>^11{SGHK?xMEpo>rR&q5xyI za$dux5OO7;kM1OO8q54iqv1h~v)9K%v9h2%LwvBlQ&T-IgJbVr+(DLhB=EFPXbW4r z-*FiA1D_&LgeUSZMp%j>MgW-HDmGMYtFhm^mCmkJ4WDWNj(Sg4Ye*@OQ8!njBoMT% z&_7MfpbJze6E%-HC`DRb!#s$7BO||K3nUwFsE8->!DqRIjK+6>ykd)u$$I%m(O7R( z-wAo*Go4Jn8OZiie*0x!_K>*%(Qz2I08g)6K2|HpSUHYVg#tKFuzFl{)&O?EgSSv# z4UoKa65+gEzw*iiBIg9^u^ASo?2ID?b3$@MWV5z4O-}UpzVp*-%sdu9pe?k zq@g`f*-4Wd+M5)11U|wgi3uLz-XlCqd9Yn*`$(k3al#%{hh_B$Fcl*`CqU^*fD&%n zv+X>3r^#gD=qx1wg)?JgU!sHWq@>2HWWRvP><=gG&sq=@c`$uPjYt5REkn+E7D{$) zOS}5h90jK|AIW2(ZD+8Q!f=VhL%aakT?4`(gDHmYL^9}>Pf&NlcjIlfi3j-hioSyxrnJSFR01C6 z-7EEe_Z|SqbUHD+wk(|i`*3)F@F|Z2Dyj%%zk(u40L8q=HnhzJ;{g|F!^nIYS?q~U zQC2!duDdhppLW1IV1i}S2)&2#z|=F^tr9(fioIOY2Aq_gSaHQiim`*si!?Z%h>1tf{XE%i|u=7Vc-Zb9NV}trN=`z z1N-SvYbVTNXE;RNieY}y4u%UNA9j>og zfOw;tmdDngu7c2K-+Dr?#5DPghfEy)exX)x0|Tggv6Q>@rric zWoSF#Ghl`Th(bmmHa#VXNB>^|9rNFZDfdUi_`muu5251E**~QnNcg{2z z?e`_#*;SzSDOtbvY&M)kyx0#X=b zyHvKKj&G`jajqYHQfwlKw1XB&qqqL?-#sIq>JKHN{!{b}2s5?IH*_1$Aups3R z$mJlUd}K6N!HM`YUNd1O_Tm&2wuw8Ws}r6H=#(bqlg!3mH*ZGTW&Ms;LZQ&B$ds!4 z#)LDc%JjmFLF-kvCyOd~--=oMvYg)?5XnSS`Rt;|s_U#2d+EUTU5Z*?-}wvbBesoe zkVJ^=u{StcRdQDu5HaxzrWDe-;U1IsD@rEJG$?s63k6Kb)+t#8CzWamOlQl?;Hfqo zdriTZtbfB4clx?sZ36)N=1xb-CQ1|>o1qiy+{&ou1Zz^!vC#0>kwgDa^(Um7jGo}e zH3YOX>F4VsgR=txmw;Hi^y4yR=k7?Ldi@E#33s-GC!h)rbg<`pvRdX^r`oViIt9i{ zIJ;*zpKpKt+Ah7mVD}IfD9P&Ru*MDYJMAyU{D?Q|&7@;R>iNcw~E$)(+JZ zZqV2h=~GKFt}rj^Jnp{9(@)*Sy!xszh4>b_F=)AOqZ)P2dyW1*|Ed``!EkN<1{cI_^ag>#Yc2tUiqm;6ptqB^4Rw#}z zP*Hxd-JAwAO1f?PvbmoPQ+m~U&>G_Piw97<4nTSL1X$7tYzGr~OFG%l?!UXbx!(I) z+OqZm#Lqw=v=Hp+{57cZ!gG()om%wsJnuOvnab-SafWA-WbE1$&{?cdiqcwCG@>0; zijwV$qkVn%Hm$vZ<-V&KuN4Mrju8*oK5eZSJB>s`43+{a98#l5n6eEY&yK9JJ@uk3 zyyLzZ(MGK?p6-5w$W{nXEFL4Y>o2$|5Ndh-xlUwpas4SjS%28F*yP3>WLBf!fM*t` znqtAyo#`GR!Y|Ft9`|^PhB01RPdgjXR%)dzfZWe`89R)zgeUkd{mSD?dNwj0 z#+=qoa*G`RDz`4Gcs3wDrIkygpU2K3G|pmm-GMC8)LFPdJWw8Jmkc*Mi=`@!N1gI< zQ&ueVixX#2uy=iB#ei2(qYVetu@O4kP=D)KrHE7%eEXtEMV$GHb_Ie*c%Y}~JKSDX zPZ4G(U*~4q%p#h+YinX*v5CCWH(Sz_VR7z@&LZ>hdM}$B8Ki zsG%G%QZ2&TTh+{xF0Z+7mRS5{vz@*;vv6Y8!N~Noq1N&2w~6e0O)cD6k-%YKF~n@U zws+zEblCGu>+BJYi^#D)mH0%N8lPa_LUPbC63#X|;p|zTyTTP?+qY1&e0B`*g3YFD zmF|qa06O;5>FwLs*W-@OY=My_rG+6bFps#e6e*DHj+Kim zM%!*3Ga#PM`U83Z-i@an`3XuWU_LkHic8_$vV@jjn+>prpX}-BQE^BxGAqwfd`CCu z^mu)ZPMWGa5Ckapz@tgoeyk@4c}5UQTcv$#R=mXwol;Y3+z z_{R2JZ4*xDqnu1sw15FfAB^UWNm)@1!zt;rXT8E{7!vry#JP^{OEnF7#7wQjpPiG7i&U39j>#yZkie#ed! zZDq*Q&)RN6sI6RM0pO+8=Zd+EK$50$fQ>aX(-RK4$A?`FY^aMd1AHxk~#h5xI z<5|(-#<~y~amL#O3Z<^^uK$?o%24`%Q+9#tOwh7x3MS8itliUS_I?5dI$^GI6?r&c z45P+_4?WhLlr*Luc^%tMj~ugf3H@fISNVg{rdIP^i;xNu1&^xVvPqcoi=OX+4MWglEBIamkWObTp_3 zRXW=a6(=Jawn!(LarT_;Cw~(NCl>X?N5znWvKbVM@^DaWa}hf}vAW_i34q9;rvUg^ zl|d!UUL{2e(Z_X};%S^`FVkXhLT#s<*1KKXO5GRTw&(3|MJ_a1LOpqOV~>|Iu9E?F zpY9)00dQ!ESf_bV1yxI?39G3*3^xl6osGV@DGw_vdfT-D%B~4pwyUGvOu|iW~k8;3{H~u>+u8 z37>r|c2lE*%;qo{q zFPB9&gPRGBLYskAox2eFrZv&L?`RZ8e3;LW#44Z-MJKx?pMAVlkEA^()PQ~>?b%PC zfME3C-QkiYh2VqYds{MzJ+BgLXk8}Rka zYJ-qRNnl-_%|=xH(v00WTcLx;R%nmdEsZ3Cqg-$2i9S?`l6Qgd$!x}CB?&V2vhdo zHmn6GE@3nWs=B*5F;3Jjddk7%mP$gV9>? z7#%sIT|)4bmB%Zef>9e4TbI1r{2RdBqGS^Wk9u|+jeUifw0Oi6XDD{kWF*<~8B>=6 zl6=f1m+InD$>jU*{`UUu+ryd(R)+0ECKIdekQ@tAO^~^V6H|gT&}cpHb1Xrx!ztI> z&ACEF0Yr-Fufe|wLK@C$W1&uEutY1Eol^d}T+C$xo&+3TD%N?^pK|#Z1ySd%Y^zN$ z(lA2)i7ZyiO?P4!lC%x%K-H#}*9ic1dUnW-%FhM%4~q?JCP1YupziQk;+=3o?!P>X zEuzhrQMot*eFj!dqKhkITo(E*cV@(wM=UfglS`=v_Cg26cL? z)`iV``=S%0(XVq^Vv;wJI>6T_*_h6Qn6{V(;Udh+KME0Fa{_&0aTEWl`;<} zD!+9pcEgD+pJ*UuD^3qURT+Ry51{T>mUp76py)>N*|QU8w_~Ltpw3Fm-X#cpV3ZA0iH?$R%~=dfH9Vm z4N&xuoMoXb734-gA*BjSn%QTt#V%8`T)fb^*?{)WhI z^lWPk-y5BMt%^*@X^Pt$P!4c0g)&Aes4{c{dRdAhJiI(~?8IH%nso;eaukHmMk)a1 z#!?hM%n_j5DtO0iS!6s;Rgr5e?r6qJEh=c@QqWL&cPpBd;|ZAOu^AbtwV@r!GAvf} zQGx+#ts4}jOV9RDl*W9HOK)jt2L=l22?#8K>=;UkkAW@g&pj?6)UoVzemc3*n5D%x zNio`?r*n9eY`U$r@1)sAEr}7GfLgssqM2G@qsQ zm;P)JYxbLsq;xRtEC{_%GU(vjB^lGz2UHtXDZm1Dk*Tj(0%*g{Zuzn7ysAR*Vi&x$ zjoPjl>ic3SjLm>C{+Oq2~grU8>U< zEw@Q5x@x($MQe`;i+XlNHM-YQ+6Aivw#$)eVj5Y!UhQ`lDl4DpC5M(!C zE8%!|q)6MwnG8hHn;y!}+qN|Urx*<=vYA9E71Q$RJG8kb5E^}o(279KtI5X{cV?Ln z;Lvms>$%$Vfnm2`!&nipMS;f-gt99{_bY9lkgLWaZgxtmA}-{zJO*Ha+G*BY%p|T1 z#uMk*E0dzp3K2R(GrI_R(CZm7PhZ)0=X_Yld>uI?j-n_%Lx0RK4X{)FWJW-V6780& z0z7!Q)4`y1hse&5CwdOiNOXI338iUceyPV z56?D0PRKA71MKrwZIS0Rl9(M%(8L zr~DK1A&XO;DHeE7)a+f(0Kb78#iZU@w<^aVwpC1Y8}uqZXV81EO4B-39{bXU&f!R> z&X)y&qN$2KHW4A8p}|fNWM_I3(is9_n_+H(ChNL(j;^SaX3|OS9P7NgE?tJjg7i<$ z^nos3&tU*fGjUQ~FR(GbTE(AD8@jp7T1B;FA}Ht`;8O^o;hshNLvHn zTHjKJgU4N1A|#S%A2JH8)et`|T z-?&e|{OjYpkGGq*a1>v$>@aDoA@m9MhtVg`!0n^}#-coD=Z!8)P#vk-IchAnE@P@< zG_F98E<;zbY?wVUYrI4=HIJ4-!3qu;`*0~rRIFn~?PMtom77ieiLKBzyI1!jp54e( zbMS@gGe`)0lVhJS^*&0DX%-VO)5$UK%>p$>Idgzc;+pPDxRxsLI~T?00?fD z9gDgO+kwj10qWU=dCj0=bBr>Qxc!X9Asn4_Oo2~XRRv2(0D zoBr5}nukqm5HBMnz!b4|x?zgz@5hNTotE`xK8Usho72i6P8Q|RYjh|;dGQ;t#bS=Z z((Eo^vpatgDvjN@p^B};0JaHM?0{zN;fR@+>@;FhU#5f za(U&^B!z_PjW&J-Hb$MWeJ8PxlSLj5TpJwQ49KbP_}ZHgcs~|Z6v7zLZotyVvK8;9 zDg^0Jn5G%4Jdl}e!QNr4tjYomB~5z`KzCA>EmKglRHNi+;}BHa+EHw#Hm6m1adjB# z>6Gol*FH~6yT+!FBQpbX^f70vc&4l3HTl_4$jdavz+<5|xp8gOLZ9MzIv@kb3~RBA zfMXEc0Um@DtsSFj3>CU-|8q>U5k#A&w$6YUU_jY_R` z9t8^b-$I}bDU_M==X4^aDnT%Myr4Q+JgtvNn6*FX;8{R6g%lw6s5>^W!?#BS9u1d5 z1W})L)zY z87qMa5f>G+Lw5>sQ+wMfF9#PfE;*T_;;Nnv$&iv3m@B$eb{pa;CWIND_n$uhJnd%Z z(8QHXTLU;GpV&|EJjK&4#d2W8pkPO&H<(3ue`?LAM5zGajcSg&_fIPUYFB$AO+YL4 zxs^8xvz5w|v_*l}wato0De%@=0GVaNAJEIrgLeqarU432?cmt#0w4qOjI1-{Su42M zF{@71Tr5R%EmN`5OehzICFeu79I-s5b?Twf^etGPW~s!br4zG>cBHu4%h9{Sv)oja zrcUh)?xE{sn=00Sa69ti`7iqEOS~(Myl(jHvJE1c3?5LDFpvMBImxjI0J zk4d=?D&hi@Z3a>d0gA#YCgqGf?Gjm5BTE+(I=dyZfUI|IV%FGjn7gCpmmOJ2%1qh~ z4{rKkr?!x0vs-vNR8dy}HxVGgixv|?MO}N2mV#Kbjb{cIM+(^zJof!s5Deo9cm}U4 z146Pv>5)n)68S`@*p&7Ru(qepwe-}vS6_G%o#9_c&L>BJEM~csdWLgh)Tp2^y0Av+fv@DfRPS?Npgv|-ETrN z4ydY`99QDn)VY7*!hRD^XrO9AubHhtRKg+5xQYI($-B4;X*;Zkek<94;4;6#+D4Xp zGU)d-LyI`6kYi}$OD@ZFA1ydwiAoa+;Ft?Fz2G^9nUpBU&Y3jH#~}5g^Jt?kg4(Z6 zX+zkc9Xd6Ku3ZY>rZy?j&bu%iC z)=6)lK(?5@2+$fxH5YOppxSTlzPuitNP!;X&xvpYKYe)j@#?qhISrnmS>z+V4?xs- z$#gSd!XyPV7{5fnO(WZ~f#tY?vBXyvUo*z78abom=}={I*+4lU9xPO3YcXJ{CBJ?9 zwACP!|I5P1EMznCp#_8YgqMQ4sH~|QPtizVSp+z#7fgdc={BgDK

ueSLu+ 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

}n zRx$A^o(XjN7B+@j4O-PA62-1Pc%xuI_J!9|)$zg+-qswRdj*TB`pXuQ-cYYVLkbyk z@3D+2-$2dYTZ3Oa@K=cTK3kavJ|@$iYl91bWThD&D~nL9;3vT|$I{E`s;x~uQm^CQ zKm_3vmDV*wb7s2q_@QUXQimn6)XrFDREm`s6e!l_iggq*JSx@y^8?hDmCq-`i(QRI zQuVaqjHtHrW(m6{jP>)!e;?I$VpWHXgQ)2ZAE0T~qgKRE@c(OptK|{nvTiw0q+sw< zMkTT%=a)0p@R}Ko!QwjB?hGDZA$IkwPIx<%fn|iO;+yjdYOiApd>FMmW=Q)r%L59} z=qnNKe6Hp+&nc6F{sL51yC<#^Mc|r8T7lvCn?uH2 zp*44tqY91I>#K{m`n>M|CS)Y)BD_h0isl+|%U_iRE6yG|(rS*VQ3?OaFv!%93sVdU zjQ6tGScT)6k(VO#7f&Dq^O(BMs@H)xP?@S(n8^zY@0rmWoKp?inikILsvx6+@vve{ zr^rfB-FZV&93~gecO=EA93EpEVSo?I zen?sY-~~<9+23fM3fgS9rhZP;!al()&WUlSQb4nt&i=I(u-yEFG zh$1W1h28d2rkcW2|Gn8QRqTI4OV-9$tV+obw|=mun>>Nwb?Zna9DWNc=awTJ10CT; zwNQi&{XG4=@VuXQEA4?upB6N{*N-gd7Uw$V=kHHYdA{W*gQ%jxd878i#V2$G3@sWL z77)x_-WO)Ca<$L>uu7r7-g+#pU~S)V1~M;!x#%$QLkU;|#vYf-cD(ggL#*TnvO5@j z%6Fcoe`l7b2nK3f!(MjfZ^|m4tl+&>jAJidfhus`Qz^9t8BH=%1v<%IP|*t2xevqg zy!Gyt?&{FOxplo3Z3W^8_~v(A{**2E!#=kg3$a_2K!D#fWp`1wP@sKAA5CO>VxQf# zxR9{lW7qk%@fE&_4;{;hM=(FW`S?He>IG0c#cA$$8YS$qg`5pHopE14!J4|rojJPN zWGjFszQZ2j*GbP75mlCFnpRANl$h9Y4GeNMAWD{F3bQ_HS*qN?6&DKLhz&?h)LzY_ zo_#<~BZ9Wlp#VbOMvOuGEgbK+f3Qcuw~e^A3t>cc%oY_UltwiR7@E%Ak%V>WG4=ynCNTGgOVs<}jWlO4Xe77citIkBI< zSt;63Pge^2=;VE9tKuJjXL4BiBj(`7m*V4+&So6%+h#!LN^JDuAU57JbJC=1`f@H? zwhLqdvkXjB5x5+);w+{plYe`>SuZ^R67#YM= zl7W=X-azfR$@>NewYAB6*=;G&*V^NSJDPgDX4!2k4{R_{gH;~Kf)M0(-SLZNGwrs) zOhTKuN31vTmz%quC^WN;)WxJBoyI}K<*pF)$IU}=(9`OR)Rr{KewTE@0HD+WX34KZz zF3UGSjX{ln`dRxUTv^iSc>A7q&K-=<3NN5A2g~NarzH4;o z=F&8bQTvq6~6 zVeL?&mY_k*n_-@fY>hkgd6i%*3| z&(WeGP6=i)q&^%U(AU+$uW?of9s$C`qD_ZI{Klws9OMHWU~h#u+pAd&8SG~LJ2bme z{w+%NETK!967gmRy+v%cfu?Zn!Fk4&M9If!R+Y6FsJMdfqprlJPnnq;X2YDK$g?e> zO-Zb#W@HV}wy2N1bDo>yzK`Nhg#<2}XE_td^@Cq0TQJQ^C~TnJWq^M#w{B36d@Lno zX^FgI3;`+t7{gLbHqR!QY;0#TPq8B!=|spjh7|Z9EEU;hKf%r{MCfh&|t7sF1}l+Ulvau3*Iw`X{c(fRN>#Uny%mn z94x4gne)VexK5)%ZmwF?g<6I_@qy_x)k&Gdl17EQE}Z}!p@DP>Gl|fKV3Oxfz=j)~ zX1(vIf@N=x7jT-Agj3MHg3YoIXU!?#`+@v$iUPKEM0>4cteF6d=FHwvW$_K@C?<2M z#bhx_28&R$68n~7_wB%#<93Ws{%V9v4+w%uMqq(eJwEt;SvDsuTVM`O947dXSIh=s zx9)U?k~*}rX6~y!QmH@UzS=i-o8**E53K7+ND|dUG5=M$Hvldv-8{OtOv4$J*5L1; zzh^VXngMbYV109zD5b1Z?ntwF$3L8KH|&q_R>d_IMr;EAz@g;D=KWozW8k zs1>rr`U+?Dp4N`X4kfEjF`g)dKOw7A*A8QkI;TMN4R<)B(J*4CmXqn=kgW|pwsW}0 zIdbLlEsk{}Dk-X4Jy#IbC+s9R+yfn62@Y+Fnm0v1YUYM!Z(T|SD(M!0TwqJOk|ZyM z#4bow2=zd61;6MZ#)t)%X-E#n`+($;Z=ePX_Q)`7p9vFp1hsUGlnI|;SU<3&MJ!C!SwerfrgImTCR>G>q^3(wWNEJIbXAYTGb*W^a_vBx{Jm;0ehX%OS@9}0 z#Vd^pMA-=I#=77tFTOdFFL)0QgK>#z?Ky4Cqaw- z3NZ4ymNmm(HZKKx23kRd&x@W(SyyL?9c)=}O+xN>hGu4!Iv>Z42O~5|dbn2pvCOWS@ep_}fvt7xK7-qEONB4i>N^<@o$gABax)u_7O;eQ)o;Q#arJDw^#+P& z(;n_U6E6N|lREle_K&4wGQ&wwNa710nv(?F#_(sJI}hDcTm7H`bLj3TEL?4wXca3X znA%s+PFw}*@l9I0lusf?2g&KdDa_T5liWF(K@(Ji1zUlbz=gM9ukseq#Jckwgo?0Y zy~y7W_TFDlG)+P3ngJ)_K}w(3sSZVmoWtV+ml*nV!&30N{AmJ9KNYM2>hlp=s4#$xh7x5l3 zQDcN3#)sDKi`Nlrazu16(g^X`hm$!DhAV!UyOhjLuxQd?JFN{IRb#SmhjePFUm|Q{ zwB{)@IUE0%9FW#7R7N2vyr;_;Os4OD|HJRU|L>c13n)ylUsUA0@6o}WVN|(h;9PRL z&LDJXkS1EPQi*Kfn6-+~;|v1UULq(7k)bXcW1Av&OO8=vYb{YWLz5ZuG+!0G5X)U-X?SQC*I_@nG<9+R)SK(vwD}XrGH>p? z#gopK8y1!?Vwzd~hLqhZSkQguIs@8UEE_f?lM z%{&AfK>Irj4!ulWwe>l`n(4Y`Sl(!LbXw&_oAGt^<#1@Nb_hEhR(JJlkm=S@pmpiU z9d&*%bVTg&S$GYaZO9g^HWSLr)3a z3{1U})td!np{*hvey&y5N)M>8UG>@~Ifkl;$aWII0kwLN1-lGjhx01K>gGQ2D_VYI zf+Ef&K;{s>mUdHp9}<+ze31)eeNpnOphQ2gY*a$x{(dGgiCI-awQ^R8r4+HeIpO|p zI!?$^iZ5X5P7^zu9DXg`rt;YXBH^^F&N+g$`iBdgu2!w1IF8yKRl%*P?l;e?2HWz$ z$WJ_|xMCF_p&#Z>`|!(O{?}j2N$n!*qJ&>9`61p_9Biqs1*L1arhqPl&DmVzsx&L0tDlbmDQaP zAD2eS92=aZ6F~}KU3v4_z#2=~vUZGX@&H)LClNxd!Wt$FQB7~I{oC42w_MQpwcK(s zvMLFfbyIIxYL#3iH?L)w7td;1W{8ezh?we8h5n2l=dQ1IHtTUk$DI0dD8VEK)pA%N zBeCVjB&>u+1$(U}6(-B(CDy2i*k&>_>YtH_epIFp2)Q;+SU(h6H2~nq$ zs`4&LQ@{9)IzsD>2Xg4-!FK{6wpWX5@#sP%qZeL5?xEnD5z%8h=3d3RWhB;fyXM>E zO*K1uB`3DjTud?i4)1Y!qpt!=3;w06Szb*8r0 z>7mEl)&rQ;g+eDi4O$UkxvRw$TtV1LqwZ$&xdz0!iRuKr*# z8RZPUtP+T|7VQs@CKMs^O>zZKK+Z87-+UK2rsUXLlkFEk9iWO9j<1GBBA(nA+wF5B zplZ-5dO59WU9J8l9zRGQa5o_7u;wf^QAv84P}~zb5kM^7c!HA&Whe<9pUQ;?`potw zG2UzXfA>@Q_*9D#H-mbaCPupL?Bk+6 zH|Hve<-w69`WG%NJTm%ECOq8oOr8b7Kt$k3we%jkPQoNs1QLJw%b&6Q=kMo9UUK-g z48uy4^^_j_xOg^8>9Jj%uP97-O0wljb|ss1uWPJ=kFc<}#JV&IS|7FA)!ZkZq`)8} z;N}Sw>Pf(^8^!%5WoBZX7$ppAT3g(8tti_H;s~17Hjq4XiG@`U2gORl$r!e4Zb%fd zHdqu6?f1X_?|=E1pM)vw*MAwdUHOM^{!wGAs;1##yyM2kQyn`qBaw@;=3{!nuWQCT zMUL&P=0B+nPiUt(KcPlIV!8zMQKCBmifxJuZWBX#0$^}>xwBi_7qiTjh;24e_F8hQ z-*BojXYl<1^xv>L5?tc>IVIPZH2Bk%D=+&ebBXVN{P)LiKK=Od=Pi$zj5u*r1aO#7 zAAfy(`1tdGDv|mHY#pCc5Y^|In1#NQFwb#(v%!OTbUt1ALte_|xQ=yxoaab2VC1$UbDph2AL>H zhmO(!8)i5@5b65D;)MCN66e>6p>()Au?*Eo`so~O<(ODPP2@_sMoapV$en=x*YkR1 zHFYTGGp0mmze>lp)?6Vq5O#oVvL-tX{zBwdT6uq~2vvv@0GqEec&?`d$%`6M5? zSLvV-5&f#vcaB87qWw#Zg|AgklMWYuf2Ir5ClYG6*#?q{TRBa2$+&U=us^~~-;B}` zO9y$k{kLELTJFqNI@k?vm`VrJ#}Ysjl#C=3b9CTg5l9dPT&pI>sHF)ZsK(}N<&}iu zLDNVFyxmx=&$cV>ZB0%yRS(!Dc?-2k%uGTF5@D!Xn_zl3Ax;px-1}<6Cev>a+=$lGS&ZHn$*8QfNiowK1=srRddxQ*{XFy)CemH zoVbeoXN= ziM9iV!_EF6Um4i)>Aj_i(eAS%8ercH_m^BUesp#j4=UFV7StD%=SBH7s*CpDE0osl-Z^oh$^$*6=y zDDcNr(~464jZ-`j#Yi_%+;SbI$TL|(STPu2^E?~8;FEcyTE95YcGAhcwa2-eXDj+z z#lKZEc&XSW^Uwm&uFtbwleC`Z*-;!$gay#f7v4}^0LcABK=Ho3sLN*PlA~jCx{bY#rBz6hPXa6}O!od#EQihKrfLV_T61^Bu+g_HnSNYCVq+<0w`fj^W^B z#T763*dbS0wPLh4w0Mn5ksxwCi?pzI8{(K5+fXh^C-+dGsP~~Dpw%vDDfg1Z27t*- zLarSiFBbBjvXmKt;u?NzJh#d|#DKAg0T@%aU9Qw85KlBZ%-p9{+zGect(jV)EX6$p z3BX%5vCD;rN4BxXKuS4>RoaQTkTlLN75hx#`OpyUSOI?Z@fT>n(x;=XXZPKe>Bbu^ z5Uhv!#22BNU6=Ga=A)TxosQiqo&-%VPs7D;{{9cVsHsAqZoE2K%x&XA_NA2(sIiK% zJMgdvQ1lD0HKsx@%@7#h=ugAqt(sy4r9gLqLGARYIOFRMeXVxvu?o&U8)?s`Ow<_Q zSljdfQ2N|Cp{xa)mw<3jqy6IYlIqSYk3HJ5;^|mg82ESH9*QzkcyL?>MdM&!YOj+< z0i*rYyEM_uq4~zuyL48vQ`|sy2H2hg))?QUjYle!5@2@f2`~s{1bvDfQJk3pI%n~G z(Igogv>kU}N^k4J3$?ALm%|>slKP^xw#{vHW^<){Dn<64oS)>R6T`{d%3JI-F2pG`ZneO$8O_NfXtxlo{4OrTC8sHPKaEUGHOKxl~ zeb1F`2N^N#y9)7~`gZU`R<7a^ru}%_16-ZP;Tf4IHLUV?nWWgUV&)w7v<|gZJ*hmW zK!4nj-w(siQz$qwqlbp~R`|a=&H=4XCkaZCm=~J{UhE2r?b|J~mUA5Q5eVw|Z(pHL zaSaT%X+i`XI3AWmxSi0Z$gE<>+RI0l3=hkj5u--=t9m9< zl{>~F?1~8}>*w;2iEQYx3;fB}zKPKl+gZ+RGVB)lWITJXv18HkN;|2~UcsI9+bwL2 zNX2|yjh*abntsQIQ~cr3>QFN6TY7YX@( z_An6%QF|j)4ItsI6(WF5&`Y^5X~aZs505I?U@+wNZV6L|lh7x@G@l6#dPygT^gu-H zwOOq8cC&=Y*6Ap0kku8&I=MPc@OL@m?I@HcU^kdW>bwz85MZ(OjJBaf`Ev%Gx!xj! zJ&z>94HtWt&G}OI?Nbud3a*mLMZacq@LnWJw$~l2I7L@n%C*IL(XHPOCgy52P_Lv} zSSM<(eui`Fw?%`P$(gOO69U*>GoUX4EDA}9R%N|n#F1FcTsD|4j8)Z6rekXaqtb4_ zMsS0rQk@dI;7jgU)~~TAP{U4babq`nCj!gP(94PXU+&1x^40XjXXb4-b9Y zr8DBjqyO1-QU5c`NG#MVkB1V_Co$HYpvRs|#Uej3rk4$@#YKa^h}u?{C3A*hJEmvC z?XD{u?rN$NNIn4|cQd|ol*K|3fEkp1(E-S~aLmh2pbY)?Vc5{0^IkfxSCUhgb#l_; zm3)}2*w|I4#9E-mYT>$r;R-FBUuoGpE=B@MAvAse&;5cLIExaszr$B7;D$wD5$R4o6c?|!Nk z28=AF##3*fbh#o&`_C}!6I{i7KDzvtZUEu#-t40w^wx=Shq88!1_hu8?FD-*e3LFe z--SHQ0)JZFvBGG53K^qVWh{}ys7$-BnNWaQMt(=KH@VqynQ>y{Sw2cVu2P+rItT@B z1)GF)#p&up$q&zFJB;`2*s+^B!?il2-h9c>((yzBg09(*6c5w9YEmSEo?c2_Ta`mjFehg_enG8E8lY7t{l0+2dTQ?}x8;e1sBD8JAEK)$zF#YjQ` zGE(-$X{Rk7xv}}q`?PkD zLP?~+qutY<)JDR?b`%9878TVPmdM$kLlc0`t-K)bKRLFbGL;lIvk?2|vL_n6>$lQucgsdc^@_$W z_eRX)^;X%%Rfe6v%S=UKlYNH@Tu8hSv$%!&Pio@9sfoIiJ_mJYPU2p))%|*OH!bCA zgK~mcnU|*fKCs(F=$sQhLnEHjcC6myAk2E2gmr@RL6^mA&UMfuGT}&-ZIc0CSFieY z+?m+7iCB~-VobX;y0MEDHZ%q91iVR0$Pe{@#lErSP*B?e4wr0wcA3Ju&io@&G;nW0L zIm_Ce=!Fs9*Lg}b;4zZC&b9bIP{r2GechqO*4ik>mU&bpPBhSUsvvu=2<%IrxYiDK z@ajOis~(qbxb>Dng?07Xb7QAH<|EHZ(MnuwJ$>`>AHTpX>?%~efa}6;%7Z$d`-D7HfuMLD|V*k_&I zHtG?e0HRp2EUN&NqxIsewZASmAGc4+XVozXozGY$hVX&+pt*@1xyB9qs8UR20eM;hJ$D5SiuX<{u>RNda##O99nqRZrr7090{d_vsjmY@I&|=TF)3Qh zuqMtvYl}nJm2^Dqvg;f=*#oV#tBaer_uFSnyPDkH1>0AhCuhQh;QwdWLn_!{PtqqQ zN_%V(Vav(l0cEZP+D-y&=6P~*kC&hw<}JP4O?4{TM2j??3R?HgKpe#~ltgl3H{$;A zxPaDYks{wvRmkuK@)MIk0ON$01wFiX*Dlm|7UQ0}tGQ6Q^yg3#fcZ8x{6F2uKG z{&Vc+#X&53k6#Pvy1tJUSKnio(>ao^U6bm_p^k07yTuEy1jOpT7QF43TZ%6ca`rXX zi~Pgq8;-ExE9JWUNPrlIludWy=GI&iKT_RrdcN28t@CNsGSObWs~rD8OqMfwm?t!U zD7sXTimo@qg{O#c#WZO=sgAwsAD1croP<kikkA5ZIJCe1zdwGukvADj1sTuz`@bXhwI?L$Bq8x7e!7F?9anmIgMK3zUoSps-$bTrEInLn(E%@19QzvoxOG5$L>|TP0JWl^S~quys%c zN-d@;)Tz9EjHTAslj{FyM^wQ%dK+PfL%W(0I|BRr)Pw9&YQ2RpOiX{PB_!uoOSg|} z#5fU4ISF5jC@f@E9#@OCtC#(zr_#Y{Muj!+>+k5_o5gh7!kKm9GVQu%T9*)(anxMe z5=$sjcw&MJ$;q2_#B%w$;A^SuwL!rhg;oU*aXLLOU8AVmi?qac>@_o)G7*^q^Q@zP zV8$xK^$H4T2G}m)Gi6VB$wFAH7yGDQhW`GJ8?(Ke|E`C zD%wAc3~OWe+3;j8aR(bFN1Yhxuaw`1k#bGdb3?0n{xqMS~Jf$7=}USMFC+|CK}L;MSpeEF@irC8 zIqjyfY@s+pur+~{#U)%wCkBa$Wd#TNwT717TWgHDSzLW~CnEqM_WlO6VYIE8i=;jY zqd7Rh(O8_6YGu}GjxKTU0UCBt+$Z%|;x9n&5#aQjk3WC+)6c&?21P8N$NSF&agg0{ zupLHB>2kBjexd)lv3MR=FpI)OTbYxlA1nX?@Y1VgTEvYgU?@VYT@`rPNS}^^V!7Rc zv5zWD*?qD=3>zwr>5HWe$fRu8fUXoAPh9Q0NA@;tMo1khpziv|M?f)@CQ5DT6b6X2 zhF)k0QRZy>1voNzY8dVw9?~??s(x~x62_=M5LHEsB_g04^+IoTcPaK7^Ku)x!~cb> zS<%-jY{KkLJRTBs5=KDa?Ou>>?Z zKCCJyfqL(e$r1qA*3P+;0^|OYqrn9>S1%C7ooI({a<`Y}3We9yx}Y#1a6*#Yr`Yfy zhS#||^UO4HlZgjok(IQ36VA@p%dUyV0@vi-fRoVGPQ&%Kdr3(FVr$B#b&o;&%1VS{ z%Yj26*=6;* zAtU}LNQs{!oUGO@Qa}N|PAuR(pQsJ$nA~*Vkz(Pxk&A6MIwx+q>Kw5W<6uLPKaUNC zgHH|&vm2tsz0ir!NdeO{d?^d}12H8UXs2Y5WRry|JP&r+#S>aJ0B|u(S;TTwbgq&N z7VWia=LT0S3rpv(S6!k;Xjy;DeY~uWTqt%P#iKZ^aW8iQZjHrCy%Po7#8~@JF?SaG z*4r6B)x_h(6|*=J@1yPOqRpX|c!+WIo+t(EwgK>}aZDX7Jr^Yc4P>!{GVyX0;w9Z$ z{o|X8|H!8HpFo_c&1DDrH6U5`CZ|^jClL{o>S;+S=(gIN=Snf7FziX&(~G9;93Kp) zCEyH^)0&l#dcDH$drjCrvaqf0dJ5j5f_3V*8@l0AqfL0=Qyq0Y*NT6&#(ED8v88jE z2s;8^gYG{ldStUsEZ{v{x%!=1!$VjdV?%116T>t+ZI*5kO03?AA(7F<@4(;GHCtkQ zfp+H|_fUqQ(1x?-u2**=fyH`GT|TT$c`jyRwR~uj6ZhpqGo3U^PaDn)h{Rq!v=)=k z&bqR0mUkQkos_mxe`5-KYu6bD%+oUi_B-)wV!d|VaO^;4ElI%E7CWZMb9|6yvd!ky z4f?NEZ3-{Jx<1w|$K?Y`{x#jT+y3yqTz#I*5)L%$wBM`eYUSCb1L4!lkKVY($eZJIAS)MNUek@f6lA0#jj7Joh36_4Nf!|Y~jlb1~FGl zEEG&E$vw5$4Nk5=#z9&?lo!DSC9CWH6BUZeN2@)j*fl1M&hp{S%l=bTyQWx?#qjeg zqu#;MIe-?w8R|)<(`&SV_Y*-qtFe`RsM}UuQ^IyF>3L%$2040d)InwHv;d=U^_<~@XkWkR!!n|M5QN!zo^o0| zl@pm@6j?PsaY>;3o=$x0RV;eO9!;}ry!DbsY!&=B9Z3PyP8$S`Sj$de{P0Xs$1`as z%MT;TwXq4##<18VkG;khO(KrGJp z48=Ce&XV|PT|l1NL(3R6sI@Rv1RGy%Fk3TTcT#%=lCh%QSZ$=-M6m`<1+$|px@!l| zR-!=pHCT=x{zd?`?m<8$JZs_Mh)h#0`T9IoY~g7YExoK@?Z{wlet6t^jkf|9 zcS0SvZMXUXYE|wDSUJxgl=td7!|C0r>u_rzJa+0j`wDkb*I8E%9TQCy_=+WVy4o5T z_=-2ZsNCQuqpR3e#^Z`1n>+4gaMG-^J<6Qv69)zP%uYid5TRWG6uWz`HPm{c(ea;| zMa5tR$wX`|GZ;jnZM>!}Vn-_S`uW}<0Qk**&@+t}Bk54&rs{MoRCKTEM4)XvvA6r~ zug}mYuwdXV!g^vsuX19ca>#O==xJgV~dnhwj(x;102DzHL0r6LDr>c&y=Mjl#i2y@bDdL`+8NhwTT_Ic zs{Pyo1*VW5ygPbqt*UDM;fmc^M0SqNc4}lDjoAr95xYG$I>p*&wZu&~Wrk)SD6=(S zb_myMjM9>6j%U@3XqTx^f}fp^xh&ilu{mRxKN$6XLVJ#XLc+EvlqDp0fb?{HW-q|vdBPa* zYr*hT#t46ZBElY65XJ4Q*hTOu&CNP=jRCf8MJfi+8#(C!+&4`uHS4N!>}^+=0>uYO>nWAW8om~v&hnnck)qZyT^CFg25<`m``ZUXSaMpIZk1Ee%ETDH0JR?u z3UKMhxvzOTja`F+MzkRG{9nLN2qpi(nt+I4j6e-DY}N@6o37?Gh-lE00ig)>-$w6A zpw&^AF6vr2kjPkyCn_F%NIS8ZCD_O0P1dp77q4Q2v(95<;-o~E-*2Y+;Ro6>^^&V2 ze01a5UUI$bB>5!}Fzux1ucXeX{lJQ~UhhZQBX~z_*ERTmBGm_>aNsptL@83<+;iBo zv(45yL&occ*a|vr2z_#~L!WMZotr9!i(`k_iIH_R#v)EJD4Ut4AfxnII(OGIse(_A zUXFSu@!~5c!^XfK6JPFqoq7$iXHT>_c07r$X_@8_-zn;WKQWk}HUfnVlD#KTMA&;N zD+zVSh5o9)Bhc)ogs!BSQB-3un z-!;itbumzUA0+Z++1sbCM&LM%P#wsJ$f7+Khn5$$f&XftlR z?*yc*kF@c)h5%Hs@<%+oBe16>e1b#=xQeua{mU`?4X+5xOjMH63 z=391y$@=Rk7>$WrmH7x@(_!X2)()WFgejY{%#U+#Y|4&e3 z;ikzM0yjB5d&sb(x$WzciBl62$!+gkRfVUnH3 zuSI<~14@TPWMj|jRw_WB{4>7EyEUuR*sr?Yae{y>%VDq0 zVJE>7nZXWs4wtgf8_tqIOlB5Jo>?e^%#+Zjv&a_hQ!v1cNIP!nZCXPkoaTyMc3jAB zH;QRzbg#vJ5>cl!3bX#NDxw`Sh9p!HyHmO$#-=v>8qmaf<*%dHpI4mG&1aR$u+bH} zJ8o-B-R z_|SeB%o8z}128~Wjd@(?#h0Zs+_f9ZSkQ9Y;E0!vrzoGZt(GW%kGGQ)>N(^@Y8huQ zp(Qrv9eaT%op|Fp?XhnmTzL%UgolG-BKtP&AB@ESMeB{U^_I4su>p^5Ip@`rt<=J! zAND?6$S5)NWQ&6l;Io-dgX_5Y!lNvOFT5tRQ?A7%NKllkhQ(rBxCV=j4`A)K50-3D zMHq467Bf4YA}w6Aq`>=5ooG-Tc~T@o!<;RiQJZLi#HV&@v(f-k5MUd|GzwZqSzg@3+ji?i%1-9fqV8yxJ&{Q9@R39MBFKTt?Dmwndlins`K&l{Ty zwS;s{L8UQt^A30EYYyY zzOYM54UOOuoBIwsJ)CQ=L@FPM(e%=lHnEu+lCC-bDf$ONEK&9UE3y8i*4(fh{Lg<{ zU9rZzt?I*kDxc~jz?kq%IyIobthS#e`#A0Y9`7?$Ta}xb)Ed#Tf+e0Qns(*kp-3&i zTrY04l{c5E&MH^m=T@p~X6piIb5H*2gH}=WA94gEtQ_3@fmY7hnW?_%W@-jU*uei` zqC{NynqU8AHeR1~uPwDl9P=Uq$mNA2bpLJ2MhFQ^*>X5c*{;2FRyMJm?IzVtVunF$ zu0Jk(*N^THvuVnOCOkYEhKI#`MC*94|-m?E*0J@EbhpSx+YffVbxb5Siv{34hoSkPjEU7zX<=?;B++M zzt;H2gVttO&(rAutQTwJ3XiZ%61Ha~;oSUm2e(darbpGz@3ML`oUR6o&;em7Ux(B$ zAWK>*mmk%mD4$W801QU-rGDdeiZ!V4lOtQ%DUl3`)-o0P6CP7w6VWZ9D@&BW3QTmk za9}o5la?qo{h-8#YL(k;cq;L8PPl-B&qRv*S;VUl^&_8-XM4}Kj1Ih6iG_SghoLiJ zup?}YpNU{|b7bIwsRr-wRX%`oyts5rqGBx3H(laH#iPE+ted#2@t;A$BKUVkdq z@gKjy8C?pmQ96-UtU-tcO|0AOGhbiL>8Qcho>5V__^xd zGlK-1L*+^B1%%1k6)x8>>^`sR#NQ)@?!@2Z*~H)Cq)1js`2Med+bJa6k-&cV_~{dE z5ia>lrbfco+MAxG)LDP-EU;em`$3YJHyjekbn@$hEyp!ea|xu&Xnf<*$8%p+JU^@x z-k*ZgwH`a^E{UfVV47aQAcBCiC0zvFPU--C?ef<``3gOy5r%Uq_@@n)Y3krj4-E0l z&zS?m#QlEV52bt z@KxkPyJF`&<#E*r`?r5A_v^zNJLYk(D4Nd7ob}{pse;`xT|vS{Yye;~oSNq!WS(Z_ zghB6z*mLDD5QiH3ST&R17EM{rgU5dI6Gi$8`OA)Rs)8 zSWICRa)$RZmhNq8^Q_g`FTEp0*tLYvHD08F&xF8&b3T*2a+Q)(?M$9fa(?soa`6~Z z#iY)>T(_tzhhsEvYM~Zr{TjO_oc}MIZZR~ep?27G)-F?4L4T+#uqPZ!K_ncfY#aq4DW5yaH3=;}%K#Kg$ zC74-JIj2F_Ye`wMoL&eS<#L84L=Byc>=FTB0(-ceC}fxT0U|L;ON!_m`-pxJV>hOg zVFe}oNe#P>D*}r+MQB@pCMPG@*YI-Z)$!EFDKrTaK$)B()wggk+(UiLU;Y~Wo7O!? z&SE1~G0e6eI|vK; zHOxl9>n23``w9(t7G@jfT90s?yfI9ul`IgWTbKpH{}=FIZjx8oo#nF?=Tj%+QJXQ53g%IanB zwkh72sH|3rcM#6;uH!Z1?>)yGOI!F!DN2CDYxV6wWq&8=B(9|`V{^(M61`4*^P3nu z?6&q3^o3=zs1KW1k8Pt}gUp{#CsB5DZfBNBjq6A1>&Xe5Z?VFL2dMP(0#gVO=`&+Sj{8;|1Q zRaeIh{9z0o`r`A1>j&a$f>vj!hd95S=Dng=_a-SP_U+*PrxWOEC!rsT{};u7WP}Fn zKx3}meM9IiD`2g3fLCB*xgL{^Uw}JNRjw~Tu=NuL+emP`8yfN49H@XT4)n8L zytg#Gh#ELMwHXh|!JFFz-~aX}c()?&486QsX3Qkw#0fJ90VKboiBr|Zh3})sm{?{Y zFkFye-@)%z9GP|48;A`E6~XZ5#HHw-+evgCuj%E5DxQfjyIV9u1v%tCt-vwy1i6~UAs|=lH}%z4Ja0+k7j1n3%IRoWqO^s zG^`Xawx$f;EL$_Jj%c zu=_ci0Fsz)Qk8&$>UI98i??2Ob=7Jb91d3PDu$JJT26==i@v3G@Vq(_@m;5syC%a< zxa->5dF7t1-KynObxsn`C_*Ws)1LSL9OOA8?L_kRu8Cq7aQoMiRkG995X%n> zxP2M$Fra4~@IckIjS@4kozMZv^ch(MD(;(^0W&bb(97v;`vU1uM%<7*6Q@t=qgIDzZF1MihoNl zYrD8MdfUS-5(+;U^ZmzkSZMz@X`_x$L>- zjorK^75&2sXxDY=FsFa;*WePnK?H>1tXgQ4?2CzuNGAr? z)lTB^yyP1;X>Z*`>K0O47c1+NDPb78H(i(gIB4fQx}%DrlH1C;@Jdjx0qj0 z=G?Nykfk2!WnM4dUdIz`<2CuMS>Rm5&n5s+&@vWx8$Sq=u;W}Oa7cANE+JLpd~H~| zylytieu3F2D8k;Z9q+X-fByByvRF$~oeryhQ4yw{(~_>z;^CsD!K5w;GWDf03y9d! zz^+(2>H^@7ed?fNIxd{fQa>Hwrb|atTjGnQM#B!MMSL#uzl*D%iyezS&DJY{TOvWD-L`yovEaKFx{=hb~19xUY7+({U`f#iJ z-?S5;sXmynL$^cZvX{XU%(uD7U@J5aW)ZmM^^ z%?s)z(2IcBsZ(oyc-Go%7DRCbjHM@QH}^KFWs*my2?h7@^Ar1=7|XWx*E4&(^%k*z zgI}v*IOsVmqyoT*K`i?(`>sv=)o^6Xb?>fMU6(jrY1vh2GBYjv+~4n6(*(V*5p8lU z!?pp}ik-SEh0N2}(jA5j6^X^#hcnO)%PF|YM;QT6b7Gkr;5uzyle1I=k)Re)VGGR1D^(+FrCguEy(g)F6eY(Fi++qrv|jBD)S@ zExo)BbZX0nqII!R@RWT-c9k5d0Cj@M-=Fk{J=-~(=g4B$j_Xz1G_%QsMvVurPol*= z{cgl4=G!@9)zl3eCG2?w3)HY|gjj+8ZiFwiOpqNBIxM0vBXly)VMo1s=Qd`6PU*rPd9O8nvX-~acukHVb*IIK3FK-$|Vu~8Ymx;VmOo);PmC4e)eP@9#j zH73H?1%~Qeg2p`Av3axmOc=UQ*O}PdX0Pj~Ibs0(8P4#%3<|)lxJJ7!;oN9{kvscg z0f`}lu}>3$sj64{BC5iwh|Rl@y2HuZ5Lmgh(3$7ebIPLS#FgCM1Sb~_BSZ9nq?l9z zzHDdxsEs`F*cZ^4E5EBR0QIeIO=E=3>nYtM_=)B=5UEk_wS{L;r{p5elnQ{%wFQI*YUB>Gc`Tj0 zOVsemWNXVJHXm#-hxu&hyOgqHc zV&df3k26_W(IX0M3R40)EL>!jHV^QGH}AKq(Y7D;9K_cT6SlMLeFQ0z(sZX$j1AE0 zIlz@&}jI}&K*1Ddyb|&Xma$LZp?H{ zS=Ga;me=`>0XC#1UJ<<*tS;xoPC`!@D^z2US??9tXRi)Rin+`!lgJMVgfr?*0^-SK{Ng41mUB4;L?acDlFd~-HQO=O zt>xH_4(e||f~VcLkj&~?L3XiCoVl_H+ey07vOk;GX<%q#&PQISIZGR_R%4+o4MbTR zvEEXy-go849%#m_=c)3w8rvWg*KKD8`Fcnvapcq&aM^oF)B4T+b@rqo@c*8FUA_C> zkNWLEQ>`mU zw_e$Jq8DJ(2W(Qj-<8FIYc&gclq+CS*NDMI1zZ&+W{os$vzsYiw9I3$glO#JwYCPh(m`FLxG{ z|liUC&vlBRnO%GC0VHA`vr1sJdBBa>Yj z*i&H@I3d&YayDg5JIW%;KdWvAh&VS%Gte`(!Y|kg>A*()yz6=CxX&|2PaSuo8m6a2 zV;i?n9XSAD9#grO1;Oqopv|(y{vTAm&^nLz5MT#!N+v!hC z9P<+{0IWYH7sbWCGuMT)BZ?7JM?ME4<=xxu(r!;K;@4V;F%U{eyWye8@(ExA*vDhg z29fnW2j*C97gsD#8qKj`=yQUmz}c*v4G+pEOE!Gl_q@x8flL{rDkHkXPjP)5@kmZgE*Q98Uc9kB_90AA1sAj}T&op$W8Aij(?K2U|LYBRA;y*r4p)v#2^{1)m@%Hu#=iUMmv8B1TsqxglIEGSc*{)6 zZ)_cpF^eZO0SbqfL2(Tc2yDl7>j?Lz`XnwOdyAuJMLV(}`FUXOz1> zB71I{?wWg_*mM^)0&l0;*Heq+;>3BK!si9VQx`6#ndJHPq+~p-#K_`NgE!l?$v(r| z>p5+P*rnhHQT;bFDFmY3Gw-6O;za$NVz+3dn#UxyO|({3_R$O_zrgMm!F~VZzds=c%rmjye){<9y$nMhm{YhhO%do0(kbvBEKRVV;? z`!1vJ6E<6eg3~cu=5`KbhkV2 zx@hNJ*XQ4P!c37mCe;%=AJ^pU-j(=;qSYT)5w*jvB`s8T3y56x!!}7)04nD9iq9@w z;v3Y{C#iPLxx`rYiy=cG-%-D=I$|RU=(?`=IPI?U36Qr=er|NmnkThiC-!zc-)Ue8z_3Hpnhe{OBZDRDM^v5oX#^0C#bYTArr_0s7il6y3v0AmLn#Y4Eb=giW^v#6@@ z5-DJ=CeT>Cnk?irL_vdg_4dFw>8!c*wt!=Wwv%NI**K_VL2aRpxbwU)QzRS@NOyT$ zLiqlCJS)fk{<|N(pTq6sQ(>e9+%sr*j1;`@OcTp87)0g`2=5UL3O%RGrFR1`4wYQt zAH{bFiZa$`gv&Om-FeCBlRNKztVo+L9WiH5GZlbC)60q;OJ(QPhr2#;wWd&*IM!1e zHpsg*%Oky~Xqiy~YKjW9e?RJQR}QV0F1(ij?YP|>UwEK~5QM21yhjeu&3If46z$0R zb287`4loy<)#9K18|oA1>*AyzAhkOOuDjm&0v@^CwN+D9SOM~m-cN?R>wtRmp=h8q zJrBDF02l@pH|w@<=-=BJDo*>2jwxubG(8V%Kc*hTCl%I?5KpsY(Lqfic8UkWVh@ka zx1)>XtZ0^gCsU2T`B@O!MIZ*HPVCh(;0@3?2}ow(KBIlt#7ufP~Qe$0mz-Xq6nlpp7)IzYsxu?|I51MI@qw?o#B zN=K4U&d_%AO<_!VZ?|?7f|&U4e)r|~{ekVp#DhB_XYUJ%uZkRd{w|xmm`N)$TLspR zfrlP#@~OJDlUa7fCI%)wc{SqeHnsmmQ7rq8ttcRmGwPg_eWzG-YSZ4T*C2OJ2+hu& z6RiXK7p=+M1<48u1Az4MW9tOJwNixXHueXle5j9;Fu-00idxYG+w!0S=w{C8y$Z@P z!mg;>X?nSDpWF(JV+~tfDC}h)4YN)pV>M^OX6<)Qs}|QWEY)85;8*Jo>-^9w)&gGQ z2IN!+*qD_>i5UA*MmGvR1^f`qvI1b6aHla?$6!2EU3eHTyNher!UU*83U)pY)0ARq zn&^_%xvL?>?wTgd6l2e#nN!^3!#v4l^fTD4#IEP$;4ZQP$;Jun&RlVkswYHNH_CW? z+Q=wW<(;nTS0Fue?YG?|`9uq+s<5~R0>JyqR*?YkQmYtfm3w}ytK6rUUL^pSTN~&T z0>J7Ds0@k&MyDBEm%q?JOZMY}S@9jKCkpV)3|S3r7#$=HRL255ZnS;cx7k-0Z4i;s z;`%Lu#V9Ne%V&`J^iOZ_01&~0z4yy^fBWA*uR{u&{!^&6>b2>=aBQ)l@D4 z^-4MB+Uj|;DaI`8wAF|8*6RapolbZ=ie?SlZeG3744Qhy)kYgs<5fsU)$D_&y(N~y zqG``D_BlZ*HdzJ`N;sU&89ZpAD)59{^W#wZbRmqqu}?Bx(N%ZKfn98iBmj{<#j$pU z1cVZ8J2_b&)4sImR8a2M4!Me2!V~W+3*p#)IRp!^(r%QyA>eX?0T25wK$Aq}3{U%E zDtn3aiB<1OmtY&ZGkc{l;Qo3Q6XWjG-itmzRAlA<5yb9_$s(M^WQB@sYu&zS ztVf=R6-X?y9&xY9vN3`Tg)J+`INSAn z94MfY^{Q%mf@jg?1X4Q`2td_>h4XGvFkWqo@LMbmW7V%<>6~gk#fiA2caFkDu4t&F z&5JdCK0*mW)rz=Hq z5YE;ku(<0LuQFMYFaRLGnyQhf@<$im5@JX4L}?bgRTbbiR7~F4u z6Ae!j%_cdS`s|#X92lUi@wJp=p3NxoEt_DvbfC_53z4NL0q9H>p0 z!)T|lqlHzgXWa*d4Qs-!kpH}F4#bIkS3JaUWG42E4Fm81yqq!r!wwpTx0|jo9gqRJ zF2Rce-lUUyZG^H#gbB_~4|0;VY(@RaymrjL2I%<(_67IyiLiK|{`})VZ!52!s`Di7 zR5Y=IWHCOAJ$r-_8Hqz&8YM%=WMTnKWRt=n4qdN_l-6&0b;HiH5l3R42NU@&_kH#C z6draiC}b6ThD&^OvP-5p*~LwSVAeT4^iefeR+5FHuM`S9DrL`WH_A>9DTyW)h3{At zxhnH|m`~jE5;w}79lCDm*4@%59)0WvM4b&dOmzl`Tdjo9H{JEb32==O-(aJ+H;lb& zaDtIEELye2hOtCCQr9`3CGPrktIo+r#SXdGuHyd@>MXfpgBw63!C072Ps2n}-JTo7 zu2*OWKia!gc!FXR3m{ZeJ5-=PN1Y(IZj+o~e(guugm-(OfU#su4M1EWPMz`O^)?|n zZ+cATddC#8ki>%S6xq*Yb?#yRqfhLqeFw)^VZ%Y2sSK|Z$T|qqSD4BM>Z(_0*u9rs z6*tj+yCiIlV#l3!5uz?|^^o^$jOnC$xKB(1lhqd^fLnoBinE`1WIeV?u*?@~Rr)dc zGp8dX5ph-%2XWY59D!8uhx5spVWBfu^mOuKSw5diEBjHV1TC9QQc&15=4jc(5l;2# z1QRgHZYS5L$g2agk@j&|y-gq8RyFL{A5=Zl)&Iv||Mbh77Uix*%lV>SsKB|~6s3;I&;my)h(q3^!GHck+G6|K?>AJPcN78sPCy8qwY%XI% z$P36-1bD|d(CF<~P!?go7b7Z(u%VY1@Hu^VsUX9ARfDkx<~LrT<_Pl}ss3ttaD~9y z$JiZBQ7rk9>93mS1kf}=%6=X6gCzi(JZY`R zUNCIDORB$YA^V38+@zwF7jH2vkm+5kt=hmDCF z>EI8qayBK@UXGE&&JBAG3s-@e6RW3lr!&!@bVJ!+>#tSE$kb%oLaUAfM(j$60Ls7bXPC4iLLYkC3D;d- z5E3}SvOm`3PW2kz`x%r$COm;|$!;EqVdn{E@& zZ?KqvIx-#GJE<^kxhfq7!)oZKl`RLeEhSiZ=5U+;yGVsoK{Z3gJ1lG!59{$wK5hoE zt3?s{Ddr&2dL{{!SUxJ{)SHUG#7DfDT7&d?6togi5*^)1luM(O)7UoQ90k88S~nA0 zj~MKFt#IX0uw5y{q1<=2V8fv9*AoF-hQrGACfa(Gp(y=AX55F`PY7OEG}jz{EXrYd zE5iFQ?AJiT6jiXy(s5GMA&v}eA|LzDV>Ka*|L;z$znkdT z+T{coc1&w?J(dW`pPy2@zzUslo7&yQh{E0k#dn(LfIOvA`)Pkqm)L1dsFvU%QBpr! z?sluU=6I~;r0WzBR!@0B@Gqx<3=6xONatjJ`f22Gmcrs{K{oG3zx68yG3>4^Gn(4# zF%*Im^qx%GiecUKPiA^k86+M^b<}X7^=9{>{cfA>T+q||cg}?U>W_E4M35Vcg46`G9-YRU z&LsAg9PbZoCVN70_* zY~s2C@Yf*!cOEh}Q!ziNbl%C=cU8qcVxU(?x%2?g=`O+X8Q#P#2M?2Mf&>zCRpj(? zQ`At!1i4$iHA%75ZcnO7PDbcdyob}do>-ft%HkZrKCu&Fisc0i0KBJB(?~`SGf-s&brXCO*A5;IT#Bk0o9STxIm7MbCq-Q1D9J`CN^&K|%im|XCi~b;QMSyp zr6dm+4Dj+fK>+=tIm7Y6Fu(35r|S>^eFtFEFz%!i$>JnmX3@pGTGbvKv^v}gIZRAT zhWm}1>?ik|Rc>=oe^t!bm?!~i5bLsmbOc!3KrURpIxBr$N=&?|@^$?r)`<%z!TqTk zODyH&kXzp~|KII$3OSweFHgoKU0CqCE}=DN>B%+ey4C`qG?qUv>ByvQ!iq4alR6bf ziY*Twc{vv~I&(?0Kc4q+lP;Gl=TrYzo=+N<>5{whNUVuVXbDuuXLPU zb}L#XOKeCLrL{9}i#vh`0hRCtXqwi3lTZ7ie+{Rb>Y<9iFI{!EH5?^Q7`+n0}>bHs&?zeQQmW2dkKZ=2+%k9k2>JuTR|!H#Qvsoq zQnu^J@!Ip;E9{jddBqk}&Ya@Vigk|HhZ>y!1wImU3q2bASTSG$i4s`Rv&z*1IUFuD zh8#losjXQMyO^tDb1d78%L9jGJvYXJ4jR$7fj7%G;`+;7a2E_JU~{AWG9s))d07$G zOqlZ%VeZ}!A#az|_2I1D_zoAk*9fpKtLNIa=2h4VznpWb{p0ju?j?m?%8TH`Hs=qa zDK_;fZ$b9+=cmFnJV%3DHowLeW~x@#2o!$5w%S2aItPSe(4=-T0daKsZ^52O0=_u# zmz*FrOg^v|J)BT+s=3<4Us7J?2k)d`)5VA;sA(a{Ze6Z=Z2xC7F)8qz>&9QLHbs=f z$&D6dI6P+{@G#k{iB}#UTxfZBIow%f)vn|sJa&K)81U#0PVEy-GjOdH=VQB(r5hle zb>U#^frdDbTY-+l?ehU2p^<0^xvRchA<@05J*@=4JF*Q2`3ROC;$<^4#dS&K3dJ>D zsoi)HhOf_r{(B@Hom}Ybr1&Hjwij6|N>^YrN-13qYbG^F&gR0~rzVYaSfRtcubQ8V zu9;sw=D?`422f>R9M==vgRzgb`dt}{ztQ%8cZLFjp>}Pa^ZS@5u%F3&hT>|5(m6Ky zH@zPd3atK=%ekr}i6HFbp~FLs5BCzhoDEuyS2qE}+G^=62s`! z6$&hUEnB&R-azY0fc&>2j7tjLsWn52cGH;~CtfI1mz3eoT(0NTQKGUlZ0eUz)*XJy zunD(aZ24VkYR#V-HYW#=(h05)eUkFqKmVkrm8-1&5lnX#TR&=Aje{?*CH0(0xr!nk z*x!JRuGbR_QKoRN;dVa1e#@D7S@Bv|(#q6q?izM`27pd&h7;k8taDeT@dGxGZlUAO z6(&`J(?B_q?VC&J=qt2*(t|O10ez?NudnNb>;K#Dzx(6QfBVC{e7t&utdj}YThF=^ z-ifmwKXCa_I;gnnl=l(D(|p(OaKzOsF+TQF7WjWCTMtW&U;o{I`|gJy{ySvMht!kX zsf32_dUJ5U{L4QhH;g|&>Y7$2XO40hALnCh3uPKUGs;Ho`*yCPub&Bt6flPC&N!pg z7iqA*4(doK;U0ZW-A-3tKFGSp`E*4MiBNXujbt(X1A zeCu4;K+b&RwSGh%RwwZ5t-?gT+()C zutkAb>#i%%O{-UVPHiaEY93C256G#6)2)kBq;sKX&-G1|r6rroTGVjP7dfsYeD~IE zm||A3Wug)Y6PTwN(MI2LdKO@`#)JRa-qkCq{8Bwm_Sp-oVwzGJFu(u zm30Z%jZsaYQgvx_vT)oH_}%Zm{7E{oFEe$vExd*uhGuWRk_GIrVU>S=cv3fMJ%Kj( zXAS4#RVjqoA+_@vr>GLHfg?BxCLgW zQz^?p0}hw*BB5|JbD6sWK5_>+jveGrG8!?~aM8(#8=xl}B`x5pJ&5o#P z=~AAj*=_<(8L}}xN-ORK#O=|*(TMut^Tbi1L3~_&Iu+ERij=_erQIr8fmhrS+D$>A z_-@DzY2-%2eo-dUv8-V1Sa#_ZmD7zb5#`A!)ahrvSG+T>gYkzGFTJG`uZdTjV@D^6W#D4`D8I8*XyHw;?AS`g zMkic-v&gBpZ%I&6z}QakbIkxKxkT$&o~%US?N-dLCM;@+7#c+~+2ef!m z$xamUcxBTe&#pG$E#g4Dkm*^^o(X=*^w!#<>UZSpPId7Dt+uwQN)l=d!^4Y!az7tO z3LwOysKS1rnewY5a*Azuh_bolf?w-Wm1%0b(`Pnz+C!mg_g!z*obTwJit-avm0=-L z`B{1W79a4t-+e7q7U>bz^N&CN{;&W3FaJ_n#wK4d6ULK@+2NK02o1h0`zDMJ4f$Gjnh?ng-m}3ELYmSJ_r%Y^-x17ec3aGS?GZG?cnIsk*KlHZ`4K z!j5m^%JIXK(kXWV+@v@uv;S8uwp5mmiwdI*I1;+i(n;3Y`C1YXud5em1WLEb0WWbL zGJdM4VyhV$3-bUM*Bz&?QbggyL`oF%k!#DT+r)*@$*IHzj|0YkLRGA|?|L2&7->GC zJ+b}{S;W-wuAL_Wh|ILQi#`^)e@i7Se`eam=7y_cY~ySPP$-*Rqz|VdVdumQ!mw97 z$6@cJuU|rYeo5Exrg0Lhq7&E|fXS~=LhvDl2eIy-4r#6XUBB6^c)P7fG+J7=*m?c= zBaH05lvwy22$a0fP%^yAtOxX{S3>R!ZxRd}q2HXo-J?*7hfeGRsui=4h4`uqxY+P? z0U&kn zeLZxVERSG~ZQBmr#*EsS5a++A^QhMr48y+w4Z*~w5=#3c?!*eY8###n#@FPQ<0Khh zK?H+t6R=;A0UNY{-wB$FRvo(q+!GR6>%Ujj-5J)c@OF3MeP?y6SYz0GhI2O8n(IRf zJXWiTUJkRlv;oOtqb}4oiM|?@V$dSixGN*&B@M2)iV=4OE2AfR;9Utf1wHlk%6}cL zO$mFK!xwEn0RM%3m-BX(J?=e=5CFN+dEgyBBz4N#&Q#Y*3gVWP6X8K`_nkP>FAV3$6x={+M5L+TV1cAR7KS6c-<`!*^~2HtW0is0Y`SQlV-i9m$j{4QnC8*a9I7S z{P)c+6J8llmO`xU$Q1d#upZX0fByaV-+p%>zt)+BxiY~%>n%CE19_6`^-+2Frkf^N(nlw5Gv~CGgS2hPzb?J*jwF$6}zIJ z6?SE0J9bMV3E16pd2XSKG{=dZwF&%T9Z7&9kSBvy6@9~=4AS*ezog=`yRJGWciIl5 zif{kc4P%GgSW|9n*{m+0=+8+-vG@DrAB5c#8LXq)LetBkhP{<+PVzS~ zbk*}B!-s@CiI&p4(3c@B;}JK>Hm9B+@)boS;KDBA4p3amDgHDQ3(L1ouJH#^V$<_hbl5FY7*@x6Sg|s zNMu=CVVxGFx@jvHh}fa^)FhpBP9>a>oWOgYj%(uqOfu{Xx~|Bu`;K$xrnQ?KI_Fx9mX8aH zfP~b~U{?QGT(EGPIe<_-v`_3b@H6nt>WvZTyczQ0?Tmw5i6|s zOvD~$JH850pi`nTt0*kKNy)GYa{(sKts4}!$Nn1;3cCuzssg9;7jx`@HSYEQ%yXT*f`TJaelKWhZz}&b^@gRLma5L*K-JmX{7r=7vSeIAILzq6 zhiBGBo+wiIJ{6UmJ0;Lo!@XAFOkm{a1gZZ{&}q^DcnYLSHEP6CqK=ED2sP)s8AQHG z^>(#HU-hroB+fVT^`jF^3!`?)fxoJr9I>vL1!QYgTC$!OuxYu}QMv)pbeVKwpIx5tSXTEn>4@!*BlW4}bpQhlg-_KLpD^`rrNf z$Df|VsdLo|#>VFI*DWBt7pNudigUBvBWY2gCL$f;+OA%vo4S?HDg&An($;`;^1T1< z14H^4^iXzgj#qhE;zDGoMC|ZPy2rbU$U}{STD)#VVG)~4OBSLHmHZ&_*OVuqbNIaL zlT$O{J3-^vPuq9#Z*#C&fVoEs{*s3-fTQtj*ErmJ8HJ?Q@hamTGfF`gRf zzGGeolRhdkIhskF$od1G{-z&Xt(z3;gePGF25(Z~kXmMP$Gm2=u=ew$|2eoa^V%o& z<;-_sk4%5|<&-y^!N{t_4foRAP(&a8^4)*ne&ifDzh|&aO@5K*^slu=8nC*>gi7xZ zcsv8KiU~poz>E{x;k?cC|Nb#wNj#=@-I)4B` zct=c|EDB=uH$#WZ=O5vxf0{+E0k2ohBh+=%LVrAu!J&YW=qUGmXr)#oiJDRi_h>L zQazLjkbmIIN>E~iq17WTZr48IGGUZfBYmsQQH^8D7O6VT7j38)o9f+3_7xWQLon4P zUglUSL=K^g@!?(;vE^)XvYQvC2WM7|Fer>7+HB;lF-pGFYDcX z_p&9c#+s*5L-5>z%U`Iy+ln;3(1C;B485EtyqglM4pt3J-PcM1-XjY-1l8_97z~o=V#{08g79L~P`gogd9XU{@%xX(=sjITL6~JlbpUx=iE>_; z9{9jDm3o^M)YjY0`JVPLdEnIBO$h~QqVavGbA<>~$uVnNw;2qfpY*KuV$Cm&W6GcIW#TbsbN*7^x+NB4oW(x za}vU~^OKO(rylSSYucOd-()3e~h*r6Q->JhR#XF@T(tw{OSMvb!~#I$?sEusFnQ&!#ZTZDCwdl zioRxwzV@4HYie0?j4=JygFd{t^~|#MT#Cu%wHt6sdOv!8o-pVY|2ty}m&)O0^gQah zKZtX$=ZbK**KPSV zCw1zWb$z{cumXO+r8aLcP0SjAHDk@tPXoDTcwDmBNDdVmQVy!;1{?_1Tp%Iy9)Zo$ zf*buKUSt$*8olbW?XaT!0tSh1$CAr4P~R^=eUUX?TjX{a%7`@9GDjb~aGI)y7`WS; z066gqM`TG&XvcZ3RUg6no6-I1G;gEBk5x73QmDa++@z*wy(Lcf3+G%lJ}^7@@2cLf z0xesmI2e@D{;xMpgVcL9O{)qnwho{{@*@eRX*g%W6~kfBTPsvIk{asb(Aqhr1DG?3 zCPSsM)YlLuxm-|w0V44o2I8_O90wVv|HANo0bi!LIkgC2trL8oG)R94IWczYFsNQ; zi4vl3wdX3#^$;a}V}UTt@DrWcgu+X?f(2;TS(rGY?SG7YK6jS_eJowzT!06hYbm#q zL&VOUXO@HNo4|5=L|~qS05&cgi@N4?E?2HclbVx^I8fSoIKKzyn{DZTg_;xtJi`be zFJ<$dNT}{9uz8uT%MUprq`;s=e5hwZ806{Zo>Jzb9m8`L; z)Y{f8>t`B#Bt2_JG&P*vm4^a-mRiCm^JrtmG^N1gfTjoC06?_C&la_$(x*Yb5A&1g z7QGGLd%ZxZx02y^&iL$rglL4!6}c44@#V4t=mXK7kP7dsig$?PKK3_*qmSj*EAL;u z4AcFs$3i7;7_%BN)=IZtAl67?9yOp0wB6eFoF2rhQ^=%w6+lt8SZ6 zjs*$u6%=blC{ZeWd^mvKR9{>($m19#M~Q-q=<3-b zs+oGf2n7~2$EmTbnpRTdi(XCuB`)l6OXKJj5Wv<7dJ&cbD?fDeYKe6ouA1PrU1!2Z zZDSE-V&r~G#hb}PfQ=^s;?|wSAfN>DFgUHpJ8p)_jjBRdpci&^X~s-}Ng`oG62V)p z`7&uPWC@m;|E_Q7ztHZvx#`rWbqVz})zuuVE%Z!Jvf?A2$Scl~5~h{;n2|F&aJ5t_ z3QQ4jo}@LahhYZgaGa)>fkc>p z*1U{A${_RyxA|{rs}&Ahp?C1-Vb&@*fVrx@M2ZyXMReLwCrpHb2B~3CgtJF{=^d)D zj|W=p(Vd)6>ix{9LZ}f3y)+t6`yw04pLxmhmq^w@x;B||)=~aLZ+Om#eVCCgaoPVEG*5<~}k76M+&(Mc3^dj9VrRD*-94u|mhhUAzIWwgJ`624w8Mb)74T z+sNRotkuY&)fWjN=+l{a(x=-g9gv7n+>Ua#Y<<0&3xD-T4z4b7A`JNW6eW&%k%@?- z>hdNF4(tbRx_t);inwyC3a+vUGEvvnR}WeZQhnyOdYDLZH48Rf7W@IYCiaGbzEUO= z5P-ZBOqo4%ed$5v zID9tP42I0q(S5Z#9Cn-TT@HtAIoFl^W&?R$^l-_VR9)518gzO!^!E>RA?^*Wd&zHi zFxF9%i+XjP8{HsOc@df=WykQtQ?RvlBr)ppmm-2JU8b?lNRJ~tzk(dO0{Z=#JLK=b z{m0+`&t>KM$+Z@nCHn*~N6kCh2%QhYAJ5X7SVcH+nsd6>Ih@7jy2ao>e?x0!Hd3zR z2=OY}iDCjoPEEie@Tg+l=o<7(X5-5_@hcRF+Fi=;Icx$eUA32|^%^_rwmNF6QA$Hy z!otN3K?#r%4JVP}(fsR4hICY4>W}G{fBAp@^!q>kR6oB1BvEU8&r^PWI94CM1(S?C z^NWw8DKK=0J+33x!-hFHFwGGVJjp-qH`iBxY>>mXAL1{KA4}SC(LckSZHxf*9veA> z+LXPeI=~^S$B|F9Gs5l)D~vj?n{92RLw%~JO4U|CgclVc&?w{QT^p&je05F($Y8|1 z0agR$fEO&uRcVljkcq&Sb6OR)cCt9K2#sGfArSWIyJmSA@_jyqH}b=xf|+3Z$(v-kD*Mp;*4vZ ztZLNEgmvR;0hnGY9@#%UH!<;+dsMouMQW0&)H3JtiEq4!`GsWtI8>>k-pw@CXE2Ek z9b7Y?K`+8JS5fcFl+}w|=I1YT@rJL|WxbfK{;FTTvCb!K1Y(ckli}^K^(0X~b=6Y~ zKEX2pmd{xiNweJ*t5b(RI)L20^#j78ZIwLJ7L= z5~M4ix4ZNtqS>TwC6qc3s9Spp!iDjICcnEpAKWvXb!{*8)|nOsMTHey2wysXF9}z$ zS8l!ZNw|Hc;+!tu9U_9xZ0ij}&7~wO4aLgx@X$*`i0I9sGuHrgAhGQC2s**?5i_GY z^$K=BxcN_WqCb4PvI zdj#P8P)A*#bkxn*QJ1g0g(0DMT3wy0A=WyZ_8qz>4JOr6<#p$q2Yfl|X60me# zeUZ-8TfY_^md9?>MK5w$J12QY?`DX|;Y>V{aLA_f0$yEn_erlD6JJ^?UyX)_>-x2c z#MDq(bR-I$Kd)X@Z&h!}=@SL3W2@UI*mW@d_rs#O zJV|YeH{RZ#dWWXNc2t!QHZE80VZ~g-du14=6)VoGagsO<|0^!?3CHj`D(@XBX1w@ngaH=e#ZzKlx4o#!=h2#M)iA z{cHMqEled=Z#k}Kb52h-2wNlnb%3woM*3WdLFbmdO zA7`uwVn+z7Ik!rOQdSI8C#L2gD_w{Z27r6ysi&R3h6U_1yrG?9N~Gv5mvmktchdzO z5Z6ZW4zw*fKIDZR6}3msK?Ta0ZYck$VmU!bKIhBQCUiU^bDJ*cRMpaN#o)-O@4cTH z2Wi7==U6=laPHT*cCvcTPG+;$i!?{03t?PFHRh}jrs-qR*er|2pF2cnH?L@C*7O4l zCc#eebr$EC1{OKD`vTjt`V3%qYosyupbXX9_;T6`$Uoi#1Qr*JXJoOA82IxO+nTF? zT_u{n21`0QBU$DYv9wL9OLa`(?lu*#@5qGHkO@D7OM;}l%xUnYD-{QdQ!nf@e3MS+ z)N`t8CVh{+qvE7);;(m7bc+|CLDlLn(D1azhNSJs{gz7&p-yhLT7iiZo&{h+<90#K z1pf(P)wTBQ8!YwOI{`$Vkfni;!`l|!Z{`&ops-y1o75-6&YX1HH?XjV3MZq z71pmGW4{)(N#2ts4X&1&GbRilg>>#-iKE|eoQqfjK9$w7;X@$0qCE6b5Z%xq25mjA zSwR9}h3EJ(efE|4MJtxS#K;Ib#sHjojtm!E38Iz<5~u)0K)S!Kev^T$I#+kl35OTl zQ(qYP5kLNv)6ko0Rh4Sh=j;}R5%OkQ4{9u?-uTexAfEuH^V{$KRZTfu{szlPOu%lI z#p|UHmm0#AlC?LePJkac1^~>RrjaG=X#r2zUocIP7ZAPW^WTE~CW{U9D$qYn6oDg5 zGOvb_)|FwsD)i&GCqZ9jg?T~os?4!%m3hs-R0kG{@6qI-E3U(zoDReae$z+^aOn}J z>N^S}r~LaBTI+_ViSWRiPxT|QrL|thIz3w=T<7&y8HriuSA(REibqqOjiupeeRI*v z$>vL}1SAd=V~ib z1$j6TC#n9&(<_743x-0`3(qEg`aeI^_2SP@)q&lM;BCmTncj z!f&d;cWlewxi+BS%~cW7^JBk8QW34(|CB4luyGq^@0IZ~b<_L&x~f(mYZRC@6?0$1Ca?dU^NZpgQsZEE;6@`8AnynvtCR z@YWHUS~Ax<>9sR#x>+lzs)y~gbp%OROC3(f=5h(qkbc{7`YfWkyA~%!96 z;Zfb`*MIllzWd>a|BlOu0fn?-Z_C^R1vcYez)%pH;cmhR#xKE3X-S-jfd6fg)^D5MJ2IM)A>ntya zitN`ecEB12OQT1WGR4`ggdbB3fvOKHO5mHHhuI@1e#8EYnLr`TXu4=stuH zqf7qhd7=R*@@P(^?lxV&0jy2v&z-;N%l_cGE)7h^>kcozPj;}bYN0Gi%cm9g31&Ob zuIj7A7*EZ7{LG@_wP)p@%8d$(nhRd~12f-)C4LW%wL@GR^MLG$3M*Z&nwj0IyCZ3e zx2y#e#}s>h&bX+R2#Huw0$2QrOA)qwS z#Wl9*wJZK?J#PDA%*wzlGo1Q$Mp=QlIybGq5w-%?TwcV0h%}mSoDRM>PR{V77KeI_ z_J_D_xoe7=DZ1t@IhX_Bb4~nAN&L(k57J89mBc+`%~--CQfg(tbF~)gkVB(^%zJ#p z*V&`<^dgDO%#|9X3G%X`9YCEwS`Xi$WPoxpcNQK_?CG1%%rNLEovNgTLn|*H!=%8> zQ{8YG*GAtYi#pzWkzPKqfZCS3*YaFvYq}c@Jz{&5OJ)7Ix`4Tr+gnilr>HF)k0qh$j4y)QZn>iPp=+y% zG8Ik1xSMHMn4_OX2^Lz&5hhdt=sQ5|v4$Hplr7F@<_zy8r3E5=R(Y9pH85zm?Epj( zh=vz<5$A0;vW~6nY$qPrGM4^z-;v@i7n&HQy5hV0DdSxS*PQV*+j@QNs^mCMf^=;s z10g@H6h>@?nxf5vqE2lTgw>dUS#cH2=-bW%T)~26q_)&08H$I}RSCTpg#+`bcY5!R zwD&|W@~OQO;T_un4ufsTxi5AEF3BtFDs+E*IC1evc;^Apr+HGsMl@nG-Yi@^Wk5?7 z)-F*u`M3Eum~T+?J~H0eP4=CZ>{CVC#*yi!rR?iOH)mwkYZjA%gtP1A3NH%3NKL85mC0($ak$16|tY2VCm_oZyC!bb3O;cs|x z3b;7RUbdaqo4w~vx$$Pmp4Q#wo5-LegvAv8MfJ=E^~zvR_yeDheq8t8bM>KhQ&wI(a9kTB}9)6jvCI;Zq(R z<((1)W{M>sKAZ^5*rM7#3e2d{Z=CiXrYlhCny=s zji4p^Zst$nI@0b-75V?Jg)6uVaJJ(lB_Rr9MZ)_MZd;OfV*#CX&5=8-PuKQ*&^5A! zBpL&^j$y;4@Htw?mJny}ZXFM2)|eJA^yhL~FoM$pEM5|UQVZZQ7Q{e|#ltuvUHWM8 z?oEv2>vo=EVmz|BK?bFYL=UA!)Qpu%ZXt88bg7Cl1L&k}vohs(R>n&o4>Uz+@fw-i z!n-HUOPmcfujt$E_+1q?#=*dBt!YiU z>HuD=apUE>%mB3yJ|e<#uQVf<7s%Bw#})5I8(&0~E_Q$oK%E}!8 zYTNs#j84IQhwD}aX5srfaxT8F|NZBf@+?M`py8y9680Rti9a(xJk|bQ@V4I(_f~b; z;H}ZHZUKipXgK5Jk07);>T(+ZV)>Ri{@BMO9G5_E74?m zNTp3Fcd}e;_K|wK3ggp}Yu1@tg{PPIx>YPvP-qJ*S)xMuLkS5#w2&&5tg#Br44o4A z`%PFEkC~3bOeZClZa+rK{;HVT%W;)dpv>!@_7YCk2X2yFO$@c)ZZ0Q49(yE4H<)nzqP~wvMs;jzFT(J7kayM~aU42hopY_fS^l$$*&kpks`sW}1--@VHSFIS* zTLiDV*9-e~`T#=~c#)KM#G-z#6=-DWT1b#&6&3S!=s~R!0S{}VEV^oWYSOUXL@$rE zYwmc%xxNc`sgp!R))%ks-*Qr~H$fwCi@&~3%*8S!3Ax_nDx?l@tF)>uz`MlR zec5nKmcVpQ?*)urP4^Y z9Y@U(p+oWtIA@f~w)n9$M{LYx6RA_C>utL4)+89eC9b`?sm--(Xm<9VO}%KNzi6q9}21 zmbq6Er^x@;@4TZF@4sfij~yn(OXqTi5yDFGg!f`3gH#uXQ1OXj|GNpl>HO~Uww4Ds zYe%>^+k*#k<0fAA$P4AxS~e`cSx@Dwmw95Pe6<(1)S*6%m!OLRou5cJ*i`+qC)UK` zp2g%&)7^P~56u~LJ&Tb{KB$}=gYMuBH}(_;Tg2@}h5Hx$cQDFcHOgLb5{07aS1i>4 ze4g6Dw_5iH8g6TDtV@JdRSXK$9P~+yI9M|Ca!XUHV4IV%fsqD@gUrzDiyL%Te48*O zBDKkgZ6>w%+!={YqynX?gLVRepwHqx9;o7ZY4{+ZH*xHxD)2S`U?8KlBql`!l|MgF z=}Kv*&{Acy*SeX_!p}kO7p@zR9ujImA2FMb;%aF(JXS)KUeZwrXRa21A7^H`e1dci^uj6;aVDTC`p~Huy)+=O>sjHk*RPczwxA5t$KJ zMfHQiZd&(RFLl!6G&j=+U#Ac5vEpB?I}ImqY?F-&C-I2OB%1@^HY@6Yk)|UbxY-8x ziF|K4Bjp~s%5ppqY%$AzN~AfN{^&IyiG0P2}N>=`5UyRRJU}q9N^eekCxVs z=MW&ba$WHRqDo#>kk)C`>}77$xxU0Fe6 zTq^>BDb1w=RIEv#bUBagu?o+BT);2?^3PZ_@aJRG9cTd8acd`tnu-P|f0pMsof>K* z__w`RAvhIEvcPbrv7yrC+T$W3AGBnzSLo`yix2KRd*GMVmM$;H?b79<6h0Q%T!HY@ zXZ0q7a70uDE{U|!RyzPr;Xv7<`Nrt2?(<;^SDL^_@cnv9!$DWh{O_u} zc<^PaPZ3h9oe@UWjx7P4;XQZO1%`=ZA5>+9-L8#ZX4TrIvUaH{h2`Qkop_%d&2Gdd z`g`RhVh%G=fbPS4ic&F5bo(}D{)?hGyQw0(#txUAJc3v*JI$xoAk3SfhC#nu6ro`F z3)zdx31}=oD<#&0JIlm=)mySRsokp~T)Ru}4B^`FC0BRl@$%W$1eOdIgeuG^2BbUC zv^Zic-2l=llhdMd4!41i?47Zv*~~k6AiYEiXi<5jDv_zwTSKI?oJ8S7%*dP(k`A*7 zyTw)O<<4V_iK(b2pg_U!`{ULzj^@-Kp&1rE30?i2gV%2%h5T%Pkx^XpxsL`nSW5Qvh(h5Z0i< zT7V<0qx2-+;^%;}^c`;Tx7|f2RIZ^co$YiHqdq~<-Fw-^Zc_N}5Wzz1v6%pXj;R(@ z5R?UaA$rALnpdu7#G6?mC;aoI>iF+Cpd zPti3gj~|QjMt;vnV%=QhvVGbJaaNhDKBWVqxwz%l@Zd{Yl4FsnFn+b4uyzUE4p}{P znnYyvyTzLmNi=pa*RpWM&6++erR&T*P9G=6~ZausZ|ixYau5UAvI;#w+Tz9fB)Bi|CfJ}E;V|F`UvVRKVSH%+bQ1P= z0>&_eiZN^zg9e#&5o5SYMiy6CXu2E5X~tkqJazAHHFwiL$L0E&Kec58_^y=nTAoL1 z;F&9-JEC~q>O+4zn=Ec?kFYodXgl@Clcays zPytm(r(5>+mfTt`q;i|3!ufqFu~?rpK7)b_N@-~MnsTf42H5#>y|#1JL5E&6(bfIB zz2@O$?dEEOwKI{)s|HlRqtF`xR##Cy1o-C0N_RM~k_9#rJmv1lwI0}#`C2xz%U3`G z&hEQMHlwbFKSn~>1=-pvd*~nX>H!|fdI4YvZz4Dn$|fDlnXQ#-b%y=)<%(~G($Y;Z z!@U&!1c|WP#(;}xyKr#^G<@)}H`|FTr*KD2VH|l?B1uqKc?m{<7rThphqqUX)xCaD zKc8k;rbUwx?xE|O-1l};Q>;sBdjydDR=vh6Y>{G6IWU%&3}}Nm>iXro|L8R$;62LV zlD5N*SNrJWjb{%?OOrV6D1^g{=b4a+7VaM>WD+n!?kl}S$Q+A&tLbIE>?|;8u;g-K z*=$iN9wINDc2B{gVZNBMWI0rXc1Cez_Kf0FLv6(dcNdjR_2qoaCpa&6>d4? zWrhki1hsU*Z7o7#MG6~^?fy!wpU><%gXqt!u}>RsB?E^7(zHyW&R^%w#OLpIg=yX1 zQRv?g_FpnqfmXPM;CaA018K zp|^Bb3JMhz8cmwk2B}*GG|vQhYTlYyi`S;64X<#BOuA zt!ls789GB&qC%AbM^TcR4EOPYl)ta;q1|zksHRI5;MyNoRUvrdpmh|&DIk8w;3fR# z0GxiH=(2H??4?Oa3ujiDqw0ZP?`}CXb%72QbkZRSK=p5Fx*z$1i_=Y)zi8ESsY*B? zcQB@OI_}QwApWfx>gw2z4kAQMC#C-b<}lKQqE{F8y${$|lNa5W|3N~em6xeQ#~A7F zx{fg-28cJ&j@`^TjXr;VZ#W{7vIY88gDzz z2VXj~BQl~O=v-*%^mNm$d)j;jo8I)&b^z-&%1)U{SvGGf2?F$qfMvLfrTGG5q6a0d z+O+M;s$KnwMfrnN71I}(=5TD8OYN#0Q;xI_9A)2a7%t(!4vm|=1Q9M(Si1Uy+oZn+ z%=ddm2rIU@B%Q}GuP%8DtIsfXiGF(-fX-|Bq;)s8zxD7eeL3A?S}dv$Pf6k z0>MgftPfA<>d59erjN36&xw1*=$Tv5)y63u^Wwpzl}cEc1|K;#-;!F3Et92}6VY@S zJPh^!kfwmFLD_lv_nfX(k||k}uN%bV#8OTPV6dT6%<2)Y_F4Cw)}>_!zV5j1!0npW z4p7$mj1c_Izy0CQKm4#9+hNXsuW6Nk=)e2*k3WgE#UN*86nEJHBN18nrBm39m@r_c z&bqdA_i|RNa!J=VS(a|n{VpRhue-*R4PlD2&E~qFQE*;74JpRFxJdS$Y`ma1`wkgk zno~Rn;|DES<9IFzd^L)Y@S9E5)s)3cy2l_Ep?bk*LoJC47iXU93XqbBK_4OM?%V6= zvLV{{os9j5Ua_r0{r2kUb3IyJa0(xK>yyQB>#S9#0;hUAOri$7=>d*&m#)(VYzJBHc+~X?4Catx&Av&?}8QTmb{9ItFk~7=v_8~xl-1Vd>I>G6HJYHnxS~6e%3&Ph&gAv;$PA(E zMr`hVIfE0Ngy6kEFn=V*KBXu4O>z6FugYW`qF%aop>&LWDsvsUCzT0$D`5SCT`636 zrfB5$>B$bUvl;3%(?gdtH)Ij5)&|ByQh-?nrx$M>Oud4g8t>3l<#YjklAdy6%>ebl zyZk$grH>*ZC`=4BGd9!~6eOC|8!}@+<3xv=p)i8t z+G`CNG$G40e<-YyI+JIHd#C6aJY7cM08oaZD9u{wd_pJ1FD5<(!PfU^*6xGBd zU_8Kmnz*p?mA6HtR02vQD335Pd->9{zM>W#Ok>v@58ksE0n=AM1PQiSi95i@EC02U z?FiFafz8QO;*c8uB>1@9dfZXj0Rslmq6i&(H`fX13h=SaxAU2Cxbc*+EL69YW&>i8 zfnzW%seLG%m#J$f8a^zWvlM8nvvoeY(d=!(j|E|hn3JWK7gp}hL2a2ZD&Ad6+GfZc z-UZdKu?Rtguza)iaUqpdE_O<<3Zv7rm+PlL|M<^qi+D6nyNECR!omC&Zn_!~K=DdJ zx4SkvwE&1gu7X%r4y!L*I?c}W`Hplhj=j#6zzJNZ z^>B**hH(|nnN3OCOp&Tqse-kYScfeN$#pJgQKf0;k$|FB!qYO4EzOf&v&jS45&o9q z&?(F(21&%EDKPox;L8&9>QtKAf7Jop* z16UjU&;o!|_>z?AJ+}ZJQp=%nO-djhtPa@V1_sjFz4?TfnNyX7Xv>&|!d zvBOr>93&vPMqNGVpqz!BDA;k78JRL|Ms@?0t=0%ZcLPSfQJU~e3s3VAW*Jxqp&xVr zaLu+!F&ts}_8YK^Y(sxy;HR}{;Fo_|EXM%1z?cdHz<<5Q3>UcX9@@}iNKJ6}>HPHl zU+6n4f~EuY4mA6&`uTQN7CmYHMc=F=6ZjCkAN$Ga2_m$ul%DKW*Jc17lTqq`5uSn| zhm~@frpc5;>()paydx)x&Z?xFMhu=dLRzR6+0ps^1)NxEL+ zX_K_9zMQ@wXh*+m;O2h@zw7u8ziYVQ9?vdpvk=z28Kk^@K!-_do3qZg1K-f=7n!{X)gF{*XWjqit2oLxht*mU4kom)(r0mkg-jX)dt zTitgo%#)aMfucc2Ir5RHy`q=*YXc6DJkX=Wmo-kX5dc3dY@g}CDrO9XR$LgjNl*mM zV!G#aHNghK0Hyb{i&NM(No8YKDm(=Wjtuai|7jF-(Dw=HOq6jeTNQ7pQH1n(t<^9OJ$nqsRY z4wzyk_jKsl{H`pLz1kDygG9THYYBIutM~`RDA!8jkb-;=9&-GQQBd~C?^)by3Y2?9 zU;s9tYIyKfRZ)$$>-vi8x~+0|#YjvyA8ZHC>z^$)Tqm)iSt+Q400EVj@)G*f^VotP zZf$k(yW=aafl>0kr#D7Li};vUrYs*1E>QSa9jO_~jJ#pogQAp62j!$|JaEcF70v=m zK@JbXD#ta~=DD zGu^6ZRAd8fbVax#K&Q%su>5MCs8!(*w}-a>#3tUw-Q%n6zx?xuvjjyK5Th=B*uR0V zi?1-GcI#LAcb;C}tGUP!#>;iEfx7vInT7N1pB{L1dQOT>?3pT7Z#JKx^>OjV7yG36 zD7U-6_(~CL=;iR@(>JaZrp|m6$lWR*h1@t4(Pw-RT`8vA*wldAu^It9C?fF|H7%Uj z;`(((MF>Zx*w1R89`K)!o(hk?osbOUvCY3^qjK5GGmC!j=~$3Z@E}6BH>L{i+In}6 z5ks=J)726i@t*)*Il1*p)A)D4`}(JK?c&e{cowX*TEbeeBevGO?O^DL1D!SCvOg9) zOuKINC9YbP8qFGNMW*4;H@j}=10-HQ21+4-7hsm}zVt@9cG3K4FE;a#tXyD-bh)(? zfNuuu0jSskkMD%;>#(fz6ZgPQ8atmfY{V)9Du+cInrA;yMi=nA!3-5LjJGfc7_pA=}-pk*p6ZAi>NFHu*?{yY;E8474rebAYbW;lh`Mp@! zu7fjg%i@^=@&Q>lbCmHtIou&{K&=R$mjSfKvhoLdp9pezzRW3n&~w1GLbfLe2!4%m zRg4yKEi+1!@0xr4UylTjivM7Y--3uM4Ib6W~L>tcA#^Z+Ph1uA-0unfd zdII?`F}Ki^4zu0m#}9Iq1x%))W9V?QolrCW1QsAG^z^Pp7-9W<&7E(wGMEk3(F0_^ zlU|j`VOoQWR7>VgBDEl<#4kB4U`m`1 z0eZ;hS_`g@Dz?xq+@sjSk`fow-MCdkWt4X)xG3#%~A}mA#}Jq6M?#Gtg}#n>lMe1>zsBUr2=%a&VPZjUY}P6ni|A5 zyari3*==7n8xK^?Mj@HBx)XQ7p!>T<7Y|{TmJUfImYpW7IIIz1BK;Au_*cLD{dYg~ zOC%{4DSElzVy#0W0%PwSb*Fp-db>EiDKz7mda_?JeJOd(8XKU35mi~V>O$eclHjBI zvE}-=^zuR*SWM6Io`LJ1oSKqamy36mu)9Q~`brO*q>81QR4r@9+$LRpuXAk@^-&ji z=dB|N6x}uAo?VF?#Z1WCp?Xe|IZ(~1Era?iS2UITXcI=kcU&np^F6xSGubTY4A?Sr+&1Dgb*K81!IHo#<4 zojE5vDd3yb{xxmwDi#N7=P_k-)nsze@HE5XEu79V+bv@+?Hc@5IkWGfAB)C(E^An% z5?7J&d{KocfN{V#29q{$IjFbYT_=g1VNEaebOHERI=Xr}x{;5rFBPfBK1w|C6Wa@* z5)D?8o!GU0y^$K2W#Qb#Es&^C(n?_Jux5v8e(QHGY_XIHJ&{;<2&S^>zWrM_bO=&i zsu{%u>Z}%I30`Pm&f#JNfCWi%Vx#h8<#G)^;(b@=4!LZIVY}^)U9w_rggn()HC|l1c#DcLiG3&xl!O8xr%zJ)9?}jk%(@A^ zr!KqUtt+=4SzAUnI;qLX+mdv9=hs;v<^#lrMqV0z|6JlVX6Im*O3w@K=wy3dZV2>8;k9 znn!9o9BJ(ZsX%Z7!R}&H!16E#T2MNfy1o@AVXtj>q@^iqqNmH&GwQ99B~WNeSP!BG+0_O~)m6A)}5IavVGfQbx@N1&;1B()-VQ)%>I2l7!_Le0IBeDoHd zvCdi1*K6ZzG}#5vwspe^{_4A5G{_uFwy`|G0q=}9INXc1-E2S>^`tH6ySC;@!l&eP zxd>*(svTqUlTwn|7*qT4;k>yy%e9T6qisW>xk)r_or6_fyA<~xs0{kwEZhi36g$GV zW!g*qxdG+RhgRQdpjJmpuXksb|FbJQr}yvDIoAn=4ystc))N6y#H4(x z8>M7$Q=q)0l@koZv7ygPw8)ECXVJlxc)*&m$gwi1SMAVJKse$Jf2{VOA+LG2MZ3zL z!h1Qo;-!{stgALT0gOc$7ys7ulI%GL6pOI5?76}k*3}&wu=wWMS78E(q)od7^w%pC zre_cd%vSMbE&mHuvptBY&8C`IeRuX#!Xc)PePUbk56j>s6lXV2N;`XzqL-0Nt=GA4 zH`(d}01X|e8zrw@zTWtONr$3GRtH_`MT#MXl%?yad>ypwyrW*7W#p1aj?l?HcXV7| zLL7qS>sBhkHLqf`2dYOJwua8=`Hnr;0EfNIliX=vrHZvJi^mg+Xdv_5mj1`n*1#<; zedh9fz?@S+$;6ixFc%38Q6HXQnt`QZTz_7j$ciXG$S`KL(ST!&&Wlbc5|W$LCpcFb zpk81kVX%xjvlowI=~~pWV*buhWelYs)a6#XD=OX6br+00s2+8lnrF=D38;q)uWzx} z5X-K+p(J+I85{LsOiWvKlVe8!b-len+r(e;)NmrP?4pj%eG?!S>Pxuu@J-xwSJB1d z^kmm?s0=YOT|JRrtG9{(#4EUUgthBCa9qnM`XO?BvGup z%no#kl3ofhe4pfrUE!=Qt}%KPiRIZ&PZr(;+C>kGO|k$V7wcS6UwcEv=Tl452?S?a zx{go6Y_QUaoh^6s$#qeHxB?HRaI9kybTRYLf9f*Dn%adXsDrE(o`l=*wzk*@9kxo` zv^b*phd)rHJ-YKSSp0vreM^reH*)TNe#KoG_X1~;e3MH_hGYZoo`zJg)@`e=M{rLI zkOpJ;-PNAYf4otlJWW;bFdgAt=l@Vo7o+V7K6aZ!S@piayZw9 z6IZYtrsVix7Hh?cn3>ON{v%O(7dw=uHhMYQ*;ca04yP|Kdwf@r2$j2Yn4y>|!v>My z5FixlFwAH&&Dj2m(Nr$beB0fFC}vExPn4h}=BK}1%!C-~W%<4i|)$%!cY65&HJJzLn@$B4QFVe&S@z7PpNpBIE z?#U#w>GM;V>Thw&SzJJ1f5E*hi8@o8jz8aZ=_+?~7>LPEMKfSi5sJS$WhdxU_Z`mH zjS|BWv-7QN;W_Z;hGC96ylbVHgR#VnI>9$_v%o`NO5`t!LRMFO#hkuv3{SXCO=<|* zX`UkHFEjwz*ibsXnIgWT;RLEKw+#TBuXcQy%h-b)Q2F7`zq2)*y7{%eBwCMdJ1QVU zy?SJOo%j1z6?-SZ?z?UG2F@WKR#hulXGPEANPO2Arr;nV>?&@e3l3fB-$pk$!1L9x zW1vBBUYCESrt%z|-SK!@I2PB;B$Rqb*m;+{o3qMk5qfrXe2qd0Yn6of>T>+>4$mtX zew}&%NpO8`<(TRWV>ATuMLjnA7AHQw9pcGDy8UYUjnG9o7qoIKAT3%bW24>U$J{Fh zTngf0{VYEe#IC1d$Wv;mvBJt=EtWX?#W-8m&VOahbwMkdx2V`Rtew>yGeCKycAxOq zErT7HZ&}ng$k+B*j=g--UwciUm~oy?@a!n!>`uI7Bo)x zymy_GKu@(1peoodAdOaNex^vP1`j8hQ<11{t44d9Cu*-3QDeeSn1fK+IZhC1&Vzr$ zPO8GEc8M@XeU9f1W6IhUb=@mDm_gTMmV=o|bHXqYO~%)5VttHAR7b$pFDnJkHF0U& zd9M+MC0KZ3F2Pdv()C8W%sW1#0L_n*paeK*mR_Cr=RGz@*oC~B?g%9}mmA|se61m_ zl}uLHh;f>O>ByF%->nLVKMLyKg3}bLG)YRZj*C{eCBxB-VtZ+|T0+FzWpj#_tuvm; z_07OXH!C>jz3=23By<;JM1>zSmJ<}kQF6$Kkxjj7HB}i&H^@k;LmWxW@?eoyu8t)7 zivJBoD@xJP%bRGxpnpIuI1Ft=TjdChbzx0`3e1a^b> zm?qb*YX!vQu)%rWZ2JVA^CSnD_4v~E8(~Y}O-~cB4wU1#NrKieW8LaP<+gTX>!qpl zTt0Y;qTW(39T1nssXfKvMG99BD*|(BH+@vh-H4=h=Uqc37@FhDKSFDGcGi)4Ot$K7 z=!QQm>077te->IFZ4!u32T=bam}Bf^8gg-DMb+FWU3JfRC8EnoMZhX$(xUDM>o)x5 z;o&yA;*Um`ooX4}T4pbQO`5Ql%=tbCj$NZkS#o%3(xDd4*f{>L(`y{H zr#V;zWgem6{;kvJ%2g75san^g=!>iqHaAV8p=*y^Cf*finBL}e?Ka8H;VuDYhY40N zh2lXSvv9=X*p{UCipB{{{+`YMp73D+qf2EF7I~D7U>&^aB)7zhyf#N1j;;2c)b(iu zd#b$%is*ZP2?JUZZ-kxnp#LO!>M#eE)=hMF>X%J-W(()pE1`Vb!=u@A9#W?+(eO3& zl8DwWY>B6dgb9&uyVS*6t8S^V7n9d2@&aeoh?V}D$COT+}QoDALd=J3R6XbfRT=~`uM@R8gAh5C-A;p^w3?T$(Xw&> zS)pkXYJCyg0oHyY05cCNJQcLn89RSnQf@h?m@xn!e*5FSRMdv&<~#C^8wV6{CEF-S zG+7Q4c7=Ev3B^7NB3FwPdDa<-K1ifSp*Gh*Xu>8?c)4bhwe%QS)OrBY6<)#+~SIy>ZvOA>Hm zi53%=kLWp}jlw#6vI}(u3GURn*fo|I(IylMG)!G$wqff^j452Gz$@t3 zCDuSt+o5;v7{wM!-_?L;0s&l9XC9h90znMkbH!Goxv^gsXOVHmy&{Z8J%Q z?Bt6Lqwqp)N)F@fj#2CsXNli5Feq&7Tf{&9_WAP!o+yn^=fmRMBD1c_B8L2zPr8?Z zrRhX|FO^7b;STVzH zOtC>Uhi<&Yj5=_Y40^_QLM>S&CG&Q04<^K(<~l=+tsJp#CZ=JSqQop&@O38lH641; zQ;1>9Q~VNahp{3&1$wGd`$Gen?mX9U?I_sj<1tgk0_Sx>PYq---ZHJzUTW4a`gtt7 z9@x4L{_n@npa0(z?sfnCkAHso@yBH|)IOS7>>E^chiH)^ew?SV@SZL1 zS3HUCddLe2-5Hi$zC+&>IHksYGs?#@$&OX!DLnGG-2p0Y$<{w*nTVjK)$VKB>j9wm zU_~q`Hji3wSu0he;8m+KmJ6r{L$2Q9;N(DcFv!JgUlK#XqS>+|w7k-gyPA z7-&NG+F9efFIZK$T&-efC2tVa{X48c$v!O4e(ad#EfhRLxL}WI1U+_Zm!@dpsQ(@< z=Xl7^JyyMdF2$R%V`GjtD%!pK_~j2+r}LdBCdgL9ZC2lRCcW1Qg;87@!C2 z+^9@)S{!RV0Ykqg*%DNlXZB_S=v>24Y7QTqq6TohwtHH zG3M;l0PPy=WK!(}w3M!60nE7K5u`{Y<MCQ+S4ZvViLNW_xuqV_$^_yL7$6d^qnB zbhK9}TBnQ_?63`|B=8^tDn^W=H=-z;UNY{+J;!=>)eAd+o$>A*A4FH(>wf1m3Y7U* z|L(7OpK2xLb@`4f%f?-IcxryweKq0OE37=IQE6u>L- zkpd?uCuYFPX)?IZPdtQ$mpv;g4wPA*_$1Xe1gzTXfnG^uh3@!DL)!D@SEmLi=@Z<2 zM@4yp@E`UAX0|L_!YVg8V$a+F{JFRl&}#!WZ1zpA!te?*#QutU#grS1eW;~gaTVy3 zVuv>Dt!wg8t8QZ5^1*xLEn%vj_=UJaZ~xb6E2_8%ymKc?5eq6Ag!dpwz+V8$HY`qg z`7D@z=rSdE0vlD%v6!w5UiNs+bHEJ||KWfh$E3rqR7v*6un`?K-mU2y?>fr}xVt8Bk+~8+&YJhr?;Z8|Uq2CQ7 z+8LbUb?MUk#A z*;TjGd=|!xgiJ|XVMO3zeI?|qR9`Id6gEl;GP(YRP#4eIl8#KPS390c$4B3~ds*PM zs|-qK=ZwBC$mO^#B0V9rhbF2U?9w47zb7(0`CS{La!sss1tGS96u029m zG;`tupXVJIcn1dkIJNM)9msRqjw;{=Pi!mZcwQj7vk6<`v4v3vF6Dt{VHS4cD?*AM zRXuts+0Xy|^6TeMCu|fY$w`ut<)!o0$jN&D@DhF2`n-D*rpfusbzMBhmK8BiGY&5p z4Vv@Xj)|9ZN?j%IU>@|tFD>XkCM{V-2o=*CWN(fyHfY;vW<)&&P(gGBfR2E)eH7~n zfr*E29{jKU1t@mkdz8T8y0tsC^iC*&F;jMy7Oo>*4Ds72x``paRBYa{bo-VPot(x^IE9&h2rA&LtV33{dwjOgpwr#Yq4xQC z^2LFbNsL`{KqfIR1>DlY>lue;RXrQXph|h6I{+G!%3#RU0Py03?<5@fGSV1}npW)Q zW-wI>vUt0mgn1I*c-1aDe={Gq+VM9sWc&QQTH$J`zcPuDDPLaZ?i67p>cgEFnd9Z_ zWEa6eSME+tX|pz(R?l&RAlEv^Y?;O`vlcv7EiuC~gkuth<>6e3GqYi~yb4^6}-n-y0gISB zoLmEipz%V?HJ*nWzU{p$)ek4g%z`+v5w)QN9XEYwiXA-IfG)wFV(Q)8yM>NT#nh4@ z*QF~EGpyJwS8SlyS0aD>}39ic^T*n?Wvm zdP9&fp!%9AUo@nml_Owul>7wq?8 zs#P{*ddlrYi)(v(V(Y2$vIotJr#{Qr+0#cG<312eI90itlRShcj`2cTzWkH1QE|ur zfmx7}7tqgOGyd?i*u_qij#@cbwzRnY6r<#_e{0NM0( z2*V8a^u&jL`Kos1iELZh7k0Y_MF6 zB2yJiF<=;{gK&6t;N2JYEIv76xT9+j0Q+z4b99oPJq)d%X+>^wVMps|tJpa1uq%T% zp7HCH#YSDzJ&<*A0!9zsBt`*D2p@fKzN>Rv)`CA=Swm2vV5pfp7M1Sgw3RDdT0kCZ zV8&-dSkA)lMQ3!&_;$Mlt<~&yk`_>*gO_;)A#A`b7UvS_yn>Yk`67rk^^)di^tOqa9cX`nuE3-IO5P*-l;QywmM&XC)RR~ zhq}DXg&G|*d^km2(UviCi=daI$#=e$>$Iu6m(Nl%e?l{FRcy6w$p2@yA(tdBx=U}V zG%!Y9zY}={08mlfo^Cw!*^29ErkFMHrJ-Uk)ZZlfc)idKvtwxM*{-u~8Q_5Ft=Px5h-&GHCbn5<`JfoEpWBX)BSN*%x% z@x%}{bh|EekM$*oGNTs4Stf!ou^#hJC1Gdz;DP zGnmN5PVhJf{TXh-t#hm2^)T;WBZ$9i90fO0&YVy zy-zX%)ug%`KwP0?pAa607#a0WRW-CSMf+l_T4MW%!q_#^u(fi0+jGOZY*`CsEOC9F`H4gaF|wl=jY-J!qI+;lYSE z?r>AKP&=`_Y$t11gKOiOs!SI`AqDf;gj3#3uy!%`V6fPz$Rmr6&xD>p8Lr{l0Qnw! zBe4B&dhHrmnjv=PX+z{Yg;ED0P#vB}Tr}Ha z#FYV07a%T$C|p~!X}JGXn|$OM8~m77EWhV)LZgi5a#Zr)ZHuOO(NaGoM3pZ&zRvqi zJKAp*)CBTy0L*wT>#1Uz%IXE;zim{dO}9#_uR=BBIq-Rs-|-HOOK|;MUB4DL0AqD_$JfRObD`pLt91tT(;Vd?`TEEtr zxKs)Rw-bDsmXCcNz-#{8^+m3YDWF`{VvLx0Vvge~b0(nWV60o_ zBE7WTj(_o<*3(V%EmR;5j#7oV3gtj5xa;UAsi$tEb*y4tp*UTe*TVPT%7Hb9*Xo-M zv#sR(8`f@AjUi_2o?C!GcS2{tDjy5J0lWSu7c+&R1*X^{C7J66T}Wca_A>>*PQ7iW zUV`4Vl2{#fw+?3EVV3GX!uWfS72nq-4iyYXkS-PhaN zZ<%A=(O_exuA_7(j7w&$As;Pl>PP z!2=*19q@3j9qe!A5}z3d5@ksw-Vj+hb~RSsO2G(-q(J5o_;7*&FIt!czZ4X)<%!Lx zrISx7z`1OXNAmfPGP;XRa#;5m{;^~J$~%r$PFc$>Of=ky!pc>Srk&yYJh#b*x9^&> z*J+#ESjYs#=IQ0U=TnZi#z0b<6V{w=TRz7?Oin#&%YX2 zVx0}evHzzLfa}2gp*7D3VUw#Np|h<_om%Fjl{kT>onnni1q4#N!x|}d!#BVG?NeT) zzAZ8ciOcZSmBfTu$`GMWXXA|kvR7M4!48)X2hrN2mAyi-Nl%J8T8I~fVYQFsZ%ePq zMWL3fU=PcsSJHOJgYp{vi~1b8ylg6BtJU(2X7(;0+**P4B`Z~CaOE-G^)V^x4DmvX z?DWX|2`R4|SvLfRbLOkdPNMBjD7>^MOvbL#;aSz0^1A3z#1Cq)Fo7T>Y*+Qj0wqEE zZ{=(3Dzh8Oa<=p{T`eL!ph@()Nz&&i3y)nkEOKQ6kzcMSg|(X*q#}$6OR=iz8|gqW)#HiFNg^2qPSAz3-9dfTmuR6a&i3Dn7Wb*OdSm|EuSPV@V-OCqCVy zGu1pc*NG|3(Kcc2iEf_JyK|3D#Qq+Yo1VH;tKwP{W|U*+XzSVeF^p@$)GmrFYdavBc)$ocqUY-*!&a(x9s2(N@pL<44}L4u9@lMEDFEidig_9m{3AV){!we zPLQy4SveGaGKXOEG*kK`fjFyYHX4k1IG3G4h!&~5@T*thh*KeU5{_We1Mf|@a!ID1pYsx}2x0Bn%gzI&H0&JL z`vUf9#RGR?Gw$2s*#oQ9Y4M^4bU5C1>9}7!{K=?kJRm0G8fqPfU6%*|0QF|UA_98C z`<+4dyH6i~`R%{{b$Mc`o)9s03-g5Ke9YNcWS#S>f#b6a0!+sNI|i@3(3ndn+mn|W zPB%KnC`d)cy(b_!X&~##dg2{?p|xv+`^(KYGS8m@P&EFubap8<_R-aG4@5Mf^-0X% z*l9+n>B?&d*KoklU3$`~)7=DGa(Xs_D+>6}9^Sash>^3CE!w%6=ZouQlawV%5gUFy z)XWJQEv=Oo_MY;ruLcjN)J_~}n_9{a6bUa@W0Ocp6-LZIdCBY&j69xF{_m$2V|wS8 z3>~WUneyB7GlfG7%Y}zF2S?Z=(axb3-g5>0YC1C5g%_YNc?z7`(_}jdlkM5@L>*L( z1?ET~hWPc|b29Jr504L9vJilG}o{OUq1mq@z0KC=ggR{x%>lFoek)xACh?|81bTAu|86e z5uGD&rwwOgOHwonQLJyfQ7Hn9p8kZJytVDrrsTn5Rx#>_KOwXc@`+q(h@;PAl`4UB zK$=#-n;2u^fmcxXO%y#Av#hlNT`OKeP^wb0o~b#{x2-2$Sa6gfBQMPBEwJKFiY(R^ z&)7VTHbo#Y3@>xvGryUN6l|)q?MVPz=meNY>N6FXaVv50Ccq-{CUEg8aUy}%QBo^R zO1F4Bn3S+n)n01Ton>AeKyDrDV2|#nbo=qcT^}WI|4w&k>|-f!C6LrL*($>INpc9# z)JkIuPX;WO7Ty)_#E8N667)aNVHuAdYtKDDg$@hVSnB1s<Nj1Yxps~&jtSVX=X$!t^I~eu6LZX#@NZ&EAdfiz*bsRkNdb^p5>T@6p4TPl9(LGv zn5Z<9qS^h_`@SdO*BIl`-HED;ka~Blv?XVH?T+Oy*g8vR#bd@*lr|n_$p_;qRIo_! zJderXJ%)cRZUi2C=U99lZzC19@t`Cxf4da6Dl_@It2EfJ-NJ*jYIwt8 zl82q2yxTA^DwCS8)7%M=`gh%Qtm#VJcG^7+c%q^k&bmj`Y-0Dy!^+wcu+@~6Zn@Fo zWH3KH_lx0<1DGe%>eMigeb4r%&-pr;N`pQ4zgxhO@R>$cS{D?#JJbuEEM^^Bq3T0 z(=axh?0F{?6C$fJ!3^60#cr3dvmE}Ty>paqw)M&lL!Ei$0QMv?)pG(t05Q91BoTy# z!*8GjW#$PQs}!|MswuVy=XU=VO;<+PVg4o>JF{n<=!!io8|82MsQFt?LY$u&!+_Fp zrMs@(sA#q5mI&6)A0DTeFjf6xyQG?8L&wIxMV^WKOtHu_y?%`NQkeh^AqF#cfvf}X z6(F&Ky6Mz22~zS~b#y9T;{D@1m*|#mHf>^}f8@~w+FST%5Mn?6_|2EqXaYbp#b9ZN zZLQ*oZC#TQT)$MLaV@m64GJ;~+PLs0zJQcYv~>ktSw#XCkFx3^3PN=4-~t%MsRTD~ zS<9DCU%o3-p{d_qi`W>O=tOk-LYGKDxUc%2WN`1FNm7K}Sj;D50c)dCSSVw%pZh`# z-8ze+A9@k-9mp$rv@*7CNL4kORcivE_DsJc8+MGY!SC_{=3n#I&;N}o7i9sNT><7* zHlB85&rG?u5fd$8wzw(zueWYO8QmP6K(1LbVhe1<7VJn)=_LMTa*FFT>JPOLMVv1~ z!zd_dw^zsAuLITguVDWV`|pS9YGP^+6yRFH%=uo-=iHz~pDIRlO;+q>@Oo|oZWd42 zAmL5DJFw&^>(+6zp*`@mtP!@R+ZB2z8rU^&iAI^t#}OPO=MEHca`0it9D!%t&NdvB z&exvYftnCx6>SX8jU|D}#aXhi;kHY{9X^zo>rk@IZZDc^F3w;TZ# zH0^=!nU8Gh2W9M3F14UW!5A7cCIju_0uKn$>}c)C!=7S!dbMmjy7YD6gC<0tn4+7j+u?q=4^agA{EDXdd zGo_bS_o}h-#8P+Yxm)i7IB}$EDgnH<9-OkypXDarD6-)8*H6z2SpGMTeBiJgNs_0) zoEihJh8@~>SjL%8*U)oy340M4yU12%F~FE(J8)@J$FXojmqm6y{pr)+uV+5gd>2I) z_M7hvu*l~ErxykRmw^qR`>5f$Weg9e8<1qiMg>pb6ah!Kb|dgw1;}fC~qrgdE4eW@Vk|b2e-Q~;;?7Ag?wT?j?m!0d2qwv zTHDSYQ^!EiTsZkWi~fI*gF0pkc)%y^G6k-x3r#LquWeJY>VmIw^*IzuUZ)C5JBw&C z<&SB?9fabxjvAr3kBC z)H!G@YF!##5?&;w;>zsN54h=Th=tyh$n2T3Ji^b~qiV-mxKrM4a{6{f9zm%X(>r*X zC7^n*NluTi(>n%jcezQv=A5{2Vb1Pg@)i;-9Rs4kdBg#GW`oDbc%D;#^c9$t(u;~x zM}S&UtlE^XWF(kJp&?*d;LiFzx5Qf3Iyc3@iss-~u)hDF8&_M*1*o>QdN>)}wvJEyJR``JhV3taAn(p&?qLRJz@6-wnl{f$h5GNHFo?D?FTcN5yz@l>)-+WMw z)D5U3RH>!TbEgVzn&Adsz(B1P^l(}ixc6|-+FT)tO5yl&Q$>un!(@YD@2*NO{4txn_bs1J?EV_>$n*X8Xbc>UTCy;3wLKs0S7kHi@b1K%{&w^ zt|qaNR73#-8VLd#2>~iI-@83Dx_Im^7Y%Q1ez#!-f_;O0o9>;6lnB1tA-sz{C~!rr z&WQa0(kgr(5Iw$$?q1w-t%lXJBu^rzlcN{UdZT=^M zyaUz8Zgm2-^ifoKc^fUy`|4sJ;v)%$JMdmCd{AIqoDlC~hN3EUyKlV9l=qo>Y^b6D z`|+c_9bXQk`GjM#29dQNrf!@{H`PxO!0YiA{7nwDRcpXnvU(f>C()L z;-xb@>v?q#Wt{aCC1WdAu@~B?KYjlAZ>Nj=J=^>J{PFYWrYrtEWT13E@k7Z&^y-px ze984Bvc*_&+GUAXic1J+5FaV+*j-4MFk_;XW#v~u|GAT$)M18T)l$(lR1reWL*1J%f#@2=db_v`=`%O zjdr7()Wxw*McYp5NyKPqIcZMhLJ#nvZF`n&6KtD#^?aT1fabs!#&~nW zLlx{6iP0w>#KrGih;UVc~dMFiy8u#DJSi%-UPmgW~B`SHsGxs`!OJ)5+ zKVd}8``2W4G+(T_UH+@YC>F51bRr|~qJRw{;K!VtK+SdFxznr=+s(Ce@*u$56=!#T z+fDh4$T-(zuIEXmlXbD{7D%g}*tj z99Tr$D!5gfF#{y9LBdU@Z%-T0)IiH=qdVXNyk?mZLL#@<`WxA)8xSul0!!=p4s z+w*u4r#(uwEYEhaw?DvQ?7i4}zRE5Plb&Fx3w54uPw)y&@CvKBumHUWVEpU|;9b>b zzUc@0^XXl3d-PQ!z&2QNehSBIgAMN$husd)eOa7U0l_fXFR=Z9Qb{WP3mS=fD2?`SUXRKH~qI=~12-beLcI1%$sN_fpiyx)J+ zd{_R|y9;ylD05m1X40kkX~O@8a>e=nd!=$kZQ;Sl>^bEM^Je9WS+Li5T0KkTGPwT| zIP`6FRu+T;QV|G`CSUpe=Z}ATynOuqAAZQi;$q(o7hheqQLi`P#|*^-BDF5;lcN!7 z=Zv}6uB2kk@RbX#PY>>Ov~Hl$h5u3u+*prpUX0)V{UcD}Q^4hOEqo+*>RY!BywKAnqHKBDG-3`tjX$keusvn71zEGJ))wIE3g$fR@Dje~ z$bSK+XwCNytmJPyn~XzJbzM$_3%_M$85YQ7B3nh!@C8}$>QgzBykzW8I%wF_(?Ol1BE)PUoxC`KA)1g6$ zahKN5SM6S8g<3)M2;amNuw9q*qTYzAI%^GT zR36y_n_NBl%#uQx2=94yV;OJ)lFMwOu@8UlGzBGefUa@^1;=>h@HT;Zye)NwVd>eD zditH@ZVQL^6iuo*sa&X600IX-rhy|=YN&UtfVs1S#bZSQ>y~q~p&c;lL{mv-T$dMz zNnT5oiQWNK$jty=D*k+1Sin+IYK#pZmWRS^!reUTU*bdGjCvW+pF%UBRuvy|jCT)N zre|)Y5Zc}LrrL2+nd~yOrjj)YvEh77E6>6Nsh4*yE5ODFU*@9L5K{mi`lL>rqT!E6 zi|5y>$6YlWS~s*NCxL1*!#oRA7g(>~sIq-^$H}gtPg`?yMglpZ&0lJzRU;+3hzJLnt-0O9Qq&E^`cPlg@5 zq;o>@R1Jn*yIRCTgFY!e*I?W>!iTAWGAAXDWk8bdrJ?~PuUtp5=xPbc2PEL;vqz`O zfOOQ2>+a6C2jD^Qa@9cLyRO0qrPZt2sbwyPc4c$h7=8ydj8Z|ft0$nY64R74^987bV)dXHt#{N^Hv8^dT#MRwx8b7i zp4dx8<&^AIefNoOLBV$DyC-?|<|NN1Q&!J(3ZUxP>KtDyfU0AN9j}+Kprs4GIhLU< zn4lSrGN2K!JUC;0ik!c!N`N%Kw=RA}b)sGD(cul5M?t8q`cW~uox5)h_kmxu)UvXA z%ByR#lz%Pw_~G}DfA3LdiGJPGwT{UP*$P0PDx3o5Z24IaN>#3?@l2(uSw7|9FL>ca5p<|41mYOzBj7BNbYY3Hk(S3jw zSj>CoEYF3~^0cwb@{T>Fo@?OtXbrkK?lG6+o>0Y8K>!G#hr+lAEJJV$9kVrv6frVu%cR+-S-zhW}Gww6*LTE;Df_F8ll~o%3(IoQ#dD{uUku8W} zj?_c7Dnroitq5+&4J#KJ9P0;U?Nx=#oE1Q_#j4#4_BpTiRXMSvj)x!(dTFa7v7?;h zvm0^&Bbb(X@+|Y_7&5&4B^|P&+eu4~&(QT8ypIwumTG|a*Yr;$?`<65ho`8=SNs&< zP{cHMiTQnMcb3qqo3PRKN*R4+B{*`&JgpTA&H~{>ZxN0c8L-eiIV0~Dq{SqWW+y2q zkePOZ*-?IzLIFQa>TQeWNgNFZ;in^ z5&XHkPLxkqT`UiLp3&|kgpCht(&D!t|A0SPKM3oG|Hlbpm11;~TyS>l-4*ws)QdLu?{U2ZoB32bb} zLVdoTQd3}1X%R}lA*tCSl4>3fTu6YQd5)+0U{hmwI1Ryi#iw3pmSz&&wlnA6l87?l zjF+1uE>deVSC;A6vguuQHu=axTi7b;j$5Q`c`N-oako^WJ!)%J`qlT;G64vH*Q zBoejh5GI4#*a@VgSV6}1bFi__FLSV;{_^P;)Z!I<$;hL}I;K>B8)MiyyZ6@QsQ+|w z*V-RT5E&)!h~i0Bgkq{Od9VE>7?YpG6gGsP3{G`K0Ulu}p_O)d-Kx7bSZk%VxAwO6 zLRmTQ%FEUqQHFIEXR@La4IC%X$5PtOO56Bm2^h{lL|ome)^}v+raLYGFmh$1l!=H3 Rc8__}{SW=un2>}A2LN%6Dr^7% literal 0 HcmV?d00001