{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里演示了使用逻辑回归的方式 进行识别 手写数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io as spio\n",
    "from scipy import optimize\n",
    "from matplotlib.font_manager import FontProperties\n",
    "font = FontProperties(fname=r\"c:\\windows\\fonts\\simsun.ttc\", size=14)    # 解决windows环境下画图汉字乱码问题\n",
    "% matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 显示100个数字\n",
    "def display_data(imgData):\n",
    "    sum = 0\n",
    "    '''\n",
    "    显示100个数(若是一个一个绘制将会非常慢,可以将要画的数字整理好,放到一个矩阵中,显示这个矩阵即可)\n",
    "    - 初始化一个二维数组\n",
    "    - 将每行的数据调整成图像的矩阵,放进二维数组\n",
    "    - 显示即可\n",
    "    '''\n",
    "    pad = 1\n",
    "    display_array = -np.ones((pad+10*(20+pad),pad+10*(20+pad)))\n",
    "    for i in range(10):\n",
    "        for j in range(10):\n",
    "            display_array[pad+i*(20+pad):pad+i*(20+pad)+20,pad+j*(20+pad):pad+j*(20+pad)+20] = (imgData[sum,:].reshape(20,20,order=\"F\"))    # order=F指定以列优先,在matlab中是这样的,python中需要指定,默认以行\n",
    "            sum += 1\n",
    "            \n",
    "    plt.imshow(display_array,cmap='gray')   # 显示灰度图像\n",
    "    plt.axis('off')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 求每个分类的theta,最后返回所有的all_theta    \n",
    "def oneVsAll(X,y,num_labels,Lambda):\n",
    "    # 初始化变量\n",
    "    m,n = X.shape\n",
    "    all_theta = np.zeros((n+1,num_labels))  # 每一列对应相应分类的theta,共10列\n",
    "    X = np.hstack((np.ones((m,1)),X))       # X前补上一列1的偏置bias\n",
    "    class_y = np.zeros((m,num_labels))      # 数据的y对应0-9,需要映射为0/1的关系\n",
    "    initial_theta = np.zeros((n+1,1))       # 初始化一个分类的theta\n",
    "    \n",
    "    # 映射y\n",
    "    for i in range(num_labels):\n",
    "        class_y[:,i] = np.int32(y==i).reshape(1,-1) # 注意reshape(1,-1)才可以赋值\n",
    "    \n",
    "    #np.savetxt(\"class_y.csv\", class_y[0:600,:], delimiter=',')    \n",
    "    \n",
    "    '''遍历每个分类,计算对应的theta值'''\n",
    "    for i in range(num_labels):\n",
    "        #optimize.fmin_cg\n",
    "        result = optimize.fmin_bfgs(costFunction, initial_theta, fprime=gradient, args=(X,class_y[:,i],Lambda)) # 调用梯度下降的优化方法\n",
    "        all_theta[:,i] = result.reshape(1,-1)   # 放入all_theta中\n",
    "        \n",
    "    all_theta = np.transpose(all_theta) \n",
    "    return all_theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# S型函数    \n",
    "def sigmoid(Z):\n",
    "    A = 1.0/(1.0+np.exp(-Z))\n",
    "    return A\n",
    "\n",
    "# 代价函数\n",
    "def costFunction(initial_theta,X,y,inital_lambda):\n",
    "    m = len(y)\n",
    "    J = 0\n",
    "    \n",
    "    h = sigmoid(np.dot(X,initial_theta))    # 计算h(z)\n",
    "    theta1 = initial_theta.copy()           # 因为正则化j=1从1开始,不包含0,所以复制一份,前theta(0)值为0 \n",
    "    theta1[0] = 0   \n",
    "    \n",
    "    temp = np.dot(np.transpose(theta1),theta1)\n",
    "    J = (-np.dot(np.transpose(y),np.log(h))-np.dot(np.transpose(1-y),np.log(1-h))+temp*inital_lambda/2)/m   # 正则化的代价方程\n",
    "    return J\n",
    "\n",
    "# 计算梯度\n",
    "def gradient(initial_theta,X,y,inital_lambda):\n",
    "    m = len(y)\n",
    "    grad = np.zeros((initial_theta.shape[0]))\n",
    "    \n",
    "    h = sigmoid(np.dot(X,initial_theta))  # 计算h(z)\n",
    "    theta1 = initial_theta.copy()\n",
    "    theta1[0] = 0\n",
    "\n",
    "    grad = np.dot(np.transpose(X),h-y)/m+inital_lambda/m*theta1 #正则化的梯度\n",
    "    return grad   \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 预测\n",
    "def predict_oneVsAll(all_theta,X):\n",
    "    m = X.shape[0]\n",
    "    num_labels = all_theta.shape[0]\n",
    "    p = np.zeros((m,1))\n",
    "    X = np.hstack((np.ones((m,1)),X))   # 在X最前面加一列1\n",
    "    \n",
    "    h = sigmoid(np.dot(X,np.transpose(all_theta)))  # 预测\n",
    "\n",
    "    '''\n",
    "    返回h中每一行最大值所在的列号\n",
    "    - np.max(h, axis=1)返回h中每一行的最大值(是某个数字的最大概率)\n",
    "    - 最后where找到的最大概率所在的列号(列号即是对应的数字)\n",
    "    '''\n",
    "    p = np.array(np.where(h[0,:] == np.max(h, axis=1)[0]))  \n",
    "    for i in np.arange(1, m):\n",
    "        t = np.array(np.where(h[i,:] == np.max(h, axis=1)[i]))\n",
    "        p = np.vstack((p,t))\n",
    "    return p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAD8CAYAAAB+fLH0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzsnWdXXFeW93/3ViAVOeccRBLCQkLR\nSljBcre63T3u6ZnVa2a+xXyC/gjztnv1dHi67bZl2ZItyZKsgBEoACKHIkMBRaqioIC69z4vmHMM\nskJVgXqQh/9aXvKqos4994R99tnhvxXDMNjFLnaxCwH1f7sDu9jFLnYWdoXCLnaxi03YFQq72MUu\nNmFXKOxiF7vYhF2hsItd7GITdoXCLnaxi03YFQq72MUuNmFXKOxiF7vYhF2hsItd7GITzP/bHQBQ\nFGU3rHIXu3jDMAxD8efvdoRQAPjP//zPbW/zt7/97ba3+ybafNva/e1vfwts/5y9TWPwptp9k331\nFztGKPzYYBiG/E9RFPnfdrYroCgKqro9N8Hn+/xjhxjHje+6cXy3Y1x1Xf/BfO3k8X0rhYKYtI2D\nbTKZAp5A0YbJZPrBdz6fD0VRXvjd66BpGqGhoURGRmIymVhbW8PlcrG2thZUewK6rqOqKlVVVezf\nvx+AkJAQnj59Sn19/ZYXma7rxMTEcOHCBR4/fkxXV9eW+vuPgmEY+Hy+oNZASEgIhmHg9XrlWgoL\nCyMiIgJd13G5XFvuX0pKClVVVeTm5uLz+fj222/p6+uTwnen4a0QCmKyhDAICQnBarWSkJBAdHQ0\nAOPj4zidTr8HWUxIUlISc3Nz6Louv/P5fJSUlLCwsMDU1FRAE6frOmlpaZw6dYrU1FS8Xi8ul4v5\n+XmePHnC6OhoUKePruuEhoZy8OBBjh49Kjer1WqltLSUZ8+e4XK5gj7ZDMNAVVVqa2tJTk5meXk5\nqHY2tqfr+ktPxO3SmoRQ37t3LxMTE8zMzPg1BpqmkZSUxNmzZ1ldXaW5uRmPx0NqaioFBQUUFRXR\n1dXFp59+Kg+IQKHrOtHR0Vy6dInU1FTW1tZQVZVf/vKXPHjwgLt37wbz2pvw/OEIBH2YCbwVQsFk\nMmG1WomLi6OkpISMjAysVis2m43IyEgAnj59ypUrVwJq9+TJk+Tl5fHZZ58xNTWFyWRC0zTi4+M5\nf/487e3tXL9+HbPZv2EyDAObzcYHH3yAyWTis88+Y2ZmBkVRyMnJ4cyZMzx48ICenp6AJk3XdaxW\nK6dOnWLfvn0oioKmaQA0NDQwMDCA1+vd8karqalh//79NDc3MzQ0FPTCEhsuNzeX0dFRlpeXURSF\npaUlfD6ffKdgsFHdDw8PJzU1lb1797Jnzx76+vr45JNP/NrEhmGQkJBASUkJq6urZGdn4/P5iIiI\nwOfz0dbWxv3794MWCOIZmZmZREVFsbq6imEYaJqGyWTi8OHDTE5O0tHREdQ4iwMyPDyckpISEhMT\npSa5sLDA06dPWV1dDarvO1ooaJpGdnY2J0+eJD4+npCQENxuNyMjI7jdbkpLS+UiGRwcfOlV4Hn4\nfD6Ki4s5dOgQTqfzBxO/d+9e4uLimJubC1jzOHHiBIqi8Pvf/x6PxyO/n56exul0cvz4cZaXlxkZ\nGfF7MZjNZs6cOcP+/fvRdR2v18s333wDwJMnT7Z8R9V1nYSEBN59913MZvOWtARd14mPj+e9994j\nNzd30/18enqa5eVlTCYTvb29PHjwwK8xeJGaHRcXR1JSElFRUWRnZ6OqKoODgwFt4tXVVbxeL6ur\nq7S3t+P1epmfn2doaEhqj1uxKaiqyvDwMJ9++ilhYWGoqorH46G4uJiqqirKysro7u4O+BohNLC9\ne/dSU1NDcnKyPNAURWFtbY25uTk6Ozv9PtA2YkcLBVgfWIfDQUdHB8vLy4yPj+NwOKisrKSqqoqO\njg4AOjo6/JpAwzAwmUzk5+djtVo3qV6GYRAaGkpGRgaapuFyuQISCoWFhRQWFnLt2jU8Hs+mBa+q\nKlNTU3g8Hmpra5mcnPRrAWuaRkpKCqWlpfJ0tdvtdHV1bWp7qzCZTJhMJtxuN729vUEJGDF+dXV1\nFBUVsba2Rn9/P5qmER0dTVJSEqqqYrFYcLvdfglxk8lESEgIi4uLhIaGcvz4cQDW1ta4f/8+p06d\nwmazsbCwwMDAgN8Hg6qqTE5OMjo6SlJSEo8fP2ZkZARVVVFVVQrZrdz7FUXB7Xbjcrk2rbHBwUHi\n4uLIyMggKSmJiYkJv/os5l9cI2tqaoiIiMAwDDo7OxkbG6O6upqYmBgyMjLo7e0Nqv87WiiYTCaG\nh4cZGhpC0zR8Ph/h4eHs37+f9957D6fTya1btwD8NuKJO39ZWRmrq6u0trYyPz+PqqrylMvKysLj\n8TAyMuL3gKqqSnl5OQ6Hg/7+/h9sVNF2ZmamNOiJK8vLYBgGVquVAwcOEB4eLq8M2dnZVFZWAvDw\n4cMtn2iaplFYWEhISAgDAwNMTEwELRRMJhMWiwWv10tfXx83b97E7XZjsVg4f/485eXluFwuGhsb\n/ZovTdNYWVmRG3R8fBwAp9PJu+++y/79+1EUhdHRURYWFvweB6Fmj42NkZeXR2FhITMzMyQmJhIf\nH49hGIyNjbG4uChP4GDwvAan6zoWiwWLxYLZbPb7JPf5fGRlZQFw6tQpsrKyMJlM9Pf309jYSF9f\nH5GRkZSXl2M2m8nPz+fhw4csLi7+uITC84iJieG9996jqqqK7u5uPv30U7xeL4Dfqriu60RERBAb\nG8vU1BTNzc1y0HRdp66ujrCwML799lu8Xq9fi0zXdfLy8khJSeHy5cusrKz8YLLFyTQ/P098fDwW\ni+W17Yo7Y2Ji4qbPIyIiOHjwoByTpqYmZmdngzZgRkdHU1BQgM/no6urC6/XG5TaKdTjO3fuEBoa\nKtV5XdeJi4sjMzMTQJ5q/vZ3o1r87NkzYN1rkJWVhcVioa+vj2+++UYKD39hGAYrKysYhkFBQQHZ\n2dnk5+djMpmkDaS5uZlbt26xtra2ZZuNuEpVVlaSmprK8PAwS0tLr21X13WioqI4deoUAIWFhczN\nzdHS0sKDBw9YXl6Whmir1YrP56OjowOPxxPUmtjxQkGopEVFRRw4cIDMzEyam5u5du2avJ8GAlVV\niYmJwTAMnE4nLpdLDmRmZqbcgBMTE2ia5rdQ2LNnD4ODg4yPj79wQ4n3EFcWYXB7HXJyckhMTETT\nNKkKikUCcPjwYSwWC1evXg1KY9B1nbKyMnJzc5mYmMDlcpGZmcnc3FxQxktVVRkZGQHWBbVhGERF\nRVFXV0dsbCwjIyPU19cHrZaL34iNtbq6ysOHD5mdnQ1YkJlMJux2OzU1NWRlZaEoCmNjY3R2dmIy\nmaiqqqK2tpa1tTVu3rzp91p7nvdUaDm6rpOTk8OBAwcAaG5ufq0wF/aDCxcukJOTA6x72q5evcrQ\n0BCwPuZWq5WDBw8SExODx+NheHgYTdN+nDYFwzCoqanh0KFDLC8vMzU1RXJyMvn5+fT390tNIZAF\nJv42ISGBnJwcXC4XNpuNs2fPYrPZ5N3NHws2rN/xEhMTaW9vf+lEaJpGeno6ycnJ9Pb24nQ6/drA\n4eHhWCyWTfYHschg/dpUXFyM3W6X9hV/oes6ycnJHD16lLW1NeLj4/nVr36F2WzG6XRy9epVBgcH\nAxY0YvMIN+fhw4cpKChgbW2Nhw8fMjMz45em9DzEGALU1taiKArNzc0MDg4GZcE3mUzSlW2z2XA4\nHFy9epWxsTEMw6C3t5df/vKXvPPOOwwMDNDf37/p/V4EcWKLuTIMg+XlZQzDoKKigrNnzxIdHU1z\nczMdHR2vXGOGYRAREUFFRQV5eXny88ePH2O32+UYCu9USkoKFouF6elpxsfHg/Ye7XihoCgKz549\nw+FwMD8/j6ZpHDp0iEuXLvH3v/+dtrY2gIAk4sjICHNzcyQkJPCv//qvzMzMEBYWRnx8PGtrazQ2\nNuJwOF47qEJ4xMXFYbPZXnj6iRPCYrFQUlKC2Wymr68Pn8/32j4bhsHIyAgej4fQ0FApCDRNk8+2\nWCyEhYVx4cIFANrb2wM60fbs2YPNZmNtbU1a3WdmZti3bx979+5leHjYr7Ze1n5NTQ01NTUoikJ/\nfz/t7e1BCQRhX6mtrQUgMTGRmZkZmpqaXnhd8xfCVqWqqowjEW2Nj4/T1NTE2bNnqaqqkhrQywzE\nmqZRUFDAgQMHpC1B0zQcDof0FoSHh2+6krxqrnw+H9nZ2Zw+fRqLxUJnZyewPseij2IdVFZWEhsb\ni8vl4vHjx1uyg7wVQkEsVHFC3rp1i8TERMrKyujr6wPw+85nMpmYnJzkiy++4NSpU8TExJCSkiIn\np729nZs3b8pTzh+YzWa5gZ/vg4iMy87OprS0lPb2dr9904qiMDs7i8PhID8/X76jruubtBld1wkP\nD6eyspLBwUEZF/AqbPRxa5rG9evXaW5uRtd1SkpKsFqtzMzMvFbNFwba5+Hz+cjJyeHo0aOYzWZG\nR0e5detW0NcGwzCwWCwkJSUB65vhyZMnOJ3OoAWC6H99fT39/f20trb+wGPU0tLCoUOHCA8Pl9+9\n6Oon3vfixYvExcWxurqK2+0mMjKSgoICaadYWVmRwiUyMpKlpaWXHiZhYWEUFxfLPfDw4UMAXC4X\nFosFTdMICwujurqa48ePEx4ezs2bN4OOfRDY8UIBkG4igcXFRVwuFwkJCYSFhQEEFKihKArd3d0M\nDAyQkZFBbm4uhw8fRtd17ty547dbSzzP6/WiaZpUQQUMw5AhrsXFxQwNDXHjxg2/DZiqqrK4uMjs\n7CyFhYXyeRtP2o0LKiEhgYiIiB+4Q18EwzCIjo4mMjISTdPkKZyYmEhRURGPHj2iqanptW3YbDaW\nl5c3jb+macTExHDmzBliY2Ox2+1cvnyZ2dnZoBeroijk5eXJCNaZmRna29u35HkRwmxgYAC73S5d\nkeLdfD4faWlpr9VshNelpKSEhIQEBgcHefToEZGRkezfv5+oqCgmJydZXV0lJCSEAwcOUFtby/j4\nOK2trdjt9he2GRkZSVlZGT6fjy+//JKenh5gfV2Iq1RdXZ004Pb392O327dsEN1xQkEs8ucTc0Q8\ngVB58/LyaG9vx+12A4GHzZpMJlZXV5menubIkSMA3LlzJ6BQYfHM2dlZxsfHKSgooK+vj7W1Nfn9\n8vIy2dnZTE5Ocu3atYDcZrC+ABobG0lLS5MajTA6imcIoTk8POx3mK/omzCmHjlyBKvVKt28jx8/\nfu2pvjFKcaNAsNlsnDt3jqysLMbGxvjqq6+2JBBEaPuxY8dkG3fu3GFubi5ogWCxWMjIyGB5eVkG\nsIk1pigKISEhVFZWcuzYMcLDw5mammJ1dfWl7YWGhpKSkoLP5yM0NJQ9e/ZQUFAAwOjoKNevX5cn\nvNlsJjQ0lJWVFVZWVl7aps/nY2lpifDwcMrLyykqKgLWPU6KopCQkEBcXBwLCwu0tbVRX18ftMdh\nI3ZJVnaxi11swo7SFAzDICYmhsOHDzM7O0tLSwterxdd17HZbERFRVFZWUl1dTXj4+Pcv39fqoDB\nZEgqikJlZSV5eXkMDw/T0dEhY9P9wUZV88aNG1y8eJHTp08zMDCAYRjk5ORQVVUlrdrBnJaqqjI9\nPc1f/vIXKioqSE9PJzMzk9jYWAB50g0PD9PY2Oi3Oq0oCi6Xi4GBAdLT02lqamJ0dHSTK9If7Wuj\nLUec6CdPnpRBSteuXWNsbCwo46KAYRikpaURHR3N9PQ0AMPDwz9w/fkLXdfJysrio48+AtYDoSYm\nJqTGkJCQQHp6OmlpaXg8Hm7fvk1DQ8ML06w3QmhdKSkpxMfHMzIyQlNTE729vVIjeJG78kXzJaIh\nW1tbOXbsGNXV1TJ4zWw2oygKHo+H3t5eGhsbN10ttoodJxTCwsIoKCjAZrNRWFiIy+XC5/ORnJws\nDThPnz6lqalpy1mB2dnZnDp1CpfLxRdffMHc3FxQKq5Qxe/du8exY8dkBKLT6aSjo0MGQgWrPptM\nJjweDw8ePMAwDPLz80lOTgbA7XYzOTkpM0QDHY9vvvmG8vJyxsfHZSRjIG1s3CCKonD8+HH27t3L\n4uIi169fZ2RkZEsCAdbnKisri4iICLq7uwFYWloKeu6FAbexsZHY2FgSExNJTk4mJSWFxMREzGYz\nExMT3L9/n97eXoaGhl4pJMX8f/nll3R3d8v56u/vl/0MtK/Cc/H06VOWl5cJDw8nNzcXWPeKuFwu\nZmdnsdvtftmQAsGOEgoiz+F3v/sdqamp7Nmzh7S0NLxeL5OTk3R2dtLR0cHCwkJA3oGXISUlhcHB\nQW7evMn09PSWBlb0/bPPPsNms2EymfB6vXi9XpnrvxUoiiKt7Ha7XXpdRJpssMJscXGR+/fvB92G\ngDC2paWlYRgGt2/fpqWlZVtOLkVRGBgYoLu7Wxo/hRsx2PZmZ2e5efOmDDkWJ7jVakVVVbxeL0tL\nS34HAKmqyvz8PA0NDfIZZrN5S2NqMpmYnZ3l/v37qKpKREQEsG7YFnYrVVW3nfNiRwkFgYWFBRYW\nFujs7NykmsL3seRbNqb8jwGvoaFBbqytQlVVfD4fc3Nzm4yk28WKJLAVF9zzENFwW4UwBl+/fp3o\n6GgGBgY2WfO32sfh4WH+8Ic/yPa2OqbCmL26urrJ2OfxeDbNXSBjvV1j+Xw/RWTo4uLips/eFHak\nUNjuTfQyvInB3UoK848BDoeDiYmJbRMIAm9qrjb+u5Pxj1xXSrDGmm3txC6b8y528cZh7LI5v31s\nu29Lu7tszm+u3V025yCwkRTlTdzXX8UruFOwkc1IYCt9Fu1tvEvv5PcX2BhsFEx26IvGELbv+rpx\nXJ9/zk4e47dCKGwc3OjoaKxWK4axzsC7VYLRjVBVlejoaDwej9+pzYFC8PQZhiH9zYH+3mw2s2/f\nPgD27dvH8vIyV65cCSrCT8Q1hIeHExoaCqzHPojs050KwdFw7NgxYmJi+H//7//5xacgUthFxCV8\nHwtSX1+Pw+HYFhefyNU4duyYdPmura2xtLTE0NBQ0KxIr4Ou6zJe4kebJQnfZwIKvsaYmBhgPdZb\nkLUGGj78PDRNIy0tjV/84hdcu3btjdCbi0VQUFBATEwM7e3tAZNrGobB4cOHZbZgf39/0ASdgrz0\nnXfeITs7m4yMDGZmZrh27Ro9PT3bqoVtPC23shFEOxaLhffee4+SkhKePHniNzejcJ1GR0ejaZok\ne0lOTubXv/41DoeDb775RnIVbKWfR48eZe/evQBERUWh67rkBfn8889pbm7ekifpRdqOSMByOp1B\nM4e/FUJBsC7HxMRgMpnkKZ6RkSETZLYSBy8i8aqrqzGbzUFRWL0OmqYRGRlJXV0dqampNDY2Sl+z\nv/D5fOzbt4+qqiquXbsGQFtbm8xUDEZLOHnyJBUVFXg8Hm7dukVfXx8Oh2NLY/m8Wq8oChaLRQbk\nbPw+0LbFmNXW1pKfn8/s7Cx37971O25BJJndvHkTQG6c2NhYjhw5QkVFBUeOHMHhcGyJIVvEVvT3\n97OysiJjHtLS0jh79iwnTpxgcnKSycnJoOZNURQSExMlKZCu6ywuLlJVVUV1dTXz8/N88sknATFc\nCexooSDSezMzM0lKSqKpqQmr1Up5ebmU+NtxmonnpKenMz8/H9REPQ/BriRcaeHh4dTV1bFnzx7+\n/ve/y/RWfxedpmlkZWVx7NgxHj58SHNzM8AmFt9A+5ecnExOTg4Oh4PLly8zOjoKELQ7UajMCQkJ\n8iomQrJTUlIICQlhfHyc+fl5Hjx4wOzsrN/PEfNdXFwMQHV1NYqi8OjRI8mx6S9UVZXvKuIVnE4n\nV65cweVyceLECcrKynj06NGWhcLzodFdXV2kpqZy+vRpCgsLpfvWH4i2oqKiOHTokOTCEAWHfD6f\nJOQJCwuTCWmBYkcLBZGF98UXX5Cenk57ezunT58G1jfDxMTEpoCOYCHU6Pj4eAYHB7dUyUnYPhIT\nEykvL2d5eZnGxkYOHDhAaWkp169fD5h6W9d1wsLCOHPmDCMjIzx9+lT2byvGxZKSEsLCwrh79y4D\nAwObmHyCNd7l5eXxk5/8BFVVMZvN6LrOysoKTqcTj8dDTk4Oubm5kvEoEG7NqKgozp07B6wT2/T0\n9NDY2CjfB/wfj+ffTVHWOSDFNTQyMjLo3IqXPQPWtT0RkWuz2QJqT7zb0aNHJd3/6Ogog4ODVFZW\nEhUVhc/n4+HDhwwNDTE/Px/U+tjRQkFgamqK6OhoPvroI1lp59GjRzx8+JClpSXAf+LWF0FVVSoq\nKlBVle7u7i1fHfLy8qirqyM+Pp6nT5+yb98+amtraWlp2UQU6y8Mw2Dfvn3YbDa+/PLLLeVRAJKU\nJTMzE6/Xi8fjYd++fSQkJGAymRgdHcXhcAScW6IoCtPT07jdbjo6OiRxq8fjkWSwv/rVr7BarYyP\njwc0DlarlaNHj8qNND4+zjfffPMDAS6MbIGOsc1mw2q1SpZvf4hqgoHJZMJms+Hz+RgeHg5IUwoP\nDweQ/AnT09N8/PHHpKamUlVVJWn07t+/L9fIj86mIIqUnDx5ksLCQsxms2S06ejoYHZ2lpCQECC4\nE1N4AuLj4+X9VFBeBQNN0ygrK+P9999H13U+/vhjvF4vP/nJT2RC08rKSkAb2jAM4uLieOedd2hv\nb/eb2/F1bYaEhEiPw89//nN5lRE2gYmJCb788suA76Rmsxmv10tra+smTcDn81FVVSXrHAgmLX/g\n8/koKiqisrJSZsXeuXOH/v5+ioqKKCsrQ1VVDMOgv7+f4eFhv42vQgP5zW9+I2t/Li4uMjg4uCVN\nYaMrUrgfxfUqLS0NWA+p9ncMFEWRfA4Oh4OUlBSWl5fZu3cvBw8exGKx0NraytjYGJqmbSkJbccK\nBcHJd/jwYSoqKiQJhtlsJjExkYsXL9Ld3U1LSwuwbmgMRCU3/odlODU1lejoaCIiIqRRKBgBo+s6\nubm5nD17lpWVFa5evYrdbufXv/41MTExfPrpp8zPz5Oamsry8jJut9uv5/h8PsrKyrBarbS2tm5L\nIhisszQJi/jExARdXV2srq4SFhZGRUUFaWlpXLhwgf/+7//G4/H4nRRUUlJCV1cX8/PzcmGura1R\nUlLCuXPnWF1d5e7du35rO8IFm5+fT0hIiMySnJmZ4dKlSxQVFZGYmMjExASRkZHk5uby97//3S+O\nTQFd15mbm2NtbU0WBj5z5gxXrlwJ2KslDKiRkZHExcWxvLzM/Pw8q6uraJrGvn37KCoqoqmpKWBt\nSaROt7S0kJeXR2pqKhkZGQB8++23NDY2SiP8VrScHSsUYH2y+vv75YnmcDgICQnBZrORn59PYmKi\nVKkaGhpYWFgIeJDNZjOZmZmsra3R0dGB1+sNmlg0NTWVuLg4BgYGiI6O5tChQ2RlZeFyuSgvL6em\npoakpCSePHnid41KoTbOzc1JLeH5GIpADZbV1dWcPn2aiIgIurq6+Nvf/iY9ApqmMTExwS9+8QuS\nkpLIy8vD6XRKHoNXwWQy4XA46O3t3fS83Nxczp07h2EYXLlyhb6+voA2bE5ODnv27GFxcZEbN24A\nUFZWxuHDh1leXqapqYk7d+6Qn5+/iZ3JH6iqytLSEn/+85+BdULYM2fOUFxczK9//Wu++uor7Ha7\n3wLMYrHw7rvvSrJawQna3t6Ow+GgtrYWt9tNc3NzwISzQvOw2+3U19dTV1eHyWSis7NTerN+dHwK\nGyGy7tra2uju7sZisbC8vIyqqoSFhVFeXk5FRYUsye7z+bhx40ZABCkLCwvMz8+Tl5fH/Pz8ays2\nva49h8PB5OQkmZmZUtCIOhMmk4mxsTHu3bsXcIFZwzAk96OogSG4KRcXF+nr6wuoBsba2hput1uq\n3CK1WxCjhoWFsbKyQlhYGCUlJQwMDDA7O/vaWABN0+ju7pZ3enE1u3jxIvHx8Vy+fJnOzs6AhK6q\nqhQVFREeHs7s7KwMsMrJycEwDNra2vj8889RVZWkpCS/BS388DQV43z58mWOHz/OwYMHOX/+PH/+\n85/9cnnrui7Vebvdjt1uJywsjPT0dE6cOCGp3j/55BMcDkfQMQqCn0FcpXJzc8nMzJQU9FvFjhMK\nz/uvhctNGJAMw8DtdnPv3j0GBwf55S9/CaxzI4SGhgYUyKOqKpmZmYSFhfH48eMtxTqoqsrQ0BC/\n+93vKC8vp7a2lujoaHp7e+ns7GRoaAi32y37589zRPSdiLK0Wq2cPXuWlJQUXC4XsG6FLysr486d\nO365Uk0mE+3t7YyMjHDu3DliY2Ox2Wx4PB7JHxgeHk54eDgrKyvcvXuXmZkZwD+VVDxf0zRSU1P5\n4IMPSEhI4Pbt27S2tga8ERRFISwsTI5ZTU0NsC4UhJBNSUnh6NGjFBYW0tvb+8p5FPYUwzCkIN2Y\nLSnqaV6/fh2fz0dtbS2nT5/m6tWrMnr2RePg8/koLCzkxIkT9Pf389lnn+HxeGSZwt/85jdERUWx\nvLwsg+82qvr+lBMQYyeeIwy4ycnJVFdXMzIysqUq2QI7TiiEhoZKCrbnIXzVcXFxJCcnU15eLkvR\nj4yMEBIS4rdNQNd1IiMjqaioQNO0LRuWBFwul7zPdnR0cOXKFWnJDjT9V1HWKcGFK0+0KeozwjqJ\n54EDB7h48SKffvqpX5WyFUVhZmaG7u5uzp8/T1VVlST9FF4JYbhyOp3yN/5ClKI7e/YsqampPHjw\ngPv37wcVsKTrOj09PeTn5xMVFUVZWZn8bmFhgbi4OP75n/8ZTdN4+PAh33777SvzCkQAWFFREY8f\nP5b1IoV2I2w2Xq+X+vp6cnNzqayspK+vj0ePHgG8kDNBGMWjo6N59OgRCwsLmM1mMjIyeP/99zGb\nzTQ3N0tBmZqaSldXl2RmfpUnQlwh3333XWC9xsP09DRXrlyhuLiY1NRUaTgWh8VWsKOEgq7rlJaW\nkpKSIrnxN8JsNlNYWEhcXBxxcXEoiiJVpq+//tpv6nSBkJAQkpKSJKXZdtzHVFWVtf5u3LgRVGm7\n59vr7u4mPz+fvXv3ypBe0aZIcwVHAAAgAElEQVTL5aKzs5Pi4mJiYmL8Dggym81MT0+jaRpHjx7F\n5XIxODhIXV0dpaWlzM7O0tTU5DfdvYCIqbhw4QLJyck0NDQELRBgXRj19PSQmZnJoUOHpLFtbW1N\nVm1WFIX6+nrq6+tfO4eKouB0Ojl+/Di//OUvGR0dlb5+YZMyDIOkpCSys7OJjIxkcXHxtQZHs9lM\nf38/ExMTWCwWbDabjI4MCQnh888/p6uri6SkJA4ePEhFRQUlJSUoikJra6ukfHsewotRW1vLO++8\nA6y7Yz/55BMMw5DU/5OTk34br1+HHSUUDMOguLiYkpIS3nnnHVn0RNyhhFtmaWmJyclJ6uvrZUn2\nYK3yqrpe+9CfQp/+QEQKtra2Bl0ebSNEvcPPP/+cQ4cOUVhYKCsxb4SobhTI1WlsbIwnT55QW1vL\npUuXmJ2dJSkpiZmZGW7evOl3iXQB4Sk4f/48mZmZXL16lY6Oji3VZhCb9M6dO1gsFqkp2Gw2wsPD\nGR8f57PPPqO3t9ev55jNZkZGRvjrX//Kvn37iI+Pp6KiguPHj8tQ6Y2q+sLCAo8ePWJkZOSVYyGS\nqvr7+3nnnXcoKytD13UWFhZ48OCB5G50OBxcuXKF6OhoeY15VUSmoijs379f1p8EmJ+fZ8+ePVRW\nVpKUlMT4+Lgs5POjMzSqqspXX33F+Pg4qampREZGkpSUxPz8vAzX7O7uZmZmhsXFRRm4BMG5YERG\nmdfr3ZaMNV3XSU1NZX5+nq6urm2jTRP2iqmpKTIyMmQYMazXnBgeHmZxcTHgrEtFUbh37x4LCwuU\nlZWRnJxMd3c39fX1QdVnNAyDd955h7y8PL744gtZwm47qNN8Ph83b96UrMXx8fHAeiHgoaGhgMhR\nFUVhfHyckZERQkNDSUpKkjUqN8Ln88n8BH9CyVVVlcVuVVVlfHwch8PB6uqqXAuijfn5+R/EMTwP\nTdOkZhEaGiptEBUVFVRWVrKysiKD+AIN9X4VdpRQUJR1Qs07d+4QEhKCxWIhJCSEtbU1aeQRARxb\n5VJQVRW3281//dd/BR2b8KL+l5SU0Nvbi9vt3tYsS5PJxMrKCj09PVI7gu+JO4MRQELzevToEW1t\nbYSGhrK0tBRUxKRhrBdD3bt3L/X19VIgbFdUoAhDFkJB2JyCJZwVQsTn8zE6OvrSrEgh1Px5D0VZ\nL+9WX1+/6bcvWqf+8CkId6nD4dgUDOVyuWhra2N0dJTZ2dmAyhL4gx0lFOB767Ug1Hw+t2E7X17X\ndXkH3y6hcPfuXWB7+7mx/e0kbRVtApKbIlBjqICu67LWw6NHj7ZVIGzs65t4/60yWW/EdpK3Kso6\ndfzHH3/8UkKYYOfrVdhxQkFguzbq67DdzE3/iD6/CWx1vFVVpbe3l56eHlZXV/9h5Lv/F/CPHstd\n4tZd7OL/CHaJW3n7iDXflnZ3iVvfXLu7xK1BINC8eX/a2q72/hEQBraNd8pdfI83MacbSW23s92d\nirdOKGzMvAt2coQ/OjQ0VPrBBVHpdjE5vSgiU7S/lUUlypDPz88DbLvl+W3ERmJfq9WK2WzG5/PJ\nQCd/fi/GUcyN+AyQSXiCCm6jK9zfvsE/3jYQLN6OXu5iF7v4h+Gt0hQ0TSM5OZnS0lLu3bsXsLYg\nAlAqKytllWHx+8HBQdra2gJOv34e4rRKTEz8gSq7trbGzMyMzJ4M5Dk+n4/MzEw++ugjLBaLjMN/\n8uRJwLRbIlJ0Y982qsbbqXaLZwnX2Xaq3iLd22QykZCQQEFBARkZGURGRmK327lz585rT2eRdJaS\nksLExITUAkRIfUxMDLm5uRQXF/Ps2TMALl++/FrtTLx7WFgYERERMnJxO2nd3wRFPLxlQkFVVWZn\nZ4mPjyc3Nzdg6rT8/HySkpI4cuSIzDwMCQnBZDKRlZVFUVERn3zyScCELQIiA++nP/0paWlpPwg7\n1TQNl8sluQX9JVwV7EAnT56U/BEiOcZms3HlyhW/F4hhGKSnp1NWVobJZGJpaYnl5WVmZmZYXl5m\nampKqslb5amMi4ujuLiY7OxsXC4XjY2NkpchmLY3XstMJhM5OTnYbDYKCwtJS0sjNjYWj8fD9PS0\n3+tC1BL56U9/yuTkJCMjIzKRKT09HYvFgtPp5M6dO7LStz8p1OHh4Rw9epSMjAzJDnb37l2ePXsW\nVGzB8/MrQrHFeIirznZcJd8qoaAoCh6Ph/n5eTIzMyULz+sgNtVPfvIT4uLimJub49atW4yPjxMf\nH09mZiZZWVlkZ2dz7Ngxvvnmm6DovUWE4MLCAoWFhTL2XWgMZrOZ7OxscnNzCQkJ4fbt235v5IKC\nAgoLC+np6WFoaIhjx44B62Qjo6OjPH78+LVtiYW1f/9+8vPzcbvdknVaFISZm5tjYGAAu93O5OQk\nEPhdWFEUampqOHXqFD6fj6WlJdLT0ykpKaGxsZGOjg5pE/EXQiPIzc0F1tmc8/LyCAsLY3R0lGfP\nnmG325mdnQ3IPqTrOpWVlURHRxMdHc2ePXtYXV3F4/HQ3t6O3W5nYGBgkx3hVRtPrLWf/exn5Obm\nbtIWz507R0pKCk+fPsXpdPp98Oi6js1m48SJE8B6JvHQ0BBFRUWSA9PhcDAwMMDMzMyWbRdvlVDY\niECYcEXs/MDAAF1dXXR1dTE8PCylq8Vi4ejRo7KmQkREBF9//XVQ8eSGYXDr1i1GRkbQdZ2pqSn5\nuclkory8nEOHDlFdXc3Tp09f+wxN08jMzOTw4cOsrKzQ2NjI6OgoRUVFAGRlZVFTU8PIyAhTU1Ov\nbEsYVRsaGmhqapJp1mtra1itVmJjY0lKSiIjI4Py8nLsdjtNTU0BZd8JyrEzZ84wPj7OvXv3mJ6e\nJioqikuXLnH27Fni4uL44osvAhjV9Y1RVlbGhQsXgPU5m5mZ4dmzZzx48IC5uTl5PQlESxCaBqwT\n1rS3tzMxMcHk5KQMLw602pIorqPruiSBDQkJISIiguPHj1NUVMS9e/doa2vzq78iLbu6ulp+VlZW\nJtev6N/k5CSff/550EVgBN5aoRAIn70IFxXVpISlWUy0pmncvXuXiYkJfv7zn5Ofn090dLRMbAkE\nYpO1trYCm08VTdNYXV2lurqaiIgITCbTazkcdF0nMzOT5ORk7HY74+PjuN1uqcqmpaWRnJxMbm6u\nFECv659gcdr4bj6fj8XFRYaHh3n69CnJycl88MEHLC4u0tDQ4Nem0DSN7Oxs6urqmJqa4uOPP5aM\n0HNzcywuLpKYmBjw1UzTNMrLyzl37pwMe7958yajo6MymS2YbFRd12XK+fz8vKTf32gDCbS9lJQU\nqqqq0HWd4eFhnjx5wuDgIAkJCeTl5VFQUEBSUhIffPABZrOZlpaW1179hIYk5ktoduL6IBL7kpKS\n2LNnT1C1HjbirRMKQioGWkNSnJLw/UbdWM0I1kuwPXv2jKqqKiIjI4M24ijKekWkF90D9+3bR2Rk\nJB0dHZISzR8IF5nQOEQxmPLycpKTkwNawC/7W/G5rus4nU5WV1eJiYnxm3zGZDJx4MABwsLCuHz5\nMi6XSy7cuLg46dYbHh72O81XGG4rKipQFIXPP/8cWOcptFgsWypco6qqJChxOBzMz89L3s5g5/7w\n4cNERUXR3d3N3//+d8nxsbi4yMDAALdv3+bkyZMcPXqUc+fOoes6ra2tr33e4uIis7OzwPfZvdPT\n08TGxhIbGyvrq/7oUqdfB3Ffg/WU2UCxceA1TZOGsNDQUIaHh/F4PHR0dFBZWYnNZgt4YWz0l4vM\nxY1l0oqLi2Vh2P7+fpaXl/064V6UDCPu5OKuu13h6qKd2tpa0tPTefDggd+b12KxkJmZSW9vL3a7\nXfI/Ksr39TN7enpoa2sLuE/z8/Pk5ORw6NAhALKzs2lpaZGUZxBcHIDZbJakux999BGdnZ00NDQw\nPz8fkKAV17zs7GyWlpZ4/PjxC4lZdV3nu+++Iy4ujvLyck6cOMHExATT09Ov7H9LSwuDg4PA+vxr\nmsbCwgKRkZGcO3dOXic9Hs+WvRJvlVAwDIOysjJZcWgrllZBk5WUlAQgT+Hl5WVJYiLubP7c+4Qg\nCA8PJysri8LCQuLj43E6nZKFet++fcTExNDa2kpvb29AJLMv+2w7XVIbWX5OnDjB06dPGRwcDOgZ\n4l6fkpIiacRKS0spLS1F0zQ6OjokH6Q/EPaglpYWVlZWyM7OBtbv7SUlJczMzDA1NUVLSwuLi4sB\njalhGDx48ICJiQnS0tIoKCigpqaGvLw8rl27xsDAgN/tiTqR8fHx9PT0MDIy8sJNrqoqy8vLXL16\nFZvNRk5ODgUFBa+8+okr6Yv+RtDSK4qC2+3eVKouWLw1QkFsuoKCAp49exb0i2uaRkJCAh988AHJ\nycmSIdpqtUreRoCSkhLGx8cBJG//yzaHKB574sQJUlJSJKuwuGOKysOGYfDs2TO++eabgKovPR+t\n9yagaRphYWEcO3aM6upqvvvuO+7fv+934Vaxefv6+ti3b5+sRxAREcHc3JwkCAm06hSsb6SJiQnG\nxsYki3VcXBwxMTFER0eTn59PdnY2N2/efO2J+3yfZ2dnmZ6exmQykZqaKqnjT5w4wdjYWMBEqIJT\ncmlp6aVzpaoqHo+Hzs5OcnNzycrKkhwMr+rr8wJK13VqampIS0vDMAw6OzsDqk35Mrw1QgHWCSvd\nbjdtbW1b2hzJyckkJCQwPDwsuR0tFguFhYUcOXIEi8VCcXExGRkZuN1u/vznP7+QiEWorenp6dTV\n1ZGdnY3dbuf+/fscOHCA0NBQWfxTVVUsFgu9vb04nU6/c+5VVWVqaorl5WXZ743uPKEqbkVj0HWd\nxMREPvjgA7xeL3/5y1+k9yTQQihfffUV3d3d0j8vKm797Gc/k+XogqXNU1VVkuyMj48zNjYmSwjW\n1tbKoLZAsJGjQfTPZrOxd+9e9u/fT319fcAclf6Q54pnA7JyeiAQ8RV79uyR8SadnZ34fL4tHxxv\nhVDw+Xzk5eVRXV3NV199tWUuurW1NWmfcLlczM7OSpZogWfPnjEzM4PX632pQBBu0ffff5/U1FS8\nXq9kC46IiMDn89HW1sbw8DCxsbGUl5dz7NgxpqamApboXq+XmJgYDh8+zPDwsFyoISEhMhYgGO1J\n13UKCwv54IMPmJyclJWXg6FRU5R19umOjg46Ojpk+++88w5RUVEMDQ0FVTbv+f5u/P+UlBTcbrf0\n9vh7n96YWCb+3mw2s7a2xvj4OHv37pXkwNsNwzCIjIyUXgoxVoH83mKxcOrUKRISEtB1nZaWFoaG\nhrZFk9zxQkEYBGtra3n06BFjY2NbZkceGhqiu7ub8vJy3n//fQYGBkhNTaWwsJCQkBAePXrEzZs3\n5R31RdZoEb0IyNqAYWFhFBcX4/V6efr0Kd3d3fT397O6uorJZKKtrU1WB/bXUGoymRgcHMRut1NV\nVUVOTg4HDx6UBsbExETGxsYYGBgIaAELz8uePXu4ePEi4+PjfPnll5LrMVg8r+aaTCap3gaDjW1F\nRESQkpICrJdjj4qKYs+ePTQ0NNDY2OhXGLXYUNnZ2TKSUwSqbSxLCOB0OgPut6IoMqz5Zc/3+Xwy\n1N7j8QQcmavrOhEREaSmpqKqKgsLCzx+/PjHSdz6PHRdJzY2lp///OcMDQ3R3Ny8ZUmoKAper5em\npiaysrIoLS2VVNuLi4vcunWLhw8fSgPOyyAmA9Z95gUFBSwtLTEyMkJXVxcul0sWsBEW7rGxMSYm\nJlCUwPgldV3n9u3bmEwmqqqqOHr06CaLe2tra8DWcsMwKC8v5+LFi7S0tHDr1q2AT3F/nmEymaRb\nU8RH+ANRVFa8q6IoJCcny2uXuE7Mz88HlEuiaRr5+fl8+OGHmM1m5ubmGBwcxGw2s7CwQEhICMXF\nxTidTtra2gK+PplMJmpraxkdHWV8fHxTPQkhkA4ePMjhw4dZW1vjiy++YHJyMqDKViEhIRw/fpy4\nuDjp0gykYO/rsGOFgvBtnz17lomJCb8DaPyB2WxmcHCQ+vp6iouLpVurublZun38qR8gNqYodiIg\nFsLG/m6FS0/4ue/evUt0dDRZWVnSCNrW1kZ7e3vAi7e8vJzTp0/T3NzMrVu3flDSfTshFqvIqfAH\nqqoyMzNDX18fWVlZWCwWHA6HHHNd1xkcHKS/vz+gmh2qquJwOHjy5AkZGRnExcVx8OBBKXjE4VBf\nXx+QN8NsNjMwMMDQ0BCZmZn89Kc/5enTp/L6GRISgtVqJTs7m7KyMlwuFzdu3KCnp8fvg04IhYiI\nCAoLC6XB0m63b6Kl3yp2rFBQFIWlpSWuX7/OwsKC31Zwf2E2m3n8+DGtra3SwhzsSfmPyJM3mUzM\nzc3x8ccfyypasO6XDiSAR5xm+/fvR9M0Hjx4IK832w0hOP0tULMRQgu4d+8eoaGhPxhj4T6GwJKA\nxEa6desWVqtVenQ2kvf4fD4WFhYCbnd6eprPPvtM1g4VnA66rkuh29XVRXt7O7OzszidzqCMxOnp\n6XJMnE6nLDy8XdjRQmFlZUXe997ExhM1KgV2OlmJoPz2NznnRRAbVVSaWlpaeqPvres69fX1sphv\nIPMotCvhcXgeWykGrGmaHMsXBYcFs95MJhPT09MynuD5WBLxHGEMDSavRvxrtVpxOBzcuHFDHgzb\nhR0rFODNMzq/jbRa2zX5Ikz6TcU9CKiqisvl4t69e0GHD7+JeXpTa+t1CWnb0bbdbuf3v/89CwsL\n264lwC6b8y528X8Gu2zOvH1suy9qNz4+npiYGCYmJvB4PAGfNsH01zAMeQd+kYq+y+b85toNpE0x\nT7CeSv6qtREIm/NbydH4PJ3YTsfz2Zj+QlRd+o//+A/ee++9TQaxNwVN04iIiKCurk4m2exi63gV\nmW+w7Yl5On/+PGFhYdu2Nt4qoSACP8LDwzdFH+5k6LqO1WolLi5OplMH8tuRkRG8Xi+5ubkBpTEH\nCjG2ZWVlfPTRR5w+fVpGy20FmqaxtraGz+fb1k0hCExWV1d3/AEh3IUxMTHbev8XrFHHjx+nuLh4\n28Zhx1wfXgUhZa1WKwUFBRw/fhy3283f/va3LRtvNvIUwPdFQbcDgmj2xIkT5OfnY7fb+frrryVL\n0OugKAoLCwvMzMwQFxdHXl5e0LkDr4JwU5aVlXHmzBlsNhuNjY0BR9o9D13XSU9PJzY2VvI/Li4u\nbqn/wltks9koLS2V5er8zTcIFBtdlcFAJJqdOXOG7Oxsfv/73295DES/bDYbqqqytrYmE8W2Azte\nKAgpW1BQwN69eyksLMTj8XDnzp0tLwLBtnv48GHS09NlcdSt0lnBekReQkIC77//PllZWXg8HgoL\nC7Hb7ZKJ2d8++nw+qW1omhYUy9DLINo7deoUNTU1OBwOvvrqq03h2YFio6psNps5fPiwdAEODQ3x\n8OHDgHP+xd+LjNOamhqysrJk+Pif/vSnbWGLFn0XLkOz2SzdooEKCE3TyM3N5fDhw0RHR8t4m+0Q\nXiJnJSIiAl3XAyKrfR12tFAQ0vDChQsUFRVhtVpZWloiJCSEDz/8kMbGRhlJ6C8z8sa2LRYLFy5c\nIDU1lc7OTiIiInj//ff54x//uGVpXlRUxLFjx8jOzsbn88kgk/feew+fz8eTJ0/82nCCaWp1dTXg\nUObXwTAMkpKSOHjwIFVVVXR1dXHr1i2mp6flZggUuq4TGhpKbm4umZmZREdHk5ycTE9PDx0dHZw9\ne5apqSl6e3sDiuQLCwvj3XffpaamBkCyb5nNZrKysqioqKCjo2NLBCOapmG1WklISCAzM5P8/Hyi\noqKwWCx0dHTw3XffAfhF6qvrOvn5+Vy6dIn79+9jNptJTk6WKeRbgc/nIzY2lrKyMgAZPr9d2PFC\nwWKxoGkaAwMDOBwORkdH8fl8/OxnP5Phr0BQee/79+8nOTmZjz/+mNHRUcxmM//0T/9EVVXVprDl\nQKBpGqmpqVy6dImIiAhGR0cJDQ2VKnlOTg5RUVHouu5X7YCoqChiY2Nxu90vJGbZyPYUaGSjoii8\n++67ZGdnMzw8LKNHg9VERKJOXV0dOTk59PX1MT09jc1mo6ioiOnpaTweT8ACXCRu1dTU4HQ6AWht\nbSUhIYHKykpCQ0M5d+4cSUlJkgMimOSwtLQ0ampqZAjx4OAgvb29uFwuIPBgqfz8fLq7u3n48CGH\nDh0iJCQEVVX9rlz1PIT2FR8fz5EjR0hKSmJ8fJzPP/98WwOYdrRQEISfV65cQVVVvF4vq6urZGZm\nYjKZcDqdMtw3mNOhtLSU9vZ2xsbGJMnKnTt3OHr0KPHx8QHTZeu6TnR0NBcuXCAyMpL+/n6uXbtG\nZmYmU1NTDA8PU11dTW5uLpGRkSwvL7+y36qqkpubi8ViweVySVbljeq5KGQiOPu8Xq9fwkZRFGpr\nayWZzJdffrkptPd5NdofCMq57Oxs/vjHPzI1NSWt5MnJyRw9epSenh6Gh4f9btPn85Gens67776L\nx+Phs88+A2B4eJiqqiqKi4tZXl6WaeUOh4POzs6A2aJKSko4ceIEoaGhTE5O8uzZMzo6OjZdG8TY\n+NO2qqp89913+Hw+GYG4sLAQUP7H84iIiADg9OnTlJSUoKoqdrudqampbb1S7mihAN/XUhCLNCsr\ni0uXLuHxeHj06JGcsEATgsLDw/F6vT/IvIyKivKLFfl5CH6FU6dOkZiYSGNjIz09PUxPT8sCKMKV\nmpaWRnp6Ot3d3S9VoQ3DID4+XtaPePLkiVRbQ0JCKC8vB2DPnj1kZ2djtVrp6Ojgq6++YmFh4ZXj\nIQg6KioqMJlMdHZ2MjU1JdmihLoeFxfH4uJiQBTvbrcbi8VCUVERi4uLeDwefD4fhYWFrK6uBpTi\naxjr1ZsOHTpEWFgY169fZ3R0FFifb7fbzfDwMF999RUnTpygsrKSyspKuru7/b5GGIbB8ePHOXDg\nAG63mz/96U+S2v1lcRr+QvAlms1mYmNjcTqdkhg2UOi6TkVFBQDFxcXAOotVW1vbtoep73ihINx4\ncXFxVFRUUFpaisfj4dNPP8XhcARdySkiIgKLxSI1DV3XCQkJ4cyZMzgcjoCt2YZhSGPojRs3aGho\nADYLK9HexnTql0HXdXJzc0lMTGRhYQG73Q6sczZcvHhRLgyfz0d7ezuJiYmUlpayurrKl19++cqS\nekIoiCpZIuNSpCdnZmZK8trHjx9z//59v0/HgYEBLl++zLFjx8jNzeX27dsUFBRgNpv54osvWFpa\nCkjzSEpKorS0lJGREVpaWjZtgKmpKRoaGlhYWKC5uZni4mJJne/v3V1sWkGyWldXx+joKI8ePZJs\n1MFCjJnJZCIyMnJL/InC4Lyxz21tbdtS/OV57FihYBgGBw4c4OTJk5uSYmw2m+Th20oqsuBdDA8P\nx+PxYLVaqampISIigkePHgVEWCGYdA4fPszU1BTNzc0vrAa90fX5Op+yruuSur29vV1yGx48eJDS\n0lLcbjcAV69epbOzk/j4eD788EMqKysZGRmhqanppeMjqM2tVivDw8OSGerkyZPExcUxPT1NSEgI\n8fHxJCUloaqqXyevSDTq7u5mcHCQd999l3//93/H6XTyhz/8IWACFyFofT6fZEfe+E5er5eBgQFp\nyzCbzZJ491XYWGJNVVXu3LlDQ0MDVquVkpISyfl49epVmcm4FZjNZsLCwgLSuDZCXD+ysrKAdT6F\n2dlZ2trafpDyvh3JgztWKCiKwtzcnKy56HQ6WVpaIjk5mYKCAv7lX/6F27dv8+TJE/n3gUBUjBJ8\nDYmJieTm5srKQIFeR5KSkoiLi6OhoUFy/W+EIIyNiYlhcHDQLwapmJgYNE1jYmKClZUVoqKiyM/P\nx2Kx0NjYCKwb3ETG3O3bt/nNb35DaWkpra2tL72/KopCRkaGpKCrqKigpKSE6Ohobty4QWdnJ3V1\ndSQnJ+N0OgPi/ROZjUIoDg8PS87D7777LiC1XrA2OZ1O+vr6fjCmG2nU8vPzJU/GiwSyaDM0NJSq\nqiomJyfp7+8Hvg+EAvj2229pbm7m3/7t37hw4QIff/zxlo14oaGhWCyWF9L6+QOhGWwk/fH5fMTE\nxBAeHo7FYsHj8QCwsrIi3ZPBCrO3KqJxF7vYxZvHjtUUALq7u2URWaF22+12Hj9+TF1dHUePHmVo\naAhA0nT7C1VVefjwIdPT02RkZLC0tISmafKEDYanwOfz4XA4WFtbk9ZgYSCNi4vj/Pnz0sPhdrtf\n+wzBdVBeXs7o6Cgej0eyRIkw76ioKHw+H1FRUeTm5koy05SUFDk2z0PTNOx2O6WlpURERHDx4kXa\n29v505/+hM/n49ixY9hsNlnMN9ATR9d1amtrycnJ4a9//SsJCQmcP3+eubk5Ojo6/B5bk8kkT8eX\n3cVF1GhZWRmTk5O0tra+8lT3+XzEx8dz8OBBHA4HT58+ZXR0lOXlZUnkY7VaZaTgVsPKhcF4aWnp\ntQbgl8FsNvPBBx/I68Pq6ipRUVFcvHhRagTCDevz+Xj06BEPHz4M2PUrnxfwL/6BeNHi0XWdlZUV\nLBaLZGUOFoZh0NfXR3d3NykpKeTl5QUdLisKdiwvL0tBIKIFq6qqqK2tZW5ujj/84Q94PJ7XbgxV\nVenp6aGwsJDi4mLi4+Ox2+2EhYWxurpKZWUlsC4UPB4PqampJCYmous63d3djI+Pv/QZiqIwMDDA\n5OSkLNqiqiqZmZlUVFRQXl7O8vIyDQ0NAVu3hX3lyJEjdHV14XQ6mZubIzk5mSNHjsjybP7YJ9bW\n1nA4HOzZs4fU1FTsdvuma4ymaURFRXHo0CFJh7a0tPTStsWmuXXrFgMDA1RWVvLhhx/icrkYGBhg\nYWFBlqhbXV3l1q1bfs3VqyBqgc7OzuJ2uwM2XIq52chPKbg/N14nNnJXHjlyhOnpabq6uoIylO5I\noSCk88YKTeJfsQj27sniHBIAACAASURBVN3LvXv3mJubA4Jj4RFSVoQ7m81macALps9hYWFUVVXJ\nYJeCggJyc3NJS0tjfHw8oEUmYvrv3bsnKdL37du36f4LkJmZKWMXZmZmJMXcq04JYWh98OABJ06c\nICYmhr1791JVVYWmaXR2dlJfXy/jDAINNEpOTsYwDAYGBuTJ+PjxY8rKykhMTJSU+q+DYRgMDw+z\nf/9+qqurmZiY2FRmPiEhgdOnT1NRUUFvby/3799/bX8VZb3Y8LNnz+jr6yMzM5O0tDQyMjIoLS0F\noL29nSdPnjAxMbFlgSDu/qLfgUIIso6ODtk/YV8QbOICIvlseno6qOLIAjtKKIgIxgMHDmC1Whka\nGsLr9RIaGkpYWBgZGRmUlJTg8/m4ceMGjx8/3rZni+Sjl1F/vQ4rKyusra2xZ88euVFFzEN9fT1P\nnjwJiANSnJQNDQ08fvzYb+Oc6L8/xLNtbW0MDAzIWIewsDB6enp48uSJzHsISv38Hy/A8PCwjLaM\njIwMOEtUVIZaXFyktLQUm81GV1cXAElJSeTk5JCYmMjIyAhff/21X1cy8e5ms5nV1VV6e3ulEVNc\n+URczFYEgqZphIeHk5+fT3x8PCaTicrKyoBrPAjcuXNHFrpRVZW8vDzKyso2FZadmZmhu7tbRv3+\nKIQCfK8NZGZmkpeXR1RUlIwGm5ycpLGxkf7+fukh2K4kELEJg7lDqqrK5OQkd+/e5eDBg8TGxrKw\nsMD9+/dpaWmRFN6B9jVYFuRA/nZpaYmmpiYePnwoPxNxFMFAURRmZmbQdV3e8+Pj46murmZycjKg\nIjiKsl7Wrb6+njNnzpCXl0d+fj7wvTY5MTHBlStXcDgcQdmBNv5GCNStUrX5fD5KS0s5cOAA8fHx\nhIeH097ezuLi4pZyMzbGXnR0dPygUK9wR261/ztKKIjoxevXrxMSEiKj9wBJ4io2yHZHcem6TkxM\nTNDhoj6fj4aGBjo6OqS9w+12b0tW45vmqdxq5N5GCIbh+vp6mR1pGOs1NFtaWl7orn0dGhsbcbvd\nMn8AYHl5mSdPntDX1xcQFfursF3jbDKZGB8f5+uvv5Y1SF0u15YZyTf2bzvn7HnsKKEA3wfACL/r\n4uLipu/exECIO/atW7dem4/wMojfLCwsyNPgTfV3p0NVVdra2mhra5P2DqHiBlOKzjAM2tvbX1jC\nfjuCdbYbirJeAXphYWGTPWyn9fNl2HFCAd48i/PzEHH0onDtVp79tkz8m8aLwruDxT96PWwH3uYD\nYZfNeRe7+D+CXTZn/vfZdn+s7e6yOb+5dt9kX/3FjhEKu/hxY6Nd4W3CdlVy3k68jBlcXLO2nMC1\npV//gyAW1MboRfHyb2LCBLPxdpK4/l+FCLYqKipi3759XL58+X+7S6+FIPM1mUxER0fLEPhgIX4r\nsk2fD84zm81+rTOx/mNjYzlz5gyZmZnys5GRER4+fMjY2NiW3J7wFggFQdwaHR1NVFSUpLMS1XxF\nOfitDoSA4FooKChgbGwsoNRZsZjgzZVjEwJLLKKNTEkb/wYCN3pupHYTdHHBCkXRTnx8PHFxcays\nrJCenk5FRQXNzc3bYoTb+M7bNfeCYzI1NZXs7Gz27t3LH//4x6CK5Iqo0pSUFBRFwel0EhoaSkxM\nDACJiYmYzWZ6enpwuVyvbN8wDOmOvXTpkgw0U1WV8PBwysrKKCkp4ZtvvqGhoeHHKxQ0TaOoqIhD\nhw4RHh5OWFgYqqrKKr6GYdDZ2QnAd9995xehpsDLmHlFivP58+d5+vQpV69e9WuDC+alAwcOsLq6\nSlNTk/RRbxcE3VtdXR0jIyMANDU1Ad9XCFL+P3vv+dxklqb/fxQsybLlIMuyLeecbXACk2lo8nT3\n5NnZ2dmp2pf7D+1WzYvZ2t3q/s5sdzNA04AJJtkYDAZnnDPOluUoWeH3wr9zWjbQ6JHMrNnhqqIA\n2TrPeU64z33ucN0qFTabDZfLJVmK3gURS6/T6UhJScFqtWKz2WhpaWFgYCAo4RIWFkZtbS2FhYVE\nR0czPDzMxsYG2dnZtLa2Bi3ExbyJZ4hDIpQYACHMtVotBQUFVFdXExcXh8lk4uXLlzJsXSmKi4tJ\nSkqisLAQ2GRK0ul0REZGolKpiI2NRa1Wc+fOHW7evPmjglLQ5QOYzWauXbtGS0sLWq0WnU5HZmYm\n58+f59ixY5Ki7f9MRKM/hHS02Wzo9Xru3LnDzMwMBoMBg8FAWloaBw4cADaDm0QR00Da1Wq1b1QJ\nRQ4DoOh0ECSrosR7V1cXc3Nz0s8OoZ1m4j7+ySefUFpaKpmXMjIyAEhPT0etVrO8vCxDqwPxLPl8\nPuLj46msrCQ3N1eyMen1eiwWC//xH/+hmAfA6/VSUVFBaWkp9fX1csPGxMRQUFCAyWR658n4tr6K\n7xQXF3PgwAHi4uKYmpri8uXLQRGiCOGSm5tLbW0tsbGxDAwMsLGxQX9/Pzdv3mRjY0PRBhP0c+fP\nnyciIkKuAavVKu0BDoeDvr4+pqam6OrqCigsXURcTk1NMTo6uiWbc21tjZWVFcxmM6mpqUxNTSka\nB3/saqGg1Wrp7u5maWmJvXv3EhUVxYMHD2Q+hNlsloMpSC3fBbGw9u3bB8CDBw9emxCz2YzBYFCU\nB+HPpuxv+xCnu8fjCYk2XvS5oKBgS2p3bm4us7OzvHz5ksnJSWZmZhgaGgqILVrQkJ89exaz2Uxn\nZyf19fXMz8+TkpLCiRMnKC4upqWlRXF/U1NTWVlZYWBgQCaZpaens2/fPoxGo7z2BQpRVOXYsWMA\nVFRUoNPpcLvdpKamcuDAAS5fvqxYA9FoNJw5c4aioiK6urq4desWaWlpxMTEUF9frzgCUxwqZWVl\n6HQ6ent7WVxcRKvVMjs7y9LSEmq1mpmZGSYmJqTAfNcz1Gq11PyuXr0q24HNtRETE4PZbKa9vV0R\nMe6bsKuFAiCZh+bm5qisrCQvL09mDCYlJdHb2wvAo0ePAs68M5lMlJaWsrq6KpNMxM8iIyPJzMwM\nOhfd/3T2er1YLBY+//xz9Ho93377LVNTU0Gp41qtlqSkJPR6PWNjY8zNzQHQ09MjE8eEEAvEFiBK\njn366ae43W4uXbpER0eH5GuwWq2Sy6G1tVUxbfrIyAhHjhwhKiqK5eVluXANBoOimpji9zIyMjh6\n9KjUjLq6umhqaiIvL499+/aRkZFBYmJiQIxW/m2bTCbCw8O5dOkS3d3dVFdXc+zYMRobG4NeA/v2\n7ZN5H99++61k2Bbl8+CHOVJiexJzuj0DUthCIiIiaGlpYXx8fEtatVLsaqEgVLtf/OIX6HQ6WQPB\n6XTy6tUr7ty5I6stBRr/7vP5yM7Oxmq18vz589f4GDQaDVFRUfJkD3RRqFQqmZ8hWJFVKhW1tbWk\np6fj9XrJyMhgYmIiKCkuJt7tdnP37l16enrkc8XfgS4wr9eL0Whk7969LC0t8fXXX8tiIlarlby8\nPA4cOIBGo2FqakqxQFCpVDJTr7Kykvn5eZxOJ6mpqSwtLSkKJff5fOTm5vKTn/wEk8m0RRiKrFmV\nSoXRaMRkMgXcR9HPxcVFvvzyS6Kiovj8888pLi5mZmaGffv2oVarqaurU1S0RqPRkJmZKTNMhaBa\nW1tDo9FI3oNQsF0ghIWFcerUKRwOBw6HI+Rcm10tFATW1tYIDw+X7i2Px8PDhw/p6emRgiBQgRAR\nEUFlZSWAtNoKKT49PU14eDh6vZ6JiQlGRkYUCYW1tTWWlpZITk4mISGBmJgYSkpKpHtzpwqM+m/S\nYNvT6/WEh4fjdDqJjY0lOzsbm81GfHw8FouFsLAwyZasVCUXqu79+/c5deoUYWFhrK2tUVFRwZ07\nd5ibmwt4vrRaLQcPHsRoNOJ2u6W95/Tp06jVaiYnJ4mMjGRubo6pqamgbArh4eGcO3cOq9XKxYsX\nGR0dldW9hKYTyDiLq6NIhLPZbPziF79gcnKS1tZWuru7pXAIBv5GVvG3Tqfjk08+wWg08t133wWV\nLbodu1ooCIKJy5cvy88SExM5f/48p06dYn5+nvn5efm771q8Xq+X8vJyWTwlOzub3Nxc+TPxR6/X\n09raitPpDHjTCSNfT08PaWlpnDx5Ep1Oh1arpb+/n8zMTCIjI9FoNEFZ3sXvizJpfX198rlKIRLA\nnj17Rk1NDWfOnAE2tS3BEJSfn09fXx92uz2oZ6hUKh49eoRarebUqVNotVoGBgZobGxUJGi9Xi+T\nk5Py2iCyZIeHh7l37x7Jycmkp6fjcDh+lHXpbRDG7JWVFb7++mt5bx8fHycyMlKxB8nn83Hjxg3G\nx8fJzc0lLi6OtLQ00tLSKCws5ObNm5KNXAn8yXMFBZ9KpeLChQvk5OTQ0NCwY67eXSkUtkds+XsJ\nxMI6e/Ys6enpsnCLWq0mNzeXqakpVlZWXptIoWYJ1t+lpSVmZ2e3/K5KpSIrK4u1tTWGhoYUcyuo\nVCqam5sxmUwUFxfjcDh4+PAh4+Pj2Gw2YmNjMZlMW7LnAoVwu6lUKuLi4uSJ+WP1HQLp68jICBqN\nRpa9Ly4u5sKFC0xNTQVlYIQfyscVFxeTmJgoPxcakxIKPZ/PR1NTk3Sx2e12APr7+3G73ezZs0em\naysZCyGYhTD/7rvvAGSZwqioKJaWluR1MFCoVCpWVlZobGzk6dOnWK1WrFarrMbldDr55ptvFL2/\nz+eT1PMAKSkpkrAnPT2dmZmZgL1NgWBXCoWoqCgsFguJiYnY7XYSExPlCSsku0qlkvX0YPMENZlM\nXLly5Y0nsTh16urquH//PsvLy1si1cT9t6CggIGBASYmJoI6zV0uFzdv3pQlw5aXl6WaLtTzhYUF\nRSeF6Pvz58/JyMigqKiIyclJAFn0NFi8evVK2j/Kyso4ffo0gDzRlJ48Ho8Hs9nMZ599RmpqKn19\nffz7v/87eXl5HD16lMrKyoCNwvAD1b+osuVvcbfZbOTm5koaOiUamKChf9M1TKXapMAX5QOUQth3\nPB4P4+PjjIyMMDs7y89+9jPy8vIoKyt7rbDNm+DxeIiOjubChQuyCpiAiI50Op1YLBbOnDnD1atX\nFbF7vQ27SiiIAKDf/e53WCwWYNOesLa2RlhYGDqdDoPBsCXkWaj/DoeD27dvv5OSa2pqagvfAfxw\nR0tISEClUtHT0yOZlJVC8EEIl5uojiyMkEoCrLa3OzIywujoKImJicTGxsrPQ43mNJlM1NbWcvjw\nYaanp7l+/bqiqtACwmYjeB+vXLkiPRorKyscOHAAm82muH8isMofHo+H0tJS4uLiePToEQsLCwHN\nl8fjITc3l5KSEm7evLnFtQc/cEy63e6giU8FRPq0Wq1mZGSEgYEBDhw4QEpKCi0tLT/aX+Hi3r9/\nP4WFhTidTnmAhYWFyZooq6ur7Nmzh5KSEmJiYrh//760tf2fCF4SNoS5uTnMZrMs/6XVardEr62v\nr9PQ0CAt8LBJhx4oS/J2CBdcVlYWDoeDly9fhrTJ3pSUMjc3J7n6lEAIwLCwMMrKykhPT2d9fV0G\np4SSsCO8EIcOHaK2tlZyHY6OjgZd71BwB967d4/e3l7UajXp6ekcOHBAVjYKBWJjlJSUsHfvXlZW\nVhTNl8+3WYKwoqICrVZLfX09drtdjqPRaKSmpoaOjo6Qha0/fZp/2bdA+xkZGUlOTo6MORHv/uzZ\nMxobGyUlYU9PDxUVFRw7doyf//zn9PX18fDhQ6anp4Pq/64TCk6nk0uXLpGZmUlWVhbx8fFyI83M\nzEhqcnHi+383FKtubGwsZrOZlpaWoPn5fwwul4uIiAiMRmPAdz9h9IyIiODo0aOUlpayuLjI9evX\ng66MJSBqRXzxxRcy9Liuri5g8tM3QaVSMTU1RUdHBzk5OezZsweVSoVOp2Nubo5Lly6FVBBV2IUA\nqqqqiImJ4c6dOwwMDCi6NrS2thIVFcWBAwdIT09ncXGR9fV1TCYTGo2Gzs5OOjs7gzZanj17FpfL\nRX9/v+xzXl4e2dnZbGxsBMS5qVKpWF1dpbm5mZqaGhwOh5zzzs7OLYbH1dVVHjx4wPPnzzl27JgM\nzLt06VJQsRa7SijA5mCsr6/T0dFBR0eHzHcAJEXbTmdHarVaiouLUavVdHd375jBxh9K+yvU4/Ly\ncqKiorBarQwPD8tNIDZHMEJBFIw5ceIEGRkZNDY20tDQEDLXoYjUu3jxIiaTifj4eOLi4lhaWpI1\nGUJRx71erwzvTkxMZG5ujp6eHkUp2eLgqa+vR6VSUVxcjNVqZXp6mqGhIQYHBxkeHg5aS9BqtaSn\npxMbGys3p/91d2hoKCB7gnj2o0eP6O3tZX19Xa5/rVa7ZRz998fly5cZGhqShtdg5nPXCQXYeuo7\nnU75+fugtxKSPC4ujunpaQwGw3uh/pqfn1dE9eb1esnNzSUzM5PV1VXq6+t58uQJq6urIQenAJSV\nlVFUVMTt27e5e/fujvEGiDYcDgd2u12q9tsXcjDw+XwkJCQAm3YQUTUrGIOwx+Phzp07PH78GI1G\nI+09wkMSrN1nZWWFixcvkp2djc/nIyYmhqSkJFZXV+nu7qarqytg+wdsCgBRoOhd4yf2zYsXL1Cr\ngy/AvCuFgj/exwbd3r7b7eaPf/xj0OSi74Jaraa1tRWj0cjs7GxA7Wu1Wm7dukVbWxuzs7MytHWn\nNu7ExARXrlzh6dOn74VI5H2Mo0qlki7o5eVlmpubmZ2d3RGDsPgsVMGlUqmkxvG2nyvtr9Jx/LuI\naPxb4H2SqahUm+y+Ig070Og4wQgcSh2Gt6G9vX1L+vGHAI1GI2uL/ud//idzc3MhU6a/j0PnQxnP\nt+EjcetHfMTfCQIlbv2wRdpHfMRH7Dh2zfXh/zrbrvBTv+368KExDsNHNufdtL4CaTdQfNQU/gbw\ner0kJSVx9uxZLBaLotj/j/gw4fV68Xg8eDyet7Iv79Rzdno97RpNQQl8Pp+kyHpfBKlioEM1Rnm9\nXsxmM59//jlms5mFhQXJCbCb8CYSVLGgQ7Fmi1qSOzFPgrRW/Fvgfa4DpRDBQoJTVMTdrKysbAk4\n2ilERUXh9XpZXV3dsTZ3x0gqgM/nw2g0kpeXx8LCAsPDw4By16WQsG+aJK1WS2RkJLDpbw+FhUmt\nVlNYWEhMTAyNjY20tbUpbuddz4DQ+R+FO04sYpVKRXp6OhEREfT29gZ1Gnm9XsmvOTQ0FDIzdERE\nBGlpaQDExMTId5+ammJoaOi9u6/fBY/HQ1JSEkVFRaSnp5OWliaJarq6uujr62NsbGxHXMBiPH7/\n+98zPj7O5cuXg16n2/FBCQV/fsVjx47x6tUrvvrqKwBFmYcej4esrCzS0tJ4+PDhlgUvFmBtbS0Z\nGRk8efKE5ubmoCLcPB4P+fn5HDx4UFZJVsLR4A9/+nX4IZBLJL4oiavf3seUlBQOHjxIdHQ0TqeT\ngYEBXr58SUVFBTabjfHxcRwOh6J+i2zJCxcuoNPp+POf/8z09LRiH73Iz6iuriY3N1cmRrlcLrkx\ntFot169fDyiEWoxfoCp9oIFMgp/jwoULWCwWFhcX6ejokIxbR44cobKykq6uLurr60Pi6xT9z8nJ\nwWKxMDIyEnQ7b8IHJRREeG55eTnr6+v09/crLtLh8/kwGAxUVVWRk5Mjs9fEYhKL0GazkZiYSGJi\nokzEUgKPx0NcXByHDh1CrVZz8+ZN7HZ7UJtCnCyRkZFERUVhs9lISUkBNglrbTYbT58+pb6+XnHb\nSUlJnD59mqSkJF69eoVarebIkSNERkZKnr9gkrhECLHFYkGj0WCz2Xj16pWitoRW+Jvf/IakpCQe\nP35MQ0MDsBnpKq42X3zxBUeOHGFiYuKth8Phw4ex2WzMz8/j8XgYGRlhdXX1RzemSqViZmbmnfRx\nYl2eO3cOr9dLfX29zGAEMBgMFBYWUlNTQ1VVFXq9nu+++04xKez2sRHa7E7jgxIKgOTj7+vr4+bN\nm/JzJVpCUlISWVlZkiLNn95Ko9FQXV1NQkICi4uLdHZ2Ko4hFyQjp0+fJiMjg7t379LZ2RnUAkhM\nTCQnJ4e4uDhiY2OxWCxERUWxvr4u30fQ4AvhFahGo1arqa2txWq1bkmyOnfuHC6Xi9TUVEZHRxVx\nVYo+ZWZmUltby+DgIBkZGRiNxqAEYllZGUlJSdy/f5+mpiYZ9i5sPSI7Nj4+XnIMvAlut5u1tTWK\niorQarUyS/LHnq3Vavnyyy/fmUYu0tefPn1Kd3e3DEsWY7a2tsaTJ08YHh7mV7/6FSUlJfT29vLi\nxQtF47EdO3F1fBM+GKEgou+qq6vlPU2U9lLShk6no7KykvDwcGZnZ7cQqXq9XmJjY8nLy5P0YX19\nfYqfoVar2bdvH/n5+bS3t9PY2KgoaUe0ExERwfnz50lOTmZjYwOHw8HExATNzc0yss9sNvOrX/1K\nsjArSSEODw8nPDyc+fl5urq6cLvdeL1eOjo6+OKLL4BNOnEldQ9EHYnz58/T29vLy5cvpVBTSkUn\nwppv3rzJ8+fPX7t6iflKT0+ns7PzR0OeGxoa0Gg0GI1GVCoV8fHxko5vbW2N0dFRYmJiZFZuZGSk\ntLG865ohNAqRyiz6uN0YOjExQWdnJ8eOHaO4uFhGlQbLK5mZmYlarWZtbW1HPRAflFCwWq0kJyfj\ncrl49epVUINpNpvJzc3F5XJx7949SXQp1LFPPvkEi8XC9PQ0d+7cCaqvWq0Wm83G8vIy9+7dC0pN\nFMk1dXV1JCcnMz4+ztzcHMvLy8APvAJWqxWn00lXV5ciISna7+rq4vz58xw+fJibN29itVo5d+4c\nBoOBGzduKLIleL1eoqKiOHHiBLOzs1y5cgWz2byltoGSa5harWZwcFCmRm8XCFqtllOnTslT+sfW\ng8h1ENWeFhcX6e3t5dq1a6+9Q1paGr/+9a8V0aT75034fD9UnBJ9NhgM5Ofnk5eXh8/nY3p6OuhM\nTOHRMpvNeL1epqencblcO8IUDR+QUFCr1fI+NjAwwODgYFBCQWgBa2trDA8PSwnr9Xqprq6mtLQU\ngOfPn0s6MiXWYp/PR2FhIWlpafT390saMfEMJS5OlUrF8PAwg4ODclOJ/oh6hPv27WNkZITh4WHF\ngketVtPV1UV+fj5VVVVERESQnp7O6uoqX331FcPDw4rHWK1WMzo6Kq9dCwsLiitM+WP7eIn5UqvV\nHD16lPT0dC5dusTCwkJAWYTv6ofP5yMpKQmj0cjc3NxrzEzvgmAPq6ioICkpSWaHhoeHY7VapVF4\nZGQEt9sdtLvXn/JfKQX/u/BBCAWv1ysH1ev10tXVpZguze12k5OTI3PctVote/bsobu7WxrxrFar\nzJoUd3lB2y7u8O/qp8Vi4eTJk9jtdurr6+XJKE5Rp9OJy+UK2F+t0Whee0+fz0dRURGwWYH48ePH\nrKysKPaBizt5W1sbaWlplJWVMTQ0xJ///GdJtqJksanVahwOB48ePZL/3055FwrEdQHg4MGD1NTU\nYLfbiYmJkTyYoVr0TSaTtDt0dHQoZl4W176qqipiY2Px+XysrKywuLjI8PAwBoMBi8XC6dOnmZmZ\nCYrEF5BsZEtLS68VhwkVH4xQyMrKIiEhgcnJSbq7u4O+h+n1ehlMc/jwYfbu3Qv8UKBVFK4tKioi\nOzsbr9fL4OAg33zzzTsHXhQuiY6OpqOjg5GREUwmEwkJCeTm5pKcnMzq6iodHR28fPkyqIkU9QQO\nHToEbLJRBctmJAyimZmZ6HQ6vF4vDocDl8sVNKcAsKOCQLhhhRFRlAeMiIjg9u3beL1eDh06RHp6\nOteuXQvJ1SeukDExMaysrNDd3a3YbqVWq1lYWODKlSvSOyCIZ9fX14mMjOTMmTMUFhZSWVnJrVu3\ngoqxiYmJwWQyMT4+HjQN/9uw64WC2MA5OTkYDAbsdrtia7hoJzw8HJ1OJ6nARZCSGFD/MvIbGxu0\ntrZiMBhoa2t75/NEzciCggLsdjsvXrwgPz+fTz75hNjYWPkct9tNa2trcIPx/7+HzWYjKioKgFu3\nbgXFsCPGtaamhj179vDs2TMSEhIoLi6mtbV1S6GdUCDu18EGf0VFRaHRaCQxycTEBADffvutdEuO\njo7ys5/9jE8//ZS//vWvIfU3Pj6e2NhY7HZ7UHUkxMHS3d295aojtKa5uTn6+vrIz88nPT2d8PDw\noMh8Rfk9ES25kwREH4RQsNlsZGVl4XQ6aW1tVSy9YXNiRKGTyMhIZmZm6O/vl4xIubm5pKWl4fV6\nefXqFS9fvqSpqUlOWCBaQlhYGOHh4TJGobq6mtTUVBlrsL6+TltbW9DRfSJC8Pjx49L7EEjF4jf1\nFeDo0aNUVVVJVqcvvvhCcbm8H4Mw7o2Pj8v+K4EI/CksLOSbb77B5XLJdxWCUKPR0N/fz6VLlzh7\n9iwGg0FRWbrtEMbBYCj/RECUsP286TqnUqmYmJgI6nom5k2r1RIdHS1tJH93Lkmfz0dlZSXR0dEs\nLCzQ19cX1IbSarUMDg7y9ddfEx0dzdTUFOPj43KgIyIiyMrKYn5+nqtXrzI6OvrG+/zbIMKDX716\nRVFREWfPnkWv16NWb5YKn5+f59atW4yNjQV9cnq9XkpKSjAajVIoBMPz7/Nt1tOsqKjg+fPnPHjw\nAL1eT3x8PIODg8zPz+/IQhPCcHl5mfj4eMLCwhRV8hZGy1OnTnHkyBHq6+sl6al4Z2Fw83g8qNVq\nIiIiWFtbC7nvSiBc3ampqeh0OkZGRlhfX5dXUSFgxHgkJCRgNBqx2+1BXbEEGS4oF7SBYNcLBbVa\nLQ2AbW1tIVlaVSqVpMlSqVSEhYXJE76oqAiv10t7e3tQFOdqtZqVlRXq6+tZWVmRRlHYZDkS1nh/\n45sSeDweUlNTKS8vZ2BggOfPn8vnKoV/XsPU1BRGo5GKigpMJhP19fWsra3tSOJOeHg4MTExeDwe\nMjIySEpKUpSjjj4ChgAAIABJREFUINTt+vp6Tp48icFgkFGbory9RqMhPz+fs2fP4na7pcsxWPgH\nsilh3c7IyOA3v/kNHo8Hl8vF6Ogovb29TE9Ps7KywtLSEiaTieTkZPbv3w9ssjIHW19E2IBGRkZ2\nPANzVwsFYVgyGo0yNFX4f4PF2yZAaAU9PT1BCx1R1uzatWuvBa6EQqQJmwsvJSUFnU4nKb6BoMZC\npVKh1+sB2L9/P9XV1VitVpqbm0NKXPLva0FBATU1NcTHxxMVFcXKygoWi4WhoSFFbanVap4+fYpe\nr6esrIwLFy4ASFev2WwmOzubqakp6urqFNd+3A7xXa1WS0REBLOzswH1cXp6mvb2dmJiYtBqtWRn\nZ1NQUIDL5cJutzM3N4fFYiEuLg6Px8O9e/doaWlRNNb+Btyenh5yc3O3EBvvFHa1UBAus+HhYebn\n5wMmPVX6DK/Xy507d9DpdIoTf97U3k6nx4qAmoMHD9LV1UVra2tIz/D5fLS0tMhaF2NjY9TV1clT\nZyfGWFwbxsbGGBoaYnl5OSjPgIgobGhooKWlhbi4OGAzPiMpKYnl5WVJax4qRb3ot8fjwWAwkJiY\nyODgYEB07Ha7nUuXLqHT6aR6L95VHAr+RYz9C9AohUql4uXLl0xMTOxImbjt2NVCQUBYlIMx/gQC\nUadRbIj/7RTc7dBqtRw5cgTYrAMQLJ+/gEq1WbTlv//7v7d8tlNGK7VaLUOcd6J9IRhE+TlAZgYK\njSxUTUw8Z3R0lOnpacxmM+Pj44psSm63e0uhl7ep9WIcQl3LIsbh787QCH8bdtzdzMCrUm2WdV9e\nXg6q6Ovb2nwfdTTeV/vvi3nZH2q1msXFRS5evIjRaFQcuPS36KM/3tea/cjm/BEf8XeCQNmcd42m\n8JFY88Np9yNx6/trdzcQt+4aofBj8HcP+ft9PzSI9/hbq5m7CX9vY+Afpv2+n+MfQRnK2O56oSAs\ntBEREYSFhaHRaHC5XCwtLYU82P4D6f9vAX/ewlAhwoojIyNZXl5WzOQk2hBkqv50bB8CRLSf0WjE\nYDCwvr7O2tpayLyN/vO3E8bGnYSIgdHpdDtKrPqm5xgMBoxGI7BZUi8U1+yuFgoi9r22tpbMzEyi\no6MlKcjTp09paWmRgx3M4jIYDERHR+Pz+TCZTDKrTbS3urrKwMBASGGzAh6Ph/Lycs6dO8eXX34p\n06EDhRCOGRkZWK1WJicnAWRU5k6eRP6usu0aWrCBVyaTibKyMvLz87FarYyPj3P16lXm5uYC4lUU\nrNDid4VwMZvNks15fn6eqampkObK38YW6pwLurvq6mr++te/7niKsxCMeXl51NbWkpqaikajoamp\niRs3bgTN17DrhML2F1Gr1TIBSMQpWCwWTpw4QUxMDHV1dQAyySlQuN1uampqqKmpwePxEBERgclk\n2tLGxsYG//M//0Nra6uivPftC0skY5WUlOD1ehWF+sIPm+qTTz4hLy8Pk8kkC6POzs7S2NhId3d3\nyIVFhTaTmJjI9PT0Frpys9nM4uKi4ohBj8eDxWLh1KlTpKSksLS0xNzcHDExMZSVlb2TV1LwE9TW\n1srkKNikNjcYDERERODxeAgLC2NhYYH/+q//CqoStQiTFkFsPp9PMlGFqo3GxcURHR3N7OzsjgkF\nscbKyso4fvw40dHRUnDabDbFIeX+2HVCQWSNweaGWlxc5Msvv0Sv10sf9ZkzZ6iuriY5OVmqTHa7\nXTEVWXFxMbGxsXg8HtbW1mR+u8/nw26343A4ZA5EoBAMUVlZWbS0tMhMvpKSEnJzc7l9+/YWCrhA\n2ktNTeXcuXNERUXR19eHw+GQfArJyclUVlby6tWroDaDP7xeL5WVlRw4cIDnz5+jVqtJTEzEZrMR\nGRnJnTt3pBAOtO8mk4mf/OQnxMbG8p//+Z9SsAsBFsg4iCzZtLQ0uTaWlpaYnJyko6ND0vStrq4G\nFeHn9XqxWq2Ul5dLTcztdtPX10dzczOjo6NBj6sIhMrKygooOjIQCA3hyJEjHD58eAvpsCDhCQW7\nTiiEhYW9Rmiyvr7O6uqq5EDIzs7G5/MxOTkprw9KBIJKpeLAgQMkJCTI06CtrY3R0VFevnwp7/vB\nBJl4PB5KS0upqKhgaGhIBsDs379fLuJA1TpBzHLy5Em0Wi2XLl2it7cXQKZfx8XF8fOf/5ycnBye\nPXsWdKSjx+MhOTmZqqoqoqKiOHr0KAArKytMTk4yNjZGR0dHwO0LrePEiRPExcXxzTffSLZoj8cj\ng3zeNQ6CNu7mzZvExsbK+bbb7YyMjKDVavnlL3+JVqvl2bNnkgtCyXtnZ2dz9uxZEhISGB8f5+XL\nl6ytrVFVVUVCQgJ//OMfg1L9RWauIIx98eJFSHd9f6LWyspK9u3bR1hYGLOzszQ3N2OxWCSJ0P8p\nQ6PD4ZChx+KubDAYyMnJobS0lOzsbGAzsq++vl6qSEpO3sOHD1NbWysHTqXapCPPyMhgz549dHV1\n0dvbqzgsV9hA8vLymJ+fZ2VlBZ/PR35+PtHR0Tx+/Fhx8FF2djbp6el89913dHd3y3RbYVMwmUw4\nnc6Q0p0FI/Qnn3yC0Wiko6ODvr4+pqenZb6+ENRK+BpjYmLIzMxkdHSU7u5utFqttAsoSYryeDy8\nfPlyCzGtx+MhOjqas2fPkpOTw8OHD+np6VE0X263m5KSEs6fP4/H4+Grr75iaGiI9fV1Tpw4AcDA\nwEDQWa0iTH96ehqr1RqyEVQIhSNHjnDw4EHCwsIYHR3l+vXr9PX1UVxcTElJiWT9VqrlCuw6oSDu\n4PHx8eTn5xMREUF8fDxpaWmEhYXh8XhYX19nYWEBvV6vSF30eDwUFxezb9++LYtHq9Wi0+mIiYnB\n6/WSnZ3NyMgI33333Y8yBG/HxsYGJSUlWCwW6urqWFhYICwsjOLiYplXoSRYTKVSkZiYiEajkYSt\nQlimp6cD8MUXXzA4OBhUIpOw3iclJbFv3z5yc3Npamri6tWrW06lYFzAPp+PhIQEwsPD6e3tJTk5\nWSZ0dXd3s7S0pGijCYEiVOPExESOHz9ORkYGN27c4PHjx4pdcSqVioyMDHQ6Hf/v//0/enp68Pl8\nZGZmsmfPHsbHx2WxoFDsCmNjY5jN5qC/D8jDBTaT2LRaLW1tbdy4cYOlpSUMBgNzc3MsLCwQFRUl\nM4CDwYfn7P+Ij/iI94pdpynA5oleUVHB4cOHpbVeZNkJN+Lp06fZu3cvTU1NAAGloXq9XkpLS4mM\njMTlcjE3N8f09LR062m1WgoKCkhJSSEzM5Pz589z+fJl5ufn36kt+NOxra+vS7UzNTWVlJQUeeqL\nEy9Qm8Lg4CClpaWcOXOGkpISuru7GR8f5+TJk/L3Hj58KGnUA4Xow/79+9m/fz/R0dFsbGyQm5tL\nfHy84rj/N8HpdOJ2u6moqKC2thaTycTw8DAjIyPymqikvzqdTnJqVlVVYbPZeP78OR0dHYr7JmII\nIiIicDqdTE5OSk/H4cOH0ev1NDQ0hFzeTaVS8erVK0pKSqQWHIxnJDY2lmPHjgGbrvTe3l5u3bol\nGZw8Hg86nS5kDxTsUqGgVqvp6OggPDyc5eVlqW6urKxgMBgk2Yio0wib+fWB3KFWVlbweDw8efKE\ne/fu4XK5tgTAtLa2cuDAAcrKysjOzpbkmu+aTJ/PR3R0tCw1b7PZyMzMJCcnR7o6lU6YWq2mr6+P\nb775RtZ1zM3NlQsA4C9/+QuvXr1SZGD0er3odDo+/fRTqqurWVtb49atW7jdbk6ePElMTAzT09OK\n+uoPYQsSrFMpKSnMzMzw9ddfMzAwIN9NSXsRERH88pe/JCEhAUCycFmtVv7whz9w+/Ztqf4HsulU\nKhUul4vh4WEKCws5f/48HR0dpKamkp2dTX9/P729vSG7EFWqTc7G6OhoEhISgmIOU6vVVFZWkpiY\nCGy++/fff8/i4uKW9S5cki6XKzRKuqC+9Z6hVqsZGxuTdQf874orKyvSEPazn/1Muub27dvH5OTk\njxqF1Go1DQ0N9Pb2Mj4+Lou0+E/S8vIyN27cwOVycejQIcrKymhubg7I5bm+vo7dbic5OZmf/vSn\nkpdfrVYzOTmpuCKQMLj29vbS29uL2Wzm008/paioSJKsCBZqJRCxH1VVVayurnLjxg2ePn1KYmIi\n6+vrkkY9GIh7f01NDceOHUOj0bC+vs6tW7fo7OxUVGDFH8JD9PDhQwAmJydxu91ER0dz6NAhfvrT\nn3L58mXa29sDHg/hsYiNjaWqqorCwkJ8Ph9Op5OHDx+GnKIOP7gPIyMjSUxMpL+/X9H3xQFTUVEh\nvWKNjY0sLi5uWbc+n4/ExESio6OZnJwMifZ9VwoF4LXN6g+tVsvKygotLS1kZWUBkJSUhNlsZmpq\n6o0TKYJIfD6fZNr19z74w+12Mzs7K68EQuX/MWg0Gux2O3/5y19ITU3FZDKRnZ1NdnY2nZ2dXL9+\nPWgCF6EeiroEInAJ4NNPP2VhYYHx8fGA2na73Vy4cIHW1lbu3LnD0NAQo6OjwKYnIzw8XFKdKYXw\nLBw/fpzq6mra29t5+fIlv/71r4mOjg56g6lUKtbW1nj8+LH8TBwUS0tLfP/99/z+978nIyODzs5O\nRW17PB5u377Ns2fP+PTTTykoKKCtrY2RkZEdiRIV3hOhSSopnSc0roMHDxIREUFPTw8AL1682GL8\ndLvdxMfHc/z4cbRaLaOjo4qD+fyxa4XC2zahkLzl5eVUVFRINXp1dfWtlNyivsEvf/lLWWGqt7eX\ntbU17Ha7vJcJ1pzc3FxqamrQarWSrz/QAV5cXGR+fp7o6GhKSkpYXl6msbGR+fn5oMt6idj2Tz/9\nlKSkJP70pz/J68Jvf/tb9u7dy8TERECLzefbLJ1XUVHB9evXZcCTXq9n//79zM/PB1WST6Cqqorq\n6mpu375NY2MjGRkZOJ1ORcFlb8LbGK3EJgvW0i7Ue4fDgVarZXl5WdLd7QSDlmBl6uvrIzU1lfDw\n8ICDzMRcWa1WVldXpf1McGgKFqfs7GyOHz+OxWJhfHycxsbGkPq8a4WCSPDwn2wRB1BUVER5eTlG\no1G66hoaGuTm3g6xqcSdrLKyksLCQtxuN8vLyzIxRyQ/JSYmotfrsdvt3L59+63tvgnCdiDowurq\n6hgbGwupzp/X6yU/P5/i4mL6+voYHx+XdpCRkRGsVisREREBxSpoNBoePnzIr371K2JiYnj27BkR\nERHk5uZiNpu5cuVKUMVFvF4vycnJ1NbW8uTJExobG0lNTeXzzz9ncnJScaFeeD3DcPtaEPUkjxw5\nQmJiIk1NTUHR/4sAprS0NHp6ehgeHt7RxCqPx0NnZycHDx5UbPuJjo4mMjISt9strw9hYWHExsai\nVqslTZ/FYmFycpK6ujpF6/VN2JVCQcQTnDp1ShZQEQtCo9Gg1+tZX1/n5cuXPHnyBOBHi5eo1WqW\nlpZ48OAB+fn5mEwmTCYTsEn86b+RvF4v8/PzDAwM0NDQoHiB+Hw+CgoK2LdvHxMTEzx79mxH4t1F\n1ebh4eEt5LXB1L/o7++nrq6Oc+fOkZ2djcvlYmpqikuXLgXESfgmeL1eMjMzMRqNrK6usmfPHg4d\nOoTL5eLGjRtBVQjX6/VotVqWlpakABBjaTQasVgsVFdXk5+fT1NTE11dXYrH2j/kHeDp06dBCZZ3\nYXZ2lsjISEwmE3a7PaDvCELY/v5+CgoKOHfuHLCpFVssFultsNvtPHv2jHv37gWUYPYu7EqhIBbu\n7du3iYuLIycnh5iYGMnT19raSl9fH4ODgzLS7scGQqiId+7c4fnz58THx2MymV5TOcX9b3p6momJ\niaAWh8+3WVNBGDXX19d3hDuwt7eXmpoaIiMjiY+Pp6qqCoD09HSamppYWVkJ+HTXaDS0t7eztrZG\neno609PTdHd3h1RpSK1WMzU1hc/n4/jx4ywtLfH48WM6OzuDIlT1+XyUlJRQUVEhM1VjY2OlodJk\nMmG1WhkdHeXbb7+lu7s7qGxRoX3m5OQwPT3N2NjYeyEHXl5efs1b8C6IsgHXrl1Dp9ORm5u75eeT\nk5O0trYyNDTE1NTUlpT6ULArhYJKpWJhYYHGxkY0Gg2RkZHodDqZQru8vIzT6USr1SpS6wEZm/Bj\nd1CNRhN0br5Go6G+vp6GhoYdq/EniqLcvXuX8vJyrFar1HTa2tpkQddAIYRke3v7FqNrKAtKCPJ/\n+7d/Q6PRyMK8wRLi+Hyb5dqdTicFBQVyvgS1+/DwMLdu3WJyclIK3mA0Mp9vs25oeHg47e3tOyLE\nt0Ok4f/5z39W3L4QKBcvXiQ8PHzL5+vr6zLe48cM80qxK4UCsOUe6R8eLMJugw3S2MnBexuEnWMn\nmaE1Gg2PHj3i0aNHMggGfrBQK32OGEN/joKdwPz8vDR4htKuRqNhdHSUP/3pT1vebXta+tsMkEqe\nU1ZWJrWl98kGJTZwMC7ktbU1mSUsEOq7vw27VigIfIi0Xe9L6Pi3u1NjstNju5PvHqpgCRRXrlxh\ndXV1x0u6b0eokZF/K1apj2zOH/ERfyfwfWRz/vDYdj+Udj+yOb+/dj+yOf8fhkhxFgjW4Pa+IYyM\nH9oVTWB7LMNHhI6PQuE9ITo6WhryRJju2tpa0GSa7wMej4ef/OQnOBwOHjx4sKv6FghE5qTBYAg6\nNPtNbYqQcuGB+pDGZCewa4XC/8YC9fdwBAuv10tZWRknTpyQbkOAqakpnjx5wtOnT3fEKxEq67BI\n687JyaG5uZmNjY0dSbvdiTEM9DlarZZjx46Rn5/Pl19+GXK6t8+3SUFvtVqxWq3Mzs7KYLHdLhiE\nxiT+iP4Gs9Z2nVAQL6TT6djY2HhrXHsoKq8/saX4t1arlYlPoSwCn89HWloaMTEx8sQRGWxHjx4l\nKiqKhoYGxQkr29VkETYtqiQrhYiZ1+v1ASdTvQsiVNzj8eByuV6bN+EO3gmBLyIR09PTt1R4DhZe\nr5fExEROnjxJQkIC0dHRLC8vy0hBJfPlH4H7NoTqThRh3uJaqtfrMZvNMjHQYrFgt9t5/Pgxc3Nz\nitreVUJB+MzPnDlDWVkZg4ODklDVf5C9Xi9Op3MLhbUSiSjosEVxFovFQlpaGmazGbfbzdWrV4N2\nT4now8jISLRaLdPT0zJMNyEhgdraWqampt4akuv1ejl06BDJyclbiEg2NjZYW1uT9SkyMjKAzWCe\nuro6ReHJgp8gKSmJjY2NkJOVRL8tFgv/9E//xNLSkgze8u/T9PQ0a2tr8v+hPNPn85GUlER8fDwt\nLS1MTU2FJBg8Hg+HDx8mNzeXjY0N1tfX0el0VFRU0NfXx9DQUED91Wg0UlD5H2jiu/7cHaOjozIF\nXgnEPrFareTn52Oz2UhMTCQsLIylpSUcDgcLCwtBa067TijodDoSExPR6XTk5+eTkpLCwsLCa7+3\ntLTE6uqqrEPQ3Nz8TmIJoXKeO3cOo9GIVquVzDtDQ0O0t7dz7NgxCgsLuXfvXlADqlar6e7upqen\nh7CwMJnJ5vP5qKyspLS0lP379zM+Pv7GVGpBymq1WsnOzpanif/iEtWVYDNlPCkpif7+fkVCQWSF\nvokO3N9IGqiBVMTp19fX88knn/Dzn/98y4JXqVQMDQ1JQdHX10d7e3vQvneNRkN+fj5Op5OnT58G\n1YaAqE0RFxf3Gsv0wsJCwFmjYv3u379fhtFHR0ej0+lYXFxkfX2dpKQkyVv55ZdfKtKaxJzEx8dz\n+PBhGeE4NzfH2NiY7OvCwoLUdoMJ1ttVQkEs+GfPnrGxsYHRaHxjxpfPt1lPoKSkRGoLMzMzdHZ2\nvjMHwuPx8PDhQ1JSUlhdXWVsbEwyFmu1WmpqahSTim7vm9ls5ujRoyQnJ2/5WUREhLymvG2iVCqV\nPJkMBsNrvyc4FT777DPgh8i/YE/JyclJGY4tFp3ZbKaoqAiz2cyzZ88CzgdQqVQ0NzczMzODzWbD\nYrEQGRkpT0ydTkdpaSlGo5H19XXa2toU91f00WAwkJaWxvj4OAsLCyFdJTUajcw0FLTsBoMBg8GA\nx+MJ+HomDMoXL16U/REkOE6nE5PJxD/+4z/S0dFBXV0dTqcz4HkTSYIAp06dAuDmzZv09PSwsbEh\n+yiEQChXk10nFACePXvG8+fPJR3bdni9XrKysvjnf/5nKRTm5+cDXhgjIyMMDw9veabX66WwsBCv\n1xs0NbZop7q6mvLy8jcupvX1dRobG380L0LURnjTu4viIsIoODo6ysTERND9jYiIkFmnAHv27OHI\nkSN4PB6WlpY4c+YM3333XUDPEFF3/uMrPvd4PERGRvIv//Iv6HQ6pqeng9rIQrPJysoiLi6OtrY2\nXC5X0PkVWq2W3Nxc9uzZw8bGBrOzs1y7do38/HwOHTqERqORdpJAIcbSPxQdoLa2luXlZcljEeic\nCT4QkQTndrv56quvmJiYkPk/OxnuvKuEgoCY4NXV1bcOnMhEHBwcBDZVqEAX2ZsWkM+3SZvu8/kC\nImp9G1SqTa5/UYZsuyq+tLREX1/fO/v6Y4bUzMxMSRne1tYWUqqvTqeTC2rv3r2cPXuWqakp/vrX\nv7K2tsY//MM/kJiYyNjYWMDP2D6+wih47Ngx4uLiaGlpoaOjI+iNDBAbGysJV8VYK4XH42HPnj2c\nPHmSpaUl6urqGB8fZ35+no2NDcrLy4mNjcVmszEwMKCIRs//b4/HQ0pKCuXl5dy7d4/l5WVFm1il\n2uSTFIWAqqurOXjwIHNzc0xNTTE0NITT6dwx9+muFAoCb3pBt9tNbm4ue/fuZXJyklu3bsnPg1Wh\nhUpus9kYHx8Puc+PHj1ibW2N7OxsYmJiGBgYIDc3l7i4OEwmExaLhbGxsaBy/yMjI6moqJDfVcr5\ntx0LCws4HA7y8/M5ffo03d3dXLt2jaWlJSIiInC73W9ltAoUQnvav38/Y2Nj3L17Vy7iYCG4H5Wk\njPvD4/EQFxfH/v37CQsL4y9/+Yvc+GFhYUxNTdHW1sbBgwcxGAxBMzvBppAsLy9nYWGBjo4Oxe8t\nNC2RDSt4QPPz86mqqmJ+fp6HDx8yMjISlCdqO3a1UNgOYSArLCwkKiqK5uZm5ufngdCSTQRrUHJy\nMnfu3Am6DeEy9Hq9NDc38+TJE2JjY1laWiIhIYG4uLiQsjRF7n9cXJxkWw6lMpRKpcJsNhMXF0dZ\nWRkzMzNbVNu9e/eiUqlCclm63W4yMzPZt28fy8vL3Lp16zWvhBKIfiQkJOD1el8rMRgoNBoNtbW1\nmM1mHj9+zNDQ0GundzCege0QZDE2m42Ojg7W1taCenf/Oe7s7KS9vV1ySpSUlPDZZ5/x9ddf7whr\n1AcVGyrcXunp6aysrNDf3x8SP5+AVqslPz9fVkRWusk8Hg9paWmUlpZiMBi2+I/X19cpLS2VVHCC\n4TlYCGv10tISS0tLivgj/SH6YTQa2bt3L2lpabS0tOBwOPB6veTl5XHo0CGePHkS9GksCrf+5Cc/\nwWg08v333yvykmyHqHcpqk0NDw8H5XYTQUpZWVnMzc29xmkoDp/IyEgcDoesgRkMfD4fGRkZGAyG\nLXYWJRCxKP6BSeKaOjIyIlO+g2XK3o4PTlOIi4vDYrEwNze3IyQmXq+XuLg4ioqKuHv3LgsLCwHf\n94TRKzY2lhMnTpCRkUFrayvXr19HrVZTVFREUVERNpsN2Iw1ePDgAZOTkyFH3gkEIxBEfv7z589J\nTk5m//799PT00N7ejlq9WWn64MGDjI2NMTQ0FFQfRXHcCxcuEBMTw40bN2hrawv5vSMjI4FNq/7E\nxIT0ECiptOz1eklLS8NisVBfX4/D4dhSuVmtVnP48GH27NlDe3s7i4uLIXk3EhMTcTqdQbXj8/mI\njY0lIiJCasVC80hNTSUuLg6r1crk5CTDw8M7EoT2wQgFscj279+Px+Ph+fPnIZdehx8q+Nrtdrq7\nuxUNqliIUVFRsqR9bm6uJNUUPHper1cWXHn+/PmORPSFOvkqlYquri5KS0spKipCrVZLl+Hhw4dZ\nWFjg6tWrQZGAejwewsPDOX36NCkpKdy7d4/m5uaQw7u3a4XV1dUkJydz/fp1xRqTiB/x9y6IDVhb\nW0tlZSX9/f3cuXMnpFqSarWahIQEHA5HUBqXMIZWVlbKmBydTidza+bn52lsbKSzszMkWnd/fDBC\nQaVScfDgQbKzs2lqaqKhoSHkNj0eD4mJieTl5dHe3s7s7Kyi+H+hUYyNjdHU1ERtbS0RERHYbDa5\n4GZmZhgeHqazs1MasnYiejA+Ph7Y5CoMphqQSrVZaKaurg6tVkteXh6FhYXY7XaGh4e5e/euYk5B\n0bfIyEhOnz5NXl4eDx48oKGhIeQireJunpeXB2zGKTidTnp7e3E6nYreX61WMzIywuzsLFVVVWRl\nZdHW1ibLCmZkZNDR0cGVK1dCYkb2er3ExsYSGxtLe3t7UGMg+DTFwQObXrmenh6pHYiI1P/zdGz+\n8Hg8WK1WcnNzZRm5UHn5hVGwtLQUnU7HkydPgm7P5/PR1NQkawbm5OQQHh5Oc3MzT58+ZXJycsdo\nz8Tij4iIAAiturBazdzcHBcvXpR9Hh8flyHTwdC86/V6zp49S0FBAXV1dTx58mRHUptF8JPVapWf\n1dXVyeIvSoSCCJLr6OigpqYGm81GSkoKarUah8NBfX09TU1NQRHObu9zWFgYarU6aIOwSqVidnaW\nixcvvta2EAQ7zcj0QQgFn89HSkoKcXFx9Pf3MzAwsCPlvBISEqisrKSvry+k2nvCZdTX18fIyAiR\nkZGo1WrsdvuO0oWrVJuFRebn56Wd4vDhw1y+fDlot6FYsE+fPpWCK5hsSbEBPvnkEzIyMrhy5Qov\nXryQ/Q4Vwmj75z//Gdi8V4vw92Da9/l83L9/n8HBQaqqqjAajfT29jI3N0dfX5985k4hlDH4W1Kx\nwQfmffjoVxM/AAAgAElEQVSIj/iI949drymI00uUcR8aGtqR01fkKKhUKhobG0NuU6TCejweWexj\npyW8iK1vbW2V90uR6h0Kdorh+vDhw5SWlvL111/L6so7zUMgQr/FXT8U7c7n870xJPtDZqLaCex6\noeCfD/Hy5UsmJiZ2tJbCf/3Xf4VMzuGPv8WCevz4sSwKu7i4qNjQ9j6gUqno6emhp6dHUUi0Uuy0\nSv+/PW67ER/ZnD/iI/5O8JHNmQ+PbfdDafcjm/P7a/cjm3MA+Ftw/om8hZ309X6o2B5KG2o7Atsz\nB3crtvMc/j1eMXa9UBAT8r6IXEWSkV6vZ21tjdXV1R1/hniOyHnwr54cKESugiDteB/wer0YDAa0\nWi0ulyvoCDnhntRqtej1elwulxS8gjHqfRghQ4UwNkdFRUm3rGDhDgWhzv2Ptesf4i1iS0Jtf1cL\nhaKiIjIyMvB6vfT29tLT07Pji8ntdnPq1Cn27NlDd3c3//M//7PjhjuxSUpLS2V4sZKkKK/Xi9ls\nJjMzk5cvX7K8vLxFoxEknsEa98TiSktL4+jRo8TExDA5Ocnt27dZWFhQpD2JIKPTp08TFxdHfHy8\n5Cdwu92MjY0xNjbG8PCwonyFNz1nO0KZM5FsVV5eTlFREdHR0ayvr3P79m2amppCyn3Q6XQUFhai\n0+no6urC5XLtSFRrWFiY5BbVaDSMjY0xNzeH2+0Oqf1dKxQEx0FNTQ0+n4+srCzMZrOMkNvJTStO\n4ejoaLRabdCZh29r2+v1kpmZyWeffcbGxgYTExMBezxENOCnn35KSkoKo6OjW2oceDweEhISsNls\nMpRWCYTLd8+ePZSXl5OZmcnGxgbx8fFMTU3x4MEDxe+bmppKUVERBoMBt9uNxWKR45mZmSnZp+7f\nv68oitT/SiJOXP8x3NjYCCqUWKy106dPk5aWxuDgII8ePZLzFCy8Xi8xMTGcOnUKq9WK1+slIyOD\nq1evhpSn4PF4MJlMnDhxgry8PBksNzs7y/j4ONeuXQspL2jXCgXYzBvPysoiJyeHmJgYTp48icfj\n4cmTJ++lXPjk5OSOaQkiDiIrK4ve3l5qampwOBx89913ik5fr9dLVVUV+fn5DA8Py8hFf67CI0eO\nkJGRQWdnpyJ6ekFHdvLkSfbu3YtWq5XRoqmpqURFRQVlY8nPzyc8PFyyAj1+/Jj19XXcbjeRkZEk\nJiYyMjKiaA59Ph8Gg4GSkhIAiouLZUYnbGp8o6OjNDQ0SPbvQMdBZDJarVYePnzI3bt3pYARUBoC\nL4T5oUOHiI+P5y9/+QsrKyv84Q9/ICcnJyiyFTHnJpOJCxcukJ+fj91u58WLF7hcLnJzcyktLcVk\nMvHdd98xNTUV1D7ZtUJBrVazuLjI999/z4EDBygvL5dJUfPz8wwMDOyYUVBM4NTUFE6nM2S+O3GH\ntFqtHDp0iPn5eSwWiwxs2tjYCGiyvF4v0dHRVFZW4na7efjwobw6iAVrsVgoKCigv79fsdro8/nY\nt28flZWVaDQaWSfgwIEDAJLJRwlLtMi29Hg83Lt3j+7ubgwGg7RROJ1OqSUpzWq0Wq2cPn0a2Fwf\nTqdTnuY2m438/HysVis3b96UORGBQiSILSwssL6+LslPbTYbeXl5TE9PK2pT1P9ISkri8uXLvHr1\nCo1Gg8PhIC8vj46ODkX9gx+ycgsKCsjPz8ftdjM1NUVfXx8DAwN0dHRw8uRJMjMzycnJYWpqSvEz\nYJeHOQtm3atXr9LU1ARsMg2npaWFTKwCP2RJJiYm4vF4iI+PR6/Xh9S2OKEKCws5fvy4zFVQq9W4\nXC7FG7ewsJDExMQtWZbww7WkoKAArVYruRqV9FNQu2k0GiYnJ7l79y55eXmkpaXR1tZGb2+v4lTy\nrKws8vPzWV9fl0VhHA6H1MBElKdSgSA0RRF9uby8zM2bN/nqq6+4cuUK33//PXa7HYvFQlJSknzH\nQCBIa1wuF1arFbVajdVq5bPPPuNXv/oVBoOB8fFxxYQ+xcXFzMzMSK3I6/Vit9tDqvWg0WjIycmR\n/09OTubIkSMy3f3u3busra1RUFBAREREUHabXaspCIjNNDk5CcDKykrQEvBN0Ol00qI/NzeHy+UK\n2WB35MgRDh48iFar5c6dO0RFRWEymRgYGGB+fl5WovqxjSFO3cLCQlwuF/fv35entqC4h02hMTw8\nHHCxku3P8Hq9zM3Ncf36dfLz86moqMBut3Pv3j3W19cVjYVarSYrKwu9Xs/GxgZHjx4lMzMTu91O\nT09PUBqC6Gd2djZJSUnSE1BfXy+TuAwGAwUFBRiNRvr7+2UadKB9V6lUOBwOVldXKSgoQKPRUFRU\nhNPppKGhgcePHwdlq3C73SwsLOD1eiXrcmRkJENDQ4qEi5ingoICADIyMtjY2KCzs5OOjg5mZ2dx\nOBz4fD4cDgejo6MkJiYSHh4elDdt1wsFQJJpqtVqVldXXysOs1MIxRouaLhramqoqanB5XJx7do1\nOjs7OXv2LCqViomJCQB5UorJfhtE+S9huffXEvz5FF69eqXYOCrovF69ekVSUhJpaWmUl5fjdDp5\n8OABMzMzQXMJajQaWWAlISEBtVpNRUUFz58/D5pbwWQyodFopArf0tICQExMDGfPniU/P5/V1VWu\nX7+u6C4tNmdmZiYmk4nIyEhKS0tpaWmhubmZ2dnZoOJXVCqVNIprNBrcbjexsbFERUUFRdpbW1vL\n/v37gc28jwcPHtDW1obb7Zbryb/N5eVlWdhGKXa1UBB38+joaMrKyoDNuP+xsTG0Wu1bN5SSCbTZ\nbERFRWG32+WmVQqv14vRaOQXv/gFqamprKysUF9fT29vLxUVFbKIhzjN8vLyMBqNPHz4kJaWlrdS\nzgstRlDGCypzf1oykW8fqJ1i+zNu3brFb3/7W44cOYJarWZiYiKo+67AxMQELS0t2O12pqamUKlU\nZGZmkpeXx4kTJ4iJiaGxsZG5ubmA50mtVtPU1MTo6KgkrHW73cTFxXH+/HlycnKYm5vj8uXLjI+P\nK7IJeb1e9u/fz8mTJwkLC2NlZYWrV6/S3t4OEJRg9NfAhJCMjY2VVZ3eVBnsbfB4PGRnZ3PixAlW\nVlYA+Prrr2UdDv93FcxRCQkJDA4OBk0HsKuFgtFoJCkpib1795Keno7b7SYlJYWSkhJmZmZee2HB\nayDIRwNBeHg4er0eu92uOEjF3wNw/PhxUlNTgc1iIFlZWezbt4+YmBg5cYKBeH5+nvn5+YCvQZGR\nkRw9epQXL14wMTEh2acBKTSEi0tJBJ7IunQ4HFgsFkmMe/jwYe7fv8/q6qoiAatSqWhra+PFixdb\n+tHe3k5qaipnzpxhz549WCwWvv322y21Mt/VrtPpZGBgQI55eHg4+/fvJycnh4WFBW7cuMHw8LAi\ngeB2u8nKyuLIkSPyWpqZmSntSsEanPV6PampqRQWFspqYPHx8cTGxkp2a2EDetcVUqPRUFFRgV6v\n5/HjxwBSE9r+XVFJ3GQysbCwwMbGxodfS1JATMhPf/pTkpOTCQsLk6dkWVkZBQUFr1F7+0c+dnd3\nv9O/LgqUJCcnSwNdMFGGsKnaZmZmSj5GUT/Q6XTKRfz06VPu378vo/uAHy1iolKpWF5exuFwEB8f\nT3V1NUVFRayuruLz+STzks/nIzMzk7GxMdLT0+np6Qm4OK7glExLS8Pj8TAxMYFKpaK6uhqVSsXt\n27cV+9OFMWw7hoeH+fbbb/n888/JyMjg2LFjXLx4UdG9H37QAqurq6msrGRjY4Pnz5/LwLZAIWjj\nDh06hF6v5/r16/T09PCv//qvxMfHS9uNUoNoeno6hw4dIiYmBpfLxatXr6TdY2Njg7/+9a+Mj49L\nxu93QfAxrq2tycJHIrLVH+K6VlVVJb0ywRbJ2ZVCQZz4LpeL8PBwWWVacNGJwdTr9XKDicXrcrkY\nHx+XnAZvgxA8ZrM5aFuCGHBB4VVUVITD4WBwcJChoSH0ej1/+MMfUKlUNDQ0bGENFu/5Y2MgqhYV\nFRURHx9PeHg48fHxuFwuKRRVKhW5ubnEx8cHVHnK//3NZjNVVVWEhYXR09PD5cuXMRqN/O53v6Oq\nqorR0dGQisD6P0ur1fLq1SsePHjAL3/5S2w2G7GxsQEzcosNevLkSQBqamrwer3U19fz+PHjoAS6\n1WolKytLuhs9Hg9jY2OEh4dviQUJFGq1mvHxcekBmJ+fx+12k5CQQGZmJk+ePJHkwIFu1jd5PLa/\nq4huPHLkCKmpqTQ3NzMwMBC0prMrhQJsvmhLS4vcBCLkFn4gyAgPD5envAgdFSXqAx0Q/wFXKhzE\n5LhcLtrb2+np6WFtbU1OeHp6OlFRUYyOjkqvhlJj4MuXL/n/2jvTp6iy849/+vZCszS0srQoAsqm\nI7KpyKKODOpMKqmJpqyapCrv8iZ/VN6kkkpVKplkppzEPeKgIIuADEqz2LQI3bLToYk03O7OC+qc\n0C4jfbudH/7mfKosQeHc0/fe85xznvM838fj8ZCRkYHdbsfpdJKZmUljYyOwuTR//PixFKDZrtCo\nrut89NFHFBUVEQwGef78OWfPnqWwsFAWgDVaaOVVRHXk/Px86urqsFqtBAKBuKLuwuEwlZWVsp4i\nQE9PD729vXEFbG1F13V5PCjqd1qtVubn5w0LzUYiEaampoDN55eSksL58+cBZKm8eNoNh8P85z//\nkVsSgLGxsZjjZ03TOHbsGDU1Nfj9fjo7Ow1vHWAHGwVN0xgbG5OOpe1WFjaS2SYcbKJgZ7yI621s\nbMhlna7rlJSUEI1GGRkZMRw6LTz5y8vLUilISLIDdHV1yepGwqm1HSwWC48ePaKqqoq8vDw+/vhj\n6WgbGRmhu7s77qjDSCRCWVkZ9fX1MSXdxRZQ0zRSUlKYnp7mxo0b235xo9Eo+/fvp6mpSf788PAw\nXV1dhovLms1mZmZmGB0dpbq6ms8//5ylpSVyc3Pp7OxMKFZF9CccDnPs2DFKSkr46quv4q5RKt6p\nZ8+eUV5eTkVFBQAej4eFhQUZHVpcXExlZSXj4+O0tbUxPz+f0OpuxxoFQKrrQvxhpu9CHMkNDw/L\nEuSJBkRtPTLMzMyksLCQpaUlnjx5klC+xlYjZzJtlnoTR3M+n89Q5qTwWdy9e5empibC4TB+v5/h\n4WF8Pp+h0wz43373wIEDMh5DfHZd13n8+DH379/f9pGnCFxqbW2loKBAnhB9++23hiToBWLAifqM\nRUVFVFdX09bWxuTkZNLUp0tKSvB6vXH7PASapuF2u2lqapIh3ZcvX2ZpaYmsrCycTiehUIienh46\nOzsTuieCHW0U4P3l34styL179xgcHGRjYyOphsdut7O2tsb8/HxCStGvIlY1ogJxIvUUzGYzw8PD\nUqNQ5Ce8zVm4nb55vV78fj9paWkxn1mEEYvz8+20LwbWqVOnKCkpYXp6mj//+c8Ar/lnjCAk+WZm\nZkhLS8NisRAIBAxvR97E3NwcHo/HcEFdk8nE0tISX375JfX19QDk5eWRlpbGxsYGXV1dDA4OylOp\nZOQE7Xij8D4Rs9fCwgKQPP0/EZ79+9//Xn6fTOO2tTJ2on0WAWGif4kaRuHXWVtbe6ODLN6tnc1m\n4+DBgywvL8uyfsnop0AEFgUCARlFmoxnJZzl//rXv+R1jCKMrTh9eNO1jARYvY0ftVGA9yve+b5U\nnJLd32T3M1n3VBiYv/3tb2xsbDA7O5v0baS4zk5/B35IRTAl3KpQ/EhQwq18eMKaH0q7Srj1/bWr\nhFt/hIhItnh1D35IMdH3oYe59TPsNH3GrQFC7+Pebo1/ed/PLhl8cEZBlAx/H3vLH4KsrCzW19cJ\nhULb/h273U5qaqoMsBEeckjMgfW2wS/EVpOFGHDFxcWcO3eO7u5uBgcHd4xyts1mIzU1FV3X5QlM\nMgfv3r17aW5uJjs7m2vXruH1enfMZ38TH9TIikQiuFwudu3axdOnT1+LQDQyw4lZQqgNw//KqCXT\nokciEUpKSrh06RK9vb20tbW988WIRqPU1tZSXV3Nvn37sNlssmycSI4xWt1KRIRuzcUQtLa20tfX\nh9/vT8p5vdlspqqqipaWFmZmZlhcXDTUlhCWgdcdb+LZxWskRZZkY2MjgUCAkZERJiYmmJqaSlgA\nNRwOs2vXLi5dukQwGKSzs1NGcYq8BKPtby0XmEj5vDfxwRgFcWb92Wef8fLlS54+fRpjBEQsfzAY\n3JZarni5UlNTKSgowOVysXv3blJSUpiYmGBoaEjKciWKSL5pbW2VOQDbwWQycejQIVnWXmgJHj9+\nHLvdDsA333xjSB04HA5z+PBhpqenefHihQzeSk9PZ9++fQwPDydN3So/P59PPvkEj8fDlStXDAnZ\nCNHT8vJyABklujWHRdd1RkdH4+5jIBBgamqKzMxM6urqqKysZGhoiDt37sTdliAajZKSksKpU6cw\nm81cuXKF+fl5OeHU19czMjLCysqKobyNjIwMmpubsVqttLW1JbU0wQdjFAAaGhrYs2cPf/3rX2V+\ng7CWe/fupaGhgZs3b75z6SvqGxw7dowjR46Qm5uLzWYDNh9mWVkZe/fu5dq1awmp7gpMJhONjY0U\nFBTQ1ta27eg2TdMYGBjA7/fLMG+TycT58+dl7kNfX58UW40HYQDy8/OlqpVYPQi1q0Q/t8gOPH36\nNLOzs9y4ccOwslU0GqWoqIjTp08DcPz4cbmV1DQNs9nM6uoqPp8vroGmaRqDg4MMDg5isVhwOp2U\nlpZy5swZFhYW6O/vN7RVjUajtLa2cvjwYb766ivm5+dlhCdAWVkZmqbR0dHxWsbj97Up+tzU1ERt\nbS1ra2sUFBTwxz/+8TXpf6Ps3I2NQqH4P+GDMAq6rlNeXk5TUxMPHz7E6/XKfHer1YrVaqW1tZX0\n9PR3SlAJKbOLFy/S0tJCfn4+kUiEhw8fcv36damhWFlZKXUQE2FjY4MjR45w/PhxpqenGRgY2Pay\nPBKJ8PjxY5kyvnUfmSgiNTszM/ON/7d1VjOKkKfPzMzk+vXrCYUma5rG0NCQ/COEYYX2YaKnMpFI\nhLW1NakWJfb9RtuqrKykurqajo4OxsbG5OcW4d7379+ntLQUl8u17esIn8rhw4dpbGykv7+fP/3p\nT3g8HpxOp6G+vokdv30QCsHnz5/H7XbT3t4e41RqaWkBYN++fXz55ZffKzYq9nmffvoppaWlRCIR\nfD4ft27dwuv1kp6eTl1dnbxuoui6TmlpKZ999hmhUIjbt2+zsLAQ18AQWZJms5nU1FTKy8s5evQo\nHo8HAL/fb2ggCNWlV3MUth7NJYIw5A0NDXzzzTfMzMwkdGJkMplYXFzk73//O7B5ImO1Wrlw4QLl\n5eUypDgQCMS9hBbFhoQTe3FxkZs3b/LkyZO4+xwOh9m9ezdnzpzh+fPn9Pb2vmasRNhydXU1Z8+e\nlX6W77vnW3U5z507h9/v58GDB8zNzZGens758+f5xz/+wezsbMJbiB1tFIRc1uXLl1lfX+f+/fty\n0EejUerr62V+vVDO+b6HKJxVxcXF6LrO6uoqV69elTUkTpw4gdPpTIpBiEY3a1Q2NzfjcDi4ffv2\nO/v3tnYKCgqora2loKCAjIwMHA6HjIN3Op3Mzs4mdPKy9Xu73U44HJb6gkYQTuHKykq8Xi9utzsp\nMQoisxE2azxWVVVRWFjIy5cvuX//Pt99952he2C1Wjl58iTV1dV4vV46OzulelW87ZnNZhobG9E0\njatXr751kjKZTNy9e5cvvviCwsJCRkdHv3eyEE5m2DxCvX37NnNzczgcDhoaGnA4HASDwaScQuxY\noyD05n72s5+Rnp6OrutSrNVkMlFXV0djYyPt7e3ApsNtOwMuKysL2LTWa2trrK+vU1NTw549e/jo\no4/k/y0uLkqhTKOcPHmS0tJSvF4vfX19hpfOBw4coKamhmg0SiAQYG1tjbKyMgD279/PwMAA3d3d\nhrIxhTiu8Io7HA7S0tI4cOAAo6OjhnQgotEoeXl5HD58mCtXrlBRUUFFRQULCws8evTIcNZoJBKR\nS22Xy0VLSwtWq5V79+5x7949Q0lBIinuzp07DA8PU19fz9GjR+no6Ih7+6DrOjU1NVRVVXHjxg3p\nXHwTmqZJcduKiop3npoIpSjxtd/vx+Fw8PHHH1NSUsLMzAyrq6v/f7MkhVrx559/jtVq5Z///Ce1\ntbW0trbS29tLRkYGFy5cYGxsTObDbweTycTU1BT9/f1UVVWRnZ3Nb37zm9du5NraGh0dHYaPJMPh\nMAUFBVRVVREKhWhvbycQCGzby/xqn7u7uxkfH8disUh9iZycHAA++eQTWlpaSE9P5+rVq9tuV6wQ\n0tPTKSoqIi8vj6NHj5Kfny9LyTmdTml040Esx30+Hy6XS1ZYOnPmDA6Hgxs3bsRtFDRNIyMjQ54S\nnTt3jtzcXJn6XF1dTU5ODl1dXTFZn9vF7/czPT2Nz+fj4sWLLC4u8t1338UlFZ+amiq3du8qC7c1\nOnU7Uuxms1lmx9bX1/OrX/2KcDiM0+lE0zSp9pQMdqRREMt8Xdf5y1/+wrNnzwiFQnz66adcvnwZ\ns9mM3++nvb1d3tDtPDyhoTc3N8fMzAx1dXVkZmaysrIiVxBmsxm3282TJ08MzWZi6dzY2IjT6aSn\np0cqIxlF13V5bCj6tFWa7pe//CVpaWlxtalpGi6Xi9raWk6ePIndbmd+fp7JyUlycnJkLUIjmM1m\nysvLWV5eJj8/X0bx/fa3v5XS9PFsdyKRCNnZ2fzkJz9h165dAFJPwOVycenSJdLS0picnJRBXUb6\nbDab8fl8TE5OUlNTE1eZOF3XOXLkCPv37+cPf/jDOwvpiGPxjIwMRkZG3tm+pmlMTk4CcOvWLXJz\nc6XadnNzc8Kr2q3sSKNgNpvxeDx4vV6CwSAWi4WhoSFevHjBr3/9awKBAF9//bWhVFqRP9/T04PH\n4+HEiROUlZXJF/Tly5dSftvIUkxUmD506BBzc3O0t7fL5XmibHVYib4tLCzEXfRD7O1zc3NxOBzM\nz8/T2dlJX18fNpuNixcvsrq6yr///e+4768YwNnZ2bx48YKuri6mp6dxOp2kpKSwuLgorx8Pmqbh\ndDql8RbCvsFgkIGBAXw+H0tLS4ZWCYJwOIzNZiMjI4O8vDysVuu24zWEDykYDH5vJKiInrXZbDQ1\nNWG323n+/Pk7r2EymaRmpnBeimhMi8UihXKSwY40CoCMVhMvv9D/i0ajtLe3Mzc3Z3j2FVqGL168\nYGpqKkYMVNxsI4i6CRcuXCAcDtPW1sby8nLC+7xIJMKuXbtYX1+XL73oY3Z2NjabLa5cBbGPnpiY\nYGVlhQcPHshaGbt370bTNLKysrYdefkqFosFXdeZnZ1lYmICu93OiRMn0HWd3t5eQwZBrAx/+tOf\nApuD6+bNm7jdbhnNl4jQiK7rOJ1OmpubKS0t5cmTJ3EFrplMJgKBAHa7nQMHDsiIW9FX8bfNZiMn\nJ4eTJ0+SmZnJtWvXth10tFWST6y0hBRfso6qYQcbha2zogjJbWpq4u7du4yPjydl5rVYLFLOWzAx\nMcHMzIzhfIKjR4+Sm5tLf3+/lPNOlIaGBqqqqrh58yZjY2PYbDYKCwsBOHv2LACjo6NxrW7E6kvX\n9RhJN6vVSmpqqjyFidegmUybdRnX19fJzMzEYrFQU1NDbW0tt2/fNrT6EPv10tJS+buDg4MMDQ0Z\n1pIUMR/CwVpWVkZzczMHDx7EZDIxPj4e9/0cGRmhsLCQn//85zx9+pSenh7C4TB79+4lJSUFu91O\nQUEBKSkpPHz4ELfbbdhvJQyD+DqZ7FijIIhEIjgcDk6dOiW9+MlI7RXtinJ0sKn7d+vWLUMPKhwO\n43K5qK6uJhgM0tvba/iF3dpmQUEBp0+fJhwOY7fbaWxspKKiguLiYmBTXr6trY2RkZG4+yy2HeL3\nROxCIlmoJtOmIO6jR49oaGigrKyMjIwMOjo66O/vN3Q/wuEwRUVFMrYENqXtQ6GQ4X7abDb27NlD\nTk4OpaWlspJzIBDA4/HELd669RRjeXmZQ4cO8Ytf/ALY3OrNzc0xPz+P1+tlbGxM+muSMWmEQqGE\ntk2vsuONQjQa5dSpU2RlZcmKRck4doFNZ5XL5QI2H9zY2BiBQMBwMNDBgwfJzc3l0aNHTE1NJUVY\ndGlpiYGBAaqqqvjiiy8wmUwsLy/T19cHbNYSmJycNBTN9+rPiyhHIWSbSL97enpYWVkhLS1NlmM3\nGkthsVgoLi7GbrfjdrsBmJqaMjygRD9qamo4duwY4XAYt9sto0d9Pp+hvmqaJitV9/f3S5XwSCTC\nzMyMTJc3m81JS50WUvXJqtEBH4BRMJk2C2rcu3dPBhkli2g0KkN9o9Eoz549i6ndEA8iDHd8fDxp\n6s1i5r5z5w7d3d2yX8LBBsj4jWRhNpv59ttvsVgsCa0W1tfX5apOJCwZPc1xOBwUFhaSkpIiZ9jl\n5WWZKWqkf6FQiOvXr8sq2CsrK7LMXyKpyMJfFQqFeP78uTQumqa9Fw0QUasymcI4O94oaJrG119/\nLb9OZruLi4v87ne/k4VAJyYmEnpwq6urMkMvWX0VTiShNiz+TbwA7+NFExWuE3nJhBMsUTRNIxgM\n8uDBA6anp2V4d6JtC8MgDLgYzMki2e297RqTk5OyKnmy2PFGAd6vkm0oFOLhw4dymZroQHgfL8IP\nLeG1E+XCBgcHGRgYkPc3Gff5hxi47xOTycTo6Chut9tQQaC3tqvUnBWKHwfbVXPeEUZBoVDsHD4I\nPQWFQvHDoYyCQqGIQRkFhUIRgzIKCoUiBmUUFApFDMooKBSKGJRRUCgUMSijoFAoYlBGQaFQxKCM\ngkKhiEEZBYVCEYMyCgqFIgZlFBQKRQzKKCgUihiUUVAoFDEoo6BQKGJQRkGhUMSgjIJCoYhBGQWF\nQqfMzegAAAAgSURBVBGDMgoKhSIGZRQUCkUMyigoFIoYlFFQKBQx/BekIB7bsAvrRAAAAABJRU5E\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x412bf60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.008583\n",
      "         Iterations: 288\n",
      "         Function evaluations: 289\n",
      "         Gradient evaluations: 289\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.013128\n",
      "         Iterations: 286\n",
      "         Function evaluations: 287\n",
      "         Gradient evaluations: 287\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.050810\n",
      "         Iterations: 439\n",
      "         Function evaluations: 440\n",
      "         Gradient evaluations: 440\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.057612\n",
      "         Iterations: 424\n",
      "         Function evaluations: 425\n",
      "         Gradient evaluations: 425\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.033075\n",
      "         Iterations: 396\n",
      "         Function evaluations: 397\n",
      "         Gradient evaluations: 397\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.054466\n",
      "         Iterations: 433\n",
      "         Function evaluations: 434\n",
      "         Gradient evaluations: 434\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.018265\n",
      "         Iterations: 362\n",
      "         Function evaluations: 363\n",
      "         Gradient evaluations: 363\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.030653\n",
      "         Iterations: 362\n",
      "         Function evaluations: 363\n",
      "         Gradient evaluations: 363\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.078457\n",
      "         Iterations: 456\n",
      "         Function evaluations: 457\n",
      "         Gradient evaluations: 457\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 0.071193\n",
      "         Iterations: 440\n",
      "         Function evaluations: 441\n",
      "         Gradient evaluations: 441\n",
      "预测准确度为:96.480000%\n"
     ]
    }
   ],
   "source": [
    "data = spio.loadmat(\"../data/2-logistic_regression/data_digits.mat\")\n",
    "X = data['X']   # 获取X数据,每一行对应一个数字20x20px\n",
    "y = data['y']\n",
    "m,n = X.shape\n",
    "num_labels = 10  # 数字个数,0-9\n",
    "\n",
    "## 随机显示几行数据\n",
    "rand_indices = [t for t in [np.random.randint(x-x, m) for x in range(100)]]  # 生成100个0-m的随机数\n",
    "display_data(X[rand_indices,:])     # 显示100个数字\n",
    "\n",
    "Lambda = 0.1    # 正则化系数\n",
    "#y = y.reshape(-1,1)\n",
    "all_theta = oneVsAll(X, y, num_labels, Lambda)  # 计算所有的theta\n",
    "\n",
    "p = predict_oneVsAll(all_theta,X)               # 预测\n",
    "# 将预测结果和真实结果保存到文件中\n",
    "#res = np.hstack((p,y.reshape(-1,1)))\n",
    "#np.savetxt(\"predict.csv\", res, delimiter=',')\n",
    "\n",
    "print(u\"预测准确度为:%f%%\" % np.mean((p == y.reshape(-1,1))*100))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}