diff --git a/MSMLLN/MSMLLN.py b/MSMLLN/MSMLLN.py new file mode 100644 index 0000000..b5d2054 --- /dev/null +++ b/MSMLLN/MSMLLN.py @@ -0,0 +1,22 @@ +# imports +import numpy as np +import matplotlib.pyplot as plt + +# plotting settings +plt.style.use('seaborn') +plt.rcParams['figure.figsize'] = (16, 8) + +np.random.seed(0) +mu, sigma = 0, 1 # mean, standard deviation +x = np.random.normal(mu, sigma, 1000) +cum_sum = np.cumsum(x) +sample_size = np.arange(1, len(x)+1) +averges = np.divide(cum_sum, sample_size) + +plt.xlabel('Size of a sample', fontsize=16) +plt.ylabel('Average', fontsize=16) +plt.axhline(0, ls= '--', c='black', label='mean') +plt.plot(sample_size, averges, + c='r', lw=5, alpha=0.6, label='sample average') +plt.legend(loc="upper right", frameon=True, prop={'size': 14}) +plt.title('Law of Large Numbers', fontsize=20); diff --git a/MSMLLN/MSMLLN.png b/MSMLLN/MSMLLN_R.png similarity index 100% rename from MSMLLN/MSMLLN.png rename to MSMLLN/MSMLLN_R.png diff --git a/MSMLLN/MSMLLN_py.png b/MSMLLN/MSMLLN_py.png new file mode 100644 index 0000000..b608af8 Binary files /dev/null and b/MSMLLN/MSMLLN_py.png differ diff --git a/MSMLLN/Metainfo.txt b/MSMLLN/Metainfo.txt index aa35b58..e244598 100755 --- a/MSMLLN/Metainfo.txt +++ b/MSMLLN/Metainfo.txt @@ -3,9 +3,7 @@ Name of QuantLet : MSMLLN Published in : MSM -Description : 'Plots the points showing law of large numbers. -As the sample size becomes larger, the sample mean converges to -the theoretical (true) mean of the distribution.' +Description : 'Plots the points showing law of large numbers. As the sample size becomes larger, the sample mean converges to the theoretical (true) mean of the distribution.' Keywords : - pdf @@ -21,8 +19,8 @@ See also : - MSMpdfasymmetric - MSMasprob -Author : Xiu Xu +Author : Xiu Xu, Jacek Wiland -Submitted : Thu, November 5 2015 by Chen Huang +Submitted : December 15 2020 Example : Plot of points presenting law of large numbers. diff --git a/MSMLLN/README.md b/MSMLLN/README.md index 991f232..8595782 100644 --- a/MSMLLN/README.md +++ b/MSMLLN/README.md @@ -1,51 +1,42 @@ +
+ +Header Image + +
-[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMLLN** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMLLN +``` +Name of QuantLet: MSMLLN -Published in : MSM +Published in: MSM -Description : 'Plots the points showing law of large numbers. As the sample size becomes larger, -the sample mean converges to the theoretical (true) mean of the distribution.' +Description: Plots the points showing law of large numbers. As the sample size becomes larger, the sample mean converges to the theoretical (true) mean of the distribution. -Keywords : pdf, normal, distribution, mean, plot, parameter, visualization, discrete +Keywords: +- pdf +- normal +- distribution +- mean +- plot +- parameter +- visualization +- discrete -See also : MSMpdfasymmetric, MSMasprob +See also: +- MSMpdfasymmetric +- MSMasprob -Author : Xiu Xu +Author: Xiu Xu, Jacek Wiland -Submitted : Thu, November 5 2015 by Chen Huang +Submitted: December 15 2020 -Example : Plot of points presenting law of large numbers. +Example: Plot of points presenting law of large numbers. ``` +
+Image +
-![Picture1](MSMLLN.png) - - -### R Code: -```r +
+Image +
-# clear history -rm(list = ls(all = TRUE)) -graphics.off() - -n = 1000 -mu = 0 -sig = 1 -y = rnorm(n, mu, sig) -x = matrix(0, nrow = n, ncol = 1) - -for (i in 1:n) { - x[i] = mean(y[1:i]) -} - -# Plot -plot(x, col = "red3", type = "p", pch = 20, lwd = 2.5, ylab = "", xlab = "") -abline(h = 0, col = "blue", pch = 20, lwd = 3.5) - -``` diff --git a/MSM_LIL/README.md b/MSM_LIL/README.md index 593cbe4..e46b2ab 100644 --- a/MSM_LIL/README.md +++ b/MSM_LIL/README.md @@ -1,74 +1,31 @@ - -[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSM_LIL** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSM_LIL - -Published in : MSM - -Description : 'Plots the average of n Bernoulli trials (each taking a value of +/- 1, with -probability 0.5) to show the law of large numbers and the law of the iterated logarithm. Plots of -sample mean (red), its asymptotic standard deviation (dark-green) and its bound given by law of -iterated logarithm (blue).' - -Keywords : bernoulli, random, random-number-generation, simulation, plot - -Author : Chen Huang - -Author [New] : Ya Qian - -Submitted : Fri, October 16 2015 by Shi Chen +
+ +Header Image + +
``` +Name of QuantLet: MSM_LIL -![Picture1](MSM_LIL.png) - +Published in: MSM -### R Code: -```r +Description: Plots the average of n Bernoulli trials (each taking a -## clear history -rm(list = ls(all = TRUE)) -graphics.off() +Keywords: +- bernoulli +- random +- random-number-generation +- simulation +- plot -## Initialize -y = 0 -m = 0 -N1 = 0 -N2 = 0 +Author: Chen Huang -for (n in 1:1e+04) { - ## Simulate the paths of Bernoulli Distribution - y = c(y, (1 + (-1 - 1) * (runif(1) < 0.5))) - ## Calculate the sample mean - m = c(m, mean(y[-1])) - ## Calculate the asymptotic standard deviation - N1 = c(N1, sqrt(1/n)) - ## Calculate the bounds of the sample mean - N2 = c(N2, sqrt(2 * log(log(n))/n)) -} +Author [New]: Ya Qian -## Remove the initial zeros of each vector -m = m[-1] -N1 = N1[-1] -N2 = N2[-1] - -## Plot the sample mean -par(cex.lab = 1.5, cex.axis = 1.5, cex.main = 1.5, pch = 20) -plot(m, ylim = c(-0.2, 0.2), type = "p", col = "red", main = "Law - of the Iterated Logarithm", xlab = "Sample Size", ylab = - "Deviation from Mean", cex = 0.5, bty = "n") -legend(5000, 0.2, c("sqrt(1/n)", "sqrt(2 * log(log(n)) / n)"), - lty = c(1, 1), col = c("dark green", "blue"), box.col = - "white", pt.cex = 1.5 ) - -## Add the asymptotic standard deviation and bounds -lines(N1, lty = 1, lwd = 2, col = "dark green") -lines(-N1, lty = 1, lwd = 2, col = "dark green") -lines(N2, lty = 1, lwd = 2, col = "blue") -lines(-N2, lty = 1, lwd = 2, col = "blue") +Submitted: Fri, October 16 2015 by Shi Chen ``` +
+Image +
+ diff --git a/MSM_VaRandES/Metainfo.txt b/MSM_VaRandES/Metainfo.txt index df49e63..4991489 100755 --- a/MSM_VaRandES/Metainfo.txt +++ b/MSM_VaRandES/Metainfo.txt @@ -13,7 +13,7 @@ Keywords : - cdf - plot -Author : Chen Huang +Author : Chen Huang, Fulvio Raddi Author [New] : Torsten Becker, Viktor Sandor diff --git a/MSM_VaRandES/README.md b/MSM_VaRandES/README.md index fcc0565..56bac70 100644 --- a/MSM_VaRandES/README.md +++ b/MSM_VaRandES/README.md @@ -1,73 +1,32 @@ - -[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSM_VaRandES** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSM_VaRandES - -Published in : MSM - -Description : 'Plots Value at Risk and Expected Shortfall in one figure and shows the relationship -between VaR and ES.' - -Keywords : VaR, expected shortfall, lognormal, pdf, cdf, plot - -Author : Chen Huang - -Author [New] : Torsten Becker, Viktor Sandor - -Submitted : Thu, November 5 2015 by Chen Huang +
+ +Header Image + +
``` +Name of QuantLet: MSM_VaRandES -![Picture1](MSM_VaRandES.png) - - -### R Code: -```r - -# clear all variables -rm(list = ls(all = TRUE)) -graphics.off() +Published in: MSM -dlognormalLoss = function(x) { - dlnorm(x, 0.5, 0.3) # the density function -} +Description: Plots Value at Risk and Expected Shortfall in one figure and shows the relationship between VaR and ES. -plognormalLoss = function(x) { - plnorm(x, 0.5, 0.3) # the distribution function -} +Keywords: +- VaR +- expected shortfall +- lognormal +- pdf +- cdf +- plot -curve(plognormalLoss, 0, 4, xlab = "Loss", ylab = "", lwd = 2) -curve(dlognormalLoss, 0, 4, col = " black", lty = 2, lwd = 2, add = TRUE) +Author: Chen Huang, Fulvio Raddi -# Fill in the part beyond VaR with shadow -x = seq(2.42, 4, length = 100) -y = dlognormalLoss(x) -x = c(2.42, x) -y = c(dlognormalLoss(4), y) -polygon(x, y, col = "grey", border = "grey") -text(3.5, 0.2, expression(P(S > VaR[alpha]) == alpha)) -arrows(3, 0.2, 2.7, 0.05, lwd = 2) +Author [New]: Torsten Becker, Viktor Sandor -mtext(expression(VaR[alpha]), side = 1, at = 2.42) - -# Mark the Expected shortfall -x = seq(2.42, 4, length = 100) -y = plognormalLoss(x) -x = c(0, x, 0) -y = c(0.9, y, plognormalLoss(4)) -polygon(x, y, density = 20, col = "grey", border = "black", angle = 45) -text(0.3, 0.93, expression(1 - alpha == 0.9)) -text(1.6, 0.95, expression(alpha * ES[alpha](X))) -curve(plognormalLoss, 0, 4, lwd = 2, add = TRUE) -curve(dlognormalLoss, 0, 4, col = "black", lty = 2, lwd = 2, add = TRUE) - -segments(2.42, -0.25, 2.42, 0.9) -segments(-0.4, 0.9, 2.42, 0.9) - -legend(x = 2.5, y = 0.5, c("PDF", "CDF"), lty = c(2, 1)) +Submitted: Thu, November 5 2015 by Chen Huang ``` +
+Image +
+ diff --git a/MSM_VaRandES/VaRandES.ipynb b/MSM_VaRandES/VaRandES.ipynb new file mode 100644 index 0000000..ac04c68 --- /dev/null +++ b/MSM_VaRandES/VaRandES.ipynb @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 23, + "id": "8610633f-ea63-410d-9ab0-480b425999ac", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjQAAAHFCAYAAADlrWMiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACge0lEQVR4nOzdd3gUVRfA4d9ueiEJIRUSQu+9I0iRJggoiqCANGmiSFEQxAafinRQaQKCgAIiIEUQIqD03qtICVICJJCEkLrZ+f5Yd5IlCSQhyWyS8z5PntyZnZ05s5PdPblzi05RFAUhhBBCiDxMr3UAQgghhBBPSxIaIYQQQuR5ktAIIYQQIs+ThEYIIYQQeZ4kNEIIIYTI8yShEUIIIUSeJwmNEEIIIfI8SWiEEEIIkedJQiOEEEKIPE8Smnxk8eLF6HQ6Dh8+rHUo+YJOp+Ozzz7L0HbvvPNOzgf0FK5evYpOp1N/7OzsKFKkCHXr1mX48OGcOXMm1XP+/PNPdDodf/75Z6aONXv2bBYvXpyp56R1rN69e+Pq6pqp/TzJ3r17+eyzz4iIiEj1WLNmzWjWrFm2Hu9pmN/P5h9bW1sCAgLo06cPN27cULczv3bmH3t7e7y9vWnUqBFjx44lJCTkiftO+fP+++/n5mk+VkbfgwC3b99m9OjRVK1aFVdXVxwdHSlbtixDhw7l4sWL6nafffaZxfk6OzsTEBBAmzZt+Oabb3jw4EGqfffu3Tvd12vjxo3ZdbriKdlqHYAQIvcMGTKEbt26YTQaiYiI4NixY3z//fd88803TJgwgZEjR6rb1qpVi3379lGpUqVMHWP27Nl4eXnRu3fvDD8nq8fKrL179zJu3Dh69+6Nh4eHxWOzZ8/O0WNn1aJFi6hQoQKxsbHs3LmTCRMm8Ndff3Hq1ClcXFzU7b788kuaN29OUlIS4eHhHDhwgO+//57p06czf/58unfvnu6+UypatGiOn1N2O3jwIO3bt0dRFN555x0aNmyIvb09Fy5cYNmyZdSrV4/79+9bPOf333/H3d2dhIQEbt68ybZt2xg1ahSTJ09mw4YNVK9e3WJ7Jycntm/fnurYj75+QjuS0Ig8ITExUf0vVWRd8eLFadCggbrcrl07RowYwcsvv8yoUaOoUqUKbdu2BcDNzc1i25xgvq65cawnyelkKquqVKlCnTp1ANSE5X//+x+//vqrRZJStmxZi9ewY8eOvPfee7Rs2ZLevXtTrVo1qlatmu6+86qoqChefPFFHB0d2bt3LwEBAepjzZo1Y+DAgfzyyy+pnle7dm28vLzU5ddee4133nmHpk2b0rFjR/7++28cHBzUx/V6veZ/o+Lx5JZTAbR7925atGhBoUKFcHZ25plnnuG3335Lc7uGDRvi6OhIsWLF+Pjjj1mwYAE6nY6rV6+q25UoUYL27dvz+++/U6tWLZycnKhQoQLff/99qn2ePn2aF198kcKFC+Po6EiNGjX44YcfLLYxV6EvXbqU9957j2LFiuHg4MA///yj3oY4f/48bdq0wcXFBX9/f7766isA9u/fT+PGjXFxcaFcuXKp9n337l0GDx5MpUqVcHV1xcfHh+eee45du3Zlwyubvnv37jF48GCKFSuGvb09pUqVYuzYscTHx1tst2rVKurXr4+7uzvOzs6UKlWKvn37qo8bjUY+//xzypcvj5OTEx4eHlSrVo2ZM2dmOTYnJycWLlyInZ0dkydPVtendRvo8uXLvPbaaxQtWhQHBwd8fX1p0aIFx48fB0x/C2fOnOGvv/5Sq+RLlChhsb+0ruvjbm+dOXOGFi1a4OLigre3N++88w4xMTHq4+bbaWnd5kp5y+Kzzz5Ta6BKliypxmc+Zlq3nDJ63cy3HZcuXUrFihVxdnamevXqOXI7wvylmtatpEd5enoyb948DAYD06dPz5bjBwcH8+KLLxIQEICjoyNlypRh4MCBhIWFWWxnvrVz5swZXn/9ddzd3fH19aVv375ERkZabBsVFUX//v0pUqQIrq6uPP/88/z9998Zimf+/PmEhoYyadIki2Qmpc6dO2doX9WrV2fs2LFcu3aNlStXZug5wnrIv7sFzF9//UWrVq2oVq0aCxcuxMHBgdmzZ9OhQweWL19O165dATh58iStWrVSkwJnZ2fmzp3LsmXL0tzviRMneO+99xg9ejS+vr4sWLCAN998kzJlytCkSRMALly4wDPPPIOPjw9ff/01RYoUYdmyZfTu3Zvbt28zatQoi32OGTOGhg0bMnfuXPR6PT4+PoDpv/qXX36ZQYMGMXLkSH766SfGjBlDVFQUq1ev5oMPPiAgIIBvvvmG3r17U6VKFWrXrg2YvqAAPv30U/z8/IiOjmbt2rU0a9aMbdu25Ugbiri4OJo3b86lS5cYN24c1apVY9euXUyYMIHjx4+ryeS+ffvo2rUrXbt25bPPPsPR0ZGQkBCLau5Jkybx2Wef8dFHH9GkSRMSExM5f/58mm1CMqNo0aLUrl2bvXv3YjAY0q0Ja9euHUlJSUyaNInixYsTFhbG3r171eOvXbuWzp074+7urt7CSflfLqR9XUNDQ9M8XmJiIu3atWPgwIGMHj2avXv38vnnnxMSEsKGDRsydY79+vXj3r17fPPNN6xZswZ/f38g/ZqZjF43s99++41Dhw4xfvx4XF1dmTRpEp06deLChQuUKlVK3U6n09G0adNMt00y++effwDw9vbO0PZ169bF39+fnTt3pnosKSkJg8Fgse5JtaCXLl2iYcOG9OvXD3d3d65evcq0adNo3Lgxp06dws7OzmL7V155ha5du/Lmm29y6tQpxowZA6D+w6MoCi+99BJ79+7lk08+oW7duuzZs0etKXySrVu3YmNjQ4cOHTK0/ZN07NiRUaNGsXPnTnr27Gnx2KOvlU6nw8bGJluOK7KBIvKNRYsWKYBy6NChdLdp0KCB4uPjozx48EBdZzAYlCpVqigBAQGK0WhUFEVRXn31VcXFxUW5e/euul1SUpJSqVIlBVCuXLmirg8KClIcHR2VkJAQdV1sbKzi6empDBw4UF332muvKQ4ODsq1a9csYmrbtq3i7OysREREKIqiKDt27FAApUmTJqni79WrlwIoq1evVtclJiYq3t7eCqAcPXpUXR8eHq7Y2NgoI0aMSPf1MBgMSmJiotKiRQulU6dOFo8Byqeffpruc1Nu9/bbb6f7+Ny5cxVA+fnnny3WT5w4UQGUrVu3KoqiKFOmTFEA9XVIS/v27ZUaNWo8MaZHXblyRQGUyZMnp7tN165dFUC5ffu2oijJ12HHjh2KoihKWFiYAigzZsx47LEqV66sNG3aNNX6x13XR4+lKMnXeubMmRbbfvHFFwqg7N692+LcFi1alGq/j17DyZMnp/r7NWvatKlF3Bm9bubj+Pr6KlFRUeq60NBQRa/XKxMmTLB4vo2NjfLcc8+lOv6jzO/n/fv3K4mJicqDBw+UjRs3Kt7e3kqhQoWU0NBQRVGSX7tVq1alu6/69esrTk5Oqfad1k9iYuITYzMzGo1KYmKiEhISogDKunXr1Mc+/fRTBVAmTZpk8ZzBgwcrjo6O6mfN5s2bH3udn/QerFChguLn55fhmM1xpfxsSyk2NlYBlLZt26rrzH+Lj/40atQow8cVOU9uORUgDx8+5MCBA3Tu3Nmi94iNjQ1vvPEG169f58KFC4CpJue5556zuMes1+vp0qVLmvuuUaMGxYsXV5cdHR0pV66cRbX49u3badGiBYGBgRbP7d27NzExMezbt89i/SuvvJLmsXQ6He3atVOXbW1tKVOmDP7+/tSsWVNd7+npiY+PT6qq+blz51KrVi0cHR2xtbXFzs6Obdu2ce7cuTSP97S2b9+Oi4tLqmpvc6PZbdu2Aab/pAG6dOnCzz//bNGTxaxevXqcOHGCwYMHs2XLFqKiorItTkVRHvu4p6cnpUuXZvLkyUybNo1jx45hNBozfZz0rmt6Hm3M2q1bNwB27NiR6WNnRkavm1nz5s0pVKiQuuzr65vm35/BYEj13Mdp0KABdnZ2FCpUiPbt2+Pn58fmzZvx9fXN8D7Su7ZLlizh0KFDFj9PqqG5c+cOgwYNIjAwUH3/BAUFAaT5HurYsaPFcrVq1YiLi+POnTtA8nVM7zrntvReKycnp1Sv1cKFC3M5OvE4ktAUIPfv30dRFLWqPSVzz4bw8HD1d1ofmOl9iBYpUiTVOgcHB2JjY9Xl8PDwDB3bLK1tAZydnXF0dLRYZ29vj6enZ6pt7e3tiYuLU5enTZvGW2+9Rf369Vm9ejX79+/n0KFDPP/88xaxZqfw8HD8/PzQ6XQW6318fLC1tVXPu0mTJvz6668YDAZ69uxJQEAAVapUYfny5epzxowZw5QpU9i/fz9t27alSJEitGjRIlu66oeEhODg4JDm6wimRHLbtm20adOGSZMmUatWLby9vXn33XfT7OqanvSua1psbW1T/W35+fkBqf9esltGr5tZRt4DWWFOOo4dO8bNmzc5efIkjRo1ytQ+rl27lmbvpYoVK1KnTh2Ln8cxGo20bt2aNWvWMGrUKLZt28bBgwfZv38/QJrn+ujrYr4Fad42PDz8sdf5SYoXL87du3d5+PBhhrZ/EnMC+ujrpdfrU71W5cuXz5ZjiuwhCU0BUrhwYfR6Pbdu3Ur12M2bNwHUGpkiRYpw+/btVNul19YhI4oUKZKhY5s9+kWSHZYtW0azZs2YM2cOL7zwAvXr16dOnTqZ+kLOLPNr+eh/fnfu3MFgMFic94svvsi2bduIjIzkzz//JCAggG7duqm1V7a2towYMYKjR49y7949li9fzr///kubNm0sGspm1o0bNzhy5AiNGzd+7H/oQUFBLFy4kNDQUC5cuMDw4cOZPXu2RXfvJ8nMdTUYDKkSB/PfoPkL0JzcPtpQ92kTnsxct5xkTjpq1KiRqWTQ7ODBg4SGhmZL+7DTp09z4sQJJk+ezJAhQ2jWrBl169ZNM5nLqCJFijz2Oj9JmzZtSEpKynSbqvSsX78ewKrGJBIZIwlNAeLi4kL9+vVZs2aNxX9SRqORZcuWERAQQLly5QBo2rQp27dvt+i5YDQaWbVqVZaP36JFC7Zv364mMGZLlizB2dk5V7pE6nS6VI1UT548mep2V3Zq0aIF0dHR/PrrrxbrlyxZoj7+KAcHB5o2bcrEiRMBOHbsWKptPDw86Ny5M2+//Tb37t2z6HmWGbGxsfTr1w+DwZCqYfbjlCtXjo8++oiqVaty9OhRi9izs7brxx9/tFj+6aefgOQvHF9fXxwdHTl58qTFduvWrUu1r0drBx4nK9fN2ty7d49BgwZhZ2fH8OHDn3p/5mT00ffQvHnzsrzP5s2bA+lf5yd588038fPzY9SoUWnepgVYs2ZNhvZ14sQJvvzyS0qUKJHu7XVhvaSXUz60ffv2NL/c2rVrx4QJE2jVqhXNmzfn/fffx97entmzZ3P69GmWL1+ufmCNHTuWDRs20KJFC8aOHYuTkxNz585Vq3X1+sznwp9++ikbN26kefPmfPLJJ3h6evLjjz/y22+/MWnSJNzd3Z/qvDOiffv2/O9//+PTTz+ladOmXLhwgfHjx1OyZMlUPRgy49KlS2mOdVGpUiV69uzJrFmz6NWrF1evXqVq1ars3r2bL7/8knbt2tGyZUsAPvnkE65fv06LFi0ICAggIiKCmTNnYmdnR9OmTQHo0KGDOnaIt7c3ISEhzJgxg6CgIMqWLfvEOK9du8b+/fsxGo1ERkaqA+uFhIQwdepUWrdune5zT548yTvvvMOrr75K2bJlsbe3Z/v27Zw8eZLRo0er21WtWpUVK1awcuVKSpUqhaOjY6rxTzLK3t6eqVOnEh0dTd26ddVeTm3btqVx48aA6Uu2R48efP/995QuXZrq1atz8ODBNL8QzXHMnDmTXr16YWdnR/ny5S3avphl9Lpllq2tLU2bNs1UO5qMuHjxonptzQPrLVy4kKioKJYsWULlypWf+hgVKlSgdOnSjB49GkVR8PT0ZMOGDQQHB2d5n61bt6ZJkyaMGjWKhw8fUqdOHfbs2cPSpUsz9Hx3d3fWrVtH+/btqVmzpsXAehcvXmTZsmWcOHGCl19+2eJ5R44cwd3dncTERHVgvaVLl+Lj48OGDRuwt7fP8jkJjWjYIFlks8f1XCBFz45du3Ypzz33nOLi4qI4OTkpDRo0UDZs2JBqf7t27VLq16+vODg4KH5+fsrIkSPVHh4pe+IEBQUpL7zwQqrnP9prRFEU5dSpU0qHDh0Ud3d3xd7eXqlevXqq3imP67XRq1cvxcXFJc1jVa5cOdX6R2OLj49X3n//faVYsWKKo6OjUqtWLeXXX39VevXqpQQFBVk8l0z0ckrvx/z88PBwZdCgQYq/v79ia2urBAUFKWPGjFHi4uLU/WzcuFFp27atUqxYMcXe3l7x8fFR2rVrp+zatUvdZurUqcozzzyjeHl5Kfb29krx4sWVN998U7l69epjYzT3BDL/2NjYKIULF1Zq166tDBs2TDlz5kyq5zza8+j27dtK7969lQoVKiguLi6Kq6urUq1aNWX69OmKwWBQn3f16lWldevWSqFChRRAfV0fd13T6+Xk4uKinDx5UmnWrJni5OSkeHp6Km+99ZYSHR1t8fzIyEilX79+iq+vr+Li4qJ06NBBuXr1aprXcMyYMUrRokUVvV5vccy0/l4zct0UJf2ebkFBQUqvXr1SbZtWL7BHZaTXoqIkv3bmH1tbW6VIkSJKw4YNlQ8//DDNv42M7jstZ8+eVVq1aqUUKlRIKVy4sPLqq68q165dS/Vap9ebyHzslD3NIiIilL59+yoeHh6Ks7Oz0qpVK+X8+fMZfg8qiqlX2QcffKBUrlxZcXZ2VhwcHJQyZcooAwcOVE6dOpUqLvOPg4OD4u/vr7Ru3VqZOXOmRU81s/Q+d4R10SnKE7o2CJFC69atuXr1aoYHvRJCCCFyg9xyEukaMWIENWvWJDAwkHv37vHjjz8SHBwsXRWFEEJYHUloRLqSkpL45JNPCA0NRafTUalSJZYuXUqPHj20Dk0IIYSwILechBBCCJHnSbdtIYQQQuR5ktAIIYQQIs+ThEYIIYQQeV6eaBRsNBq5efMmhQoVypHh8IUQQgiR/RRF4cGDBxQtWjRLA7JmRp5IaG7evJlqhmYhhBBC5A3//vsvAQEBOXqMPJHQmIclv3LlSrozAedHiYmJbN26ldatW2NnZ6d1OLlGzlvOuyCQ85bzLgju3btHyZIl05xeJLvliYTGfJupUKFCuLm5aRxN7klMTMTZ2Rk3N7cC9QaQ85bzLgjkvOW8C4LExESAXGkuIo2ChRBCCJHnSUIjhBBCiDxPEhohhBBC5Hl5og1NRiUlJan36/KDxMREbG1tiYuLIykpKVv3bW9vn+Nd6IQQQojcki8SGkVRCA0NJSIiQutQspWiKPj5+fHvv/9me4MqvV5PyZIlsbe3z9b9CiGEEFrIFwmNOZnx8fHB2dk53wy+ZzQaiY6OxtXVNVtrU8wDFd66dYvixYvnm9dLCCFEwZXnE5qkpCQ1mSlSpIjW4WQro9FIQkICjo6O2X57yNvbm5s3b2IwGApUF0IhhBD5U55vRGFuM+Ps7KxxJHmL+VZTdrfNEUIIIbSQ5xMaM7ltkjnyegkhhMhP8k1CI4QQQoiCK9MJzc6dO+nQoQNFixZFp9Px66+/PvE5f/31F7Vr18bR0ZFSpUoxd+7crMQqhBBCCJGmTCc0Dx8+pHr16nz77bcZ2v7KlSu0a9eOZ599lmPHjvHhhx/y7rvvsnr16kwHmx+FhoYyZMgQSpUqhYODA4GBgXTo0IFt27YBUK1aNWxsbNDpdDg5OVGiRAm6dOnC9u3bLfZz9epVdDpdqp8ePXpocVpCCCFErsp0L6e2bdvStm3bDG8/d+5cihcvzowZMwCoWLEihw8fZsqUKbzyyiuZPXy+cvXqVRo1aoSHhweTJk2iWrVqJCYmsmXLFt5++23Onj0LwLhx4xgwYAAJCQlcvXqVZcuW0bJlS/73v/8xduxYi33+8ccfVK5cWV12cnLK1XMSQgghtJDj3bb37dtH69atLda1adOGhQsXkpiYmGaX4fj4eOLj49XlqKgoAC5evMidO3cstjUajSQlJREXF4eiKDlwBjln4MCBgOmWnIuLi7r+rbfe4vXXX1dfAycnJ9zd3QFTd+u6devi5eXFJ598Qvv27SlXrhxxcXEAuLi4qNuaxcbGpjp2fHw8iYmJXLp0yepGDDb3vLpw4QI2NjYaR5N75LzlvAsCOe+snbfRCFFReh480PPggQ3R0abyw4c2xMbqiYvTkZCgJz5eR3y8joSElD96EhJ0GAw69Xdiog6DAbWclGRaNv3WYTSC0Wj+DYqCuk5RUH/My0CK9cmdThQl90aHyfEjhYaG4uvra7HO19cXg8FAWFgY/v7+qZ4zYcIExo0bl2r9lStXUnXPtrW1xc/Pj4SEhOwNPIfdv3+f4OBgPvroI2xtbS0SODAlMeZ1BoMh1eP9+/fnq6++4tdff2Xo0KHq+ScmJqbaNi0JCQkkJiby77//YjAYsumsstelS5e0DkETct4Fi5x3/hAToycy0pHISAeiouyJirInOtqe6Gg7Hj60IybGjpiYesTF2RIba0N8vC0JCTYYDHoMBh1JSXqSkkyJhSlJ0FkkC5BXe6bmXty5kjo92kXYXJOSXtfhMWPGMGLECHU5KiqKwMBAHjx4kOrL197eHqPRSExMDBERETg7O9O+vR937uT+xff2NvLLL1exsbHBzc3tsV2j//nnHxRFoUyZMk8cC8ZcC5WSm5sb3t7ehISEkJSUpD7epk0bi+Nu3LiRatWqpdpnUlKSOhJxTiSDp0+f5vjx49SoUYMqVapk+vlubm5qzVxWhYWFsW3bNtzd3WnZsiW2trk/jqTBYOCPP/4gMjKSFi1a4OXl9djts+O80/K01yM7PO565NR5Pyqz1yOnnD59mjNnztC/f/9cOe+0aPn+MF9va7oehw+fpXjx5ri71yQiwonISCciIx2Jjnbg4UMHYmPtiI21Iz7elvh4WxIT9SQl6TEazTXceTXhyCrLOyLmr52Uv3U6BUUxklvDneX4X7Cfnx+hoaEW6+7cuYOtrW26I/s6ODjg4OCQar2bm5vFrRkw1dAYDAZiY2PVx+/e1XPrVu7fRjEajdja2uLh4fHEcV7Mj9vY2Dyx+lGv16e5jaIo6mPmx7/++mtKlChBoUKFsLOzo1ixYmk+18bGBr1ej5ubW7bX0Bw+fJgTJ07QoEED6tSpk+nnK4qCoii4u7tnebyc27dvs2PHDry8vOjQoYMmc1YlJCSwYcMGHjx4wEsvvZSqpvJR2XHeaXna65EdHnc9cuq8H5XZ65FTzNejYcOGADl+3mnR8v1hvt7Ozs45ej0SEuDGjUKEhLgRGupMWJgT9++bak8ePDDVmMTF2ZCQoMNotMF6EhLzP/yg15t+bGxMP7a2YGcHdnY67O3B3h4cHEy/7ewsfz/6uKOjqezomFx2cjKVzb+dnU0/Tk6mH/P2dnam3+b92NqCXp+R10tHeHgSuZWn5nhC07BhQzZs2GCxbuvWrdSpUydbhtw/ffo0devWxdnZWU12fHyMT73fzFAUBaPRiLe3MUPJDEDp0qXR6XRcuHCBF154IdPHvHfvHmFhYQQFBakxgKmNTfXq1TWbzuDw4cMcOHCA+vXra/rluX79ejw9PTVPZu7du0fHjh01/fKU62Gd16NmzZqatPuzhusBsHnz5ixfj/Bwe/7+25OQkEKEhjpz966TeqsnNtaWhAT9f+04cjJJUdDpkhMNc/Lg4KBTEwIXF3B1hUKFwNU1iXv3rlCzZkm8vW3w9ET9cXODwoXBwwMcHa0lscp7Mp3QREdH888//6jLV65c4fjx43h6elK8eHHGjBnDjRs3WLJkCQCDBg3i22+/ZcSIEfTv3599+/axcOFCli9f/tTBHz58mEuXLtG4cWOL3jw7dkQ/9b4zKjExkYiIiAzXzJgVLlyY5557joULFzJw4MBUNU+RkZGpGvemNHfuXPR6PS+88AKKoqjV1uaaGS3Il6eJNX55yvWwvutRUJOZxMREbG1tuX//frrX4/59e06dKsKVK+7cuOHKnTvO3L9vz8OHdiQkZHdtioKtranmwcUF3Nx0uLmBu7spyfDyAm9v8Pc3/QQEQGAg+PjoyEx/isREI5s2naFduyDs7ApOY+jclOmE5vDhwzRv3lxdNrd16dWrF4sXL+bWrVtcu3ZNfbxkyZJs2rSJ4cOHM2vWLIoWLcrXX3/91F22zR8OLVq00Ow/jKwmM2ZTp06lTZs2tGzZkjFjxlC5cmUMBgN//vkn33//PQcOHABMSeTt27dJTEwkJCSEVatWsWTJEj755BNKlixJRESEettIkhn58oTsvR6HDx9m/Pjx6T7+zjvvWPRkPH/+PL/++itnzpwhKioKe3t7ihYtSkREBH379s3U+2TFihXs2rWLb775Ru2N9/PPP7Ns2TKmT59O6dKlLbafPn06f/31F2PHjuX+/fv89NNPPP/88zx48CDfXI+sspb3x+bNm+nQoQPNmnXk2rUKbNlSmKtX3bl1y5n79x2IjbVFUZ6myYCCXm+qLSlUCDw9dfj4gI8PFC1qSkhKloQyZUw/rq5SI5JfZDqhadas2WP/s1i8eHGqdU2bNuXo0aOZPVS6Un44aNXA8WmTGYCgoCD+/PNPpk6dykcffcTt27fx8vKievXqTJ06Vd3uyy+/5Msvv8Te3h4fHx/q1q3LunXraNy4sZrMuLm5ZefpZYp8WJvkx2QGknujjB07Ns1aw+LFi6vl33//nTlz5lC1alVKly6Nt7c35cuX58KFC5w5cyZT75Pw8HDWrFnD0KFDLYYWaN++PWvXrmXVqlWMHj1aXf/jjz+yY8cOBg0aRN26dYmNjWXJkiUcPnyYkSNH5pvrkRVavj/i4vQcO+bD8eMeHD6sEBX1HIsXu5OUlJVbQgo2NqaaFC8vHUWLmmpLSpaEcuWgcmWoUkWHo2NOnImwdrnf7eMpWcOHQ3YkM2Z+fn5MnjyZyZMnp/n4yZMn01yvKIqazHh4eODt7c39+/ezHEdWWcP1kGQmWU5cj0uXLuHs7Ey9evUe+7ceHh7Od999R926dfH19bW4Hi1btsRozFzbtg0bNuDi4qI2njUz9WRsz6pVq7h+/ToBAQH88ccfrFy5kpdffpl27dqRkJDApk2bCAgI4MqVK3h4eGTl1J9aQXt/3L7tyN69/pw65U1ISCHu33fAYNCTmcRFp1NwdQVfXx2BgaZalMqVoU4dqF1bkhWRvjyV0Jw4cYJjx47lm2Qmqx5NZuQ2kyQzAIcOHWL16tWEhYWxfft2ihQpQq9evWjYsCHvvvsuTZo0oUuXLpne76VLlyhRosQT/9ZPnTqFwWAgISEhzeuRmQEcExMTCQ4OpmXLlmk+r2PHjqxfv55Vq1bRvHlzZs+eTePGjenVq5fF9ejbty8jR45k586dtGrVKuMnnQ3y+/sjPNyevXuLcuKEN1euuHHvngNJSRltG6Lg5GS6DVSihI5KlaB+fWjWDIKC5BaQyJo8ldBIMiPJTEqSzCQ7dOgQ3333HeHh4fTo0YNSpUqxevVqZs6cSUxMDNHR0bz44ouZ3m9UVBR3796lbt26aY6XpNfr1feBeUDHkJCQTE2Pkpa///6bBw8epDmGEpgavz///POsX7+eAwcOUK5cOYYPH05iYmKq6xEQEMDhw4dzNaHJj++Py5cLsX17IKdOeXHjhksGG+cqODiAry+UL6+jbl147rlEIiI20bFjO80+v0T+lKcSmpo1a0oyI8kMIMlMSocPH2bt2rXcvn2b9957j6ZNmwKmBuJjxoxh0aJF9O7dO82xnc6fP8+oUaN47bXX6NatW6rHze1nNm3axKZNm1I9/u2331K8eHFu375NSEgIxYsX59q1a0yYMAE7OzsqVKjAs88+S4sWLTL193r+/HkASpUqle42TZo0Ye3atTg6OjJ27FgURUnzepQqVYoTJ05k+NhPK7+8P06eLMK2bYGcO1eYO3ecUwwglx4FFxcoVUpHvXrw/PPw/PM6XF0tt0pMhDT+lIR4ankqoalevbomx5VkJll++bB+WtaUzBw4cIDw8HCCgoLUZAbA9b9vksKFC9OiRYss7d+c0IwZMybNUVwDAwPV61GkSBGmTZtGaGgohw4d4tSpU+rPnj17GD9+fIbfO/fu3UOn06Xb2D0mJoavv/4aMNUiRUdHs3Xr1jSvh4eHB5GRkSQlJeX43EF5+f1x65YzmzaV4MgRH27edHlCAmOqeSlZ0pS8tGsHHTroeGRmGiFyVZ5KaLSQkWTGaDRy7949EhISiI+PJykpCU9PTzw9PbMlBmtOZmJjY1m2bBl79uzhwYMHBAQE8Morr9CkSZMM7fPvv//mxx9/5Pz58yiKQtmyZenevTsVKlRIc3tJZpKZr0e1atXYunVrqqEQzI1we/Toke4XedmyZVm2bFmatTdgSmjs7e2pV69emvtI63oUL16c4sWL88orrxAZGclHH33EiRMnuH79OoGBgSQmJvLTTz+xY8cOdDod7733Hps3b6Zly5bUrFkTML3G6Y2ibTAYmDBhAqGhoXz44YdMnDiRGTNmUKZMmTSvh52dHYqikJCQkKOzz+e1ZMZggJ07i7F1axCXLrkTH/+4W0gKbm5QubKONm2gZ08dJUvmyCkIkWWS0DxGRmtmkpKSiIqKwsHBARcXl2yfmyUyMtIqkxkwTSR68eJFevXqRdGiRdm5cydTpkxBURSL2oK0XLx4kTFjxlC2bFmGDx+OoiisWbOGjz/+mP/9739UrFjRYntJZpKlvB7u7u4oipIqli1btgCmpCU95nnH0nPp0iWKFy+e4WTmUe7u7pQvX56QkBB1zrBFixYRHh7OvHnz+P3339VBOGvUqKE+zzwlR1xcHI6PdGv55ptvOH36NB9//DFVqlShRIkSXLhwgX79+qV5PaKjo7Gzs5NkBoiOtmXjxpLs3FmMGzdcHjPei4K7O9Srp6NTJ3j9dR0adRQTIsMkoUlHZm4z2dnZqff6zclNdlAUBZ1OZ7XJzOHDhzl+/LhFu41q1apx584dFi1aROPGjR9bxb9s2TJcXFwYN26cWkNQvXp1BgwYwOLFi5k4caK6rSQzyR69HubbQpGRkeo2//zzj5rQZHVE2ocPH3L79m2qVq2a6rFHr0d0dHSaNZLR0dEcP34cLy8vSpQowYMHD9i6dSvz58/HwcGBcuXKsXDhQj788EOL5wUEBABw69YtSqaoCli2bBk7duzgnXfeoUqVKmzYsIHixYtz5coV9u7dm2byFhoaSmBgYJZeg4yw9mQmKsqOn38uy+7dRbl3z5H0amEcHBQqV9bx4oswaJBpMDoh8hJJaNJgLW1mIiMj8fDwwN3d/YnJTGRkJJGRkeqw4kWKFMHV1ZVr167h6uqa5dtfj/uw3r9/P05OTjRu3NhifYsWLZg6dSp///13qlqWlM6fP0+dOnUsbnc4OztTuXJl9u3bx7179yhSpIgkMymkdT2KFy+Ou7s769evx9fXF51Ox/fff88zzzzDrl272LJlC23atMHb2ztTx7p06RKKouDo6Kg20gVT+5bdu3fj5+enXo9p06aRkJDAs88+S/HixTEajVy7do1Nmzbx4MEDPv74Y2xsbDh58iSlSpWicOHCgOn2UVBQEPXq1bM4tnnAzAsXLqgJze+//87PP/9Mly5daNasmXo9unXrhsFgYPPmzbzyyitq2yEw3Xa7ePEiLVu2zPyLnQHWmszExOhZu7YM27cHcPeuM2knMQre3tC6tY4RI6BWLekuLfI2SWgeYS3JTEREhNpN9knJTGhoKA8fPsTT0xMHBwfu37/P7du3MRqNGI3Gxw4qlpSUlGZ3XIAjR45w4MABGjZsmOaHdUhICAEBAalqYcxfQCEhIY9NaMzJ16PM5xsSEoLBYJBk5j/pfXmaezMtWLCAmTNn4ujoyPPPP88bb7yBs7Mza9asoUiRIpnuSm2u+dmwYUOqCWYB3nrrLfV6NG/enAMHDrB+/XoiIiL+m6zVm1q1atGpUyd8/vt3//79+xbJdXBwMMWKFUu1b29vbypVqsTBgwd5/vnnOXz4MHPnzqVZs2Z06dIl1fXo0qULu3fvZuPGjbz22mvqfk6dOsXDhw9p1qxZps49I6wtmXnhhQ788UcZ1q8vxc2brqSVxOh0CqVLQ+fOOoYPl1oYkb9IQpOCNSUz5ttMT2Lu4eHr60uhQoUA0Ol03Lhxg7CwMLy8vNIcmCwuLo67d+/yzjvvEBIS8thjpDcY24MHD9L8cjf/h/zgwYPH7jcwMJC///4bo9GoxpiUlMTff/8NwI0bNzhy5IgkMzz5y7NSpUpMmzYt1fq3336bt99+O0vH7NSpE506dVKXH1dT1qJFiwz1pCpcuDAXL17kwYMHnD9/nuPHj+Pn55fmth07dmTSpEmEh4dTp04dfv3113SvR1BQEOvWrUu1j23btlGhQoVUcz49LWtKZnS6qpw69Q7LlvmkObCdTqdQtiz066djyBAZaVfkX5LQ/Ce3k5nY2Fj69+/Pb7/9BpgaZ/r6+tK8eXMGDhzI/fv3LQZCc3V1JSAggEaNGvHWW2+pH9CRkZFs3ryZTz75JNUxPv30U4YOHZrm8e3t7SlcuDAffPABsbGxFo+dO3eO06dPU6VKFSpWrPjY21WPe52e9Bq2b9+eb775hnnz5tGlSxeMRiMrVqzgzp07gGlk6IoVK0oyY0Vfnk+bXNatW5c9e/bQv39/vLy8+N///sfEiRP57rvvGDhwoMW2DRs2pGzZsqxatYpBgwZl+nrcunWL3bt38/nnn2cp1vQ87nooiqIOMOjg4JBjnyM3btxl+nQX/v33B2JjPUhdG6NQogS88YaOUaNSjwUjRH4kCQ3a1MyYe100bdqUKVOmkJiYyO7du/nkk09QFIXBgwcDpgn3atSoQUJCAmfPnmXu3Lk8++yzLF++nMaNGxMfH4+DgwOFChXi0KFDgOmL+MaNG5QuXTrdc9Hr9dja2hIYGKjO1A2m20whISG0bNmS2rVrA6TbsLdQoUJp1sJER0cDWLRlSEurVq2Iiori559/ZvPmzQBUqFCB1q1b8/vvv+Pt7S3JTD5KZsCUSI8aNcpi3axZs9JsuKzT6XjnnXc4cOAAcXFx/Pbbb5m6Hnfv3mXAgAFUqlQpy/E+6knXIz4+Xq3R/Pnnn1P10HpaoaFOfPNNWU6fLoaipP74dndXeO01HZ9/riONYYOEyNcKfEKj1W0mW1tb7OzscHFxoXTp0kRERPDSSy9x8uRJgoOD+eCDDwDTbZmiRYsCUKJECZ5//nlefPFFhgwZwr59+wBTwqHT6dQP+bt37+Ll5aU2vEzLk245BQcHq+X58+en+QUSFBTErl27Ug1YdvXqVfXxJ3nllVfo2LEjN2/exMnJCUVR+OKLL3B0dKRbt26SzOSjZCYrgoKC8Pf3z9L1qFatWrpTJ2SFltfj0CEfFi+uyL//FuLR2hi9XqF+fR3/+x+0aCENe0XBVaATGmtoMwNYtJlxdnYmMTEx3W31ej2DBg2iR48enDx5Em9vb4tGvfHx8Rbdd9Pz6C2nR28zpZTeLaeGDRuydetW9u7dy7PPPquu3759O56enpQrV+6JcYCptiooKIjbt2+zYsUKbt68SZs2bZ5Yw5MTJJlJpnUyA3I9Nm0K4qefyhEVlbqmx8tLYdAgHWPHSrsYISAfJzSzZs1i9uzZ6T6uKApGo5EqVaqwatUqi2Tm9ddf5+TJk088xuDBg9UGlzExMWqvIjB9EJtvvTg7O6c703BiYqKazJw8eZJffvnliQPSmcfauHXrFn5+fsTGxhIVFUWxYsXUsWscHR05ePAg7u7uafYkMt9yKlGiBPv37+fff/+ldevWmfqwrl27NjVq1GDOnDnExMTg7+/Pzp07OXr0KCNGjLCotTl9+jQfffQRr732mtoLJSQkhL1791KmTBmio6PZsmULly5dIjAwMM15hXKatXx5Hjt2TJIZrOd65HYyYzTCypVl+fXX0sTGPtrDUaFqVZg8WUebNlIbI0RK+TahefDgATdv3nzidoGBgalqZsLDwzP03JTtR+7cuWPRFiU6OlpNaIKCglIlNOah2Ldv306NGjVISkoiMTGRdu3aMXHixFQNdR99LpiSEj8/P2xsbHBxceHHH3/E1dWVwoULc//+fbX2yd3dPd19nT59+qk+rMeMGcOyZcv46aef1KkP3n///VRTH5gTSHPCB6bbbidPnmT9+vXExsbi4uJC+/bt6dKlS7pD8ecUa/nyBNMXqCQz1nE9cjOZMRrhhx8qsnFjCRITLT+abWwU2rfX8fXXOooXz9EwhMiz8m1CU6hQIbXtSUrmL1adTodOp0tzwr0iRYqk+dy0jmFWokSJDMdm7pptNBpp1KgR06dPx9bWFn9/f3UMlmvXrqX7fHO35qCgIJycnPD09MTGxuaJNTuPSkhI4MSJE0/1Ye3k5ET//v3p37//Y7erWrUq69evt1hXrFgxhg0blurLU1GULI9umxXW8uV57NgxatSoQZ06dahVq5YmMUgykyy3khmjEVatKssvv5QhIcHyI9neXqFnTx0zZ8rEj0I8Sb5NaNIafyOjbWaWL1+eY3GlHGfG3t4eV1dXddqEjDAajcybN4+goKCnavAYGxtLfHw81atXT3ciyJwmX57JDh8+zNGjR6lRo4Y6QWNuk+uRLLeSmQ0bSvLTTxVT3VpydlZ45x0dX3yhI407xkKINBSYt4o1NAB+dNC89NrVpHTv3j1u375NbGys2m376NGjrFy58rHzJD3Ow4cPiYmJwcHBgSpVqljcKsst8uWZzPzl2bBhQ02OD9ZxPRITE63qeuRkMnP4sA8zZ1YnMtKyNa+jo8IHH+j45BMdGfh4EEKkUCASGmtMZjI60eRLL70EmBoWBwYG0rhxY2bMmJGpWp2UHj58yMOHD3F2diYmJiZL+3ha1vDlaW3JTP369alZs2au3mozs4brAbB582aruh45kczcuOHMxIl1uHrVjZTdr+3tFd5+W8ekSVIjI0RW5fu3jjUnM4/rhVW8eHHu37+fof1369YtQ72CzMmMi4uLZjN3W8OXpzUmM3Xq1CmwyYx5Tq/79+9b1fXITnFxeqZNq8X+/X6kTGT0eiO9einMnWuDRnmkEPlGvq7UtOZkJrelTGZcXFw0icEavjytNZnRgrVcD/Mo0e3atcuX12Pz5uJ07/48+/f7k5zMKDRtamTx4t+ZN88oyYwQ2SDf1tBIMpNMkhkTSWaSWdP1MA9/4O3tnesxQM5dj1u3nJk0qQk3bhSyWF+qlMLKlTqqVzewaVP6g2gKITInX9bQSDKTTJIZE0lmklnb9WjXrl2uH98s565Hd4YNa2uRzDg5KXz/PVy6pEOjSy9EvpanamhCQ0NxcnKyWOfo6EiRIkUwGAzodDoMBgNRUVHqYHNa9OBRFIWoqCiSkpJwc3MDeOx0Bo9jY2NjMbVBZsTGxhITE4OzszP29vYWMRgMBpKSkggLCyMhISFL+8+IsLAwgoOD8fDwoGHDhkRERKS7bcrE08XFhYcPH6b7eGYkJiYSHBzM/fv3adOmDTY2NoSFhWVpXxmNI61tTpw4wbFjx6hZsyalSpXi3r17qbZxdHQkLi4uy7E9KY67d++yZcsWChcuTOPGjdUeb9l9nMdJSEhg69at3Lt3j+effx4HBwfi4uKe+B7Jrn9MzPs5duwYR48epVatWpQvXz7NiVYz6/x5J+A3oB3JTaIUXn5Zx/LlOrm1JEQO0ilatETMpKioqHRHuy1evDhz587VrLo6L7t79y6DBg167CB+QoiM6g58AyRPClu0qMK6dWnXyCQmJrJp0ybatWunWQ2uFuS8C9Z5h4eH4+XlRWRkpPoPfk7J87ecwsPDc7SGIT8z12YJIZ6GN7AaWEZyMnOT4cMjuHFDbi8JkVvy1C2nkJAQihQpkmp9WFgYDx8+xNvbGycnJ81mzc5uiqIQHR2Nq6trtp6T0WgkNDSUwoUL8++//1rd65WYmMiWLVto06ZNgfpPRs477533uHE2TJnigKKkfA8tA95l/Hip+RQiN+WphCa9hq3Ozs6EhoY+VbsIa6QoCrGxsTmSpOn1eoKCgjQbRO1xEhMTcXR01HS8HC3Ieeed846KgiZN4MSJ5HU6HQwdGseMGW/8t2xd/ygIkd/lqYQmPTqdDn9/f3x8fLLc+NYaJSYmsnPnTpo0aZLtH/T29vYZmnpBCGEpOBhefBFiY5PX+fub1pcokcSMGZqFJkSBli8SGjMbG5ssz29kjWxsbDAYDDg6OuaZ/1yFyM/efhseHeC7a1f46SfQ6+GRjnlCiFyUrxIaIYTICdHR0KABnDmTvM7ODpYuNSU0QgjtSUIjhBCPcfIkNG4MKYepKVUK9uwBPz/t4hJCWJJGFEIIkY5Fi6BmTctkpndvuHRJkhkhrI3U0AghRBr69jUlNGZ6PXz/PfTqpV1MQoj0SUIjhBApGAym9jJHjiSvc3Mz3WKqUkW7uIQQjycJjRBC/OfePahWDW7cSF5XpQrs2weurtrFJYR4MmlDI4QQwLlzEBRkmcx06wanTkkyI0ReIAmNEKLA27YNqlc3dc82GzcOfvxRu5iEEJkjt5yEEAXawoXQvz8oimlZr4dly+D117WNSwiROZLQCCEKrGnT4L33kpcdHGDHDmjYULuYhBBZIwmNEKJA+uQT+N//kpc9POD4cVM7GiFE3iMJjRCiwBk6FL7+OnnZxwcuXDAlNUKIvEkaBQuhsSFDhlC4cGGcnJx46aWXcHBwwNnZmTJlyjBgwABCQkK0DjFf6dXLMpkpXhyuXJFkRoi8ThIaITRmMBiIiIggKSkJAEVRiI2N5dKlS8yfP58SJUpQrlw5tm3bpnGkeV+XLrBkSfJyhQpw8SI4O2sXkxAie0hCI0Qu2rRpEzdv3rRYN3r0aAB0Oh02NjbY2Niket7Fixdp2bIlR48ezZU486MePWDVquTl2rVNs2fb22sXkxAi+0hCI0Qu6du3Ly+88AItWrSwWB8UFMQ///xDfHw8q1evJjY2lvv37/P1119TrVo1dbuyZctSq1at3A47X+jTx3JMmUaN4OBBUxdtIUT+IG9nIXKY0WjkmWeeYdF/Mx2eP3+er776ymKb0qVLWyx7eHgwZMgQTpw4wY0bN2jcuDFr167NtZjzkwEDYPHi5OV69WDnTklmhMhv5C0tRA4yGo00bNiQffv2qesqV67MgAEDMryPokWLsmvXLipXrmyxfsyYMVSrVg2DwZBt8eY3Q4bA/PnJy7VqmeZlkmRGiPxH3tZC5BCj0UiDBg04ePCguu7VV1/l9OnTeHp6PtW+N2/ezFdffcWpU6eoVKkSCQkJTxtuvjNmDHz7bfJy1apw6JAkM0LkV/LWFiKHvPbaaxw6dEhd7t69Oz///HO27Hv79u1q+eLFi5QrV464uLhs2Xd+MHMmpLyrV7GiadA8SWaEyL/k7S1EDvjmm29YlaJLTbdu3Vi2bFm27X/y5MkMHz5cXQ4JCaFOnToYjcZsO0Ze9fPPMGxY8nKpUnDypCQzQuR38hYXIpsdOnSIoUOHqst16tThxxyYtnnatGl8+OGH6vKZM2do165dth8nL9m503JSSW9vOHUKbGVMdCHyPUlohMhmhw8fRqfTAeDp6cmuXbty7FhffPEFAwcOVJe3bNnC22+/nWPHs2ZnzkDLlmCupHJ1hdOnZdA8IQoKSWiEyGZvvfUWly9fpnbt2uzfvx9HR8ccPd7cuXNp1aqVujx79uxsa6uTV4SGmrpjJyaalu3t4ehR0xxNQoiCIUsJzezZsylZsiSOjo7Url37if+B/vjjj1SvXh1nZ2f8/f3p06cP4eHhWQpYiLwgKCiIw4cPU7Zs2Vw53u+//0758uXV5e7du3Pnzp1cObbWEhKgenWIiTEt29jAn39CLr30QggrkemEZuXKlQwbNoyxY8dy7Ngxnn32Wdq2bcu1a9fS3H737t307NmTN998kzNnzrBq1SoOHTpEv379njp4IYSJXq9n//79OP93f6Vz5854eXlpHFXueOYZMOduOh2sXg0NG2obkxAi92U6oZk2bRpvvvkm/fr1o2LFisyYMYPAwEDmzJmT5vb79++nRIkSvPvuu5QsWZLGjRszcOBADh8+/NTBC2Et3nrrLYKCgtizZ49mMXh4eLB161YWLFjA8uXL0ReAbj09esCRI8nLEyfCiy9qF48QQjuZavufkJDAkSNH1Mn0zFq3bs3evXvTfM4zzzzD2LFj2bRpE23btuXOnTv88ssvvPDCC+keJz4+nvj4eHU5KioKgMTERBLNN8kLAPO5FqRzhrx33nfu3OG7777DaDTSuHFj/vjjD5o0aZLp/WTHederV4969erlmdcOsn7eU6fq+fFHPWBqgN29exLDhhnR8tRTnsOTPq/y2t95dpHzLpjnnRsyldCEhYWRlJSEr6+vxXpfX19CQ0PTfM4zzzzDjz/+SNeuXYmLi8NgMNCxY0e++eabdI8zYcIExo0bl2r9jh071Cr1giQ4OFjrEDSRV877o48+Usd/cXd3Jzo6mk2bNmV5f9l93lu3bqVx48ZW/97JzHkfPerD+PENMCczpUrd59VXd/IUL3u2SDm44ZYtWzLUIDyv/J1nNznvgiHG3LgtF2RpdAZzl1QzRVFSrTM7e/Ys7777Lp988glt2rTh1q1bjBw5kkGDBrFw4cI0nzNmzBhGjBihLkdFRREYGEjz5s0pUqRIVkLOkxITEwkODqZVq1bY2dlpHU6uyUvnfeTIEU6fPq0uL1myhLZt22ZpX9l93lFRUTz//PMcPnyYY8eO8ddffz31PnNCZs/74kV49VVbzMmMj4/CyZOu2NtrPwbPw4cP1XKbNm1wcXFJd9u89HeeneS8C9Z552YHoEwlNF5eXtjY2KSqjblz506qWhuzCRMm0KhRI0aOHAlAtWrVcHFx4dlnn+Xzzz/H398/1XMcHBxwcHBItd7Ozq5A/SGYyXlbr549e6rl6tWr07Fjx6feZ3ad959//qm2Vdu3bx9r1qyha9euT73fnJKR805IgCZNkrtnOzrCsWM6XFys4+8kZfwZvY554e88J8h5Fwy5ea6ZajVob29P7dq1U1WZBQcH88wzz6T5nJiYmFSNE21sbABTzY4QedX27du5ePEiYKq1XL16tcYRWXrllVdo1qyZuty3b988P4ll8+Zg/odPp4Pt26FoUW1jEkJYh0x3gxgxYgQLFizg+++/59y5cwwfPpxr164xaNAgwHS7KOV/rR06dGDNmjXMmTOHy5cvs2fPHt59913q1atHUfkkEnnYW2+9pZabNWtG6dKlNYwmbevWrVNrO2NiYujSpYvGEWXdmDGQsu/B9OnSPVsIkSzTbWi6du1KeHg448eP59atW1SpUoVNmzYRFBQEwK1btyzGpOnduzcPHjzg22+/5b333sPDw4PnnnuOiRMnZt9ZCJHLdu/ezd9//60uL1q0SMNo0ufm5sbMmTPVfzjWrVvHnj17aNSokcaRZc7mzZazZ3fsCCmmyxJCiKw1Ch48eDCDBw9O87HFixenWjdkyBCGDBmSlUMJYZX69++vlps2baom9NZo4MCBzJo1i1OnTgGmf0quX7+ucVQZd/MmdOqUvBwYCGvXahePEMI65f+Rt4TIAc8++yy2/03hbK21Mylt3LhR7Yl448YNpk2bpnFEGWM0muZoMg9L5eAABw9CARgzUAiRSfKxIEQWfPfdd0RGRrJixQpKliypdThPVLx4cXr16qUuf/jhhxZjplirzp3hxo3k5XXrwM9Pu3iEENZLEhohssjZ2dmqu0E/av78+ergejqdTr0FZa2WLbO8tTRmDLRpo108QgjrJgmNEAWEra0tX3/9Na+99hr379+nbt26WoeUrps3oW/f5OXateHLL7WLRwhh/SShESKDDAYDDRs2ZN26dVqHkmVvvvkmy5cvz9CQ/FoxGqFRo+TB85yd4c8/NQ1JCJEHSEIjRAaNGzeO/fv389JLL6U7kKR4egMHwtWrycsbNoCrq2bhCCHyCElohMigOXPmqOWWLVtqGEn2+fHHH2nVqpXWYag2b4YFC5KXhwyB557TLh4hRN6RpXFohChodu7cqU6yZmtryyeffKJxRE+vZs2aHD9+HIAFCxbQr18/TeOJiIBXXkleLlcOvv5as3CEEHmM1NAIkQFjxoxRyy1atFDHoMnLKlasqJbff/99jEajhtFA27Y2xMaayvb2sGuXpuEIIfIYSWiEeIKYmBj279+vLk+aNEnDaLLPggUL1JlwIyMj+fzzzzWLZcOGkhw5olOXf/oJfHw0C0cIkQdJQiPEE4wbN06tvShatCjVqlXTOKLs4ezszNtvv60uT5gwAYPBkOtx3LgBixZVAUwJTceOlreehBAiIyShEeIJUk5tkN4cZnnV5MmT1cH24uLiePfdd3M9htatbTEaTR9F7u6wenWuhyCEyAckoRHiMQ4cOMDdu3cBsLGx4YMPPtA4ouxla2vLp59+qi7Pnz8/V6dEGDsWLl4032pS2LgR8kHzJCGEBiShEeIxxo8fr5abNGmSLxoDP2rUqFEULlwYMA0e+M477+TKcc+dgwkTkpd79jTSuHGuHFoIkQ9JQiPEYyxfvpxRo0bh7+/PZ599pnU4OSZl4vbDDz/keC2N0QgtWoCimJY9POL47jtte1kJIfI2SWiEeAw3NzcmTpzIzZs3adKkidbh5Jh33nlHraWxs7Pj2LFjOXq8IUPg1i1TWadTGDduL3r5NBJCPIX8V38uhMiSGTNmcP78eT7//HP0OZhdnDsHKQZdZvhwI0FBD3LseEKIgkESGiEEAD179syV47Rtm3yrKTAQvvrKyKZNuXJoIUQ+JpW8QqRhwoQJ+Pv7M3LkSKKiorQOJ9/45BMICTGVdTokkRFCZBtJaIRIw7x58wgNDWXKlCl89dVXWoejie+++y5bz/36dfjii+Tlfv2gSpVs270QooCTW05CPOLevXuE/FeNoNPp+PDDDzWOKHeFhYVRoUIFwsPDsbe3Z8SIEdjb2z/1ftu0MfVuAihSBObOfepdCiGESmpohHjExIkT1XKZMmVwdXXVMJrc5+XlpU6BkJCQwNixY596nzNnwtmzycvr1iG9moQQ2Uo+UoR4xIoVK9RybjWUtTbvv/++Wp49e/ZTzcR97x6MHJm8/Mor0KjR00QnhBCpSUIjRAr37t3j2rVrgOl204gRIzSOSBsffvghTk5OgGm28aeZYfzFFyEx0VR2dTXNpC2EENlNEhohUkjZCLZs2bLqxI0FjV6vZ+DAgepyVhOazZth9+7k5R9/hGxojiOEEKlIQiNECnK7KdnEiROxs7MD4P79+xazjmeE0Qg9eiQvN2gAHTtmZ4RCCJFMEhoh/hMWFsa///4LmG43DR8+XOOItGVvb8/rr7+uLme2cfDw4ab2MwA2NrBhQ3ZGJ4QQliShEeI/s2bNUssF+XZTSt988406DcKtW7dYv359hp53/Tp8+23y8gcfgJdXTkQohBAmktAI8Z+PP/6YVatW0bx5c4YOHap1OFbBzc2Ndu3aqctTpkzJ0PM6dEgec8bX13JAPSGEyAkysJ4Q/9Hr9XTu3JnOnTtrHYpVmT9/PrVq1WLYsGEW3bnTs3IlHD+evPzLLzkXmxBCmElCI4R4LD8/P27evJmhbQ0G05QGZq1bQ+PGORSYEEKkILechBDZZsAAiI42le3tYfVqbeMRQhQcktCIAs9oNFK0aFFat26d4UavBd25c+dSrbt+HX74IXn5yy9NA+kJIURukIRGFHirVq3i1q1bBAcH07dvX63DsWoffvgh7u7uVKlShWhzVcx/XnkluSFwsWLw3nsaBCiEKLAkoREF3pw5c9Ryq1atNIzE+i1atIioqCiMRiMjU0zQFBwMBw8mbyfTGwghcpskNKLAO3TokFouqHM3ZVTKwfV++OEHddLKlIMqN2oETZrkdmRCiIJOEhpRoJ08eZKYmBgAnJycqFu3rsYRWbfBgwfj4uICQGxsLNOnT2fCBAgNNT2u10s3bSGENiShEQXa119/rZZr1qypYSR5g16v580331SXv/pqEuPGJT/evz/4+WkQmBCiwJOERhRoW7ZsUcs9Us6kKNI1ceJEbGxsAAgLu0N8vKnHk4uL5XQHQgiRmyShEQVWTEwM169fB0yTUaaseRDpc3R0pH379inWTANg5kywlaE6hRAakYRGFFgLFy5Uy8WLF8fe3l7DaPKWb7/9FnD8b2kpAQFXkXxQCKElSWhEgbVs2TK13LZtWw0jyXv+/jsAGPzfUjze3v21DEcIISShEQXXkiVLGDx4MEFBQbz77rtah5On9O4NMAyww9a2Bn36dNQ0HiGEkDveosAqX748s2bNYtasWVqHkqcsWgT//gsQCFzmypUAAgI0DkoIUeBJDY0QIsOMRhg2LHn51VclmRFCWAdJaIQQGfbxxxAVZSrb2cHixZqGI4QQKkloRIETERFBlSpV+PDDDwk1D3ErniguDqZMSV4ePhycnU3lhIQEPvjgAxo1aqRNcEKIAk/a0IgCZ86cOZw5c4YzZ87wyy+/8Pfff2sdUp7Qty8kJJjKhQrBhAnJj/n6+hIREQHA5s2bpdeYECLXSQ2NKHBWr16tll944QUNI8k7QkNh5crk5SlTTPM2maWsmfnggw9yMTIhhDCRhEYUOGfOnFHLgwcPfsyWwqxHD1ODYIBixWDAAMvHv/nmG7V86tQpQkJCcjE6IYSQhEYUMKdPnyYuLg4AZ2dnypYtq3FE1u/SJdi2LXk5xQDLqpIlS1K5cmV1Wcb1EULkNkloRIEye/ZstVytWjUNI8k7undPLpcvD23apL3dpEmT1PKmTZtIMDe4EUKIXCAJjShQtm7dqpY7d+6sYSR5w/HjcOBA8vIPP6S/bbt27fDy8gLAYDDw6aef5mxwQgiRgiQ0osAwGo1cuXJFXe7fX+YfepI33kgu16oF9es/fvuhQ4eq5Tlz5uRQVEIIkZokNKLA2LhxI8b/WrYWKVIENzc3jSOybn/+CadPJy+nmMszXaNHj1ZnLY+MjGRlyq5RQgiRgyShEQXG4hTD2jZs2FC7QPKIN99MLj/7LFSs+OTn2Nra0qlTJ3V5WUayICGEyAZZSmhmz55NyZIlcXR0pHbt2uzateux28fHxzN27FiCgoJwcHCgdOnSfP/991kKWIis6tq1Kw0aNMDZ2ZnepumiRTrWrYPLl01lnS5jtTNmM2bMoHr16mzYsIENGzbkTIBCCPGITI8UvHLlSoYNG8bs2bNp1KgR8+bNo23btpw9e5bixYun+ZwuXbpw+/ZtFi5cSJkyZbhz5w4Gg+GpgxciM7p27UrXrl21DiNPSDk8z/PPQzpv7TT5+flx/PjxbI9JCCEeJ9MJzbRp03jzzTfp168fYPpvbMuWLcyZM4cJKcdC/8/vv//OX3/9xeXLl/H09ASgRIkSTxe1ECLHLFsGN2+ayno9LFmibTxCCJERmUpoEhISOHLkCKNHj7ZY37p1a/bu3Zvmc9avX0+dOnWYNGkSS5cuxcXFhY4dO/K///0PJyenNJ8THx9PfHy8uhz13/S+iYmJJCYmZibkPM18rgXpnEHOW+vzfu89W0AHwCuvGHF3T+JpQkpISODMmTPUrFkzzcet5byzQ8pzeNLnVX4678yQ8y6Y550bMpXQhIWFkZSUhK+vr8V6X1/fdGctvnz5Mrt378bR0ZG1a9cSFhbG4MGDuXfvXrrtaCZMmMC4ceNSrd+xYwfO5ul9C5Dg4GCtQ9BEdp73999/T61atahWrRp6vXW3hdfyev/5ZzHu3KkDgF5vpFOnzWzalLXbwwkJCUydOpXDhw9ja2vL8uXLH/va54e/c/Mo1ABbtmzB0dHxic/JD+edFXLeBUNMTEyuHUunKIqS0Y1v3rxJsWLF2Lt3r0UvkS+++IKlS5dy/vz5VM9p3bo1u3btIjQ0FHd3dwDWrFlD586defjwYZq1NGnV0AQGBnLr1i2KFCmSqRPMyxITEwkODqZVq1bY2dlpHU6uye7zDgkJUac4KFKkCLdu3XrqfeYEa7jeAQG23Lljqp3p0sXIsmVJWd6X0WjEw8ND/ZKfPXu2eqs6JWs47+zy8OFDChcuDMD9+/dxcXFJd9v8dN6ZIeddsM47PDwcf39/IiMjc3yojEzV0Hh5eWFjY5OqNubOnTupam3M/P39KVasmJrMAFSsWBFFUbh+/Xqac+k4ODjg4OCQar2dnV2B+kMwk/N+OosWLVLLgYGBVv9aanW9ly2DO3dMZRsbmD9fj53d09Vmde/enYX/Tf40YcIE3nrrrXS3zQ9/5ynjz+j55Ifzzgo574IhN881U59W9vb21K5dO1WVWXBwMM8880yaz2nUqBE3b94kOjpaXff333+j1+sJCAjIQshCZM7mzZvVctu2bTWMxLq9/35y+dVXITv+mZoyZQo6nanG599//+XQoUNPv1MhhEhDpv/9GjFiBAsWLOD777/n3LlzDB8+nGvXrjFo0CAAxowZQ8+ePdXtu3XrRpEiRejTpw9nz55l586djBw5kr59+6bbKFiI7JTyVqhMd5C2Zcvg9m1T2cYG5s3Lnv16eHjQuHFjdVlm4RZC5JRMd9vu2rUr4eHhjB8/nlu3blGlShU2bdpEUFAQALdu3eLatWvq9q6urgQHBzNkyBDq1KlDkSJF6NKlC59//nn2nYUQ6bh06RKxsbEAODk5UbJkSY0jsk45UTtj9vXXX6s9nA4cOEBYWJg6iaUQQmSXTCc0AIMHD2ZwypG3Ukg5vLxZhQoVClzLbmEdvvvuO7VcqVIlDSOxXjlVO2NWo0YNSpQowdWrV1EUhREjRrBEBrcRQmQz6+6/KsRT2rJli1qW9jNpy8naGbOUwzD8/PPP6iShQgiRXSShEfnahQsX1LK0n0ktp2tnzHr27EmhQoUA07AMU6dOzZkDCSEKLEloRL514cIFdQwUZ2fndOcaK8hyo3bG7M3/pu+uUKECtWrVyrkDCSEKJEloRL51/fp1fHx8AGk/k5bcqp0xmzBhAn///Tfnzp2jRYsWOXswIUSBk6VGwULkBS1atOD27dvExcURFhamdThWZ9So5HJO184AODo6pjmQphBCZAepoRH5nqOjowzi+Ih168A8A4Ren/O1M0IIkdMkoRGiABo+PLncvn3O18486ubNm3Tu3Dnd4R+EECKz5JaTyJeuXLmCr69vgZyd/Un+/BOuXDGVdbrcr525ePEi5cqVA8DW1pbJkyfnbgBCiHxJamhEvtS+fXtcXFzw9vZm9+7dWodjVVJWijRvDn5+uXv8smXL4unpCYDBYJBRw4UQ2UISGpEv/fPPPwCEhYVRpkwZjaOxHkePwrlzycsLFmgTx5AhQ9Ty3LlztQlCCJGvSEIj8p3jx4+TkJAAmOYS88vtKggrNmBAcrl+fdBqaquPPvoIOzs7ACIiIti7d682gQgh8g1JaES+s3DhQrVctWpVDSOxLhcvwpEjycta1c6Aqe3Miy++qC4vW7ZMu2CEEPmCJDQi3/njjz/UcseOHTWMxLr065dcrloVqlTRLhaAmTNnquWbN29aTFMhhBCZJQmNyHcuXbqklvv27athJNbj+nXYtSt52RrGnSlatKjFFAjDhg3TLhghRJ4nCY3IV44ePUpiYiIAhQoVUqc+KOgGDABFMZXLloWGDbWNxyzlJJU7duwgJiZGw2iEEHmZJDQiX/nhhx/UsrSfMbl3D7ZsSV5OcadHc82aNcPX1xcAo9HIypUrNY5ICJFXSUIj8pUdO3ao5bZt22oYifUYNAiMRlM5IACs7WX55JNPqF69OidPnqRPnz5ahyOEyKNkpGCRr9y4cUMt9+7dW7tArERcHKxdm7w8ZYp2saSnf//+FCtWjAoVKmgdihAiD5OERuQrd+/eZefOnWzdulUmpMQ0o7bBYCoXKQJdu2objxBC5BRJaES+otfradasGc2aNdM6FM0ZjZZjzYwZo10smREaGkp8fDxBQUFahyKEyEOkDY0Q+dTUqRAbayo7O1vOsG2Nzp49S506dfD396dbt25ahyOEyGMkoREin5o4Mbncrx/orfzdHh8fz5H/hjLet28f9+7d0zgiIUReYuUfcUJkzL1793Bzc6Nu3brMmDFD63A09/PPEB5uKtvaWiY31qpmzZqUKFECAEVRGDFihLYBCSHyFEloRL6wZMkSHjx4wOHDh5kzZ47W4Whu9Ojk8ksvgaOjZqFkymeffaaWV6xYgdHc31wIIZ5AEhqRL2zYsEEtN2nSRMNItLdnD1y5YirrdDBrlrbxZEavXr1wdXUFTLegpk+frnFEQoi8QhIakS8cP35cLXfv3l27QKzAkCHJ5Wefhbw2+0PK+bcmT56sYSRCiLxEEhqR58XFxakNSPV6fYGuoblyBY4dS16eO1e7WLJqwoQJ2NjYAHD79m02b96scURCiLxAEhqR5/38889quVixYuitvTtPDho4MLlcpQpUrKhdLFnl7OxMmzZt1OX33ntPw2iEEHlFwf3kF/nGmjVr1HKDBg00jERbERGwbVvysjVNQplZKRt2nzt3jnPnzmkYjRAiL5CERuR5Bw8eVMtdunTRMBJtvfuu5SSUzz2nbTxPo3jx4tSqVQu9Xk/Lli1xcXHROiQhhJWTqQ9EnmY0GgkNDQVAp9Px0ksvaRuQRgwGWLEiefnzz7WLJbusXbsWNzc3PDw8tA5FCJEHSEIj8rTff/8dRVEA8Pb2xta2YP5Jf/wxJCaayh4e0KuXpuFki+LFi2sdghAiDymYn/4i36hVqxajR48mODiYevXqaR2OZlKONTNsmGZhCCGEZqQNjcjT/Pz8mDBhAocPH2b27Nlah6OJ776DBw9MZQcHU21NfnPgwAHq1KnDF198oXUoQggrJQmNEHnc+PHJ5R49rH8Sysxavnw5DRo04MiRIzLQnhAiXfnso0+IgmX3brhxw1TW62HaNG3jyQmvvvoq9vb2AERGRrJkyRKNIxJCWCNJaESetWjRIgYNGsTu3bsL7CSGQ4cml5s3Bzc37WLJKba2tnTt2lVd/jg/3lMTQjw1SWhEnjVlyhTmzZvHs88+y4wZM7QOJ9ddvw5HjyYv56VJKDPr66+/RqfTAXDt2jX27NmjcURCCGsjCY3Isy5duqSWu3XrpmEk2njnneRyhQpQvrx2seQ0Dw8PmjVrpi6/++672gUjhLBKktCIPOnixYvEx8cD4OLigp+fn8YR5a64ONi4MXm5ILSVTTkdwtGjRwkJCdEwGiGEtZGERuRJixcvVssVKlTQLhCNfPghJCWZyt7e0L69tvHkhvLly1OpUiV1efDgwRpGI4SwNpLQiDxp69atarlVq1YaRqKN+fOTy++/r10cuW1aim5cv//+O9HR0RpGI4SwJpLQiDwp5ezLvXv31i4QDXz3HZi/xx0dC1ZC06ZNG4vbi9u3b9cwGiGENZGERuQ5d+7c4eHDhwDY29tTPj+3hk3D//6XXO7ePf8NpPckEydOpGfPnty/f5+OHTtqHY4QwkrIXE4iz1m6dKlaLlWqlIaR5L7du03dtSH/DqT3JD179qRnz55ahyGEsDIF7H87kR9sTNG9J2VX3oIg5cSTzZrlz4H0hBAiKyShEXlOhQoVKFy4MAA9evTQOJrcc/06HDmSvPztt9rFYk127tzJ+vXrtQ5DCKExueUk8pw5c+YwZ84cYmJicHZ21jqcXDNkSHK5QgWoWFG7WKzBlStXeO6557h69Sqenp6Eh4drHZIQQkNSQyPyrIKUzDw6kN7EidrFYi38/f25/l+Donv37rFs2TKNIxJCaEkSGiHygLFjwWAwlb29QTr3gKOjI126dFGXR48erWE0QgitSUIj8pQ9e/ZgMH+zFyApB9IbMUK7OKzNrFmz0P/Xb/3GjRts2rRJ44iEEFqRhEbkGQaDgWeffRZ7e3tKly6tdTi5ZsECePDAVHZwgFGjtI3Hmnh4ePD888+ry8NSdgMTQhQoktCIPOO3335DURQURSEmJkbrcHLN+PHJ5W7dCt5Aek8yb948dDodYJq09MCBAxpHJITQgnw0ijxj5cqVarlOnToaRpJ79uyBf/81lXW6gjmQ3pMEBATwzDPPqMtvvfWWhtEIIbQiCY3IM/bu3auWX375ZQ0jyT1DhyaXmzUDDw+tIrFu81M0Mjp27BgXLlzQMBohhBYkoRF5gtFoVLvoAnTt2lXDaHLHzZuWA+nNmqVdLNauYsWKVK1aVV0eIS2nhShwspTQzJ49m5IlS+Lo6Ejt2rXZtWtXhp63Z88ebG1tqVGjRlYOKwqwvXv3kpSUBEDhwoULxBg0KQfSK19eBtJ7kjlz5uDg4MDAgQNZvXq11uEIIXJZpkcKXrlyJcOGDWP27Nk0atSIefPm0bZtW86ePUvx4sXTfV5kZCQ9e/akRYsW3L59+6mCFgVPykHTqlevrmEkuSMhAVKO5i8D6T1Zo0aNiImJUbtxCyEKlky/86dNm8abb75Jv379qFixIjNmzCAwMJA5c+Y89nkDBw6kW7duNGzYMMvBioLrr7/+Usvt27fXMJLc8dlnyQPpeXrCiy9qGk6eIcmMEAVXpt79CQkJHDlyhNatW1usb926tUWDzUctWrSIS5cu8emnn2YtSlHgXb58WS336tVLw0hyR8r/D1I2DBaZExISonUIQohckqlbTmFhYSQlJeHr62ux3tfXl9DQ0DSfc/HiRUaPHs2uXbuwtc3Y4eLj44mPj1eXo6KiAEhMTCQxMTEzIedp5nMtSOcMqc/7zp076ujArq6uuLu758vXxHxOP/2URESEHQB2dgojRxrIh6eryom/89WrV/P+++9z8+ZNrly5QtGiRbNt34+T8hye9Hkl728574IgN883S7NtmwexMlMUJdU6gKSkJLp168a4ceMoV65chvc/YcIExo0bl2r9jh07CkRj0EcFBwdrHYImUp73L7/8wvHjx7l3716+H95+9OjkqR3q17/B1q1HHrN1/pGdf+fDhg1T2+p16tQp12qH4+Li1PKWLVtwdHR84nPk/V2wFLTzzs1BUHWKoigZ3TghIQFnZ2dWrVpFp06d1PVDhw7l+PHjFu0cACIiIihcuDA2NjbqOqPRiKIo2NjYsHXrVp577rlUx0mrhiYwMJBbt25RpEiRTJ1gXpaYmEhwcDCtWrXCzs5O63ByTUE+7/nz9zNsWHNAh06n8O+/Bnx8tI4sZ+XE9f7999/p+N8MnjqdjpCQEPz8/LJl34/z8OFDChcuDMD9+/dxcXFJd9uC/Hcu511wzjs8PBx/f38iIyNxc3PL0WNlqobG3t6e2rVrExwcbJHQBAcH82IarRbd3Nw4deqUxbrZs2ezfft2fvnlF0qWLJnmcRwcHHBwcEi13s7OrkD9IZjJeRcc8+dXA0y1nfXq6ShWrOCcf3Ze7w4dOhAUFERISAiKovDWW2+xcePGbNn346SMP6PnUxD/zkHOu6DIzXPN9C2nESNG8MYbb1CnTh0aNmzId999x7Vr1xg0aBAAY8aM4caNGyxZsgS9Xk+VKlUsnu/j44Ojo2Oq9UIUdBERcPZscg3kN99oF0t+8PXXX6v/aG3atImwsDC8vLw0jkoIkVMy3cexa9euzJgxg/Hjx1OjRg127tzJpk2bCAoKAuDWrVtcu3Yt2wMVBdPUqVNxd3fnmWeeYe3atVqHk6NGjdKjKKbameLFoW5djQPK4zp27EhgYCBgaufXp08fjSMSQuSkLA3aMHjwYK5evUp8fDxHjhyhSZMm6mOLFy/mzz//TPe5n332GcePH8/KYUUBtHbtWqKioti3bx/bt2/XOpwcYzTCihXJb8dPPtEwmHxk5syZavm3337j5s2bGkYjhMhJMgqVsGqnT59Wyz179tQwkpw1fTrExZlqZ1xdFd58U+OA8olOnTqptceKohSIMYyEKKgkoRFWKyoqisjISABsbW2pm4/vwUyenFzu08eoXSD50Lx589TyH3/8IYPtCZFPSUIjrNby5cvV8uPmCcvrgoPBPL2ZXm/kiy8koclObdq0oWzZsjg4ODB69Gi1XY0QIn/J0sB6QuSG9SlmZ2zcuLGGkeSs995LLteseQdHx4Iz1lJu+fPPP/Hx8cnwaOVCiLxHamiE1UrZeLxbt27aBZKDQkIgeagmhQEDTmoZTr5VtGhRSWaEyOckoRFWKSEhgbt37wKmkV5btWqlcUQ54+23k8uVKyv4+sZqF0wBk3KaAiFE3icJjbBKBw8eVMtFixZFr89/f6pxcfD778nLEycmaRdMAfLDDz/g5eWVrxuZC1EQ5b9vCZEv7NmzRy3Xq1dPw0hyztixkPRfDuPjA61baxtPQXDz5k169+5NeHg4p0+fZvfu3VqHJITIJpLQCKvUrVs33n33XapVq0bv3r21DidHzJ+fXH7/fe3iKEiKFi1Ko0aN1GUZl0aI/ENayQmrFBgYyMCBA/PtJG6LFsGDB6ayg4Opp1OS3HHKFT/++CMlS5ZEURQuX77Mzz//TJcuXbQOSwjxlKSGRggNjBuXXH7tNciHTYSsVlBQEB06dFCXBw8erGE0QojsIh+jQuSyw4dN3bUBdDqYMUPTcAqkpUuXYmNjA0B4eDiTUw7VLITIkyShEVbn7bffZsGCBRw7dkzrUHLEu+8mlxs3Bg8PzUIpsNzc3Ojfv7+6/Omnn2IwGDSMSAjxtCShEVZn0aJFbNy4kfr16xMVFaV1ONkqLAz2709e/vpr7WIp6L755hucnJwAiI2NZfjw4RpHJIR4GpLQCKty/Phx9T9lNzc33NzcNI4oew0dCopiKpcqBTVqaBpOgWZra8snn3yiLs+dO5eYmBgNIxJCPA1JaIRV+f7779VypUqVNIwk+xkM8Msvycuff65dLMJk9OjReHp64uLiwuTJk3F2dtY6JCFEFkm3bWFV/vjjD7Xcvn17DSPJfhMnQkKCqezuDq+/rm08wuTw4cMEBgbKXE9C5HHyDhZW5dKlS2o5vw2oN316cvmtt7SLQ1gqWbKk1iEIIbKB3HISVuP48eMk/FeF4eTkhI+Pj8YRZZ/16yE83FS2tbUch0ZYF4PBwLVr17QOQwiRSZLQCKuRsv1MUFCQhpFkvw8+SC536AD29trFItI3b948PDw8qF+/vtahCCEySRIaYTVStp/JTzMhnzsH588nL0tXbesUHR3N4MGDefjwIaGhoUyaNEnrkIQQmSAJjbAaKdvPtGjRQsNIslfKkfVr14aAAO1iEelzdXWlb9++6vInn3xCXFychhEJITJDEhphFQwGAw0bNsTd3R0PDw888snwuffuwV9/JS9/8412sYgnmzNnDi4uLgDEx8fnu4bpQuRnktAIq2Bra8uff/5JREQEoaGhWoeTbYYNSx5ILygIGjbUNBzxBLa2tkybNk1d/vnnn7ly5YqGEQkhMkoSGmF19Plk6mmDAVauTF6WgfTyhgEDBqiN0hVF4eWXX9Y4IiFERuSPbw4hrND48ZYD6fXooW08IuNWpshEjx8/zsaNGzWMRgiREZLQCM1du3aNdevWYTQatQ4lW6VsL5Nyhm1h/erXr0+zZs3U5TfeeCPf/X0Kkd9IQiM0N2XKFF566SVsbW15++23tQ4nWyxbBhERprK9PaSYA1HkEatXr1anQ4iIiGDZsmUaRySEeBxJaITmzOPPKIpCYGCgxtFkj48+Si6/+qppdGCRt3h6ejJ27FhcXFxYtmwZPXv21DokIcRjSEIjNJdy/JmU44DkVfv2QUiIqazTyUB6edlnn31GREQE3bt31zoUIcQTSEIjNJVy/qZChQrli/mbhgxJLjdtCp6e2sUinp7Mwi1E3iAJjdBUyvmbqlatqmEk2ePaNThyJHl59mztYhHZLyYmhv79+6tJuBDCesi/HkJTKedv6tChg4aRZI+UbZorVICKFbWLRWSvRYsWMXjwYOLi4oiJieHHH3/UOiQhRApSQyM0lZ/az8TEwObNyctTp2oXi8h+UVFR6txOy5cv58yZMxpHJIRISRIaoZn81n5m5EhISjKVfXygXTtt4xHZa+jQoZQqVQow9chrJxdYCKsiCY3QzHfffaeW83r7GaMRFi1KXv7wQ+1iETln/fr16HQ6wDQg5NixYzWOSAhhJgmN0Mz9+/fVL4dXXnlF42iezvTpEBtrKjs7W/Z0EvlH5cqVGThwoLr81VdfEWLuoy+E0JQkNEIzy5cvJyEhgRUrVtCvXz+tw3kqX36ZXH7zTcgn82uKNMyaNQtvb28AjEYjbdq00TgiIQRIQiM0ZmtrS9euXXFzc9M6lCxbtgzu3TOVbW1h0iRt4xE5S6/Xs2HDBnX5woULTJ48WcOIhBAgCY0QT23MmOTyq6+Co6N2sYjcUb9+fV577TV1+cMPP+TOnTsaRiSEkIRGaMLc/TWvCw6G69dNZb1eBtIrSJYuXYq7uzsAdevWxd7eXuOIhCjYJKERuS4uLg5nZ2cKFy5Mly5dtA7nqbz7bnK5VSvw8NAsFJHLbG1tWb16NT/99BN79+7FQy6+EJqSkYJFrlu2bBmKohAREcH+/fu1DifLjh6F8+eTl1P0QhcFRIsWLbQOQQjxH6mhEbluxYoVarl58+YaRvJ0Bg1KLtevD8WLaxeLEEIUdJLQiFx3+PBhtdy/f38NI8m6K1fg0KHk5blztYtFWIeEhAQ6duyodRhCFFiS0IhcdefOHSIjIwFTG4TGjRtrHFHWpBhbjYoVoUYNzUIRVuKjjz5i+/bt6vLZs2c1jEaIgkcSGpGrUk53ULZsWQ0jybp79yDFJOF88412sQjr8dVXX1nMR9a+fXuMRqOGEQlRsEhCI3LVr7/+qpbbtm2rXSBPYfBgUBRTOTAQpF2ogNQD7t25c4c333xTw4iEKFgkoRG56syZM2p5UMpWtXlEXBysXp28PHGidrEI61O5cmWL5cWLF7Nt2zaNohGiYJGERuSao0ePqgPqOTs758lbTiNGgMFgKhcpAq+/rm08wvp16NCBqKgorcPINzZt2oROp1N/bGxsCAoK4p133kn1Oo8fP55KlSqluvW3b98+Xn31Vfz9/bG3t6dIkSLUqlWLESNGoJirX7NZ//79eeWVV0hISEh3m3bt2uHs7My1a9cyte9HXxNbW1tKlCjBiBEjiI6OzvB+Fi5cSLFixXj48GGmjm8tJKERuSZld+1atWppGEnWJCTAwoXJyx9+qF0swvrZ2NgAEBsby7PPPqtxNPnH0aNHAVi9ejX79u1j27ZttG/fnlmzZvFuipEub968yaRJkxg/fjz6FLPFzps3j0aNGhEXF8f06dPZunUrX3/9NXXr1mXnzp3odLocibtq1aokJSVx4cKFNB/fsmULmzdvZvTo0RTP5BgQj74mW7Zs4bnnnmP69OkWr8mT9OrVCxcXFybl1QnplDwgMjJSAZSwsDCtQ8lVCQkJyq+//qokJCRoHUq2OXHihPLmm28qGzZsSHcbaz3vYcMUxdR6RlHc3BQlKSl792+t553T8tN5R0dHK4ACKKNGjVLLgDJy5EiLbfPTeWfG0553p06dFGdnZyXpkTdgxYoVFU9PT3V51KhRSrFixSy2u379umJvb6+8/vrrae770X2ahYeHK3fv3s1SvGZbtmxRAGXJkiWpHktMTFQqVaqklChRQomNjc30vjt16qQ4OjoqBoNBXZeUlKSUKFFC8fLyytS+pkyZori7uysPHz7MdBxpCQsLUwAlMjIyW/b3OFJDI3JVtWrVWLBgAe3bt9c6lEwxGGDOnOTlMWNMczcJkZ7GjRvz3HPPAaYhCqpWrapxRPnDkSNHqFq1qkWtC4Cbm5t6qyQhIYGFCxfSrVs3i+3+/PNPEhISaN26dZr7fnSfZidPnsTf35+2bduyZMkSHjx4kOm4zdc/ZTtCs7lz53L27FmmTp2K43+z2x48eJCuXbtSokQJnJyc8PHxoVOnTly6dCnV848cOULFihXVWkHzuXh7e2Nrm7kJAbp3705UVJRFjXpOURSFuXPnUrVqVRwdHSlTpgy//PILRqORKlWq8OWXX2Zqf/KRLEQGfPghxMebyq6uMGqUtvGIvGHs2LG0aNGC2bNnU7Ro0XwzKatWwsPDuXbtGtWrV7dYf/fuXU6fPk3dunUBOHDgAOHh4alGIi9UqBAAM2bM4Lfffsvw9WjQoAE//PADdnZ29O/fHx8fH1599VXWrFlDvPmD4Qm8vLwoXLhwqoTm/v37fPbZZ7Ro0YKXX35ZXX/8+HGqV6/OzJkz2bJlC9OnT+fvv/+22Cbla/Jownz79m3OnDnDq6++mqH4zPz8/KhQoQK//fZbutsoioLBYMjQz+P20bVrV0aMGEHPnj3ZuHEjJUuWpHfv3ixevJj79+8zbNiwTMUuczkJ8QRGI3z7bfLyyJFSOyMyRq/X89FHH5GUlERYWBinT5+mVq1a6dYEiMcztxWpUqUKBoOB+Ph4Tp8+zYgRI4iPj2f8+PGAqdEvpG6r98ILL/Dyyy+zZs0a2rdvj4ODA8888wxdu3alT58+6c6Y7ujoSLdu3ejWrRsRERGsXbuWFStW0LVrV1xcXOjUqROvv/46LVq0sKgleVRQUBDnzp2zWPfZZ58RGRnJzJkzLdYPGDBALRuNRoxGI3FxcfTr14+IiAh1MlTza1KpUiUMBgOJiYmcPHmSoUOH0qZNm0zXcoDpdfsj5WBbj/jrr78yPG2NOb5HLV68mFWrVvHjjz/SrVs3ABwcHGjSpAnvv/8+kyZNwtnZOVNxS0IjcoW/vz/e3t507tyZTz75ROtwMuXTTyE21lR2doaPPtI2HpH32NjY4O7uzpUrV0hKSuLUqVP06tVL67DynCNHjgDw7rvvWjR2rVOnDlu2bFG/ZG/evIlOp8PLy8vi+TY2NqxevZqzZ8+yceNGduzYof788ssvbN269YmNgj08POjTpw99+vQhLCyMX375hRUrVvD888/j7e3Nvn37KFWqVJrPDQoKYsOGDcTExODs7MyFCxeYM2cOb7/9tkWXf0VRWL16NbNnz+b8+fOEhoaqva/0ej1OTk6pXpPRo0czevRodX2rVq1YuXIldnZ2T3xdH+Xj48OdO3cwGAxp3rKqXbs2h1LO/fIYfn5+aa7/9ttvqVKliprMABQuXFh9Tp8+fTIdd5b+TZg9ezYlS5bE0dGR2rVrs2vXrnS3XbNmDa1atcLb2xs3NzcaNmzIli1bsnJYkUcdPnyY0NBQTp06xcQ8NnCL0QjTpiUvjxghtTMiaxwdHbl8+TJNmjShf//+FoNMiow5evQojo6OHDx4kEOHDnHixAnCwsI4dOiQ2l4JTD3L7Ozs0q0tqVSpEqNGjWLz5s38+++/VKlShT/++IPz589nKp6oqCgiIiKIjIxEURQ8PDwe22alRIkSGI1GdVqMESNG4OHhwWeffWax3YABA3j99depVKkSs2fPZteuXRw6dIjq1atTpkwZHBwcLF4TGxsb9u7dy6FDh/j999957rnnCA4OZv78+Rb7TUhIYMyYMRQrVoyAgAB27drF66+/TnBwsMV2jo6OKIqS7i05V1dXatSokaGftGq97t+/z7Fjx+jQoYPF+qSkJAC++OKLx9Z0pSfTNTQrV65k2LBhzJ49m0aNGjFv3jzatm3L2bNn0+xqtnPnTlq1asWXX36Jh4cHixYtokOHDhw4cICaNWtmOmCR93yb4n5N7dq1NYwk8z7/HGJiTGUnJxg3Ttt4RN42b948dRySbt26MWvWLI0jyluOHj1KtWrV1LYy6fHy8iIhIYGHDx/i4uLy2G29vb1p2LAhp0+fzlCbmn///ZdVq1axYsUKDh06RLFixejatSvz58+nTp06j31uUFAQAKdPnyY8PJxNmzYxf/589fYRwIULF1iwYAGTJk1i5MiR6vqwsDDOnDlDly5dLPZ59OhRKlWqRMOGDdV19evXJyAggAULFjB48GB1/fvvv8+NGze4ePEi3333nVqj06pVK4t93rt3DwcHB1xdXdM8j6e95fTPP/+gKAolS5a0WG+eGudJ1zc9mU5opk2bxptvvkm/fv0AU+OqLVu2MGfOHCZMmJBq+xkzZlgsf/nll6xbt44NGzZIQlNApLwX26NHDw0jyRyjEVIOxzBkiNTOiKczY8YMunTpQnx8PAaDgffff5/u3btn6bZAQRMZGcnly5fT7aGUUoUKFQC4dOkS1apVA+DWrVv4+/un2vb+/fsEBwcTEBCQbk+0Bw8esHjxYlauXMnevXspXLgwr7zyChMnTqRp06YZbhMVGBiIra0tx48fZ/LkydSuXZu+fftabBMSEgKYapFSGjp0KAaDwSJpMr8mj96e8fDw4OWXX2bp0qVcvnyZUqVKce/ePebPn8/Vq1dxdnamXr16DB8+nPXr16eK8/Lly6mOn9LT3nIy177cvXtXXXfkyBE1oVGyOLhhphKahIQEjhw5YnGfDqB169bs3bs3Q/swGo08ePAAT0/PzBxa5FExMTHcuHEDAJ1OR+/evbUNKBMmTgTzgJmOjvDFF9rGI/I+Nzc3pk6dypAhQ1AUhQcPHtCiRQv279+vdWhW7+jRoyiKkqFa3mbNmgGwf/9+NaHp0aMHsbGxvPbaa1SpUoWkpCTOnDnDrFmzCA8PZ+PGjeneLjJ/73Xs2JFff/2Vtm3bZikJtbOzo2zZsnz33XfExcWxZ8+eVMlQ9erVcXZ25uOPP0an0xEbG8v8+fP5559/ACwSGvNrUq9evVTH6ty5M0uXLmXt2rW89957bN++nZo1a+Lr6wuYvs+rVKmS6raP0Wjk4MGDj52HrFChQk+sjTILDw9Pta5y5cp4e3szffp0SpQogV6vZ8SIEXTu3JkVK1bw3XffMWDAAAIDAzN0DLNMJTRhYWEkJSWpL4iZr68voaGhGdrH1KlTefjwYapqs5Ti4+MtusKZh7NOTEwkMTExMyHnaeZzzcvnPHfuXLUcGBiITqd74vlYw3kbjfD557aAqYFg//5JKIqRnAzJGs5bC/npvFOeg6Ioaf6nWalSJd566y1mz54NmLoYDx06lClTpuRanFowGAwYjUa10W1mr7e5RqBq1apPfK6fnx+NGzfm119/VWsvunXrxoYNG5gxYwa3b98mKSmJwMBAWrduzfDhwwkKCkp3v1WrVuXGjRsWt68yG795+8qVK3Pu3Dm6d+9OnTp1Uu3H09OTn376iQ8++ICXX36ZUqVK0b9/f5555hnGjRtHlSpV1OeYX5OaNWum2s9zzz1HoUKFWLt2Le+++y7Xr1/Hz89P3W7+/PmUK1cu1fN27NhBZGQkXbt2zZb3ZFr7cHBwYO3atQwdOpQ+ffrg4uLCoEGD+OKLL3Bzc2PixIkUK1Ys0/P96ZRM1O3cvHmTYsWKsXfvXov7dV988QVLly59YoOq5cuX069fP9atW0fLli3T3e6zzz5jXBqNFX766adMd+MS2ho1ahR///03YKrJS3k/15otXVqR1avLAWBnl8Ty5RvJ5PhUogCKi4vjtddeA0xTfZgHSUvLV199ZVEzM3z4cJo2bZrjMWrh9OnTTJ06lfv37/Pyyy/Ts2fPHD/m3r17mTJlCvPnz6dIkSI5fjxrt3fvXhYtWsS0adM4f/48s2bNws/Pj6+++spiu+nTp3P79u1U67MqJiaGbt26ERkZiZubW7bsMz2ZSmgSEhJwdnZm1apVdOrUSV0/dOhQjh8/zl9//ZXuc1euXEmfPn1YtWoVL7zwwmOPk1YNTWBgILdu3SpQf5iJiYkEBwfTqlWrPHuP3dXVVW0Eefz48cfelzXT+rwNBihc2Jb4eNN/kqNHJzF+vPEJz3p6Wp+3VvLTeT98+FDterpu3Tp1ILe0JCUl8cYbb6i123q9nj///JMGDRrkSqy55erVq9StW5fIyEh13dy5c3njjTdy9HorikKTJk2oVatWqjFetKD133lcXBx9+/Zl69atBAQEsGzZMrp160bz5s3V18fc5mjr1q00atQoW44bHh6Ov79/riQ0mfqf097entq1axMcHGyR0AQHB/Piiy+m+7zly5fTt29fli9f/sRkBkzVUSm7pZnZ2dnl+Q+8rMir571t2zY1mSlUqFCq0T2fRKvzHjYseVRgFxf44gsb9PrMdyHMqrx6vZ9WfjjvlPGbZz5Oj42NDVOmTGHAgAHExMRgNBp5//33OXDgQG6EmisSExPp2bOnRTIDpqkgcuN6L1iwgPXr12NjY2M1gxlq9XduZ2fHqlWrLNY9OsjfrVu3+Pbbb9U2SNl13NyS6Ur0ESNG8MYbb1CnTh0aNmzId999x7Vr19R7XWPGjOHGjRssWbIEMCUzPXv2ZObMmTRo0ED9b8TJyQl3d/dsPBVhbVJ2186ubD+nxcRAyqEbPv1UejaJnOPq6sqcOXPo27cvQUFBTJs2jaSkpCyNwWGNPvroo1QNnl9//fVUA97llCpVqlClSpVcOVZ+0Lx58wx3x7ZGmf6o7tq1KzNmzGD8+PHUqFGDnTt3smnTJrV//a1bt7h27Zq6/bx58zAYDLz99tv4+/urP0OHDs2+sxBWafny5UyfPp2aNWsyYsQIrcPJkLfeQm346+FhmuZAiJwUGBjI8uXLmTNnDjdu3OD06dNZ7rZqTX7//XcmpRz3AChTpozFPzpCZKcsNXMcPHhwuo07Fy9ebLH8559/ZuUQIh9wdHRk2LBhmZ5gTCtRUfDjj8nLeWxQY5GHeXt7A6Zbs3///TeOjo64urpSrFgxjSPLmps3b6Zq+GtnZ8eKFSse265IiKchlelC/KdPH/hv5G18fCDF3HBC5AonJyccHR2ZOXMmgYGBqQZdywuSkpLo0aOHxaBpgDqQnBA5RRIaIYA7d2Dt2uTlr7/WLhZRsJ09e5Y5c+agKAqLFi1i1KhRWoeUKV9++SU7duywWNexY0eLySSFyAmS0Ihsd+/ePfz9/Xn99dc5fPiw1uFkSLduYG62EBAAXbtqG48ouOrWrUuZMmXU5cmTJ2fbmCA5befOnakmWgwICOD7779/4izWQjwtSWhEtps8eTKhoaGsWLGC7t27ax3OE50+Ddu2JS/Pm6ddLELo9XrmzJlD0aJF1XVjxoxR57mxVmFhYXTr1g2jMXnMJhsbG5YvX16gxg8T2pGERmS75cuXq+U33nhDw0gyJmVtTOXK0K6ddrEIAaZxWhYtWmSRCAwcOJBffvlFw6jSpygKffr0UedtMxs3bhyNGzfWKCpR0EhCI7JVRESEOlusTqez+h5OGzfC2bPJyytWaBeLECnZ29uzePFii15BXbp0SXN2ZK3NmDGDjRs3Wqxr0aJFqomMhchJktCIbDV58mS1XLp0aVxdXTWM5sn69Usut2wJMgaXsCaurq4sXrwYJycnwFQT8tJLL7E2ZQt2jR0+fJgPPvjAYp2Pjw/Lli3LNwMEirxBEhqRrVakqOKw9vYzM2bA7dumsl4PKe6UCWE1PD09WbhwoTodjKIobN68WeOoTNKblXnp0qX4+flpFJUoqCShEdkmKiqKy5cvq8vvv/++htE8nsEAY8cmL/fpA7k0GrsQmebv78/ixYtxdHSkadOmdOvWjYcPH2oak6IoDBw40OI9DzB69Ghat26tUVSiIMvSSMFCpGXKlClquVSpUlZ9u2nQINO8TQCOjjB7trbxCPEkfn5+rFu3DhsbG27fvs3BgwepW7euZu+zBQsWsHLlSot1DRs2ZPz48ZrEI4TU0Ihs82OKeQO6deumYSSPd+0aLFqUvDx+PNjbaxePEBllb2+PjY0NXl5e3L59mwMHDvD666/n+vxIp0+fTjVQnoeHB8uXL8/zM6aLvEtqaES2iI6O5sqVK4Cpd9NIK57V8eWXwTxURrFiMgGlyHtsbGzw9vZm2rRpbNq0iRUrVnDr1i2++OKLHD92TEwMXbt2JS4uzmL9woUL1UmKhdCC1NCIbOHq6srx48fp1KkTbdq0wc3NTeuQ0rRpExw5krws3bRFXqXT6di3b5+6/OWXX9K7d+8cP+67777L2ZRjHQBvv/02L7/8co4fW4jHkYRGZJtq1aqxZs0aq+mB8SijEVJOANy0KciYXyKv0uv1LFu2DF9fX3XdDz/8QJs2bSxG681Oy5cvZ+HChRbratSoYdF+TgitSEIjCoxPP4XwcFPZxgasdNBVITLM2dmZZcuWWcz9tHXrVmrVqkVCQkK2Huuff/5hwCNT0Lu4uLBy5UocHR2z9VhCZIUkNKJACAuDlPP7DR0q3bRF/mBra8u8efOoW7euuu7EiRMEBARw/fr1bDlGfHw8Xbt2JTo62mL9nDlzKFeuXLYcQ4inJQmNeGr+/v7UrFmTH374Icequp/WCy+Yxp4BKFwYUgxoLESep9frmTRpEu1STER29+5dypQpw86dO596/6NHj+bo0aMW63r16pUn5moTBYckNOKpbNmyhdDQUI4fP86gQYPQ663vT+rnn+HgweTl5ctNIwMLkd+MHDmSt956S12Oj4/nwYMHT7XPDRs2MGPGDIt15cuXz/Wu4kI8iXysi6fy8ccfq+WWLVtqGEnaEhKgb9/k5ebNoU0b7eIRIqd16dKFKVOmYGdnR/fu3XF2diYyMjJL+/r3339T9ZxycHBg5cqVVj1wpiiYZBwakWXR0dEcPnxYXZ40aZKG0aStRw8wjxBvbw+//qppOELkitq1a7Nx40ZsbGy4c+cOe/fupXr16gA4Ojri6en5xH0YDAa6devGvXv3LNZPmzZN3ZcQ1kRqaESWjR8/HkVRAAgICKBixYoaR2Tp8GFYtSp5ecoUsNLhcYTIduZRhX18fIiJiWHfvn3UqlWLgIAAtm/f/sTnjxs3jt27d1use+WVVyxuaQlhTSShEVm2ePFitTx48GDtAkmD0WhqCGxWrhwMGaJdPEJoRafTUaRIEaZOncrt27eJjY2lRYsWjBkzJt3nbNu2LdWow0FBQSxYsACdTpfTIQuRJZLQiCzZt28fd+/eBUzDsFvbVAcDBsCdO6ayTmcaIViIgqxt27bY2ia3Mvjqq6+oU6cOUVFRFtvdvn2bHj16qLWvYOoavmLFCjw8PHIrXCEyTRIakSUp/7tr2rSpxQel1g4cgJSDmY4ZA6VLaxePENbg2WefZfny5Xh7e6vrjhw5gq+vL2vXrgXAaDTSs2dPQkNDLZ77xRdf0KBBg1yNV4jMkoRGZFp0dDS7du1Sl7/88ksNo7FkNEKKoTgoXRpyYb4+IfIELy8vVqxYwbPPPquui4uL4+WXX6ZTp05MnDiRrVu3WjynTZs2vP/++7kdqhCZJgmNyLSdO3eq99GLFStG/fr1NY4oWffuYO6UodfDtm3axiOEtdHr9YwfP55PP/0UOzs7df2vv/7Khx9+aLGtv78/S5YsscrxpYR4lPyVikxr164d0dHRjBw5kslWNORucLDl7Nmffw5BQdrFI4Q1a9asGWvWrLGYByolnU7HsmXL8PHxyeXIhMgaSWhEljg6OjJp0iRef/11rUMBICoKXnwxeblSJVPbGSFE+lxdXfnuu+8oUaJEqsfGjh3Lc889l/tBCZFFktCIfOHZZyE21lS2t5dbTUJk1K+//srVq1ct1lWsWJGOHTsyYMAA2rRpQ0xMjDbBCZEJktCIDDt8+DCrV6/WOoxUPvgATp5MXv7xR/Dz0y4eIayZ0WhUu2T/888/zJkzx+JxNzc3Ro8ezY4dO5g/fz5bt27F09OTqVOnahGuEBkmCY3IsD59+tC5c2f8/f3Zs2eP1uEAsGeP5czZr78OnTtrF48Q1uzEiRP06NGDF198kVWrVjF+/HgSExMtthk9ejTFixdn79696rr4+Hjef/99AgICrOa9L8SjJKERGXL8+HFOnz4NQGhoqFU0FIyKguefB/P4XwEBsGyZtjEJYc2+/vprbt26xYMHD5g9ezb//vuvxeOdO3emYcOGAAwbNowxY8bg4OCgPn7jxg0aN25Ms2bNCAsLy9XYhXgSSWhEhvTr108t161bl7Jly2oYjWm8mTp1IDratGxra6qtkd6lQqQtMjKSy5cvp/t4+fLlGTBggMW61q1bs3HjRp5//nmLKQ/++usvfH196dWrF3FxcTkWsxCZIR//4okuXLjAkSNH1OUFCxZoGI3Jq6/CxYvJy4sWQfHi2sUjhLW7cuVKuo/Z2NhQq1atNOdpsrW15YMPPmD58uUW/8gYjUaWLFnCq6++miPxCpFZktCIJ+rdu7darlq1KtWqVdMuGExtZtasSV5+5x3o0UO7eITICx6X0CQlJbF8+XI2PWbSM19fX7777ju+/PJLChcuDJjGqhkwYAD37t2zmPtJCC1YzwQ8wiodOnSI/fv3q8vz5s3TMBrYvt3Uq8msQQP45hvt4hEir3hcQmP2aPfttDRs2JA1a9awbt06QkJCiImJYefOnQQGBlK6dGn69etHpUqV+Oyzz2SEYZGr5K9NPFb37t3Vcu3atdUGg1o4d86yEbCPD/z1l2bhCJGnHD9+/LGPOzg40Lx58wzv78UXX+Tdd9/Fx8cHe3t7/vnnH3744QdWr17N//73P1xdXRk5ciQGg+EpIxciYyShEelavXo1F/9rqKLT6Vi5cqVmsdy8aWoEbO5ham8Phw6ZfgshnuzGjRvpPtagQQO+/fZbqlatmun96nQ6nJ2d8fHxYVmKboaxsbFMmTIFZ2dnXnvtNe7cuZOluIXIKEloRLomTZqklp9//nlKly6tSRxRUVC1KpgHK9XrTbeepBGwEBmjKEqabVzq1KnDrFmzmDBhQrpzOmWUTqdjwoQJdOvWzaKrd2JiIitXrsTPz48GDRpw6NChpzqOEOmRhEaka9++fYwZMwZPT0+L/7xyk8EAVaokz6Ct05kaBDdqpEk4QuRJOp2Oli1bqsu+vr7MnDmTyZMnU6lSpWw7jq2tLf3792fTpk306dMHV1dX9TFFUThw4ACNGjVijEy0JnKANAoW6dLr9Xz55Zd8+eWXmhzfYIDq1SHl2F9z5lhOQimEyJgPP/yQ7t27k5iY+NS1MU+i1+vp2bMnPXv2ZPv27SxYsIBbt26pj3t7exMdHa32lhIiO0gNjbBKCQlQtaqtxVgzn34KAwdqF5MQeV1QUFCOJzOPeu655/jpp59YsGABVatWxcbGhp49e7Jz504OHjzIzZs3WbhwIUWLFmXUqFFERUXlanwi/5CERlhYvnw5I0eOxGg0ahZDTAy8805LLl1KHuRrxAj47DPNQhJCPKXSpUvz9ddfs2XLFry8vLC1teXq1avs2bOHTz/9lFu3bjF58mQ8PDyoWLEi3377rfSQEpkiCY1Q3blzh969ezNlyhT8/f3VHk65GwOULWvLnTsu6rr33weZ6FeI/ME8No25Z5SLiwuhoaHq44qicP78eYYMGYKjoyP169dnwYIFktyIJ5KERqiaNm1KQkICAA8ePMDf3z9Xj3/uHJQuDXfvmmtmFEaPtpxNWwiRvzg7O7Np0yb69u2Lr6+vxWNJSUkcPHiQ/v374+DgII2JxWNJQiMAeO+99zh//ry6vHr1aoseCjlt9WqoVi15sklQmDLFyIQJuRaCEEIj9vb2vPHGG6xYsYLVq1fTsWNH3NzcLLYxGo24ubnx8OFDtQv6pUuXuHDhghYhCyskCY1g/fr1TJs2TV3u1asXbdu2zbXjf/ghdO5s6tUEoNcrvPfeYd59V7t2PEIIbXh6ejJ8+HDWrVvH4sWLadOmDe7u7uj1eooXL862bdvYs2cP//zzD4MHD6ZChQq4urrSpEkT5s2bJ7N/F2DSbbuAO3fuHK+88oq6HBgYyPfff58rx46OhmbNIMVE3jg7Q3Cwgbt3bwI1ciUOIYR1CgoKYvTo0QAkJCRgZ2dHbGwsoaGh3Lhxgz179gDw8OFDdu3axa5duxg0aBA+Pj7Uq1ePV199lS5duuDo6KjlaYhcIjU0BVhERAT169dXG9s5OTlx8ODBXJlQLjgY/Pwsk5nAQAgJgbp1c/zwQog8xt7eXp1mwcvLCx8fH4KCgrCzs0u17Z07d9i4cSO9evXCycmJTp06aRCxyG2S0BRQERERlC1blgcPHgCmngc7d+7Ez88vR49rMMArr0Dr1vDwYfL6zp3h6lXw8srRwwsh8gmdTsesWbPYunUrc+fO5fnnn8fLywudTpdqW1tbW0JDQ4mNjUVRFM6cOUOlSpXo27cvGzdulB5U+YTcciqgIiMjeZgio1iyZAl16tTJ0WOuXAn9+8N/ORQAtrawcCH07JmjhxZC5GPly5fngw8+AEyNh/fu3csff/zBmTNnCA8Pp3LlyuzatQsHBwcKFSrETz/9xLlz5zh37hyLFi0CwMPDg5IlS1K7dm1atmzJCy+8kKsdI8TTk4SmgAoKCuLUqVPUqlWLL774gu7du+fYsc6dg65d4dQpy/VVq8Iff4CPT44dWghRwOj1eho3bkzjxo0BU4Kj1+tJSkoiPj6eiIgIdu7cmep5ERERHDt2jGPHjrFgwQIAChUqJCMX5yGS0BQgCQkJ2Nvbq8ulS5fm/v37OdZm5vp1eOMN+PNPy/V2dvDVV6bRf4UQIieZP99sbGxwdnbG2dmZL774gu3bt3Pw4EEuX75MREREmrORG41Grl69iouLC87Ozjg5OeHv709UVBReXl6ULFmSqlWr8swzz9C8eXOKFi2a26cnUpCEpgAwGAy88cYbrF27lmPHjlGxYkX1sZxIZvbtgyFDLBv8mrVpAz//DI8MMSGEELnGy8uLLl260KVLF3Xd5cuX2bt3L6dOneLq1avcv38fLy8vtaOEnZ0dDg4OhIWFYTQauX79OtevX2fXrl3Mnj0bQG207OnpyYgRIxg2bJhGZ1gwSUKTz23bto3OnTsTEREBQMOGDbl58ybOzs7ZepyEBJg5E2bNMvVUelSlSrB0KdSqla2HFUKIbFGqVClKlSplsS7l7aqEhAQiIiLQ6/XpznWnKAoPHz7k4cOHnDp1ioiICJycnLC3t2fFihX07t0bJycn3N3d8fLyolixYpQoUYLy5ctTpUoVatasiaenZ26cbr4kCU0+dfToUd544w3Onj1rsd7f35+EhIRsSWiMRvjlF9M8S4cPm5YfVaECfPsttGjx1IcTQohclfJ2lZOTE05OTgQHBxMXF8fJkyc5ceIEFy9e5Pr160RGRhIXF6cmO3Z2dmzfvh1bW1vs7e3ZunUrRqNRTXhu3rzJyZMnUx1Tp9MRFxdn0Txg8uTJHDt2jICAAEqUKEHJkiWpUKECQUFBuTLMRl4hCU0+YjQamT9/PhMnTuTKlSsWj9nY2PDll18yatSopzrGpUswdy6sXw///JN2EqPTwbPPwuzZULnyUx1OCCGsjqOjI/Xq1aNevXqpHouOjub8+fOUK1cOR0dHDAaDWruj0+nSbKvzqL///ht7e3v1Z+7cuVy+fDnNbfV6vZo0NWjQgODgYIvHR4wYgaOjI/7+/hQtWpSAgAD8/Pzw9fXNdwMOZimhmT17NpMnT+bWrVtUrlyZGTNm8Oyzz6a7/V9//cWIESM4c+YMRYsWZdSoUQwaNCjLQYvU7ty5Q7FixdIcT6Fp06b89NNPmW6wduUK/P477NwJhw7BtWuQmJj+9j4+0K0bfPwxSK2pEKIgcnV1tRgCw1zTMmLECPr164e9vT2XL1/mn3/+4dq1a9y6dYu7d++qQ2no9XrOnDmjjqejKArh4eHpHs9oNJKQkEBCQgL//PMP//77L7a2turPjBkzHptE6XQ6bGxs+Oijj/j000/V9bt372bIkCG4urpSqFAhXF1dcXFxUcuFChXC3d0dNzc3unTpYlGjZL5Vl9syndCsXLmSYcOGMXv2bBo1asS8efNo27YtZ8+epXjx4qm2v3LlCu3ataN///4sW7aMPXv2MHjwYLy9vS2G3BePFxYWxsmTJ9m7dy+HDx8mMTGR3377TX3cx8cHe3t7NaHR6XTUqVOHpUuXUr58eYt9GQxw86YpQfn3X7hwAf7+29T2JTQU7t2DqKi0a18e5eUFzZvDuHGQoq2xEEKINDg6OlK5cmUqZ7D6WlEUevXqxfnz5wkPDyciIoLo6GhiYmKIj4/HYDCot7n0ej379u1DURRsbGxISkp6Yo2QoigYDAZCQ0O5ePEiNjY22NrasnXrVo4fP56hGDt27GiR0DRq1Ij9+/cDphHoc0umE5pp06bx5ptv0q9fPwBmzJjBli1bmDNnDhPSmBp57ty5FC9enBkzZgBQsWJFDh8+zJQpUzKd0JQtOwKdLvUw14piBEzZbIUKn+Pk5P/ferh1awOhoWtSbKtY/AbTbzs7LypVmqY+D+DixS+IiTkPKCT/TaR8numY7u5NCAgYmOIYcOZMN8CI5d+S8shv8PcfjodHQ3W7sLDfuHnzUxQlDkWJxWh8AEQB8Y+cdSGqV8di/3r9m+j1f+Hk1INChd7i6lVXGjY0JTAGg6l2JSkJMlDjmS5XVyhbFl56Cd55R2pihBAiJ+l0ugxN3WCupXF1dUVRFIxGIzExMTRt2pSoqCiio6N5+PAh8fHxJCQkkJiYSFJSkpr0xMfHc+zYMXV/p0+fznCMe/bswc7ODltbW2xsbCxqlBISEjJ3wk8hUwlNQkICR44cUScLM2vdujV79+5N8zn79u2jdevWFuvatGnDwoULSUxMTHMejvj4eOLjk7/AzQMb3b+/5Ikx7tv38SNrLgOLn/g8KM+uXdMeWbcH2PzEZ0ZHe3HjxqNrVwJPruK49P/27jwmqut9A/gzMMyACAouLGopigUJSxBcwAUjiktrq+bbNq11iTZqFTfigtrWaJvSxVK1brWiNWkUU9SmSSGVtIJV1LgMSiuiP6WgdlBxAQQXZji/P3CmLCM6I8Nw7zyf5MZ655yZ8/RV5vXOvXMvT2u0RwnAxPXOTVTi3LnbADrV27cBQN0tBerfVsASCoWAuzvQvbtAUBAwcmQt/vc/0eRy6+Y+grJUzZMnrbHGk7dhzC393PUzPHz4EI6Ojk8da/hHVXV1tcmv65cr5rZebgcHB1RXVxt/7+joaPF5k+PGjYOvry8qKytRWVlpbIYePHhgfI9+/PgxamtrUVFRASGEcWvXrh1UKhX0ej1cXFxw//79lorYLLMamrKyMuj1enh5eTXY7+XlhdLSUpNzSktLTY7X6XQoKyuDj49PkznJyclYvXq1OUuTkfpXHykAdADgDcDryeYPoA+AIABuZjxv3V8mR0cBpbIWTk61UKt1cHHRw939Ebp2rYavbxVefrkcAQH34OnZ+IgQcOSIZYks1fjkNnvB3NL18OFD43/X1tY+V5Nmr/cRYu62zdPTEyNHjrRobv337+rqarz77rsttaxmWXRScOPuUgjRbMdparyp/QbLly9HYr2vka2oqECPHj0QGbkKSqULHBz+m2d4DsOv/fq1R/v2euPjV68OxD//fAOFwvA5iwMUirrx/728Ai4ubhgwQP/kuer25ufPRHn5a3WzjCc4CSgUDsZxCoUCXl6vICjIMLfudY4c2WZ8nvqvVX+9CgUQFNQHXbv+9wf80aNwVFb+H1xdPaBWu6Cg4AJCQoKN/9IzLOO/teuM+xwdBdq3r/vSOsPm5lb3a9OT2RUAnJ5szqhrnNqGmpoaZGVlYeTIkSaP4MkVc0s/d/37ow0bNgyurq5PHavT6ZCTk4PY2FgolfZzwSlz21fuO3futNprmfV/tXPnznB0dGxyNObmzZtNjsIYeHt7mxyvVCrRqVMnk3PUajXUanWT/b/9Nu+pc55uwJPNEuMtnAckJs6wcKb7k63uB31GRgnGjg2Bk5P9/AUwcHJykvwbnCWYW7rqr99wVcjTGI7euLq6Sj63OZjbvnLXP33E2sy6rkqlUiEyMrLJoeGsrCzExMSYnBMdHd1k/MGDBxEVFWVXRSUiIiLrMftC8cTERGzfvh07duxAQUEBFi1ahJKSEuP3yixfvhxTpkwxjp89ezaKi4uRmJiIgoIC7NixA6mpqVi8eHHLpSAiIiK7ZvbnGG+//TZu376NNWvWQKvVIiQkBBkZGfDz8wMAaLValJSUGMf7+/sjIyMDixYtwqZNm+Dr64sNGzbwO2iIiIioxVh0YsacOXMwZ84ck4/98MMPTfbFxsbizJkzlrwUERER0TPxrlZEREQkeWxoiIgaCQsLa3Bfm/o+++wzeHh44NatW8/1XEOHDn3yNQ0KqFQq9OnTB7t3727J5RIR2NAQETURFhaG/Pz8JvtLS0uNX/zZpUuXZz6PEAJ5eXlYu3YttFotCgsLMXr0aEyZMgVFRUXWWDqR3WJDQ0TUSGhoqMl72axYsQJ+fn7GcwjXrFmD0NBQuLq6wsvLCwsWLGgw/tKlS6isrMTo0aPh7e0Nf39/zJgxA3q9HhcvXmyVLET2wv6+rY2I6BlCQ0Nx+fJlPHjwwHi3YI1Gg127diErKwtKpRJCCOj1enz33Xfo1q0bzp8/j8mTJzd4ntOnT8PDwwPBwcEAgGvXrmHlypVQq9UICQnB2bNnWz0bkVyxoSEiaiQ0NBS1tbUoKChA3759AQALFy7EhAkTMHz4cAB1ty+pf88aPz8/DB8+HD/99JNx35kzZ1BeXg43NzfU1tYaG6StW7eiW7dubGiIWhAbGiKiRnr06IGOHTsiPz8fffv2RXp6Ok6ePImCggLjmOLiYnz11VfIzs7G9evXUVNT0+DmlEDdEZq5c+di/vz5uHfvHhYvXozo6GhMmzZNFncXJ2pLeA4NEZEJhvNoHj16hKVLl2Lp0qXGLxAtKytD//79UVZWhpSUFBw5cgTHjh0z3kTWQKPRICYmBgEBAYiKisLmzZvx5ZdfNjghWKPRYNiwYQgICMCuXbswYcKEVr2hH5Fc8AgNEZEJhoYmJSUFer0ey5YtMz6WkZEBnU6HPXv2QKFQAAA2bdqEx48fG8cUFRXh3r17CAkJMe4LDg5GQEAA9uzZgyVLluDhw4eYPHkyMjMzoVKpEBMTg7feeguenp6tF5RIJiTR0AghAACVlZV2dUPLmpoaVFdXo6KigrntAHO3rdwBAQHYu3cvjh49io0bN6Kmpsb4MZGzszMqKiqQlpaGoKAgZGZmIiUlBT4+PtBqtQCA3NxcKJVKeHt7o6Kiwvi8sbGxSE9Px6xZs3D8+HEMHDgQnTt3hk6nw40bN/D+++83GC83bbXe1mavuSsrKwH89z5uTQrRGq/ygq5cuYJevXrZehlERERkgcuXL6Nnz55WfQ1JHKExHH4tKSlBhw4dbLya1lNRUYEePXrg6tWrcHd3t/VyWg1zM7c9MOROSEjAJ598gkmTJuHOnTv47bffbL00q7L3ettb7vLycrz00kut8jGqJBoaB4e6c5c7dOhgV38QDNzd3ZnbjjC3fcnOzsaAAQPw0UcfYevWrfjxxx+fevNfObHXettrbsP7uDVJoqEhIpKro0ePGt/g3nvvPRuvhki6eNk2ERERSZ4kGhq1Wo1Vq1ZBrVbbeimtirmZ2x4wN3PbA+a2fm5JXOVERERE1BxJHKEhIiIiag4bGiIiIpI8NjREREQkeWxoiIiISPLaTEOzefNm+Pv7w9nZGZGRkfjzzz+bHZ+Tk4PIyEg4OzujZ8+e2Lp1ayuttGWZkzs7OxsKhaLJduHChVZc8Ys5fPgwxo0bB19fXygUCvz888/PnCOHWpubWw61BoDk5GT069cPbm5u6Nq1K8aPH4/CwsJnzpN6zS3JLYeab9myBWFhYcYvj4uOjkZmZmazc6Rea8D83HKodWPJyclQKBRYuHBhs+OsWe820dDs3bsXCxcuxMqVK6HRaDBkyBCMGTMGJSUlJscXFRVh7NixGDJkCDQaDVasWIH58+dj3759rbzyF2NuboPCwkJotVrj1rt371Za8YurqqpCeHg4Nm7c+Fzj5VJrc3MbSLnWQN0Pr7lz5+L48ePIysqCTqdDfHw8qqqqnjpHDjW3JLeBlGvevXt3fP755zh16hROnTqF4cOH44033sDff/9tcrwcag2Yn9tAyrWu7+TJk9i2bRvCwsKaHWf1eos2oH///mL27NkN9gUFBYmkpCST45cuXSqCgoIa7Js1a5YYOHCg1dZoDebmPnTokAAg7t692wqrsz4A4sCBA82OkUut63ue3HKrtcHNmzcFAJGTk/PUMXKs+fPklmvNPTw8xPbt200+JsdaGzSXW061rqysFL179xZZWVkiNjZWLFiw4KljrV1vmx+hefz4MU6fPo34+PgG++Pj45Gbm2tyzrFjx5qMHzVqFE6dOoWamhqrrbUlWZLbICIiAj4+PoiLi8OhQ4esuUybk0OtX4Tcal1eXg4Azd6oTo41f57cBnKpuV6vR1paGqqqqhAdHW1yjBxr/Ty5DeRQ67lz5+LVV1/FiBEjnjnW2vW2eUNTVlYGvV4PLy+vBvu9vLxQWlpqck5paanJ8TqdDmVlZVZba0uyJLePjw+2bduGffv2Yf/+/QgMDERcXBwOHz7cGku2CTnU2hJyrLUQAomJiRg8eDBCQkKeOk5uNX/e3HKpeX5+Ptq3bw+1Wo3Zs2fjwIEDCA4ONjlWTrU2J7dcap2WloYzZ84gOTn5ucZbu95t5uaUCoWiwe+FEE32PWu8qf1tnTm5AwMDERgYaPx9dHQ0rl69irVr12Lo0KFWXactyaXW5pBjrRMSEnDu3DkcOXLkmWPlVPPnzS2XmgcGBiIvLw/37t3Dvn37MHXqVOTk5Dz1zV0utTYntxxqffXqVSxYsAAHDx6Es7Pzc8+zZr1tfoSmc+fOcHR0bHJU4ubNm006OQNvb2+T45VKJTp16mS1tbYkS3KbMnDgQFy6dKmll9dmyKHWLUXKtZ43bx5++eUXHDp0CN27d292rJxqbk5uU6RYc5VKhYCAAERFRSE5ORnh4eFYv369ybFyqrU5uU2RWq1Pnz6NmzdvIjIyEkqlEkqlEjk5OdiwYQOUSiX0en2TOdaut80bGpVKhcjISGRlZTXYn5WVhZiYGJNzoqOjm4w/ePAgoqKi4OTkZLW1tiRLcpui0Wjg4+PT0strM+RQ65YixVoLIZCQkID9+/fjjz/+gL+//zPnyKHmluQ2RYo1b0wIgUePHpl8TA61fprmcpsitVrHxcUhPz8feXl5xi0qKgqTJk1CXl4eHB0dm8yxer1b5NTiF5SWliacnJxEamqqOH/+vFi4cKFwdXUV//zzjxBCiKSkJDF58mTj+CtXroh27dqJRYsWifPnz4vU1FTh5OQk0tPTbRXBIubm/uabb8SBAwfExYsXxV9//SWSkpIEALFv3z5bRTBbZWWl0Gg0QqPRCAAiJSVFaDQaUVxcLISQb63NzS2HWgshxAcffCA6dOggsrOzhVarNW7V1dXGMXKsuSW55VDz5cuXi8OHD4uioiJx7tw5sWLFCuHg4CAOHjwohJBnrYUwP7ccam1K46ucWrvebaKhEUKITZs2CT8/P6FSqUTfvn0bXN44depUERsb22B8dna2iIiIECqVSrz88stiy5YtrbzilmFO7i+++EL06tVLODs7Cw8PDzF48GDx66+/2mDVljNcrth4mzp1qhBCvrU2N7ccai2EMJkZgNi5c6dxjBxrbkluOdR8+vTpxp9nXbp0EXFxccY3dSHkWWshzM8th1qb0rihae16K4R4ckYOERERkUTZ/BwaIiIiohfFhoaIiIgkjw0NERERSR4bGiIiIpI8NjREREQkeWxoiIiISPLY0BAREZHksaEhIiIiyWNDQ0QtZtq0aRg/frytl0FEdogNDREREUkeGxoiahU5OTno378/1Go1fHx8kJSUBJ1OZ3w8PT0doaGhcHFxQadOnTBixAhUVVUBALKzs9G/f3+4urqiY8eOGDRoEIqLi20VhYjaIDY0RGR1169fx9ixY9GvXz+cPXsWW7ZsQWpqKj799FMAgFarxTvvvIPp06ejoKAA2dnZmDhxIoQQ0Ol0GD9+PGJjY3Hu3DkcO3YMM2fOhEKhsHEqImpLlLZeABHJ3+bNm9GjRw9s3LgRCoUCQUFB+Pfff7Fs2TJ8/PHH0Gq10Ol0mDhxIvz8/AAAoaGhAIA7d+6gvLwcr732Gnr16gUA6NOnj82yEFHbxCM0RGR1BQUFiI6ObnBUZdCgQbh//z6uXbuG8PBwxMXFITQ0FG+++Sa+//573L17FwDg6emJadOmYdSoURg3bhzWr18PrVZrqyhE1EaxoSEiqxNCNPmISAgBAFAoFHB0dERWVhYyMzMRHByMb7/9FoGBgSgqKgIA7Ny5E8eOHUNMTAz27t2LV155BcePH2/1HETUdrGhISKrCw4ORm5urrGJAYDc3Fy4ubmhW7duAOoam0GDBmH16tXQaDRQqVQ4cOCAcXxERASWL1+O3NxchISEYPfu3a2eg4jaLp5DQ0Qtqry8HHl5eQ32zZw5E+vWrcO8efOQkJCAwsJCrFq1ComJiXBwcMCJEyfw+++/Iz4+Hl27dsWJEydw69Yt9OnTB0VFRdi2bRtef/11+Pr6orCwEBcvXsSUKVNsE5CI2iQ2NETUorKzsxEREdFg39SpU5GRkYElS5YgPDwcnp6emDFjBj788EMAgLu7Ow4fPox169ahoqICfn5++PrrrzFmzBjcuHEDFy5cwK5du3D79m34+PggISEBs2bNskU8ImqjFKL+MWAiIiIiCeI5NERERCR5bGiIiIhI8tjQEBERkeSxoSEiIiLJY0NDREREkseGhoiIiCSPDQ0RERFJHhsaIiIikjw2NERERCR5bGiIiIhI8tjQEBERkeSxoSEiIiLJ+39hpVHA2b06rwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import lognorm\n", + "\n", + "# Parameters for lognormal distribution\n", + "mu = 0.5\n", + "sigma = 0.3\n", + "s = sigma\n", + "scale = np.exp(mu)\n", + "\n", + "# Define the PDF and CDF\n", + "def dlognormal_loss(x):\n", + " return lognorm.pdf(x, s, scale=scale)\n", + "\n", + "def plognormal_loss(x):\n", + " return lognorm.cdf(x, s, scale=scale)\n", + "\n", + "# Plot the CDF\n", + "x_vals = np.linspace(0, 4, 400)\n", + "plt.plot(x_vals, plognormal_loss(x_vals), color = 'blue', label='CDF', linewidth=2)\n", + "\n", + "# Plot the PDF\n", + "plt.plot(x_vals, dlognormal_loss(x_vals), label='PDF', color='black', linestyle='--', linewidth=2)\n", + "\n", + "# Fill area beyond VaR (shadow region)\n", + "var_alpha = 2.42\n", + "x_fill = np.linspace(var_alpha, 4, 100)\n", + "y_fill = dlognormal_loss(x_fill)\n", + "plt.fill_between(x_fill, y_fill, color='grey', alpha=0.5)\n", + "\n", + "# Add arrow and text for P(S > VaR[alpha]) == alpha\n", + "plt.text(3.1, 0.2, r'$P(S > VaR_{\\alpha}) = \\alpha$', fontsize=12)\n", + "plt.annotate('', xy=(2.7, 0.05), xytext=(3, 0.2),\n", + " arrowprops=dict(arrowstyle='->', lw=3))\n", + "\n", + "# Mark VaR[alpha]\n", + "plt.axvline(x=var_alpha, ymin=0, ymax=0.9, color='black', linestyle='-')\n", + "plt.axhline(y=0.9, xmin=0, xmax=var_alpha/4, color='black', linestyle='-')\n", + "plt.text(var_alpha, -0.02, r'$VaR_{\\alpha}$', ha='center', va='top')\n", + "\n", + "# Fill for expected shortfall (striped)\n", + "x_es = np.linspace(var_alpha, 4, 100)\n", + "y_es = plognormal_loss(x_es)\n", + "x_poly = np.concatenate(([0], x_es, [0]))\n", + "y_poly = np.concatenate(([0.9], y_es, [plognormal_loss(4)]))\n", + "plt.fill(x_poly, y_poly, facecolor='grey', edgecolor='black', hatch='/', linewidth=1, alpha=0.6)\n", + "\n", + "plt.text(0.3, 0.93, r'$1 - \\alpha = 0.9$', fontsize=12)\n", + "plt.text(1.6, 0.95, r'$\\alpha \\cdot ES_{\\alpha}(X)$', fontsize=12)\n", + "\n", + "# Replot curves for clarity\n", + "plt.plot(x_vals, plognormal_loss(x_vals), color='blue', linewidth=2)\n", + "plt.plot(x_vals, dlognormal_loss(x_vals), color='black', linestyle='--', linewidth=2)\n", + "\n", + "# Legend\n", + "\n", + "\n", + "# Labels and display\n", + "plt.xlabel('Loss')\n", + "plt.ylim(-0.05, 1.05)\n", + "plt.xlim(0, 4)\n", + "plt.grid(True)\n", + "plt.title('Lognormal Loss Distribution: PDF and CDF')\n", + "plt.legend(loc='upper left')\n", + "plt.show()\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:base] *", + "language": "python", + "name": "conda-base-py" + }, + "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.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/MSMasprob/MSMasprob.py b/MSMasprob/MSMasprob.py new file mode 100644 index 0000000..1dad933 --- /dev/null +++ b/MSMasprob/MSMasprob.py @@ -0,0 +1,27 @@ +# imports +import numpy as np +import matplotlib.pyplot as plt + +# plotting settings +plt.style.use('seaborn') +plt.rcParams['figure.figsize'] = (16, 8) + +# parameters +n = 1000 +k = np.floor(np.log(n)/np.log(2)) - 1 +x = np.zeros([n, 10]) +x[0] = 1 +z = np.array([0.5, 0.2, 0.4, 0.6, 0.8]) + +for s in range(2, len(z)+1): + for i in range(1, int(k+1)): + for j in range(0, 2**i + 1): + t = 2**i + j + x[t, 1] = (j * 2**(-i) <= 0.5) & (0.5 < (j + 1) * 2**(-i)) + x[t, s] = (j * 2**(-i) <= z[s-1]) & (z[s-1] < (j + 1) * 2**(-i)) + x = x * 1 + +# Plot the time series +plt.plot(x[1:400, 1], 'o', c = 'b', ms=5) +plt.plot(x[1:400, 2], 'o', c = 'g', ms=5) +plt.plot(x[1:400, 5], 'o', c = 'r', ms=5); diff --git a/MSMasprob/MSMasprob.png b/MSMasprob/MSMasprob_R.png similarity index 100% rename from MSMasprob/MSMasprob.png rename to MSMasprob/MSMasprob_R.png diff --git a/MSMasprob/MSMasprob_py.png b/MSMasprob/MSMasprob_py.png new file mode 100644 index 0000000..7cc6ac0 Binary files /dev/null and b/MSMasprob/MSMasprob_py.png differ diff --git a/MSMasprob/Metainfo.txt b/MSMasprob/Metainfo.txt index 7140696..798734c 100755 --- a/MSMasprob/Metainfo.txt +++ b/MSMasprob/Metainfo.txt @@ -3,10 +3,7 @@ Name of QuantLet : MSMasprob Published in : MSM -Description : 'Displays an example of which meets the convergence in -mean square but not convergence in almost sure series of the example. -We select n = 400 and plot three cases: the initial value of -Z = 0.5 (blue), 0.2 (green), and 0.8 (dark red).' +Description : 'Displays an example of which meets the convergence in mean square but not convergence in almost sure series of the example. We select n = 400 and plot three cases: the initial value of Z = 0.5 (blue), 0.2 (green), and 0.8 (dark red).' Keywords : - random-number-generation @@ -21,9 +18,8 @@ See also : - MSMpdfasymmetric - SFSmsr1 -Author : Xiu Xu +Author: Xiu Xu, Jacek Wiland -Submitted : Thu, November 5 2015 by Chen Huang +Submitted : December 15 2020 -Example : 'Plot of the series of a random variable satisfying convergence -in mean square but not convergence in almost sure.' +Example : 'Plot of the series of a random variable satisfying convergence in mean square but not convergence in almost sure.' diff --git a/MSMasprob/README.md b/MSMasprob/README.md index 0ed993b..f7d88b0 100644 --- a/MSMasprob/README.md +++ b/MSMasprob/README.md @@ -1,62 +1,41 @@ +
+ +Header Image + +
-[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMasprob** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMasprob +``` +Name of QuantLet: MSMasprob -Published in : MSM +Published in: MSM -Description : 'Displays an example of which meets the convergence in mean square but not -convergence in almost sure series of the example. We select n = 400 and plot three cases: the -initial value of Z = 0.5 (blue), 0.2 (green), and 0.8 (dark red).' +Description: Displays an example of which meets the convergence in mean square but not convergence in almost sure series of the example. We select n = 400 and plot three cases: the initial value of Z = 0.5 (blue), 0.2 (green), and 0.8 (dark red). -Keywords : random-number-generation, process, dynamic, simulation, plot +Keywords: +- random-number-generation +- process +- dynamic +- simulation +- plot -See also : LAWS, clt, MSMpdfasymmetric, SFSmsr1 +See also: +- LAWS +- clt +- MSMpdfasymmetric +- SFSmsr1 -Author : Xiu Xu +Author: Xiu Xu, Jacek Wiland -Submitted : Thu, November 5 2015 by Chen Huang +Submitted: December 15 2020 -Example : 'Plot of the series of a random variable satisfying convergence in mean square but not -convergence in almost sure.' +Example: Plot of the series of a random variable satisfying convergence in mean square but not convergence in almost sure. ``` +
+Image +
-![Picture1](MSMasprob.png) - - -### R Code: -```r +
+Image +
-# clear history -rm(list = ls(all = TRUE)) -graphics.off() - -n = 1000 -k = floor(log(n)/log(2)) - 1 -x = matrix(0, nrow = n, ncol = 10) -x[1, ] = 1 - -z = c(0.5, 0.2, 0.4, 0.6, 0.8) -for (s in seq(2, length(z))) { - for (i in seq(1, k)) { - for (j in seq(0, 2^i)) { - t = 2^i + j - x[t, 1] = (j * 2^(-i) <= 0.5) & (0.5 < (j + 1) * 2^(-i)) - x[t, s] = (j * 2^(-i) <= z[s]) & (z[s] < (j + 1) * 2^(-i)) - x = x * 1 - } - } -} - -# Plot the time series -plot(x[1:400, 1], col = "blue", type = "p", pch = 20, lwd = 3, - ylim = c(-0.05, 1.1), ylab = "", xlab = "", cex.lab = 2, cex.axis = 2) -points(x[1:400, 2], col = "darkolivegreen4", type = "p", pch = 20, lwd = 3) -points(x[1:400, 5], col = "red3", type = "p", pch = 20, lwd = 3) - -``` diff --git a/MSMasymmetricnormal/README.md b/MSMasymmetricnormal/README.md index ce5ac1e..1814e05 100644 --- a/MSMasymmetricnormal/README.md +++ b/MSMasymmetricnormal/README.md @@ -1,63 +1,28 @@ - -[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMasymmetricnormal** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMasymmetricnormal - -Published in : MSM - -Description : Plots the density of right and left skewed asymmetric normal distributions. - -Keywords : asymmetric, standard-normal, skewness, pdf, histogram - -Author [New] : Luis Alejandro Sarmiento Abogado - -Submitted : Mon, February 08 2016 by Chen Huang +
+ +Header Image + +
``` +Name of QuantLet: MSMasymmetricnormal -![Picture1](MSMasymmetricnormal_left.png) - -![Picture2](MSMasymmetricnormal_right.png) - - -### R Code: -```r +Published in: MSM -## clear history -rm(list = ls(all = TRUE)) -graphics.off() +Description: Plots the density of right and left skewed asymmetric normal -## install and load packages -libraries = c("fGarch") -lapply(libraries, function(x) if (!(x %in% installed.packages())) { - install.packages(x) -}) -lapply(libraries, library, quietly = TRUE, character.only = TRUE) +Keywords: asymmetric, standard-normal, skewness, pdf, histogram -## Generate right skewed random numbers -r = rsnorm(n = 1e+05, xi = 2) +Author [New]: Luis Alejandro Sarmiento Abogado -## Plot the distribution -hist(r, n = 100, probability = TRUE, xlab = "", border = "white", col = "red", main = "Right Skewed Distribution") -box() +Submitted: Mon, February 08 2016 by Chen Huang -## Compute the density -d = density(r) -lines(d, lwd = 2, col = "blue") - -# Left Skewed generation of random numbers -rr = rsnorm(n = 1e+05, xi = -2) - -# Plot the given distribution and correspondent histogram -hist(rr, n = 100, probability = TRUE, border = "white", col = "green", main = "Left Skewed Distribution", xlab = "") -box() +``` +
+Image +
-## Compute the density -dr = density(rr) -lines(dr, lwd = 2) +
+Image +
-``` diff --git a/MSMasymptoticnormality1/README.md b/MSMasymptoticnormality1/README.md index a820e4e..d26de41 100644 --- a/MSMasymptoticnormality1/README.md +++ b/MSMasymptoticnormality1/README.md @@ -1,69 +1,24 @@ - -[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMasymptoticnormality1** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMasymptoticnormality1 - -Published in : MSM - -Description : 'Transforms a random variable with a given mean and variance to an asymptotic -standard normal distribution.' - -Keywords : standard-normal, asymptotic, graphical representation, pdf, random - -Author [New] : Luis Alejandro Sarmiento Abogado - -Submitted : Mon, February 08 2016 by Chen Huang +
+ +Header Image + +
``` +Name of QuantLet: MSMasymptoticnormality1 -![Picture1](MSMasymptoticnormality1.png) - +Published in: MSM -### R Code: -```r +Description: Transforms a random variable with a given mean and -## clear history -rm(list = ls(all = TRUE)) -graphics.off() +Keywords: standard-normal, asymptotic, graphical representation, pdf, random -## Generate a set of random variables following a normal distribution -m = 2 -s = 0.5 +Author [New]: Luis Alejandro Sarmiento Abogado -random = rnorm(n = 1e+05, mean = m, sd = s) - -## Determine their correspondent means, standard deviations and variances -mu = mean(random) -sd = sd(random) -var = var(random) - -## Set the transformation function -Y = function(mu, sd, random) { - (random - mu)/sd -} - -## Compute the new set of random variables under standard normal distribution -X = (random - mu)/sd - -## Determine the mean and variance of our transformation -mean(X) -var(X) - -## Plot the results to show that X is asymptotically normal distributed - -## Plot initial distribution -plot(density(random), col = "red", xlim = c(-m * 2, m * 2), ylim = c(0, 1), lwd = 2, - main = "Densities comparison", xlab = "") - -## Plot Transformation -lines(density(X), col = "blue", lwd = 2) - -## Set the legend -legend("topleft", legend = c("Standard Normal Distribution", "Initial Distribution"), - lty = 1, col = c("blue", "red"), cex = 0.9) +Submitted: Mon, February 08 2016 by Chen Huang ``` +
+Image +
+ diff --git a/MSMasymptoticnormality2/README.md b/MSMasymptoticnormality2/README.md index 0019127..bbf7d91 100644 --- a/MSMasymptoticnormality2/README.md +++ b/MSMasymptoticnormality2/README.md @@ -1,76 +1,30 @@ - -[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMasymptoticnormality2** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMasymptoticnormality2 - -Published in : MSM - -Description : 'Shows an example of random variables not following asymptotic normality. For this -specific example a set of Cauchy random variables was selected and its asymptotic distribution was -compared with binomial and normal distributions.' - -Keywords : 'standard-normal, asymptotic, graphical representation, pdf, Cauchy,distribution, -binomial' - -Author [New] : Luis Alejandro Sarmiento Abogado - -Submitted : Mon, February 08 2016 by Chen Huang +
+ +Header Image + +
``` +Name of QuantLet: MSMasymptoticnormality2 -![Picture1](MSMasymptoticnormality2.png) - - -### R Code: -```r - -## clear history -rm(list = ls(all = TRUE)) -graphics.off() - -## install and load packages -libraries = c("MASS", "KernSmooth") -lapply(libraries, function(x) if (!(x %in% installed.packages())) { - install.packages(x) -}) -lapply(libraries, library, quietly = TRUE, character.only = TRUE) +Published in: MSM -## Setting parameters -p = 0.5 -n = 1000 +Description: Shows an example of random variables not following asymptotic -## Random generation from binomial distribution with parameters 1000*n and p +Keywords: +- standard-normal +- asymptotic +- graphical representation +- pdf +- Cauchy,distribution +- binomial -bsample = rbinom(n * 1000, 1, p) +Author [New]: Luis Alejandro Sarmiento Abogado -## Create a matrix of binomial random variables - -bsamplem = matrix(bsample, n, 1000) - -## Estimate kernel density - -bden = bkde((colMeans(bsamplem) - p)/sqrt(p * (1 - p)/n)) - -## Plot the three distributions -plot(bden, col = "blue3", type = "l", lty = 1, lwd = 1, xlab = "", ylab = "Density", - main = "Cauchy, Normal and Binomial distributions", cex.lab = 1, cex.axis = 1, - ylim = c(0, 0.45)) - -plot(dnorm, -4, 4, n = 1000, col = "Green", add = TRUE) - -plot(dcauchy, -4, 4, n = 1000, col = "red", add = TRUE) - -## Set the legend -legend("topleft", c("Binomial Distribution", "Normal Distribution", "Cauchy Distribution"), - lty = 1, col = c("blue", "green", "red"), cex = 0.9) - - - - - +Submitted: Mon, February 08 2016 by Chen Huang ``` +
+Image +
+ diff --git a/MSMcdfnormal/MSMcdfnormal.py b/MSMcdfnormal/MSMcdfnormal.py new file mode 100644 index 0000000..2eab402 --- /dev/null +++ b/MSMcdfnormal/MSMcdfnormal.py @@ -0,0 +1,16 @@ +import numpy as np +import matplotlib.pyplot as plt +from scipy.stats import norm + +# Simulate data +x = np.arange(-4, 4.2, 0.2) +y = norm.cdf(x, loc=0, scale=1) + +# Plot the CDF +plt.plot(x, y, color='blue', linewidth=2.5) +plt.axvline(x=0, color='black', linestyle='--') +plt.xlabel("X") +plt.ylabel("CDF") +plt.title("CDF of Standard Normal Distribution") +plt.grid(True) +plt.show() diff --git a/MSMcdfnormal/Metainfo.txt b/MSMcdfnormal/Metainfo.txt index 5e230eb..39c4cf0 100755 --- a/MSMcdfnormal/Metainfo.txt +++ b/MSMcdfnormal/Metainfo.txt @@ -15,8 +15,10 @@ Keywords : See also : MSMpdfnormal -Author : Xiu Xu, Alla Petukhina, Shi Chen +Author : Xiu Xu, Alla Petukhina, Shi Chen, Rahul Tak Submitted : Fri, October 16 2015 by Shi Chen +updated : Fri, June 13 2015 by Rahul Tak + Example : A CDF plot of standard normal distribution. diff --git a/MSMcdfnormal/README.md b/MSMcdfnormal/README.md index 61e60b5..8a6772e 100644 --- a/MSMcdfnormal/README.md +++ b/MSMcdfnormal/README.md @@ -1,42 +1,33 @@ +
+ +Header Image + +
-[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMcdfnormal** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMcdfnormal +``` +Name of QuantLet: MSMcdfnormal -Published in : MSM +Published in: MSM -Description : 'Simulates data from normal distribution and plots its cumulative density function -(cdf).' +Description: Simulates data from normal distribution -Keywords : cdf, standard-normal, distribution, random, plot +Keywords: +- cdf +- standard-normal +- distribution +- random +- plot -See also : MSMpdfnormal +See also: MSMpdfnormal -Author : Xiu Xu, Alla Petukhina, Shi Chen +Author: Xiu Xu, Alla Petukhina, Shi Chen -Submitted : Fri, October 16 2015 by Shi Chen +Submitted: Fri, October 16 2015 by Shi Chen -Example : A CDF plot of standard normal distribution. +Example: A CDF plot of standard normal distribution. ``` +
+Image +
-![Picture1](MSMcdfnormal.png) - - -### R Code: -```r - -# clear history -rm(list = ls(all = TRUE)) -graphics.off() - -# Simulates data and plot the CDF -plot(seq(-4, 4, 0.2), pnorm(seq(-4, 4, 0.2), 0, 1), col = "blue", type = "l", lwd = 2.5, - ylab = "CDF", xlab = "X") -abline(v = 0) - -``` diff --git a/MSMedgeworth/MSMedgeworth.py b/MSMedgeworth/MSMedgeworth.py new file mode 100644 index 0000000..461515d --- /dev/null +++ b/MSMedgeworth/MSMedgeworth.py @@ -0,0 +1,41 @@ +import numpy as np +import pandas as pd +from scipy.stats import norm, expon +from tabulate import tabulate # optional, for xtable-like output + +# Data and parameters +x = np.arange(-2, 2.2, 0.2) +beta1 = 2 +beta2 = 6 +n = 5 + +# Standard normal CDF +phi = norm.cdf(x, loc=0, scale=1) + +# First-order Edgeworth expansion +edge1 = norm.cdf(x) - norm.pdf(x) * (beta1 * (x**2 - 1) / (6 * np.sqrt(n))) + +# Second-order Edgeworth expansion +edge2 = norm.cdf(x) - norm.pdf(x) * ( + (beta1 * (x**2 - 1) / (6 * np.sqrt(n))) + + (beta2 * (x**3 - 3 * x) / (24 * n)) + + ((beta1**2) * (x**5 - 10 * x**3 + 15 * x) / (72 * n)) +) + +# Exponential CDF (note: this is not really an "exact" equivalent to Edgeworth) +exact = expon.cdf(x, scale=1) + +# Combine results into a DataFrame +result = pd.DataFrame({ + "x": x, + "phi": phi, + "edge1": edge1, + "edge2": edge2, + "exact": exact +}) + +# Round for display +result_rounded = result.round(4) + +# Optional: pretty print like xtable +print(tabulate(result_rounded, headers='keys', tablefmt='grid', showindex=False)) diff --git a/MSMedgeworth/Metainfo.txt b/MSMedgeworth/Metainfo.txt index 8e45377..0767c38 100644 --- a/MSMedgeworth/Metainfo.txt +++ b/MSMedgeworth/Metainfo.txt @@ -18,7 +18,9 @@ See also : - MSMpdfasymmetric - MSMasprob -Author : Xiu Xu +Author : Xiu Xu, Rahul Tak Submitted : Mon, Feb 1 2016 by Xiu Xu +Updated : Fri, June 13 2025 by Rahul Tak + diff --git a/MSMedgeworth/README.md b/MSMedgeworth/README.md index 0f9408b..2c4e085 100644 --- a/MSMedgeworth/README.md +++ b/MSMedgeworth/README.md @@ -1,52 +1,34 @@ +
+ +Header Image + +
-[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMedgeworth** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMedgeworth +``` +Name of QuantLet: MSMedgeworth -Published in : MSM +Published in: MSM -Description : 'Calculate the normal and edgeworth approximations of the normalized sample of size 5 -from an exponential pdf.' +Description: Calculate the normal and edgeworth approximations -Keywords : normal, distribution, normal-distribution, normal approximation, parameter, exponential +Keywords: +- normal +- distribution +- normal-distribution +- normal approximation +- parameter +- exponential -See also : MSMpdfasymmetric, MSMasprob +See also: +- MSMpdfasymmetric +- MSMasprob -Author : Xiu Xu +Author: Xiu Xu -Submitted : Mon, Feb 1 2016 by Xiu Xu +Submitted: Mon, Feb 1 2016 by Xiu Xu ``` +
+Image +
-![Picture1](MSMedgeworth.png) - - -### R Code: -```r -# clear history -rm(list = ls(all = TRUE)) -graphics.off() - -# install and load packages -libraries = c("xtable", "formatR") -lapply(libraries, function(x) if (!(x %in% installed.packages())) { - install.packages(x) -}) -lapply(libraries, library, quietly = TRUE, character.only = TRUE) - -x = seq(-2, 2, 0.2) -beta1 = 2 -beta2 = 6 -n = 5 -phi = pnorm(x, mean = 0, sd = 1) -edge1 = pnorm(x, mean = 0, sd = 1) - dnorm(x, mean = 0, sd = 1) * (beta1 * (x^2 - 1)/(6 * n^(0.5))) -edge2 = pnorm(x, mean = 0, sd = 1) - dnorm(x, mean = 0, sd = 1) * (beta1 * (x^2 - 1)/(6 * n^(0.5)) - + beta2 * (x^3 - 3 * x)/(24 * n) + (beta1^2) * (x^5 - 10 * x^3 + 15 * x)/(72 * n)) -exact = pexp(x, rate = 1) -result = cbind(x, phi, edge1, edge2, exact) -xtable(result, digits = 4) -``` diff --git a/MSMpdfasymmetric/MSMpdfasymmetric.py b/MSMpdfasymmetric/MSMpdfasymmetric.py new file mode 100644 index 0000000..38c2e84 --- /dev/null +++ b/MSMpdfasymmetric/MSMpdfasymmetric.py @@ -0,0 +1,49 @@ +import numpy as np +import matplotlib.pyplot as plt +from scipy.stats import skewnorm + +# Function to convert R's skew-normal parameters to scipy's +def dsn(x, xi, omega, alpha): + a = alpha # shape parameter + loc = xi # location + scale = omega # scale + return skewnorm.pdf(x, a, loc=loc, scale=scale) + +def rsn(size, xi, omega, alpha): + a = alpha + loc = xi + scale = omega + return skewnorm.rvs(a, loc=loc, scale=scale, size=size) + +# Define x-ranges +x1 = np.arange(-3, 1.001, 0.001) +x2 = np.arange(-2, 2.001, 0.001) +x3 = np.arange(-1, 3.001, 0.001) + +# Plotting +fig, axs = plt.subplots(1, 3, figsize=(15, 4)) + +# First plot: alpha = -5 +axs[0].plot(x1, dsn(x1, xi=0, omega=1, alpha=-5), color='chocolate', linewidth=2.5) +axs[0].axvline(np.median(rsn(len(x1), xi=0, omega=1, alpha=-5)), color='black', linestyle='--') +axs[0].set_xlabel("X") +axs[0].set_ylabel("PDF") +axs[0].set_ylim([0, 0.9]) +axs[0].set_title("Skew-Normal α = -5") + +# Second plot: alpha = 0 +axs[1].plot(x2, dsn(x2, xi=0, omega=0.55, alpha=0), color='green', linewidth=2.5) +axs[1].axvline(np.median(rsn(len(x2), xi=0, omega=0.55, alpha=0)), color='black', linestyle='--') +axs[1].set_xlabel("X") +axs[1].set_ylim([0, 0.9]) +axs[1].set_title("Normal (α = 0)") + +# Third plot: alpha = 5 +axs[2].plot(x3, dsn(x3, xi=0, omega=1, alpha=5), color='blue', linewidth=2.5) +axs[2].axvline(np.median(rsn(len(x3), xi=0, omega=1, alpha=5)), color='black', linestyle='--') +axs[2].set_xlabel("X") +axs[2].set_ylim([0, 0.9]) +axs[2].set_title("Skew-Normal α = 5") + +plt.tight_layout() +plt.show() diff --git a/MSMpdfasymmetric/Metainfo.txt b/MSMpdfasymmetric/Metainfo.txt index 36b4be6..959c3fe 100755 --- a/MSMpdfasymmetric/Metainfo.txt +++ b/MSMpdfasymmetric/Metainfo.txt @@ -20,9 +20,11 @@ See also : - SFEbinomv - SFEBinomial -Author : Xiu Xu, Shi Chen +Author : Xiu Xu, Shi Chen, Rahul Tak Submitted : Fri, October 16 2015 by Shi Chen +updated : Fri, June 13 2025 by Rahul Tak + Example : 'Plot of left-skewed normal pdf, standard normal pdf, right-skewed normal pdf.' diff --git a/MSMpdfasymmetric/README.md b/MSMpdfasymmetric/README.md index 4d16279..678195c 100644 --- a/MSMpdfasymmetric/README.md +++ b/MSMpdfasymmetric/README.md @@ -1,61 +1,37 @@ - -[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMpdfasymmetric** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMpdfasymmetric - -Published in : MSM - -Description : 'Plots of left-skewed normal distribution (shape parameter alpha = - 5), symmetric -normal and right-skewed normal distribution (shape parameter alpha = 5).' - -Keywords : pdf, standard, normal-distribution, asymmetric, skewness, plot - -See also : MSMasprob, SFEbinomv, SFEBinomial - -Author : Xiu Xu, Shi Chen - -Submitted : Fri, October 16 2015 by Shi Chen - -Example : Plot of left-skewed normal pdf, standard normal pdf, right-skewed normal pdf. +
+ +Header Image + +
``` +Name of QuantLet: MSMpdfasymmetric -![Picture1](MSMpdfasymmetric.png) +Published in: MSM +Description: Plots of left-skewed normal distribution -### R Code: -```r +Keywords: +- pdf +- standard +- normal-distribution +- asymmetric +- skewness +- plot -# clear history -rm(list = ls(all = TRUE)) -graphics.off() +See also: +- MSMasprob +- SFEbinomv +- SFEBinomial -# install and load packages -libraries = c("sn") -lapply(libraries, function(x) if (!(x %in% installed.packages())) { - install.packages(x) -}) -lapply(libraries, library, quietly = TRUE, character.only = TRUE) +Author: Xiu Xu, Shi Chen -par(mfrow = c(1, 3)) -x1 = seq(-3, 1, 0.001) -x2 = seq(-2, 2, 0.001) -x3 = seq(-1, 3, 0.001) +Submitted: Fri, October 16 2015 by Shi Chen -plot(x1, dsn(x1, xi = 0, omega = 1, alpha = -5, log = FALSE), type = "l", lwd = 2.5, - ylab = "PDF", xlab = "X", col = "chocolate3", ylim = c(0, 0.9)) -abline(v = median(rsn(x1, xi = 0, omega = 1, alpha = -5))) - -plot(x2, dsn(x2, xi = 0, omega = 0.55, alpha = 0, log = FALSE), type = "l", lwd = 2.5, - ylab = "", xlab = "X", col = "chartreuse4", ylim = c(0, 0.9)) -abline(v = median(rsn(x2, xi = 0, omega = 0.55, alpha = 0))) - -plot(x3, dsn(x3, xi = 0, omega = 1, alpha = 5, log = FALSE), type = "l", lwd = 2.5, - ylab = "", xlab = "X", col = "blue3", ylim = c(0, 0.9)) -abline(v = median(rsn(x3, xi = 0, omega = 1, alpha = 5))) +Example: Plot of left-skewed normal pdf, standard normal pdf, right-skewed ``` +
+Image +
+ diff --git a/MSMpdfbinomial/README.md b/MSMpdfbinomial/README.md new file mode 100644 index 0000000..9282f88 --- /dev/null +++ b/MSMpdfbinomial/README.md @@ -0,0 +1,38 @@ +
+ +Header Image + +
+ +``` +Name of QuantLet: MSMpdfbinomial + +Published in: MSM + +Description: Plots three PDFs of the Binomial distribution with + +Keywords: +- pdf +- binomial +- distribution +- parameter +- visualization +- plot +- discrete + +See also: +- MSMasprob +- SFEbinomv +- SFEBinomial + +Author: Xiu Xu + +Submitted: Wed, January 16, 2019, Daniel Jacob + +Example: Plot of the PDF of binomial distribution. + +``` +
+Image +
+ diff --git a/MSMpdfmultinormal/MSMpdfmultinormal.R b/MSMpdfmultinormal/MSMpdfmultinormal.R new file mode 100644 index 0000000..3103631 --- /dev/null +++ b/MSMpdfmultinormal/MSMpdfmultinormal.R @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------ +# Course: MSM - Selected Topics of Mathematical Statistics +# ------------------------------------------------------------------------------ +# Quantlet: MSMpdfmultinormal +# ------------------------------------------------------------------------------ +# Description: plot multimornal density function +# ------------------------------------------------------------------------------ +# Usage: +# ------------------------------------------------------------------------------ +# Inputs: +# ------------------------------------------------------------------------------ +# Output: +# ------------------------------------------------------------------------------ +# Keywords: multinormal density +# ------------------------------------------------------------------------------ +# See also: +# ------------------------------------------------------------------------------ +# Author: Xiu Xu 20150603 +# ------------------------------------------------------------------------------ + +graphics.off() +rm(list=ls()) #remove variable definitions + +#Load required packages +library(MASS) + +getwd() +setwd("") + +bivn <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1, .5, .5, 1), 2)) + +# kernel density estimate +bivn.kde <- kde2d(bivn[,1], bivn[,2], n = 50) + +# plot your results +name=paste("Fig_MSMpdfmultinormal",".pdf",sep="") +pdf(name) +persp(bivn.kde, phi = 45, theta = 30, xlab="X1", ylab="X2", zlab="PDF") +dev.off() + diff --git a/MSMpdfmultinormal/MSMpdfmultinormal.png b/MSMpdfmultinormal/MSMpdfmultinormal.png new file mode 100644 index 0000000..0bf7fd7 Binary files /dev/null and b/MSMpdfmultinormal/MSMpdfmultinormal.png differ diff --git a/MSMpdfmultinormal/Metainfo.txt b/MSMpdfmultinormal/Metainfo.txt new file mode 100644 index 0000000..a953af5 --- /dev/null +++ b/MSMpdfmultinormal/Metainfo.txt @@ -0,0 +1,23 @@ +Name of QuantLet : MSMpdfmultinormal + +Published in : MSM + +Description : "Simulates data from a multivariate normal distribution, estimates the PDF by kernel density estimate and plots the result." + +Keywords : +- pdf +- normal-distribution +- normal +- multivariate normal +- multinormal +- Kernel density +- plot + +See also : +- MSMcdfnormal +- MSMpdfbinomial +- MSMpdfnormal + +Author : Xiu Xu + +Submitted : Monday, November 9 2020 by Lucas Umann \ No newline at end of file diff --git a/MSMpdfmultinormal/README.md b/MSMpdfmultinormal/README.md new file mode 100644 index 0000000..92fb56c --- /dev/null +++ b/MSMpdfmultinormal/README.md @@ -0,0 +1,36 @@ +
+ +Header Image + +
+ +``` +Name of QuantLet: MSMpdfmultinormal + +Published in: MSM + +Description: Simulates data from a multivariate normal distribution, estimates the PDF by kernel density estimate and plots the result. + +Keywords: +- pdf +- normal-distribution +- normal +- multivariate normal +- multinormal +- Kernel density +- plot + +See also: +- MSMcdfnormal +- MSMpdfbinomial +- MSMpdfnormal + +Author: Xiu Xu + +Submitted: Monday, November 9 2020 by Lucas Umann + +``` +
+Image +
+ diff --git a/MSMpdfnormal/README.md b/MSMpdfnormal/README.md index 9db3087..4ca6661 100644 --- a/MSMpdfnormal/README.md +++ b/MSMpdfnormal/README.md @@ -1,40 +1,33 @@ +
+ +Header Image + +
-[Visit QuantNet](http://quantlet.de/) - -## [Visit QuantNet](http://quantlet.de/) **MSMpdfnormal** [Visit QuantNet 2.0](http://quantlet.de/) - -```yaml - -Name of QuantLet : MSMpdfnormal +``` +Name of QuantLet: MSMpdfnormal -Published in : MSM +Published in: MSM -Description : 'Simulates data from the standard normal distribution N(0,1) and then plots the PDF -function.' +Description: Simulates data from the standard normal distribution -Keywords : pdf, normal-distribution, normal, standard, plot +Keywords: +- pdf +- normal-distribution +- normal +- standard +- plot -See also : MSMcdfnormal, MSMpdfbinomial +See also: +- MSMcdfnormal +- MSMpdfbinomial -Author : Xiu Xu +Author: Xiu Xu -Submitted : Fri, October 16 2015 by Shi Chen +Submitted: Fri, October 16 2015 by Shi Chen ``` +
+Image +
-![Picture1](MSMpdfnormal.png) - - -### R Code: -```r - -# clear history -rm(list = ls(all = TRUE)) -graphics.off() - -# Plot the PDF -plot(seq(-4, 4, 0.2), dnorm(seq(-4, 4, 0.2), 0, 1), col = "blue", type = "l", lwd = 2.5, - ylab = "PDF", xlab = "X") -abline(v = 0) - -```