{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import libraries\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "\n",
    "%matplotlib inline \n",
    "from sklearn.linear_model import LogisticRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x0</th>\n",
       "      <th>x1</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.919731</td>\n",
       "      <td>1.550680</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.642133</td>\n",
       "      <td>0.356495</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.983291</td>\n",
       "      <td>1.786487</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         x0        x1    y\n",
       "0  0.919731  1.550680  0.0\n",
       "1  1.642133  0.356495  0.0\n",
       "2  3.983291  1.786487  0.0"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Collect data\n",
    "x0 = np.random.randn(100) + 2\n",
    "x1 = np.random.randn(100) + 2\n",
    "\n",
    "x0_ = np.random.randn(100) + 3\n",
    "x1_ = np.random.randn(100) + 3\n",
    "\n",
    "xx0 = np.concatenate((x0,x0_))\n",
    "xx1 = np.concatenate((x1,x1_))\n",
    "y = np.concatenate((np.zeros(100) ,np.ones(100)))\n",
    "\n",
    "d = {'x0': xx0, \"x1\":xx1, \"y\":y}\n",
    "data = pd.DataFrame(d)\n",
    "\n",
    "data.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(200, 3)"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=['b','r']\n",
    "mycolors = [c[0] if i==0 else c[1] for i in y]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1108b8940>"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEKCAYAAAARnO4WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJztnXd4FOX2x79vsim7SehVQpcqndBRQEBBEcWrghW9Kl7BdhVRrg1E8ade27VjwQYCKjZEEWkiSEnovffeQ3p2z++Pk2XL7CbbZmc3ez7PM0+yk5l5z85uzvvOqYqIIAiCIJR/4owWQBAEQQgPovAFQRBiBFH4giAIMYIofEEQhBhBFL4gCEKMIApfEAQhRhCFLwiCECPoqvCVUpWUUt8qpbYopTYrpbrpOZ4gCILgHZPO138LwG9EdINSKhGARefxBEEQBC8ovTJtlVIVAKwF0Ih8HKRatWrUoEEDXeQRBEEoj2RlZZ0gouq+HKvnCr8RgOMAJiul2gLIAvAwEeV4O6FBgwbIzMzUUSRBEITyhVJqr6/H6mnDNwHoAOB9ImoPIAfAk+4HKaVGKKUylVKZx48f11EcQRCE2EZPhX8AwAEiWl7y+lvwBOACEU0iogwiyqhe3aenEkEQBCEAdFP4RHQEwH6lVLOSXX0BbNJrPEEQBKF09I7SeRDAlJIInV0A7tJ5PEEQBMELuip8IloDIEPPMQRBEATfkExbQSiNM2eAAwcAm81oSQQhaEThC4IniIDHHgNq1gSaNgVatAAOHTJaKkEIClH4guCJ778HPvwQKCwE8vKAnTuBW24xWipBCApR+ILgicxMIMcpR9BqBdasMU4eQQgBovAFwRONGgEWt9JPdesaI4sghAhR+ILgiTvvBLp3B1JTgQoVgEqVgK++MloqQQgKvePwBSE6MZmAOXOAZcuAc+eATp2AqlWNlkoQgkIUviB4Iy6OV/mCUE4Qk44gCEKMIApfEAQhRhCFLwiCECOIwhcEQYgRROELgiDECKLwBUEQYgRR+IIgCDGCKHxBEIQYQRS+IAhCjCAKXxAEIUYQhS8IghAjiMIXBEGIEUThC4KvnD/PbQ/79weefJI7YQlCFCHVMgXBF6xWoFcvYNMmID8fWLIEWLoUWLQIUMpo6QTBJ2SFLwi+sHYtsG0bK3uAV/dZWcCOHcbKJQh+IApfEHzBZtPuU4pX/oIQJYjCFwRfaNsWSE8HEhP5dVIS0KwZ0LSpsXIJgh/oasNXSu0BkA3ACqCYiDL0HE8QdCMhge32jz0GrFsHZGQAr77KXbEEIUoIh9O2DxGdCMM4gqAvVaoAkycbLYUgBIwsTwRBEGIEvRU+AfhdKZWllBrh6QCl1AilVKZSKvP48eM6iyMIPrJvH5CZCWRnGy2JIIQMvRV+DyLqAGAggFFKqcvcDyCiSUSUQUQZ1atX11kcQfCBsWPZIdu3L1CvHrBypdESCUJI0FXhE9Ghkp/HAHwPoLOe4wlC0CxeDLz9NsfbnzsHnDkDXHed0VIJQkjQTeErpVKUUmn23wFcAWCDXuMJQkjYvBkgct13+DBQVGSMPIIQQvSM0qkJ4HvFaecmAFOJ6DcdxxOE4GnRQlsqoXZtDssUhChHN4VPRLsAtNXr+oKgC5deCjz4IPDmm5xkFRcH/PCD0VIJQkiQ4mmC4M5LLwEjRwJHj7LzNi3NOFnOnQPefRc4eBC48krgmmuMk0WIekThC4In6tblLdzk5QEjRgA//QSkpLA/4fRpoKCAk77GjQMefzz8cgnlAkm8EoRI4p57gG+/5ZX94cPAkSOs7AEgNxd49lmtU1kQfEQUviBEEr/84ijB7ImiIlH4QsCIwheESKI0f0FSEjBwoBRsEwJGvjmCEEn873+A2cxKPTkZqFULaNmSf95wA/D110ZLKEQx4rQVhEhiyBBg4ULg11+BSpWAO+8EKlY0WqrIhwj4809gzx6gXTvuXyBoEIUvCJFG5868Cb7zr38BU6Zw0pzNBrz+OnDffUZLFXGISUcQgmHXLuCOO9i2/umn4lA1gqws4KuvgJwc4Px5jmZ66CH+KbggK3zBeKxW4K+/+B+2a1duNBINHDwIdOjAJZRtNjYpHD4MPPWU0ZLFFocPa0tfmEzAyZOAxWKMTBGKrPAFYyksBHr1AgYNAm6+Gbj4YmDjRqOl8o3p0zlRyt7gPDcXeO01Y2WKRdq10xa3S0sDLrrIGHkiGFH4grFMmgSsWsWP4vZyxHfeabRUvmG1ak04duUvhI/0dE5WS0vjlX16OvDHH0B8vNGSRRyi8AVj2b6dV8l2iLjbVDTwj39wbLwdi4XLIgjhZ+BA4OxZLkOxfz/QqpXREkUkovAFY+nWjWvG2ElIADIyjJPHHxo1ApYuBQYMYJmfew74v/8zWqrYRSkgNdVoKSIacdoKxjJ0KPD338D77/MjeNOmwGefGS2V77RuzTHzghAFyAo/TFitwPz5wI8/AtKr3QmlgLfeAk6cAHbvBtasAaS3sSDogqzww0BhIXD55cDatZwxrxSwaJEkA7pQoQJvgiDohqzww8DHH7sGopw9CwwfbrRUgiDEGqLww8Du3a6BKAAHEgiCIIQTMemEga5dORAlJ4dfm0zRE4jiM8eO8czWoAFQs6bR0pRP5s8HNmxgx/aVV2qbrQtCGYjCDwPXXw8sXw688QYHojRrBnz5pdFSBc+ff3J+S7e90zDgm39CJSRwxuOkScBttxktXvniqafYuV1czCuG224DPvjAaKmEKENRBBV7ysjIoMzMTKPF0I2cHM6+r1Yt+hdnn30GjBoFWHJPYC/qwQInm5XZzKt9WemHhiNH+MnJ3uoQ4Hu8ahXQvLlhYgmRgVIqi4h8shmIDT+MpKRwxGG0K3sAePRRnrzqYS+K4Fa4KjGRFb4QGk6c4HvqTGIi7xcEPxCTjuA/RLg6ezraIhOHUBsJKHT9e2EhZ6EKoeHii7n7VXa2634pHyD4ie4KXykVDyATwEEiGqT3eEIYeOABTKLPYUYOcmDBTlyMxtiJpNQExFuLgE8+AWrUMFrK8kNyMrBgAXDddVx/314srFIloyUTooxwrPAfBrAZgGTVlAdOngQ+/hhmK6/qU5CLRmo3Nk2YiYwrq7GtuVq1sq/zxx9cA79OHU5KcDdZCK5ccgkXmiMKvU3w7FngySeBdeuAjh2BiROlJk05RVeFr5RKB3A1gBcBPKrnWIJ3du8GtmxhK0uzZkFeLCeHo0QKHWaclLR4ZHSO9z3W9LXXgGef5eQEs5mfCBYv1jaxELSEWtkXFwOXXQZs3cpO4awsDin7+29OCxfKFXp/om8CGANAioQbxOTJvDi8+WagfXvg1VeDvGB6OlCvHit9gBWQyQR06uTb+VYr8J//sMeXiH9u3Aj89luQgoUZImDCBH6aqVoVGD8+OtsbrlvHZiJ7BFBBAcf6b9tmrFyCLuim8JVSgwAcI6KsMo4boZTKVEplHpeqYiHl9Glg5EheSJ89yz+fey7IAJq4OE4A6tWLFV2HDrw699WeXFjISt+ds2eDEMoAPviASyGfPAmcOgW88gpX/Iw2ykPImOAzeq7wewAYrJTaA2AagMuVUl+5H0REk4gog4gyqkuVxJBy6JDWSpKYCOzdG+SFa9dmG/yJE0BmJtCype/nms1sJ3YWjAi49NIghQoz06e7NsnOzQWmTTNOnkBp3Rpo3Nj1iS09nbN5hXKHbgqfiMYSUToRNQAwDMB8IpL0yzBSv752X1FRBOTq/PIL0Ls3OwYbNWJzjidhI5mqVV1Xx0rxvmjDZAJuv93xmogLPS1aZJxMgm6IV6Yck5rK9ffT0jjpy2IBpkwBatUyWLBq1YDff+e48p07gZ49DRYoACZM4BtsMvGWmgq8+GLp56xaBdxwA3DVVcDMmeGR0xc++4ydt3by8tiRLpQ7wpJ4RUQLASwMx1iCK336cMOVQ4dY0ZvNRktUTmjZkh2edjPO0KFAw4bej1+/nqNh7BX0Fi3i351X10bhHhKrFMf+h4LjxzlErG5dDtkVDEVq6QhCOBg1CnjvPdd9zZsDmzcbI48zs2bxhJWby8reYgGWLQs+k3f2bOCmmxxhvM8+y/H+QkiRWjqCALA9esMGYMkS7j5jJJ4ik2wREq08aBDw88/ALbcAd93lXdnv3QuMHQs88gjH6pdGYSEr+5wcR4jYhAkcgisYhtTSEYxn715WzPXrh64+jM3G9vI5c3iFmZjI4aNGeazvuYdrYtsjeywWVpyRwuWX8+aNXbs4BDc7m+/tRx+xH+LKKz0ff/y4dkIzmYAdOzgxRDAEWeELxjJ9OtvDb70V6NyZ676Hgq++Ysdwbi73lTx5klewoWbLFuAf/+C8hPff9558lZHBk0/fvkC3bsA77wD/+lfo5dGLN95wKHuA72tp5pkaNbS+gaIioEUL/WQUykRW+EJwLFvGjscjRzjb9uuvfa+Dn5/PJgTn/o9vvgkMG8bx4cGwdavDQQqwIt65M7hrurN3L09S58/z9TMzOTfhmWc8H9+zJ+cvRCPOyt6O8/11JyGBQ8SuuYbPKywE/v1vie83GFnhC8zs2Zz81L07V2L0hUOHgP79+TH9/Hk2mXh7xPfE8ePaTE+TCdizx/dreKNNG45FtRMXF3pTwvTpPGnZV/W5uTxhlUduvdU1xMtiKTvCqFcvdtQWFwNJSXxvxo/XV06hVEThC8DcuWzv/usvLpo1fLhvSn/JEleFXVwMbNoEnDnj27i1arEicKaoKDA7/u+/Ay+8AHzxBctx001cQCgpiWPk69QBpk71/7ql4cl8E0FRbyGlf38uzHTxxRxiOXp02ea3kyeBp5/m+jznz/OE+PLL7A8QjIGIImbr2LEjCQYwaBARqyrH1r172efNmUOUmup6nslEVFDg+9jLlhFVrkxksRAlJxNNmeK//BMmEKWkEMXF8c9+/YisVv7b/v1EGzeWKVNhIdHRo47TfGL3bqK0NCKl+L1bLETPPuu//OWV9ev5/jh/PypWJFq40GjJyhUAMslHHSsrfIE7q7tj8sG907cv0K4dP97b47fHjfOvtn2XLsDRoxyPfuqU/47VvDzg+efZnmyz8c9ly7jDOsB1YVq2LFWmKVOAChW4CGh6OgcM+USDBjzW4MFsn3/5ZX7/AtOwodZkV1zsX+0lIaRI4pXAppkrrnCEDJrNHHI3YEDZ5xYVsRll/36ga1ffzgklx4+zicG5wbfJBLRtyxUsSws1BPt227d39RtfdBFw4IAUkgwJS5dynH9uLjtyv/uOv2uhYssWYMYMXrTccQd/F2IMfxKvROELzJIl3JjEagUeeohX79EAETtjt23TJjdZLMAPP7D92QvTpgEjRri2i01MBA4fBqpU0Ulmd4qLeeKqVs23JjDnznF00/z5LORHH5U5sRmK1cr2/KpVPT9NBsrKlVw7JD+fZ+eUFG7g0rhx6MaIAiTTVvCfHj14Vf/jj9Gj7AH+R//jD366cO/QlJvLq/xSqFdPG20YHw9UrBiALPn5HJJ59dXs0HR+bPDGggWstBs1YoU4b17Z59x4I39OZ86wA3TQIH5UiVTi4zkuvzRlv3gxO9qHDeOnAl944gk24VmtQHExrGezseofL5Rbv3lI8NXYH45NnLYCERFt3050//1Et95K9Ntvvp93xRVa5/Pll5d52r33sq+3QgX2u37zTQAyW61El15KZDbzuMnJRN26le4FPn1a6/ROTSU6dar0cdzfY1wc0dtvByB0hDB/Pt94+/uxWIgWLy77vPbtNffi57jB9Mkn+oscSUCctkLUsns3N0j54AP2pg4axOGWvvDII2zGsWOxcLJPGUyaxAvrTz/lApg33BCA3Nu2sTnBvqrPzwdWr+aG4GvXej5nxw7tU0lcHDcr94ankEabzdUmFW1MnKhtJvPyy2WfN2wYcpXj886BBV/ZhuHHH3WQsZwgCl+ILN5/n5WX/bm8uJiTd+bP1x5LxL6HWbM40mfgQHbgXXYZR818/TVPGD7QpQtXSAjY/FtcrPXy5uezMuvenScwd+rUcWkGD4Bf16njfZy8PG3uglLR2VPAjnMtfjvu98UTo0fj+/qP4Diq4Shq4D+YiO9MN6N27dCLWG7w9VEgHJuYdAR68EGtyQIg6tHD9bjiYqKrr2YTSIUKHO+9bJnna378MVG9ekS1axM995yfwfY+cvIk5xN4kh0gSkwkysnRnvf662wGqlCBf776aunjFBYSNW5MFB/vMOfUrUuUlxe695KXx/kEgwcTjRtHlJ8fumt74ttvtSadn3/26VR7qH9yMt++6tWJDh7UV9xIA36YdAxX8s6bKHyBli93KDPnrX171+OmTmXDu/MxjRppr/fDD1pl8vLLoZXZZiPq0oWVujeFb7EQ7dunPTczk6hPH6JWrYj+7/98G+/wYaKrriJKT2e/xf79oXsvVitPrsnJLLfZTNS7N79HPZk+nahTJ6LOnYlmzvTr1H37iN59l+jDD4lOnNBJvghGFL4Q0Rw9SvTOO0Rvvkm0Z4+HA154wZG9alc677zjeszEiZqJIU8l0wsvuC3gb7hBq3xbtw7NG8nOJlq5kmjpUoez1ttWsyZRUZHr+evXu05aFgvRpElExKvUCROIxo4lysoKjbg+sW6ddiK1WIi2bAmjEII/+KPwpVomOMLt2285DHr06NJNqEJw7N/PiU45OaxNnn6ao/BcimM+9RQb08ePZ/vuqFHAyJGuF+rYkW3ZJc6+YsRjLbXBxIl8ynPPlRxXoQLbuMkpVi8tLfg3kpUF9OvHDtOCAk5Ac8ZeaKywEKhdG/j1V37zt9/OIZSXXMKhmM4VJ0vCSPcPuBdt27Irw2oF3noL+OmnMEXLFhV5diR7srML0YevM0M4NiNW+O++63jiN5mIqlUjOnIk7GJENHv2EN11F1sRPv00uKf7u+92XZgrRdS/f4AXGzeOiuISKAdm2o7GVBd7CWCT9gW2b2f7uH1Qi4Xozz8DfwN20tNdV8Hx8URJSfx7UhJR27Zcvyc7m4/PzSW66CK2uduPdw/JBIgaN6ZHH9Vatdq2DV5knygsJGralCghgS74Hi65RPt0IkQMkBW+74wb54gIKy7mJMYpU4BHHzVUrIjh8GFekZ89y4vZRYu47IC3ku8A+Cbu3Mk1Ctxq4x896poQSwQcOxagcM89h+fPPIrJb53DQaoNe5SxS9mciy8G1qzhSo8FBVyrp23bAAcswWrlm+BMYqIjo7dFC350SUx0CLNhA1eMtGd5Wa38e3IyR/MAHEb62GM4vVKbNBy2qMuEBI58evBBbrzeti3w9tu+1VbyxsmTnL29fj1/md58E6hcOXQyC77j68wQjs2IFX7FitqF2osvhl2MiOXNNx0LV+eChx757TeiqlVdV7xvvulyyCefaH2o48YFLt+8edpF8oABno/duZP/1rw50X33EZ0/H/i4mhV+SgonEHlj0ybXN273TcycyY9Ol11G9PnnRMS30f0e/ec/QchqJIWFRM2auT4xtGolTwwhBOK09Z0HHtD+c23cGHYxIpbXXtMGn6SmejhwyxbPjkuz2eWG2mys4NPS+F6PHMkRlv5w+jTRk08S3Xwz0fXXO6wkpU1Ip06xuc5+bHJyEKYkIo6uqVSJzUXJyUSjR5d+vM1GdO21ji9bSgrR0KFe7WOff86mqRo1+NL+3iMi4hnuq694BtEjFNUZm42jn5o0Yaf4jz/y/qwsrekqJYVowwZ95YkhROH7QVERR0JcfDFHhf31V9hFiGh27XL9f7VYiB5+2MOBH37oWeFXqED03Xchkycnh8PQ7ZNQYqJW4Verpj1v5kxtaXaTiejsWT8F2LWL4/qnTyc6fpyjdPbu9e3c4mKiJ54g6tmT6zn40zfAX+bM4Q8rLY0/wCuuCHDW8JFXXtFGHC1YQLR2rUT96Iwo/BgnK4vzi159lXVSsKxdy/qifXsOFfSoN775RvuPbV/hr18fvBAlfPutYwLqgEyajhvoJ1xN16ifL+iS11/Xnvfzz54VvqdcKK8sXszv0WJhIVq18u8CH3zA5yYk8HUuvVQ/00aNGtpV9YwZ+oxFxI5e98/+rrv4yaJbN9e4/l699I/rjyEiQuEDSAawAsBaABsBjC/rHFH4wfPrr6xT4uJ49VuzJtGxY2EYuLCQH5Hs/9gAKzZfk4l8ZMoU1rVtsZqyYSFryVj5Jgu92nk6TZvm+bzcXLY22J8MLBaOGPILd6VmNhO99ZZv59psrvfGbhv76Sffzn3tNU4sa9qUzTRl4R7mk5RE9MYbvskaCG3auI6nFNGoUfy33Fx2Qlx1FdEzz4Q2KziasVqJnn+eqGFDXjz4mF3sTqQofAUgteT3BADLAXQt7RxR+MHjrpMSEoJzivpFQQHHbT7zDJt4PGWWBsmRI2w6/xj/vKDsL2xt2pR67pkzRI8/znb/t98OwKztqXTCmDG+nZufr7U9paQQTZ7s+fi9ezmh6+RJTjpzdzSVNVF07Oiq9C0Wvp5e/Pyzw6SnFD9Obdum33jlgfHjXT9Xs9m3KqFu+KPwdQvLLBHkfMnLhJKN9BpPYNzD94qKuHNgWEhM5MYcOlKzJidq7e1TjLijbn90L2zvRsWKZZTHLy7m4m1ZWUCbNsADD7jGeF52GSdQ2Qt7WSzcgMMXkpI4JHHt2gtJTGQjnG3VE5Xcj33xRa4QmpTE8Zm1ammrSU6eDFxzjffxfviBu49t3cqJU//9L9Ctm2+yBsKgQcBvv3H3M7OZwzCbNNFvvPLAZ5+5fq55ecDUqfoWwvN1ZghkAxAPYA1Y8b/s5ZgRADIBZNarV8/v2U1wZeRIV9+p2Vx6tGDUsmSJ6xu1WNiZ6g82G5ucqlfncNJmzRwrLrOZqG9f18eAM2e4vn5cHJtIXnvNv/GOHCHq2ZNsiYl0Krk2DYyfQ4mJRFdeyVYPIiJavVobvulunlGK6PbbfRvz3Dl9nbVC4LRo4fq5xsWVHe3lAUSCScdlEKASgAUAWpV2nJh0gqeggGPMK1fmxE5fzL0RS04Om0z69+ef7g7S+fPZAdilC9Fnn/l//Y8/1ipXd5PL2rXa8woLg3I6TpjgOmxyMtEjj5T8cfp0rXc5IcFh/1eKbf96xw6LU1V/vv/esWiJi+OItl27/L6MPwo/LJm2RHRGKbUQwAAAG8IxZqySmMil1z2VX48qbDauVbN6NWeiLl4M/PknZ4Haa7306eO7ScUTX3/t+kjtTny85zaFvvSd9UZuLjBjFm7IzcMf6IdDqHPh7QEAmjeHtbAYLs0AU1LYXDJ5Mqclt2nDTVKaNQttj1iAU6pvuon7D1gswBtvAP/8Z2jHEJjrrmMT4dSpQGoqmxAbNtR3TF9nBn83ANUBVCr53QxgMYBBpZ0jK3w/mTuXqEEDXhEOGsQZSeWFDRu0YZ4pKSEN8aQbb3StymlfQdvNKHXrOtlaQsDZs0QXX0x5Cal0Dql0FmnUBmvIZCK66SY+5PvviZ4wvUp5SKKzqEDnVBplz/6TY03dnbD9+oXeXDN4sGumncVCtGhRaMcQQgr0bnGolOrvw2G1ASxQSq0DsBLAXCKaFch4gge2bQOuvRbYs4c9tb//zi2bygtWq7aDlNWqLTITDM8/zysrk4lXyhYLO2br1uWni6VLHVUvQ8HrrwP79iG56DzScB6pyMbHcfehRg1eSANcwubl4tFogD3ohYVolHgQs+YkcAVR5/eemwssWwbMnh06+QBuqu7cbSovj/cJ5YJATTqfAKhX2gFEtA5A+wCvL5TF/Pm8BrNTWMiVzWw2bXlbf1m6FHjpJS42NnIkP3qGm5YtgQYNgI0bHe+zoICjT4IoflZUBKxYwT87d24Oy7p1XC2PCBg2jIut6cX+/S7KNA5Aq6qHsXUrzzuAI8rqKGrhKGohrghI25blOQKJiKvRhZIqVVxDvZKTgerVQzuGYBheFb5S6idvfwJQVR9xBJ+pWFGr2JOStKtif1mxgqs+2m3bS5Zwd++hQ4O7rr+YTMBrrwFXX+2oxU7EIYuPPhpQTfvz54FLL3X0Dq9UCVi2rAFqP/VUiIX3Qv/+wLRpF+6tLSkJdPnlSElxHDJoEPDdd44CmklJQOO+DYA/TTzhOWOzcb/cUDJpEjBkCF87Pp4n3TvvDO0YgnF4s/UAOA3gagC93LbeAI76ajPyZxMbvh/k53ORKrOZ7c4WC6fuB8vtt2ujVdzbC4aLWbM4csE9uzXAln5PPuma7GoyEQ0ZEmKZS8NmI3r6abKZTFSMePpVDaDKieepXz+HqyAnh+iWW/htX3QRV6wgm41o2DB+7/bkLYslpDWKXNi4kTPTvvhCsmKjAIQoSmcZgFwiWuT+B6XU1hDPO4K/JCUBy5dz8sbRo0Dv3rwFi7OZqLR94SAjw3XsuDjOvLroIs/H5+cDmzdzl6vGjTV/3rTJsXIG+MFhazi/yUoBEybgWdt4vPW6Fdn5CUAh8NdfXD7/tdfYjTBlitM5Nhug4jiSY8UKjtJp1479DHrRsiVvQrnDq7GXiAYS0QKllKdP/lkdZRJ8xWwG7r+fu7iEQtkDbLO3WByvLRbu+2gENWuyM7pePY43bduWHYiefBQ7dnDLwN69uV/i8OGaiaprV9e3lpQEdO6s71vwxOIlcazsS8jPZ8uZCzt2AM2bs2mrenV+3126cHatnspeKNf44t2boZR6QjFmpdTbAF7SWzDBILp149jgK67giJXJk4Fbbw3L0AUFwOnTbnq6a1dg717+46pVbFP2xLBh/KRz7hxHlnz3HTBjhssho0dz8E1SEs+Vbdtyv9iQ8ccfwH33AWPGAAcPej2sWTPXig0JCbzvAjYbN7Ddto1vxokTwODBpV5TEHyiLJsPgBQA7wD4G5w0NRZAnK82I382seHHLhMmcEJpYiLXQPO7r7B7dipA9PTTHg89dIhrk4U0mXTKFEf6bHw8l2o4eNDjoSdPcv+FtDTeGjRwq2h68KC2smaFCkQ//BBCgT2wcCHRo4/yhxGKutpCWECIM22LAOSBk6eSAewmotKrVAmCH/z2G0eBFhXx602beMHuV/h3kyaclWt/PEhJ8WqHrl3bw86jR/mpwGoktQ3bAAAgAElEQVTl/IZ69YCcHODHHzmq5ooreJ83xo51RDZZrZyx+umnbJx3o0oVbu+6dCkv5nv0cAv3r1RJG4ZptQI1angfP1imTgXuvZffQ0IC8N57LGRVCcgrT/ii8FcC+BFAJ3A45odKqRuI6AZdJRPKLXl5wLPPct5Qy5as35wrGBQXA5mZfl502jSOuczL45njuut41vCFffu4kmVuLk8YTz3FvoPbbgOOHOF9cXHAwoVAx47a80+fBs6ccd1XXMwThheSk4HLL/fyR4uFy3r+5z+Osa+5hs1bejF6tGPCspdY/eIL4N//1m9MIez4ovDvJiL7v98RANcqpW7XUSahHEPEofXLlrFuXrECqFyZV7jOZW08rsJLo0kTYNcufjyoWJETqJxzEog4ED81VZurMG4cr8jtmayFhcDtt2sSpXDffdqZaPduUOcuoNw8KHCSCgBW2sFkPj/8MDtpV60C6tcHrroq+ByL0nCvGVRUpK217cy8eTwx5uYCd9/N5ZD1lE8ICWUqfCdl77zvS33EEcoj+/fzApyI84T+/tsRHllYyAvhJk2AnTt5MWuzAV+9nw3MXcYe1m7dSi1YZrVyhQmz2YKLMjK0B2Rm8ixz6hQr4s8+4+QiO0eOuJYtIOJVu7OyB4B169iBXL++49AHH4Lt5CnEE59PAAorVEXSN1M5rDQYunbVd1XvzPXXczE5u+JPSuIsME8sX85OZPsM/dRTPEEYFc0l+I6vxv5wbOK0LX9s3cr+xoQERytX59pcADsuFywg+v13TjQ6snwPUa1afGJqKlGHDl57xx47RnTJJewvTUoiGjrUqZ5YYSHRvHmeHbo33uiodT9pkrYB99ChnpuyN2jgUrAsu0ErzTGz4gdHfnXhBQu412zr1lyYLS+P62rXrMke5dmzvZ97//3a+9KoUdhEF1xBpNXD93UThe+dM2eIVqzQpWugrgwb5trZTymiKlUcQSiJidxrNj/f6aQrr3StDJmc7LVP4+DBPJE46+r33iOi7Gyidu08K22AZ4dJk/giNhu3ZUxJ4eNHjWKl7inr2GIh2rPnwvgb+z5AuXBE1JyHhR5Rb4S0yGbIWbFC2zLRn97DDz+srTLarJl+8gql4o/CD7LKlhAOli7lAJF+/YCmTdnkHCqsVuCbb7iQoyb5JwScOOEacELE5vWRI9m8c8cdbM9PSnI6accOVxOLPYPWA6tXO6J7ALYyLF8OrrmzZYvnevYAx/X//Tf/rhRXzjx/ni/wzjtcR+aBB1wztQB2xlas6Hj54iv4M64PimBCMeIxDcPwY72HQlpkMyjOnuX3uWOHY9+XX2pbJvrTQGHkSI6CstvsLZbQfikF3QhLAxQhcIjYXHrunGPfq6+yDy/YLFGbjc20ixez0jSZODzyoYeCu64zQ4fyhGXXLxYL73v00VJO6tIFOHDgQrGwwgQLVpl6oJNV2++jaVPg0CHH/GA2A5dcAmDJZtc6Cu6YzWWXD+jUiWfZefP4WsnJwCOPcFhRCW26mLHs/dmo9eB52FQ8LFXN+OPX0i8bNrKyWH6bjf0R99wDvP02Z30p5Zrh5k9Tl6ZN2dv+6qs8Sd51FzBwYOjlF0KPr48C4djEpKMlO5uLfDk/PaemBtbRz5158/ha7t30CguDv7Ydm43zeKpU4baLTz3lQ8LT6dNEnTpRYXwy5SORpuBmSrMU05VXuraYJWLrSu3aDnN/z54l5qGXXtJWSktIYPNFairbr13sSF6wWom+/proxReJfv3V62F5eZzQ5S6fYXzyibYXbkoKO0q2beN7YDfLWCxR3gsztkGktTgUAiclhS0IJ0869tlsQIsWwV/7xAltJJ1SvGirXDn469uv9/TTrvlHr7wCfP89kJ7O1pOaNd1OqlQJZ+YsR7uah3HemoiTqAbksslp+XIO2rFTvz53+8vK4kV7hw4lTwG1a7tG2TRtyrH1W7bwgV26+NYeMC7Op3j+5OQAQkn14ttv2Rzl3izGauVqcf37AytX8gdx/jzXHbr6amNkFcKLrzNDODZZ4Xtm6VJewVaowIvW8eNDc929e12DU+Lj2ffma4SJ1Uo0cSJR8+ZEHTsS/fFH2ecMGeK66ExO9pzFv3+/1t9asWKpi2zauZPoyy+JFk7aSjb3k6tX92n5fewYPyXEx/NTiV4ViHXlqqtc37vzCn/+fKOlE0IMJEqn/HHuHNHKlUQHDoT2uvPmsUnEZGKl7U8U0PjxrsEe9t6sK1a4Hrd2LZdoefBBz3po9Gjtta1Wjt5xtkpUrEh04oRnWX7/3WGtuTX5G8qOd6ujn5REdPRome+pZ0/XqB+zmeWPKoYO1UbRxMURPfGE0ZIJOiAKP0rJziZas8YnvRQRpKd7VuAWC4d5ExEtW+Y6KXja7rrL8/UPHCC69FIOo2/Zkmj1au+y1KrluF4GVtB5uA1qNpfpnLAdOEgzcCOtQjv6H0aRGTmUnEz0zjuB3R/DWL+eV/N2pZ+crH/hNcEwROFHIe5mm1deMVqismnc2LsS79aNj+nfv3RlDxAtWhS8LM6rcoDorbiHqTDBwjfUYiH69tvSL3D+PFF6OhWCPeS5SKZ56EMpFhtNm+ajEAcOEA0YQFS/PtE11xAdPhzs2wqczZuJHnuMY+ZLmymFqEcUfpRhs7G92H1B+swznGTavbtv9vFw41wR2H1r04aP6dZN+zd71JHJxJ30QkGXLq7mH4uFaM3kVbyy3bWr7AvMmqVxGuQjiQZ0OOpb1FJeHit6uxAJCWyTCmXIU6QxZw7RvfcSjRnjtRS0oD+i8KOMU6e05QaSklz3mc1ES5aEdtysLKKpU4lWrQr8Gr/+StSrl2voqMXC2fpEnMzqntQ5dWrowxcPHuRJJj6e79v77/txcl4elxNwm5mK4xOp8LAXp4E7K1ZoSzikprJ5pTzy+efa+v9GPtHEMKLwowyrlR2SzrrC3edWmq07ECZM4P/XtDT/M+s98eWXrDMbNOAQeHukj81G9OabvPht2JDoww+DFr1UcnJKJpPFi9l5OXQo28tK46OPPD+qXH+97wOvW+ca8mSfpbdv1xy6Zg3RwIFEXbvyvfG57s7RoxyKtGoVz/5e6guFhTp1XN9rQgJ/8ELYEYUfhSxYwAvCihXZhl+jhnYCGDEiNGPt26dtqJScXD6eym02Itu8+a7mGbOZJwBvvPiiNknJ3ww0q5WoXz/HuBYL2/HdtLk958n5icdLmSDXN3X33fzoEhfHX4bUVPZU79zpu4yhpFo17RfUS4cxQV/8Ufi61dJRStVVSi1QSm1WSm1USj2s11jlgd69ufLu7NlcNuadd7S9xB94oOzrbN/OrVztZWI8ceiQa09VgF8fORKQ6BFBQQFw8838Pub1e8m1hk5eHvDyy95P7tVL22S2Tx//yg3ExfGH98ILXCDopZeAmTM1mW3Tp7uKZi/dUypTpnB96cJCzroj4oSpY8d4LCO49VbXL6jZzCWWhYhGz0zbYgCPEdEqpVQagCyl1Fwi2qTjmD5BxAW7Dh3izMyGDY2WiKlShQuKAdyrOyUF+Phj/l8aMwZo3br086dP57ImJhPrhVtvBT78UHtcs2Z8D9y5+OKg30LYyMnh95iWxq9Hj+ZuhMXFQDyKtCe417Z3pkcP1roPPcQ1c7p359rw/pKQcKFI0MqVwC0tuO94mzZcoK5uXdb/nrKbS2XFCs/ds2w2nuGN4L//5Yp333zDH8Lrr3PXMCGy8fVRINgN3Caxf2nHhMOkY7MR3Xknm1vtEXs//qj7sLpTVKQ106SkeHf0LlpEVKkSWwkqVyb666/wyhsoRUVEt9zCTuL4eEcTcOcopyH41jUO32Ih+ukn3wawWslm4+/EG2848gn84ehRV/9tfDz7N6xWot27+W/OZWxefrmMC773nucyz/HxRH37ao+fOZMjhOrUIRo71qV+v1D+QKTZ8AE0ALAPQIXSjguHwl+4UOtbS0nxw3EWoRw/7rmxyPTp3s+x2ThCKJre+0svefavOtfcB4hujptG+2plEHXq5Fd9BJuN6Lbb+DuRlOSjjd2NWbN4MeHuv7X7SLZsYV9y//5En37qw/0vLCTq04eFsiccWCzcdMQ99XrhQtfJwWLhinVCuSWiFD6AVABZAK738vcRADIBZNarV0/H28J8/rm2QqTJxKULohmbjUskOL8vi4U7TpUXCgtZf3uK+7f7Dc1m1ovp6Z5r9JTFqlWeJ5SLLvK9oOSSJdpFRUJCkN8xq5VDP+fPJ9qwgWjTJs9OZU/dqOrXD2JgIdLxR+HrWi1TKZUA4DsAU4hopqdjiGgSgEkAkJGR4cGyHFo6dnQtIqgUcNFFDltwtKIUMHcucMUVXFlTKeCTT7hIZDRgs3Hv28REz1Unz50Devb02gcFAFfOfPJJNi0PGeLSp8RnTpzw7Ks9dAgYMQKoVQvo27f0a3TrBlx2GfDnn+ygNZvZtB/Udywujuvzl0VqKlcBdf6SuzdxEWIXX2cGfzcACsAXAN709ZxwhWVOnsyP60lJbObctCkswwZMbi4v3Jo25Sf7jRu9H2uz8cq2qCh88gXLqVNE7dvz6jwpidvN2s3O27fz30wmz7kJziaTGTOCl+X4ca05xnkbOdK36xQX8xPB2LFETz7JVqXz54OXr0z27SOqVIlsJWGmObDQ0JSf6d13A7hWYSHHAqelcWJV1BUVig0QCSYdAD0BEIB1ANaUbFeVdk444/ALCti5FjENK0ph8GCHQ1YpjtU/csRoqULHsGGu/geLhROS8vPZlNJVLaOZuJZmYwANwk8XjqtXjxXwPfdw1U87ubmc3OStsmh2Nvc0mTzZc+7B338T1a2rVfYmk5M5PDOTX0yc6LXa3fbt7ExOTWWd2bAhT266s28fze7wH3on/iHqhiUX7ukvv/h5ndGjtWnS5SHCoZwREQo/kC2WE6+8UVCgdUimpBB98YXRkoUOT0XYhg7lqgRXmedTARyV0c7DQv/ADEpK4qced9av55ygtDR+WnAvvXzqFCve1FRHpNa6da7HFBWxo7Z5c8e9T0jgkvqHDxPXkzCbefZ1+YMr/fq5PpUkJnI9M29s3co13rKy/L+H7niqZDpiBNGff/L7T0nhp8Vjx/ipcOVKorlz3SakRo20Fxk+PHjhhJAiCr8cUVzsucVhadE3/mJ0fa+BA10TXZOTiZ5/nujAxjOUDTfvJ0CrVHvq2pVX6u64Tx4pKazI7Iwd6/o0oRRRjx6u1xg+3LGwjYtzFLK78FTVooXrICYTH+BEcbHnSEpv1RomT+bj7aHCY8YEejeZNm1cx01I4H4Ezs5kk4mL8w0e7Jj8KlXipyMi4gYJ7u/TU/MCwVD8Ufi6ZdoKoSE+Hnj4YYffLTERqFaNm5gHy8aNQKNG7OSsXh1YtEh7zL59nHRaqxb/3Lcv+HHd+fBDbnNYoQL7HFu35kSqOr9Phhl5muNbNicsXcrHOkME7N7tuq+4GNiwwfX9OOdgEbFD1vn4r75yNF232fgzaNrUqRWjc0d5+0mnT7vsWrGCG8O746nxfE4OcP/97OA9d47HfvttV7kzM4HrrmOn/Lffaq/hzttv83cmIYGdxtWqcc925ySv4mJgzRru0Z6Tw2OfOcMZywCAt97ii5hM3MOxShXgscfKHlyIWKSnbRTw6qvcw3buXM7WHDtWq+z8pagIuPxyzs4HODpl0CBgxw6HYisoAC69lLNFrVY+pmdPYNs2/v8PFXXr8jVXruQJrXNn1jE4fRpxsLkcSwCSxj7KIQFuKAXUqwfs2ePYZzIBzZs7Xl95JffTtSv05GRu8ep8DU+Zry77bryRZyl7jQSzmcOCnLBH52RnO/bFx/Op7hw7pm2vm5jIk1OrVsDatVz9wS7zkiWsoIcP117LzmWX8STxyy+ss2++GVi61POx9uvauTCp9+jBF/n5Z14V3HILrwyE6MXXR4FwbGLSCR/ffadN1KpYkUuc21m1Slvxt0KF0NiYfWLpUle7iFLcHKAUsrI4c7hCBT71/vtdE5tsNjbrJCSwGWnwYHbyOnPvvQ6TjsnEhexcbNuFhUSjRrGzID2dGwO4ce4cUc2aDh+AyUTUqpXnIIHCQm0/BIvF0W7yvvu0pqHmzX28h04UFXF/gpQUlsti4Qqs7n2Nu3Tx/9qCcUBs+EJpvPiiZ/uyxeJkvyV2IrofZzZzpmjYmDGDM8rS0rimgg8lgc+e5UgbD5WJL2C1evddFBdzuYM+fYjuuCPwPsK7dvE10tOJrruO6PgxG3tlR4/mgv1OAqxYwZGPycn8OXz/veM6I0ZoP6tmzQKTqaCA6JNPuDz2vHk8AT76KE/+FguXqdizJ7BrC8YgCl/wytGjHL3iKY793ntdj7XZiIYMcax2LRaia691rJizs7lEzc8/e3aghooZMzgHoX59duZGQyitR0aPdiynLRZu2OtU56a4mIN93CeizExtdOSkSaEV7cQJnqCk7E70IQpf8MrKlVozjdnMhcI81XQpLmblMnIkNy+xK4QjR3jlmpbGW926+uQGzJ2rLQ0zcWLox9Gdc+e0jXdTU32uzrZkCdEVVxD17Fm+QnKF4PFH4YvTNkbIzuYoj4ULOfLEGZOJy6p7clbGxwP33qvdP2YM188vLubXeXnAE08An30WWrm//FJbP/7zz9lxHVXk5HB5BGfi4riuvQ907w7MmaODXEJMIWGZMcL993N0h7OyVwqoWpX7dlSp4t/1du50KHuAf9+5MzSyOpOWptWTAZeG2bePZ702bbibTJ425FM3atbk2E7nQj1xcUDXruGTIRrJzuYGMJ9+yuFiQlCIwo8RFi3iMEtn7rgDOH6cQy39pXdvDju0YzbzPm/s3s3hlqmpHGroHGNeGv/+N59jV/oWCzeT8puzZ1mAWbOA9eu5stx11/l06vLl3CgnPR345z+1YYw+Ya9u17s3z65t2/KHUq1aABeLEU6d4i/Lv/7FzWlatuTPTggcX20/4djEhq8fXbq4mo+TkjhSI1AKCjjyJCGBt+uv532eKCxkG79ziYgqVTiaxhd27iR6/HGiBx7g6JuA+OknrfMiIYHozJkyx3YOW0xOZke2EAYef1ybFt2zp9FSRRwQG77gzkcf8UrebtKpWxd45JHAr5eYyAlM9qTTChW8H7t5M9v7nc1JVitneV52WdljNWoEvPJK4LICKMnkcoNIm/Hkxpw5rnLn53MeEpEPrQmF4DhwQJsWffiwcfKUA0ThxwitWwNbtwILFrD5ZcCA0GTLlqboAf4fvf9+bZmBwkKgUqXgx/eZ3r3Zjl5QwINbLNx0u4yUZYtF60Owm+HXrWMndVwccM89rhm9QggYMIAbFdttaGYz15YQAkbxE0FkkJGRQZmZmUaLIYSQzZuBjAyt3btfP+D338O8Sj59Ghg/nutH9OrFXUnKWOFnZ7OP99Ahxzzx3HP8ZNK3L78vpXj/0qV8rCHs3g389RdQuTIrSk9PNNEGEfDUU9ww3WYDBg8Gpk4NbV2PcoBSKouIMnw6VhS+4C92E4f7ytcT773HATHOX7PkZI4Y6tAhtHLpZWY5cwb43/9Y6Q8YwL7e/v2BP/5wPe6GG4Bvvgn9+GUyfz4rQ/ubb9eO93lq3RUJWK1cPCk+HmjSpOwPzWbjrTxMYjrgj8KXKJ1yxNGjrJBq1OCAlC1bQnt9qxW47z6uo5WUxMETzp303Fm9mqteOit7pbgVYevWoZPr3XfZMpOYyAXg7KHtp08Dq1Zx0bdgqFQJePZZ4IMPHIE9nsLnfQypDz3Dh3Oc//nzvK1eDXz9tUHClMGZM9xntFMnoH17FF3aB4OvyIfFwq0tf/7ZwzlxcaLsQ4Wv3t1wbBKlEzhWK1HLlo5kTqW4Nsvp06EbY+JEbYr/Sy95P37CBNc69/YiYoE0F/fGnDmuMiUlcfOUH37g/fYiaqHOTv3wQ+29mDYttGP4jL0dmvNNLu2DMZLhw10ib/LjzPRC3NMu99G9IY1QOpB6+LHHwYNsxrU7R4n49xUrQjfG7NmutvjcXC6/6420NK1VIS0ttKHnc+e6ylRQwPtuuYX3nzvH+VX33eda9z5Y7r0XePFFoEEDjiJ6801g6NDQXd8vOnVyXQEnJnJqbiSyerVL5E2SLQ/tbVkXXlutbI0S9EEUfjnBYtGaV2y24OvmO1OnjqvdPi6Ok5G8cccdQMWKrvtycoCZM0MnU61abF5ypkIFz/Xld+zw7ZpLl3IIa+vWwMSJ2lIUAJumHnmEJ9mdOz2Xnwgb33zDwsbH8xt9+WXf4l2NoFUrlrGEPCRjLdpeeG0y+Z/1LfiBr48C4djEpBMc//qXI0nIbCa67DKugR6q6pJ79rCZKCWFt2rVyi6l+8ADrn1dA63l7o3sbKImTVges5lNArNmeS7rvH9/2ddbv15rqrnQuDzSycmJ/HKXx49zbee0NKKUFDreqDNVSc4hk4nvdZs2RHl5RgsZXUASr2KT997jDlXLl3PZlt27gZQUXqHeeCPHjDstrvymfn12BP/8M69wBw0q2zxjs7k6bQFOXgoVqalsJfjuO/ZX9uvH7/3zz9mXmZjIFoS33y79acTOtGnaYm0ffQS88ELoZNaNgIsMhZFq1TiBYd06wGRCtdatMTszHgsXcl2n226TqEs9kbDMcsrHH7PJISeHX5vNwMiRHNIcTpYuZSVsV6IWC/Dkk8Azz+g/9rFjbG5p0IAjQHzh+ed5czaP1anDSZ+CEIlIWKaAX35xKHuAFe6vv4Zfju7duel2mzbAxRdzWeOnnvL/OocOAdOn83vw1BwcZ89yX9mqVbkB8NKlqFED6NbNd2UPAHfeqS3WFo7JSRDCgZh0yil163KEjF05KgVcdJExslx1FW+BsnIlZ7UCbB5q0YITLn/4gU1GN90ENPjnEM7mKizkKotXXMElORs08GusevU4dv///o/j+G++mSswCEJ5QDeTjlLqUwCDABwjola+nCMmndBx7BjQvj0vfIk4+uHvv7nCbDSxdCkr3KNHHfvsNl672SU1qQgnc5OhnMNpUlLYcH/XXQGPff48sGcPm3QqVw74MoKgK5Fi0vkMwAAdrx+VbNzIvRxmz/Yc7ucrq1axTX7UKPZ/uVOjBo/1/vtcFmDzZv+U/Zw5HOnXqBGbYErLqNWLt97iEgbOyh5gp29+Pj+9FBUBZ86bUOz+sKpUUDGp8+axKah7d34y+vTTgC8lCJGDr+E8gWwAGgDY4Ovx5T0sc/p0Dj1LSeF2poMGBRYyuWSJa+hgSgo3ug4Vy5dr+8iOGRO66/tCfr62Bax9c66rb9/+V+9Vx01JTiZq1Srg+L68PP583MM6d+0K8ZssYfp0ojvuIBo7lujkSX3GEMovkEzbyIOIrQu5uY6yJwsXBtandNw41+zSnBzO+gwV33yjDU384ovQXd8XsrM919SKi2N/gHMEosUCFD8ymr3Djz/OBvjlywOO7zt4UBtKmpjI5aVDzQsv8Pfiiy84gqpdO0ePAUEINYY7bZVSIwCMAIB69eoZLI1+FBRo488pwH4OnlrsOUfkBIvFwjZ/5561vurO06eBxYv5+N69A4/7r1qVHai7djlMXxYLm68aNWJF+cYbfA9HjSpp5qIGAgMHBjagE7VraxV+YSHQuHHQl3aBiCdq+/eiqIj9zd9/zzkEghBqDF/hE9EkIsogoozq1asbLY5uJCdzgwzn0gQ2W2A9rO+9V7vCDWVq/4gRXPPGXp7AbPatj+yOHVzt9vbbuVRwx46BV5BUissPt2nDctSsyQlfjRvz3555hpXj6dOs/ENZFtli4b7ZFguXhkhO5jGaNAndGHacJ1WAvxOhTEwTBGcMX+HHErNnszliyxZWopMnBxY1M3w4K4XXX2dF9+STrGBDRZ06wNq1HORy9iyHPdrDIkvjvvtYAdtX5Nu3s5li3LjA5Khfn7NoyYB2gtddx08XW7eyHPXrh34MpXicWbMcSj4+nktcC4Ie6BmW+TWA3gCqATgK4Dki+qS0c2IlLLOggE0d5a0naqNGXM7BmVtu4dWy4Jn8fODf/2ZfTo0aXNu/Y0ejpRKiCX/CMnVb4RPRzXpdO9pxr+5YXujRgzNiCwr4tcUSuUUbI4XkZA6dFYRwYLgNP1isVo5JX77coWgEY3j3Xe5fm5jITt/bbjO4bLAgCC5EtQ0/L49ty+vWsTO0WjXOJq1Z02jJYpMKFbiP9unTrPRTUvw732ZjJ2YwFT0FQfBOVK/wX36ZnXo5ORy3vX8/Z5+WJ86c4ZVys2bAtdeGtmuTXlSu7L+yf+EFNm+YzZxdm52tj2yCEMtE9Qp/3TrXELbiYi4nUF6w2YA+fYBNmzgOfNcuDuPcsiU6Sp/7yvffc9invdDb4sUcGmrvw717N9u5c3N58gsklFUQhChf4Wdk8IrQTmIi0KGDcfKEmr17gW3bHC1Ai4s5TDIrq/Tzoo1587R9aRcs4N937uTs09deYx9B376BZSc7c/o0N0z58cfQJqwFQ35+cLWVBMEXolrhP/440KsXK/2UFO509M47RksVOhITtUrAZit/Nu66dbWRS/Ya9m+8wclb9vuQm8s19QNl9242j911FyeItW7NCVxGcewY9yBPTeWntnffNU4WofwT1Qo/IYGTmTZu5FXvmjXlqwHyRRdxWXf7U0xyMteCL29x2qNGAQ0bstJLSeGfH33Ef8vO1k56wazKH36YFXx2Nm8HDwLjxwd+vWC58Ub+3lqt/GQzZgybtARBD6Ja4QOcvNSwIa/a7KUAygtKselh/HiuCT9mDLBoEYc8GsWMGTwRVawI3Hqr57o+/pKayqG1kyfzCnfTJjbXAbwKdy8jEUydmR07XEs9Fxay498oc8qKFa7lFQoLuY+LIOhBVDttYwGTiU1XkcDffzsqfgLAzJk8KX31VfDXNps9l4fo148ngmee4RXw3XdzKSdYpl4AAAl7SURBVIlA8TRBLV0KXH458Pvv4TeXVa3KTxl2kpKM60wmlH+ifoUvhI/ffnMtm5yfz71z9eamm7imzZ49rPjjgvjWnjmj3We18krbCP/P55/zU0tqKm9t23JbRUHQA1H4gs9UrqxdAZ8/H13doLw1NM/L4xa44aZvX2D9ep5spk5lk11CQvjlEGIDUfiCz9x1F1CrlqsPobgYePBBYPp04+Tyh88+45W0u7/HYuFoGSNo1Ij9EtdcY6x/Rij/iMIXfKZiRS6b7F4qODfXEVUT6XTpwolr774LpKezok9OBgYN4mQvQSjPiMIX/KJiReDii7X7y8r8PXeO7fDOPgA92b4d6NmTHaCDBwPHjzv+VqcO1+7fs4dDIrdv5yeU8hblJQjuiMIX/GbcOG2o5DPPeD/+00+5oF1GBtvQ9Q47PHsW6N6do4oOH2Znc9++2tDL+HjuYpWerq88ghApiMVQ8JuuXbkq5kcfcVjmiBEcXeKJHTuABx5wrXk0aBBnmOrlnFyxguPZ7Qq+qIjlOLp8D2onnuRek/5WdxOEcoAofCEg2rcH3nuv7OM2bWLF7mzKKSgAjh7Vb2Vtsbiv5gn/LXgQtfp8AiQlskALFnBdBUGIIcSkI+hKo0baRt1KAXr2q+/alZ847CUphiT9in/GfQZVkM/OhJMngX/8Qz8BBCFCEYUv6EqrVsATT7DyrViRV99Tpujb5jE+nitwvvgim5vGXrcZSXFFrge5N98VhBhATDqC7jz7LDBsGDeoadEiPKUDkpK4OTgAYHYLYFaCo840wAWYBCHGkBW+EBaaNuVIGUPqxAwcyJlNycnch7FqVa5KJwgxhih8ofyjlKMM57x53FlGHLZCDCImHSF2aNhQTDlCTCMrfEEQhBhBFL4gCEKMoKvCV0oNUEptVUrtUEoF0bZCEARBCBbdFL5SKh7AuwAGAmgJ4GalVEu9xhMEQRBKR88VfmcAO4hoFxEVApgG4FodxxMEQRBKQU+FXwfAfqfXB0r2uaCUGqGUylRKZR53rmErCIIghBQ9Fb7ysI80O4gmEVEGEWVU17PAilBu2L4daNOGs2mbNAFWrzZaIkGIDvRU+AcA1HV6nQ7gkI7jCTFAYSHQqxf3ny0s5LLHl1/uuTl5yDl1imvwWK1hGEwQQo+eCn8lgCZKqYZKqUQAwwD8pON4QgywaxeQnQ2Q07MiEbde1JX//Ie7t7RqBTRuzO2yBCHK0E3hE1ExgAcAzAGwGcAMItqo13hCbFC5Mjc0caaoCKhSRcdBf/0V+N//+JEiN5erwN14o44DCoI+6BqHT0SziagpETUmohf1HEuIDWrW5A5aKSmAycQ/hwzhhbdurF7t2rLLZgM2ytpFiD6klo4Qdfz3v1x5c906dtoOGcL10XSjUSOutJmT49gnjXCFKEQUvhCVDBzIW1i46SZg+nRg7lx+rACAr78O0+CCEDpE4QtCWcTFATNnApmZwOnTQMeOXFNfEKIMUfiC4AtKAZ06GS2FIASFVMsUBEGIEUThC4IgxAii8AVBEGIEUfiCIAgxgih8QRCEGEEUviAIQoygiDQViw1DKXUcwN4yDqsG4EQYxAkWkTP0RIusImdoiRY5AWNkrU9EPtWWjyiF7wtKqUwiyjBajrIQOUNPtMgqcoaWaJETiHxZxaQjCIIQI4jCFwRBiBGiUeFPMloAHxE5Q0+0yCpyhpZokROIcFmjzoYvCIIgBEY0rvAFQRCEAIg6ha+UulEptVEpZVNKRaQ3XCk1QCm1VSm1Qyn1pNHyeEIp9alS6phSaoPRspSGUqquUmqBUmpzyef+sNEyeUIplayUWqGUWlsi53ijZSoNpVS8Umq1UmqW0bKUhlJqj1JqvVJqjVIq02h5vKGUqqSU+lYptaXku9rNaJk8EXUKH8AGANcD+NNoQTyhlIoH8C6AgQBaArhZKdXSWKk88hmAAUYL4QPFAB4johYAugIYFaH3swDA5UTUFkA7AAOUUl0Nlqk0Hgb3mo4G+hBRu0gOdwTwFoDfiKg5gLaI0HsbdQqfiDYT0Vaj5SiFzgB2ENEuIioEMA3AtQbLpIGI/gRwymg5yoKIDhPRqpLfs8H/SHWMlUoLMedLXiaUbBHpIFNKpQO4GsDHRstSHlBKVQBwGYBPAICIConojLFSeSbqFH4UUAfAfqfXBxCBCioaUUo1ANAewHJjJfFMiZlkDYBjAOYSUUTKCeBNAGMA2IwWxAcIwO9KqSyl1AijhfFCIwDHAUwuMZN9rJRKMVooT0SkwldK/aGU2uBhi7iVsgc8tdOOyJVeNKGUSgXwHYBHiOic0fJ4goisRNQOQDqAzkqpVkbL5I5SahCAY0SUZbQsPtKDiDqATaSjlFKXGS2QB0wAOgB4n4jaA8gBEJG+u4hscUhE/YyWIQgOAKjr9DodwCGDZCkXKKUSwMp+ChHNNFqesiCiM0qphWAfSaQ5xXsAGKyUugpAMoAKSqmviOg2g+XyCBEdKvl5TCn1PdhkGmn+uwMADjg90X2LCFX4EbnCj3JWAmiilGqolEoEMAzATwbLFLUopRTYNrqZiF43Wh5vKKWqK6UqlfxuBtAPwBZjpdJCRGOJKJ2IGoC/m/MjVdkrpVKUUmn23wFcgcibQEFERwDsV0o1K9nVF8AmA0XyStQpfKXUEKXUAQDdAPyilJpjtEzOEFExgAcAzAE7GGcQ0UZjpdKilPoawN8AmimlDiil7jZaJi/0AHA7gMtLQvPWlKxOI43aABYopdaBJ/25RBTRIY9RQE0Afyml1gJYAeAXIvrNYJm88SCAKSWffzsAEw2WxyOSaSsIghAjRN0KXxAEQQgMUfiCIAgxgih8QRCEGEEUviAIQowgCl8QBCFGEIUvCD6glBqulNpesg03Wh5BCAQJyxSEMlBKVQGQCSADXCYjC0BHIjptqGCC4CeywhcEJ5RSnZRS60rq26copTYCGAVOpDpVouTnIjpKSwuCCxFZS0cQjIKIViqlfgLwAgAzgK8AFEEqoArlAFnhC4KW5wH0B5twXoFUQBXKCaLwBUFLFQCpANLAFSWlAqpQLhCnrSC4UWLSmQagIbgo2rNgR22HkkNWgZ22Ed8xTBCcERu+IDihlLoDQDERTS3pT7wUXP1wArgKJgA8L8peiEZkhS8IghAjiA1fEAQhRhCFLwiCECOIwhcEQYgRROELgiDECKLwBUEQYgRR+IIgCDGCKHxBEIQYQRS+IAhCjPD/qQSEfmdFZO0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1108dd6a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data.plot.scatter('x0', 'x1' ,c=mycolors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "# train test split\n",
    "from sklearn.model_selection import train_test_split\n",
    "X = data.iloc[:, :-1].values\n",
    "y = data.iloc[:, -1].values\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Split dataset into train ab=nd test sets\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 1/4, random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "# Apply Machine learning algorithm\n",
    "model = LogisticRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# learn parameters with fit\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prediction\n",
    "y_pred = model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 1., 0., 0., 1., 0., 0., 1., 1., 1., 0., 1., 1., 1., 1., 0., 0.,\n",
       "       1., 0., 0., 1., 1., 0., 0., 0., 0., 1., 1., 1., 0., 1., 0., 1., 0.,\n",
       "       0., 1., 1., 0., 1., 1., 0., 0., 1., 1., 1., 0., 1., 0., 1., 1.])"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 1., 1., 0., 1., 1., 0., 1., 0., 1., 0., 1., 1., 1., 0., 0., 0.,\n",
       "       1., 0., 0., 1., 1., 0., 1., 0., 1., 1., 1., 1., 0., 0., 0., 1., 1.,\n",
       "       0., 1., 1., 0., 0., 1., 1., 0., 0., 1., 1., 0., 0., 0., 1., 1.])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.76"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Evaluation\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[17,  6],\n",
       "       [ 6, 21]])"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "confusion_matrix(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "72.0\n"
     ]
    }
   ],
   "source": [
    "# Gaussian Naive Bayes\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "gaussian = GaussianNB()\n",
    "gaussian.fit(X_train, y_train)\n",
    "y_pred = gaussian.predict(X_test)\n",
    "acc_gaussian = round(accuracy_score(y_pred, y_test) * 100, 2)\n",
    "print(acc_gaussian)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "76.0\n"
     ]
    }
   ],
   "source": [
    "# Gradient Boosting Classifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "\n",
    "gbk = GradientBoostingClassifier()\n",
    "gbk.fit(X_train, y_train)\n",
    "y_pred = gbk.predict(X_test)\n",
    "acc_gbk = round(accuracy_score(y_pred, y_test) * 100, 2)\n",
    "print(acc_gbk)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}