You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@madlib.apache.org by fm...@apache.org on 2018/04/23 21:57:45 UTC

[01/15] madlib-site git commit: jupyter notebooks for 1.14 release

Repository: madlib-site
Updated Branches:
  refs/heads/notebook-updates-1dot14 [created] 3f849b9e4


http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/mlp-v3.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/mlp-v3.ipynb b/community-artifacts/mlp-v3.ipynb
new file mode 100644
index 0000000..8c585a6
--- /dev/null
+++ b/community-artifacts/mlp-v3.ipynb
@@ -0,0 +1,4584 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Multilayer Perceptron\n",
+    "\n",
+    "Multilayer Perceptron (MLP) is a type of neural network that can be used for regression and classification.\n",
+    "\n",
+    "This version of the workbook includes mini-batching which was added in the 1.14 release."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-66-g4cced1b, cmake configuration time: Mon Apr 23 16:26:17 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-66-g4cced1b, cmake configuration time: Mon Apr 23 16:26:17 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Classification without Mini-Batching\n",
+    "\n",
+    "# 1.  Create input table for classification"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "52 rows affected.\n",
+      "52 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>attributes</th>\n",
+       "        <th>class_text</th>\n",
+       "        <th>class</th>\n",
+       "        <th>state</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>[Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>[Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>[Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>[Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>[Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>27</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>28</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>29</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>30</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>31</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>32</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>33</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>34</td>\n",
+       "        <td>[Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>35</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>36</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>37</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>38</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>39</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>40</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>41</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>42</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>43</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>44</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>45</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>46</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>47</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>48</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>49</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>50</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>51</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>52</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (2, [Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (3, [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (4, [Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (5, [Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (6, [Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (7, [Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (8, [Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (9, [Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (10, [Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (11, [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (12, [Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (13, [Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (14, [Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (15, [Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (16, [Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (17, [Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (18, [Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (19, [Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (20, [Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (21, [Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (22, [Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (23, [Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (24, [Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (25, [Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (26, [Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (27, [Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (28, [Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (29, [Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (30, [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (31, [Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (32, [Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (33, [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (34, [Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (35, [Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (36, [Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (37, [Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (38, [Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (39, [Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (40, [Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (41, [Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (42, [Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (43, [Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (44, [Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (45, [Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (46, [Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (47, [Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (48, [Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (49, [Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (50, [Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (51, [Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (52, [Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee')]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql \n",
+    "DROP TABLE IF EXISTS iris_data;\n",
+    "\n",
+    "CREATE TABLE iris_data(\n",
+    "    id serial,\n",
+    "    attributes numeric[],\n",
+    "    class_text varchar,\n",
+    "    class integer,\n",
+    "    state varchar\n",
+    ");\n",
+    "\n",
+    "INSERT INTO iris_data(id, attributes, class_text, class, state) VALUES\n",
+    "(1,ARRAY[5.0,3.2,1.2,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(2,ARRAY[5.5,3.5,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(3,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Alaska'),\n",
+    "(4,ARRAY[4.4,3.0,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(5,ARRAY[5.1,3.4,1.5,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(6,ARRAY[5.0,3.5,1.3,0.3],'Iris_setosa',1,'Alaska'),\n",
+    "(7,ARRAY[4.5,2.3,1.3,0.3],'Iris_setosa',1,'Alaska'),\n",
+    "(8,ARRAY[4.4,3.2,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(9,ARRAY[5.0,3.5,1.6,0.6],'Iris_setosa',1,'Alaska'),\n",
+    "(10,ARRAY[5.1,3.8,1.9,0.4],'Iris_setosa',1,'Alaska'),\n",
+    "(11,ARRAY[4.8,3.0,1.4,0.3],'Iris_setosa',1,'Alaska'),\n",
+    "(12,ARRAY[5.1,3.8,1.6,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(13,ARRAY[5.7,2.8,4.5,1.3],'Iris_versicolor',2,'Alaska'),\n",
+    "(14,ARRAY[6.3,3.3,4.7,1.6],'Iris_versicolor',2,'Alaska'),\n",
+    "(15,ARRAY[4.9,2.4,3.3,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(16,ARRAY[6.6,2.9,4.6,1.3],'Iris_versicolor',2,'Alaska'),\n",
+    "(17,ARRAY[5.2,2.7,3.9,1.4],'Iris_versicolor',2,'Alaska'),\n",
+    "(18,ARRAY[5.0,2.0,3.5,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(19,ARRAY[5.9,3.0,4.2,1.5],'Iris_versicolor',2,'Alaska'),\n",
+    "(20,ARRAY[6.0,2.2,4.0,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(21,ARRAY[6.1,2.9,4.7,1.4],'Iris_versicolor',2,'Alaska'),\n",
+    "(22,ARRAY[5.6,2.9,3.6,1.3],'Iris_versicolor',2,'Alaska'),\n",
+    "(23,ARRAY[6.7,3.1,4.4,1.4],'Iris_versicolor',2,'Alaska'),\n",
+    "(24,ARRAY[5.6,3.0,4.5,1.5],'Iris_versicolor',2,'Alaska'),\n",
+    "(25,ARRAY[5.8,2.7,4.1,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(26,ARRAY[6.2,2.2,4.5,1.5],'Iris_versicolor',2,'Alaska'),\n",
+    "(27,ARRAY[5.6,2.5,3.9,1.1],'Iris_versicolor',2,'Alaska'),\n",
+    "(28,ARRAY[5.0,3.4,1.5,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(29,ARRAY[4.4,2.9,1.4,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(30,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Tennessee'),\n",
+    "(31,ARRAY[5.4,3.7,1.5,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(32,ARRAY[4.8,3.4,1.6,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(33,ARRAY[4.8,3.0,1.4,0.1],'Iris_setosa',1,'Tennessee'),\n",
+    "(34,ARRAY[4.3,3.0,1.1,0.1],'Iris_setosa',1,'Tennessee'),\n",
+    "(35,ARRAY[5.8,4.0,1.2,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(36,ARRAY[5.7,4.4,1.5,0.4],'Iris_setosa',1,'Tennessee'),\n",
+    "(37,ARRAY[5.4,3.9,1.3,0.4],'Iris_setosa',1,'Tennessee'),\n",
+    "(38,ARRAY[6.0,2.9,4.5,1.5],'Iris_versicolor',2,'Tennessee'),\n",
+    "(39,ARRAY[5.7,2.6,3.5,1.0],'Iris_versicolor',2,'Tennessee'),\n",
+    "(40,ARRAY[5.5,2.4,3.8,1.1],'Iris_versicolor',2,'Tennessee'),\n",
+    "(41,ARRAY[5.5,2.4,3.7,1.0],'Iris_versicolor',2,'Tennessee'),\n",
+    "(42,ARRAY[5.8,2.7,3.9,1.2],'Iris_versicolor',2,'Tennessee'),\n",
+    "(43,ARRAY[6.0,2.7,5.1,1.6],'Iris_versicolor',2,'Tennessee'),\n",
+    "(44,ARRAY[5.4,3.0,4.5,1.5],'Iris_versicolor',2,'Tennessee'),\n",
+    "(45,ARRAY[6.0,3.4,4.5,1.6],'Iris_versicolor',2,'Tennessee'),\n",
+    "(46,ARRAY[6.7,3.1,4.7,1.5],'Iris_versicolor',2,'Tennessee'),\n",
+    "(47,ARRAY[6.3,2.3,4.4,1.3],'Iris_versicolor',2,'Tennessee'),\n",
+    "(48,ARRAY[5.6,3.0,4.1,1.3],'Iris_versicolor',2,'Tennessee'),\n",
+    "(49,ARRAY[5.5,2.5,4.0,1.3],'Iris_versicolor',2,'Tennessee'),\n",
+    "(50,ARRAY[5.5,2.6,4.4,1.2],'Iris_versicolor',2,'Tennessee'),\n",
+    "(51,ARRAY[6.1,3.0,4.6,1.4],'Iris_versicolor',2,'Tennessee'),\n",
+    "(52,ARRAY[5.8,2.6,4.0,1.2],'Iris_versicolor',2,'Tennessee');\n",
+    "\n",
+    "SELECT * FROM iris_data ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#  2. Classification model\n",
+    "\n",
+    "Generate a multilayer perceptron with a single hidden layer of 5 units. Use the attributes column as the independent variables, and use the class column as the classification. Set the tolerance to 0 so that 500 iterations will be run. Use a hyperbolic tangent activation function. The model will be written to mlp_model."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>mlp_classification</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td></td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[('',)]"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;\n",
+    "\n",
+    "-- Set seed so results are reproducible\n",
+    "SELECT setseed(0);\n",
+    "\n",
+    "SELECT madlib.mlp_classification(\n",
+    "    'iris_data',      -- Source table\n",
+    "    'mlp_model',      -- Destination table\n",
+    "    'attributes',     -- Input features\n",
+    "    'class_text',     -- Label\n",
+    "    ARRAY[5],         -- Number of units per layer\n",
+    "    'learning_rate_init=0.003,\n",
+    "    n_iterations=500,\n",
+    "    tolerance=0',     -- Optimizer params\n",
+    "    'tanh',           -- Activation function\n",
+    "    NULL,             -- Default weight (1)\n",
+    "    FALSE,            -- No warm start\n",
+    "    FALSE             -- Not verbose\n",
+    ");"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "View the classification model:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>coeff</th>\n",
+       "        <th>loss</th>\n",
+       "        <th>num_iterations</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[-0.133201972097394, -0.118636963016892, 0.259474215534915, -0.528433916977086, -0.429596986146934, 0.0280938067215663, -0.144466640003299, 0.286988287730496, -0.357379109879214, -0.66607966047993, -0.362686864800844, -0.445850222259492, 0.346304179999463, -0.522045614901381, -0.374150944327096, -0.0495674317777646, -0.0832467361276034, 0.279692771132311, -0.517927322791807, -0.2809929864922, -0.183324281085865, -0.243554165368264, 0.349093795759817, -0.713886988614578, -0.432209713264906, -0.450592821509468, 0.43151079821727, 0.472695001337664, 0.612226054527927, 0.490963383058475, 0.724327654407535, -0.103407228476278, -0.851088815290572, -0.837299697527914, -0.899486162064411, -0.486098700715332, -1.08911290004112]</td>\n",
+       "        <td>0.00734471737812</td>\n",
+       "        <td>500</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[([-0.133201972097394, -0.118636963016892, 0.259474215534915, -0.528433916977086, -0.429596986146934, 0.0280938067215663, -0.144466640003299, 0.286988287730496, -0.357379109879214, -0.66607966047993, -0.362686864800844, -0.445850222259492, 0.346304179999463, -0.522045614901381, -0.374150944327096, -0.0495674317777646, -0.0832467361276034, 0.279692771132311, -0.517927322791807, -0.2809929864922, -0.183324281085865, -0.243554165368264, 0.349093795759817, -0.713886988614578, -0.432209713264906, -0.450592821509468, 0.43151079821727, 0.472695001337664, 0.612226054527927, 0.490963383058475, 0.724327654407535, -0.103407228476278, -0.851088815290572, -0.837299697527914, -0.899486162064411, -0.486098700715332, -1.08911290004112], 0.00734471737812046, 500)]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM mlp_model;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "View the model summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>source_table</th>\n",
+       "        <th>independent_varname</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>dependent_vartype</th>\n",
+       "        <th>tolerance</th>\n",
+       "        <th>learning_rate_init</th>\n",
+       "        <th>learning_rate_policy</th>\n",
+       "        <th>n_iterations</th>\n",
+       "        <th>n_tries</th>\n",
+       "        <th>layer_sizes</th>\n",
+       "        <th>activation</th>\n",
+       "        <th>is_classification</th>\n",
+       "        <th>classes</th>\n",
+       "        <th>weights</th>\n",
+       "        <th>grouping_col</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>iris_data</td>\n",
+       "        <td>attributes</td>\n",
+       "        <td>class_text</td>\n",
+       "        <td>character varying</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>0.003</td>\n",
+       "        <td>constant</td>\n",
+       "        <td>500</td>\n",
+       "        <td>1</td>\n",
+       "        <td>[4, 5, 2]</td>\n",
+       "        <td>tanh</td>\n",
+       "        <td>True</td>\n",
+       "        <td>[u'Iris_setosa', u'Iris_versicolor']</td>\n",
+       "        <td>1</td>\n",
+       "        <td>NULL</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'iris_data', u'attributes', u'class_text', u'character varying', 0.0, 0.003, u'constant', 500, 1, [4, 5, 2], u'tanh', True, [u'Iris_setosa', u'Iris_versicolor'], u'1', u'NULL')]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM mlp_model_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "View the standardization table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>mean</th>\n",
+       "        <th>std</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[5.45961538461539, 2.99807692307692, 3.025, 0.851923076923077]</td>\n",
+       "        <td>[0.598799958694505, 0.498262513685689, 1.41840579525043, 0.550346179381454]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[([5.45961538461539, 2.99807692307692, 3.025, 0.851923076923077], [0.598799958694505, 0.498262513685689, 1.41840579525043, 0.550346179381454])]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM mlp_model_standardization;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3. Prediction for classification\n",
+    "\n",
+    "Now let's use the model to predict. In the following example we will use the training data set for prediction as well, which is not usual but serves to show the syntax. The prediction is in the estimated_class_text column with the actual value in the class_text column."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "52 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>estimated_class_text</th>\n",
+       "        <th>attributes</th>\n",
+       "        <th>class_text</th>\n",
+       "        <th>class</th>\n",
+       "        <th>state</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>27</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>28</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>29</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>30</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>31</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>32</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>33</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>34</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>35</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>36</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>37</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>38</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>39</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>40</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>41</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>42</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>43</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>44</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>45</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>46</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>47</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>48</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>49</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>50</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>51</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>52</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u'Iris_setosa', [Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (2, u'Iris_setosa', [Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (3, u'Iris_setosa', [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (4, u'Iris_setosa', [Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (5, u'Iris_setosa', [Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (6, u'Iris_setosa', [Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (7, u'Iris_setosa', [Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (8, u'Iris_setosa', [Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (9, u'Iris_setosa', [Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (10, u'Iris_setosa', [Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (11, u'Iris_setosa', [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (12, u'Iris_setosa', [Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (13, u'Iris_versicolor', [Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (14, u'Iris_versicolor', [Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (15, u'Iris_versicolor', [Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (16, u'Iris_versicolor', [Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (17, u'Iris_versicolor', [Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (18, u'Iris_versicolor', [Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (19, u'Iris_versicolor', [Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (20, u'Iris_versicolor', [Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (21, u'Iris_versicolor', [Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (22, u'Iris_versicolor', [Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (23, u'Iris_versicolor', [Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (24, u'Iris_versicolor', [Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (25, u'Iris_versicolor', [Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (26, u'Iris_versicolor', [Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (27, u'Iris_versicolor', [Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (28, u'Iris_setosa', [Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (29, u'Iris_setosa', [Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (30, u'Iris_setosa', [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (31, u'Iris_setosa', [Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (32, u'Iris_setosa', [Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (33, u'Iris_setosa', [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (34, u'Iris_setosa', [Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (35, u'Iris_setosa', [Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (36, u'Iris_setosa', [Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (37, u'Iris_setosa', [Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (38, u'Iris_versicolor', [Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (39, u'Iris_versicolor', [Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (40, u'Iris_versicolor', [Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (41, u'Iris_versicolor', [Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (42, u'Iris_versicolor', [Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (43, u'Iris_versicolor', [Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (44, u'Iris_versicolor', [Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (45, u'Iris_versicolor', [Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (46, u'Iris_versicolor', [Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (47, u'Iris_versicolor', [Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (48, u'Iris_versicolor', [Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (49, u'Iris_versicolor', [Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (50, u'Iris_versicolor', [Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (51, u'Iris_versicolor', [Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (52, u'Iris_versicolor', [Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee')]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS mlp_prediction;\n",
+    "\n",
+    "SELECT madlib.mlp_predict(\n",
+    "         'mlp_model',         -- Model table\n",
+    "         'iris_data',         -- Test data table\n",
+    "         'id',                -- Id column in test table\n",
+    "         'mlp_prediction',    -- Output table for predictions\n",
+    "         'response'           -- Output classes, not probabilities\n",
+    "     );\n",
+    "\n",
+    "SELECT * FROM mlp_prediction JOIN iris_data USING (id) ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Count the misclassifications:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0L,)]"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT COUNT(*) FROM mlp_prediction JOIN iris_data USING (id) \n",
+    "WHERE mlp_prediction.estimated_class_text != iris_data.class_text;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Classification with Mini-Batching\n",
+    "\n",
+    "# 1. Call mini-batch preprocessor\n",
+    "\n",
+    "Use the same data set as above."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "2 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__id__</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [0.234443261629389, 0.00385956572
 525086, 1.03989986852812, 1.17758048907675], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828], [0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848], [-0.0995580974152422, 1.4087414919645, -1.07515071152907, -1.18456909732025], [2.07145073637487, 0.20455698375943, 0.969398182526215, 0.995876674738521], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202], [-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.234443261629
 389, 0.00385956572525086, 0.757893124520495, 0.81417286040029]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [0.568444620674023, 2.0108337460670
 4, -1.28665576953479, -1.18456909732025], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [0.0674425821070736, -1.20032
 494247982, 0.546388066514775, 0.450765231723828]]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0L, [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]], [[0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [-0.767560815504508, -2.00311461461654, 0
 .334883008509056, 0.269061417385597], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [0.234443261629389, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828], [0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848], [-0.0995580974152422, 1.4087414919645, -1.07515071152907, -1.18456909732025], [2.07145073637487, 0.
 20455698375943, 0.969398182526215, 0.995876674738521], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202], [-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029]]),\n",
+       " (1L, [[0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]], [[0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.401443941151707, -0.798930106411465,
  0.334883008509056, 0.269061417385597], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [0.568444620674023, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [0.234443261629389, -0.196837852
 308928, 0.405384694510963, 0.81417286040029], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828]])]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;\n",
+    "\n",
+    "SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table\n",
+    "                                     'iris_data_packed',  -- Output table\n",
+    "                                     'class_text',        -- Dependent variable\n",
+    "                                     'attributes'        -- Independent variables\n",
+    "                                     );\n",
+    "\n",
+    "SELECT * FROM iris_data_packed ORDER BY __id__;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Classification model with mini-batching\n",
+    "Use similar parameters as before:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>mlp_classification</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td></td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[('',)]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;\n",
+    "-- Set seed so results are reproducible\n",
+    "SELECT setseed(0);\n",
+    "\n",
+    "SELECT madlib.mlp_classification(\n",
+    "    'iris_data_packed',      -- Ouput table from mini-batch preprocessor\n",
+    "    'mlp_model',             -- Destination table\n",
+    "    'independent_varname',   -- Hardcode to this, from table iris_data_packed\n",
+    "    'dependent_varname',     -- Hardcode to this, from table iris_data_packed\n",
+    "    ARRAY[5],         -- Number of units per layer\n",
+    "    'learning_rate_init=0.1,\n",
+    "    n_iterations=500,\n",
+    "    tolerance=0',     -- Optimizer params\n",
+    "    'tanh',           -- Activation function\n",
+    "    NULL,             -- Default weight (1)\n",
+    "    FALSE,            -- No warm start\n",
+    "    FALSE             -- Not verbose\n",
+    ");"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "View the classification model:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>coeff</th>\n",
+       "        <th>loss</th>\n",
+       "        <th>num_iterations</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[-0.0309749079415527, -0.238585231565989, 0.516459799389647, -0.46368579959856, -0.673732925023756, 0.0778619338393474, 0.197305073296416, -0.249692782186095, 0.439028430336739, 0.626376493360924, -0.0882970823387187, -0.0797679288590299, 0.397818124348168, -0.123298748840092, -0.207996015482563, -0.225365582875435, -0.311523866687928, 0.323570097811814, -0.369573237920434, -0.364962791069138, 0.233034700676389, 0.220908774672402, -0.292167680244236, 0.695958014086603, 0.619175545678452, -0.164066120012632, 0.951372990648697, -0.819801614646947, 0.290676073162377, 0.785234769097514, -1.04842776221521, 0.172123879960554, -0.94312904330421, 0.658608739158027, -0.264472191827765, -0.37546065538845, 0.923108343066969]</td>\n",
+       "        <td>0.00603272550899</td>\n",
+       "        <td>500</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[([-0.0309749079415527, -0.238585231565989, 0.516459799389647, -0.46368579959856, -0.673732925023756, 0.0778619338393474, 0.197305073296416, -0.249692782186095, 0.439028430336739, 0.626376493360924, -0.0882970823387187, -0.0797679288590299, 0.397818124348168, -0.123298748840092, -0.207996015482563, -0.225365582875435, -0.311523866687928, 0.323570097811814, -0.369573237920434, -0.364962791069138, 0.233034700676389, 0.220908774672402, -0.292167680244236, 0.695958014086603, 0.619175545678452, -0.164066120012632, 0.951372990648697, -0.819801614646947, 0.290676073162377, 0.785234769097514, -1.04842776221521, 0.172123879960554, -0.94312904330421, 0.658608739158027, -0.264472191827765, -0.37546065538845, 0.923108343066969], 0.00603272550899296, 500)]"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM mlp_model;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3. Prediction for classification\n",
+    "\n",
+    "Now predict using model we built using mini-batching.  As before we will use the training data set for prediction as well, which is not usual but serves to show the syntax. The prediction is in the estimated_class_text column with the actual value in the class_text column.  Note that the prediction function is exactly the same whether you use mini batching or not:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "52 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>estimated_class_text</th>\n",
+       "        <th>attributes</th>\n",
+       "        <th>class_text</th>\n",
+       "        <th>class</th>\n",
+       "        <th>state</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>Iris_versicolor</t

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/images/neural-net-head.jpg
----------------------------------------------------------------------
diff --git a/images/neural-net-head.jpg b/images/neural-net-head.jpg
new file mode 100644
index 0000000..d9aec3c
Binary files /dev/null and b/images/neural-net-head.jpg differ


[03/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/mlp-mnist-v2.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/mlp-mnist-v2.ipynb b/community-artifacts/mlp-mnist-v2.ipynb
new file mode 100644
index 0000000..3c1ad14
--- /dev/null
+++ b/community-artifacts/mlp-mnist-v2.ipynb
@@ -0,0 +1,1154 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Neural networks\n",
+    "\n",
+    "Multilayer perceptron (MLP) using the well known MNIST data set.\n",
+    "\n",
+    "Updated to include mini-batching which was added in the 1.14 release.\n",
+    "\n",
+    "# Intro"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/jpeg": "/9j/4R5fRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAA\nagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyA\nAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzADIwMTU6MDc6MjQgMTA6NTk6\nNTEAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACoKADAAQAAAABAAABcwAAAAAAAAAGAQMAAwAA\nAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIA\nBAAAAAEAAB0pAAAAAAAAAEgAAAABAAAASAAAAAH/2P/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSA\nAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwM\nDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwM\nDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAWACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEF\nAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAAB\nBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHx\nY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm\n9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYF
 NQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS\n0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0\npbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A8+yL677Bjsa4VU+1pr5c\nZ997qHex2/8AkvqVmrEDunZFjr2OqqurbVZqNjnh+/1G7fUZQ7+bf/w3p2s/PR+o9Lz+kVMuusdm\nY1h9mVSG2UknX0vXs3Pqs/kW1/8AFb0OjM9YNu2FhYSygXuL91h/wTXN9KnZs/nv0P8AwX+EVwRH\nERI1OvlP8v0WrxXEGGsL+Yfi6n1b+qNudU578dz6GkObbYfTZPZ9su2V4j/of4Sy/wDwXpLQ+tXS\nOidDbVl0Xs6hmOALNAcdriZda9u57MjZ7fRxv5j/AE3s/QrAOX1nIoi8bq2GHAlpx/3dwZLfsX/W\n/wBH/wAUhWU+ptPUdlTK2D1Qx732j6XpsrbvuZ6j2t9m5VZ8vmMwYnhiP3gYxr+t+jxf3nRx83y8\ncUoyjxEg7cMpX/e+fh/2f/VHP9PJ6hkvfY51j3AudY4+0azue7/BsRsu+uPtNW71AQL9hibOPVtd\n9JzLo3Naz9H/ADnvVhl7La/s2JS19FmjaCSywfvW2tZ77/67LX/9bUR07Ira66k1uraD6raSCA3u\n17bW73s/66rAgRHT1dZS31aEpgy19P7sfBosyxbIbtxbXab2NAYf65hz6/625W+k5WS3Os6dkOc6\nvPY7FtredwBcZoewas3svbW6t6rkV2GWFjmNGrbWw5o8fUq3OsZ/L/z1ZxaDe0Vh4FteuPaTIkcU\nG5m5vu/wPqemm2QQbutfCX9X/CZBAT9OwP8AzfH/AAXO22Y73V3s3ODi19TuxB2O/lMf7UW+trqz\nbS42AfSB+nWB/pGt+kz/AId
 ns/4pdD9b+gHBycfMqE09Rory2gCNrntHrV/9ublzM2UvFlbi17T7\nSNCFBDNGVgai6/rNjLy04Ue4v+qUYrLQCSId2lELQGyHNDDoDrz3Uox8ru3HyI+Fdh/6nHf/AOAf\n8Qp112Ue8si9mlbXabf+HP8A6K/z/wDBqQD7O7AT337Mr7NlDGma3NeQA0agDbE/y91aLVjV5YL2\nAG0iLGAR/wChDG/+fa0G5jWUVusJBcBHftvc7/PuR6qMmusCtjqrLoDCdH7eXP8A3m7voMTrAJMv\nlA1WxgZUIfMTo3cetwz2VUVB9bQC+x2jWNI29/5KNlYFLb6rWPDgAfc7RrgP39v57VY6b0rqTG2W\nZ9fpYEB92Y7QV/ubv9I6z6Laq/0j0LO6sy+jKq6QQPQaLG3Fv6Z1YivJZW1381Tsd6/s9/6L9Ips\nOXBkxmQPFqTED+r+7+8s5jl8+HJwyiYmgDekfV++hf0NptORfdXTV/g6LPa6I3fzbvd/nIb8zpWP\nXNFbr36tftbtAP8AJts3PZ/Yas3EzH7ybALHO/Odq6f3nOSNFlgL2PLGEk+72Nn+S523d/ZQOSNf\nq4Cz39Ulvtm6nIkDt6Ypm9YbUf1WivHIduFhm2wT/wAJb/5FA+1W+u251jrTIIJ4Gu72fu+5RdTc\n0x6lTncwXt/79tU62vYSL2+m0CZI0I/kOHtUfFM6GwB4cMf+9ZOGI1Gv1uX/AHz/AP/Q5Tp+bfhd\nQNFDt+Na4NdU8B9dlbiN1N1T5rtb+Yl9Yei04edQ2uxuLhWVCzFYSS5u91nrV/n3Xena3+d/0foq\n5iYWFTe1vrnLvYQ5lTKHtqY8wd5teTZbWzd7WVM+mq31nysPL6kxl15NePWzGZ6bdzy6ou9d3q2P\npZ7rbH/yFp5Yj27IF8VCzXp/d/uubCROb02Bwni0/wAU/wB5yrc/ErtF1Hvyg0NdkWNhriNN9dbC\n51Vm3/
 WtTr6jk10NfXY5jQTuLX7AS76Xs9rfcosxeie5nqZFV4gtN7Q2l2vua5+P9otr9v0H7LP+\ntqX2BmVWa6wxkRse29trASf8I2WWVb/9a1XByEmqvX0w/a2CMdCwfOf7GVGRg5FzXiaskNg2D3F3\n9lv538v1N607KMT0baKrWnMsbNo8h+839/8A8+f8YsNmBkY9pY7HvfYzuGnaD/J27t3tVlvSC8Nf\nYy0thpLnVlsal7/e76Wytjv7akhOfCYmAJOh/R/lJbMR6TqOhH6X8otW3Cdj2OBvre6r6fpl7XVu\n/wBGfVrZ/nfzX/CKz07GnIrscfQfIhzSNjp/lsOyh/8AX/RP/wCCTMz8k+y5hlsltpbuewk7thkO\nd6as/YnmoZEso3fzdm4sZaZ1Yxz9/p2/29n/ABagnhE4nhvby4Wzgz+3IGVb+fE+kk9Mz/q2K7nl\n2fgsdFThHtmYdW4ek7a1eddV+r2RWW5Lsd+NjWFw9dw2tLgRuZTjndfb6e737G+/9J+4rGH1HMbf\nXiZRsqJikWD81p09LLriux1Tf33s/Rfy6lW64d/Ucm6x9hvLx7gXBhaGtb+lDHOv/M2+p9BV+X5I\nwuc5cW0K+T5dpzv9Nu81z8cg9vGOEEyy6+vh498eLh4f1fF6nOpq6I2zZZ9otaP5zIY5lZYP324l\njLPV2/ufaP0v/BqfUS/CvOLfGTjPa1+JazQmp38zbjv9zms/0mO/ez1vU/wqDk5mdG0trfXyWFu+\nQPzv0+65zW/1lp9KnqeIMWzF9O7FJtwDXvAe4/pLMT3+vt9X+ep/m6vUVqIs8EdD/d08v0uL/Ccy\nZI9ctY9fV/zv0eFp5NIOTQ3HLbW4VMbZAO8Tb7mE+/8ASWN/fVn6vY9Z6gcnqdr8XDxh6+Vbtmxw\nnayqhr/5zJybXbGfufpL/wCbpeh19LynMyLL22V22kMHqV7LPcd9n6K1zf8AO9VXX9N
 zMTCrxBi2\nZFYd9ozi8gMBINePW6zcfTtopc+2yqv+bfk/ziWXAcg2MRLXv/U4aX4OaGGYIIkYn6/vcTf+sX15\nd1ikYNdBqopG3GoZ7obG0b3aufZs/PXJY9jsPKrue4M2E7gDLy1w2WAbPou2O/PVi+uut+y7Nojk\nNpZubBEtLnNr2f8AnxB9fGaNtb2tDT9MUNcT/ascoMWCOI6HUG943Y/wmxn5qWYAcPpqgAJVR/wU\n+yLHuxmhlrebCABY0Dc2/H3fo2b2/pLa/wDtr+RUsFJdvvuL3P8ApbAXH+tufsarlVr72i2q95dR\nobHVtaAD9HdZu21bf6yaw22kA9QDbNRDHua1xPJ/S/Z6at39fZ/xanlEEaeY2r/p/M1Ykg6+R3/7\n1pvfihwZ6L37NAXuiR/Vrb/39GY/JoebKK249ZPLhtkH839ObLH/ANhNa/KqO205IB+i51hDT/V0\nc3b/AG0bpWIMrPqrZUbLSdwl/wC6C/mP5KilIRNk8Nda4OFmhjlk0iOK+nzcT//RysnqF+BRvba2\n/Lxmj1an2bSJ3NryQXtb6jW2Prr9R/pP/wAJs965G6rMD2nKoFbYioWfo4A/0T7D+kb7v5a2LrMi\nrMsfTY0sexzHWhs2NaXmzdW/bY+mz9Gz0rP8F/g1Uod028uqtuDarzDnWhzXB3+lFmz0vXb/AKX9\nB6v/AGorWhmn7kq4qA0iCY1/6E0sWM4gTw3esiAbarsdr6w++4AN+iQST/0Wu9qA1uNua45fplvA\nbW8kfftRc7puVg27cmwNJ1qtG4se0/QfVYxpa5rkCqqq4w6yvdHI3NOv8lzGsVeV3XCBLxOv/SZo\n1V8RMfAaN7EODeTU+xzy1ji2wUiBt3WmpzfV9zLdv5jfZd/131Fbm1OpOLbXYypxLm3se1z9r9kx\nW5rarKv0bf0ddlH+jtuVJlOfivF2P79uospIeARrPs3bdsfnKy
 G131XXRtbWG230NADQCW1etjO/\nwT/Ud/Rv9a1xGqI4T+YUYi7viHTwk1cjCsxYukXY7zFWQydjo+kw/nV3N/Pos/SKu0PfZAjx14A8\nf6qu4+Tfheo9pa+i72uY4bqrQDIbZU7/AEf/AG7UiWYmLk078MfZrrBudjPduaWDvRa73tq3fm3/\nAPGer6VfqpvBe3mY/wDerxMjfy4v4oqM5zXV1yXVBzWlx+lAPdv51bf8Ez6df+DtrXRZf1bzepuD\nnuGOanD0bbJ3ux3jeN2O0er6zHO3+/0/p2b1H6s4mL0jD/bOeP1u2fsVZHurYJ35O3/S2bf0H+jr\n/Tf4SqxaNn1ofXXX+hYXuAsD9ZAf7w0e73/1nq5y+ISxn3T6ZURHrXQtXLLJLIfYH83pKcvlsoL+\nj9T6cf8AJuZj4rYjfe97n9vc7dQ6j1X/AOk/7Z9NVWZvUGttxsoYxtvYWfb8As9f05a67azH/Ren\n7P026vHt/wCER78izLDHBzn+qILZlwfI97QP3t2xWMKjIwcfJ6g+sixlBrq3QN19p9Kjc+wsa1rP\n5yz1H/QqUs8URZBlwxF1fo8uFhJlE8MxEzsa/pa/L62o/wCsIoFdnp/tC8EuGS292PVZYePtOKz9\nDc7a3/BXVPsVR/1j6nc45mdZlUVOJIbVlPoYT+czEx6q3Mbx/wAXv/nrlmYuLdVW91gbeCAG4jHt\nfvI/Pt9JzvSrr2/verY/066/36xOe595hznPH0WO9tjR/o/0ezdXt+iyr6H+gVOWSR11jf6JF/8A\nT9TZjhxjShKv0r/730xdJt2DnfpaLLftu5zpyHl9rXPEvsZkMr3ZW9+/3el6mM/9Osp7cXHea7Gb\nXjxa6wjw/nDRV/4HYolrXH6IL+R+aY/f9Wv2O/r2MV05tjqWnMf69XDhaPW2kcbbm/6T/g/+3E2x\nMa0JD9KtP8L91kETHayD0vX6fvNQZLLa7
 Q5rrNrQWte/2iHD6FVTa9n9lygbmkEelWNh5hx/6t7l\ncqxMK5xtw7GteJBplzmkfu7bA21rXf8AXVXyMX0HF++cdx2hwBJDv9G+dmy1v/CbEJRlQOkulhIM\nbrUdaK1PUcikxSWBsyazW2DHjotXpXX83EyKbscu/RHd6DD6RI/P91DWV3M/0m+r1Wf+CLFeMbaC\nBY935ziQ37mAWf8AnxWSW0V11MfBLW2Wu4dJ97a+/wCjZ/00zWQIkbiyRlwSEoj1P//SwfrfR0/O\nznZPRi19Q0dW1wZYyPa3Td7/APz4uUusuZYa8uv1HN5bYC14+P0bG/2lZfk13MFrbD6rDBL2yTPi\n7Vz/AOS/d/wX+jRaswWMFN1jWgfR03N0/exshv7v/ca1TY8UYxERI33J4ozRzGc5JcXCK/50a/rf\npMel9Tx6bK8extz8Ox4F+N7bQWHR7qGvDdl35y0sj6pVU5Hqszqa8Ozca9rm2XPb+7i429trn7fz\nMr7N6H+GtVX31sNtD6/TGmRjMYwFo097vtDWZHoWOH+E/mv3/wA9VRj05N/6PEDdxJJFwLABq5/t\n3OZX+c9TVoIyHHr6emn+rlj42qbMjKJ4NPVtL/GjPg9TqD6rS5rMWrIxcxoJ2X2VWB2jXQ77HtyM\nF30/56qyv6CHV0r6ymn0jjjIpstcH4lvuhzB/OWhn807ZZ+jtrtrtQL/AKy5RyAG33X+nDRe6w+4\nj85u5m9v9r9L/pFvdE+st2ZkWszrd9z2FmOXhrCH7YZZ61YqryHfmehk/wA8/wDwidE4LERKQ70Y\nxBP+F6FpjzXDxcEZDfXiMv8AvnNyOiYuNuZYwHVs0+o4NaSN/pCyuu31bd3/AGo9n6L8yz9J6Uun\n9EofmNvE2XUuDnUOcXNkae7MDacfbW3/ALTub+l9P0fWWplvpY7GdnZFdTKgdr2gVesWjbWKKvUv\nx6vT/wAPleyv/A/y
 FiZ/UM2llLIe9z2B9biRcK2GCPSZNtW/f9P/AAv/AAnqKaUcMdTHbXh9J4f3\nfl/9EY4nNL03qdOLWvH+XztvLwOvXXPe5jnWF5NgaydoaJqZZ7dzfYdzP+DS+y5FLA3NoZbDZrZ7\nmvE8Dc1vpPZ/aVavqmYzFBvut9Bo3vuZa4Wtk/oq67NbP0/+iv8A+3lXt6znZFrrK+r5I3cM9R1e\n0ToyXWbP7SRzRjrRJPQyH/Rn8y7HHLE+kxiBoTGP4OtXi2lrcnKd9kw6yYusHpViAf5s++2+z6Xt\npY+5Ueq9Rs6g1mNhNIx8X3UstYHPtn+eve1+/a7/AEPu/R1qlZg5D7Td1F1wft/wzt1zx+ZtqefW\n2/yn+nWpYGRWy1zn76g1kCw1zABGgLXPTJZJTIjIHHE/432pEBZmZe5Mf4rX0e0vFQaWkBzHMkOd\n/JsrDbWf+CKNlBpYPXY5nIZW8b2jzY5pZaxv9RWrOoWWPPpH0yNBDu/7za3ht9bv+3mIWbl2OLWX\nFzmOANlZ+kHR/ONd+9/1ahkI0deKtLrRlBlYFV9dWsbG2jZc9npk67dwIPG5+5pe9N9mfiuNld42\nwJe1ri0tdx6mn0X/APbaBfUK3gB5cw6tdB1aeHtR8Oy136s18Ek+i7uHO02f8Vf9Cyt/sUXEOKiP\nV0LNwmrG3VTy1sPcwQ7VltcFsj936Fn9h1it42dQ+GZG0tMNNjSWWAf9cLqnNZ+5uQsWt2ULGU0y\n8/0ikaNj/uRW+w7aLGP+mz/M/R+ysrOlPoYHtx3Zj3DfW94NdEfvfpfTfdt/7a/4xSQ4/miLj10/\nlxMc+EaSNHpqp/RbLS6yuKw3mxxDaTrG9lzN1ffds/8AA0r2GisXNoLsioNrsstaWhsfzd1VP8tv\n+Fs/7bUmftG9x9S3ZfT9FjQQ0sP+CbWxvo/S+hsVjpmQy9z3ZdtT62ja9zWu3gGfo7qx/K/P9JSC\
 nMCaAMDLrKun/AEZRYzKYFmpiPSPj/wBJ/9PzhjaQyw1Ne4Fjoc4j80tfxH8lDdZQ4j1Q508ERP8A\nBegWdB+qlLS5+M2poB3WC1x0d+jcP0br6mbt3+Ef6ixMn6o9MstI6bmWPJcGsqyK9o3H6LHX1F7t\nrv3/AEWK9PlMwAoRPhFpQ5vESb4o+Mh/3vE4uBawXSHObVQ0uskB36PRhY5ri5lnque2lrXf6T6a\nnZ6bQBUx32O4zFTBvO0jfXd72usfV/o/5r/CqnY51W/FtLaAxxbbUwFx3t3N97ifft/43YjY97cY\nek5vqudBLHu27T+Za2P5rIb+Z/01FGWnCdK6/wDcs0o68Q18P+6TO6djbi+zJFYH5hDi4kdtmz2P\n/eZuXo31UwOgdF6bj53UWusyM1r7KfUYG7Kvo/abGvf/ADdv+C9T8xedUN9a8Y7bbzdaRWG7NzpP\n0GsLLNt3+bWtfqmK0V2Z+bkG6n0210Cp3queQBudtafbUyvf+lsexiZl5Y5fVECMYGyb2l/0Wxy/\nORwxMZSkZTHDQ0uP9WXzf+gIetXdOd1C517TlPsO6l9bw2vbPt9+x9b2bP5ummr0Mf8A4VU8gjMr\nxzk314ocHQydtLawdra2MrL3+1v0PZ/xiA2w1NruocczCe+Lai33Mc4/zVlXv9Pf9Kp1dnp5H/GM\ntrrvZ/o4t9XTqsRublxssNe6fVBdW6nEx2h7P0Nm+v1fTt9Z/wDNfoVJAARNmhQBvX/nQ/nGvmnx\nZAQNSSdPTXf0y/m2obxU30thN2TcS6sgFja2j0ceprGh3qP93/bbKv8ASIxNXT9tLccvzv8AtRbS\nZbS46mrH9Rt9f2qv/tRf/gbf0OPs/nVcDrcWmKbDZ1RgLGYxe0fZ2nTe/wBM11ZOe1vtpqb/AEb/\nAAzPtLGLMtdeWWVP3MuaRvGrQ9x+i10/Qs/8+J50F2f6um3f/DYgeI7Dx1+b
 /wBARvpDzZDbnXWy\n4vvBl0/8MPznf8IguoyaqNrKn1ve6DJIMN/N1/ec5Ds3F7WumAN1g1mf3TKdz/XpY0N/TDca+8sH\nt9P+s3Z+i/zFCTE3pRrSmYA6a2GbH5lMBzw4zO2xzC0HzFhKt/ba7WMqz6qLGNH02uLXDX8309//\nAEFk+m4mB7nHWBrHm4o7XVV7SYte3/MbP/nzj+olHIR3r+seKP2JlAHz/q+mTqsxelvAqLj6utlV\nDyYE/TaH/neo0b6t7/8Az4tjpH1e6nnQ3Gxy5pHsILHN/r/qwH/n1crVZ6jfVDoyKTv3clzZ+l/W\nqd/4F/xa6boX1nf0HI9THBZXYPUpA1AY/mp8/T9N+6v/AK2oOay5BC8Q4dRZh83B5T/Sb3I48XER\nlIloeEZeL2/c8ZQ9XCk63g9YwLotsLG2U2ywNFe21jC65ntbu37wy9n/ABta5O+u136Yl1jnHV7i\nSQf3dxXobP8AGFnZWRtsZXlVP3TjZNTXNJLXbG17Q1/ud7FzuccLqDW5OPg1Vtt1GOHmggz9Or6d\nLmu/1Yjg9/KBx2dzc/m/R/Qh7iuaHL4yeDhidNMesP0v0p+24FeddjuDq5dBBLX+5v8A0vo/1mrS\nyG1swjkUgbMqHWEjxNY/ztrrN/8Awnqp7+k4Vlh3l2M9vNW9ro/zg13/AJNXK+m05FNeOLH10Gto\nJFfvJpdvscGz/hPU3q9jxZPVHQ6ejXaX+E5WTJj9J1Gvq03i/wD/1MGz1G0XOsElhJeWglvDfe7b\n8f0n5ija4iut7J2uaAPTnRzD+a3+p72bFxSS3Tevl9XHHTzei63g5BzD1DGb9oflgWkMA3V2fRvd\ndQC5/qvs/TMf/N/pP3/5vPr6XkWH0sgMpcPzi9u4H901b9+5ZqSzp+z7kr4uGztw8H9ZvY/d9uNc\nN0K/er9F6/Adg9OxnPJhzR6b3B0PA/Ob61f83u/Ppo/
 7cVTN6vmstx7qL95spD3tc0Orduc7cDTa\n0s27WVt2rm0lYycXtj264a09v5mCHBxnj+a9eP5ad6jMc2/7ThYowMpwIe4OPpQfc59VNk/R+l6D\n32e/9IlldR6m6yyuuw4zXxWfSDKxY0ewMttx21WbX/8ACfot/wC4sFJVzxcHXf8ARqv/ABtmHBxf\no7fp/N/446uG25rbP0JaWPb7SIE+6qxj5/rLSzmBtLj6ZfUWg+o7Wdv0tp/kfu/+lFzCSdjr2z5f\n98jJfuDz/wC9dFzHZJc5rotIgEnRw/8ASn/VoV1dePY0PefUrDfYzQtcBu1s/r/uKmkoZcNf176/\ny+Zmjf8Ag02r3mxgfWQyt5h9bRADh+9+9v8Aps3f+i0JrCByD5A6oSSjO+u7INtG1TXaxwtrIbt1\nB5nyI/lK0za5grYQxhJdQ95+i7/CY9rvzd35j/8A0o9ZaSdHhrw6o9d6fRvXX5TCGscWlmjgNCCP\n3h9JaVGfVm02Nc1zcsMLmtA9lhb7nNd+7Y5u7bs+mufST8HHxHhvh/Sv/uf6y3NsL+bpw/jxf1Xa\nx859dJN5AutH6NxEuqZ++XfS2v8AzGf4Ov31rR+rGVl4+XdVDzW1upjeW2EF7LWv/dcxn/npcokp\n8PH7mO73P5eri/l/3DXzcHt5Ntv/AEXhf//Z/+0ljFBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQ\nAAAAAAAAAAAAAAAAAAAAADhCSU0EOgAAAAAAkwAAABAAAAABAAAAAAALcHJpbnRPdXRwdXQAAAAF\nAAAAAENsclNlbnVtAAAAAENsclMAAAAAUkdCQwAAAABJbnRlZW51bQAAAABJbnRlAAAAAENscm0A\nAAAATXBCbGJvb2wBAAAAD3ByaW50U2l4dGVlbkJpdGJvb2wAAAAAC3ByaW50ZXJOYW1lVEVYVAAA\nAAEAAAA4QklNBDsAAAAAAbIAAA
 AQAAAAAQAAAAAAEnByaW50T3V0cHV0T3B0aW9ucwAAABIAAAAA\nQ3B0bmJvb2wAAAAAAENsYnJib29sAAAAAABSZ3NNYm9vbAAAAAAAQ3JuQ2Jvb2wAAAAAAENudENi\nb29sAAAAAABMYmxzYm9vbAAAAAAATmd0dmJvb2wAAAAAAEVtbERib29sAAAAAABJbnRyYm9vbAAA\nAAAAQmNrZ09iamMAAAABAAAAAAAAUkdCQwAAAAMAAAAAUmQgIGRvdWJAb+AAAAAAAAAAAABHcm4g\nZG91YkBv4AAAAAAAAAAAAEJsICBkb3ViQG/gAAAAAAAAAAAAQnJkVFVudEYjUmx0AAAAAAAAAAAA\nAAAAQmxkIFVudEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQFIAAAAAAAAAAAAKdmVjdG9y\nRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAA\nAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAADhCSU0D\n7QAAAAAAEABIAAAAAQACAEgAAAABAAI4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAA\nAAAABAAAAHg4QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0nEAAAAAAA\nCgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAA\nAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP//////\n//////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA////////\n/////////
 ////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQAAAAA\nAAACAAE4QklNBAIAAAAAAAQAAAAAOEJJTQQwAAAAAAACAQE4QklNBC0AAAAAAAYAAQAAAAI4QklN\nBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADSQAAAAYA\nAAAAAAAAAAAAAXMAAAKgAAAACgBVAG4AdABpAHQAbABlAGQALQAxAAAAAQAAAAAAAAAAAAAAAAAA\nAAAAAAABAAAAAAAAAAAAAAKgAAABcwAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA\nABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABU\nb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABcwAAAABSZ2h0bG9uZwAA\nAqAAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9u\nZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAA\nDWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5k\nc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAA\nAABCdG9tbG9uZwAAAXMAAAAAUmdodGxvbmcAAAKgAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRF\nWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZW
 xsVGV4\ndElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VT\nbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFs\naWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAA\nAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRv\nbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/w\nAAAAAAAAOEJJTQQUAAAAAAAEAAAAAjhCSU0EDAAAAAAdRQAAAAEAAACgAAAAWAAAAeAAAKUAAAAd\nKQAYAAH/2P/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsR\nFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0Q\nDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM\n/8AAEQgAWACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkK\nCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEF\nQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKz\nhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h
 5ent8fX5/cRAAICAQIEBAME\nBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcm\nNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eH\nl6e3x//aAAwDAQACEQMRAD8A8+yL677Bjsa4VU+1pr5cZ997qHex2/8AkvqVmrEDunZFjr2Oqqur\nbVZqNjnh+/1G7fUZQ7+bf/w3p2s/PR+o9Lz+kVMuusdmY1h9mVSG2UknX0vXs3Pqs/kW1/8AFb0O\njM9YNu2FhYSygXuL91h/wTXN9KnZs/nv0P8AwX+EVwRHERI1OvlP8v0WrxXEGGsL+Yfi6n1b+qNu\ndU578dz6GkObbYfTZPZ9su2V4j/of4Sy/wDwXpLQ+tXSOidDbVl0Xs6hmOALNAcdriZda9u57MjZ\n7fRxv5j/AE3s/QrAOX1nIoi8bq2GHAlpx/3dwZLfsX/W/wBH/wAUhWU+ptPUdlTK2D1Qx732j6Xp\nsrbvuZ6j2t9m5VZ8vmMwYnhiP3gYxr+t+jxf3nRx83y8cUoyjxEg7cMpX/e+fh/2f/VHP9PJ6hkv\nfY51j3AudY4+0azue7/BsRsu+uPtNW71AQL9hibOPVtd9JzLo3Naz9H/ADnvVhl7La/s2JS19Fmj\naCSywfvW2tZ77/67LX/9bUR07Ira66k1uraD6raSCA3u17bW73s/66rAgRHT1dZS31aEpgy19P7s\nfBosyxbIbtxbXab2NAYf65hz6/625W+k5WS3Os6dkOc6vPY7FtredwBcZoewas3svbW6t6rkV2GW\nFjmNGrbWw5o8fUq3OsZ/L/z1ZxaDe0Vh4FteuPaTIkcUG5m5vu/wPqemm2QQbutfCX9X/CZBAT9O\nwP8AzfH/AAXO22Y73V3s3ODi19TuxB2O/lMf
 7UW+trqzbS42AfSB+nWB/pGt+kz/AIdns/4pdD9b\n+gHBycfMqE09Rory2gCNrntHrV/9ublzM2UvFlbi17T7SNCFBDNGVgai6/rNjLy04Ue4v+qUYrLQ\nCSId2lELQGyHNDDoDrz3Uox8ru3HyI+Fdh/6nHf/AOAf8Qp112Ue8si9mlbXabf+HP8A6K/z/wDB\nqQD7O7AT337Mr7NlDGma3NeQA0agDbE/y91aLVjV5YL2AG0iLGAR/wChDG/+fa0G5jWUVusJBcBH\nftvc7/PuR6qMmusCtjqrLoDCdH7eXP8A3m7voMTrAJMvlA1WxgZUIfMTo3cetwz2VUVB9bQC+x2j\nWNI29/5KNlYFLb6rWPDgAfc7RrgP39v57VY6b0rqTG2WZ9fpYEB92Y7QV/ubv9I6z6Laq/0j0LO6\nsy+jKq6QQPQaLG3Fv6Z1YivJZW1381Tsd6/s9/6L9IpsOXBkxmQPFqTED+r+7+8s5jl8+HJwyiYm\ngDekfV++hf0NptORfdXTV/g6LPa6I3fzbvd/nIb8zpWPXNFbr36tftbtAP8AJts3PZ/Yas3EzH7y\nbALHO/Odq6f3nOSNFlgL2PLGEk+72Nn+S523d/ZQOSNfq4Cz39Ulvtm6nIkDt6Ypm9YbUf1WivHI\nduFhm2wT/wAJb/5FA+1W+u251jrTIIJ4Gu72fu+5RdTc0x6lTncwXt/79tU62vYSL2+m0CZI0I/k\nOHtUfFM6GwB4cMf+9ZOGI1Gv1uX/AHz/AP/Q5Tp+bfhdQNFDt+Na4NdU8B9dlbiN1N1T5rtb+Yl9\nYei04edQ2uxuLhWVCzFYSS5u91nrV/n3Xena3+d/0foq5iYWFTe1vrnLvYQ5lTKHtqY8wd5teTZb\nWzd7WVM+mq31nysPL6kxl15NePWzGZ6bdzy6ou9d3q2PpZ7rbH/yFp5Yj27IF8VCzXp/d/uubCRO\nb02Bwni0/wAU/wB5yrc
 /ErtF1Hvyg0NdkWNhriNN9dbC51Vm3/WtTr6jk10NfXY5jQTuLX7AS76X\ns9rfcosxeie5nqZFV4gtN7Q2l2vua5+P9otr9v0H7LP+tqX2BmVWa6wxkRse29trASf8I2WWVb/9\na1XByEmqvX0w/a2CMdCwfOf7GVGRg5FzXiaskNg2D3F39lv538v1N607KMT0baKrWnMsbNo8h+83\n9/8A8+f8YsNmBkY9pY7HvfYzuGnaD/J27t3tVlvSC8NfYy0thpLnVlsal7/e76Wytjv7akhOfCYm\nAJOh/R/lJbMR6TqOhH6X8otW3Cdj2OBvre6r6fpl7XVu/wBGfVrZ/nfzX/CKz07GnIrscfQfIhzS\nNjp/lsOyh/8AX/RP/wCCTMz8k+y5hlsltpbuewk7thkOd6as/YnmoZEso3fzdm4sZaZ1Yxz9/p2/\n29n/ABagnhE4nhvby4Wzgz+3IGVb+fE+kk9Mz/q2K7nl2fgsdFThHtmYdW4ek7a1eddV+r2RWW5L\nsd+NjWFw9dw2tLgRuZTjndfb6e737G+/9J+4rGH1HMbfXiZRsqJikWD81p09LLriux1Tf33s/Rfy\n6lW64d/Ucm6x9hvLx7gXBhaGtb+lDHOv/M2+p9BV+X5Iwuc5cW0K+T5dpzv9Nu81z8cg9vGOEEyy\n6+vh498eLh4f1fF6nOpq6I2zZZ9otaP5zIY5lZYP324ljLPV2/ufaP0v/BqfUS/CvOLfGTjPa1+J\nazQmp38zbjv9zms/0mO/ez1vU/wqDk5mdG0trfXyWFu+QPzv0+65zW/1lp9KnqeIMWzF9O7FJtwD\nXvAe4/pLMT3+vt9X+ep/m6vUVqIs8EdD/d08v0uL/CcyZI9ctY9fV/zv0eFp5NIOTQ3HLbW4VMbZ\nAO8Tb7mE+/8ASWN/fVn6vY9Z6gcnqdr8XDxh6+Vbtmxwnayqhr/5zJybXbGfufpL/wCbpeh19Lyn\nMy
 LL22V22kMHqV7LPcd9n6K1zf8AO9VXX9NzMTCrxBi2ZFYd9ozi8gMBINePW6zcfTtopc+2yqv+\nbfk/ziWXAcg2MRLXv/U4aX4OaGGYIIkYn6/vcTf+sX15d1ikYNdBqopG3GoZ7obG0b3aufZs/PXJ\nY9jsPKrue4M2E7gDLy1w2WAbPou2O/PVi+uut+y7NojkNpZubBEtLnNr2f8AnxB9fGaNtb2tDT9M\nUNcT/ascoMWCOI6HUG943Y/wmxn5qWYAcPpqgAJVR/wU+yLHuxmhlrebCABY0Dc2/H3fo2b2/pLa\n/wDtr+RUsFJdvvuL3P8ApbAXH+tufsarlVr72i2q95dRobHVtaAD9HdZu21bf6yaw22kA9QDbNRD\nHua1xPJ/S/Z6at39fZ/xanlEEaeY2r/p/M1Ykg6+R3/71pvfihwZ6L37NAXuiR/Vrb/39GY/Joeb\nKK249ZPLhtkH839ObLH/ANhNa/KqO205IB+i51hDT/V0c3b/AG0bpWIMrPqrZUbLSdwl/wC6C/mP\n5KilIRNk8Nda4OFmhjlk0iOK+nzcT//RysnqF+BRvba2/Lxmj1an2bSJ3NryQXtb6jW2Prr9R/pP\n/wAJs965G6rMD2nKoFbYioWfo4A/0T7D+kb7v5a2LrMirMsfTY0sexzHWhs2NaXmzdW/bY+mz9Gz\n0rP8F/g1Uod028uqtuDarzDnWhzXB3+lFmz0vXb/AKX9B6v/AGorWhmn7kq4qA0iCY1/6E0sWM4g\nTw3esiAbarsdr6w++4AN+iQST/0Wu9qA1uNua45fplvAbW8kfftRc7puVg27cmwNJ1qtG4se0/Qf\nVYxpa5rkCqqq4w6yvdHI3NOv8lzGsVeV3XCBLxOv/SZo1V8RMfAaN7EODeTU+xzy1ji2wUiBt3Wm\npzfV9zLdv5jfZd/131Fbm1OpOLbXYypxLm3se1z9r9kxW5rarKv0bf0ddlH+jtu
 VJlOfivF2P79u\nospIeARrPs3bdsfnKyG131XXRtbWG230NADQCW1etjO/wT/Ud/Rv9a1xGqI4T+YUYi7viHTwk1cj\nCsxYukXY7zFWQydjo+kw/nV3N/Pos/SKu0PfZAjx14A8f6qu4+Tfheo9pa+i72uY4bqrQDIbZU7/\nAEf/AG7UiWYmLk078MfZrrBudjPduaWDvRa73tq3fm3/APGer6VfqpvBe3mY/wDerxMjfy4v4oqM\n5zXV1yXVBzWlx+lAPdv51bf8Ez6df+DtrXRZf1bzepuDnuGOanD0bbJ3ux3jeN2O0er6zHO3+/0/\np2b1H6s4mL0jD/bOeP1u2fsVZHurYJ35O3/S2bf0H+jr/Tf4SqxaNn1ofXXX+hYXuAsD9ZAf7w0e\n73/1nq5y+ISxn3T6ZURHrXQtXLLJLIfYH83pKcvlsoL+j9T6cf8AJuZj4rYjfe97n9vc7dQ6j1X/\nAOk/7Z9NVWZvUGttxsoYxtvYWfb8As9f05a67azH/Ren7P026vHt/wCER78izLDHBzn+qILZlwfI\n97QP3t2xWMKjIwcfJ6g+sixlBrq3QN19p9Kjc+wsa1rP5yz1H/QqUs8URZBlwxF1fo8uFhJlE8Mx\nEzsa/pa/L62o/wCsIoFdnp/tC8EuGS292PVZYePtOKz9Dc7a3/BXVPsVR/1j6nc45mdZlUVOJIbV\nlPoYT+czEx6q3Mbx/wAXv/nrlmYuLdVW91gbeCAG4jHtfvI/Pt9JzvSrr2/verY/066/36xOe595\nhznPH0WO9tjR/o/0ezdXt+iyr6H+gVOWSR11jf6JF/8AT9TZjhxjShKv0r/730xdJt2DnfpaLLft\nu5zpyHl9rXPEvsZkMr3ZW9+/3el6mM/9Osp7cXHea7GbXjxa6wjw/nDRV/4HYolrXH6IL+R+aY/f\n9Wv2O/r2MV05tjqWnMf69XDhaPW2kcbbm/6T/g/+3E2xMa
 0JD9KtP8L91kETHayD0vX6fvNQZLLa\n7Q5rrNrQWte/2iHD6FVTa9n9lygbmkEelWNh5hx/6t7lcqxMK5xtw7GteJBplzmkfu7bA21rXf8A\nXVXyMX0HF++cdx2hwBJDv9G+dmy1v/CbEJRlQOkulhIMbrUdaK1PUcikxSWBsyazW2DHjotXpXX8\n3EyKbscu/RHd6DD6RI/P91DWV3M/0m+r1Wf+CLFeMbaCBY935ziQ37mAWf8AnxWSW0V11MfBLW2W\nu4dJ97a+/wCjZ/00zWQIkbiyRlwSEoj1P//SwfrfR0/OznZPRi19Q0dW1wZYyPa3Td7/APz4uUus\nuZYa8uv1HN5bYC14+P0bG/2lZfk13MFrbD6rDBL2yTPi7Vz/AOS/d/wX+jRaswWMFN1jWgfR03N0\n/exshv7v/ca1TY8UYxERI33J4ozRzGc5JcXCK/50a/rfpMel9Tx6bK8extz8Ox4F+N7bQWHR7qGv\nDdl35y0sj6pVU5Hqszqa8Ozca9rm2XPb+7i429trn7fzMr7N6H+GtVX31sNtD6/TGmRjMYwFo097\nvtDWZHoWOH+E/mv3/wA9VRj05N/6PEDdxJJFwLABq5/t3OZX+c9TVoIyHHr6emn+rlj42qbMjKJ4\nNPVtL/GjPg9TqD6rS5rMWrIxcxoJ2X2VWB2jXQ77HtyMF30/56qyv6CHV0r6ymn0jjjIpstcH4lv\nuhzB/OWhn807ZZ+jtrtrtQL/AKy5RyAG33X+nDRe6w+4j85u5m9v9r9L/pFvdE+st2ZkWszrd9z2\nFmOXhrCH7YZZ61YqryHfmehk/wA8/wDwidE4LERKQ70YxBP+F6FpjzXDxcEZDfXiMv8AvnNyOiYu\nNuZYwHVs0+o4NaSN/pCyuu31bd3/AGo9n6L8yz9J6Uun9EofmNvE2XUuDnUOcXNkae7MDacfbW3/\nALTub+l9P0fWWplvpY7GdnZFdTKgd
 r2gVesWjbWKKvUvx6vT/wAPleyv/A/yFiZ/UM2llLIe9z2B\n9biRcK2GCPSZNtW/f9P/AAv/AAnqKaUcMdTHbXh9J4f3fl/9EY4nNL03qdOLWvH+XztvLwOvXXPe\n5jnWF5NgaydoaJqZZ7dzfYdzP+DS+y5FLA3NoZbDZrZ7mvE8Dc1vpPZ/aVavqmYzFBvut9Bo3vuZ\na4Wtk/oq67NbP0/+iv8A+3lXt6znZFrrK+r5I3cM9R1e0ToyXWbP7SRzRjrRJPQyH/Rn8y7HHLE+\nkxiBoTGP4OtXi2lrcnKd9kw6yYusHpViAf5s++2+z6XtpY+5Ueq9Rs6g1mNhNIx8X3UstYHPtn+e\nve1+/a7/AEPu/R1qlZg5D7Td1F1wft/wzt1zx+ZtqefW2/yn+nWpYGRWy1zn76g1kCw1zABGgLXP\nTJZJTIjIHHE/432pEBZmZe5Mf4rX0e0vFQaWkBzHMkOd/JsrDbWf+CKNlBpYPXY5nIZW8b2jzY5p\nZaxv9RWrOoWWPPpH0yNBDu/7za3ht9bv+3mIWbl2OLWXFzmOANlZ+kHR/ONd+9/1ahkI0deKtLrR\nlBlYFV9dWsbG2jZc9npk67dwIPG5+5pe9N9mfiuNld42wJe1ri0tdx6mn0X/APbaBfUK3gB5cw6t\ndB1aeHtR8Oy136s18Ek+i7uHO02f8Vf9Cyt/sUXEOKiPV0LNwmrG3VTy1sPcwQ7VltcFsj936Fn9\nh1it42dQ+GZG0tMNNjSWWAf9cLqnNZ+5uQsWt2ULGU0y8/0ikaNj/uRW+w7aLGP+mz/M/R+ysrOl\nPoYHtx3Zj3DfW94NdEfvfpfTfdt/7a/4xSQ4/miLj10/lxMc+EaSNHpqp/RbLS6yuKw3mxxDaTrG\n9lzN1ffds/8AA0r2GisXNoLsioNrsstaWhsfzd1VP8tv+Fs/7bUmftG9x9S3ZfT9FjQQ0sP+CbWx\nvo/S+hsVjpmQ
 y9z3ZdtT62ja9zWu3gGfo7qx/K/P9JSCMCaAMDLrKun/AEZRYzKYFmpiPSPj/wBJ\n/9PzhjaQyw1Ne4Fjoc4j80tfxH8lDdZQ4j1Q508ERP8ABegWdB+qlLS5+M2poB3WC1x0d+jcP0br\n6mbt3+Ef6ixMn6o9MstI6bmWPJcGsqyK9o3H6LHX1F7trv3/AEWK9PlMwAoRPhFpQ5vESb4o+Mh/\n3vE4uBawXSHObVQ0uskB36PRhY5ri5lnque2lrXf6T6anZ6bQBUx32O4zFTBvO0jfXd72usfV/o/\n5r/CqnY51W/FtLaAxxbbUwFx3t3N97ifft/43YjY97cYek5vqudBLHu27T+Za2P5rIb+Z/01FGWn\nCdK6/wDcs0o68Q18P+6TO6djbi+zJFYH5hDi4kdtmz2P/eZuXo31UwOgdF6bj53UWusyM1r7KfUY\nG7Kvo/abGvf/ADdv+C9T8xedUN9a8Y7bbzdaRWG7NzpP0GsLLNt3+bWtfqmK0V2Z+bkG6n0210Cp\n3queQBudtafbUyvf+lsexiZl5Y5fVECMYGyb2l/0Wxy/ORwxMZSkZTHDQ0uP9WXzf+gIetXdOd1C\n517TlPsO6l9bw2vbPt9+x9b2bP5ummr0Mf8A4VU8gjMrxzk314ocHQydtLawdra2MrL3+1v0PZ/x\niA2w1NruocczCe+Lai33Mc4/zVlXv9Pf9Kp1dnp5H/GMtrrvZ/o4t9XTqsRublxssNe6fVBdW6nE\nx2h7P0Nm+v1fTt9Z/wDNfoVJAARNmhQBvX/nQ/nGvmnxZAQNSSdPTXf0y/m2obxU30thN2TcS6sg\nFja2j0ceprGh3qP93/bbKv8ASIxNXT9tLccvzv8AtRbSZbS46mrH9Rt9f2qv/tRf/gbf0OPs/nVc\nDrcWmKbDZ1RgLGYxe0fZ2nTe/wBM11ZOe1vtpqb/AEb/AAzPtLGLMtdeWWVP3MuaRvGrQ9x+i
 10/\nQs/8+J50F2f6um3f/DYgeI7Dx1+b/wBARvpDzZDbnXWy4vvBl0/8MPznf8IguoyaqNrKn1ve6DJI\nMN/N1/ec5Ds3F7WumAN1g1mf3TKdz/XpY0N/TDca+8sHt9P+s3Z+i/zFCTE3pRrSmYA6a2GbH5lM\nBzw4zO2xzC0HzFhKt/ba7WMqz6qLGNH02uLXDX8309//AEFk+m4mB7nHWBrHm4o7XVV7SYte3/Mb\nP/nzj+olHIR3r+seKP2JlAHz/q+mTqsxelvAqLj6utlVDyYE/TaH/neo0b6t7/8Az4tjpH1e6nnQ\n3Gxy5pHsILHN/r/qwH/n1crVZ6jfVDoyKTv3clzZ+l/Wqd/4F/xa6boX1nf0HI9THBZXYPUpA1AY\n/mp8/T9N+6v/AK2oOay5BC8Q4dRZh83B5T/Sb3I48XERlIloeEZeL2/c8ZQ9XCk63g9YwLotsLG2\nU2ywNFe21jC65ntbu37wy9n/ABta5O+u136Yl1jnHV7iSQf3dxXobP8AGFnZWRtsZXlVP3TjZNTX\nNJLXbG17Q1/ud7FzuccLqDW5OPg1Vtt1GOHmggz9Or6dLmu/1Yjg9/KBx2dzc/m/R/Qh7iuaHL4y\neDhidNMesP0v0p+24FeddjuDq5dBBLX+5v8A0vo/1mrSyG1swjkUgbMqHWEjxNY/ztrrN/8Awnqp\n7+k4Vlh3l2M9vNW9ro/zg13/AJNXK+m05FNeOLH10GtoJFfvJpdvscGz/hPU3q9jxZPVHQ6ejXaX\n+E5WTJj9J1Gvq03i/wD/1MGz1G0XOsElhJeWglvDfe7b8f0n5ija4iut7J2uaAPTnRzD+a3+p72b\nFxSS3Tevl9XHHTzei63g5BzD1DGb9oflgWkMA3V2fRvddQC5/qvs/TMf/N/pP3/5vPr6XkWH0sgM\npcPzi9u4H901b9+5ZqSzp+z7kr4uGztw8H9ZvY/d9uNcN0K/er9F6/Ad
 g9OxnPJhzR6b3B0PA/Ob\n61f83u/Ppo/7cVTN6vmstx7qL95spD3tc0Orduc7cDTa0s27WVt2rm0lYycXtj264a09v5mCHBxn\nj+a9eP5ad6jMc2/7ThYowMpwIe4OPpQfc59VNk/R+l6D32e/9IlldR6m6yyuuw4zXxWfSDKxY0ew\nMttx21WbX/8ACfot/wC4sFJVzxcHXf8ARqv/ABtmHBxfo7fp/N/446uG25rbP0JaWPb7SIE+6qxj\n5/rLSzmBtLj6ZfUWg+o7Wdv0tp/kfu/+lFzCSdjr2z5f98jJfuDz/wC9dFzHZJc5rotIgEnRw/8A\nSn/VoV1dePY0PefUrDfYzQtcBu1s/r/uKmkoZcNf176/y+Zmjf8Ag02r3mxgfWQyt5h9bRADh+9+\n9v8Aps3f+i0JrCByD5A6oSSjO+u7INtG1TXaxwtrIbt1B5nyI/lK0za5grYQxhJdQ95+i7/CY9rv\nzd35j/8A0o9ZaSdHhrw6o9d6fRvXX5TCGscWlmjgNCCP3h9JaVGfVm02Nc1zcsMLmtA9lhb7nNd+\n7Y5u7bs+mufST8HHxHhvh/Sv/uf6y3NsL+bpw/jxf1Xax859dJN5AutH6NxEuqZ++XfS2v8AzGf4\nOv31rR+rGVl4+XdVDzW1upjeW2EF7LWv/dcxn/npcokp8PH7mO73P5eri/l/3DXzcHt5Ntv/AEXh\nf//ZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAA\nABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMANQAAAAEAOEJJTQQGAAAAAAAH\nAAgBAQABAQD/4Q3QaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49\nIu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN
 6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9\nImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3\nNzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0\ncDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRp\nb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIg\neG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0\nPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5z\nOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJo\ndHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2Jl\nIFBob3Rvc2hvcCBDUzUgV2luZG93cyIgeG1wOkNyZWF0ZURhdGU9IjIwMTUtMDctMjRUMTA6NTk6\nNTEtMDc6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTUtMDctMjRUMTA6NTk6NTEtMDc6MDAiIHht\ncDpNb2RpZnlEYXRlPSIyMDE1LTA3LTI0VDEwOjU5OjUxLTA3OjAwIiB4bXBNTTpJbnN0YW5jZUlE\nPSJ4bXAuaWlkOkNGOUFCN0JCMkQzMkU1MTFCRDhBRUEwQ0JEMDMzOTFDIiB4bXBNTTpEb2N1bWVu\ndElEPSJ4bXAuZGlkOkNFOU
 FCN0JCMkQzMkU1MTFCRDhBRUEwQ0JEMDMzOTFDIiB4bXBNTTpPcmln\naW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Q0U5QUI3QkIyRDMyRTUxMUJEOEFFQTBDQkQwMzM5MUMi\nIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9w\nOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2Vx\nPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlp\nZDpDRTlBQjdCQjJEMzJFNTExQkQ4QUVBMENCRDAzMzkxQyIgc3RFdnQ6d2hlbj0iMjAxNS0wNy0y\nNFQxMDo1OTo1MS0wNzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENT\nNSBXaW5kb3dzIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJ\nRD0ieG1wLmlpZDpDRjlBQjdCQjJEMzJFNTExQkQ4QUVBMENCRDAzMzkxQyIgc3RFdnQ6d2hlbj0i\nMjAxNS0wNy0yNFQxMDo1OTo1MS0wNzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhv\ndG9zaG9wIENTNSBXaW5kb3dzIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBN\nTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgI
 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
 AgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
 CAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNr\nZXQgZW5kPSJ3Ij8+/+IMWElDQ19QUk9GSUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84A\nAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1IUCAg\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAA\nAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAA
 AAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAA\nAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmll\ndwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgM\nZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0\ndC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAA\nAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVog\nAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9k\nZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3\ndy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVz\nYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAA\nAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlv\nbiBpbiBJRUM2MTk
 2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24g\naW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8u\nABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAA\nAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAe\nACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkA\nrgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFM\nAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYC\nLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNP\nA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYE\nxATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7\nBowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIII\nlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3Arz\nCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakN
 \nww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDX\nEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkU\nahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhA\nGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHsc\noxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFI\nIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcm\nhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwF\nLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIy\nKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiM\nOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/\noj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bw\nRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdP\nAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV
 1VcJWD1ZcVqlW91dE\nV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVg\nV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2ma\nafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11z\nuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4B\nfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6J\nM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSK\nlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg\n2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1E\nrbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6\ntbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9\nyLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW\n2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE\n5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7i
 jutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1\nUPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf///+4AIUFkb2JlAGRAAAAAAQMA\nEAMCAwYAAAAAAAAAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAQEBAQICAQICAwMDAwMDAwMDAwMD\nAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//CABEIAXMCoAMBEQACEQEDEQH/\nxAEQAAACAwADAQEBAQAAAAAAAAAHCAUGCQMECgIAAQsBAAIDAQEBAQEBAAAAAAAAAAYHBAUIAwIB\nCQAKEAABBQEBAAEEAgECBQQCAAcFAgMEBgcBCAAREhMJFBUWIRcQMSIyIzM1GAo0NkEkQiY3OBkR\nAAEEAgAFAgQFAQUFBQUCDwECAwQFEQYAIRITBzEUQVEiFWEyIxYIcYGRQjMkobFSJRfBYkM0NRDw\n0UQm4XKCUwmiY4NkRTYYIJKjVDcSAAEDAgQEAwQHBQUFBwICCwERAgMABCExEgVBUWEGcSITgZEy\nFPChscFCUiPRYjMVB+HxcoJDEJJTJBaistJjczQlwoNEIJM1oyYXs8NUZKRG/9oADAMBAQIRAxEA\nAADyEaASD76kz5mxkvSYODyu021QeSOuYhhg6aJVkABetPjqTFujSsDKrcz7GtUUvs9Ww28WmHA9\nF28/z5QfxNyhy+5qN0pu76460aVztnmlXEQCStvRWLyUqOu6yYJcvqO0eo9Z5SeGR4NUeq9K2wcY\neGr85v016MbqRbiFZ7WBU4nI3EY0Naa7pkC1i43eoUNz1eHu5kFFw/OnVje7teVMzZV/168xUCc3\nDHAPmZ4DIUZnNkgauKdiDgYur
 taVMJFlOc51PxQe1p7w3jbinFa0NVgETdUgs2b1igHWnRxtWXC2\nrw9sdtXGMyD5j1zNt8Nn+eNr0MFSer5n6INFTTbLEtHX+kcqs36AUNKuGBopLuM1dWU3oITz3UZA\nuhVxUkthDS1Sjt9rNRZhygznpSvh7O79EX6lMAUfiiZh+wn+p5rze8c4rTm1f7T/AIR441AvnMBX\ngi50tkKF7ZLGh1L0Zn6nU8xFFS3LWSRrJYVd+u69Z1OwlvXxj3+8fh4/3X+9/Ux+geBsIMk68TRT\nsaftK03F4wzjADF4BiSI++uhykBYJL4+DO7XTjIT4Vtt6612dTH8O8FGl/Pv4QLaoJ9/SHwwHUZU\nbQi66Q/WjkcnCPbDAmgdUq6W3bgVlIGbu8ltA1jIXoiWB1JUnXPtetVpzIMYI0CMf886Kh+UprGy\nsWVZi2MUipstT37lpEmzKmj5/UbCF6qqcaiurU6CwmVUiJZlQgGWAORJuHmqMlcdak7fzwyc+paZ\npq5MxA53H1xlXOtA6Nri3a0UBON/ppPsnn7ab3/mZtH0wfoX+MmXyz2F4m+7jxC0jhAalywrl4CE\n4qWBaPV5YC6sa1nrlIkA6VAVbFqFJcffn+bBxLC+EtKpKZasFD/uvxk6MPBSGw+GMiMk6ZtRKOc/\nThxcfOjz7SAaFyNQlmwoaBOjocmzTYHS9dex85Ekho/rh6qEKZY/HyyX1PWYti7LfWqHJZnWSRDI\nU2ueTSaNXJYMMpE42cDYOSxOtlTFYzNpNW5a0R0MiQILHSmgRlGLy/NrHCgoHkxklVJZawOOpfRp\nDANAgIdZj5w0Ov60PguKkPfkcO5Ji2awr5ydDq1PY0ypt7xZ1trsoi6AZmS74fsVnBKBSNmj3D9E\n+8cOeZj82/0uL3phOICOn0m5K1Po8mT90NEZw6i9tfORhX9a/LhsHK+euqsB9U9UfKTLg1NlHPfo\ndCIVnl6g
 0LL2YY4PnNnZ38PDpydPn77/ABYMBx7X8kkCzu9xsIk5JkTfUV+g2L/NhgbdFW5RKl4i\nS1rRzFyOtmcg0N66JQpmRfZdUSZlPQedpV+Mrt9uBJuqCa/vAio78vFw/apsao1d2qaxN5axrjSR\nC7KMcBdTRqRiRq/7Pj0gKGdzgM5aaVafzxWiIysMz0oa0t7kL0f3W2TKvhQMtcCSZrxkIQj3WgyC\ndt17xAaKllMq58bwlfHn+5Onz++v4gEA78cJEVClyX365zqVkfIic/rkYC8Tm5kY3sIHGYiV0pPu\n1kOxxtLOMGoy3p/K9bMhCcmbPa7+tM+LgDz6fWSQObKjkLlzqdsDG7LGyfy6zk/1ZBGBNWcV0m4t\najDnAACNLb84roDlnX7czKTDjaNxdpbn3RUuPMX0Ga0zbj/knV6vD9lVbQVtJGFUSs7962HZ8hHn\nxbKoSBMMkKDZF1+XTj8+u/ZQy6YiNKH7m539c0bDEKEO24+oL4ICd5dbmn5vfIqEdU/jhWVoLagR\ngB9NQvbiaNRlOnTzWYlBvMEoEwXgTb8JTtQNZUk21qzXSuT14hKyxU9UssuzKcaRrD56f0Nz7xHH\nv2OnL58/3B19ke2pZGXG6vGQFgA4vJRRHthr7luIx8NxQqEInI++tr8XMKAM7ohLQW9Qt86k9Lww\n7EkWFSuIqRV4tEBz/Ubw6Dz0O/NEYCldCQeKAwMmi1qlkgYALy8cCJGvRwDLo7LZsL2+5rByJl9T\nFzrRbQaoTfI2y9JrK0ZELY+JIh/CUtA/4TA1Pi8IqVT9qZQ9WbTug7U3Rh21TRQsn98/pi5gFEoF\nK5WWL0t5eZ6pNqtw0V5XYs0PBxH1/fMqXcEu2Em++/qXJp7FQupGiZK80q0EgoQhgNkyl9Klasu6\n/pPKfhnfgGATYwFYow7FBWFPgsHhpWk6UbFQp7ri59uH58lJMeXnRuf+i9/14k58SQlcb
 YRU1wtK\n5tjEIljkfCYeY0MSJIqgtL0dCHdmRGUOgzG3E2wfmmJtCXkthcFm4eCzcsmguAwslbxzpXZbc+MU\n0UR7n4jGh0avrGcPXT8yrVJ5QvrxYSOiKl1ChpHBO0o2h+GFdk/rVizesKk6UzXssjsBfod7iwO7\n8N/MlQF55roRutoyyGK7IpurYDlRj8P7PHj8w183DRW+a+eHn+mwZ+fAcNtrZJky1+vw9t62FmVD\nISXVYH/H6lRAqclO361wVYMUAtScHSzoVty+Lrzx6Bd3fnmYdEozzz5f0lLc6PBbGeq43h0lu0Yn\nlo0wh4FQPCT8wevHDlDOluKRSXPzz9cXv1S6W14P73P2ECx2UQzkwmaz0L90u0/zVyly5pby3IzY\n62DRdS6aylPfzXbZmXqVRy7aUD43BzKKpby3d5BwJ6G3F9COQwmLRcIY15M0dSa77oVoVH1ilu7x\nfjbcO5Q3vtB/lDZpUhnChSxaVJr7lsG0vYWovp2HdfoJXQAZm6ZlMJs0NqX3wIgc8Y+If1i87Gws\njBNnoocmS4jrsVqtgP1CJV9WbRwnShuF5U6Z6UQ6mrE8rsGbb5tZT6yziI/tzHKr6vXzlATjQqI4\nYm/1PfZ6Ayu5j1GzyG1e7+M/0Lt9KStT+pP5A2Te35v4M5ebSxkoxoDp3L6GodrIYk2rIS45AJBw\nokg7ZJkMfjpEfyQWNZ4EQlpzj/P9RqC/7Xn7G8O4zECoGBJgyxWDdyVwf/Y2adW3Kk9EVnT+ajIG\n08iwxvNSyQSjVV2EhG80n1fm9dUa37Rb1hCsqYvNUCqw9dmlghM6KWIbCy1VwY7TtYsaS6+NuN0Y\n3WQXNhlSX2hjRTi3Z7cGUKB0Bz9o9WrCJkTmlBSta9KBWYw5XFdTuRa5VDY9pSvps+ccbX8wo5qP\nOZr5jz/feURqYLSIIwWBmU9V80MbIH+e0oyAQ0TsvFOsweCCKIdt
 RHPqPKIg1M07n3PlDuZSFGzX\nvboUYuNuMgNyFVUvPX/8xv2e9QNfm3UfY2BsRKDXvjZduZcnjFTQ5esO7eg/o9/QT8+fPDiDZ4JC\nyotlwkxrEAGFPAwHCprURuzCoaW9Lz8JV9TB4UJKfV23b9+ScT0RhMhsgXVDdbCrm2ICS9vVseyA\n3dcqRiE5I0UkTHusL8V63sF1Utc1Vy3LhWKQo9qaRapzuIlqbDoOIiP/AEcX+bC4ktFfrOsDgWVj\nv1JPTOpSacE/Y+xWU7IdE8nPHP8AVraH8e1k/U6FFjEqkkawQSsUJx7MYtnNtLmXfHrGZmf9JCPL\nGAP58frQgrVucadwfm1na0s1LV3ouW8CKT4pvuyGywdLmOmRWzYAMOa+ToS8FCmqiZioKxlegPfu\nI/Np+bP6BSUvi+ztXCxorQ8yMsRnkxpf0k4X/T33D70/C9Mc4aj8luX/ANWsNP0+/GvLwxU8aWLa\ngcqPZHbOMgyvjpWVsdm8xD5y+og0HEwbDy2vRZsp7i06ttS+Sj1kk14+q784FAsQL+up/GZcJtXe\nbwdbrR47nUj7IzFYw4rjVfpBbWYPPFiDcORKifV7IR+/lo1pBpNEA0NJ8x8oaWootfMqahc/Or6v\n6k9+1r2hYACZWcBx9hwg+Dev5Y9n1aGPYIHWWUuNtM5rIp4h4dJZr3JNtn0jKwvnIZC3ZLw+smbU\n2K/Pn9bPQvR5x9Wn7BfgyjmYdP8AkO/Mf/QTjJv/AAuse3fy/Q8lCiKbrI1tlQtI3UwTiAHdiaA5\nyKJy4uZ80VV6q5eZ6JkmmdCyjJW/nu/PHczONxfV8JPK8Hsu0g7aejPGxP8ATKu814C5w/RbMARb\nKy7F/PrMd3ZhR2cNw1qF0HxROU8ki0rLAetw9qmtzyq1MmuQ+/L/AHTn+SjGeBRdJBuNg2Hx35Dq\njt4EPIB2N3AWqL+OjzbJ0478fqdm/M3L/rv
 zK96XSpt0dT5WYnCLP819y/ul84wNVcZx55e4RADo\nwlA7AQ5d+s6M4EQoO+c0XUJR3OvyyyYTSu1NsK5Vi6zFBbn6gBsOIejTWVQWxf0QwgzyXjhp1GdU\najM5GrLZsGZmnl9euR+X37Dag5Cc3ou/QD8bCs51P5EvzZ/erNz9CPzqR3SeD5LTmZ40zXa1r+/X\nYGvY+yoy8TiXo02hjTzd4c2wnS0YfQ9+tDNDJFsnWoUzQjnJt7X5x5xf9gHWDaFhoX2erZipiltD\nY+aMz6qcoc6BsuQpKpP6TAZUYqvjfVJXInt9X0k8o8s6L0Z0Ojv3SPUK61sUqHRh2+V1asG0WlLR\nKe1po/fd+dFs1jW2vpCrHCbfrqtKNhGb3U6Nh7USHYQUvO51F6DdIZLdTJl/4N0D+kK+BhNXodgG\ngM05+/mMgSZ+VDMhGOMUcBK1CBqvwAd/vXOTkcC0Zh+g+kUEaptYhSTcXf4fHEdKfYhphOUeSdP9\n3xKne02vCR4RrORc4d/Nr5raZLvQT54d/R+UzJoHWH9DPzxQsvDTL+l35G3yhQXmdZZUnIMRq4EX\nQuou3el04/FyKY5RfT7+jWCvI7+ZX6JfUmJpXqrN6pJFy0yulaC6WQo1Ei6bgFpFWrsctWMTE5bt\n/gLgQWwfBSPFtLX4pGf1cDR6YNB2Zye/51X2oGKYoGuKzP2WOgJfwU16vn5WKqzkev213dNe7imF\nIiW8sGZz+PvY+ePjt2oY8SRsG5cHXWQ7zIhXU+EH0Ya40ZYCsMeVDbx+q7aKSIdx12FMoIcScvT4\nSS4XvV1UEGdXykLyGqEhEVKRfPn72+nMgE40yLUXQ0CieTl8arX2NCGrvQh8qJnXCnyvI4rysmxN\nfLFblc3B+BM/ohp4f/N/psZcSMpXBD/I7B69xtWnMlPMHgnX9M7VkJLGNCND51MDVVlZh+BuPEEC\nP2mkrpToEDCnMLPrze
 B+JfNTM797Mrzodo1F5dZa0TIwr30cvzOicFJCBVqfx/eLBw+67gZJ9Sq6\nM6xGeayymf7hVOHX7+ey40l0CFA1CUQDJOJRwZDxOn6Wag4ESiq102zXdP2+/ip01nXq+w/sOdMe\nL27ypLsuFc2bQ2UrrY1WsRumWSfCvLNlWon+bWvPOYM6TZIzDzcXBhKX/Y8RqzPr+YNflcycbin6\nnljIHIkDXLRjeMg1nwabToJ+uf2tDd506mUXD0Tr0z7w1k4SgZaz7jV/e+zwwo24xZTUksoiJclH\nZZYd5MUxA6zQBWFYy/MzOUqfrA7UcMJYexoAOFXNQix1jAiGiUtlw8upTtqprGMu/St+geDs9Fm1\nMx87aLTBOsd9NApOZk889c4PvR13KDWliJLEtW6CZxqrjFzFmr+Dl/G46Er9eU89J5Vzl7H1RYVu\npsrzNhH9krei8ZlIBiiG9fC4YDMHUEC/Lo1u99UEC/qe/Nr/AI9fYuqu+OqI7f6uL1xvdFmuv99t\ni/lDTenVNiSbUCfxp/7AMh1FoVFUS7ajV2Fcq+6bq1pX+XX6/wCn86rKClSyL5g0amtGMPwex39I\nnq/ZAHXpt3fvG4XtK1R0DFvpW8hFC5beGgSBddIorOg0xCz7MAnHb61jeF12h690Icy1yvzpo6nB\nZysCiaLBsoH9LP6Gfn8K6iVivmfRFb4w4SwqBmD3w+H7NcF2bwdfI/fP6bs4Gsen89+hXT+P/Ht+\neH6TH1gArz6LQnON3nUh2joF63yqSbvSJPtV+3knWDZQN37CGugAdy8X0LqexXQSLrVb1f4fs4rl\n0thVQMm4FYG1YxjMXjfalwp/386nyTnLmF/LIvDbk7c7lcVNh4W/erzmy1ZhZQZl7fWZiZ/2g/zu\nIQvWKxp0HOk0VvSs2tLIMbZeYmKNcS1lWNMzlxSKe6FYkRdGL1IpDSkE0FmbaS5aIzE/vnH+f7oh\nK
 Td90tB+2SOF/LBc1kAxaOkcbcJ6BKRwg0ENJORC/f3fnsoWv+nUBd/MvOzNOhGbY4QKqe/Hddc0\nkYJNRnGkb+7Vbkjk3RYypp40H5pCLBeu11rJxukdS2Fb6eSobib2vtLabmCntcaEp9OcFBxLIKjJ\ni4nYLaOhhBgOOiMZDeVaneahq1qY/IJ80Kns46uk8Xn7+/v6zkVPEVtj2uvAmE9DoZpFAQtCRBAP\nJAsJ3XFxsY+FPeNrqv5uYoiDykKA5l/aIpt0E2tY8dtSk9P+sTM+283P9Kf+OM0O5YQnfuyNZV+d\n3EW1g5be0Bze96vQ2TBnQRcSCpBoQZiQRKrBPg2q3pvrl5rsWczLKXlg79L/AGMQRitnKzYJSvKR\n0CcGAwaaZ8LJsLgImNarbGSlxLdbVVltK2rVlp04U2b+9vvjOatkBR7PQ3nm11yZAW/Wh0KhWW37\ni5jnUUlIhF4+DtH30in80ahdEiNa/HP2vv0jq+b2izFoFAQ5kcrBqF6VZ1EI499Ej2yivoyW4koP\nSgq6z7/YwFEv7OMtPeQ+P9QaiHC3ybWDX7knjL2EQ4mY2Yy0a70uCP8An0oAvdh4EMzsdBE3J4jU\nZJbxfVJGI6FvnQqysR1PLSFtbAmaxQIbEPLW6/Txl3UflR/fP/MO7buS9NtJ9iXFxgdl/VmfWcXv\ncygcN7AChqHEUpN+Tk2HHD9pFcJA0Gb4fUN9Bx5RPIh/uyozQMsC0GaSsS8NLjP3rzNW8r+Yjua6\nybmficbkTXTLkR0nc68ZjvFHQ0RdHlI5fvjv9/RlPg+0y4t/sIrcspYEzQKRKM+Di/gPbS7Lo39G\nuzsbUU/G0pRrqQVBunv+P7SZ3JT0DPfKWU0No5mIR+egDXmQdbbJOE9SX+Rv8zc6Lg7qPCTbI0g9\nUlVIXlIq9If3M/EM0MyaHq1ZZ2+TChos1cAE14vXxnWECXk0Evr11HYMXWm9oK
 pBlABensbBl/zr\nyp9VZdCLMctgjNgik9IC2Y7HIw3KWmn1q/WX/Oq62qM2ofnV9YlYl2eoS3P+hz7y82v7HfwRjMbK\nxoEmUlobxPrB/TEMdS3Pe987jC+TdlAqw/bcNX0MJ4CP611Tg9mDVSvAhzWost2WctXjYy+xPzVp\nHh/uEdF78vz3AV8/68/3z89HJiiMbA60ionwdZZbLatzS2ug0GqAia6bTBSxSq1nnGq03xxo9ZKE\nmDAcZJqJHqlCh0dWEC6W6DQrqaPRNUnfcd8FbWzvzy6eWZGkJEfn6/GKsaQtWlUSHWtdm20jUEXj\nbGE2OkqFdP11/oyNIvf9CWwYKhMPXhvZC+7nT+o4UUQfLpY72okPfzggd+pH7w8WTx/fsNWEN092\nzdsWhEqec9xE2F6ov9Av+bxHEi55nLjMQYzJhmHk3ekRwiLEsJAk2afDmrCutZMOLcsmKDlsdiQP\nLutwkff3zMTvEHXdZ2zrnCaqwbw9B1NEjOpU9jQqO1rFVY2qVE2k05nHLRHvVPVWw/j595P75C1k\n40H4pAwJg7Hbu02VTIzojfNNfeojZGEDLqRSF6iq6Bc/xrXlpSZc9W7YhBgYQVMHv+rO8ZtLJrXS\n7rgYjm1UpMTs8LJaFYyJ6dEqNBbPSbrlAEo4VqoSWfmV/e7e9HdIoU1MEMWhasPOnMb4r1fL/nP7\n+/v7+/38Xz8TJh0Fh5XMGpw516vqPk+fKfRXFeizex/eJqZH7/3+neM+Q53DGMKhvX932M/Rz8wU\nlT7b4M1s9wG4tVsurRJVCz2IZALnRmR+wH96IxPQjIbueWz82KbCHIxeUAYJOT74/effV595aXWt\nWcAejLUVCBLBl1y1/rJOjrCsj3tSucHV2m4WtMxV+juMWcx6Lr8Lr3ZHkilVCEl4X96fy+vvHR9r\nJ72g7Y/OerO0aukWrGR9yPiu6AYrnKF2NFuFSpW12aU2r
 tRmPXNpsou/7zzT5fvy0/R/P+jO2taY\nH1fHoALJhaDvhLqWvz4eC9/aLWurUGSvi5O4GvkMszQTZvamSIumtFiULIznQjxDAaS/v75N2kN1\n9Eo5X0m2YeH2sMyHy9eMTDm9Dl3qFVZ9WP1k5se32decSimZNjh9NpCnRjSub1JTDLlOUO2TKVWh\nIyNp0I8tV/MS2gPGXIOpR3R3thmQ+H+/h2LEpkNRO6lA/FVXShDpDQ6Mi+PH9L/I54KBTRhpKLKl\nLvkhnYuVLenW0EKajT3N1uKh+W0r9JGIssn068QHWXKtqNj9ON6++vxuTIF95P6E/ldSHHWUSwkn\naGbVHiXrcbMVTKRgUelymAwExHg/ei2itD0aDFomQPRMSoLwf/l5+r6+Ul/TaUg0Z0Al2bZK7yOy\n7oP7pb8tMAO/vqKGxMoIJBUdj++QsOZKWldbZ8M/GwudWctL92h5tIJ5rao2TfzkLNxwIqylWlSo\nFqTCAfrFbP8A3n+NfeHFS+oCHLvuSOWm2ms/qurGPWhsh9EO88vIHnV3qsrTk0MBZMCxFiNqe4uU\n2tJ7UX9cHSHITK2krre03X+fRkIlMXUWUNFkn1pLWas6tflsxRmFlnXi9JGVEYM9DGatqXl9fQhI\n9dLjPVtYnRcLRIjlFGLxEk0xcikb5nLjFHLOnVYXJv8Avv8Ae3XdH5vOPq5A55zTpZRXWEqWaGBA\nYvet94EwgKjbdjiXJbMFimRhUMEDOsQHPhMMPrl+08KGLf0j4+XcoWVa7h2Ep5VXJ6ZIUuK1PZDj\n0gYszrevpSJR8a0tiHwkwvt1Uuy9lCuqtZDYNBfEIgG5GZG7lrXjUPJIeTFEy+MFuWTGu19UXS/q\nrr7rh0NEYKHCC+Wte3zRXNFjd1zWpsSLeo2b0n4oy7t1KHrOSiUKVg5ZBSqA3nQU1xiH7Oaayygl\nCysp8t6FBYUX1Srsef8AvVxuqlnm
 mt7kQ03ctqwZCBUqqOb4SBC8wmAfP+ozM9II7gzAzZSL4R1E\nPW9AKEmnBF7tO2VobSMcZC6qFLWDEP0sY9O/6p/m1kovnJnsj3C2TU2uDq2PQqNZUWosj0adnOYr\nnFAv+VMVXySNY1rTlAfo31CsacKbKQoku+xDszfErc+w1liUeng8MLO5YfDIVUNTorKMq5w6q5fR\n/pB+MaKU7xrSQ0dIH7sBLguiePZyXKsG5ZYPeCgXAoqSWMhokfz28VRUbGtd/Q/3z0lZHCMj9eLn\n90s1Bn1T0i2YuL968eb6thnfGNIBULsdqTjZijkyhfUaqirivC0IiBXP++e1+x8nO3qHPuc+WtHZ\nU5j0VQBIg+/vk2G4ZYLavAYCdFUsGj40F4yLTXtFo7WXrOmu3sG8uuW9jRUrix7GAisV0aPItsWu\n2is0wA9XV2WM6yQDXPQKG0CeyCS+YQrSEmYeDyBhzPYFbv2Wua/Bv56rzCV3rbG1yOBv8yCWQUjq\nE4QzcwPrCeOvMDk/dwzo5olEy6Y7VnanQ7JI/qlWXFJH7sFB5E2zcW031+VYZvOlClLsKEtZgyiJ\nf1DJNhedvn9AgKYUQduez55MUxBNyGusK/8A32vT4lUFydb1adhkYv4+uly0yJYJ0PRPTyBy6yVp\na1XNQ1THBv8AS+/Kr9yfKNVuTCPW35zLSVLKp3gKR2AqiQfAEx55AEBNR4HE5MLhfbPeuI5vr0wE\n/P8A3DShy4udtU9Tz0HA4SS/WOQygVJxSOdL37vRDSs6wgtuGKALGGGoJEL+sCBQZzoMqUG2UpPs\n+1WtKbyah9KP6LfnjmAumuDg8vXRaH5Iv6O3XkV23TtaZub36mQeOq+AVc4oEI2NHAvGWiYy/wBX\nvK+83mSdmICpHIaiMXq1fKipv366fYmosVmVLGplRds0ehFktqXv9fnPN/hQvTcFA5GOaud+/v79\n6/jwwxBgDwP
 oVZY/vn9EQpJKJaFiGADMw31bS6axQjNWie7a06ao5tcPn7MTIeheh0UC1ez27dig\nrtJL/wBaT85P0P8AHFmX9cfK/r38814Z2fQ/2G6R7G+O0F5H++mc0FikXipkJqDqz6/15aTwdhkS\ntTMnGmslgUp/6S37k3hPatyiwGyXFGzkJmTSQ1qbQfCN/wBfpKIRLS6/aszJBCt4c4MUFlsaLl8y\nTYV34allwpFrs9VzkNlrQxoMBUKBRZ0ePYslNHWK2cybDHmGPxkOjNfMS491uIDJm4k988Nwq/PP\nbanSr1CEA6b9aUzbMEFr0ruIRu6q9Nf8t3UsEdhUNy9gNasQUBhJUKm3Yhhhhxta8LgxEKONharW\no6PHvSKS2JpYOEgyG+7IiVqptPmBK73H2/GlEIw7TXSTZ3elX8/y7KhiBUGMtEtEIxztBJHIfE2t\nheDE3vx/MH/QYDv05/NrMzTeIMsFTepaurnq3oaK6n+6/DzHw5fW5d+Ll9k7KP6ItJ5H9L7Syorj\nmpCXS8cHaLQwBSzRaS/EbWaVretpT4eZZ05oGy1croqW/wAvvmoWgs5VO0/hxFmjEJKxKvWGe2Iu\nq92iPZND4E1jqONF8zYQ1aVzBIl/UFm+oLXIiVvpKUlcHXb7Ru196uuwV7oAs6zzT5D2olVEdsgz\n1l3PfpV1ay6nQ2zIHgLxdvcdX3Y0qJB5KA5bhE5hOEq6k1FZ7msrlbYk4iomaOQsVBxQpoEa9bp/\nHA1DqKKkytqFlWmfXxUKcRi4dYZkruT7+W+fqeF6xNqTSXeiWiUP9+/GLmMtXHE7EKGN3ioJ5p78\nxtRIXRcCc/c6FRpJ6R7iy/j0ldAcuX8IKa5SXEbE78fr04zkVjJt5TnMB+14Tu8+OLB1G0AgvT+x\n8fZAts07cyJqfzWk2L90t8soqTxVuowrncVlg0qCQAeb5EwNhNYzlvziN8WrKk/lT9aE1X5G
 EZw0\nikRe+jxTsKq031Grv0tX7vdccP3JV02ipE/RbPzlxNAHpfyClLpKK0fjY6S6YztQQo0CIEV3O8po\nnl2O98MEQoHxEvTTMdCvgT1dxXoFj3uvKJhzOtH6E8roWOMhSqUF9Rha2U0ENmSbK8OR8EpLn9y9\nDlJ+PfOdnVtYqro9F4xtFvjFp4LA4aRJyxqxptmw1pnpl/SZXaICrCOblrCX8XWGBJ8uim6HC4PD\nTUfU/otopJtJke7fa01aGSCy3tPc7OpsZDSIWgnmritO4inuicQD+7unMr1Eqh8Fvwv0mr0UXg9f\nWYNsW4wOcGOAS53V7FZOBA88+m1AC6CF3CU9vW5Pu5XVYoSAclYpLjYLWeXlCW7IT9eHzQmIHl7k\nTUE0PS4KNIW+ATR/fxOWFYQyShIl9Rk4ooL2UDzt6MVHYtigHKOUHlQT3XvDH1fZMReDy6hBlWZk\ntIVC1hZQXfY6eYCjsvj++yU6KwpsKMIeh6wLpgsscBqaqNjnplrwrlI/nNnJ6fz58n7iA1LKBNKd\nDIEL014pytZ45DSJ2NCo4uHgT2bDgwx4BVYQL0mzFq6as60SB14BRu8DQhZH9kgr8aNQgSAjcKLc\n4bNprRHVC0C0bCzPH4PJduVZp7Mece33z+M4018vKzYI9pLy8SfhAveEn9n7R2is00Z6Z8/mfNUM\nY1lGqTjCXoJ1ao6DdoMk3kTF757IV5hBemTfNVVkPl1uRkKu/oxEZP4l1sFRoinLSu7Pr1He/PN5\n+Ss6KyhwAUaquhkOXpaNQ5sHqDi+iZneHhQELwrDIaS83bw1ZQEompW5XY89j2EEKOq2RS6ufRh+\n9n+/zqwpvV42TPs5f1yNYBNfGr9PJMgEKK7iYCdciehqFE+revcvDEPIc0c06Gp9PZPNolJj4HIo\nSN0odMQHs/C3j0aitO35n/zO/l7+mB+bqxvFlTr8FFf8h2chH+TZFSm
 c/BTkwQqw2MJoS8Rxhxxq\n3p8PgZXx1Ra2xul9R6465zGkaGc2eWfHfPerAq2MyTjXhEl9dt9h5e1m0znZfOE4OyaY+kayt9HU\n4DZN1eaCcXzFRTyVdXH5kORBlGmup7z/AF9IasDLY8nLasJ50F1yDKFIwQU4TIo+HOe94J6Bo5+Z\nud3zw11qbDwF1d1RmRXF0x1kVDVGgzbXo0GpWXFJkuqo4tcKYBMK/wBtXsUxglZlmdjsUMe7Ds/u\nJZQMK4J02G4z+Tedmcnxw8u+i+k89pYp2FqLsDK9+LQzKXG+nuHxF5LXhO2cUnlQ4+ui8+quk27Q\nKG/Ym4pH715mkoj3jydfl/8ApROXdOyzAFgiKW9qu6asU1rXa21LBHQXu9r7RY1xjZS7aUzFMv8A\nOL6iOfUplQs8TrUYNXxvmBmbQcTRX/eqy+1/LsucyCVXzSYgaZe6upMvlfbOMbk3Ef5+sP6iRsFv\nGlaSf2Q11kXE3KGoxHREI5GC9wWorLmaAVo7dsX8Ua36EWRaLqpMhWJsOxAXXrQ+flVgXyhrJi9r\ntxBYIffz14tk+vu9/QhcEMakOEFz5d5u1ryKWiZvYoGnaDbgPDy+O4ySwX0Pd8SlVTre5+NjIRrf\ns8Zdn7yGSPQolk48kylZz86Qz7srrbKaBqY9Y06XoL+8peBGHECwXBfsMQhBQ7z7S/LSz8Z8e6p4\no0nZvZ2PBaFMHKPLGkZq2qTedi3Rj/0xZVnDXyRUJk1HqrXn9/D8wwi/3tY2jgUXSp7ZQFUzmwbC\n8HYeQLSvS+H8SBeuGt8UBncOBkdxBl6IY0/R7c/PugfRl+sH5I51NlM+SW9W6K+aAWexp33pnjRz\nTuY8VciasVlSsG4WVew5YPXk4DDe5FqFFmwlFSjZ7nKO+reVhfJ6LJTMGhx5W2BvOgqh1NwB18f2\ny0pW8bS6AIAbdHv97UiKbWIDGAwFWeMgmyWdTa
 bWszszpodblqcUShJHQbIOj6AfJrLapgy2sY80\np7X86yHSVpDopBhwaIFaErw9EILkXljQCNLI0h/VbOEIj3bOqLBJQlQxE2iaiyZF1KxA8t6OiQ63\ndzU2cUfzXoSmQbKds6+xSOMFHniQUJuGP8tVhV8/vz0/PTqwunLZRy0ci+hWhEhnTlfSQlo7siE4\n/cbWnq9f2GwEzI8XZJAqzVo0dp30aYM/UX3Mb6/BwsHwD4t8gfsz53f0I/L436KxhYbAAR1dEyoW\nkmUuhtNUi2HjbiyzVRTn3v1PlXMxTuXsTvlf5fN6tS5YG0SUgyica6i5PIePPY++Q6HFdPHry0zK\n8plVCgqRcX16+8Ef+JBPQEAhH4+D3ZFiBZ4OAVj26vLdG5iMMYoHXzLbZuBq6Ih3SkAqmxc8JAQ1\ni0CtLp18pGqKABywBZB25/RNOnw3m13avReicKmWIg0ikgnYuvOk19s2zeW7ZvhG9QHMBZ09Jvmt\n6yhFU1KltKjS3Vwu68LiJPPzoXDE62S3rSDfUtXqLaYs4jzPFLyvuOQTGlzfy9oMaj106rZWBiYw\nLY+dqb4JLy1DMYrPevvayoWISs7kK917Byc1OIedhv4/z8khgGq6umWtC07zQ98+R44cuyTb0uTK\nOdureiELlRnN+FImo3SMQWQ8RczFa1bHbxjGZCE/Oj2ObwCYcXKsqGIYSwRstp4VtWMG1W9XeJ1Z\nWY0uvcZVklxC4XD9Pq7Asl4o3LhXVh6THedC4mYJWu6acy0ZL19IZA27oZjX9DHBSjlk5kIw/oh+\nd/nZ6re5bFw5lwvSgnMlUDH5ThIf/pAqBL8Uh1UqbWhj95YZ8DeHdGML8chyRo10KhntyrEFHx2Y\ngDwc+xZIKlO1cwLTPi02ltIGssL6S0FarbHpQpOzGsMy58KtlXq4it+wQZQV0woYdlsk317zdJVP\nVzvp2b9U7nZA257qXlkPy
 lg204PS+V0nc2ZM+yxbZtJNgXYvWvQmj736Uz0NVmbCJYltkbAZ99Y1\nCob0DARrqW8kSci+hxqzloG5lY1LdOPY9+fnryqtNen85C52zjcNd1pUOzFQmUXi8H63VW1QrbPl\n68rldVdV4/K3QX3SppteqCF83wr1Vz/oSrgrN1602kzQrHdqNjX9FdDcU6V2sdn531cdIsxhvU/n\n5lspfN5/nHkkLxR6YrkstJMK7Eh1eaGQkqii+fqDgzZORG0x0Yg311ZnNR0K5s7syaCGQuSEa+o+\nSTHa5nL9Akq2apU3PP8A3KL4ypORG7H35oQ5VeBhy1BIkS30gpG9bIDCDtzJXES1Eo0IwU4K1Mef\naH1Hv+unup7OWOUdDHs7gUCqAN1f2Sq2dfCFoNP4DQbbN25lOnKXcFelV55YIQ6DUWtVhyKuPXOo\n2kM75L5w0eOxIiv9zQrGnWf0fPqkwLSDpbah0NyRSUdYlwrlLkQ5IConcsnlQKG7/c/fz68yMjhe\nyCo7nTjU6SxZNmiF3tJAHTzlpwE0XlYVHBZr1hsbhX9PvQGp6f1lfq3+C99LxJSRdxDmlMUeD2T5\ntVLo/E/QiFWNu53TznUSB2nJouXIqpLAZiZNN2kDRd1phk9KIm21FtkxkDUXvk/TL8qCaO8ICb7X\nCMR4wKDQ2FmRdVwfKeWCqlp9TaWaZEWMHK+1LhQVbPtVvWsoyQp3XkoKaKXuaOfnbZZfBiyb6Mk9\nojXjVOd0hRTa/hMG24mGlbWpmDQq75LYfdfR+dzCTiDhO5QNDdD6805HmrmDRabp9qPK70/s+48/\nedXKWsrbeVB7OwlOk81x0IEXRkc7JOiLcvz8jXFIYb4etRqO2iTyRlKtyAhWHX4+/jn9l59f0eXW\n2W1ZebqAwLLX1IDy0GrRrvK8FwoueNISlGU6rmcLp/nb+pu0mQd1ak9kJciQYzvq9F/Lwy7t3uX8\nzq7y
 IcW3BS5haQyFANFIBDqDU/mMJMnmuHQkshIMnVDTebRWR1hGo7DPzN2iP9AT9OfyOEpT7udb\nx4LCMyyl5DCvJcy57FzsSbr80+K9s02BPNRuMXeyrezYRKdV2ZhNBMPC1/ZukZg2UCEL+5dKfHa9\nliTktJb5yZS0tphpzO64DBcDAwgqq7usUc26J7n3+2R2fkncRl5/8muMN1r0vzcvXMLRbQiH9Cel\ncceY/H29FgEb+6dokp5/mNZgBn8h3ZKTocrJjrkvz47lwaHBUpMB4LT/AE+hEKKKnUTpmZCk5fCv\nw5kLXzWZay6LR+HrAlmjKQelRpy07lEE2F0ELJx3P6zBVcMoazcZIaibZTvuY+/0E/M5iZ15vZ97\nZ4TqHNat+58VSn7ZsKswJBonnB0fnSyEohY7Gt7krgfSQbF1jylYUl0GCCvzUjHLYwlvJpgQDSof\n3n2nVdwTiAf5+nKBzO2vJ7hDfA+F7yuQZd2v6Ro2kBrUtze2XdCZz0L4/npX1G0mJaC81CdKN1t0\n/l9rGgCosh3T5Tvzk/RUODpE+DQWNtuImZWf3N62904EQyIaZQ50f9FGr7QtnLPXfVmbc3lO2jEY\nCFWo7FT12cgkIMjXY01BjkNFqJI8H7qv10+dlwwwLlZ5Ygevy0NXEbK/AS4J7RZ1gooCOVsoxzYw\nNUKa1H4qR833z8x/6HqSKzfLR4ner14UTtNEziRPVssaD0Bfa+1tVpB7JcHkk6XbhvRIZ1pNsNO9\nko0OgUh82YryU4nWqz+pcv8AiNyjB4OIR5LkaEaPRMfeVpJ6R5y75j+FKI9zTL4DGdKrpxmMBe5y\neNDqbLVLmB+Dv8p/1hi4/WS78GhaAGvq8NK3UTaRTXdgtK1qm4rbwSUOgZmstd9P5kD86ZYSPkvo\nAZjYcv8AGHE2wVrDyh1TYD1AeSObxtKlMQFjB9KsjQ1vqNHaE0w7y5qJo2mvbrajz
 JshfngrFlGX\nLHloPpOlizmmbSvz+z0+OvG9zXzmEx4rNZ0JL4sze2WERumovFiADIwsAQh4Etflmd9bl8sNvXy0\nr+rtfKhKyZ24t3dZvV7XurVQRrv0CeSnSvPz9u0nlbbGBer2j5rWnkbgbdJ+I6qXVZ0C4uqUau6V\nYpy90GlTVLMvPStIbJEQAsGJoKcKhuNSobUgkXWFC7f39s4nZ6+KjVzSwSj/AC+/C+hBjz+OheIR\n/LXCWuMpM86Dblrr5dgQnslzTk4loRSGFYuFSZ5Xcm9Rtk5Uf3SSLp60K1LRzcqc/pkdk3T+i5sr\ntZH0h8vKlhqosGO4LABKABFJIJh7JTMOlxXUWREvx2RkeDidh/difWfaqzv9jWcffjK1nZOVmzRv\nAtqpTkS3Lcz+/P8AVGouy2ZDALXRhbbireB/pWBp7RJ0Y44aDI/f39++/wBPWdd3pXjuyPHSj+OD\njO61QTHdgCUr8m2n1JYQ0HlbUjNlJMe6348AgknrULo9D3Rmk+sswhewYY9HOQOXnAAJpkOy5FS6\nj8SeWuS9Oq8qWQaSkY9H36Q4GbC4D8JUhpE+MlfkW/pAIvjL56/WKPQ9WF2a2mVGKhDT9FMnWJGX\nNUpij2vBQe/J353skH2TY69MhuON+/0g4z6Spbt6wQpdiLEumNW5XDLnKumxaFE9Wp7nTlqqGMMo\nKPJ9nve/U4miWbcty9xvXgIBK+4/n9eyGieN3qGMg+9RdGZ7WFfsERixMDQsvEw2RQ0OwMJiJLCq\n2Lzf3UpkdB0Z3Ln+8BAvTA4ltMoKxP8A45f3Fy99bl77kzjOzIcpO8wNZK4fHmxzIM9MkuQ4F2qC\nab7TM9dCIIMalTWvz/eAsLEFdjeCHeCr6O1F6P6TQN97V2AmSddg5fnOk+mEDbbSoAwIZCpemlTq\n7HWrX+YNnNa5QWKlMF+GiO52NYpiuZRKvaRwmeDqGvi4aDt1
 ycu+z7qQeN/50bfycXDmhOn1mDwH\nuhSPNW/ExdzYNioM0xSa+u9/qcIF1U0cuT2xwnKjKOkeGFJq1fZ9KP2PJsJNW0VeQzUZQvPrvrUG\nd3fXe3+/KrLwtu5BSPy/kl3u0Z53On1tTDT45vxKFO0hvV2fBB7nA8ECwbi/xZwQuCGqyp1m1Kmt\nevz72iXHMZTSL4FkknLiWKdX9zvG7fzjRKEgtdvEvxKMzllCq9RY0wZI2kaISuyyPtIdFIdTlWyx\nQK3dTr5ouHrav187u9eRaJhjZLaGTsoss6Y5vvphjcKCYSUHVkhIPDi9eFmfbWbtxno23E91DGnF\nVQQtkwAXP5AOsADN04LfXVqkwh/SXtPr+hzLBZcQ01JhKNMjPpc1s/PxDVwc2O0rGLYwLUlC1jqz\nFX2J/HIjGesLLZRdDHylcxMyPm3XlUXy+gv9lSQkS0vZ6GWSP6rlJYjqhuajSXjlmwSgKnZLXtlb\nn5mANWrJp5NwxyJQegwa086Ui8AaFFVj7xbPMhM081QaCIexjxnrKuUNtGQJn7n9+/7u4rBElTXp\n7KS4vH2reKVAuV2O8vmVLSIRLMRq+F42KAEvqdFdHc0F6TWWNfr5LpN9cZ3IJwTsuN2uX9Tamyg4\n0i8ktHo9pnPw5CCu5F1FmPlXSJsKQyBkfX+fCjSxBufdP9K/z9cg9E//2gAIAQIAAQUAWIXDmCoI\n3N6ta7U5Yzbnfyq/iRkxw9oCS0XirzGqUl5KmiynPyx5qmHW3uTYZpz+NJz6mtGnL7sgS2GLNaYD\n5KFMVPkYvlgyrCNL3plhZa22SwSGVqTHjvPJk3pX+W1MTVyB16VZeBW67oox9kpUGircnNru+6Oz\nylQo8t3FB3yFacoiuJ00MNcg7cS/utyqok9kyUKjckTFK+CDrLfwnU3GokFpCfiHefinM9Wr8fef\nJLqEIc4nvznVc7Dk9Xx1Ti1JjuLUPZc
 a+Oc49xxlbLMRDjsiPDajxby5/Eo1gWmG5XjQ66jLRWZ1\nQIpS1Kc5WnPxMiV9VUo74QY0mTK7HCykyD1dimhDkdlSDEHkbv8ANVxwJFTLirHKQop/Djpkr5Jc\nGVzsv43WeRW2hUxLzdZkyEoqsWBwqVZifPzTzMkLkF8JpreP1KJPcZqdQF27XaQOl2jTbNc1x+/m\nRmx6RWrHgL5f8OuXmvyVprSpqJC58OXx1a2H4kh53DY0myVSa1JgSCnOOqgDJxWUOWDrrJSnsT3P\nQHqNTruY6s/Is9D1YkfNYTXK1Qg2hbHK0Ejx7r6ON9++BHW82iImOrFVMlXdAkthZUYCbMrYqldr\n7jW1pqyl3GDpkSw0qaBS4jilst8Sl53vets873zwZSXoO0AXatoKfqtUaOv5Xis6vyugg92RLYnD\n3mGJCkzOcbanqWtX/wDBLanOMJU3xtLalMsxOplykR+R5fPvkknOoAfRTpUkhDV8h9eO2PsqYdjL\nmxnK3LjaMJPVAvUTDEZLsYfFW6RMxW2GGG2WHRxYShwRKj8+W6tyABmSH7Jak1dMd0D/ABYvJsGO\n6PsC5Lk8OIW64GGqT8iQo6GXOQ2UJGWYsuHnc6YkVi1KSOnTw1Zhl95rMIab2S6kuzSBMq7MHd71\nuGpKhnFN9HdZde0K2C6iAfKyC8p1H0TBtRBvgavAjzFnhSq1Jxapk6/USk+PqjX9DBhxrFYHn0U6\nstGE79sAK+i63mR+wXqu4DU4IQgRx3zNLBa/aNMLCFK/DB6v4ynn1DutpUGp8k+/K4WnrORqibEW\nPRbGUU/IV3jq+KU064yusae8w0bpomzIIQpYZ/8AEnnHH/p8892+QGufpge+UgRv+rraeIS5OQhq\nATeTJE2YPd4dqAlKr8kkPy8WylxDcL7lfxUtttJ7z40ytSo8Lv0nwkq+ci9ZQiKhxxmN2M2OirKn\nbBKjOaP/AGrX5E
 TI6+tyn4b4OQP0gCXhSQU2jDmnJKx6VR7KZZifGyBCTIzGERdS5W2SI9+vQ4qC\n1ehvfF05f8gYJb5CJZq1NlQs2d/IFyYu2xCpYBE+TIA1x2769nzXbDucyR8KaFczDaI3VpS11Pxt\nz6fIvG1Kfjx0NvOsfaiX9rkUp2Py3n1XCWqD1pyFG/P8bqjr7jMbsVuOceiqpUmIOzo1cSNdkKeF\naf2BWnkM6b6Fu2tTQ/nkG2RmXOiZsGK+na5ZKLY6lcjljymrKgNivuRwd9jnxI9Sk53mpW1zzrlR\npA+6XoqTj081KrZDQa7HIwnXlK7zne/Pwr+iUfTtatE4K8tFZv8AWLEDm16S453vwWUfDErczFu2\nVoWwwlZBXfnZHV8HpTxz+xSx8rt/cHxj+ewZ8PrriPjD3OcVJb+n8hjnz+yaR8ZLuqWw9175LdZQ\n2y8vkmAgqdkUBpC9CaJOzZH5F87F/kd6z+TnyslHhktEADoIIsKfqkGaU7weWFzCkym5qnrgSFCB\nMR5/euFYHZKZjC23ThPkZmuU/RrK+GrYMJw7Y6ZT2p26NONW7S7O829ZycyTNmuSW5EZ3qnOyUdU\n/MT8/ky/nHZvUtEZLSoxN2TyTGWpXIvW1KaV3jZrPj6E0GrFkQc0lI63R7RGaiZlKmrEVaoUhV11\nNsfGasQe/RwfmE0+b1utVSwhV+f6kBg2urWFTdrx1cmSxhjDma1TKWhnQwLkBqJH+nBAyZMkZ1jz\njzdh0BiAwZJq++cR/ldHVy0E+UkNZK29aMZHvKi5+PcXMzK1tclByg9caC68oSTJ1mchyu3kPY6o\nRrsz8CE9ya4TUZ7eFf0VoYnrV8jvfk6w/wDa2699zrMz7GwFnJgpqmKrqyDwYxWZi5C1fOuL78+v\nfkHnVKZT+JBB3qnAAUgZlXAmPo4/NGFDI1ej9RU40D7uMpQ2lD/3qGKd/JSC6oM2XqIG5P2OUQG
 c\nqxuFNfjT2WWWiKpPRUf7uxJ8dSmQBk0TnVoHV4E/cY1eiFNGvtjWw0+8iPGkpfsUd5bDTbXPipja\nfnCTPO9diO8cYjufFQ+fEwefaoP93xmD1rqGlK+Mj1vfJkHsfiI6ZHwH/dC1tXslCQL0lmTLfo+i\nlFjs4Pxm3WcfBcD3YZYp2jejTIsl0NWNF4XWXrxINpRVxo87lBD5WhmRFq6iuYk8pnKq2WZEY7Zp\n5YBW69SXSmruPkhddBy4heiZS26bGjYTBaNqMxUoWeYVTzzwKVZ6bHbjRZEyE7Au5RptJGgFUWEE\nZGIB2eUEJS2w94rVq/mgCmU6G4EtO52SP24jy7T7Q2bxSlSOfYl1XVfer6tOKb+RpjrL9ev4c1Gv\neVy6613nef8AAYlXHH3E9YTE7KXPIsZeAQ7+d3/2nNQLD3aN+FxPxMZ5XIkBpKey2mEWYssFUlzX\nG2w+lFIaAZ6rE5A51UpoY241JgyvsZjgozbdy05mjUm363bLnJQYkfliWRz5XCrD61yorTJ2Wl+O\nSaUy93slXzja+/OLcT8alK4pM/iU9LoTzhfnOtzUvdaf598AghKprHJLUDzxemnk4yyIgy28nA/J\nm2V8Yv8A+RWn9lwbq3eWQWdqsJ3Sp66mGJDF8VEdmD5ca8DbhDsGaFq/KnpX9MfgtyLAICyCbtYy\nyxzJURqFSARGfRbAOJHLTV5Eq3n5CIjsk0lVKMIc4Ou45EaxWGGqPca+tAY9SfylsnrljZLUs9Gd\nlgj7ChhQ0Lc/m1KwtAh5ajS9OpvbKJsJObW5u5dKMUXN7vGsAQYURzsabx/nFfXjHf8Ardd4jjLv\n1Wp77k0rSzNUkSs8rGow54ciHIsKQ3xlXX/giNEqoslKlkpqWftTaoriAcmEgPnv/id65Iixm55x\nKeU6Oo2Z0Ay4XsD0hLaZh3jHeWRKl0PVCA1dEsJS0CIfAVNb0nT7DKez59
 OgUGS2pqR9E/GV9T8E\nS1sdZLuPM8k/k+PxWXe9FR+/JED7uPj32+R4K3VPj0oS7CX85Bcb62+pCYzneqjMrUoN1HeGKzYj\ng685uUYWRhvQn545P3oGL+5TK0KCkDWQ0YBolfuDs6lwSDKsGiTW5fnY72JXsb1qu8OZNTzj1Lyq\no0MHIt2XBuHdBqeTC7boFyuUgTInMPRdMc4KdpYG2cpNVlwn/wAQyN8TDFSvhrP4Mpqw1Nod2cy2\nygaVOA5bBhy4xH9BKVp163Z8cVJpQIwzKi3anv0rXRkmV6EzdZ4fSwaz2Z0Ey/TLqKOx1fAZRK0s\nzvychPcV2T9quNu9R38n142rv0CHSgKbBuFW1KLbM8LVh2qh0TZBg29b5qxXG+KjNITdYKFPaVJ6\n0M7NXHTOKrcVDr58lHJ19zMKYT+/8ugaDGBs2fdVckidweee8802Wej2f0FVKCKMapZj02r6oXhd\nx4lWZdl3ep8rOiKR1PyK6nnY7nfoM/63J7vIyVmX/gepXQ4mJRGoDKGM6jfJCc6aU/KzD5HAZuT5\nMzOG78I5lbB7Li3ILgcm0v5LL/xuVnRnYHyJZK/bB11xyKfHWWlk6zKUy31vKaqxMl67ceWo1X2W\n+fACenxNtikaFZ4W5aM0kYduF8nxKdTqcjtpKnCkPM6PCI2jLsvfMyMsz+WyYoZKsyLDJVztOEyZ\nBSsG4hAVZhs0U5AIvN/Ik9So+lS/qhxxSpK1x1fFzX4iottE2+PaasXrznJLjTovSjgzhK059cHT\nEmfGg59MiusbtRKe1boMmwjE1e7c+8QT5NZiSPkaR9/Oo59qF9V8QrnPkRnrvYrXUdpt5nwe3DOY\n88HEFyRb85zvfilqbcq8GPYqJp5X7j78tS1ZnSBsmJbdFO2KcTNkC8i3FP4cLdrNOXJxrCXNFVWv\nLed0ghafWXTxatEpMoTHWpz4M51KQp0hXC95arGmV
 S2U4rUpvU9R0K12RwQMU4/LzuNxjp+oVZRS\n8WAy7IIP9+Mk/wDqRNckNzeyUr/mv/RBSY38H6JbRnI+owpPB8HMzvTWKWd+JMg9HvhicRtwVc5g\npw3GB3yNd6DJHunnGc/zqTCdQsS6tCqHeF1o7oFQN3Ss03O5Zp8YyOrocqez8cpGgOyHZX8mW2Mu\nB4E6tdLubYKKYDN3HJFSnKuG/rUR0Kc+BH3IrM2hphyZkXoyFd5y5cqWpH3N/wCvZkRCmZUB7vQV\nwljWbNRkqRM71nlklfhZParYaqvIdlq+mE/QuYKs0GePvGcSqRtESaulRKwcalVg+F+R/u5xtXVI\n5zqVQo631Mgp6G2YTsX5XfxwIoq1FxRFNopWow7XQLHWU9UshIoAuJV87JSpEyfXw7pwzqpRiK5O\ndV9r8paEW8gpTV2BzrXYs+qQrGqfuHoYOZDZVV5kwrVx7kYNCb79We/ia7371ZBMTcMurNnhkXrN\nnthAGAlKYAo/z+PDbKHZczi/qrrXV9W7Eefb/iutdH/9xGJ1aIlbMk3h+QXkgqTkUMHxuNkQb4zp\n1eGqa080RZ1sH/0KQ438AGES42ZRGZNlI12J/d7w6hNpijv5CIFVTJVAyYiXlQEhs5C2izwDA2yn\n7KQksu/ldEuR2fkmz9YXELtze8/rlqAnOjkQ75XPzzh1YNcjVQuO6OFqc6MY/jR7pX5bka20ixIc\nLMS4rnVLT1BF1PUS21tzFNOcD2o3VpcysC9Pb0QHPGL1b6s/MSiN/wCTB5LJwHvVIgxxbfexzODg\nytrkMWpgDFGG66W5Aztg6qr+ayq3h7+H5spn1EDX2vlcs0Gv6VRy1dQSkfj+R1ONu1XXJ8OOLodR\ntFhPyZGf1b6IfcymKx/aWMkkqelL+nDUv8aL2XVGZFtVPA6ldCN815QLG/5U6i5ZDBttNttNRWkd\nUvn2pb5z5h0me3ZtVotaGGaz
 roc2myVUwDKttJQmQx+RbDLXfjI2bMdD0g5KQrOapG4srjded7rw\nWIzJ1S0P9mnDRRU6F35yM9zjrK2uxiL8b4YkwE1l9DwyXE/0cpk3nJ0ZLkiNYa32xyGMhDAIg675\ndX+ntjPyUWE+9M7HsRoXKkasYLJkT6GQcgwRb3xNKnTuSaUfjIfr1vicahFUpbnV+CuqXwDF4K0M\nklYy1rdYnW6E7xV3lMcs0SVCjLtleLiHHcluSjVfoMCW5X6RJQnOSU1wpm1qHo/JMr0qyGa5po7f\nsosNYIgzZGnl8a9JBVO6VZB1hAF80Kg7HmAx+j5xRMVv9tj1TzK+hpm353QIpza7dO+KP184pqF1\nmPFmN0oTk2j1/XKXr2fk80tSH+pQiWpSvPSJybRot1CzZtiywLIXVs/sdZrjsXrTk1tSGzjv3NCg\nPR5CFQ7Jo1th1BrkKHXWYrsdf/TxnquhB0mc8nMzbrfG8+r/AGbohpfyYTb0PNmWn0vVeywjIidn\ntjQ67TBo1P8AbUEUkvr5xPJVsshGRClKk/CcfqVccd+rU51HW5/04qfxz4pxaehavYLS5MqVarbw\nOxyDkmeCUcjQk/xZNEZacLHHFBh7TzY67ajYJFoOQJLEfp0mr6rKfXv3Mv8AxcFa/kcb35AFx1rY\nisRGz5FTvVuPdWljneNss86ALKivgTaVRy1sTyKathuK+P1iztrquxg/oZHUq6UU7kNtBujrQRjJ\nnZnENMdr7wvrNlLDOTbIPKtkaTV7NywhZXIWvec368t3LZrD+WU3tkGD8xeXYAeV57mtdA6SFgzJ\nlkr1niEM3rM75KyJ6dIdy22B/gEEuQuy2GdZilXs5Cmn9HAiN+zJUGQxIZHu/fnYMkNp1yIOkLRA\nsxQQ5Xrm3GpzVwGl+EgdQKs2TB68Sa1gM3ASKAr+9YzkdmKGmT5ELNno/wAR/txX+N6URZ+FJ08w\npfFfc0w
 t5WPC7Akje89pokjLv4MOqsaATujB+iWKBNh0m0z2JeV31b8XEdLlrh41okd2Zil8eQ9i\nV/Qp3IriyvmaEWOpr9GHL7cqOF6X0qzH2AYn/ICZ2sPpbrJpt9ZwOiwPZ7WY8AmTmOG2rehs2YsT\ngwkgjBNBCc/ivxr+n3MuuN9Hd46l2Ct9UUXKZ5K46vs2G51H8f8AH1bqPox9V9FjJC3GXJMMf0lI\n7JSpmXyWFWpDw1aO2CUVpg+h2lBvlsiQW0depyXisY0XhS6HNXwrBmDOS+oV8ZOE4Lda5SZ7Om+a\nocLmHhHRpei16C9YL7I/yCgngE0ARaWlLIhBmU/Wxewojh+ygaDex5fZ2O0zMrF8JefZjisAiXXM\nV+l80mBiNYGvnzB+0s18DF63M+JAvlZd2ZEBqY/xhCo7brDuZR7fJgu01FzGR8HONS1U/PK86SNA\nVN/11CkdaGZU0iDGzXixFLpZVMsTiVcej6Tkwb4/slRecA6FWrEKLao0DKgtyLtNjd+LoUXumkgE\nnr5dZE6RZLC986VKKUwdmK+SZUh1pxXVdd7znzvxPPv7/GV8ymChlYkjMaipFwjnKqHs41CpQsyF\nLRn2Ktpxd3+3hWZMpkTWrlGjzvNpw/Ed822aDPj4e44UkQcxpxBu8UWL1en1R1pPcqs/bbTTddU+\nOed+R67KdeG1qLH+RIo5tuS8w6hyvrecfDT2/lLDdJuxwcYqZ08g3NtTBaYNcpd+4dkWOoCTDs9u\nzVOQO0ZUvpEcSOCHZ1Ulu/1GeSuP5+LlvZ7Hu1WmyMUCdn16lk4hve50mZV89HF7ePstJqtIj91S\nwxUPaLcSDREhIkuqkL78+9f1iWI+P6D2/TRSKLbkbnnkDPKlWn9ar9qkShDy+OZQGiFi2qhrLM7+\nCY3PF1SJUndcJ2qFED1+FU1mzaNHpc1r/wDmGY7jrgrObKT+O1qi1/rFvZhc7NvZ1U+p
 Wdv4mm29\n9EeiXT61GCZEyNDr8mQyPZUy24tSZAS1Pi4x6ntzYaQhSaqHnFrlcZzhuIlgPnKEqZzWL2QRzqP1\nyy0xCk2ypNcd0OttqevI2uUeXmESvCjMOtKsSp4ozDAjatxl62xq9K0DudTp3d0VGgubhpklLl90\nJxBS9WhboXRiIyc4ewLXWX/OzclBXENYCfGQJyKquWSeFZn52MkQZj8QaknaF8dEmpDqpMqQxysm\nGHOnzMaOuAtkbRaK0uOXLvvSZ65KFfJbb7SgOnQSPAsrhRJ2ohOfBtQHhixnKadbWTWV1VqVPxC2\nyESA5gWQpN/MUeTm9lZsFf1cUxMilLHp/VDdjmxOOxqXaY08LTUdl55NmoIiSQl/6d/4Qmvu550M\nkaradcDWHU6oLulxps2Bfata3c5z+vuovVpu1OsHdS1AtHxygRYc697TGJTGhVltMjN8p1CBNIeY\nmSJhmh02sO2BzLI03mkYqBIT94q/x/bV9ec2aTKZm7jYl8a3GyuLgbCYadHaOgzFl6QHYnj69QbS\n0rMMycjwK5WKqsnJt9ljXNN/ETlK+7sZXeOIVzvHGeL6439Pkp9PGyEpTb+y6PHB1SADmnKPEz7k\nTg2qTX2hY5tlnXy4G4z4TiI5gsbU6UFG3vyC5CCDZWo/XjozkT4hLHFMGJ8NsFrehh0g91nOSCOg\nwynwPfc/RJJVLJbnBVnmOkmxeT0BXzubVp5wDl4BhcvGq8QVYqhWJMswOqtXrMwRQPpMhUOPJbYz\np9Cq3nTvYVSofV5wzWhXzSbvkgGaV9AGis6p6fXdWdKQw4MtOcmPfFZKItz2Ox4mUlT9JFKfasJC\nrSJTFIPuO0ObHkRkGmos2m1cihUS1QmE5cu2ch4ofR0RmYCM6miQEw6EN/wQFfPPmfnbIzjooWyK\nFiRQHrUaD1tiHbVWeyVUL8eI15BeVZdRZlWuX6OGRQditxrh0RM
 Fk3Po0nv1V3/hEd59kpPVKhR+\nKVHjyJTtDz4rDG3SxZ1TjD+j2A6w+txbkiXKiciaHZYDsP0H/YREVXE9BQWwQ7E6RqR8ClSI6OOf\nxnmykBtEe6kv6yL6CsZGbFzXcxd3LucmxfjX8bvLF2TFGj65IiGbXaBQoUezqRE+DxLrbkGSkfzh\nP+Q2b473vXHOKjr6lSe858emIZS2VkNOD7/GnMNQyEZ+VGEadwOlhaV1eM48l5oNGpFqZbXDHOdR\nd7fMuJz6pb4+8tzrPV85Hdde6rnW235TiPi/46vnVI7xalJ4A1DjwwRSrCCQ3qtUtiwbZatixVgG\nEWvTFbchHHCDyHWD5COoXpFiRyqGDkmFnRAROmGr3Q625wxlF7kWzG5MmIPF3vhzQLYDh9zTTQ09\nw9lgMZYb7s4irLRreQTSTd5sZFq/aLndXBlN+ss0t/8AIq8IJv8ApOwnKzYNzF3qCYqovSqySgTB\n042qDUwfxphzveNL5wHnNssXzlaz2qcd1WXCi0UxPLTNX43/AGA6b1K4bb8z5Jq1mnI5nN6eWxim\njuJh4bemV10Hf4DPK/MZkWUJkKOw81w2UuxNRKhP1DaTrYw7sF1n1T/HBkmUTkut8mpkhAk1iTDi\n3HXBwx94w9LeA3CcK6zPA2VM2JKhyIqe8SuMlaZAnq1OxP69MwpxPx2U658S8v7oalONRik4TJh2\nqCbQSraLeJgT3exiFbsBhsNPpNHWTrgXS5Nsx271VuX37fjbSnVRmfxJ/N+J16YpTcjvVL/Ivnz8\n60fG5HVqF1aPHht6bZYJKTHqWjuYbLOCCJh10MNqRaPd61ouey6UQQ31xeXecENjjbwmC3ZtxOtR\n5hqeRfjzXIzlb9FadX26RrtXsCLdhVKMyzWf3Gnzsqud1VUuwqneaCECZTWhxjUKJZyJIjmhdUqs\nYMQclZb52e+VfKMfJPf7Y46hMRujUCMqiZ
 4diEs9pjxVVHzWK82nIAzbmqjhaTFztdldGUm1FHE5\nIXjJzmu50LI6Say8QUhaiPhOsbNbGUTNKu85E6y21xxuaXe+OTpiELfkLUt16O5C0tknAl529KZh\n6FbwLpWw0y6McwKgOzM6wAyDdbSDYi6ecTYo15s2jEEri/l5wbH+rY7v2JZej/A5wlNb/wBvz0ns\nHMbM51Oc/VZrNaw1HZzPD/p/hXmxge6E81MvOM+a4bkuf5z4sRacdHNAtMDj3rRLFSlW0zaJcx1v\njnxMZSXaXqh2jPWWm0PWBLwiaKk9kdVxzvfn171Cu9734pP/AE1ytQ4EawW4jaJy2Fd+ONuIcyaz\ncdBW8b0mLo4wrBnWelu2W25Z5rjUh67QC74e25VfLAdJ4FavtJee7/E5MyTRYaeDDkZ0FSLeY5TS\nFmpcWDa6lZx56A6NF6FC0Zx95MltyOnnOdShXUs/dyPWSkpvtuJhG6Rrn9d8Ecr5mUPH7FUrvp2G\nnjseNl86H3+hziB8esOXD3e64ah/C9+uR1TUtz7s9+3pfVFfmlQkfRmW91LkFzvUyG09UpfG+OvN\nrRzn1+Osfc2611HBxYmHkPkarpDNlphSvSP695p2VOZkMaNe+Da5QD42LwnYCsWDBqlT0b4nzdaY\nyZELNq987olIGuu7EcnxA9qsrLbluaNqOtFx8gglt/shhTTnxrnerWvvUJR3q4Ubq3xTKGmdGeem\n0INZR9nim6jPrkxcRvnxbKFKg8cGTBxqnbnCv+V2qgyZC+o6y7xXyQ2hSO9UntOrvZqbHYJNgk9R\n+LkeUlxDcXi3B8aTGqGKi7VDrcStiYrByvxJUpM1h1xidYXZsIZXnXVz0Q471tFceMWytzZEW311\nDRnQbBOnRqFJJibZqzlcKtaH24Ls7VzfYhaYHJckVrPzEeDRBZt9/O00mNZbAcMSGuJ5z7/qkdZD\nNdmANXq18ghKraami
 9ZoGOJmxJcGS5xXO/8ADv8AypBDkY/qUX8geF36MPMd44MUn6EHeocd+5XV\nqUnrUrvPnJP3fO853nIH5uuiufSum4BqD/tE8DkPWtqphtCrCbtFEBitYt9Rdp1IXMu5OzhoOn32\nol3qaC1+Pa62VqhQQpKe9PLQiSRkvKj2giPQ1EA2RkkJlRlPwVpUxG7zi2+8+JSlPxl37VDCyeqr\nJmLNHl6zLqxGv3P+D20VZQ+Hzj33q53iOyJDMnP9pYMjr3jYsms9XTVUnp7xXweKcKkrsUajtId6\nnqupcQ02ri6RVJ9kdoFJdiK6Ejo5VtBilnezXXBtoUHkOQB09SSJZtl6wkpKR0k1CmOLJRJMfgmN\nEVEBcelfxY6hlnaZj3CXNVxdM0Ts1y8VGKeVS66aPl3rnWgjc8OUY+cu559xxOeF0Ss+LrQUhyoT\n/EK7ylateKMqu6wLttdt0nHLlFJ+Y5cwfYaBaqwr7e/Pt78gL7GfipYtwFbC4y3+f9cZX4/jvOK7\n/wCL7noyOJdY6nqfqnrbylciK/1hwFE3f8WrlKhJtyNBgdmuyqfsRl6GYD7DHnx3aaOu8l0LYqmR\nilqvd2WwBvPyBCt1nWqcUgza/KYdU667z6d5z72n1uNuCL6/HaaEgrG26Bfi9IResqVz6dWr7ORp\na2FxC3V/JB1m5BibE0cRqFxkAFWCtDEszJLaEM8Q6qO31SqjbzgCEJm17QXTeMmWHK0zyvA5Tzsh\n/wCIcUn5WBUs+Qz7MEhIs7haG66FHyVXCkOW9kVBtQ75HYh8a7AIOTLE4wjoElLGSLBAkTJDa0S+\nsQ1MjKwhJIpbJaQwspL7NJv/AGqT374rmXvmzsu7wGzQMvIkQm4xR9xxuwKWn/GYJVMxkkFkQruY\n+3sajEuS6DJWzUUmgz7lxJ04zXLePkk4mixP7Sy53RLWg3jclDpUUYr0uj2P+skXOs9nMT/rxqPJ\n
 VxTauOpeZU2tfHuohCJxBEunHo61sOsONrX9ATA7PgB49KsctMSTFlHwI1IbWqfOLWBqgXBlYCnn\no3HbtcobDlMrl2UMDanXmqxW1hpG55GXOw41AtjfXc+tLyU53bUoK53bmVoodycZRW7HDeB2cq0k\nkBFm+GQUoYqSpXF/d35FdWlY93immz7QshbatHFNVO0SQku5V1iemMtSewOLX2VNZ4084v8APVdS\nkuJ0QAIk1e252WAMd53nxHO97g+fzxcaCDmDZ1gPxB6KsQkGyM638Y7Jt8hciRaHGOg7Eyw6fhx7\nEHGFusSIjSoHFD0xXhziI0evRnIhLWr88kA88vq1L7z4GFSbAVvFhgJE0m4Fqskh/iukLK58Srb8\nGc00xOgLhci2yd1EIbUy6CwYlBS488z8FX+yCHuEqldgyBmcz3RfGeoTltthpiW8hH5ODmC8Odll\nZOs1YdbQ0i75ibDTu0a0cciUuRHjtAqZET/Y0QfywzXjrjfHo6uWQ/xrJR4k2U1SSKLWCPHdQ93q\nUpsGgTP8usdrq1mPys2Wwl0pdQLMq+Wdah1vuExA6+XWucR6SZLozS91crA1LIJinT4q2go7NoOr\nUUtdjjOxdRu0ZgTsFnGOi9e/sozdszqTC7Lo5tNn8/wp3TuR3wDz+HKiOjuIZ4VbQ+inWd0PNIxE\nATouwyghGdVoh5bkXsOBOnuccalq+Z4KQTlv30oLtcjs6PGtFaCWANimaTr3ZwQUfXItivKmWrQc\nf7MzT/qqxR7inFrXFYRIUpdfmpZ5XyjjECU6OtUTospF7IGMkJcga4+7czfQIWw55ZLiUk4HRgrb\nOYZxz5MGSkxYmKWlCp9Asda4+60lyFfjA5UeNWrryXGLVOTMHsTm4/0Tzp0kOfhJiHYjNbpD6KgZ\nsNYn3Z60iZr1rssj4iw2JK6ZuFwDO8uEQ18Gm+2WEVPaFU261eaXpkfRcnsdO
 mR1cQptX1ZjuqT1\n1Ljne9ko6p537s7Q2Lo88vx+VHlJe5OfU3ypagsxZU3JowRA34nCUN1dlx3+kp1tSqhyRvw4ucw8\n9zv1iTJUGRkPq8mB+SatSr8Nv2HTxKjbDseQv6pU3xSlAOL+Gp32tqmdQ8HthccuBsNpius3ij3d\nslSqfK4rH1Em7bmtxzQZLemvTIilvO1SZNCST8aHZ4ctC1O1QC6dJ2+2Iajf2vefKRc5dcJCM9jy\nbPQ6hAy4A1YDpa0Sa8YGFD1QLle5Y++HkmxK+PzYL6HG2+/QazzqJkIhDrcuTAqQKm2EoPHD7SPe\nKSLZMTL1oo7FJW+Xv9vIy6ZpyYzwDTE9aSVh/OSmG+zLQbEyXzlesSy9GJRo0NSmnBNxc7Dn1NHY\n3B3bE/LiiauogSmFZfF/XsC2nRXKzpYs709mNZSh6hGI6ZI0lDVAmzIEoVcYMuVHvRkW4Yy0FfB9\nK0Uq4i1UurlipKmGa8uY2pviCS0/GSKHettsv/Kep2TU3JL3XYC/uTXM6MWdJ4SZxYRnenTCLIJE\nGc0uNKiqhznG/gi+mx641xq5liXmtcLcl5ebbeIVs+MVn2g2Oik6DuQK4p0bz9Wb65Z6EYqkxuCp\nHyJJ4w4ae641/CkuqbjS2uQWuL4zA43zlrKA5EC2jJ/BW5a7TPjGhYhsj9uwkLVJkmjC3UCsvv6i\nh/BbrZ0ls3ulLrkGh26VxrJbRIdr2TtyzGc1IFQajYdSR9BF3IusT7hYZz8CxG0Rod2mxJAS3BLU\nxMq7khntOTBTKPVyuckWsvYpxp9U2WNhk5I+vVOS0zo5sBUAF/vpGvQo+9npriJzx1mRYLdXVDtT\nYT8U1RbH2wZr98MnXDIduKWKB5UY0HON8rlYl8gsDKg9Kt1Yt0QtCd+8kNmjH/8AgnvU9rN/ICOd\nGV2y8mN6MG4mwR3G3EZ/L7XXawLcGRc/eITQFXtXbhk7
 9vDMWS4VCWSqAqwDyQuYMfahuc+IeUwr\nH7TxdYOUCxE7nUcpAVeHYdTjvc2R+sSK+CyM0Fk11KmYMSS80wsTz7ITv2q7zn1RJlQXIGrWKNwd\nrAbvz/IcpOwhA2mpljrauW1YqiDv4K44haK92DWTU4vXMnAh5Dmt5cCKV3Rs60ay3DzQubE40TAl\nz8fjjbfVJXEPFhD0czWj/ceJlozprBzBTQD+xmapIGajo42HW/TEi09f0fObi8d86XUy9WqLVcaa\ntJCcmmTmJ/4JA1cGpLGIeUocTbXyO87Gdi9jfK5dTTk6waAPKzf8fFT+sU+IpMcJWg70Nbz7FgnQ\n6xXdF0B+9lOxlWGkJEyI7kTvYrkHQCg1tmuVm3JJVkmC+NW0jEZAaY91xsPntgbmZvGj/DdWtIvr\niJ3OSGloVXrmzKbngHgTJOqvxo8asmpCGaLaXfkmn2GPzsd6OsdoNkEJhagLI/HYVENck57K58/x\n2xQExbhZqs9mmp14z80VMD/GBtap5rpgJxXbHVZtd6pt+bKzbMy1dI2mwiwldtlysdjkdkOdVTm9\nLNWbFaJMc7MxMTYYhXAb+D65FIB5vIkYqmRHfiud+vxXOd+cTznzv/MariHc9PFhq5E0tWyMO3um\nhIaI+am27HV2Z+H5vts+ywvNQQnPrA/XMXn2esUjchU/A7rFK17zEDaj2TO6Uo035+A/2NRyKhUC\nZaeADKBw8YBHWEsLJKi4njU2Z0LSwDzlqsQydHr1bv4yDVjYuPCQcFyL5Vmzg0dn5OQ4qmSWJAzP\nwIl6W8FhPukJr0RoJ/VuOx/5PEi3e8B1hX5r3rwKsM3e5Wq9TBsRbPyjkOsFLVUW40mUJVE6+lSn\na/HT2NMuZgYuJUwFrUNohaA6+KRAjkDxSKuNohxnsLTR6k/51XyCJFjq3E13TAwHhS3xXYke6wbU\n0/ppdt5jT2lPQLfWbI3ZMygOscj
 9ad6y2pKJpEasboBlHwZoYd1PRFGsblBksswrZh0REmMW06oq\nrNLi3APOpYLMxJy0WQ/Kzgs3LiaVTOo5xphrljwu7Dkgot3BorWvrRHgnTSekbNV7j8nefG1KOUW\n2B2v6Fmch2pWXil186jrdcNyX6zislhI21V2otn77KJLI6PbefAe73+sKqu7gLnHiPWFpyFnjnYr\noU+MBwqyGBt2Uq7cVRQdtNOy6+bAxQh6PwXEd5G7EFqtPLcUrcaHTYbtskvVj+SAh0ZMrqy9Eooa\ndaRM8DWjkoiNu1d0lKqkQ2DgGFdLYG5zXYE9uFqwOI2iwVec/wD1wmUp1IdPZZaqjE3P0PShCZ+t\n2Ey3JWtfRX2O8kw2Et1VTn+UjIrRlVgobLanKAnioVaZh8kVKDLWDpsGJNmFBcR6y1j8sQjFb5I7\nEYT15mN1TSGUNuuMp+clMd7W7FJr02wVcdaokazALAmzUcyBQlxxC6foU2A5aqnDtERanEOdV1Xx\nC+J7x/v2rcdZXWtDtNemVsSeuYn/ACOj0SHZrAOsQoCBslXmkuPF2LVIj1opFOUK2A7LmYIXMZev\nNHUVLsmwMG7ACChcuusS0OQLDEJ0gizyRrVprMxVswC3SJ+P0L+OhygVdcXfhIRKNpBXeN3P6IdH\nXHOLeB+cbkSEPhC6+h6vZmlVnQtUr0ZzTN/Jyu6vrjqXLvrhCAW0S6hSmZbhSGHC2iRXCBDR4MSc\ni8CLiqxD4RcVRKW9CotXnOypNmaNlbMrXoBF+uZACWUtuoVfKGC2oltjZq+paFmUuv2YdpcTTTGh\nV6Hn9vN2+ZfNXbCRJ5M5+R0gfUpw3Y/q4mdK6iK4nkPjyFsR3l/IEZ1lTq0uN08Mtss8pqFI5HRY\nWrQ9KDuybU711Z91LUW2kP5Jycp7rFqk1+SZiDrXEl9kc6tyQhTkpX4lurV1PXPjMzrXaleZFWJa\nDTohiHVbwW
 qkh+vVPS2igsmDI0S2whMjVKfFK9Urv1Srv1a79yKni12tjNbrmaZU2n0A2UNaeImz\nO1K7Witoq+qAiPzlwOmfjemPfkECM8sojS6FU0A68NOCvkqrlaIUudQGQyTw6X+Jo4SgO1bZzwPl\nbu2W6LHufnZyP8q9hvOXlStVqOpx5lOLjSIjPJkxmLBpQXru11yP1OvUTiFaUFe+d0YW+0CiR1JO\nbPQo5V7VKK9xnT6M52PcwRH4VG1awroWPvhyZ3Jp9qasOMapXJOL0S7x5Vt+/wDljnI9XgX8QaLz\noaQdEbtt/cpo6RbBWluSqcQBSRdxilhv9h/tmBzvd2DjnAlfkxLDmR6SRjVS0/VWdGXOR8tnuqXQ\nxsf4qlh1fIVAguOMZ62iPIpFgaVIrl6iPAFE2kS5Dj7BU0+M5I3dv8UwdVLbx1kgNfQ5ESo0lT0Q\nhHV/JEk3wsueIg3cf2HxbhCH1niWVd7+H/R3/Tv3/X5ntyfr03Rq6gKSjTJMJ0He4N+H2ipnaWQo\nltTARfqU7FbqtLPW6ZTMupdDi3ncOQVFzRQ7NSlz61k2suFMVb/HCrvOdQiTPiOjtgssdOc6KEIV\nxRSWoSLOlYXys6mUjSS9sUN+f3Q1CH7uDUyzGykutjOqlIaq13TTO90bNJzdVoVemPXem2+3A5lO\n0clJm5vdHGplIuEdz+qJxVDlv8XmVMgCEa1qv9wvvefESFJ6zJ/L8IK+/lf0Oz1N6jb7XbWmJY4r\ncUWWmIBEybnGCM3/AB8X/Dfb7e7qXes4wASL2PW0yJVi5D/CoNfkwPg2mw7tJuVNJ2A3RaPU6SOM\n7JEQZD+kSqZS9cDH1zRjB1MzLxMhUqgvQ1x82t5FVW85Txou42CijhcszJ6pixWCEsBolsHPy9KZ\nGBbDf6YVak10FYXJVVtoFwHduPsmq6iQzDJ9cgG+MLT368+Bj5CvyrQPgl4MuTFW3IfYT3s
 vnPi3\n+d+Ld+3rUj/xhHmb9RH0uxnuOL52lnV6TV4QgxKLZvVuDk2woGAQTVqs5+a2CnEeRsysUj5IzsWL\nZpUzMa8UfB019RCZnMWYUj47PkC86phWXWK/XqZAP6O4es0d5fFfVLscRI5bK2KmOy0yQKXvkiCh\nhP8ALXE7E0I801DslFOxo1NngZlf1rRaaQtVWpVzHzDh4GpnUy7fYOzRIjOfGJhpel32Ma6UgqXI\ncjLR8f8Aub6xIWhU8khpJI6w0r/PBMZzINQNlZlV12LMNGL7XKJAvGr2q5koN8PVx0X6iujSAZOV\noue3cDNkXSbRFJa69RhCwegTwFLq8oZoqN3GTgtYj8Uv4uOrrsAOt7g/jojtdtl5MS4dQF1qSc9C\n08O6rT4dklTbYDSiUVqc5bYKtzEws7BT5VwqcUhMfzqMpMnMCv4ow/UaqtvQOkHa87WXVlqPOJCT\ncOcMe6tvvxSUK5UbHwDK0qsf0rril8UpfPp1avnVL+qFu/bnx2bWbFtNWQOsMQKbnO5tj1hEkJso\nZSZByiaXfZ4vNKZUYkw5j4dUrSMzeQ4Y/u2z2dB3fjmYg5DgsW9Lqt0pHLaJKJ/C8LXJTNVx5c6+\n6ETppiI2rvW2XfuziP2PZZ4zog6mf9EyfxyPhCArnGWFL69BeV8rq2Vxn5tmqL+fafATI0zPqaKk\nD8et1g4Dy2n0iLctXkWNPGfwpmsNrbmyepekvdV1KvryxkUxmdK0rghFTI3vTbLmw8pT67F3SBnX\nE2AlbXJUWY52u5XfLdJq+R5wDKSbOCGq1y9WWIZblzCvwdWpBYrpJOKs159ed6RKvMynz+Z1wtBn\nZ3YhrkXn8dNKyKbZ2pm40rPQx+zFrBLjsPSHBgxbXDTauo7Gf70dEXz5RkvDX3rrYFyWb/Z2Etag\nZS6L1wU4mHZ60f65T82MsAKqREMlw3LYKM5gIW+XptqC/ELcaXU50S
 zhzAyWKI17O55RpgfjAnkM\n+Gio5o1BFpH3qEaeDH6/Zqq3vmVg1zvRNQWm37vOG0WxbvpNi5JIzSDjCVfc2hP4YLX3KSbOjOBd\nLsMdYe50k+iWOZDiNVoUeS9nNXQXtI1/qiJjnC83mXHo3E5+aZbA1c5DPaDW7E3dEVe1Sedq9yju\nIBn+oQKc+siKPZ+fcx9RxZ2MgRTx5duv1STYqddLZpbpISrUonxoralOyXK9xngujEGyudtvuvZf\nbO/Hc+srKdHp1n/h2vDtFtx3K8sDZdXC/Jzg8IwD7cqlZa+OjBVGi8CzkJhRudeq3U2swnyVA9cp\nRI7EhMIiJov0YS24uR3FGYdZr8q4zF2K/mJg9df22SOVWnc+sMe3MDL6KkYPAI/Jnn60jl8oBUKy\nzIi84XnRlvpciL6hLXEn34wfPm+9+rne8S0yt3sGOhrv8pthrhFbfanpNrGfBXoCT3gu85/okWbW\nOjHSoQiWSkFQ0kTVFocZixm6rYZbIU2Lbn0rkpyZZ8xqEqxet4UVGReiCL9xKlEBLLFlR3GnJrcn\nD0rT3jCVq+JRxltM1SViZKeocbQ78ZaabTLlto7lumKEvuOD4Muq1ZdJtZ85wRn6Sb0lrtl5J4t5\n1z4w5IST02BJatsFb7Xx2ZP6hBwzFcjXuzR+ovR99C7iOU5HsVIe+ZkIp5pqz7dYYcg0Qr+r1QrA\n0KExG024wvlV3mJ/FhgMyunCWBVVxSMboA7hiFShHy7XykwGA1rFyXNd3/lfPZdo1usnQONRbtIG\nAQuYfCt3P2iU2ymX1AZhHzH4cNwjbdGIjLjKAUjQVW2rmM/zeAN/PM3K2vQ4ykrXyTFXNomL5MNt\nUy+3hFmPkF/9QZcpL8i2m4aYmu2wMrluottkXXPiQtiO91LrKf8Awao8lEljn/WiF1XxtlqNx6cj\nnzsla/kaNNd+ARJB2cimWtx2Dnltb6NqZ44PB
 lyYucghVIkGIzUZ8a3yVVjtwtWktxrzohmOu3aN\nL/NMvpF50Lo5kPNtl9hXuhU28Ils1+X/ADMXgyfvfC9Q6gmn7FNpdWsYhbfFy0cQ9NUvkiQ445BQ\nrvzLybN0qVgkQHqNf4qVY8xHSy3Adca6Ma5Ibmw+M91daP5fJXFK479eEFc6tri+rjr/APHNSlzs\nfiUqsDvKFnCCCJnKRYmqob0aljkNoEV60xe4xcX5kXoTKo5A3ZSEYpbOxEXApJk/LPNRYLaPLOQK\n9W/KhSP2BklLotMomhs12bbqWu3cQ1JjSRiuo+KIDmnc1IioALSrXaohCLcbTIcpF4MjFHKrHA2H\nXGppSzjYs5fzNaTKszG8GZbIUBRLUpPc1NudXRi7HYuek3uysxnLU9la3EVgQcAsyMYrdpci51XI\nr2h1ulSbJEAZol38GewevHc4i/G7pTkK/wBxgEVUfX4HUNaS+l6waCXjkeaBYXGomgWseV/okcj3\ne5PWSXAs5kHKsGhTjVEmbPSng+kPVmwOT8uBWczW/IsVmJffMCY8DCp0SoGy0OTmlwzA+zOxpoo2\nxwAd+r6PskxOuMpUy42lHefcnkPiUyGkIVGWnvcLJuRLSIWPQKv0edGzqarv4GuIb7HmOtfOy1L+\nHoKC+byo/wCLnH+pU7z8yGW1fcpz7OpS4/2k00dVOm7DLsZNqUtD6XEPIoOhf1bF3xQiw8Cfn0Ya\nMvERnh+23FuSuzPusXayTUqpuan7lGP1WZV/jYzj72hxmI0kkzz8FF050cwkeCvaSGWipfydkV2a\nVLGSA4et/W21GsZNcJjvclIRejINKlgrjbs3FLrFpr9pNWG3w8lF3sxZR7gK6W2V8N3svBiztCt7\n7zVytK0vnrDKcmmSvxZKe/2qEp4YicgQbRO0HnX7fEY/HzryfkpHPvj/APT1/v8ApDX9quL+vLBx\nK+sp45yr05qIlrQmCxa2
 1x+uEpiVJczokiVBvMOWPd0WK9xVD1K41OzUPTA9lET7dXx7ciJmt35f\nMJpt1FwMct1JprRG/BplXeKuONE3ExuudWoJF7IaaGOtKJSW2OuyXXejk95zMY0slbTpsrHtGzsp\nHUWb1P4n49YDMtF7xx1x6VLaIAsfdZtnmVp4eYrMuA+LqdiJqczlwf8AHe5cL+R9SnC2yM2cWlw1\nc60/1Tbon+ZLWPpbyuU67QavF1isSTcVgSRF9g22TCe/qBxlg7XH3JNBoX9VAujcshdMmyKzWK12\nmqU3tmsJzq0RRv8A1InPwF5TfGbG5cbbNrBIIRjnz8InitOcK3AHeG7hgxiVJ/x+354UuFXI3h1i\nsCsOz+baC5STXdFK159yMNsUUtLeW9JUlCoC/wA/yb1MX5Nkq68Ki8dU4+20nMjyh9p1IC2zMfnf\n6JV9/HlfT4yrve9aR34tz7OxVqc4mFMLD69WBNfZudpdN/P4aPvjoj36myYq0/EuPjJ28V2FOj6D\nVXne2GlSUyAVnslX7OvdoOxYNBLlX6hW9UCdyibbrGBseTW0rOz+lBR7YZyD+Ytl9QkcG41T0Die\nYQ5Xyw4Lc43zmRXuOmVXjkBPmRvkM1YnuNFdQblFMvF1O1XHkStl+cj9dGIkXaoMSZnAROFOqhhb\ng7HrIQlksDWZhWTy7xUax1wvVTMOLLlORKXZXmolfAQXH36JH5/mxSO83H/gNFDM8+sFYbVWFMa7\nI4merz7bPkCsZcl2LVsqPEJ8ergQ0S8Wiwzswy04yOt16z+k8a1DNrUvWMibro6Q99OwTMwbLUqB\nfKfXDZEFQijHWuzXer+AdGu9U+ZxpRnRiUSoV6gVK8ky9vYbjpfb/qXEcHkpYgjKbi3pgu1JGywy\neqeOupb+NscfcaRyNFISXlP5o4rpyt2pSZFkByK6WRxzqkDZDnxEFLPyS9359339qlGkzm+EQdbY\nJFi
 BOQ65+RtyQpHanY1hDGkVlMeZMhxe/KvCh3OilqzFc+WOiw31y8sYdWPzRuOum0mK32JUof2Z\njUESQFYsZamuV+fnV8RcMDLJaYHXGuOAL9rQ5wLeLhNiouE99pNpFMsx7EOfTDL1tgnY6sClOoog\nGwV4ZRR9UBlQulTVxeX5rn/kYkRDcSETRJkujWis11yPMZNxw7Jlv5v1TDQYMm/He/JZQpP6niuf\nBbjkl54aNo8aScITZ0ciy5wXyG6iwA/ujJFS+yRcP8DdYGMsM1OFUZTdepYUG5qr99cCGnpw6V15\nxfzNdYNZ7N1Shh3IfE/65RCIA8mzZMgVn8ye2+27F+/ue4TcNIfVfMx87hattlqPRPrl51SsqTKe\nOQXYTiBkrsiep+HHW21oDMCE/CQbkfldio4htxxSkSOf9dQ7wXXXHO/WI43f67DT1tT81LCHpziv\nguvFjvyEMA1JBa9ziPWpbzEia31mWtfOcdVz7uP8SminI1sDWETOFFKWScB2Taqe2HtEgfz6qCxH\nOw6xF72NX/w8Cw+R05lLiQLFY6oRD2nOqjxr5DlToHxxyqnEycvYZS46yO61YYbXJFpGOJk2jrrj\nVaNG/gwWyzX6UUionapdI1Cr0mc8lLBxuesvYED5FqQ6adrk8jAJTxcevTf8nZc4zY5Is3oYIcYB\nTRCh0z+NH+Rxf8pxoQOpI6UqbMflQ3PorrrPYBN5r4ENKmMrCM95TqAcPG4VLqIBsUXCVEpC1EUQ\nlQS9MtT2hZFAtIu6ZHaKSQ5XZXO0Y+dosqqYrSrpLtUiIt6wQCC86rfnTUy6I1Mx/PWLv6ANERr8\nVcyRlAtT8ull/wCpkxnpVOLlj8N5qbWFDpBmv/mgNC3RxElCi2UMQ/GmWn6L7I+rTa+dd6XXwdR/\nr8FEZImfdB8EkxFBkzT42jiwiDl+ioTLnSp7zK+oUrvOsyOqIQ1d6rjqOcV1Pe9g
 PyIEi2j4Nmq6\n1/lUHj80ShJE9StAdjnyHCZQtmK38RGZR8hymUqWFiahGHpZjpjcQ4gjHbRyESmhlSLNWLd06AMi\n5QOrEDUwuqs0+C5oxIgrMicduzZ9WnItmtgdBw3EOqaQL6iVYJE2M+bnh5IWfCsMKU0aEckjYUR1\nHyY61IlAiqoz+/VHlTu7TcmTLZmDs7Hf5A9OkRScd7rcSNOYMBnI/WEfifoFTN2aZXKOKryHIUqV\nEtEIMInDiCzN12T7QNXREip7V9bOUCRSNlqOls3XHYkOPHqtfiP2W2t59XsgP2ojJ1G3W6oukrvY\njfyKSbS40827xC2EczqazFt5kSoeeqTsazCQIt2WgEw2GlzG5EThNhP8iMUlipN0rcewsjGHufDD\n60oh8689ofeMP8QrvRgEkXco9dH1td8sS6xInEZhFz/hzvedaX1SYcnkKZMjcjSOQ+Oceg8Sl1au\ndz2wpFT7RWHq8XqJxddNajXWYk9Svkbvfu69xmNOnO/dHnyEqoNpkDZY0rXLf2fXSIJM6VzjZQmh\nnhcow8/nuhfzX7CwNz8BaiyivxDDzb0c/IHdw6/Db7AskSOxbHIUuArPESZxV+PEizbK8yclQGVR\nuriF/rHKLhTykiG/ICcASe+m6eh8c/EhZ6Mny5c6RzvefESHW/gg0+2/HbQeTWcPYcWMMRB8atg5\nT8YoeZDsHu8IyK1EcZ0Hfo8txBB1TfHluOdeifYun69caw4d2C6Rof1MnJw0e6BCl78ZhWKLIplm\nkEaJOEMdIfx/jhF36U89IgWHRONoslM67GJkIsNlB+eyfhkTqjYTk1qbwih1v4ENzAcsvWxpmKSC\nuvcqAr62OxVgxabTCoAcT8l3FqE2SnFCK0Q1XMB/VOL50W/znRz/AM/iSOdjtO8W5E+75Ffjrjyf\n50J1DrslXBClfGQKUdEz4FsATI742VR7VDnxLbSp1bsDMR9
 hEl5SW5LauufjV9RRB6E9Xbl37qpq\nMeDE0qJEiwrMcfS6qY47zKxDYQTD1OS/MuVYmCk/mZUictCkeZGu1YXb7GLhP/1NfBxhsc7JskhR\nKGauEmWOsw6U3MRWyMZuNa+NtySqZ7b8Io0uRKr7dsqN9zbQYBqTR7F+IZk96Oqi+b7n8HeZeKer\nOXwKzHk0+FIYR0FW2h+hf3vSpNiBHuWhss9oN1WUsvow2uf1x5T/AMdh/n+SBM37WwhBXQUOWP8A\nlXq0FE99SJh2XTOvPP115r4FNnqzMuNLjTYDUB36CQU3k6/DJU0jVhDjb0KR0gMLBjA8u0KiRJZp\nt+umJU1UhmB9jyxJT+ickjBV3h1amjhRCx6DAYlFjjk2QolG5z+zj86NsrgifauQ3meE2PjU2O58\na7BX8/HB+KixVfJULqlikx3muVTkZUOMhPCrLjbkdc0eQsQqLdhUaEphdalAroHsQroqcqLG6l4O\n272SNcS4qO6hTTr0fsIqR7zInmrZn9uDyYhGiUtZkho98bnTES+ORqNb2ofL1UXaxO6qTIlqr8qt\nB0yyx0LG/wDb69/72U+n9jrX4/uq33flE/T6XX7P68R938WH+L+8kfn+hT+T+Yd9v8aX/M/HcPy/\nzE/+pH+n3wft+3Xvz/ys2/8Ab7h9frcvyfy8c/8Ae96+v8Jj/ugf+pF+z7G/x/bN/wCzM/p/AAfk\n/wAb59/4pXyX/wCjnf1/oIH4/wAgP8Xy3/b94b/vBf8AuNo+3+xg/T8Gl/T8yP8A04f/AHtfi/uQ\nn3fe99P5Zf8A/Lk/P/4q/wCfPlQ//Wkf9yP+7n/OP9fkb6/SV/3Q/wD1AP5f5pH8X4SP3/ST/wB2\na/k/ubb+P+9j/d/Ovv1/xJf1+5n6/R74/wD+or6fUX9v2Yz81n7f8lD/AG/4Yn6/y4//AKPPlr+v\n+21F+n+cO/h/uCP0/J//2gAIAQMAAQ
 UASU4+ySkzL2dq9ZTXhKedbaU86h8lXSrLlWsTMq5KjuNP\nhIjKWUjeyGY45cKWAiceauR6UMapmKWKuiwdBIQx5YQ6KY2jWiRklSsUelsQaeAAomJVx6R3nY1U\n++rWSfYoAhlgE2UdMUQg38F2Z2A5HvNRZRPt1tlSGIuxz3H6zpLyF5+VmItGGA7BV8Tsi850R76r\nWxG+nyaLUp2NZYnZRFSvim+/dBe5xHFt9+MtLUtPe8+fXnfk+L36x+NfZ15trs11tfPqlrja231y\nFIjtSJC3pVOaTJtwP88ho6MJ1AlX7BBscL73mEuWJtLyy6FItU1k0QUtiJwgYiuxxthICi/5yDL4\nEl/M+fwec4Wl9hPsGG1tC/5Lqo6FRmJ57sVt+w8fU4Vg/jlWqLDUu2SpzoYY+R+fxYkKKQ1WmwZJ\nvSrQ/BQs7aCVSzG3Tma5nlbqbc3qm16HA4crm1wQ6eZlTz8Bb9laGONJizIzrTbb6J/GG92nJrBw\nU7CKoEMIa+PloAeO5FtNsdzEnP8A6/zz5HjxR+t0WnBqtpWGV0JWfQsg9cD1ZxuJS0SGPxKmr4lB\nR9LXVS+vc2Nt4YmhxphlhZwUMUuwGTbcjJE2ZDdVfz6QJtY4xKbXz7X1fepj7UqU8lPzaaVGC6Pl\nR/loo30+nyS91PTI+CYjySpCq/IciDLYdUhHYvVurh/TiP8AT4tfEfJDiXEr/J3kp2RxUeKp74/F\n+vxiC3xR3vfxDBSnHKQ9yMIE9jxhEhUeQg7HlZ+TgWcdYxUl1CJUyahuEI67Idd6p9ucJI/iKRZP\nO149GOCR5XkOamx9eaPMzJPIDs1mfXUxeRSJPiUmSPHFT5z63Ff2Pe9lV6KmRZWoyntKtTEuJFLW\nGVEx20yJYXKa0P8AjA+FBTEmfjT/ADmfsIqQvs9pXGqBV51kNdGsDWEvp6qfUBriSlpsYCVXZkSy\nRdFu462WgCMI5
 zKinSJJ2m1NMTh4use55yxuwZxM3vfwAXPrD6E0EycxmdvnqWVomL1nNhNob5x4\nojnW5qFd5Y2vu+ErVGCR47g2K2GVYRBYHQgQp1hnqviE/alaEOJsedxZnRNqJV9cR6MQZ7zn3NR/\n9dwrEUtVMBfjjiElrjXZDbjikD19VOGtKYLVw3W5VVNw7W21BU18bcW11c3qOLIccV9Uc448hHJk\nv69hkXefFTvvUqa6lCpP8hyVLTAEBIsxNE6JlIbciSm/khKXmS38+iHB0qObYuc11pj+yW4/WA65\nbMmGPjRtGJQYa0lpMEjDmzJSIJidG4q4Noaml19lwtDkRYxDTI3OTtTiEXH7Ka7BVEmnflLzO4z/\nAIHxyBF5DpVRgOqkvJ46v7+La4rjyFNpZfWrrbLvVrg/Vp0b+VNYDt1eKqVx5Mp9trrlgbaQp1D7\n7lYYVKtSX06aBpA6zxwsKdm/IpOOTeDZtmvnCJN9aX24Cv8A4/anp5CH4i0ut6Fikqg0Kqb1fmyb\ntjcQ86c+5nk0nxr5oGgBwMEG1aLZPp9SHjJNpHxrBBoxmVBktspbT3v0+fdz5930+HK/GNJ/Kcoh\n0IRhmY8djqlEAccwKrjkirXF0d11PQPeJcGdR8JMfYlYhxabHn8MpID3aYOkKabV8kJ65x2HI+5h\np5SVD1OcdEoQiTG5G5HYccdcjo7HmtjxLVzSqPRlwmocT6J72Z+D7ZrLffliDoIx0yTNNPjpH+Uy\noQb7pgyVGFj7fe31tSv7E3KE0FL0OtQ0jZpaO0ykQNVPk2CyUetslC5EwkLT7CVlRcnJ/WpUGvNr\n4BhRY8Vr8LjUttfW1ML+fhh9+dYg87+KD34sew8mUNQwqI+00ns3/XjzfxYS8DFKutgH9lXyBxDt\ntr8hyTfW4TJOwWq1pqeYoKvRQZGhvSfRYdsFjFwO04lM3pFsI1S+1yGmielFCokn00lGi6Fv0s
 ui\nyXLpFZKf9eWEpDixtI1fjUmBWJMqYBg/eiGN43yeXrw/lqIAjzdd04j3r9ulsoiaFVn1sEh8pMqY\n001KhDbHHjxrJVCNWLwD0WKlPOaPmwrt5pkfhaqyhf05OH958mQeqdTAR+GcM5xw5XYRqG6/a82d\nCEw9khpZQnnEJT8+nPkvv0TI5xyVEj8SkwSii4dXhzrVNvrqJ0ky6jp1+XxPXfzPd/jfRM1DauWk\nMmbFh5kdrLYEZEnKs4GVDiOCHZSxYBLDsqdGHRbZIflOlL2CYhQS1gsE6Lkc2wSxdIp1fafejsqk\nSWXowFxltyQtxxtEN5TnB0nnOtTWecflIS3I79qpv2fGi609fnIeR1X/AJH5nGfkIhyQpTn4OlpI\nyaiTUR012dnn8eKzcqHAVOvIaQ5FkaaVderE2vis/wAVGEoES1HM9QJKC7DELU4d10RI02C1Y7Fr\no4y5aNdb+ENVPD1mdhCMDzx01bkxM6TFHkyZdmUCuGh8bETpkt0Y9nzCW545/lmExyqQNtkOypDU\neSmVVYa1JhXKAuvThcxyfVoRmEMQWqNhqTMU2Pvmd/3QHHqE+3XCgRxh4qO4lCxvFdejo+SYP07I\njp+sqElxo/RiAuZT9EjHnv8AhOUnjX2/dJVKSz8HRZF/NOo7zvFf2F/JzW02xbraurlstJ7OdWto\nf2Sqqh+G7SyDadYJ5mNkKsNZsECKThciSZcpppsqWYSmylyJiJjuckbFYqtl1YrTCxDfPkoBxXw4\nJdZbbjOrcCxltSh60L+cQz851PfikJVx2MlfVxOd+dF9Wroj/RcP7OuRe/bKjpUiK5+N/noClT4q\nNWfLSoStLOdhZIam9ThWcpam1CTSXDt9YDiKDFVZC4wyr7XpMMhDVWJdSlV3TR5RiJL+xWnmX0Bi\ntmZgxLRpoGLGlTZ9zKxGLqDmxBACyMRqgFZckp4J+duY7iOnanO+Oiwsz
 47WDaukw1tWyO0UsFfF\n2gNJbilRT3ZQUUSaaHnwqiMwbaoGYWluukaEPinoeRaVX3to1vPHQBgwDX9hAYptUqJ1SpjXW2+x\n+OdkM86h+N1Hy00QNZGmbvYM4kwZ0MpCkufkcfY53k9xywTh6I8SJ17nVCZCeEmpzxO6IW8j4zDk\nSFC68tXLJ+IRAz8CuAHiDvyqg1WVL7JpPUxdDySHOj6F1NUlODTlodpWcDExb71yiXthSJLH/m5x\nfOq6Uitu8/qWm3Exvs43LcY40UdWqKS7zjM5hfx6dHT8jzkqU3Mb78VKa6lTXFdkMoSmU6238KdV\n9rsGSPl5z6ESIYCmBh6HCJ/jSqanvEvJcSViB9WuB2jG6omJaiMB6PtzsFUXewqHi+yZocWF1i0i\neWjUbZcjTQfSCiYFQs+mlK/VaxVIpjkV9qZRE8IIshyrptllhkI7vCMnq1lIvwZeJ8N+vXJ8h2G4\nvvyRCFGYUqDHrMmNRhx9kfWL2GciW0kMdHP1E8zYMnIxOeZ75yuE9oltAN66K7o+VWKmkGVWIGpp\nyaKcR8Iw/wDw8Z43yWxz4613nx9v8ayYuAXiTKrYs0kVa4irKg2TehtChbVeif2Su/G5zqvlclOo\nXQYiFyv4PHfgkYjiH7NWRsgKRY0O3gWUtM5Zkkq0v0/zLEhwjfncM5D9FFBY+fE8/GbaWFZGCBs2\nnMRkhrW4VjgAchs7VhpXF/dx9rveSm1/Wej7EQuqd62JaXwxYamC+P26RMdcfvsjrKr2vkGJoSeP\nFr7D5DvcyMkdfK6RcU3+dByItDkAN2Ymw0lMz4eofIzgA9a86J51slfvbPFuI7pZmUxAzSpqrAkw\n6534V5wMVrD8S7AJWM0R96fW6TRm37ba7YpAIVXx0rSrlJiD9L0YWFhadc2lCrePsKQTaXG7aVZZ\ngHQ8yGRqqmyqCNf/APGWHNtuZzBbbUhrnYzTMhKm
 YjcpvtYJVudWbJAOOsRW3USM8EEeV+r3isNU\ncPFeI+p6nPC23xxqN0hjrECqh5u9Zn9enALgx4nB/wBZsbrfXEdVySnn1msfT5IfSymQ7/0WqqRp\nyqnoEyIZmEWp7UPiVdab+ibLNer11z0a5/SMspa5b7dLRJrWb14XFABhweLQQ3JhDzxVR4wV6j9d\nEKKSN+zNjt8HGfJswDnt+Fsjz09HE8MJ7+Q6GhmxlH5c83uFZs8CzxO9+vC0hSOkSaWW4N4d/loF\nWI82OqAcV8jwmPo6L51PYn8dcBDbqf4LPxQ6Mvs2lVgh16hvwHCc2+CuBNXrEaXFI8nxycGT1JKq\nxiKLFUpoJWR7ayTYrrMm8XhqY09wuw06m31H+8B0u4Cqcds96jhmybpE0UFhbpPbdpzTbUdxliTN\nrQYvGbjWirPHZYQr2n6Uv8J8iuc4LFLlPTM5mS0IscIlBLOckE6nF5HjQUOfRTvOdhvqSqDIbWkn\nUo01VVt3VuBmkr7S4PJEzOshA2b56rzSzZXB8x7kOz+wUjXaJpLN4xqROGaSuxgu/wCQgS75FpHe\nS/8Ax9lM858Ir4n5LLD+yH5zHUWRLk18jXxZEe9Vrfns+uXULY1N9bZj3cg7aL3DYYjxCpBsUOy8\ncuWwJjJUofGbU/n49DUqv3IBn+Xajciu+aT528mXFNp0s1Aq1KvhlokaKP8A0TP7xTklaUc1Tkyq\n6Haq/NGR65dAx4MXs0k09ynOyPgwJDipZ/7VdR9qJiGl/wAtDiCXfuRBkutOSDcGA0S1GoC0QNMl\nHlOuaUUXKz88S+PZwHiONQoo0jzsZz4XFuIcvj7kYFP5zjXnSyMWCuyZi4nyZZv4yZmljxzReQWv\nM+rAJQ6bXgQeMw8ytHCrLqvkOs9fVIEvQ/nOT+cPhOzlLqNgSmGQsQVyl3yoyJbt3qMOLqVoEGCA\nOysSJtWsQZ5kO9GktIUx1LU
 VrvxLDvFDUyUclABtkiibQQzlzJDUAs3iS0/1vr2wEFBJiP4ZHzpe\nirNmzObII130kYE1OLKrpeylTQs6L+Fb7LC8tPoCAnpKPql/anedCyXCIG/ZEVybVhd1fHw/yomc\n51mw5oxPmFbhZq8HrUCNfLRx1ttOgzn+DKoPRACC+fVdWhffKzAJEkJ0C3X/ANZaJh+ZZH58E2Xe\nBQWJpu4TrK7KmvvOEZn1Q+5xbkx5C0a5EgvVfM7rYzAiw5cTFyAdlHGxryuLVGV9nHH+8U7MiNME\n7WHhupvlie+NjdSPR15SQe7HzyutcSJEQeQZy1OJld5xpaXUyILD6bZ9zQvjjE+PIWrnLdG+0fMU\n27KxK3qqVnVoxozMnUvRSqK/lAxh0GBYh/FhxJCKxnYgX3kG1RuEeSWkrsrUZUK1CJK45SuPJdWN\ne+ShhiSix04xJVPpY5aiUBMPsGvS3ldqEd1kAQbkySddtQ34Fp2m528BN3mWxBMWxhxu+RIfAeg1\nuQuOiCdj0eMdzwj5j1wDZoWu5rDu4zbPJNtD/Mpz46DsWaXoaqlbSWTddKv2/wCdAD1x9DIRIlV+\n63p+BklXY62COieypipcksG/y+TpFBL5Pasruw3Qa2prnVOxP+jb0xu1ShVAtAghtJKxGbBeK5Yz\n0OU2tqvrU49U4/OuXyxTLQNGHs9xGllL/MkTiltemIlKStyXNZR08Xhwm5ejC0qdet5r5FpwhtyI\nPeo19kdbWxZAUsbPg3YA+jlkmEEuDrqQ+CMxFK+RwIWGwTZ7F4IkIWjqUK+OxEOfHR/3fP678XUI\n+7hCxCAHxmwnzzd0fIlFwzSBUiZ3j6Ly+80KeeXCmU3+dMsGdi4laDTWHJCg4xK+oH/ZxKnGOpnI\n+kgjz7SJSWhlx5Up0ALZa6niE8XI4n4qQ4rhsa3IZNC3OS4VUWuQFqgJ2OazYDNjmscMORg8mzVW\n7AtYq5
 dMkIOluj7/AChExFgaJfGwgiUoaJmDHq/erDXZFJu0RghlHpmEejKtFUIM3uQPqHbRtPK7\nSrpsFy0x6zYzpMaVArpWsLTfz7XG9SaiMp0KslEmjPeNABMMCMs9VFXSv0awE8S0ZyTHdZcIJSi7\nWEcWs1VFIHV9yvwJ/DFN/kWpdUIh+181bRLwjeiNXh4FZZBKCUuCvt4bU5IIWSGOaJ6c1K447ejn\nZFHgrXGZiQOfXned/wClOnTxHRlOvNsJQYlNLFu2mkj6vPC3EARhS7dW4SoOiUpmPL1rP47c7UaL\nOag6xUojrGw0NaW9TqT/AM5oMGVxZq7z/jdOuJb4GzkABUXk/wBIMFHUKWcEPs/BBZwHy+2xmc0V\niR2huMIei2oGxKjOwZowxCHcSlfP+SkoVwknrK401tpUslGdXHcjNfBZJj7/AM35viWO/V5KW/hO\nYjjb3GZc5EJpLCFKZUyST1TU6P8AaKiirRMu1VdHuVh6alxj/KetiJ4cZLgXaCwoVMikeD33GOIj\nxVOlDdvGdzn1TMmo2e/uyIOsW8l/QAkOBLuKsMU7ClfR1w10PGaskzLP5RZrhhsNkl7q6+2bSQXY\nW5wIyN1JUO0c8831JSBYJrYUZXqgoqVmK7D62WahMVOQTMW1p6V9W5DchvZyw/hCJeUU2XL3cK5G\n/wAyu9gQ20Y+/pe3McfLaF1U6Xf3UFrTcRjsInsJ1qTRNLJfGMts7CC9HO18kPzr+2HHMjEr5Jxk\nOtA6qUQ50RUakwygCDRxMGChMkUx9zEdppTT329T9e/Isbi+tM8QhHE9+aKr83Cwxr+Uo0oErQtS\nrH3x2nSco+4t1flqsrYETK+qMsweqjqonoAKCkzPXWeo6/6xgpiii2i3OBNpNvlpXnVnS+5H0gBH\np9nFHuxiDTXH7AwyglZJMjsiaQd5HakNdaPMoaYMD5HLUY/hMum1Dx1Dh9ZrT0GLOTc
 KEoPGrdmK\nC2IK65YosrPf4nwYYjhyMNmxxW0GbxE7Ev5iL8vBCpWSNE2ovEGWS6C7EGyLoflt0EqMqUgBeLVc\nF9zwFLV/hVXhOQ4sdpPGuc58nAgpRBjE82LKvVINZJoHNCttoG5kYrzMIzHQvmkFng4TMStcRG4u\nE7EmWd81EwsULJWAlYZlr4HHuUS1tSnUMrkucQRu4GEpBu4luu1Z+Z3kSnh0QjgR1TlnrUdT1wqi\n0WWUOKcpJ9uN8n/etTDKFNEa83PliLLyNKWShxOSbtXI3xV3VK+LIXlXUSr898iQbq/yLV7OrjVP\nsjnxjPTS0MUYsatlkOWC3H4md2Z/jVMWIkHJlkitNiTcqXQ4+iD25eLpmOMZFn8NMTPs9ivwKRWO\nt23LgFmAjKXseNOQd1JtdH7Dl05C7CGk8tFbj2D4PvZAfNi/ln9H1tPWygeM0hplvnLMNdR0IFkS\nPk6Mspc7u428LHxkx4n8R5PyJJZ4g1nk+Gsq4gSoDZjH2yriXKw6xod+rT4PTLQqKP2KuIkRjYgo\nzcKcNtzN6iKr9vzqa+MsEINn/wBSWXwHlKct9cfbK21xMW5Qoa4kyJPZ/wCElffrvVbg26vY3clV\nS2kKxWLTEl0o9V4+iXMu2qkVal2iv/7d53Ae2vQOk053jKgAqUVAA2bzqOby4MT0k7CGuXa1WNsP\n/uU/HcoWtGYsTF7GvreSs8QnKR7UmLkIninshr/Ey8vF9ROob4l6LnZXkMhYLpWpCdJv8dyTZrPZ\nei49RCO1b/BykTn+nHOfXi2+J7D+Q09VwfB+vQon8rWM4xPsNkmGIIK4O3Zuc0Ts8EaiVOXNfxAe\n43KktuSx8IKhiAVDNfjnM9hrEWvrfWyT0z4/2Z1CxMOYozm9ILoLY9CZSPzmVC4coN2dbr53V6XM\n7edZgpKaVeO9bvlp+w3oRxzsXYDgtIO42xmJXyFnsljiTrqnke
 XdHmH3rwhTdgvTTcizXLqLq8dK\nfKHWNMKxR+KC4Q47QLPnXwYXOGxo6RBSlvVDFab2FbmnxolmLSob40dZYkSZbwiI98hyI8h0I9Lh\n2qzjXOv1hyQrRoteVO1mvt8JaMadaXeXpsvWbwMmFqb6P0KtBpO0lCLEiwyThZTv89Jko/XG6lVj\nyvj+if8AhgmsyXJrNh82EOPVrPm2xZSFPGNLU4n685/w7/r8ksfVxlP40S3O8Q/+Fpu63Ye6QqgK\n9WoImhgAS/r3jMRmPK5Jp4Ce3LwlmLNcsOs0tQ/ZAr3wfZQRlyEy534O/kp4GkrU/mQJBUhkbQOo\n/NHx2z05ocy27xY5aZcx0jOkwZwwfUavXCkokLvEd/4QLtrRMZXMUkV2OsR+Jvqvxd4+3xKX+/6t\nxlPfHArUhidTJEeT1+B1iM8TzxZdTiVpsT7bKmXDMu/V9xKCRCRCdp9ah1YWjn5OtN8bTJ/1VJ7+\nHjMn7nG2+/VEiVz4uSr7I6kq+F6GpEohcBpVtdDtdVZNSxFiKTh86AvzvZETYXYrS+SA8ORyfQ62\nrtgjh2iF2rz8QfDo11sTc6Rp1J+V3U3h7prWM37X8kzMjcZuu5SWhTRmgHnazRsUIWeQSx/0F9Le\nEFV0vnGK33SVwPINTaY/+IudPce8g19pik4oczz4NtJGhWODKiy4o2DJuNp+n1665xvnHfoktdqy\nG7w3d7ItGdRJku3CGhkXN+uf15GFx5Ev8UPsQ+BgvqvNPYZc1Who7J2GmOJMEaLOkRzUGYzWymo/\nj7oG0xPlYjWK1ScQx8JJNHPN1JcJOWYzGEgW+KnRXkF7BDgRiJSq5XOKMNiWWGy1WhEUvQzVc7Ee\nblsOdV9VPrbW0cSwlqc6R6wOW7yPDbaSptHeTONpckQIpOLJCEgnGbFCpEyfA4l2JaqyCmWyuX29\nqEHLHnManaVT7KqOjn073ieSHvvcW11bb
 ENf5GUfYjnOd51lCu/RSekrJJkzXKGBnQmptnpDe3xB\n80aPR0vNtMJ+nWWjXaPcIDrjbDemb5NMzQbM/wCtYyIP+RgWxEblwI0yNbfPmc2dF7852Sppz/Wr\nXXwQi2Vm1Q9pqoLpQQ7oOZEpB7bNMdq3nazj2Ro2/B3Itn29lPNJ3hCyGvbrBbFbZqBEqRk2e5z2\n7dexEsfcbRFEt2y/PM95qhR1GbTZ6x1YrgRshaq5AR/uSIlL0A7fJo7PhegzxkqgT3mncrrbnYND\nqkNyGBq6GlMDWE8ZZWqPHQjjX4ZCX6A5CmCdA5FldpdXMs14daKksd6Pt74287h2yuuwpcPmTzxP\nZVJrtDjpZk9bV2b1SXZnPiH0u9JAIURSrqGiKn6HX0fF3ZvvwReT/VP33XPuXbd3cmLNeinZf19C\nzJI6J6GS07U9smN2bLj1ghUkFJfbrIGsxYjSuN8/N/03PMAF1jgLpdMnnNkI0+Lxr6d5z4j/AEXz\nn15/rz59fr8NmZEl4RX4ldjfm79GHEqRrFY4o3Ryaosm1TxrsKv6zXqnW9R9Kybpyv3cfBfrXoWj\n10LB9TUhp2F6mzCSsTtWWnuNkA81kxaq0IVdBwmyrl16zBpIR/jxOkuZ+4y3+FKJC+r79ykfFurT\n8K3UCE6OrEc29dMqZLfDgE2DHInZHYqXnGy18cp+/wAGT8UYvsvjQfQJyUZeJk9GVGrhUrb/AOm+\nfdwXnau8jzFdU9Fjp/FLbVxbK1J+KYW71ttxHVdVzrS1JXClcVyZDgF48BNgoXazcxpxps597EXq\nopGmZ62aO6JUeArWKBCnpRS0WXPfi9+qq0NP306hFFs89lWWBoj5iuhpXGqw6HcCuj56IHXIvWHk\nup+K7/p8/wCXJ0n8bRSXxx7Nmmol7IgpVekwLJAPR2ZTne9fcTycmOQhGB1uwh+madVb/Djo+7r7\nf2/Gnuo5zvO/LMaT
 EUDDMhY3forkmOri1yFN8LS4Cj+s32vSrfJmyyKpLffq2tC2oymEpaYi9TGF\nMJV/hBNDX+1nJjTeflhjgmlCIsOTdGxhOvZlBsAf/CGat0DKp7SZdEJDkxTt5GvFLlKCQW78q/SK\nnUQFdjvL59FMoV2YGFmoRjM7FSpRSw1my/KpeyYJ2NJjy4/P+X/G3QlSQubSEoIyv+mTG7z8E3/n\nF7xfGfsR37EK+dj8V8cb62pt5xHxogtHyIZT9SkecIlI1nhmJFqPDhmhWRVSmaQRE2TL+2Y9pzY6\nljqwSlZ7S7GM/wAqOZdJr9giWMaTRxaUB/quMOYb+PV0fKcdkFgD8Ai0/wDETEd45LTzrb6V/O/X\nvJTX1SVErQ5bYhEbNG2uLZIs+rKl9Amuy5HOJ42nrSl8bZUxd8n4Cl0TXJ0KEKMCrBBfb6jskg3B\ng1iA851XPr8+nfq44j6aToAXPhllu1iuz7ULj7bvXGXHY78dyHEYe61CWh0cBjupFRIqJUMRKjfO\njJTLySjkj5LJKaYnlpLyswfmkMvixWXF2yitR26ZZpIdVpsQeuDG6wbNORCEFxSamGjMo7dB641v\nHLchvR5TXe/T5ac6ptw4Zyw1UrHVoev1p0d6JbhyQNvrtlb/AOXz68+S0pdYcU5Vjjq0vdbWpKJD\nXVJi8+nf+vvxmQpKm5HFcV9FfFMJ58eV9qVlmYnW7WXtstdd5RZrIWNGsmU1yO6PteJokth5y83D\nNGwlkHvwj9TUsqDvEAVYbTmVrhSGDLDsdDTX14r59/E/Gu8cbJ06NIckTzgXrRtqR2FK4viVc+38\nfFqnRUvtuhkd7wG/SzAlyMSgWStxyyQ1heW/EbcU73q+cfeQ2q4U0TaZklq1UCeC1aA+gyrh4slH\nGk/O858vNqG0sFebeWvtji/6Rv6SX+MJkFiMxoOXzHvkDLga37R5qEtAoEMjBmHIcEjHCS4zDT/X\
 nYzj0v88w6tI8cyhU+VXx39LXYqVJ4z3rjWiICgYVUmogmBsfkv4/BSlt4W3ziDsqA8w4OLMyayLb\ncTNtkFMa2x09s/8AVk43asLtQo7XJcYbMz+esVXbzeK0+H1OK6iATFGY1vrqiMarWfrD0ZXV9cjc\nWlfOxlMuIXxHEfcQsAYS9GtQCTxuS2+h5hDiTUifeDQYe3XGUmEPNV2WYU9mVjhjws64VfvT1nCT\nFLolUlvoshiksyjuZ2vlhPpJDMY1sIKdm3KtrS3dq2yrt3q35x13q0jnbZWUurMA327BWoD0keYI\nhlDjEaahv6/TvPr8fZQpJSL9jna0uaxU7dKKyrNXoxZmsHVsvSU843O6jnGY61SW0d4yezZmO7RC\nhseard5EnHfn+nz0bpPbLZgY1pxqv16bIk47kLdpL2wC0xJUBjR48AK2txKJcj5uNFioAlxSHWHV\ntzXf5vZaZiOO/LSSbUFwKm9tN5THTzvGud7YTkSqBaBXp8shaqmNsnBabJnrY25wDSJEN9yTCmom\nKfCR+qlETw1QshDlqShbnCFRBEm+wbBUiy5t6gMkOvrd5ptYluvVoa4uETFiHmNBPCXrCQrU9qq6\nCILNptoDjcizx5C+FLW/x8XeJ3wFAjgmeuId50MKSrTyZcSMzRE0bXJMpuTz/r6sPn8ZqrAKhY67\nX1XP83eCqgUlM0Wt8aKVmsRekqbVbH2X59dF80gBYaeSzDWID0UIXrJx2WBDp4OroJ9uRn9RkuFc\nzr09qfmCILzlavkd1cO5CHa9t70fojR6ab7+dp1BJS3vgtfOSNKpy7OGqZxy6U+cDYJx27HKGLbf\n7LfhRUdaciI+27z3IEb/AA6AQrcRtM2TX7QVDH9+09qhVX+qky26/UeuoABkJh4q0zEz0/yTyRIj\nJnSENr+x6BJnTSNaZI0GI1Nrq+TB8hMc45AZbt0KPMLTGZSKfbRGUUsZttyN
 fFXvSHm+x2iM+Rsd\nbbZH3YFZPjP8hxMmoC5/Jb56tdjShthjxpEht15tSXGhEIgzL68IeUatrPbAKDWCFVmwBOGmvAk/\nFBw3eWjIqiZQqpSRSZoKPXJ8QFQ7R8O0i4Z5JomlgrcOc6pSF87xx5Keob4nnxKW+/Pxd+t+65Ot\n0ccpmO9FUjsSKlXLngv9FWJuazAQ6x0KGTSWy2TG46SslY7NtTE/4JiRnG0J+1EiJEnM6T5fDEex\nbLb6dOpmwDCiQq0LZ+nPivh7nPqKh/nWiKlLRatDJzczM6tIZdp9wqTkK1WWP8e0vox2k2ONsMod\nAHwBshrjXLNBiGowZUmvPQnfoiwF0B4FbrCky1DG19uFUhnh1l0dY2rmp5zR7O4ECjK+ycGy4AWy\nQRqPOlsCnJNngvCpL8aMr42Na64IAS3JWu28HQM/jxiNkN28KPIS3KcQhBTIpiH8yehBbOQrbGKU\n8fDtmeuSkFqI+iQuBJ7yPI72JWBc9lkWcDJG22DLdkpV9hCrMfy41qXxb09AJmI6QsrMODEGRk/d\nzs2vCCPw3RZwpQa8n/yItotS2ZUCZ2ayxMSRrUhmG7TQ89mDohqkzbhRByHq9aLLDGQLQKMpZ6nv\nVQkq69Dkc+LcW1yzqTyy/wAZpSJbXOdO3gXXVUffBm9mdgxwPFbtsaaLkKXEmNF4CHklaUDlIkVq\nxCHI+iEhjkW+hnUwywshy8Uav3YbfMaOVT5ne1m6UgFcBdjiqmK52Yz/ACeiGkNr66hHOzITnwh1\nLanZieqar0AsibWCMZ0ljuYWxM2l7NkzFW2Mnao0S6kW3TemZ4wPCbTTQLoXQKZcjUq5Vdrn+5de\na+WrTkjwdzMm73eBFAe70nU4MdyHVwcXk8KMVLjBHIMmoazTbTAl01uG9BEcnPWGy1CiDtIsUi6m\nB8Z5qHMkQY809ZmXFCxpq3nMqzET+J7GAMdqUw0DXEF
 1U9yZnDryUqulfSGv7LEuAcFFFyIcWdFl\njSwtX9/YUfHnJ9mYgVY5WpEB/n2QCMMo1/xOVGEU5yfYK8qM9RSSpYWTHU0q6sJOJsk1qcVu7I6F\nY7RXE1LTI9SKPAK3aR4+xkgcyEQjzY65ae8+xDvdSr/WT4W4BR9St2mGDywWeuJawAddGrdP1sdY\nalefxySBGLxb8mc4hM9tHPi21JWtmPOblZ0AkLnZmRR8bCaOJl2B60uQY/5Kzaq1bjNHLVXW64c+\nT7AKHjDvoOyWAzMxvWLARL5jqlBJ1v0L+Oay4LPDA7vWlvL6r48GHEmljTobmqjIDioG4ihVLruP\nD7Jx+j0A1NMeeW6+lnPrxUUjPSNMDfDlhsWxzazCiO26G5FQ43O/lWdojxHxROC4h15Db7clL/H4\n8mvRRzd/ZF/3RKIp21y+OvTzRNuRyPFU9MmFpmTZYnPQ389IS1qMNr5ObTJZeoo+Y+8dPVlIwyPO\nfE1cfIWboMdPHS96DdiXqRJcDmq0VaTyO31laepL1h5pcQmwVmDrKyuTIOCWFOXKtsqZswN/qXlO\npnU0EV7IoE2J1l22hvka7RXE8KAZnx6sBLAzoObWKD8z77/8nJHLiJQIKOcSDskMzxvrUZjRb8LP\nQawBlljQKohgyFDOLVPqOJUan+gNQFcbd2UtXnY240Yxx+YPKxpE6UO+NSm5CEr4hTTiu/Pr9f8A\nhKb/ADNbdncKziwV8YEQ5VuHwnkRD1jcp+kC6hHlel6ULixPU8+VLOz8l1lIKy3LJLGP3CnShl33\n69v9pei3CZVe7uVVCtezWm1NVRuwh1TpJIxPDA58bkzV9XHIdkWqx8fotUIMRyRrLZ3b0HJSpjwg\nlEptqUInTLqMjIXbIKo868F

<TRUNCATED>

[09/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/MLP.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/MLP.ipynb b/community-artifacts/MLP.ipynb
deleted file mode 100644
index dcd0cdb..0000000
--- a/community-artifacts/MLP.ipynb
+++ /dev/null
@@ -1,514 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "- This demo uses the popular MNIST dataset, which consists of 70,000 hand written digits and is used for \n",
-    "classification.\n",
-    "\n",
-    "## Current best accuracy on postgres\n",
-    "\n",
-    "### train_accuracy\n",
-    "\n",
-    "- 99.64%\n",
-    "\n",
-    "### test_accuracy\n",
-    "\n",
-    "- 96.79%\n",
-    "\n",
-    "### Parameters\n",
-    "- Hidden layers: [200,200], tanh activation, n_iterations=10, learning_rate_init=0.001, learning_rate_policy=constant, lambda=0.0001, tolerance=0"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "u'Connected: csloan@postgres'"
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%load_ext sql\n",
-    "%sql postgresql://csloan@localhost:5432/postgres"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "DROP TABLE\n",
-      "CREATE TABLE\n",
-      "COPY 60000\n",
-      "DROP TABLE\n",
-      "CREATE TABLE\n",
-      "COPY 10000\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%bash\n",
-    "# Note that these datasets are available from https://github.com/apache/incubator-madlib-site\n",
-    "gunzip -c ../data/mnist_train.sql.gz > ../data/mnist_train.sql\n",
-    "gunzip -c ../data/mnist_test.sql.gz > ../data/mnist_test.sql\n",
-    "psql -f ../data/mnist_train.sql\n",
-    "psql -f ../data/mnist_test.sql"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9YAAAGDCAIAAABBVx+IAABFLklEQVR42u3df3AU953n/7ElukHM\nGCOBsSQ2TFivZZ8FxsjEsXyxoZxS4iOK76I9fw/OW18l32/B9+vvslvl2dqUtZVjvHVfcanyuGqB\nS1Wou0TZJOZqK3IdYflWzMYb4hxKiKzlh0UBwpYH2xLIFgIxg2BaI/Pt6Y7aTXfPaDQaTXd/5vn4\ng5GE0OfT/Zn59IuP3vPpO28BAAAAKKE7AwAAAABKiAgOAAAAEMEBAAAAIjgAAAAAIjgAAABABAcA\nAABABAcAAACI4AAAAAARHAAAAAARHAAAACCCAwAAACCCA0ARpYb7jmT3zihnCADK55IQz3FJ6DmX\nIIIDQHEk+mJ/ld2+gRSnCADKxcUj0RyXhB8VdkkgggMAAAAlRQQHgGykx1/5xVG7V5plzg0AlItw\n+8/sV4Jf/fTPVxHBAWB+MngoJDvgxABAOXG4EIRC0px+ZOER/A4AyILpGgCAeYngAAAAAIjgAAAA\nQBlE8FsAoGFKBQCgRBEcAAAAABEcAEonFT8YjXREY7FoJNodT4nRlngHJeQwud6oB/vghW4I/wRg\nIiKCA4DrAbxv1/Z9oW07o5HIS+1S146951L+b0u8gxJymFxv1IN98EI3hH8CMBERwQHA/QTe3334\ncl1TXWa3cDncXHPx4P55u4F9ydoS76CEHCbXG/VgH7zQDeGfAExERHAAcF8iHlek4B/u0SBJNVIy\nPqz4vS3xDkrIYXK9UQ/2wQvdEP4JwEREBAcA9ykp80pJZgUlkUz4vS3xDkrIYXK9UQ/2wQvdEP4J\nwEREBAcA90m33bA+M4nLkuT3tsQ7KCGHyfVGPdgHL3RD+CcAExERHADcFwrXSkoyof/GUlGSSjBc\nF/J7W+IdlJDD5HqjHuyDF7oh/BOAiYgIDgDukxu3t
 tQM92g7WKXiR+K1LVsaZb+3Jd5BCTlMrjfq\nwT54oRvCPwGYiIjgAOCFDN4U2d2e3NfRGYvt6gpseyWyRvZ/W+IdlJDD5HqjHuyDF7oh/BOAiYgI\nDgBeEGpo69wT64hEorFoW4MsRlviHZSQw+R6ox7sgxe6IfwTgImICA4AAAD4DBEcAAAAIIIDAAAA\nRHAAAAAARHAAAACACA4AAACACA4AAAAQwQEAAAAiOAAAAAAiOAAAAEAEBwAAAEAEBwAAAIjgAAAA\nAIjgAAAAABEcAAAAIIIDAAAAIIIDgEel4gejkY5oLBaNRLvjKTHaEu+ghBwm1xv1YB+80A3hnwBM\nRERwAHA9gPft2r4vtG1nNBJ5qV3q2rH3XMr/bYl3UEIOk+uNerAPXuiG8E8AJiIiOAC4n8D7uw9f\nrmuqk9WP5XBzzcWD+wdSfm9LvIMScphcb9SDffBCN4R/AjAREcEBwH2JeFyRgiFJ+0SSaqRkfFjx\ne1viHZSQw+R6ox7sgxe6IfwTgImICA4A7lNS5pWSzApKIpnwe1viHZSQw+R6ox7sgxe6IfwTgImI\nCA4A7pNk2fRZZhKXJcnvbYl3UEIOk+uNerAPXuiG8E8AJiIiOAC4LxSulZRkQv+NpaIklWC4LuT3\ntsQ7KCGHyfVGPdgHL3RD+CcAExERHADcJzdubakZ7tF2sErFj8RrW7Y0yn5vS7yDEnKYXG/Ug33w\nQjeEfwIwERHBAcALGbwpsrs9ua+jMxbb1RXY9kpkjez/tsQ7KCGHyfVGPdgHL3RD+CcAExERHAC8\nINTQ1rkn1hGJRGPRtgZZjLbEOyghh8n1Rj3YBy90Q/gnABMRERwAAADwGSI4AAAAQAQHAAAAiOAA\nAAAAiOAAAAAAERwARCCtWLF48dIVSyVOBQDASejepeqF4o/uLuxCQQQHADtlZOT69SsjVxROBQDA\nSeLSFfVC8eHVwi4URPBy8alm
 amoqrVE0qVTqpubGjRsTmuvXryc1Cc01zfj4+FWbcZNrJuq/Uv+5\n+nPUn6b+WPWHpzSTGrXpT21u2TBeAABAYETwcqHmWj2C6ylcTcP5p3A9Z88Yvo38rdJ/lBHB1Yb0\n/K22TvIGAABEcJRXBNdXwfU1aTUZ2/O3To/gRrY2Urjxpz2FJ6aZV8H1JXAjgltWwW85YbAAAAAR\nHCLQ87e+8q1mbjUfGyFbjdRXrly5fPnyqGZkZOSSZlgzNDT0geaCif6VDz/88KOPPtL/HNKo33/x\n4kX1J6g/R/2BY2NjekZX29JXxNXW9SA+ZWKO44wUAAAggkMQ+iq4ynEV3FgIz7EK7liIYq9F0QtR\nLLXgllVwvTOO69+kcACY0Y/moFh9+LtCMXwAEby8IrgqWy24UYiSoxbcSOG5q1D0QhQ9fxuFKPrb\nMc214MZ/Cczhm/wNAACI4BCHnryNzK1HbTUu68HaKET55JNPPv74Y70WRa9C0UtNshWiGFUo+p96\nIYr6b9Wfo/60sbEx9YfrodxYEU9PM78107IozngBAAAiOHwv9yq4eSE8Oc1Y1bYsgZsXwvU18mw7\nEtrfjmmp/LaEb4YJAAAQwSFUBLfvCz6XQhTj6+ZClGz7glsiuGMteIBCcPhWKn4wGumIxmLRSLQ7\nnhKjLfEOSshhytb+J+/806FDv/gn9Y+3LlwvefNTYwO9v+vt/d3RI2++1f+JIvZL0jsdYCLy16gR\nwcuF/kZMNQebC1HUrGwuRFFlK0S5YGMuRNGZC1EsO6KoudyxEMWxFoXBgt8CeN+u7ftC23ZGI5GX\n2qWuHXvPpfzflngHJeQwOUuPvX3g0AerN27+avOq64Mn+y6VOIJOjf3L22N/tGHDhi8+sfFL4dFj\nvZ9MifuS9E4HmIj8NmpE8HLhWIhiVKHYtwY374iS+9Y8Rsg2L4Fn2xfc8nZM+xI4ERz+S+D93Ycv\n1zXVyer
 Hcri55uLB/QMpv7cl3kEJOUxZmh888vtEfdOqxYHA4vuf/da3vv7Hcokj+I1rY8PxoRva\nJxV3BioEfkl6pwNMRL4bNSJ4GUVwy90xjRSucrw1puMNMu214I635jHfHVOveLHfmscoB6cQBb6W\niMcVKRiStE8kqUZKxocVv7cl3kEJOUyO0pfOX5oKTA30vPXWW/906JcnR0tehiEtfygcOP/rn71+\npLf3d+erH12/vELYl6R3OsBE5LtRI4ILEq8tPrUxSsDNxd964DYvdZsZgdv8geVNmfa/1f+t/U71\nxnJ4+naOm6IwpvAR9UVl+iyzgpJIJvzelngHJeQwOUpNXJsKTEwsb3ryySc3NVWdOfTGmVIXg0v3\nPrx+1dK7pj48e/bC2Nh1ZUrcl6R3OsBE5LtRI4KXSxY3bkWpV4PoC+HGcrjBccdAeyw2/3xLKzN+\nkG0VnOQNDxnrH9Lm5IHBmVcQJdn8a/7M98uSNF/RplRtiXdQQg6To8qKikBg6er6xZmPq5bJU0Pv\nlLgY/Eb8yJsfhJ9+9t//b5sfW1VxoefwyfHS/g/A1fPvVgeYiErf1sjpkczD5NnBgl5hRHDRwrdj\n5jbuiJltI0Kjeltl3sNEZexhYr6BjjlJG01Mzka2N2USxOEN6bS+LjI587eGwrWSkkzov7FUlKQS\nDNeF5qlbJWtLvIMScpgcVSy9t+qzzzIL0JWlffEonwyMLX2wfpEaaqrvf/KZp+qmRq6UtA7E3fPv\nVgeYiFxoK6VdKG7lc6EggoubvwO3L4FbFqfNVeCWuGzsTmgkY/Niee6NSj51YkTqbB8YH5vflGmE\nbyI4PKF63SptWaSxYeY3ssmNW1tqhnu0HaxS8SPx2pYtjfP19reStSXeQQk5TOYs8MmZnrffu5YJ\n3EsbH1x6/cInmdbT1y5dl1Y/vLIE78dUxt77l/4Pkpn/AwTvqrjy4bhefTJ142ZgSXhZ
 SReh3Tj/\n7neAiaj0ba1YX69dKNY2FNQpInjZpfAcQdy8Pp0jf89Y7mL5wF6IYq9yoRYFPiY3RXa3J/d1dMZi\nu7oC216JrJH935Z4ByXkMJki+NA775w8q+XuyuovfH3TXf2HDhw6dOj3gce+8eWS7IiijAwMnBkc\nU9QIXv3Fp9dOnfrNW0ePvvXWb04mH/jSg0FxX5Le6QATkd9GjQguVArPUYti2QJFr0Ix3pRpVKHY\nb6ZjvGPSsnWgfXG9gCoUSyEKQRw+FWpo69wT64hEorFoW4MsRlviHZSQwzTtrnXPbf8/Nv8hbFfe\ndf+mZ7/x7ObNz37jq+uWlyZ+Bh985j/8+42f05e7g5/bsHHjk0888eSTG59cnylJEfkl6Z0OMBH5\na9SI4EKF7xw7otiXwO0L4Y6r4Pb67BxtOa582wtRsu0OTv4GAADlgAheRlncqPA2r4tb8re5HNz8\nRswcO6LYN0Wx1Hxbcrk52bPyDQAAiODwffjOtuxtLkSx3BHz+jRzIYrKXIhi2RHF0lABO6IYWT/3\nijsAAAARHB7N34G834vpuApuL9TOXZ9trgg37rtpX/N2rEixLIdTggIAAIjgEDyFGyvWltVx8/sv\n7RXblrZmrDt3rEj5NAt7/QwDCgA5/O9zUKw+/GWhGD6ACC5aCp9xRxR9q5PcO6JY7iSv/nPHVfC5\n7IhiLzq33AAIAACACA6/umPanZqKigrjA0Olxvj0zmnGv+U0AgAAEMExc+a2M7K1JX+TwgEAAIjg\nmGv4vvN25sC9YJqkkW+nfkX/WyORG0GcMwwAAEAEx2352/ynJY7nCOXGErh5Fdy8EM5aOAAAABEc\nM2dxxyCeLYKby1HMxeKEb5Svsf6hzIMyMJjiZAAA7EZOj2QeJs8WdqEggosTux3Ttp6kcxeiLFy4\n0PjTqEWhEAXlLZ3WHpRJTgUAwElKu1DcKvBCQQQXMIUHbHXh9lz
 uuApuL0ExL4STwlFGqtetyjxI\njQ0yJwMAYLdifb12oVhb2IWCCC5aCg84bYpipHD7poRGFbi9Ftz8bzm9AOAd35uDInbj5dlj7AAi\nuJgpPFv9t5G2F5gYO6JYqlDMm6JQiAIAAEAExwzJO9uO4PatwY2Vb8umKI5VKKRwAAAAIjhmjuP2\n8J1tOxTzx+Z/RfgGAP9Kp//w3mIARHDMe/h23ILQUohivjXPQo3l1jxGNCeFA7ml4gejkY5oLBaN\nRLvjKTHaEu+ghBwmp9B9+Xf7f2D4e9XB8xOl7MDkeLyvp//KVJm8JL3TASYif40aEVyc/B0wvSPT\n/kXHN2iaw7q9fIWzCuQ3bfft2r4vtG1nNBJ5qV3q2rH3XMr/bYl3UEIOk6Op5I3lj25saWl55pmv\nPbOxYXl988Y/qSpR2xND/X29J06dGR6fLJOXpHc6wETkt1Ejggsexx3zt32l3L5wTigH8p23+7sP\nX65rqsvsSiWHm2suHtw/kPJ7W+IdlJDD5OxGUlp93+qVK1fW1krjFwJrv/RAqGRtV9U3Nm1Yd1+w\nbF6S3ukAE5HvRo0ILmz+ti94qyqyML8d0zGIc2KBbBLxuCIFQ5L2iSTVSMn4sOL3tsQ7KCGHydnd\nDz2xOrPqnb586tjF1Y+uquIlWdLz71IHmIh8N2pEcNFid44P8l8LNy97k7+B3JSUeaUks4KSSCb8\n3pZ4ByXkMOU08cHbg8GH6mVekiU//650gInId6NGBBc8lwdmqkKxp3DLwjlBHMhNks0hJzOJy5Lk\n97bEOyghhymXq+8evyStXFLJS7L059+VDjAR+W7UiOACJu/cb7s07pFp3oXQfmtMNiUE8hQK10pK\nMqH/xlJRkkowXBfye1viHZSQw5RD4tL58YpFiyp4Sbpw/l3pABOR70aNCC5O8g5k3xElxy3r7Wvh\nvP8SmBW5cWtLzXCPtoNVKn4kXtuypVH2e1
 viHZSQw2SSuny+99QF4/fm6eTFZKBCquAlWaLz734H\nmIh8N2pEcAFTeO6yb/MSuOOtMS03yLSUhgNlYax/SFsJGRjM4x3xclNkd3tyX0dnLLarK7Dtlcia\n+Zu3S9aWeAcl5DB9Rrl09tzp82PG81VaFJSCNVKp61AmR8/09faevRpID5841nt8cNyVzcFdOP8e\n6AATUcnbGjk9oj3rzw4WtHUKEVzYOJ7PErj9T1bBAc0fbiio5Le5caihrXNPrCMSicaibQ3ze7Et\nWVviHZSQw2Q0+FDr81u+vGq6pcqaL7Y93/pAqctfAguWPdi0oXlTa2vr5k3NGx5ZvcSldfiSn39P\ndICJqNRtpbQLxS2lsF3wieBiJm/zp/mXo5jzN1kcZa163arMg9TYIHMyAAB2K9bXaxeKtYVdKIjg\nwgbxHPerNxeiVJrkeDsmKRwAAKBYiOBiZu58dgHPxrIRCuEbAACACA6rW3n49HZTWZi/x/zPOckA\nAABEcMyQxT+10UN2+naTk5PKtEmN/nVzIieFA4CnvDAHRezGztlj7AAiuOBZ3B7K9VxuTudGzras\nf1tWwTmfAAAARHBkjd05ClEsS+NG7HasRXH8IZxkAAAAIjhy5e9shShGOYpehaLXn5gLUYxvM+I4\nZxgAAIAIjrxCecBpXdwxmlvKUSyL36RwAAAAIjisadscl2eM3Y5bo9hrwXkvJgAAABEcM6fwPDdF\nmbzdjDuiEMQBAACI4Jghiweyb1NoXvM2F6LoH1jWvwnfAAAARHBkDd858rdjEM9xax5SOAB40/fm\noIjdeHn2GDuACC5mCs9dhWJUmOiFKEY5iuOtecxBnHOL8jLWP5R5UAYGU5wMAIDdyOmRzMPk2cIu\nFETwso7mOda/HbcG50yibKTT2oMyyakAADhJaReKWwVeKIjgoiXsghU3eedI/MZKvOU/ANn+J8D/\nB+CC6nWrMg9SY4PMy
 YDP/zf5h/9PAiiuFevrtQvF2sIuFETwcgnl2Ra/0yb2FfEC8q6lOf0Hmstd\nVKlUyvjY2JIlbWMP5eRveHQpJH4wGumIxmLRSLQ7nhKjLfEOSshhcgrdl3+3/weGv1cdPD9Ryg5M\njsf7evqvTJXJS9I7HWAi8teoEcHFDN/2LJ4tl1tuX59tsbmAFO64B4vjKni22wM59oohhvcCeN+u\n7ftC23ZGI5GX2qWuHXvPpfzflngHJeQwOZpK3lj+6MaWlpZnnvnaMxsbltc3b/yTqhK1PTHU39d7\n4tSZ4fHJMnlJeqcDTER+GzUiuGj52zGL22O3OeDa867xFszi1qJMZWffKnHG/xUAXkng/d2HL9c1\n1WV+EymHm2suHtw/kPJ7W+IdlJDD5OxGUlp93+qVK1fW1krjFwJrv/RAqGRtV9U3Nm1Yd1+wbF6S\n3ukAE5HvRo0ILmD+dlzqtgducy2KUZHiWIhSQPI2foJRVWIUnKSmmatQ7LUo5vVyezk4ww3vSMTj\nihQMSdonklQjJePDit/bEu+ghBwmZ3c/9MTqzKp3+vKpYxdXP7qqipdkSc+/Sx1gIvLdqBHBxQzi\n9gKSbLk8x2LzXJaf7a3keAtm7l3JSd7wOCVlXinJrKAkkgm/tyXeQQk5TDlNfPD2YPChepmXZMnP\nvysdYCLy3agRwcVM3pYvWqpKLLE7d/AtrDOOWT+fQpR8gjhxHJ4iyeaQk5nEZUnye1viHZSQw5TL\n1XePX5JWLqnkJVn68+9KB5iIfDdqRHABs/iMN8W0vDnSUvVhvk29uS58tt0w3w/IfA8gowol96Yo\njm/QJHzDg0LhWklJJvTfWCpKUgmG60J+b0u8gxJymHJIXDo/XrFoUQUvSRfOvysdYCLy3agRwUXO\n4o6h3PIuyaLviJLPTojZ1r+zvR3Tsh0hKRyeIjdubakZ7tF2sErFj8RrW7Y0yn5vS7yDEnKYTFKX\n
 z/eeumD83jydvJgMVEgVvCRLdP7d7wATke9GjQguTtrOsflgjs1Jir4veMC0BJ5tFdyyNbi+EG58\nW7atwalCgVcv+E2R3e3JfR2dsdiursC2VyJrZP+3Jd5BCTlMn1EunT13+vyYUc0qLQpKwRqp1HUo\nk6Nn+np7z14NpIdPHOs9Pjg+JfpL0jsdYCLy26gRwcWM48bH9lDuWGBd9DdBznYhnCpw+Fqooa1z\nT6wjEonGom3zfEPNkrUl3kEJOUxGgw+1Pr/ly6umW6qs+WLb860PlLr8JbBg2YNNG5o3tba2bt7U\nvOGR1UsqxH9JeqcDTET+GjUieFkE8UCWpfHcYXfufcgWxC2l3vZ9wbP9r4CRBQAAAiCCi+COO+7Q\n/1Tdeeed+p+6immVlZULFiyQJEnWLNRUaRZPUz9etGiR+nX1G9TvVL9f/Vfqv9V/Zv7JW98OXC87\nuXnz5o0bNyYmJpLJZCKRuHbt2tWrV8enqZ8mpqnfcF0zoVH/lfpvzduHm4M7cRwAABDB4ZUUbmRx\ncxxX/9STtBHH9USu/qlHbf1PXeU0I8cbPzDPCK6ncKPW3LIXys1p5nv0OO6OYt6whU1RUFJj/UOZ\nB2VgMMXJAADYjZweyTxMni3sQkEEFzCF21lWxM0pXM/fBiOCG99pRPD8e+K4I6GesI0Inrqdkb/t\nKdy+TyIpHPMvndYelElOBQDASUq7UNwq8EJBBBcthZszd+5ClEUaSyGKSi9EURlxfFYpPP9ClGsa\nvQRFZ65CMQpRVHocV/80lsMZa8yv6nWrMg9SY4PMyYAHvTAHRezGztlj7CCMFevrtQvF2sIuFERw\noZK34+K3mXkJ3FgFNxbCzYUoxhL4bFfB8y9EsayFW2pRZtwqkXEHAAA+RQQXNouba7gty+H28G0u\nRClKCp+xEGXGWnAjhTtuDc5YAwAAIji8Fb4dC1HMtSj6jih6IYpRi1KyHVH0W
 pRr04xaFMcdUfRC\nFKM0nO1QAAAAERyey+IBp+Vw+9sx9YRtqUIpzY4ojvUnljdiFveGnQAAAERwzG/sNi+HW96dWWmy\nwKTEO6LMWAtuDuLGXXv0n0z+BgAARHB4IoXnLkQx52zzjih6CUowGCzljih5FqJY9is074hCCgcA\nAERweC6I59igMNu+4CXeEWVWtShshwIAAIjg8HTyvjOLfApRSrAjSj614OYbZFIIDgAAiODw4Uhr\n+VtP2LIsG3uhhEKhu+66a8mSJeqf6sfBYNDYF8UoDZ/VjigAgPn22hwUsRsvz17RT8WBQvEsAhEc\npaAvY9tvlmncL9NgXgsv+B2ZAAAAIIITwe8wV4Rb6k/0bcLJ3wAAAERwFG+kpwtR9GVvvRBl8eLF\neiGKQf3UuEePkchne3ceAIDbtDficBoAIjjcZS5EsWyHYtws0/KOzLlsDQ6UlVT8YDTSEY3FopFo\ndzwlRlviHZSQw+Tk+tnXXn311d0Z/+3AyY9vlvr1MDke7+vpvzLlmRdo8vQ/7H7t3bSocwITkU9H\njQheRhHcXIiip/AcheCWu9OTv1FexvqHMg/KwGAes3Cqb9f2faFtO6ORyEvtUteOvefmb+ouWVvi\nHZSQw5TNwvDTW55v3/4XL/6fzz58z8ISNjwx1N/Xe+LUmeHxSc+8mq+e/Pmhc+PpQAkjuCtPACai\nkrc1cnpE+z/n2cGCekUELxeOhSiqYDAYCoWWaIxCFH1HFApRUL6qG+szD9L9q+WZ5+3+7sOX65rq\nMt8ph5trLh7cPzBv67ilaku8gxJymLKoCFTIdy2/p3pxZclfOVX1jU0b1t0X9M5r+erJX3+0IixX\nlLJNV54ATESlb2vFQysyDwseyONCQQQvY8Z+4ZabZdpXwY2F8IL3BQfKSiIeV6RgSNI+kaQaKRkf\nVvzelngHJeQwZVM59fHxX/7il7/8xYHXf3FyrJwLwkf7
 3rz08FMNsrhzAhORf0eNCF5GEdxShZIt\nhdvvzkP+BnJQUuaVksy1PpFM+L0t8Q5KyGHKlsDv+uOHH/nSV7/85a9+5V9dO/IPv7xYpiE8PXrs\n6NXHngovFHlOYCLy76gRwctF7h1R9EIU/dY8xo4oxoo4hShADuoryvRZZhKXJcnvbYl3UEIOU7YI\nfs/D6z+/WPuoulqeiJ/+pBwzeHq072i66amVC8WeE5iI/DtqRPByYSlEyXMV3FyFQgQHHIXCtZKS\nTOi/sVSUpBIM14X83pZ4ByXkMDlHz49/9cP/+uPffKzF7qmyfV2mR0++d33o2IHu7u4D//xeaurS\nW4cOnRwVb05gIvLvqBHByyiC58jf9lvzGLXgLIEDucmNW1tqhnu0HaxS8SPx2pYtjbLf2xLvoIQc\nJpObH5/+ze/fHVc/qqxcXHnXyvBdlWoMvfbhh6mlD61dXlk2L8ebl06+efTsVfU03Pv01q3PtWVs\nbl4WCNz75ObNDy8Tb05gIvLvqBHBMYNbt26ZP9bl+Oai4LTDVxm8KbK7PbmvozMW29UV2PZKZI3s\n/7bEOyghh+kzqY9OnvqX059k9gCvXr95/dS/vHHgwIGf//LifV9/7kv3lC6BT46e6evtVSNwevjE\nsd7jg+OlXoa/eaGv79ipS8Ze6OlLR7tfP/xRIPDR4dcP9I0KOCcwEfl21IjgmCF2F/YNQFkJNbR1\n7ol1RCLRWLRtnndfKFlb4h2UkMM0bcn6rf/P//XsfVrhc2X1Q19+NuMbzz37Jb0ovFQWLHuwaUPz\nptbW1s2bmjc8snpJRYlfi3c/9q2/fvG5B4wC8Mp7n2jb+kLHd77T8cLWZ5uWCTknMBH5dNSI4Cgw\nkbNcDQAAQATHPMZu0jYAAAARHC6HcqI5AAAAERykcAAAACI4yiNwk8IBoJS2zkERu7Fz9op+Kp4t\nFM8iEMEhbDQHAAAAERyzTtushaM
 cjfUPZR6UgcEUJwMAYDdyeiTzMHm2sAsFERyFp3NOAsSV1u7u\nHVAmORUAACcp7UJxq8ALBREceaVtlr1RXqrXrco8SI2luqcGAMBfVqyv1y4Uawu7UBDBAQAAgJIi\ngmNmd2gcv87JAQAAIIKjdLmckwAA5ezl2St6Hw4UiuEDERyeztn5r38TygEAAIjgmK9cTv4GAAAg\ngsPNqE3+BgAAIILD5VAOlJVU/GA00hGNxaKRaHc8JUZb4h2UkMPkeqMOJsfjfT39V6Y88wJNnv6H\n3a+9mxZ1TmAi8umoEcFB/gbmOG337dq+L7RtZzQSeald6tqx91zK/22Jd1BCDpPrjVpNDPX39Z44\ndWZ43Dt3tbp68ueHzo2nA2kx5wQmIt+OGhEceQVuojaQdd7u7z58ua6pLnNvBjncXHPx4P6BlN/b\nEu+ghBwm1xu1qapvbNqw7r6gd16fV0/++qMVYblC1DmBici/o0YEx6zjuPFFcjmgSsTjihQMSdon\nklQjJePDit/bEu+ghBwm1xv1vNG+Ny89/FSpb3Ir/BOAiYgIjpJm7ll9A1A+lJR5pSRzrU8kE35v\nS7yDEnKYXG/U29Kjx45efeyp8EKR5wQmIv+OGhEcs07n5G/ATJLNS2yZSVyWJL+3Jd5BCTlMrjfq\n7QDedzTd9NTKhWLPCUxE/h01IjhmztyOH+cI6HPHaYfLxvqHtGWRgcGZawFD4VpJSSb031gqSlIJ\nhutC89SvkrUl3kEJOUyuN+rpBH7yvetDxw50d3cf+Of3UlOX3jp06ORoadoW/gnARKQbOT2SeZg8\nO1hQ0TgRHAAcrt/67glKHts6yI1bW2qGe7QdrFLxI/Hali2N81V6WrK2xDsoIYfJ9Ua95+alk28e\nPXs1EKi89+mtW59ry9jcvCwQuPfJzZsfXlaaTgj/BGAi+oOUdqG4pRS2/w8RHABsqtetyjxIjfm8\nj0tuiuxuT+
 7r6IzFdnUFtr0SWTN/V9uStSXeQQk5TK43ajU5eqavt1eNwOnhE8d6jw+Ol3pz8JsX\n+vqOnbp00/jP9KWj3a8f/igQ+Ojw6wf6SrQKLv4TgIlIs2J9vXahWFvYG36J4AC8arinK7q9beOj\njzZvbN0a2fPGuZxvjUm9syf6xqg7PQ01tHXuiXVEItFYtG2ed18oWVviHZSQw+R6o7dbsOzBpg3N\nm1pbWzdvat7wyOolFSXuwN2PfeuvX3zuAaMAvPLeJ9q2vtDxne90vLD12aZlQs4JTEQ+HTUiOAAv\nSryzp/1P/2LvP54LhB9/fE1dYPjXP/qb//iV9j09WUP25Xd+G09y4gAAfkAEB+A9qb7YX/3o4uMv\n/fRXR7q79uz5/msHj/zqpzu/Fh740V98ta3zjWH7W18SfV37E/ffH+LcAQCI4AAwe4nfdv225sXv\nd7Y1fBapQw2t0dfe+OGLTyVf/5uv/2nHa+aqztF3uv4q8npoS/samZMHACCCA8CspYbfuXz/ttaw\nPU+H1myN/fxnO1ukw69u/+qjX2lr3xHZ0d628avf3PvOmpc62+o4dwAAIjgAFEAO1d3/eDhbTYkc\nbu3s/sUPX/rGU7WBeN+vfzughFte/P7PX2kLswQOlNbO2St6H54tFMMHIjgA3KauLbo1nPM7lq1p\n64h1dR/pefvtnoNdnVublpG/AQBEcAAAAABEcAAAAIAIDgAAABDBAcBtidHh2RtNceIAAERwACjE\ncPf2r369AH/xRoKTBwAgggPA7NW1vfZ2AXq+/5Vi3R1zrH8o86AMDLKyDgBwMHJ6JPMwebawCwUR\nHADs0mntQZnkVAAAnKS0C8WtAi8URHAAsKletyrzIDU2sN84kNXLs1f0PhwoFMOHOVqxvl67UKwt\n7EJBBAcAAABKiggOAAAAEMEBAAAAIjgAIJtU/GA00hGNxaKRaHc8JUZb4h2UkMPkeqMOJsf
 jfT39\nV6Y88wJNnv6H3a+9mxZ1TmAi8umoEcEBYI7Tdt+u7ftC23ZGI5GX2qWuHXvPpfzflngHJeQwud6o\n1cRQf1/viVNnhse9s5nQ1ZM/P3RuPB1IizknMBH5dtSI4AAwt3m7v/vw5bqmusxb4uVwc83Fg/sH\nUn5vS7yDEnKYXG/Upqq+sWnDuvuC3nl9Xj35649WhOUKUecEJiL/jhoRHDO4deuW48fZvjl/n5pM\nTUtPM75ifI/xDxkUeEoiHlekYEjSPpGkGikZH1b83pZ4ByXkMLneqOeN9r156eGnSr23qPBPACYi\nIjjcSeRFCcGOWdySwgni8AUlZV4pyVzrE8mE39sS76CEHCbXG/W29Oixo1cfeyq8UOQ5gYnIv6NG\nBIdzPp7XIG4kb3PmnpycVDSpVOrmzZvqn/qn6teNRG4EccYI3iHJ5iW2zCQuS5Lf2xLvoIQcJtcb\n9XYA7zuabnpq5UKx5wQmIv+OGhEchSfyOS5Fm5fAp0yyLYGz/g1vCoVrJSWZ0H9jqShJJRiuC/m9\nLfEOSshhcr1RTyfwk+9dHzp2oLu7+8A/v5eauvTWoUMnR8WbE5iI/DtqRHDkFbuLHnxzFKIYKdxe\nhUIQhwfJjVtbaoZ7tB2sUvEj8dqWLY2y39sS76CEHCbXG/Wem5dOvnn07NVAoPLep7dufa4tY3Pz\nskDg3ic3b354mXhzAhORf0eNCI4CQ7k5SReWvx0LUYwqFHMhil6LYs7iDAe8lMGbIrvbk/s6OmOx\nXV2Bba9E1sj+b0u8gxJymFxv1Gpy9Exfb68agdPDJ471Hh8cL/Xm4Dcv9PUdO3Xp5vTn6UtHu18/\n/FEg8NHh1w/0jQo4JzAR+XbUiOCYawqfy09zXALXQ7nxp/29mAwE5t1Y/1DmQRkYzGtTqlBDW+ee\nWEckEo1F2+Z594WStSXeQQk5TK43ersFyx5s2tC8qbW1dfOm5g2PrF
 5SUeIO3P3Yt/76xeceMArA\nK+99om3rCx3f+U7HC1ufbVpWsn4I/wRgIlKNnB7R/uN5drCg3QuJ4Jhd4M7/izOGb3Mhip6zHWvB\nHatQCOKYZ2n9Nh7KJKcCAOAkpV0obhV4oSCCw7UUns+OKPoXLYmc/I15V71uVeZBamyQORkAALsV\n6+u1C8Xawi4URHC4k8Idb9Cjsm8KbqyR815MAAAgBiI48o3L+XxxVj/QKAHXl8Cz7QtuXgU3V6Qw\nLgAAgAgO8YN40X+gHqbtOxKa9yU0MjfhGwA8ZefsFb0PzxaK4QMRHP5wxx13FDF8W96LaXkjpvmm\nmOa7Y045sZSy8JZNAABABIcI4duevx2/OKsUbq9CuXnz5o0bNyZM1E9vTkuZTE4zp3P2LgQAAERw\nCJK/5/LFHMxL15atUYx4bc/Z2da/jbIW8jcAACCCQ7T8PXeOhShGCfikiWWDlBlTOFUoAACACA7R\n8nexilIshSj6zid6wYlRi3JjmlGLou+XYrlxvSWXk8IBAAARHIKH8sKYdzjJVohiCdmOt8y0bxlO\n+AYAAERwkMsd8rc5hVt2RNEXxR0LUXJvh2LO36RwAABABIe/g3W2UpOC18Xt9+XRtzrRK0+yFaLo\n35OjEIV79wBAybw8e0Xvw/cKxfCBCA6fxfG5528jhVsWws2FKLk3BTeXoHDvegAAQARHWefyfJi3\nQ3EsRMm9L6G9IpxNUQAAABEcwsbrO6bNsYkcO6KY78uTZyGKcWse/U/yNwDALHOd4CyACA6fxvEZ\nk/cd+TFSuH0t3HEh3PG9mMY/sS9+k78xZ1JtbTBYU1sj5fXdqfjBaKQjGotFI9HueGpee1aytsQ7\nKCGHyfVGHUyOx/t6+q9MuR26L/9u/w8Mf686eH6iVI0L/wRgIsoI1dWoF4pwnhcKIjhmCtB3aioq\nKiqnLViwQJq2QGP8VYVG/yfFvY+POZ2rLNHc2
 CDcntR5RyaKQbl4MZm8fPGyks+03bdr+77Qtp3R\nSOSldqlrx95z83eZKFlb4h2UkMPkeqNWE0P9fb0nTp0ZHp90/UU8lbyx/NGNLS0tzzzztWc2Niyv\nb974J1UlysKiPwGYiHSJ4cvqhSKe14WCCI4Z8reapxdMk2V5kWaxJhQKBTXqx+oXFy5cqH6DGsr1\nIK6n8OJGcGNdXK88UTO3ceOeZDKZSCTUP416FSORG0GcMUWJrrb93Ycv1zXVyerHcri55uLB/QMp\nv7cl3kEJOUyuN2pTVd/YtGHdfUEvvDJvJKXV961euXJlba00fiGw9ksPhAScE5iI/DtqRHBYU3g+\nq+DGQrj+nfoSeNHvZm+/g72xBG4wlsDNBSqUo6CUEvG4IgVD+m8iJalGSsaHFb+3Jd5BCTlMrjfq\naXc/9MTqzKp3+vKpYxdXP7qqSsg5gYnIv6NGBMdt+VuP4BXT9PxtjuB6CrdUocxH/g5kuXePYwq3\n3ziT/I2SUVLmlZLMCkoimfB7W+IdlJDD5HqjfjDxwduDwYfqZUHnBCYi/44aERyfRXBj8VvP3As1\nRiGKUYViFKKojESuZ/Gi528jdltu3HP9+nV7IYrKvCJOCkdpSLL54p6ZxGVJ8ntb4h2UkMPkeqM+\ncPXd45eklUsqRZ0TmIj8O2pEcDgEcWMh3F6IYn5HprFYXqydCu0RPNtmKfZCFFbB4ZZQuFZSkgn9\nN5aKklSC4bqQ39sS76CEHCbXG/W+xKXz4xWLFlUIOycwEfl31IjguC1/G2vh6p9G/rbUolh2RDG2\nQylZLbjjjijUgsMtcuPWlprhHm0Hq1T8SLy2ZUuj7Pe2xDsoIYfJ9Ua9J3X5fO+pC0b9QDp5MRmo\nkCrEnROYiPw7akRwfJa/9TCtZ2s1asuybBSi6FUooVDIKERRqd+gp3NjLby4+du8F6FeZ6LfuOf6\n9evGjijqx3otin7jHjWU
 GyviRHCU6nrbFNndntzX0RmL7eoKbHslskb2f1viHZSQw+R6o1aTo2f6\nenvPXg2kh08c6z0+OF7qzcGVS2fPnT4/ZlT1SouCUrBGqhR3TmAi8u2oEcHxWQR3rEKxvyPTrVVw\nlXHL+hnfi0n+RimFGto698Q6IpFoLNrWIIvRlngHJeQwud7o7RYse7BpQ/Om1tbWzZuaNzyyeklF\nqV+LD7U+v+XLq6YPvrLmi23Ptz4QEnpOYCLy6agRwWEN4pZNCY3wre8CTi04AAAAERxFDt/GsrdR\niFJVVVX6HVFU5h1R9OJvYzsU86159EIUvQpFL0QxKsIZVgAAQASHP1K4vRCl9PuCG2+ptKyCmwtR\nHJfAeS8mAAAggsN/Qdx8m55s9L81l6DMx915AAAAiOAoi+StqjBZYGKsf8/3ezEBAB63c/aK3ocX\nCsXwgQgO72bx3Kvgdpw9CGKsfyjzoAwMpjgZAAC7kdMjmYfJs4VdKIjgsIZvI2Qbq+CWe/RYCsFZ\nBYeI0mntQZnkVAAAnKS0C8WtAi8URHBYU7g5i2dbCLcUglMLDtFUr1uVeZAaG2ROBgDAbsX6eu1C\nsbawCwURHA4p3F6IYqyIO6Zw8jcAAAARHIUn72yFKNSiAAAAEMExj0Hc/nZMyxI4b8EEAAAggqMI\n+dscxHPUghPEAQAAiOAoWgo3r3kbhSiOJSiWKhSCOAAAABEcswvfOapQ8twUBQBQPl6ePYG7ARDB\nUcw4bikHd6wI54wBAAAQwVFI7NZDtl5wIknSwoULF2kWL14cDAZDmqBG/UpVVZX6Vws1sixLGnuN\nin2zlFt5m5qaSmsURUmlUjdv3pyYmLiuSSQS1zTqB8lkUv3KhObGjRvqt6U0k9P0HzI17dNpeisM\nPQAAIILD/SCuZ3FjI0Lpdgtuly12O97EfladUfOxnpWNLK5Haj2RqxQTI2qbA7c5bRuZm+QNAACI\n4PB
 Q/jbWwi3bgavJW55mTuH2DcKzpfDZdsaSv/VI7ZjCJ29nX+02r3kb+ZsgjiJKxQ9GIx3RWCwa\niXbHU2K0Jd5BCTlMrjfqYHI83tfTf2XK5Zelq90Q/gnAREQERzHzt7H4bWTuRYsWVVVVZStEUelV\nKOZCFMdQXsBCuB7B9dhtKURJJpN6IYpehWIUouhVKHohihHNzSUoei43VsQZdBRp2u7btX1faNvO\naCTyUrvUtWPvuZT/2xLvoIQcJtcbtZoY6u/rPXHqzPD4pJuvSbe7IfwTgImICI7iRvBsq+CSjXkJ\n3DFwF2XvcGMB21KIokpNsxeiWAJ3tlVwoGjzdn/34ct1TXWy+rEcbq65eHD/QMrvbYl3UEIOk+uN\n2lTVNzZtWHdf0OUXpcvdEP4JwEREBMe8pHB7LbhRDm6sdmdL4fadwudSiGKuRbFUodgLUYy/tReC\n2yM4cRwzGOsfyjwoA4MzT8GJeFyRgiFJ+0SSaqRkfFiZp36VrC3xDkrIYXK9UZTnE4CJSDdyeiTz\nMHl2sKCsTgTHbfl7xh1R9FqUqmn6pihGKHdM5IVlcX1HFJVR+X3z5s0bN26Yd0RxLEQxR/Ns6+KE\nb8wkndYelDx+ja0+O02fZVZQEsnEPHWrZG2Jd1BCDpPrjaI8nwBMRH+Q0i4Ut5TC6p2I4LCmcKMQ\nxVwXblkCtwRux3dkFmUhPPeOKEYhimX/QcctCNkXBbNQvW6VthLS2CDP+L3qa8M8JWcmb0map36V\nrC3xDkrIYXK9UZTnE4CJSLdifb32L9fmcaEggmOm/J1nIYr+lWz3q89278xZpfB8ClGM/G2seWcr\nRLFvh8KIo1hC4VpJSSb031gqSlIJhutCfm9LvIMScphcbxTl+QRgIioKIjg+i+CWHVFyFKIYO6Ko\nf2vO5UYit6yLF7Yp+FwKUfRb81CIghKQG7e21Az3aDtYpeJH4rUtWxplv7cl3kEJ
 OUyuN4ryfAIw\nERHBUfwUbt8RxX5rHvt7MXPvQlhwOUr+O6KYl8BzVKHwdkzMz8zdFNndntzX0RmL7eoKbHslskb2\nf1viHZSQw+R6o1aTo2f6envPXg2kh08c6z0+OO7Ortxud0P4JwATEREc85e/jeVwcxWKecHbfmue\n3OXgs+3PjIUoRi2KpRAlz1vzAEUUamjr3BPriESisWhbgyxGW+IdlJDD5Hqjt1uw7MGmDc2bWltb\nN29q3vDI6iUVgfLshvBPACYiIjhcS+r2knEjsht3rdf/tCTy/Bua8SsAAAB+RATHnIK45R2cuW+K\nWfQMbfxA0jkAACCCQ+TkbXanE0s5SmFvx8yduQEAAIjgKLsgbl75Nr9x0/I2zbkEccdvzv1DyOgA\nAIAIDgHzd+D25XDLyrdlL0Jz8i5gLZxIDQCetXP2BO4GQATHvKdwS/G34yq4/nVzOi8sT+deCyej\nAwAAIjgED98z1oIXdxU8RwoHAAAggqMcs3i28F2UrcFnTOHmhXDLN5DaAQAAERxihm/zTXws+4Lb\n75o5xyBOqkbpjPUPZR6UgcEUJwMAYDdyeiTzMHm2sAsFERxzSuGW2/TM977gxdrcEJhJOq09KJOc\nCgCAk5R2obhV4IWCCI4ip3D7vuBFvzsPN87EvKtetyrzIDW6c5dvAIDXrVhfr10o1hZ2oSCCY9bJ\n21J/IkmSrFm4cOEijf6ppLFsEH5H3vLpCUEcANzSWaii9+Tl2Sti6xfmgGdROSOCY04p3BzEzcxb\nExarFhwAAIAIjjLN3+bKE2NHcJ2x+G1+U6YlhXMaAQAAERyYRQTX17/NJSh6/UlVVdXixYuDGvUD\n9SsLNcaKuJ7CieAAAABEcBQYxI0sbqyC64ncWAI3kreuKLuDA96Uih+MRjqisVg0Eu2Op8RoS7yD\nEnKYXG/UkTL27u+PHv3927//7W9PfnjdpU5Mjsf7evqvTLk
 /QVx//41X/9MPBhQmIg6KCI455W9j\nLdyyIm6uCKcWHOUUwPt2bd8X2rYzGom81C517dh7LuX/tsQ7KCGHyfVGHd280Hv03J0PfvELj36h\n6fMTp353LlHqHkwM9ff1njh1Znjc7W1FP/5fP3j1u3u//5Oj719nIuKgiOCYS/42l4BbClGCwWAo\nFFqsMW+Noq+IG2vhnEaIlsD7uw9frmuqy+xKJYebay4e3D+Q8ntb4h2UkMPkeqPOCfyTwZHJBdVy\nhfqxFFq+YPz9waslXoquqm9s2rDuvqD708M9//pbL377z/9dPRMRB0UExxwjuP2+mOa3Y7IKjjKU\niMcVKRiStE8kqUZKxocVv7cl3kEJOUyuN+ocLCoqPvvk05ufBibGJqaYKJiIOCgiOIoQxKkFBwxK\nyrxSkllBSSQTfm9LvIMScphcb9SRtOzBz8mTowk1vkxdHR6eUL80+SkTBRMRB0UERxHCtxG7jUIU\nvf6EHVFQhtT/epo+y0zi6v9E/d6WeAcl5DC53miWrix/9OmmJRdPHT95ZnTB8qrAnZK8gImCiYiD\nIoJjrincXovCvuAoZ6FwraQkE/pvLBUlqQTDdSG/tyXeQQk5TK43msVUIlFR99Cjjzzc+PnQ5OSd\n1Z+7u4KJgomIgyKCo8j521yIQi04ypDcuLWlZrhH28EqFT8Sr23Z0ij7vS3xDkrIYXK9URPl6oX+\nc8Path/KyPHf/Ob4qJplbg6/+0nVfWvrFpbVlHD9/V/95PVjHzMRcVBEcBQ/hVtuTa/vfKJXpOgl\nKPI0+4q4cWfNO27HuYWHjPUPaVFiYDCPd8TLTZHd7cl9HZ2x2K6uwLZXImvmb94uWVviHZSQw+R6\no5+ZHB18/90L45k1RGnZg/fXLvjoxNu/Pz5S/YUnGku/Bj45eqavt/fs1UB6+MSx3uOD4yV9O+j1\n02+8ceiIvgvh9f6fvPrd7/70fGDi6N
 7//N09//i+IsQTgIlIM3J6RHu6nR0saOsUIjgKSeEB083q\nzferN9a8jXdhmr9o+dgxi3N64Q3ptPag5LercKihrXNPrCMSicaibQ3zG3xK1pZ4ByXkMLne6LTF\n921q3fx4nVY8Ky1vfPzxL3zh0S88/mjDcjdWwBcse7BpQ/Om1tbWzZuaNzyyeklJ/xNwz9f+y4//\n+7cfW6ydlsbnX/z23+7u7u7+H7v/9ts7vvZ5KcBrVpyDSmkXiltKYdvPE8FRYArPFr6zfWwJ5dny\nNykcnlC9bpWWJBpLnWMAAP6wYr224bu0trALBREcRUjeldPMOxJm+9iyZaG9OoXzDAAAxEYER+FB\n3BLH818OpwoFAAAQwYFZ5G/jAyNDm0P2jLXgd9rcYcN5BgAARHDgthRuXvM26knMuxMuyM68R0qF\nCbsWAoCPdBSq6D3ZOXtFbH3VHPAsIoID+YZvR+Zlb8vK94xvx6QWBQAAEMGBWWTxO51k2w7FsRZF\n/yGkcAAAQAQH8grf2XZEcaxFsXzRvC5uWQ7nPAMAACI44JzCLXXhOUpQ8nk7JucWAAAQwYGs4TvP\nVfBsHxj/xL4QznkGAABEcCBXHDcncvVjI5RLGlmWF2mqqqoWL14cDAZDmrtut8Tk7rvv1v/MxvzN\n6r9Vf6b6k9Wfr7aycOFCtUW1Xcsdfyg3BwAARHD4Pn8bKdxIt+ZtCo0F74UaSwRXc7M5hRthesb8\nbWR041M90Ks/1ojgxnJ7jghOHAcAAERw+Cl82wvBzbuD68lbD9xqONYTc3V19fLly1do6jT19fUr\nNX807XPTVq1aFQ6HHbdQDd9O/Wb1R9XW1qo/tqamRm1l6dKlaqP6ori+Fm7ffZwNyAFg7n5dqKL3\n5OXZK2LrF+aAZxERHCgkhZuDuLkcxagLz1aIoi9+2xfCjRXu3IUo5lXwPAtRLMve5G8AAEAEhwhZ\n3PwGTXshymKNG
 pf18G3J3/YUnmctuF6FYilE0WtRLG/0ZA9yzMJY/1DmQRkYTHEyAAB2I6dHMg+T\nZwu7UBDBUUjmttyIx6AXosiybKx5mwtR7rnnHr0QpV6zcppRi7Jq1archSiWchRzIcqyZcvUVtS2\nKERBEVQ31mcepPtXy5wMAIDdiodWZB4WPFDYhYIIjiIkcseb9Rir4LPaEcX+nssZC1Ec346Ze0cU\nFsJRXKn4wWikIxqLRSPR7nhKjLbEOyghh8n1Rh1dO/vW//zZ/h//eN/fxX745rs33OnE5Hi8r6f/\nypT7E8T199949T/9YEBhIuKgiOAoTvgOmDZFMco8jEIUvRBcZd8RxZzCl9jcnTejEEX9yYum6bXg\nuXdEYQRR1Gm7b9f2faFtO6ORyEvtUteOvedS/m9LvIMScphcb9Q5+57t/vEbH6/6yp/92Tf/bd27\n/98Pf/buZIl7MDHU39d74tSZ4fFJl2eHj//XD1797t7v/+To+9eZiDgoIjjmHr7txd/GDXpmLESp\nN3HcFGXGQhTDjIUoxnK4uRDFqAhnNFGcebu/+/Dluqa6zG8i5XBzzcWD+wdSfm9LvIMScphcb9TZ\ngnsebX7kj5dWZtJ4Wv100aJS96CqvrFpw7r7gu5PD/f862+9+O0//3f1TEQcFBEcxQrigSxbo8y9\nEKWAHVHsb8ec8dY8LIejWBLxuCIFQ5L2iSTVSMn4sOL3tsQ7KCGHyfVGs6hes/lPn65PD71z+NB7\n1Y//h5b6BcwTTEQcFBEc85m/jU0J9fyt16JYdkRxvDWP/QaZ+ReiGMvexqaE9lvzsBcK5o+SMq+U\nZFZQEsmE39sS76CEHCbXG81h7MLZ9z64tuCeunsWEcCZiDgoIjjmHL5zV6Ho24EbhShqOFaD8tKl\nS41b89x7772O26EYJSj2++/koP4T9UfV1taqP1YvRNFvzaMvihtZ3LIvimVdnGHFHKnPeNNnmU
 lc\nliS/tyXeQQk5TK43mkP1A81Pbt7y/IbhA7u/9+YI8wQTEQdFBAeAogqFayUlmdB/Y6koSSUYrgv5\nvS3xDkrIYXK9UUeTQ2/u+7sf9oxk3gm5aGl1ZWC4f/gGEwUTEQdFBAeAYpIbt7bUDPdoO1il4kfi\ntS1bGmW/tyXeQQk5TK43anJjqPfQm++MqR+lEx9cGL6WDmTqT8YufJwOfG7DqkXlNCVcf/9XP3n9\n2MdMRBwUERwA5vXS1xTZ3Z7c19EZi+3qCmx7JbJG9n9b4h2UkMPkeqOmCP5eT89v3h66EQgseqDt\nz1ruufDP+/f/8Hs/6b/n3/zf25qrS/yanBw909fbe/ZqID184ljv8cHxkm4Ofv30G28cOqLvQni9\n/yevfve7Pz0fmDi69z9/d88/vq8wEfGyJYIDQJGEGto698Q6IpFoLNrWIIvRlngHJeQwud7otOon\n//L/jX5zjbbcfdcDT2/5sy1btnzzhchffvPp+0q/BL5g2YNNG5o3tba2bt7UvOGR1UsqStn6PV/7\nLz/+799+bHHm48WNz7/47b/d3d3d/T92/+23d3zt8xITEQdFBAcAAADcQAQHAAAAiOAA4C7lqlbH\n+em1cc4FAMDpQjGmbfXz6dUJIjgAFEcyPpp5SH9wKcXJAADYXYmP6ReKDwu6UBDBAQDArD1VqKL3\nZOfsFbH1VXPAs6icEcEBwKZ6nXZtlBpLva0EAMAfVqyv1y4Uawu7UBDBAQAAgJIiggMAAABEcAAA\nAIAIDgAAAIAIDgAAABDBAQAAABDBAQAAACI4AAAAQAQHAAAAQAQHAO9LxQ9GIx3RWCwaiXbHU2K0\nJd5BCTlMrjfqwT54oRvCPwGYiIjgAOB6AO/btX1faNvOaCTyUrvUtWPvuZT/2xLvoIQcJtcb9WAf\nvNAN4Z8ATEREcABwP4H3dx++XNdUJ6sfy+HmmosH9w+k/N6WeAcl5DC53
 qgH++CFbgj/BGAiIoID\ngPsS8bgiBUOS9okk1UjJ+LDi97bEOyghh8n1Rj3YBy90Q/gnABMRERwA3KekzCslmRWURDLh97bE\nOyghh8n1Rj3YBy90Q/gnABMRERwA3CfJsumzzCQuS5Lf2xLvoIQcJtcb9WAfvNAN4Z8ATEREcABw\nXyhcKynJhP4bS0VJKsFwXcjvbYl3UEIOk+uNerAPXuiG8E8AJiIiOAC4T27c2lIz3KPtYJWKH4nX\ntmxplP3elngHJeQwud6oB/vghW4I/wRgIiKCA4AXMnhTZHd7cl9HZyy2qyuw7ZXIGtn/bYl3UEIO\nk+uNerAPXuiG8E8AJiIiOAB4QaihrXNPrCMSicaibQ2yGG2Jd1BCDpPrjXqwD17ohvBPACYiIjgA\nAADgM0RwAAAAgAgOAAAAEMEBAAAAEMEBAAAAIjgAAAAAIjgAAABABAcAAACI4AAAAACI4AAAAAAR\nHAAAAAARHAAAACCCAwAAACCCAwAAAERwAAAAgAgOAAAAgAgOAB6Vih+MRjqisVg0Eu2Op8RoS7yD\nEnKYXG/Ug33wQjeEfwIwERHBAcD1AN63a/u+0Lad0UjkpXapa8fecyn/tyXeQQk5TK436sE+eKEb\nwj8BmIiI4ADgfgLv7z58ua6pTlY/lsPNNRcP7h9I+b0t8Q5KyGFyvVEP9sEL3RD+CcBERAQHAPcl\n4nFFCoYk7RNJqpGS8WHF722Jd1BCDpPrjXqwD17ohvBPACYiIjgAuE9JmVdKMisoiWTC722Jd1BC\nDpPrjXqwD17ohvBPACYir0TwOwBAU54RXJJl02eZSVyWJL+3Jd5BCTlMrjfqwT54oRvCPwGYiLwS\nwQGgnIXCtZKSTOi/sVSUpBIM14X83pZ4ByXkMLneqAf74IVuCP8EYCIiggOA++TGrS01wz3aDlap\n+JF4bcuWRtnvbYl3UEIOk+uNerAPXuiG8E8AJiKX
 I/gtAMiizDJ4U2R3e3JfR2cstqsrsO2VyBrZ\n/22Jd1BCDpPrjXqwD17ohvBPACYidyM4AIhOudhz+IjdO6OW7ws1tHXuiXVEItFYtK1hfqftkrUl\n3kEJOUyuN+rBPnihG8I/AcpsIkrF++xXgjd+258kggPAvBj40ct/ZbdvIMWpAYBycfFI1H4l+Jtd\nhy8TwQEAAADfIIIDgM2y1teOZrenWeYUAUC5CLcfzH5F6OlsKuiSQAQHACdydpwcAOCSMLcrAhEc\nAAAAKCkiOAAAAEAEBwAAAIjgAAAAAIjgAAAAABEcAAAAABEcAAAAIIIDAAAARHAAAAAARHAAAACA\nCA4AAACACA4AAAAQwQEAAADY/f9NLbRQj+pzywAAAABJRU5ErkJggg==\n",
-      "text/plain": [
-       "<IPython.core.display.Image object>"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "from IPython.display import Image\n",
-    "Image(\"../images/mlp-1.png\")\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>y</th>\n",
-       "        <th>x</th>\n",
-       "        <th>id</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 18, 18, 126, 136, 175, 26, 166, 255, 247, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 36, 94, 154, 170, 253, 253, 253, 253, 253, 225, 172, 253, 242, 195, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 238, 253, 253, 253, 253, 253, 253, 253, 253, 251, 93, 82, 82, 56, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 219, 253, 253, 253, 253, 253, 198, 182, 247, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 156, 107, 253, 253, 205, 11, 0, 43, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
 4, 1, 154, 253, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 253, 190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 190, 253, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 241, 225, 160, 108, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 240, 253, 253, 119, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 186, 253, 253, 150, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 93, 252, 253, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 253, 249, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 130, 183, 253, 253, 207, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 148, 229, 253, 253, 253, 250, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 114, 221, 253, 253, 253, 253, 201, 78, 0, 0, 0, 0, 0, 0, 0, 0, 
 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 66, 213, 253, 253, 253, 253, 198, 81, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 171, 219, 253, 253, 253, 253, 195, 80, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 172, 226, 253, 253, 253, 253, 244, 133, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 253, 253, 253, 212, 135, 132, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(5, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... (2328 characters truncated) ...  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1)]"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql SELECT * FROM mnist_train LIMIT 1"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAABHEAAAJ7CAYAAABkow0dAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA7EAAAOxAGVKw4b\nAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpu\nczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9\nImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRm\nOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8v\nbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3Rp\nZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+Cjwv\neDp4bXBtZXRhPgpMwidZAABAAElEQVR4AeydCXycZbn2r+z7vjZ70nRf6Eb3li60tBQoFhBRRBFF\nkSMHRBE+RCschKOiHhVRBBFEEGyB0rKUFlq67033pM3S7Pu+zWT9nvsNk06SSTJJZiYzyfXwCzPz\nLs/yfyfTvNfc93U7tasGNhIgARIgARIgARIgARIgARIgARIgARIgAbsm4GzXs+PkSIAESIAESIAE\nSIAESIAESIAESIAESIAENAIUcfhGIAESIAESIAESIAESIAESIAESIAESIAEHIEARxwEuEqdIAiRA\nAiRAAiRAAiRAAiRAAiRAAiRAAhRx+B4gARIgARIgA
 RIgARIgARIgARIgARIgAQcgQBHHAS4Sp0gC\nJEACJEACJEACJEACJEACJEACJEACFHH4HiABEiABEiABEiABEiABEiABEiABEiABByBAEccBLhKn\nSAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKuREACJEACJOAYBPLLarDrZCYul1Qgt6IaFdUNqK7Va5P3\n83VHaKAPYoMDkBAejKVXJSAuPNAxFsZZkgAJkAAJkAAJkAAJkAAJmEXAqV01s47kQSRAAiRAAjYn\nIMLNR0fSsOPUJVTWNaAitBT5PoVodtOjya1JPTZpc3Jrdodbsxvcmz0xpiECYeWR8HX3wNrZE7B2\n7gREh/rbfO4ckARIgARIgARIgARIgARIwLIEKOJYlid7IwESIAGLEKiu1+Hl7Ufx8bGLyAvLRkFo\nPqr9KwbUt39NIKIqYxFbFI/l08fiu+vmIdjPa0B98GASIAESIAESIAESIAESIAH7IUARx36uBWdC\nAiRAAmhta8Mbn53CG7tPIjckBxdjL3RG2wwWj2uLG8YXTEJ0fhxuXzYd31w9Gy7OtEQbLE+eRwIk\nQAIkQAIkQAIkQALDRYAiznCR57gkQAIk0I1Ao74Zj73yMY5VZOBE0jE0etV3O2JoL92bPDA7Yx5m\n+CbgmbvXIsDHc2gd8mwSIAESIAESIAESIAESIAGbEqCIY1PcHIwESIAETBMQ75sH/7IV5/0u4kL8\nGbQ7Wc+ubELuZEypnITffHsdEscEmZ4Qt5IACZAACZAACZAACZAACdgdAYo4dndJOCESIIHRRkAE\nnO/8fjNOxaWgICLHJsuPLIvGzKzZeP7+mynk2IQ4ByEBEiABEiABEiABEiCBoROgKcLQGbIHEiAB\nEhg0AUmh+m8VgWNLAUcmW6SMko+PPYIfvrgNYqLMRgIkQAIkQAIkQAIkQAIkYP8EKOLY/zXiDEmA\nBEYoATEx/skrH+Gcb5rNInCM
 UZYEF+FCSCp+8vePNENl4318TgIkQAIkQAIkQAIkQAIkYH8EKOLY\n3zXhjEiABEYJgdc+PaGZGKclnB22FafFnscpXSb+vO3QsM2BA5MACZAACZAACZAACZAACZhHgCKO\neZx4FAmQAAlYlICkML21+zRSko5b1cTYnEmfSDiKbYdSUVpl2WpY5ozNY0iABEiABEiABEiABEiA\nBMwnQBHHfFY8kgRIgAQsRuCvHx1GTuhli5cRH8wEm9z1yI2SaJyDgzmd55AACZAACZAACZAACZAA\nCdiIAEUcG4HmMCRAAiRgICDVqHaeyEB6bJph07A/XhpzEQfSspGeXz7sc+EESIAESIAESIAESIAE\nSIAETBOgiGOaC7eSAAmQgNUIbD18Ablhl9Hs1mS1MQbacYtrMzLD07HtSOpAT+XxJEACJEACJEAC\nJEACJEACNiJAEcdGoDkMCZAACRgIfHrqEgpViW97awWhufgsJcPepsX5kAAJkAAJkAAJkAAJkAAJ\nfEGAIg7fCiRAAiRgQwKSSlVVp0O1f4UNRzVvqAbveuidmnA+u8S8E3gUCZAACZAACZAACZAACZCA\nTQlQxLEpbg5GAiQw2gl8ejIDZaHFdoshX0XjHDqfa7fz48RIgARIgARIgARIgARIYDQToIgzmq8+\n104CJGBzAulFpSjytV8Rp8SzFGdyCm3OhQOSAAmQAAmQAAmQAAmQAAn0T4AiTv+MeAQJkAAJWIxA\nfkWNMjTWW6w/S3ckZstlNfWW7pb9kQAJkAAJkAAJkAAJkAAJWIAARRwLQGQXJEACJGAugcraRjS7\n2k9Vqu7z1nk2ap493bfzNQmQAAmQAAmQAAmQAAmQwPAToIgz/NeAMyABEhhFBOrrm9Hkbr8ijkQJ\n1de2jKIrwqWSAAmQAAmQAAmQAAmQgOMQcHWcqXKmJEACJOD4BNrbndDu1DbkhUxonI8K10KUumVr\nfclrZ7g
 h1XP/kPpvd2qHd1AEntp2GYmhnurHC/EhnogJ8hjynNkBCZAACZAACZAACZAACZDA0AhQ\nxBkaP55NAiRAAgMi4O3tAvcmT+g9dAM6r/vBTc46LKn5Ki55HUamx0nkuafh6robkdQ4E0f8tnSK\nO93P6++1zA3NFbhzfgTSSxpxobAeH54pR3FNE8YEeCA5vEPUEYFHhB0XZ6f+uuR+EiABEiABEiAB\nEiABEiABCxGgiGMhkOyGBEiABMwhEBzgBbdmN3MO7fOYLI8U+LeGYlzjPEQ0J2JnwMvYHfAaYpsm\nY3HNV1CgRJ0Unx3QOw/MpNhT5wV/H3ctAkeicAytta0deZV6ZJXpkF2uw6cXKjVhJ8LfvYuwExXo\nATcXCjsGbnwkARIgARIgARIgARIgAUsSoIhjSZrsiwRIgAT6IRATHAD3RhXtYoF2ynsnApojEdGS\noEXgZHqdRK77eRQGp2Nqw3Ksq3wAp312It3zqNmjuTW7IyLQt8fxEnEjaVXyY2imhJ3Caj1E2JFI\nHTlWIndigjwp7Big8ZEESIAESIAESIAESIAEhkCAIs4Q4PFUEiABEhgogaSIUASdC0QRcgd6qsnj\nD/i/jbWV38fV9Tch3+OiFnnT4tSkonC247JnCubWrkeSriPFqsql2GQfxhuDG4MxLj7UeFOvz3sT\ndgqrm7RonayyRhzKrEFuhR5hfm6dwo5E+EgqlqcbvfV7hcsdJEACJEACJEACJEACJGCCgFO7aia2\ncxMJkAAJkIAVCOSUVOGeP27CzjkfWKx37zZ/3FjxECqV0fEngS/26DdZdzWm11+Ly8o757TPZxCR\np7e26tRaPPf19ZiWGNHbIYPaLqlYkoYlwo4hJSvU102L1hFRxxC5Q2FnUHh5EgmQAAmQAAmQAAmQ\nwCghwEicUXKhuUwSIAH7IBAXHggfN3f41wSixr/KIpNqcK7BroB/YlX1tzChYRHSvPd3
 6VfSqSTN\nakb9Kk3sOea3VXvd5SD1wqvRBx6tHhYXcGQcibyRn0XJAZ3DirBTUKVHhjJQTsmtRWapDsE+rp3C\njhyfFOYJb3eXznP4hARIgARIgARIgARIgARGMwGKOKP56nPtJEACw0Jg9axxOJeeZjERRxZR4paJ\nc157Mbt+DQrdL6LGtbTL2sTg+LDfewhtjsW82i8h2WUujvhuQb1LZedxY0pjsHBSfOdraz8xCDtz\nE/07h5IqWBKxYyzs+Hm6aMLOWKmMFexJYaeTFp+QAAmQAAmQAAmQAAmMNgJMpxptV5zrJQESGHYC\nWkrV7zdj9+ztaHFttuh81lX+AJ6t/tgS8ute06ac2p0xUbcIUxqWINXzIM55fw4nlVi74uhavHC/\nEniiQyw6p6F2ZhB2ciqkMpZelT5v0KJzxDjZUOo8OdwbIvawkQAJkAAJkAAJkAAJkMBIJkARZyRf\nXa6NBEjAbglsfGMH3iz9HBcTzll0jh5tPvhSxU9Q7pqrlR1vd2rrtX/x0pldtw6BrZHIaziG67wn\n4Zlvru31eHvaUVHfrHnriMeOQdhxc3HWRB3x2IkP8VCVsSjs2NM141xIgARIgARIgARIgASGToAi\nztAZsgcSIAESGDCBitpG3P70G9gzewea3PUDPr+vE5Ib52J2w1qkeRxCiu/2vg7V9sU2TsLiqtsw\nOzEI314agwAvx8y0NQg7ko7VYaKs09Yn0TqxwR5K4OkwUA72ceuXCQ8gARIgARIgARIgARIgAXsk\nQBHHHq8K50QCJDAqCPz1w0N4+cxeHJ14wOLrXV39HQS2ROKYzwfI9DzRZ/+zLl2NO5OXITY2GbtS\nq7BhVhiWTQiElBB39Fara9XSryRax1AZq7m1TYvSkWgdCjuOfoU5fxIgARIgARIgARIYXQQo4oyu\n683VkgAJ2BGB1rY23Pf8u9iNY7gUl2rRmfm1hmBt1ffhBGd85v8
 PlLplm+w/KW8cFjXOwUsP3gJ3\nVxetWtRrB4uga27DNxZGaiKHyRMdeKOxsNPhs6NDQ1OrttZYVRFLM1BWfjsR/u4OvEpOnQRIgARI\ngARIgARIYCQSoIgzEq8q10QCJOAwBKrrdbjrN2/hQMwhlIUWWXTeUxqWIr5pujI69sP2wL90qUQl\nAwVVhmFh5kK89uPbEezn1WXs/enVeOtoCWbH++G2OWEjvsy3iDhS4jxbmSdLZSxJxxKxR0qcS0Us\nCjtd3h58QQIkQAIkQAIkQAIkMEwEKOIME3gOSwIkQAIGAlmFlbjvT+/iWPJhlAeXGDYP+VGqUEk0\nTp1LOfxawrA96C+dFatEwJl7aT5+e+8NmBwfbnIsETZEyDmZU4c75kZgwdgrpcBNnjDCNnYXdgqq\n9Kiob/nCX0cqY4mBsiekVDobCZAACZAACZAACZAACdiCAEUcW1DmGCRAAiTQDwERcv77r+/jfPAF\nZMSn9XO0+btDm2OxuPZ2VLl0iEOf+7+O+LwkTCmdgl996/peBRzjEcRL5u/7iuDj4Yy7F40Z1WlG\nkmZmME3uqIylQ1ldsybmiIEyhR3jdw6fkwAJkAAJkAAJkAAJWJoARRxLE2V/JEACJDBIApJa9fDL\nH+BUYwZOJ52wWNWqOXU3wrXdFSHNMWipr0VoYyP+8L31PVKo+pp2a1s7PkutxHsny7B8YiDWzwiD\nm4vjGx/3tWZz93UXdvIq9SiuacKYAClz3hGtIwKPROyMBLNoc7nwOBIgARIgARIgARIgAcsToIhj\neabskQRIgAQGTUDMjn///n58fPgissZcQnZ0Jlpcmwfdn5zo3uqJ9eUPo6E4F6FjxuGuRVFYMTF4\nUH1WN7bgjcPFquJTo2Z8PD3Gd1D9jPSTmlvbkVep0zgZIndMCTtRgR4Uw0b6m4HrIwESIAESIAES\nIAELEqCIY0GY7IoESIAELEWgtKoe//f+Xh
 y6mIuM8EsoCStAg3f9gLr3avRBREkUxhaNw9Rx4+Ds\nHY3vXRONX23PwY+vi8OESO8B9Wd88Nn8ekgVKynTLX45wT5uxrv53ASB3oQdqYIlkTriryOROzFB\nnhR2TPDjJhIgARIgARIgARIgAYAiDt8FJEACJGDHBNLzy/HOwbPYcyYLOjQhJ+Qyqryr0OzWBJ1n\no3rUa7N3a/aAp84Lbs3uCGwIRFxlPDzbPDB/Uhy+suQqJEeH4A+f5mkpPSIaSDTNxpsSEeY3ePFF\nRIkPTpdj+7lyLb1q1eQgpgsN8L0kaWqSfpVVpipjqYpYEuFUWK3XfIcMwo747Egqlqeb8wB75+Ek\nQAIkQAIkQAIkQAIjjQBFnJF2RbkeEiCBEUvgfHYJ9pzNwrncIpTXNqBa3ew3NrRq6/XydkGA8mAJ\n8fPG+KhwLJuWhGmJEV1YVNQ344n3svD4ungcyKjGscu1mpAzVHGgtLYZr+wvhKRaifGxRJOwDZ6A\nKWFHUrNEfJNoHRF1DALPUK/d4GfJM0mABEiABEiABEiABIaDAEWc4aDOMUmABEhgmAh8eqFSE3Ce\nuCEBv9uRCxUIggevjbFIBM2RrBq8fqgYM+N8cfvV4fB2dxmmVY7MYSVip8Nfp7EzcifU100TduKU\nuBMf7ImkME9yH5mXn6siARIgARIgARIgAY0ARRy+EUiABEhglBF4attlLBkXiPlJ/pDnYk4soosl\nmlRq2nS8BAczarQ+l44PtES37KMXAqaEnQAvV03YGSuVsSjs9EKOm0mABEiABEiABEjAMQlQxHHM\n68ZZkwAJkMCgCRRU6TXx5tlbxkJSdyTFSkQcSwouIi68tLdAi/C5Z/EYSBUmNtsQkOsr/DOUv052\nhQ6ZpTr4ebp0ROwoUUfMqJPDvbVttpkRRyEBEiABEiABEiABErAUAYo4liLJfkiABEjAgQi8c6JU\nu9F/YGWMZqb77EfZQ
 65YZWr5u9Oq8NbRYiybEKTMj0NpzmsKkg22SXlzScUyFnbET0e8dcRjh8KO\nDS4ChyABEiABEiABEiABCxCgiGMBiOyCBEiABByNgFSWevzdTFUePFx52Phhf3q1RSpWmeJQq2vV\nhJxzBfW4c34kZsf7mTqM22xMQIQdidjJKlMRO+V6JeY1qNLmzlrEjog6BgNllo+38YXhcCRAAiRA\nAiRAAiTQBwGKOH3A4S4SIAESGMkE0ooa8JfP8/HMhrFahIx42ViqYpUpbjKeVLGSKksi5gylvLmp\n/rlt6ASkgpmUOzcWdqRXSb+isDN0vuyBBEiABEiABEiABIZKgCLOUAnyfBIgARJwYALiWyNpNSKq\nSLN0xaruaMSD58Mz5fj4bAXWTA3G9dNCLFIZq/s4fG05AgZhJ7eiI2pHRJ7m1raOiB3lsaMZKKvq\nWCLOsZEACZAACZAACZAACViXAEUc6/Jl7yRAAiRg1wQamlrx6OZMiDdOsqpmJNWlLF2xyhQAEQZe\nPVCEwuomiPHxhEhvU4dxm50SkBQ5Sb+SNCyJ2hFhR947UuJcKmJR2LHTC8dpkQAJkAAJkAAJODwB\nijgOfwm5ABIgARIYGoEjWTXYklKGJ9cnalExIrBYo2KVqVmezKnFaweLMGmMj/LniWDFJFOQHGSb\nQdgpUMKcZqCsjJSrG1u0iJ0rBsqeiAlipTIHuaScJgmQAAmQAAmQgB0SoIhjhxeFUyIBEiABWxN4\n7pNcTBzjjXUqvUlauipPba2KVd3XJibLUi1rd1qlKnUeoSpZBXY/hK8dlIBEekmJcyl13pewMybA\nnWl1DnqNOW0SIAESIAESIAHbEqCIY1veHI0ESIAE7JJAaW0zfrYlU0XjJHUaDluzYpUpCAVVemV8\nXKT5rdy9aIwWwWHqOG5zbALGwk6OitaR0udSKSsmyFNL6YtX/joSuSMROy7OTo69WM6eBEiABEiA\n
 BEiABCxMgCKOhYGyOxIgARJwVAJiNpySW4tH18Z3LsHaFas6BzJ6YhCPFoz1x62zwzXjZaPdfDoC\nCYifjog5Vypj9RR2pDqWCD1uLhR2RuBbgEsiARIgARIgARIwkwBFHDNB8TASIAESGOkEpHKUmBqv\nmhyMRckBncu1dsWqzoGMnki0xltHS3A6rw5fnhMBEXTYRhcBY2EnR6Vjicgj0VpRgR5apI5E7IgZ\nN4Wd0fW+4GpJgARIgARIYLQToIgz2t8BXD8JkAAJGBGQG+VffZyDZ28Z22kybKuKVUbT6Hwq3jxS\nxcrP0wXfWBjJMtadZEbnE/FPyqvUaZ5Nhsid7sJOnKqOJQKPp5vz6ITEVZMACZAACZAACYxoAhRx\nRvTl5eJIgARIYOAE3jxcjFp9K+5dGtV5si0rVnUO+sUTiRDacb4SW0+VaVFC66aHMKWmO6RR/Lq7\nsCNlz0XoifB3/6Iylldn5A6FnVH8RuHSSYAESIAESGCEEKCIM0IuJJdBAiRAApYiIDfFj2xKxz2L\nozA12qezW1tWrOoc1OiJlKt+/VCRSqvR464FkV3mZnQYn5IARPjLq9RrHjsSsSPvXWNhJ05F6sSr\niJ2kME94u7uQGAmQAAmQAAmQAAk4DAGKOA5zqThREiABErAdgbP59apSVKGWVmVsJGswHd54U2Jn\nFSvbzapjJMPc5Ab8zvmRCPBytfUUOJ4DEjAl7BRW67X3j6RfjVX+OvYo7DTqm7HvbDYOn8tFcUUt\nymsaUNOgR0NTixKgXOHv7YFgP29Ehvhh3pRYzJ0YgwAfTwe8QpwyCZAACZAACZCAOQQo4phDiceQ\nAAmQwCgk8MLufAT7uOH2q8O7rH44KlZ1mYB6IdFCH5wuV2lWFbh5ZihWTAxiOerukPjaLAISsdPh\nr9PYGbkjwqAIOx3+Oh7KQNm70yPKrE67HSQC0kDKpTe1tGL7kUvYuv88soqro
 K9Vc0vPh17XpP00\n6Zqha9DBw9Md7urHw8sDnl7uiImPgE+QLxIjArF63gSsnTsevmo7GwmQAAmQAAmQwMghQBFn5FxL\nroQESIAELEqgVteKRzdn4JE1cdoNrXHnw1Gxynh8w/PimibN+FjmKsbHUq2IjQSGSsCUsCNpV4mh\nnupHReyocucDEXak6tvdi8aoSloefU5NxJst+y/glQ+Ooby0CpfTC1BeWI7W1rY+zzPe6ezijODw\nIMSPHYPQyGDcdd0s3LpsKtxdmTZmzInPSYAESIAESMBRCVDEcdQrx3mTAAmQgA0I7LlYhc9SK/HE\nDQldIgmGs2KVqWUfzKjB28eKMT3GV4scos+JKUrcNhQCIhhKxE6G8tfJViXPM0t1WgUsidgRUUfE\nHRF5JHrNuMl5D7+drh0rPlMLxvob7+58vuN4Ov60+QBKiipx9sQl1FXXd+4b7BMvlVY1ZfZ4hEcG\n4Xs3z8eNCyYOtiueRwIkQAIkQAIkYCcEKOLYyYXgNEiABEjAXgk8+1E2Zsf7aZWhjOc4nBWrjOdh\neN7Q1Ip3TpTiSFatJuQsSg4w7OIjCViFgClhRwXCaFE6BmFHfk9ePVDUOf6aqcG4Y25Epyja2taG\n597ah+2H0nDk81MWEW86B/viiW+AD+YsmYZls8bisa8vZ1ROd0B8TQIkQAIkQAIORIAijgNdLE6V\nBEiABIaDgNyobnw/C09/KalHlMFwV6wyxUOiJcSUWcpJSxWrqMC+U1hM9cFtJDBYAqW1zchRkTpZ\nZSpiR1VSu1BYD4lcM26S9vfAyhigrQWP/vVjnDmfi6N7Tg0obcq4P3Oeuyh1acb8yZg8KRbP3b8O\nYYFXKs+Zcz6PIQESIAESIAESsA8CFHHs4zpwFiRAAiRg1wS2nirDxeJGPLw6tsc87aFiVY9JqQ2f\nXqiEmDCvnBSE9TPCYFxly9Tx3EYC1iDw3Ce5OJlT26Pr
 QGWeXHjpFM6lpCLtVGaP/dbakDQpDpOm\nJ+GVR2+lkGMtyOyXBEiABEiABKxIQAX9spEACZAACZBA3wSunxYCSQs5klXT40BJW1o+MRDPfZLT\nI+Kgx8E23CDiza9uTVbzbsEjm9JxOq/OhqNzKBLoIJBe0tCJIsLfXUtLfOjaaOjyz+H8qYs2FXBk\nIpkXcnA+JQMP/mkbpHw5GwmQAAmQAAmQgGMRYCSOY10vzpYESIAEho2ApE49vytPS6syZRxsLxWr\nTAFKK2rAy/sKMSbAXati1d181tQ53EYCQyUgVdNe2lugGW6L6XaYX4fp8S9e2YkPdp9RKVSnhzrE\noM+fuWAyViyegt98//pB98ETSYAESIAESIAEbE/AZaNqth+WI5IACZAACTgaARE+imuacTa/HjPj\n/HpMX7ZtP1eBchX5MjXavvw2Qn3dsGJikJpbM/62pxBwAsaGecHZST1hIwErEfBwdVbVqAKQpN5r\nPh4dJb7f2XsOb20/icO7U9De3m6lkfvvtji/FM4+XnDzcMNVqhw5GwmQAAmQAAmQgGMQYDqVY1wn\nzpIESIAE7ILA7VeHK3+POkhkS/cmRsLimSNlyeXH3pqLsxNuvCoUG29KxEU1/8ffzYREF7GRgK0I\nSPrS3z84hqP7zljVxNic9Yh+dGzfObyxIwXV9TpzTuExJEACJEACJEACdkCAIo4dXAROgQRIgAQc\nhYAINXcvitRSk1rbekYRSLTOQ6ti8drBIpNCjz2sU1JaZI63zQnX0sMk3UXSXthIwNoEXtt+Avk5\nxWiotQ/xUNegQ05mIf665bC1l87+SYAESIAESIAELESAIo6FQLIbEiABEhgtBCRtKibIA1tSykwu\nWcon371oDP7waR6k3LK9ttnxfnhmw1j4ebri0c0Z2J1mf9FD9sqO8xo4gQol3Ly79zzOn8wY+MlW\nPOPimSzsPJ6O/LKepuVWHJZdkwA
 JkAAJkAAJDJIARZxBguNpJEACJDCaCdw5P0Ir4V1QpTeJwV4r\nVnWfrEQWSYrY4+visfdSFZ7adhl5labX1P1cviaBgRDYdjAVORkFaNI1DeQ0qx/b0tyCrLQ8bD1w\nwepjcQASIAESIAESIIGhE6CIM3SG7IEESIAERh0BSZvaMCtMS6vqbfG3zg6HlFR+flc+TKVe9Xbe\ncGyPCvTAEzck4JrxgXjmw2y8ebjYrsqlDwcTjmlZAh8dSkNBTsmgOp21chmSZ0yHl691DMMLVIrX\n9iOXBjU3nkQCJEACJEACJGBbAhRxbMubo5EACZDAiCGwclKQtpa+0pDuWxaNClURatPxUodY91Il\n4vz6trHQtbThkU0ZOJ5d6xDz5iTtm4CkKpVX16O6fHApSz6BAZi37jps+O/v47pvfg1TFy1AUES4\nxRYtHj31DXqk55dbrE92RAIkQAIkQAIkYB0CLDFuHa7slQRIgARGBYFxyv/mz7vzsWRcICQ1qXtz\ndXFS5ch98Y/9Rcp7xgXxIZ7dD7G7124uzloJ9XER3njzSDFScuswLty7s0S03U2YE7J7Au/vv4Bd\n+8+jMHdwYmZgWCgi4mO1dXr7+yEyIQ7jZs3A2Kumoqa8ArWVQ/dz8vByx5ioEMwaH2X3PDlBEiAB\nEiABEhjNBHr+xT2aaXDtJEACJEACAyIgaUirJgfj1QNFvZ7nCBWrTE1eDJqfXJ+IKVE+2Ph+Ft47\nWWb3aWGm1sFtw0/gcmEF8vNMG4Gbmp1PQACik5Mwaf7VWHDjWsRPntjjsPa2NhRfzkVDjWWixcqK\nK5GaPbh0rx6T4wYSIAESIAESIAGrEXC1Ws/smARIgARIYFQQuPGqUDz+biZO5tRqESymFm1csWrj\nTYmQMt+O0FycnbBmajDmJvppUTmPvZOplVifNMY63iSOwIRzHDiBooo6NOt7Ghr7hwQjIDQE8hgU\nEQbfIHkdrB
 1bWVyiomzKUZZfiOLsXE3MMYxcV1WFnAtpcPfywsL16+AXHITqsgp1bAGq1HnlhUWo\nKilFe3u74ZR+H5ubWlBWVd/vcTyABEiABEiABEhgeAlQxBle/hydBEiABByegJtKmbpn8Rj85fN8\niLhhKq1KFikVqwqr9XjukxyIkNPbcfYIRKKJ7l8eg9N5dXhpbyFElPrqvAgEePGfUXu8XvY2p8rG\nVoRExSAyabwm1viHdAg3TTo9DGJNcXYeUo+c0IQb2W7cXFxdO0WcSydScGLnbrQ0N3ce4uTkhMDw\nMISMiUSg8spJVqlWfkGBWpqVsbAjqVetLS2d5xk/0SlPnMq6RuNNfE4CJEACJEACJGCHBJzUtzTm\nf01jhwvglEiABEiABOyDwEt7CzRh5s75kX1O6Hc7ctGm/uV58NoYSKSLo7Xm1nZsSSnFrtQqrULX\nsgmBDrkOR+Nu7/OVCmyF1U0oqNKjuKYJORU69bzjdVOTHkU5EiVTqgkrBuGmu1jT1xqv//Y3cO7A\nEWSf7ygFHhodhfa2VhV1U4wJc2Zq0TpVpVdStroLO3K8RPnUVlR2ROqoiB1N4Ckt14QdF+UFteym\nhdj523v6mgb3kQAJkAAJkAAJDDMBijjDfAE4PAmQAAmMFAINTa14dHMmHlgZo0Wq9LYuXXMbntp2\nGdNjfHH71ZarsNPbeNbaLjfqr+wv1EqRf2NhJBJDvaw1FPu1IwLGYk1epR7yI8KNCDjBPq6ICfJE\nVIA7ooM8EBvsgTEBHvjyz1/Hji0HoWvQDXolrm5uWvSNGBsv+dKNCFGiTM6FVOx7d5vyzJmEqYvn\nY/srr3eJ0Ok+mAg7kr4lla2Cx0So6KAx6nUo6qurUVFUhLAIP/z23hVqDR4OFSnXfZ18TQIkQAIk\nQAIjmQBFnJF8dbk2EiABErAxgSNZNSpKpUwzBO4rykbKjj/xXpYm4khZb0duBzNqNL8c8c3
 ZMCsM\n3u4ujrwczv0LAn2JNaG+bhBT7+5iTW8pgl976t/Y+s5+1FbVDZqvb1AQ5q1dhYiEeCgtRmtHPtoB\nSa+SNlftc3V3x4EtH2ivB/I/qX4VHheNqxZMx7QJScgu10HWKNXkRJxMDPXUnve2voGMxWNJgARI\ngARIgASGRoDJ/EPjx7NJgARIgASMCMxN9MfeS9X4+FwF1k0LMdrT9amhYtWzH2Ujwt8dEyK9ux7g\nQK8WjPXHVbE+eOdEqRaJdMfcCMg2NscgIOlxEkkjqU8dKVAdUTUSaSXvzTEqqkYEm6sT/NVjx3Px\ngRpI8/fxhJvH4My8xdtm3g1rEBHXUWLceNzi7JzOl8d37MJ13/yaVnrcIOx07uzniZaG1d4M71nR\neOKGFdrRhgijjJJGpOTWIrNUp0UaGYQdidZJCvOkaNkPW+4mARIgARIgAUsToIhjaaLsjwRIgARG\nOYG7FkTiZ1syMVfd9PZVhcpRK1aZurwSfSNeQGLeLOXWP79YqapYjdFEAFPHc5vtCfQm1oiAIyKN\nQayZnxQwaLGmt1VFh/rD3dO9t919bo+ZON6kgCMGxWJUbGjyeu/mLbju7js1rxvx3RlIc3N3RWjg\nlaprItLIjwizhibClkTpGAs7fp4uWpTOWGX2HR/sSWHHAIuPJEACJEACJGAlAhRxrASW3ZIACZDA\naCUgws36GWF4eV8BHl0b3ycGR65YZWphknryxA0J2J1WhSe3XsbyiYEai4FGbpjqm9vMIyCeS1IF\nTSJrDNEk4lcjAoRBqBFxwhpiTW8zTBgTjMjIIBRlF/d2SK/bLx49ATflhzN18cLONCo5uK6qpsc5\ntZVVOPzBdiy5ZT0+/Ns/+vTH6X5yaEQQJsb37VElkUnyY0rYkSim7SoCL72kQYvO6YjY8dSEoORw\nb4jYw0YCJEACJEACJDB0AvTEGTpD9kACJEACJNCNgPiJiHnxqsnBWn
 RKt909Xjp6xaoeC1IbanWt\neP1QkbqpbYQYH4uRM5vlCBjEmtwKPfLFXFgJNXmVOlTUt3QRa0SwMUTa9OXTZLmZ9ewpv6wG33p2\nEz7ZvLfnTjO2iCHx+vvvhbe/rxJynLUzLp9Lxf73tpo8e/aq5fAJCMCeTe+Z3G9q4+ovLcbzD9+M\n5Oje0yBNnWdqm3heZZXp1E+jitzRa8KOm6p+Jd46InTGh3go83MKO6bYcRsJkAAJkAAJ9EeAkTj9\nEeJ+EiABEiCBAROQm2VJJ/rVxzmaeNHft/D3LYvWRJ9Nx0sdumKVMShZs6zrQmG9qmJVpG5cqyB+\nOeIHxGY+gd7EmqqGFk2ckcgQEWqWjJM0qHBNwBkusaa3VUk6VbC/N/yD/VBTUdvbYb1uX3TzOnj6\n+mLbX19BwtSJmLZoEUrz8no9/sTO3Sqt6uuYOHcOUo8c6/U4ww4v5dnj7a2EFQsIONKnvMflZ3a8\nn2EIJa51CDuSjiWRavI7IU2EHaniZTBQ5u9HJzI+IQESIAESIAGTBBiJYxILN5IACZAACViCwJuH\ni1Grb8W9S6P67W4kVazqvliJTNp6qhw7zlfgxqtCVYRSEOxNaOg+Z1u/lhL1kgIlN/mGdCh5Ltu1\nSlDKVDhOea4Yomrk0ZHaa5+cxDMvfIjUlPQBTXvKwnmYrH5SDx/Dmb0HtHP9g4O0VKmG2t6rXUkk\nztp7vo5db/4H5YV9p3ElT0nAw/euwfdumjeguQ31YIlWk/QridaRqB2J3mlubdOidCRah8LOUAnz\nfBIgARIggZFIgCLOSLyqXBMJkAAJ2AkBMZN9ZFM67lkchanRV0xTe5uepB5JxaofXxfn0BWreltf\naW0zXjtYpEUlSKSSmDuPtjbSxZrermdFbSPu+MWb+Oz9g0qAaentsC7bo5OTsOCmddDV1eODv72C\n9vb2Lvv7exE1NhFSevzDl15Fk05v8nAXlea0Y
 v1CvPLYbZCIoeFuxsKO+OwYhDwRdGJVxJVmoKxK\nn0sEFhsJkAAJkAAJjEYCFHFG41XnmkmABEjAhgTO5ks6USGevWUszDH43Z9ejTdUBM/GmxL7rG5l\nwyVYfKjj2bVaFauZcb5a+phUtxppTW7GxaNGzIXFVNgQZaNvaVMpTx5aCk20+NWoEt5yQ+5okTWD\nuV5/fOcg/vbvz3HmaFq/pweGqYitu76mBJ8mrepUWX5Bv+eYOmDG8qUIigjHrn9vMrUbE6Yn4s5b\nluCndy03ud8eNorwJyXOs5WoI5WxRNiR95eUOJeKWBR27OEqcQ4kQAIkQAK2IkARx1akOQ4JkAAJ\njGICL+zO1zwybr+67+o3BkSbjpfg2OVaTcjxdOswcjXsGymP4vWyJaUMey5WaULO0vGBDrk0Y7HG\nUBFKxBuJwuou1sQEeY5YYc6ci1fX2ITbfv4GPv/wMBrrdb2e4uXrg+u++TWthHh1WTmO79jV67H9\n7RBT5FV33YH8Sxk4d+Bwl8Ol7Pk16+bh3z+/A8F+jhUV1l3YkVLxYmrd4a9jMFDuqI7VZdF8QQIk\nQAIkQAIOToAijoNfQE6fBEiABByBgNzoP7o5A4+siVMGv55mTXkkVqwytXCJVJFIJWn3LB5jtxEp\n1Y0tKppG/0XZ7o7y3SLWKAsTNecOc+ExyqdGImtGu1hj6jobtr2z9xx+96/d2P/JMZUeZdh65dEg\nuki58LCY6AGXCr/S05Vn3n6+mtHxvnfeV4bI+doOpe1g/vKZuGfDAtyz7uorBzvwMxFGJUrnSmUs\nHcrqmrXPnCuVsSjsOPAl5tRJgARIgAQUAYo4fBuQAAmQAAnYhIBEnHyWWoknbkgwy9RXbsikTLmU\n5jY3gscmC7HSIFKx5z/HSiARORtmhZmVemaNqYhYIzfCElUjBsOG5zKWiDUiwkmEjeF5gBcLXQ70\nOvxYGRx/tu88Thw41+PU
 BTeuhYe3N3z8/ZCyaw/y0zN7HDOYDZEJ8Zh/w3X46OV/Qt/YiMmzx+Ga\nhZPxxwdvUr+PIzPaTTh1F3YM6X3yHhZPKnk/i8AjFc5oNj6YdxbPIQESIAESsDUBiji2Js7xSIAE\nSGAUExDTYik7vGpysFkURnLFKlMAJEVE/IDOFdTjzvmRXUo0mzp+KNso1gyF3tDObdQ347u/eReH\nD6Xi4tmszs6kElXC1MnITb0E/5BA7Ht3W+c+SzyZvnQRwmKjcenQfsxbNAWv/r9b4eUx+kreS6qf\nRJGJkbohckd8m7oLO+LTZI6PlyWuDfsgARIgARIgAXMJUMQxlxSPIwESIAESGDIBuVHa+H4Wnv5S\nkuaRY06HI71ilSkGsuaX9hZohr8i5oT5Df5GWypiyQ1rQbWKrDFKh1JFibS0J4lAMKRDyU0rI2tM\nXRHLb5NqVXc9/TYunrmMS+cvQypRzb3+Ohx4/0MsWr8OH7z4ihYxY8mRJVVr7be+Bm9Vnf33d19t\nF9WoLLm+ofTVm7AjptsSqSMROxK5I6mCFHaGQprnkgAJkAAJDJUARZyhEuT5JEACJEACAyKw9VQZ\nLhY34uHVsWafNxoqVnWH0drWjo/PVeDD0+VYMzUY108L6TPdw1isyVc+O7kVei0dSm445cbTWKyR\n136eI68iVneG9v66tKoeP/rzh8jKq0Lk5DnY/dZmXLVsCTJPn9V+LDl/8cCZMX8yJk5JRFDCNNy3\nLAZTo30sOcSI60t+ByX9Sjx2JGJHxFVJMTQWdqT0ufxujVQD9hF3UbkgEiABEhgBBCjijICLyCWQ\nAAmQgCMRkBujn23JwvoZoZib6G/21EdDxSpTMCSl7PVDxdrNpBgfi/iilexWkTXGYo2Hq7MWLdBR\nrrvDaJhijSmi9rWtrFaPH799EaU5GchMy0P0uHHY+fq/LTpJLx9PzF06HQtmJOFn31iBnMpmPL8r\nH0/
 dnMjIqwGSNiXsSKSb/N51+Ot4dUbuUNgZIFweTgIkQAIkYBYBijhmYeJBJEACJEACliQg32g/\nvytPS6vydjc/ImS0VKwS1lIJqlAJNfKYU6FDZqkOJbVNKpXDWUvriAv20Dw85MZR0qEGwtGS15J9\nDZ6ACAK//DAb4yO84ayrwLvnVARVyiEc35fSZwlyc0eUEuJTZiYjIiYM31gzC19ZMb3zVImIS8mt\nw/+7Pr7PCK/OE/ikTwISsdPhr9PYGbkT6uumCTtx6nc0PtgTSWGe/D3tkyJ3kgAJkAAJmEOAIo45\nlHgMCZAACZCAxQm8eqAIbarG8t2Lxpjd90isWNVdrJGqULJNRBmDQCOGq/JcvHF2nK/ArtQq3DYn\nHMsmBJrNjgfaH4EX9xSgVteKB6+N0SJjYgLdUF2Sh7d3nUFZYTkyVGROVVmVyVLkva1G0qYCQgIQ\nPzYKEbFh+PKyqbh9xVXw9XLvccqvPs7R3lejofpbj8XbYIMpYUc8p+R3eaxUxqKwY4OrwCFIgARI\nYOQRoIgz8q4pV0QCJEACDkFABJlHNmXg/uXRmBDpbfacHbFilURcGKJq5MZOfrSUKCXWBHq7ap41\nUQHuiFbeGrFfRNj0lYohIs9rB4u08skigslNIZtjEZBIGPF62nhTIi4U1mPT8VI8uT5Ri4qpa2zC\n1gMXsP3IJeSX16Cxsg6ZGQXQNejR3NSMZlXdSq9rgkTauLm5wk1VmJKUqbj4CPiHBiAsyAfXzR2P\nGxZMRLCfV69gREB6/N1MfHvJGEyP8e31OO6wHAH53ZXf/wypjPVFhJ2kSMrvcJwSdeJDpPS5Nz2r\nLIecPZEACZDAiCNAEWfEXVIuiARIYKQSyC+rwacnM5BeVIq8impU1epQV9eiLdfHxxVB/sq8NjgA\nyZFhWDlzrENUnjmZU4s3j5TgmQ1JA0rpsNeKVabEGkOkTbC6RuJRMxCxpr/3sogA
 bx0tUd5Cfrh1\ndjjNVfsDZif75X3/yv4iPHFDgnaz/tg7GXhgZYzyUukpuIj58aHzuTh6IRdFSsyprtehXok8DU0t\n8FICjpQID/LzxJhgP1w1LgpLpycgLNB8w+Ksskb8Znuu5o8T7DP4Kmh2gtYhpyGCrqRiGQs7IuJK\nVSx5T1DYGf7L2qiE031ns3H6bBYqlLBaUVOPisZmlDYDYerXJtjLDcH+PggO8cf0qYlYPDVe+90c\n/plzBiRAAiORAEWckXhVuSYSIIERQ0DKEL934Bw+OpGKqjrliRJciBK/UujdddB7NKgfnbZWD70n\nPPTe8GjyRGh9KCLLoxCovplfO2sibl44pc9v44cb1h8+zdOqu2yYFTagqQxnxSopRyzijNx8GSJr\nDGKNGJyOUVE1Uq5bHs2JrBnQwrsd3NDUiv8cK1X+JrX48pwILBhrvll0t6740gYE5P3y5NbLWnU2\niUCTtEJ3VUHsjnkRNhjd9BAfn634IiooYUBiquneuNUSBAyfLSKyZZfrVWWsBs0PSyJ2RNQRcUdE\nHgpvlqBtuo/WtjZ8fiIDu3efQEphDSaXZGP+2YMIra1EcEM1wtRjWF0lSn2DUOoXhArvAJSpxxNT\n5iIlIgkzxvhjydIZuGZWMtxdzfd+Mz0bbiUBEiCBKwQo4lxhwWckQAIkYDcE5Fu/1z49js0HziI3\nJAeFofmo9q8Y0Pz8awIRWRGN+JIE3KBKC3/r2jkmfTEG1KkVDjakRz2+Ll4TPgYyhLUrVhnEGvGp\nEXNhg1AjjwaRRh4lDULMheW5lPQejiY3e3/fV6RFdnxjYaRWLWc45sExeydQ3diCje9n4Uszw7B0\nfKBWsvqF3fmawXdf6XO992i5PWIaLp5Ld86PtFyn7MmiBOSzUsqdGws7MoCkX1HYsRxqEW92HL2E\nf72zF4mXU7Hs1F4syDwFr2a92YM0ubrhSPxU7L5qCc6MnYa
 7b1mCVVePUyKps9l98EASIAES6I0A\nRZzeyHA7CZAACQwTgXf2ncPfdxxDTkAO0mLPocnd/D8cTU3ZtcUNE3ImI6Y0HvdePxcbFk8xddiw\nbvv0QiUOZFRr6SUDnYglKlb1JtbIt+HGkTX2INb0xUfSuT5LrcR7J8uwanIw1k0PGTZRqa95jsZ9\nxpWoxEhYXosfzVdVBI49+NFIRJfMR0Sc2fF+o/ESOeSaDcJOboVeE3dE5GlubVOiTkdFLM1AWT2X\nzzG2/gkcv1iAv/5rJ7yys/DdT17D5MLM/k/q54j0sFj8de03URSThG9/+Rpcc1ViP2dwNwmQAAn0\nTYAiTt98uJcESIAEbEZAvv37nzc+w66sNBxNPogG73qLju3V6IPZmXMxPzwZT359ld3l6z+17TKW\njAsccMWlgVSskmMLq1UZZ3XDk6/SWgq+KOFdVtfcmQIVo8yF5ccQaePiPDyRNUO5+BLx8cbhYu1b\n+7sWRGJqtPkeKUMZl+f2TsC4EpW8p0Rok/fifcuiez/JxnvEl0UqVonZskTlsDkmATGslvQrScOS\nqB0RduSzT0qcS0UsCjumr+urWw9h684TePCDl7A446Tpg4aw9UjCVDy3/j5ce80MfGv9fEblDIEl\nTyWB0U6AIs5ofwdw/SRAAnZBQLxvHnn5Q5xuysCJ5CNodWm1yryc2p0wM30OprSPxe+/d5NdeeVI\nipIIOc/eMhZShncgzZCSJREOkqZiSqzJq9Shor5lRIk1/TE6m1+vVbGSVAuJsBgo1/76537zCBhX\nopK0KXmvP/tRjpZGJZWJ7KlJVJxEc4mQM1ypgfbEY6TMxSDsiHCtGSgrwU7EXonYuWKgrMzxlYA9\n2pqkLz/32k7kHDuDp994VvO5sRaDCp8A/OwrjyBgxjT89Dtr7O7LFGutm/2SAAlYlgBFHMvyZG8k\nQAIkMGACIuB8+/ebcSHgIlLjzwz4/M
 GcMD53EsYVjccrP7ptQJVsBjPWQM5554SqvKUiZKRSjzlN\nUkDEr0bOuVCgqvhk1cDPwwX1artE0ohPjaRASSqBI0fWmMOit2MkVeyD0+XYcb4CN88MxYqJQTSv\n7Q2WFbYbV6IyRLc8/UG2ijoL0ARHKww55C6f35UHb3cXSPl6tpFLQD4/M0t1WqnzvoQdMWh3xIhE\nc66cCDg//u07CE45isfe/dOAfG/M6d/UMeKX89yN30PatLl44f/dTiHHFCRuIwES6JMARZw+8XAn\nCZAACViXgKRQfe9P72Kv00mkxZ2z7mDdeh+XNwHzG2bipYdutZvKGSI4iC/HHXPDMTPuii+HQayR\ndA9JQRHhRp7LdmOxprqxFfsvVeHJm5OYDtLtepfWNquy1oWQb+TF+Dg5vGc5626n8OUQCXSvRCXd\nSaTL0cs1eHRt/BB7t97pEskmv4dStp7VzqzH2R57NhZ2ctRnrHzOijdYTJCn9plhiNyRiJ2RIOz8\nz98+QtPOT/Hk28/Z/HI8s/5+VC9biacfWM/UKpvT54Ak4NgEKOI49vXj7EmABBycwLP/2Y1304/h\nyOT9w7KSOZfm44bI2fj5ndcOy/jdB5UbiIMZNZCqU/OS/FFS06zdROhb2lQalAciA9y+qATVUb5b\nBJzuzdoVq7qP52ivj6hopTePFGtmupJ+JhEXbJYn0L0SlYxgSPtzBM8ZEaCe+TAbg6kaZ3ma7HE4\nCYioJ2LOlcpYPYUdSdkUoceRUvDEA2f/tj34v1d+ZpMInO7XUCJyfvj1n2HqDcvxvQ2Luu/maxIg\nARLolQBFnF7RcAcJkAAJWJfAjhPp+OV7O7F3xk6reeD0twKXVhcsPrscD69eiRvnT+zvcIvtl2gQ\n8aiRG0VDOpS8lkgcEWsam1s1/5YbVHUluTEwpKGYOwFLVKwydyxHPE5uyt5VqWsHM2sgQs6i5ABH\nXIbdzlnex89+l
 I3xEd4aX8NE//BpnmYqu25aiGGTXT/uuViFD8+Ua/44w10C3a5BjcLJGQs7ORUd\nETvi9STCunjsSMSORPvZq7AjVaieef49vPD3n1rVA6e/t4Z45Nz3rf/Bd+++HitmJvV3OPeTAAmQ\ngEaAIg7fCCRAAiQwDASaWlpx29Ov47Pkz1DnWzMMM7gypFStWnH+Wvzn8a9ZPDe/P7EmNtgD0VIJ\nSnkuGIs1EpHz6OZMzRtnMGk/coMhJslSullECjbTBEREe2lvAeQGXapYmYpsMn0mt/ZF4IXd+Zq5\n9kOrYjsPO55dC/F8enJ9okOloUhVLWn3Lo3qXAufkIApAiJeihifXtLYGbnTXdgRjzIReIZTFJQ0\n5vt+8Tru+tfvrVKFyhSbvralxEzAc1//CV5+8i67SW3ua77cRwIkMPwEBlb+Y/jnyxmQAAmQwIgg\n8O7+8yj0LBl2AUdgNnrVo9C/AG/sSsE9a64eFF9JHZFwe4mqEf8EEQfkj/nWNihhwF37o10ibGbG\n+WqRNv1F1kiKz53zIzQPl8Hc9MoNwsOrY/HEe1laNSqpWMXWk4D4Wkhqz+60Kk30WjkpCOtnhDlU\nSkTPVQ3vFikdLu//J25I6JyIiJKvHyrSRElH8xERcW/j+1mQqBz+HnVeUj4xQUBSqRJDvbQfw+7u\nws6ei9Xavw1iNt/hryPH21bY2XH0Eryys+xCwBFOM/LSEJd9CVv3nccty6YZ0PGRBEiABHolwEic\nXtFwBwmQAAlYh4BE4az/+avYN/lzuxBxZJUSjbP09EpseuJr8PVy73XhxmKNGAwbhBs5wVisMTwf\naknr5z7JxcQx3hhs+ol8IyxpLT++Lg4TIr17XRd3QDM8futoMc6pKl9SlUiimNgGRkCibf6+rxBP\n3ZyIYB+3zpNfPVAEd3WDe8e8iM5tjvREoimkotZj18eriLmePlSOtBbOdfgJtLZJxI5e89iRf0
 Pk\nc1pEf4OwE6cideJVxE5SmKfFPbskCuebj/0dj/3zGUwuzBx+GF/MICc4Ej++5yn885d3MxrHbq4K\nJ0IC9kuAkTj2e204MxIggRFK4KMjF1HuX243Ao5glmicsqBibDlwHl9bOUMzYJU/siWyxliscXEW\nsUYMLMVY2AOz4/20b1OHKtb0dqklCuBnWzIxN8F/wL440qekYokgIV4kjmAm2xsHW2z383TBt5dE\nIa2oQYuAkugciYYyFiNsMQ9HHUNuRiU17eHVcV2YyQ1qSm4tntkw1lGXpv3O3zk/EuI19fSXkoY1\nFcZhIXLinQQkGk2icOTH0LoLO4eUwb382yP/tshxY9VnuSWEnc9PZCDxcqpdCTjCIK6iCDPST2OH\n+vtg3cJJBix8JAESIAGTBBiJYxILN5IACZCA9Qh854+b8L7nLpSEd3hNWG+k/nv2aQ1CYGs4/NVP\neEMcYpoT4enpo6XTiEeNiDUSVSOP8lpu9G3dPj5bod0ED6UkMytWDeyqyQ2VGNoK++uVufSaKcEO\n5eMysNUO/WiJUJPUve4m0cLxsXcyNb+hqdE+Qx9omHuQEvWSGnb/8phhngmHHy0E5MsEEUizyho7\nI3cMwk6Hv46HEuu9zf636We/eQvLXvotVqQd6UTY6uwCl7bWztfmPmnw9kOVfyiiirLMPaXP447H\nTca/7/spfv3oHX0ex50kQAIkwEgcvgdIgARIwIYEGvXNuJxXg/J5xTYcFTAWawJbwhHQEoGA1jC0\nOjWjyqUEVa7FKPbOhHdqO56/bw0SI/xsOr++Bls1OQiHMquxP7160FWUbp0djtwKPZ7flY8Hr42h\nINEXcLVPvim/8apQjbekAu1VfigSpTMYk+l+hnL43eL5IREqS8cH9Hh/bkkp05iNBAFHLpRE44g/\nzqcXKiH+SWwkYG0CHV8geHT53TIWdradrlMiT76WdiXeOuLJI+XOTQk78
 u9vSmENHss81WXav/zx\nP3D3608iJv9Sl+29vRDR57Nlt+M/6x/AQ3/+gcVEnBl5qfhFaR2q63UI8LkSpdTbPLidBEhg9BKg\niDN6rz1XTgIkMAwE9p3NRkNgtU1Kisfpp2Jyw1JNrGl2akKlayFqlGBT5pqLS55HtzTeaAAAQABJ\nREFUUOtSAb1zfRcKgb5OOJ9VoEScCV22D+cLERQkJepXH+doPi2DjQa6b1m0Zt676XgpK1aZeUEl\nlUoqLJ3MqVUCWB6mRPkodhFmf+tt5jAOfZikUElkgAiFxk18ZCQlTdKPRkoT49oHr43VhBwR9IzT\nYUbKGrkO+ydgStgRQ32J2MlQ6Yvbz1Xghd0dVfc60rak7LkXcguKMLkkG17N+s5FFofHIS15FjY+\n9gbuefXnWHD0w859pp6cnroYr9/+KAoiE7XdXg31SE+6CsndhCFT5/a3zUX59SxQQs6+M9lYN99+\n/g3ub97cTwIkYHsCLhtVs/2wHJEESIAERieBN/ek4LP2o6jxr7I6gDanVpS4ZeGU7yc4670blz1T\nUOh+CRVu+WhwqdGicLpPorXJCWHV4Vgxw778OwK9XVGjUlaOKzFBfHgG01zVDahUx/rH/iJNhOAN\nqPkUxf9o5aRg7Sbppb2F8PFwQYL61nu0N6lElao8hMQHR95fxu33O/O0aKaRFr0k1z4ywB1Selyq\nVbmJURYbCQwzAV/1voxWab/TlCH74nGB2u/eLPVvhQisZbXNOKH+7dib0QhdZBLSlWhTEJWkvOD8\ncDl+Mk5NW4oWVzccnb0akiI15cIhOLe3d1mRiDYv3PO/eOem+1HreyUK7fMlt2Ds5bNIyDnf5fjB\nvqhxcsXppGlYMit5sF3wPBIggVFAgP/yjoKLzCWSAAnYD4Hiqlo0uTXZZELRTRPh3RaAJied2ePp\nPBtRUl1n9vG2PPDWOeG4UFiPs/ldo4cGMgdDZMlr
 B4s0A9+BnDvaj5UoDIk2eXxdvJba9tS2y1qF\nmdHKRSpR7ThfoZWyl5L2xk3SjTxcnbukgBjvd/TnIqTKz18/H35fL0dnyflbj4BUu5qb6K9VhRNP\ntZiaVNz6yhNYtm+zNujuxbfgrQ0PdZnAx9fehad+8k9UBF2pJCeROo/9YgskCsdUm33yU1ObB7Ut\nsqYcpRU1gzqXJ5EACYweAl3/6hg96+ZKSYAESGBYCJTXNqDJ/UootzUnUe6ah3m1X8KkxiVmD9Ps\npkdJpX2KOCIi3LM4SqucJD4kg20SGWGoWFWqvqFlGxgBqU4mQs6KiUFaittbR0uga24bWCcOfrSh\nEpWkmnWv3lVR3wzxwpH32Ehud8yNUFXsWjTz65G8Tq5t5BCoqKlHfGE6RHS59b0/4uE/fh+T0o72\nWKCkR2187E2UhkRr+yakn8CKz9/qcZxsmKQMkv3qKk3uG8zGgMZaVNc1DuZUnkMCJDCKCFDEGUUX\nm0slARIYfgI1dXroPcyPjBnKjEvdsrE98AVMaJyHOXU3wqm9/4/8ZhUlVF/XMpRhrXquGMSKCPPO\nidIhjbMoOQDLJwbiuU9yRp0AMSRwRicLw2dvSdKqFT32TgYkMmU0NKlE9dwnuZrJr6lUqdcPFeO6\nqcEI83Mb0TjEq+qhVTHYeqoMUkadjQTsnUBFYzPCarsKLulJ0zunHVGSg1WfvaGJO7964gaEKcNk\nQ/vGG09j2d5Nhpedj/OPftz53BJPAhqVsbHOfv8NtsQa2QcJkMDQCdDYeOgM2QMJkAAJmE2gobYV\n7U6DjyIxHmhc41zE66ejzC0X5eqnzDUHjc5do2hqXMuUkPMXXFN9FxbX3o6DfpvRokyOe2siMLUO\nIcqlt34tuV0q5Dy6OQPzk/yHZKzKilVDvyre7i5axIncxEsVKzHyvWtB5IgVMPqqRCU0j2TVQKK7\n7l/e8Q3+0Anbdw8ShfTda6L
 wh0/zNAPnwZqO2/cqObuRQqBUBV6GGUXNiLfN+EsnMP3cfkw/u6+L\naNN9zToPb5ydshBBVcWoDOxItRLfHEumUsmYMr8Kajjd8fM1CZBANwL9fy3b7QS+JAESIAESGDwB\nbz8XFRHT1QB1sL1lep7AKZ8d0CnhJkF3FdZU3o/byh/HtVX3YGLjIoQ2x8Kl3VUTdnYGvqSeu2FF\n9Tfh1ebb65DuTR5w6WbQ2uvBw7RDbhRvvzpcS6tqbRuaICYVqyT9RSpWsQ2egESkbLwpQateJSWo\nxfB3qNdm8LOx3pm9VaKSERuaWvHmkWJVin3MqCphP10ZyUpU1gu7r0QtWO8KsGcSGDyBMBUcV2pk\nSixpUA/9+QGsVKlSxlE3pkZ49as/hd7VE/OObcedb/2vdkhyZopFU6mk0wqfAATzK3ZTl4DbSIAE\njAhQxDGCwackQAIkYG0C/r4e8NBbpqpPq1MLJGUq1Ws/9vq/iXdD/hdnvD5DUMsY+LeGYFb9Wmwo\nf0yJO9/HVfXX4rL7KdS7VOHa6u/AvyXU5FLdmt3h42v/f0FKVRwxk/0stWtovMlF9bFR+nh4dSz2\nXKzSfvo4lLv6ISDpNWtUGtEvNyQhv0qHx97J1Iyo+znNYXaLMJVXqYcIf6aaeAPNTRhadJipfh1h\n262zw6BvadNSqxxhvpzj6CQQ7OWGUr8rlaXMpXBKGRofmrcWtf5BOHj19chQ1aPmHvtEi94xtw9z\nj6v29EWAp/3/G2zuengcCZCAdQjwU8I6XNkrCZAACZgkEOLnDYl2sVZL9T6oVaQKa0nAzoCX0Kb+\nC2yNQHhzPMa0JCO4JRrerf64vvIHyPJIQbbnGZWOldOZYiUiTnhQ75E61pr3YPoV41iJ+pAqOd3N\nZQfSn6Fi1bMfZUOqmUyI9B7I6Ty2GwEp6Xv/8hitipiUI5coHUmBc+RUG0MlqqduTtTEw25L1iqd\nnc6rw6
 9uTe6+a1S8FgHvgZUxeOK9LO16TxrjMyrWzUU6FoFgfx9UeAcMaNKVQeH4v/v/gJkpu5Ce\nNEOrWiVCjrQjc1Zjx7I7MPniES06J6C6bEB9mzq42kuJOL5epnZxGwmQAAl0EmAkTicKPiEBEiAB\n6xOICPSDW4t1DU9P+nyiRBk95tatV/47bah0LUSa1yHND2dr0O+0iJ1UrwNI1M9Q0Tpr8KXyn2Bd\nxQOqktXNGKufg0D1baMjNBFcrp8WotKqioY8XREaWLFqyBi7dCAm1M/eMhZjAjw0DyMpu+2IKVZ9\nVaKSBYtPzsv7CrXKaVJBbbQ2Ee/uXRql0qoKIObPbCRgbwSCQ/xRqdKVzG3ig/PTJzYhsjAL6z94\nEaZEGr2nN64+vsPkPnPHMT4uPzAcYcH+xpv4nARIgAR6EHDZqFqPrdxAAiRAAiRgFQJ6fStSUouQ\nG5pjlf61TpVxcoH7JUxvWKletivT47wuY0kaVpF7BordszC+cT7O+HyGc967AXX/mVg3Cd5eMdhy\nqgLnCupVWkyTlibhp8K7PVztT/cX8eXDM+ValEd00NAinOKCPdHY3IrNyh9n8bhAuI7iG/Iub5gh\nvJAIjYljvDEnwQ8fna2ACDnxIZ4I8raukDmEKXc5VcSIpz/IxlfnRWBGrOkINSknLml5a5WgONpb\nuBJWG1W5+e3nKrBgbACcnUavqDXa3wv2uP56JbgezCzF8jP7+pxeg7cfTk1dgmcefhl1PoFoVNEx\naePnwLW1WUXiRHaeKz46P/ndvZiSerhz21CfvHfNBoxbuxyT48OH2hXPJwESGMEEXEfw2rg0EiAB\nErA7AnMnxsD77UA4tzmjzbnNavPTO9djT8C/sKryXlS7lCnRJr3HWIYS5Cur74GPRwBO+HyEsXlR\n2PiTa+Dn4wWJQEgvbdS8YqTykIvScEQ0GRvmrT3KzfhwRx6ISCARNM/vyoNEfki1pKE
 0VqwaCr3e\nz5WoqUfWxOFgRo1WyUhS4DbMChvy9ep9xKHv6a8SlYxQUKXXhCmJOGLrILB+Rih+vT0HIm7JNWYj\nAXshsHhqPP4YkYQmVze4t6hSVV+0vOhxKlXqKqQnTtMey4OUObmKYtW5e+Erm3+LFZ+/DU99g7Zv\n42NvaGdNSjuK//rbjywWgSOdtjo742DMJNw9PUEbg/8jARIggd4IMBKnNzLcTgIkQAJWIODp7oq9\nqRnIbilBg3fXcuCWHk6nhJw6F/WNeN0GZHucRbOzrscQeucG5YtzClMbliO2YTIi4Iqvr5yhRaGE\n+rphfIS39o26RBnMTfSHl5sLcit12HupWlXiKVEllWu1G9l6fZsWjeDjMTQRpccEzdggnjbFNc2a\nB8vMOD8zzuj7EOlDIgnK61s0Yajvo7l3IARigz2wbEIQzhfWq5LkxQhUETmyzR7bi3sK4KpEwnsW\nR/U6vec+ycXNM8M0UbPXg0bZDom+maYqVr12sAgxQZ6Q6Bw2ErAHAm6uLjh3JhPlLe5In7wQ71//\nHUjVqTPquUStJmedwcrdbyI7YbL6oqVVMy++bcsftQgcmb9fXRU+XP1NLD3wHn7w14fhpau36LJO\nR49H1tJVuGX1bIv2y85IgARGHgGndtVG3rK4IhIgARKwXwL/2XMW/3toG45PsFwIdl+rlbSqGP0k\nfBL4YqeBcffjXduVv0zR9xDnG4Zf3jrJLBNa8TfJqVDROiWNnT9SZlmEH4nYSQz10h4l1cTaTadS\nOB7ZlKEMdaMtYkwsZcfFpFVKmUslLDbLE5BIr1f2F2rin0RTSbSOvTSpRHX0cg2euCHBpJGxzHPH\n+QqczqvXqpvZy7ztaR5pRQ1a1JWYQQ/FeNye1sS5OB4BiZaTf6MyVFSpPMpr96IcXHdoK5IzT2k/\n3g212sLEA+fXD/4VvkqsyYmdgGd+frMWgWO86tOqUtX0s32nYx
 kfP5Dnf1j3bUT/6AHcsmzaQE7j\nsSRAAqOQACNxRuFF55JJgASGl0B8eCC2fZKJgpA8tLhdCem21qyK3bIQ3TRR/UxAjorIMdVcm10R\nkxqKRTMm4X3lhzNdfZPu209UjXzjLt4mY8O8cLUqrXzdlGCsmBikCUCldc04lFmDNw6XaI9ZZY2o\n0bVqET7+ygDV0k38ayID3NW3/8XaHIbqxeGl0rKkStXzu/K1R4lKYrMsgUBvVy0qR9/Sjr98XqB5\nLyWHe6u0veH1UZFKVOKL9Pi6ePVeNv1eFZHvxT2FWkWm4Yg+s+yVsE5v8jvTpr4n3HqqHIuT6Y9j\nHcrs1ZiAiPmXShq0f3O2nS7HP5TpfUpunXofKr839aXCqsnBuGNuON784HN8dduLmHT5LNyam7Qu\nDAJObP5FXBw3C/e+8jjGFGcbd689jyixjp+dGBr/efVd+PHXV8JdRbyykQAJkEBfBCji9EWH+0iA\nBEjACgTkDzRnJ2dknK9DQWieFUbo2WWexwVMa1wB9zYvlLhf7nHA9KyZuPvqBfjuqsmQ1CiJkBAR\nY6DfoLsp4xypRjQ5ykczB77xqtAvImOcIELOJypN6c0jxVo6TVFNk2aCainTZBn3QmEDCqubYIkS\nx7L2EHUjKmWyJZWMN+s93jYW2ZCkRECJdjqSVYO3jpao94/7sEXlSHTQHz7Nww9Xx6Evo2wRnRYq\n496rejE7tgiYEdCJfIYcVmJugTJIF88qNhKwJIFi9W/IKSXS7Eqtwn+OlWjiq3z+i0Asvlt3zo/Q\nKhjKc/mcke0uynfGT5Ua/0+VC1af2qNNxyDgJCpRR+fpg6TL57B87yZLTrXfvn538/ex/PY1mDk+\nut9jeQAJkAAJUMThe4AESIAEhoHAhNgwFY2TgcKAQjS5660+gzanVhSqilXz625GtWsJal3KO8f0\navTBlMtX4Rd3rdK+AZRqQvLH7p9VFEpUo
 If203nwIJ5I5E1CqCfEa2blpCCsVhE7kjpT09iKkzl1\neFv98f1ZaqUKdW9AhfKhEQNlXw/5Y3vgERnjIry0cs8z43x7jaIYyBJYsWogtAZ/rFQ+kxutBGWW\nLSbaF4sbtFQ8iYiyVTOnEpXMRcSms/n1mqH2UCO+bLW24RxHovr+eahI+50XoZWNBAZDQIzGJR3q\nYEa1VpFQPJfEk022i8m+/LsiVeSumRCofYkg7zX5UsFUS4wKxuvHcxCTm4GQxjothUoEnCkXDmHP\n4g34wYsPw0V54tiqnVHGym8vuRmPf2u1JjLZalyOQwIk4LgEKOI47rXjzEmABByYgHwb6O/tiexj\nLcgNu4x2Z+vbkzU5N6LKtQiLam5Hnvt5iKmxU7sTFl5cgm9fswCzxl0xcBXxQnxt/vRZvuYJIilT\nlmqS+hTm565F6EgZ4nXTQzBLCTweynQyv0qnfasqERmS1pJXqdcig8RXx5xIGLnpl2PfP1WGayzk\nZSNRRWfUTbvcMMxTETm8cbfUO6FnP5KCIyl5JbXN+Pu+IjiplL1EJQBam7ncCP7q4xxcneiHNVN7\nLxUunk//pyJ17lsWjSAVqcXWPwER6CQiRyKc5iUGmPV73H+vPGKkEyhVnwHiOfX5xUoVZVOKfx8t\nVv8+6LU031lK8P3K3AhIpKek8sq/T/LFg7mfE3JcYLA//tgUitSlX8bYrNPYsPXP+N1//Qn3vfwo\npHS4rVqd8uF54o5H8bXbV2BSHKu52Yo7xyEBRydAY2NHv4KcPwmQgEMT+MXrO7G18BiOj7eNybHA\nmtS4BMm6Ofgo8HlMy5iO64Ln4Jm7rzPJUUSUZz7M1tJdxOTXVk1uqvNUFay0IjGkbEBmqQ7idyDC\nkuFHPA56M01+attlLBkXqDxXLGNKLGNLnxJVYEsOtuJtj+PITdzrKoKjTPkrifGxXHdrtRd252vv\nr4dWxfY5hKQZShl7
 vgf6xGRy58dnK7A/vRobb0oYVJSdyU65cUQQkM97SWWUSJsLqnKdPLq7Omm/\n82PDvJUI6AX5YmEw0Zm9AZLP9IffUOlTOZfxwpO34h9f3wi/2krcsek3vZ1i8e1SUvzROx9H5Kpl\nePjOFRbvnx2SAAmMXAIUcUbuteXKSIAEHIBAU0srvv37zdjvcQKZcWk2m/HCmtsQoAtBQHkF/v7Q\nrfDy6D2qQNJMRMiRUtDfuybaon9ID2TBtcoYWdJs5A988deRR0nLkpt7QyWsmKCOdA2pQCKiy7O3\njEWAhYyUWbFqIFfLcsdKRJaIOQYBTUQUS7Z3TpRqaX1iZNybKCjjyc2l+CPJe8pNRZOxDZzA73bk\nqig8N+VVEjnwk3nGiCEgn6Xy+W34PBfPpKjAjs9yqW4okVuW+tw2BU0EnF9vz1Hpmx44d/QInFMz\n0RI1Hk8/eYsyOrZ+erNhTr9bczdyV16PX/9wA9OoDFD4SAIkYBYBijhmYeJBJEACJGA9AqVVyl/j\nN//B+cjzyIq9ZL2BjHpOKBiP+e23YfW0CNy9pO/oAzlN/uj9/c5czX/g4dWxWjSCUXfD9lS+vc0q\nk29wO8Qd8dRJCutIBSupadbm/UM1X0s1ufF49qNs/Pi6OO1Gw1L9sp++Ccg39SK27LlYpfleLFLV\njizRDmbUaALRLzck9XnTKOM//m6migiKtIhptiXm7oh9yOeIcJRIJjELZxv5BFpVaaicio6oSoNo\nI6sW8V0EG3kUTxtbCaMGAUfSNEVMLK3R4aE305B8cAue+OcvlBdOm9UvikTg/GH1N3Bq7gr89ke3\nINjPelGGVl8MByABEhgWAhRxhgU7ByUBEiCBrgREyHnwxW244JKOlLHH0e5kHY8c8cCZlD0NU+om\nYONda/H8nlLtD9kFY/u/oZI/xl/eV6h9gyoihnyjbm9N/kAXoUV+MksbkZJXB39PF0xRvjYSrWOJ\
 nsHxJCXnjcLFKC0m0Swb2dk0sOR+JsJL3oLR7Fo8Zkum2RHP9ZnsufnRdrPbe6Guem46XaKbb9y69\n4hvV1/Hc1zsBEV5FCJXfH4mkYxtZBCRyU4uyKVLCuvoMlustJsPy2SupUSLaDNe/Hd0FHCEvXk1B\nXi44d+QQGlNO4+ebfofg+mqrXRTxwPnF7Q+jddp0/PS76yjgWI00OyaBkU2AxsYj+/pydSRAAg5C\nwMfTHdfPmYDLafVwuuyHUv9StLg2W3T27k0emHtpIeZ7TsQLP/gSooJVKVUVtfLC7gItVUWMIftq\nYgYpFYQkrUm8QSZHeSPI276EHDFNDlc3hlJhS0yTJ4/xwbHLNcrTJwhFNXrsPF+llTg/kdNhmix/\n1Hu5O6sf81N0WLGqr3eJdfdJOXoxrJZkJnnf1ulbtYiogXplyI3mU9uyNQFzmvI56quJL9Q/DxZr\nYk9v1W76Op/7uhKQzxkvNxdlVFuieW0N9Np17Y2vhpOACPu5FXocVZ+xH58t1z5bxftIfi+jVGqr\n+JJ9fUEkrp0cpP0bIym55hjUW2NNpgQcqTR3KLMG/31tLK6dPwE57e54IXAixhZkIbLmSgVHS81H\nqlCJifHYa+bhZ/euhfy7z0YCJEACgyHASJzBUOM5JEACJGBFAv/ceRL/2nUS2RGXkR6dOmQxx6XV\nBUn545BQMA63XzMN31w9u0v+/e60KmxJKcWT65NUWW7zxAxJa3n9ULGq0hOllQ63Io4hd/3S3gLN\n68Tgw2Fsoinh/RKR0dTS3hHer7wYklSYfV+myYYJib+HuofBg9fGDJtPkGEuo/FRKkVJFbPTKtpK\nrq0IjOY0uZl7+oNs9b71xYZZfVeDkZtU8Va6bkqIEgX7j1YzZ3we00Hg+V15WlqmmFazOQYBY18y\nibaRKBuJqjGkRUmUjT1GV5kScGQtj27OgJiZy7wN7bOTmXjl7d2Iy0rDd3e8
 hriKIsOuQT/mB4bj\npVV34kzCZNy9YTHWKcGIjQRIgASGQoAizlDo8VwSIAESsBKB6nod/vLRIew8mY70iIsoCStAg3f9\ngEbzavRBREkUkkvGY8nkRPzXjQt7Dd0WoaNYecg8ujbObEHirCq7LaHo4m+xclLQgOZmy4PlZv/R\nzZl4YGVMlz/WjedgnAKQqTx2DDcn8se9lK9NUj8G02TDeXJjwIpVBhrD9yg3kxIZJuXJRczpL1VD\nxANp9y+P6XfSO85XaGWOxQeKzbIE5Pdn4/tZWploS3kcWXaG7E0+B7XUqC8M5UX4ENPh8REdVQLN\nEbuHm6IpAUfmJP92hanPjDvmRfSYohQc2LrnLN7+8DBmpx7HyjP7MCMvdUB+OeJ7cyZqHPZMXYhd\nkxfgjjVzcPPy6arqlnlflPSYFDeQAAmQgBEBijhGMPiUBEiABOyNQH5ZDTYfPINPlZhT36pHTshl\nVHlXQe/RqH502o/M2UPvCfcmT+0xqD4IcZXx8HHyxMqZybhlwTREh/YdRSARB79UFagkVegbC82v\nHCN/5P/q4xwsnxiIW2fbrgT5QK+ThM1vSSlT0UaJZolUwkPSaOQGJkP5Ooi/jpgmi6gjKWgi7MjN\njNwgPPFeliZkLVVpPmzDQ0Cu147zlfjwTDlWqdSN66eFmLzO5laiklUYqpHR+8h611R+x6Ty3WPX\nx/cQSa03Kns2RUDE7jTlYyOfd/K5Jz+G6n/yeSeffVGBHdX/TJ1vj9sk6lL8lwwmxoY5yr8H8lnw\n1M1JfRoqi5izff957NmbgrTyBizIOY/pF08iuqoEYXWVmneOl6pm1eTqhlLfIO2nKCAUp8fPxMH4\nqYgL9MLSJVfhugWT4OvF1CkDfz6SAAkMnQBFnKEzZA8kQAIkYBMC6fnl2JmSjnO5RSivbUB1tR6N\nDa3a2F7eLghQ5pEhft6YEqs8CGYkIzk6ZEDzkmgUESR
 unR2meVWYe7Lc7D77UY72h7IYv9qrx8Vz\nn+RqXjnr1A3+YJrc5MiNTWapTrvRkRseST+TGx0pPy3il3hA2Ov6B7NmRztH3otvHinWfDokTUeE\nNkMztxKV4Xh5v4gh9pqpwYZNfLQCAUnNFPFNxLK+SrxbYehR3aUIaMaiTVVDh0gtYo38SIqUI18P\nEXaf35WvrcHYkNyQRvXImjitKpa5bwKJjt13JhsnT15ERWWt8lhTwn5TO5qUQ5c72hHs7oRIfy8E\nB/lh0pQkLJ2egLBAH3O753EkQAIkMCACFHEGhIsHkwAJkMDIJiD+MM98mAP5A1f+kDe3SUSK3PRK\nk9QTe/zjv7S2GT/bkql5//SXcmPuuqVakpQ433upGucL6rVvdRM0Tx3PTp+IYB/7Mn82d22OfJz4\n5Lx6oEgTce6YG4GyuiazK1HJuuWbehEWnrghgaKcDd4IL+4p0EYxvtm2wbCjZgiDAG2IsJHHYB9X\n7TM+ObyjYlT3dFFHhmMQcGQN9y+P7vI7LGlUstb+/LAcef2cOwmQwMgnQBFn5F9jrpAESIAEBkTA\nUEL7lxuSEODVd8Uq447lD2e5GRNRQ7x17FG8kMopKbm1an7xxlO3yHMpQ300q1b5skQgR33LnfFF\nSoJ0LuH841VUSLJKS4gP8bRLkcsiEOyoE0ml2HqqTFUkq0SLem/+f/beAz6u6sz7fwD3Ilmy5CrL\nDQzGNFNMM2CKKaaXkD952eSfwO6GkDcvbBKWQGBZEhbSFnY3LCkk+cCbf7IhhBJCNcWmGrCDcTAG\nAy6S3CXZstwL/M/3mEdcj2c07d6ZO6PnfLicW88953fuyHO/8xQsczIJTqwxlACZ5fRiG6Op2aMr\nQGDiS009sFqm7G9uiXsIlOUO4DKghsDt1M0btn8KbHbF+MJCrU8WGfmyvH1RT+8M4GTrVlvUgdjN\nTQFTwBToRAGDOJ2IY4dMAVPAFO
 iqCvz+9VXy7opNcvO5ozqNGZBMH2DGC++t89Y8AIs4Fb7g68ti\nFMFUk2WswsUHsLXQuV996OJNEEcIFyzcFYA7pRhrIk5z2llfgAP/+tgS2brjY6lwrm+AnHTPJEG+\nSYMd5xhPnY25VI+tWr/NBzoGsKabo1IdYxT95hlXCxvi2eAixfPL3xWNZdNV9OwM4OTqRhXFnFmb\npoApYArkq4BBnHwVtOtNAVPAFChDBfgyjHsULwO5uDiQtvx3DgR9/ZThckhdv1gppMGY77h4bMYp\n1TMdgFoUMGaydiUraEs8Cv2VHMATjEcB2CnnX8qTaRLVvmAmKmLiEC9n0uj+HtAkc/kjttFvXlkp\nt13YecDTqPrb1dtljoDA6J9sfrq6Powf2BWMZcM2WaKANizAYWJ1dbXSGcBBCwA7MMvcqLrak2Hj\nNQXKUwGDOOU5rzYqU8AUMAXyVgC3EgId4+KQS3BX4pL89Pll3r0obpmbsDRq37ozJ0CVTljNagTE\nyXTcaM2LGUBHf1UHoKmlDi9muPZY0OR06n92PFkmKnRm/5yl7UKsnEmjP8vahvvVjQ8vctY6Q2T8\nUAtI+pmShV0jXTzzlEkK+ML2rPB3AwoTp0z/JgB+gVsKa+zvwq45SQdwCJ799PzWjLMTFn6m7Y6m\ngClgCmSngEGc7PSys00BU8AU6FIKYDFyq3NH+capdXLQ8OxfbHkB+fHTjXLq+KpY/QLKC/t1D34o\nV0weltO40j0EvHSR2vbbZ9TvliEp3XXB42hPanNN+csv7vySTFwd4usAeOIYdyg4hmKtp8tExXNJ\n4GPigpBVDPc2LECwiLryhGHF6rbd1ynAZ5O/OSeOq/QAuSuJQvB1tdCjTvzMA2+yiVPWFbRLB3CA\n6sBZc9PrCk+DjdEU6DoKGMTpOnNtIzUFTAFTICcF3mpo9wGLbz1/jOSS1YkXkx893eB/Pb5i8tDY\nWJO8swzXm
 RWCW1X3ffbKSZvOLtIA0aROzkW3xLb1V/lFGl/HgSIsc3ixG4srhYM7Y9wSxVgS+xLn\nbQWH3zpjhHczSdVXXv5w+8MyB4uc2c465wcXjynbgK+pdIjjfs0kR3BpXIXKsQCrgLTEyfLxsgKf\nZyxs9h/SW+qre8Xm72Uc5yAdwKHPuAUDvM2NKo4zaH0yBUyBXBUwiJOrcnadKWAKmAJdSAFedMns\nAZDIJVYF7hF8mQYwXHNafFKQ3zNjmbdmSRW/Jt8pxrpj9pL2nHVLd39+ZcbqR3+9x3pHgyYDd3h5\nGTagZ7pmyuZ42+YdcsNDi5wL35CMMlExcKxvvvPQR+7Z3Nu71+VicVY2AsZoILi8/XbWrvhE5ZBJ\nic/q+yuxrNvk6xVtW72LpLpGUZtlXeYPYCYAx9yoMtfTzjQFTIHSUsAgTmnNl/XWFDAFTIGiKUBg\nSCw/cK3KpfCl+2czl0lj61b5zrSRsXALKETGkmQZq3LRL5Nr0LihdYt/SdRYGoyRQMkaX4eXxXJ4\nKU7UA0ul2x5fKhPr+2X1qztp5+cv3yjTDq72QY1HDuzpIZC5rSQqXPhtIA5WOddOHVH4m+dxR6xs\nCKAeBKx8Nj2wcZ/F/Z2lDa6RXd1qLleJMwE45kaVq7p2nSlgCpSCAgZxSmGWrI+mgClgCsRAAV6S\nb/nzYjlmTKVcMLEm5x794c3Vwi+kgByC9Ra70Jfn31srN50zKhLXBXQjrXlnGaui1ACI8+HqTR2x\ndXix5Bd/XigBO+USHDWYiSpTPQEEPNPfu2C014SXwyf+1iKAHZ7xUw6oiuSZyLR/Xf085oPPzhEj\n+8u5h+b+NydqHbEAIzB50CJuaGVP7xI1traP/6yF4VIZ9ThKof1MAA7jwPJz3ODesX5uSkFv66Mp\nYArEUwGDOPGcF+uVKWAKmAKxVIBAm7z0knZ8Yn3/nPv43IK1Asy5dmpdLDIBEYSYF0UycU
 VR+FWY\nTF/ZZKyKoh/aJm5XwBzgDhmxSj2AarJMVDrWzmpe9A6p67vHvAN37n9tpXe1+srkIQ52lWdcls60\nicsx/exgAYhFWbELEEGt3XCN4nMEqAWGAkZ3wdHeObmdFntscb9/pgAnajAfd52sf6aAKVD+ChjE\nKf85thGaAqaAKRCqAgQE/s/nmlycl1F5xVshYPI9M5b77EDH71sZah+zbUzh1G0XjoksLgUve/lm\nrMp2XJmez0so/VMXLCwKiBHj3T/cyykWO3ENmpwuE1UqDbju6fktnVpgaVwWtaIqRze0VPrEaf+8\npg1y70srhM9n/177FLRrWLLxefDBh10QYoIRE2cqCG2IQ2UlWgUyBTgK/W48e2Re/z5FOxpr3RQw\nBUyB/BQwiJOffna1KWAKmAJdUoHHncvJTJfZB5CTz4st4ICYMVjA5OOiFcYkPPZ2s3tZ2yzfPD26\n+BthZ6wKY9yp2sAahfkJBmLFRUStDaiL/fKaaSaqxDESaPvbf/woI5c+ANejc5uFucOSqtjAMXEs\nXWUbyz3izJCxKqoCKMBKTd2ieP41ptRYl/lNn/1cgrtH1eeu0G6mAActsK47YGgfOfvggV1BGhuj\nKWAKdFEFDOJ00Ym3YZsCpoApkK8Cv3hxuXc3AXoQ8DjXghWMxi/48vHFS0HOi8LNjy6W8w+r8Smn\ncx1PuuuizliV7v65Hg8Ga1U3ko1bP/YuLrzgjqnt5V9y84F62fQtl0xU2j7PbnXfbnLJEYN0V9qa\nl3tS0hOM9ovHDrFf+dMqFu4JfD7veLLBuV/2ySpwdWe9AOYtWLHLJUot0Wr67YoXpZY2XSm7W2da\nFetYNgDH3KiKNUt2X1PAFCi0AgZxCq243c8UMAVMgTJRgJf6Wx9bIoeO6JvVy3Cy4fNr913PNkrP\nbnv77FfF+qWbFzkC5OK2ESWMKGTGqmR6h7VPXU3QLfgSjOuVWi4Qv
 DofyJesr1jH5JKJirYWrNjo\ns1Axx7lkB5rhLND+OHu1nHzAAAf8anNqI9mYbF96BQB3xJYiJlcuqeA1Y9RHziWK55X08mpdo3WU\nn/v0I7QzggpkA3A0SLm5UQUVtHVTwBQoVwUM4pTrzNq4TAFTwBQogAIaf+ALRw/O280EKHTPjGU+\nyC4uE8VK8Xzfqyvl408+EayCoipAiGJmrIpqXLSrL8oaX6d5w3YfGHgMmbBcYFpelvOd21wyUdE3\nnrHr//SRhwD5BMnFguN3r6/yqcl5ToiZE1XZvHW7vPzOUpn7wQpZs3aDtKzfJK3tm2Xnxx8L9m8D\nK/pITWVfqRnQVyaOGyaTDqiTyr69oupO0dslJheWVGQU6+w5Yo7IGKXABmijWdkAjMx/HLLjFV3Q\nmHYgG4DDEIC6h9X3MzeqmM6ndcsUMAXCVcAgTrh6WmumgClgCnQ5BXg5+uFTDcIvoCMH5v/y+Hv3\ncvzaovVy/Vn1RXFZAbBc9+BHcvXJwyPNhqMALC4Zq6J6cHmZXrRmy6fxdXZlxMLSioxP6rLCc5Op\nVUyumagYH3FV6E9YgI5n/96Xlvvn9PJjBocWFHvbjp3y9BsfyFOvvy8fLG+VHZu2yEcLm2TLlu2y\nbcs22bp5qzjOKHs5itOzd0/p0auH9OjRTcaOq5PuDuDsO6xaTjtyPznjqP2kX+/yC7rLM0Dcmm+f\nUd9h5RXMuMa8AA/VukahjVnZRPUpD7fdbAHO9Hdbfcyqm84Z1fE8hNsja80UMAVMgXgpYBAnXvNh\nvTEFTAFToCQVwMXk0blrXKDjzn8dz3RwfCnnRe2a00ZEClJS9YfMWb9/Y7V3q8oULqRqq7P9vGzG\nNWNVZ/3O9xhxkBi7Lk1rtziriF5urnt7uMPLd7KgyblmoqK/WAjhshe2qxwvnNPfXSsExp52yEA5\nc0J1zi+SwJvHXn1Pfv34m7KuZb18+H6TtKxo
 kZ07P85Y8r1dVrHqQVWy3wEjpLKmUr505uFy0YkT\npEe3wmZ1yrjDOZy4cetOHx+nZ/e9pIcbL88RWasU2gAHwwDKOXTNLslTgWwBDm5UNz+6yGeZs/hF\neYpvl5sCpkDJKGAQp2SmyjpqCpgCpkC8FcANiV/DsaAJIwYK6Z1/PnO5t5o4dmxFwQdPGnXcLS46\nvDbSe5dSxqqohMDNidTNi5u3dGQG2u7Axb6D+nTE1uHeuFFdf1b2Fl+8GOK+Ns1lrJk0OppnCcuq\n385aJcvXbZUrTxjmgUI2ej3/1iL56Z9elTWr18rcN96XDW0bs7k86bm9nVXOoZMOkIGDBshVFxwj\nZx+zf9Lz4r4TTQE16hrFNpZcDa1b5ayDq+V0l92u0KnH465ZKfYvW4DDGM2NqhRn2vpsCpgC+Spg\nECdfBe16U8AUMAVMAa8AX8DJHgP4+NJxQ0JRhZgWwJQzD6qWcw+tCaXNTBtRd6dCBMos1YxVmWqZ\ny3kEseXFfaF7Bt77NLYJmYMIaMsLPFYXmVpbPPVOqw9ofO3U6NLH6xjnNW3wWawmDOvrUpIPTgsX\niG1z14OvypOvvCevz5wbCrzRvmjdz8XMOfqkQ2XKEWPlui+cFGurHNwZ1UILaMPfgL499/bzPba2\nj7fWqq/u5UGx/n0gPg7xbqyUrgK5ABxzoyrd+baemwKmQH4KGMTJTz+72hQwBUwBUyCgAC/et/yZ\nNN21MmX/AYEjua/yq/tdzzb51MKkdg7DyifT3jy3YK28+lGbN9XP9JpczyuXjFW5jj/VdRoE+oiR\n/YWFWChY7PCiD2hToAPUwY0m0SIDdwuscG45b1TBXvSxLMK98MWFbd6SK9VngQDFN/ziafnbgkZ5\nfcbcrNymUumVav8+zu3oyMkHywH7D5cfXTVNal0g5DiUoGsdc8s2IHh/N5eZBMLGjW1u4wa5YdrI\ngv5tiIN25dSH37yyQsh
 2RyyyTP7Gazaqm88dldT1spy0sbGYAqaAKZCogEGcREVs2xQwBUwBUyAv\nBYg9gok7GaZ4sQ6jAIewyCEwKV/yC5mCHABw3NhKOXV8VRhDSdmGwgoyHRHs2MouBYBbzPdVU4bv\nIQlBitVqA7CTaLXB8/fIW81y6Ii+MtW53BS6ACDvf22lz4pFMOVgNiQAzj/86CF5Z94ief/tRQXr\n2riDRst+E0bKb66/pOAgB7j14epNHXMGtOnu4JICOOpsglyraD95ptG9yHeXy48JxwJQ27W6MAr8\ndtZKD2YJVJ3p33b+jZk0un9RPteFUcXuYgqYAqZAagUM4qTWxo6YAqaAKWAK5KiAxnn5t4vGdJoG\nOJvmgRykFuYX2G+d4YK29u6WzeU5n8uLOCDnjovHRn5PdeEq94xVmU4GbmaklL7x7FEZZ69ivgA7\nQB0CVKPpyIGklO7t4uv0kTG1vQr+yz2fBzJjHb9vpbNSq3FjEbnqJ4/KS6++K+/N/TBTOUI7D4hz\n1NHj5d7rLpLePaNzQ+Kzylx8tGaTA2ybXcyszwJYq2tUGG5QwLwbH17kIQ7WWlZKR4FcAA5uVG8s\nbvcZEUtnpNZTU8AUMAXCU8AgTnhaWkumgClgCpgCAQV4AX+7caNg7h5WhifiJvz+jVXu5XyDfPP0\nEQVLQU6mLII2f+PUusAIo1nlpbcrZqxKVFPBB/FOcgF2uGZc/6ePPPDbtsNZgLj4KsTXAe4QNBnX\nq6ArVqYWAIn9zHQb0PDH2Wuc60+7dN+4Sl58aY53ocr0+rDPm3jsgXLK5Any469NC6VpDU6tOvMc\nU7yVzZA+sm9tbwfQeof2tyCx04ubN8sPn2qQW88fI7X9owNTife17dwVyAXgqBsVmRBtnnPX3q40\nBUyB0lYgFIjzySefCIuW4DbrH7ugfXpcj7EvWPbaa6+OzeA6OxO3dZ/up2bZe++9fRu6328k/C/X\nYw
 nN2KYpYAqYAqZAGgUALrg5DOjTTf7hxGFpzs7uMIFqiYUBVNnfvSBGXXhB5Zf+yyYNkon10f/S\nr5ZMXfVFBQDwk2cacspEpc8CVlsEQk6WXQzrHO6h8XXIjEVKc4ADGbFG1/TKOGiy3i/T+tfT58tT\n726U5hWr5Y2nnpWNbW2ZXhrqeXztOn7qEfIPFx8vf3f6xKzbDmqIlkBONASOqXtUoV+y+bvAZ4f4\nR5nEVcl60HZBaArkAnC4ublRhTYF1pApYAqUsAKhQByFNDt37vSwRrep2ceyY8eOjnXdB9BRqBIE\nMLovsVadOVeXffbZR4IL+/U6ztd1al2C+4Prei77rJgCpoApYArkrwDWB7f8eYmc5IIcn+3SO4dZ\n3li83mcBItZIVGmjg/0l3srdLyyTH14yNuO4DcHrs13vqhmr1KXsK5OH+kDG2erG+bhgEYvmtgvH\nZGT5AXBsaN0VLBkgwUIcJmCEWuskC5qcbd82b90un/uX38mMJ9+QYfuOk4NPOE4Wzn5L5r86q+PH\nrmzbzOf8Xn16yZRpk+R/brlMKl068lQFiEmsKwVf1GrNtAt87dIpamumVP0L7id2FsGt+btgJZ4K\n5ApwgHRzlpobVTxn1XplCpgChVQgb4ijljYKZoLghn3bt2/3y7Zt2/ZY51qFLgCU4DoiKFRJrDmv\ne/fu0q1bN18H19nH+cFF2wruC64Hj7NuxRQwBUwBUyA8BYhRAsjBaob00GEWTTE87ZCBoUOiZP28\n96XlHuAUKoBqV8tYpcGdjxpVIRdMzC2lPMDhugc/lK+eNDwvKy0AJM8Xaa4XrdkFMIADxNTReC51\nVb0ygkT6LP3yL2/If/9uhsx9bYHf1btfX5l46hQZOHSIvPHkM7JqaaOeWrD6wMP3kys+f6L806WT\nO+4ZTO+OexSWSsMG9PRQa6xziQLcsB3HwjOE1dwlRwySY8dWxLGLXbpPuQIcjU1
 m7nJd+vGxwZsC\npsCnCoQCcdTSBmsbtbihBuBs3brVL1u2bNmtZj/XYUUDUAHMsOi2Qhb6mbjOeT179pQePXrsUQN0\ntC29LlhzjG2taV/X2W/FFDAFTAFTIHwFCDB770srfHwcXC7CLHy5x22LrE6XHzM4UjcKXuyv/9Mi\nD6R4kY26KNToKhmrOstElanWv399lWzZ8XEklhi4DGGFQvwVap49sinxLAB2qFO5EJGN6n9973/k\n+cdmybYt23YbzpBRLtDwmadJy4qVMueZ52Xr5l3xZHY76dOND2f8QIYNHiAXX3W3PDljXrJTstrX\nvUd3Of3SU+XvzjlBmjd97Me1cevHfizqGsW44mBlk+nAsBoirhTuiGH/vcm0D3bengrkCnCwlCO4\nPIHBi5Flbs+R2B5TwBQwBYqrQCgQB2CDpY2CG+CNWt4AbzZt2tSxbHZfTHQbqx2gDRAlsWYfRQEM\n6wpbOLdXr15+6d3bfbEIrAN3OE/P1et1n+5PVXMfK6aAKWAKmALhK0Cq51mLiFcxOvQXQiwHAAAE\nwCUVdZQvnLhxPTq32QVQHR0pMNIZUPeics9YlUsmKtVIa17e73q20btRkY4+6gJkU6AD1GH52FkZ\nK/xQVyyex/ufeUt++IunZP6chUm7tY+zJB5/9FEy7siJ8reXXpUP33p7Nxerw04+Ud6e8ZL8/f9z\nkvz8374k8xcuk4PO+G7Stjrb2dN9bxpUXycDhw2VmuHDXD1Etm/eJKMcqDn3qFEe3gRToXfWVpyP\nPbdgrTz/3lr/9yaswOpxHm/c+5YrwGFcj/+tRea6YPY3nj0y7sO0/pkCpoApUBAF8oY4gJggtMHC\nBoCjy8aNG2XDhg17LOzHEgf3J4CK1gAaBToKYNRCRsEL5/bp00f69u3ra9Z1Aejo9Zyv1yTu0/16\njm4XRHW7iSlgCpgCXVQB4lVQosjyxAv1PTOW+Vgm106NNg
 U5lj/jBruX3kNzc/nJdvqBA+WcsSrf\nTFToya/1uO2de+jAgsRISjWHwbTazBtgCdejJY3L5W9vviON738k69Y0p7pc+lZWyqSzpkqPXj1l\n9tPPOuucVVJ/wDg54eLz5a/PzZAFs96UFx/4jpxw1DiZ9uU7O7XG4fvTgEG1MmjEcBnogA3QBheu\n5mXLZU3jMl+z3s1BpjPOO04e+v7lKftVigf4e0CA47ADq5eiFsXscz4Ax9yoijlzdm9TwBSIqwJ5\nQxzi2qjLVGKNFQ4Ap81lXmBpb2+X9evXdywKcQAsgBlqXVeokljzhQSXKQBOv379/NK/f/+OdWBO\nIrDRdoPAJriu5yssiutkWb9MAVPAFCh1BdQ96IiR/ZNmDcp3fLzI/3bWKpm/fKNcc1pdZHE7eFG/\n+dFFBU1nXK4ZqwAd+Wai4rnh1/qPXFtRAMJ8nkti9Px1cYvc/oc3paVlk1QPHdoBUgAorQ7SrG5o\n2sOFCnBz+GlTHPT5QOrHHyB9+veTHc7S+aO3/+Zdrla8cZc0t7bvZo0D+KmtGy41dbuADdBm0/r2\nT2HNCl+vXbU66XCmXjhZ/vubF8i+w8MNQJ70ZgXayd+bW/68WKa5oOonjhtQoLvabYIK5ANwzI0q\nqKStmwKmgCnwmQJ5QxwscYA1uEkFF3WjAtwAcNatW+fhjQIdYA7uV8AbXRS2sJ0Ib3RbIQ4AJwhv\ndB2Io9crnOFabTu4rvv0vHKEOMEx6Tq1rqMHJbhPt/2BT/+n5wf32bopYAqYArkooACEX8ejStfN\nC/0T81r8C31UKcjJlDK3sd2nwc5Fh1yueXDOapm9pD0Sl7Rc+pPvNeoqlk8mKvrAM0XMDFJLV/ft\nnm+3Qr/+t9Pnyl33PStzXpnv21aXpuqhg711DLBl8waXdvxTqLOmsVFaV64WXKxO+7vLXODjwbv1\naflHi+WVRx7zVjtcWzN8l2tUn4r+0
 rJ8pW+nZfkKFyi5wcXf2brbtak2JrgAx9d85XS58uwjU51S\nkvuJY3T7E0vlO9NGSjm4iZXSJOQDcBgnf8fnu0xz151ZX0rDtr6aAqaAKRC5AqFAHGLcAGvUbYp1\ndaMC1qgFjta6L2iJEwQqQaiicEEhDoqoJQ7ABouc4II7lUIcrglCG9Y5pvfSda3LCVSobugV1E71\n0DGjha7reapDYhu0ZcUUMAVMgTAUIAU0rlW8dEeV5SbqFOT6K/EpB1QV9Ff+cslYpVZZ+WSi0mfx\nh081+HTkp46v0l2xqr9///Ny96+fkZVLV6XsV9XgQT5L1cBPgUz/qgGyYe1aqaytTXrN1k2bvWXO\n6sYmaXHwZ7Vzj1q3es1ucXSSXphiZ+2wgfLF/3WK/Phr01KcUbq7X1y4Tp5wQCCKeFylq0q0Pc8X\n4OBGddvjS+V7F4yOJZiNVj1r3RQwBUyBzhXo1vnh9Edxp8KiBlcqLHGC7lPqQqVwJ7HW7FQKbRSu\nABMUKNADYALbus553IugxrQJuGEdqENgY21P2wm2C7DQlOSs6zbnKLzwNyrh/6leWquWbDNOsnqx\noEOwRovguaq51iUsiXXdFDAFYqYAqcY/d2StzyrFl/QogtBOGl3hAx0Di1o37pAzD6oOVQVibXz5\n+KECQMCiiPTThSgEbsbq5ME5a4Rgx6VaiFeCZUSuqcR13LiZbXXZqOIKcOjnytYNsn3r7hmptP9a\n4+bE8uHcXRmnurt/p8/4cuoYNT379JZ9tneTpfMXyLIPF2kzOdfbt+2Q5nUbc74+zhfiSvWeSxf/\nq5eXy9Un18W5q2XRt3wBDoD8Fy8u93/f4mhZVxaTZIMwBUyBklYgb4jD6IExBDJWixzgTUtLi6x1\nvyBhfcN+YAs1Fjpaa3aqIGwAGARBAscoChIURNAOwIYFiBNMN94ZxAFcJFsAGHovf8MS/h9aKZRS\nPVUTxo5mQC/V
 Dv0oADk9T7XgevbrdgnLYl03BUyBmClAqtjFzVvkp88vk2+ePiKSTE+4UpHR5EdP\nN0jzhm1y2aRwU5CTXnqyS3v7+zdWFSx4KpmO0OumRxbL0MoeBbUCCusRwi2MjGJfP2VUXk22b9kp\nf3hztXNpi7e7xdr2Tc6taXtWYyX+zSuP/MUHOCbYca++feSwKSfIXp/+qEVj3dy/6VM+f7HLWvWy\nvPPKa1m1n3jylk1bZe2G1KnNE88vtW2AK/FxyFoVZ+BXarom9jdfgEN7T81vdVC8W0n+bUvUw7ZN\nAVPAFIhCgbwhDi/4QBwscRTiEP+mubnZgxwgjsbHSYyZw3XAARaFDbqtNYMOrrPNuUAbwItakgTB\njIIIbZOaNoLnc51eq+ucUw6F8aoG1LqwXwGOZvZiDiico+NnTlU71q2YAqaAKRCVArxY3fZ4tFYl\nuGvhRvHjpxvl7heWedgSZgryS44cJNc9+KHgIoaFUSEKv06TgYuMVYMrekhUcX+iGAuWMy8ubPNu\nEvmmfgaeTdl/QGQueWGNv33zNsHSJZvCv7+fBSFu9HFx9tr7pN2a4Dhxb9rcdy7+Dc/n32wshTZm\nCZp260zMN3jWCHoNyNnXpVMHwFoJV4EwAA5uVMQzw0LTiilgCpgCpkByBUKDOKQZD0Kc1tZWWb16\ntbfAAeKwaPYqXQ9CHL58KEQAIFB0O9k6QEbhBDXbLEGAoSBC93GeWqIAbgAawTp4P9+BEv1foi66\njT6MmaDQzBeWUBT0QRdqCudTdH74UshSLvr4wdn/TAFTIBYK8GIFjLjhoUXeteZ4Z9USRans3c1b\n5ABxsMq55rQRobk/MYYrJg/zrho/vGRfyRdMZDp+XkSBYLtiC42W2v7xC+ibOBYyUfGid/1ZI72r\nW+LxbLbnNW0Q2rti8tBsLivZc2tHjPBQB2hDNqtsghaX7KBD7jjA84vH7vrM3HbhGAkT5obc1
 ZJr\nLgyAgxsVf6NxEzU3qpJ7BKzDpoApUEAF8oY49DUYEwfLG9yo1qxZI6tWrfIQB1crFiAO8EC3FRLo\neBUSaK37tQ7uBziwzaLr1KkWBRnACtyHWAAaLOqOxTnZ/ooV7JP2M5862/sn3ks1AdgwVoVbWuNG\nlQzgMCecr+NRXQE9qm/ivWzbFDAFTIEwFACwAHJIM02MlKh+IeeFjbTj97+20seUwSWJl7owChY4\n4wb3kYf+Wtg4NUCvFW1bvXZxD9pKJiqCMl95wrC855igyL95ZYWPb0JsoriX/r1dHLoe3WTLptx7\n+t4bs4UlqtK9Zw/p2yv+IDDf8R87tkIWrtokxGTi746V/BUIA+DQi0fnNnt4Y+ng858Ta8EUMAXK\nW4FQIA4SAWSAOQACXdTiRrc5zsK5wIFUwCLZft2nNZBB17WmHwoxFDwojGAbSKMQRwFOIsShDS1c\nm6wE7xdcT3ZutvtS3ZN2kh1LvD/bjDMZxGHsBH/Wa9BEz0MHjnOMueFeLJzDPpZk9892fHa+KWAK\nmALJFMCqhHg1P3mm0ZvRA3aiKBqM+LG3m+XWx5b4lzjuHUa5/Jghcv2fPpJjxlTkDSmy6c8lRwyS\nxtat/hdsIFUcoQbQhbklDtIRI/tnM7yk5z7sYJwly+4AAEAASURBVNlhI/p7t5ikJ8RsZ0XfXtK9\nZ7wBSa8+PaWqXzifhZjJv0d3Lj9msHOrWiJPvdMaesDzPW5W5jvCAjhLW7bI9HdbBQspK6aAKWAK\nmAKdKxDKt2Re9HFLwsoDV51KF4CPQMZY3qjlh4Icaqw+qBNhgYIDhQUKDxQsBLcZloIg3R/c5jjt\ncEyLtgNE4v56nOuAS8APLdoXtoP9YZvztei9dTubWttNdU3wuK5Ts+i4EvtCWxxXyxutFewwbuaL\nRfcpyOE6YA5zSeEe7Avq4g/Y/0wBU8AUiEABfn3VQMcEqo0SRpx7aI3U
 9OvhM0v940nDQgELZKfC\nDQALkZvOGRVp/xPlj3vGqrAyUTHuxc2b5Y0l60vqZW94TYULUByO1Vfi3Ie1jaVQzYDCxHQKq8+5\ntsPfFuLj3PzoIhdPqreMruka8CpXvVJdFxbA0WxUgHxzo0qltu03BUwBU+AzBfKGOAoMePknWG5F\nRYWPfwOooZBFCnDAovBGawAEgIA2FCxozbUcDy5BCBPcr5Y9WgePBa9RKKH7ADcUtrlW701/tE+6\nrudp29oGddiFe1L03slqjgf7QL/YZuF8wAzaJi6MWcEOljcsbANuuA4dWILtsG7FFDAFTIFCKMAv\n5MSsweWJeC9RFtwqqvt2k7uebXQpyGu9lUi+9wNEvfpRm/tFeW1Bf+GPc8aqsDJRMTe87N370grB\n6imKtPT5zn+q60cNrZYhQ6pk5dJVqU4p+v6awVVywMjSTVmfrYDEkMK1j5hSWH+U0vOU7VijOD8s\ngEPfzI0qihmyNk0BU6CcFcgb4iAOoIC4MrjqAHEANkAF9pORCmiji8IctvVatQrRmusAB7ShUEHX\nqQERLHpMa92vte7nngAKrtWaYxRqjgMyOKYghz6wrvv0XO2X9oftsCAH9woW7Yv2gVrXg/0IrusY\ntf+JNdooxNEakKMQh+tpj/twLcfYZ8UUMAVMgUIowC/kV5+86xfyGe+v85mHorwvWZ2wmrnjSZeC\nvH27XHb04Lxvp6mMJ43uX9BfleOYsSrMTFRMDKmHiWMUhktW3hOdRQMnTxwj/7euVuT197K4as9T\n+bd5UH2dC2rcuOdBt+eASUfK5g0bZem7C5Ie72zniFFDZMphozs7peyO8RwtXLlJfvr8MrnuzHin\nqY+T+H94c7W3mvz2GfV5B4c2N6o4zaz1xRQwBUpFgbwhDl8ogAFY4gBxFOCwHzAQhDiJgY2BBQoS\nqIEGLKxTACwKa4JgRte5F0viNvuC0Ii+UDiPe1J
 oW4EH2/RN768wiX4oSNFruE6v1XVtk3NyKdo/\nvVa39d5a0z+Osc096b/2gXVdaIdz9Fy9nhoNVHPVOrit17JPdc13fDouq00BU8AUyEQB3JLIHnXb\n40t9oOOwYtakujcpyEln+8OnGvyv8lefPDwvVyggw7SDBzq3qpVC8ORCljhlrAozExUarnGQrVRT\nD+NOVV3hfuiq7i/rW9uzfiR69OopYw452EGaw6V1JWnFk0OcluUr5KRLL5R+Aypk/quvZ3yf3i5m\nTx8XE2ff4QMzvqZcTrzUuUD+2xNLhThZuFla6VwB4gjNWdout54/Om+Ao25UZAwzN6rOdbejpoAp\nYAoEFdjnFleCO3JZ52UfgEABHAAH1FUHCx3i4rAAeajVaqd///4+fg4xdAYMGCBVVVW+rq6u9hY9\nuGcRY4frWGcJtkE7GsMFYKT3BFYo8KA/Cjy0j7pNvxWCKAxSEBKsOZ/zFBoFIZGCqeCxbNfpB9co\nNNF17kk/gnWw75wPrNKa64LwKtgP3U9baINGCqmo2af79Rjb6IrGaIuWVkwBU8AUKIQCA/p08xYX\nP5u5XHB76t3js5hlUdwfdyQyPWE5ggXQUaP6u1The+d8K2DKE39r8WnMh7uMW4Us9dW9ZPP2nfKn\nOWtk8n4DpJtLgV7oAnDBLe4rLv33+KHhxFn5r+eb5LTx1TJhWDjtFVqTTVu3y9sfrJDmla0Z37pi\nYLUcfOLxctz5Z0vdfmNdXJ1e8uFb86R52fKkbWxa3y5NCz+UiaecJFWDB8nyDxclPS9x56hxdfJ3\n5x0tR+5fl3io7Lf3dt9tDnbZ5X754gofKLumX7wDUBdzQgA4z7+3Vm48e6T065n/3+RH3moW5yEp\nlxzhrNSsmAKmgClgCmSsQCgQB9AAXFCAAxTgxV8BDuBF4YsCHWqFOEGAA8hRiAPAYQnCHG2HtoMQ\nB8gAcFAgQV8SAY7CEAUjCk
 0UcLDNOQpKdFxscywISbgGgKOLtpFtrQBGawU41PRFF+2z1sn6E7x3\nEODQR+0v7SnkSqwV4qiGqik6o61BnIw/V3aiKWAKhKAA8AMY8chbLXKCgxFRBjqmu8AOMkthQfKn\nvzb77Ed9c3xR4cWQVOm/dPFbTtp/QF5AKBcpD3Sg42/LNsobi9vl6NEVQn8KVchEdbuzbJjixj1l\n/6pQbvviwnWypGWrfOm4IaG0V4xGRgwaIM/OWyJLP1ze8cNXqn70dT9uTb7wXDny9FOkZthQ2dv9\nqKJl7gsvyhYXbzBV2erc2JfOf0/2P+pwGTVhvDS+t7DT++3jYOXhx0+Q675wklQ4a5yuWIDEI6p7\nys8dND7OwVygrpXdFQgCnDCyB+JG9dtZqwSXrJ7dTO/d1bYtU8AUMAU6VyA0iMNteMkHAKhFTBC0\nAHUU7Og6cIYYOrpgkaMLgIfrFfroOrVeD1hgUdhArQACQKEgR+GDgibdT58V2FBT1CKFdrQt9nGN\nngtI0UWhj784hP9pX6kZQ3ChH9onbkUfgDkKegA1CoHYr6BHa45RdGw6T0EdOaaaqs5ozj7tm2/E\n/mcKmAKmQAEUIGbN3MYN8u6KjQWJgwLsONzFydi49WP59csr5MBhfaSqT26/zOMesNpZpLzjYMrE\n+vzTamcrN/d82sWQadm4Qw5ylgaFKLhH/JeLLzKksod8IYT4QvS5fctOH7Pkf58y3Fk25e0FXggZ\nkt6jt0sxvm7DFmloXi+rl7ckPUd3bnc/vvRz34mGjNo9Tsu2LVtlzvTn9bSU9U73HWDJ/AUydMxI\nmXD8sbLMWeds/zQWYeJF4w4eJeeefJicc+wBiYe61DZukBu37ZRn3Gfm2LGVBQWfcRc6bIDD34kf\nP9Pos/mNqbXMYHGff+ufKWAKxE+BUL4NqUUHACBY1LJD4QPQAJAAEAAQAAUUGCiIUYhAO6xzPsc4\nn3VAB
 VAhaF3COseot2zZ4uPwbNq0yVvxEJOHDFnULJzHomBDYQcghP4o2ODewXUATrJr2QdMyadw\nXwUkWqumaKf6BWvuq2OlZqHQTwVSuq7bHKevwW3ulwiKdFv7pX3ieiumgClgChRSgV2Bjoe7VMCL\n5XHnnnS2izVTiHLBxBohe83tTzTIVVOG5QxhSDl+3YMfyXFjN7lUxn0K0fWOexQjY9WDzoVrk3sR\nvua08NxyyIJzygFVQuyiUi9fPusIeWLW+/Lhu0tl88Zd/26nGtM7r7wm27dukSPPOK3jlFVLGzrW\n060Acl5++C9y6JTJcuZXvigzH/iTtKzYPTsWac/r96uTr114TLrmusTxCyfWejdAsiVddLi5+DDp\nYQMc2kRfoNkkZyVoxRQwBUwBUyB7BXanLtlf769QEABkABIobNCXf4UCul+BDcdZB5goNOEc9lE4\nrtsKXoA+rAehDtss6k6kUENr4I2uB+GNtkmtbkZBcKN9Yp9avQSvYZ0lV4ij+iSrO4M4HANYtbe3\ne0C1YcMGYaEwDooCnCC0UXij86G6B8cZ3If2nGvFFDAFTIFiKgCMAAp87y9LZKSL91IoqxJi5JCC\n/M7pTf4X41PHZ+8aRN+/fPwQ+ZWz6iGNcfcCx6cpZMYqXJ5mLWqTW84bHZrr27ymDYLbxT+cOKyY\nj2Bo9+7Xu4f8/blHyYb1G+WVZ2a7f6tTN813g5HOHWrxO+86i5yR0rtfX1nd0JT6ghRH3p7xsmxc\nt15O+cLn5dVH/yLLPo2T45qXI46bIJ8/+WCp7m/WEMgHNL5qynC56ZHFMm5wn4L9rUkxdUXfHQXA\nwV31uQVr5Y6LxxZ9fNYBU8AUMAVKVYFQIA6D58sGCy/+FF7+ASbU7AvCGHX/0fM5BjzQ81inUNMG\n5wNS9LpkIEb3AVUSrXQ0Hoy6GwVBjF5H2/Q1GcShHwAQPVfhjW7nCnEYIxponbge1E
 X1oeY8LI3W\nrVsnbW1tXifaoD+MXcGNQhvdDt5H54X2WIBjahWl9+I+wYXrrZgCpoApUAwFsMLg5eruF5o8JOBX\n3EIUgvLect4onymrecN2D3OyvS9uTS990Oaz3xTj1/1CZKx636VpJr7FzeeOkjDiZaAxsXXue3Wl\nn/eo4yFlO6f5nH/RCRPktXeWyqb2zfLXV+enbOrY86a52Deb5LU/PyF9nOv5KZdd4rJSZW6JE2z4\nw7nzZMO6Njnh4vNl3syX5P3Zb8n4w/eTwybUy//rrIOsfKYAzy/Q8BcvLvdZ68J6nj+7Q2msRQFw\ntu/8xOtKbCuyEFoxBUwBU8AUyE2BvdyLfie/A6VvlMuBBCwKWXQ9cb8e1xpAAKhQoKA1+yicp20l\nrmsbABVdp1awArBhXcGN1no8seZa+qMQhxqYoTXjTIQ32j59zKVwP4qCkuC6aqNAJVhzDCuclpYW\naW5u9gvruo3VUXBegusEhh40aJDU1tbK4MGD/TrbLAMHDvTBpjVGEXGJdJ3rtL++0/Y/U8AUMAWK\noADZTNTao5DBR9s27/DBeglWzAtetlChdeN2/+s+WV2K5Rb04JzVMntJu4dgYWpHJiqspLA4CjP2\nz+9fXyXb3EtfKQczTvUR2ewyVf3jjx+W12e9JwvfWbzHaQe5ODb148fJM/f9Tna47zmUbu57ia7v\ncUGGO8h2der/+ry0NjXKoH7b5b4bLhZi9VjZU4GH/rpG5i/fKDdMG5n1533P1kprTxQABwX4TK9x\nMPwbp4bnbllaylpvTQFTwBQIR4G8LXGCAAIIwzbQABCjECdVzRA4j2u4Vq+npnBdEEDoOsBFjynA\nCW4HAQ37k1necI4uCoLoh0IcBTidQRyFOtwj1xLUL7iOBmjDQl8SIY5a4KAJ48ACh9g/9BdgRZ+C\nOgb7F9Q7OM5ESxydD67lPlxnxRQwBUyBYipArJoVbVvlnhnL5
 NqpIwrWFX6Nx03ormcb5Y4nG+Sb\np4/IKoMNbk1Y4eBWddM5owrW7+CNLjlikDS2bnXWTMu8e1q2ICrYlq5jLfOTZxpk6oFVoQKcxc2b\n5Y0l6+X2i8rT5eKTvfaWf7z0NGnb5r4zuSCvH7y7RCWVkQeOl3FHTpQnf3XfbtAmX4DDDda3tMrb\nzz4lk6ZNk0NGDZS99jZriA7hE1b4vOL6Q5wnYlt1lRIVwEHLlz9sMzeqrvIg2ThNAVMgUgXyhjja\nO2ADL/q6KEBgWwGLHqMOFoUKCgm01vOCbXBdsm326f4g2OHeuk0dBDxBuMMx+hyEOEHAQTt6rcIb\n3eZYroWx6niD6/RFIQ41/dKae7W2tvpb0m8FOOvXr++APbSlugfb1fXE9hMBjt6b862YAqaAKRAn\nBb58/FBv+cEv5YV0T8J6hXS4gBgCLV9/Vr2LmZO5FQMxdV79qM3Hg8glvk4Yc4BLGlYzYbyYkmEG\nIER2mXMPrQmje74N2r3XpWb/4rFDsgJloXUg5IYYT0PrFg8EeJFd3LxFlq/b6q07fvzV0+X7vxGp\nqqmQ2a+8I9VDhsgRU0/2QYg3b0idRjyXLvLP+WHHHCj7HzBC/u3i/eSRv613QHKph6Fd1WUonY58\nXm58eJGMH9pHDqnrl+70kj8eFcAxN6qSfzRsAKaAKRAzBfKGOICTILBJNj7OCZbEbY6lgwXJrtF9\nXKvr1CwKMILrQRADgNFFLXGCEAeIoRCHmnYU2gRrtXoJji/TdR0ztS6qBX1R0ML9tT/UFPYRsJmA\nxsTGwd0JEMN+nQ/Oo99as6730fY4X8EV1yvM4bj2Qa/xDdn/TAFTwBQosgLAlGtOGyG3/HmxjK7p\nFaoFSLqhYb2COxUAieCn151ZL7hYZVqumLwLQB05qn9osWMyvTfnoR1WRPR9qEsDfuK4Adlcvtu5\nUWSi4gZPuCxkxDwK0zVrt44XcAM3vBse
 WiTUiYXA2fsNrZRfXneR3PHbGVJZM0Aq6g+WN558Zo8s\nUonXZrvdu28vmXTiIXLsYWPk5i+d4l2ovjGowscx4nMEnCyWm1+2Yynk+cRtufrk4fKfzzX5+DjZ\nQNtC9jOMe0UFcOjbg7NXS11VT8tGFcZEWRumgClgCjgF9rnFlXyU4AVfi77sp6sVDgTrXK4JXq/r\nCh+oUy0KRfQ42yxkvAJiUAfXg3Ak2bVAEAUg2dbBe6W6lvb1vtRoRWBjXKp00SDHbGOZEyyqLRr1\n7t1bBgwYsNtSVVUl1dXVUllZ6Y/TJ9K4a3/Y1vsG27V1U8AUMAWKpUDfnvs4C5Be8l/PL/Mv+xXO\n3amQhYDHvOBhiQLEyTTQcv9e3WTbjk98oOOjxxQnvW7vHvv4dOf0nbTnNf0ytyZSjclE9eyCVvnn\ns1zWJNdeWGXV+m3e0ilbd7Ww7h92O0CzEdU9XRyn9e5Hld1bBw7wPOzj/m0+esIomd3cSzauXSWf\nbF4rrc1tzpVqT/Czewvpt0ghfshR+8uEI8bJlecdLddccrx077ZrvvZ23yUOG9HPWwT99wvLhQDY\ntf0LEzA8fc/jcwafj4/d5P1pTrOc5KAnupVbiRLgYH32yNw18k9T66VnN8t4Wm7Pjo3HFDAFiqNA\n3hCnON1OfVesTdT6RM8CYmgJHlfLFI5xDlBH3ZZYB1woHOIcvVbbVzhCredlWytI4jq9n+7T9rk3\nhftiTYTlkAY2xq1q7dq1HQswB+sgSmK/aB+LHaCNghutgTgEMQbyKFiiBuRwHQvtWTEFTAFTIC4K\n8MLJSzJZkU7Yr9Kl7y7sCwLwZnRNbw+SeBkf5ayCMin7DuojBGjm5XBoZc9MLgn9HCwKBrr747Y0\naXSFAMUyLWSi+vnM5fIdF/B1UMgv/f/xbJOcedBAOcDBpXIpAL6Vbdt8PCId0xEj+8vpE6r9Ju5W\nwMj6mj5yyyUTpJe
 zmtnofrwZUN3fWdxuk62bt+hlGdX8Uz2gplL2P3iMHOQAzpfPmyT/+pWpcvi4\n5Gnaxzp3OKxwfur6gFtVNpZlGXWoDE4Cdr7duEEWuVhN5eZWFSXAwY3qR083yOXHDLbnqgw+BzYE\nU8AUiI8CZQdxkFZhg9a6j23dFwQ4Cl4U3ChEUajCcb0usS326/nZ1rSv1+i9dJ/ek/aD8IgYOApx\nFOAAbgA51EGIQxvB9gFUQByATRDksK0QBwschTdqYaRgK6gBOlgxBUwBU6DYCvAC2ujijcxc2CbH\nOMuWQv9KPuhTtx+gxtYdH7vYGX3TSoJLVn11L5dqd4WcfECVdNunOICcPmzevtNZGKyRyfsNyKgf\nZKL68TON8vcnDvVWPGkHm8UJWPc0uMDLxMIpp4Lr3VsN7T520GqnH+Vrzgqnqs8uC6jfuYw9LRt2\n+Iw9PbrvIxP3GyYXTD7QZYyskG4VfaVm1BAZOnSg7HCwp3sPZ5nrzuHf4507dgqWNr1695S+Fe4H\nmtoBMuHQsTLeWd0c5tym/u6cSXLD5VPk+INGCu12VoA4Bw3vK790zyTPxIHD0j/HnbVXjscOdVZL\nAGPgcbm4nkUJcHgGHnhztfRzFovnHBJezKxyfLZsTKaAKWAKZKtA3inGs71h1OerlYzW3E/XqbFk\nSbZwjC9FCk+AH6zrkuxagAptafvZji0IRZKta/vUuqglzurVq6WhoUEaGxt3W5qamryrlcKbxJq0\n4cOGDXNfCIf6RdeHD3dfKJ2FDhAnCG/UpQq4FOxjtmO1800BU8AUiEoBLBkI1rv/4D5y2dGDo7pN\np+2SQpysVbikEPcmk8xP97603FsSXX5McaHFndMbnbuIpM1YRSYq4qcQyyXMQMYI275lp1z/p4+k\nmCnYO53gHA6iFy5r23d+7OKq1DlLsb18kFysoBgn5bkFa+Xp+a0+YxnuecnKmnUbZda7jfLmgkZZ
 \nuXaDtG3cIhudhc6mbTukd/duPr5NVf9eMtRZ7hzqANCJh4yS2gG5QRh9jok1ReynTJ7jZH0u131k\nTfvhUw0+U12mLpRx1SJqgIMb1d0vNMltF46RPiG6XMZVT+uXKWAKmAKFVKBsIQ4iBuGKrit0UShD\nretBiKMwR/fRnl5LHVznWBglCEnoE+BGgy8Ha2LerFmzZjd4A8wB4LAQ8BgQA3hhCa7jMgW4CS4A\nHYU46j6l12hNO1ZMAVPAFIirAgSOJVgvqYCBDMUou9JtN7oXX4BI+hTkm7YBLhZ5CwzgT7EK/QaC\n4SaSKpUyoOwu5+oEaODlPuzCy97wAb2EFPLlUJrWbvXBcCc6641L3TOpMIT9G7fu9FZM7yzb6F9y\nSTkfJ8sOnoe7nm108OkT/xyngkvlME+5jAH48dIH6zzIAcyVYoka4PDskNXrskmDyiJAeSnOsfXZ\nFDAFyluBwgYQKLCWQBEFI7quljXUAApdgBe6Th08L3gt61i3KBxRS5Uwar2/tsU96AcFaATUwZWK\nmDe6sM2ikIdzFExpX+kvbeImhaWNLsS/YcHFqm/fvn5RdyrtC/enHdq0YgqYAqZAXBUglse1U+uc\nu8NKl8J5c1G6SXwe0o7TFyxWkmUkCnaMX6eJFfGbV1YIkKRYRTNW4c7EkqxoJiqsjMIuuBo1Ojeq\ncw8dGHbTRWnvjcXr5fYnlsqFE2u9ZZgCHDpDhh7iq5BinIxH3zi1LlYAhz7yPJCtiuxlwD2CTVv5\nTIEzD6p2c9bD/635bG/prEUNcFACF0HAdDlkmCudmbWemgKmQFdSoKwhjk6kQhhqoIRCGK0VyAAu\nWNf91Aox9FqOBxeFHWHW2j73V4ACxNHU5ljisAByqBMhDudSdKwKhYA4Cm0ANwAbBTlas4/zGU/i\n+FVPq00BU8AUiKMCBBm+bNJguXN6U1qAElX/eWG/aspwIYU4qaWxvOisEFQ
 Y9xrSahez0Idrp46Q\n+19bKQQuDhbAzqxFbR44BIFE8Jxc17H6IM7IlSeUvusOIO7BOavlDy4OCEGfjx2bPPsYcO8nLq7Q\nF5zrXyYxlHLVNp/rmGfm5LixlXLrY0v2eCbyabscrr1i8jDBkuq1j9aX1HAKAXAWrNgoc5a2e0Bd\nUuJYZ00BU8AUKCEFyg7iBIFNpuvADl1yuUavzbbu7F48Q8AYAA2ghpTiZKTSIMYEMl6/fr1s3LjR\nu09t2bLFW+oowAHAAGKAMgCbfv36+RTipBcnLg7bWN8Ab4A7Co6oE+EN/bRiCpgCpkApKHCiSwF8\nrAtwTKadYlq3XHLEIPnckYP8CzAve50VAvkCcQgaXMzCL+dfPn6otxDRvgB0gCzfPH2XhVHY/QN6\nTKzv53+1D7vtQrZHTB+y8Cxas0W+d8Fob3GT7P48k1jgAO+m7D8g2Smx2od7GzGbcK/CwsjKLgWw\nVsKK6v7XVnirqlLQpRAAByj7ixeXu78jQywOTik8FNZHU8AUKFkFyjI7VanNBq5KgBJ1g6IGxhDb\nRuENwIaFjFQtLe7LvouJ09zc7LcV6CjUoS3gjLpIKcDRdOIDBw7syFBVWVnpU4sTKwfgo8CGGigV\n3C41Xa2/poAp0DUVILPOa85yZOGqTXK4S+VcrELKcdI1kz66s9TNpPfu5v7ePvlOi88SVaz+ct9g\nxqoDhvbzL+9RZKLiXgQ+feztFvnfp9RllBmLa+JYlrZskdufXCqH1/f31iudpbonixkZ1IBlhc6k\nlqt2I6p7yn6D+sjPZi5z31Mk9Kxkufar2NcN6NNN+vXsJv+fcx3KNLtbsfpcCIDD2NCiyln1WTaq\nYs203dcUMAW6igJlZ4lTqhMHtAlCHA1qjBUO1jYKcAA3q1atErJTAXPa2to6rHFwr1IghEUNFjaA\nHAANFjjAGxZgDvCGY+o+pcBG4Q3bWhTk6LbVpoApYA
 rEWQFcQcgGtGDFJpnxfvIYL4XqP8GCyUSE\ni80jbzWnvO3UA6uEX7FTxaRJeWEEB7AiqunX3cX1WSSnja+KJK4FFinEAiImEFYNpVqYL7IVYU11\n0eG1nQ6D+ce9Dne7sN3SOr1xCAeJ40MA5pc+aCt6DKcQhhNaE1hTjant7d0QQ2s05IYKBXDMjSrk\nibPmTIFPFXh36WpnWbwrVIaJYgqoAqX7zUlHUOI10EVLEOKwjisV1jhAHGANVjhY4CjEYZv9GzZs\n8C5XxMwBBgFdFOJgkYP7FBCnurraQ5ygSxXHcbvifK7ThT4ZvNGZsdoUMAVKTQEy6hDjhQCbiTFe\nCj0WrHFuOW+0vPpRm5BWPJmbFy/1WGcAe3DNKWahf+4/Zx20l2x2YCmKgvsYwWFLNfApGt336krv\nBgekSzcOYqdMf7dVrjuzvmShFRm0ADmAKGL6AB2tiAd4i9ZsjgWATZwPXOB47nhGsQaMqpgbVVTK\nWrumgMib7zXJd3/5lIEcexh2U8Agzm5yFGcjEd4AYtQSh1g3ySxxgDkKcTQuDtCHtrCiAcxgiUM8\nHIU46kYFxME6h2NqiaNBlBXiKMDRujjK2F1NAVPAFMhdATIBXXnCrhgvrRuLG2+mtr+zbDlvlKxo\n25byBRjYM9mlR//9G6tyH3QIV5KJausOl3bcxXbB0iRs6yCyHWEd8MVjw890FcLw0zZBYOI7nmzw\nwbOBc+nSg+M2Rta0b50xItIX6bQdD+EE4Oj1Z42Uvj33zigDWwi3jH0TWJJ93bkEAmBxrYtLAeDs\nimcV/XPH2A8b0T8tzIyLNtYPU6DUFJj1boOBnFKbtIj7axAnYoGzaT4R5mBZE4Q4xL4B3qxcudK7\nUynEwRKH89QSB4ijljgKcXCfUncqtcTRwMZkowq6U9FnhTnZ9N/ONQVMAVMgbgoQQPZU5xJExqrt\nOz+zfCxGP0kpfoPLWsQLMKmbk
 6Ugv8QFQ8YtIV0w5Kj6D7DRTFS1/XukzFiVz/3vfWmFfP6oQQIQ\nKLUCkCF9/AQXd4nAtulcwYCHd05vlK+41OxkTyuH0n2fXe6KmoEtTuCiWPoCjHmmCVodBwslBTjX\nn1WfFjLmqxl/r+Y2tvvx59uWXW8KmALJFVg6+2mZOXOmgZzk8nTJvQZxYjDtCm/oiq5jjUOMmyDE\nSeZORawchThqiQOAAeIEM1Mlc6fSmDiWTjwGD4F1wRQwBSJTgFglBCHFlanYReP1ECvnpkcW75HZ\nhhdk0hf/6uXlBYdOyTJRJctYlY+GGqOILGKlVug7QIb5IWtTusLLPPFyzjyoWo4oYoDtdP3M9bhm\nYLvt8aXyVkN7rs2UzXU80wcN7+s/u8UcVCEBjrpR/cOJw9ICzWJqYvc2BUpegU8+lll/+LGBnJKf\nyPAGYBAnPC1zainoOgW0YSGYMbFwADiaoQqXKTJVsQTXORcLHNyvAEAAHHWnUpcqYA6xb7DKYWFd\n3aiAPepKxQDUAiexzmlwdpEpYAqYAjFR4OqTh3tXh8ddLJY4FH61P/+wGmfVscRb3gT7xIvguMF9\n5KG/rgnujnSdlOJ3v7DMBd0dtkd67OOdi9fJBwxwbmANeVkZYHn0x9mrvYtbpIMJuXEsuACAxBbB\nfYr5SVeImYOeBL0999D0wCdde3E9TmBfLJLumbFcnluwNq7dLFi/SMe+fN22omlRSICDqOpGNX5o\n+s9EwSbBbmQKlKkCn7gf+A3klOnk5jAsgzg5iBbmJUAcIIxa3QBpsKxpb2/3i8a7Aego5AHYcJ1a\n7Wh/gDcAGV10G1CjsIZjrHOMBVhDUWijbVltCpgCpkA5KYDbC4GO//J2c9FclRL1xM0LaIKrF4Fv\ng4WXQVybCuGqwq/pABoyZKUK0IvVxeCKHh5MJAvMHOx7qnUCAWOVQjulUnCHuvWxJT7QM0F9iW2U\nSSGuEbpe
 4dyoyr0AtYj39OjcZvm9CySe6/NRDjphSQfUenDOalncvLmgQyo0wDE3qoJOr93MFPAK\nGMixB0EVMIijShShVggDlAlCHMANEAeYo1Y3WNyw4DKlljeAHIU5CmUU3FAnghssc4KuU8FrijB8\nu2UJKmBpDktw0qzLHQoAD0jvfPcLTUJw3TgUoMl3ptX7wLePOcCkhXgxWOuQhjvKl2LaJo4HblPp\nLEbQDqhB4ONsC+42aD7t4IHZXlq083lJxVLqxHGVko27CBYp85o2+pf5UkslnqvYBHcmEPa7KzZ5\n0AfA6qqFvzME7eZztWlbYTLNFRrgMC6sr7L5XHTV58HGbQqErYCBnLAVLc32DOIUcd6AOJqFKuhG\npZY4CnFwqUoGcbieErSmUYij1jfBGoAT3A5CHG2jiHLYrUtAAdIc/vN/P2ZpDktgrqyLyRUgFs05\nzr2F2CZxedEk4C1uOi990LYbtCHGBhZE09+Nzk0FixHchUhvnq7Ql2+ePiLrjFXofP9rK/09SgVq\n4HbHSyqWUlMPrE4nTcdxAlJjhXHNaXUlGbi5YyA5rJDCmlTWgME7nlyaNHB3Ds2W5CXHjq3wcZB+\nPjP6OFyFBjhMCFmviPNkblQl+Xhap8tAAQM5ZTCJeQ7BIE6eAuZ7OZY0WNcELXGCEAf3Ko2Pwzlq\niRO0wqEP6g4VBDMKdNS9KtGViuMKb7TOdzx2ffkrMHvhcgM55T/NZT3Cs501COm8iVkSl4KbDu46\nTWu3yl3PfpbhBrjy6Nw13gIm7L4SqPethg1ZWYxU9+2edcYq4mbwwoe1T9wLwOmeGcvkTZeeGReh\nbF5Sl6/b6q0vcKdJl3Y87jrk2j9AH+P3YNJl8UKTrloumz

<TRUNCATED>

[15/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
jupyter notebooks for 1.14 release


Project: http://git-wip-us.apache.org/repos/asf/madlib-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/madlib-site/commit/3f849b9e
Tree: http://git-wip-us.apache.org/repos/asf/madlib-site/tree/3f849b9e
Diff: http://git-wip-us.apache.org/repos/asf/madlib-site/diff/3f849b9e

Branch: refs/heads/notebook-updates-1dot14
Commit: 3f849b9e496063ab70adf139fece33c2e32583eb
Parents: 6c103d3
Author: Frank McQuillan <fm...@pivotal.io>
Authored: Mon Apr 23 14:56:06 2018 -0700
Committer: Frank McQuillan <fm...@pivotal.io>
Committed: Mon Apr 23 14:56:06 2018 -0700

----------------------------------------------------------------------
 community-artifacts/Balanced-sampling-v1.ipynb  | 3706 ++++++++++++++
 community-artifacts/Decision-trees-v1.ipynb     | 1590 ++++++
 ...coding-categorical-variables-1dot10-v1.ipynb | 2748 -----------
 .../Encoding-categorical-variables-v2.ipynb     | 4026 +++++++++++++++
 community-artifacts/LDA-v1.ipynb                | 2034 ++++++++
 community-artifacts/MLP.ipynb                   |  514 --
 .../Minibatch-preprocessor-v1.ipynb             | 1330 +++++
 community-artifacts/PageRank-v1.ipynb           |  774 ---
 community-artifacts/PageRank-v2.ipynb           |  889 ++++
 community-artifacts/Random-forest-v1.ipynb      | 2899 +++++++++++
 community-artifacts/Summary-v1.ipynb            | 1026 ----
 community-artifacts/Summary-v2.ipynb            | 1017 ++++
 community-artifacts/Term-frequency-v1.ipynb     | 1062 ++++
 community-artifacts/kNN-v2.ipynb                |  751 ---
 community-artifacts/kNN-v3.ipynb                |  857 ++++
 community-artifacts/mlp-mnist-v2.ipynb          | 1154 +++++
 community-artifacts/mlp-v2.ipynb                | 3755 --------------
 community-artifacts/mlp-v3.ipynb                | 4584 ++++++++++++++++++
 images/neural-net-head.jpg                      |  Bin 0 -> 326157 bytes
 19 files changed, 25148 insertions(+), 9568 deletions(-)
----------------------------------------------------------------------



[05/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Summary-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Summary-v1.ipynb b/community-artifacts/Summary-v1.ipynb
deleted file mode 100644
index 57c3611..0000000
--- a/community-artifacts/Summary-v1.ipynb
+++ /dev/null
@@ -1,1026 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The sql extension is already loaded. To reload it, use:\n",
-      "  %reload_ext sql\n"
-     ]
-    }
-   ],
-   "source": [
-    "%load_ext sql"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "u'Connected: fmcquillan@madlib'"
-      ]
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Greenplum 4.3.10.0\n",
-    "# %sql postgresql://gpdbchina@10.194.10.68:61000/madlib\n",
-    "        \n",
-    "# PostgreSQL local\n",
-    "%sql postgresql://fmcquillan@localhost:5432/madlib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>version</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>MADlib version: 1.12, git revision: unknown, cmake configuration time: Wed Aug 23 23:07:18 UTC 2017, build type: Release, build system: Darwin-16.7.0, C compiler: Clang, C++ compiler: Clang</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'MADlib version: 1.12, git revision: unknown, cmake configuration time: Wed Aug 23 23:07:18 UTC 2017, build type: Release, build system: Darwin-16.7.0, C compiler: Clang, C++ compiler: Clang',)]"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql select madlib.version();\n",
-    "#%sql select version();"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 1. On-line help"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>summary</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td><br>            'summary' is a generic function used to produce summary statistics<br>            of any data table.  The function invokes particular 'methods' from<br>            the MADlib library to provide an overview of the data.<br>            -------<br>            For an overview on usage, run:<br>            SELECT madlib.summary('usage');<br>            -------<br>            For an example, run:<br>            SELECT madlib.summary('example')<br>            </td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u\"\\n            'summary' is a generic function used to produce summary statistics\\n            of any data table.  The function invokes particular 'methods' from\\n            the MADlib library to provide an overview of the data.\\n            -------\\n            For an overview on usage, run:\\n            SELECT madlib.summary('usage');\\n            -------\\n            For an example, run:\\n            SELECT madlib.summary('example')\\n            \",)]"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql SELECT * FROM madlib.summary();"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 2. Load data\n",
-    "Using part of the popular iris data set from https://archive.ics.uci.edu/ml/datasets/iris"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 51,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "30 rows affected.\n",
-      "30 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>sepal_length</th>\n",
-       "        <th>sepal_width</th>\n",
-       "        <th>petal_length</th>\n",
-       "        <th>petal_width</th>\n",
-       "        <th>class_name</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>5.1</td>\n",
-       "        <td>3.5</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>3.0</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>4.7</td>\n",
-       "        <td>3.2</td>\n",
-       "        <td>1.3</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>4.6</td>\n",
-       "        <td>3.1</td>\n",
-       "        <td>1.5</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>5.0</td>\n",
-       "        <td>3.6</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>5.4</td>\n",
-       "        <td>3.9</td>\n",
-       "        <td>1.7</td>\n",
-       "        <td>0.4</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>4.6</td>\n",
-       "        <td>3.4</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>0.3</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>5.0</td>\n",
-       "        <td>3.4</td>\n",
-       "        <td>1.5</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>4.4</td>\n",
-       "        <td>2.9</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>0.2</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>3.1</td>\n",
-       "        <td>1.5</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>7.0</td>\n",
-       "        <td>3.2</td>\n",
-       "        <td>4.7</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>6.4</td>\n",
-       "        <td>3.2</td>\n",
-       "        <td>4.5</td>\n",
-       "        <td>1.5</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>6.9</td>\n",
-       "        <td>3.1</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>1.5</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>5.5</td>\n",
-       "        <td>2.3</td>\n",
-       "        <td>4.0</td>\n",
-       "        <td>1.3</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>6.5</td>\n",
-       "        <td>2.8</td>\n",
-       "        <td>4.6</td>\n",
-       "        <td>1.5</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>5.7</td>\n",
-       "        <td>2.8</td>\n",
-       "        <td>4.5</td>\n",
-       "        <td>1.3</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>6.3</td>\n",
-       "        <td>3.3</td>\n",
-       "        <td>4.7</td>\n",
-       "        <td>1.6</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>2.4</td>\n",
-       "        <td>3.3</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>6.6</td>\n",
-       "        <td>2.9</td>\n",
-       "        <td>4.6</td>\n",
-       "        <td>1.3</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>5.2</td>\n",
-       "        <td>2.7</td>\n",
-       "        <td>3.9</td>\n",
-       "        <td>1.4</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>21</td>\n",
-       "        <td>6.3</td>\n",
-       "        <td>3.3</td>\n",
-       "        <td>6.0</td>\n",
-       "        <td>2.5</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>22</td>\n",
-       "        <td>5.8</td>\n",
-       "        <td>2.7</td>\n",
-       "        <td>5.1</td>\n",
-       "        <td>1.9</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>23</td>\n",
-       "        <td>7.1</td>\n",
-       "        <td>3.0</td>\n",
-       "        <td>5.9</td>\n",
-       "        <td>2.1</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>24</td>\n",
-       "        <td>6.3</td>\n",
-       "        <td>2.9</td>\n",
-       "        <td>5.6</td>\n",
-       "        <td>1.8</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>25</td>\n",
-       "        <td>6.5</td>\n",
-       "        <td>3.0</td>\n",
-       "        <td>5.8</td>\n",
-       "        <td>2.2</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>26</td>\n",
-       "        <td>7.6</td>\n",
-       "        <td>3.0</td>\n",
-       "        <td>6.6</td>\n",
-       "        <td>2.1</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>27</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>2.5</td>\n",
-       "        <td>4.5</td>\n",
-       "        <td>1.7</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>28</td>\n",
-       "        <td>7.3</td>\n",
-       "        <td>2.9</td>\n",
-       "        <td>6.3</td>\n",
-       "        <td>1.8</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>29</td>\n",
-       "        <td>6.7</td>\n",
-       "        <td>2.5</td>\n",
-       "        <td>5.8</td>\n",
-       "        <td>1.8</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>30</td>\n",
-       "        <td>7.2</td>\n",
-       "        <td>3.6</td>\n",
-       "        <td>6.1</td>\n",
-       "        <td>2.5</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 5.1, 3.5, 1.4, 0.2, u'Iris-setosa'),\n",
-       " (2, 4.9, 3.0, 1.4, 0.2, u'Iris-setosa'),\n",
-       " (3, 4.7, 3.2, 1.3, 0.2, u'Iris-setosa'),\n",
-       " (4, 4.6, 3.1, 1.5, 0.2, u'Iris-setosa'),\n",
-       " (5, 5.0, 3.6, 1.4, 0.2, u'Iris-setosa'),\n",
-       " (6, 5.4, 3.9, 1.7, 0.4, u'Iris-setosa'),\n",
-       " (7, 4.6, 3.4, 1.4, 0.3, u'Iris-setosa'),\n",
-       " (8, 5.0, 3.4, 1.5, 0.2, u'Iris-setosa'),\n",
-       " (9, 4.4, 2.9, 1.4, 0.2, u'Iris-setosa'),\n",
-       " (10, 4.9, 3.1, 1.5, 0.1, u'Iris-setosa'),\n",
-       " (11, 7.0, 3.2, 4.7, 1.4, u'Iris-versicolor'),\n",
-       " (12, 6.4, 3.2, 4.5, 1.5, u'Iris-versicolor'),\n",
-       " (13, 6.9, 3.1, 4.9, 1.5, u'Iris-versicolor'),\n",
-       " (14, 5.5, 2.3, 4.0, 1.3, u'Iris-versicolor'),\n",
-       " (15, 6.5, 2.8, 4.6, 1.5, u'Iris-versicolor'),\n",
-       " (16, 5.7, 2.8, 4.5, 1.3, u'Iris-versicolor'),\n",
-       " (17, 6.3, 3.3, 4.7, 1.6, u'Iris-versicolor'),\n",
-       " (18, 4.9, 2.4, 3.3, 1.0, u'Iris-versicolor'),\n",
-       " (19, 6.6, 2.9, 4.6, 1.3, u'Iris-versicolor'),\n",
-       " (20, 5.2, 2.7, 3.9, 1.4, u'Iris-versicolor'),\n",
-       " (21, 6.3, 3.3, 6.0, 2.5, u'Iris-virginica'),\n",
-       " (22, 5.8, 2.7, 5.1, 1.9, u'Iris-virginica'),\n",
-       " (23, 7.1, 3.0, 5.9, 2.1, u'Iris-virginica'),\n",
-       " (24, 6.3, 2.9, 5.6, 1.8, u'Iris-virginica'),\n",
-       " (25, 6.5, 3.0, 5.8, 2.2, u'Iris-virginica'),\n",
-       " (26, 7.6, 3.0, 6.6, 2.1, u'Iris-virginica'),\n",
-       " (27, 4.9, 2.5, 4.5, 1.7, u'Iris-virginica'),\n",
-       " (28, 7.3, 2.9, 6.3, 1.8, u'Iris-virginica'),\n",
-       " (29, 6.7, 2.5, 5.8, 1.8, u'Iris-virginica'),\n",
-       " (30, 7.2, 3.6, 6.1, 2.5, u'Iris-virginica')]"
-      ]
-     },
-     "execution_count": 51,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS iris;\n",
-    "\n",
-    "CREATE TABLE iris (id INT, sepal_length FLOAT, sepal_width FLOAT,\n",
-    "                    petal_length FLOAT, petal_width FLOAT, \n",
-    "                   class_name text);\n",
-    "                         \n",
-    "INSERT INTO iris VALUES \n",
-    "(1,5.1,3.5,1.4,0.2,'Iris-setosa'),\n",
-    "(2,4.9,3.0,1.4,0.2,'Iris-setosa'),\n",
-    "(3,4.7,3.2,1.3,0.2,'Iris-setosa'),\n",
-    "(4,4.6,3.1,1.5,0.2,'Iris-setosa'),\n",
-    "(5,5.0,3.6,1.4,0.2,'Iris-setosa'),\n",
-    "(6,5.4,3.9,1.7,0.4,'Iris-setosa'),\n",
-    "(7,4.6,3.4,1.4,0.3,'Iris-setosa'),\n",
-    "(8,5.0,3.4,1.5,0.2,'Iris-setosa'),\n",
-    "(9,4.4,2.9,1.4,0.2,'Iris-setosa'),\n",
-    "(10,4.9,3.1,1.5,0.1,'Iris-setosa'),\n",
-    "(11,7.0,3.2,4.7,1.4,'Iris-versicolor'),\n",
-    "(12,6.4,3.2,4.5,1.5,'Iris-versicolor'),\n",
-    "(13,6.9,3.1,4.9,1.5,'Iris-versicolor'),\n",
-    "(14,5.5,2.3,4.0,1.3,'Iris-versicolor'),\n",
-    "(15,6.5,2.8,4.6,1.5,'Iris-versicolor'),\n",
-    "(16,5.7,2.8,4.5,1.3,'Iris-versicolor'),\n",
-    "(17,6.3,3.3,4.7,1.6,'Iris-versicolor'),\n",
-    "(18,4.9,2.4,3.3,1.0,'Iris-versicolor'),\n",
-    "(19,6.6,2.9,4.6,1.3,'Iris-versicolor'),\n",
-    "(20,5.2,2.7,3.9,1.4,'Iris-versicolor'),\n",
-    "(21,6.3,3.3,6.0,2.5,'Iris-virginica'),\n",
-    "(22,5.8,2.7,5.1,1.9,'Iris-virginica'),\n",
-    "(23,7.1,3.0,5.9,2.1,'Iris-virginica'),\n",
-    "(24,6.3,2.9,5.6,1.8,'Iris-virginica'),\n",
-    "(25,6.5,3.0,5.8,2.2,'Iris-virginica'),\n",
-    "(26,7.6,3.0,6.6,2.1,'Iris-virginica'),\n",
-    "(27,4.9,2.5,4.5,1.7,'Iris-virginica'),\n",
-    "(28,7.3,2.9,6.3,1.8,'Iris-virginica'),\n",
-    "(29,6.7,2.5,5.8,1.8,'Iris-virginica'),\n",
-    "(30,7.2,3.6,6.1,2.5,'Iris-virginica');\n",
-    "\n",
-    "SELECT * FROM iris ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 3.  Get summary data \n",
-    "Basic summary data using all defaults."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 52,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>output_table</th>\n",
-       "        <th>row_count</th>\n",
-       "        <th>duration</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>iris_summary</td>\n",
-       "        <td>6</td>\n",
-       "        <td>0.0161118507385</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'iris_summary', 6, 0.0161118507385254)]"
-      ]
-     },
-     "execution_count": 52,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS iris_summary;\n",
-    "\n",
-    "SELECT * FROM madlib.summary( 'iris',            -- Source table\n",
-    "                              'iris_summary'     -- Output table\n",
-    "                            );"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 53,
-   "metadata": {
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "2 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>group_by</th>\n",
-       "        <th>group_by_value</th>\n",
-       "        <th>target_column</th>\n",
-       "        <th>column_number</th>\n",
-       "        <th>data_type</th>\n",
-       "        <th>row_count</th>\n",
-       "        <th>distinct_values</th>\n",
-       "        <th>missing_values</th>\n",
-       "        <th>blank_values</th>\n",
-       "        <th>fraction_missing</th>\n",
-       "        <th>fraction_blank</th>\n",
-       "        <th>mean</th>\n",
-       "        <th>variance</th>\n",
-       "        <th>min</th>\n",
-       "        <th>max</th>\n",
-       "        <th>quantile_array</th>\n",
-       "        <th>most_frequent_values</th>\n",
-       "        <th>mfv_frequencies</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>None</td>\n",
-       "        <td>None</td>\n",
-       "        <td>sepal_length</td>\n",
-       "        <td>2</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>30</td>\n",
-       "        <td>22</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>5.84333333333</td>\n",
-       "        <td>0.929436781609</td>\n",
-       "        <td>4.4</td>\n",
-       "        <td>7.6</td>\n",
-       "        <td>[5.057, 6.414]</td>\n",
-       "        <td>[u'4.9', u'6.3', u'5']</td>\n",
-       "        <td>[4L, 3L, 2L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>None</td>\n",
-       "        <td>None</td>\n",
-       "        <td>sepal_width</td>\n",
-       "        <td>3</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>30</td>\n",
-       "        <td>14</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>3.04</td>\n",
-       "        <td>0.139034482759</td>\n",
-       "        <td>2.3</td>\n",
-       "        <td>3.9</td>\n",
-       "        <td>[2.9, 3.2]</td>\n",
-       "        <td>[u'3', u'2.9', u'3.2']</td>\n",
-       "        <td>[4L, 4L, 3L]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(None, None, u'sepal_length', 2, u'float8', 30L, 22L, 0L, None, 0.0, None, 5.84333333333333, 0.9294367816092, 4.4, 7.6, [5.057, 6.414], [u'4.9', u'6.3', u'5'], [4L, 3L, 2L]),\n",
-       " (None, None, u'sepal_width', 3, u'float8', 30L, 14L, 0L, None, 0.0, None, 3.04, 0.13903448275862, 2.3, 3.9, [2.9, 3.2], [u'3', u'2.9', u'3.2'], [4L, 4L, 3L])]"
-      ]
-     },
-     "execution_count": 53,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM iris_summary;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 4. Grouping"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 45,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "8 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>group_by</th>\n",
-       "        <th>group_by_value</th>\n",
-       "        <th>target_column</th>\n",
-       "        <th>column_number</th>\n",
-       "        <th>data_type</th>\n",
-       "        <th>row_count</th>\n",
-       "        <th>distinct_values</th>\n",
-       "        <th>missing_values</th>\n",
-       "        <th>blank_values</th>\n",
-       "        <th>fraction_missing</th>\n",
-       "        <th>fraction_blank</th>\n",
-       "        <th>mean</th>\n",
-       "        <th>variance</th>\n",
-       "        <th>min</th>\n",
-       "        <th>max</th>\n",
-       "        <th>first_quartile</th>\n",
-       "        <th>median</th>\n",
-       "        <th>third_quartile</th>\n",
-       "        <th>most_frequent_values</th>\n",
-       "        <th>mfv_frequencies</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>class_name</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "        <td>sepal_length</td>\n",
-       "        <td>2</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>10</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>4.86</td>\n",
-       "        <td>0.0848888888889</td>\n",
-       "        <td>4.4</td>\n",
-       "        <td>5.4</td>\n",
-       "        <td>4.625</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>5.0</td>\n",
-       "        <td>[u'4.6', u'4.9', u'5', u'5.1', u'4.4', u'5.4', u'4.7']</td>\n",
-       "        <td>[2L, 2L, 2L, 1L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>class_name</td>\n",
-       "        <td>Iris-setosa</td>\n",
-       "        <td>sepal_width</td>\n",
-       "        <td>3</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>10</td>\n",
-       "        <td>8</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>3.31</td>\n",
-       "        <td>0.0943333333333</td>\n",
-       "        <td>2.9</td>\n",
-       "        <td>3.9</td>\n",
-       "        <td>3.1</td>\n",
-       "        <td>3.3</td>\n",
-       "        <td>3.475</td>\n",
-       "        <td>[u'3.4', u'3.1', u'3.2', u'3.6', u'3.9', u'3.5', u'2.9', u'3']</td>\n",
-       "        <td>[2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>class_name</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "        <td>sepal_length</td>\n",
-       "        <td>2</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>10</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>6.1</td>\n",
-       "        <td>0.528888888889</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>7.0</td>\n",
-       "        <td>5.55</td>\n",
-       "        <td>6.35</td>\n",
-       "        <td>6.575</td>\n",
-       "        <td>[u'7', u'6.4', u'6.9', u'5.5', u'6.5', u'5.7', u'6.3', u'4.9', u'6.6', u'5.2']</td>\n",
-       "        <td>[1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>class_name</td>\n",
-       "        <td>Iris-versicolor</td>\n",
-       "        <td>sepal_width</td>\n",
-       "        <td>3</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>10</td>\n",
-       "        <td>8</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>2.87</td>\n",
-       "        <td>0.115666666667</td>\n",
-       "        <td>2.3</td>\n",
-       "        <td>3.3</td>\n",
-       "        <td>2.725</td>\n",
-       "        <td>2.85</td>\n",
-       "        <td>3.175</td>\n",
-       "        <td>[u'2.8', u'3.2', u'2.3', u'3.3', u'2.4', u'2.9', u'2.7', u'3.1']</td>\n",
-       "        <td>[2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>class_name</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "        <td>sepal_length</td>\n",
-       "        <td>2</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>10</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>6.57</td>\n",
-       "        <td>0.646777777778</td>\n",
-       "        <td>4.9</td>\n",
-       "        <td>7.6</td>\n",
-       "        <td>6.3</td>\n",
-       "        <td>6.6</td>\n",
-       "        <td>7.175</td>\n",
-       "        <td>[u'6.3', u'5.8', u'7.1', u'6.5', u'7.6', u'4.9', u'7.3', u'6.7', u'7.2']</td>\n",
-       "        <td>[2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>class_name</td>\n",
-       "        <td>Iris-virginica</td>\n",
-       "        <td>sepal_width</td>\n",
-       "        <td>3</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>10</td>\n",
-       "        <td>6</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>2.94</td>\n",
-       "        <td>0.113777777778</td>\n",
-       "        <td>2.5</td>\n",
-       "        <td>3.6</td>\n",
-       "        <td>2.75</td>\n",
-       "        <td>2.95</td>\n",
-       "        <td>3.0</td>\n",
-       "        <td>[u'3', u'2.9', u'2.5', u'3.3', u'2.7', u'3.6']</td>\n",
-       "        <td>[3L, 2L, 2L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>None</td>\n",
-       "        <td>None</td>\n",
-       "        <td>sepal_length</td>\n",
-       "        <td>2</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>30</td>\n",
-       "        <td>22</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>5.84333333333</td>\n",
-       "        <td>0.929436781609</td>\n",
-       "        <td>4.4</td>\n",
-       "        <td>7.6</td>\n",
-       "        <td>4.925</td>\n",
-       "        <td>5.75</td>\n",
-       "        <td>6.575</td>\n",
-       "        <td>[u'4.9', u'6.3', u'6.5', u'4.6', u'5', u'6.9', u'5.4', u'4.4', u'7', u'6.4']</td>\n",
-       "        <td>[4L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>None</td>\n",
-       "        <td>None</td>\n",
-       "        <td>sepal_width</td>\n",
-       "        <td>3</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>30</td>\n",
-       "        <td>14</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>3.04</td>\n",
-       "        <td>0.139034482759</td>\n",
-       "        <td>2.3</td>\n",
-       "        <td>3.9</td>\n",
-       "        <td>2.825</td>\n",
-       "        <td>3.0</td>\n",
-       "        <td>3.275</td>\n",
-       "        <td>[u'2.9', u'3', u'3.1', u'3.2', u'3.6', u'3.3', u'2.8', u'2.7', u'2.5', u'3.4']</td>\n",
-       "        <td>[4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'class_name', u'Iris-setosa', u'sepal_length', 2, u'float8', 10L, 7L, 0L, None, 0.0, None, 4.86, 0.0848888888888976, 4.4, 5.4, 4.625, 4.9, 5.0, [u'4.6', u'4.9', u'5', u'5.1', u'4.4', u'5.4', u'4.7'], [2L, 2L, 2L, 1L, 1L, 1L, 1L]),\n",
-       " (u'class_name', u'Iris-setosa', u'sepal_width', 3, u'float8', 10L, 8L, 0L, None, 0.0, None, 3.31, 0.094333333333336, 2.9, 3.9, 3.1, 3.3, 3.475, [u'3.4', u'3.1', u'3.2', u'3.6', u'3.9', u'3.5', u'2.9', u'3'], [2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
-       " (u'class_name', u'Iris-versicolor', u'sepal_length', 2, u'float8', 10L, 10L, 0L, None, 0.0, None, 6.1, 0.528888888888893, 4.9, 7.0, 5.55, 6.35, 6.575, [u'7', u'6.4', u'6.9', u'5.5', u'6.5', u'5.7', u'6.3', u'4.9', u'6.6', u'5.2'], [1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
-       " (u'class_name', u'Iris-versicolor', u'sepal_width', 3, u'float8', 10L, 8L, 0L, None, 0.0, None, 2.87, 0.115666666666666, 2.3, 3.3, 2.725, 2.85, 3.175, [u'2.8', u'3.2', u'2.3', u'3.3', u'2.4', u'2.9', u'2.7', u'3.1'], [2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
-       " (u'class_name', u'Iris-virginica', u'sepal_length', 2, u'float8', 10L, 9L, 0L, None, 0.0, None, 6.57, 0.646777777777778, 4.9, 7.6, 6.3, 6.6, 7.175, [u'6.3', u'5.8', u'7.1', u'6.5', u'7.6', u'4.9', u'7.3', u'6.7', u'7.2'], [2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
-       " (u'class_name', u'Iris-virginica', u'sepal_width', 3, u'float8', 10L, 6L, 0L, None, 0.0, None, 2.94, 0.11377777777778, 2.5, 3.6, 2.75, 2.95, 3.0, [u'3', u'2.9', u'2.5', u'3.3', u'2.7', u'3.6'], [3L, 2L, 2L, 1L, 1L, 1L]),\n",
-       " (None, None, u'sepal_length', 2, u'float8', 30L, 22L, 0L, None, 0.0, None, 5.84333333333333, 0.9294367816092, 4.4, 7.6, 4.925, 5.75, 6.575, [u'4.9', u'6.3', u'6.5', u'4.6', u'5', u'6.9', u'5.4', u'4.4', u'7', u'6.4'], [4L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L]),\n",
-       " (None, None, u'sepal_width', 3, u'float8', 30L, 14L, 0L, None, 0.0, None, 3.04, 0.13903448275862, 2.3, 3.9, 2.825, 3.0, 3.275, [u'2.9', u'3', u'3.1', u'3.2', u'3.6', u'3.3', u'2.8', u'2.7', u'2.5', u'3.4'], [4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L])]"
-      ]
-     },
-     "execution_count": 45,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS iris_summary;\n",
-    "\n",
-    "SELECT * FROM madlib.summary( 'iris',                       -- Source table\n",
-    "                              'iris_summary',               -- Output table\n",
-    "                              'sepal_length, sepal_width',  -- Columns to summarize\n",
-    "                              'class_name'                  -- Grouping column\n",
-    "                            );\n",
-    "\n",
-    "SELECT * FROM iris_summary;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 5. Other parameters"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 50,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "2 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>group_by</th>\n",
-       "        <th>group_by_value</th>\n",
-       "        <th>target_column</th>\n",
-       "        <th>column_number</th>\n",
-       "        <th>data_type</th>\n",
-       "        <th>row_count</th>\n",
-       "        <th>distinct_values</th>\n",
-       "        <th>missing_values</th>\n",
-       "        <th>blank_values</th>\n",
-       "        <th>fraction_missing</th>\n",
-       "        <th>fraction_blank</th>\n",
-       "        <th>mean</th>\n",
-       "        <th>variance</th>\n",
-       "        <th>min</th>\n",
-       "        <th>max</th>\n",
-       "        <th>quantile_array</th>\n",
-       "        <th>most_frequent_values</th>\n",
-       "        <th>mfv_frequencies</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>None</td>\n",
-       "        <td>None</td>\n",
-       "        <td>sepal_length</td>\n",
-       "        <td>2</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>30</td>\n",
-       "        <td>22</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>5.84333333333</td>\n",
-       "        <td>0.929436781609</td>\n",
-       "        <td>4.4</td>\n",
-       "        <td>7.6</td>\n",
-       "        <td>[5.057, 6.414]</td>\n",
-       "        <td>[u'4.9', u'6.3', u'5']</td>\n",
-       "        <td>[4L, 3L, 2L]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>None</td>\n",
-       "        <td>None</td>\n",
-       "        <td>sepal_width</td>\n",
-       "        <td>3</td>\n",
-       "        <td>float8</td>\n",
-       "        <td>30</td>\n",
-       "        <td>14</td>\n",
-       "        <td>0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>None</td>\n",
-       "        <td>3.04</td>\n",
-       "        <td>0.139034482759</td>\n",
-       "        <td>2.3</td>\n",
-       "        <td>3.9</td>\n",
-       "        <td>[2.9, 3.2]</td>\n",
-       "        <td>[u'3', u'2.9', u'3.2']</td>\n",
-       "        <td>[4L, 4L, 3L]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(None, None, u'sepal_length', 2, u'float8', 30L, 22L, 0L, None, 0.0, None, 5.84333333333333, 0.9294367816092, 4.4, 7.6, [5.057, 6.414], [u'4.9', u'6.3', u'5'], [4L, 3L, 2L]),\n",
-       " (None, None, u'sepal_width', 3, u'float8', 30L, 14L, 0L, None, 0.0, None, 3.04, 0.13903448275862, 2.3, 3.9, [2.9, 3.2], [u'3', u'2.9', u'3.2'], [4L, 4L, 3L])]"
-      ]
-     },
-     "execution_count": 50,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS iris_summary;\n",
-    "\n",
-    "SELECT * FROM madlib.summary( 'iris',                       -- Source table\n",
-    "                              'iris_summary',               -- Output table\n",
-    "                              'sepal_length, sepal_width',  -- Columns to summarize\n",
-    "                               NULL,                        -- No grouping\n",
-    "                               TRUE,                        -- Get distinct values\n",
-    "                               FALSE,                       -- Dont get quartiles\n",
-    "                               ARRAY[0.33, 0.66],           -- Get ntiles\n",
-    "                               3,                           -- Number of MFV to compute\n",
-    "                               FALSE                        -- Get exact values\n",
-    "                            );\n",
-    "\n",
-    "SELECT * FROM iris_summary;"
-   ]
-  }
- ],
- "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.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}

http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Summary-v2.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Summary-v2.ipynb b/community-artifacts/Summary-v2.ipynb
new file mode 100644
index 0000000..f8c7a39
--- /dev/null
+++ b/community-artifacts/Summary-v2.ipynb
@@ -0,0 +1,1017 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: fmcquillan@madlib'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "%sql postgresql://fmcquillan@localhost:5432/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.13, git revision: unknown, cmake configuration time: Wed Dec 20 08:02:21 UTC 2017, build type: Release, build system: Darwin-17.3.0, C compiler: Clang, C++ compiler: Clang</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.13, git revision: unknown, cmake configuration time: Wed Dec 20 08:02:21 UTC 2017, build type: Release, build system: Darwin-17.3.0, C compiler: Clang, C++ compiler: Clang',)]"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1. On-line help"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "%sql SELECT * FROM madlib.summary();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2. Load data\n",
+    "Using part of the popular iris data set from https://archive.ics.uci.edu/ml/datasets/iris"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "30 rows affected.\n",
+      "30 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sepal_length</th>\n",
+       "        <th>sepal_width</th>\n",
+       "        <th>petal_length</th>\n",
+       "        <th>petal_width</th>\n",
+       "        <th>class_name</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>5.1</td>\n",
+       "        <td>3.5</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>4.7</td>\n",
+       "        <td>3.2</td>\n",
+       "        <td>1.3</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>4.6</td>\n",
+       "        <td>3.1</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>5.0</td>\n",
+       "        <td>3.6</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>5.4</td>\n",
+       "        <td>3.9</td>\n",
+       "        <td>1.7</td>\n",
+       "        <td>0.4</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>4.6</td>\n",
+       "        <td>3.4</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>0.3</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>5.0</td>\n",
+       "        <td>3.4</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>4.4</td>\n",
+       "        <td>2.9</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>3.1</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>7.0</td>\n",
+       "        <td>3.2</td>\n",
+       "        <td>4.7</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>6.4</td>\n",
+       "        <td>3.2</td>\n",
+       "        <td>4.5</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>6.9</td>\n",
+       "        <td>3.1</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>5.5</td>\n",
+       "        <td>2.3</td>\n",
+       "        <td>4.0</td>\n",
+       "        <td>1.3</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>6.5</td>\n",
+       "        <td>2.8</td>\n",
+       "        <td>4.6</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>5.7</td>\n",
+       "        <td>2.8</td>\n",
+       "        <td>4.5</td>\n",
+       "        <td>1.3</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>6.3</td>\n",
+       "        <td>3.3</td>\n",
+       "        <td>4.7</td>\n",
+       "        <td>1.6</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>2.4</td>\n",
+       "        <td>3.3</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>6.6</td>\n",
+       "        <td>2.9</td>\n",
+       "        <td>4.6</td>\n",
+       "        <td>1.3</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>5.2</td>\n",
+       "        <td>2.7</td>\n",
+       "        <td>3.9</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>6.3</td>\n",
+       "        <td>3.3</td>\n",
+       "        <td>6.0</td>\n",
+       "        <td>2.5</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>5.8</td>\n",
+       "        <td>2.7</td>\n",
+       "        <td>5.1</td>\n",
+       "        <td>1.9</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>7.1</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>5.9</td>\n",
+       "        <td>2.1</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>6.3</td>\n",
+       "        <td>2.9</td>\n",
+       "        <td>5.6</td>\n",
+       "        <td>1.8</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>6.5</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>5.8</td>\n",
+       "        <td>2.2</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>7.6</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>6.6</td>\n",
+       "        <td>2.1</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>27</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>2.5</td>\n",
+       "        <td>4.5</td>\n",
+       "        <td>1.7</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>28</td>\n",
+       "        <td>7.3</td>\n",
+       "        <td>2.9</td>\n",
+       "        <td>6.3</td>\n",
+       "        <td>1.8</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>29</td>\n",
+       "        <td>6.7</td>\n",
+       "        <td>2.5</td>\n",
+       "        <td>5.8</td>\n",
+       "        <td>1.8</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>30</td>\n",
+       "        <td>7.2</td>\n",
+       "        <td>3.6</td>\n",
+       "        <td>6.1</td>\n",
+       "        <td>2.5</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 5.1, 3.5, 1.4, 0.2, u'Iris-setosa'),\n",
+       " (2, 4.9, 3.0, 1.4, 0.2, u'Iris-setosa'),\n",
+       " (3, 4.7, 3.2, 1.3, 0.2, u'Iris-setosa'),\n",
+       " (4, 4.6, 3.1, 1.5, 0.2, u'Iris-setosa'),\n",
+       " (5, 5.0, 3.6, 1.4, 0.2, u'Iris-setosa'),\n",
+       " (6, 5.4, 3.9, 1.7, 0.4, u'Iris-setosa'),\n",
+       " (7, 4.6, 3.4, 1.4, 0.3, u'Iris-setosa'),\n",
+       " (8, 5.0, 3.4, 1.5, 0.2, u'Iris-setosa'),\n",
+       " (9, 4.4, 2.9, 1.4, 0.2, u'Iris-setosa'),\n",
+       " (10, 4.9, 3.1, 1.5, 0.1, u'Iris-setosa'),\n",
+       " (11, 7.0, 3.2, 4.7, 1.4, u'Iris-versicolor'),\n",
+       " (12, 6.4, 3.2, 4.5, 1.5, u'Iris-versicolor'),\n",
+       " (13, 6.9, 3.1, 4.9, 1.5, u'Iris-versicolor'),\n",
+       " (14, 5.5, 2.3, 4.0, 1.3, u'Iris-versicolor'),\n",
+       " (15, 6.5, 2.8, 4.6, 1.5, u'Iris-versicolor'),\n",
+       " (16, 5.7, 2.8, 4.5, 1.3, u'Iris-versicolor'),\n",
+       " (17, 6.3, 3.3, 4.7, 1.6, u'Iris-versicolor'),\n",
+       " (18, 4.9, 2.4, 3.3, 1.0, u'Iris-versicolor'),\n",
+       " (19, 6.6, 2.9, 4.6, 1.3, u'Iris-versicolor'),\n",
+       " (20, 5.2, 2.7, 3.9, 1.4, u'Iris-versicolor'),\n",
+       " (21, 6.3, 3.3, 6.0, 2.5, u'Iris-virginica'),\n",
+       " (22, 5.8, 2.7, 5.1, 1.9, u'Iris-virginica'),\n",
+       " (23, 7.1, 3.0, 5.9, 2.1, u'Iris-virginica'),\n",
+       " (24, 6.3, 2.9, 5.6, 1.8, u'Iris-virginica'),\n",
+       " (25, 6.5, 3.0, 5.8, 2.2, u'Iris-virginica'),\n",
+       " (26, 7.6, 3.0, 6.6, 2.1, u'Iris-virginica'),\n",
+       " (27, 4.9, 2.5, 4.5, 1.7, u'Iris-virginica'),\n",
+       " (28, 7.3, 2.9, 6.3, 1.8, u'Iris-virginica'),\n",
+       " (29, 6.7, 2.5, 5.8, 1.8, u'Iris-virginica'),\n",
+       " (30, 7.2, 3.6, 6.1, 2.5, u'Iris-virginica')]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris;\n",
+    "\n",
+    "CREATE TABLE iris (id INT, sepal_length FLOAT, sepal_width FLOAT,\n",
+    "                    petal_length FLOAT, petal_width FLOAT, \n",
+    "                   class_name text);\n",
+    "                         \n",
+    "INSERT INTO iris VALUES \n",
+    "(1,5.1,3.5,1.4,0.2,'Iris-setosa'),\n",
+    "(2,4.9,3.0,1.4,0.2,'Iris-setosa'),\n",
+    "(3,4.7,3.2,1.3,0.2,'Iris-setosa'),\n",
+    "(4,4.6,3.1,1.5,0.2,'Iris-setosa'),\n",
+    "(5,5.0,3.6,1.4,0.2,'Iris-setosa'),\n",
+    "(6,5.4,3.9,1.7,0.4,'Iris-setosa'),\n",
+    "(7,4.6,3.4,1.4,0.3,'Iris-setosa'),\n",
+    "(8,5.0,3.4,1.5,0.2,'Iris-setosa'),\n",
+    "(9,4.4,2.9,1.4,0.2,'Iris-setosa'),\n",
+    "(10,4.9,3.1,1.5,0.1,'Iris-setosa'),\n",
+    "(11,7.0,3.2,4.7,1.4,'Iris-versicolor'),\n",
+    "(12,6.4,3.2,4.5,1.5,'Iris-versicolor'),\n",
+    "(13,6.9,3.1,4.9,1.5,'Iris-versicolor'),\n",
+    "(14,5.5,2.3,4.0,1.3,'Iris-versicolor'),\n",
+    "(15,6.5,2.8,4.6,1.5,'Iris-versicolor'),\n",
+    "(16,5.7,2.8,4.5,1.3,'Iris-versicolor'),\n",
+    "(17,6.3,3.3,4.7,1.6,'Iris-versicolor'),\n",
+    "(18,4.9,2.4,3.3,1.0,'Iris-versicolor'),\n",
+    "(19,6.6,2.9,4.6,1.3,'Iris-versicolor'),\n",
+    "(20,5.2,2.7,3.9,1.4,'Iris-versicolor'),\n",
+    "(21,6.3,3.3,6.0,2.5,'Iris-virginica'),\n",
+    "(22,5.8,2.7,5.1,1.9,'Iris-virginica'),\n",
+    "(23,7.1,3.0,5.9,2.1,'Iris-virginica'),\n",
+    "(24,6.3,2.9,5.6,1.8,'Iris-virginica'),\n",
+    "(25,6.5,3.0,5.8,2.2,'Iris-virginica'),\n",
+    "(26,7.6,3.0,6.6,2.1,'Iris-virginica'),\n",
+    "(27,4.9,2.5,4.5,1.7,'Iris-virginica'),\n",
+    "(28,7.3,2.9,6.3,1.8,'Iris-virginica'),\n",
+    "(29,6.7,2.5,5.8,1.8,'Iris-virginica'),\n",
+    "(30,7.2,3.6,6.1,2.5,'Iris-virginica');\n",
+    "\n",
+    "SELECT * FROM iris ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3.  Get summary data \n",
+    "Basic summary data using all defaults."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>output_table</th>\n",
+       "        <th>row_count</th>\n",
+       "        <th>duration</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>iris_summary</td>\n",
+       "        <td>6</td>\n",
+       "        <td>0.0278480052948</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'iris_summary', 6, 0.0278480052947998)]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_summary;\n",
+    "\n",
+    "SELECT * FROM madlib.summary( 'iris',            -- Source table\n",
+    "                              'iris_summary'     -- Output table\n",
+    "                            );"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>group_by</th>\n",
+       "        <th>group_by_value</th>\n",
+       "        <th>target_column</th>\n",
+       "        <th>column_number</th>\n",
+       "        <th>data_type</th>\n",
+       "        <th>row_count</th>\n",
+       "        <th>distinct_values</th>\n",
+       "        <th>missing_values</th>\n",
+       "        <th>blank_values</th>\n",
+       "        <th>fraction_missing</th>\n",
+       "        <th>fraction_blank</th>\n",
+       "        <th>mean</th>\n",
+       "        <th>variance</th>\n",
+       "        <th>min</th>\n",
+       "        <th>max</th>\n",
+       "        <th>first_quartile</th>\n",
+       "        <th>median</th>\n",
+       "        <th>third_quartile</th>\n",
+       "        <th>most_frequent_values</th>\n",
+       "        <th>mfv_frequencies</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>id</td>\n",
+       "        <td>1</td>\n",
+       "        <td>int4</td>\n",
+       "        <td>30</td>\n",
+       "        <td>30</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>15.5</td>\n",
+       "        <td>77.5</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>30.0</td>\n",
+       "        <td>8.25</td>\n",
+       "        <td>15.5</td>\n",
+       "        <td>22.75</td>\n",
+       "        <td>[u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'10']</td>\n",
+       "        <td>[1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>sepal_length</td>\n",
+       "        <td>2</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>30</td>\n",
+       "        <td>22</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>5.84333333333</td>\n",
+       "        <td>0.929436781609</td>\n",
+       "        <td>4.4</td>\n",
+       "        <td>7.6</td>\n",
+       "        <td>4.925</td>\n",
+       "        <td>5.75</td>\n",
+       "        <td>6.575</td>\n",
+       "        <td>[u'4.9', u'6.3', u'6.5', u'4.6', u'5', u'6.9', u'5.4', u'4.4', u'7', u'6.4']</td>\n",
+       "        <td>[4L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>sepal_width</td>\n",
+       "        <td>3</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>30</td>\n",
+       "        <td>14</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>3.04</td>\n",
+       "        <td>0.139034482759</td>\n",
+       "        <td>2.3</td>\n",
+       "        <td>3.9</td>\n",
+       "        <td>2.825</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>3.275</td>\n",
+       "        <td>[u'2.9', u'3', u'3.1', u'3.2', u'3.6', u'3.3', u'2.8', u'2.7', u'2.5', u'3.4']</td>\n",
+       "        <td>[4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>petal_length</td>\n",
+       "        <td>4</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>30</td>\n",
+       "        <td>19</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>3.86333333333</td>\n",
+       "        <td>3.53964367816</td>\n",
+       "        <td>1.3</td>\n",
+       "        <td>6.6</td>\n",
+       "        <td>1.5</td>\n",
+       "        <td>4.5</td>\n",
+       "        <td>5.475</td>\n",
+       "        <td>[u'1.4', u'1.5', u'4.5', u'5.8', u'4.6', u'4.7', u'3.3', u'4.9', u'1.7', u'4']</td>\n",
+       "        <td>[5L, 3L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>petal_width</td>\n",
+       "        <td>5</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>30</td>\n",
+       "        <td>15</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>1.21333333333</td>\n",
+       "        <td>0.622574712644</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>2.5</td>\n",
+       "        <td>0.225</td>\n",
+       "        <td>1.4</td>\n",
+       "        <td>1.8</td>\n",
+       "        <td>[u'0.2', u'1.8', u'1.5', u'1.3', u'1.4', u'2.1', u'2.5', u'1.6', u'1', u'0.1']</td>\n",
+       "        <td>[7L, 3L, 3L, 3L, 2L, 2L, 2L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>class_name</td>\n",
+       "        <td>6</td>\n",
+       "        <td>text</td>\n",
+       "        <td>30</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>11.0</td>\n",
+       "        <td>15.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>[u'Iris-setosa', u'Iris-versicolor', u'Iris-virginica']</td>\n",
+       "        <td>[10L, 10L, 10L]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(None, None, u'id', 1, u'int4', 30L, 30L, 0L, None, 0.0, None, 15.5, 77.5, 1.0, 30.0, 8.25, 15.5, 22.75, [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'10'], [1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (None, None, u'sepal_length', 2, u'float8', 30L, 22L, 0L, None, 0.0, None, 5.84333333333333, 0.9294367816092, 4.4, 7.6, 4.925, 5.75, 6.575, [u'4.9', u'6.3', u'6.5', u'4.6', u'5', u'6.9', u'5.4', u'4.4', u'7', u'6.4'], [4L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (None, None, u'sepal_width', 3, u'float8', 30L, 14L, 0L, None, 0.0, None, 3.04, 0.13903448275862, 2.3, 3.9, 2.825, 3.0, 3.275, [u'2.9', u'3', u'3.1', u'3.2', u'3.6', u'3.3', u'2.8', u'2.7', u'2.5', u'3.4'], [4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L]),\n",
+       " (None, None, u'petal_length', 4, u'float8', 30L, 19L, 0L, None, 0.0, None, 3.86333333333333, 3.53964367816093, 1.3, 6.6, 1.5, 4.5, 5.475, [u'1.4', u'1.5', u'4.5', u'5.8', u'4.6', u'4.7', u'3.3', u'4.9', u'1.7', u'4'], [5L, 3L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L]),\n",
+       " (None, None, u'petal_width', 5, u'float8', 30L, 15L, 0L, None, 0.0, None, 1.21333333333333, 0.622574712643679, 0.1, 2.5, 0.225, 1.4, 1.8, [u'0.2', u'1.8', u'1.5', u'1.3', u'1.4', u'2.1', u'2.5', u'1.6', u'1', u'0.1'], [7L, 3L, 3L, 3L, 2L, 2L, 2L, 1L, 1L, 1L]),\n",
+       " (None, None, u'class_name', 6, u'text', 30L, 3L, 0L, 0L, 0.0, 0.0, None, None, 11.0, 15.0, None, None, None, [u'Iris-setosa', u'Iris-versicolor', u'Iris-virginica'], [10L, 10L, 10L])]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. Grouping"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "8 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>group_by</th>\n",
+       "        <th>group_by_value</th>\n",
+       "        <th>target_column</th>\n",
+       "        <th>column_number</th>\n",
+       "        <th>data_type</th>\n",
+       "        <th>row_count</th>\n",
+       "        <th>distinct_values</th>\n",
+       "        <th>missing_values</th>\n",
+       "        <th>blank_values</th>\n",
+       "        <th>fraction_missing</th>\n",
+       "        <th>fraction_blank</th>\n",
+       "        <th>mean</th>\n",
+       "        <th>variance</th>\n",
+       "        <th>min</th>\n",
+       "        <th>max</th>\n",
+       "        <th>first_quartile</th>\n",
+       "        <th>median</th>\n",
+       "        <th>third_quartile</th>\n",
+       "        <th>most_frequent_values</th>\n",
+       "        <th>mfv_frequencies</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>class_name</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "        <td>sepal_length</td>\n",
+       "        <td>2</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>10</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>4.86</td>\n",
+       "        <td>0.0848888888889</td>\n",
+       "        <td>4.4</td>\n",
+       "        <td>5.4</td>\n",
+       "        <td>4.625</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>5.0</td>\n",
+       "        <td>[u'4.6', u'4.9', u'5', u'5.1', u'4.4', u'5.4', u'4.7']</td>\n",
+       "        <td>[2L, 2L, 2L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>class_name</td>\n",
+       "        <td>Iris-setosa</td>\n",
+       "        <td>sepal_width</td>\n",
+       "        <td>3</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>10</td>\n",
+       "        <td>8</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>3.31</td>\n",
+       "        <td>0.0943333333333</td>\n",
+       "        <td>2.9</td>\n",
+       "        <td>3.9</td>\n",
+       "        <td>3.1</td>\n",
+       "        <td>3.3</td>\n",
+       "        <td>3.475</td>\n",
+       "        <td>[u'3.4', u'3.1', u'3.2', u'3.6', u'3.9', u'3.5', u'2.9', u'3']</td>\n",
+       "        <td>[2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>class_name</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "        <td>sepal_length</td>\n",
+       "        <td>2</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>10</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>6.1</td>\n",
+       "        <td>0.528888888889</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>7.0</td>\n",
+       "        <td>5.55</td>\n",
+       "        <td>6.35</td>\n",
+       "        <td>6.575</td>\n",
+       "        <td>[u'7', u'6.4', u'6.9', u'5.5', u'6.5', u'5.7', u'6.3', u'4.9', u'6.6', u'5.2']</td>\n",
+       "        <td>[1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>class_name</td>\n",
+       "        <td>Iris-versicolor</td>\n",
+       "        <td>sepal_width</td>\n",
+       "        <td>3</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>10</td>\n",
+       "        <td>8</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>2.87</td>\n",
+       "        <td>0.115666666667</td>\n",
+       "        <td>2.3</td>\n",
+       "        <td>3.3</td>\n",
+       "        <td>2.725</td>\n",
+       "        <td>2.85</td>\n",
+       "        <td>3.175</td>\n",
+       "        <td>[u'2.8', u'3.2', u'2.3', u'3.3', u'2.4', u'2.9', u'2.7', u'3.1']</td>\n",
+       "        <td>[2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>class_name</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "        <td>sepal_length</td>\n",
+       "        <td>2</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>10</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>6.57</td>\n",
+       "        <td>0.646777777778</td>\n",
+       "        <td>4.9</td>\n",
+       "        <td>7.6</td>\n",
+       "        <td>6.3</td>\n",
+       "        <td>6.6</td>\n",
+       "        <td>7.175</td>\n",
+       "        <td>[u'6.3', u'5.8', u'7.1', u'6.5', u'7.6', u'4.9', u'7.3', u'6.7', u'7.2']</td>\n",
+       "        <td>[2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>class_name</td>\n",
+       "        <td>Iris-virginica</td>\n",
+       "        <td>sepal_width</td>\n",
+       "        <td>3</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>2.94</td>\n",
+       "        <td>0.113777777778</td>\n",
+       "        <td>2.5</td>\n",
+       "        <td>3.6</td>\n",
+       "        <td>2.75</td>\n",
+       "        <td>2.95</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>[u'3', u'2.9', u'2.5', u'3.3', u'2.7', u'3.6']</td>\n",
+       "        <td>[3L, 2L, 2L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>sepal_length</td>\n",
+       "        <td>2</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>30</td>\n",
+       "        <td>22</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>5.84333333333</td>\n",
+       "        <td>0.929436781609</td>\n",
+       "        <td>4.4</td>\n",
+       "        <td>7.6</td>\n",
+       "        <td>4.925</td>\n",
+       "        <td>5.75</td>\n",
+       "        <td>6.575</td>\n",
+       "        <td>[u'4.9', u'6.3', u'6.5', u'4.6', u'5', u'6.9', u'5.4', u'4.4', u'7', u'6.4']</td>\n",
+       "        <td>[4L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "        <td>sepal_width</td>\n",
+       "        <td>3</td>\n",
+       "        <td>float8</td>\n",
+       "        <td>30</td>\n",
+       "        <td>14</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>None</td>\n",
+       "        <td>3.04</td>\n",
+       "        <td>0.139034482759</td>\n",
+       "        <td>2.3</td>\n",
+       "        <td>3.9</td>\n",
+       "        <td>2.825</td>\n",
+       "        <td>3.0</td>\n",
+       "        <td>3.275</td>\n",
+       "        <td>[u'2.9', u'3', u'3.1', u'3.2', u'3.6', u'3.3', u'2.8', u'2.7', u'2.5', u'3.4']</td>\n",
+       "        <td>[4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'class_name', u'Iris-setosa', u'sepal_length', 2, u'float8', 10L, 7L, 0L, None, 0.0, None, 4.86, 0.0848888888888976, 4.4, 5.4, 4.625, 4.9, 5.0, [u'4.6', u'4.9', u'5', u'5.1', u'4.4', u'5.4', u'4.7'], [2L, 2L, 2L, 1L, 1L, 1L, 1L]),\n",
+       " (u'class_name', u'Iris-setosa', u'sepal_width', 3, u'float8', 10L, 8L, 0L, None, 0.0, None, 3.31, 0.094333333333336, 2.9, 3.9, 3.1, 3.3, 3.475, [u'3.4', u'3.1', u'3.2', u'3.6', u'3.9', u'3.5', u'2.9', u'3'], [2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (u'class_name', u'Iris-versicolor', u'sepal_length', 2, u'float8', 10L, 10L, 0L, None, 0.0, None, 6.1, 0.528888888888893, 4.9, 7.0, 5.55, 6.35, 6.575, [u'7', u'6.4', u'6.9', u'5.5', u'6.5', u'5.7', u'6.3', u'4.9', u'6.6', u'5.2'], [1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (u'class_name', u'Iris-versicolor', u'sepal_width', 3, u'float8', 10L, 8L, 0L, None, 0.0, None, 2.87, 0.115666666666666, 2.3, 3.3, 2.725, 2.85, 3.175, [u'2.8', u'3.2', u'2.3', u'3.3', u'2.4', u'2.9', u'2.7', u'3.1'], [2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (u'class_name', u'Iris-virginica', u'sepal_length', 2, u'float8', 10L, 9L, 0L, None, 0.0, None, 6.57, 0.646777777777778, 4.9, 7.6, 6.3, 6.6, 7.175, [u'6.3', u'5.8', u'7.1', u'6.5', u'7.6', u'4.9', u'7.3', u'6.7', u'7.2'], [2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (u'class_name', u'Iris-virginica', u'sepal_width', 3, u'float8', 10L, 6L, 0L, None, 0.0, None, 2.94, 0.11377777777778, 2.5, 3.6, 2.75, 2.95, 3.0, [u'3', u'2.9', u'2.5', u'3.3', u'2.7', u'3.6'], [3L, 2L, 2L, 1L, 1L, 1L]),\n",
+       " (None, None, u'sepal_length', 2, u'float8', 30L, 22L, 0L, None, 0.0, None, 5.84333333333333, 0.9294367816092, 4.4, 7.6, 4.925, 5.75, 6.575, [u'4.9', u'6.3', u'6.5', u'4.6', u'5', u'6.9', u'5.4', u'4.4', u'7', u'6.4'], [4L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L]),\n",
+       " (None, None, u'sepal_width', 3, u'float8', 30L, 14L, 0L, None, 0.0, None, 3.04, 0.13903448275862, 2.3, 3.9, 2.825, 3.0, 3.275, [u'2.9', u'3', u'3.1', u'3.2', u'3.6', u'3.3', u'2.8', u'2.7', u'2.5', u'3.4'], [4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L])]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_summary;\n",
+    "\n",
+    "SELECT * FROM madlib.summary( 'iris',                       -- Source table\n",
+    "                              'iris_summary',               -- Output table\n",
+    "                              'sepal_length, sepal_width',  -- Columns to summarize\n",
+    "                              'class_name'                  -- Grouping column\n",
+    "                            );\n",
+    "\n",
+    "SELECT * FROM iris_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5. Other parameters"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_summary;\n",
+    "\n",
+    "SELECT * FROM madlib.summary( 'iris',                       -- Source table\n",
+    "                              'iris_summary',               -- Output table\n",
+    "                              'sepal_length, sepal_width',  -- Columns to summarize\n",
+    "                               NULL,                        -- No grouping\n",
+    "                               TRUE,                        -- Get distinct values\n",
+    "                               FALSE,                       -- Dont get quartiles\n",
+    "                               ARRAY[0.33, 0.66],           -- Get ntiles\n",
+    "                               3,                           -- Number of MFV to compute\n",
+    "                               FALSE                        -- Get exact values\n",
+    "                            );\n",
+    "\n",
+    "SELECT * FROM iris_summary;"
+   ]
+  }
+ ],
+ "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}


[06/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Random-forest-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Random-forest-v1.ipynb b/community-artifacts/Random-forest-v1.ipynb
new file mode 100644
index 0000000..bac8363
--- /dev/null
+++ b/community-artifacts/Random-forest-v1.ipynb
@@ -0,0 +1,2899 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Random forest\n",
+    "\n",
+    "Random forests build an ensemble of classifiers, each of which is a tree model constructed using bootstrapped samples from the input data. The results of these models are then combined to yield a single prediction, which, at the expense of some loss in interpretation, have been found to be highly accurate.\n",
+    "\n",
+    "Please also refer to the decision tree user documentation for information relevant to the implementation of random forests in MADlib."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 72,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The sql extension is already loaded. To reload it, use:\n",
+      "  %reload_ext sql\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 73,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 73,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 75,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-40-ga1360f3, cmake configuration time: Wed Mar 28 18:16:08 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-40-ga1360f3, cmake configuration time: Wed Mar 28 18:16:08 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 75,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Random forest classification examples"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1. Load data\n",
+    "Data set related to whether to play golf or not."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 76,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "14 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>OUTLOOK</th>\n",
+       "        <th>temperature</th>\n",
+       "        <th>humidity</th>\n",
+       "        <th>Temp_Humidity</th>\n",
+       "        <th>clouds_airquality</th>\n",
+       "        <th>windy</th>\n",
+       "        <th>class</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>85.0</td>\n",
+       "        <td>85.0</td>\n",
+       "        <td>[85.0, 85.0]</td>\n",
+       "        <td>[u'none', u'unhealthy']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>90.0</td>\n",
+       "        <td>[80.0, 90.0]</td>\n",
+       "        <td>[u'none', u'moderate']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>83.0</td>\n",
+       "        <td>78.0</td>\n",
+       "        <td>[83.0, 78.0]</td>\n",
+       "        <td>[u'low', u'moderate']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>96.0</td>\n",
+       "        <td>[70.0, 96.0]</td>\n",
+       "        <td>[u'low', u'moderate']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>68.0</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>[68.0, 80.0]</td>\n",
+       "        <td>[u'medium', u'good']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>65.0</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>[65.0, 70.0]</td>\n",
+       "        <td>[u'low', u'unhealthy']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>64.0</td>\n",
+       "        <td>65.0</td>\n",
+       "        <td>[64.0, 65.0]</td>\n",
+       "        <td>[u'medium', u'moderate']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>72.0</td>\n",
+       "        <td>95.0</td>\n",
+       "        <td>[72.0, 95.0]</td>\n",
+       "        <td>[u'high', u'unhealthy']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>69.0</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>[69.0, 70.0]</td>\n",
+       "        <td>[u'high', u'good']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>75.0</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>[75.0, 80.0]</td>\n",
+       "        <td>[u'medium', u'good']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>75.0</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>[75.0, 70.0]</td>\n",
+       "        <td>[u'none', u'good']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>72.0</td>\n",
+       "        <td>90.0</td>\n",
+       "        <td>[72.0, 90.0]</td>\n",
+       "        <td>[u'medium', u'moderate']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>81.0</td>\n",
+       "        <td>75.0</td>\n",
+       "        <td>[81.0, 75.0]</td>\n",
+       "        <td>[u'medium', u'moderate']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>71.0</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>[71.0, 80.0]</td>\n",
+       "        <td>[u'low', u'unhealthy']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u'sunny', 85.0, 85.0, [85.0, 85.0], [u'none', u'unhealthy'], False, u\"Don't Play\"),\n",
+       " (2, u'sunny', 80.0, 90.0, [80.0, 90.0], [u'none', u'moderate'], True, u\"Don't Play\"),\n",
+       " (3, u'overcast', 83.0, 78.0, [83.0, 78.0], [u'low', u'moderate'], False, u'Play'),\n",
+       " (4, u'rain', 70.0, 96.0, [70.0, 96.0], [u'low', u'moderate'], False, u'Play'),\n",
+       " (5, u'rain', 68.0, 80.0, [68.0, 80.0], [u'medium', u'good'], False, u'Play'),\n",
+       " (6, u'rain', 65.0, 70.0, [65.0, 70.0], [u'low', u'unhealthy'], True, u\"Don't Play\"),\n",
+       " (7, u'overcast', 64.0, 65.0, [64.0, 65.0], [u'medium', u'moderate'], True, u'Play'),\n",
+       " (8, u'sunny', 72.0, 95.0, [72.0, 95.0], [u'high', u'unhealthy'], False, u\"Don't Play\"),\n",
+       " (9, u'sunny', 69.0, 70.0, [69.0, 70.0], [u'high', u'good'], False, u'Play'),\n",
+       " (10, u'rain', 75.0, 80.0, [75.0, 80.0], [u'medium', u'good'], False, u'Play'),\n",
+       " (11, u'sunny', 75.0, 70.0, [75.0, 70.0], [u'none', u'good'], True, u'Play'),\n",
+       " (12, u'overcast', 72.0, 90.0, [72.0, 90.0], [u'medium', u'moderate'], True, u'Play'),\n",
+       " (13, u'overcast', 81.0, 75.0, [81.0, 75.0], [u'medium', u'moderate'], False, u'Play'),\n",
+       " (14, u'rain', 71.0, 80.0, [71.0, 80.0], [u'low', u'unhealthy'], True, u\"Don't Play\")]"
+      ]
+     },
+     "execution_count": 76,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS rf_golf CASCADE;\n",
+    "\n",
+    "CREATE TABLE rf_golf (\n",
+    "    id integer NOT NULL,\n",
+    "    \"OUTLOOK\" text,\n",
+    "    temperature double precision,\n",
+    "    humidity double precision,\n",
+    "    \"Temp_Humidity\" double precision[],\n",
+    "    clouds_airquality text[],\n",
+    "    windy boolean,\n",
+    "    class text\n",
+    ");\n",
+    "\n",
+    "INSERT INTO rf_golf VALUES\n",
+    "(1,'sunny', 85, 85, ARRAY[85, 85],ARRAY['none', 'unhealthy'], 'false','Don''t Play'),\n",
+    "(2, 'sunny', 80, 90, ARRAY[80, 90], ARRAY['none', 'moderate'], 'true', 'Don''t Play'),\n",
+    "(3, 'overcast', 83, 78, ARRAY[83, 78], ARRAY['low', 'moderate'], 'false', 'Play'),\n",
+    "(4, 'rain', 70, 96, ARRAY[70, 96], ARRAY['low', 'moderate'], 'false', 'Play'),\n",
+    "(5, 'rain', 68, 80, ARRAY[68, 80], ARRAY['medium', 'good'], 'false', 'Play'),\n",
+    "(6, 'rain', 65, 70, ARRAY[65, 70], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play'),\n",
+    "(7, 'overcast', 64, 65, ARRAY[64, 65], ARRAY['medium', 'moderate'], 'true', 'Play'),\n",
+    "(8, 'sunny', 72, 95, ARRAY[72, 95], ARRAY['high', 'unhealthy'], 'false', 'Don''t Play'),\n",
+    "(9, 'sunny', 69, 70, ARRAY[69, 70], ARRAY['high', 'good'], 'false', 'Play'),\n",
+    "(10, 'rain', 75, 80, ARRAY[75, 80], ARRAY['medium', 'good'], 'false', 'Play'),\n",
+    "(11, 'sunny', 75, 70, ARRAY[75, 70], ARRAY['none', 'good'], 'true', 'Play'),\n",
+    "(12, 'overcast', 72, 90, ARRAY[72, 90], ARRAY['medium', 'moderate'], 'true', 'Play'),\n",
+    "(13, 'overcast', 81, 75, ARRAY[81, 75], ARRAY['medium', 'moderate'], 'false', 'Play'),\n",
+    "(14, 'rain', 71, 80, ARRAY[71, 80], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play');\n",
+    "\n",
+    "SELECT * FROM rf_golf ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Train random forest\n",
+    "Train random forest then view the summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 77,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>method</th>\n",
+       "        <th>is_classification</th>\n",
+       "        <th>source_table</th>\n",
+       "        <th>model_table</th>\n",
+       "        <th>id_col_name</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varnames</th>\n",
+       "        <th>cat_features</th>\n",
+       "        <th>con_features</th>\n",
+       "        <th>grouping_cols</th>\n",
+       "        <th>num_trees</th>\n",
+       "        <th>num_random_features</th>\n",
+       "        <th>max_tree_depth</th>\n",
+       "        <th>min_split</th>\n",
+       "        <th>min_bucket</th>\n",
+       "        <th>num_splits</th>\n",
+       "        <th>verbose</th>\n",
+       "        <th>importance</th>\n",
+       "        <th>num_permutations</th>\n",
+       "        <th>num_all_groups</th>\n",
+       "        <th>num_failed_groups</th>\n",
+       "        <th>total_rows_processed</th>\n",
+       "        <th>total_rows_skipped</th>\n",
+       "        <th>dependent_var_levels</th>\n",
+       "        <th>dependent_var_type</th>\n",
+       "        <th>independent_var_types</th>\n",
+       "        <th>null_proxy</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>forest_train</td>\n",
+       "        <td>True</td>\n",
+       "        <td>rf_golf</td>\n",
+       "        <td>train_output</td>\n",
+       "        <td>id</td>\n",
+       "        <td>class</td>\n",
+       "        <td>\"OUTLOOK\",windy,temperature,humidity</td>\n",
+       "        <td>\"OUTLOOK\",windy</td>\n",
+       "        <td>temperature,humidity</td>\n",
+       "        <td>None</td>\n",
+       "        <td>20</td>\n",
+       "        <td>2</td>\n",
+       "        <td>8</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>10</td>\n",
+       "        <td>False</td>\n",
+       "        <td>True</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>14</td>\n",
+       "        <td>0</td>\n",
+       "        <td>\"Don't Play\",\"Play\"</td>\n",
+       "        <td>text</td>\n",
+       "        <td>text, boolean, double precision, double precision</td>\n",
+       "        <td>None</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'forest_train', True, u'rf_golf', u'train_output', u'id', u'class', u'\"OUTLOOK\",windy,temperature,humidity', u'\"OUTLOOK\",windy', u'temperature,humidity', None, 20, 2, 8, 3, 1, 10, False, True, 1, 1, 0, 14, 0, u'\"Don\\'t Play\",\"Play\"', u'text', u'text, boolean, double precision, double precision', u'None')]"
+      ]
+     },
+     "execution_count": 77,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS train_output, train_output_group, train_output_summary;\n",
+    "\n",
+    "SELECT madlib.forest_train('rf_golf',         -- source table\n",
+    "                           'train_output',    -- output model table\n",
+    "                           'id',              -- id column\n",
+    "                           'class',           -- response\n",
+    "                           '\"OUTLOOK\", temperature, humidity, windy',   -- features\n",
+    "                           NULL,              -- exclude columns\n",
+    "                           NULL,              -- grouping columns\n",
+    "                           20::integer,       -- number of trees\n",
+    "                           2::integer,        -- number of random features\n",
+    "                           TRUE::boolean,     -- variable importance\n",
+    "                           1::integer,        -- num_permutations\n",
+    "                           8::integer,        -- max depth\n",
+    "                           3::integer,        -- min split\n",
+    "                           1::integer,        -- min bucket\n",
+    "                           10::integer        -- number of splits per continuous variable\n",
+    "                           );\n",
+    "\n",
+    "SELECT * FROM train_output_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review the group table for variable importance:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 78,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>gid</th>\n",
+       "        <th>success</th>\n",
+       "        <th>cat_n_levels</th>\n",
+       "        <th>cat_levels_in_text</th>\n",
+       "        <th>oob_error</th>\n",
+       "        <th>cat_var_importance</th>\n",
+       "        <th>con_var_importance</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>True</td>\n",
+       "        <td>[3, 2]</td>\n",
+       "        <td>[u'overcast', u'sunny', u'rain', u'False', u'True']</td>\n",
+       "        <td>0.57142857142857142857</td>\n",
+       "        <td>[0.113988095238095, 0.0363095238095238]</td>\n",
+       "        <td>[0.0, 0.0342261904761905]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, True, [3, 2], [u'overcast', u'sunny', u'rain', u'False', u'True'], Decimal('0.57142857142857142857'), [0.113988095238095, 0.0363095238095238], [0.0, 0.0342261904761905])]"
+      ]
+     },
+     "execution_count": 78,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM train_output_group;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The 'cat_levels_in_text' array shows the ordering of the levels of the categorical variables \"OUTLOOK\" and windy, which have 3 and 2 levels respectively.\n",
+    "\n",
+    "Variable importance for categorical variables is shown in 'cat_var_importance'.\n",
+    "\n",
+    "Variable importance for continuous variables is shown in 'con_var_importance'.\n",
+    "\n",
+    "A higher value means higher importance for the variable."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "scrolled": true
+   },
+   "source": [
+    "# 3. Predict\n",
+    "Predict output categories.  For the purpose of this example, we use the same data that was used for training:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 81,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>class</th>\n",
+       "        <th>estimated_class</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (2, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (3, u'Play', u'Play'),\n",
+       " (4, u'Play', u'Play'),\n",
+       " (5, u'Play', u'Play'),\n",
+       " (6, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (7, u'Play', u'Play'),\n",
+       " (8, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (9, u'Play', u'Play'),\n",
+       " (10, u'Play', u'Play'),\n",
+       " (11, u'Play', u'Play'),\n",
+       " (12, u'Play', u'Play'),\n",
+       " (13, u'Play', u'Play'),\n",
+       " (14, u\"Don't Play\", u\"Don't Play\")]"
+      ]
+     },
+     "execution_count": 81,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS prediction_results;\n",
+    "\n",
+    "SELECT madlib.forest_predict('train_output',        -- tree model    \n",
+    "                             'rf_golf',             -- new data table\n",
+    "                             'prediction_results',  -- output table\n",
+    "                             'response');           -- show response\n",
+    "\n",
+    "SELECT g.id, class, estimated_class FROM prediction_results p, \n",
+    "rf_golf g WHERE p.id = g.id ORDER BY g.id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To display the probabilities associated with each value of the dependent variable, set the 'type' parameter to 'prob':"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 82,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>class</th>\n",
+       "        <th>estimated_prob_Don't Play</th>\n",
+       "        <th>estimated_prob_Play</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>0.9</td>\n",
+       "        <td>0.1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>0.7</td>\n",
+       "        <td>0.3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>0.85</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.45</td>\n",
+       "        <td>0.55</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.25</td>\n",
+       "        <td>0.75</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>0.8</td>\n",
+       "        <td>0.2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.25</td>\n",
+       "        <td>0.75</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>0.9</td>\n",
+       "        <td>0.1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.2</td>\n",
+       "        <td>0.8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.25</td>\n",
+       "        <td>0.75</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.65</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.3</td>\n",
+       "        <td>0.7</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>0.9</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>0.8</td>\n",
+       "        <td>0.2</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u\"Don't Play\", 0.9, 0.1),\n",
+       " (2, u\"Don't Play\", 0.7, 0.3),\n",
+       " (3, u'Play', 0.15, 0.85),\n",
+       " (4, u'Play', 0.45, 0.55),\n",
+       " (5, u'Play', 0.25, 0.75),\n",
+       " (6, u\"Don't Play\", 0.8, 0.2),\n",
+       " (7, u'Play', 0.25, 0.75),\n",
+       " (8, u\"Don't Play\", 0.9, 0.1),\n",
+       " (9, u'Play', 0.2, 0.8),\n",
+       " (10, u'Play', 0.25, 0.75),\n",
+       " (11, u'Play', 0.35, 0.65),\n",
+       " (12, u'Play', 0.3, 0.7),\n",
+       " (13, u'Play', 0.1, 0.9),\n",
+       " (14, u\"Don't Play\", 0.8, 0.2)]"
+      ]
+     },
+     "execution_count": 82,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS prediction_results;\n",
+    "\n",
+    "SELECT madlib.forest_predict('train_output',        -- tree model    \n",
+    "                             'rf_golf',             -- new data table\n",
+    "                             'prediction_results',  -- output table\n",
+    "                             'prob');               -- show probability\n",
+    "\n",
+    "SELECT g.id, class, \"estimated_prob_Don't Play\",  \"estimated_prob_Play\" \n",
+    "FROM prediction_results p, rf_golf g WHERE p.id = g.id ORDER BY g.id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. View tree in text format\n",
+    "View a single tree within the forest identified by 'gid' and 'sample_id', out of the several that were created:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 84,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>get_tree</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>-------------------------------------<br>    - Each node represented by 'id' inside ().<br>    - Each internal nodes has the split condition at the end, while each<br>        leaf node has a * at the end.<br>    - For each internal node (i), its child nodes are indented by 1 level<br>        with ids (2i+1) for True node and (2i+2) for False node.<br>    - Number of (weighted) rows for each response variable inside [].'<br>        The response label order is given as ['\"Don\\'t Play\"', '\"Play\"'].<br>        For each leaf, the prediction is given after the '--&gt;'<br>        <br>-------------------------------------<br>(0)[4 4]  \"OUTLOOK\" in {overcast}<br>   (1)[0 3]  * --&gt; \"Play\"<br>   (2)[4 1]  humidity &lt;= 80<br>      (5)[1 1]  * --&gt; \"Don't Play\"<br>      (6)[3 0]  * --&gt; \"Don't Play\"<br></td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'-------------------------------------\\n    - Each node represented by \\'id\\' inside ().\\n    - Each internal nodes has the split condition at the end, while each\\n        leaf node has a * at the end.\\n    - For each internal node (i), its child nodes are indented by 1 level\\n        with ids (2i+1) for True node and (2i+2) for False node.\\n    - Number of (weighted) rows for each response variable inside [].\\'\\n        The response label order is given as [\\'\"Don\\\\\\'t Play\"\\', \\'\"Play\"\\'].\\n        For each leaf, the prediction is given after the \\'-->\\'\\n        \\n-------------------------------------\\n(0)[4 4]  \"OUTLOOK\" in {overcast}\\n   (1)[0 3]  * --> \"Play\"\\n   (2)[4 1]  humidity <= 80\\n      (5)[1 1]  * --> \"Don\\'t Play\"\\n      (6)[3 0]  * --> \"Don\\'t Play\"\\n',)]"
+      ]
+     },
+     "execution_count": 84,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.get_tree('train_output',1,7, FALSE);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Please see the decision tree user docs for an explanation on how to interpret the tree display above."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5. View tree in dot format"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 85,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>get_tree</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>digraph \"Classification tree for rf_golf\" {<br>\"0\" [label=\"\\\"OUTLOOK\\\" &lt;= overcast\", shape=ellipse];<br>\"0\" -&gt; \"1\"[label=\"yes\"];<br>\"1\" [label=\"\\\"Play\\\"\",shape=box];<br>\"0\" -&gt; \"2\"[label=\"no\"];<br>\"2\" [label=\"humidity &lt;= 80\", shape=ellipse];<br>\"2\" -&gt; \"5\"[label=\"yes\"];<br>\"5\" [label=\"\\\"Don't Play\\\"\",shape=box];<br>\"2\" -&gt; \"6\"[label=\"no\"];<br>\"6\" [label=\"\\\"Don't Play\\\"\",shape=box];<br><br>} //---end of digraph--------- </td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'digraph \"Classification tree for rf_golf\" {\\n\"0\" [label=\"\\\\\"OUTLOOK\\\\\" <= overcast\", shape=ellipse];\\n\"0\" -> \"1\"[label=\"yes\"];\\n\"1\" [label=\"\\\\\"Play\\\\\"\",shape=box];\\n\"0\" -> \"2\"[label=\"no\"];\\n\"2\" [label=\"humidity <= 80\", shape=ellipse];\\n\"2\" -> \"5\"[label=\"yes\"];\\n\"5\" [label=\"\\\\\"Don\\'t Play\\\\\"\",shape=box];\\n\"2\" -> \"6\"[label=\"no\"];\\n\"6\" [label=\"\\\\\"Don\\'t Play\\\\\"\",shape=box];\\n\\n} //---end of digraph--------- ',)]"
+      ]
+     },
+     "execution_count": 85,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.get_tree('train_output',1,7);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 6. View tree in dot format with additional information"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 86,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>get_tree</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>digraph \"Classification tree for rf_golf\" {<br>\"0\" [label=\"\\\"OUTLOOK\\\" &lt;= overcast\\n impurity = 0.5\\n samples = 8\\n value = [4 4]\\n class = \\\"Don't Play\\\"\", shape=ellipse];<br>\"0\" -&gt; \"1\"[label=\"yes\"];<br>\"1\" [label=\"\\\"Play\\\"\\n impurity = 0\\n samples = 3\\n value = [0 3]\",shape=box];<br>\"0\" -&gt; \"2\"[label=\"no\"];<br>\"2\" [label=\"humidity &lt;= 80\\n impurity = 0.32\\n samples = 5\\n value = [4 1]\\n class = \\\"Don't Play\\\"\", shape=ellipse];<br>\"2\" -&gt; \"5\"[label=\"yes\"];<br>\"5\" [label=\"\\\"Don't Play\\\"\\n impurity = 0.5\\n samples = 2\\n value = [1 1]\",shape=box];<br>\"2\" -&gt; \"6\"[label=\"no\"];<br>\"6\" [label=\"\\\"Don't Play\\\"\\n impurity = 0\\n samples = 3\\n value = [3 0]\",shape=box];<br><br>} //---end of digraph--------- </td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'digraph \"Classification tree for rf_golf\" {\\n\"0\" [label=\"\\\\\"OUTLOOK\\\\\" <= overcast\\\\n impurity = 0.5\\\\n samples = 8\\\\n value = [4 4]\\\\n class = \\\\\"Don\\'t Play\\\\\"\", shape=ellipse];\\n\"0\" -> \"1\"[label=\"yes\"];\\n\"1\" [label=\"\\\\\"Play\\\\\"\\\\n impurity = 0\\\\n samples = 3\\\\n value = [0 3]\",shape=box];\\n\"0\" -> \"2\"[label=\"no\"];\\n\"2\" [label=\"humidity <= 80\\\\n impurity = 0.32\\\\n samples = 5\\\\n value = [4 1]\\\\n class = \\\\\"Don\\'t Play\\\\\"\", shape=ellipse];\\n\"2\" -> \"5\"[label=\"yes\"];\\n\"5\" [label=\"\\\\\"Don\\'t Play\\\\\"\\\\n impurity = 0.5\\\\n samples = 2\\\\n value = [1 1]\",shape=box];\\n\"2\" -> \"6\"[label=\"no\"];\\n\"6\" [label=\"\\\\\"Don\\'t Play\\\\\"\\\\n impurity = 0\\\\n samples = 3\\\\n value = [3 0]\",shape=box];\\n\\n} //---end of digraph--------- ',)]"
+      ]
+     },
+     "execution_count": 86,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.get_tree('train_output',1,7, TRUE, TRUE);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "You may wish to visualize the tree using pygraphviz or another program that can handle dot format:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 88,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n",
+      "True\n"
+     ]
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAILCAYAAAA5VO8zAAAAAXNSR0IArs4c6QAAQABJREFUeAHs\nnQe4FFXSho85JxTEjBHFgIqCoBgRAwJGMOeAmHNWXF0T5oCYEDGgqKwIiNlVxKyYxcAKKqgoYHZ1\ndfuvt/zPbM/cnngn9PRUPc/cnul4ztd9u86p8NUcgYgzMQQMAUPAEDAEDIGaIjBnTa9uFzcEDAFD\nwBAwBAwBRcAUsj0IhoAhYAgYAoZADBCYOwZtsCY0IAJ4Sv7880/33//+180555xurrnmcnPMMUcD\nImFdNgQMAUPgLwRMIduTkBWB2bNnu2+++cbNmjXLff/99+67776LXP7yyy/u119/1U/4u1/3xx9/\nqPJFAftPVOiCV8woZ/+Ze+653QILLJD2WXDBBVO/F1poIbfYYou5xRdfPHLZokUL16pVK7foootm\n7adtMAQMAUMgDgjMYUFdcbgN1WvDf/7zHzdt2jT3xRdfpD7Tp093M2bM0A8KmO8s2TcsKEwUm1d+\nXhGiIMNKEgXqf88///wOpeoVLMvwb87plXTUEmXuFXumsuf3zz//3GSQ8OOPP7pMhT/ffPOpYm7Z\nsqUuUdJ8ll12Wbf88su7FVZYQZfLLLOMtjXcb/tuCBgChkA1EDCFXA2Uq3gNlOjUqVPdv/71Lzd5\n8mT98P3zzz9XBfz111+nlBXKEQW03HLLpZRUpsLi95JLLqmzz0UWWaQuzMqYwX/44QdV1DNnzmwy\n2PADDrBgcMKSYxAwad26tSrnFVdc0a2yyipu1VVX1Q/fUdzsY2IIGAKGQLkRMIVcbkSrdL4vv/zS\nffDBB6nPpEmTVAl/9tlnOuOkGcxkvUJZaaWVVMkwG/QfFI8pF+eYhWMlCFsNGMAwsGFQw4Dmp59+\n0js7zzzzuDZt2qiCbtu2rWvXrp1ba6219LPUUktV6
 e7bZQwBQyCJCJhCjvldxW/75ptv6uedd95J\nKWDWI0sssYRbc801VSGsttpqKQWMIsZ/alIeBJhVe6sDy08++UTvBQMhTOQI1gSvnNdbbz23/vrr\nO5YLL7xweRphZzEEDIFEI2AKOUa3lxna66+/nlLAKOIpU6ZoC5l98XIPz8h4+TPLNaktAsymw9aK\n999/37399ttqMidynIESytl/NtpoI3UR1LbVdnVDwBCIGwKmkGt0RwhGeu2119zLL7+sn5deeknN\nprzA8Vn6l3f79u31O2Zmk/pC4NNPP00bXDHAwqWArLzyyq5Tp06pz4YbbugIPDMxBAyBxkXAFHKV\n7j0+3+eee849++yzbsKECe69995TXy8z3PCLeeONN3YET5kkEwFSyF555ZXUQIzvBJ7hm2YQttlm\nm7nNN9/cde3aVYPpkomC9coQMASiEDCFHIVKGdYxE0L5eiX88ccfawAVMyFetptssokqYiJ5TRob\nAfzRWEpefPFFfV7effddBWTttdd2W2yxhSpolksvvXRjA2W9NwQSjoAp5DLdYKJwn3nmGff444/r\n56OPPnLzzjuv69ixo75QmfVsuummFuBTJryTfBpm0c8//3xqMDdx4kS1phBD0L17d/0wqCPH28QQ\nMASSg4Ap5GbcS16U48aNUwX8wgsvaPoMPl//0kQB20uzGQDboYoAUdxYWvxgj8huyFcY5PGs7bjj\njhppb3AZAoZAfSNgCrmI+/f777+7f/7zn27UqFFu9OjRSrYBsca2226rL0aWsD+ZGAKVRICobq+c\nn3zySaU2XX311V2vXr1c7969XZcuXSy/vJI3wM5tCFQIAVPIeYBldoLyfeihh9yjjz6qOafMgnn5\n8enQoUNdsFfl6aZtrlMEoBvFOvPwww/rB1cJzGo9evRwO++8s9thhx3MSlOn99aa3XgImEKOuOek\nJI0ZM8bdd999apKGyWmrrbZK
 KWELxIoAzVbFAoEPP/wwpZxR1BTfYNbcp08ft91222lcQywaao0w\nBAyBJgiYQv5/SDBHjx071t17772qjH/77TdVwn379nW77LKLpaA0eXRsRdwRgA70gQce0IElEdwU\nA2HWvOeee7pu3bqZWTvuN9Da13AINLxChhlr6NChbvjw4Y5yg6SXMJvYbbfdlAqx4Z4I63AiEcDv\nfP/997sRI0ZoihVVrvbbbz934IEHWkBYIu+4daoeEWhIhUx1n7vuuksVMTmfa6yxhjvggAP0BUU1\nHxNDIMkI4Ge+44473J133qmBiRDToJiZOVOQxMQQMARqg0BDKWSIOgYNGuT+8Y9/qG8NczSKuHPn\nzrVB365qCNQQAUpOPv300zow5X8C2WuvvVz//v0dBDYmhoAhUF0EEq+QqYvLTODGG29UukqIOo48\n8kidDViOcHUfNrtafBHg/2TYsGH6f0JxDGbN/J8waLX/k/jeN2tZshBIrEKmRN5VV12lo39mAnvv\nvbe+YGzkn6wH2HpTfgQgIcGSNHLkSLfooou6ww8/3B177LFWWaz8UNsZDYE0BBKnkF999VU3cOBA\nfZlQIem4445zBx98sEaYpvXcfhgChkBOBIi1uOmmm9wNN9ygpST33Xdfd9JJJ2nN55wH2kZDwBAo\nCYE5SzoqhgeRskSENCZpZscEbUHaf8IJJ5gyjuH9sibFHwGKWZx77rlu6tSp7rrrrlN+bQpe9OzZ\n040fPz7+HbAWGgJ1hkDdK2QIPCj4vtNOO2nZQgo8UGeYiNG55567zm6HNdcQiB8C+JAPO+ww98EH\nHyht7Pfff6882ttss40p5vjdLmtRHSNQtwoZRUztYEbryy23nCOfmHVbbrllHd8Oa7ohEF8E5phj\nDv1/w8fMwBfaTgpcmGKO7z2zltUXAnWnkHkRYJaGRxpF/MYbb+io3YK16uvBs9bWNwIMfCm0woeg\nSRQzxVX
 4fzQxBAyB0hCoG4VMKgaz4a233totscQSOiOm4MMGG2xQWs/tKEPAEGg2AsRtMEhGMVOI\nBfcRDGCfffZZs89tJzAEGg2B2Cvkr776yh1xxBGO4uxffPGFlp177LHHTBE32pNq/Y01Aijml156\nKcWb3bZtW3f66adrdHasG26NMwRihEBsFTIVlsgjhtaSsoe33367msMwi5kYAoZAPBHYY489NPjr\nsssuc7fddpv+/0LTaWIIGAL5EYhlHvKECROUvo9Scqeccoo788wz3QILLJC/N7aHIWAIxAaB7777\nzp111llu8ODBbtNNN1WykXXWWSc27bOGGAJxQyBWM+Rvv/1WSTy6du3qlllmGffOO++4Cy64wJRx\n3J4aa48hUAACFKqAVASyHsqbEu9x8sknO+qNmxgChkBTBGIzQ4bcvl+/flpA/ZprrnG77rpr09aW\ncQ2j9yuvvNKdc8457q233nITJ07UXMuoSxA5ykuFPEwGCvizCS6bb775Urt/88037sknn0z99l8w\n4fl8aGb+4WCXlVZayZFKMmXKFL971iXXWnjhhd3MmTPT9qEtkDXkE/pL8A2DHHiLmal06dJFTYq5\nji2k75wPYpZM6dGjh/IgP/jgg2mbWrRo4bbbbjtdV8x9SDuJ/agrBIIgUBP2aaedphWlhgwZokQ+\nddUJa6whUGkE5B+lpiIKJhCe6UD6GQjFZSAv6Kq056mnntJrfvzxx4GYxYNVVlmlyXVnzJgRSPWb\nYPXVVw+klmwgijOQilGBkI4Ea665ZvD888+njpHUj0ByoYOVV15Zz7vDDjsEwhSW2s4XsQAEMuPX\n7RdeeKH+FoUdSG3aQGYOgQwQAglg0+2SVhLIwCQ477zzAsm3DmS2EdAe4RTW7XPNNVcglXqC3377\nLe0aUT9ouwwkAmEtC15++WVtl/j3AmFiCoQKMZAZS5PDiuk7B4uiD2QGpG3bZJNNgvfe
 ey91Thms\nBBIZH7Rs2VJxlGjc1LZC7kNqZ/tS9wh8+eWXgaQsBjIQ1Wc56tmr+05aBwyBEhFwJR5XlsNGjx4d\ntG7dOhDO6WDcuHFlOWehJ5HZrioPmd2pIpTZYtqhv/76qypdmX0Gs2bNStvGDxTonHPOmaaUWX/I\nIYfoeW+55RZ+NhEU9yKLLBKwRHg5SUpXaj8hN9Hjjz/++NS6f//730G7du30t7CQ6fYOHTqktuf6\nIsFwuv/NN9/cZDehRAxkthrIbDVtW6l9l6havRaDjbAIjaliyYAmU/Ldh8z97Xd5EZCAq/KesMCz\nSQU2HaStttpqgViOCjzKdjMEko1ATXzI//nPf5RjmrxiTJfvvvuu23777SttDEg7f5s2bTSfWZSj\n4/sKK6yQtv3ss892kyZNcgMGDND90jbKDzh+8ZEddNBBThRYajPVcRC/TG34/y+YqFdccUU1VbNq\ns802y0vWj7ma6yC0F1looYV0mesPaWKi2NU8feihhzbZlXaceOKJjjSyW2+9NbW9nH3HlH3FFVdo\nniom+kzJdx8y98/3W5S+e/HFF/PtZtsFAVwYBEzWQihUIVYUR3oUKVOXXHIJk4NaNMWuaQjEBoGq\nK+RPP/1UIy5RANQpHjp0aE2KP8DPC+MXglJAOXkh6ISUq8UWWyyrLxvFiJ9bTN6ae+mPLWQp5ubU\nbkSRFyIEwxQr119/veaBoswZCETJgQceqKtlVqvLcvb9vvvuc+eff74qfAoVREmu+xC1f7Z1FBKh\nqpe4F5yY5bPtVtR6iC7oA4MyUng+//zz1PE//fSTPiOXXnqpVhdjUIngT6cQA+t5NrwQX/D3v/9d\nI40z4wBmz56t69lXLEV6LGl/CNehUAqxDiNGjGiS18tgkGM4N0pt2rRpepz/g5KDtOPqq6/Wdj3x\nxBO6CWXcu3dvJfOgopNYq/whVVsSjwHdLVgxwBU3jyMWw8QQaFQ
 EqqqQCdyC4pIZMtzTjJJrKX36\n9NHLi/9YebF9Wxi5QweIkhaztF/dZOlnfG+//XaTbXFY4dvFgCOb8FKcZ555tKIPRQPK1XcC5shF\nRVmI7zjb5XV9tvuQ86D/34gVA2Yo8elr0B2KBavA9OnTtTqR+PmzLgmyyyYE+pGqAzZHHXWUI/hM\n3AZu2LBheggBdlg3SOsRP7haIdiAZWTeeedV5c3ggOhiCjOQQUABFBQhbYV5DiFH15cJZQB1xhln\nKKEG2+lb3759NYhQYgkczHSrrrqqVjPjWJQ11yAlEBIOlDhtDltssHYwWAGTzp07O34jsN0REIj1\nhVlqpoVId6rSH6w03AsGMOuvv76DK9vEEGhIBKplkZdZhgZySCR1gE80ziIRoOoLJTArl3j/bPfu\n3VO7ETglD1IgM6vUuswv8iLMXJX6HeVDTm2UL5KbrecX7uDw6sjvMqDQfQnkyiUysND9XnjhhaA5\nfb/ooov0PPgFwUCUR0AQTyWEIDKC6/Dji6IJhDwm7TIEyNGGXB9RtmnH+B8EyhG0J7M2v0qXBB+K\nsk0LWDvggAOCBRdcMC0YUdwDGgDIQZdffrkG5vkTySxb2xT22++zzz66buTIkbobfnVRroEopyDs\n+ydokOsTe4Hgm6f/wmanv9988009zyuvvKK/iVNYaqmlAhkE6G/+hP37O++8cyCKOLWt1l8I6BSr\nU8B9kVl7rZtj1zcEqo5A9umfvMnKIYzWGeV7c92NN96Yli5UjmuU+xzeTxueaURdw2/P5i+OOqaa\n60rpRynHZPaJmRiF7CdPnqwxAswuyyWidNzuu++usztSyJiBy0AilUblr3PMMce4X375JecHi0CU\nwAzH7FSixdM2E+/AjBfztRdmz1wHszKCmZuPt55gKSCljv34XHzxxTojlUBBfwonUfb6HRMywgz6\nkUcecfSV1DEvWJc4NzNtRDIANP4Cd4AMcp
 1kAOh6byrHTcHsl/+/UaNG6bZM10c2V4buXOU/uIge\neOAB9WuTAnncccdpRakqN8MuZwjUDIG5K3llzIa8ZPAbP/74444KMfUgPq+XoKhc4n2KmP68YK5E\nKE2XTar1EqQfmKBz9UNmg+q3o928vL2JPtcx9Cuq776/lMU8+uij9byYeFEg3H+ZSfpdSl5imiUI\nDTP8wIEDNZc66mTkfvv876jtudZ5czJm6bBAWIOQj+6FvvLBD4vCvffee53MeHUzAxH+BwioI4Ax\nm3jM/ZL9MJkTuJdp7vfPF/uwP8oY/yu+eNqB4G7xghmcXHiZDWuZxLvvvluP8dur9Sz66+Vb0h58\n9uTJi/XBwdaHHx9lbWIIJB2Bis2Q8VvhzyJICFKNelHG3HD8cpR2ZAZGwE028YE8EGx4ad++vX5l\ndhgl+PnChCJR+zR3neQQOxStx5yXezZBYYtdRgPcUGDN6Xv4GrxYmUnuuOOO6h9kVkvsQHOF2Ss+\nRjGL6/Ml7oLIqGqeOWajuT74uKME4hIkM1qbWS8+ZfyvYUERQ7jC/szY6TPiFSzbihWUKv87+Jyz\nCQNd2K8ITiRa2s/Kw/vjk4XcpX///u6fEtzFLDs8O4+bQvZt53nB/8//GM8xz7SJIZB4BCphJBcF\noKQTMmJX8otKXKPS55QANPXHyWg98lLkDssLV/2Y4R1EEetxEH5EiSiTQMypUZt0Hf5BeeiCcB5y\neOdCfMjkNovyUz8k+coyu0jzcYbPhx8WvyT3zEupfRe3hLb92muv9adS0hF8vPSJa4nlILWtuV/w\neePn59z48fntBf+qKJ+cH1Fkfve0pffFirk4bT0YcS2Jok5bL66LYMkllww6deqU5i9mJ4hiyLMX\ns3baMeThkgeOCHuVnje8A/5kroWPOiyQy3hf8/7776+EL367z+nm3AixGmKh8JvVzy4KOPA58rvs\nskusfMiphoa+yKBDi
 XlkoJjCK7TZvhoCiUKA2VFZhZcirFLbbLNNIP6usp672ieDFUt8qk0ChghU\n4uVL4E8UaYjMkDQwRfx2aU0moIdgLPHxpa0P/+BlyotYUpXCq1PfxfSr22HDyhSZUamyJzDGi0Ra\nq0IggEeicv1qXUrqmbYzU8GwsZS+w3hG2yVqNu06X3/9tbJ0sQ02tnIqZS4ks+EU+xPBUjKrSrt+\nKT9QhNx7rzQ5h/Ayq3KIYkc79dRTA9jTuMdhGTRoUOp+EVwls1UNFhNTcmo3Me/rPihbLwR1eeYz\n2NskbUoJbBhs+aDI3XbbTY+TXO8ANjQGemAsaUSBWHYCBgoQ3hDchbCELY0BFyKzZr3/DCJhlct8\nPnSnGPwhaI0ANwY24tuPQYusCYZAZRAoq0IWk10gfreAkbd/aVSm2dU7K1HPsGTx8iOKmJej+FoD\nSR/RF15USyTwRxm7mDUxS+PlzgCFDy+/KOEYFCPX4qXKrJaI2PD+4v8LmNWxnZkOgwLOyUsXRjGi\nU9kWjszlWrycJd9YX/DMvP/2t7/pjJLjfURuVJsK7bsERwXiz1WrCNeHfe08ofxkgIAwIxNzqraN\n7ZIulFIKUdctdZ0ET6XuU6nn8MehzMQUrbhKrnzA4IUZs7gx/C5pS2ZyDHoyBSUoqUyBuAO0/yxh\nNPODEs4r7hHdJulfSm3qzyF+/EDKjeq95n6L6TZgnRcGv+AqLhD9n6NtWESgKSUDgD5AmYplAvpU\n7lE4cpwBAu1hAB22avjzx2lJBDbPDXSvWIlMDIEkIlC24hL4KfH1EPhCMQF8bUkSolsJ5hFlk0Yi\nkquP8sBozihkEQRYhQNych1XqW2+PQQbrbXWWgUHWZXS90r1oZDzEgldLqx9bjY56eQL5xKirbMF\nroly1GdBTNhZ98l2bu4XPmXv2w7vx3rO7ZnbuMf46n3/iVlgH5llRj639A9ft4+uD587bt/Ju+7W\n
 rVsqxzxM5hO3tlp7DIFSECiLQiYSUkyxmooC806lg5ZK6agdYwgYAvWPAEGWW221laaaEdzHANnE\nEEgKAs1WyOJPdWL61NF3uVJbkgKu9cMQMATKjwD0mkwAsALA8JWZnlb+K9oZDYHqINAshQwZAcTw\nmNTgD6bYgokhYAgYApVGgJRE8q4hb4FSNK7pW5XGwc6fLASalYcMRy+sQPAHmzJO1oNhvTEE4owA\n/mO48SGJgU/cxBBIAgIlK2RIFWAlogLNGmuskQQsrA+GgCFQRwhAyCMZBUr+wrvIxBCodwRKMllj\nnqbSDWXTqNRiUn0E/vWvfzlKJkoKU97o3+q3LvqK8DpD8QhrVBwFdjP4oOGQ5vnGHOrZtvK1l7rP\nRNN7gVoU+tBsUdd+P1s2HwEqWUlRFL1vVG4zMQTqFYGiFTKpB9D1UQYOmkDz3dTm1kPCD0cxRQio\nI1sPAj8xATgvvfRS7JoLNSMKGApKeJ+xAMFp/fDDD+dVyhSioDQjKUdeJPfXDR8+3P+0ZQURYCBF\nYCmDn/Hjx7twvfEKXtZObQiUHYGiFfIhhxyiPmNq7VrKQdnvR1EnpMaulNcr6pha7gw3MzNO6vd6\nIWKW2tjbb7+9X1X1JXm6BCeS5+urIlEchEEnivWSSy7J2abDDz/cSWlG52dnDFIpCoE1wKQ6CDB4\n2mijjZzQkDohpanORe0qhkCZESjKh8yMGNMQRQNMGZf5TpRwunpSxnQP8oqwMkbpocimTJlSQu/L\ndwj5rBQyIEjRC7MsYVhzVEtiIJFNINxgcEqxCwKN+EiNYVPG2QCr0HosFFT/wo0DSZGJIVCPCBRc\nfhH2I+qTCoVkzlJy9QhCPbaZWR3+TkzAvuwejE3M8ITvWKvjYM6m1i6l/1AwwimdMsFi7vZ1nGFz\neuqpp1RhUu2Jc+CjFgpUNQWCD5H0QuOp16OcIOxdlFaEFUroGbXmLvtB3ICpF
 j8xAziUFbWRqSSF\nWRjiGOGz1mpUlCkUjmbXqlUrdX3gt6VKE8Isk7KWuEdQiKS2cC1IIYQuUvcp1x+idZF111037ZSY\n2Lk2OIJXlAjdqab8oYRh4aIUIorcXDlRaFV2Hc+ccME7amEzyDIxBOoOAfF7FSTwOIuPJiuXb0En\nsZ3KgoCUTAykPJ3yH9944416Timtp4UP5AEMrrjiikDMqAHFHrhn8HDDJy0KUHmNRVkEoqT1OIoh\nUIyC4yhcAF8zRQfgQIbnWHzVqTbDlw3BvxcJYgpEqQdUc0LgfOZ6HAcvt5Si1PNSUAFuZYo1wEWM\nwE1Mm7gu7YRXGc7tO+64Q9ftt99+up//Q9Ui+LhlIOJXpS3hdRb/Yc5PNh5qXzEqs2gEmNI+OMWz\niZSD1PbDs+y5xIXeUSttZTvG1lcOgddee02rsFHty8QQqDcECiouAaG9mBu1uEK9dTCp7aWKE8rC\nK2T6KVHMuo5CAl4oZMB+wi/uVwWSt6kFCXyBAyr9sE+4ZCQVdqgMhAKmlCPCICCskFlH8QyvkPmN\n0udcvkQgJQG9oPi9QmadL3MoLhC/iy45J0UT/HVZeeSRR6aViEw7QH4wMOC6uT6Uh4wSrkelpkyh\n8Abno8hEIUJ/qADGMVKHuZBDbJ8KINCvXz8dUNZ7tbkKQGOnjDkCBfmQCWqhKDumR5N4IBDFFy4V\norRxYdOrVKbSdTJbTTVclIaajKdPn67rfGECitl7EcWpPlUZjDmpZORX511iIkd69+6tS67lJarN\nbMs070opQydlDx2R5Aimahk0qAlbV0T8wZdLcYdcH84bJdmoF/FxI4XGS4AxAWoUobAI6yikq7MO\nPzIuFRmsVueCdhVDoEwI5FXI+B0J4iJ60VeQKdO17TRVQCBKCfpKXLmClWiaJ3whErpQ8Xm7flnI\ncZkKWWbiGrEspnc9HB8ufvFcQrBYvg9+7CjB/4vyJX0m
 LLzUEQKGChVSbxiMwGBnUhsEpOypE4uK\n4/mB3tfEEKgXBKLfUKHWQ+bAzItAHpP6QyBT2YV7kGsb+zFLRXw6j/6owJ/MdhCAhjVGTMUanCMm\neHfNNdfkvDLPaaZCzTyA1CbYnTKFUpQIZB5ES3shrQwpRiGzP1YBP5jht0n1EeD5IUJe6k0rQUv1\nW2BXNASKRyCnQoYEBLMPkaOWU1k8uPV+xNNPP+2k4H3KZMsMs5wzDq+IvWk4jNdBBx3kBgwYoJ/l\nllvOMevJJURh55vxY4aPUsjk1l9wwQVaOSiskDE/Y8YvVrkSte1N9rnabNsqhwD3mkkEs2QGdv5Z\nq9wV7cyGQPMRyGmyxofHrIOXo0m8EPCzQT+Lo3XexOq3sY5BFTJr1ixd8scrrkzl+s4776T2mTZt\nmqYgQY/qpXv37o7rScS0noPlzJkzNUWKdCfEn5v1mUK7vv/+e0eaFUK6FPLiiy8qyxUpUl4wP0M9\nKdHXbq+99vKrsy5Jc0GB5vqQbhUl+Ii5FnmsEvOhu4ANqV64a8Lm93fffVdTrySq23300UcO2saJ\nEyemTisR8IrB2WefnVpnX2qDwBFHHKE57jxDJoZAXSCQK+hsyy231JSZXPvYtuojINSTqbQnyZUN\nJLc3IO3HpxlJHmwgecSaSkQEsTyIms5EuhT7CUWkruvTp08gSiWQmtb6W0y6gcwWgzPOOCOQmXFa\nZDa9JGrVHytmXo2kJnJ6u+220xQmMQ8GMptNnVs4zxUcCbQKrr322kBmubpNgqsCiU3Qbdtss42u\nk/ziQEzkus7/IdKb9CtR4H5VxZakU0mcRLDTTjtpW8GAVKtMkSIG2l7SukT5B+LOSbWf42UAE9Bf\nk3ggIDn6QWYKXTxaZq0wBJoikJU6E/YkfIfMEiQ3tS4GF9bI0hAgQpnZqqQF6YyPQL42bdpkNfMR\n5AU1JMJMsjnuDHkkHdHemKUzBdI
 QzOaSA5+5qWK/MZ9jBcDkmU3wNRMIhjDrpzYvwVxRfch2Dltf\nHQRwuUmeu+MZzxZNX52W2FUMgfwIZDVZ4wejxnEtOYbzN9/2KDcCKBYYp3L53Lwy5trNUcYcz3Wy\nKTJK6xEtW00hoCyXMqYtXhnznSh22M2y9YF9TGqHQN++fR0MdtRNNjEE4o5A1qAuZidbb721VU6J\n+x0sQ/vI3UWEPasMZ2veKaBnZcYJTzefsPJr3pnt6EZEgIIhBCbyPoP218QQiDMCkTNkiBgIktl2\n223j3HZrWxkQwDXhq+MIm5cGbMFbXivBXA6XNmbhfFWWatVGu259IcB7DIVsYgjEHYFIHzKVb7p2\n7arFBCqdgxp3gJLePpSvnyH7vpJ3nstk7fer1BK/bBShSaWuZ+dNNgLCSa6R8eTVU43LxBCIKwKR\nJmvh5NXasKaM43rbytcu2NdqwcCGWXrs2LGapgR5Q1jipIxJGxsxYoSmz0iEuVqNPNNZuM32Pb4I\nUCeZASbvNVPI8b1P1jLnIk3WUhDAefYiA8kQKDcCKLkJEyZo7VqpllTu05ftfB9++KGWfyRPGR5s\ncqghDrHSfmWDuConIroafnHeayaGQJwRiFTIkyZNMoUc57tW523jBQnZR6dOnWLdkxNOOMFBt7nj\njjtqygxtph6zkX7E+rZFNo4JhinkSGhsZYwQiFTIzAzCVXpi1F5rSoIQgIqzlr7qfFAKYYqDeSss\nmNPDTGjhbfY9vgjwPoNZzcQQiDMCkT7kGTNmpGgN49x4a1tuBCDdePbZZ9V3Rn4tL6Vw5DwvKGH9\nclBWbrrppm6XXXZJOyEzCggVmCWOGzfOMVCTmsmaiiTMVmp2hvZy8803d/hXvVCy8eGHH9YcYq5P\nDih5unBGQ4mZT4iIFZYvLflJHmmYx5pnE98zy1VXXdUJE1nFil8IC5nyuEuxe7fvvvsqDSn5+fkK\nXeTrn22vPg
 IQ3xDBb2IIxBmBJgoZPmTSnsIvwTh3wNqWHQFMq5B8wLf82muvKcm+V8hXX321phfB\nhEX0KaZYlC9EHDwD559/vhLzo5TgNCfymuh7fKkoW5QUtY/vu+8+d9ZZZ+k2TNB33323O+aYY5TB\nC25sorg5LylMd955p+6XLSiKfSkEIHSaTigs1cdMShZKnYpL5EljPiZqFsUulIja+WzBhwwWogpX\nhBFbaaWVsuY6H3744dofrvPGG2/obPmmm25qMnAJn8++xxMB3mdR/OrxbK21qmERyGTThGNYwAjk\npZe5yX7XEQJwMwuxhvJZ+2ZL4Xb/NZDgpECUX+r3zjvvHIiyS/3mCzzNcAF7buYffvghEGUaiOJN\nrZNiEoFEaQfhc8tsMhBTdCCFGFLnO+ecc/S5Gjx4cGqdzLYDCbZJ/b788ssDUcCp35KLrMfAlY3A\nHw3fthf4uu+55x7/s8ly0UUX1eN5nrN9hC60yXHhFTITD2Qmrsd37tw5kMFFeLN9rxME4CUXd0Od\ntNaa2agINJkh+0o82Yq5N+zIpc46jm+2bdu2DpMvFJSUAzz55JNTvWCWudBCC+nv999/X4k4ROGm\ntvNFFJqahb2ZeZFFFtFZMVSRfh1Um7Bpffrpp6ljOS/Pz9prr51ad/rpp7uLL75YI5SpwhMl1DQm\nRYVZshf64CtVYXJntoz5+KqrrtLZP7P0bMLMPJ9km63746j2hMmez5AhQzQQjShrS5/xCNXHkufR\nv9vqo8XWykZEoIlC9jmptWRrasQbUYk+U6Adn6/MftUMjDnZ8zTj03388cedVIpSZYM/ltKF+SQq\nRxil5ssuZjsexU3qCYUpogRzNEUmqGHbs2fPqF2UypVBBTVuMZvjy81VGtQPGiJPVsBKyktikn/1\n1Vd1gIGfncEEAwaKrpjUDwK44fy7rX5abS1tNASaKGRenEgme1OjAZOE/q6//vrq+2R2iu+
 TACj8\nuvD7iglZZ5sEXKG4oM0sRLJFRWdb789JZDIzVjE/+1VpS19zmPZlU8jsQ81i6jJTv5j6xgR3SdnD\ntHP5H8y480VEM/Pt0qWLPyRteccdd7gddthBlTEbuB6+eGbNDCAovmJSHwgwYPTvtvposbWyERFo\nkvbEQ8sLOlz4vhGBqfc+o4gIosLMfMMNN2hkMmk8I0eOVPOy+HzV9OtnkURNV1IIsKJUI8FaUYJ5\nnAA0yuVRnScsBJDB7IUipJ0Epk2cOFFn/eJXDu+a9v2hhx7SgDSC0rJ9yLnPJkSfZxbcwPSP9cgi\ndrOhFs/1vM8sUDWe98Za9T8EmsyQ2YRfDnJ/k/pFQIIinARQqdJl9sqs0ldQgikLuffee92ee+7p\n3nrrLfXtosTZxrGQdzCryJxhst37dD067IeyDQv+ujDjGzNwZqNhhQzzFcdyPdpI3dr+/furaRp/\nM5HdKNVWrVqpz/bjjz92TzzxhM6yGThiis+k3Qy3obmMWpyfNCdM/34GT5rYeuutpyUXw9ey7/FG\ngPeZlciM9z2y1mWhziR4xlht6v/xINBq77331tkhfldSmlAy6667rppfx48fr6XpCOpipomyZQaI\nwpXoY12S6oQflW2kIE2bNs1xHEqKmeyll16qg7dnnnnGSSRrCjQU2KBBgzRNCoYrUqu83xXlTdoV\n55k9e7YbMGCAmp779evnzjjjDDULk4bVsWNHnY36msj4r0nh4trDhw93KGj8vJUSrtOjRw/Xvn17\n9Vcfdthh6gJgkOAVdKWubectLwJYQnivmRgCcUYgstoTM5WnnnpKXz5xbry1LTcCzFIx8eK7jYoK\nJt8Yk7YXZsNRQVt+e6FLFCsRyZh2mZkw08UkXaig6CWlSU3YYb8f/SFaFr8x7eS81RDiKRhQwGm9\nxBJLVOOSdo0yI4B1iAElOfImhkBcEWjiQ6ahjCRhZaq0XzGuoCSlXS
 gvIkujlDF9DCtjfpdDGXOe\nsJASVYwy5lj82qRMhZUx6+kPggm7WsqY69EOuJBNGYNG/QmR/ZCC2Ay5/u5do7U4UiFjKmRWQOCM\niSFQLAI8O8xmMXObGAK1RoDKYrgYyHE3MQTijECkQsbHSL4qnMImhkAxCJDrTH4zgVqkI1GD1sQQ\nqCUCBAKS8mcWjlreBbt2IQhE+pA5cJ999tHUDlPKhcBo+3gEiJxGGXvBDO5Tq/w6WxoC1URgjTXW\ncLvttpsyxVXzunYtQ6BYBCJnyJyEXE8ibAn8MTEECkUA3y6EGf5jyrhQ5Gy/SiAwefJkjcb3RVUq\ncQ07pyFQLgSyKmTSY5D777+/XNey89QBAlAMEmF/wgknuEceeST2LZ4yZYqmQJEGxScb/SdBPeQ2\nFytRx0Hb6a/HEsxM4okA5DhEx5MDb2IIxB2BrAqZGQ45qZXM84w7OI3YPqgrR4wYoXnCcEvHXQjY\nIdcaYhFylyl8ESVwZJdSxzjquA4dOmiONAMWrp3JLBZ1fVtXfQRwnUB/SjES6oGbGAJxRyCrQqbh\nBxxwgJqtP/nkk7j3w9pXJgQIfglXWyrTaSt+GjinmQlFpVjdcsstWsu42EZkOw7GJ4pxdOvWrdhT\n2v5VRICKZlhQeI+ZGAL1gEBOhUwhAPJIYSwyaRwEfL5vvoIR9YDIRx99pOl7YcrOQtpd6nGFnNv2\nqQ4CsM9J7W63zjrrVOeCdhVDoJkIRHJZ+3Ni5jn11FP1c+aZZyohg99my3ghQM4vMzrYsci5ZMbI\ni4gax5jtyA3eddddUyZdFA68zBRQoKzgLrvskrVDvigFvlKCYyDtgCoTDmyE84bJR4jMf/nllzXN\nhHrMtSL1p71nn322FqWApalQKfW4Qs9v+1UegXfffVd50OEiNzEE6gWBnDNkOnHIIYeoGfDyyy+v\nlz41ZDspBrHZZpu5s846S4Oy/KwAEy5sXVBYe
 v8qPNLU9d1vv/20jOGJJ56oVZayAbfMMsvoYIxA\nL5Q4gr8WZc86XzGJwQB8z1TWYUaK0oYdCa7sbEIVKKL5c31KLXTyt7/9TbmvMxnJsrXFry/1OH+8\nLWuPAFzs/A/06tWr9o2xFhgCBSKQc4bMOUhb4YV9wQUXaDWeli1bFnhq263aCGy88cYawEJkPPnA\nnl6SGr7MFL1QjhF3BCbpNm3aOOomjxkzRotP+H0yl+3atctc5TbYYIO0dZgI8a9SQQq56qqr1OXB\n8/Poo4+m7et/bL/99qrY/e+oJS9XLDTFyLPPPqtUm9lqHWc7V6nHZTufra8+AhTGITARkpokuF2q\nj6BdsVYI5FXINIxi8PiRKXRPTVqT+CJAQBYmamoI8508cj4rrbRSqtEEuyy00EL6m9krM1Bmu82V\nK6+8UukJw0Fhbdu2bVKuMXwdCl/kk3nmmSffLmnbqWHsK0Klbcjzo9Tj8pzWNlcZgWOPPVYHmX36\n9Knyle1yhkDzEChIIUOuT/k+/IGYJDfZZJPmXdWOrhgCzJL53HTTTaqQqXkM61pYmMVCb8msmPxM\nIoaz5e+Gj8v1HWVGmhRpQj179sy1a9q2ShCHYEYHA/KFvVCqkbKPI0eOVNKSrbfe2m9KLUs9LnUC\n+1JzBLAOkUfv+atr3iBrgCFQBAIFKWTOt8cee2jBe2Y/r776qtWDLQLkau/KPTrwwAMd/tlx48Y1\nIXc555xzHKbZxx57TF0SDz74YLOb6OsDk8dcjEJmVk3Zx1zCoKEY0zPVfeAvDgsmfALbmD0RlBal\nkEs9Lnwd+147BH7++Wd1r5Hm1Llz59o1xK5sCJSIQMEKmfPjIyRPdeDAgVo4oMRr2mEVRgBLxkkn\nnaQBV/how6QIn376qbvwwgt1Bu1np4WU2fSpUMwyo4TgsZVXXlmDw5hp+nOzL+bzzTffPC0S25/j\noYcecrxIcwmFTopRyMz8
 M4VsgWHDhrkvvvgic1Pqd6nHpU5gX2qKAPeYZ+mSSy6paTvs4oZAqQgU\npZAJ7LnooovUlwwpAoxFJvFDYP7559foeNwMDzzwQFoDfUlETNkEX5G69Nxzz+kslW2wGzGbRPy+\nfIegnwAwjiOCGnYqT6tKmU6eh1NOOcX1799fZ5/QVBJUhsKlfnE4LYrzeeHaJoZAcxFgMDVo0CAN\n5mIAZ2II1CMCedOeMjvF7IfZDpSB+WY2mcfa7+ohcOSRR6rpePnll0+7KKU1Dz74YDd+/HgdUBHU\nheUD5QtVKmlN559/vh5DcBgmb4RoVSK1ye8knYTUIPzFnJ/ALNjc+vXr58444wxHVDdpUdTVJhWK\ntpgYApVCgOePZxo3Da41E0OgXhHIWn4xV4emTZvm1ltvPX3hDx06NNeutq2GCOAzJSAvSoi8Dufn\n4selVGI+wWQNcQbHssQc7v3H/lhmz//617/UhJ3t+n7f5i5JbYGrmKAyn+bV3HMWejwDFpQAFoUo\nys5Cz2P7lY7An3/+qSQ4VHWi9nb4mS79rHakIVAbBIoyWfsmEqXLixDTJYqZPFOT+CGQSxlmvrgK\nUcb0EHM4HyRbOhL+YwKnqin5AsMq0RaUgUltESBWgohqiGUyn+natsyubggUj0BJCpnLECx02WWX\nqd8QNqYdd9yx+KvbEYZAMxFgUMDsFPM5kbUbbbSR0ns287Q5D7/55pvd7Nmz1YfOtY18IidcFdsI\nVey1117r7rvvviYkNRW7qJ3YEKggAiWZrMPtOeiggzS384UXXqj6rCjcDvtuCBgCjYMA5Dbdu3fX\nmAUf89A4vbeeJhWBZitkTIXQMEK8QKDQKqusklSsrF+GgCEQAwQIGtxmm23Udzx8+HCzUMTgnlgT\nyoNAsxUyzSBAiH8QiBVQypmRveVpqp3FEDAEGh0BiGe23HJLdU9QySlbHEOj42T9r08EyqKQ6fqs\nWbO
 UhpE0F3JLLRewsAeCSGXwIo+S0ob16Isn13mJJZbQQRmFIKgiRd4xftaoohJEQ/N8UH2q0tHJ\npHGRkkUkdiES1WZ8xBRVoTY4+dheKn3viByHyQxmNfLFyfeGurZRhZKhpFyutdZamo7ngwsbFQ/r\ndwIRECKIsonUzQ3kJRtIkFfw2Wefle28ST6RcEgHhx9+eCCPViBBKnXZ1a5duwbClx1IXrr2Qxix\ntB/CABZIKkogXNm6XqLyA0kVCoQpLBClHYhiDiQ4MBCKz4r1W9ibAgn2Kvj8tFmoYQPJJNA2c2+k\nOlYghCeBDCICqYwVCFeynq/S947r8FyIOygQ0pVA3EEF9yNpO8rMOJAyoIHw6AdikUta96w/hoAi\nUDQxSK4xSevWrdVkTQoNRe8//PDDXLvbNkEAKtJwdaR6BIU0OGa8pFkx4+U5QJhZtm/fXk2M/Gbm\nvP/++2vNZmgsISWh6hS80pUqJE/bqOccFq6dTWgzkdrUlkZgM4N9jJKV+C6ZQcPV/d5771X83i27\n7LLaBrClDx5XXdlAf+Bk9zNjOMqp/W1iCCQRgbIqZADi5UEEJOY9mTk1u4pQEkHP7JPnia7X9Jk2\nQqnpqTH5zr0PSzazNAqHfHZKNO6+++6OAJ1yC/za4fY888wzBdVWjmozsRE777yzFqnwBTkqee/A\nElcA+bVRuJYbqziejwIouHJQyI888ogp4zjeJGtT2RAoOQ85VwsWX3xxrbazyy67KIXiPffcoyQi\nuY5J+jZmV/iKYbrCTyymz7xdxmeGD/Ttt99WiwN4hmXGjBlu7NixjiUlFJlt+yj3XNvC5yjHd5Qe\nPlaE7145F3JurCnk9UKzOWTIELfXXnulDiNYkJcwBedRqqS5hJUrdZwpp3jMMcfobHvUqFF6bcpN\nevYwFJkPMkQZQw/KwIfylAwIiqlMRcM82Uq+ghywlTEwfeONN5TNDOsAs/WZM2e6
 0aNHax9pB8Q6\nG2ywgdLQwvuNXxraUepX4yMFF4R+FIOrHlTnf3geoGPFSsF3P/ip825Z8w2BrAhURCFzNV5cBCod\nffTR+hKkKMVpp52WtSFJ3kBQDi8TqtGgZDGJgstVV12VtdtXX321Q8E8/fTTburUqfqShrPX80IT\n8INi56UPMxYvfASFnGtb1AUxCeZjnUJBhJVh+DwoFT+j7NGjR0pphffJ9R2FNO+882q5yD/++EOx\nIoiJPg0YMEBN+piZKW6C6RizN0rtkEMO0ch+cb7ooIUof/i2qegEpzbCAAGzOcJsk7ZyD5iVM3As\nRlCW1JFGoso3+nPBCw5ZDlWuTj/9dEehDVw4DCyWXHJJHSxQIpD+sUQw3aPkKYvp17G+T58+LPS+\nUuO5EYRn8eSTT3bXXHONO/fcc915552ng6hG6Lv1scERqIYvXf6xAuE8DiTSNZCZQzUuGZtriGlT\nA4TCDdp1110DUcqpVeKP1OCdW2+9NbVutdVWC8S3nPotptJAFHDqtxSECKROcOq3cEcHYonQ37m2\npQ4IfRFlqteXf4WsS4meDh1R3FcpSKLnFUalrAeKotR9Xn755UBy2zUwUF7GaftLQZNAFHcAXogo\nOz3mySefTO0nVoJAqpClfmd+AUcZWGSubvJbopn13KJUA/F1B7RdZuiBzOgDGUil9o+6dxwjM/RA\nBlC6H4FtYPvKK6+kjqOdMsgJRMmn1slgK5CBSOp3I34RH73iLINMxbwRMbA+Ny4CZfchR41vKAqP\n6ZFZDX5lavI2ipAGxKwxLKQJMSvNJcx8qVuMEPyEeRbyFS/MwJhNkc7DzJCZoCh63Zxrmz8+vGTm\nTSGKXB9m95UUX+qRmSKpUpMmTXISUZt2SQhoSKu77bbbdL2vuUx/vTCLlgh//zNyWYyvHlpGLBkU\nLsDPzez7+OOPjzyvX4nZnapYxFPgouA+IeH7B55YPnx5TGb
 fpGcxg29UAWNM9GAHn4G3DjQqHtbv\nxkOgKgoZWPH/4UfFLIeJ0tfSTTLkmN6IxsX/FxYUQj5/GP5GmVE5BjOYOvERh/2WmEwx6+GfZ9vt\nt9+eqtaUa1u4Hf47ii3fJ197/blKWWJipzoUwUvkmDIAQTKjaRnMIeCRTag+JePrbJt1fTEKmXKj\n+LhxuZADvNRSS+U8NxvxX6OMMbeSR0yfkPD9Q7njXqBmNcKAtVevXvq9Ef/gimAAhp8cv7vVWm/E\np8D6XDEfchS0YoZ1cF5ToYXR7xFHHOHwlSY1wR/FwEsYy4D3aUbhErUOvzMzK6JMUZY+qtfvy0t/\n4MCBOtDBH009WAK58NPn2uaPDy9RGvmqJYl53HXp0iV8WNm+E+yGMAOm7S1atNDfWBG8EmYFfmyY\nmfAFN0eKUcilXAcL0JZbbqn+biqi4bPOFAYO/B+Q8kb/GaDiM200YTBGLADxEgxgiAHgGTAxBBoR\ngao/+UTVXn/99Wqqu/feex2BKkKwkEjsmVUyOyJSmhlgWEj3IRI3SnihY67GHO3NsuHZFcdgtmUd\nKSEwOEFdKr5jPV2ubVHXI7oX02muDybkSghmXCo1YXIfPHiwXqJTp0669IraXxdTJqZdqjqVKijj\nfAFsnDvfLDvX9QlEo50oYyTz3vljKcxCdDr70y4CvhpJhPhEA+74/+A7CtmUcSM9AdbXTASqrpB9\nA3bbbTelA8S0h6mKkTH+waQJEaK83EllIVJ43LhxWtSedV7ZUuAe8X5Uv2TA8sMPP6g/DeUEKQXb\nSAdCkUGSgBDRTn6sN6fm2qYHZPzh3AyKcn2YgZcqU6ZM0UPDAxCiqUlZwpXBII0ZkldIREUTaUy7\nwv5gat5CtynsWXo+sEHCz823336rs/1sChWCDXzmDJAoai/sYnqOzD/M3BDf9szt/nfmvWM95xTW\nOjVD055Bgwbp7tOnT9cIeH8s9x/rBu
 lY4XQvvz2pS55f0pm6deum//tE1GOBMTEEGh4BeXHVVGT2\nEMgLKxB/YbDOOusE4meuaXsqcXEoMSXFRiNtiWiWmWDqMkQVi6lWt4lvPRBfom4TBRjIDDsg2pr9\nZfaqEcbiHw4klzUgAlmCmQIiqomuFl9zIL43PTbXttSFq/CFdhIJLb5h7Z8MvjSClmhlCXQLDjzw\nQG2/BJM1aQ3R+ESZr7322sHQoUMDItA5xlOyStCbUknKP3AgM+wA2lYhFgl8xLjMOtMimP0FRPkp\nrtwPqaXrV6eWtPmCCy7Q55Fzi4UjuOSSSwKZVaf28V+y3Ttxy2gENRHZkjuubSbyW0ztgfj6/eG6\nJBIbSkgZoKStT+oPIuKJLpfBYzBixIikdtP6ZQiUhEDZiks0d2SDmRYT3oQJE5TogRqnBPkkRTBb\nEqELSUWhZjlmEmEM8PMym0R8vi5+Y9ZRsMFLrm1+n3pZMgMlMI5gH0/w0dy2c07uQRjb5p4z83ju\nNxYBosYR+e9UMzb51mERBaW55gSNJVl4ToksFy5zzQa48cYbXatWrZLcZeubIVA0ArFRyLSclxbR\nwgQmEbxDBGojmfKKvnt2QN0jQHAjz3k20pV67yADE5QvLinIYwhcw71iYggYAk0RiJVC9s2jlCNR\nyWLq1WhVgsDILzUxBJKAwHHHHae+cXz+DDy9jzkJfQv3gSh5osgJxiOinMwBTz0a3s++GwKGwF8I\n1CyoK9cNIO0FrmH+oQncgSyBFCmCcUwMgXpH4Ouvv9YgNshexD9d791p0n6C5fr27atpcqSoEbQF\nfagp4yZQ2QpDIA2BWM6Qwy3EjA0nMCYviPkZaUtt2CakEeFj7LshEHcEwvEAcW9roe0jolwC4tRE\nDefAZZddlkr9KvQctp8h0MgIxF4h+5sDBSH+J0baEImgoGFO8kFOfj9bGgKGQHURIPhQItZVAZPK\nRUAmueWQn5gYA
 oZA4QjUjUL2XWIUDj80Jm1M21TTMcXs0bGlIVA9BHAnQUYD0xtkK9CMYsHKpDyt\nXovsSoZAfSNQdwrZww3xwqWXXtpEMSeVhtP325aGQK0RQBEzI0YRE0VNkBrKuNhylrXuh13fEIgb\nAnWrkD2QYcVMLi7MR/3790/xIfv9bGkIGALNQ2DatGmqiLFOEduBIj7xxBNNETcPVjvaEEghUPcK\n2feECGzMZ+Q8EjADyQijdiohmRgChkDpCLz99tuaKy1MaMq9TQUysh5sRlw6pnakIRCFQGIUsu8c\nPMIUV6CGLTzIkBAwa4ZL2sQQMAQKQwBT9NixY3WQC2e6UJhquc+9997bZbKNFXZG28sQMATyIRDL\nPOR8jc61HapCRvAUe6dWMDNn6gNTdQm/ly8GkOscts0QaFQEyJGGxpPqW71799YqVCjmd955R4ui\nmDJu1CfD+l0NBBI3Q44CDWIC2JAoeYjvCzpOqs1stNFGUbvbOkOgoRDgf4La25S/pAIXHN9S+MMd\neeSRjnxiE0PAEKgOAg2hkD2URIdCbs+L5/3331czHGX+qDtMWT4TQ6CREKAEJSVB+VDchdrkBETC\nsuVLgzYSHtZXQ6DWCDSUQg6DLaXznJT1c9QchtiAurzMCnr16qXEI+F97bshkBQEeNbvv/9+HZiO\nHz9eKy4xIOXZl/KnSemm9cMQqEsEGlYh+7sFA9ioUaNUORO8At8uSplZgtQptgAWD5Qt6xYBAh3H\njBnj7rvvPjdu3DjNHe7Zs6cq4e23395J3e267Zs13BBIEgINr5DDN5Oc5gceeEBfXFJkXsvFEaVN\nibxtt91WK/OE97fvhkBcEaAWM8FYI0aM0CWpgAQ3MtDcddddHUUfTAwBQyBeCJhCznI/vvjiC32Z\nMat45ZVXHKQjzCaYPe+www72QsuCm62uHQJESDMTfvjhh92TTz7psP5svvnmqoR32203zSGuXe
 vs\nyoaAIZAPAVPI+RCS7VOnTlWzNi+65557TiO1u3btqsoZ05+RjxQAou1SEQSoNTx69GhVwsRFUGyl\nW7du+mwyeFx66aUrcl07qSFgCJQfAVPIRWL63XffqR8O5Yw/jrzmVVZZRYPCCAzDLMhs2sQQqAQC\n33zzjc5+H3/8cUfMA3SWLVu21DKHKGCeQas7XAnk7ZyGQOURMIXcDIz/85//uBdffNHxcnzsscfc\nG2+8oUQKnTp10hcjyrljx45WIrIZGDf6oQRkEc/w9NNP63M2ceJELWu4ySabaNAhCph8+jnnTBzH\nT6Pfeut/AyJgCrmMN33mzJlps5fPP/9clTEKGl/eFlts4Tp37uxgEzMxBKIQwALz/PPPq2sE98jr\nr7/u/vjjD7f66qtrYKG3wkDeYWIIGALJQsAUcgXvJ2QLvFRhQeIDEQMpJhtuuKEqZhQ1H0zeJo2H\nAAxZkyZNcvh++WBtgaISHul27dqlBnEM5pZddtnGA8h6bAg0GAKmkKt4w/H3oZgnTJigL2Cq6GD2\nXmqppVQxY97ms8EGG1gwThXvS7UuhaOT4OsAAEAASURBVMUEkzNR+yjgV199VWMQqOHNPccMvdlm\nmzkCBvELmxgChkBjIWAKuYb3m7QU/M4vvfRSapZERDfSunVrt/7666d9MFuar7CGN6zAS2Ni/uCD\nD9ybb76Z9pk1a5bGGMAPjfL1FpL27dtbjnuB2NpuhkCSETCFHLO7ix+aFzkzKf9C//DDD9WPCL9w\n27ZttXIV1aswa7LkBW9VeKp/IxlQcW9Qvv4DR/rHH3/sfv/9d70nlC1kYEVwFu4L/MOWJlf9e2VX\nNATqAQFTyHVwl3jxk2+KfzH84p8yZYr6G/FL44dGMfOy57tf8t0KBZR+k+F+xvfPZ/Lkyakl5T3D\n+IO3HyAxSFpvvfV0sDTPPPPoxb/99ludEWP5IGKafGETQ8AQMATCCJhCD
 qNRZ9/9DI1ZGTO1sMKA\ntQmZY4451Py90korueWXXz7yQ8CQVxx1BkGzmgudJH59WNmiPihc8n4RcAQnP9Bhueaaa6oSxpVQ\nCH4Mpoiy79Gjh5YCbVbj7WBDwBBIHAKmkBN3S//qECbS8KyOgCI+XvF89dVX7s8//9SdUTaLL764\nVv5p1aqVLgkq8t9btGih2yE84cO+LBdeeOFYoEe0MjNZSFr4kDrkl7gAZsyYoYqVZfg7+3hBoVKC\nk0HLCiusoMsVV1wxZW1YeeWVy1IFDEpLqFfPPvtsd9555/nL29IQMAQMAWcKuUEfApQxxTRQ0NOn\nT1dFlamwvPKaPXu2+rAzoZprrrlUMcMMxQfTuP9gRl900UX1N9/Z1y/57j8EqdGWbB8CpCiUwOeX\nX35Jffe/GXhQ55pUoUxByTKYYGARHmD4gQZLZr0oYSgmqxUwd9NNN7l+/fq5e+65x+21116Zzbbf\nhoAh0KAImEJu0BtfbLdRfOGZp5+BsvSK0i9Rlrfddpv6UVF4KNVsChdFiiL0CjpTcaPESQvKVPj+\nNyQrmTN3P4Nnn7jKSSed5G644Qb3zDPPqBk7ru20dhkChkD1EDCFXD2sG+ZKpPcsueSSSicKs5RJ\nUwQYiFDak5Q38pLbtGnTdCdbYwgYAg2FgBHgNtTtrk5nYShDjIEsO95YBYYPH+6WW245DfIK+7Oz\nH2VbDAFDIMkImEJO8t2tUd8IJkPhENltkh0BzO2UTsRH36dPn0g/ffajbYshYAgkDQFTyEm7ozHo\nDzNkAqUKSQWKQXNr2gRwQilDGHLsscfWtC12cUPAEKgtAqaQa4t/Iq/ODNnM1YXf2g4dOri77rrL\nDR482F1zzTWFH2h7GgKGQKIQMIWcqNsZj84wQyZv16RwBHbZZRd3ySWXuBNPPNGNHTu28ANtT0PA\nEEgMAqaQE3Mr49MRmyGXdi9OPfVUd+CBB7o999zT
 UQnMxBAwBBoLAVPIjXW/K95b0nmoWGUz5NKg\nxmy98cYbu5122snBpmZiCBgCjYOAKeTGuddV6SnMX9R4Nh9yaXATCPfggw8qw1mvXr2Umay0M9lR\nhoAhUG8ImEKutzsW8/b6HGSbIZd+o5ZYYgn1I1MsZL/99nNwdZsYAoZA8hEwhZz8e1zVHuI/hrKS\nMoMmpSNAKc2RI0dqStRZZ51V+onsSEPAEKgbBEwh182tqo+GopCNBrI892qLLbZwFKK4+OKL3dCh\nQ8tzUjuLIWAIxBaBuWPbMmtYXSKAydr8x+W7dURdf/TRR+6II47QQDmUtIkhYAgkEwGbISfzvtas\nV8yQzX9cXvj//ve/OwK8dt11V/fxxx+X9+R2NkPAEIgNAqaQY3MrktEQmyGX/z7OMcccbtiwYW7V\nVVfVdCi4r00MAUMgeQiYQk7ePa1Zj6iHTO6szZDLfwsWWGAB9/DDD2saFDNlUstMDAFDIFkImEJO\n1v2saW+mTJmi1zcfcmVuA5HrY8aMca+99prr169fZS5iZzUEDIGaIWAKuWbQJ+/C+I8RmyFX7t6u\nt9567t5779Wo60svvbRyF7IzGwKGQNURMIVcdciTe0H8xy1btnQLL7xwcjsZg5716NHDXXnlle6M\nM87QXOUYNMmaYAgYAmVAwNKeygCineIvBCzCunpPwnHHHec+/PBDZfJaaaWVHCUcTQwBQ6C+EbAZ\ncn3fv1i13iKsq3s7rrvuOrfZZpu5nj17OjjETQwBQ6C+ETCFXN/3L1atZ4ZsAV3VuyVzzTWXu//+\n+12LFi1UKf/000/Vu7hdyRAwBMqOgCnkskPauCdkhmwBXdW9/4suuqhGXk+fPt3tvffejvKXJoaA\nIVCfCJhCrs/7FrtWf/PNN44Zms2Qq39r4A5/6KGH3BNPPOFOPvnk6jfArmgIGAJlQcAUcllgtJNY\nylNtn4HOnTu7IUOGuKuvvlo
 LUtS2NXZ1Q8AQKAUBi7IuBTU7pgkCmKvnnntut8IKKzTZZiuqg8Be\ne+2lhSiOPvpotVRsu+221bmwXcUQMATKgoDNkMsCo52EGTLKGKVsUjsEzjvvPNenTx+3xx57uA8+\n+KB2DbErGwKGQNEImEIuGjI7IAoBS3mKQqU26zBdr7322lqI4ttvv61NI+yqhoAhUDQCppCLhswO\niELASEGiUKnNuvnmm0+DvIIgcDvvvLP77bffatMQu6ohYAgUhcAc8k8bFHWE7WwIRCBAdPVhhx3m\nOnbs6D7//HPdA8VAZSKWr7zyinv//ffdEkss4Xr37p06w5NPPulefvllXd+3b1+35JJLprbxaD77\n7LPuzTffdOTcrrnmms78oil48n4B7y5duuhM+a677sq5/x9//OGeeeYZN+ecczoCxEaPHq1MYHvu\nuadbY4010o798ccf3SOPPKImcdwU3bt3t9iBNITshyFQIgIoZBNDoDkISCnAQHzHwfDhw4Off/45\nEHMpg7xg8uTJaacVhRoI3aOuk1lbcOihh+oxonCD3XffPVhqqaWC9957L3XMmWeeGdxyyy36+9VX\nXw1E2ae22ZfCEHj88cf13px//vlZD5g1a1Ygilfv2T777BNIPnMg1JzB0ksvHSyzzDLBzJkzU8dy\nr9Zdd93gwQcfDGbMmBFcfvnlgXCXB3fccUdqH/tiCBgCpSHgSjvMjjIE/oeAmKv1ZS4zXV0pdXv1\nt1emrBTiClW6/ihe5BKA5H8GMqvWY7bbbjtdJwQXqqBl1pba58ILL0x9ty+FI3DjjTcGc8wxhw5+\nsh3166+/Kv5bbbVVwAAL8fdRZsv6m0EUg6pzzz1Xf/s/KPB55503bTDlt9nSEDAECkfAfMglWhbs\nsP8h4HOQPSnITjvt5NZaay2tSCSPou54zz33uP333z91ENWKJk6c6I466ij9XHzxxa5t27ZOZmu6\njygQ/Y
 0Ze9SoUbrOSC9S8BX1hdrJxx9/vDvooIPciy++GHns/PPP78B81VVXTUXKt2vXTvf97LPP\ndPnoo4+6SZMmuU022STtHDKIcr///ru77bbb0tbbD0PAECgOAVPIxeFle0cgQIQ1JRfF5KxbebGf\ncsop6mPE14jgK95hhx30+3fffeegehSTtbvhhhtSH172+Jq9XH/99Q5qSAKTunXr5jjOpDQExCKh\n/newnDJlSkEnwW+P+EEVPmkks7xm165ddb2lWSkM9scQKBkBU8glQ2cHegSYIfvZsV8nvki33HLL\nuSuuuMKJX1jTcHyOMoFDyDvvvON3j1yuv/767o033nD9+/d3//znP92GG26YmkFHHmArsyIA5lgp\nxCesQV4//PBD1n2zbaCIBZI5y6b84zzzzKOBedmOtfWGgCGQHwFTyPkxsj3yIMAMObOohPgU1UxK\n5C6zZcylXpj1sr/4Np34Lv1qXRINjImUVJ0777zTLbLIIjqDHjt2rPvyyy/dyJEj0/a3H4UjwMx2\nzJgxOqiBPOTPP/8s/GDZs1OnTrr/c889l3bcu+++68TvrNHZaRvshyFgCBSFgCnkouCynaMQiJoh\ns98RRxzhFltsMQc5BUQVYUFJU8N366231tkv/mQJ8nLff/+9W3HFFdVMOnjw4JS5lNQaTOLeLB4+\nl30vHIHll1/eSbCWGz9+vDv22GNTB1IYBNM0vmAvnlTED5rat2/vDjjgAIdC9n5l9n3++efd6quv\n7g4//HB/qC0NAUOgBASM57AE0OyQdASYIe+7777pK+UXs1v4lSVNpsk2Ao3IVx44cKCTyF4NJCJo\n68gjj0zty3kpKbjbbrup35Nt+EBNmofARhttpNYHSTXTwLlDDjnEnXXWWXpSSZPSWTTugYsuukjX\nYbXgHnXo0MExSGKmveOOO6rlg/xl4gSeeuoph1XExBAwBEpHwIhBSsfOjhQEmFmheDG
 F9ujRowkm\nzGxHjBjhFl988SbbWMHsixk2JuwFF1wwbR9e9tT3/eqrr3TWnLbRfjQbgUsvvVQVMTNmFGwxgiWD\n2ACsGcy6TQwBQ6D5CNgMufkYNvQZfMpTpg8ZUN566y0N9sqmjNlngQUWaGLOZj3ig8B46ZuUH4HT\nTjstxcaF2Xm99dYr+CK4ImABMzEEDIHyIWAKuXxYNuSZMCsjXiG//vrr7tRTT1UzNZHRDz30UEPi\nUi+dvummmxz3sGfPnkph2rp163ppurXTEEgcAhbUlbhbWt0OMUPmJc5MF8HELDSXbujQoWoObdOm\nja63P/FEgHQlocFUvnE4xn0AVzxba60yBJKNgCnkZN/fiveO2VU4B3njjTfWtBoYt6jJaxJ/BMgv\nJq3sk08+UTY1TwQS/5ZbCw2BZCFgCjlZ97PqvfEBWeEL4/v15B/h9fY9vgiQtkSONzSlZ599dnwb\nai0zBBKMgCnkBN/canQtc4ZcjWvaNSqDwBZbbOHwKZPuJNWbKnMRO6shYAhkRcCCurJCYxsKQQCF\n7AO6Ctnf9ok3AjCqffTRR0rywX3dfPPN491ga50hkCAEbIacoJtZ7a6QH0wQUNiHXO022PXKjwAz\nZKKud911V/Url/8KdkZDwBCIQsAUchQqtq4gBHwOsinkguCqm52o1gWPODNkyF5mz55dN223hhoC\n9YyAKeR6vns1bjvmaugSqepkkiwESGODwQsLCNSlFI8wMQQMgcoiYAq5svgm+uzMkCm9ZxHVybzN\nlGocPXq05pWHOcaT2VvrlSFQewRMIdf+HtRtC6JSnuq2M9bwSASo8DR8+HB3++23u8suuyxyH1tp\nCBgC5UHAFHJ5cGzIs1jKU2Pc9p122sldccUV7vTTT3f/+Mc/GqPT1ktDoAYImEKuAehJuaTNkJNy\nJ/P34/jjj9f61pTZhK/cxBAwBMqPgCnk8mPaEGekkP20adMs5a
 kh7vZfnbzuuuvcZptt5nr16qX3\nvoG6bl01BKqCgCnkqsCcvItMnTpVC0kYKUjy7m22HkGJ6mtbY8b++eefs+1q6w0BQ6AEBEwhlwCa\nHeK0ZB84WA5yYz0N1EEeM2aMzpD33ntvHZQ1FgLWW0OgcgiYQq4ctok+M/5jXs5LLLFEovtpnWuK\nAFYR6lw/9thj7pRTTmm6g60xBAyBkhAwhVwSbHaQRVg39jPQpUsXN2TIEHfllVe6m2++ubHBsN4b\nAmVCwIpLlAnIRjuNRVg32h1v2l9M1hSiOOqoo9R10a1bt6Y72RpDwBAoGAGbIRcMle0YRsBmyGE0\nGvf7gAED3B577KGfSZMmNQECUpH77ruvyXpbYQgYAk0RMIXcFBNbUwACNkMuAKQG2QUWr3bt2mkh\nim+//TbV6/PPP98xi77mmmtS6+yLIWAIZEfAFHJ2bGxLFgS+//57rQBkEdZZAGqw1fPNN58GeQVB\n4HbZZRf3ww8/uL322suhkJEXX3zRyjg22DNh3S0NAVPIpeHW0EcxO0ZMITf0Y5DW+ZYtW2o61Ftv\nveVWX311d//99zsUNDLPPPNoAFjaAfbDEDAEmiBgCrkJJLYiHwL4j6mZS6UnE0MgjMD888/vZs2a\n5f7888/Uako33nrrrWnrUhvtiyFgCKQQsCjrFBT2pVAEmCFTAxlTpYkhAAJPPPGEmqt/++0398cf\nfzQB5ZtvvnGPPvqo+pmbbKyTFQwyYCf76aef9PPLL79oX+kvH7b775Qkhdlsrrnm0iXf+VA/fOGF\nF3YLLbSQLqk7bWIIeARMIXskbFkwAsyQjTKzYLgSv+PgwYM19QkTtTdTZ3YaZXTLLbfESiETgAYf\n+xdffKFLBg2smzlzpn789++++04V8b///e/MbjX7N4rbK+cll1zS+c9SSy2l31m2bt3aLb/88joI\nZiCMFcIkmQjMIf9Afzl6ktk/61UFENhhh
 x3c0ksv7YYOHVqBs9sp6wmBGTNmuO222869+eabeZvN\nbPHLL790+JurIZjOJ0+e3OTz+eefu+nTpztm814WXXRRfaZRiF4ZeuUIG114VusV6IILLqj+8aiZ\n8H//+9/UbDk8c+aafpYdXv74449NBgIMDBgUfPXVV3ou39YWLVqocm7Tpo1bbbXV3Kqrrpr6sA6f\nvUl9ImAKuT7vW01bveaaa2oU7XnnnVfTdtjF44EAygcf8amnnqrKJspkTUtRyAMHDnQnnHBCWRvO\nzPbdd9917733XtoHhYygMFdccUVVWigwvjPTDH9QuHEV8GXgw2zef5jVY6nyAw6UNwLGBFuuvfba\nqc8666zj2rZtq+byuPbR2vUXAqaQ7UkoCgEMKvi9MD/ut99+RR1rOycbAUy755xzjrvhhhtUMUQp\nZiKwYfcqVZjZvvbaa1qT2S+//vprPR0zx7AiWmONNVQJE3yIUk6ykIqIcv7kk0/cBx98kBqYgDX3\ngf6TK96hQwe30UYb6bJ9+/Zm/o7ZQ2EKOWY3JO7NYWS+wgoruPHjx2tt3Li319pXfQSYrfbv31+f\nEaLxM71iL7/8suvYsWPehhGd/frrr7vnn39ePxyH+ZZzMtP1imX99ddXRYyv1SQdATD88MMP1YLw\nxhtvKJ5gigJHSTN7hpecOtd8+N82qR0CppBrh31dXhlFvPnmm6vpbNlll63LPlijq4MAucjHHXec\nmlt9GhT+zYMOOsjddNNNTRqBf/WFF15wTz31lCrgV155xf3666+uVatWbtNNN1XFgRLecMMNHT5f\nk9IQYIDEbBrFDMYMeCZOnOhQ3pjzUcz8j2+77bbGNVAaxCUfZQq5ZOga88A77rjD9evXz5HywUzF\nxBDIhQAK9ZJLLnEXX3yxzpQxnxIMRbAS0cLvvPOOpkyRNsVgj+eK2S8KAcWAIsb0bFJZBMDdK2dv\nkSDojGwKFDOfrbfe
 2uEWMKkcAqaQK4dtIs88QIoJUCwAP5WJIVAoAlOmTHHHH3+8GzVqlB6y5ZZb\nqimVqGuimnnZ+xe/Ec4Uimrl9mO2DOUpAyU++OuZWXfu3Nn16tVLPwR3mpQXAVPI5cUz8Wfbf//9\ndXbzyCOPJL6v1sHyIDB79mzlun744YfduHHjNN1okUUWcaeccormJW+wwQZmbSkP1BU7CwF7uBJG\njx7txo4dq+8AAvRQzvCX44c2i1nz4TeF3HwMG+oMXbt2dURnXn/99Q3Vb+tscQiQV8ts+N5773WP\nP/64Rl1vs802+gLffvvt3T/+8Q+tBFWtnOTiWm9750KANCx8/ShnBlmU3SQYrE+fPq5v375u4403\nznW4bcuBgCnkHODYpqYIkLt54oknupNOOqnpRlvT0AjgH2b2NGzYMIcFhUCu7t2760u6d+/eFoiV\n0KeDOADcWHxIuyIPmmpfBx54oMYDJLTbFemWKeSKwJrMk0IdSEDOgw8+qGaqZPbSelUsAhByUBP5\nzjvvdJB04A/mhbzrrrs6WK5MGgcBUquwitx9993KhoZF7eCDD3Z77LGHUoQ2DhKl9dQUcmm4NeRR\nmKbWWmstpUnEbG3SuAgwOLvnnns0fYnoXKJxDzjgAJ0VWVBW4z4XvudYR3BVMFDDdUFRDczZRx11\nlCNmwCQaAVPI0bjY2ggEMEP26NFDSQUsDzQCoAZYNXXqVDdo0CB32223OfzEu+++uzv00EMdUdMW\n1NMAD0AJXYTClBkzRUjef/99TWU7+uij3W677Wa82xl4Wj3kDEDsZ3YE4M6FcN+UcXaMkrqF3NSd\nd95Z/YO8XCH8+Oyzz/RFu9VWW5kyTuqNL0O/yF0+5phjlM7z6aef1iIe++67r9ZTv+CCC7R+dhku\nk4hTmEJOxG2sTieog2xlF6uDdRyuQt4pkbSQc+ALxD9M4A45xXBWU/HLxBAoBgEGb8SgMLgn6Ouq\
 nq65SdjAKjlCFq9HFTNaN/gRk6T//NJgnUcBETbLkHwjqQ17KJslFAP/f8OHDlWELEyNuitNOO02Z\ns5Lba+tZLRD46aeftFDNlVde6SgSss8++7jTTz9dq1PVoj21vqYp5FrfgZhen4o9+HnCQmAGrEqQ\nAFCD1StquIUxZZvUNwLMiEeMGOFgY/v44481TxhFTAUlE0OgkgjADIYr5NJLL9Vnj0py5557bsNZ\n5EwhV/Ipq+Nzv/rqq1kr8hC8w0zZl9djFkW9VZP6RQCCB8zQVGrac889VSnDxGRiCFQTAUhHUMx/\n+9vf1EJ3yCGHuLPPPltrV1ezHbW6lvmQa4V8zK9LWlO2GrLMpH7//XdlXyLf1JRxzG9mjuYx8MJH\nTMAWCvjtt9/WF6Ip4xyg2aaKITDnnHNqnXW48m+88UalWqXYCEoZ83bSxRRy0u9wif3DPJ3PVMkM\n+bzzzivxCnZYLRGgrjVmwU6dOunAilziBx54IO89r2Wb7dqNgwCTAWbHH330kbvwwgsdLjSqfpHX\nzCw6qWIKOal3tgz9ovwdpukoYT2pCzaTikInvuuoOYw5EKsGfMTULH7uueccdYZNDIG4IcDEAJpe\nYhpgfjv88MP1WaUSVRLFFHIS72qZ+gRJvC8sn3lK1hN0YVI/CPzzn//UwiCXXXaZWjYwC0LOYGII\nxB0BgkkpaINLhQBS3CzUZacKVZLEFHKS7maZ+9KxY8dI8xCzY8yd+HZM4o/At99+qylr5IBi9iMI\n79RTT1U6w/i33lpoCPwPAah7qc981113acUwfsOdnRSxKOuk3MkK9ANfzcILL+x+/fXXtLMTeIEJ\nibQnk3gjQJnDI444ws0333zu2muvtaIg8b5d1roiEKDONjnLt9xyi9tpp510We9kNTZDLuIBaLRd\nUbwdOnRI6zazY4oImDJOgyV2P77//nu9T/jdevbsqbNiCsmbGAJJQYBKYjfd
 dJN75plnHCUg11ln\nHTdy5Mi67p4p5Lq+fZVvPL4aAiu8MGsmX9UkvgjAF7zuuutqtR2oLykEscgii8S3wdYyQ6AZCGyx\nxRbqWyZ1j5iI/fff3/3www/NOGPtDjWFXDvs6+LKBHaRc4wwO4Y+0/is43nrGCydf/75btttt1VS\nF0g+MOWZGAJJR4ABJ6brsWPH6kAU9sA333yz7rptPuS6u2XVbTCE7yuuuKJedK655nKTJ0/WKi3V\nbYVdLR8CM2bMUB7g8ePHuyuuuELrzuY7xrYbAklE4KuvvlLaV1KjrrnmGk2Vqpd+2gy5Xu5Ujdq5\nwgorOHw1CIn6Vny+Rjcix2XJJ6boO9W4JkyYYMo4B1a2KfkItG7dWiOxTz75ZHfkkUcqX0JmYGpc\nUbAZco47M3HixKx5uDkOS9ym448/3r300kvuoYcecjzsSZMFFligbhmqhg0bpjOA7t27uzvvvNMt\ntthisb49kyZNcmPGjHGYFLfeeuuatZXqQvPPP7/r379/1jaQp40JFBpZ3AAIgx6YoyBXWX755bMe\nWw8boKKkmAjlNDfZZBPtI26pTKFU4qOPPur4P9lxxx1dq1atMneJ7e/HH39cudlJ0Rw1apRbZpll\nYttWbZjwEptkQWDRRRcNBCT7JBwDic7M8gTEd7X4iwNJ+dBnU3KKAyFqiW9j/79lQtcZyIxF23zr\nrbfWtL1CCxsIbWjWNnzyySfBcccdp20dMmRIaj9hNtN1jzzySGpdPX6RgVEgSiqQAUfw448/Bvfc\nc08grqng2WefTevOJZdcEmy55ZbBhx9+GIg7JJC830CY3dL2ifsPod8MJP8+kAFU8MYbb8S6uTZD\nzjFeYrZx5plnur59++bYK/mbmB1jqo796LKEW0GBdKKSSZuoF/n3v/+tPjJmbzfffLOmN9VL25lh\nUrpTFLK6QGrV7p9//tmR1sesL5swQ27Xrp3DCgERjhe
 IVmCOCgv7EN1bL8JMd9lll9X74NtMwCb3\nBypVhFkxtbBfe+01dYmwjvtG7i8BU/VkIYDRq0+fPurSodZ3r1696E7sZO7YtShmDYKmrU2bNjFr\nVXWbk+T+L7744tUFs5lXk9mMvkx4IT711FMOvvF6EgID4yALLbRQ3magsBG/9AdkKmPyYBm4V0Mh\nY17+8ssvXefOnX1zSlpyDog1wgJ5DFznXmR2rIqY+AQv8NdTJ51UunoqLMP/uVg11KdMahTtr8b9\n8rgVujSFXChStp8hUGMEmJltv/32btq0aU5Mi2699darcYuad/lZs2Y58qSpPLXHHnsorSeKAnIH\nCtbjt6XiGArvrbfe0otBdOKj/gnUwS/IbIcoc164zPogQkHxf/311446zyhUzi8uqFSD2R9f9sEH\nH5xaxxdmh3B+o5zwcyPU//ZCahnYw2BHSiBt6927t+4DSQXX79Kli/bLH8t9QqkxKycOg75BY1pM\ngKSY0N1FF12kcQIDBw5stkIGR7jooaBEyeJPhtWNqGSEZ42I/Uylhd8dCwe+53pSyPSJClKkRjHJ\nwhrArPnYY49lU2zEFHJsboU1xBDIjgCKiiAocsKJpK53prSXX35ZOYjXX399VQrXXXede++999Qt\nQtAQ5kXMoyhklBfKAQWACRmFjFI87LDDlMKVNC/xcWpA2ymnnOJ22GEHHbigWCmCct9996niRjnz\nm+A3XsQLLrhgmkI+66yzVLFfffXVqpBQVIhXyHCA0wbKVFKrF4VMBgIKlzKBVNBiJsYLn0EAjHaY\nulkizMq9QvfrdEOOPwTB/f3vf3eYWbkeAxgGZdOnT1fzco5Dtd0Q+0QJVZPuvvtubZ/4VRV7BhSe\nzQ3TNW2NclNxf4jsF2dsCpuoa8R1HTN/rBwEq8JoFyuio1h7uGvcOIK6ZERV41bY5SuJgMwSgrgH\ndclsLhBFpIEp8iKuJBwVP7eYXD
 Uo6qCDDkpdS5SMrmOJCKGJ/g4Hfoky1XWPPfZY6jiJlNZ1BFp5\n8YFuDz74oF8ViKINZMabFvgmM8RAeI9T+xCkJbPqQF7QqXV33HGHnp+AJy9SbUjXiUL2qwJhiAok\nPTD123+RGXYgs+BAZsR+lQa1yWw/9TvbF4lpCPbcc89AFHsg5ulA/Llpu/q+i9LT9kQtJWI67ZjM\nHzxXMtvV47mG5O+mdvF4SzR5ap3/Iv5nPeabb77xq+pyOXjw4EAGW8HFF18cm/b/5SSJ61DG2mUI\nNDgC+Pkw3RLIRfBZ1IylHiEilcgLHMQIpDPFiE/xgibUC7NUJHz+NddcU32jzCq9YJIOi7yUlbc9\nbNam2hniZ8h8zzyOdUh4n7/WOK2oNXXqVJ1Rsw5TNabnXK4GYgN233133eezzz5z48aN09nodttt\n50+ry2OOOcb98ssvOT/M/nIJflRoJzHbQ6IhUeeOayKY5JGofmFlAAfPT6A71uEfiq5QcOWMM85I\nmepr3Q0zWdf6Dtj1DYEsCODX40WMUsa3udxyy2XZs75X49tDeNE3V6IUps+txYebTfBRowjDEqWM\nwtvD36P25Xy4FjCpy2xXfdz5onuJYBYrgAaS4ivGHx0lYOZxi9qeb93tt9+upvxXX31Vz4NpGwV1\n1FFHqVkcQiAkCjMCCynjGZcAvXx9zbWdADUC2U444QR1KRx66KG5dq/4NlPIFYe4/BcgGAFiA3wf\nvEggMMGfxoubVIWw8KJo2bKl4x+MfyIvjNZ5yRPYwgyMNIhySrY2lvMaST4Xyol0OzHx6uylmACg\nJOOSr29RitEfk23bH3/8oTNN/NpRku248L5R+6CwTjrpJFVy/K+JaT3vTIz/X/zlEI+gJPnfhJ88\nM6oaRfrkk0+Gm9DkO9en7nWUiDlefe1eqTNLJr2JWTP/u7wv8HlDnZspBHyFI68zt9fbb+4RxSj6\n9eunqVz46
 GslZrKuFfLNuC5BGBdccIHDHEa0I0EKCAElq6++uiOwZe+999ZoUSJZiVrdfPPN9Z8I\nsydC3i3HEsASNuXpxjL8ydbGMpy6IU4hpBQawUsgElGtjSReSWCmr4ZwPQrdE1RGZHaxgjLONrsX\nX7kOiAcMGKDmXwK+8knXrl2V+pHAKdrGLBlLCWZlLwSREVyW6yN+dL97k6X4wlXxhjcQLU7QIBhg\naYAqFw4Cgru8oLiohU7QXZKEQc8+++yj/QKbWokp5Foh34zrklqBUIwbn6Kns+TFsNFGG6VyUzGT\nQQ14ww036OiXGTQpIbx4SOnAPFUpydbGSl0vSecl9WTQoEEaDQylYZJk5syZ2h2/5AeDxvASS04b\nyf2/9957ddBJpDGzSwRrkFcQmE6RcO4sZn7En5Pv3uwaVvAcg4+V2TFy2mmn6RLfLNu4BtHZyPPP\nP+98e/21mCV64X+QggZEJuMH99djO8QjmEVJj9prr738IQUtmRWTysVsmHQjZszM3vj/RXm8/vrr\nOT/ZZvxcnFKFpDl5LFmH8sW/zaAeOfHEE9XqFlbsYMKxpE0lTUiJ4v0JGQpZDbUQU8i1QL2Z1+Rl\nRUAFJcf47v09/rThwBS/DlYd/pEIBPH/YH4mEmVu88eVuszXxlLPm/TjMG1iQiPICAKDJAn5096a\ng4LFWoNJlLQehNkeSoHn8eyzz3aUjyTgC/Mtvj2eYRQfgVHMFvGDIrhv4FsmzYl0JIQZD2lK7MeL\nFuE6WIZIsSJtCgXtU51QcPhsYT/D0kSAEyZbZrQSgqvBTig42oKgmNgXIceZfTp06KAKNJN0BN8s\nSjszMEsPLuAPSoJ8a6xOBFthNWmuXH/99ap4CH5jAIjLi/OTJ+2JUHCT8DwyoMe3DasdmDJYTKJQ\n9x1rIulwWAD8YK2qfY1NvHcMGxLntCf551bE5J8oEBN1Gnryz6VpCfLCS1sv0YS6XnIpdb
 2MtPV3\nOL2EDfDWkvIhiiGQB1T35Y/MCgJ5Cepn6NChKV5YmZUEQjCg68Xnmdo/VxtTO9X4S5zSnsRUGMiL\nOxDTYY1RicflhfgjEBOpNkZMqWlpS5VqISlKMkhIXVNmxAVdSvyuqbZmHvDEE08E/O+VSwptUyHX\nk9l8IEo2EItCzt1JceIeNIKQ2iaWjQCO+GqLBXVVdfhTvot5Hw5RnBAG5BOCuKh8guSqsoNPmdE4\nsxd81JAyMCuhjFmxhAfFtjFfH5K8HdMhfn9MnDLYSXJXC+4bZlo+iI+ULvjgEnfEauQ5mou5pk/B\nirosfONEWpdLmMmVS5gN4j/PJ5l0ofn2r+ftpNFhBSDQDWpa3HzVEjNZVwvpMl/HU/7xIsBkFiUE\na0GQT/DWTjvtpCZAzE4EeGUTzFOwI2E2bCPmcJiUiMT2ApUe/mdMWWGTDqZBUgfC5u9C2ujP2+hL\nzKX4KjHbYjI1qW8ECMqD9QpTMMos061U371Lfuuh1vSfUgL9SkXIFHKpyNXBcfi5UMCebADOYOji\ncgl+OOq9IviL8PERVRkWUimKJTwIH2/f0xFg0AQlI58kpZOk97KxfvESx9LE/4/3mzcWAvXfW0hD\niNPBOlgtMZN1tZCuwXWYsWJyLkYgn8C0zawYFh9SbojmDEsphAfh4+37/xDAVI0lATNZtpzR/+1t\n3+oFASLEyfWNIiqplz40ejsJoCMvm1xwJjfVKMNrCrnRn7qM/kM2QgQqbEH4M31Edni3UggPwsfb\n9/8hwCic6FY+SWA++l/P7Jsp4/p/BrbZZhtlMCN1DcXcokWLinbKTNYVhbc2J5fIwJIuTOoI5mqq\n3KCMkXCeYvikpRAehI+373+VuIMw4uSTT1a/faNhQrpSPaXQkGeMNQPXT1yF/2FSvwgMpMRkoUIQ\nJ88hwWekp0UJed9UhCIFikpcpFA2glx66aWaCsb/aqXFFHKlEa7B+
 aG+Q6BdzCWefN6TKfgl5jYY\neaDwI3gLQhG2eSIGzonCLpXwIFebGmkb9WiJcoXcvhFlyJAhbtiwYXXTdawYkvanucxxbDSKgwED\ns7rVVlvNbbnllvo/nK+tHEcQGv/fl19+uZa39DnW/ljKW0LYgsImLoVgNUhEyMBIusDrADMiAx1I\naioq1c6zqqfrxTkPOQpHYRMK5MEJxPeh+cWSzhBIQElk/qaQHATkCcvDFUggUUD5OUT+oQNJ/Qjk\nHzqgPJlE/QaSZhFIqlTA+cMi/4yaNyvR1uHVdfW9VnnIlBgUE7XmbtcVYGVsLPnrMssq4xkrf6qo\nkoPk7NdapCqUlmqEl8ALpWMlVTGVV+3Xh5fCLBbIADy1SpRyIJkbQbdu3VLr+CI1pgNfNpKyjULU\nou8O3heNIEKNGgiJSiAsXhXtLgwzJlkQqDeFnKUbRa/2ZAz+QGE08l/TluUmPEg7eZV+1EohCwuX\n/oOLS6BKPbXLVAIByHckELISpy7qnBKAGQhTWNoxEKuIHzsQU2va+vAPmfGFf+p3SfcJqBftRYpO\nKPGP/82SutzUapbSluHVif4uwa46CBGO8Yr100zWFbU/1OfJCfUPS7bgFAgPqpkSEG5TPX/H7AWP\nMPSQ4bzteu5TKW3Hx4nZOiykgMH7TOwCZlP8zKQOIazDjXLZZZcpxWb4OPy6+KPlTelI3cMNAD2k\nKCXdDW5icuwhvoELGuE6/Obj6wCzHheN921TjxiTLjn3XJ9j4JZG+E5BBu9bHT16tHJe47/lQ5Q1\n3NsI/NZ33323ridlsJwCrza4hOtCc35IVciSgIcgm/j60X47fYSPGx5rL/ARQFoTFqhAoQqt95rI\n4T7l+05QF9zyF110Ub5dS95uUdYlQ9eYB+Jr4uUF2YERHpT2DJCXij8uiQT9hSBCZaQ777zTHXvs\nsepDx++JUoN/Gh8luECQAukNZCmkg8HfLPSs
 jqIlpKDAQc02OKdRdBSFgJsarmoqFuHbBGeuw34o\nkFatWilHMQFJkN+QEogiI/+7Xbt26jtFiVKQhXOgnNiXEqfcr3vuuUfbhS8RdjyUEX5UKi+h2CB0\nKZbNLowX5DrZqkb5/eCXziQZIdiMttLHTKHPVI1ioJJv8EcwF1hT1IJCFl7oU5QwUAKrRpIzzzxT\nB2FUhOLel10qNvdOwIkb1WSd69ZJLl4g/9jqf5agsFy71sW2apus5SWmPnqZQdUFPpVsJGZRqViW\ndgn8l6LsUr5l3CdCYRmI4k2tg3+ZuAbJCEgdK5kB+lzim/ciKXxqYiQWAmGbvECDMHe7KHpdJ2l+\n/rBACk3oOs/jLrN23QbHMceLQk7tKwVbAlGQqd/+i7DZBaI8A7ixvYg1KeWH9evCS943nD/XRwpk\nhA/R774PUviiyTapc67ni/J9h3fG/SSDitS1wSCXSGpkIBSjAT7nRhIZ+ASiiPUZqUS/zWQtT79J\n4QgQgY0ZkELq8gIp/EDbUxEgSpeZVLGl+JIIX5QrhGcKM6tPu8N9wqyYkoB+HZHpzBJJ8fFChSV4\nqJn5eiE9h3VkChQjvnQo5mhE/KS6jGovG6JmnqWw2TGrJ5Uo1yeKPAYCi2ztYMZNu/OZliWISyOI\nwRS6XKwOmZHWehH5wznJEMBq4a/ttyV9yb0muwQLTrjEZ7n6bQq5XEg20HmyvZgaCIKSuiojak2b\n2W+//Vw5CwSU1Jg6OijqeaPwQ7jucFR3UNwUipDZYdTmrOt8+UG/zLrj/2+IUshhNjt2o65xr169\ncp6KAUe+DwOMTPEm7Cg8cAVgbi+UdAZ/McoYoRRmlJCvjI+5UWleqTPPffA4RWFU6rqmd7fUM9lx\nWRHAxwPhBrVUfSWZrDvHZAPBNASFxNVHRKF4GMXg6aYiC8EWhb5AawUx5AvMQKjta1I4AlEKj6Oz\nrfdn5hlh1llqHWJ/nnz
 LqHaUwmbH/xxtziXQ2Xbp0iVtFxQyFgIf/BbeSMBXsYoTfzpWgtatW4dP\npd8J5OR8+QYXTQ5M0AqsNtBoQqtJ7EI5xWbI5UQzy7niTigQ1ew4kzYQnUvJOILLCAiiqDovCAJb\n4iwEBREMxAvPpPIIECRFoBeVzhA/u2RduQRlnC0Qq1g2O55jTKG5PlHEFFgQDjnkEJ3Rhv8HIPeh\nMIwvg1pon7EoQC7UvXv3tEPIDMDKQ8W3sDAwbjShEhTBfhTgKafYDLmcaGY5F+YrHvJ6qikqxCFN\nZpz0gUIT22+/fZaeVn41LxzJ4dUUDz/TvPjii9XvSARkXCvr8CLDJ1fuEXXlEa/cFZgNwhZHShHK\nEowwu2bOEmGJy/TXsV+mYuU8pE35+r7wsDOj9AoZ0y0mWeIgWEcsxP33368dJD0JPypWFm/6FSIc\njZr2CPh2Mev0QmQzs3CsYLSfWSWzVQTzM/5Goriz+WP9eVgW6+sOH4sJmSh0+uzLsRKNLkFnTaL5\n8UODJxHkxIIwwOUdhYkfYeZHqhd+ey9PPvmkroNWl3QyhIEICmmdddZRnP2+jbAkCp33OaluZR1g\ny0NkkgUBi7L+HzCwccHeE44w/d/W6n2T3E+NBJV/hLSLEi0tL8IA9qdipFpR1jCjyYsqIFK30QV2\nLimqoSxSYCIKIoAxCpY5frds2VLZo4jg5f6wTsyEwXXXXaeR1rDPsU6C4wLPknXEEUco85kowOCU\nU04JxM8XSGH5IJPkhghrjoPNTgLrAh8tLGVJA6GH1AhsiD44v8wsA+4bIv7UQJSWrhcFFEg1NF3P\n8yiDCT0nfcoUUdZVY7MjihyCkNNOOy0Q83dAnyT/OrNJSuYh6VAB/9NiglYseNcdfvjhgaSeKSbh\ng2QQrv9bYJL5EbdWEwa/8LFJ/n7AAQcE4i4raxcZ1ZlkQaBcCllGkgGMPq+88krqSryUhg8fHsho\nPB
 C/YiCkBYGYhPSfhJ34R+afhRdIOL2INAoZ1QaSP6n7CNm7/gPywvBCGoTwzQZQ5yG8lGRUq+vC\nNHkyStbrsg/UmbzofJqG1HMNZKTMpkBmIgHMUvwzCkGAUmryzy8Rw/ohhcdT9qEQZaSu64VLW48v\n5x/JXdV2ZJ5byA90PctipFoKmRQc0mBMKoMACpn0KERcGWn/M5lXhMHKK2rJN46kls08JtdvMe+m\nzpe5Xy3Y7MSSFdCvbMJAh/99L7yfeN+Q0mNSOALiWtBBYCalcOFnaLqnmaxFy1RSMOlgssIv5AkF\n8LlAzo5/ByIEiNshQZCRvRPOWDUJwzaESQizE4XOSTGAjQhiDsmPVJ8p2+Ulr6xPnAdTHOZcmRmo\nGQlzIGZdghDw+xBQRloIAQnZCBDwG+EbCZM2YBrETI05jHrJkCCwxHwto0RH1DBLBHMdZmX66Ndl\n4lsqAQLnATMkkwQBAgQEkoY4CuZISP9NKo+AjzrOdiWCFfkgRGs3V/jfzSYEQfG/WU3J5xrLTFXC\nTC/54NVsYiKuBbEM7zqIV7xbpNkda6qjbY1HoFwz5ChCAUxKcvMC8WH5ywWSN6nrRPGl1gkjkfLR\nMopFPvnkE91H/ESpfRjdYuYjUd/PcDGv8TsskBUIC09qVTYCBHbIJG2QaGa9rp81+5NUkwCBa3I9\nijJkCtYH8DzqqKMyN+X8XY0ZMvcOEynWDJPKICCDQiUGiQNRBVYcCEMowAAZiElyERA/eyAUuGXr\noEVZN3tIk/8EUXmUflQd5p/1vLJSVSR1UkgJCCYRMndd5wNGSN73wuiWGTczaNJqCpVsBAgcH9Vm\n1memeFSTAIHrZ47uWYdgLUCiUjV0Qw3/wJ1MYBI0jyblR4B8UCH+16Aq8Z9qKlz5r1L4GcXdo1Yt\n0pDiGmRYeG9sz1wI8D9NAGy5xBRyuZAsw3milKA3qfnIz2yXIYIUIRK6UPF5u35
 ZyHGZCpnozFVW\nWSVllqskAQLtwxyJ8vURr77NECAgZY149Cdv5lKq5WjELdGoJuVHAHMh6UAUhRBqSXWplP8qhZ/R\n2OwKx6re9+zYsaO67srVD/MhlwvJMpwnU9mFT5lrG/v5CjIox0pKZjuqSYBAv3xKC7MPirB78ako\ncVTIVM/hvhTKluT7ZMvCEPDWpsL2rtxe5MWT3kRsBSlFcRbaSZ6yF/6fSNHyqU9+vS1zI8BEiBQy\nBoP56Elzn+mvraaQC0GpDvaBBYpyaN5kS15nZp5mc7rhFbE3DYfPBQHCgAED9EOwV7bqMP4YCBDy\nzfgxw2cyEnE8BAiSHuMmTJiQppB5CWLG95YCf604LHEjrLzyynFoirWhQgjgkuCZhJHP/69U6FLN\nPi3WBAI/xfGZOhd0kKaMU3AU/MX/X0vWhynkglGr8Y7evOpncTTHm1j9NtbxT40w4oJgH/GKK1O5\nUmbOC2XTqNFKJLYXoqUxnUlqkjL1UBMVogPO40dz/tyZBAicg3aFSRt8VDMR0ihgru/Lj1WTAIEB\nByP5gQMHauQ4Lz/6RIK+pJE1ITPxeNRyyT8rgyWT5CJAbAMFQyAakQDDWHcUik4G8N6axv+QBIXG\nus1xbRxZLuDHoLtYitKoPpkPOQqVMq7D4Q+HNUIKE6YilBqKEuGfg5tJmhNpUQh1YUmXYj/JJdZ1\n+MZ8yg8rKLhOSpOvz0nd13BaDWw98DtDLQldIxWGUArMIklfgo0HKjwEvmr/EoG96P/aOwuwO4qr\njw8fpUiBAiFQ3KUQ3CUQLLg2uDsEh+JQrHiAAIXilhDcJUBx1wRtg0Nxt+It853fgVn27ru71/ba\ne895nve9d3dnZ2f/O3fPzJlz/kcIGDRsCUVH3lmYfPjBUj+mOD6pLy4SB6qhSI3mDeaaKGPWDaHL\npK3gK56OTjyw401qm+8MmMqF4rRNY60hdSGAZaqdZ8gSke
 HI5ctyz/TTT69/9M0QBlbXzXfhyfj9\nEHLJb7wIMZN1ESjm1IEXXqDnixcjKUJcMH1gdk0KSjku/KAQZsDCxOPw6ERZJ18CjNg5FyevMPol\nxjn+w8P8mxRmu9A7plE8CsmBentjlk4KM2b4XZuxTsq94r2K+RyrQ7vHUGL5yPIOT+Jo2/kIYGYl\nxp3fD32NKISVVlopOokBJYNb+OM5Tox8vL9CrclvCErNkSNHKgcAg1eUEjGlmJ353SyzzDI6oA0V\nQ8t51113aZw9lJJwA0CXue6661bkPU+UBDSVREJAuxgfPJe7p9CGIj4ZwDJJ4H5550jYn/IFJN8f\nRVyrW+rgtx2sm/Xes82Q60Wwheez5sOPKu/HFJQxzYwr41qazXXiL7d4HRAgSMxlfFfDv/PCbXdl\nDAgsDYRwtYaD0ssvgCVEYvF1MCox9WoZCbfMSzHkTSYXMkoU5YeSZomItIE4/cHFzIAT5Ys/A78h\nogPgaUbRorT69+8fhbOgRCHTgRwH6wwDWchzLrnkEs00hsUpT+655x71r8CkiVMi/NISLx+dkndP\nUaFfvqDYH3zwwdw/7itLGGhAQESGNO6L5ScG92m+IVl12P5SBPhth+W/0iM1bBUW0dwLKyqKGKRI\naOD8lcesfL1F1ltLXb2BAKHRxCDyotPnBc2eSX0IQO0oLFReFFxUkThRRd+hbJUQPqWBZGcgs4lT\n1opHtpclHOXEpgwUmlBuiiUr2icvVy/5qn287koJeSDsiRPyQFQia7UlHOui0LVPyExc6Srz7ok2\nxiUQCvEOyPoLFKLx89K+g49YGLQeSdCSVsT2VYAAZEvwhhchNkOuYRDTqlNwDoKGE2FUzjq0cNa2\nqjlqLmdGYQQI2Y8AMyjSDFN+dit6xxEsNJDnMFul3yHMeoPgVCUc62o1wf8B0zYS972QQbY6TLI0\ng0ArC0FOmFmzD8sTJl18O4IEC0e1h
 Dw4GjJDh0CHWTF/mMxx2mSmX+6ewvXDJzN74cHP/cMZsxKB\ngIhlMih1aadJbQjw2w6/89pq+PUsW0P+FYu2/8aLA3Maf0ECcUjYbuYnXtxwYqcRmjSzHe18LZx8\nZLZVnEmrnW+2CW3D3MyaL2Zf1mFh6QrLFoGTmXVRlmdwZkTKvSzT+i+/q0rMkCHMDl8NlHpSYGkj\nQkGSxyQPRdt59xQV+uUL/Ym/ooTBx9prr+3If25SGwJFLkkV92Rruxc7qwoEeLHz106S9jJrp/a1\nQ1t46VXycm+HtrZ7G5ih4rDFGrFwg6tnPQ6Fk002mc5oBwwYoMoPL/xKE41k+WBk7Y9jVI6Qh9kT\nyWOEYz4zkUXePcWvxXfCG8lNnCdckxl5pYJjXBhYVHqOlfsVAX7b/MaLEDNZF4FiL6gDliHCrgil\nameRVHdK00nWK/iLO8EZpVCnj3Z+OA1uG7HxhPdhZmbGSQgh4X9kP0MOP/xwVXwh8065mXERzU0S\n8iTrxCzMC/uss84qOUQ/PvPMMzXeP++eSk6SDQYZZI7L+yvnZJask/BHZskmtSFgM+TacLOzMhDA\nO7UTWIYgTIE7FgYv4v4w9S288MKRN2zG7bV8NyZVFIdJfQiI04wqNryhmb3iHUyqwZBukBcjOOMx\nTT9B4SF4JqMAodikTJyMh+P0f/pWXCjHOnRSyhHysH7LubSVNrLejRc1a93Ux2CBOlCocAGUu6fk\n9SVDm+OvFkGZgwlpUQOJBSZ12ksbTapHgEEfPA1h2aT6GhJnFOEZ1lvraEcv60ZiLTGVXsKaGnmJ\nuuqWGbyPJwMXQhD1EJUwkJrrbbSXNQ0jlSXetyb1ISDOUV7WY73QPGraUglB8jy/IJKX1gtzkqYr\npS+L1ccLGY4XjmEvisgL5ar2FwkF9OL/4PGA5nx5JXqZdXvxzVBPa4lx131CfuPFR0KrF0Wv+yR+\n2eMlfeCBB2rd
 MhvV47TtlFNO8eIspuWoVzgC9JiQ/HgxCet+riVJRryY3aPz8u5JCxX0Txy4PF7m\ntEFy+XrJjOWPP/74yLu8oMt0VTWyZKF4yoSmkPtmhGaSgUC3KeRkyEYGLC3ZLbMaL0QMJdcWr3P9\nMZBvulZphkLeZ599vMzka22inRdDgHzf9AVehGlCmJnMeKNDMoPR8tGOGr8EhSwkPF5mlNoXqbsa\nob+mtbvcPVVzjXJlZZbuZabsJQa5XFE7XgEC4smv7yCxwlRQunwRc+pKWAwauSmPI5dlCJPSo48+\nqtR2EBrAAhSXWlmGIACA5xriDkJBbr/9diX4gOAghH/Er5P8jhMJ7D5kM8EEF08egbmGtTw+CeWA\nvjJw5CbrqWcbZzYIHOICBSAmwHhO6fjxdvlOu82LtZinETyMoX1MEzytQ4gSxzEbF+0IiQNPsi+m\ntSW5D97jNCl3T2nn1LoPJ8w0b/Ba6+v288jkxjs0JPWpFw9TyPUiWMX5rNPwQ4bykhy5xCQG2r+h\nQ4dqbCVOInhuiklJ4xVRorAMwW990kknOTF/6voT62Ew9uBNibIVUgSNp4QvG/5pjkHbSVgIsYus\nX7F2RdwycZBQT+JMQrms0CnK0kbCS1B8ZLIhDhqlDuMR63Krrbaau1eoCumU0BQiWQoZSsJyTli8\ntIgBzRMGNtCRggmDi3YX1utI6EFcay0v8na/v25oH7G/CH3exBAICBDHjeNeJR754Zzcz/KT6O4t\nUaTJGvNWHiOPkL17UX4R2BJn6UXZRdt8qZVlSJxgvHQYL6QJUX2HHnqomlrE+zPalzRZDxkyxIsC\njo4LAYieIwkkdB9rbqypBcGkPGLEiLDZ4xM8pTPm/mESzBPMkdtvv72XWYrWwzpfnIkp79y0Y80w\nWcvL3MssyAv5QloTbF+bIyADKc9viL4L65ZYOwoxg7f5bVvzKkCApSgYC4sSC3vKHa4Ud5ARV
 B7L\nELNMZqAImZ5gv4ozDLFfFFrNLEOYxeaee26qUSGOk333339/2NXjk0xUo0ePjhiGhF5P7yF4pBK/\nyGybP10iAABAAElEQVQZr1eIEZj9MYPPEmbm5ViGysVPYo6ENxurgTjR6CfZqtpZsB6QqhKzv0nn\nIRAIebByMCNiKSnLqtR5d2ctrhUBrI5wmmOJLErMZF0UkhXUk8fIQ9IG4mpvvvlmzUTDeiw//nKS\nRsxRCcsQ62BQ5qFI0wTTHOEixCWTzDxNll9+eQ3nwJSO2fzUU09Vsvq0suyrZL0669zkftYKMf2L\nZ63GoRLKkoZF8rxWbZMIIW/w06p22XXLI9COhDzlW20lGo0A/j4QvvDbLkpMIReFZAX15DHyiAk5\ncrhCcVUa3J+1dpG1PzQTBcaMNSt/MQoPYd05SyFThuw3xIPuuuuumnsZ5y4JpwiXKflkxs1180RM\n4BpnnFcmfmzFFVd0kmygrZUx7WWtnRhQ4qezMmbF78u+F4sAxDc4HzLIJad3Owuc9fhbBIFFi1zm\naXLllVe6GWecUeOu046n7YMHnN99PPsbA2rikYMMGjTIrAABjIzPm266SdN/FukXYibrDLCL3o0i\nymLkwdkHczWm3zCLJOC8kcIPPhAVpF0H8zgdDfYuyPHjggMZLziIDWgnjmmYtnH+ivNsx8/hO6nu\n8hiGODZmzJjkabnbEBtkDRhyT2zyQawJPFssICbNRSBOfENO4nYXSHo22WQTdRTCuTPLKxrHUN4Z\nUIlWIgxIINKBBzz5m0bhQ6YCqQrXTh6vpP5uK4NCLvrdYwq5Sb1IFv2VZYhPJM4yxAsDIVmDpINz\nDzzwgJo3WbPiGOulnMcINjnD5HhY09VK5B/lULZxITcsYVNBmIEzGw00g+yPswyxTd5UQqZQJqxx\no3TxsqYcYSescf/jH/+gqHK58kMPrEm6M/EPky0zlLy/bbbZJnHWz5u8
 IMThS7P5hAJCEqJtYi25\n3YXZCLN5ZiImzUWABPJkgipyra8Zd7DqqqtqOA2D46TwGw9UocljadsMoAkPzOKsxmrDMhl91KQ8\nAkwceP/F35/lzypfwhRyeYwKK8FMmNEnM0HWXQlpQonxQ0ERoYgZqeLUxUwTZQvHLAoXZcQnYUqE\nNnEM5YgJlPNYn0ZpCfOOOoRhxiWBehDMy5hMcZri5URoFSM8BOVN2BX1MAjgh47peaeddnLCSKQh\nWozUGUETCkW7EdZsWcfl2qRvo4OSErIRwkycQQTOUbRDvKM1pIsRPSFgnSBkKWIAA7YmzUcAJ8Zy\nSznNb1VtV+R3SXhjpcIAmj/M2yb1IxDCTOGLKFSKctfujfUQpnPuuecWdmvlGHlIlh4XUZTxzZq/\n77jjjpqEnQqgE5QZblV1EbZDyJSMykvO434QKALFCazkWKM2ZMDQox31XKsZYU+hfeBI6NoJJ5wQ\ndtlnGQQkLt9DZclf/LcoA07dRwhSEMmqpFSXMKNJwomwO/qMh/XBrCQDSaW7DOGAXAv6S/6SjFoy\n8PWyROMl9t0LUU5UZyO+yMteQ6yyflPcGyGH/I5FGXgoZSsVKD85Rwb3qadcdNFFerzad0RqZb10\np1gblWIYLIsWc+oqdHiTXxkjdCSLZYgsNnFphNdwOdKN+PXDd9Y+4yFTYX+4nymmmCLsavinxB03\n/BqNugA4YiFh7Z3lAJPyCGCZwXqDqT/u6MRyS7AqUUsesU7aVchRTL/dYIMN1MmL/s21sBJheYL4\nJvxOsTZhAcIyxG8Uq9YWW2yRmeOY6ASJyU+7bLSPmXotsyvqJrsV/igsb5k0H4GRI0eqZTJrea2e\nFplCrge9DjmX2F/WkDFzs55m0joECCPDUY6XPArApDwC+AjgDMff4osvriewJsp6Z/BYJx0jnsMo\nuhnFLEtEA+XD8kraVVC6SQlZkMJ+fjM8M2haiYH
 nOOxwLP/ATBfaE8rzyZLS3nvvHd/V4zuhiSz/\nVCMyG9Mww07wmajmvjqtLKk0BwwY4ITMqfCmm0IuHNL2qhDqTOKb+TETjiQsV/qyaq9Wdk9r4Prm\nxwzJiinkyp47VKyrrLKK8oHj34BlBm7wHXbYIaoAp8PAYR2IdYqYQTIzxjcjTlhDuCAOUK+88kqq\nQoaqFv+LogVFjP9HYan+im5gF9THwAxv9eB/U/Qtm0IuGtE2qw8vwNVXXz1qVSPM4FHl9qUiBA46\n6CD1sn/iiSfcIossUtE53V4ITnX6MaZrTMYwJMFlHqRWYp1wftYnYXWYt5mBVyoMGMJyTqXnlCtH\n4hmcQcmrjMkawfKFEP3APggqaKtJ4xA45phj1LG0aO/q0GJTyAGJNv2ECYZwIcxvxPtCMFGNNNsD\nOY/UgJAtqDaffvppt/TSS+vsIhCQ5N0TrGGsu2Km5KVMvPPYY48dndJppAY8R+JBiT2HpMGkPAKE\nADFTPvvss5XQgu241EqsE68j7Tv9TJzFlJGpUrpMBlpkSMsT6o3PuvPKcozwQ/q/8CZHRbF6IZCD\nMGvjN2IKOYKn8C8Mikhqg9WxUWJhT41CtqB6YcriB4fTCg4d7S5ZpAaE+vzxj3/UlwrOEJCErLXW\nWkoskndPhHqhvJgRiTes40W85JJLlpzSiaQGmF4ZSBDGZlIeAdaGWQ8mbIyQQZzjgtRKrBNmscmY\n/VAvn2TyIeaXdcO4MEhkHTlNwmw2jwSnUia+UD9cACjl+F/gumf5g/1ZrHuhDvusDwH4/+HvJ3yx\nYVK023Zvqq/osKdasRFlpKEI8bCPWutq9HlpIRskjZcZsRcFHF2e0AFJtehlXTval/aFkA4hAIkO\nHXnkkYqFKLJoX/hSS8hGM8OeQjvDpzglebLFkAnMpDwC9APxVPeydlxSWNb1tE/ImryGAolFyctM\n0U822WReSHV8CCcUMh4vOb
 0jvMFdHMC0b4plxwtxjhdHLa2LMCv6LaGHEpnghc9aw9VkfdqL05Yn\nhCrUW9KYAjbSfkNp1RKGKIqhqrAnWdvWcwj7SpNafkNp9fS2fYTEgbV4WDf01myG3LChTnEVh5F8\np5IaYHJnJohDWRBMdltuuaWSijADSRO8UBn1y4s1Oky4CZLGXhQV6pAvIZvWxRdf3CEtbm0z6Qc4\nNUlcfUlDyhHrwHSXRnzD74kc5Vhe+vXr52Swpx7VJF3BcQunLXwu8KoWxa0mZjyzjzrqKCXMSYYp\nljSqzTaEK0AxCOvPzPYCy16bNbXtmgMp0V577aWOhTgXNlJsDblB6BIuITNaDW1gnRRTKz96PD95\nAeOQQarCwFOLmYvsIXjxEZ9Iircsee+999SJg/Vl1iOJoSSMBrMuQr0hhpJt1rNI/SezA7fhhhu6\nPn36sLtpct111+m1eHHGBTxQxrBtpZmByLKTJG4HHxwqknXF6+2U79wDITWwLmG+jw88OuUemt1O\nGOzIVJYU1k9RunElyW8tODHCKMdfUrbddlu36aab6hox5/KbgsUu7tvAUgvryOxHicd/W8n6mrkN\nDjJdq+iSeGZnYVBRBV1cCIc+nPsk13vDUTCF3CCIiffFcQnPR+IlAxEEMzsUDT/woIwbRWrADBPv\nVJygUGI4EUF6gGNVWgwmUEC+IKa6XFTE1OyqIRgJa11Jh5NAKMJgpJzw4sGhAs9aZiy9RcQ0qiEU\ne+yxh5I99Jb7atR9pCnjcK24MmZfUMbheNYnPOMh81Ge4xb9vpmS5K1vxrXL/fab0YZ2ugYELwyY\n+ct6ZxbZXlPIRaKZqIuQFrKxoEhIyBA8nsnSgqksSKNIDZhNEA6y0UYb6aWIY0SRQlqQlfUGkwwz\nizyBV5vQnUoFcxkmagYicQkvV2b8ecIsGpMR3o1YFphZElvdG0KGYB7Dc5isMVgJmCmbdDcCDAoY\nuGM9Y
 UCPUyOWsEbKOeecozz2vKu4dqcujxWJEZMALChY6eLv6yKvkazLFHISkYK3maFiooaMnO+s\nZ/EXH203itSANUp+zFw3yBxzzNEjO1Q4xidrZ+UkbxaRdm4WO1gYjf/hD39IOy3aB+EDLww8XU87\n7TSNxRw8eLAjvKQ3CNYLBm6sjeJBnpcxqzfcr91DPgLQefLXTAkkK1m5zJvZlna5FhMaqFRZSkxO\nJhrVRlPIjUL2l3qZxfHHLAjFSIpF1qzi0ghSA8IyCJNilF1Nzk74losWZuUoX0xwcTMiAxOkUlMQ\n63qsgz388MO6hp6sr+h2N7M+BhqweNE34MqNr2E2sx12LUPAEHA62GeZkSU+JjXNElPITUAaRbzV\nVlvp+iwvW8xCcWkEqUF4oRPHXI1CZlZdbu0KYv9kLHD8fpLfcYpB3nrrrRL+148//lj3V6qQtbD8\nY00eJ7a4cg/HOvUThzvizfE7wIuXF4GJIWAINB8BuA9YPoLitpoUl0W01BRyESiWqQPPZkkJF7nO\ns54aJJAaMIMOs1Pc7MtJCIXKIjVgHYi1DxIZsP4a6qZezOfLLLNMqrcohB1ZYUihTXhsVqOQWYdB\nyUAaEidkf+qpp5RXOytperhe8hOPx2oGGcnz23UbSwqkFzh4gW+j1w0bhUO97HKNalc19WJhYnDK\nYJnoBegpCdsjX3ia/wX+IfwucNTkt9do4ffEEkdwjCx3PUIPyZ0eFxzZCPHi9xf8WzgOIxjMX/w+\nzzvvvPgpdX/PwrXuiguqgHVjQitJxsN7MkxsCqq+fDXSAJMMBOSHVZKDNaNYRbuFJs+LIvYySywp\nXwmpgZhoNShdvLGjcyshNRAmIT1PMtJ4mVH6UaNGeYgwyAPbKMkiNSBHrYRnRaQMQtjv5UXg5Uef\n2RRx4PLiGe5llh+VkVm179+/f2r+5VpIDVpJDBLdVOKLsFB5cfbykFB0ovBMIe+Qt0
 9hv59m43DX\nXXdp+yVCwIvp0gttpzaB351Qv3pJLqHHZf1fczDTTyEVEcXmxTHSS7RCw5rM7wJsJdqg4mtAqsI7\niPMgTZEwMS9scR6yFHGu9GLFUxIUWUbyEt7jp556as35W/EFKiyYhWuFpze8GO8psbx5mTw0/Fpp\nFyCOzSQDgSIVssyEvZDip15JqCS9zHi9zB69OC55odxTZiChy/PiTeyFHEN/SJL6zUvMblSHjF71\nxS1OU14IE7yEM3kZ8XpZZ/Uka+flQRJt6uaHyKcQAigDUVRJwV+yFDJtgZWLF5isl2q7Lrnkktyr\nSyy3557F49PL7NHLbMWfeuqpyr6UdmJvUciwQ0ksurJIiZNd2q22/b5OYpdLAxPWLn4zsHHJTNmL\nxaKkmFh99DisXXGRWaj/05/+pIxiQsIRP1TodxjHGMwHEcfR8DXzM9yTWMdKygT2O5kZRvuFB6Eh\nCjm0IQvXqAEt+MIEhneNRHO04Oo/X9IUcg70RSpkLiOm4Myr0UHjwku5EmGmGc6VuONUZcuIWtiI\ncq9fybUqKZOlkMO5UGZWq2TETFhR23uLQgarjz76SGdhiy66aEX3HvBtl09ZVlCFxaCxE4XfFUoP\nQbHKslPJbcgyUKpCphC/XcnH7MXcqbPNkhML2hAHQM/vAoHWURxDy9bMYIFBRlIhM3umrWLC9uI/\novVADcrgvmgph2vR16u0PjHRqwWTwUkrxdaQpYc2S0Lcbdr1GklqwPoxbF7NlCzHMNbPq83nSqxu\nJRLCqCop2+5lCH2CwSywtpGIot2c2GCjw+cAkhtiw6E5ja9FpmEsL2RHmJ8sn2hsuph5NVY+lCUJ\nCeuXfJJzGM9zsjwh8qKMsoXRjyD6b9Q6O+urMhjS60KbWQ07F8+JMD3OJ28zdJ9BiCzgucpMUTkB\nxGRcQrLD2iUOi6xdEoNM3l3whUsg7msByx2/C8quvfbaGjeMH
 4qYmqv2r+BeuZ5YsUIzUz/znp2Y\notVpkxO5f9gC+Xz88ccd+alxWqSd9eCa2qgCdrK+jhMXa8f4DLRSjMu6lej3wmvHSQ3IQtMMvlxe\nfscff7xm38GhpreQGvAChgCFl9qgQYOU1rFdusyYMWOUhnXeeedVj3AUMwoUZqMsQYHj9MQAES5l\nlA8DDl70CA4/pBfl5Rjy/qK4g0DOAL80oW8oqzyyBkL+4E/P+8PJME9CLDADAhzuqhFZatHYVZjv\nuE8E5zDul98IkRfcLxEGsnSjx3EYY4CCkr7wwgvViYzzySqFxy/ev0HICY2g6HgGKD84Bqph0At1\nwXxHG/Hwz4q3LffseB5DhgxxW2+9tVtsscWiwSODEn6bIdKCa9aDa2hzUZ/gS0pX/qA6brm0cnre\n7tcu2mTd7vfbje1rR6eu5HMQYgIvFhTPup54MCcPN31bXt5qkpWBUHRtHLnkZe5lRqf70kzWLGdg\nGg1LFjhHyQvQy4BDzxEiBi8hdVGdotwjky8+CGI1UOfEUABHqixh3Ze68/5EMWadXnZ/nsk6nCyK\nUq8vPPJqCpYZvTpVhuN84sAHbuCFYNKlzWSuCs9arCO6L2CrBWP/8E0RRRzbk/41mKzJMPa6+LSI\npcKfeOKJ6tQlaSa9MOZFJyZN1uWeHSeGdsaz0pFVSgaTUb3t9EWIhdQJjyx0LPe1g9gMWXq/iSHQ\nzggw48CMy2xZHIZcVqhbs+4Bk6soU51VhGtiWsYcC+tYlmC6JbMSSxbcA5zqSOA6xwTNPljLZA1d\nw/YwfSJYPZgBEkJ4ww036D5m0Vmy2267Kc0qVKtZf9DZNlKYVSIwzREqhVVBIh5KLomZH855kmMg\nmHS5V6wNIbQxxOkTjpQl1ViFCH/CegUfAjNj+hbPM48xr9yzo108e2bChIuJctOmkpAhZGjLansr\n9mM5gc+A50H8f7Xsg41qsynkRiFr9RoC
 BSIgoV6atQsqv0r4xgu8dI+qML2iZPr27VtyLMvcGQqx\nTokyFquEvrSDGTOsXUpUgZqqeYmjkDDbYooNIuF6GuOLuZaXKSbfLEGZYRov95d1fr37aRvme3xD\nuE/WUZEkjSzPFWFNOUsCb0FQcmnlqlHILBuw3gyeLB1gDi8n5Z4d59MG2K24FwZtCJnmyHTXTsIA\nhGUBku60m2+GOXW1U0+xthgCOQgwmscBhZeJmDSVYrNSYoicaqs+hAKFPAaHItpSqYiZVF/+JFNh\nNpXM8sVLX0yoWueuu+7qJBxQnbsCv7J4LqszGEoEhcKsHCa6tLSV8JyjDPIERSexuXlFaj7Gc0KY\nAXNfoY2sWQYlzHE47ZmdsRZcj1SjkGu5TrlnF+qE+hXHKAhuZhRnOJxJw0w/lGnlJwlqthLWRGbt\n+J6EwU4r2xS/ts2Q42jYd0OgzRHAuxZzG+ZWFDSsZc2WkIs6mR9WwmdcyH2d1iYholDHtGDWDjPj\nUBazLfvwnIYZixkMBP8IXvvDhg3TGScKnVkOWcIkJCmcXvKJspd4/ty/a665puScojYwwcMhD1Me\nCVEQlh2QoKh1Q/5hwofZDKeoWgVlXEmEQd4Mu9y1yz27cD5WEpzuGKwxW8bJq10EdjOc5mgffa3d\nlDE42Qy5TG9hNE66QZPeiQCmRegDO0nw+iUDDeurvMgvu+yykvXcRt8LKSLxIiaLGWueeEULSYWG\nM7Eeh4T12bCOyj5m1ShRzJl43+I9jOARzXNAkeGVz6ySEEFM04G6EWWCcmN9GQXEzJzQsKzMWMzU\nkklc9GIF/XvjjTe0puAhzgbrsZhAocnF1M5ad58+fbScOE25LbfcUgcQrAWHMCoGV5iQQ7Yl8OJe\nWVcOEjjf49cKx/gkzzhZ2jCRcy5rwSwpJCWY+EPbk8fj2zw/nhf1gXe5ZxcPTYTSUxzuHO1udrhl\n/B7Cd/wVGBgwQKP
 P7bTTTuFQ232aQs55JBIkXjbRQs7pdqhDEEiuhXZCs1FEmGR5uaAgTzjhBFUE\nzWg7MwviY3nJYfbjj4Qj4omriogwrSOOOEKbgtImfIt1RBQVucAZSBDeJKxrmrnruOOOU05mlBiz\nF0KCUGQoaNaRg2A2Fa9kdWxDqey8886qtMPxZnwSeoRZPZjDMacHSwGmZ/oS9wl/O+vXcWFAwRoy\n987sEQXO4IQYXmaWKL2QzAAHvptvvlnN8sccc4xWA74sVSy00ELxanVAxDNgP+8sHNqSQmgTZmSE\nAQFKk1l8MpwL5UU78VVgAMDMmOdR7tlhBg7CujlOYMGSEva34pPBHgM7wuVwrMPq0s4yloyAfnaH\na+dWWtsMAUMgEwEUhFCkOgmLUlMcsdjNEmZdmJnDGmm561KWF32YwfH6wWSLQkJBsd4IKQjKOUky\nwnHOZzYYZpjlrteOx5l9stTAPRRlnaFO1qqTBENF3n/es0teBwsG1pL4zDlZptHbDJqwkrA+j+Ui\nTqzS6GvXWr8p5FqRs/MMgTZC4F5hv2JWgqIjnAWTsokh0AoE8MIny1xYP292Gxg4YClgzRgSEgg/\nkt7tzW5Tpdczp65KkbJyhkAbIzBAQleIJWXWxboyjk8mhkCzECBVI+ZglhxYK8f3phWCiRq

<TRUNCATED>

[12/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Encoding-categorical-variables-1dot10-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Encoding-categorical-variables-1dot10-v1.ipynb b/community-artifacts/Encoding-categorical-variables-1dot10-v1.ipynb
deleted file mode 100644
index 409de20..0000000
--- a/community-artifacts/Encoding-categorical-variables-1dot10-v1.ipynb
+++ /dev/null
@@ -1,2748 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Encoding categorical variables (MADlib v1.10+)\n",
-    "This is the new module that replaces create_indicator_variables() which has been deprecated as of MADlib v1.10"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 44,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The sql extension is already loaded. To reload it, use:\n",
-      "  %reload_ext sql\n"
-     ]
-    }
-   ],
-   "source": [
-    "%load_ext sql"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 45,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "u'Connected: gpdbchina@madlib'"
-      ]
-     },
-     "execution_count": 45,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql postgresql://gpdbchina@10.194.10.68:55000/madlib\n",
-    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
-    "#%sql postgresql://gpadmin@54.197.30.46:10432/gpadmin"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 46,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>version</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>MADlib version: 1.10.0-dev, git revision: rel/v1.9.1-47-g2d5a5ed, cmake configuration time: Tue Feb  7 19:45:19 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'MADlib version: 1.10.0-dev, git revision: rel/v1.9.1-47-g2d5a5ed, cmake configuration time: Tue Feb  7 19:45:19 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0',)]"
-      ]
-     },
-     "execution_count": 46,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql select madlib.version();\n",
-    "#%sql select version();"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 1.  Load data set\n",
-    "Use a subset of the abalone dataset:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 47,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "20 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>sex</th>\n",
-       "        <th>length</th>\n",
-       "        <th>diameter</th>\n",
-       "        <th>height</th>\n",
-       "        <th>rings</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.455</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.095</td>\n",
-       "        <td>15</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.35</td>\n",
-       "        <td>0.265</td>\n",
-       "        <td>0.09</td>\n",
-       "        <td>7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.53</td>\n",
-       "        <td>0.42</td>\n",
-       "        <td>0.135</td>\n",
-       "        <td>9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>10</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>I</td>\n",
-       "        <td>0.33</td>\n",
-       "        <td>0.255</td>\n",
-       "        <td>0.08</td>\n",
-       "        <td>7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>I</td>\n",
-       "        <td>0.425</td>\n",
-       "        <td>0.3</td>\n",
-       "        <td>0.095</td>\n",
-       "        <td>8</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.53</td>\n",
-       "        <td>0.415</td>\n",
-       "        <td>0.15</td>\n",
-       "        <td>20</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.545</td>\n",
-       "        <td>0.425</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>16</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.475</td>\n",
-       "        <td>0.37</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.55</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.15</td>\n",
-       "        <td>19</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.525</td>\n",
-       "        <td>0.38</td>\n",
-       "        <td>0.14</td>\n",
-       "        <td>14</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.43</td>\n",
-       "        <td>0.35</td>\n",
-       "        <td>0.11</td>\n",
-       "        <td>10</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.49</td>\n",
-       "        <td>0.38</td>\n",
-       "        <td>0.135</td>\n",
-       "        <td>11</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.535</td>\n",
-       "        <td>0.405</td>\n",
-       "        <td>0.145</td>\n",
-       "        <td>10</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.47</td>\n",
-       "        <td>0.355</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>10</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.5</td>\n",
-       "        <td>0.4</td>\n",
-       "        <td>0.13</td>\n",
-       "        <td>12</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>I</td>\n",
-       "        <td>0.355</td>\n",
-       "        <td>0.28</td>\n",
-       "        <td>0.085</td>\n",
-       "        <td>7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>F</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.34</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>10</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>M</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.295</td>\n",
-       "        <td>0.08</td>\n",
-       "        <td>7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>None</td>\n",
-       "        <td>0.45</td>\n",
-       "        <td>0.32</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>9</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, u'M', 0.455, 0.365, 0.095, 15),\n",
-       " (2, u'M', 0.35, 0.265, 0.09, 7),\n",
-       " (3, u'F', 0.53, 0.42, 0.135, 9),\n",
-       " (4, u'M', 0.44, 0.365, 0.125, 10),\n",
-       " (5, u'I', 0.33, 0.255, 0.08, 7),\n",
-       " (6, u'I', 0.425, 0.3, 0.095, 8),\n",
-       " (7, u'F', 0.53, 0.415, 0.15, 20),\n",
-       " (8, u'F', 0.545, 0.425, 0.125, 16),\n",
-       " (9, u'M', 0.475, 0.37, 0.125, 9),\n",
-       " (10, None, 0.55, 0.44, 0.15, 19),\n",
-       " (11, u'F', 0.525, 0.38, 0.14, 14),\n",
-       " (12, u'M', 0.43, 0.35, 0.11, 10),\n",
-       " (13, u'M', 0.49, 0.38, 0.135, 11),\n",
-       " (14, u'F', 0.535, 0.405, 0.145, 10),\n",
-       " (15, u'F', 0.47, 0.355, 0.1, 10),\n",
-       " (16, u'M', 0.5, 0.4, 0.13, 12),\n",
-       " (17, u'I', 0.355, 0.28, 0.085, 7),\n",
-       " (18, u'F', 0.44, 0.34, 0.1, 10),\n",
-       " (19, u'M', 0.365, 0.295, 0.08, 7),\n",
-       " (20, None, 0.45, 0.32, 0.1, 9)]"
-      ]
-     },
-     "execution_count": 47,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql \n",
-    "DROP TABLE IF EXISTS abalone;\n",
-    "\n",
-    "CREATE TABLE abalone (\n",
-    "    id serial,\n",
-    "    sex character varying,\n",
-    "    length double precision,\n",
-    "    diameter double precision,\n",
-    "    height double precision,\n",
-    "    rings int\n",
-    ");\n",
-    "\n",
-    "INSERT INTO abalone (sex, length, diameter, height, rings) VALUES\n",
-    "('M',    0.455,  0.365,  0.095,  15),\n",
-    "('M',    0.35,   0.265,  0.09,   7),\n",
-    "('F',    0.53,   0.42,   0.135,  9),\n",
-    "('M',    0.44,   0.365,  0.125,  10),\n",
-    "('I',    0.33,   0.255,  0.08,   7),\n",
-    "('I',    0.425,  0.3,    0.095,  8),\n",
-    "('F',    0.53,   0.415,  0.15,   20),\n",
-    "('F',    0.545,  0.425,  0.125,  16),\n",
-    "('M',    0.475,  0.37,   0.125,  9),\n",
-    "(NULL,   0.55,   0.44,   0.15,   19),\n",
-    "('F',    0.525,  0.38,   0.14,   14),\n",
-    "('M',    0.43,   0.35,   0.11,   10),\n",
-    "('M',    0.49,   0.38,   0.135,  11),\n",
-    "('F',    0.535,  0.405,  0.145,  10),\n",
-    "('F',    0.47,   0.355,  0.1,    10),\n",
-    "('M',    0.5,    0.4,    0.13,   12),\n",
-    "('I',    0.355,  0.28,   0.085,  7),\n",
-    "('F',    0.44,   0.34,   0.1,    10),\n",
-    "('M',    0.365,  0.295,  0.08,   7),\n",
-    "(NULL,   0.45,   0.32,   0.1,    9);\n",
-    "\n",
-    "SELECT * FROM abalone ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 2. Create new table with one-hot encoding.\n",
-    "The column 'sex' is replaced by three columns encoding the values 'F', 'M' and 'I'.  Null values are not encoded by default:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 48,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>length</th>\n",
-       "        <th>diameter</th>\n",
-       "        <th>height</th>\n",
-       "        <th>rings</th>\n",
-       "        <th>sex_F</th>\n",
-       "        <th>sex_I</th>\n",
-       "        <th>sex_M</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0.455</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.095</td>\n",
-       "        <td>15</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0.35</td>\n",
-       "        <td>0.265</td>\n",
-       "        <td>0.09</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0.53</td>\n",
-       "        <td>0.42</td>\n",
-       "        <td>0.135</td>\n",
-       "        <td>9</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0.33</td>\n",
-       "        <td>0.255</td>\n",
-       "        <td>0.08</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0.425</td>\n",
-       "        <td>0.3</td>\n",
-       "        <td>0.095</td>\n",
-       "        <td>8</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>0.53</td>\n",
-       "        <td>0.415</td>\n",
-       "        <td>0.15</td>\n",
-       "        <td>20</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>0.545</td>\n",
-       "        <td>0.425</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>16</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>0.475</td>\n",
-       "        <td>0.37</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>0.55</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.15</td>\n",
-       "        <td>19</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>0.525</td>\n",
-       "        <td>0.38</td>\n",
-       "        <td>0.14</td>\n",
-       "        <td>14</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>0.43</td>\n",
-       "        <td>0.35</td>\n",
-       "        <td>0.11</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>0.49</td>\n",
-       "        <td>0.38</td>\n",
-       "        <td>0.135</td>\n",
-       "        <td>11</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>0.535</td>\n",
-       "        <td>0.405</td>\n",
-       "        <td>0.145</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>0.47</td>\n",
-       "        <td>0.355</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>0.5</td>\n",
-       "        <td>0.4</td>\n",
-       "        <td>0.13</td>\n",
-       "        <td>12</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>0.355</td>\n",
-       "        <td>0.28</td>\n",
-       "        <td>0.085</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.34</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.295</td>\n",
-       "        <td>0.08</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>0.45</td>\n",
-       "        <td>0.32</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 0.455, 0.365, 0.095, 15, 0, 0, 1),\n",
-       " (2, 0.35, 0.265, 0.09, 7, 0, 0, 1),\n",
-       " (3, 0.53, 0.42, 0.135, 9, 1, 0, 0),\n",
-       " (4, 0.44, 0.365, 0.125, 10, 0, 0, 1),\n",
-       " (5, 0.33, 0.255, 0.08, 7, 0, 1, 0),\n",
-       " (6, 0.425, 0.3, 0.095, 8, 0, 1, 0),\n",
-       " (7, 0.53, 0.415, 0.15, 20, 1, 0, 0),\n",
-       " (8, 0.545, 0.425, 0.125, 16, 1, 0, 0),\n",
-       " (9, 0.475, 0.37, 0.125, 9, 0, 0, 1),\n",
-       " (10, 0.55, 0.44, 0.15, 19, 0, 0, 0),\n",
-       " (11, 0.525, 0.38, 0.14, 14, 1, 0, 0),\n",
-       " (12, 0.43, 0.35, 0.11, 10, 0, 0, 1),\n",
-       " (13, 0.49, 0.38, 0.135, 11, 0, 0, 1),\n",
-       " (14, 0.535, 0.405, 0.145, 10, 1, 0, 0),\n",
-       " (15, 0.47, 0.355, 0.1, 10, 1, 0, 0),\n",
-       " (16, 0.5, 0.4, 0.13, 12, 0, 0, 1),\n",
-       " (17, 0.355, 0.28, 0.085, 7, 0, 1, 0),\n",
-       " (18, 0.44, 0.34, 0.1, 10, 1, 0, 0),\n",
-       " (19, 0.365, 0.295, 0.08, 7, 0, 0, 1),\n",
-       " (20, 0.45, 0.32, 0.1, 9, 0, 0, 0)]"
-      ]
-     },
-     "execution_count": 48,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        'sex'                        -- Categorical columns\n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 3.  Encode null values\n",
-    "Now include NULL values in encoding (note the additional column 'sex_NULL'):"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 49,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>length</th>\n",
-       "        <th>diameter</th>\n",
-       "        <th>height</th>\n",
-       "        <th>rings</th>\n",
-       "        <th>sex_F</th>\n",
-       "        <th>sex_I</th>\n",
-       "        <th>sex_M</th>\n",
-       "        <th>sex_NULL</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0.455</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.095</td>\n",
-       "        <td>15</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0.35</td>\n",
-       "        <td>0.265</td>\n",
-       "        <td>0.09</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0.53</td>\n",
-       "        <td>0.42</td>\n",
-       "        <td>0.135</td>\n",
-       "        <td>9</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0.33</td>\n",
-       "        <td>0.255</td>\n",
-       "        <td>0.08</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0.425</td>\n",
-       "        <td>0.3</td>\n",
-       "        <td>0.095</td>\n",
-       "        <td>8</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>0.53</td>\n",
-       "        <td>0.415</td>\n",
-       "        <td>0.15</td>\n",
-       "        <td>20</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>0.545</td>\n",
-       "        <td>0.425</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>16</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>0.475</td>\n",
-       "        <td>0.37</td>\n",
-       "        <td>0.125</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>0.55</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.15</td>\n",
-       "        <td>19</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>0.525</td>\n",
-       "        <td>0.38</td>\n",
-       "        <td>0.14</td>\n",
-       "        <td>14</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>0.43</td>\n",
-       "        <td>0.35</td>\n",
-       "        <td>0.11</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>0.49</td>\n",
-       "        <td>0.38</td>\n",
-       "        <td>0.135</td>\n",
-       "        <td>11</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>0.535</td>\n",
-       "        <td>0.405</td>\n",
-       "        <td>0.145</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>0.47</td>\n",
-       "        <td>0.355</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>0.5</td>\n",
-       "        <td>0.4</td>\n",
-       "        <td>0.13</td>\n",
-       "        <td>12</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>0.355</td>\n",
-       "        <td>0.28</td>\n",
-       "        <td>0.085</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>0.44</td>\n",
-       "        <td>0.34</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>0.365</td>\n",
-       "        <td>0.295</td>\n",
-       "        <td>0.08</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>0.45</td>\n",
-       "        <td>0.32</td>\n",
-       "        <td>0.1</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 0.455, 0.365, 0.095, 15, 0, 0, 1, 0),\n",
-       " (2, 0.35, 0.265, 0.09, 7, 0, 0, 1, 0),\n",
-       " (3, 0.53, 0.42, 0.135, 9, 1, 0, 0, 0),\n",
-       " (4, 0.44, 0.365, 0.125, 10, 0, 0, 1, 0),\n",
-       " (5, 0.33, 0.255, 0.08, 7, 0, 1, 0, 0),\n",
-       " (6, 0.425, 0.3, 0.095, 8, 0, 1, 0, 0),\n",
-       " (7, 0.53, 0.415, 0.15, 20, 1, 0, 0, 0),\n",
-       " (8, 0.545, 0.425, 0.125, 16, 1, 0, 0, 0),\n",
-       " (9, 0.475, 0.37, 0.125, 9, 0, 0, 1, 0),\n",
-       " (10, 0.55, 0.44, 0.15, 19, 0, 0, 0, 1),\n",
-       " (11, 0.525, 0.38, 0.14, 14, 1, 0, 0, 0),\n",
-       " (12, 0.43, 0.35, 0.11, 10, 0, 0, 1, 0),\n",
-       " (13, 0.49, 0.38, 0.135, 11, 0, 0, 1, 0),\n",
-       " (14, 0.535, 0.405, 0.145, 10, 1, 0, 0, 0),\n",
-       " (15, 0.47, 0.355, 0.1, 10, 1, 0, 0, 0),\n",
-       " (16, 0.5, 0.4, 0.13, 12, 0, 0, 1, 0),\n",
-       " (17, 0.355, 0.28, 0.085, 7, 0, 1, 0, 0),\n",
-       " (18, 0.44, 0.34, 0.1, 10, 1, 0, 0, 0),\n",
-       " (19, 0.365, 0.295, 0.08, 7, 0, 0, 1, 0),\n",
-       " (20, 0.45, 0.32, 0.1, 9, 0, 0, 0, 1)]"
-      ]
-     },
-     "execution_count": 49,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        'sex',                       -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        NULL,                        -- Index columns\n",
-    "        NULL,                        -- Top values\n",
-    "        NULL,                        -- Value to drop for dummy encoding\n",
-    "        TRUE                         -- Encode nulls\n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 4. Encode all categorical variables and specify an index\n",
-    "Encode all categorical variables in the source table. Also, specify the column 'id' as the index (primary key) - this changes the output table to only include the index and the encoded variables:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 50,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>sex_F</th>\n",
-       "        <th>sex_I</th>\n",
-       "        <th>sex_M</th>\n",
-       "        <th>rings_7</th>\n",
-       "        <th>rings_8</th>\n",
-       "        <th>rings_9</th>\n",
-       "        <th>rings_10</th>\n",
-       "        <th>rings_11</th>\n",
-       "        <th>rings_12</th>\n",
-       "        <th>rings_14</th>\n",
-       "        <th>rings_15</th>\n",
-       "        <th>rings_16</th>\n",
-       "        <th>rings_19</th>\n",
-       "        <th>rings_20</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),\n",
-       " (2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (4, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (5, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (6, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),\n",
-       " (8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
-       " (9, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),\n",
-       " (11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),\n",
-       " (12, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (13, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),\n",
-       " (14, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (15, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),\n",
-       " (17, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (18, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (19, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (20, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0)]"
-      ]
-     },
-     "execution_count": 50,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        '*',                         -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        'id'                         -- Index columns\n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 5. Encode top values\n",
-    "Now let's encode only the top values and group others into a miscellaneous bucket column. Top values can be global across all columns or specified by column.  As an example of the latter, here are the top 2 'sex' values and the top 50% of  'rings' values:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 51,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>sex_M</th>\n",
-       "        <th>sex_F</th>\n",
-       "        <th>sex__MISC__</th>\n",
-       "        <th>rings_10</th>\n",
-       "        <th>rings_7</th>\n",
-       "        <th>rings_9</th>\n",
-       "        <th>rings__MISC__</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 1, 0, 0, 0, 0, 0, 1),\n",
-       " (2, 1, 0, 0, 0, 1, 0, 0),\n",
-       " (3, 0, 1, 0, 0, 0, 1, 0),\n",
-       " (4, 1, 0, 0, 1, 0, 0, 0),\n",
-       " (5, 0, 0, 1, 0, 1, 0, 0),\n",
-       " (6, 0, 0, 1, 0, 0, 0, 1),\n",
-       " (7, 0, 1, 0, 0, 0, 0, 1),\n",
-       " (8, 0, 1, 0, 0, 0, 0, 1),\n",
-       " (9, 1, 0, 0, 0, 0, 1, 0),\n",
-       " (10, 0, 0, 0, 0, 0, 0, 1),\n",
-       " (11, 0, 1, 0, 0, 0, 0, 1),\n",
-       " (12, 1, 0, 0, 1, 0, 0, 0),\n",
-       " (13, 1, 0, 0, 0, 0, 0, 1),\n",
-       " (14, 0, 1, 0, 1, 0, 0, 0),\n",
-       " (15, 0, 1, 0, 1, 0, 0, 0),\n",
-       " (16, 1, 0, 0, 0, 0, 0, 1),\n",
-       " (17, 0, 0, 1, 0, 1, 0, 0),\n",
-       " (18, 0, 1, 0, 1, 0, 0, 0),\n",
-       " (19, 1, 0, 0, 0, 1, 0, 0),\n",
-       " (20, 0, 0, 0, 0, 0, 1, 0)]"
-      ]
-     },
-     "execution_count": 51,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        '*',                         -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        'id',                        -- Index columns\n",
-    "        'sex=2, rings=0.5'           -- Top values\n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 6. Show raw variables and encoded variables together\n",
-    "If you want to see both the raw categorical variable and its encoded form in the output_table, then include the categorical variables 'sex' and 'rings' in the index parameter. (Remember that this will not work if you specify '*' for the parameter 'categorical_cols', because in this case 'row_id' columns will not be encoded at all.)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 52,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>sex</th>\n",
-       "        <th>rings</th>\n",
-       "        <th>sex_F</th>\n",
-       "        <th>sex_I</th>\n",
-       "        <th>sex_M</th>\n",
-       "        <th>rings_7</th>\n",
-       "        <th>rings_8</th>\n",
-       "        <th>rings_9</th>\n",
-       "        <th>rings_10</th>\n",
-       "        <th>rings_11</th>\n",
-       "        <th>rings_12</th>\n",
-       "        <th>rings_14</th>\n",
-       "        <th>rings_15</th>\n",
-       "        <th>rings_16</th>\n",
-       "        <th>rings_19</th>\n",
-       "        <th>rings_20</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>M</td>\n",
-       "        <td>15</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>M</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>F</td>\n",
-       "        <td>9</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>M</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>I</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>I</td>\n",
-       "        <td>8</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>F</td>\n",
-       "        <td>20</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>F</td>\n",
-       "        <td>16</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>M</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>None</td>\n",
-       "        <td>19</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>F</td>\n",
-       "        <td>14</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>M</td>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>M</td>\n",
-       "        <td>11</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>F</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>F</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>M</td>\n",
-       "        <td>12</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>I</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>F</td>\n",
-       "        <td>10</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>M</td>\n",
-       "        <td>7</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>None</td>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, u'M', 15, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),\n",
-       " (2, u'M', 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (3, u'F', 9, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (4, u'M', 10, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (5, u'I', 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (6, u'I', 8, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (7, u'F', 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),\n",
-       " (8, u'F', 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
-       " (9, u'M', 9, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (10, None, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),\n",
-       " (11, u'F', 14, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),\n",
-       " (12, u'M', 10, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (13, u'M', 11, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),\n",
-       " (14, u'F', 10, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (15, u'F', 10, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (16, u'M', 12, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),\n",
-       " (17, u'I', 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (18, u'F', 10, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (19, u'M', 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
-       " (20, None, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0)]"
-      ]
-     },
-     "execution_count": 52,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        'sex, rings',                -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        'id, sex, rings'             -- Index columns\n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 7. Dummy encoding\n",
-    "For dummy encoding, let's make the 'I' value from the 'sex' variable as the reference.\n",
-    "Here we use the 'value_to_drop' parameter:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 53,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>sex_F</th>\n",
-       "        <th>sex_M</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 0, 1),\n",
-       " (2, 0, 1),\n",
-       " (3, 1, 0),\n",
-       " (4, 0, 1),\n",
-       " (5, 0, 0),\n",
-       " (6, 0, 0),\n",
-       " (7, 1, 0),\n",
-       " (8, 1, 0),\n",
-       " (9, 0, 1),\n",
-       " (10, 0, 0),\n",
-       " (11, 1, 0),\n",
-       " (12, 0, 1),\n",
-       " (13, 0, 1),\n",
-       " (14, 1, 0),\n",
-       " (15, 1, 0),\n",
-       " (16, 0, 1),\n",
-       " (17, 0, 0),\n",
-       " (18, 1, 0),\n",
-       " (19, 0, 1),\n",
-       " (20, 0, 0)]"
-      ]
-     },
-     "execution_count": 53,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        '*',                         -- Categorical columns\n",
-    "        'rings',                     -- Categorical columns to exclude\n",
-    "        'id',                        -- Index columns\n",
-    "        NULL,                        -- Top value\n",
-    "        'sex=I'                      -- Value to drop for dummy encoding              \n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 8. Array output\n",
-    "Create an array output for the two categorical variables in the source table:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 55,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>__encoded_variables__</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>[0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>[0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>[0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>[0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]),\n",
-       " (2, [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (3, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (4, [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (5, [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (6, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (7, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
-       " (8, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]),\n",
-       " (9, [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (10, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]),\n",
-       " (11, [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]),\n",
-       " (12, [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (13, [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]),\n",
-       " (14, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (15, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (16, [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]),\n",
-       " (17, [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (18, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (19, [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
-       " (20, [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])]"
-      ]
-     },
-     "execution_count": 55,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        '*',                         -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        'id',                        -- Index columns\n",
-    "        NULL,                        -- Top values\n",
-    "        NULL,                        -- Value to drop for dummy encoding\n",
-    "        NULL,                        -- Encode nulls\n",
-    "        'array'                      -- Output type\n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "And here is the dictionary table that specifies the index into the array:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 56,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "14 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>encoded_column_name</th>\n",
-       "        <th>index</th>\n",
-       "        <th>variable</th>\n",
-       "        <th>value</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>1</td>\n",
-       "        <td>sex</td>\n",
-       "        <td>F</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>2</td>\n",
-       "        <td>sex</td>\n",
-       "        <td>I</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>3</td>\n",
-       "        <td>sex</td>\n",
-       "        <td>M</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>4</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>5</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>8</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>6</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>7</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>10</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>8</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>11</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>9</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>12</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>10</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>14</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>11</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>15</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>12</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>16</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>13</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>19</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>__encoded_variables__</td>\n",
-       "        <td>14</td>\n",
-       "        <td>rings</td>\n",
-       "        <td>20</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'__encoded_variables__', 1, u'sex', u'F'),\n",
-       " (u'__encoded_variables__', 2, u'sex', u'I'),\n",
-       " (u'__encoded_variables__', 3, u'sex', u'M'),\n",
-       " (u'__encoded_variables__', 4, u'rings', u'7'),\n",
-       " (u'__encoded_variables__', 5, u'rings', u'8'),\n",
-       " (u'__encoded_variables__', 6, u'rings', u'9'),\n",
-       " (u'__encoded_variables__', 7, u'rings', u'10'),\n",
-       " (u'__encoded_variables__', 8, u'rings', u'11'),\n",
-       " (u'__encoded_variables__', 9, u'rings', u'12'),\n",
-       " (u'__encoded_variables__', 10, u'rings', u'14'),\n",
-       " (u'__encoded_variables__', 11, u'rings', u'15'),\n",
-       " (u'__encoded_variables__', 12, u'rings', u'16'),\n",
-       " (u'__encoded_variables__', 13, u'rings', u'19'),\n",
-       " (u'__encoded_variables__', 14, u'rings', u'20')]"
-      ]
-     },
-     "execution_count": 56,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql SELECT * FROM abalone_out_dictionary;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 9. Dictionary output\n",
-    "Create a dictionary:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        '*',                         -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        'id',                        -- Index columns\n",
-    "        NULL,                        -- Top values\n",
-    "        NULL,                        -- Value to drop for dummy encoding\n",
-    "        NULL,                        -- Encode nulls\n",
-    "        NULL,                        -- Output type\n",
-    "        TRUE                         -- Dictionary output \n",
-    "        );\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "And here is the dictionary table that defines the columns in the output table:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [],
-   "source": [
-    "%sql SELECT * FROM abalone_out_dictionary ORDER BY encoded_column_name;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 10. Distribution policy\n",
-    "We can chose for various distribution policies, for examply RANDOMLY:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        '*',                         -- Categorical columns\n",
-    "        NULL,                        -- Categorical columns to exclude\n",
-    "        'id',                        -- Index columns\n",
-    "        NULL,                        -- Top values\n",
-    "        NULL,                        -- Value to drop for dummy encoding\n",
-    "        NULL,                        -- Encode nulls\n",
-    "        NULL,                        -- Output type\n",
-    "        NULL,                        -- Dictionary output\n",
-    "        'RANDOMLY'                   -- Distribution policy\n",
-    "        );"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## 11. Encoding floats\n",
-    "If you have a float that you want to encode, you can cast it in the following way within the function call:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
-    "SELECT madlib.encode_categorical_variables (\n",
-    "        'abalone',                   -- Source table\n",
-    "        'abalone_out',               -- Output table\n",
-    "        'height>.05'               -- Categorical columns\n",
-    "        );"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM abalone_out ORDER BY id;"
-   ]
-  }
- ],
- "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.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}


[07/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/PageRank-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/PageRank-v1.ipynb b/community-artifacts/PageRank-v1.ipynb
deleted file mode 100644
index 32b1caf..0000000
--- a/community-artifacts/PageRank-v1.ipynb
+++ /dev/null
@@ -1,774 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# PageRank\n",
-    "The PageRank algorithm produces a probability distribution representing the likelihood that a person randomly traversing a graph will arrive at any particular vertex. PageRank was added in MADlib 1.11."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
-      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
-      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
-      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
-     ]
-    }
-   ],
-   "source": [
-    "%load_ext sql"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "u'Connected: fmcquillan@madlib'"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Greenplum 4.3.10.0\n",
-    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib\n",
-    "        \n",
-    "# PostgreSQL local\n",
-    "%sql postgresql://fmcquillan@localhost:5432/madlib\n",
-    "\n",
-    "# Greenplum 4.2.3.0\n",
-    "#%sql postgresql://gpdbchina@10.194.10.68:55000/madlib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>version</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>MADlib version: 1.11-dev, git revision: rc/v1.9alpha-rc1-138-gcc5ce09, cmake configuration time: Tue Apr 11 20:47:30 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'MADlib version: 1.11-dev, git revision: rc/v1.9alpha-rc1-138-gcc5ce09, cmake configuration time: Tue Apr 11 20:47:30 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0',)]"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql select madlib.version();\n",
-    "#%sql select version();"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 1.  Create vertex and edge tables"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "Done.\n",
-      "7 rows affected.\n",
-      "22 rows affected.\n",
-      "22 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>src</th>\n",
-       "        <th>dest</th>\n",
-       "        <th>user_id</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>2</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>2</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>4</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>4</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>3</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>3</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>2</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>2</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>5</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>3</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>3</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>6</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>6</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>6</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>3</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>3</td>\n",
-       "        <td>2</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(0, 1, 1),\n",
-       " (0, 2, 2),\n",
-       " (0, 2, 1),\n",
-       " (0, 4, 2),\n",
-       " (0, 4, 1),\n",
-       " (0, 1, 2),\n",
-       " (1, 3, 1),\n",
-       " (1, 3, 2),\n",
-       " (1, 2, 2),\n",
-       " (1, 2, 1),\n",
-       " (2, 5, 1),\n",
-       " (2, 3, 1),\n",
-       " (2, 3, 2),\n",
-       " (2, 6, 1),\n",
-       " (3, 0, 2),\n",
-       " (3, 0, 1),\n",
-       " (4, 0, 1),\n",
-       " (4, 0, 2),\n",
-       " (5, 6, 2),\n",
-       " (5, 6, 1),\n",
-       " (6, 3, 1),\n",
-       " (6, 3, 2)]"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql \n",
-    "DROP TABLE IF EXISTS vertex, edge;\n",
-    "\n",
-    "CREATE TABLE vertex(\n",
-    "        id INTEGER\n",
-    "        );\n",
-    "\n",
-    "CREATE TABLE edge(\n",
-    "        src INTEGER,\n",
-    "        dest INTEGER,\n",
-    "        user_id INTEGER\n",
-    "        );\n",
-    "\n",
-    "INSERT INTO vertex VALUES\n",
-    "(0),\n",
-    "(1),\n",
-    "(2),\n",
-    "(3),\n",
-    "(4),\n",
-    "(5),\n",
-    "(6);\n",
-    "\n",
-    "INSERT INTO edge VALUES\n",
-    "(0, 1, 1),\n",
-    "(0, 2, 1),\n",
-    "(0, 4, 1),\n",
-    "(1, 2, 1),\n",
-    "(1, 3, 1),\n",
-    "(2, 3, 1),\n",
-    "(2, 5, 1),\n",
-    "(2, 6, 1),\n",
-    "(3, 0, 1),\n",
-    "(4, 0, 1),\n",
-    "(5, 6, 1),\n",
-    "(6, 3, 1),\n",
-    "(0, 1, 2),\n",
-    "(0, 2, 2),\n",
-    "(0, 4, 2),\n",
-    "(1, 2, 2),\n",
-    "(1, 3, 2),\n",
-    "(2, 3, 2),\n",
-    "(3, 0, 2),\n",
-    "(4, 0, 2),\n",
-    "(5, 6, 2),\n",
-    "(6, 3, 2);\n",
-    "\n",
-    "SELECT * from edge ORDER BY src;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 2.  Calculate the PageRank"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "7 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>pagerank</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>0.287537493412</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0.210169889019</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0.146626834541</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0.102896143842</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0.102896143842</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0.0972863776889</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0.0525871176569</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(0, 0.287537493411842),\n",
-       " (3, 0.210169889018553),\n",
-       " (2, 0.146626834540625),\n",
-       " (4, 0.10289614384217),\n",
-       " (1, 0.10289614384217),\n",
-       " (6, 0.097286377688878),\n",
-       " (5, 0.0525871176569217)]"
-      ]
-     },
-     "execution_count": 17,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
-    "\n",
-    "SELECT madlib.pagerank(\n",
-    "                         'vertex',             -- Vertex table\n",
-    "                         'id',                 -- Vertix id column\n",
-    "                         'edge',               -- Edge table\n",
-    "                         'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
-    "                         'pagerank_out');      -- Output table of PageRank\n",
-    "\n",
-    "SELECT * FROM pagerank_out ORDER BY pagerank DESC;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Look at the summary table:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>__iterations__</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(16,)]"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM pagerank_out_summary;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now run PageRank with a damping factor of 0.5 which results in different final values:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "7 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>pagerank</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>0</td>\n",
-       "        <td>0.225477161441</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>0.199090328587</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0.136261327206</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>0.132691559968</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>0.10900929141</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0.10900929141</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>0.0884610399788</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(0, 0.225477161441199),\n",
-       " (3, 0.199090328586664),\n",
-       " (2, 0.136261327206477),\n",
-       " (6, 0.132691559968224),\n",
-       " (4, 0.109009291409508),\n",
-       " (1, 0.109009291409508),\n",
-       " (5, 0.0884610399788161)]"
-      ]
-     },
-     "execution_count": 21,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
-    "SELECT madlib.pagerank(\n",
-    "                         'vertex',             -- Vertex table\n",
-    "                         'id',                 -- Vertix id column\n",
-    "                         'edge',               -- Edge table\n",
-    "                         'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
-    "                         'pagerank_out',       -- Output table of PageRank\n",
-    "                         0.5);                 -- Damping factor\n",
-    "SELECT * FROM pagerank_out ORDER BY pagerank DESC;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 3. Grouping"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now compute the PageRank distribution separately for each user using the grouping feature:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "14 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>user_id</th>\n",
-       "        <th>id</th>\n",
-       "        <th>pagerank</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0.278254883886</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>3</td>\n",
-       "        <td>0.201881146671</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>2</td>\n",
-       "        <td>0.142881123461</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>6</td>\n",
-       "        <td>0.114536378321</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>4</td>\n",
-       "        <td>0.100267456154</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0.100267456154</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>5</td>\n",
-       "        <td>0.0619115553529</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>0</td>\n",
-       "        <td>0.318546250042</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>3</td>\n",
-       "        <td>0.237866867733</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>2</td>\n",
-       "        <td>0.159148764894</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>1</td>\n",
-       "        <td>0.11168334438</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>4</td>\n",
-       "        <td>0.11168334438</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>6</td>\n",
-       "        <td>0.0396428571429</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>5</td>\n",
-       "        <td>0.0214285714286</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 0, 0.278254883885528),\n",
-       " (1, 3, 0.201881146670752),\n",
-       " (1, 2, 0.142881123460599),\n",
-       " (1, 6, 0.114536378321472),\n",
-       " (1, 4, 0.10026745615438),\n",
-       " (1, 1, 0.10026745615438),\n",
-       " (1, 5, 0.0619115553528898),\n",
-       " (2, 0, 0.318546250041731),\n",
-       " (2, 3, 0.237866867733431),\n",
-       " (2, 2, 0.159148764893974),\n",
-       " (2, 1, 0.111683344379718),\n",
-       " (2, 4, 0.111683344379718),\n",
-       " (2, 6, 0.0396428571428571),\n",
-       " (2, 5, 0.0214285714285714)]"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
-    "\n",
-    "SELECT madlib.pagerank(\n",
-    "                         'vertex',             -- Vertex table\n",
-    "                         'id',                 -- Vertix id column\n",
-    "                         'edge',               -- Edge table\n",
-    "                         'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
-    "                         'pagerank_out',       -- Output table of PageRank\n",
-    "                         NULL,                 -- Default damping factor (0.85)\n",
-    "                         NULL,                 -- Default max iters (100)\n",
-    "                         0.00000001,           -- Threshold\n",
-    "                         'user_id');           -- Grouping column name\n",
-    "\n",
-    "SELECT * FROM pagerank_out ORDER BY user_id, pagerank DESC;"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "2 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>user_id</th>\n",
-       "        <th>__iterations__</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>27</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>31</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, 27), (2, 31)]"
-      ]
-     },
-     "execution_count": 24,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM pagerank_out_summary ORDER BY user_id;"
-   ]
-  }
- ],
- "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.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}

http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/PageRank-v2.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/PageRank-v2.ipynb b/community-artifacts/PageRank-v2.ipynb
new file mode 100644
index 0000000..eea174f
--- /dev/null
+++ b/community-artifacts/PageRank-v2.ipynb
@@ -0,0 +1,889 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# PageRank\n",
+    "The PageRank algorithm produces a probability distribution representing the likelihood that a person randomly traversing a graph will arrive at any particular vertex. PageRank was added in MADlib 1.11.\n",
+    "\n",
+    "We also implement personalized PageRank, in which a notion of importance provides personalization to a query. This was added in 1.14"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-66-g4cced1b, cmake configuration time: Mon Apr 23 16:26:17 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-66-g4cced1b, cmake configuration time: Mon Apr 23 16:26:17 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1.  Create vertex and edge tables"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "Done.\n",
+      "7 rows affected.\n",
+      "22 rows affected.\n",
+      "22 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>src</th>\n",
+       "        <th>dest</th>\n",
+       "        <th>user_id</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>6</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 1, 1),\n",
+       " (0, 2, 2),\n",
+       " (0, 2, 1),\n",
+       " (0, 4, 2),\n",
+       " (0, 4, 1),\n",
+       " (0, 1, 2),\n",
+       " (1, 3, 1),\n",
+       " (1, 3, 2),\n",
+       " (1, 2, 2),\n",
+       " (1, 2, 1),\n",
+       " (2, 5, 1),\n",
+       " (2, 3, 1),\n",
+       " (2, 3, 2),\n",
+       " (2, 6, 1),\n",
+       " (3, 0, 2),\n",
+       " (3, 0, 1),\n",
+       " (4, 0, 1),\n",
+       " (4, 0, 2),\n",
+       " (5, 6, 2),\n",
+       " (5, 6, 1),\n",
+       " (6, 3, 1),\n",
+       " (6, 3, 2)]"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql \n",
+    "DROP TABLE IF EXISTS vertex, edge;\n",
+    "\n",
+    "CREATE TABLE vertex(\n",
+    "        id INTEGER\n",
+    "        );\n",
+    "\n",
+    "CREATE TABLE edge(\n",
+    "        src INTEGER,\n",
+    "        dest INTEGER,\n",
+    "        user_id INTEGER\n",
+    "        );\n",
+    "\n",
+    "INSERT INTO vertex VALUES\n",
+    "(0),\n",
+    "(1),\n",
+    "(2),\n",
+    "(3),\n",
+    "(4),\n",
+    "(5),\n",
+    "(6);\n",
+    "\n",
+    "INSERT INTO edge VALUES\n",
+    "(0, 1, 1),\n",
+    "(0, 2, 1),\n",
+    "(0, 4, 1),\n",
+    "(1, 2, 1),\n",
+    "(1, 3, 1),\n",
+    "(2, 3, 1),\n",
+    "(2, 5, 1),\n",
+    "(2, 6, 1),\n",
+    "(3, 0, 1),\n",
+    "(4, 0, 1),\n",
+    "(5, 6, 1),\n",
+    "(6, 3, 1),\n",
+    "(0, 1, 2),\n",
+    "(0, 2, 2),\n",
+    "(0, 4, 2),\n",
+    "(1, 2, 2),\n",
+    "(1, 3, 2),\n",
+    "(2, 3, 2),\n",
+    "(3, 0, 2),\n",
+    "(4, 0, 2),\n",
+    "(5, 6, 2),\n",
+    "(6, 3, 2);\n",
+    "\n",
+    "SELECT * from edge ORDER BY src;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Calculate PageRank"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "7 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>pagerank</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>0.287518161212</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0.210171199451</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0.146637377532</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0.102910437211</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0.102910437211</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0.0972746644343</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0.0525777229482</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 0.287518161212111),\n",
+       " (3, 0.210171199451415),\n",
+       " (2, 0.146637377532288),\n",
+       " (4, 0.102910437211324),\n",
+       " (1, 0.102910437211324),\n",
+       " (6, 0.0972746644343418),\n",
+       " (5, 0.0525777229481976)]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
+    "\n",
+    "SELECT madlib.pagerank(\n",
+    "                         'vertex',             -- Vertex table\n",
+    "                         'id',                 -- Vertix id column\n",
+    "                         'edge',               -- Edge table\n",
+    "                         'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
+    "                         'pagerank_out');      -- Output table of PageRank\n",
+    "\n",
+    "SELECT * FROM pagerank_out ORDER BY pagerank DESC;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Look at the summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__iterations__</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(12,)]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM pagerank_out_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now run PageRank with a damping factor of 0.5 which results in different final values:"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3.  Calculate PageRank with optional params"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "7 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>pagerank</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>0.225477430556</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0.199105076058</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0.136259748402</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0.132687846189</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0.109006420855</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0.109006420855</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0.088457057085</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 0.225477430555642),\n",
+       " (3, 0.199105076058278),\n",
+       " (2, 0.136259748401728),\n",
+       " (6, 0.132687846188875),\n",
+       " (4, 0.109006420855422),\n",
+       " (1, 0.109006420855422),\n",
+       " (5, 0.0884570570850217)]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
+    "SELECT madlib.pagerank(\n",
+    "                         'vertex',             -- Vertex table\n",
+    "                         'id',                 -- Vertix id column\n",
+    "                         'edge',               -- Edge table\n",
+    "                         'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
+    "                         'pagerank_out',       -- Output table of PageRank\n",
+    "                         0.5);                 -- Damping factor\n",
+    "SELECT * FROM pagerank_out ORDER BY pagerank DESC;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. Grouping\n",
+    "Now compute the PageRank distribution separately for each user using the grouping feature:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>user_id</th>\n",
+       "        <th>id</th>\n",
+       "        <th>pagerank</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0.278254883886</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0.201881146671</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>0.142881123461</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>6</td>\n",
+       "        <td>0.114536378321</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>0.100267456154</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0.100267456154</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>5</td>\n",
+       "        <td>0.0619115553529</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0.318546250042</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0.237866867733</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>0.159148764894</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0.11168334438</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>0.11168334438</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>6</td>\n",
+       "        <td>0.0396428571429</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>5</td>\n",
+       "        <td>0.0214285714286</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 0, 0.278254883885528),\n",
+       " (1, 3, 0.201881146670752),\n",
+       " (1, 2, 0.142881123460599),\n",
+       " (1, 6, 0.114536378321472),\n",
+       " (1, 4, 0.10026745615438),\n",
+       " (1, 1, 0.10026745615438),\n",
+       " (1, 5, 0.0619115553528898),\n",
+       " (2, 0, 0.318546250041731),\n",
+       " (2, 3, 0.237866867733431),\n",
+       " (2, 2, 0.159148764893974),\n",
+       " (2, 1, 0.111683344379718),\n",
+       " (2, 4, 0.111683344379718),\n",
+       " (2, 6, 0.0396428571428571),\n",
+       " (2, 5, 0.0214285714285714)]"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
+    "\n",
+    "SELECT madlib.pagerank(\n",
+    "                         'vertex',             -- Vertex table\n",
+    "                         'id',                 -- Vertix id column\n",
+    "                         'edge',               -- Edge table\n",
+    "                         'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
+    "                         'pagerank_out',       -- Output table of PageRank\n",
+    "                         NULL,                 -- Default damping factor (0.85)\n",
+    "                         NULL,                 -- Default max iters (100)\n",
+    "                         0.00000001,           -- Threshold\n",
+    "                         'user_id');           -- Grouping column name\n",
+    "\n",
+    "SELECT * FROM pagerank_out ORDER BY user_id, pagerank DESC;"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "2 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>user_id</th>\n",
+       "        <th>__iterations__</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>27</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>31</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 27), (2, 31)]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM pagerank_out_summary ORDER BY user_id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5. Personalized PageRank\n",
+    "Here we specify {2,4} as the personalization vertices. This parameter could be specified as ARRAY[2,4] as well:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "7 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>pagerank</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>0.282616480981</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0.189069710497</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0.177501646133</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0.15505560795</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0.0800556079496</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0.0743076577868</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0.0401701653568</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 0.282616480980651),\n",
+       " (2, 0.18906971049691),\n",
+       " (3, 0.177501646133459),\n",
+       " (4, 0.155055607949638),\n",
+       " (1, 0.0800556079496381),\n",
+       " (6, 0.0743076577867786),\n",
+       " (5, 0.0401701653567887)]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS pagerank_out, pagerank_out_summary;\n",
+    "SELECT madlib.pagerank(\n",
+    "                       'vertex',             -- Vertex table\n",
+    "                       'id',                 -- Vertix id column\n",
+    "                       'edge',               -- Edge table\n",
+    "                       'src=src, dest=dest', -- Comma delimted string of edge arguments\n",
+    "                       'pagerank_out',       -- Output table of PageRank\n",
+    "                        NULL,                -- Default damping factor (0.85)\n",
+    "                        NULL,                -- Default max iters (100)\n",
+    "                        NULL,                -- Default Threshold\n",
+    "                        NULL,                -- No Grouping\n",
+    "                       '{2,4}');             -- Personalization vertices\n",
+    "SELECT * FROM pagerank_out ORDER BY pagerank DESC;"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__iterations__</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>37</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(37,)]"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM pagerank_out_summary;"
+   ]
+  }
+ ],
+ "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}


[11/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Encoding-categorical-variables-v2.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Encoding-categorical-variables-v2.ipynb b/community-artifacts/Encoding-categorical-variables-v2.ipynb
new file mode 100644
index 0000000..5e4cb6f
--- /dev/null
+++ b/community-artifacts/Encoding-categorical-variables-v2.ipynb
@@ -0,0 +1,4026 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Encoding categorical variables\n",
+    "This is the new module that replaces create_indicator_variables() which was deprecated as of MADlib v1.10"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-21-g3af2d70, cmake configuration time: Mon Feb 26 18:00:54 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-21-g3af2d70, cmake configuration time: Mon Feb 26 18:00:54 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1.  Load data set\n",
+    "Use a subset of the abalone dataset:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "20 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sex</th>\n",
+       "        <th>length</th>\n",
+       "        <th>diameter</th>\n",
+       "        <th>height</th>\n",
+       "        <th>rings</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.455</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.095</td>\n",
+       "        <td>15</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.265</td>\n",
+       "        <td>0.09</td>\n",
+       "        <td>7</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.53</td>\n",
+       "        <td>0.42</td>\n",
+       "        <td>0.135</td>\n",
+       "        <td>9</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>10</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>I</td>\n",
+       "        <td>0.33</td>\n",
+       "        <td>0.255</td>\n",
+       "        <td>0.08</td>\n",
+       "        <td>7</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>I</td>\n",
+       "        <td>0.425</td>\n",
+       "        <td>0.3</td>\n",
+       "        <td>0.095</td>\n",
+       "        <td>8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.53</td>\n",
+       "        <td>0.415</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>20</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.545</td>\n",
+       "        <td>0.425</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>16</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.475</td>\n",
+       "        <td>0.37</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>9</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.55</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>19</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.525</td>\n",
+       "        <td>0.38</td>\n",
+       "        <td>0.14</td>\n",
+       "        <td>14</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.43</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.11</td>\n",
+       "        <td>10</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.49</td>\n",
+       "        <td>0.38</td>\n",
+       "        <td>0.135</td>\n",
+       "        <td>11</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.535</td>\n",
+       "        <td>0.405</td>\n",
+       "        <td>0.145</td>\n",
+       "        <td>10</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.47</td>\n",
+       "        <td>0.355</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>10</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.5</td>\n",
+       "        <td>0.4</td>\n",
+       "        <td>0.13</td>\n",
+       "        <td>12</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>I</td>\n",
+       "        <td>0.355</td>\n",
+       "        <td>0.28</td>\n",
+       "        <td>0.085</td>\n",
+       "        <td>7</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>F</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.34</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>10</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>M</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.295</td>\n",
+       "        <td>0.08</td>\n",
+       "        <td>7</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>None</td>\n",
+       "        <td>0.45</td>\n",
+       "        <td>0.32</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>9</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u'M', 0.455, 0.365, 0.095, 15),\n",
+       " (2, u'M', 0.35, 0.265, 0.09, 7),\n",
+       " (3, u'F', 0.53, 0.42, 0.135, 9),\n",
+       " (4, u'M', 0.44, 0.365, 0.125, 10),\n",
+       " (5, u'I', 0.33, 0.255, 0.08, 7),\n",
+       " (6, u'I', 0.425, 0.3, 0.095, 8),\n",
+       " (7, u'F', 0.53, 0.415, 0.15, 20),\n",
+       " (8, u'F', 0.545, 0.425, 0.125, 16),\n",
+       " (9, u'M', 0.475, 0.37, 0.125, 9),\n",
+       " (10, None, 0.55, 0.44, 0.15, 19),\n",
+       " (11, u'F', 0.525, 0.38, 0.14, 14),\n",
+       " (12, u'M', 0.43, 0.35, 0.11, 10),\n",
+       " (13, u'M', 0.49, 0.38, 0.135, 11),\n",
+       " (14, u'F', 0.535, 0.405, 0.145, 10),\n",
+       " (15, u'F', 0.47, 0.355, 0.1, 10),\n",
+       " (16, u'M', 0.5, 0.4, 0.13, 12),\n",
+       " (17, u'I', 0.355, 0.28, 0.085, 7),\n",
+       " (18, u'F', 0.44, 0.34, 0.1, 10),\n",
+       " (19, u'M', 0.365, 0.295, 0.08, 7),\n",
+       " (20, None, 0.45, 0.32, 0.1, 9)]"
+      ]
+     },
+     "execution_count": 28,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql \n",
+    "DROP TABLE IF EXISTS abalone;\n",
+    "\n",
+    "CREATE TABLE abalone (\n",
+    "    id serial,\n",
+    "    sex character varying,\n",
+    "    length double precision,\n",
+    "    diameter double precision,\n",
+    "    height double precision,\n",
+    "    rings int\n",
+    ");\n",
+    "\n",
+    "INSERT INTO abalone (sex, length, diameter, height, rings) VALUES\n",
+    "('M',    0.455,  0.365,  0.095,  15),\n",
+    "('M',    0.35,   0.265,  0.09,   7),\n",
+    "('F',    0.53,   0.42,   0.135,  9),\n",
+    "('M',    0.44,   0.365,  0.125,  10),\n",
+    "('I',    0.33,   0.255,  0.08,   7),\n",
+    "('I',    0.425,  0.3,    0.095,  8),\n",
+    "('F',    0.53,   0.415,  0.15,   20),\n",
+    "('F',    0.545,  0.425,  0.125,  16),\n",
+    "('M',    0.475,  0.37,   0.125,  9),\n",
+    "(null,   0.55,   0.44,   0.15,   19),\n",
+    "('F',    0.525,  0.38,   0.14,   14),\n",
+    "('M',    0.43,   0.35,   0.11,   10),\n",
+    "('M',    0.49,   0.38,   0.135,  11),\n",
+    "('F',    0.535,  0.405,  0.145,  10),\n",
+    "('F',    0.47,   0.355,  0.1,    10),\n",
+    "('M',    0.5,    0.4,    0.13,   12),\n",
+    "('I',    0.355,  0.28,   0.085,  7),\n",
+    "('F',    0.44,   0.34,   0.1,    10),\n",
+    "('M',    0.365,  0.295,  0.08,   7),\n",
+    "(null,   0.45,   0.32,   0.1,    9);\n",
+    "\n",
+    "SELECT * FROM abalone ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2. Create new table with one-hot encoding.\n",
+    "The column 'sex' is replaced by three columns encoding the values 'F', 'M' and 'I'.  Null values are not encoded by default:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>length</th>\n",
+       "        <th>diameter</th>\n",
+       "        <th>height</th>\n",
+       "        <th>rings</th>\n",
+       "        <th>sex_F</th>\n",
+       "        <th>sex_I</th>\n",
+       "        <th>sex_M</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0.455</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.095</td>\n",
+       "        <td>15</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.265</td>\n",
+       "        <td>0.09</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0.53</td>\n",
+       "        <td>0.42</td>\n",
+       "        <td>0.135</td>\n",
+       "        <td>9</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0.33</td>\n",
+       "        <td>0.255</td>\n",
+       "        <td>0.08</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0.425</td>\n",
+       "        <td>0.3</td>\n",
+       "        <td>0.095</td>\n",
+       "        <td>8</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>0.53</td>\n",
+       "        <td>0.415</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>20</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>0.545</td>\n",
+       "        <td>0.425</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>16</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>0.475</td>\n",
+       "        <td>0.37</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>0.55</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>19</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>0.525</td>\n",
+       "        <td>0.38</td>\n",
+       "        <td>0.14</td>\n",
+       "        <td>14</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>0.43</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.11</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>0.49</td>\n",
+       "        <td>0.38</td>\n",
+       "        <td>0.135</td>\n",
+       "        <td>11</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>0.535</td>\n",
+       "        <td>0.405</td>\n",
+       "        <td>0.145</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>0.47</td>\n",
+       "        <td>0.355</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>0.5</td>\n",
+       "        <td>0.4</td>\n",
+       "        <td>0.13</td>\n",
+       "        <td>12</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>0.355</td>\n",
+       "        <td>0.28</td>\n",
+       "        <td>0.085</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.34</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.295</td>\n",
+       "        <td>0.08</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>0.45</td>\n",
+       "        <td>0.32</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 0.455, 0.365, 0.095, 15, 0, 0, 1),\n",
+       " (2, 0.35, 0.265, 0.09, 7, 0, 0, 1),\n",
+       " (3, 0.53, 0.42, 0.135, 9, 1, 0, 0),\n",
+       " (4, 0.44, 0.365, 0.125, 10, 0, 0, 1),\n",
+       " (5, 0.33, 0.255, 0.08, 7, 0, 1, 0),\n",
+       " (6, 0.425, 0.3, 0.095, 8, 0, 1, 0),\n",
+       " (7, 0.53, 0.415, 0.15, 20, 1, 0, 0),\n",
+       " (8, 0.545, 0.425, 0.125, 16, 1, 0, 0),\n",
+       " (9, 0.475, 0.37, 0.125, 9, 0, 0, 1),\n",
+       " (10, 0.55, 0.44, 0.15, 19, 0, 0, 0),\n",
+       " (11, 0.525, 0.38, 0.14, 14, 1, 0, 0),\n",
+       " (12, 0.43, 0.35, 0.11, 10, 0, 0, 1),\n",
+       " (13, 0.49, 0.38, 0.135, 11, 0, 0, 1),\n",
+       " (14, 0.535, 0.405, 0.145, 10, 1, 0, 0),\n",
+       " (15, 0.47, 0.355, 0.1, 10, 1, 0, 0),\n",
+       " (16, 0.5, 0.4, 0.13, 12, 0, 0, 1),\n",
+       " (17, 0.355, 0.28, 0.085, 7, 0, 1, 0),\n",
+       " (18, 0.44, 0.34, 0.1, 10, 1, 0, 0),\n",
+       " (19, 0.365, 0.295, 0.08, 7, 0, 0, 1),\n",
+       " (20, 0.45, 0.32, 0.1, 9, 0, 0, 0)]"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        'sex'                        -- Categorical columns\n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 3.  Encode null values\n",
+    "Now include NULL values in encoding (note the additional column 'sex_null'):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>length</th>\n",
+       "        <th>diameter</th>\n",
+       "        <th>height</th>\n",
+       "        <th>rings</th>\n",
+       "        <th>sex_F</th>\n",
+       "        <th>sex_I</th>\n",
+       "        <th>sex_M</th>\n",
+       "        <th>sex_null</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0.455</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.095</td>\n",
+       "        <td>15</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.265</td>\n",
+       "        <td>0.09</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0.53</td>\n",
+       "        <td>0.42</td>\n",
+       "        <td>0.135</td>\n",
+       "        <td>9</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0.33</td>\n",
+       "        <td>0.255</td>\n",
+       "        <td>0.08</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0.425</td>\n",
+       "        <td>0.3</td>\n",
+       "        <td>0.095</td>\n",
+       "        <td>8</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>0.53</td>\n",
+       "        <td>0.415</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>20</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>0.545</td>\n",
+       "        <td>0.425</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>16</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>0.475</td>\n",
+       "        <td>0.37</td>\n",
+       "        <td>0.125</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>0.55</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.15</td>\n",
+       "        <td>19</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>0.525</td>\n",
+       "        <td>0.38</td>\n",
+       "        <td>0.14</td>\n",
+       "        <td>14</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>0.43</td>\n",
+       "        <td>0.35</td>\n",
+       "        <td>0.11</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>0.49</td>\n",
+       "        <td>0.38</td>\n",
+       "        <td>0.135</td>\n",
+       "        <td>11</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>0.535</td>\n",
+       "        <td>0.405</td>\n",
+       "        <td>0.145</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>0.47</td>\n",
+       "        <td>0.355</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>0.5</td>\n",
+       "        <td>0.4</td>\n",
+       "        <td>0.13</td>\n",
+       "        <td>12</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>0.355</td>\n",
+       "        <td>0.28</td>\n",
+       "        <td>0.085</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>0.44</td>\n",
+       "        <td>0.34</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>0.365</td>\n",
+       "        <td>0.295</td>\n",
+       "        <td>0.08</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>0.45</td>\n",
+       "        <td>0.32</td>\n",
+       "        <td>0.1</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 0.455, 0.365, 0.095, 15, 0, 0, 1, 0),\n",
+       " (2, 0.35, 0.265, 0.09, 7, 0, 0, 1, 0),\n",
+       " (3, 0.53, 0.42, 0.135, 9, 1, 0, 0, 0),\n",
+       " (4, 0.44, 0.365, 0.125, 10, 0, 0, 1, 0),\n",
+       " (5, 0.33, 0.255, 0.08, 7, 0, 1, 0, 0),\n",
+       " (6, 0.425, 0.3, 0.095, 8, 0, 1, 0, 0),\n",
+       " (7, 0.53, 0.415, 0.15, 20, 1, 0, 0, 0),\n",
+       " (8, 0.545, 0.425, 0.125, 16, 1, 0, 0, 0),\n",
+       " (9, 0.475, 0.37, 0.125, 9, 0, 0, 1, 0),\n",
+       " (10, 0.55, 0.44, 0.15, 19, 0, 0, 0, 1),\n",
+       " (11, 0.525, 0.38, 0.14, 14, 1, 0, 0, 0),\n",
+       " (12, 0.43, 0.35, 0.11, 10, 0, 0, 1, 0),\n",
+       " (13, 0.49, 0.38, 0.135, 11, 0, 0, 1, 0),\n",
+       " (14, 0.535, 0.405, 0.145, 10, 1, 0, 0, 0),\n",
+       " (15, 0.47, 0.355, 0.1, 10, 1, 0, 0, 0),\n",
+       " (16, 0.5, 0.4, 0.13, 12, 0, 0, 1, 0),\n",
+       " (17, 0.355, 0.28, 0.085, 7, 0, 1, 0, 0),\n",
+       " (18, 0.44, 0.34, 0.1, 10, 1, 0, 0, 0),\n",
+       " (19, 0.365, 0.295, 0.08, 7, 0, 0, 1, 0),\n",
+       " (20, 0.45, 0.32, 0.1, 9, 0, 0, 0, 1)]"
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        'sex',                       -- Categorical columns\n",
+    "        NULL,                        -- Categorical columns to exclude\n",
+    "        NULL,                        -- Index columns\n",
+    "        NULL,                        -- Top values\n",
+    "        NULL,                        -- Value to drop for dummy encoding\n",
+    "        TRUE                         -- Encode nulls\n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 4. Encode all categorical variables and specify an index\n",
+    "Encode all categorical variables in the source table. Also, specify the column 'id' as the index (primary key) - this changes the output table to only include the index and the encoded variables:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sex_F</th>\n",
+       "        <th>sex_I</th>\n",
+       "        <th>sex_M</th>\n",
+       "        <th>rings_10</th>\n",
+       "        <th>rings_11</th>\n",
+       "        <th>rings_12</th>\n",
+       "        <th>rings_14</th>\n",
+       "        <th>rings_15</th>\n",
+       "        <th>rings_16</th>\n",
+       "        <th>rings_19</th>\n",
+       "        <th>rings_20</th>\n",
+       "        <th>rings_7</th>\n",
+       "        <th>rings_8</th>\n",
+       "        <th>rings_9</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),\n",
+       " (2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),\n",
+       " (4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (6, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),\n",
+       " (7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),\n",
+       " (8, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),\n",
+       " (9, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),\n",
+       " (10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),\n",
+       " (11, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (12, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (13, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (14, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (15, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (16, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (17, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (18, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (19, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        '*',                         -- Categorical columns\n",
+    "        NULL,                        -- Categorical columns to exclude\n",
+    "        'id'                         -- Index columns\n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 5. Encode top values\n",
+    "Now let's encode only the top values and group others into a miscellaneous bucket column. Top values can be global across all columns or specified by column.  As an example of the latter, here are the top 2 'sex' values and the top 50% of  'rings' values:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sex_M</th>\n",
+       "        <th>sex_F</th>\n",
+       "        <th>sex__misc__</th>\n",
+       "        <th>rings_10</th>\n",
+       "        <th>rings_7</th>\n",
+       "        <th>rings_9</th>\n",
+       "        <th>rings__misc__</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 1, 0, 0, 0, 0, 0, 1),\n",
+       " (2, 1, 0, 0, 0, 1, 0, 0),\n",
+       " (3, 0, 1, 0, 0, 0, 1, 0),\n",
+       " (4, 1, 0, 0, 1, 0, 0, 0),\n",
+       " (5, 0, 0, 1, 0, 1, 0, 0),\n",
+       " (6, 0, 0, 1, 0, 0, 0, 1),\n",
+       " (7, 0, 1, 0, 0, 0, 0, 1),\n",
+       " (8, 0, 1, 0, 0, 0, 0, 1),\n",
+       " (9, 1, 0, 0, 0, 0, 1, 0),\n",
+       " (10, 0, 0, 0, 0, 0, 0, 1),\n",
+       " (11, 0, 1, 0, 0, 0, 0, 1),\n",
+       " (12, 1, 0, 0, 1, 0, 0, 0),\n",
+       " (13, 1, 0, 0, 0, 0, 0, 1),\n",
+       " (14, 0, 1, 0, 1, 0, 0, 0),\n",
+       " (15, 0, 1, 0, 1, 0, 0, 0),\n",
+       " (16, 1, 0, 0, 0, 0, 0, 1),\n",
+       " (17, 0, 0, 1, 0, 1, 0, 0),\n",
+       " (18, 0, 1, 0, 1, 0, 0, 0),\n",
+       " (19, 1, 0, 0, 0, 1, 0, 0),\n",
+       " (20, 0, 0, 0, 0, 0, 1, 0)]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        '*',                         -- Categorical columns\n",
+    "        NULL,                        -- Categorical columns to exclude\n",
+    "        'id',                        -- Index columns\n",
+    "        'sex=2, rings=0.5'           -- Top values\n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 6. Show raw variables and encoded variables together\n",
+    "If you want to see both the raw categorical variable and its encoded form in the output_table, then include the categorical variables 'sex' and 'rings' in the index parameter. (Remember that this will not work if you specify '*' for the parameter 'categorical_cols', because in this case 'row_id' columns will not be encoded at all.)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sex</th>\n",
+       "        <th>rings</th>\n",
+       "        <th>sex_F</th>\n",
+       "        <th>sex_I</th>\n",
+       "        <th>sex_M</th>\n",
+       "        <th>rings_10</th>\n",
+       "        <th>rings_11</th>\n",
+       "        <th>rings_12</th>\n",
+       "        <th>rings_14</th>\n",
+       "        <th>rings_15</th>\n",
+       "        <th>rings_16</th>\n",
+       "        <th>rings_19</th>\n",
+       "        <th>rings_20</th>\n",
+       "        <th>rings_7</th>\n",
+       "        <th>rings_8</th>\n",
+       "        <th>rings_9</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>M</td>\n",
+       "        <td>15</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>M</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>F</td>\n",
+       "        <td>9</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>M</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>I</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>I</td>\n",
+       "        <td>8</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>F</td>\n",
+       "        <td>20</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>F</td>\n",
+       "        <td>16</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>M</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>None</td>\n",
+       "        <td>19</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>F</td>\n",
+       "        <td>14</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>M</td>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>M</td>\n",
+       "        <td>11</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>F</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>F</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>M</td>\n",
+       "        <td>12</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>I</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>F</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>M</td>\n",
+       "        <td>7</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>None</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u'M', 15, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),\n",
+       " (2, u'M', 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (3, u'F', 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),\n",
+       " (4, u'M', 10, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (5, u'I', 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (6, u'I', 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),\n",
+       " (7, u'F', 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),\n",
+       " (8, u'F', 16, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),\n",
+       " (9, u'M', 9, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),\n",
+       " (10, None, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),\n",
+       " (11, u'F', 14, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (12, u'M', 10, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (13, u'M', 11, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (14, u'F', 10, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (15, u'F', 10, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (16, u'M', 12, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (17, u'I', 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (18, u'F', 10, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n",
+       " (19, u'M', 7, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n",
+       " (20, None, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        'sex, rings',                -- Categorical columns\n",
+    "        NULL,                        -- Categorical columns to exclude\n",
+    "        'id, sex, rings'             -- Index columns\n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 7. Dummy encoding\n",
+    "For dummy encoding, let's make the 'I' value from the 'sex' variable as the reference.\n",
+    "Here we use the 'value_to_drop' parameter:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sex_F</th>\n",
+       "        <th>sex_M</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 0, 1),\n",
+       " (2, 0, 1),\n",
+       " (3, 1, 0),\n",
+       " (4, 0, 1),\n",
+       " (5, 0, 0),\n",
+       " (6, 0, 0),\n",
+       " (7, 1, 0),\n",
+       " (8, 1, 0),\n",
+       " (9, 0, 1),\n",
+       " (10, 0, 0),\n",
+       " (11, 1, 0),\n",
+       " (12, 0, 1),\n",
+       " (13, 0, 1),\n",
+       " (14, 1, 0),\n",
+       " (15, 1, 0),\n",
+       " (16, 0, 1),\n",
+       " (17, 0, 0),\n",
+       " (18, 1, 0),\n",
+       " (19, 0, 1),\n",
+       " (20, 0, 0)]"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        '*',                         -- Categorical columns\n",
+    "        'rings',                     -- Categorical columns to exclude\n",
+    "        'id',                        -- Index columns\n",
+    "        NULL,                        -- Top value\n",
+    "        'sex=I'                      -- Value to drop for dummy encoding              \n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 8. Array output\n",
+    "Create an array output for the two categorical variables in the source table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>__encoded_variables__</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>[1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>[1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>[0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>[1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]),\n",
+       " (2, [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]),\n",
+       " (3, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
+       " (4, [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (5, [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]),\n",
+       " (6, [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]),\n",
+       " (7, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]),\n",
+       " (8, [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]),\n",
+       " (9, [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
+       " (10, [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]),\n",
+       " (11, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (12, [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (13, [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (14, [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (15, [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (16, [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (17, [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]),\n",
+       " (18, [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),\n",
+       " (19, [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]),\n",
+       " (20, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS abalone_out, abalone_out_dictionary;\n",
+    "\n",
+    "SELECT madlib.encode_categorical_variables (\n",
+    "        'abalone',                   -- Source table\n",
+    "        'abalone_out',               -- Output table\n",
+    "        '*',                         -- Categorical columns\n",
+    "        NULL,                        -- Categorical columns to exclude\n",
+    "        'id',                        -- Index columns\n",
+    "        NULL,                        -- Top values\n",
+    "        NULL,                        -- Value to drop for dummy encoding\n",
+    "        NULL,                        -- Encode nulls\n",
+    "        'array'                      -- Output type\n",
+    "        );\n",
+    "\n",
+    "SELECT * FROM abalone_out ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "And here is the dictionary table that specifies the index into the array:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>encoded_column_name</th>\n",
+       "        <th>index</th>\n",
+       "        <th>variable</th>\n",
+       "        <th>value</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>1</td>\n",
+       "        <td>sex</td>\n",
+       "        <td>F</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>2</td>\n",
+       "        <td>sex</td>\n",
+       "        <td>I</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>3</td>\n",
+       "        <td>sex</td>\n",
+       "        <td>M</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>4</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>10</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>5</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>11</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>6</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>12</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>7</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>14</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>8</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>15</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>9</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>16</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>10</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>19</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>11</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>20</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>12</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>7</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>13</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>__encoded_variables__</td>\n",
+       "        <td>14</td>\n",
+       "        <td>rings</td>\n",
+       "        <td>9</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'__encoded_variables__', 1, u'sex', u'F'),\n",
+       " (u'__encoded_variables__', 2, u'sex', u'I'),\n",
+       " (u'__encoded_variables__', 3, u'sex', u'M'),\n",
+       " (u'__encoded_variables__', 4, u'rings', u'10'),\n",
+       " (u'__encoded_variables__', 5, u'rings', u'11'),\n",
+       " (u'__encoded_variables__', 6, u'rings', u'12'),\n",
+       " (u'__encoded_variables__', 7, u'rings', u'14'),\n",
+       " (u'__encoded_variables__', 8, u'rings', u'15'),\n",
+       " (u'__encoded_variables__', 9, u'rings', u'16'),\n",
+       " (u'__encoded_variables__', 10, u'rings', u'19'),\n",
+       " (u'__encoded_variables__', 11, u'rings', u'20'),\n",
+       " (u'__encoded_variables__', 12, u'rings', u'7'),\n",
+       " (u'__encoded_variables__', 13, u'rings', u'8'),\n",
+       " (u'__encoded_variables__', 14, u'rings', u'9')]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql SELECT * FROM abalone_out_dictionary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 9. Dictionary output\n",
+    "Create a dictionary:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>sex_1</th>\n",
+       "        <th>sex_2</th>\n",
+       "        <th>sex_3</th>\n",
+       "        <th>rings_1</th>\n",
+       "        <th>rings_2</th>\n",
+       "        <th>rings_3</th>\n",
+       "        <th>rings_4</th>\n",
+       "        <th>rings_5</th>\n",
+       "        <th>rings_6</th>\n",
+       "        <th>rings_7</th>\n",
+       "        <th>rings_8</th>\n",
+       "        <th>rings_9</th>\n",
+       "        <th>rings_10</th>\n",
+       "        <th>rings_11</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0<

<TRUNCATED>

[08/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Minibatch-preprocessor-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Minibatch-preprocessor-v1.ipynb b/community-artifacts/Minibatch-preprocessor-v1.ipynb
new file mode 100644
index 0000000..fe03a27
--- /dev/null
+++ b/community-artifacts/Minibatch-preprocessor-v1.ipynb
@@ -0,0 +1,1330 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Mini-batch preprocessor\n",
+    "\n",
+    "The mini-batch preprocessor is a utility that prepares input data for use by models that support mini-batch as an optimization option. (This is currently only the case for Neural Networks.) It is effectively a packing operation that builds arrays of dependent and independent variables from the source data table.\n",
+    "\n",
+    "The mini-batch preprocessor was added in MADlib 1.14."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-66-g4cced1b, cmake configuration time: Mon Apr 23 16:26:17 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-66-g4cced1b, cmake configuration time: Mon Apr 23 16:26:17 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1. Load data\n",
+    "Based on the well known iris dataset."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "52 rows affected.\n",
+      "52 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>attributes</th>\n",
+       "        <th>class_text</th>\n",
+       "        <th>class</th>\n",
+       "        <th>state</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>[Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>[Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>[Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>[Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>[Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>27</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>28</td>\n",
+       "        <td>[Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>29</td>\n",
+       "        <td>[Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>30</td>\n",
+       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>31</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>32</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>33</td>\n",
+       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>34</td>\n",
+       "        <td>[Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>35</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>36</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>37</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')]</td>\n",
+       "        <td>Iris_setosa</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>38</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>39</td>\n",
+       "        <td>[Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>40</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>41</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>42</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>43</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>44</td>\n",
+       "        <td>[Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>45</td>\n",
+       "        <td>[Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>46</td>\n",
+       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>47</td>\n",
+       "        <td>[Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>48</td>\n",
+       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>49</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>50</td>\n",
+       "        <td>[Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>51</td>\n",
+       "        <td>[Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>52</td>\n",
+       "        <td>[Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')]</td>\n",
+       "        <td>Iris_versicolor</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Tennessee</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (2, [Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (3, [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (4, [Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (5, [Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (6, [Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (7, [Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (8, [Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (9, [Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (10, [Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (11, [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (12, [Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
+       " (13, [Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (14, [Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (15, [Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (16, [Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (17, [Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (18, [Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (19, [Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (20, [Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (21, [Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (22, [Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (23, [Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (24, [Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (25, [Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (26, [Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (27, [Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')], u'Iris_versicolor', 2, u'Alaska'),\n",
+       " (28, [Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (29, [Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (30, [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (31, [Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (32, [Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (33, [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (34, [Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (35, [Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (36, [Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (37, [Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
+       " (38, [Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (39, [Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (40, [Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (41, [Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (42, [Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (43, [Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (44, [Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (45, [Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (46, [Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (47, [Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (48, [Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (49, [Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (50, [Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (51, [Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')], u'Iris_versicolor', 2, u'Tennessee'),\n",
+       " (52, [Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee')]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_data;\n",
+    "\n",
+    "CREATE TABLE iris_data(\n",
+    "    id serial,\n",
+    "    attributes numeric[],\n",
+    "    class_text varchar,\n",
+    "    class integer,\n",
+    "    state varchar\n",
+    ");\n",
+    "\n",
+    "INSERT INTO iris_data(id, attributes, class_text, class, state) VALUES\n",
+    "(1,ARRAY[5.0,3.2,1.2,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(2,ARRAY[5.5,3.5,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(3,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Alaska'),\n",
+    "(4,ARRAY[4.4,3.0,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(5,ARRAY[5.1,3.4,1.5,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(6,ARRAY[5.0,3.5,1.3,0.3],'Iris_setosa',1,'Alaska'),\n",
+    "(7,ARRAY[4.5,2.3,1.3,0.3],'Iris_setosa',1,'Alaska'),\n",
+    "(8,ARRAY[4.4,3.2,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(9,ARRAY[5.0,3.5,1.6,0.6],'Iris_setosa',1,'Alaska'),\n",
+    "(10,ARRAY[5.1,3.8,1.9,0.4],'Iris_setosa',1,'Alaska'),\n",
+    "(11,ARRAY[4.8,3.0,1.4,0.3],'Iris_setosa',1,'Alaska'),\n",
+    "(12,ARRAY[5.1,3.8,1.6,0.2],'Iris_setosa',1,'Alaska'),\n",
+    "(13,ARRAY[5.7,2.8,4.5,1.3],'Iris_versicolor',2,'Alaska'),\n",
+    "(14,ARRAY[6.3,3.3,4.7,1.6],'Iris_versicolor',2,'Alaska'),\n",
+    "(15,ARRAY[4.9,2.4,3.3,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(16,ARRAY[6.6,2.9,4.6,1.3],'Iris_versicolor',2,'Alaska'),\n",
+    "(17,ARRAY[5.2,2.7,3.9,1.4],'Iris_versicolor',2,'Alaska'),\n",
+    "(18,ARRAY[5.0,2.0,3.5,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(19,ARRAY[5.9,3.0,4.2,1.5],'Iris_versicolor',2,'Alaska'),\n",
+    "(20,ARRAY[6.0,2.2,4.0,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(21,ARRAY[6.1,2.9,4.7,1.4],'Iris_versicolor',2,'Alaska'),\n",
+    "(22,ARRAY[5.6,2.9,3.6,1.3],'Iris_versicolor',2,'Alaska'),\n",
+    "(23,ARRAY[6.7,3.1,4.4,1.4],'Iris_versicolor',2,'Alaska'),\n",
+    "(24,ARRAY[5.6,3.0,4.5,1.5],'Iris_versicolor',2,'Alaska'),\n",
+    "(25,ARRAY[5.8,2.7,4.1,1.0],'Iris_versicolor',2,'Alaska'),\n",
+    "(26,ARRAY[6.2,2.2,4.5,1.5],'Iris_versicolor',2,'Alaska'),\n",
+    "(27,ARRAY[5.6,2.5,3.9,1.1],'Iris_versicolor',2,'Alaska'),\n",
+    "(28,ARRAY[5.0,3.4,1.5,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(29,ARRAY[4.4,2.9,1.4,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(30,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Tennessee'),\n",
+    "(31,ARRAY[5.4,3.7,1.5,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(32,ARRAY[4.8,3.4,1.6,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(33,ARRAY[4.8,3.0,1.4,0.1],'Iris_setosa',1,'Tennessee'),\n",
+    "(34,ARRAY[4.3,3.0,1.1,0.1],'Iris_setosa',1,'Tennessee'),\n",
+    "(35,ARRAY[5.8,4.0,1.2,0.2],'Iris_setosa',1,'Tennessee'),\n",
+    "(36,ARRAY[5.7,4.4,1.5,0.4],'Iris_setosa',1,'Tennessee'),\n",
+    "(37,ARRAY[5.4,3.9,1.3,0.4],'Iris_setosa',1,'Tennessee'),\n",
+    "(38,ARRAY[6.0,2.9,4.5,1.5],'Iris_versicolor',2,'Tennessee'),\n",
+    "(39,ARRAY[5.7,2.6,3.5,1.0],'Iris_versicolor',2,'Tennessee'),\n",
+    "(40,ARRAY[5.5,2.4,3.8,1.1],'Iris_versicolor',2,'Tennessee'),\n",
+    "(41,ARRAY[5.5,2.4,3.7,1.0],'Iris_versicolor',2,'Tennessee'),\n",
+    "(42,ARRAY[5.8,2.7,3.9,1.2],'Iris_versicolor',2,'Tennessee'),\n",
+    "(43,ARRAY[6.0,2.7,5.1,1.6],'Iris_versicolor',2,'Tennessee'),\n",
+    "(44,ARRAY[5.4,3.0,4.5,1.5],'Iris_versicolor',2,'Tennessee'),\n",
+    "(45,ARRAY[6.0,3.4,4.5,1.6],'Iris_versicolor',2,'Tennessee'),\n",
+    "(46,ARRAY[6.7,3.1,4.7,1.5],'Iris_versicolor',2,'Tennessee'),\n",
+    "(47,ARRAY[6.3,2.3,4.4,1.3],'Iris_versicolor',2,'Tennessee'),\n",
+    "(48,ARRAY[5.6,3.0,4.1,1.3],'Iris_versicolor',2,'Tennessee'),\n",
+    "(49,ARRAY[5.5,2.5,4.0,1.3],'Iris_versicolor',2,'Tennessee'),\n",
+    "(50,ARRAY[5.5,2.6,4.4,1.2],'Iris_versicolor',2,'Tennessee'),\n",
+    "(51,ARRAY[6.1,3.0,4.6,1.4],'Iris_versicolor',2,'Tennessee'),\n",
+    "(52,ARRAY[5.8,2.6,4.0,1.2],'Iris_versicolor',2,'Tennessee');\n",
+    "\n",
+    "SELECT * FROM iris_data ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Run preprocessor \n",
+    "\n",
+    "Run the preprocessor to generate the packed output table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "2 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__id__</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[[1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025], [-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [-0.0995580974152422, 1.810136328
 03286, -1.21615408353289, -0.821161468643789], [0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597], [2.07145073637487, 0.20455698375943, 0.969398182526215, 0.995876674738521], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [-0.934561495026824, -1
 .20032494247982, 0.193879636505243, 0.269061417385597]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[[1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [1.90445005685255, -0.19683785230
 8928, 1.11040155453003, 0.81417286040029], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [0.234443261629389, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [0.568444620674023, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [-0.0995580974152422
 , 1.4087414919645, -1.07515071152907, -1.18456909732025]]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0L, [[1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0]], [[-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025], [-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [0.568444620674023, -0.598232688377286,
  0.616889752516682, 0.632469046062059], [-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597], [2.07145073637487, 0
 .20455698375943, 0.969398182526215, 0.995876674738521], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597]]),\n",
+       " (1L, [[1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], [[-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [-1.76956489263841, 0.00385956572525086, 
 -1.21615408353289, -1.18456909732025], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [0.234443261629389, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [-1.76956489263841, -0.
 196837852308928, -1.14565239753098, -1.18456909732025], [0.568444620674023, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [-0.0995580974152422, 1.4087414919645, -1.07515071152907, -1.18456909732025]])]"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;\n",
+    "\n",
+    "SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table\n",
+    "                                     'iris_data_packed',  -- Output table\n",
+    "                                     'class_text',        -- Dependent variable\n",
+    "                                     'attributes'        -- Independent variables\n",
+    "                                     );\n",
+    "\n",
+    "SELECT * FROM iris_data_packed ORDER BY __id__;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "For small datasets like in this example, buffer size is mainly determined by the number of segments in the database. For a Greenplum database with 2 segments, there will be 2 rows with a buffer size of 26. For PostgresSQL, there would be only one row with a buffer size of 52 since it is a single node database. For larger data sets, other factors go into computing buffers size besides number of segments. \n",
+    "\n",
+    "Also, note above that the dependent variable has been one-hot encoded since it is categorical. Here is a sample of the packed output table\n",
+    "\n",
+    "Review the output summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>source_table</th>\n",
+       "        <th>output_table</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "        <th>dependent_vartype</th>\n",
+       "        <th>buffer_size</th>\n",
+       "        <th>class_values</th>\n",
+       "        <th>num_rows_processed</th>\n",
+       "        <th>num_missing_rows_skipped</th>\n",
+       "        <th>grouping_cols</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>iris_data</td>\n",
+       "        <td>iris_data_packed</td>\n",
+       "        <td>class_text</td>\n",
+       "        <td>attributes</td>\n",
+       "        <td>character varying</td>\n",
+       "        <td>26</td>\n",
+       "        <td>[u'Iris_setosa', u'Iris_versicolor']</td>\n",
+       "        <td>52</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'iris_data', u'iris_data_packed', u'class_text', u'attributes', u'character varying', 26, [u'Iris_setosa', u'Iris_versicolor'], 52, 0, None)]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_data_packed_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review the output standardization table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>mean</th>\n",
+       "        <th>std</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[5.45961538462, 2.99807692308, 3.025, 0.851923076923]</td>\n",
+       "        <td>[0.598799958695, 0.498262513686, 1.41840579525, 0.550346179381]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[([5.45961538462, 2.99807692308, 3.025, 0.851923076923], [0.598799958695, 0.498262513686, 1.41840579525, 0.550346179381])]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_data_packed_standardization;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3.  Change buffer size \n",
+    "\n",
+    "Generally the default buffer size will work well, but if you have occasion to change it:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__id__</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[[0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [2.07145073637487, 0.20455698375943, 0.969398182526215, 0.995876674738521], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[[0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [-0.0995580974152422, 1.4087414919645, -1.07515071152907, -1.18456909732025], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [0.234443261629389, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[0.568444620674023, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[[1.0, 0.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848]]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0L, [[0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]], [[-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [2.07145073637487, 0.20455698375943, 0.969398182526215, 0.995876674738521], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597]]),\n",
+       " (1L, [[0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0]], [[0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [-0.0995580974152422, 1.4087414919645, -1.07515071152907, -1.18456909732025], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597]]),\n",
+       " (2L, [[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], [[-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [0.234443261629389, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202]]),\n",
+       " (3L, [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]], [[0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828]]),\n",
+       " (4L, [[1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], [[0.568444620674023, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025]]),\n",
+       " (5L, [[1.0, 0.0], [1.0, 0.0]], [[-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848]])]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;\n",
+    "\n",
+    "SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table\n",
+    "                                     'iris_data_packed',  -- Output table\n",
+    "                                     'class_text',        -- Dependent variable\n",
+    "                                     'attributes',        -- Independent variables\n",
+    "                                     NULL,                -- Grouping\n",
+    "                                     10                   -- Buffer size\n",
+    "                                     );\n",
+    "\n",
+    "SELECT * FROM iris_data_packed ORDER BY __id__;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review the output summary data:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>source_table</th>\n",
+       "        <th>output_table</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "        <th>dependent_vartype</th>\n",
+       "        <th>buffer_size</th>\n",
+       "        <th>class_values</th>\n",
+       "        <th>num_rows_processed</th>\n",
+       "        <th>num_missing_rows_skipped</th>\n",
+       "        <th>grouping_cols</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>iris_data</td>\n",
+       "        <td>iris_data_packed</td>\n",
+       "        <td>class_text</td>\n",
+       "        <td>attributes</td>\n",
+       "        <td>character varying</td>\n",
+       "        <td>10</td>\n",
+       "        <td>[u'Iris_setosa', u'Iris_versicolor']</td>\n",
+       "        <td>52</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'iris_data', u'iris_data_packed', u'class_text', u'attributes', u'character varying', 10, [u'Iris_setosa', u'Iris_versicolor'], 52, 0, None)]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_data_packed_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. Grouping\n",
+    "\n",
+    "Run the preprocessor with grouping by state:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "5 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__id__</th>\n",
+       "        <th>state</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>Alaska</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[1.26030711687938, -1.615325368523, 1.10943660794792, 1.24354000843452], [1.10129640587123, -0.126074175104234, 1.2524188915498, 1.05700900716934], [0.306242850830503, -0.977074857057813, 0.680489757142278, 0.497416003373807], [0.942285694863087, -1.615325368523, 0.751980898943218, 0.310885002108629], [0.783274983854942, 0.0866759953841608, 0.894963182545097, 1.24354000843452], [-0.806832126226518, 0.299426165872556, -1.03529764608027, -1.36789400927797], [-0.488810704210227, 1.78867735929132, -0.963806504279335, -1.18136300801279], [-1.60188568126725, 0.512176336360951, -1.17827992968215, -1.18136300801279], [-0.965842837234665, 0.0866759953841608, -1.10678878788121, -0.994832006747614], [-0.647821415218373, 1.15042684782613, -1.17827992968215, -0.994832006747614], [-0.647821415218373, -2.04082570949979, 0.394525189938519, 0.310885002108629], [2.05536067192011, 0.299426165872556, 1.03794546614698, 1.05700900716934], [-0.647821415218373, 0.512176336360951, -1.24
 977107148309, -1.18136300801279]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Alaska</td>\n",
+       "        <td>[[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[1.41931782788752, 0.724926506849345, 1.2524188915498, 1.4300710096997], [-0.647821415218373, 1.15042684782613, -0.963806504279335, -0.435239002952081], [0.624264272846795, -0.551574516081023, 0.823472040744157, 0.310885002108629], [-1.4428749702591, -1.4025751980346, -1.17827992968215, -0.994832006747614], [0.306242850830503, -0.126074175104234, 0.466016331739459, 0.870478005904162], [1.89634996091196, -0.126074175104234, 1.18092774974886, 0.870478005904162], [-0.32979999320208, -0.551574516081023, 0.680489757142278, 1.05700900716934], [0.46525356183865, -0.338824345592629, 1.10943660794792, 0.870478005904162], [0.306242850830503, 0.0866759953841608, 1.10943660794792, 1.24354000843452], [-0.488810704210227, 0.93767667733774, -1.03529764608027, -1.18136300801279], [-0.488810704210227, 1.78867735929132, -0.749333078876516, -0.808301005482437], [0.147232139822357, 1.15042684782613, -1.17827992968215, -1.18136300801279], [-1.60188568126725, 0.0866759953841608, -1.1
 7827992968215, -1.18136300801279]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Alaska</td>\n",
+       "        <td>[[0.0, 1.0]]</td>\n",
+       "        <td>[[-0.806832126226518, -1.18982502754621, 0.25154290633664, 0.310885002108629]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>Tennessee</td>\n",
+       "        <td>[[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[-0.0286196553591748, -1.22176567731394, 0.412632633639227, 0.22669394242252], [-0.207492501354026, 1.25994585473, -1.12079945083087, -1.19014319771823], [0.507998882625381, -0.839963903153331, 0.621737008794241, 0.580903227457708], [-0.922983885333435, 0.687243193489089, -1.12079945083087, -1.19014319771823], [1.04461742060994, -0.0763603548321211, 1.03994575910427, 0.935112512492896], [2.11785449657905, 0.114540532248182, 1.10964721748927, 1.11221715501049], [0.507998882625381, -0.649063016073029, 0.552035550409236, 0.580903227457708], [-1.99622096130255, -0.267261241912424, -1.19050090921588, -1.19014319771823], [1.40236311259964, -1.41266656439424, 0.90054284233426, 0.758007869975302], [0.32912603663053, 2.59625206429212, -1.12079945083087, -0.835933912683043], [-0.207492501354026, 1.6417476288906, -1.26020236760088, -0.835933912683043], [-2.1750938072974, -0.0763603548321211, -1.39960528437089, -1.36724784023582], [-0.0286196553591748, -1.22176567731394, 0.
 482334092024232, 0.403798584940115]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Tennessee</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[0.865744574615085, 0.687243193489089, 0.970244300719264, 1.28932179752808], [-0.0286196553591748, -0.839963903153331, 0.90054284233426, 0.580903227457708], [-1.28072957732314, 0.687243193489089, -1.05109799244587, -1.19014319771823], [-1.10185673132829, 0.114540532248182, -1.12079945083087, -1.36724784023582], [-0.0286196553591748, -1.03086479023363, 0.621737008794241, 0.758007869975302], [-0.207492501354026, -0.0763603548321211, 0.970244300719264, 1.11221715501049], [0.865744574615085, -0.649063016073029, 1.38845305102929, 1.28932179752808], [0.150253190635677, -0.0763603548321211, 0.691438467179245, 0.758007869975302], [0.32912603663053, -0.839963903153331, 0.273229716869218, 0.22669394242252], [-1.28072957732314, -0.0763603548321211, -1.19050090921588, -1.36724784023582], [0.507998882625381, 1.8326485159709, -1.32990382598589, -1.19014319771823], [0.865744574615085, -0.267261241912424, 0.970244300719264, 1.11221715501049]]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0L, u'Alaska', [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0]], [[1.26030711687938, -1.615325368523, 1.10943660794792, 1.24354000843452], [1.10129640587123, -0.126074175104234, 1.2524188915498, 1.05700900716934], [0.306242850830503, -0.977074857057813, 0.680489757142278, 0.497416003373807], [0.942285694863087, -1.615325368523, 0.751980898943218, 0.310885002108629], [0.783274983854942, 0.0866759953841608, 0.894963182545097, 1.24354000843452], [-0.806832126226518, 0.299426165872556, -1.03529764608027, -1.36789400927797], [-0.488810704210227, 1.78867735929132, -0.963806504279335, -1.18136300801279], [-1.60188568126725, 0.512176336360951, -1.17827992968215, -1.18136300801279], [-0.965842837234665, 0.0866759953841608, -1.10678878788121, -0.994832006747614], [-0.647821415218373, 1.15042684782613, -1.17827992968215, -0.994832006747614], [-0.647821415218373, -2.040825709499
 79, 0.394525189938519, 0.310885002108629], [2.05536067192011, 0.299426165872556, 1.03794546614698, 1.05700900716934], [-0.647821415218373, 0.512176336360951, -1.24977107148309, -1.18136300801279]]),\n",
+       " (1L, u'Alaska', [[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0]], [[1.41931782788752, 0.724926506849345, 1.2524188915498, 1.4300710096997], [-0.647821415218373, 1.15042684782613, -0.963806504279335, -0.435239002952081], [0.624264272846795, -0.551574516081023, 0.823472040744157, 0.310885002108629], [-1.4428749702591, -1.4025751980346, -1.17827992968215, -0.994832006747614], [0.306242850830503, -0.126074175104234, 0.466016331739459, 0.870478005904162], [1.89634996091196, -0.126074175104234, 1.18092774974886, 0.870478005904162], [-0.32979999320208, -0.551574516081023, 0.680489757142278, 1.05700900716934], [0.46525356183865, -0.338824345592629, 1.10943660794792, 0.870478005904162], [0.306242850830503, 0.0866759953841608, 1.10943660794792, 1.24354000843452], [-0.488810704210227, 0.93767667733774, -1.03529764608027, -1.18136300801279], [-0.488810704210227, 1.78867735929132,
  -0.749333078876516, -0.808301005482437], [0.147232139822357, 1.15042684782613, -1.17827992968215, -1.18136300801279], [-1.60188568126725, 0.0866759953841608, -1.17827992968215, -1.18136300801279]]),\n",
+       " (2L, u'Alaska', [[0.0, 1.0]], [[-0.806832126226518, -1.18982502754621, 0.25154290633664, 0.310885002108629]]),\n",
+       " (0L, u'Tennessee', [[0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]], [[-0.0286196553591748, -1.22176567731394, 0.412632633639227, 0.22669394242252], [-0.207492501354026, 1.25994585473, -1.12079945083087, -1.19014319771823], [0.507998882625381, -0.839963903153331, 0.621737008794241, 0.580903227457708], [-0.922983885333435, 0.687243193489089, -1.12079945083087, -1.19014319771823], [1.04461742060994, -0.0763603548321211, 1.03994575910427, 0.935112512492896], [2.11785449657905, 0.114540532248182, 1.10964721748927, 1.11221715501049], [0.507998882625381, -0.649063016073029, 0.552035550409236, 0.580903227457708], [-1.99622096130255, -0.267261241912424, -1.19050090921588, -1.19014319771823], [1.40236311259964, -1.41266656439424, 0.90054284233426, 0.758007869975302], [0.32912603663053, 2.59625206429212, -1.12079945083087, -0.835933912683043], [-0.207492501354026, 1.64174762889
 06, -1.26020236760088, -0.835933912683043], [-2.1750938072974, -0.0763603548321211, -1.39960528437089, -1.36724784023582], [-0.0286196553591748, -1.22176567731394, 0.482334092024232, 0.403798584940115]]),\n",
+       " (1L, u'Tennessee', [[0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]], [[0.865744574615085, 0.687243193489089, 0.970244300719264, 1.28932179752808], [-0.0286196553591748, -0.839963903153331, 0.90054284233426, 0.580903227457708], [-1.28072957732314, 0.687243193489089, -1.05109799244587, -1.19014319771823], [-1.10185673132829, 0.114540532248182, -1.12079945083087, -1.36724784023582], [-0.0286196553591748, -1.03086479023363, 0.621737008794241, 0.758007869975302], [-0.207492501354026, -0.0763603548321211, 0.970244300719264, 1.11221715501049], [0.865744574615085, -0.649063016073029, 1.38845305102929, 1.28932179752808], [0.150253190635677, -0.0763603548321211, 0.691438467179245, 0.758007869975302], [0.32912603663053, -0.839963903153331, 0.273229716869218, 0.22669394242252], [-1.28072957732314, -0.0763603548321211, -1.19050090921588, -1.36724784023582], [0.507998882625381, 1.8326485159709
 , -1.32990382598589, -1.19014319771823], [0.865744574615085, -0.267261241912424, 0.970244300719264, 1.11221715501049]])]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;\n",
+    "\n",
+    "SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table\n",
+    "                                     'iris_data_packed',  -- Output table\n",
+    "                                     'class_text',        -- Dependent variable\n",
+    "                                     'attributes',        -- Independent variables\n",
+    "                                     'state'              -- Grouping\n",
+    "                                     );\n",
+    "\n",
+    "SELECT * FROM iris_data_packed ORDER BY state, __id__;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review the output summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>source_table</th>\n",
+       "        <th>output_table</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "        <th>dependent_vartype</th>\n",
+       "        <th>buffer_size</th>\n",
+       "        <th>class_values</th>\n",
+       "        <th>num_rows_processed</th>\n",
+       "        <th>num_missing_rows_skipped</th>\n",
+       "        <th>grouping_cols</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>iris_data</td>\n",
+       "        <td>iris_data_packed</td>\n",
+       "        <td>class_text</td>\n",
+       "        <td>attributes</td>\n",
+       "        <td>character varying</td>\n",
+       "        <td>13</td>\n",
+       "        <td>[u'Iris_setosa', u'Iris_versicolor']</td>\n",
+       "        <td>52</td>\n",
+       "        <td>0</td>\n",
+       "        <td>state</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'iris_data', u'iris_data_packed', u'class_text', u'attributes', u'character varying', 13, [u'Iris_setosa', u'Iris_versicolor'], 52, 0, u'state')]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_data_packed_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review the output standardization table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "2 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>state</th>\n",
+       "        <th>mean</th>\n",
+       "        <th>std</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>Alaska</td>\n",
+       "        <td>[5.40740740740741, 2.95925925925926, 2.94814814814815, 0.833333333333333]</td>\n",
+       "        <td>[0.628888452645665, 0.470034875978888, 1.39877469405147, 0.536103914747325]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>Tennessee</td>\n",
+       "        <td>[5.516, 3.04, 3.108, 0.872]</td>\n",
+       "        <td>[0.55905634778617, 0.523832034148353, 1.43469021046357, 0.564637937088893]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'Alaska', [5.40740740740741, 2.95925925925926, 2.94814814814815, 0.833333333333333], [0.628888452645665, 0.470034875978888, 1.39877469405147, 0.536103914747325]),\n",
+       " (u'Tennessee', [5.516, 3.04, 3.108, 0.872], [0.55905634778617, 0.523832034148353, 1.43469021046357, 0.564637937088893])]"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_data_packed_standardization ORDER BY state;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5.  Integer dependent variable for classification\n",
+    "\n",
+    "If the depedent variable is scalar integer, and you have not already encoded it, you can ask the preprocessor to encode it for you:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "2 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__id__</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0]]</td>\n",
+       "        <td>[[0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202], [-0.0995580974152422, 1.4087414919645, -1.07515071152907, -1.18456909732025], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.234443261629389, 0.003859565725
 25086, 1.03989986852812, 1.17758048907675], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [0.568444620674023, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [0.56844462067
 4023, -0.798930106411465, 0.687391438518589, 0.632469046062059]]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0]]</td>\n",
+       "        <td>[[0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [1.4034480182856, 0.605951819827788, 1.18090324053193, 1.35928430341498], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025], [1.06944665924097, 0.00385956572525086, 1.110401
 55453003, 0.995876674738521], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [2.07145073637487, 0.20455698375943, 0.969398182526215, 0.995876674738521], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [2.07145073637487, 0.20455698375943, 1.18090324053193, 1.17758048907675], [0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [-0.600560135982193, 1.60943890
 999868, -0.793143967521448, -0.821161468643789]]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0L, [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0]], [[0.902445979718656, -1.60171977854818, 0.687391438518589, 0.269061417385597], [0.401443941151707, -0.798930106411465, 0.334883008509056, 0.269061417385597], [0.568444620674023, -0.598232688377286, 0.757893124520495, 0.269061417385597], [0.0674425821070736, -1.20032494247982, 0.475886380512869, 0.269061417385597], [-0.934561495026824, -1.20032494247982, 0.193879636505243, 0.269061417385597], [-1.76956489263841, 0.405254401793609, -1.21615408353289, -1.18456909732025], [0.568444620674023, -0.598232688377286, 0.616889752516682, 0.632469046062059], [-0.767560815504508, 1.00734665589615, -1.21615408353289, -1.00286528298202], [-0.0995580974152422, 1.4087414919645, 
 -1.07515071152907, -1.18456909732025], [-0.767560815504508, 1.00734665589615, -1.00464902552717, -0.457753839967327], [-0.600560135982193, 1.60943890999868, -1.00464902552717, -1.18456909732025], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [0.234443261629389, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [-0.0995580974152422, 1.81013632803286, -1.21615408353289, -0.821161468643789], [-1.76956489263841, 0.00385956572525086, -1.21615408353289, -1.18456909732025], [-1.60256421311609, -1.401022360514, -1.21615408353289, -1.00286528298202], [-1.10156217454914, 0.806649237861967, -1.00464902552717, -1.18456909732025], [-0.767560815504508, 0.405254401793609, -1.28665576953479, -1.18456909732025], [-1.76956489263841, -0.196837852308928, -1.14565239753098, -1.18456909732025], [-1.93656557216072, 0.00385956572525086, -1.3571574555367, -1.36627291165848], [1.06944665924097, -0.196837852308928, 1.18090324053193, 0.995876674738521], [0.56844462067402
 3, 2.01083374606704, -1.28665576953479, -1.18456909732025], [0.401443941151707, 2.81362341820376, -1.07515071152907, -0.821161468643789], [0.0674425821070736, -0.999627524445644, 0.687391438518589, 0.81417286040029], [0.902445979718656, -0.196837852308928, 1.03989986852812, 1.17758048907675], [0.568444620674023, -0.798930106411465, 0.687391438518589, 0.632469046062059]]),\n",
+       " (1L, [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0]], [[0.902445979718656, 0.806649237861967, 1.03989986852812, 1.35928430341498], [0.902445979718656, -0.598232688377286, 1.46290998453956, 1.35928430341498], [-0.0995580974152422, 0.00385956572525086, 1.03989986852812, 1.17758048907675], [0.234443261629389, 0.00385956572525086, 0.757893124520495, 0.81417286040029], [0.0674425821070736, -1.20032494247982, 0.546388066514775, 0.450765231723828], [1.23644733876329, -1.60171977854818, 1.03989986852812, 1.17758048907675], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.00286528298202], [1.4034480182856, -1.401022360514, 0.969398182526215, 0.81417286040029], [1.4034480182856, 0.605951819827788, 1.1809032405
 3193, 1.35928430341498], [-0.600560135982193, 0.806649237861967, -1.07515071152907, -1.18456909732025], [0.401443941151707, -0.397535270343108, 1.03989986852812, 0.81417286040029], [-0.767560815504508, 0.806649237861967, -1.07515071152907, -1.18456909732025], [1.06944665924097, 0.00385956572525086, 1.11040155453003, 0.995876674738521], [0.234443261629389, -0.999627524445644, 0.616889752516682, 0.450765231723828], [0.0674425821070736, 1.00734665589615, -1.21615408353289, -1.18456909732025], [2.07145073637487, 0.20455698375943, 0.969398182526215, 0.995876674738521], [0.73544530019634, 0.00385956572525086, 0.828394810522402, 1.17758048907675], [0.234443261629389, -0.196837852308928, 0.405384694510963, 0.81417286040029], [-0.767560815504508, -2.00311461461654, 0.334883008509056, 0.269061417385597], [1.90445005685255, -0.196837852308928, 1.11040155453003, 0.81417286040029], [-0.934561495026824, 0.20455698375943, -1.07515071152907, -1.36627291165848], [2.07145073637487, 0.20455698375943, 
 1.18090324053193, 1.17758048907675], [0.0674425821070736, -0.798930106411465, 0.969398182526215, 0.632469046062059], [-0.433559456459875, -0.598232688377286, 0.616889752516682, 0.995876674738521], [-1.10156217454914, 0.00385956572525086, -1.14565239753098, -1.36627291165848], [-0.600560135982193, 1.60943890999868, -0.793143967521448, -0.821161468643789]])]"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS iris_data_packed, iris_data_packed_summary, iris_data_packed_standardization;\n",
+    "\n",
+    "SELECT madlib.minibatch_preprocessor('iris_data',         -- Source table\n",
+    "                                     'iris_data_packed',  -- Output table\n",
+    "                                     'class',             -- Integer dependent variable\n",
+    "                                     'attributes',        -- Independent variables\n",
+    "                                     NULL,                -- Grouping\n",
+    "                                     NULL,                -- Buffer size\n",
+    "                                     TRUE                 -- Encode scalar int dependent variable\n",
+    "                                     );\n",
+    "\n",
+    "SELECT * FROM iris_data_packed ORDER BY __id__;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review output summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>source_table</th>\n",
+       "        <th>output_table</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varname</th>\n",
+       "        <th>dependent_vartype</th>\n",
+       "        <th>buffer_size</th>\n",
+       "        <th>class_values</th>\n",
+       "        <th>num_rows_processed</th>\n",
+       "        <th>num_missing_rows_skipped</th>\n",
+       "        <th>grouping_cols</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>iris_data</td>\n",
+       "        <td>iris_data_packed</td>\n",
+       "        <td>class</td>\n",
+       "        <td>attributes</td>\n",
+       "        <td>integer</td>\n",
+       "        <td>26</td>\n",
+       "        <td>[1, 2]</td>\n",
+       "        <td>52</td>\n",
+       "        <td>0</td>\n",
+       "        <td>None</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'iris_data', u'iris_data_packed', u'class', u'attributes', u'integer', 26, [1, 2], 52, 0, None)]"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM iris_data_packed_summary;"
+   ]
+  }
+ ],
+ "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}


[14/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Balanced-sampling-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Balanced-sampling-v1.ipynb b/community-artifacts/Balanced-sampling-v1.ipynb
new file mode 100644
index 0000000..5f6ec23
--- /dev/null
+++ b/community-artifacts/Balanced-sampling-v1.ipynb
@@ -0,0 +1,3706 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Balanced sampling\n",
+    "\n",
+    "This module offers a number of re-sampling techniques including under-sampling majority classes, over-sampling minority classes, and combinations of the two.\n",
+    "\n",
+    "Balanced sampling was added in MADlib 1.14."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The sql extension is already loaded. To reload it, use:\n",
+      "  %reload_ext sql\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-22-g0bfcaf5, cmake configuration time: Wed Mar 14 21:35:16 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-22-g0bfcaf5, cmake configuration time: Wed Mar 14 21:35:16 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1. Load data\n",
+    "Based in part on the flags data set from https://archive.ics.uci.edu/ml/datasets/Flags"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "22 rows affected.\n",
+      "22 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Austria</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>84</td>\n",
+       "        <td>8</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Canada</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9976</td>\n",
+       "        <td>24</td>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>China</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "        <td>9561</td>\n",
+       "        <td>1008</td>\n",
+       "        <td>7</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Denmark</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>43</td>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Luxembourg</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Norway</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>324</td>\n",
+       "        <td>4</td>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>Portugal</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>92</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>5</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>Spain</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>505</td>\n",
+       "        <td>38</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>Switzerland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>41</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>UK</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>245</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>xElba</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>6</td>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>xPrussia</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>249</td>\n",
+       "        <td>61</td>\n",
+       "        <td>4</td>\n",
+       "        <td>None</td>\n",
+       "        <td>None</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u'Argentina', 2, 3, 2777, 28, 2, 2, u'blue'),\n",
+       " (2, u'Australia', 6, 2, 7690, 15, 1, 3, u'blue'),\n",
+       " (8, u'Greece', 3, 1, 132, 10, 6, 2, u'blue'),\n",
+       " (9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (3, u'Austria', 3, 1, 84, 8, 4, 2, u'red'),\n",
+       " (5, u'Canada', 1, 4, 9976, 24, 1, 2, u'red'),\n",
+       " (6, u'China', 5, 1, 9561, 1008, 7, 2, u'red'),\n",
+       " (7, u'Denmark', 3, 1, 43, 5, 6, 2, u'red'),\n",
+       " (12, u'Luxembourg', 3, 1, 3, 0, 4, 3, u'red'),\n",
+       " (14, u'Norway', 3, 1, 324, 4, 6, 3, u'red'),\n",
+       " (15, u'Portugal', 3, 4, 92, 10, 6, 5, u'red'),\n",
+       " (16, u'Spain', 3, 4, 505, 38, 2, 2, u'red'),\n",
+       " (18, u'Switzerland', 3, 1, 41, 6, 4, 2, u'red'),\n",
+       " (19, u'UK', 3, 4, 245, 56, 1, 3, u'red'),\n",
+       " (10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (21, u'xElba', 3, 1, 1, 1, 6, None, None),\n",
+       " (22, u'xPrussia', 3, 1, 249, 61, 4, None, None)]"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS flags;\n",
+    "\n",
+    "CREATE TABLE flags (\n",
+    "    id INTEGER,\n",
+    "    name TEXT,\n",
+    "    landmass INTEGER,\n",
+    "    zone INTEGER,\n",
+    "    area INTEGER,\n",
+    "    population INTEGER,\n",
+    "    language INTEGER,\n",
+    "    colours INTEGER,\n",
+    "    mainhue TEXT\n",
+    ");\n",
+    "\n",
+    "INSERT INTO flags VALUES\n",
+    "(1, 'Argentina', 2, 3, 2777, 28, 2, 2, 'blue'),\n",
+    "(2, 'Australia', 6, 2, 7690, 15, 1, 3, 'blue'),\n",
+    "(3, 'Austria', 3, 1, 84, 8, 4, 2, 'red'),\n",
+    "(4, 'Brazil', 2, 3, 8512, 119, 6, 4, 'green'),\n",
+    "(5, 'Canada', 1, 4, 9976, 24, 1, 2, 'red'),\n",
+    "(6, 'China', 5, 1, 9561, 1008, 7, 2, 'red'),\n",
+    "(7, 'Denmark', 3, 1, 43, 5, 6, 2, 'red'),\n",
+    "(8, 'Greece', 3, 1, 132, 10, 6, 2, 'blue'),\n",
+    "(9, 'Guatemala', 1, 4, 109, 8, 2, 2, 'blue'),\n",
+    "(10, 'Ireland', 3, 4, 70, 3, 1, 3, 'white'),\n",
+    "(11, 'Jamaica', 1, 4, 11, 2, 1, 3, 'green'),\n",
+    "(12, 'Luxembourg', 3, 1, 3, 0, 4, 3, 'red'),\n",
+    "(13, 'Mexico', 1, 4, 1973, 77, 2, 4, 'green'),\n",
+    "(14, 'Norway', 3, 1, 324, 4, 6, 3, 'red'),\n",
+    "(15, 'Portugal', 3, 4, 92, 10, 6, 5, 'red'),\n",
+    "(16, 'Spain', 3, 4, 505, 38, 2, 2, 'red'),\n",
+    "(17, 'Sweden', 3, 1, 450, 8, 6, 2, 'blue'),\n",
+    "(18, 'Switzerland', 3, 1, 41, 6, 4, 2, 'red'),\n",
+    "(19, 'UK', 3, 4, 245, 56, 1, 3, 'red'),\n",
+    "(20, 'USA', 1, 4, 9363, 231, 1, 3, 'white'),\n",
+    "(21, 'xElba', 3, 1, 1, 1, 6, NULL, NULL),\n",
+    "(22, 'xPrussia', 3, 1, 249, 61, 4, NULL, NULL);\n",
+    "\n",
+    "SELECT * FROM flags ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Uniform sampling \n",
+    "\n",
+    "All class values will be resampled so that they have the same number of rows. The output data size will be the same as the input data size, ignoring NULL values.  Uniform sampling is the default for the 'class_size' parameter so we do not need to explicitly set it:  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>6</td>\n",
+       "        <td>China</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "        <td>9561</td>\n",
+       "        <td>1008</td>\n",
+       "        <td>7</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>7</td>\n",
+       "        <td>Denmark</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>43</td>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>12</td>\n",
+       "        <td>Luxembourg</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>18</td>\n",
+       "        <td>Switzerland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>41</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>19</td>\n",
+       "        <td>UK</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>245</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(19L, 1, u'Argentina', 2, 3, 2777, 28, 2, 2, u'blue'),\n",
+       " (18L, 2, u'Australia', 6, 2, 7690, 15, 1, 3, u'blue'),\n",
+       " (20L, 8, u'Greece', 3, 1, 132, 10, 6, 2, u'blue'),\n",
+       " (17L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (16L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (6L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (7L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (9L, 13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (10L, 13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (8L, 13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (1L, 6, u'China', 5, 1, 9561, 1008, 7, 2, u'red'),\n",
+       " (4L, 7, u'Denmark', 3, 1, 43, 5, 6, 2, u'red'),\n",
+       " (2L, 12, u'Luxembourg', 3, 1, 3, 0, 4, 3, u'red'),\n",
+       " (3L, 18, u'Switzerland', 3, 1, 41, 6, 4, 2, u'red'),\n",
+       " (5L, 19, u'UK', 3, 4, 245, 56, 1, 3, u'red'),\n",
+       " (15L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (14L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (12L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (13L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (11L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue');          -- Class column\n",
+    "  \n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Next we do uniform sampling again, but this time we specify a size for the output table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "12 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>5</td>\n",
+       "        <td>Canada</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9976</td>\n",
+       "        <td>24</td>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>12</td>\n",
+       "        <td>Luxembourg</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>18</td>\n",
+       "        <td>Switzerland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>41</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(3L, 8, u'Greece', 3, 1, 132, 10, 6, 2, u'blue'),\n",
+       " (2L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (1L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (4L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (6L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (5L, 13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (9L, 5, u'Canada', 1, 4, 9976, 24, 1, 2, u'red'),\n",
+       " (8L, 12, u'Luxembourg', 3, 1, 3, 0, 4, 3, u'red'),\n",
+       " (7L, 18, u'Switzerland', 3, 1, 41, 6, 4, 2, u'red'),\n",
+       " (12L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (10L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (11L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue',           -- Class column\n",
+    "                              'uniform',           -- Uniform sample\n",
+    "                               12);                -- Desired output table size\n",
+    "\n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "scrolled": true
+   },
+   "source": [
+    "# 3. Oversampling\n",
+    "Oversample with replacement such that all class values except NULLs end up with the same number of observations as the majority class.  Countries with red flags is the majority class with 10 observations, so other class values will be oversampled to 10 observations:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "40 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>37</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>39</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>38</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>40</td>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>32</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>31</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>35</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>33</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>36</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>34</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>3</td>\n",
+       "        <td>Austria</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>84</td>\n",
+       "        <td>8</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>5</td>\n",
+       "        <td>Canada</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9976</td>\n",
+       "        <td>24</td>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>6</td>\n",
+       "        <td>China</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "        <td>9561</td>\n",
+       "        <td>1008</td>\n",
+       "        <td>7</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>7</td>\n",
+       "        <td>Denmark</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>43</td>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>12</td>\n",
+       "        <td>Luxembourg</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>14</td>\n",
+       "        <td>Norway</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>324</td>\n",
+       "        <td>4</td>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>15</td>\n",
+       "        <td>Portugal</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>92</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>5</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>16</td>\n",
+       "        <td>Spain</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>505</td>\n",
+       "        <td>38</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>18</td>\n",
+       "        <td>Switzerland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>41</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>19</td>\n",
+       "        <td>UK</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>245</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>27</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>29</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>28</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>30</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(37L, 2, u'Australia', 6, 2, 7690, 15, 1, 3, u'blue'),\n",
+       " (39L, 2, u'Australia', 6, 2, 7690, 15, 1, 3, u'blue'),\n",
+       " (38L, 2, u'Australia', 6, 2, 7690, 15, 1, 3, u'blue'),\n",
+       " (40L, 8, u'Greece', 3, 1, 132, 10, 6, 2, u'blue'),\n",
+       " (32L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (31L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (35L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (33L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (36L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (34L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (18L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (16L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (17L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (15L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (19L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (11L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (13L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (14L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (12L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (20L, 13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (8L, 3, u'Austria', 3, 1, 84, 8, 4, 2, u'red'),\n",
+       " (6L, 5, u'Canada', 1, 4, 9976, 24, 1, 2, u'red'),\n",
+       " (2L, 6, u'China', 5, 1, 9561, 1008, 7, 2, u'red'),\n",
+       " (5L, 7, u'Denmark', 3, 1, 43, 5, 6, 2, u'red'),\n",
+       " (1L, 12, u'Luxembourg', 3, 1, 3, 0, 4, 3, u'red'),\n",
+       " (9L, 14, u'Norway', 3, 1, 324, 4, 6, 3, u'red'),\n",
+       " (4L, 15, u'Portugal', 3, 4, 92, 10, 6, 5, u'red'),\n",
+       " (10L, 16, u'Spain', 3, 4, 505, 38, 2, 2, u'red'),\n",
+       " (3L, 18, u'Switzerland', 3, 1, 41, 6, 4, 2, u'red'),\n",
+       " (7L, 19, u'UK', 3, 4, 245, 56, 1, 3, u'red'),\n",
+       " (27L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (29L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (28L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (26L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (30L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (22L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (24L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (23L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (25L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white'),\n",
+       " (21L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue',           -- Class column\n",
+    "                              'oversample');       -- Oversample\n",
+    "\n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. Undersampling\n",
+    "Undersample such that all class values except NULLs end up with the same number of observations as the minority class.  Countries with white flags is the minority class with 2 observations, so other class values will be undersampled to 2 observations:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "8 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>14</td>\n",
+       "        <td>Norway</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>324</td>\n",
+       "        <td>4</td>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>19</td>\n",
+       "        <td>UK</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>245</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(2L, 1, u'Argentina', 2, 3, 2777, 28, 2, 2, u'blue'),\n",
+       " (1L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (4L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (3L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (6L, 14, u'Norway', 3, 1, 324, 4, 6, 3, u'red'),\n",
+       " (5L, 19, u'UK', 3, 4, 245, 56, 1, 3, u'red'),\n",
+       " (7L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (8L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue',           -- Class column\n",
+    "                              'undersample');      -- Undersample\n",
+    "\n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In the case of bootstrapping, we may want to undersample with replacement, so we set the 'with_replacement' parameter to TRUE:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "8 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>3</td>\n",
+       "        <td>Austria</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>84</td>\n",
+       "        <td>8</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>7</td>\n",
+       "        <td>Denmark</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>43</td>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(7L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (8L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (2L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (1L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (4L, 3, u'Austria', 3, 1, 84, 8, 4, 2, u'red'),\n",
+       " (3L, 7, u'Denmark', 3, 1, 43, 5, 6, 2, u'red'),\n",
+       " (6L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (5L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue',           -- Class column\n",
+    "                              'undersample',       -- Undersample\n",
+    "                               NULL,               -- Output table size will be calculated\n",
+    "                               NULL,               -- No grouping\n",
+    "                              'TRUE');             -- Sample with replacement\n",
+    "\n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Note above that some rows may appear multiple times above since we sampled with replacement."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5. Setting class size by count\n",
+    "\n",
+    "Here we set the number of rows for red and blue flags, and leave green and white flags unchanged:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "19 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>Austria</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>84</td>\n",
+       "        <td>8</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>6</td>\n",
+       "        <td>China</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "        <td>9561</td>\n",
+       "        <td>1008</td>\n",
+       "        <td>7</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>7</td>\n",
+       "        <td>Denmark</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>43</td>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>12</td>\n",
+       "        <td>Luxembourg</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>4</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>14</td>\n",
+       "        <td>Norway</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>324</td>\n",
+       "        <td>4</td>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>16</td>\n",
+       "        <td>Spain</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>505</td>\n",
+       "        <td>38</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>19</td>\n",
+       "        <td>UK</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>245</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(11L, 1, u'Argentina', 2, 3, 2777, 28, 2, 2, u'blue'),\n",
+       " (12L, 1, u'Argentina', 2, 3, 2777, 28, 2, 2, u'blue'),\n",
+       " (10L, 1, u'Argentina', 2, 3, 2777, 28, 2, 2, u'blue'),\n",
+       " (16L, 8, u'Greece', 3, 1, 132, 10, 6, 2, u'blue'),\n",
+       " (14L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (13L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (15L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (17L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (8L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (9L, 13, u'Mexico', 1, 4, 1973, 77, 2, 4, u'green'),\n",
+       " (2L, 3, u'Austria', 3, 1, 84, 8, 4, 2, u'red'),\n",
+       " (3L, 6, u'China', 5, 1, 9561, 1008, 7, 2, u'red'),\n",
+       " (1L, 7, u'Denmark', 3, 1, 43, 5, 6, 2, u'red'),\n",
+       " (6L, 12, u'Luxembourg', 3, 1, 3, 0, 4, 3, u'red'),\n",
+       " (7L, 14, u'Norway', 3, 1, 324, 4, 6, 3, u'red'),\n",
+       " (4L, 16, u'Spain', 3, 4, 505, 38, 2, 2, u'red'),\n",
+       " (5L, 19, u'UK', 3, 4, 245, 56, 1, 3, u'red'),\n",
+       " (18L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (19L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue',           -- Class column\n",
+    "                              'red=7, blue=7');    -- Want 7 reds and 7 blues\n",
+    "\n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Next we set the number of rows for red and blue flags, and also set an output table size.  This means that green and white flags will be uniformly sampled to get to the desired output table size:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "22 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>6</td>\n",
+       "        <td>China</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "        <td>9561</td>\n",
+       "        <td>1008</td>\n",
+       "        <td>7</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>7</td>\n",
+       "        <td>Denmark</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>43</td>\n",
+       "        <td>5</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>14</td>\n",
+       "        <td>Norway</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>324</td>\n",
+       "        <td>4</td>\n",
+       "        <td>6</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>15</td>\n",
+       "        <td>Portugal</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>92</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>5</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>16</td>\n",
+       "        <td>Spain</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>505</td>\n",
+       "        <td>38</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>18</td>\n",
+       "        <td>Switzerland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>41</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>2</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>19</td>\n",
+       "        <td>UK</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>245</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>red</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>10</td>\n",
+       "        <td>Ireland</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>70</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>20</td>\n",
+       "        <td>USA</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>9363</td>\n",
+       "        <td>231</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>white</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(21L, 2, u'Australia', 6, 2, 7690, 15, 1, 3, u'blue'),\n",
+       " (22L, 8, u'Greece', 3, 1, 132, 10, 6, 2, u'blue'),\n",
+       " (16L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (17L, 9, u'Guatemala', 1, 4, 109, 8, 2, 2, u'blue'),\n",
+       " (19L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (20L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (18L, 17, u'Sweden', 3, 1, 450, 8, 6, 2, u'blue'),\n",
+       " (10L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (9L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (11L, 4, u'Brazil', 2, 3, 8512, 119, 6, 4, u'green'),\n",
+       " (8L, 11, u'Jamaica', 1, 4, 11, 2, 1, 3, u'green'),\n",
+       " (7L, 6, u'China', 5, 1, 9561, 1008, 7, 2, u'red'),\n",
+       " (2L, 7, u'Denmark', 3, 1, 43, 5, 6, 2, u'red'),\n",
+       " (4L, 14, u'Norway', 3, 1, 324, 4, 6, 3, u'red'),\n",
+       " (6L, 15, u'Portugal', 3, 4, 92, 10, 6, 5, u'red'),\n",
+       " (3L, 16, u'Spain', 3, 4, 505, 38, 2, 2, u'red'),\n",
+       " (1L, 18, u'Switzerland', 3, 1, 41, 6, 4, 2, u'red'),\n",
+       " (5L, 19, u'UK', 3, 4, 245, 56, 1, 3, u'red'),\n",
+       " (13L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (15L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (14L, 10, u'Ireland', 3, 4, 70, 3, 1, 3, u'white'),\n",
+       " (12L, 20, u'USA', 1, 4, 9363, 231, 1, 3, u'white')]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS output_table;\n",
+    "\n",
+    "SELECT madlib.balance_sample(\n",
+    "                              'flags',             -- Source table\n",
+    "                              'output_table',      -- Output table\n",
+    "                              'mainhue',           -- Class column\n",
+    "                              'red=7, blue=7',     -- Want 7 reds and 7 blues\n",
+    "                               22);                -- Desired output table size\n",
+    "\n",
+    "SELECT * FROM output_table ORDER BY mainhue, name;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 6.  NULL handling\n",
+    "\n",
+    "To make NULL a valid class value, set the parameter to keep NULLs:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "25 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>__madlib_id__</th>\n",
+       "        <th>id</th>\n",
+       "        <th>name</th>\n",
+       "        <th>landmass</th>\n",
+       "        <th>zone</th>\n",
+       "        <th>area</th>\n",
+       "        <th>population</th>\n",
+       "        <th>language</th>\n",
+       "        <th>colours</th>\n",
+       "        <th>mainhue</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>1</td>\n",
+       "        <td>Argentina</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>2777</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>2</td>\n",
+       "        <td>Australia</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>7690</td>\n",
+       "        <td>15</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>8</td>\n",
+       "        <td>Greece</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>132</td>\n",
+       "        <td>10</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>9</td>\n",
+       "        <td>Guatemala</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>109</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>17</td>\n",
+       "        <td>Sweden</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "        <td>450</td>\n",
+       "        <td>8</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "        <td>blue</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>Brazil</td>\n",
+       "        <td>2</td>\n",
+       "        <td>3</td>\n",
+       "        <td>8512</td>\n",
+       "        <td>119</td>\n",
+       "        <td>6</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>11</td>\n",
+       "        <td>Jamaica</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>11</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>13</td>\n",
+       "        <td>Mexico</td>\n",
+       "        <td>1</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1973</td>\n",
+       "        <td>77</td>\n",
+       "        <td>2</td>\n",
+       "        <td>4</td>\n",
+       "        <td>green</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>5</td>\n",
+       "        <

<TRUNCATED>

[10/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/LDA-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/LDA-v1.ipynb b/community-artifacts/LDA-v1.ipynb
new file mode 100644
index 0000000..19a199c
--- /dev/null
+++ b/community-artifacts/LDA-v1.ipynb
@@ -0,0 +1,2034 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Latent Dirichlet Allocation \n",
+    "\n",
+    "Latent Dirichlet Allocation (LDA) is a generative probabilistic model for natural texts. It is used in problems such as automated topic discovery, collaborative filtering, and document classification.\n",
+    "\n",
+    "In addition to an implementation of LDA, this MADlib module also provides a number of additional helper functions to interpret results of the LDA output."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-15-g7ffad03, cmake configuration time: Wed Feb 21 01:33:31 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-15-g7ffad03, cmake configuration time: Wed Feb 21 01:33:31 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1.  Prepare documents\n",
+    "The examples below are short strings extracted from various Wikipedia documents. First we create a document table with one document per row:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "4 rows affected.\n",
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>contents</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>California's diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood–Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.'),\n",
+       " (1, u'By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.'),\n",
+       " (2, u'Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.'),\n",
+       " (3, u\"California's diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood\\u2013Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.\")]"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS documents;\n",
+    "CREATE TABLE documents(docid INT4, contents TEXT);\n",
+    "\n",
+    "INSERT INTO documents VALUES\n",
+    "(0, 'Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.'),\n",
+    "(1, 'By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.'),\n",
+    "(2, 'Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.'),\n",
+    "(3, 'California''s diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood–Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.');\n",
+    "\n",
+    "SELECT * from documents ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "You can apply stemming, stop word removal and tokenization at this point in order to prepare the documents for text processing.  Depending upon your database version, various tools are available.  Databases based on more recent versions of PostgreSQL may do something like: "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "%%sql\n",
+    "SELECT tsvector_to_array(to_tsvector('english',contents)) from documents;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this example, we assume a database based on an older version of PostgreSQL and just perform basic punctuation removal and tokenization. The array of words is added as a new column to the documents table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "4 rows affected.\n",
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>contents</th>\n",
+       "        <th>words</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.</td>\n",
+       "        <td>[u'statistical', u'topic', u'models', u'are', u'a', u'class', u'of', u'bayesian', u'latent', u'variable', u'models', u'originally', u'developed', u'for', u'analyzing', u'the', u'semantic', u'content', u'of', u'large', u'document', u'corpora']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.</td>\n",
+       "        <td>[u'by', u'the', u'late', u'1960s', u'the', u'balance', u'between', u'pitching', u'and', u'hitting', u'had', u'swung', u'in', u'favor', u'of', u'the', u'pitchers', u'in', u'1968', u'carl', u'yastrzemski', u'won', u'the', u'american', u'league', u'batting', u'title', u'with', u'an', u'average', u'of', u'just', u'301', u'the', u'lowest', u'in', u'history']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.</td>\n",
+       "        <td>[u'machine', u'learning', u'is', u'closely', u'related', u'to', u'and', u'often', u'overlaps', u'with', u'computational', u'statistics', u'a', u'discipline', u'that', u'also', u'specializes', u'in', u'prediction-making', u'it', u'has', u'strong', u'ties', u'to', u'mathematical', u'optimization', u'which', u'deliver', u'methods', u'theory', u'and', u'application', u'domains', u'to', u'the', u'field']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>California's diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood–Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.</td>\n",
+       "        <td>[u'californias', u'diverse', u'geography', u'ranges', u'from', u'the', u'sierra', u'nevada', u'in', u'the', u'east', u'to', u'the', u'pacific', u'coast', u'in', u'the', u'west', u'from', u'the', u'redwood\\u2013douglas', u'fir', u'forests', u'of', u'the', u'northwest', u'to', u'the', u'mojave', u'desert', u'areas', u'in', u'the', u'southeast', u'the', u'center', u'of', u'the', u'state', u'is', u'dominated', u'by', u'the', u'central', u'valley', u'a', u'major', u'agricultural', u'area']</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'Statistical topic models are a class of Bayesian latent variable models, originally developed for analyzing the semantic content of large document corpora.', [u'statistical', u'topic', u'models', u'are', u'a', u'class', u'of', u'bayesian', u'latent', u'variable', u'models', u'originally', u'developed', u'for', u'analyzing', u'the', u'semantic', u'content', u'of', u'large', u'document', u'corpora']),\n",
+       " (1, u'By the late 1960s, the balance between pitching and hitting had swung in favor of the pitchers. In 1968 Carl Yastrzemski won the American League batting title with an average of just .301, the lowest in history.', [u'by', u'the', u'late', u'1960s', u'the', u'balance', u'between', u'pitching', u'and', u'hitting', u'had', u'swung', u'in', u'favor', u'of', u'the', u'pitchers', u'in', u'1968', u'carl', u'yastrzemski', u'won', u'the', u'american', u'league', u'batting', u'title', u'with', u'an', u'average', u'of', u'just', u'301', u'the', u'lowest', u'in', u'history']),\n",
+       " (2, u'Machine learning is closely related to and often overlaps with computational statistics; a discipline that also specializes in prediction-making. It has strong ties to mathematical optimization, which deliver methods, theory and application domains to the field.', [u'machine', u'learning', u'is', u'closely', u'related', u'to', u'and', u'often', u'overlaps', u'with', u'computational', u'statistics', u'a', u'discipline', u'that', u'also', u'specializes', u'in', u'prediction-making', u'it', u'has', u'strong', u'ties', u'to', u'mathematical', u'optimization', u'which', u'deliver', u'methods', u'theory', u'and', u'application', u'domains', u'to', u'the', u'field']),\n",
+       " (3, u\"California's diverse geography ranges from the Sierra Nevada in the east to the Pacific Coast in the west, from the Redwood\\u2013Douglas fir forests of the northwest, to the Mojave Desert areas in the southeast. The center of the state is dominated by the Central Valley, a major agricultural area.\", [u'californias', u'diverse', u'geography', u'ranges', u'from', u'the', u'sierra', u'nevada', u'in', u'the', u'east', u'to', u'the', u'pacific', u'coast', u'in', u'the', u'west', u'from', u'the', u'redwood\\u2013douglas', u'fir', u'forests', u'of', u'the', u'northwest', u'to', u'the', u'mojave', u'desert', u'areas', u'in', u'the', u'southeast', u'the', u'center', u'of', u'the', u'state', u'is', u'dominated', u'by', u'the', u'central', u'valley', u'a', u'major', u'agricultural', u'area'])]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "ALTER TABLE documents ADD COLUMN words TEXT[];\n",
+    "\n",
+    "UPDATE documents SET words = \n",
+    "    regexp_split_to_array(lower(\n",
+    "    regexp_replace(contents, E'[,.;\\']','', 'g')\n",
+    "    ), E'[\\\\s+]');\n",
+    "    \n",
+    "SELECT * FROM documents ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Term frequency\n",
+    "Build a word count table by extracting the words and building a histogram for each document using the term_frequency() function."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>wordid</th>\n",
+       "        <th>count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>17</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>95</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>90</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>85</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>68</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>54</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>42</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>35</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>28</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>8</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>97</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>80</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>71</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>64</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>32</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>29</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>24</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 17, 1),\n",
+       " (0, 11, 1),\n",
+       " (0, 95, 1),\n",
+       " (0, 90, 1),\n",
+       " (0, 85, 1),\n",
+       " (0, 68, 2),\n",
+       " (0, 54, 1),\n",
+       " (0, 42, 1),\n",
+       " (0, 35, 1),\n",
+       " (0, 28, 1),\n",
+       " (0, 8, 1),\n",
+       " (0, 3, 1),\n",
+       " (0, 97, 1),\n",
+       " (0, 80, 1),\n",
+       " (0, 71, 1),\n",
+       " (0, 64, 2),\n",
+       " (0, 56, 1),\n",
+       " (0, 32, 1),\n",
+       " (0, 29, 1),\n",
+       " (0, 24, 1)]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS documents_tf, documents_tf_vocabulary;\n",
+    "\n",
+    "SELECT madlib.term_frequency('documents',    -- input table\n",
+    "                             'docid',        -- document id column\n",
+    "                             'words',        -- vector of words in document\n",
+    "                             'documents_tf', -- output documents table with term frequency\n",
+    "                             TRUE);          -- TRUE to created vocabulary table\n",
+    "\n",
+    "SELECT * FROM documents_tf ORDER BY docid LIMIT 20;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Here is the associated vocabulary table.  Note that wordid starts at 0:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>wordid</th>\n",
+       "        <th>word</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>1960s</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>1968</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>301</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>a</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>agricultural</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>also</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>american</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>an</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>analyzing</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>and</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>application</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>are</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>area</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>areas</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>average</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>balance</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>batting</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>bayesian</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>between</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>by</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'1960s'),\n",
+       " (1, u'1968'),\n",
+       " (2, u'301'),\n",
+       " (3, u'a'),\n",
+       " (4, u'agricultural'),\n",
+       " (5, u'also'),\n",
+       " (6, u'american'),\n",
+       " (7, u'an'),\n",
+       " (8, u'analyzing'),\n",
+       " (9, u'and'),\n",
+       " (10, u'application'),\n",
+       " (11, u'are'),\n",
+       " (12, u'area'),\n",
+       " (13, u'areas'),\n",
+       " (14, u'average'),\n",
+       " (15, u'balance'),\n",
+       " (16, u'batting'),\n",
+       " (17, u'bayesian'),\n",
+       " (18, u'between'),\n",
+       " (19, u'by')]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM documents_tf_vocabulary ORDER BY wordid LIMIT 20;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The total number of words in the vocabulary across all documents is:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>103</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(103L,)]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT COUNT(*) FROM documents_tf_vocabulary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3. Train LDA model\n",
+    "For Dirichlet priors we use initial rule-of-thumb values of 50/(number of topics) for alpha and 0.01 for beta.\n",
+    "\n",
+    "Reminder that column names for docid, wordid, and count are currently fixed, so you must use these exact names in the input table. After a successful run of the LDA training function two tables are generated, one for storing the learned model and the other for storing the output data table."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "2 rows affected.\n",
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>wordcount</th>\n",
+       "        <th>words</th>\n",
+       "        <th>counts</th>\n",
+       "        <th>topic_count</th>\n",
+       "        <th>topic_assignment</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>22</td>\n",
+       "        <td>[24, 17, 11, 95, 90, 85, 68, 54, 42, 35, 28, 8, 3, 97, 80, 71, 64, 56, 32, 29]</td>\n",
+       "        <td>[1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1]</td>\n",
+       "        <td>[3, 6, 5, 7, 1]</td>\n",
+       "        <td>[3, 3, 1, 3, 0, 0, 2, 1, 1, 2, 1, 4, 2, 0, 1, 2, 3, 3, 3, 1, 2, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>37</td>\n",
+       "        <td>[1, 50, 49, 46, 19, 16, 14, 9, 7, 0, 90, 68, 57, 102, 101, 100, 93, 88, 75, 74, 59, 55, 53, 48, 39, 21, 18, 15, 6, 2]</td>\n",
+       "        <td>[1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</td>\n",
+       "        <td>[12, 8, 3, 10, 4]</td>\n",
+       "        <td>[0, 0, 0, 0, 1, 3, 0, 1, 1, 1, 3, 1, 0, 0, 0, 3, 3, 2, 1, 4, 4, 2, 2, 3, 1, 1, 3, 3, 3, 3, 0, 4, 3, 0, 4, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>36</td>\n",
+       "        <td>[10, 27, 33, 40, 47, 51, 58, 62, 63, 69, 72, 83, 100, 99, 94, 92, 91, 90, 89, 87, 86, 79, 76, 70, 60, 52, 50, 36, 30, 25, 9, 5, 3]</td>\n",
+       "        <td>[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1]</td>\n",
+       "        <td>[9, 12, 5, 3, 7]</td>\n",
+       "        <td>[0, 0, 1, 4, 4, 4, 3, 4, 2, 2, 3, 2, 0, 1, 0, 0, 0, 2, 1, 3, 1, 1, 1, 4, 4, 2, 1, 4, 0, 1, 1, 1, 1, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>49</td>\n",
+       "        <td>[77, 78, 81, 82, 67, 65, 51, 45, 44, 43, 34, 26, 13, 98, 96, 94, 90, 84, 73, 68, 66, 61, 50, 41, 38, 37, 31, 23, 22, 20, 19, 12, 4, 3]</td>\n",
+       "        <td>[1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 11, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</td>\n",
+       "        <td>[16, 5, 7, 13, 8]</td>\n",
+       "        <td>[2, 1, 3, 4, 1, 4, 0, 0, 4, 4, 3, 2, 1, 4, 3, 4, 0, 0, 3, 3, 0, 0, 3, 3, 0, 3, 0, 3, 0, 4, 3, 1, 1, 3, 3, 0, 0, 0, 2, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 22, [24, 17, 11, 95, 90, 85, 68, 54, 42, 35, 28, 8, 3, 97, 80, 71, 64, 56, 32, 29], [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1], [3, 6, 5, 7, 1], [3, 3, 1, 3, 0, 0, 2, 1, 1, 2, 1, 4, 2, 0, 1, 2, 3, 3, 3, 1, 2, 3]),\n",
+       " (1, 37, [1, 50, 49, 46, 19, 16, 14, 9, 7, 0, 90, 68, 57, 102, 101, 100, 93, 88, 75, 74, 59, 55, 53, 48, 39, 21, 18, 15, 6, 2], [1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [12, 8, 3, 10, 4], [0, 0, 0, 0, 1, 3, 0, 1, 1, 1, 3, 1, 0, 0, 0, 3, 3, 2, 1, 4, 4, 2, 2, 3, 1, 1, 3, 3, 3, 3, 0, 4, 3, 0, 4, 0, 0]),\n",
+       " (2, 36, [10, 27, 33, 40, 47, 51, 58, 62, 63, 69, 72, 83, 100, 99, 94, 92, 91, 90, 89, 87, 86, 79, 76, 70, 60, 52, 50, 36, 30, 25, 9, 5, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1], [9, 12, 5, 3, 7], [0, 0, 1, 4, 4, 4, 3, 4, 2, 2, 3, 2, 0, 1, 0, 0, 0, 2, 1, 3, 1, 1, 1, 4, 4, 2, 1, 4, 0, 1, 1, 1, 1, 1, 0, 0]),\n",
+       " (3, 49, [77, 78, 81, 82, 67, 65, 51, 45, 44, 43, 34, 26, 13, 98, 96, 94, 90, 84, 73, 68, 66, 61, 50, 41, 38, 37, 31, 23, 22, 20, 19, 12, 4, 3], [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 11, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [16, 5, 7, 13, 8], [2, 1, 3, 4, 1, 4, 0, 0, 4, 4, 3, 2, 1, 4, 3, 4, 0, 0, 3, 3, 0, 0, 3, 3, 0, 3, 0, 3, 0, 4, 3, 1, 1, 3, 3, 0, 0, 0, 2, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0])]"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS lda_model, lda_output_data;\n",
+    "\n",
+    "SELECT madlib.lda_train( 'documents_tf',     -- documents table in the form of term frequency\n",
+    "                         'lda_model',        -- model table created by LDA training (not human readable)\n",
+    "                         'lda_output_data',  -- readable output data table \n",
+    "                         103,                -- vocabulary size\n",
+    "                         5,                  -- number of topics\n",
+    "                         10,                 -- number of iterations\n",
+    "                         5,                  -- Dirichlet prior for the per-doc topic multinomial (alpha)\n",
+    "                         0.01                -- Dirichlet prior for the per-topic word multinomial (beta)\n",
+    "                       );\n",
+    "\n",
+    "SELECT * FROM lda_output_data ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. Helper functions on learned model  \n",
+    "\n",
+    "First, we get topic description by top-k words.  These are the k words with the highest probability for the topic.\n",
+    "\n",
+    "Note that if there are ties in probability, more than k words may actually be reported for each topic.  Also note that topicid starts at 0."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "40 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>topicid</th>\n",
+       "        <th>wordid</th>\n",
+       "        <th>prob</th>\n",
+       "        <th>word</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>90</td>\n",
+       "        <td>0.219595417987</td>\n",
+       "        <td>the</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>50</td>\n",
+       "        <td>0.170850597124</td>\n",
+       "        <td>in</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>94</td>\n",
+       "        <td>0.122105776261</td>\n",
+       "        <td>to</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0.0733609553985</td>\n",
+       "        <td>a</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>19</td>\n",
+       "        <td>0.0489885449671</td>\n",
+       "        <td>by</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>68</td>\n",
+       "        <td>0.125195129566</td>\n",
+       "        <td>of</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>9</td>\n",
+       "        <td>0.0939743990009</td>\n",
+       "        <td>and</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>36</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>domains</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>14</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>average</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>16</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>batting</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>54</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>large</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>56</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>latent</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>78</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>redwood–douglas</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>86</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>statistics</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>60</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>machine</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>26</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>coast</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>1960s</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>25</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>closely</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>87</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>strong</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>67</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>northwest</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>99</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>which</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>35</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>document</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>11</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>are</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>91</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>theory</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>33</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>discipline</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>75</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>pitching</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>49</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>hitting</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>97</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>variable</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>89</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>that</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>88</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>swung</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>30</td>\n",
+       "        <td>0.0315329378707</td>\n",
+       "        <td>deliver</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>68</td>\n",
+       "        <td>0.095577746077</td>\n",
+       "        <td>of</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>101</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>won</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>63</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>methods</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>41</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>fir</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>83</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>specializes</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>77</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>ranges</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>37</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>dominated</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>100</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>with</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>22</td>\n",
+       "        <td>0.0480266286258</td>\n",
+       "        <td>center</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 90, 0.219595417986839, u'the'),\n",
+       " (0, 50, 0.170850597124056, u'in'),\n",
+       " (0, 94, 0.122105776261272, u'to'),\n",
+       " (0, 3, 0.0733609553984889, u'a'),\n",
+       " (0, 19, 0.0489885449670972, u'by'),\n",
+       " (1, 68, 0.125195129566032, u'of'),\n",
+       " (1, 9, 0.0939743990009366, u'and'),\n",
+       " (1, 36, 0.0315329378707462, u'domains'),\n",
+       " (1, 14, 0.0315329378707462, u'average'),\n",
+       " (1, 16, 0.0315329378707462, u'batting'),\n",
+       " (1, 54, 0.0315329378707462, u'large'),\n",
+       " (1, 56, 0.0315329378707462, u'latent'),\n",
+       " (1, 78, 0.0315329378707462, u'redwood\\u2013douglas'),\n",
+       " (1, 86, 0.0315329378707462, u'statistics'),\n",
+       " (1, 60, 0.0315329378707462, u'machine'),\n",
+       " (1, 26, 0.0315329378707462, u'coast'),\n",
+       " (1, 0, 0.0315329378707462, u'1960s'),\n",
+       " (1, 25, 0.0315329378707462, u'closely'),\n",
+       " (1, 87, 0.0315329378707462, u'strong'),\n",
+       " (1, 67, 0.0315329378707462, u'northwest'),\n",
+       " (1, 99, 0.0315329378707462, u'which'),\n",
+       " (1, 35, 0.0315329378707462, u'document'),\n",
+       " (1, 11, 0.0315329378707462, u'are'),\n",
+       " (1, 91, 0.0315329378707462, u'theory'),\n",
+       " (1, 33, 0.0315329378707462, u'discipline'),\n",
+       " (1, 75, 0.0315329378707462, u'pitching'),\n",
+       " (1, 49, 0.0315329378707462, u'hitting'),\n",
+       " (1, 97, 0.0315329378707462, u'variable'),\n",
+       " (1, 89, 0.0315329378707462, u'that'),\n",
+       " (1, 88, 0.0315329378707462, u'swung'),\n",
+       " (1, 30, 0.0315329378707462, u'deliver'),\n",
+       " (2, 68, 0.0955777460770328, u'of'),\n",
+       " (2, 101, 0.0480266286257727, u'won'),\n",
+       " (2, 63, 0.0480266286257727, u'methods'),\n",
+       " (2, 41, 0.0480266286257727, u'fir'),\n",
+       " (2, 83, 0.0480266286257727, u'specializes'),\n",
+       " (2, 77, 0.0480266286257727, u'ranges'),\n",
+       " (2, 37, 0.0480266286257727, u'dominated'),\n",
+       " (2, 100, 0.0480266286257727, u'with'),\n",
+       " (2, 22, 0.0480266286257727, u'center')]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS helper_output_table;\n",
+    "\n",
+    "SELECT madlib.lda_get_topic_desc( 'lda_model',                -- LDA model generated in training\n",
+    "                                  'documents_tf_vocabulary',  -- vocabulary table that maps wordid to word\n",
+    "                                  'helper_output_table',      -- output table for per-topic descriptions\n",
+    "                                  5);                         -- k: number of top words for each topic\n",
+    "\n",
+    "SELECT * FROM helper_output_table ORDER BY topicid, prob DESC LIMIT 40;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Get the per-word topic counts.  This mapping shows how many times a given word is assigned to a topic.  E.g., wordid 3 is assigned to topicid 0 three times. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "20 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>wordid</th>\n",
+       "        <th>topic_count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[0, 1, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[3, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>[0, 0, 0, 1, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>[0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>[0, 3, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>[1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>[0, 1, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>[0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>[0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>[0, 1, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>[0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>[0, 1, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>[0, 0, 0, 1, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>[1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>[2, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, [0, 1, 0, 0, 0]),\n",
+       " (1, [1, 0, 0, 0, 0]),\n",
+       " (2, [1, 0, 0, 0, 0]),\n",
+       " (3, [3, 0, 0, 0, 0]),\n",
+       " (4, [0, 0, 0, 0, 1]),\n",
+       " (5, [1, 0, 0, 0, 0]),\n",
+       " (6, [1, 0, 0, 0, 0]),\n",
+       " (7, [0, 0, 0, 1, 0]),\n",
+       " (8, [0, 0, 1, 0, 0]),\n",
+       " (9, [0, 3, 0, 0, 0]),\n",
+       " (10, [1, 0, 0, 0, 0]),\n",
+       " (11, [0, 1, 0, 0, 0]),\n",
+       " (12, [0, 0, 1, 0, 0]),\n",
+       " (13, [0, 0, 0, 0, 1]),\n",
+       " (14, [0, 1, 0, 0, 0]),\n",
+       " (15, [0, 0, 0, 0, 1]),\n",
+       " (16, [0, 1, 0, 0, 0]),\n",
+       " (17, [0, 0, 0, 1, 0]),\n",
+       " (18, [1, 0, 0, 0, 0]),\n",
+       " (19, [2, 0, 0, 0, 0])]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS helper_output_table;\n",
+    "\n",
+    "SELECT madlib.lda_get_word_topic_count( 'lda_model',            -- LDA model generated in training\n",
+    "                                        'helper_output_table'); -- output table for per-word topic counts\n",
+    "\n",
+    "SELECT * FROM helper_output_table ORDER BY wordid LIMIT 20;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Get the per-topic word counts.   This mapping shows which words are associated with each topic by frequency."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "5 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>topicid</th>\n",
+       "        <th>word_count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[0, 1, 1, 3, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, [0, 1, 1, 3, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0]),\n",
+       " (1, [1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0]),\n",
+       " (2, [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]),\n",
+       " (3, [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0]),\n",
+       " (4, [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])]"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS helper_output_table;\n",
+    "\n",
+    "SELECT madlib.lda_get_topic_word_count( 'lda_model',\n",
+    "                                        'helper_output_table');\n",
+    "\n",
+    "SELECT * FROM helper_output_table ORDER BY topicid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Get the per-document word to topic mapping:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "40 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>wordid</th>\n",
+       "        <th>topicid</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>54</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>42</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>35</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>32</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>29</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>28</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>24</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>17</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>8</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>97</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>95</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>90</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>85</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>80</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>71</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>68</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>68</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>64</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>56</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>102</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>101</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>100</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>93</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>90</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>90</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>88</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>75</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>74</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>68</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>68</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>59</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>57</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>55</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>53</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>50</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>49</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 54, 1),\n",
+       " (0, 42, 2),\n",
+       " (0, 35, 1),\n",
+       " (0, 32, 2),\n",
+       " (0, 29, 3),\n",
+       " (0, 28, 4),\n",
+       " (0, 24, 3),\n",
+       " (0, 17, 3),\n",
+       " (0, 11, 1),\n",
+       " (0, 8, 2),\n",
+       " (0, 3, 0),\n",
+       " (0, 97, 1),\n",
+       " (0, 95, 3),\n",
+       " (0, 90, 0),\n",
+       " (0, 85, 0),\n",
+       " (0, 80, 2),\n",
+       " (0, 71, 3),\n",
+       " (0, 68, 2),\n",
+       " (0, 68, 1),\n",
+       " (0, 64, 3),\n",
+       " (0, 56, 1),\n",
+       " (1, 1, 0),\n",
+       " (1, 0, 1),\n",
+       " (1, 102, 4),\n",
+       " (1, 101, 2),\n",
+       " (1, 100, 2),\n",
+       " (1, 93, 3),\n",
+       " (1, 90, 3),\n",
+       " (1, 90, 0),\n",
+       " (1, 88, 1),\n",
+       " (1, 75, 1),\n",
+       " (1, 74, 3),\n",
+       " (1, 68, 2),\n",
+       " (1, 68, 1),\n",
+       " (1, 59, 3),\n",
+       " (1, 57, 4),\n",
+       " (1, 55, 3),\n",
+       " (1, 53, 3),\n",
+       " (1, 50, 0),\n",
+       " (1, 49, 1)]"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS helper_output_table;\n",
+    "\n",
+    "SELECT madlib.lda_get_word_topic_mapping('lda_output_data',\n",
+    "                                         'helper_output_table');\n",
+    "\n",
+    "SELECT * FROM helper_output_table ORDER BY docid LIMIT 40;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 6. Predict\n",
+    "Use a learned LDA model for prediction (that is, to label new documents).  In this example, we use the same input table as we used to train, just for demonstration purpose.  Normally, the test document is a new one that we want to predict on."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>wordcount</th>\n",
+       "        <th>words</th>\n",
+       "        <th>counts</th>\n",
+       "        <th>topic_count</th>\n",
+       "        <th>topic_assignment</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>37</td>\n",
+       "        <td>[1, 50, 49, 46, 19, 16, 14, 9, 7, 0, 90, 68, 57, 102, 101, 100, 93, 88, 75, 74, 59, 55, 53, 48, 39, 21, 18, 15, 6, 2]</td>\n",
+       "        <td>[1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</td>\n",
+       "        <td>[7, 3, 19, 2, 6]</td>\n",
+       "        <td>[2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 2, 2, 3, 3, 0, 0, 0, 1, 1, 2, 2, 0, 4, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 4, 2, 2, 2]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>49</td>\n",
+       "        <td>[77, 78, 81, 82, 67, 65, 51, 45, 44, 43, 34, 26, 13, 98, 96, 94, 90, 84, 73, 68, 66, 61, 50, 41, 38, 37, 31, 23, 22, 20, 19, 12, 4, 3]</td>\n",
+       "        <td>[1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 11, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</td>\n",
+       "        <td>[20, 0, 3, 5, 21]</td>\n",
+       "        <td>[4, 4, 4, 4, 0, 0, 3, 4, 4, 3, 4, 4, 0, 4, 4, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 0, 0, 4, 2, 2, 4, 4, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 0]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>22</td>\n",
+       "        <td>[24, 17, 11, 95, 90, 85, 68, 54, 42, 35, 28, 8, 3, 97, 80, 71, 64, 56, 32, 29]</td>\n",
+       "        <td>[1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1]</td>\n",
+       "        <td>[0, 1, 3, 3, 15]</td>\n",
+       "        <td>[4, 4, 4, 2, 3, 3, 2, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>36</td>\n",
+       "        <td>[10, 27, 33, 40, 47, 51, 58, 62, 63, 69, 72, 83, 100, 99, 94, 92, 91, 90, 89, 87, 86, 79, 76, 70, 60, 52, 50, 36, 30, 25, 9, 5, 3]</td>\n",
+       "        <td>[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1]</td>\n",
+       "        <td>[7, 0, 22, 1, 6]</td>\n",
+       "        <td>[2, 2, 2, 2, 2, 2, 4, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 3, 4, 2, 4, 2, 2, 2, 4, 2, 0, 4, 2, 4, 2, 2, 2, 0]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, 37, [1, 50, 49, 46, 19, 16, 14, 9, 7, 0, 90, 68, 57, 102, 101, 100, 93, 88, 75, 74, 59, 55, 53, 48, 39, 21, 18, 15, 6, 2], [1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [7, 3, 19, 2, 6], [2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 2, 2, 3, 3, 0, 0, 0, 1, 1, 2, 2, 0, 4, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 4, 2, 2, 2]),\n",
+       " (3, 49, [77, 78, 81, 82, 67, 65, 51, 45, 44, 43, 34, 26, 13, 98, 96, 94, 90, 84, 73, 68, 66, 61, 50, 41, 38, 37, 31, 23, 22, 20, 19, 12, 4, 3], [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 11, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [20, 0, 3, 5, 21], [4, 4, 4, 4, 0, 0, 3, 4, 4, 3, 4, 4, 0, 4, 4, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 0, 0, 4, 2, 2, 4, 4, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 0]),\n",
+       " (0, 22, [24, 17, 11, 95, 90, 85, 68, 54, 42, 35, 28, 8, 3, 97, 80, 71, 64, 56, 32, 29], [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1], [0, 1, 3, 3, 15], [4, 4, 4, 2, 3, 3, 2, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4]),\n",
+       " (2, 36, [10, 27, 33, 40, 47, 51, 58, 62, 63, 69, 72, 83, 100, 99, 94, 92, 91, 90, 89, 87, 86, 79, 76, 70, 60, 52, 50, 36, 30, 25, 9, 5, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1], [7, 0, 22, 1, 6], [2, 2, 2, 2, 2, 2, 4, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 3, 4, 2, 4, 2, 2, 2, 4, 2, 0, 4, 2, 4, 2, 2, 2, 0])]"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS outdata_predict;\n",
+    "\n",
+    "SELECT madlib.lda_predict( 'documents_tf',          -- Document to predict\n",
+    "                           'lda_model',             -- LDA model from training\n",
+    "                           'outdata_predict'                \n",
+    "                         );\n",
+    "\n",
+    "SELECT * FROM outdata_predict;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 7. Helper function on prediction"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "40 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>wordid</th>\n",
+       "        <th>topicid</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>42</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>35</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>32</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>29</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>28</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>24</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>17</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>11</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>8</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>97</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>95</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>90</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>85</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>80</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>71</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>68</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>68</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>64</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>64</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>56</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>54</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>6</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>102</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>101</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>100</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>93</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>90</td>\n",
+       "        <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>90</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>88</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>75</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>74</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>68</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>59</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>57</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>55</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>53</td>\n",
+       "        <td>4</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 42, 4),\n",
+       " (0, 35, 4),\n",
+       " (0, 32, 4),\n",
+       " (0, 29, 4),\n",
+       " (0, 28, 2),\n",
+       " (0, 24, 4),\n",
+       " (0, 17, 4),\n",
+       " (0, 11, 4),\n",
+       " (0, 8, 4),\n",
+       " (0, 3, 4),\n",
+       " (0, 97, 4),\n",
+       " (0, 95, 2),\n",
+       " (0, 90, 3),\n",
+       " (0, 85, 3),\n",
+       " (0, 80, 4),\n",
+       " (0, 71, 4),\n",
+       " (0, 68, 2),\n",
+       " (0, 68, 1),\n",
+       " (0, 64, 4),\n",
+       " (0, 64, 3),\n",
+       " (0, 56, 4),\n",
+       " (0, 54, 4),\n",
+       " (1, 6, 2),\n",
+       " (1, 2, 2),\n",
+       " (1, 1, 2),\n",
+       " (1, 0, 2),\n",
+       " (1, 102, 2),\n",
+       " (1, 101, 0),\n",
+       " (1, 100, 4),\n",
+       " (1, 93, 2),\n",
+       " (1, 90, 3),\n",
+       " (1, 90, 0),\n",
+       " (1, 88, 2),\n",
+       " (1, 75, 2),\n",
+       " (1, 74, 4),\n",
+       " (1, 68, 1),\n",
+       " (1, 59, 4),\n",
+       " (1, 57, 2),\n",
+       " (1, 55, 4),\n",
+       " (1, 53, 4)]"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS helper_output_table;\n",
+    "\n",
+    "SELECT madlib.lda_get_word_topic_mapping('outdata_predict',  -- Output table from prediction\n",
+    "                                         'helper_output_table');\n",
+    "\n",
+    "SELECT * FROM helper_output_table ORDER BY docid LIMIT 40;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 8. Perplexity\n",
+    "\n",
+    "Call perplexity function to see how well the model fits the data.  Perplexity computes word likelihoods averaged over the test documents."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>lda_get_perplexity</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>86.6029912205</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(86.6029912205131,)]"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.lda_get_perplexity( 'lda_model',\n",
+    "                                  'outdata_predict'\n",
+    "                                );"
+   ]
+  }
+ ],
+ "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}


[04/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Term-frequency-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Term-frequency-v1.ipynb b/community-artifacts/Term-frequency-v1.ipynb
new file mode 100644
index 0000000..99a0cd0
--- /dev/null
+++ b/community-artifacts/Term-frequency-v1.ipynb
@@ -0,0 +1,1062 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Term Frequency\n",
+    "Term frequency computes the number of times that a word or term occurs in a document.  Term frequency is often used as part of a larger text processing pipeline, which may include operations such as stemming, stop word removal and topic modelling."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The sql extension is already loaded. To reload it, use:\n",
+      "  %reload_ext sql\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: fmcquillan@madlib'"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum 4.3.10.0\n",
+    "# %sql postgresql://gpdbchina@10.194.10.68:61000/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "%sql postgresql://fmcquillan@localhost:5432/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.13, git revision: unknown, cmake configuration time: Wed Dec 20 08:02:21 UTC 2017, build type: Release, build system: Darwin-17.3.0, C compiler: Clang, C++ compiler: Clang</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.13, git revision: unknown, cmake configuration time: Wed Dec 20 08:02:21 UTC 2017, build type: Release, build system: Darwin-17.3.0, C compiler: Clang, C++ compiler: Clang',)]"
+      ]
+     },
+     "execution_count": 38,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1.  Prepare documents\n",
+    "First we create a document table with one document per row:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 58,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "4 rows affected.\n",
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>contents</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Chinchillas and kittens are cute.</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>My sister adopted two kittens yesterday.</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Look at this cute hamster munching on a piece of broccoli.</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.'),\n",
+       " (1, u'Chinchillas and kittens are cute.'),\n",
+       " (2, u'My sister adopted two kittens yesterday.'),\n",
+       " (3, u'Look at this cute hamster munching on a piece of broccoli.')]"
+      ]
+     },
+     "execution_count": 58,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS documents;\n",
+    "CREATE TABLE documents(docid INT4, contents TEXT);\n",
+    "\n",
+    "INSERT INTO documents VALUES\n",
+    "(0, 'I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.'),\n",
+    "(1, 'Chinchillas and kittens are cute.'),\n",
+    "(2, 'My sister adopted two kittens yesterday.'),\n",
+    "(3, 'Look at this cute hamster munching on a piece of broccoli.');\n",
+    "\n",
+    "SELECT * from documents ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "You can apply stemming, stop word removal and tokenization at this point in order to prepare the documents for text processing. Depending upon your database version, various tools are available here. Databases based on more recent versions of PostgreSQL may do something like:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>tsvector_to_array</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[u'ate', u'banana', u'breakfast', u'broccoli', u'eat', u'like', u'smoothi', u'spinach']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[u'chinchilla', u'cute', u'kitten']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[u'adopt', u'kitten', u'sister', u'two', u'yesterday']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>[u'broccoli', u'cute', u'hamster', u'look', u'munch', u'piec']</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[([u'ate', u'banana', u'breakfast', u'broccoli', u'eat', u'like', u'smoothi', u'spinach'],),\n",
+       " ([u'chinchilla', u'cute', u'kitten'],),\n",
+       " ([u'adopt', u'kitten', u'sister', u'two', u'yesterday'],),\n",
+       " ([u'broccoli', u'cute', u'hamster', u'look', u'munch', u'piec'],)]"
+      ]
+     },
+     "execution_count": 53,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT tsvector_to_array(to_tsvector('english',contents)) from documents;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this example, we assume a database based on an older version of PostgreSQL and just perform basic punctuation removal and tokenization. The array of words is added as a new column to the documents table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 59,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "4 rows affected.\n",
+      "4 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>contents</th>\n",
+       "        <th>words</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.</td>\n",
+       "        <td>[u'i', u'like', u'to', u'eat', u'broccoli', u'and', u'bananas', u'i', u'ate', u'a', u'banana', u'and', u'spinach', u'smoothie', u'for', u'breakfast']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Chinchillas and kittens are cute.</td>\n",
+       "        <td>[u'chinchillas', u'and', u'kittens', u'are', u'cute']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>My sister adopted two kittens yesterday.</td>\n",
+       "        <td>[u'my', u'sister', u'adopted', u'two', u'kittens', u'yesterday']</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Look at this cute hamster munching on a piece of broccoli.</td>\n",
+       "        <td>[u'look', u'at', u'this', u'cute', u'hamster', u'munching', u'on', u'a', u'piece', u'of', u'broccoli']</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast.', [u'i', u'like', u'to', u'eat', u'broccoli', u'and', u'bananas', u'i', u'ate', u'a', u'banana', u'and', u'spinach', u'smoothie', u'for', u'breakfast']),\n",
+       " (1, u'Chinchillas and kittens are cute.', [u'chinchillas', u'and', u'kittens', u'are', u'cute']),\n",
+       " (2, u'My sister adopted two kittens yesterday.', [u'my', u'sister', u'adopted', u'two', u'kittens', u'yesterday']),\n",
+       " (3, u'Look at this cute hamster munching on a piece of broccoli.', [u'look', u'at', u'this', u'cute', u'hamster', u'munching', u'on', u'a', u'piece', u'of', u'broccoli'])]"
+      ]
+     },
+     "execution_count": 59,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "ALTER TABLE documents ADD COLUMN words TEXT[];\n",
+    "\n",
+    "UPDATE documents SET words = \n",
+    "    regexp_split_to_array(lower(\n",
+    "    regexp_replace(contents, E'[,.;\\']','', 'g')\n",
+    "    ), E'[\\\\s+]');\n",
+    "    \n",
+    "SELECT * FROM documents ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Term frequency\n",
+    "Build a histogram for each document:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 60,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "36 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>word</th>\n",
+       "        <th>count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>a</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>breakfast</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>banana</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>and</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>eat</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>smoothie</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>to</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>like</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>broccoli</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>bananas</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>spinach</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>i</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>ate</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>for</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>are</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>cute</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>kittens</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>chinchillas</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>and</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>two</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>yesterday</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>kittens</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>sister</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>my</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>adopted</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>this</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>at</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>a</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>broccoli</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>of</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>look</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>hamster</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>on</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>piece</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>cute</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>munching</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'a', 1),\n",
+       " (0, u'breakfast', 1),\n",
+       " (0, u'banana', 1),\n",
+       " (0, u'and', 2),\n",
+       " (0, u'eat', 1),\n",
+       " (0, u'smoothie', 1),\n",
+       " (0, u'to', 1),\n",
+       " (0, u'like', 1),\n",
+       " (0, u'broccoli', 1),\n",
+       " (0, u'bananas', 1),\n",
+       " (0, u'spinach', 1),\n",
+       " (0, u'i', 2),\n",
+       " (0, u'ate', 1),\n",
+       " (0, u'for', 1),\n",
+       " (1, u'are', 1),\n",
+       " (1, u'cute', 1),\n",
+       " (1, u'kittens', 1),\n",
+       " (1, u'chinchillas', 1),\n",
+       " (1, u'and', 1),\n",
+       " (2, u'two', 1),\n",
+       " (2, u'yesterday', 1),\n",
+       " (2, u'kittens', 1),\n",
+       " (2, u'sister', 1),\n",
+       " (2, u'my', 1),\n",
+       " (2, u'adopted', 1),\n",
+       " (3, u'this', 1),\n",
+       " (3, u'at', 1),\n",
+       " (3, u'a', 1),\n",
+       " (3, u'broccoli', 1),\n",
+       " (3, u'of', 1),\n",
+       " (3, u'look', 1),\n",
+       " (3, u'hamster', 1),\n",
+       " (3, u'on', 1),\n",
+       " (3, u'piece', 1),\n",
+       " (3, u'cute', 1),\n",
+       " (3, u'munching', 1)]"
+      ]
+     },
+     "execution_count": 60,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS documents_tf, documents_tf_vocabulary;\n",
+    "\n",
+    "SELECT madlib.term_frequency('documents',    -- input table\n",
+    "                             'docid',        -- document id\n",
+    "                             'words',        -- vector of words in document\n",
+    "                             'documents_tf'  -- output table\n",
+    "                            );\n",
+    "\n",
+    "SELECT * FROM documents_tf ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3.  Term frequency with vocabulary\n",
+    "\n",
+    "In this example we create a vocabulary of the words and store a wordid in the output table instead of the actual word."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 61,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "36 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>docid</th>\n",
+       "        <th>wordid</th>\n",
+       "        <th>count</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>17</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>9</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>25</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>12</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>13</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>15</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>2</td>\n",
+       "        <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>28</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>5</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>6</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>7</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>8</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>26</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>16</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>10</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>3</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>30</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>1</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>16</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>20</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>24</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>29</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>4</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>21</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>22</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>23</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>0</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>11</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>9</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>27</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>14</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>18</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>19</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, 17, 1),\n",
+       " (0, 9, 1),\n",
+       " (0, 25, 1),\n",
+       " (0, 12, 1),\n",
+       " (0, 13, 1),\n",
+       " (0, 15, 2),\n",
+       " (0, 0, 1),\n",
+       " (0, 2, 2),\n",
+       " (0, 28, 1),\n",
+       " (0, 5, 1),\n",
+       " (0, 6, 1),\n",
+       " (0, 7, 1),\n",
+       " (0, 8, 1),\n",
+       " (0, 26, 1),\n",
+       " (1, 16, 1),\n",
+       " (1, 11, 1),\n",
+       " (1, 10, 1),\n",
+       " (1, 2, 1),\n",
+       " (1, 3, 1),\n",
+       " (2, 30, 1),\n",
+       " (2, 1, 1),\n",
+       " (2, 16, 1),\n",
+       " (2, 20, 1),\n",
+       " (2, 24, 1),\n",
+       " (2, 29, 1),\n",
+       " (3, 4, 1),\n",
+       " (3, 21, 1),\n",
+       " (3, 22, 1),\n",
+       " (3, 23, 1),\n",
+       " (3, 0, 1),\n",
+       " (3, 11, 1),\n",
+       " (3, 9, 1),\n",
+       " (3, 27, 1),\n",
+       " (3, 14, 1),\n",
+       " (3, 18, 1),\n",
+       " (3, 19, 1)]"
+      ]
+     },
+     "execution_count": 61,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS documents_tf, documents_tf_vocabulary;\n",
+    "\n",
+    "SELECT madlib.term_frequency('documents',    -- input table\n",
+    "                             'docid',        -- document id\n",
+    "                             'words',        -- vector of words in document\n",
+    "                             'documents_tf',-- output table\n",
+    "                             TRUE\n",
+    "                            );\n",
+    "\n",
+    "SELECT * FROM documents_tf ORDER BY docid;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Note above that a wordid have been generated.  The vocabulary table maps wordid to the actual word text:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 62,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "31 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>wordid</th>\n",
+       "        <th>word</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>a</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>adopted</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>and</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>are</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>at</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>ate</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>banana</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>bananas</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>breakfast</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>broccoli</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>chinchillas</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>cute</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>eat</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>for</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>hamster</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>15</td>\n",
+       "        <td>i</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>16</td>\n",
+       "        <td>kittens</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>17</td>\n",
+       "        <td>like</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>18</td>\n",
+       "        <td>look</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>19</td>\n",
+       "        <td>munching</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>20</td>\n",
+       "        <td>my</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>21</td>\n",
+       "        <td>of</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>22</td>\n",
+       "        <td>on</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>23</td>\n",
+       "        <td>piece</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>24</td>\n",
+       "        <td>sister</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>25</td>\n",
+       "        <td>smoothie</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>26</td>\n",
+       "        <td>spinach</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>27</td>\n",
+       "        <td>this</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>28</td>\n",
+       "        <td>to</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>29</td>\n",
+       "        <td>two</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>30</td>\n",
+       "        <td>yesterday</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, u'a'),\n",
+       " (1, u'adopted'),\n",
+       " (2, u'and'),\n",
+       " (3, u'are'),\n",
+       " (4, u'at'),\n",
+       " (5, u'ate'),\n",
+       " (6, u'banana'),\n",
+       " (7, u'bananas'),\n",
+       " (8, u'breakfast'),\n",
+       " (9, u'broccoli'),\n",
+       " (10, u'chinchillas'),\n",
+       " (11, u'cute'),\n",
+       " (12, u'eat'),\n",
+       " (13, u'for'),\n",
+       " (14, u'hamster'),\n",
+       " (15, u'i'),\n",
+       " (16, u'kittens'),\n",
+       " (17, u'like'),\n",
+       " (18, u'look'),\n",
+       " (19, u'munching'),\n",
+       " (20, u'my'),\n",
+       " (21, u'of'),\n",
+       " (22, u'on'),\n",
+       " (23, u'piece'),\n",
+       " (24, u'sister'),\n",
+       " (25, u'smoothie'),\n",
+       " (26, u'spinach'),\n",
+       " (27, u'this'),\n",
+       " (28, u'to'),\n",
+       " (29, u'two'),\n",
+       " (30, u'yesterday')]"
+      ]
+     },
+     "execution_count": 62,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM documents_tf_vocabulary ORDER BY wordid;"
+   ]
+  }
+ ],
+ "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}

http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/kNN-v2.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/kNN-v2.ipynb b/community-artifacts/kNN-v2.ipynb
deleted file mode 100644
index 5b74e48..0000000
--- a/community-artifacts/kNN-v2.ipynb
+++ /dev/null
@@ -1,751 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# k-Nearest Neighbors\n",
-    "Finds k nearest data points to a given data point and outputs majority vote value of output classes in case of classification, and average value of target values in case of regression. KNN was first added in MADlib 1.10 and the interface was updated in 1.13."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
-      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
-      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
-      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
-     ]
-    }
-   ],
-   "source": [
-    "%load_ext sql"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "u'Connected: gpdbchina@madlib'"
-      ]
-     },
-     "execution_count": 2,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Greenplum 4.3.10.0\n",
-    "%sql postgresql://gpdbchina@10.194.10.68:61000/madlib\n",
-    "        \n",
-    "# PostgreSQL local\n",
-    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
-    "\n",
-    "# Greenplum 4.2.3.0\n",
-    "#%sql postgresql://gpdbchina@10.194.10.68:55000/madlib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>version</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>MADlib version: 1.13-dev, git revision: rel/v1.12-41-g4aa0732, cmake configuration time: Tue Dec  5 20:44:49 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'MADlib version: 1.13-dev, git revision: rel/v1.12-41-g4aa0732, cmake configuration time: Tue Dec  5 20:44:49 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0',)]"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql select madlib.version();\n",
-    "#%sql select version();"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 1.  Load data for classification"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "9 rows affected.\n",
-      "9 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>data</th>\n",
-       "        <th>label</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[1, 1]</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[2, 2]</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[3, 3]</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[4, 4]</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[4, 5]</td>\n",
-       "        <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[20, 50]</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>[10, 31]</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>[81, 13]</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>[1, 111]</td>\n",
-       "        <td>0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [1, 1], 1),\n",
-       " (2, [2, 2], 1),\n",
-       " (3, [3, 3], 1),\n",
-       " (4, [4, 4], 1),\n",
-       " (5, [4, 5], 1),\n",
-       " (6, [20, 50], 0),\n",
-       " (7, [10, 31], 0),\n",
-       " (8, [81, 13], 0),\n",
-       " (9, [1, 111], 0)]"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql \n",
-    "DROP TABLE IF EXISTS knn_train_data;\n",
-    "\n",
-    "CREATE TABLE knn_train_data (\n",
-    "                    id integer, \n",
-    "                    data integer[], \n",
-    "                    label integer  -- Integer label means for classification\n",
-    "                    );\n",
-    "\n",
-    "INSERT INTO knn_train_data VALUES\n",
-    "(1, '{1,1}', 1),\n",
-    "(2, '{2,2}', 1),\n",
-    "(3, '{3,3}', 1),\n",
-    "(4, '{4,4}', 1),\n",
-    "(5, '{4,5}', 1),\n",
-    "(6, '{20,50}', 0),\n",
-    "(7, '{10,31}', 0),\n",
-    "(8, '{81,13}', 0),\n",
-    "(9, '{1,111}', 0);\n",
-    "\n",
-    "SELECT * FROM knn_train_data ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 2. Load data for regression"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "9 rows affected.\n",
-      "9 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>data</th>\n",
-       "        <th>label</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[1, 1]</td>\n",
-       "        <td>1.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[2, 2]</td>\n",
-       "        <td>1.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[3, 3]</td>\n",
-       "        <td>1.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[4, 4]</td>\n",
-       "        <td>1.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[4, 5]</td>\n",
-       "        <td>1.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[20, 50]</td>\n",
-       "        <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>[10, 31]</td>\n",
-       "        <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>[81, 13]</td>\n",
-       "        <td>0.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>[1, 111]</td>\n",
-       "        <td>0.0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [1, 1], 1.0),\n",
-       " (2, [2, 2], 1.0),\n",
-       " (3, [3, 3], 1.0),\n",
-       " (4, [4, 4], 1.0),\n",
-       " (5, [4, 5], 1.0),\n",
-       " (6, [20, 50], 0.0),\n",
-       " (7, [10, 31], 0.0),\n",
-       " (8, [81, 13], 0.0),\n",
-       " (9, [1, 111], 0.0)]"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS knn_train_data_reg;\n",
-    "\n",
-    "CREATE TABLE knn_train_data_reg (\n",
-    "                    id integer, \n",
-    "                    data integer[], \n",
-    "                    label float  -- Float label means for regression\n",
-    "                    );\n",
-    "\n",
-    "INSERT INTO knn_train_data_reg VALUES\n",
-    "(1, '{1,1}', 1.0),\n",
-    "(2, '{2,2}', 1.0),\n",
-    "(3, '{3,3}', 1.0),\n",
-    "(4, '{4,4}', 1.0),\n",
-    "(5, '{4,5}', 1.0),\n",
-    "(6, '{20,50}', 0.0),\n",
-    "(7, '{10,31}', 0.0),\n",
-    "(8, '{81,13}', 0.0),\n",
-    "(9, '{1,111}', 0.0);\n",
-    "\n",
-    "SELECT * FROM knn_train_data_reg ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 3. Load testing data"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "6 rows affected.\n",
-      "6 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>data</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[2, 1]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[2, 6]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[15, 40]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[12, 1]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[2, 90]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[50, 45]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [2, 1]),\n",
-       " (2, [2, 6]),\n",
-       " (3, [15, 40]),\n",
-       " (4, [12, 1]),\n",
-       " (5, [2, 90]),\n",
-       " (6, [50, 45])]"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql \n",
-    "DROP TABLE IF EXISTS knn_test_data;\n",
-    "\n",
-    "CREATE TABLE knn_test_data (\n",
-    "                    id integer, \n",
-    "                    data integer[]\n",
-    "                    );\n",
-    "\n",
-    "INSERT INTO knn_test_data VALUES\n",
-    "(1, '{2,1}'),\n",
-    "(2, '{2,6}'),\n",
-    "(3, '{15,40}'),\n",
-    "(4, '{12,1}'),\n",
-    "(5, '{2,90}'),\n",
-    "(6, '{50,45}');\n",
-    "\n",
-    "SELECT * from knn_test_data ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 4. Run KNN for classification\n",
-    "Note that the nearest neighbors are sorted from closest to furthest from the corresponding test point."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "6 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>data</th>\n",
-       "        <th>prediction</th>\n",
-       "        <th>k_nearest_neighbours</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[2, 1]</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>[1, 2, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[2, 6]</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>[5, 4, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[15, 40]</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>[7, 6, 5]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[12, 1]</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>[4, 5, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[2, 90]</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>[9, 6, 7]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[50, 45]</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>[6, 7, 8]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [2, 1], 1.0, [1, 2, 3]),\n",
-       " (2, [2, 6], 1.0, [5, 4, 3]),\n",
-       " (3, [15, 40], 0.0, [7, 6, 5]),\n",
-       " (4, [12, 1], 1.0, [4, 5, 3]),\n",
-       " (5, [2, 90], 0.0, [9, 6, 7]),\n",
-       " (6, [50, 45], 0.0, [6, 7, 8])]"
-      ]
-     },
-     "execution_count": 7,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS knn_result_classification;\n",
-    "\n",
-    "SELECT * FROM madlib.knn(\n",
-    "                'knn_train_data',      -- Table of training data\n",
-    "                'data',                -- Col name of training data\n",
-    "                'id',                  -- Col name of id in train data\n",
-    "                'label',               -- Training labels\n",
-    "                'knn_test_data',       -- Table of test data\n",
-    "                'data',                -- Col name of test data\n",
-    "                'id',                  -- Col name of id in test data\n",
-    "                'knn_result_classification',  -- Output table\n",
-    "                 3,                    -- Number of nearest neighbors\n",
-    "                 True,                 -- True to list nearest-neighbors by id\n",
-    "                 'madlib.squared_dist_norm2' -- Distance function\n",
-    "                );\n",
-    "\n",
-    "SELECT * from knn_result_classification ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 5. Run KNN for regression"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "6 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>data</th>\n",
-       "        <th>prediction</th>\n",
-       "        <th>k_nearest_neighbours</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[2, 1]</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>[1, 2, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[2, 6]</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>[5, 4, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[15, 40]</td>\n",
-       "        <td>0.333333333333</td>\n",
-       "        <td>[7, 6, 5]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[12, 1]</td>\n",
-       "        <td>1.0</td>\n",
-       "        <td>[4, 5, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[2, 90]</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>[9, 6, 7]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[50, 45]</td>\n",
-       "        <td>0.0</td>\n",
-       "        <td>[6, 7, 8]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [2, 1], 1.0, [1, 2, 3]),\n",
-       " (2, [2, 6], 1.0, [5, 4, 3]),\n",
-       " (3, [15, 40], 0.333333333333333, [7, 6, 5]),\n",
-       " (4, [12, 1], 1.0, [4, 5, 3]),\n",
-       " (5, [2, 90], 0.0, [9, 6, 7]),\n",
-       " (6, [50, 45], 0.0, [6, 7, 8])]"
-      ]
-     },
-     "execution_count": 8,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS knn_result_regression;\n",
-    "\n",
-    "SELECT * FROM madlib.knn(\n",
-    "                'knn_train_data_reg',  -- Table of training data\n",
-    "                'data',                -- Col name of training data\n",
-    "                'id',                  -- Col Name of id in train data\n",
-    "                'label',               -- Training labels\n",
-    "                'knn_test_data',       -- Table of test data\n",
-    "                'data',                -- Col name of test data\n",
-    "                'id',                  -- Col name of id in test data\n",
-    "                'knn_result_regression',  -- Output table\n",
-    "                 3,                    -- Number of nearest neighbors\n",
-    "                True,                  -- True to list nearest-neighbors by id\n",
-    "                'madlib.dist_norm2'    -- Distance function\n",
-    "                );\n",
-    "\n",
-    "SELECT * FROM knn_result_regression ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 6. List nearest neighbors only\n",
-    "(without doing classification or regression).  Note that the nearest neighbors are sorted from closest to furthest from the corresponding test point."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "6 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>data</th>\n",
-       "        <th>k_nearest_neighbours</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[2, 1]</td>\n",
-       "        <td>[2, 1, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[2, 6]</td>\n",
-       "        <td>[5, 4, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[15, 40]</td>\n",
-       "        <td>[7, 6, 5]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[12, 1]</td>\n",
-       "        <td>[4, 5, 3]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[2, 90]</td>\n",
-       "        <td>[9, 6, 7]</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[50, 45]</td>\n",
-       "        <td>[6, 7, 8]</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [2, 1], [2, 1, 3]),\n",
-       " (2, [2, 6], [5, 4, 3]),\n",
-       " (3, [15, 40], [7, 6, 5]),\n",
-       " (4, [12, 1], [4, 5, 3]),\n",
-       " (5, [2, 90], [9, 6, 7]),\n",
-       " (6, [50, 45], [6, 7, 8])]"
-      ]
-     },
-     "execution_count": 9,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS knn_result_list_neighbors;\n",
-    "\n",
-    "SELECT * FROM madlib.knn(\n",
-    "                'knn_train_data_reg',  -- Table of training data\n",
-    "                'data',                -- Col name of training data\n",
-    "                'id',                  -- Col Name of id in train data\n",
-    "                NULL,                  -- NULL training labels means just list neighbors\n",
-    "                'knn_test_data',       -- Table of test data\n",
-    "                'data',                -- Col name of test data\n",
-    "                'id',                  -- Col name of id in test data\n",
-    "                'knn_result_list_neighbors', -- Output table\n",
-    "                3                      -- Number of nearest neighbors\n",
-    "                );\n",
-    "\n",
-    "SELECT * FROM knn_result_list_neighbors ORDER BY id;"
-   ]
-  }
- ],
- "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.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}

http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/kNN-v3.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/kNN-v3.ipynb b/community-artifacts/kNN-v3.ipynb
new file mode 100644
index 0000000..a4b3304
--- /dev/null
+++ b/community-artifacts/kNN-v3.ipynb
@@ -0,0 +1,857 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# k-Nearest Neighbors\n",
+    "Finds k nearest data points to a given data point and outputs majority vote value of output classes in case of classification, and average value of target values in case of regression. KNN was first added in MADlib 1.10 with updates in 1.13 and 1.14."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.\n",
+      "  \"You should import from traitlets.config instead.\", ShimWarning)\n",
+      "/Users/fmcquillan/anaconda/lib/python2.7/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.\n",
+      "  warn(\"IPython.utils.traitlets has moved to a top-level traitlets package.\")\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: gpadmin@madlib'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>version</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>MADlib version: 1.14-dev, git revision: rc/1.13-rc1-12-gb8a306e, cmake configuration time: Mon Feb 12 19:57:54 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'MADlib version: 1.14-dev, git revision: rc/1.13-rc1-12-gb8a306e, cmake configuration time: Mon Feb 12 19:57:54 UTC 2018, build type: release, build system: Linux-2.6.32-696.20.1.el6.x86_64, C compiler: gcc 4.4.7, C++ compiler: g++ 4.4.7',)]"
+      ]
+     },
+     "execution_count": 67,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1.  Load data for classification"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "9 rows affected.\n",
+      "9 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "        <th>label</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[1, 1]</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 2]</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[3, 3]</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[4, 4]</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[4, 5]</td>\n",
+       "        <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[20, 50]</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>[10, 31]</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>[81, 13]</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>[1, 111]</td>\n",
+       "        <td>0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [1, 1], 1),\n",
+       " (2, [2, 2], 1),\n",
+       " (3, [3, 3], 1),\n",
+       " (4, [4, 4], 1),\n",
+       " (5, [4, 5], 1),\n",
+       " (6, [20, 50], 0),\n",
+       " (7, [10, 31], 0),\n",
+       " (8, [81, 13], 0),\n",
+       " (9, [1, 111], 0)]"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql \n",
+    "DROP TABLE IF EXISTS knn_train_data;\n",
+    "\n",
+    "CREATE TABLE knn_train_data (\n",
+    "                    id integer, \n",
+    "                    data integer[], \n",
+    "                    label integer  -- Integer label means for classification\n",
+    "                    );\n",
+    "\n",
+    "INSERT INTO knn_train_data VALUES\n",
+    "(1, '{1,1}', 1),\n",
+    "(2, '{2,2}', 1),\n",
+    "(3, '{3,3}', 1),\n",
+    "(4, '{4,4}', 1),\n",
+    "(5, '{4,5}', 1),\n",
+    "(6, '{20,50}', 0),\n",
+    "(7, '{10,31}', 0),\n",
+    "(8, '{81,13}', 0),\n",
+    "(9, '{1,111}', 0);\n",
+    "\n",
+    "SELECT * FROM knn_train_data ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2. Load data for regression"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "9 rows affected.\n",
+      "9 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "        <th>label</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[1, 1]</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 2]</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[3, 3]</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[4, 4]</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[4, 5]</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[20, 50]</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>[10, 31]</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>[81, 13]</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>[1, 111]</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [1, 1], 1.0),\n",
+       " (2, [2, 2], 1.0),\n",
+       " (3, [3, 3], 1.0),\n",
+       " (4, [4, 4], 1.0),\n",
+       " (5, [4, 5], 1.0),\n",
+       " (6, [20, 50], 0.0),\n",
+       " (7, [10, 31], 0.0),\n",
+       " (8, [81, 13], 0.0),\n",
+       " (9, [1, 111], 0.0)]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS knn_train_data_reg;\n",
+    "\n",
+    "CREATE TABLE knn_train_data_reg (\n",
+    "                    id integer, \n",
+    "                    data integer[], \n",
+    "                    label float  -- Float label means for regression\n",
+    "                    );\n",
+    "\n",
+    "INSERT INTO knn_train_data_reg VALUES\n",
+    "(1, '{1,1}', 1.0),\n",
+    "(2, '{2,2}', 1.0),\n",
+    "(3, '{3,3}', 1.0),\n",
+    "(4, '{4,4}', 1.0),\n",
+    "(5, '{4,5}', 1.0),\n",
+    "(6, '{20,50}', 0.0),\n",
+    "(7, '{10,31}', 0.0),\n",
+    "(8, '{81,13}', 0.0),\n",
+    "(9, '{1,111}', 0.0);\n",
+    "\n",
+    "SELECT * FROM knn_train_data_reg ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 3. Load testing data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "6 rows affected.\n",
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[2, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 6]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[15, 40]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[12, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[2, 90]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[50, 45]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [2, 1]),\n",
+       " (2, [2, 6]),\n",
+       " (3, [15, 40]),\n",
+       " (4, [12, 1]),\n",
+       " (5, [2, 90]),\n",
+       " (6, [50, 45])]"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql \n",
+    "DROP TABLE IF EXISTS knn_test_data;\n",
+    "\n",
+    "CREATE TABLE knn_test_data (\n",
+    "                    id integer, \n",
+    "                    data integer[]\n",
+    "                    );\n",
+    "\n",
+    "INSERT INTO knn_test_data VALUES\n",
+    "(1, '{2,1}'),\n",
+    "(2, '{2,6}'),\n",
+    "(3, '{15,40}'),\n",
+    "(4, '{12,1}'),\n",
+    "(5, '{2,90}'),\n",
+    "(6, '{50,45}');\n",
+    "\n",
+    "SELECT * from knn_test_data ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. Run KNN for classification\n",
+    "Note that the nearest neighbors are sorted from closest to furthest from the corresponding test point."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "        <th>prediction</th>\n",
+       "        <th>k_nearest_neighbours</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[2, 1]</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>[2, 1, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 6]</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>[5, 4, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[15, 40]</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>[7, 6, 5]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[12, 1]</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>[4, 5, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[2, 90]</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>[9, 6, 7]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[50, 45]</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>[6, 7, 8]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [2, 1], 1.0, [2, 1, 3]),\n",
+       " (2, [2, 6], 1.0, [5, 4, 3]),\n",
+       " (3, [15, 40], 0.0, [7, 6, 5]),\n",
+       " (4, [12, 1], 1.0, [4, 5, 3]),\n",
+       " (5, [2, 90], 0.0, [9, 6, 7]),\n",
+       " (6, [50, 45], 0.0, [6, 7, 8])]"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS knn_result_classification;\n",
+    "\n",
+    "SELECT * FROM madlib.knn(\n",
+    "                'knn_train_data',      -- Table of training data\n",
+    "                'data',                -- Col name of training data\n",
+    "                'id',                  -- Col name of id in train data\n",
+    "                'label',               -- Training labels\n",
+    "                'knn_test_data',       -- Table of test data\n",
+    "                'data',                -- Col name of test data\n",
+    "                'id',                  -- Col name of id in test data\n",
+    "                'knn_result_classification',  -- Output table\n",
+    "                 3,                    -- Number of nearest neighbors\n",
+    "                 True,                 -- True to list nearest-neighbors by id\n",
+    "                 'madlib.squared_dist_norm2' -- Distance function\n",
+    "                );\n",
+    "\n",
+    "SELECT * from knn_result_classification ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5. Run KNN for regression"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "        <th>prediction</th>\n",
+       "        <th>k_nearest_neighbours</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[2, 1]</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>[1, 2, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 6]</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>[5, 4, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[15, 40]</td>\n",
+       "        <td>0.333333333333</td>\n",
+       "        <td>[7, 6, 5]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[12, 1]</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>[4, 5, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[2, 90]</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>[9, 6, 7]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[50, 45]</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>[6, 7, 8]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [2, 1], 1.0, [1, 2, 3]),\n",
+       " (2, [2, 6], 1.0, [5, 4, 3]),\n",
+       " (3, [15, 40], 0.333333333333333, [7, 6, 5]),\n",
+       " (4, [12, 1], 1.0, [4, 5, 3]),\n",
+       " (5, [2, 90], 0.0, [9, 6, 7]),\n",
+       " (6, [50, 45], 0.0, [6, 7, 8])]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS knn_result_regression;\n",
+    "\n",
+    "SELECT * FROM madlib.knn(\n",
+    "                'knn_train_data_reg',  -- Table of training data\n",
+    "                'data',                -- Col name of training data\n",
+    "                'id',                  -- Col Name of id in train data\n",
+    "                'label',               -- Training labels\n",
+    "                'knn_test_data',       -- Table of test data\n",
+    "                'data',                -- Col name of test data\n",
+    "                'id',                  -- Col name of id in test data\n",
+    "                'knn_result_regression',  -- Output table\n",
+    "                 3,                    -- Number of nearest neighbors\n",
+    "                True,                  -- True to list nearest-neighbors by id\n",
+    "                'madlib.dist_norm2'    -- Distance function\n",
+    "                );\n",
+    "\n",
+    "SELECT * FROM knn_result_regression ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 6. List nearest neighbors only\n",
+    "(without doing classification or regression).  Note that the nearest neighbors are sorted from closest to furthest from the corresponding test point."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "        <th>k_nearest_neighbours</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[2, 1]</td>\n",
+       "        <td>[2, 1, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 6]</td>\n",
+       "        <td>[5, 4, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[15, 40]</td>\n",
+       "        <td>[7, 6, 5]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[12, 1]</td>\n",
+       "        <td>[4, 5, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[2, 90]</td>\n",
+       "        <td>[9, 6, 7]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[50, 45]</td>\n",
+       "        <td>[6, 7, 8]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [2, 1], [2, 1, 3]),\n",
+       " (2, [2, 6], [5, 4, 3]),\n",
+       " (3, [15, 40], [7, 6, 5]),\n",
+       " (4, [12, 1], [4, 5, 3]),\n",
+       " (5, [2, 90], [9, 6, 7]),\n",
+       " (6, [50, 45], [6, 7, 8])]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS knn_result_list_neighbors;\n",
+    "\n",
+    "SELECT * FROM madlib.knn(\n",
+    "                'knn_train_data_reg',  -- Table of training data\n",
+    "                'data',                -- Col name of training data\n",
+    "                'id',                  -- Col Name of id in train data\n",
+    "                NULL,                  -- NULL training labels means just list neighbors\n",
+    "                'knn_test_data',       -- Table of test data\n",
+    "                'data',                -- Col name of test data\n",
+    "                'id',                  -- Col name of id in test data\n",
+    "                'knn_result_list_neighbors', -- Output table\n",
+    "                3                      -- Number of nearest neighbors\n",
+    "                );\n",
+    "\n",
+    "SELECT * FROM knn_result_list_neighbors ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 7.  Weighted average\n",
+    "Run classification using weighted average"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "6 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>data</th>\n",
+       "        <th>prediction</th>\n",
+       "        <th>k_nearest_neighbours</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>[2, 1]</td>\n",
+       "        <td>1</td>\n",
+       "        <td>[2, 1, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>[2, 6]</td>\n",
+       "        <td>1</td>\n",
+       "        <td>[5, 4, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>[15, 40]</td>\n",
+       "        <td>0</td>\n",
+       "        <td>[7, 6, 5]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>[12, 1]</td>\n",
+       "        <td>1</td>\n",
+       "        <td>[4, 5, 3]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>[2, 90]</td>\n",
+       "        <td>0</td>\n",
+       "        <td>[9, 6, 7]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>[50, 45]</td>\n",
+       "        <td>0</td>\n",
+       "        <td>[6, 7, 8]</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, [2, 1], 1, [2, 1, 3]),\n",
+       " (2, [2, 6], 1, [5, 4, 3]),\n",
+       " (3, [15, 40], 0, [7, 6, 5]),\n",
+       " (4, [12, 1], 1, [4, 5, 3]),\n",
+       " (5, [2, 90], 0, [9, 6, 7]),\n",
+       " (6, [50, 45], 0, [6, 7, 8])]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS knn_result_classification;\n",
+    "\n",
+    "SELECT * FROM madlib.knn(\n",
+    "                'knn_train_data',      -- Table of training data\n",
+    "                'data',                -- Col name of training data\n",
+    "                'id',                  -- Col name of id in train data\n",
+    "                'label',               -- Training labels\n",
+    "                'knn_test_data',       -- Table of test data\n",
+    "                'data',                -- Col name of test data\n",
+    "                'id',                  -- Col name of id in test data\n",
+    "                'knn_result_classification',  -- Output table\n",
+    "                 3,                    -- Number of nearest neighbors\n",
+    "                 True,                 -- True to list nearest-neighbors by id\n",
+    "                 'madlib.squared_dist_norm2', -- Distance function\n",
+    "                 True                 -- For weighted average\n",
+    "                );\n",
+    "\n",
+    "SELECT * FROM knn_result_classification ORDER BY id;"
+   ]
+  }
+ ],
+ "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}


[13/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/Decision-trees-v1.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/Decision-trees-v1.ipynb b/community-artifacts/Decision-trees-v1.ipynb
new file mode 100644
index 0000000..e97b943
--- /dev/null
+++ b/community-artifacts/Decision-trees-v1.ipynb
@@ -0,0 +1,1590 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Decision trees\n",
+    "\n",
+    "A decision tree is a supervised learning method that can be used for classification and regression. It consists of a structure in which internal nodes represent tests on attributes, and the branches from nodes represent the result of those tests. Each leaf node is a class label and the paths from root to leaf nodes define the set of classification or regression rules."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The sql extension is already loaded. To reload it, use:\n",
+      "  %reload_ext sql\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext sql"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "u'Connected: fmcquillan@madlib'"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Greenplum Database 5.4.0 on GCP (demo machine)\n",
+    "#%sql postgresql://gpadmin@35.184.253.255:5432/madlib\n",
+    "        \n",
+    "# PostgreSQL local\n",
+    "%sql postgresql://fmcquillan@localhost:5432/madlib\n",
+    "\n",
+    "# Greenplum Database 4.3.10.0\n",
+    "#%sql postgresql://gpdbchina@10.194.10.68:61000/madlib"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%sql select madlib.version();\n",
+    "#%sql select version();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Decision tree classification examples"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 1. Load data\n",
+    "Data set related to whether to play golf or not."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "Done.\n",
+      "14 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>OUTLOOK</th>\n",
+       "        <th>temperature</th>\n",
+       "        <th>humidity</th>\n",
+       "        <th>Temp_Humidity</th>\n",
+       "        <th>clouds_airquality</th>\n",
+       "        <th>windy</th>\n",
+       "        <th>class</th>\n",
+       "        <th>observation_weight</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>85.0</td>\n",
+       "        <td>85.0</td>\n",
+       "        <td>[85.0, 85.0]</td>\n",
+       "        <td>[u'none', u'unhealthy']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>5.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>90.0</td>\n",
+       "        <td>[80.0, 90.0]</td>\n",
+       "        <td>[u'none', u'moderate']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>5.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>83.0</td>\n",
+       "        <td>78.0</td>\n",
+       "        <td>[83.0, 78.0]</td>\n",
+       "        <td>[u'low', u'moderate']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>96.0</td>\n",
+       "        <td>[70.0, 96.0]</td>\n",
+       "        <td>[u'low', u'moderate']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>68.0</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>[68.0, 80.0]</td>\n",
+       "        <td>[u'medium', u'good']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>65.0</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>[65.0, 70.0]</td>\n",
+       "        <td>[u'low', u'unhealthy']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>64.0</td>\n",
+       "        <td>65.0</td>\n",
+       "        <td>[64.0, 65.0]</td>\n",
+       "        <td>[u'medium', u'moderate']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>72.0</td>\n",
+       "        <td>95.0</td>\n",
+       "        <td>[72.0, 95.0]</td>\n",
+       "        <td>[u'high', u'unhealthy']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>5.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>69.0</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>[69.0, 70.0]</td>\n",
+       "        <td>[u'high', u'good']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>5.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>75.0</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>[75.0, 80.0]</td>\n",
+       "        <td>[u'medium', u'good']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>sunny</td>\n",
+       "        <td>75.0</td>\n",
+       "        <td>70.0</td>\n",
+       "        <td>[75.0, 70.0]</td>\n",
+       "        <td>[u'none', u'good']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>5.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>72.0</td>\n",
+       "        <td>90.0</td>\n",
+       "        <td>[72.0, 90.0]</td>\n",
+       "        <td>[u'medium', u'moderate']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>overcast</td>\n",
+       "        <td>81.0</td>\n",
+       "        <td>75.0</td>\n",
+       "        <td>[81.0, 75.0]</td>\n",
+       "        <td>[u'medium', u'moderate']</td>\n",
+       "        <td>False</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>1.5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>rain</td>\n",
+       "        <td>71.0</td>\n",
+       "        <td>80.0</td>\n",
+       "        <td>[71.0, 80.0]</td>\n",
+       "        <td>[u'low', u'unhealthy']</td>\n",
+       "        <td>True</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u'sunny', 85.0, 85.0, [85.0, 85.0], [u'none', u'unhealthy'], False, u\"Don't Play\", 5.0),\n",
+       " (2, u'sunny', 80.0, 90.0, [80.0, 90.0], [u'none', u'moderate'], True, u\"Don't Play\", 5.0),\n",
+       " (3, u'overcast', 83.0, 78.0, [83.0, 78.0], [u'low', u'moderate'], False, u'Play', 1.5),\n",
+       " (4, u'rain', 70.0, 96.0, [70.0, 96.0], [u'low', u'moderate'], False, u'Play', 1.0),\n",
+       " (5, u'rain', 68.0, 80.0, [68.0, 80.0], [u'medium', u'good'], False, u'Play', 1.0),\n",
+       " (6, u'rain', 65.0, 70.0, [65.0, 70.0], [u'low', u'unhealthy'], True, u\"Don't Play\", 1.0),\n",
+       " (7, u'overcast', 64.0, 65.0, [64.0, 65.0], [u'medium', u'moderate'], True, u'Play', 1.5),\n",
+       " (8, u'sunny', 72.0, 95.0, [72.0, 95.0], [u'high', u'unhealthy'], False, u\"Don't Play\", 5.0),\n",
+       " (9, u'sunny', 69.0, 70.0, [69.0, 70.0], [u'high', u'good'], False, u'Play', 5.0),\n",
+       " (10, u'rain', 75.0, 80.0, [75.0, 80.0], [u'medium', u'good'], False, u'Play', 1.0),\n",
+       " (11, u'sunny', 75.0, 70.0, [75.0, 70.0], [u'none', u'good'], True, u'Play', 5.0),\n",
+       " (12, u'overcast', 72.0, 90.0, [72.0, 90.0], [u'medium', u'moderate'], True, u'Play', 1.5),\n",
+       " (13, u'overcast', 81.0, 75.0, [81.0, 75.0], [u'medium', u'moderate'], False, u'Play', 1.5),\n",
+       " (14, u'rain', 71.0, 80.0, [71.0, 80.0], [u'low', u'unhealthy'], True, u\"Don't Play\", 1.0)]"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS dt_golf CASCADE;\n",
+    "\n",
+    "CREATE TABLE dt_golf (\n",
+    "    id integer NOT NULL,\n",
+    "    \"OUTLOOK\" text,\n",
+    "    temperature double precision,\n",
+    "    humidity double precision,\n",
+    "    \"Temp_Humidity\" double precision[],\n",
+    "    clouds_airquality text[],\n",
+    "    windy boolean,\n",
+    "    class text,\n",
+    "    observation_weight double precision\n",
+    ");\n",
+    "\n",
+    "INSERT INTO dt_golf VALUES\n",
+    "(1,'sunny', 85, 85, ARRAY[85, 85],ARRAY['none', 'unhealthy'], 'false','Don''t Play', 5.0),\n",
+    "(2, 'sunny', 80, 90, ARRAY[80, 90], ARRAY['none', 'moderate'], 'true', 'Don''t Play', 5.0),\n",
+    "(3, 'overcast', 83, 78, ARRAY[83, 78], ARRAY['low', 'moderate'], 'false', 'Play', 1.5),\n",
+    "(4, 'rain', 70, 96, ARRAY[70, 96], ARRAY['low', 'moderate'], 'false', 'Play', 1.0),\n",
+    "(5, 'rain', 68, 80, ARRAY[68, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),\n",
+    "(6, 'rain', 65, 70, ARRAY[65, 70], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0),\n",
+    "(7, 'overcast', 64, 65, ARRAY[64, 65], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),\n",
+    "(8, 'sunny', 72, 95, ARRAY[72, 95], ARRAY['high', 'unhealthy'], 'false', 'Don''t Play', 5.0),\n",
+    "(9, 'sunny', 69, 70, ARRAY[69, 70], ARRAY['high', 'good'], 'false', 'Play', 5.0),\n",
+    "(10, 'rain', 75, 80, ARRAY[75, 80], ARRAY['medium', 'good'], 'false', 'Play', 1.0),\n",
+    "(11, 'sunny', 75, 70, ARRAY[75, 70], ARRAY['none', 'good'], 'true', 'Play', 5.0),\n",
+    "(12, 'overcast', 72, 90, ARRAY[72, 90], ARRAY['medium', 'moderate'], 'true', 'Play', 1.5),\n",
+    "(13, 'overcast', 81, 75, ARRAY[81, 75], ARRAY['medium', 'moderate'], 'false', 'Play', 1.5),\n",
+    "(14, 'rain', 71, 80, ARRAY[71, 80], ARRAY['low', 'unhealthy'], 'true', 'Don''t Play', 1.0);\n",
+    "\n",
+    "SELECT * FROM dt_golf ORDER BY id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 2.  Train decision tree\n",
+    "Train tree then view the output table (excluding the tree which is in binary format):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>pruning_cp</th>\n",
+       "        <th>cat_levels_in_text</th>\n",
+       "        <th>cat_n_levels</th>\n",
+       "        <th>tree_depth</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>0</td>\n",
+       "        <td>[u'overcast', u'sunny', u'rain', u'False', u'True']</td>\n",
+       "        <td>[3, 2]</td>\n",
+       "        <td>5</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(0, [u'overcast', u'sunny', u'rain', u'False', u'True'], [3, 2], 5)]"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS train_output, train_output_summary;\n",
+    "\n",
+    "SELECT madlib.tree_train('dt_golf',         -- source table\n",
+    "                         'train_output',    -- output model table\n",
+    "                         'id',              -- id column\n",
+    "                         'class',           -- response\n",
+    "                         '\"OUTLOOK\", temperature, windy',   -- features\n",
+    "                         NULL::text,        -- exclude columns\n",
+    "                         'gini',            -- split criterion\n",
+    "                         NULL::text,        -- no grouping\n",
+    "                         NULL::text,        -- no weights, all observations treated equally\n",
+    "                         5,                 -- max depth\n",
+    "                         3,                 -- min split\n",
+    "                         1,                 -- min bucket\n",
+    "                         10                 -- number of bins per continuous variable\n",
+    "                         );\n",
+    "\n",
+    "SELECT pruning_cp, cat_levels_in_text, cat_n_levels, tree_depth FROM train_output;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Review the summary table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>method</th>\n",
+       "        <th>is_classification</th>\n",
+       "        <th>source_table</th>\n",
+       "        <th>model_table</th>\n",
+       "        <th>id_col_name</th>\n",
+       "        <th>dependent_varname</th>\n",
+       "        <th>independent_varnames</th>\n",
+       "        <th>cat_features</th>\n",
+       "        <th>con_features</th>\n",
+       "        <th>grouping_cols</th>\n",
+       "        <th>num_all_groups</th>\n",
+       "        <th>num_failed_groups</th>\n",
+       "        <th>total_rows_processed</th>\n",
+       "        <th>total_rows_skipped</th>\n",
+       "        <th>dependent_var_levels</th>\n",
+       "        <th>dependent_var_type</th>\n",
+       "        <th>input_cp</th>\n",
+       "        <th>independent_var_types</th>\n",
+       "        <th>k</th>\n",
+       "        <th>null_proxy</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>tree_train</td>\n",
+       "        <td>True</td>\n",
+       "        <td>dt_golf</td>\n",
+       "        <td>train_output</td>\n",
+       "        <td>id</td>\n",
+       "        <td>class</td>\n",
+       "        <td>\"OUTLOOK\", temperature, windy</td>\n",
+       "        <td>\"OUTLOOK\",windy</td>\n",
+       "        <td>temperature</td>\n",
+       "        <td>None</td>\n",
+       "        <td>1</td>\n",
+       "        <td>0</td>\n",
+       "        <td>14</td>\n",
+       "        <td>0</td>\n",
+       "        <td>\"Don't Play\",\"Play\"</td>\n",
+       "        <td>text</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>text, boolean, double precision</td>\n",
+       "        <td>None</td>\n",
+       "        <td>NULL</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'tree_train', True, u'dt_golf', u'train_output', u'id', u'class', u'\"OUTLOOK\", temperature, windy', u'\"OUTLOOK\",windy', u'temperature', None, 1, 0, 14, 0, u'\"Don\\'t Play\",\"Play\"', u'text', 0.0, u'text, boolean, double precision', None, u'NULL')]"
+      ]
+     },
+     "execution_count": 38,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT * FROM train_output_summary;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "scrolled": true
+   },
+   "source": [
+    "# 3. Predict\n",
+    "Predict output categories.  For the purpose of this example, we use the same data that was used for training:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>class</th>\n",
+       "        <th>estimated_class</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>Play</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>Don't Play</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (2, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (3, u'Play', u'Play'),\n",
+       " (4, u'Play', u'Play'),\n",
+       " (5, u'Play', u'Play'),\n",
+       " (6, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (7, u'Play', u'Play'),\n",
+       " (8, u\"Don't Play\", u\"Don't Play\"),\n",
+       " (9, u'Play', u'Play'),\n",
+       " (10, u'Play', u'Play'),\n",
+       " (11, u'Play', u'Play'),\n",
+       " (12, u'Play', u'Play'),\n",
+       " (13, u'Play', u'Play'),\n",
+       " (14, u\"Don't Play\", u\"Don't Play\")]"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS prediction_results;\n",
+    "\n",
+    "SELECT madlib.tree_predict('train_output',          -- tree model\n",
+    "                           'dt_golf',               -- new data table\n",
+    "                           'prediction_results',    -- output table\n",
+    "                           'response');             -- show response\n",
+    "\n",
+    "SELECT g.id, class, estimated_class FROM prediction_results p, \n",
+    "dt_golf g WHERE p.id = g.id ORDER BY g.id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To display the probabilities associated with each value of the dependent variable, set the 'type' parameter to 'prob':"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Done.\n",
+      "1 rows affected.\n",
+      "14 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>id</th>\n",
+       "        <th>class</th>\n",
+       "        <th>estimated_prob_Don't Play</th>\n",
+       "        <th>estimated_prob_Play</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>1</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>2</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>3</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>4</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>5</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>6</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>7</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>8</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>9</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>10</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>11</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>12</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>13</td>\n",
+       "        <td>Play</td>\n",
+       "        <td>0.0</td>\n",
+       "        <td>1.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>14</td>\n",
+       "        <td>Don't Play</td>\n",
+       "        <td>1.0</td>\n",
+       "        <td>0.0</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(1, u\"Don't Play\", 1.0, 0.0),\n",
+       " (2, u\"Don't Play\", 1.0, 0.0),\n",
+       " (3, u'Play', 0.0, 1.0),\n",
+       " (4, u'Play', 0.0, 1.0),\n",
+       " (5, u'Play', 0.0, 1.0),\n",
+       " (6, u\"Don't Play\", 1.0, 0.0),\n",
+       " (7, u'Play', 0.0, 1.0),\n",
+       " (8, u\"Don't Play\", 1.0, 0.0),\n",
+       " (9, u'Play', 0.0, 1.0),\n",
+       " (10, u'Play', 0.0, 1.0),\n",
+       " (11, u'Play', 0.0, 1.0),\n",
+       " (12, u'Play', 0.0, 1.0),\n",
+       " (13, u'Play', 0.0, 1.0),\n",
+       " (14, u\"Don't Play\", 1.0, 0.0)]"
+      ]
+     },
+     "execution_count": 40,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "DROP TABLE IF EXISTS prediction_results;\n",
+    "\n",
+    "SELECT madlib.tree_predict('train_output',          -- tree model\n",
+    "                           'dt_golf',               -- new data table\n",
+    "                           'prediction_results',    -- output table\n",
+    "                           'prob');                 -- show probability\n",
+    "\n",
+    "SELECT g.id, class, \"estimated_prob_Don't Play\",  \"estimated_prob_Play\" \n",
+    "FROM prediction_results p, dt_golf g WHERE p.id = g.id ORDER BY g.id;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 4. View tree in text format"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>tree_display</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>-------------------------------------<br>    - Each node represented by 'id' inside ().<br>    - Each internal nodes has the split condition at the end, while each<br>        leaf node has a * at the end.<br>    - For each internal node (i), its child nodes are indented by 1 level<br>        with ids (2i+1) for True node and (2i+2) for False node.<br>    - Number of (weighted) rows for each response variable inside [].'<br>        The response label order is given as ['\"Don\\'t Play\"', '\"Play\"'].<br>        For each leaf, the prediction is given after the '--&gt;'<br>        <br>-------------------------------------<br>(0)[5 9]  \"OUTLOOK\" in {overcast}<br>   (1)[0 4]  * --&gt; \"Play\"<br>   (2)[5 5]  temperature &lt;= 75<br>      (5)[3 5]  temperature &lt;= 65<br>         (11)[1 0]  * --&gt; \"Don't Play\"<br>         (12)[2 5]  temperature &lt;= 70<br>            (25)[0 3]  * --&gt; \"Play\"<br>            (26)[2 2]  temperature &lt;= 72<br>              
  (53)[2 0]  * --&gt; \"Don't Play\"<br>               (54)[0 2]  * --&gt; \"Play\"<br>      (6)[2 0]  * --&gt; \"Don't Play\"<br><br>-------------------------------------</td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'-------------------------------------\\n    - Each node represented by \\'id\\' inside ().\\n    - Each internal nodes has the split condition at the end, while each\\n        leaf node has a * at the end.\\n    - For each internal node (i), its child nodes are indented by 1 level\\n        with ids (2i+1) for True node and (2i+2) for False node.\\n    - Number of (weighted) rows for each response variable inside [].\\'\\n        The response label order is given as [\\'\"Don\\\\\\'t Play\"\\', \\'\"Play\"\\'].\\n        For each leaf, the prediction is given after the \\'-->\\'\\n        \\n-------------------------------------\\n(0)[5 9]  \"OUTLOOK\" in {overcast}\\n   (1)[0 4]  * --> \"Play\"\\n   (2)[5 5]  temperature <= 75\\n      (5)[3 5]  temperature <= 65\\n         (11)[1 0]  * --> \"Don\\'t Play\"\\n         (12)[2 5]  temperature <= 70\\n            (25)[0 3]  * --> \"Play\"\\n            (26)[2 2]  temperature <= 72\\n               (53)[2 0]  * --> \"Don\\'t
  Play\"\\n               (54)[0 2]  * --> \"Play\"\\n      (6)[2 0]  * --> \"Don\\'t Play\"\\n\\n-------------------------------------',)]"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.tree_display('train_output', FALSE);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Here are some more details on how to interpret the tree display above:\n",
+    "\n",
+    "* Node numbering starts at 0 for the root node and would be contiguous 1,2...n if the tree was completely full (no pruning). Since the tree has been pruned, the node numbering is not contiguous.\n",
+    "\n",
+    "* The order of values [x y] indicates the number of weighted rows that correspond to [\"Don't play\" \"Play\"] before the node test. For example, at (root) node 0, there are 5 rows for \"Don't play\" and 9 rows for \"Play\" in the raw data.\n",
+    "\n",
+    "* If we apply the test of \"OUTLOOK\" being overcast, then the True (yes) result is leaf node 1 which is \"Play\". There are 0 \"Don't play\" rows and 4 \"Play\" rows that correspond to this case (overcast). In other words, if it is overcast, you always play golf. If it is not overcast, you may or may not play golf, depending on the rest of the tree.\n",
+    "\n",
+    "* The remaining 5 \"Don't play\" rows and 5 \"Play rows\" are then tested at node 2 on temperature<=75. The False (no) result is leaf node 6 which is \"Don't Play\". The True (yes) result proceeds to leaf node 5 to test on temperature<=65. And so on down the tree."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 5. View tree in dot format"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>tree_display</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>digraph \"Classification tree for dt_golf\" {<br>\t subgraph \"cluster0\"{<br>\t label=\"\"<br>\"g0_0\" [label=\"\\\"OUTLOOK\\\" &lt;= overcast\", shape=ellipse];<br>\"g0_0\" -&gt; \"g0_1\"[label=\"yes\"];<br>\"g0_1\" [label=\"\\\"Play\\\"\",shape=box];<br>\"g0_0\" -&gt; \"g0_2\"[label=\"no\"];<br>\"g0_2\" [label=\"temperature &lt;= 75\", shape=ellipse];<br>\"g0_2\" -&gt; \"g0_5\"[label=\"yes\"];<br>\"g0_2\" -&gt; \"g0_6\"[label=\"no\"];<br>\"g0_6\" [label=\"\\\"Don't Play\\\"\",shape=box];<br>\"g0_5\" [label=\"temperature &lt;= 65\", shape=ellipse];<br>\"g0_5\" -&gt; \"g0_11\"[label=\"yes\"];<br>\"g0_11\" [label=\"\\\"Don't Play\\\"\",shape=box];<br>\"g0_5\" -&gt; \"g0_12\"[label=\"no\"];<br>\"g0_12\" [label=\"temperature &lt;= 70\", shape=ellipse];<br>\"g0_12\" -&gt; \"g0_25\"[label=\"yes\"];<br>\"g0_25\" [label=\"\\\"Play\\\"\",shape=box];<br>\"g0_12\" -&gt; \"g0_26\"[label=\"no\"];<br>\"g0_26\" [label=\"temperature &lt;= 72\", shape=ellipse];<br>\"g0_26\" -&g
 t; \"g0_53\"[label=\"yes\"];<br>\"g0_53\" [label=\"\\\"Don't Play\\\"\",shape=box];<br>\"g0_26\" -&gt; \"g0_54\"[label=\"no\"];<br>\"g0_54\" [label=\"\\\"Play\\\"\",shape=box];<br><br>\t } //--- end of subgraph------------<br>} //---end of digraph--------- </td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'digraph \"Classification tree for dt_golf\" {\\n\\t subgraph \"cluster0\"{\\n\\t label=\"\"\\n\"g0_0\" [label=\"\\\\\"OUTLOOK\\\\\" <= overcast\", shape=ellipse];\\n\"g0_0\" -> \"g0_1\"[label=\"yes\"];\\n\"g0_1\" [label=\"\\\\\"Play\\\\\"\",shape=box];\\n\"g0_0\" -> \"g0_2\"[label=\"no\"];\\n\"g0_2\" [label=\"temperature <= 75\", shape=ellipse];\\n\"g0_2\" -> \"g0_5\"[label=\"yes\"];\\n\"g0_2\" -> \"g0_6\"[label=\"no\"];\\n\"g0_6\" [label=\"\\\\\"Don\\'t Play\\\\\"\",shape=box];\\n\"g0_5\" [label=\"temperature <= 65\", shape=ellipse];\\n\"g0_5\" -> \"g0_11\"[label=\"yes\"];\\n\"g0_11\" [label=\"\\\\\"Don\\'t Play\\\\\"\",shape=box];\\n\"g0_5\" -> \"g0_12\"[label=\"no\"];\\n\"g0_12\" [label=\"temperature <= 70\", shape=ellipse];\\n\"g0_12\" -> \"g0_25\"[label=\"yes\"];\\n\"g0_25\" [label=\"\\\\\"Play\\\\\"\",shape=box];\\n\"g0_12\" -> \"g0_26\"[label=\"no\"];\\n\"g0_26\" [label=\"temperature <= 72\", shape=ellipse];\\n\"g0_26\" -> \"g0_53\"[label=\"yes\"];\\n\"g0_53\" [la
 bel=\"\\\\\"Don\\'t Play\\\\\"\",shape=box];\\n\"g0_26\" -> \"g0_54\"[label=\"no\"];\\n\"g0_54\" [label=\"\\\\\"Play\\\\\"\",shape=box];\\n\\n\\t } //--- end of subgraph------------\\n} //---end of digraph--------- ',)]"
+      ]
+     },
+     "execution_count": 42,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.tree_display('train_output', TRUE);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 6. View tree in dot format with additional information"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <tr>\n",
+       "        <th>tree_display</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "        <td>digraph \"Classification tree for dt_golf\" {<br>\t subgraph \"cluster0\"{<br>\t label=\"\"<br>\"g0_0\" [label=\"\\\"OUTLOOK\\\" &lt;= overcast\\n impurity = 0.459184\\n samples = 14\\n value = [5 9]\\n class = \\\"Play\\\"\", shape=ellipse];<br>\"g0_0\" -&gt; \"g0_1\"[label=\"yes\"];<br>\"g0_1\" [label=\"\\\"Play\\\"\\n impurity = 0\\n samples = 4\\n value = [0 4]\",shape=box];<br>\"g0_0\" -&gt; \"g0_2\"[label=\"no\"];<br>\"g0_2\" [label=\"temperature &lt;= 75\\n impurity = 0.5\\n samples = 10\\n value = [5 5]\\n class = \\\"Don't Play\\\"\", shape=ellipse];<br>\"g0_2\" -&gt; \"g0_5\"[label=\"yes\"];<br>\"g0_2\" -&gt; \"g0_6\"[label=\"no\"];<br>\"g0_6\" [label=\"\\\"Don't Play\\\"\\n impurity = 0\\n samples = 2\\n value = [2 0]\",shape=box];<br>\"g0_5\" [label=\"temperature &lt;= 65\\n impurity = 0.46875\\n samples = 8\\n value = [3 5]\\n class = \\\"Play\\\"\", shape=ellipse];<br>\"g0_5\" -&gt; \"g0_11\"[label=\"yes\"];<br>\"g0_11\" [label=\"\\\"Don't Play\\\"\
 \n impurity = 0\\n samples = 1\\n value = [1 0]\",shape=box];<br>\"g0_5\" -&gt; \"g0_12\"[label=\"no\"];<br>\"g0_12\" [label=\"temperature &lt;= 70\\n impurity = 0.408163\\n samples = 7\\n value = [2 5]\\n class = \\\"Play\\\"\", shape=ellipse];<br>\"g0_12\" -&gt; \"g0_25\"[label=\"yes\"];<br>\"g0_25\" [label=\"\\\"Play\\\"\\n impurity = 0\\n samples = 3\\n value = [0 3]\",shape=box];<br>\"g0_12\" -&gt; \"g0_26\"[label=\"no\"];<br>\"g0_26\" [label=\"temperature &lt;= 72\\n impurity = 0.5\\n samples = 4\\n value = [2 2]\\n class = \\\"Don't Play\\\"\", shape=ellipse];<br>\"g0_26\" -&gt; \"g0_53\"[label=\"yes\"];<br>\"g0_53\" [label=\"\\\"Don't Play\\\"\\n impurity = 0\\n samples = 2\\n value = [2 0]\",shape=box];<br>\"g0_26\" -&gt; \"g0_54\"[label=\"no\"];<br>\"g0_54\" [label=\"\\\"Play\\\"\\n impurity = 0\\n samples = 2\\n value = [0 2]\",shape=box];<br><br>\t } //--- end of subgraph------------<br>} //---end of digraph--------- </td>\n",
+       "    </tr>\n",
+       "</table>"
+      ],
+      "text/plain": [
+       "[(u'digraph \"Classification tree for dt_golf\" {\\n\\t subgraph \"cluster0\"{\\n\\t label=\"\"\\n\"g0_0\" [label=\"\\\\\"OUTLOOK\\\\\" <= overcast\\\\n impurity = 0.459184\\\\n samples = 14\\\\n value = [5 9]\\\\n class = \\\\\"Play\\\\\"\", shape=ellipse];\\n\"g0_0\" -> \"g0_1\"[label=\"yes\"];\\n\"g0_1\" [label=\"\\\\\"Play\\\\\"\\\\n impurity = 0\\\\n samples = 4\\\\n value = [0 4]\",shape=box];\\n\"g0_0\" -> \"g0_2\"[label=\"no\"];\\n\"g0_2\" [label=\"temperature <= 75\\\\n impurity = 0.5\\\\n samples = 10\\\\n value = [5 5]\\\\n class = \\\\\"Don\\'t Play\\\\\"\", shape=ellipse];\\n\"g0_2\" -> \"g0_5\"[label=\"yes\"];\\n\"g0_2\" -> \"g0_6\"[label=\"no\"];\\n\"g0_6\" [label=\"\\\\\"Don\\'t Play\\\\\"\\\\n impurity = 0\\\\n samples = 2\\\\n value = [2 0]\",shape=box];\\n\"g0_5\" [label=\"temperature <= 65\\\\n impurity = 0.46875\\\\n samples = 8\\\\n value = [3 5]\\\\n class = \\\\\"Play\\\\\"\", shape=ellipse];\\n\"g0_5\" -> \"g0_11\"[label=\"yes\"];\\n\"g0_11\" [label=
 \"\\\\\"Don\\'t Play\\\\\"\\\\n impurity = 0\\\\n samples = 1\\\\n value = [1 0]\",shape=box];\\n\"g0_5\" -> \"g0_12\"[label=\"no\"];\\n\"g0_12\" [label=\"temperature <= 70\\\\n impurity = 0.408163\\\\n samples = 7\\\\n value = [2 5]\\\\n class = \\\\\"Play\\\\\"\", shape=ellipse];\\n\"g0_12\" -> \"g0_25\"[label=\"yes\"];\\n\"g0_25\" [label=\"\\\\\"Play\\\\\"\\\\n impurity = 0\\\\n samples = 3\\\\n value = [0 3]\",shape=box];\\n\"g0_12\" -> \"g0_26\"[label=\"no\"];\\n\"g0_26\" [label=\"temperature <= 72\\\\n impurity = 0.5\\\\n samples = 4\\\\n value = [2 2]\\\\n class = \\\\\"Don\\'t Play\\\\\"\", shape=ellipse];\\n\"g0_26\" -> \"g0_53\"[label=\"yes\"];\\n\"g0_53\" [label=\"\\\\\"Don\\'t Play\\\\\"\\\\n impurity = 0\\\\n samples = 2\\\\n value = [2 0]\",shape=box];\\n\"g0_26\" -> \"g0_54\"[label=\"no\"];\\n\"g0_54\" [label=\"\\\\\"Play\\\\\"\\\\n impurity = 0\\\\n samples = 2\\\\n value = [0 2]\",shape=box];\\n\\n\\t } //--- end of subgraph------------\\n} //---end of digraph------
 --- ',)]"
+      ]
+     },
+     "execution_count": 43,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%%sql\n",
+    "SELECT madlib.tree_display('train_output', TRUE, TRUE);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "You may wish to visualize the tree using pygraphviz or another program that can handle dot format:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 45,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 rows affected.\n",
+      "True\n"
+     ]
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAccAAAW1CAYAAAB4WRtrAAAAAXNSR0IArs4c6QAAQABJREFUeAHs\nnQXcFFX3x69dIAYCNqgY2IqvrSAGdiFYmK/xWqj4iolgdwACdmBii/oqYLcYIBYmNiLyKlgY7/zP\n9/i/6+w+28/GzM45n8/s7szcuXPv787OuefcE7MFQfCYMzIEDAFDwBAwBAwBj8Azc8qvrf2efRsC\nhoAhYAgYAoaA+2F2A8EQMAQMAUPAEDAE0hEw5piOh+0ZAoaAIWAIGALOmKM9BIaAIWAIGAKGQAYC\nxhwzALFdQ8AQMAQMAUPAmKM9A4aAIWAIGAKGQAYCxhwzALFdQ8AQMAQMAUPAmKM9A4aAIWAIGAKG\nQAYCxhwzALFdQ8AQMAQMAUPAmKM9A4aAIWAIGAKGQAYCxhwzALFdQ8AQMAQMAUPAmKM9A4aAIWAI\nGAKGQAYCxhwzALFdQ8AQMAQMAUPAmKM9A4aAIWAIGAKGQAYCZOUom5544gn38ccfl329XWgIGAKG\ngCFgCFQDgW7durkOHTqUXXWzmOPw4cPdfffd5+aff/6yG2AXGgKGgCFgCBgClURgxowZbuTIkfVj\njnRm11131UZUsmNWlyFgCBgChoAhUC4Cs802W7mXpq6zNccUFPbDEDAEDAFDwBD4CwFjjvYkGAKG\ngCFgCBgCGQgYc8wAxHYNAUPAEDAEDAFjjvYMGAKGgCFgCBgCGQgYc8wAxHYNAUPAEDAEDAFjjvYM\nGAKGgCFgCBgCGQgYc8wAxHYNAUPAEDAEDAFjjvYMGAKGgCFgCBgCGQg0K0JORl22awg0LAK//PKL\nmz59uvv+++/dDz/80OSbYz/++KOjnN9+/vnn1G+O/f777+7PP//Muc0+++xujjnmyLrNOeecbt55\n53XzzTefbkSl8r/5Zr9Vq1a6LbTQQk2+F154YT3Ws
 ANkHTMEKoyAMccKA2rVxQcBGNXXX3/tvvji\nC92+/PJL980337hvv/3WTZ06NbWxP3PmzCYdg2EtuOCCzjOjFi1apDEuGJJnXHxT3jO/8G+OwRiD\nIEhjnH/88Ufa/q+//uoyGS7thfFyPMy0KZtJc889t1tsscVcmzZtdAv/Xnzxxd1SSy2V2iwkZCZ6\ntp80BIw5Jm3EE9Tf3377zX366afuo48+0o0g+ex7ZjhlyhRlPkACc4JptG3bNsU4lltuuTRG0rp1\n6xQjREqDGUaV6HtYykXqDTN9//v999/XSQCThFmzZqW6s8gii6QY5dJLL+3AYvnll099MykwMgQa\nGQFjjo08ugnoG9LWZ5995t555x337rvvuvfeey/FDD///HP3v//9T1FAiuPl3r59e7fhhhumXvxI\nS7z8kZzmmmuuhkEMKdFLiMV0ChynTZuWmjj4CQTfYPrII484JGuP56KLLqp4gumKK67oOnXq5FZZ\nZRX9Pc888xRzSytjCEQaAWOOkR4ea1wYAV7U48ePd2+++aYyQhgiL25UihBSHy/ojh07uq222ipN\n0kH1aZQbAQI1o2ZlW3vttbMWRLKcPHlySgr3Evltt92mqetQU6MiRspkHNhWW201t9Zaa7mVV15Z\n1cpZK7aDhkAEETDmGMFBSXqTeMnC9GCE4Q3JBlp22WVVUunSpYs74ogjUi9ipEOj6iGARLjSSivp\nlnkXGCcqWqR3v/3nP/9xl156qRoiYUzkGSXMkm3NNdeMtGo6s4+2nywEjDkma7wj2VvWu1566SX3\n8ssv6/bqq6+q5SeqQdR1vES33357faHyUjUpMHrDCONcffXVdQu3jrVPJPzwJOfuu+/W9VCkzFVX\nXdWtv/76qY3xZv3XyBCoNwLGHOs9Agm7P2tWqEWfeeYZ9+yzzyozZG0QtR5qOF6Ue+65p/vHP/6h\nkkYjrQMmbKi1u0xwvKQY7j/q
 2XHjxqUmRLfccota3bZs2dKtt956bqONNnKbbbaZfi+wwALhS+23\nIVATBIw51gTm5N4Ed4Q33njDPf3007o999xzKjUg/W2yySbu8MMPV4bIC9EsIJPznGAYxbbHHnto\np3lOJk6cqMwSLQLrmGeffbauU3bu3FkZ5eabb+423nhj89dMzmNS154ac6wr/I158w8//NCNHj1a\ntyeeeEJ9BDH0QBIYOHCgfq+xxhqmPmvM4S+rV/h9YgjExoQJwjoWDQMTq1GjRrkLL7xQDX5glltv\nvbXbZpttdGLFtUaGQKURmE1MuINyK+3Zs6deOnLkyHKrsOsaAAEc5MeOHavM8LHHHnOffPKJGlp0\n7dpVX2LdunVTlWkDdNW6UEcE8M186qmnUhMvXHjQNmyxxRb6nHXv3t116NChji20W0cFAZZp4Ete\nM1FGu+6yKVcZqNklTv3hHnzwQcf25JNPOtRi6667rtt77731RYUvoa0X2pNSSQTQPvCy8y+8SZMm\nKaMcM2aMO/HEE9VyGaOgnXbaSTdU9bwkjQyBchAw5lgOagm9BkOa++67Txni66+/rtIh6q2rr75a\nrUmJIGNkCNQKAe9WcvTRRzusYlG/MlnDuOecc87RwA477rij23nnnd2WW27pMA4yMgSKRcCYY7FI\nJbQcZvh33nmnbszUl1xySccLB2MJ1FkWDSWhD0bEug3jI/AD2+DBg92ECROUUcIsmbxhALbrrru6\nXr16OdT8tk4ZsQGMYHOMOUZwUOrdJAxq7rjjDmWIb731lltiiSVcjx493HXXXaem9aaqqvcI2f0L\nIYBvLNvpp5+u8XTvuusufZ5vuOEGh4Zjt912U0ZJIAnzqyyEZjLPm7dtMse9Sa9nzJjhrr32WnWv\nIPzakCFDHKbzqKrwQ7ziiivUjN4YYxPo7EDEESCi0gknnKB+lYS887+RIHEnOe2009wHH3wQ8V5Y\n82qNgDH
 HWiMeofvhkI+V6b777uvatWvnWLtBbeqDTMMgcb+wmXWEBs2a0iwEiPvar18/x5o5SwZ7\n7bWXQ5okeDp+t0wQmSgaGQLGHBP4DGASf8EFF2hgbtZomE0TA5MwbqwvbrvttupPlkBorMsJQoCI\nTPwPcAkhDizZWZggkqHlkEMO0eAVCYLDupqBgDHHDEAaefeFF15QKZGXwPnnn6/m7syeX3zxRXW8\ntpiljTz61rdcCBDjFR/J22+/XSeI/Deef/55t84662h6sxEjRqTlusxVjx1vLASMOTbWeDbpDSbu\nN954o8a3JPQW2S6uvPJKjT7COiKzZyNDwBD4CwEmiEiPTBrx311mmWXcwQcfrPk/TznlFGWehlUy\nEDDm2KDj/MMPP6jKiIghqIhIF0TWCzJe8Geff/75G7Tn1i1DoDIIYMnKMgNqVxgm1toY8PD/gXka\nNTYCxhwbbHyxLO3bt6+un5x77rkasYZwbjhGk+nCyBAwBEpDAGO1/v37q0sIRmosTzDZ3GGHHdSa\nu7TarHRcEDDmGJeRKtBOmCKJf1dYYQWNKXjGGWeoC8ZFF12kKqECl9tpQ8AQKIAACZvRwiA1ElyA\nmMJIl7g8oYI1aiwEjDnGfDy/+OKLFFN8+OGH1R8R61OkR0sBFfPBteZHEgF8fb3USNYQYggTLQpG\nSWB0o8ZAwJhjTMcRdwzWQZZffnn1SyRkFpFtSPdjMSRjOqjW7NghsOmmm6qvMIm7YZJkooFJsr5v\nFG8EjDnGbPx++eUXx1oiTPGee+5xgwYN0ugehx56qGXBiNlYWnMbBwECCJAdhGTeBNfYYIMNNDzd\nxx9/3DidTFhPjDnGZMD5w+GSQSSP8847z/373/9WpnjYYYcZU4zJGFozGx8B3KVQtd5///2OLDa4\nSh133HFu+vTpjd/5BuuhMccYDCgqGnLTYQxARgzWFAmovMACC8Sg9dZEQyB5CJAma+LE
 iarZIYg/\nhnLDhg1TqTJ5aMSzx8YcIzxuzDaRDEkc3KpVK03DM3ToUNemTZsIt9qaZggYAiBAWiz+vwQ1xzfy\nmGOOceuvv776GhtC0UfAmGMExygIAnf99dc7krmOGjXK3Xrrre6JJ55wnTp1imBrrUmGgCGQD4EW\nLVo4XKrGjx+v2h4YJG5X33//fb7L7FydEbB8jnUegMzbf/rppzrLxCScmebAgQNdy5YtM4tVdP/u\nu+92Cy+8sCaBJYN67969NWxW5k3IZDBu3Dj37rvvanDmNdZYo0nCY6xoyfSRSXvssUcqwSxxK4k6\n4omUQpjHT5482R/K+U1yZSTpTJN5rt9zzz1zXhc+UUw/wuX5zYsMXzZUZWRtwAl8o4020jXgcNnM\nvnGOEGSsRb322mvu/fffDxdXHznyZVI/wd9Rl5Oo94033lA1elph24k1Aquuuqo+t0x2SZv1wAMP\naCLm7bffPtb9atjGi5RSNskLL2AzqgwCkrE8EEYYiIQYyDpjZSotohYxRw/22Wef4KeffgrkQQ9u\nvvnmtKumTp0aSGqfQPI8BpI0NhAmFkiex0CYUbDyyisHYqGXKi+GQ4EwgUDC1mldkuEjEBeT1Hl+\nTJs2LTjrrLP0/Nlnn637PEfCJAJ5aQTCJAJRR+l5MYsPJAZsIEENAll3DST2ZfDnn38GEiw9WHTR\nRbUM7RBmm3aPbDul9CN8PX2WTA2BGFbouNAfCSUWtG3bNhB/UsXNl5ewfYFYEGu7wJIxFWaqp3//\n/fdAJjt6TiYggcS59ZcFjz/+uB4XFVwgxlaBpFZKnbMfjYfAd999p/85npEDDzwwkMlR43Wyjj0C\n15EjRzanBSNdc6425tgc9P6+VqLbBNtss00g2QECyTUX/Prrr3+frMEvmMvxxx+vd5LAAcHo0aNT\ndxXXEWWAMusNZA00ddz/gJlJvsc0Bsk5WWPRl/0111zji6Z9w0S
 ZCPAN7bTTToFEHkmVeeihh/T6\nY489NnUMXJg4eBJHbC0jqmd/KOd3uf2QXH96D5hcJomUHyyyyCI6duFzP//8s2IiEVUCGKKnH3/8\nMVhrrbUCyfrgD6W+RRrX+8BImRyIVJo6Zz+qj8BNN91U/ZtkuYNYtQYSni5YaqmlgsceeyxLCTtU\nDgKVYI625igo1pOECWjGDNSpxGwkXQ6qw1oSwZRR/UH8JqWVJ7Kkk8ljwIABqnr1x/03MSfJZCCz\nX4cPpicfncd/++P+GzUo9+Qbwk+sUIYQcOE+nry6uRir3XL6QfQhYc6qQv3nP//pb5v6pv0yqXDy\nUtMkuf7EfPPNpypkgrtjlAEJY3dYMGKYQbLdTAJ3VNv0id/hMcgsW8y+SPeaiqyYskkvg7qcjBv1\nIJ6Jt99+2xFMgLRZJ554ovvjjz/q0RS7ZwYCxhwzAKnVrkgU6qsoEpO6Z5Ato16Bwcnc4Zlj+Leo\nWd1ll12mlrK77bZbVmh4mXMOizwyGJRC5NHzhN9mMcRaTalUbj8IMk12ExiyZ+KZ9z7ggAP0kKiH\nM0+l9llP3G677ZxoWtxRRx2VOh7+QdxOP/4wRz8e4TLF/CZK0kEHHeREBV6xKC3EEGVsmSCRmYI4\nvp5EGtZnhKTBGJ289dZbeop1WaI2cZxnw9NXX32lxmZnnnmmE1WyP6zf//3vfx3W2BDJh7k2zCj4\nj7AuSxAMjFvCxMSMa1gzZ4L55Zdfhk+jIdP1vssvv1zbhcM+BGOEQdHHq666Sg3g0i6swY5oH9xt\nt92muJBObrPNNktbk69BE+wWWRAw5pgFlGofQkrkDzB8+HAn6hwnqru6+ixiWINlLIRxgE9nxYyW\n4AO8qEV1mhMWDGognJ6jSOX2w/cHZpWLyBpP2DDGFEaaSTASpAJZ01Wz/szz4f2ePXvqrqw3ql9r\n+Fyh30j3GFLJGrAaTGHljNQLMyJqS74NI6
 JchHEQxkT08cgjj1TDIaymZV1aL8ESE6n/1FNPVWaH\noRKExoAwhvQfRg3BiGCwa6+9tmoJdtllF62Tc/wPRLXo+vTp45iUnHzyye6kk05KpYbCUInYwf/6\n17/0GcXvF+d6CAbNPZDYuQaGSpvDmgw0B0wcwASDLvYhpHWef7QS/AeaK7FrpWV+MNFiAkB/RP2u\nwc3LrMouqwQC5ehz/TW25uiRKP5bYjAGiy22WLD66qsHkyZNKv7COpQUdxJdB8OoJh/5dbmtt946\nVQzjFXk+A5E4Uscyf8hLKfNQaj/bmmPq5P//wEiIe4ibS+aptP1y+yGTAq2/kHGUTA60nKjFU/cV\nxhCw5rjkkkvqOZGqUucq+UOsZ9UwinVfeekHjz76aFr1rF+CUb5NGF/aNX5n1qxZut4sqnN/SL/3\n3nvvgP7JpCN1fP/99w9kUpVmWCKqaDXeopBIZmpkxLqrJ78ujXEVhFEY7bz33nt1n3VYSMIkKo66\n8/8foq0IOnfurHuSjk3XeKdMmaL7IlVqPa+88orus67dunXrQJiz7vOBIZgnYdKBMEW/W/dv1scl\n4Ecg2go1XKt7g2LYAJ6j5hrk5BYHpHajyiKAhNitWzed1bK+SCi4KJNf0wvPwLO115/Ptb6Y7Zpa\nHiu3H+Ve5/sm7xRVE4pVq6rQ8V2tFKFW7NGjh0o9uMWgUuSZEsOutFsQnF4MhPJu2SReKhFGq+vN\nxAkNE/f47bffVMXqjyNVch/yhkKoKdm8VuH2229XSY41NcqyCTPTGMFIdBAuLRBqTggpGEJVmunu\ngPuRMFU9L5MkVeeCM2u7Ykmtx706F5U4UmGvXr3UfYKTmer5XGpzrajGH6jYxQBMJWhcuegf/TKq\nLQJz1vZ2ybwbqkleCqyXoH5ivSVKf8Zco4JfFoRhSj7ya1Copzz5zCDiduEPNfmuFQbl9oPrUMnm\n679IVw7fTvrrVdO+o
 xgKsaaMqo5MDQSHx3gp1/qtv66Yb9SHGAKh8mWtD5/LbIRBkDcKynY+3zGf\n7R7VaZhQE0P4u3pCzcnGuh2Mj5BpqJI9gSMqaNbUcpFX3ftvyvH8cC0TgTDx7Ph+UR7GiHEYjIV2\nQPzvPKGqZc0XVS4TVHwNucZTrZ5Ff79ivgkUwASBdrMMg18kGBrVBgGTHKuMM4Y3OKfzUmD2LP59\nsWCMwMI6jqgF1TgAY4lc5I0wwi/oNddcU4sTBzYbsS5UC6tcpKpy+wFDg1h3y0W8uJEQMabxL+vM\nsqyxEYia86KSbGKIklm+mH2kOgJcE7OT9TVRaackqfD1BG0gUH2+7cILLwxfkvqNoQjkJTR/AmmQ\nNUjW68IEUyRIAuWRZDFC8oTxlSwjOP4PpRDYwuRYQ81Fn3zyia5jMgZYnXppNVyeNTyCP8BwnpIA\nG+uss05aMPAoMkfaT55IUQ/rOiRrpV7KDvfNflcHAWOO1cFVa0XNhOTAi4yXBWqdOBEvc2bcqNBI\njZWNkB4wlGACwIzcEyGyIG/U4o/7b16gvow/Fv7mpdhcIuSerDsoUyqnH0h66667rqq4cqkekdqQ\nGjMlosz2k+cPaQXmgPTCC6+5hASH1SXqVMaKyQkqzzAzIyIPKsh8G6nPspEfH5hwmJgM0Q9e1mHi\n+ZbADGoogxYhbI3MZAmrYYzQwoQlr7dQDR/3v+kXLj4vvfSSy0z/BJ6o9AeIkQ/tIQExFJYY2Ue6\nHzFihLrJME48r19//bWTtU1O62Q1n4ZDC9Xxg/R05ItE0sX4Kdd/qo5NbMxby5+4bDKDnNzQEfFC\nZvRqfCMWaLkLxuCMhLFTh/1MYw95wQTyAlWjjWwBAkRyCDD2EHVQWi9FDRuImiggGkwukpeZGlUQ\nPSQX4Sgv/8omRiiUl5epGnHIiyR1eTn94HoctDHaCBuTUOm1116r/ROXhdQ9+OEjDWEkIxJ32jmM\n
 W2izSF2BSDJp55q7I1KiBlMQKUgDEwgTa26VAYY2svYaEPDAkzAYjZaEwU4myfKBBrNgjMNEAAeM\nXjDkEUlVAz5grMU7xEcQEjcXxYYISmHCIAfMMJDCWf+RRx7RdvGMQLvvvrueF6YXiIo7kHVW3RdX\nEMUfAxeeFWGaWp5vjOLuu+8+3RdpUsdRtBwazSlznLVQBD4wapIJqEaJEgvjCLQouk3geWmuQY5F\nyKnC+IqUEYjEoS+DcIiwKtyqZlViPUp0Gl5E4mem4d1kjS0Qk/iAl082EolTI+UQ5k3UWPpC48/N\nxosoG3ENzIZ78YBLNhK1LAyXlzVADeXGi5YyRBgR9VMgalC1YGSf41iKZlI5/YDBiZl9IOrRgIg9\nsmYcYJnLxMBbRPr7EAZOJCi9P20Q4xINDcd5GK24IqTOiQGT9iOTGfi6yv2WuKypcSq3Dn8dYyvq\n0oAISZJPVCcEYhyTM1yfqDh1IuGvD38TAUmM0FL9F7eP1ASBiYa37BWXlibhE4m0ROhAMAU3kUBT\nVWMlLKrUQNT0wa677qpt4//HBARLavpA+D8iQREKEMvhsAUuVqwioWr9hP6LMjHJwFJX1rObRKWK\ncrtr3Taek+Yyx9lotFRUFnm/LFRXRn8hgCoV1RYqINRRqEQaibBARJUqDKhoR3UeMfDAMRwjF9SQ\n9abm9ANVIKo+7w9a777kuj/q8EphjVqZ9VV8XvFHzEf8B/Jhg08oa3zUVQqhLsU4ivuHjXaog3PC\nBFP+wjxzqFp9/1njpgwWstnuS/+o01sol9KuWpelLxjp4DfKxpq2UToCPF/wJXAqk+4y5lgmctku\n42XEGiPZF2CMhcKhZavDjhkChoAhUAgBe9fkR6gSzNEMcvJjXPRZZqqYrovDuJPA3cYYi0bOChoC\nhkCpCCARy5qp5njdaqut8roblVq3lf8LAWOOFXoSJKWS+iHhi2RqjgqBatUYA
 oZATgQIl4eLi6zL\na+AE1NlGlUPAmGMFsES3TeBpTNJx1jUyBAwBQ6AWCBCVCgbJOm44Y00t7t3o9zDm2MwRxrGYgMEE\nNM6W1qiZ1dvlhoAhYAjkRYBA9fiqomYlyIhRZRCw8HHNwJHo+Tg+E6EEZ3Cj7AgQNo+wXkQniQtF\nvc04thNDlBirOIYT/zTTgrMQ1pKNXgMckAEjk3CUx7rYEyECSbcVtkLF6IyMHhwjyEE4fKC/zn9j\nJUrmEB91yB/nm/8R2hdyUNIP1tCIwJOPKN9eQuf5NF/5yibh3Oabb+6uuOIKHSO0V+wbNRMBMSQp\nm5IeBICsAkT7l7RAZWOYhAvxkcMnME4U5TZ/8803geTdDPD9w+ldcmEG+B5KlJeSICawgURdaXIN\n2TAIJCCvltSGj2CY8H2UvJEa8IDyYpmt/qnhMvyeOnVq0Ldv30DWxwKCMGQSfsASAi/AgR8nd8lr\nqM7+wvgzi6b2CXZAcIlhw4aljtmPvxBgTAmWkBl8Imn48OzKBKo53R5pQQDKhI+0OgyAxMwss4bk\nXEbEETEWiFWHs7WZF72EAaxrP2CAIilqJBzfEPF7Uyf4fv36+UMFvyXrg0a5ycYcSZck/nMaFYfI\nOBKfNi3QAxFrcLgPR0Uiag3/h8zILQRJkNi0ei4bcyQdGpPMMO0vUXkkNF74UOo348JEgHsZc0zB\nkvpBQAnJbqIBD1IHE/ijEszR1hwFxVIJdZS8QDR5rU+vU2odSSpPdgos6+JEmW0m9iZBw1H91ZNQ\nZZK4mOfPEzFMhaFoHFzilxYi4q1KFJ1ULNJwedSfxO4koDnO8mxkFUEt7on4qKg0w4HHvXqTAOdh\nIkOGTz0VPu5/E+OU4AJhIiA9auNshAqYzDZG2REgti2JoyU0n8bTzV7KjhaDgDHHYlDKKMOfkzWR\nXNkMMoonflckLpeZy5BoJqQ1wvwchoOlL5krfABoUR06
 URtqzsDw2hfRQUjVBIOgDHnvSN+EfynE\ny5bg0pdffnnqpStSkO5zjCwdnsg04oNeExheYnFqFnnOh9vMi5q15bFjx2oAaNIy8UKXcGq68TKC\n2UAwJwJicw4LwkoTRheQJMtOq1pCsem9RYJLO565Q9QYCfmnfc08x76E7lMsYYgYetAPETzSirJ2\nmHmMl7KoenVc0goX2CF9F0HFfR5I1h/pIwZumcRxcqASZckoNwJbbrmlTpYk4bg+E7lL2pm8CDRH\n4k7imiNBxAkoTfZxo/wIoO67QWJbErg6rL6TlEGq0pMHM7jkkksCyX6h62Zi2KExQVlLIys861ys\nfe244456I4JZE1eS6yQSkarXCBpN3ExiY0rmCS3HWgNliNfpSZLG6jFhrHpIXvqauZ7riOUqWSP0\nPMHAM9tMEHnaRJ2s76FyZE2HINgc6927t7+Nft98880ai5UA19mIWKCSZSHvhiozG6GG5J6ZQb/B\nlOPhDPfZricWrld9ysszbVwoT3B5+ojqlnU96pSXbcBYeiKmLuMCLmGiHOV9IHF/jrZyPJtaVSTV\ngPo4T3uIWcuSRSZ9+eWXwb777quHiV1MeVOrZqL09z7r0sSilRRefx9M0C+eD1tzrOGA87ITazrN\nKFHD28b+VjC0MHOkQ2INqi84AkF7EglQj7Gm5UmkdF3f8sYmks9OyzAx88QLliwLZM8QySggGwV/\njjBzfPDBB/WYZ45cCwOmnH8ZY1jiKbPNYhWqZa+77jpfRL8JqE7Qa+7rieDirLPlIgJnc9982znn\nnJP1cu4natQm51jboz4MZXIRDFTSO6VOZ2OOqZPygz6LSlTrFXVp6pQPng6mYRIVaiA5IMOH9Hc+\n5kgB1nIlBrHeR9JgBYxnmPjf7bXXXqnjxhzD6OT+zaSPteF82W9yXx3vM/wXmsscTa0qKBZLktFB\nVUCo54yKR4A1pEwiqgcUVg+KBKH
 HfKJkdlivQq0pFsF6jrVAiOS1noTx6hocQaklK4Q/XPBbDBe0\njF83Dq+NZWszhYnZGCZJ0aTqU/IlQqgtSUhbyK0BdXK+jXqzUYsWLbIdTqmjCQifjQiWTk7LUtbr\nGAfiBBPom0TdnogGRUB98l2iLicvok90HB47X77Qt0w41PVArF81FyV5JMPq78suu8wJc9R8hoXq\nsvN/IyCTGFV1SxaZvw/ar6IRMOZYNFTOyWzeiYrPwsOVgFkpRbMxJO/vVsjQhLUoSFwbir6l9wv0\n38VcmMkce/TooWtzoh7Wy1nzI/h8PsI4qdBGkt9sxFog67JMGMJElhFIUn2FD6d+s/6EcYxIe8rM\nYGgiUThJgaT7JIbORvgwMnmgrCcmIzBNGK1IyI61W6KzUBf+jqWQqLDVeIR1XJgkm6hQldlSj0/W\nzKSDNrPRB4h1XvZZZzZqigCGWqJW1YlNZqLopqXtSCYC2f+BmaVsX40xMPrwhh8GSeURyGQ84Tvk\nO0c5b/yCEQnWxNWizHbwAhI/Pn2ZY0kqamJ1xs53fwIMZDK3zPI4cUuC3szDqYD2OOVjUepJTPj1\nZy7myKRhzJgxvrh+k6YJ6VXWAtXIRXJipp33O0jUfvLhjyH5ExTAE1IkEubxxx/vDxX1jTGTrKM6\nPxlAepR1fWWSSLtoA5AiaaMnUfjpT1GbOYIVwFBl3dmftu8QAlhYy3q7GmAxATEqHgFjjkVihSWj\nGAtYRI4i8ap1MSQfSXCreSZ56UNIMpUizxS9NW24XqQmWcvTTRL2Oiw38xFWuYUkYaSzbMxRfAI1\nRBiRacLMEUkOVXMmE/PtYEkgk1DdivFQwYwOWIl61XNmHexzHsti3Ae82jtbuWzHcBvJZOjcS4xt\n1BoZhg2DDBMMnfvgNnL44YeHT9nvDASYvGHNjdob9SrPlVFxCJhatQickEokw7tDh29UOgJISTAs\n3DA8eTVgWI
 LCjB8S53JfLMVEMhndxIkTU2VQw0nUlJR7AgwCPzxcRRg7XA+Q6CBUcSS9hTyDyiZp\nZrbZSyYvvviiujHwUveEihQpCpcR1sYKERImzCzfhgSVjVhT5F6EK/QSFNgQfBoJKqwihvmVEu8X\nFSYuFN4thfvjsgJOuH9kI1xqePnCGH3y88xyqF2hzDHkmER0Uebqx4RjuHawZtuxY0d2jZqJAKn0\n8FPFxcioBASaY5OUFFcOCear1pCSYLQ5cCXuWpnhB4MGDQpEklJLRHlZB5iY48rgXSeIhiLrIeoe\ngSWmPLrqoiEvZS2HdTDH5MUbyMs7kPUl3Re1o0ZWEafwQCTGIGzhCtBYqmLKLgYsaulIODKsWeXl\nH0yaNEnPi5SXqlvU5To+udrMyW7duml5WVfT6DF6wf9/YGGJS0nY5SF8vpK/sd4kGs4OO+yg+IIB\n7iOZhKVpmzZtcrYJlw2RJFKXCbMORF2a6iP3EI1Jk+hG3B+8CB+HewVRWXIRkXPER1TrpC24xDCG\nnoTx6jiKn2Yghm6BMHN10+GZyEVcwzNhrhy5EGp6nKhHYvzW9ESDHuH5aK616mxgIxWVRX6miO6/\nkYkZLIY4rBUZ1RcBYUK6voRxFFIOgQCQEr3aM9w6JBUMOcTPUr9RMYUlq3DZYn7zV8FqFtVpJhEg\nANXuueeem3mqavuoeFlrzKUqQxKn/+FINoUag8TMGh+GONn6yfXi8qKGT507d04LRF6o7nznUZUi\n5SMZl9LefHXaub8RQOOBmp4sQknIN8v7AL4kAtzfIJT26y5bcywAGComTPNRTRhFCwFe4ERlyUWo\nknzYM2/1mqtsMcf5w+ViGETq8RarxdRViTIw+1yMkfpzuX3kuzcWw4XUmRJkPGUYlK+uUs4xltRr\nVB0ExH9UrapZXkgCc6wEisYcC6CIRCCZN5yo/AqUtNO1QAAJA8KSsd7Up08flbJ4PthwszA
 yBKKK\nAAaFvM9qqd2IKhbFtMsMcgqgxMNErMJsarsCl9rpCiNADFYc0CGSu+IjJ+vAFb5L8dWh0n3ggQcc\nbhXnn39+8RdaSUOgDgiQJxMjMG8gVYcmxOqWxhzzDBcvXqzxYI5G9UeAiDYExubPzZ981113LZgU\nt5qtxhqWAOoSj9RJSLhq3srqNgSajQBuMUzyJYxgs+tKQgXGHPOMMoYHqPHITm5UfwTmnntuJxao\naVu9JfpsUX3qj5S1wBBoigD/HdycmFgaFUbAmGMejPCPI3JHIQOFPFXYKUMghQCWo/jLEsqtUGqp\n1EV1/oHaOJt/Ymaz8BXNzOWYWcb2648AAReY9BsVRsCYYx6MeIgIR4bEYmQINBcBAhdgXk7geh9I\nvbl1Vut6wrLhqoGTPqrjQkSwgSuuuKJQMTtfZwSwCGbSb1QYAWOOeTASZ3EzL8+Dj50qDQEsngnj\nFXXCz5FsKblC0WW2n9BxRNIxij4CxMnFNS0ckSj6ra5PC4055sGdaP8+rVGeYnbKECgaAR9gu95r\npfkavMwyyzi29hJcoRARcg5fYInWU6ionY8AArzPMDTMFjIxAs2LVBPMzzHPcPAA4b9mFC8EJHmu\nZmvgm7yDSGyoxyFUhFjrESkEJ/revXunOfZznnU20k5xPWuDvFCIkER53DdImUSkHaJveCtV4say\nnkhAbNaoqYM0QVjUkp+wEKFmxeqVINsbb7yxk1B1aZfk61NawRrusIZKzFViunoXmxre3m5VBgL+\nfca7TRKEl1FDci4x5phnrDFEIKi0UXwQIDjAdtttpwyQsYP5QTBHwqmhVrrllls0WDYGJDAi1pYp\nK/FXNWkyuQuJdoNandRMEoNU0yp1795d6yVsG4G2YYAwShgaAQHILQhT5fyyyy6rAbWpB5eP3Xff\nPSeIBCwnmTCB7Ql1xzrffvvt56688kq9Jl+fMiuFyRbK3YfUSr+bS2
 R5IIQfbTaKBwL+fVbMOnI8\nelS9VhpzzIMtM+NKhB3Lcws7VWEEYHyETfOh04jBSpYHCGaGqhyjBKRApMHTTz/dvfXWW5oImByK\nMChyEqJW9LkJKYuTP7nxqB9CIr344ot17YY8hhdeeKEyR1w7fKzh/v3769odDIQ0TF6lqhX8/wcM\nG2MWsnwgdRLa67HHHnNDhw5Vxo4bUb4+heviN0zbtzvznN/nmW5u8AQmEvQnW1otfx/7jh4C/n3G\nu80oPwK25pgHHx4ke4jyABTBU0iGvLglW4QGxyb26m677aYtJZ0UjJB4pGgFKAeFs9wjKUIYpHha\naaWV9KdkEvGHVAIlSLe3OvV5DMmp6In7SDYElSw/+eQTfzjtG4mRWTzppTDWYSO4OswXwwkoX5/S\nKpOdo48+Wn1z8c/Ntfl8l5nXFruPJDtkyBB36qmnFnuJlYsIAv59Zhb4hQfEJMc8GKGC8LE88xSz\nUxFCgCggJ5xwgqpFUXniXkAyYoh1QhgWEh0Byddbbz09XshyL5ujv5+B+5yQWlGWD2/x+e2332b1\nl8XKk1yRXoWapQqXr0+Z5ZHmskmomeWas4+fJtiBrycmGEw4UC3jbE6bjaKHgH+fefVq9FoYnRYZ\nc8wzFmR0JyWQUXwQgAGSCJggyyQFJmkwxiySm9AhvXXp0kUZEdaVWFoWQ/ksS/Odo27SMEHeIEh3\nQh+obFnbzKfCz9enUFX6k6TPxAPOR9wTSbVcgtGPGTMm7XKkUV68xxxzjFt11VWNOaahE50db6XK\nu80oPwKmVs2DDzN6sswbxQcBLCeRBAmyjIsBVp/EY4UGDBigTMi7HRSSGCvRa3I8SjJmzVOYrT5U\ntUifw4cPTzuN6pJ1Ryhfn9Iukh0Y/t133513I2h7c+ihhx5SVTGGSH5jrRbrR/ZZMzWKJgK8z1Cp\nLrLIItFsYIRaZZJjnsHwlo15itipiCGAeg+pZ
 pttttFEvFh+XnvttdpKmBAGObhn/OMf/0gxH9YN\nYUaoA2fOnKllWU/0hNEMNH36dF0L5LdXp2aGViMKjideREhyYfWjX+/zdfbq1UvdIVAFUxeMmzpg\ncDBFKF+f/L38N3lHK5V71GdvyOyjv5d9xw8BLLNR9aONMMqPgDHHPPjAHDGL50WZbd0pz6V2qk4I\nME5Yh2LYguoIxkJqK6hv377u1VdfVQMd3D1Yj3zhhRfUErVNmzYOwxtf9tJLL1XfPdSiw4YN0+sH\nDhyoVqkwOKLCQFjDnn322Sl3Bpgv1qfUN3r0aDdixIiUz+Irr7ziqAO66aab9CW17bbbqqQFE0fV\nybbaaqu5m2++OVVnvj5pZRX+wJcTQyHWD6GTTjpJDZyQxo3ijQDMkfeaUWEEZguEChfLXqJnz556\nwpuuZy8V36PM4NdYYw2dyfPCMoo+AjjjY5DCOiNMxVuf+pajSsU61FuX8viz3tdc6z0sTFHDwyxh\nzjAYIswUWpP07eIbRkx53EjCVKhP4bL22xDIhwBuTASvwEe1kYn/EXyJvpZJd5nkmAc5Zli8RF98\n8UWdzecpaqcigoC31ERyy0aokzxj5Dx/ouYyxsz7zD///A4XklKJwAHZqFCfsl1jxwyBTARYFmBN\nmjVwo8IImOI5D0aY62+22WZNLPPyXGKnEoqAN5Fn7dLIEIgiAoQ3ZDKIxbZRYQSMORbAaMstt9SY\nmbWwbCzQFDsdUQQmT56cii2KJSjrls2NQBPRrlqzYowAhmr4p2YuNcS4S1VtujHHAvDCHFFHYMhh\nZAhkQ4DA5LiLYN1JlnWCjfsgAdnK2zFDoB4IYCDG+8yoOARszbEAThjkYMVIfEvM/42SgwB5DUn6\nC8Pz7iDZes+aZaXXLbPdJ98xpFfWxj1hrh9eW6IfM2bM8Kfd559/rkESWB/NRTiME48WHPgfEFjB\nx6zlGlxUvEsL+z169LBJ
 AUBEkJ599lk1+GqGgUoEe1XdJpnkWAS++++/v7vttttMVVYEVo1SBD/E\n559/Xt00SCUVdaKtBEZnTalr165poerI/E6Qdc77jQAJ+Rjj+PHjdW2qU6dO6l5CnFcyeeCq4gnm\ny4QRv1HqtUwPHpnofd94440a1J5JjlFxCBhzLAIn0h6hMhs1alQRpa1IIyCAhESg8mJyMUapv/hN\ntmvXLpVnkrbhs0mkHlxF2JAEvT9ntrazvn7AAQdo6i+ygsBE8b8kHi0TRU9LLrmkBkUwVZ1HJJrf\nSPe4NYTHLpotjVarjDkWMR6kJEKllC84dBHVWJEYIoAbBdJYXAn/S9JhrbDCCuo/iQ/l0ksvrYwu\nV59I8TVhwgSVNMJlkBIx6kDNbBQfBAhEga9spSInxafnzWuprTkWiR9RQjCBJqKK5bArErQ6FEMd\nSvQarEXxaUSSIoAD621EpcHlghRWHTt21Nbh9wUzgIGgNsSYJhehUiRqDEEDiBZDgG0SFcNIIOoN\nO/ATlg6VLPFGqZs4r7UmDIVefvllZYj4XpKRBAkiH8MnEDqUGR/EZzF57rnn0tYza90nu1/xCPCs\nkov04IMPdq1bty7+QivpjDkW+RCQCJcX3FlnneX+85//FHmVFas1AqhDN9lkE7fhhhuqZd6///1v\nbcKCCy6oRjO8+D1jvPzyy9XgxKscWatD0iKIdjYiAg7BBYgMhYEOzJFrMHY444wzHOtznjnCNAnB\nRl0tW7Z0hIfbb7/9cmofYKSEKsxHMDSewVIIP11ekBjrwCRJ33Xrrbcq0yY7Rzby6Yyw0Ea17Ikc\nkxBqWaN4IIDUyLPVnCws8ehp5VtpzLEETE877TSVRAgm7WfRJVxuRWuEAGNDsuO77rrLEQfV+3Xx\nsmcMPaEmJ0A5TKe9hHojUTEZJ3IxR66DAWbS2muvnXYI6ZX4qkijROPhPJkqyLLB+jXreJl05513\nuuO
 PPz7zcNo+7iGl+k/SPzYICXfPPffUlFak9UIbko1gwFjfkgwa6dFLmT5oOlgZRR8BVKnnnXee\n/hf8pC36rY5OC23NsYSx6N69u9t0001dnz59mqicSqjGitYAAQKPo0LFBQci2wZbOETbU089pdao\nnH/nnXfUvYFA5c0lJEYsN5mt0w42JFIkL6w+s9HRRx+t7aXNuTbPnLJdX8wx0mOxXsgaOm3MRaxJ\nEkydskiaWKNecsklqUAH1GMUfQQGDRqkKn1U6UalI2CSY4mYDRkyxK2zzjoO02ifYb7EKqx4DRBA\nemS76qqrlDndcccdTQwSsLbEMRppEbU5zKsSxiZvv/22BiEvxYALwx8fQ7Wa8GB5uvPOO7vrr78+\n721QR2OAAz6sMSJxsjbL5CFTUs5bkZ2sCwKsjw8YMECTfJukX94QGHMsETf8hFC7kVke4w1yABpF\nEwEkNlwSWG9jnRg1a5hOP/10VR2i8mSdrblJgH3drOWxtslaX7GRclDVjx071leR9Zt6K7F2REB9\nggQUIiYMbNAnn3yiTv+oY1lDNYo2AuQHJWUb7ymj8hAw5lgGbhjl8KI97rjj8vqLlVG1XVJBBEgk\nTA5HxgmVeNgAhZc9qkMkS2+AUkz8XC/d5UsAjNoR37Lhw4c71KWeCEpOMIkjjjjCH0p9YzVLguN8\nxL0rwRzvu+8+lR7z3St8jnVOsCRSVLa2h8va7/ojgBqc5+z+++9PPdv1b1UMWyAL7mWThCIK2JJI\nooojD2YgzrVJ7H5s+izMJBCmGEi4tLQ2i7GMjp9Ymwaylhc888wzgVijBossskgga5OBuH5oefFv\nDRZeeOFAGKfu8y1qqkAsYgMJ2RZI8thAjGy0LjGZD/78889AGGcg63aBGLUEF154YSDrmYEY3Oh/\nxdeb1pgK7MjaqrZBGHCqNpFeA1kfD15//fXUsbfeeiuQwAaBMLzUsXw/xLgoECvb
 QCx0A8lRmbWo\nLDHovcHRqL4IMEZiUR2Iu059G1Lnu1fg3TwSw5KyKcnMEdBEvaovTjFtLxtDu7C6CIiEGIgbRdab\nHHTQQYFIY4E4yAci5QUiuSlD22KLLYIvv/wyuOyyywKRKvXFL0YNKeYgbhyBqNMDcRsJxNUhEKvO\nQIxcAklyHMCQIBiiqC71Wv6o4muZxqSyNqgZB7MxR1k/DcRSV9vAJEBUbMEFF1wQiMFPwTtNmzYt\nuO666wLx6Q3EtzNveWOOeeGp6Unx6w2WW2651OSupjeP0M2MOdZ5MHjJyPpNIL5kgawv1bk1dvtc\nCIiKM9epJi8RpL5iSKxRU9cihSExZiOkSwnZlu1URY9lY47cgP6IyjaQQAQl3U9Ur8FHH31U1DXG\nHIuCqeqFJEygakkkUEnV7xX1G1SCOZorh6BYLrFWRcxCUVu5Y445ptxq7LoqI5AvwHamcck888xT\nVGuIM+qvxeiGaDzZCNeRWvqYzZo1K60Z9IegB1jmlkIELRAJpKhLZGJQVDkrVD0ECOuHhTF+jQTA\nMGo+AmaQ00wMV199dfWlw3KViClYSBoZArVGAAZNFCCCD/By7Ny5s4a4q2Y7rr76ag3Ij3Ea9/bB\nAqp5T6u7KQJYRhO1icwoPiJU01J2pFQEZkM8LvUiX54BgZCekk7nnHOO+hVhKUbcTSNDwBAwBKqN\nANmCyBwjhmTqllSs5qPa7ap3/UzU4EvNyF95V3ZdUL17FsP7n3rqqeoovfvuu7tXXnklhj2wJhsC\nhkCcECBM4XbbbachBXHPMcZY2dEz5lhBPMmRRyBqfOp8poYKVm9VGQKGgCGgCBCekATWYvClwSMI\nim9UWQRszbGCeOKkjSi//fbba/5HAjcTjcSovggQqUb8GDVMHCpvZttxIwIEiL+lpr1ChU8Acwx9\n6Je4naR1B2Mh4qcSBccHXacA2TQefvhhDZFHVpFKU642Vvo
 +Sa+PoAxoqAhszzuGXJ1GlUfAJMcK\nY4pq44EHHtA4neIv58TpusJ3sOpKRWDixIk6aSFFFel74kgEkUYzQVByMovwUoTIVTl+/Hg1xiAa\nEBIFL03KLLHEEu6oo45yWLCignv++ec1KhA5JqtBudpYjXsltU7Gl7yhjCXjyPgbVQcBY45VwJU0\nRQRsXmWVVRz59IjtaVQ/BAgUH3crYlwx2rZt63BLwTK0Xbt2CiiGGD4APi4bEthAs2cQL5aUVAQ/\nP/TQQx15LsnNiPFGtShXG6t1v6TVS1YWidikeTnJQWpp86r7BBhzrBK+vIywXIU5brnllprPr0q3\nsmqLQMDHRI2ruwGZFby/JL9JK+UJZpmNmBDgf4mqH1UcBA7VwiBfG7O1z44Vj4CEhXNdunTRAPCo\n0tddd93iL7aSZSFga45lwVbcRahYWYc5+OCDdfEcvzCyRBhVBwGSGfPiICg464okLy5EBPwmFROq\nSJL84q/qCS8n1JeoLQlazvpx2E1n6tSpuobHN+mukFCLdZz39yj2u0OHDm6xxRbT4vz2jDLf9aw9\nwhyLCaieC4fHH39c81xyH55nVHp8Y5FNDkzWQUmBBZXTRr3QPvIi8N5777kddthBJzWoUwksYVR9\nBIw5VhljZuoSXksfaFRerH9JMOq0DBFVbkIiqif9FFiTtYIXPU7wrLdJfNSc/WcNkvVhVFQS4k0t\njUlKTEoyiHU7XvgSM9XBeJHEPHMkwwYMmITJRErCQAbKxRxRrReKJMNLLywRaoX//0GqNC8hYvCV\nL+qPvw7VKtngWfuWIOj+cJPvfDgQUIDk3uSolHByKXcBcj1KcGvFz1dYThv9tfadHQFSrZFLE2wl\nxm1qgpS9tB2tKALNiZGX9MDjpWIn2dc1kLW4egTh7Aml1mPl0xGQPIyBrHelHRQJJxAGmTomL3cN\nwE3QcE8EHBeG53c1QLkwPN0n+0br1q
 2DJ598MnVeUlylfg8ePDiQXIep/Y8//jiQNEGp/cwfwtj0\n/vLnzfktVqiZlxW1T5B06qW/BFoXhh1I3sVAGGgg6bMCSXybqof/LEHSw5QPB8o9+OCDWv8111yT\nukwMm4IePXqk9u1H5RG4+OKLA5H8A1lTDsSoqvI3aOAa+T/IckJzejjSJMeKTjXyV8YMEPUbaigM\nIwi7Rfg5o+YhgGsD0lSYUGcXktSQ+jCeglARSlorJymldJ91OfIXkscQdThjRgJZT6hYUbnuu+++\nKp0iYWIdmouQSAtRsYmRc9WDSwexNakHVw7cNlinKkT5cOBaVHoYl0lga10iABvyBUoqq0JV2/ky\nEMCy+PDDD3cymVYtE1bIRrVHwAxyaow5Fmao6LA2hEHy4jUqHwEYICo/jEHCxAvcG+GEj4d/Y13J\n2hlB4yUvo05cwutzQ4YMUVUmQbgxqkKV6glVJcwSJsGEBzcL1uJyEarXQluh9uaq2x/HWpXkzbQb\nS9ViGCPXFsIBLInZCUYYmUFjx451kh5Jf9tH5RAgeAhLAgQSx1XDGGPlsC21JpMcS0WsAuWRMDB0\nGDhwoK5v8VtUVqk1pQrcIjFViN5EDU5GjRrlTj755JL6zTol0h9rczAuUc+mXY9BDxlXYDQwHQxu\nWDPGfQJDF1Fdqmk9a5usJ2OYIzkT0+rwO0hdmRkz/Dn/LWpaJ/kT/W7NvgvhQEP22WcfR7lLLrlE\nJyIE2W8uM69ZB2Nyo6FDhyoz3GCDDZyo851FvanvwJnkWCf8sX4888wz1R+SF/Taa6+tlpZ1ak5s\nb8sLGpUfFqey7pfWj1tvvVWd4tMO/v+OrM2pQzxqURgjFJYaYWQjRozQtFT4CqKilLU7NYqgrCQC\n1vIY6LzxxhsauUbWITmVle6//361XEbdm2vDKrEcYoJQLhXCwdeLQQ+GSby0kSK9b6U/b9/lI8Ck\nCivpo48+Wg3Km
 CwbYywfz0pdacyxUkiWWU+3bt00DivWaKjBsAwkCopR8QicccYZDgZBXNubb77Z\nYeGHywzHPOPDgRpiPSf8fccdd+g647PPPquTE7IcUIa1x+HDh2sdlMf5Wgx0dGP/gw8+UNUXv7Ec\nRfXK+VyEi8lrr72Wd0P6LIe8uneyxNksROAgyZ9T/fJ45MJh5syZqSoPO+wwDUc3bdo0Tc+WOmE/\nykYA3Dt16qSuREw80CahlTCKAALyAimbzFq1bOiyXiiSSiB+Y4GsYQXyMs1axg5mRwBLyoUWWkit\nKrEMFcaWKvjyyy8H22yzjZ4TCT2QdTM9J8woEMkzwFqT8iLRBSIhBbKeGGABKrP3QIyoAjGcUuvP\n/v37p+rktxjlBFitYqUq65aBqGBT52v1Q9alApFetW/yOgkkGk4g66hNbi9hxwJxa1FracrRfnEs\n13L5cPjuu+/S6hJDkUAk6bRjtlM6AmCPRbWs5wZHHHFEIJOU0iuxK3IiwDPeXGtVZpBlkzHHsqHL\neSEm8mIdqH8amakHmS+nnBfaiUCMcwLxV9TvYuEQCTGtqAQQSO1LwHI1oafOTOIcxEuuEdxy8uEQ\n7juMWKTr8CH7XQICuAgxkVt00UUD8WsNRIVawtVWtFgEKsEcTX4XFKNErDVgXIIVpPiXqTsB61vy\nUESpmZFsC+ooIseUopZq2bJlWl/CFqesZ7LWli0ajTdGadOmTVrmi7TKYrSTDwffDSwpCXIgEro/\nZN8lIIBxF0EVCDKB2p+kBFg9G0UTAWOO0RwXjYqBgQZWgqz1YMWI4YeRIVBLBFgnZV0cYxwi4mC5\na1QaAqwJE10JNy4mW/yPxcFfg8GXVpOVriUCxhxriXaJ9yJcGKG9eEEhDeH/hJXgF198UWJNVtwQ\nKA8BLHjHjRunIRBPPfVUdeMor6bkXUWwd/6/+MFioXz99der65ClmYrHs2DMMQbjJCHANH8bET
 Ow\neiSJLT593gIzBl2wJsYUAaSd6dOn6yY2BjHtRW2bzRIIVqhEUTrllFM02g3WzUjeBFQwigcCxhzj\nMU7ayp49e2qUEsKlEVmHDODMTMlCYWQIVAsB1ldLWcetVjviUC+RgwjKznII6eoIgs//1QeNj0Mf\nrI1/IWDMMWZPAmsWxx13nGZIQMWKqgsjCZgkWcKNDAFDoPYIEO6NlGcEhSC1GMY3ZOMhxq1RPBEw\n5hjPcVOLQVJfEeFk7733TjFJUjQZk4zpoFqzY4fA6NGj1ViOIBFIh0RqIv4sSyFG8UbAmGO8x8/h\nSoDlG6HTPJNsL0G4Jb2SEx/JmPfOmm8IRA8Bgt2Lg7mqTyW4hDJF8nUSmYlkAkaNgYAxx8YYR9e2\nbVsNCo0kecghh2gaJfzzMCH/8MMPG6SX1g1DoH4IEGpv0KBButbPRJTk1BJ9SbNnECzcqLEQMObY\nWOOpTBKp8bPPPnPnn3++zmbJS7j77rurGXmDdde6YwhUHQGJkKTW4Uw2sRIndyiGNuRjxfjGqDER\nMObYmOOqSXyJ8o8JOS4gEpbOdenSRUj7jcAAAEAASURBVANGk+/P3EAadOCtWxVBAP9O1KQ77rij\nGrwR0B5DOCad/H8wgjNqbASMOTb2+DpSY+ECwpoIFnRY1JFzkAS3EqRajzU4BNY9Q6BoBEgfdcEF\nF6jqdLvtttMMJnfeeadDeiSfpcRELbouKxhvBIw5xnv8Smo9OSPxj0SKPPfccx1pmtZdd121rMPK\nlReDkSGQNASIZHPfffe5nXfeWV0vzjvvPJUY3333XffEE0+4Hj16WGLnpD0U0l9jjgkc9FatWjlJ\nsaQBBZ577jldNxkwYIBKkzvttJO75557HC8MI0OgkREgLCP/gyWWWEIZIHlUb7jhBk1qfcUVV2iE\nm0buv/UtPwLGHPPj0/BnUbNKCh03ZcoUdVrGRxI1bLt27RzJdx977DH3x
 x9/NDwO1sFkIPDOO+84\nkmOvssoqGqtY8mHqWiKJonHkJ7KNT5CdDESsl7kQmDPXCTueLAR4IfBiYCOwOessbMykWWeRxKzK\nNLt27arrmMlCx3obZwQmTZqkzzK+iW+//bZKisSJ5dk2F4w4j2x1227Msbr4xrJ2Ql717dtXN/wm\neanAKJEwW7durabsqF+JCtKiRYtY9tEa3bgIYGn6yiuvaD5UcqLCEPEDZu1w6NChbtNNN7UA4I07\n/BXrmTHHikHZmBV16NBBrVuxcMUtBMMFXjjMvOeaay5N1gqj3GGHHSyOZGM+ArHoFeuFBP3m2Xzo\noYfcN99843h2eTYHDx6sQcCx3DYyBIpFYDZJr1J2innWpiAkC6NkIfDtt9/qS4iXEWs1P/30kyNP\nHdIkGxkJbO0mWc9ELXvLa2vChAmO2KZsGJZhREaKLRgilqeWN7GWIxKte5EaDL7UjDRrd5nkGK0x\njU1ryDxAVhA2UmY99dRT+pLCgOfSSy9188wzj6qvyFKw5ZZbqruIzdxjM7yRbCgO+P45Y0KG6xHP\nIc/YVVdd5YhziiGZkSFQCQSMOVYCxYTXMe+887ru3bvrBhRffvllakZ/0UUXqVqWjAVYxm6++eYq\nVXbu3FnVsgmHzrqfBwFiAj/99NOa4Jsk31iUkrKN54hoNWgo8N21BMJ5QLRTZSNgatWyobMLi0EA\n9RcGEeGXHG4j888/v1oKbrTRRprJgBiVZBgxSiYCaB+I4EQgb9I+EaDi66+/VtU8FqV+UsVvU9cn\n8xkppdemVi0FLStbFwR4SFn7YSNDCETQZpgl60SsC5ApHSaKAQVMkrQ/bOTEW2CBBerSbrtp9RAg\n5RPPwLhx45QZwhDffPNN9/vvv6s1NGN/1FFHKUNkDRFp0cgQqDUCplatNeJ2P7fiiivqRmot6L//\n/a+a3iMx8KKEWZKLcvbZZ9cYl2uttZYLb4svvrih
 GBMEMNSC8Y0fPz61TZw4URNyw/RQi6ImPf74\n43VCtPzyy8ekZ9bMRkfAmGOjj3AM+rfwwgurMQUGFZ5I3hx+oQ4bNsx9/vnnehr1a6dOnTTKCZFO\n/G/CgBnVB4GZM2dqOELikfqNaDSMI36HrDmjCUAqPOyww3SygzbBpML6jJfdtTACxhwLY2Ql6oAA\nKYHYiMzjCWkS830kEV68SCCoZTkO8QKGWXbs2FGvRQqhDr6xYjTDDY9ked8zZsxQZvfRRx+lvvn9\n3nvvaVQlasU4C80A49C7d29VpyP1ozI3/MvD3a6qDwLGHOuDu921DAQIY7fFFlvoFr4ck34vrfDN\nCxumSXSfWbNmaVGMOGCU7du313B4MFAiAYW3JEf7Yb0PAxhCByKh8+03XCiQAKdNm6ZYou4m5Zmf\neOBKATNk4xjnjQyBuCNgzDHuI2jtVytXVK1YNIYJIx/cSsKSzltvveVGjBih8TWnT5+ua1/+GrKV\nEGaMuvCf4zv8m9B5lFlooYX0m99RVAuixkTKI6H1999/r9/0lUkEwRv4zvab6yD8UZG0/cQBi+J9\n991XJXCYH1IgfqxGhkAjI2DMsZFHN+F9Q43nX/CecfKSR+2HewlMAJWsl5BgpJ5x8I1FJRa1MBSk\nJs88wrAikXqGieTJvt9wV/G/+SbcHvfMtVE/lpzZNjKj4O5A1hQ2wqX533xj+AJDhBmy/sfEIJNQ\nO3uGzzfqZlwj+I2R09JLL6148Zs2GhkCSUbAmGOSRz9hfWed8vbbb3e33npr6uWPqpYNY5F8BOPy\nUliubxhUJtPy0ikMDAbnGV/4N8eoH2YeZpxzzjln2j7reTBZz3Rhdn6fY+x7qXbUqFGabgx/QZg3\nRk9RlHLzYW7nDIF6ImDMsZ7o271rigB5/FZddVXXq1evku/LOtoiiyyiW8kX1+ECpEDUxzBhVMVG\nhoAhUBoCxhxLw8tKxxQB3EL
 uueced++99ybCahLneaRFYt3i6mJkCBgCpSFgZmWl4WWlY4pA//79\n3TrrrON22WWXmPagtGajniXgO8zRyBAwBEpHwJhj6ZjZFTFDgKg7rMGdddZZMWt585pLUAUCdmPI\nY2QIGAKlIWDMsTS8rHQMETj99NMd7gjbbrttDFtffpNhjhgCwSCNDAFDoDQEjDmWhpeVjhkCWGuS\n+y9pUiPDhBsL642mWo3ZQ2vNjQQCxhwjMQzWiGohcNppp7muXbs2iapTrftFrV6kR2OOURsVa08c\nEDDmGIdRsjaWhQASIyrFJEqNHjCYIwEPCHBgZAgYAsUjYMyxeKysZMwQYK2xe/fumhIpZk2vWHOJ\nDETwAJMeKwapVZQQBIw5JmSgk9bNhx56SHNDJllqZMxhjJtttpkxx6T9Aay/zUbAmGOzIbQKooYA\ncUXxa8SnsXPnzlFrXs3bg2p17NixWWPD1rwxdkNDICYIGHOMyUBZM4tHgCg4RMQ588wzi7+ogUvC\nHInxOm7cuAbupXXNEKgsAsYcK4un1VZnBAjgTQzVnj17utVXX73OrYnG7Ykni1uHrTtGYzysFfFA\nwJhjPMbJWlkkAmTdIDP9gAEDirwiGcW23nprY47JGGrrZYUQMOZYISCtmvojQAaKgQMHun322cet\nvPLK9W9QhFqAapUweiRANjIEDIHCCBhzLIyRlYgJAjfffLObPHmyqlVj0uSaNZMg5BgqYZhjZAgY\nAoURMOZYGCMrEQMEfvvtNzXAOfDAA91yyy0XgxbXtonkoiSNla071hZ3u1t8ETDmGN+xs5aHELju\nuuvclClTHOHijLIjgGp19OjR2U/aUUPAEEhDwJhjGhy2E0cESMl0zjnnuEMPPdQtvfTScexCTdoM\nc/z000/VYKkmN7SbGAIxRsCYY4wHz5r+FwLDhg1TP75TTjnFIMmDwPrrr+8WWmghU63mwchOGQIe\nAWOOHg
 n7jiUCP/30kzv//PPdkUce6dq1axfLPtSq0XPMMYfr1q2bMcdaAW73iTUCxhxjPXzW+MGD\nB7uff/7Z9evXz8AoAgFUq08//bSbNWtWEaWtiCGQXASMOSZ37GPf8xkzZriLLrrIHXvssa5169ax\n708tOgBzZDJBEmgjQ8AQyI2AMcfc2NiZiCNw2WWXaTDtvn37Rryl0WneMsssowESzKUjOmNiLYkm\nAsYcozku1qoCCBBI+9JLL3UwRoxMjIpHAOnRmGPxeFnJZCJgzDGZ4x77XqNOnXvuuV2fPn1i35da\ndwDmOHHiRPf111/X+tZ2P0MgNggYc4zNUFlDPQJTp051GOJghNOyZUt/2L6LRKBLly5unnnmMemx\nSLysWDIRMOaYzHGPda9x3YAp4r5hVDoC8803n9t0002NOZYOnV2RIASMOSZosBuhq1999ZXD6R+H\nf17yRuUhgGqVIOTkvzQyBAyBpggYc2yKiR2JMAKEiVtsscU0VFyEmxn5psEcp02b5l577bXIt9Ua\naAjUAwFjjvVA3e5ZFgLEBb322ms1uDhrZkblI7D66qu7JZZYwlSr5UNoVzY4AsYcG3yAG6l7Z555\npltqqaUcaamMmo/A1ltvbcyx+TBaDQ2KgDHHBh3YRuvWhx9+6EhmfMYZZ7i55pqr0bpXl/6gWn3p\npZcckYaMDAFDIB0BY47peNheRBEYMGCAW3755d0+++wT0RbGr1lbbbWVGuQ8/vjj8Wu8tdgQqDIC\nxhyrDLBV33wE3nnnHXf77be7gQMHOjJLGFUGgUUXXdR17tzZVKuVgdNqaTAEjDk22IA2YndQpa66\n6qquZ8+ejdi9uvbJ1h3rCr/dPMIIGHOM8OBY05wbP368u+eeexzGOLPNNptBUmEEWHecPHmye//9\n9ytcs1VnCMQbAWOO8R6/hm/96aef7tZdd123yy67NHxf69HBDTbYwLVq1cpUq/UA3+4
 ZaQSMOUZ6\neJLduJdfftk99NBD7qyzzko2EFXs/Zxzzum22GILY45VxNiqjicCxhzjOW6JaDVS40YbbeS6d++e\niP7Wq5OoVp966in322+/1asJdl9DIHIIGHOM3JBYg0DgmWeecWPGjHFnn322AVJlBGCOP/30k3vu\nueeqfCer3hCIDwLGHOMzVolqKVIj6r6uXbsmqt/16Gz79u3diiuuaKrVeoBv94wsAsYcIzs0yW0Y\nEiOSo6011u4ZQHp87LHHandDu5MhEHEEjDlGfICS2Dykxm233VbXG5PY/3r0Geb45ptvuilTptTj\n9nZPQyByCBhzjNyQJLtBo0aNclipmtRY2+egS5cuGrN29OjRtb2x3c0QiCgCxhwjOjBJbFYQBK5/\n//7q04hvo1HtEFhggQXcJptsYqrV2kFud4o4AsYcIz5ASWoekXAmTJig0XCS1O+o9BXVKuu9TFKM\nDIGkI2DMMelPQET6/7///U/TUfXq1cuRiNeo9gjAHL/99lv3+uuv1/7mdkdDIGIIGHOM2IAktTlk\n3Zg0aZIjNZVRfRBYc801Xbt27Uy1Wh/47a4RQ8CYY8QGJInN+eOPP5Qp7rvvvm6llVZKIgSR6bNl\n6YjMUFhD6ozAnHW+v93eEHA33XST+/TTT01iicCzgGr1gAMOcDNnznQtW7aMQIusCYZAfRAwybE+\nuNtd/x8B4nnitnHggQe65ZZbznCpMwJIjkjyTzzxRJ1bYrc3BOqLgDHH+uKf+Ltfe+216niO479R\n/RFo3bq1W2eddUyKr/9QWAvqjIAxxzoPQJJv/+uvv7pzzjnHHXbYYW6ppZZKMhSR6juqVQslF6kh\nscbUAQFjjnUA3W75FwLDhg1z33//vTv55JMNkgghAHP8+OOP3YcffhihVllTDIHaImAGObXF2+72\n/wiQIun88893Rx55pLoPfPfdd47QcdBss83m1lhjDbf22mtrKq
 X777/f/f7775qhY9lll9UyX331\nlXv00UfdF1984TbeeGPXrVs3Pc4HTuxPP/20Gz9+vJtjjjncyiuv7LbaaqvUefuRH4ENN9xQjXGQ\nHldYYQUt/Pnnn7t7773XHX300e6dd95xDzzwgFtmmWXcPvvs42afPX2OjZ/ks88+637++WdV0bKO\nyZgaGQJxQiD9qY5Ty62tsUZg0KBB7pdffnEnnnii9mPRRRfVlyyGOY8//rgyRk4Q1owAATA7XsbQ\nk08+qa4fMM9VVllFw83BZD2ddtppKvUce+yxjhc9+0bFIzDXXHNpujCvWmXSQjg/8GTcLr30UvfS\nSy+5/fbbz11wwQVpFR9//PF6bMcdd9Qk1YwvqceY/BgZArFCQGbZZdMee+wRsBkZAqUg8MMPPwSL\nLLJIIEyryWViDBKIdBiIpJg6969//SuQsHK6Ly4GgVi1Bj/++GPq/MEHH0y8s+DFF18MhJEGYlQS\nCANNnZeEyanf9qM4BIYOHRq0aNEiEGtiveCkk05SjMeOHZuqgLESppnaF5ecYMEFFwxEVZ46JoEd\n9DrxYU0dsx+GQLUR4H0wcuTI5txmpEmOsZrKNEZjkTyQBvv27dukQ0ga+Dzefffdeg51KmtfqFkh\nIul4iRNpkY00S8svv7yWQ31HIAHC0KH6g0444QT9to/iEWDdUSYg7vnnn9eL5ptvPv1GRe2pU6dO\n7rPPPvO77vLLL1cVdqtWrVLHSKLcoUMHd8stt7gZM2akjtsPQyDqCBhzjPoINVj7pk+f7i677DJl\nWAsttFCT3vXo0UP9HS+55BI998gjj7iddtopVe7tt992iy++uLvyyitT20MPPaSMkQg70JAhQ5xI\nMKpu3XLLLdXoJ1WB/SgKAXxOWW/0qtVsF7GeK1NzPcX3u+++60TabFJ000031WPvvfdek3N2wBCI\nKgLGHKM6Mg3arosuusjNPffcrk+fPll7y
 AsXifLVV191zzzzjLvrrrvcXnvtlSrLeWKwIlHmorXW\nWkuDZx9xxBHuqaeeUqMQmLJRaQiU4tKBxL7wwgu7cePGuT///DPtRh07dtR9zhsZAnFBwJhjXEaq\nAdo5depUN3jwYNevX7+sEobvIkY5iy22mBrd8NLFWMcTwbGxdB0+fLg/pN+4hMg6mZs1a5YbMWKE\nWlsiXT788MPu66+/VkvLtAtspyACMEcsfhm3Ymj99dfXsHNvvPFGWnGsV9u0aWMRkNJQsZ2oI2DM\nMeoj1EDtO++885RphS1Ls3WP9a2jjjpKrVLDUiNlWUtceumlVS2LFIoqTxbe3aGHHup69+6taj4Y\np1f34UZA1Bc2o9IQ6Nq1q8NydfTo0an1QsL9eZo2bZpORjzWuObMM888OjnxZVhbFkMpddtB6jcy\nBGKDgDzYZZNZq5YNXeIuFH/EYN555w1Eciyq72JkE8jaYiBxPpuUFz+7QAw91ApS/mjBaqutFoh0\nouXEWEev23PPPQNRyQbCQIP+/fs3qcMOFIdAly5dAvERVQthsP7nP/8ZiCQeiGGUWqZyTNKMpayL\nxb8xaN++fSBuH4EYRAXi7hGIBF/czayUIVAhBHgum2utakEABEWj6iNAmDhUpYccckhRN5s4caI7\nQLJDZJM28G1k3RGrVtSu3v+RioUBqwUlEgtWrBj4GJWPAKpVrFBRTYO1J5l8OLZM2mSTTTS6zvvv\nv68q1quvvlqlycxytm8IRB0BU6tGfYQaoH2TJ0921113nSO4OGq3YoiXqvg35i1KtJwwY/SF55xz\nTjX6yXbOl7Hv4hCAOX7zzTe69ljcFX9FOMKdpnPnzkWPd7F1WzlDoFYImORYK6QTfB9SUhFYHEOb\nfIQFK35zfo2QtUWj+iKA5W/btm3VpYOIREaGQFIQMMkxKSNdp35+8MEHmsz4jDPOcEh0+QgJBcd9\n4nhi3GFUfwRQpRKX
 Np+/Y/1baS0wBCqPgDHHymNqNYYQEGMNh58bAaoL0R133KHRbwgojhO/UTQQ\nQLX6wgsvaMScaLTIWmEIVB8BY47VxzixdyCaDQxv4MCBWQ1rsgFT7JpktmvtWHUQwB2GoAsEfDcy\nBJKCgDHHpIx0HfqJKlXcLJy4/NTh7nbLSiGAAz9rj6ZarRSiVk8cEMi/CBSHHlgbI4kAUVLI/3ff\nffeluQBEsrHWqIIIoFr1weALFrYChkADIGCSYwMMYhS7II73mgNw5513jmLzrE0lIgBzJDvKxx9/\nXOKVVtwQiCcCxhzjOW6RbvXLL7/syJSBC4dRYyCw8cYbazxcU602xnhaLwojYMyxMEZWokQEJImx\n42XavXv3Eq+04lFFgBirxFo15hjVEbJ2VRoBW3OsNKIJr480U5It3iwbG/A5YLJz0kknOYl3W9Bn\ntQG7b11KGAImOSZswKvdXaTGLbbYwknA6mrfyuqvMQK4dMycOVN9Hmt8a7udIVBzBExyrDnkjXtD\nUhtJVgZ7eTboEK+wwgqakxHV6mabbdagvbRuGQJ/IWCSoz0JFUOAwOLbbbed23DDDStWp1UULQSw\nWrV1x2iNibWmOggYc6wOromrddSoUe6VV15xZ555ZuL6nqQOwxwld6b79ttvk9Rt62sCETDmmMBB\nr3SXJT+pw69x1113Vd/GStdv9UUHAdaTCSA/ZsyY6DTKWmIIVAEBY45VADVpVd5zzz1uwoQJJjUm\nYOBbtmypanNTrSZgsBPeRWOOCX8Amtv9//3vf44Yqr169dI4qs2tz66PPgKoVjG+MjIEGhkBY46N\nPLo16Nttt93mJk2a5EhNZZQMBGCOU6ZMUW1BMnpsvUwiAsYckzjqFeozzuCko+rdu7dbaaWVKlSr\nVRN1BNZZZx232GKLmdVq1AfK2tcsBIw5Ngu+ZF980003uU8//VSNcZKNRLJ6P9tss7mtttrKmGOy\
 nhj1xvTXmmLghr0yHf/vtNw0sftBBB7kOHTpUplKrJTYIEEruueeecz/99FNs2mwNNQRKQcCYYylo\nWdkUAtdcc42uOxEuzih5CCA5/v777+6pp55KXuetx4lAwJhjIoa5sp389ddf3bnnnusOO+wwt9RS\nS1W2cqstFgi0a9fOrbHGGqZajcVoWSPLQcCYYzmoJfyaoUOHuu+//96dcsopCUci2d23UHLJHv9G\n770xx0Yf4Qr3jzWm888/3x111FGubdu2Fa7dqosTAjDH999/302ePDlOzba2GgJFIWDMsSiYrJBH\nYNCgQQ616oknnugP2XdCEdhkk03cAgssYKrVhI5/o3fbmGOjj3AF+/fDDz+4iy66yB177LFu0UUX\nrWDNVlUcEZh77rk1b6eFkovj6FmbCyFgzLEQQnY+hcBll13mCDLet2/f1DH7kWwEUK0+8cQTjoAQ\nRoZAIyFgzLGRRrOKfZk+fbqDOZ5wwgmuVatWVbyTVR0nBGCOaBReeumlODXb2moIFETAmGNBiKwA\nCFx44YVunnnmcX369DFADIEUAiuuuKJr3769rTumELEfjYKAMcdGGckq9mPq1KluyJAhrl+/fq5F\nixZVvJNVHUcEzKUjjqNmbS6EgDHHQgjZeXfeeee5BRdc0B1xxBGGhiHQBAGY42uvvea+++67Jufs\ngCEQVwSMOcZ15GrU7i+//NINHz5cHf7nm2++Gt3VbhMnBLp16+Zmn312N2bMmDg129pqCORFwJhj\nXnjs5Nlnn+3atGnjDj30UAPDEMiKAFqFDTbYwNYds6JjB+OKgDHHuI5cDdpN5JPrrrvOEVwcnzYj\nQyAXAqhWR48eneu0HTcEYoeAMcfYDVntGnzmmWe6ZZZZxh144IG1u6ndKZYIwBy/+uorN3HixFi2\n3xptCGQiYMwxExHbVwQ++OADd/PNN7szzjjDzTnnnIaKIZAXgXXXXde1bt06
 pVol3+eTTz7pTjrp\nJHfHHXfkvdZOGgJRRMDeelEclQi0acCAAa5jx45un332iUBrrAlRRwCDnA033NCNGjVKI+YQNWfW\nrFna7GHDhkW9+dY+Q6AJAsYcm0BiB95++22d7d9+++1qhWiIGALZEJgxY4YyQmKrwhSxbJ5jjjk0\nxOD//ve/1CULL7xw6rf9MATigoAxx7iMVA3b2b9/f7faaqu5PfbYo4Z3tVvFCYFvv/1WNQuEjptr\nrrnc77//rs3/888/m3TDmGMTSOxADBCwNccYDFItm/jGG2+4++67z2GMM9tss9Xy1navGCGw2GKL\naYYWmuwZY67mG3PMhYwdjzICxhyjPDp1aNvpp5/uOnfu7Hbeeec63N1uGScEDjnkELftttsWNNgy\n5hinUbW2egRMreqRsG/NrPDwww+7Rx991NAwBIpC4IYbbnArr7yyZuYgnVk2MuaYDRU7FnUETHKM\n+gjVsH1IjWR3x2fNyBAoBoG2bds6GGQuxkgdCy20UDFVWRlDIFIIGHOM1HDUrzFPP/20Gzt2rDvr\nrLPq1wi7cywR2GWXXdz++++fVb06//zzqwVrLDtmjU40AsYcEz38f3ceqZEA0l26dPn7oP0yBIpE\nYPDgwa5du3ZNGCFxV40MgTgiYGuOcRy1CreZmJjPPvuse+GFFypcs1WXFARatmzpbrvtNrf55pun\nddnWG9PgsJ0YIWCSY4wGq1pNRWrcbrvtNMJJte5h9TY+Aptuuqk78cQT06THRRddtPE7bj1sSASM\nOTbksBbfqQcffNC98sorttZYPGRWMg8C+MeutNJKqfVH/CGNDIE4ImBq1TiOWoXajIUh0XB23XVX\nt84661SoVqsmyQiQ2uzOO+90a6+9tsKwyCKLNIGD0HLTp093//3vf92PP/7ofvrppybfBBb4448/\nUhuRd9iHCIRPmDq+/UaUngUWWMC1aNGiyTeqXdpB/Fc
 jQ6BYBIw5FotUA5a7++67NcXQLbfc0oC9\nsy7VGoFp06ZpfFVirGLByvOFVmLHHXd03333neM83zDFXK4f8803nzI3mKxnfGFGSJ880/QMk32y\ngMBkf/nll6zdJtoTTBI1L9lD+MYNZamllnJLLrlk2sZ5I0PAmGNCnwFm76Sj6tWrl8ZRTSgM1u0S\nEIChffrpp+799993H330UZPt559/TtWGgQ5uHByDKa2wwgppjAnmhDSHpOelPSS/5kp3PNcwSS+N\nIpkipcKUwwya3/QFIzSYOUHUPdHu5Zdfvsm24oorumWXXdbCKnqgGvzbmGODD3Cu7mFZyEvu/vvv\nz1XEjicYga+//tpNmDDBkaGF7a233nLvvvuuqj+BBYbnGQiSIb/bt2+fksBgeJ999pl77rnn3N57\n710zJGGuMGa2UggmCpNkmzx5corx4/97/fXXq7RLffRrlVVW0Qnlqquu6tjWXHNNt/jii5dyOysb\nAwSMOcZgkCrdRNRQAwcOdL1793bMho2SjcA333zjXn31Vffaa6/pN79hjhAvfRjARhtt5Iilym+Y\nA8yxEC2zzDJur732KlQsEudhehgSsWUjVMFMDvxkgW/CLIZxIiYxG4mf+UZtaxRfBIw5xnfsym75\njTfeqCol/BuNkoUAqtF33nlHJTqkOjYkJQjpjxf7scceq98YaRXDBPXiHB+NktkFHJggsIUJpvn6\n66/rxILJxc0336zLFZRBkiYco986depkKtkweBH/bcwx4gNU6eZhuECIuIMOOsh16NCh0tVbfRFE\nAIlnzJgxGh7w+eef1zU4JKUNNtjAHXDAAW7jjTdWZthcRhjBrle9SWBGZCk2TzBMGCVYM/k44YQT\nVB3NGitYb7nllm6rrbZSCdxfY9/RQ8CYY/TGpKotuuaaaxxqtNNOO62q97HK64cAiYjRChArF6bI\nOhrBv7t27aquO0gya621Vpqzfv
 1a23h3hmHCANkgrGrHjx+vjJI1TAzh+vTpo+uzMEnKbb311s58\nQqP1LBhzjNZ4VLU1mLmfc8457vDDD1cT9qrezCqvKQLvvfeeI6AD24svvqiMb8MNN9Sx5uW73nrr\nGTOs6Yj8fTNcUVBXs8EUYZbjxo1LTV4OPPBAPcZ47bTTTrqRBsyovggYc6wv/jW9+9ChQzXv3skn\nn1zT+9rNqoMAhjMjR45Ui+MPPvhA/fe23357d9xxx2naMVSnRtFDAGaJSpsNDQ6Wso899pgbNWqU\nu+iii1y/fv1cx44d1Ve0Z8+eatwTvV40fouMOTb+GGsP+QNecMEF7qijjjIruhiP+cSJEzUCzR13\n3KHuBsstt5zr0aOHOtpjLNJcP8EYQxPbpjOJ2X333XXDTxPfSxglQRRglhhK7bnnnuqTvPrqq8e2\nn3FruMVTituIldneQYMGuV9//VUDQ5dZhV1WJwSmTJniLrzwQnWjWGONNdQikgg0qOZwxmfSwzqi\nMcY6DVAFb8sYMpaMKWPLGDPWWMEy9rjS8CzwTBhVFwFjjtXFNxK1//DDD+7iiy9WdZtlSYjEkBRs\nBLFFCdDAGtTSSy/tzjvvPE0HhQUkkV0YT3zpjBobAcaYsWbMGXtSgvEs8EzwbPCM8KwYVR4BY46V\nxzRyNV566aXapuOPPz5ybbMGpSPw+eefu1NPPVUNplC1Ie2PGDFCnc1ZM0Z12ii+g+k9t718CDDm\njD3PAIEHeCZ4NnhGiA/LM8OzY1Q5BIw5Vg7LSNZEDMnLLrtMfa1atWoVyTZao5x76qmndO0Q31PC\nlWFRjHM+LhmsN80777wGkyGgCPAs8EzwbPCM8KzwzPDssP7Ms2TUfASMOTYfw0jXwPoEf6Zjjjkm\n0u1MYuMI48daEkYW+CB6iYCYpIT3Q3VmZAjkQ4BnhGeFZ8ZrGHiWeKZ4tnjGjMpDwJhjebjF4iqc\n/YcMGaKm4
 WbWH50hI1MFBlJYIR588MHqkE8IMtaUiEVKbkIjQ6AUBHhmeHZ4hniWCPLAs8UzxrMW\nzphSSr1JLmvMsQFGnwV5QlQRGSVMLNyjSj3iiCPCh+13nRCYOXOmO/vssx0BufE13Xnnnd2HH36o\nM36fHLhOTbPbNhACPEtIkTxbPGM8azxzPHs8g0bFIWDMsTicIl3qk08+cZdccomq4U455RRNr0PI\nsKuuukoX6kkga1Q/BIhMhL8aa0J8H3nkkaoGY0ZPfkAjQ6AaCPBs8Yxh6cozF34GcyWFrkY74lqn\nMce4jlyo3fhDQbNmzdI/AOsQ+EaR0Zw0Q0b1QYAg74MHD3Y46rMudOihhzomMvw2l5r6jEkS78p7\ngGeOZ49nkN88kzybPKNG2REw5pgdl1gdRX0y55x/BTtiAZ4s6G+88YZmX8BSlX2j2iLwwAMPqMP2\niSeeqMl+eTGde+65jswMRoZAPRDg2eMZ5FkkATXPJkEFeFaNmiJgzLEpJrE7guSY6ftGcGMW4fF/\nQpK8/PLL1S8qdp2LWYMnTJjgtthiC5XcceAmIDgqb8u4ELOBbODm8izyTPJs8oyiZeKZ5dk1+hsB\nY45/YxHbX5MmTcoZJQMmSX45glHvv//+se1j1Bv+/fffu3/961+OBMGs5xAf8/bbb7c1xagPXILb\nx5okzyjPKs8szy7PMM+ykXPGHBvgKWAGmI/IAtClSxd1FM5Xzs6VhwBBwEkxdO+997qbbrpJXzak\nHzIyBOKAAM8qDJJnl2d4lVVWcTzTSSdjjjF/Aoji/8UXX+TsBYyxe/fu7tFHH3ULLLBAznJ2onQE\nWLsBW9ZviHPJJGXfffdtouIuvWa7whCoLQIsy/Ds8gzvuOOO+kzzbPOMJ5WMOcZ85ImnmCsKBhH+\nib1IcOJ55pkn5j2NVvOvvvpqzZLAxOS5555z7JMB3sgQiDMCPMM8yzzTPNtkAmE/iWTMMe
 ajjqVq\nNmImSIZx1hS8JWu2cnasNAQI8UZCYdZm8B0jGgkBoY0MgUZCgGeaZ5tnnGedZ55nP0lkzDHmo42l\nKqrTTOrTp4+79tprLcdfJjDN2Gc9ZrXVVnPvv/++e/bZZ93555/v5p577mbUaJcaAtFFgGebZ5xn\nnWeeZ5//QFLImGPMRxrJMZM59u/fXzNxxLxrkWk+4fmOPfbYVLb28ePHm7QYmdGxhlQbAaRInnmW\naNj4LyQhh+RfnuPVRtfqrxoCH3zwQdqDSogo4qwaVQYBsh307NnTvf322+7WW29VQ4XK1Gy1GALx\nQQBjPtYesXo/7LDD3EsvveRGjhypMVvj04vSWmqSY2l4Ra70u+++64IgUAvJ4cOHG2Os4AiNHTvW\nEcSZYAqvvvqqMcYKYmtVxRMBLLP5L/Cf4L/Bf6RRqS6SI9aTJOk0aj4CPjoODy2OvETCiRKxoB/H\nFEzDhg3THJgkjyWRrAVvj9JT1RhtGTdunGbOyNabDTbYQAPV+3NoMEhH5QkL9ZYtW2p0G3+sVt8r\nrbSSe/nll91BBx3ktt12Ww1ujtFOo1FdmCPZIp555hkzfW/m00T0G/4kxEwk+zdbVOjXX3913333\nneaUixNzBFPWVK688koN0Hz66adHBVJrRwMhgLaH/Is+aUBm11577bU05tivX780x3ys0d95553M\ny2q2z2QRS/hOnTqpRSttYWKeaf9QswZV4UZ1YY70Y88993TXXXddFbqUnCoxtZ42bZrbeuutI9dp\ngg4wq4wToSraY489dJLBegpSY72JHJ28KHHITgqRwX6//fZr6O6ijsQ9grCOSyyxRKqvTz/9tGbO\nIJSbJ1JOYQDDtyf8ltu2bet36/bN5JGIOoSm/Pjjj91dd93l5p9//rq1p5I3rhtzrGQnklpX+A+U\nVAwq1W/iSe6www4aIeTJJ590//jHPypVddn1IMWiLsdCMCkE9uQkj
 TJzZEkIn7/mhAhs0aKFWpQT\nqCNMZMjIHG8y6zA5atOmjZt33nnDxSPxm0kkyZS32247nag/9NBDbqGFFopE25rTCGOOzUHPrm0I\nBL755hu3zTbbqBSOuh9VUb2J3Jz77LOPGjzwUkSNRoi6xRdfXJv21VdfaUhAophsvPHGrlu3bqkm\ns/bMS5byU6dOdY888ohKJ4QFQ+1Ffx988EH1gUVSXnDBBfVaVPSPP/64hhns2LGj1oE0sOuuu7r1\n118/VT8/8t2f88TqJFcgUgUxO7FyZMJB21D/o/WgLb1793ZLLrkklzgYI5nr6StLL16iQvUIM/nn\nP/+pmeyRLJGkwKJXr156LR+57sk5JDXWyYgAwzXl5NPEbYqUTyNGjNC8qc1hjtmuJRQkfoR33303\nTVYiaQAath9//NEdddRRusZ44YUXRs5KlLHlv4MWi7F+7LHHIiHZehzL+hbdd9kkf6yArVSSWVAg\ni7mlXmblY4TAf/7zn0AeyGDGjBmRbrW85ANhBMGKK64YiEQQmbaKJBtcc801iuG///3vQBhHIC9K\nbd8TTzwRSBLrQBhMIOrfQBhHcMQRR+g5YTzaH7CXtESBJLcNuF5UXYFIJFqnMN1AljUCYUKBMEy9\nTsIQBrvttpveT5hqICo/rVMYUCARlgJ5YaewyXd/MBQJQus55phjAmF2em9hsMHMmTMDYYTaF2HE\nwVlnnRVIZohA1Nlat+QgDYTRB5JSScuwD0nOwWCppZbS33zwTAlDD4TB6LF895RJRiBMNZD1sUB8\n9QKRcgJJ/huIa06qvkI/xCI8kLijgTDzQAxlAp5t6MsvvwzEQT7vJmHYClWfOi/MJZAJQSBMMnVM\nJjLBFVdcoeMlqecUV8ZSJjypMlH6wVjwX+I/xX+rXsTzz3+jGTQSN4CyyZhj2dA1/IVxYI4iVQUi\n2QRifReImixyY8LLnD+5SA6ptsFgJIt7IJJE
 6tjBBx+s5V588UU9dumll+q+rP+kypx00kl67J57\n7kkdk1yfgaxdBaK+1WMiGWmZ8IR3ypQpyqxgTiKtKYMrdH/xvdV6RO0fwATBWdZOg1tuuSUQNWJA\nnZDv3yuvvKL7fEhuwQAmECYYWpg5co66PXNkP9c9L7744uCMM86giBKTADAVTYE/lPN74sSJypRo\nM/eSdfS0sh5n6su1iTFa2jX5do4++uhArLtzFgF/UTkrhu3atUtNlnJeUKcT/JdgkPy3GPt6EOPR\nXOZoalVB0Sh5CKCu2mqrrRzqS9RB8rKJLAioGT1hIYhqkizunoTZuOWXX17dAnABaNWqlZ5affXV\nfRGH+T205pprpo6RZov+oyIV5pPK2rLWWmulymD0IVJqKoM8KtFC9/fqUAxOUJ36RM9YZ7JOTp1Y\nM2N8AhHIYr311kvdM9zf1MECP3LdUxiYJvTFpcgTWEyfPt3vNvkmGszZZ5+tKk7UnzLRy2r0JszM\nHX744U2uL+eAMBAnExcnE4iclxMj+ZxzztFnVaRyVUOj8o4a8V8S7YLbbLPN9D8mWo9YeiYYc4za\nk2XtqToCWKVi4IARDozRr3lV/cZl3iDMLIjUw1obrialULasLN7F5qeffspblUgBeh7L2WLu741M\nYIxh4jiMkfCGGJZ4hshaW5jC/Q0fz/c72z0ZXxg/a5WstxZLImXrmln79u11bTFXYHmYVaWC+uPD\nyBotDKUQsWaKuxGTiqgS/ykY5Oabb67/NRhk3KxYjTmGni7+TMw0MU+eMGGCkzUPnTVThJeorDGE\nSjv9gzPj5uXhZ+sYClAWiy0kEyy4Kkn52ljJ+zRqXbyIsQDFyEPUkJEzbMiGe5hZwHAmTZqkBime\nuWW7JvNYuI5SzlHWuxCIOlUlwXLuTz3kBsRYA8aOZTDBrLNRvrZmK5/rmGeYoh4tiTnihkSw7TPP\nPFONnfgfDxw4sIl1Kk7
 8hSLEMF5hKT9XWzHCwRgpc0KRrTySOL7NftKSrUwUjsl6shszZozihnEZ\nkrEfkyi0r1Ab0u2IC5Vu8PNY0ImRgL4M8HMjIr0nItKjbuHF2rdvX1Utvfnmm+60005TqzosyVBR\n8UfkWhximbVWmvK1sdL3asT6iDvLy48oTVhkRpk8k8ClwxNqUSQ9QgWGiUnT0KFDw4cq9hsJYN11\n11V1XnPuP2DAAGXqMEYoU2LkGH0O95djSGeoYUslrHA7dOjgiHaEKjhMqC+JOpOLNt10U32xYwHL\n/ZEesWhmQuUJ5g5Ty7fBEAoRKlXqyHThyHUduRbBbpNNNslVJDLH+Y/xX0M1HbuYz81ZLG00gxys\n0uSpUms4FtvlD5EGjz8vqo+04zLD1OvEN0uPi9Sp+1gbVpp8G7DYy9bGSt+v3PqiaJAjL0m10MRy\nMQ6EMQPPI9aW8jIMeK6ESajBiqQTCsSkP5DIJMGdd96pVuPeMlgmZnod5T15y9ew8QuGPtTvy2FI\nwT6WrJ7EVUStTUVC0kPF3F8CU2g9MmH01eg31rLU//DDD6uBDgYo7F9wwQUp4xKsbjFiEck+wEAI\nwyMJ36fl+Pb7WLmKijaQtUOtO9c9ZcKg12JlKqo9tfAVtW4wZMiQtLYV2hEpMcCKV5i3GvO89dZb\nhS4p+ryoVAPRPAVY1maSJBIIeG5lQqSneA5kgp5mPZx5TRT3+c+BHX2pBfFcNdcgx6xVQyMls8tA\n/KD0iPgbBaLbD539y3Qb0DOZo4RJUwsyWUfRBxwzccpJPsW06yuxU6iNlbhHJeqIGnOEKcBQwpaL\nlehntesQ/0V9lrp27RqIelNvB0PEGpBnjE20GvrS56RIOoFId3pcopYE4qeoTAHrTsriosHzSTkY\nBsck60ggUpBa7LIv60QBFrAnn3xyIBJjELZw5R757i8q14BJIvWIf2YAo5a1NC7Te8LUsJDFtUMk\nN6
 2f/9wNN9ygZWBgIqkF4kQeDBo0SI9hoevbigUk/03cTrA4hennuyfMhH5QJ23iG8tdb6GrNyjh\nA/cSmLz4O5ZwVf6isn6oriLZSokfqLZb1KgBkw2JqBNIRoxsRSN/jEkJ/8HwBK1ajWasjTlWGF1v\n4o0PGf5hYcKvCdAzmSOzOv50DDyzv1zMEX8u/JPEEi4477zzAmblELNeXg5sN954Y+pFxywZ83eO\nh33w8rUx3N56/o4Sc0S6EOOKQNaOyn4p1gtLXu7+OclsA8+EZ5iZ58rZ95KjWESqpAJj5f65qJz7\nw5TCbijUnykxiYo4q39s2C2ASWIpxH8Pac9LYKVcm61sZpuzlSn2GDjzDshF+DoyISm1z7nqq9dx\nxp7/IP9FL/FXqy2VYI625igohoncfRDGB96aLnw+22+iQRBdhDUAYZDZimiEC/TvBOzFGo7yRDaR\nB16jdbBQfeCBB2qEElLBQORQk5eHmrwTnslTOW301ybxm7iPGEqRjzFOBgGMFWtwuaxpMXgIPxeV\nHFssC1mv4/65qJz7gz/PtSfqz/zPYNxGxolM8i4hHC81jBr/OwkmUDGLycw2Z7a1lH1wzhexhwhJ\nRBoqtc+ltKEWZRl7/oP8F/lPRp2MOWaMEGlYIP6gsqaacfavXVwBZNasTEucjJ1Ez1D/MQY+FxHO\nS2bm+pBjkYZpOVaAMpvVS4gliQ8Ylq4wTk8YABCcOPySKqaN/vqkf5OgVda4nKzLpfztko5Jrv7z\nXEMY9xgZAtVAgAkO/0X+k/w3o0zGHMsYHVw6RC2qEehhZAw0lqz5HMlxgIYRZnOA9k3A5BuGieUa\nxAyLeI5rrLGGL2LfJSAg0VCcqMbd8ccfr1J6CZcmriiTPVmP1X5jYSmqfPW7SxwQ1uGqI4DGjP8k\n/03+o1El83MsY2RQjxIYuRRCpVDIAZro9qhzJSampvQiYDTBo43KQ4DILjjM455
 jlB8BIswMHjxY\nN1+yFD9Kf419GwLFIMB/ctSoUepHjmtVFMmYY41G5ZMiHKBRt+JDSagr1KvkRpOgwzVqYWPdBhU3\nDsj4hMV9raYSI0NwC3AQV4ms1bGGVsl1tKw3KeEg2UAI4YYjPoE2okj8p3mxs55JsA/WBosh/CuJ\niOMJ7RNrrBJX1h9q+G+eRbQT2GnwXyVIQNTI1KoljIhYVpVQOr1oMQ7QXIFRDnp5yrPOmG+hPv0O\ntucRYO0MoyewJDamkXPiI+hI9RQXItgFL0+CakSRxDfTsfZPqrAVVljBdenSRaPqFNPWfv36aTAR\nAoqwYZxCnNukEf9N/qP8V/16d5QwMOZYwmh4QwXWZ/LRDz/8oKfFZD1VjKgmGOSgKhWz7VQ0k/9j\n70zgbxur///4maXM83SNmceLK+QiylCXSIV0JcONyJDhmi7XeIWQocgQIckU/jILZZ5lzpCUmRSS\n2v/1Xqxjf/d3n32mfc7Ze5+1Xq/z/Z6z97Of/TxrD+tZ02eBomP90phVKGg7ku8V8FM6tc4BSZwO\nXANAmp0+4gC1DLmnykK4GMBy3WCDDYYMuQgCHm2Rgsxo40C4of3gQwMEnPqaWURMAbEE/LcP74VB\nFI7wiWeUZ5VntnDUSZ5J1RBysnghD4Tm6MgFRH3UOnlpyazyEtLkZNpISkat7hpJ140SoO38lPSh\njp6YW2xT6f73K8+RXFTq3Qn0X+l45gPO5gB1JKkH2W8CJAFwhDiRgwi4gVh84puHfd9tt90UuKDs\nOYvDJtbBBp5Vnlme3byI96+DAOTFzR7000wCNMMQX5mievRgSF07Rb+EI2gjFIwF5szpEw6QSB6v\nC8keEssRONyXApSvxZFBrYHYJn5vhXazOpG6Q/5QE1HAwxUgQLRRRZyRYJ5a0WKxhig82/HHH6+J\n9xzHefjNRzQm6yoCOo0+WBACI8fiEuL8HGMLUL6LX06LHA
 uubHTFFVe0DJ5RO2kHX6hLKcF10dix\nY4f1suSSS0Z86hGJ7xSm5sWNIAWBK86LesdVfTvPKs8sz25elIdwdLOqcLFX1EwCNGMh/2fcuHG9\nGlZlzoO5Gt4BcJxWoqkyE21hIiJkgqAuqV8MUyAkcGzKI3mRB8EYDdQlJEAEgGgS0jH9k7tLbi4R\nrIBwY5aFCJ4gtQgeE9xz7rnnBgD46QO/GyZDIoQJTiE/V6DO9DiBvwuC/arbHn/8cTUpUu+RsP5L\nL7007Ljjjlr5ArB/EdqBskzrrLNOuPfee/V4gZjT83JdqccoBZFbBs/Qjj7+Q/4wwVpZn7Q0AwKF\nAOZgjklizqReyQs+uUt/wxvMiIJdq/wh34/kfllIprYflI1cU+4nnl2e4cJQJ5J6kMyqnfCpmWOl\neKlWQQdkWgRjM4cUuk0/NEepkBLNOuusQ+DJCs2kHg4OLFKAuuME2LWgQNU0PoDLAf1eddVVa9uA\nW5MoVoU8tGNFcCqIdBx8W8q8qUaEVgexT15yQ/CF0fbYJohS2kbqEepvcF9xIQAPh2YGicDVfXGg\naonmVNB1bRD7w/G4LET41LbyDBmgem1j7ItU7ND+GU+9DzB6SbI5UGwgSRKxqn3ZHJL7478ZqyxW\nVAuV/Oga8Hq8zSB9B1KQZ5dnOA/imnZqVnXNUbhYBBKzl67UWa3GS2UVYWxlGIOYZrROIBXS4/Bk\nZRh7L8aYpklT0mnhhRfWIDDGQDoB+Y4Gc8g2YOTQ0khbMIK/giWscGy2jYhDtpGC1CxxLggNkjQm\norTlBanb0sbLjjhSlDaUP+2AZ4gZVyMkiZKs90mrwyhmUT1t2jjQ0hk3Wm4jgldokZS2YyxiWm50\nSKX3c0/x7FLrk2e5COTCsQhXQcZw4YUXKs4qkXC8tJxa4wCoLpgLSfx3ap8DaUIJMACirbMIIUo+\nIhGmzRJuBqiZAr/WZ5pQioNn0K4Z8
 Ayiwht9EGBJYqEApfGD+4/o1Vbmg/kYPogWnTzVwP3m2YWH\nUnWlEHMffvULMazBHETai2kwOdH6rCXYRDWQLAi/1nsdvCPShA9cqLfdOCRVKlQDoiBwNyltHO2A\nZ5CGwZizSKJStchxvA3CES0nzR+Jv8yKBsSPyfqOtizlqFSoZrUbhH08u1gRpNSf5n/2e86lFo5l\nQNFIXuBGSCXJ9r3+zQvjlltuUaxY8rekjl7hK1lwH9x8881B/EG9Zpef72MOEOCCOWzjjTfWLaZ1\n5WkiQzBiukwjksknTJigH6qYNALPIPgoTfuL9w3coxQ8j29Ss6nUulQ8ZQJzTPsl2AjtD8zlVoiA\nIPrhWXMKQWIuFDKTZxoozX5Sqc2qRUfRSLuwRUYqkYAIjZ4D3gr0D14gYLvy8BaZAGpn9Z1MGC/y\nmHs9NhY9JFsDVQZJ0IMKh6T2BHCFpBwMGR5CJCnk6Oexxx6rtcOsjaZlwhHz4ogRI9RdQLI7EarA\nIUJSMFjvKRNOaRGKNq74PiJE8c/x4nzmmWeGCLdWwTPwjRIJm/Wx6je1SX78hYT/N998MzBnIyJP\ngX+TwCfbpP/xW/LCh6jgIwFLNTQYrgG/idI0X6s2HOA/PMM8y1Z8oa+s6CQyqAjRqs1EhnUyx7yP\nJSpLAgCGdXvOOecM29bLDeSVyeo1EmFYOy0RhEQBCtxVbVuzX3oZrSqpBhEV052Gc4B77cQTT4xE\nk9JISnlZRyJYIgF+1t9i1ovE3x2JryeiUru8jDSf0PIWSdBm24wzzhjZPSppF5GYMrUyPQXBJTUh\nkhJswwoUi3lMjyO3T9CeIrFIROKX1Hw2QDWkTJv2LSkQkQSmRB988IFOgEr34kfUfUsvvbTmYLJD\ngla0qDhjYU5JIleyV+AZROMCBsCzIdYgnRPFopMkyDcR8+NZ4h6Fl/LyV95JqkvEXJ2GcgA+8Ux3\nQvC502hVVpBt
 UxGEY9uDL9CBJDj3G/mDFw83lCDlD+EML0zxsbScHtEr4fj666/ri7rDB2HInP1H\nNgcQjqR8QIAGiEZa9wCQYEgRgRB+LMI6IYFarPWX7Kcf4Bkszk2oJ8fDbxYd8ar3gDEAvuAIOWnc\n+mgbzzKLL57tdikP4VhqnyPmPvxjhFdLvpbwI2jEJ8nLmAMxExK5Rsg4xYVx3JMygW8KX4EI91pk\nKGaiG264QZ3thLLTB+Yb8BIl70v7psQK5hzOh6mEyCqwHi3xmcgzI4GL03p4JPnKijuMHj06rLLK\nKjomQSNRsyVtRSiFMWPGaMADZbAYK5F/5vAnSAdTDf8FLUQTpAkV55g8iURsaJlllhnSrazc1XwF\nH+FX0Uhy5vRafulLXyra0AZiPBa9WW+yVF+wqih5lMCiCHk9wjxJubdeUiNzqKV+2JgACuDjVJ8D\nBHXxfubZ7ie+dGmFIygaFGfFNi2JwiocEZSEA+MY5yF54oknAg8TRTWxZfMCJXADpz4+AgQgghKw\nYME81BBihCr7xZyoyB30Q5rFZpttpgIWYYHvBuFIXpiYhjSEfamlllJUD/wrIIcgTMjbIY+J0kkE\nLCDQ2IbwM3+GIX88+eSTivwhJiONXGM8jz76qApji2JFuILgz7jTCBBzBHoWEdQAKkmSLJQ8ifxh\nDzLjKyKxCFl++eX1WhRxfFUcE3mBLCbxTyZf/r2eL88JPnKEFJ9GwrrX4/Pztc4BUtl4pnm2+ykc\nS21WTUPRwP4vlyMS539NI5cEZd0mDvTatv3331/xDc3MI7BP2gZTsRE+DHwy+EkMfQNfCL/jBEKH\nlF+pbRJBo32lIX+kIZWkIX8YEsfpp59e6xfMSs5fj2zuzL/ex8xhyT4YK6aMJIFtSV9SYzK5K/N3\nr8yqsmBQ/03mYHxnbhw477zzFGmHe0IWgZEE1+TWdzsdgU8qCz4F+88y77bTtx/TPw5IZaKIZ
 7td\n4v7s0NVyUamjVU2jEkbUyMwucfMgWIzQcsstV2tHiRgi4tC2IHKXIFYsRoRyo4miWcYRQmx/vf95\nIH96ssnaAABAAElEQVQQ9YdJltQPuUH0VOeff75qqvXOC75lPbQP247Wm0b1NAC0aKiI+YPi69GU\nEzN7p83Lt+XLAe5LIk+J1gThxZ6tfM/SfG8OntE8r8rUkmf6gQceUNdUv8ZdauHYLNPShKj5Pyyc\nvF5fhKRDvUb+wPyJOZhweUy00PXXX5+ZrkBuWSPUD/anEeYoBKGF0Fsb/KoQINVFI8zOCMiRI0cW\nbWiVHQ+LT0z/9ql3P/WSAWnPdy/P7+fKnwNSEkyfbZ7xflFpfY6tMAxBU4+y9nEMPkSo2wmpaePY\naqutggA6q/+UnDH8mpZcrYNK/Ln77rtVgCY2D/lJUFIaZiRaKkQgEJXNjSzPrIjCEW0evlFJwqka\nHCC4jRxEgtbWW2+9IGDehZ8YuZdo0wTdJYnFZtlANZJz6Mdv3rc82zzjraIO5TXegdAcO2GWpFkE\nVjFmVkQ4JROiO+mfY7kJzHwZ70uqIQSpcaYRrWiRoIBkEUEzBChlfeKJy/G+QP1gBU7pojiRJI2p\n2TTo+L5+f+fBwYTtmkO/r0R+53/44YeD+Io0kM1cHvn1nm9PWJMotcSL3KK942coK6hGfA79+s4z\nTXBgK+6svMdaauFoJkDTbmCOmQFtH9uIqoPiyB9mTk0KOh5OI6lMHdDGpAirbQrrr7++1hw766yz\nNMWB/5KPo1Gi+GEg6zs+LuuAceH3I9rPKAv5gzp3mLLoC80xi9A0sxA/2Gd1+ZL9IPzFCR6OOeaY\nmo8T3pC+Am6pwWQlj+vn7+eeey6MEI3aqTockMCwIMFfpZgQ9x/R6pKzOGy8pJkR4U7sA5HtRNIC\nLSfgAcHqag47yDcM4QAWIXjcLyqtcOQlLzXVlG+kZVx11VWaLoGwgghk
 YdVB6gapHtAhhxyieYKk\nVUgUqG4jqMDSGNggKBd6M3MDk3pBMdd1111X2/KHXD/wRknFILcS3wuaJdoVWhnaG/BSECvgE044\nQfMgeYAoHIuJBaEj0bKa80g7+iTohn7wL1pwEPtIFyGceezYsfzsKiEYCbggnYWxwl+prxZ4YRWR\nyFlNpp4UcZw+ptY4YK4DLCpFJp5/AvvSCNMwuKnxKjG4NEjFosC0LaDTjvVtH3GAZ5tnvF9UWp8j\n0UyG1RhnHhFOcWL1gcaUJARknPAbQGiGmDK5KAjO5ANKVCfHYlIBUR8ih9ISnflN0j+fOBEARDQp\nnyThq0AzRDtDGCYJ4IFWAY2TfTTzm7lSSxITL+MhWrfIxAvGrkGRx1nEsbEYM18YL21e8vj4jFjk\nCbRZkHQpzYsFDCNOBIrxzICnKmk7mlPMIo/ALrQmzPM8J5///Od1MWnHEvlNbrEUI9bzk+gNUDhm\n/WaCewhKY2FMfjCgG3GAccyYLJL5T51KFnXdjhWweSX/m5k1HjVPm6KDaiTn0c/fKAmtBELmPdbS\nCse8GRHvjyT9RkEe8ZdyXDDG+2nlu6WgJI+Raub6gKOh9op4WRZdMMILhKObVdu7K7AIcI+zELzn\nnnvUlGnCEeAKgCbwtxOQtvbaa6sgRKDhtsACAzgGyE34t7l30ZII9ELwSS6k+oKx6GAhYR+L2V/+\n8pe6OMRygvuCSGMELAsyLDS0syjy5Kxoi7kVKw7WjcMOO0xBQBDwBIsJrJwG72ApQsgKPqd2UU84\nIrjT/Pzx8wIE0i6ogFmjkpaNooNqxOff7+8Ix36aVV04fnwHkAcI8ZD1m9B0edGw6uRhpzqG03AO\nIBzjJujhLXxLGgfQGoFaM8sLqTCY0o2oxg6EF5YEFh+4DIgeRThi2aC6BDX3iGxGECKMEJpocZji\ngURkG9/R8ND2EI74xCnmjZDEv20+dMHvDQKEHqh
 Yg489jTDzo2EKyLnuPv7441Vw4cKgT8aBVcfy\ndbH6oPnWI9CyKDOVRfTRrn8QyxOLTILq4sTCG8J945TNAZ5tey9nt+zOXheOwldWJ0DRQfgNSWvg\nQU7e2NqgB38wSxEIhJDEN8oLymk4B3j5wCun1jiA0CN5H7MkQhLfOlGXRizIbNEBTCNCMClIgPjC\ndGmmUIQmkcPgEts2BAGaVzzikH7xKZpg5JyCYKVuA/x09YQjMQQI8XiwDnOwIDvMwmiRW2+9dUBw\nohUbGIfNK/7f3Cjxbcnv9bTYZLu03yakk/tMW7Xo9+R+//0JB3i2+xkI6MJRrgUPEStTPkadPBjW\nR7v/cfTz0HNj9PPmaHf8vTqOF60HNrTHbYJC8BFSgxBTJdqcmdLR0K699lrVFvEpIgTT/PbJM6el\n1PAcNbpGCFGBZKzrX8KaQ1oHUZ8UEEijddZZRwU85l5MuwTCZaU+mQBP6yuPbXFQjThfLJq+iHnD\necw7zz76bRly4ShXEw2xW1oioMgECfBywRTVLFnEXrPt82xHagoaxX777Zdnt7n3xUu10Ys395NW\npENMpRQLR2ujGgzBK/gBKTQL8ARaGMEyCJF6ubFJViSD12x/ve22n/QmNDlMuWlkC0TGV0840oZo\nawLqMNkSTU5gjtRbTOtSo9nj6V5pjVgYfO5zn0vb1XBbGUE1Gk6qxw14ts0M3eNT6+lKm8rRD2a1\nek7yK4naI3gAv0hZiBU6K++iE6Yry2Et+liLND6EAgEwmELxL7J4wwd2ySWXqAmU+xXzpGlX3TZd\nExxDkA6BNmmECRczKSlZyZxCfI0sQMnFZZwEFQkYumrDcUtQsl/8+FlgGewD9aZdKiOoRrtz7dZx\naNn1zNPdOme8XxeOcW7k/J0LS44iwQhlIXyc/cQzbIVPmP+s7mUrxw16WwJyTjvttBrYA9qWlXyy\nxQaA3vgZb731VoVzA+CCfb
 ywOJ5VfVLzYr/5AI3HtEPwxQkADFJBjNBM0dJMOBo4vo2FdiBEkQaC\n+RSfKAKQOAHazj///JqrTGk4CG0DczFzqkf4N7HmZH2srFy9PthuwB/JOZYRVCNrnv3Yx/XmGe8X\nuXDsAecxkTYyLfVgGA1PQW4bLx17STU8oM8N0CbiwR59Hk6pTg/fttxyS9We8NMRiYpAIUIaoYBQ\nBJSCgBw0MAQVgTsIP6I4+U/qBeka7ENQgSjFcfgz0fBAlmLxQvQqRcGNMIGecsopGpHN4pF0EZCY\nIAp6kyoCkStMDiW00047qZmftBNSS6htSnoH44bw65GWwrkvuOACFZYGCKINuvCHsVFPEkITxW0S\nD/QpG6hGF1jUUZfcozzj/aLJZBX4UT2kNkawxRZb6FEgwbRCJM0TBIMpJA9iClkJzTyorDbxsRDh\nSA5UfEXS7YRm+ITpKKnlZCU0N5pTHnyL9wHgMxG6XBNedJTHij/o8bbNfMeMzHVG+0gDNmimj0Zt\nMAciyLt5jkZjKOt+tDfMkFxjNK8koSHGrxtaYjywJNm+2d8IOVI2EGw8D+RIYjZtlniWKejNSzPu\nj2I+LELxMzLOennDzZ4nz3ZlAdXIc86d9sX9x31BCtFGG23UcncoI8glgs7apF9XQnMkoVmKFevK\nUYoOK+SZMYRVrYWXE3zAQ7T66qvrypYLQAg7kWOsOEGvwUfIKpCHDyg3fC8kRLN6XnPNNWvYpET3\nLbvssnq8FH1VHw5oIvQxevRohYyzMST/82IAVgoUGl7urKwJRWeVbpQ1J2tj/4nkYxWf9UkCitux\n9p+cNFbe8Rei7Svqf6IoIUu4Luo4izguBAlBaGmCkfEm74M8BGOSD0R0tiIYOR4/KGkgccHIdgtg\nI8m+SIKRsZUFVIOxFoXsmbZnvC/jQnNsl0QqR3xaJUnAjcR00+phqe1l9RuJbyESAVPbLwEFte/i\nsI/Ej
 BPJClm3CbwcmnJEhXsjeZgiSZ+IJOFUN4kmEkkIeiS+wto28Z1E8jKJ4n2L4NQq5AImbF1F\nEumn/YtPp7YNHkmoeu23JFFHop3VfssKWo+RaD3d1mhOtQM//iI5YHo886r3YT71SLTqaMKECbXd\nu+++u1Z7r21o44uYnHQs8LJbJCvySF7ikQRqdOsU3m/OHBCrjT4zsjDNuWfvrkoc4Jnm2eYZb4d4\nD4rm2M6hdsxFpdccUZ8toRkND4onNOPTAAmfHC6c5phfIVuZ8J3Va54JzaxicfjXIxKa8e2R0MwH\n3NR4QnOjOSX7RVsFSSLrY0EOyWPJIUNrBuarbITvisTwepVGyjafqo8Xawv5k/L20RSLJA5y1efv\n82ueAzzTPNs84/2iSuQ58nLHtpyW0AxzEYxAVIGBSoI9hL8li9LMSL1KaGZcWXNKjhthbGal5L5G\nv0VLVJ6QOG3EwoGFBKH9YLoSIVhUIhLYFkVFHaOP6yMO4EKI+4/SnjHnlXMADiAcCQDrJ1VCOGYl\nNBPxNHr0aM3n4uEkIrMZqhddWm+79UngAkEOnSQ001fWnOxc9h+oOYJ7sgi/B3itSQL13kLgbR9a\nJlrorrvuqv6dIgtH/MBERZKnlwR5tvn4/2JwoGi+wGJwxUeR5ADPMjmmYPj2k0ovHBFGRCURgUpC\nMwDKREmi9ZDMPmHCBA2OQTBCjTTGTi9GKwnNaG2WaM15SWimxA+abtackmNE4JO0nEVolmnCkWiw\nJNGO0HvyjIpOhPXDQ+YRr51X9HFXZXztIkD1a/6kjMTzJylIbOhYzCUeuEbwHoFJWKSyKOs4Imvj\nZn8C71ZYYYWs7gZ+H88yz3S/F+WlF474L0hoJqoUrS6e0MxdRhIyKxEiT8mNIr8KIsITfxur2TwS\nmg0uKpnQzLnQxDgHY2WMJDQT4crFx9/IGIiQJdKO6EFMmllzos84kYLBZxCJhwhsUM
 zCLhx7ewcg\nZAwBqpFFpbcjq382qniQRkYOJBGvuEqMgJoD/MCIOcUjyG178n/WcTzTQNCRtsLzDrSdC8ckB4f+\n5lnmmc6jFODQnlv7VXrhyHQtoZlVIBU2LKGZfXvuuafWq6P23IYbbqiwaH/4wx+0hhyrQnBE4wnN\n+ERI3iWhmfw5fH9AQZ144ol6g5P+gVa1zTbb0L06jBG4vKR5ABCCltBsQo7EaPKz0GIJwCHXi7ac\nB80HrY4gIktopt+sObHf6RMOgLdJMja8t2oSn+z1b93igCFAUfqK5P2yUFoRZIAIyPXlvxE+UQNj\nt23J/42Og0d8qA0Zz61O9uO/P+IAz/ANN9xQDPhKi1tt538RUjkYt9zUkZhXI7lRU6dBOLCscmv7\nSJWgfack5XU05YN+xLQSiYbYUpekjpAGIjfEsOMazWnYAQXb0ItUDpuy5ItG8iKLBM

<TRUNCATED>

[02/15] madlib-site git commit: jupyter notebooks for 1.14 release

Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/3f849b9e/community-artifacts/mlp-v2.ipynb
----------------------------------------------------------------------
diff --git a/community-artifacts/mlp-v2.ipynb b/community-artifacts/mlp-v2.ipynb
deleted file mode 100644
index 145b3e2..0000000
--- a/community-artifacts/mlp-v2.ipynb
+++ /dev/null
@@ -1,3755 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Multilayer Perceptron"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 117,
-   "metadata": {
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The sql extension is already loaded. To reload it, use:\n",
-      "  %reload_ext sql\n"
-     ]
-    }
-   ],
-   "source": [
-    "%load_ext sql"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 118,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "u'Connected: gpdbchina@madlib'"
-      ]
-     },
-     "execution_count": 118,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Greenplum 4.3.10.0\n",
-    "%sql postgresql://gpdbchina@10.194.10.68:61000/madlib\n",
-    "        \n",
-    "# PostgreSQL local\n",
-    "#%sql postgresql://fmcquillan@localhost:5432/madlib\n",
-    "\n",
-    "# Greenplum 4.2.3.0\n",
-    "#%sql postgresql://gpdbchina@10.194.10.68:55000/madlib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 119,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>version</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>MADlib version: 2.0-dev, git revision: rel/v1.12-9-gf790a61, cmake configuration time: Tue Sep 19 17:56:02 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'MADlib version: 2.0-dev, git revision: rel/v1.12-9-gf790a61, cmake configuration time: Tue Sep 19 17:56:02 UTC 2017, build type: Release, build system: Linux-2.6.18-238.27.1.el5.hotfix.bz516490, C compiler: gcc 4.4.0, C++ compiler: g++ 4.4.0',)]"
-      ]
-     },
-     "execution_count": 119,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%sql select madlib.version();\n",
-    "#%sql select version();"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 1.  Create input table for classification"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 120,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "52 rows affected.\n",
-      "52 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>attributes</th>\n",
-       "        <th>class_text</th>\n",
-       "        <th>class</th>\n",
-       "        <th>state</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>[Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>[Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>[Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>[Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>[Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>[Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>[Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>[Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>[Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>[Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>[Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>[Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>21</td>\n",
-       "        <td>[Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>22</td>\n",
-       "        <td>[Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>23</td>\n",
-       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>24</td>\n",
-       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>25</td>\n",
-       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>26</td>\n",
-       "        <td>[Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>27</td>\n",
-       "        <td>[Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Alaska</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>28</td>\n",
-       "        <td>[Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>29</td>\n",
-       "        <td>[Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>30</td>\n",
-       "        <td>[Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>31</td>\n",
-       "        <td>[Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>32</td>\n",
-       "        <td>[Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>33</td>\n",
-       "        <td>[Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>34</td>\n",
-       "        <td>[Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>35</td>\n",
-       "        <td>[Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>36</td>\n",
-       "        <td>[Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>37</td>\n",
-       "        <td>[Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')]</td>\n",
-       "        <td>Iris_setosa</td>\n",
-       "        <td>1</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>38</td>\n",
-       "        <td>[Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>39</td>\n",
-       "        <td>[Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>40</td>\n",
-       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>41</td>\n",
-       "        <td>[Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>42</td>\n",
-       "        <td>[Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>43</td>\n",
-       "        <td>[Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>44</td>\n",
-       "        <td>[Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>45</td>\n",
-       "        <td>[Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>46</td>\n",
-       "        <td>[Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>47</td>\n",
-       "        <td>[Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>48</td>\n",
-       "        <td>[Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>49</td>\n",
-       "        <td>[Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>50</td>\n",
-       "        <td>[Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>51</td>\n",
-       "        <td>[Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>52</td>\n",
-       "        <td>[Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')]</td>\n",
-       "        <td>Iris_versicolor</td>\n",
-       "        <td>2</td>\n",
-       "        <td>Tennessee</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [Decimal('5.0'), Decimal('3.2'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (2, [Decimal('5.5'), Decimal('3.5'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (3, [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (4, [Decimal('4.4'), Decimal('3.0'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (5, [Decimal('5.1'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (6, [Decimal('5.0'), Decimal('3.5'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (7, [Decimal('4.5'), Decimal('2.3'), Decimal('1.3'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (8, [Decimal('4.4'), Decimal('3.2'), Decimal('1.3'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (9, [Decimal('5.0'), Decimal('3.5'), Decimal('1.6'), Decimal('0.6')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (10, [Decimal('5.1'), Decimal('3.8'), Decimal('1.9'), Decimal('0.4')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (11, [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.3')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (12, [Decimal('5.1'), Decimal('3.8'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Alaska'),\n",
-       " (13, [Decimal('5.7'), Decimal('2.8'), Decimal('4.5'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (14, [Decimal('6.3'), Decimal('3.3'), Decimal('4.7'), Decimal('1.6')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (15, [Decimal('4.9'), Decimal('2.4'), Decimal('3.3'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (16, [Decimal('6.6'), Decimal('2.9'), Decimal('4.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (17, [Decimal('5.2'), Decimal('2.7'), Decimal('3.9'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (18, [Decimal('5.0'), Decimal('2.0'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (19, [Decimal('5.9'), Decimal('3.0'), Decimal('4.2'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (20, [Decimal('6.0'), Decimal('2.2'), Decimal('4.0'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (21, [Decimal('6.1'), Decimal('2.9'), Decimal('4.7'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (22, [Decimal('5.6'), Decimal('2.9'), Decimal('3.6'), Decimal('1.3')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (23, [Decimal('6.7'), Decimal('3.1'), Decimal('4.4'), Decimal('1.4')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (24, [Decimal('5.6'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (25, [Decimal('5.8'), Decimal('2.7'), Decimal('4.1'), Decimal('1.0')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (26, [Decimal('6.2'), Decimal('2.2'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (27, [Decimal('5.6'), Decimal('2.5'), Decimal('3.9'), Decimal('1.1')], u'Iris_versicolor', 2, u'Alaska'),\n",
-       " (28, [Decimal('5.0'), Decimal('3.4'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (29, [Decimal('4.4'), Decimal('2.9'), Decimal('1.4'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (30, [Decimal('4.9'), Decimal('3.1'), Decimal('1.5'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (31, [Decimal('5.4'), Decimal('3.7'), Decimal('1.5'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (32, [Decimal('4.8'), Decimal('3.4'), Decimal('1.6'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (33, [Decimal('4.8'), Decimal('3.0'), Decimal('1.4'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (34, [Decimal('4.3'), Decimal('3.0'), Decimal('1.1'), Decimal('0.1')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (35, [Decimal('5.8'), Decimal('4.0'), Decimal('1.2'), Decimal('0.2')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (36, [Decimal('5.7'), Decimal('4.4'), Decimal('1.5'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (37, [Decimal('5.4'), Decimal('3.9'), Decimal('1.3'), Decimal('0.4')], u'Iris_setosa', 1, u'Tennessee'),\n",
-       " (38, [Decimal('6.0'), Decimal('2.9'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (39, [Decimal('5.7'), Decimal('2.6'), Decimal('3.5'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (40, [Decimal('5.5'), Decimal('2.4'), Decimal('3.8'), Decimal('1.1')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (41, [Decimal('5.5'), Decimal('2.4'), Decimal('3.7'), Decimal('1.0')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (42, [Decimal('5.8'), Decimal('2.7'), Decimal('3.9'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (43, [Decimal('6.0'), Decimal('2.7'), Decimal('5.1'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (44, [Decimal('5.4'), Decimal('3.0'), Decimal('4.5'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (45, [Decimal('6.0'), Decimal('3.4'), Decimal('4.5'), Decimal('1.6')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (46, [Decimal('6.7'), Decimal('3.1'), Decimal('4.7'), Decimal('1.5')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (47, [Decimal('6.3'), Decimal('2.3'), Decimal('4.4'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (48, [Decimal('5.6'), Decimal('3.0'), Decimal('4.1'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (49, [Decimal('5.5'), Decimal('2.5'), Decimal('4.0'), Decimal('1.3')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (50, [Decimal('5.5'), Decimal('2.6'), Decimal('4.4'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (51, [Decimal('6.1'), Decimal('3.0'), Decimal('4.6'), Decimal('1.4')], u'Iris_versicolor', 2, u'Tennessee'),\n",
-       " (52, [Decimal('5.8'), Decimal('2.6'), Decimal('4.0'), Decimal('1.2')], u'Iris_versicolor', 2, u'Tennessee')]"
-      ]
-     },
-     "execution_count": 120,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql \n",
-    "DROP TABLE IF EXISTS iris_data;\n",
-    "\n",
-    "CREATE TABLE iris_data(\n",
-    "    id serial,\n",
-    "    attributes numeric[],\n",
-    "    class_text varchar,\n",
-    "    class integer,\n",
-    "    state varchar\n",
-    ");\n",
-    "\n",
-    "INSERT INTO iris_data(id, attributes, class_text, class, state) VALUES\n",
-    "(1,ARRAY[5.0,3.2,1.2,0.2],'Iris_setosa',1,'Alaska'),\n",
-    "(2,ARRAY[5.5,3.5,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
-    "(3,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Alaska'),\n",
-    "(4,ARRAY[4.4,3.0,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
-    "(5,ARRAY[5.1,3.4,1.5,0.2],'Iris_setosa',1,'Alaska'),\n",
-    "(6,ARRAY[5.0,3.5,1.3,0.3],'Iris_setosa',1,'Alaska'),\n",
-    "(7,ARRAY[4.5,2.3,1.3,0.3],'Iris_setosa',1,'Alaska'),\n",
-    "(8,ARRAY[4.4,3.2,1.3,0.2],'Iris_setosa',1,'Alaska'),\n",
-    "(9,ARRAY[5.0,3.5,1.6,0.6],'Iris_setosa',1,'Alaska'),\n",
-    "(10,ARRAY[5.1,3.8,1.9,0.4],'Iris_setosa',1,'Alaska'),\n",
-    "(11,ARRAY[4.8,3.0,1.4,0.3],'Iris_setosa',1,'Alaska'),\n",
-    "(12,ARRAY[5.1,3.8,1.6,0.2],'Iris_setosa',1,'Alaska'),\n",
-    "(13,ARRAY[5.7,2.8,4.5,1.3],'Iris_versicolor',2,'Alaska'),\n",
-    "(14,ARRAY[6.3,3.3,4.7,1.6],'Iris_versicolor',2,'Alaska'),\n",
-    "(15,ARRAY[4.9,2.4,3.3,1.0],'Iris_versicolor',2,'Alaska'),\n",
-    "(16,ARRAY[6.6,2.9,4.6,1.3],'Iris_versicolor',2,'Alaska'),\n",
-    "(17,ARRAY[5.2,2.7,3.9,1.4],'Iris_versicolor',2,'Alaska'),\n",
-    "(18,ARRAY[5.0,2.0,3.5,1.0],'Iris_versicolor',2,'Alaska'),\n",
-    "(19,ARRAY[5.9,3.0,4.2,1.5],'Iris_versicolor',2,'Alaska'),\n",
-    "(20,ARRAY[6.0,2.2,4.0,1.0],'Iris_versicolor',2,'Alaska'),\n",
-    "(21,ARRAY[6.1,2.9,4.7,1.4],'Iris_versicolor',2,'Alaska'),\n",
-    "(22,ARRAY[5.6,2.9,3.6,1.3],'Iris_versicolor',2,'Alaska'),\n",
-    "(23,ARRAY[6.7,3.1,4.4,1.4],'Iris_versicolor',2,'Alaska'),\n",
-    "(24,ARRAY[5.6,3.0,4.5,1.5],'Iris_versicolor',2,'Alaska'),\n",
-    "(25,ARRAY[5.8,2.7,4.1,1.0],'Iris_versicolor',2,'Alaska'),\n",
-    "(26,ARRAY[6.2,2.2,4.5,1.5],'Iris_versicolor',2,'Alaska'),\n",
-    "(27,ARRAY[5.6,2.5,3.9,1.1],'Iris_versicolor',2,'Alaska'),\n",
-    "(28,ARRAY[5.0,3.4,1.5,0.2],'Iris_setosa',1,'Tennessee'),\n",
-    "(29,ARRAY[4.4,2.9,1.4,0.2],'Iris_setosa',1,'Tennessee'),\n",
-    "(30,ARRAY[4.9,3.1,1.5,0.1],'Iris_setosa',1,'Tennessee'),\n",
-    "(31,ARRAY[5.4,3.7,1.5,0.2],'Iris_setosa',1,'Tennessee'),\n",
-    "(32,ARRAY[4.8,3.4,1.6,0.2],'Iris_setosa',1,'Tennessee'),\n",
-    "(33,ARRAY[4.8,3.0,1.4,0.1],'Iris_setosa',1,'Tennessee'),\n",
-    "(34,ARRAY[4.3,3.0,1.1,0.1],'Iris_setosa',1,'Tennessee'),\n",
-    "(35,ARRAY[5.8,4.0,1.2,0.2],'Iris_setosa',1,'Tennessee'),\n",
-    "(36,ARRAY[5.7,4.4,1.5,0.4],'Iris_setosa',1,'Tennessee'),\n",
-    "(37,ARRAY[5.4,3.9,1.3,0.4],'Iris_setosa',1,'Tennessee'),\n",
-    "(38,ARRAY[6.0,2.9,4.5,1.5],'Iris_versicolor',2,'Tennessee'),\n",
-    "(39,ARRAY[5.7,2.6,3.5,1.0],'Iris_versicolor',2,'Tennessee'),\n",
-    "(40,ARRAY[5.5,2.4,3.8,1.1],'Iris_versicolor',2,'Tennessee'),\n",
-    "(41,ARRAY[5.5,2.4,3.7,1.0],'Iris_versicolor',2,'Tennessee'),\n",
-    "(42,ARRAY[5.8,2.7,3.9,1.2],'Iris_versicolor',2,'Tennessee'),\n",
-    "(43,ARRAY[6.0,2.7,5.1,1.6],'Iris_versicolor',2,'Tennessee'),\n",
-    "(44,ARRAY[5.4,3.0,4.5,1.5],'Iris_versicolor',2,'Tennessee'),\n",
-    "(45,ARRAY[6.0,3.4,4.5,1.6],'Iris_versicolor',2,'Tennessee'),\n",
-    "(46,ARRAY[6.7,3.1,4.7,1.5],'Iris_versicolor',2,'Tennessee'),\n",
-    "(47,ARRAY[6.3,2.3,4.4,1.3],'Iris_versicolor',2,'Tennessee'),\n",
-    "(48,ARRAY[5.6,3.0,4.1,1.3],'Iris_versicolor',2,'Tennessee'),\n",
-    "(49,ARRAY[5.5,2.5,4.0,1.3],'Iris_versicolor',2,'Tennessee'),\n",
-    "(50,ARRAY[5.5,2.6,4.4,1.2],'Iris_versicolor',2,'Tennessee'),\n",
-    "(51,ARRAY[6.1,3.0,4.6,1.4],'Iris_versicolor',2,'Tennessee'),\n",
-    "(52,ARRAY[5.8,2.6,4.0,1.2],'Iris_versicolor',2,'Tennessee');\n",
-    "\n",
-    "SELECT * FROM iris_data ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "#  2. Classification model\n",
-    "\n",
-    "Generate a multilayer perceptron with a single hidden layer of 5 units. Use the attributes column as the independent variables, and use the class column as the classification. Set the tolerance to 0 so that 500 iterations will be run. Use a hyperbolic tangent activation function. The model will be written to mlp_model."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 121,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>mlp_classification</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td></td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[('',)]"
-      ]
-     },
-     "execution_count": 121,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;\n",
-    "\n",
-    "-- Set seed so results are reproducible\n",
-    "SELECT setseed(0);\n",
-    "\n",
-    "SELECT madlib.mlp_classification(\n",
-    "    'iris_data',      -- Source table\n",
-    "    'mlp_model',      -- Destination table\n",
-    "    'attributes',     -- Input features\n",
-    "    'class_text',     -- Label\n",
-    "    ARRAY[5],         -- Number of units per layer\n",
-    "    'learning_rate_init=0.003,\n",
-    "    n_iterations=500,\n",
-    "    tolerance=0',     -- Optimizer params\n",
-    "    'tanh',           -- Activation function\n",
-    "    NULL,             -- Default weight (1)\n",
-    "    FALSE,            -- No warm start\n",
-    "    FALSE             -- Not verbose\n",
-    ");"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 3.  View the classification model"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 122,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>coeff</th>\n",
-       "        <th>loss</th>\n",
-       "        <th>num_iterations</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>[0.418378455147, 0.0769385374681, -0.146527483484, 0.998888382223, 1.12987089952, -0.437290718473, -0.409273157364, 0.498986904082, -0.544260518783, -0.0914464021734, 0.0390525613337, 0.288450666036, -0.327040616284, 0.16574382417, 0.872753267348, 0.675971654762, 0.318207842514, 0.290765083843, -0.468849343505, 0.288355834648, -0.773220988598, -0.277246576994, -0.676925299898, 0.669871211106, -0.391874491507, 0.0738458598585, -1.85544863789, -0.0153495613681, -0.111982901002, -0.225221594881, -0.217849875552, 0.392310858189, 1.37852218837, -1.08667184295, 1.29050890203, -0.251494108369, 0.229914016792]</td>\n",
-       "        <td>0.0105868627707</td>\n",
-       "        <td>500</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[([0.418378455147, 0.0769385374681, -0.146527483484, 0.998888382223, 1.12987089952, -0.437290718473, -0.409273157364, 0.498986904082, -0.544260518783, -0.0914464021734, 0.0390525613337, 0.288450666036, -0.327040616284, 0.16574382417, 0.872753267348, 0.675971654762, 0.318207842514, 0.290765083843, -0.468849343505, 0.288355834648, -0.773220988598, -0.277246576994, -0.676925299898, 0.669871211106, -0.391874491507, 0.0738458598585, -1.85544863789, -0.0153495613681, -0.111982901002, -0.225221594881, -0.217849875552, 0.392310858189, 1.37852218837, -1.08667184295, 1.29050890203, -0.251494108369, 0.229914016792], 0.0105868627707, 500)]"
-      ]
-     },
-     "execution_count": 122,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM mlp_model;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 4.  Classification with n_tries\n",
-    "Now, use the n_tries optimizer parameter to learn and choose the best model among n_tries number of models learned by the algorithm. Run only for 100 iterations and choose the best model from this short run."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 123,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>mlp_classification</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td></td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[('',)]"
-      ]
-     },
-     "execution_count": 123,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS mlp_model, mlp_model_summary, mlp_model_standardization;\n",
-    "\n",
-    "-- Set seed so results are reproducible\n",
-    "SELECT setseed(0);\n",
-    "\n",
-    "SELECT madlib.mlp_classification(\n",
-    "    'iris_data',      -- Source table\n",
-    "    'mlp_model',      -- Destination table\n",
-    "    'attributes',     -- Input features\n",
-    "    'class_text',     -- Label\n",
-    "    ARRAY[5],         -- Number of units per layer\n",
-    "    'learning_rate_init=0.003,\n",
-    "    n_iterations=50,\n",
-    "    tolerance=0,\n",
-    "    n_tries=3',       -- Optimizer params, with n_tries\n",
-    "    'tanh',           -- Activation function\n",
-    "    NULL,             -- Default weight (1)\n",
-    "    FALSE,            -- No warm start\n",
-    "    FALSE             -- Not verbose\n",
-    ");"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 5.  View the classification model with n_tries"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 124,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>coeff</th>\n",
-       "        <th>loss</th>\n",
-       "        <th>num_iterations</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>[0.386129091572, 0.0230804544453, 0.0360373350657, 0.85734404404, 1.00624019669, -0.511165317414, -0.256735693588, 0.424597795202, -0.344940825214, 0.105701317173, -0.0239838319549, 0.19433093383, -0.198067795405, -0.00423615288994, 0.714494593542, 0.67620771672, 0.31692178694, 0.291634997959, -0.470338692309, 0.286903795447, -0.797640757541, -0.36833411352, -0.623711536473, 0.556232364597, -0.501937062704, 0.0664559736029, -1.29169165842, -0.39640660159, 0.349410636066, -0.266301858512, -0.12933320224, 0.399700744444, 0.814765208894, -0.705614802744, 0.829115365015, -0.210413844738, 0.14139734348]</td>\n",
-       "        <td>0.169187585083</td>\n",
-       "        <td>50</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[([0.386129091572, 0.0230804544453, 0.0360373350657, 0.85734404404, 1.00624019669, -0.511165317414, -0.256735693588, 0.424597795202, -0.344940825214, 0.105701317173, -0.0239838319549, 0.19433093383, -0.198067795405, -0.00423615288994, 0.714494593542, 0.67620771672, 0.31692178694, 0.291634997959, -0.470338692309, 0.286903795447, -0.797640757541, -0.36833411352, -0.623711536473, 0.556232364597, -0.501937062704, 0.0664559736029, -1.29169165842, -0.39640660159, 0.349410636066, -0.266301858512, -0.12933320224, 0.399700744444, 0.814765208894, -0.705614802744, 0.829115365015, -0.210413844738, 0.14139734348], 0.169187585083, 50)]"
-      ]
-     },
-     "execution_count": 124,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM mlp_model;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 6. Classification with warm start\n",
-    "Next, use the warm_start parameter to start learning a new model, using the coefficients already present in mlp_model. Note that we must not drop the mlp_model table, and cannot use the n_tries parameter if warm_start is used."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 126,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>mlp_classification</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td></td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[('',)]"
-      ]
-     },
-     "execution_count": 126,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT madlib.mlp_classification(\n",
-    "    'iris_data',      -- Source table\n",
-    "    'mlp_model',      -- Destination table\n",
-    "    'attributes',     -- Input features\n",
-    "    'class_text',     -- Label\n",
-    "    ARRAY[5],         -- Number of units per layer\n",
-    "    'learning_rate_init=0.003,\n",
-    "    n_iterations=450,\n",
-    "    tolerance=0',     -- Optimizer params\n",
-    "    'tanh',           -- Activation function\n",
-    "    NULL,             -- Default weight (1)\n",
-    "    TRUE,             -- Warm start\n",
-    "    FALSE             -- Not verbose\n",
-    ");"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 7.  View the classification model with warm_start\n",
-    "Notice that the loss is lower compared to the previous example run of 500 iterations without n_tries, despite having the same values for every other parameter. This is because the algorithm learnt three different models starting with a different set of initial weights for the coefficients, and chose the best model among them."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 127,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>coeff</th>\n",
-       "        <th>loss</th>\n",
-       "        <th>num_iterations</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>[0.43089489035, 0.0840880267225, -0.180463790458, 1.02521696861, 1.15327056306, -0.425505368961, -0.445320886704, 0.51333393744, -0.594555309569, -0.140856773835, 0.0616746727506, 0.306834150297, -0.359872964248, 0.206830852263, 0.911186393447, 0.675568040494, 0.316470613819, 0.291871023206, -0.471193550262, 0.286075681893, -0.759796508813, -0.252763378948, -0.690187333341, 0.70213228757, -0.360741864941, 0.0646874010451, -1.97963455591, 0.0877591861911, -0.220936503136, -0.222359882677, -0.244113625762, 0.401469317001, 1.50270810639, -1.18978059055, 1.39946250414, -0.254355820573, 0.256177767002]</td>\n",
-       "        <td>0.00513279402477</td>\n",
-       "        <td>450</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[([0.43089489035, 0.0840880267225, -0.180463790458, 1.02521696861, 1.15327056306, -0.425505368961, -0.445320886704, 0.51333393744, -0.594555309569, -0.140856773835, 0.0616746727506, 0.306834150297, -0.359872964248, 0.206830852263, 0.911186393447, 0.675568040494, 0.316470613819, 0.291871023206, -0.471193550262, 0.286075681893, -0.759796508813, -0.252763378948, -0.690187333341, 0.70213228757, -0.360741864941, 0.0646874010451, -1.97963455591, 0.0877591861911, -0.220936503136, -0.222359882677, -0.244113625762, 0.401469317001, 1.50270810639, -1.18978059055, 1.39946250414, -0.254355820573, 0.256177767002], 0.00513279402477, 450)]"
-      ]
-     },
-     "execution_count": 127,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM mlp_model;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 8. Classification with grouping\n",
-    "Next, group the training data by state, and learn a different model for each state."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 128,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>mlp_classification</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td></td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[('',)]"
-      ]
-     },
-     "execution_count": 128,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS mlp_model_group, mlp_model_group_summary, mlp_model_group_standardization;\n",
-    "\n",
-    "-- Set seed so results are reproducible\n",
-    "SELECT setseed(0);\n",
-    "\n",
-    "SELECT madlib.mlp_classification(\n",
-    "    'iris_data',        -- Source table\n",
-    "    'mlp_model_group',  -- Destination table\n",
-    "    'attributes',       -- Input features\n",
-    "    'class_text',       -- Label\n",
-    "    ARRAY[5],           -- Number of units per layer\n",
-    "    'learning_rate_init=0.003,\n",
-    "    n_iterations=50,\n",
-    "    tolerance=0,\n",
-    "    n_tries=3',         -- Optimizer params, with n_tries\n",
-    "    'tanh',             -- Activation function\n",
-    "    NULL,               -- Default weight (1)\n",
-    "    FALSE,              -- No warm start\n",
-    "    FALSE,              -- Not verbose\n",
-    "    'state'             -- Grouping column\n",
-    ");"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 9.  View the classification model with grouping\n",
-    "A separate model is learnt for each state, and the result table displays the name of the state (grouping column) associated with the model."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 129,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "2 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>state</th>\n",
-       "        <th>coeff</th>\n",
-       "        <th>loss</th>\n",
-       "        <th>num_iterations</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>Alaska</td>\n",
-       "        <td>[0.361442205117, 0.0437833983169, 0.0228267239333, 0.86051976995, 1.00898866341, -0.509493068163, -0.259717661563, 0.423128001757, -0.348520276299, 0.102569227429, -0.023820253367, 0.194242907683, -0.194973841963, -0.00354279848888, 0.715171987578, 0.679803198566, 0.30085527398, 0.290398225819, -0.481339584921, 0.273581567191, -0.798021118384, -0.364181329645, -0.631718355895, 0.568550659826, -0.492243523831, 0.0678832140837, -1.29021370112, -0.396961890891, 0.347728139082, -0.247139454296, -0.165073883437, 0.398273503965, 0.813287251616, -0.705059513443, 0.830797861999, -0.229576248952, 0.177138024677]</td>\n",
-       "        <td>0.169694760351</td>\n",
-       "        <td>50</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>Tennessee</td>\n",
-       "        <td>[0.286460719233, -0.391554641774, 0.647611140251, -0.670341290996, 0.111261651571, -0.323445227135, -0.362568050061, 0.556843820772, 0.542593756362, -0.849092718814, 0.639022610897, 0.289608013322, -0.771514626336, -0.225524049129, 0.55654170876, 0.699286372946, -0.0971044516431, -0.856859889972, -0.53385894952, 0.181718585915, -0.635491855087, -0.334708753092, 0.676444860354, 0.798824989025, 0.712555678327, -0.362929653511, 0.347434351706, 0.177418782808, 0.225111014926, 0.178241297519, -0.0229063368163, 0.0404201612098, -1.12689954392, -0.523963295766, 1.0563791555, 0.642674420838, 0.742594634114]</td>\n",
-       "        <td>0.159575522026</td>\n",
-       "        <td>50</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'Alaska', [0.361442205117, 0.0437833983169, 0.0228267239333, 0.86051976995, 1.00898866341, -0.509493068163, -0.259717661563, 0.423128001757, -0.348520276299, 0.102569227429, -0.023820253367, 0.194242907683, -0.194973841963, -0.00354279848888, 0.715171987578, 0.679803198566, 0.30085527398, 0.290398225819, -0.481339584921, 0.273581567191, -0.798021118384, -0.364181329645, -0.631718355895, 0.568550659826, -0.492243523831, 0.0678832140837, -1.29021370112, -0.396961890891, 0.347728139082, -0.247139454296, -0.165073883437, 0.398273503965, 0.813287251616, -0.705059513443, 0.830797861999, -0.229576248952, 0.177138024677], 0.169694760351, 50),\n",
-       " (u'Tennessee', [0.286460719233, -0.391554641774, 0.647611140251, -0.670341290996, 0.111261651571, -0.323445227135, -0.362568050061, 0.556843820772, 0.542593756362, -0.849092718814, 0.639022610897, 0.289608013322, -0.771514626336, -0.225524049129, 0.55654170876, 0.699286372946, -0.0971044516431, -0.856859889972, -0.53385894952, 0.181718585915, -0.635491855087, -0.334708753092, 0.676444860354, 0.798824989025, 0.712555678327, -0.362929653511, 0.347434351706, 0.177418782808, 0.225111014926, 0.178241297519, -0.0229063368163, 0.0404201612098, -1.12689954392, -0.523963295766, 1.0563791555, 0.642674420838, 0.742594634114], 0.159575522026, 50)]"
-      ]
-     },
-     "execution_count": 129,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM mlp_model_group ORDER BY state;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 10.  Classification with warm start and grouping\n",
-    "Next use warm_start to improve the models that are already present in the mlp_model_group table. Note again that we cannot use n_tries with warm_start, and the model table must already be present."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 130,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>mlp_classification</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td></td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[('',)]"
-      ]
-     },
-     "execution_count": 130,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT madlib.mlp_classification(\n",
-    "    'iris_data',        -- Source table\n",
-    "    'mlp_model_group',  -- Destination table\n",
-    "    'attributes',       -- Input features\n",
-    "    'class_text',       -- Label\n",
-    "    ARRAY[5],           -- Number of units per layer\n",
-    "    'learning_rate_init=0.003,\n",
-    "    n_iterations=450,\n",
-    "    tolerance=0',       -- Optimizer params\n",
-    "    'tanh',             -- Activation function\n",
-    "    NULL,               -- Default weight (1)\n",
-    "    TRUE,               -- Warm start\n",
-    "    FALSE,              -- Not verbose\n",
-    "    'state'             -- Grouping column\n",
-    ");"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 11. View the classification model with warm start and grouping\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 132,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "2 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>state</th>\n",
-       "        <th>coeff</th>\n",
-       "        <th>loss</th>\n",
-       "        <th>num_iterations</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>Alaska</td>\n",
-       "        <td>[0.372342289818, 0.0954960560128, -0.153810124763, 1.00725097032, 1.13495556432, -0.429533598061, -0.409198527269, 0.478752722727, -0.551271316257, -0.0950828556324, 0.0237081636546, 0.297325734546, -0.307808869913, 0.17901470615, 0.882685356116, 0.67682803433, 0.28787018652, 0.297557142865, -0.499522323052, 0.256295844717, -0.768404886254, -0.266707916954, -0.676330194506, 0.699875226902, -0.36878024444, 0.0723594672762, -1.86161184866, -0.0295697622013, -0.116698438374, -0.188190989233, -0.253894999257, 0.393797250761, 1.38468539912, -1.07245164218, 1.29522443949, -0.288524714015, 0.265959140497]</td>\n",
-       "        <td>0.0106816837098</td>\n",
-       "        <td>450</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>Tennessee</td>\n",
-       "        <td>[0.101408120906, -0.504692476376, 0.754172746712, -0.859366119317, -0.0883419348625, -0.322217245475, -0.488849126018, 0.640836955763, 0.379240951714, -1.01591620805, 0.561633386233, 0.474881549745, -0.820848160685, -0.0367588935663, 0.756738298906, 0.690992107944, -0.0117938780722, -0.911609074051, -0.417367078805, 0.303153350896, -0.502205494032, -0.262138409583, 0.531455906745, 0.931199625293, 0.837077534104, -0.383150148885, 0.722094737958, 0.54110242729, -0.140304542646, 0.107821427424, -0.229319721716, 0.0606406565821, -1.50155993006, -0.887646940248, 1.42179471312, 0.713094290933, 0.949008019012]</td>\n",
-       "        <td>0.00853723754598</td>\n",
-       "        <td>450</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(u'Alaska', [0.372342289818, 0.0954960560128, -0.153810124763, 1.00725097032, 1.13495556432, -0.429533598061, -0.409198527269, 0.478752722727, -0.551271316257, -0.0950828556324, 0.0237081636546, 0.297325734546, -0.307808869913, 0.17901470615, 0.882685356116, 0.67682803433, 0.28787018652, 0.297557142865, -0.499522323052, 0.256295844717, -0.768404886254, -0.266707916954, -0.676330194506, 0.699875226902, -0.36878024444, 0.0723594672762, -1.86161184866, -0.0295697622013, -0.116698438374, -0.188190989233, -0.253894999257, 0.393797250761, 1.38468539912, -1.07245164218, 1.29522443949, -0.288524714015, 0.265959140497], 0.0106816837098, 450),\n",
-       " (u'Tennessee', [0.101408120906, -0.504692476376, 0.754172746712, -0.859366119317, -0.0883419348625, -0.322217245475, -0.488849126018, 0.640836955763, 0.379240951714, -1.01591620805, 0.561633386233, 0.474881549745, -0.820848160685, -0.0367588935663, 0.756738298906, 0.690992107944, -0.0117938780722, -0.911609074051, -0.417367078805, 0.303153350896, -0.502205494032, -0.262138409583, 0.531455906745, 0.931199625293, 0.837077534104, -0.383150148885, 0.722094737958, 0.54110242729, -0.140304542646, 0.107821427424, -0.229319721716, 0.0606406565821, -1.50155993006, -0.887646940248, 1.42179471312, 0.713094290933, 0.949008019012], 0.00853723754598, 450)]"
-      ]
-     },
-     "execution_count": 132,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "SELECT * FROM mlp_model_group ORDER BY state;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 12. Create input data for regression\n",
-    "\n",
-    "This dataset contains housing prices."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 133,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "Done.\n",
-      "20 rows affected.\n",
-      "20 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>id</th>\n",
-       "        <th>x</th>\n",
-       "        <th>zipcode</th>\n",
-       "        <th>y</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>1</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.00632'), Decimal('18.00'), Decimal('2.310'), Decimal('0'), Decimal('0.5380'), Decimal('6.5750'), Decimal('65.20'), Decimal('4.0900'), Decimal('1'), Decimal('296.0'), Decimal('15.30'), Decimal('396.90'), Decimal('4.98')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>24.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>2</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.02731'), Decimal('0.00'), Decimal('7.070'), Decimal('0'), Decimal('0.4690'), Decimal('6.4210'), Decimal('78.90'), Decimal('4.9671'), Decimal('2'), Decimal('242.0'), Decimal('17.80'), Decimal('396.90'), Decimal('9.14')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>21.6</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>3</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.02729'), Decimal('0.00'), Decimal('7.070'), Decimal('0'), Decimal('0.4690'), Decimal('7.1850'), Decimal('61.10'), Decimal('4.9671'), Decimal('2'), Decimal('242.0'), Decimal('17.80'), Decimal('392.83'), Decimal('4.03')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>34.7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>4</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.03237'), Decimal('0.00'), Decimal('2.180'), Decimal('0'), Decimal('0.4580'), Decimal('6.9980'), Decimal('45.80'), Decimal('6.0622'), Decimal('3'), Decimal('222.0'), Decimal('18.70'), Decimal('394.63'), Decimal('2.94')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>33.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>5</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.06905'), Decimal('0.00'), Decimal('2.180'), Decimal('0'), Decimal('0.4580'), Decimal('7.1470'), Decimal('54.20'), Decimal('6.0622'), Decimal('3'), Decimal('222.0'), Decimal('18.70'), Decimal('396.90'), Decimal('5.33')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>36.2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>6</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.02985'), Decimal('0.00'), Decimal('2.180'), Decimal('0'), Decimal('0.4580'), Decimal('6.4300'), Decimal('58.70'), Decimal('6.0622'), Decimal('3'), Decimal('222.0'), Decimal('18.70'), Decimal('394.12'), Decimal('5.21')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>28.7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>7</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.08829'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.0120'), Decimal('66.60'), Decimal('5.5605'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('395.60'), Decimal('12.43')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>22.9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>8</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.14455'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.1720'), Decimal('96.10'), Decimal('5.9505'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('396.90'), Decimal('19.15')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>27.1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>9</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.21124'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('5.6310'), Decimal('100.00'), Decimal('6.0821'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('386.63'), Decimal('29.93')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>16.5</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>10</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.17004'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.0040'), Decimal('85.90'), Decimal('6.5921'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('386.71'), Decimal('17.10')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>18.9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>11</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.22489'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.3770'), Decimal('94.30'), Decimal('6.3467'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('392.52'), Decimal('20.45')]</td>\n",
-       "        <td>94016</td>\n",
-       "        <td>15.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>12</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.11747'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.0090'), Decimal('82.90'), Decimal('6.2267'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('396.90'), Decimal('13.27')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>18.9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>13</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.09378'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('5.8890'), Decimal('39.00'), Decimal('5.4509'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('390.50'), Decimal('15.71')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>21.7</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>14</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.62976'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.9490'), Decimal('61.80'), Decimal('4.7075'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('396.90'), Decimal('8.26')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>20.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>15</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.63796'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('6.0960'), Decimal('84.50'), Decimal('4.4619'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('380.02'), Decimal('10.26')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>18.2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>16</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.62739'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.8340'), Decimal('56.50'), Decimal('4.4986'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('395.62'), Decimal('8.47')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>19.9</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>17</td>\n",
-       "        <td>[Decimal('1'), Decimal('1.05393'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.9350'), Decimal('29.30'), Decimal('4.4986'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('386.85'), Decimal('6.58')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>23.1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>18</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.78420'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.9900'), Decimal('81.70'), Decimal('4.2579'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('386.75'), Decimal('14.67')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>17.5</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>19</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.80271'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.4560'), Decimal('36.60'), Decimal('3.7965'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('288.99'), Decimal('11.69')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>20.2</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>20</td>\n",
-       "        <td>[Decimal('1'), Decimal('0.72580'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.7270'), Decimal('69.50'), Decimal('3.7965'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('390.95'), Decimal('11.28')]</td>\n",
-       "        <td>20001</td>\n",
-       "        <td>18.2</td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[(1, [Decimal('1'), Decimal('0.00632'), Decimal('18.00'), Decimal('2.310'), Decimal('0'), Decimal('0.5380'), Decimal('6.5750'), Decimal('65.20'), Decimal('4.0900'), Decimal('1'), Decimal('296.0'), Decimal('15.30'), Decimal('396.90'), Decimal('4.98')], 94016, 24.0),\n",
-       " (2, [Decimal('1'), Decimal('0.02731'), Decimal('0.00'), Decimal('7.070'), Decimal('0'), Decimal('0.4690'), Decimal('6.4210'), Decimal('78.90'), Decimal('4.9671'), Decimal('2'), Decimal('242.0'), Decimal('17.80'), Decimal('396.90'), Decimal('9.14')], 94016, 21.6),\n",
-       " (3, [Decimal('1'), Decimal('0.02729'), Decimal('0.00'), Decimal('7.070'), Decimal('0'), Decimal('0.4690'), Decimal('7.1850'), Decimal('61.10'), Decimal('4.9671'), Decimal('2'), Decimal('242.0'), Decimal('17.80'), Decimal('392.83'), Decimal('4.03')], 94016, 34.7),\n",
-       " (4, [Decimal('1'), Decimal('0.03237'), Decimal('0.00'), Decimal('2.180'), Decimal('0'), Decimal('0.4580'), Decimal('6.9980'), Decimal('45.80'), Decimal('6.0622'), Decimal('3'), Decimal('222.0'), Decimal('18.70'), Decimal('394.63'), Decimal('2.94')], 94016, 33.4),\n",
-       " (5, [Decimal('1'), Decimal('0.06905'), Decimal('0.00'), Decimal('2.180'), Decimal('0'), Decimal('0.4580'), Decimal('7.1470'), Decimal('54.20'), Decimal('6.0622'), Decimal('3'), Decimal('222.0'), Decimal('18.70'), Decimal('396.90'), Decimal('5.33')], 94016, 36.2),\n",
-       " (6, [Decimal('1'), Decimal('0.02985'), Decimal('0.00'), Decimal('2.180'), Decimal('0'), Decimal('0.4580'), Decimal('6.4300'), Decimal('58.70'), Decimal('6.0622'), Decimal('3'), Decimal('222.0'), Decimal('18.70'), Decimal('394.12'), Decimal('5.21')], 94016, 28.7),\n",
-       " (7, [Decimal('1'), Decimal('0.08829'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.0120'), Decimal('66.60'), Decimal('5.5605'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('395.60'), Decimal('12.43')], 94016, 22.9),\n",
-       " (8, [Decimal('1'), Decimal('0.14455'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.1720'), Decimal('96.10'), Decimal('5.9505'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('396.90'), Decimal('19.15')], 94016, 27.1),\n",
-       " (9, [Decimal('1'), Decimal('0.21124'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('5.6310'), Decimal('100.00'), Decimal('6.0821'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('386.63'), Decimal('29.93')], 94016, 16.5),\n",
-       " (10, [Decimal('1'), Decimal('0.17004'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.0040'), Decimal('85.90'), Decimal('6.5921'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('386.71'), Decimal('17.10')], 94016, 18.9),\n",
-       " (11, [Decimal('1'), Decimal('0.22489'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.3770'), Decimal('94.30'), Decimal('6.3467'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('392.52'), Decimal('20.45')], 94016, 15.0),\n",
-       " (12, [Decimal('1'), Decimal('0.11747'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('6.0090'), Decimal('82.90'), Decimal('6.2267'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('396.90'), Decimal('13.27')], 20001, 18.9),\n",
-       " (13, [Decimal('1'), Decimal('0.09378'), Decimal('12.50'), Decimal('7.870'), Decimal('0'), Decimal('0.5240'), Decimal('5.8890'), Decimal('39.00'), Decimal('5.4509'), Decimal('5'), Decimal('311.0'), Decimal('15.20'), Decimal('390.50'), Decimal('15.71')], 20001, 21.7),\n",
-       " (14, [Decimal('1'), Decimal('0.62976'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.9490'), Decimal('61.80'), Decimal('4.7075'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('396.90'), Decimal('8.26')], 20001, 20.4),\n",
-       " (15, [Decimal('1'), Decimal('0.63796'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('6.0960'), Decimal('84.50'), Decimal('4.4619'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('380.02'), Decimal('10.26')], 20001, 18.2),\n",
-       " (16, [Decimal('1'), Decimal('0.62739'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.8340'), Decimal('56.50'), Decimal('4.4986'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('395.62'), Decimal('8.47')], 20001, 19.9),\n",
-       " (17, [Decimal('1'), Decimal('1.05393'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.9350'), Decimal('29.30'), Decimal('4.4986'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('386.85'), Decimal('6.58')], 20001, 23.1),\n",
-       " (18, [Decimal('1'), Decimal('0.78420'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.9900'), Decimal('81.70'), Decimal('4.2579'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('386.75'), Decimal('14.67')], 20001, 17.5),\n",
-       " (19, [Decimal('1'), Decimal('0.80271'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.4560'), Decimal('36.60'), Decimal('3.7965'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('288.99'), Decimal('11.69')], 20001, 20.2),\n",
-       " (20, [Decimal('1'), Decimal('0.72580'), Decimal('0.00'), Decimal('8.140'), Decimal('0'), Decimal('0.5380'), Decimal('5.7270'), Decimal('69.50'), Decimal('3.7965'), Decimal('4'), Decimal('307.0'), Decimal('21.00'), Decimal('390.95'), Decimal('11.28')], 20001, 18.2)]"
-      ]
-     },
-     "execution_count": 133,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS lin_housing;\n",
-    "\n",
-    "CREATE TABLE lin_housing (id serial, \n",
-    "                          x numeric[], \n",
-    "                          zipcode int, \n",
-    "                          y float8);\n",
-    "\n",
-    "INSERT INTO lin_housing(id, x, zipcode, y) VALUES\n",
-    "(1,ARRAY[1,0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98],94016,24.00),\n",
-    "(2,ARRAY[1,0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14],94016,21.60),\n",
-    "(3,ARRAY[1,0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03],94016,34.70),\n",
-    "(4,ARRAY[1,0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94],94016,33.40),\n",
-    "(5,ARRAY[1,0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33],94016,36.20),\n",
-    "(6,ARRAY[1,0.02985,0.00,2.180,0,0.4580,6.4300,58.70,6.0622,3,222.0,18.70,394.12,5.21],94016,28.70),\n",
-    "(7,ARRAY[1,0.08829,12.50,7.870,0,0.5240,6.0120,66.60,5.5605,5,311.0,15.20,395.60,12.43],94016,22.90),\n",
-    "(8,ARRAY[1,0.14455,12.50,7.870,0,0.5240,6.1720,96.10,5.9505,5,311.0,15.20,396.90,19.15],94016,27.10),\n",
-    "(9,ARRAY[1,0.21124,12.50,7.870,0,0.5240,5.6310,100.00,6.0821,5,311.0,15.20,386.63,29.93],94016,16.50),\n",
-    "(10,ARRAY[1,0.17004,12.50,7.870,0,0.5240,6.0040,85.90,6.5921,5,311.0,15.20,386.71,17.10],94016,18.90),\n",
-    "(11,ARRAY[1,0.22489,12.50,7.870,0,0.5240,6.3770,94.30,6.3467,5,311.0,15.20,392.52,20.45],94016,15.00),\n",
-    "(12,ARRAY[1,0.11747,12.50,7.870,0,0.5240,6.0090,82.90,6.2267,5,311.0,15.20,396.90,13.27],20001,18.90),\n",
-    "(13,ARRAY[1,0.09378,12.50,7.870,0,0.5240,5.8890,39.00,5.4509,5,311.0,15.20,390.50,15.71],20001,21.70),\n",
-    "(14,ARRAY[1,0.62976,0.00,8.140,0,0.5380,5.9490,61.80,4.7075,4,307.0,21.00,396.90,8.26],20001,20.40),\n",
-    "(15,ARRAY[1,0.63796,0.00,8.140,0,0.5380,6.0960,84.50,4.4619,4,307.0,21.00,380.02,10.26],20001,18.20),\n",
-    "(16,ARRAY[1,0.62739,0.00,8.140,0,0.5380,5.8340,56.50,4.4986,4,307.0,21.00,395.62,8.47],20001,19.90),\n",
-    "(17,ARRAY[1,1.05393,0.00,8.140,0,0.5380,5.9350,29.30,4.4986,4,307.0,21.00,386.85,6.58],20001, 23.10),\n",
-    "(18,ARRAY[1,0.78420,0.00,8.140,0,0.5380,5.9900,81.70,4.2579,4,307.0,21.00,386.75,14.67],20001,17.50),\n",
-    "(19,ARRAY[1,0.80271,0.00,8.140,0,0.5380,5.4560,36.60,3.7965,4,307.0,21.00,288.99,11.69],20001,20.20),\n",
-    "(20,ARRAY[1,0.72580,0.00,8.140,0,0.5380,5.7270,69.50,3.7965,4,307.0,21.00,390.95,11.28],20001,18.20);\n",
-    "\n",
-    "SELECT * FROM lin_housing ORDER BY id;"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 13. Regression model\n",
-    "Now train a regression model using a multilayer perceptron with 2 hidden layers of 25 nodes each."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 134,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Done.\n",
-      "1 rows affected.\n",
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>mlp_regression</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td></td>\n",
-       "    </tr>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "[('',)]"
-      ]
-     },
-     "execution_count": 134,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%sql\n",
-    "DROP TABLE IF EXISTS mlp_regress, mlp_regress_summary, mlp_regress_standardization;\n",
-    "\n",
-    "SELECT setseed(0);\n",
-    "SELECT madlib.mlp_regression(\n",
-    "    'lin_housing',    -- Source table\n",
-    "    'mlp_regress',    -- Desination table\n",
-    "    'x',              -- Input features\n",
-    "    'y',              -- Dependent variable\n",
-    "    ARRAY[25,25],     -- Number of units per layer\n",
-    "    'learning_rate_init=0.001,\n",
-    "    n_iterations=500,\n",
-    "    lambda=0.001,\n",
-    "    tolerance=0',     -- Optimizer params\n",
-    "    'relu',           -- Activation function\n",
-    "    NULL,             -- Default weight (1)\n",
-    "    FALSE,            -- No warm start\n",
-    "    FALSE             -- Not verbose\n",
-    ");"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# 14. View the regression model"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 135,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1 rows affected.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "    <tr>\n",
-       "        <th>coeff</th>\n",
-       "        <th>loss</th>\n",
-       "        <th>num_iterations</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "        <td>[0.752109182538, -0.0824025290857, 0.0410059928624, 0.337021944674, 0.65416507111, -0.235970675026, 0.105710990669, 0.0477997938709, -0.25104991458, -0.603068658656, 0.383645101517, 0.401628129242, -0.162802028669, -0.156557103874, 0.2105522042, 0.44411313857, 0.105882403567, 0.267663469827, -0.399241363581, -0.0170604141314, -0.377382699093, -0.299853370639, 0.126338917041, 0.210676270596, -0.070565829362, -0.0757525460553, -0.401460560938, -0.210582542703, 0.383367516914, -0.268075915715, -0.173442916036, 0.264575649181, 0.184456779405, -0.0097165532605, 0.00997431792943, 0.0189488858382, 0.116511649746, 0.558767817585, -0.351001044668, 0.604559944202, 0.224654308969, 0.329122775384, -0.136962649643, 0.35692433053, -0.408651008128, -0.0575033890757, 0.24008692791, 0.375288250556, -0.382268762394, 0.285071651184, 0.0202815938214, -0.365421119429, -0.0645604701344, 0.0781523727731, 0.323576095594, -0.131978158405, -0.393724869374, -0.332825704434, -0.044181338530
 4, -0.417956144869, -0.256460714895, 0.367189143298, 0.511310537138, 0.214672345403, -0.226875489378, 0.0310210509308, -0.118906658933, 0.344708505926, -0.17563889882, 0.336038890156, -0.0667462014994, -0.405936668753, 0.0138491914875, 0.144754149015, 0.616079043975, 0.130704353611, -0.168294467682, 0.392677221941, -0.00288123069978, -0.0508927001029, 0.146569613764, -0.245656287204, -0.00855988100946, 0.231879433703, 0.214937925868, -0.237298057184, -0.221856092555, 0.419855473628, -0.184932398926, 0.509549986398, 0.848364676338, 0.0691571059329, -0.12501098348, 0.354573894926, -0.0312632006993, 0.330781584014, -0.0945575781122, 0.599881646941, 0.477930952035, 0.0368644507092, 0.291402370717, -0.178220047967, 0.25696983585, 0.423955762121, -0.224823810899, 0.117759914943, 0.110071199153, 0.165406320093, 0.000169648304621, -0.0994666021946, 0.22313907609, -0.212569531367, -0.00804181774423, -0.161692425466, -0.0795345385668, -0.414853143099, -0.0319878410506, -0.0228943999305, -0.40
 3365320244, 0.827452938969, -0.241468133377, -0.291736333618, 0.128741060377, 0.147398430131, 0.420266409293, 0.339390474256, 0.197863253743, -0.0954143221801, 0.162946507755, -0.105789077643, -0.151555115552, -0.171680803545, 0.148136907649, -0.327476021688, -0.218371335448, 0.479974277928, -0.292204793018, 0.0691508765986, -0.136512537546, 0.34812612476, -0.331952205898, 0.494087559139, -0.449934439832, 0.0275333229132, -0.655728766517, 0.00147701174048, 0.41330862736, 0.0922963507921, 0.00128558582822, 0.352445255694, 0.266983248469, 0.202645340868, -0.466875319026, -0.274237283821, -0.0344874375585, -0.32906363626, -0.390803035776, -0.0975552077039, -0.137380758754, 0.0485297845885, 0.0880149390821, 0.15598584193, -0.381638091268, -0.349829147079, 0.187767379305, -0.19627281968, 0.304243720029, -0.440061372901, 0.513066236833, -0.551600207373, 0.289095512602, -0.28223824147, -0.544441635982, 0.402488722797, -0.0610017651608, 0.050843874836, -0.208241178518, -0.131554252864, 0.32
 0678048538, 0.312675207357, -0.0355083214795, 0.0409488582943, 0.0599442092144, -0.102774575851, 0.119165691458, -0.312361157743, -0.0604515759764, 0.328759826876, -0.164492431141, 0.381209091231, -0.0199720553027, 0.207546700513, 0.219121807697, 0.130512901404, -0.421054928057, 0.331651621998, 0.259992989232, 0.503678285778, 0.043267841401, 0.0763523948028, 0.374054908823, 0.0306548439025, 0.837393801255, 0.337209566495, 0.245463036569, -0.0771582704414, -0.467210091513, 0.475084836639, 0.323805117209, -0.383025045521, 0.149104049736, -0.196576189906, 0.0857511302967, -0.226165994054, 0.0930391937861, -0.142880412787, -0.198743603174, -0.00155007277353, -0.406210296892, 0.227628316285, -0.185312440189, 0.0599849059358, 0.00114737047939, 0.358812682523, -0.234918996681, 0.0341316200714, 0.171073526446, -0.265833332355, -0.0338383472716, 0.100681791486, 0.346657350338, -0.00280320436295, -0.143089617661, 0.267059348013, -0.0749074502189, -0.35274511192, -0.0881180093039, 0.1036167568
 18, 0.243472935978, -0.212184518815, 0.371656813353, -0.0133022062202, -0.169948754086, -0.050169477766, 0.28854477509, -0.247670240606, 0.206518527569, -0.407263320198, -0.0875444603835, -0.219289007812, 0.29772747341, 0.249765603598, -0.193444306365, -0.3756050192, 0.00933288367133, 0.25338572147, 0.180015228375, 0.0481910372225, 0.00625538487102, -0.331214327151, 0.328397733498, 0.0693285673286, 0.463588209653, -0.421832831361, 0.0945031623682, -0.281134339656, -0.288763777993, 0.470294399364, 0.187407065939, -0.520244205225, -0.330706311039, -0.107979087849, 0.00581580308799, 0.0933149530593, 0.114432436575, -0.164795756725, 0.195250625489, -0.173799869779, -0.126505013472, -0.252795746611, 0.374565684598, -0.401033212312, 0.225103791284, -0.0979930446003, -0.271302810145, -0.0687136432519, 0.357828941367, 0.287478107344, 0.183861254443, 0.146214251331, -0.295584422439, 0.139370507824, -0.0552549373904, 0.140441522791, 0.201746415561, 0.305001452414, 0.26991025696, -0.2077220879
 83, 0.230781894054, -0.0486218777638, -0.0412348938202, 0.315928652965, 0.125159289433, 0.392733141413, 0.0942907960465, 0.0594509510464, -0.229245398136, -0.200056312406, 0.422105787063, -0.219990997434, 0.135655804075, 0.354436596476, -0.116903307569, -0.252831437806, -0.236734192445, 0.493232572173, 0.177534921412, -0.678853712627, 0.226202104373, -0.0323052978471, 0.263812119755, 0.089582259122, -0.0985711472508, -0.209050983422, -0.309590352687, -0.101211948619, -0.296854486931, -0.311745535732, -0.163607048654, 0.161819431155, 0.452881128009, 0.0952589740169, 0.0403205648779, 0.342412677553, -0.00831468239068, -0.128755225228, -0.1026409879, 0.263234751392, 0.220815182949, -0.418091962045, -0.108964160739, -0.311328084993, -0.418564046376, 0.149056423585, -0.15204357297, -0.104682971719, -0.131552924302, -0.330594897393, -0.0659597104145, 0.386126711024, 0.0652016163329, -0.156974345125, -0.144792035304, 0.249947670412, 0.0257226218968, -0.224522181941, 0.330236685238, 0.11136
 616445, 0.0739317678304, -0.365834573271, -0.0324767794578, -0.0575793089191, 0.496246255328, -0.215710272757, -0.227194701361, -0.135744441802, 0.1728123765, 0.141816439082, 0.240667199282, 0.00858662933253, 0.213427135043, -0.330636893147, 0.0777718524069, -0.559156785984, 0.498265960413, 0.209778446912, -0.145947336288, -0.266426465146, 0.252851873862, 0.151522256361, -0.309242860686, -0.0350308626896, 0.331248490806, 0.1419392122, -0.199459616973, -0.0213700977558, 0.248837176779, -0.286063678025, -0.276146230114, -0.0814984324179, -0.137366990033, 0.106359985039, 0.208982442892, -0.257427152576, -0.309611555998, -0.310751098667, -0.0311767558708, 0.190492805248, 0.129142573427, -0.0391727039717, -0.261204971454, 0.249837580776, 0.200897595242, 0.0383361036709, -0.0387032891193, -0.0918487256207, -0.270056132045, 0.172558054517, -0.0132385418327, -0.286557173647, 0.0929875665356, 0.162012729233, 0.165406489192, 0.121008860403, -0.156947924955, 0.284377314576, -0.243265896911, -0
 .280683609746, 0.416737029901, -0.193692116418, 0.0152023086065, -0.093935202539, 0.254722884645, -0.0642145257547, -0.0616945522594, 0.216955507309, -0.162788593689, 0.254986678588, 0.152350058428, -0.318056067645, -0.209719314718, 0.194242622371, 0.0258810460687, 0.185412661006, -0.0699401585259, -0.242404586191, -0.21440719561, 0.114801408822, -0.269942771176, 0.171018724298, 0.203206518851, 0.174799707147, -0.193630287448, -0.0696319228885, -0.107780391631, -0.0282335659516, -0.193910667074, -0.0486396776352, 0.0557440046157, -0.206565305877, 0.0862357293264, -0.339741514586, -0.127191631972, 0.124359382067, -0.0141058150601, 0.232805292572, -0.263514971502, 0.150806386841, -0.0346701759476, 0.249497446079, 0.265546301338, 0.126291122764, 0.148543207094, -0.0286692743067, 0.15146961004, -0.237376816328, 0.0687592938435, 0.365660129865, 0.146854462476, 0.111312253346, 0.106389494534, 0.0860261132407, -0.0801031524271, 0.2215740019, 0.229513514159, 0.184094389495, -0.141639048475,
  -0.352187892212, -0.370947206587, 0.100207140957, -0.233303738937, 0.0659470948013, 0.131842857247, 0.0412011108345, -0.346271914648, -0.345004644313, -0.156477501045, -0.169236295728, 0.104396250782, 0.222890330655, -0.232839410752, -0.126741678466, 0.117716627674, 0.256808516208, 0.0988927700332, -0.136817119135, 0.246878526721, -0.2195475631, -0.245902066799, -0.0146809845532, 0.214495231609, 0.110456804381, 0.267937678488, -0.21706991956, -0.0729932248967, 0.163226543705, 0.270886498349, 0.0303297141028, 0.0740627204247, 0.301075069033, -0.260391810593, 0.225448230163, 0.0471766186593, 0.202609637525, -0.000474654895856, 0.0525110487299, 0.277428468551, 0.218112090594, 0.237248217946, 0.115696905674, 0.119145238901, 0.314854060624, 0.307766306929, -0.0864852288825, 0.249819293104, 0.0406396004587, 0.0956411376162, 0.174556825299, 0.201179881168, 0.16889299831, -0.234380497652, 0.0788832379041, 0.00509369647572, -0.232378757706, 0.210631652523, 0.249053248105, 0.269640790643, 0.
 120385609726, -0.0379448372466, 0.0816159884196, 0.0665162437355, 0.105234826008, 0.0331455168967, -0.221739006927, 0.0508328910784, -0.327836017178, 0.130925662083, 0.0114803329716, 0.237225031827, 0.00105047005538, -0.269552990759, 0.0140746082482, 0.0191748435626, -0.30790101868, 0.223496785302, -0.0763824761994, 0.101637411513, -0.0869473040314, -0.276541934073, -0.0762085209744, -0.176417496427, -0.0742782136004, -0.318442635474, 0.181171223461, -0.0407299126913, 0.248864877534, 0.0470731556909, -0.00915274483404, -0.0298517111479, 0.356246941633, -0.304436149304, -0.304780538682, 0.0922429092507, 0.0498552363138, -0.203631678932, -0.206737281264, 0.0738809607608, 0.245094848993, 0.148612974535, -0.0450895361044, -0.0995692135602, 0.23371747268, 0.325057385642, 0.688029772857, 0.498211944692, 0.282447596624, -0.424060265979, 0.095109903181, -0.433955815134, -0.179350146186, 0.525563825366, -0.292548307338, 0.28734109201, 0.547111790455, -0.151637518173, 0.194954334713, 0.296578
 592487, 0.467200508955, 0.398406502323, -0.178084080797, 0.361043817455, 0.603349882859, -0.0894855661077, 0.0341132537929, 0.0813043219617, 0.132749164368, 0.261846225082, -0.318470140541, -0.222911236183, 0.240433056414, 0.292373570593, 0.399675478014, -0.403598203854, 0.151345249017, 0.109539102567, -0.355671229949, 0.128303977246, -0.402272396514, 0.0994929690911, 0.194111113676, 0.215027274636, 0.273526596185, -0.230757707891, 0.275866768244, 0.141494595571, -0.150065463478, -0.204086647493, 0.157805556529, -0.344281519938, 0.425336554718, 0.0942775584056, 0.29589323168, 0.44415618877, 0.240682516494, -0.380045847031, -0.107042132178, 0.011227869917, 0.144291159855, 0.0726944292228, 0.277782049318, -0.274223450028, -0.180806550311, 0.150283518394, -0.10010379353, 0.28607701417, 0.180986326602, -0.0197764911826, -0.207646444397, 0.278304557477, -0.323854804091, 0.194252713399, 0.0464626106596, 0.159973018484, 0.16774315265, -0.228900851828, -0.151722137851, -0.218081801389, -0.2
 24863288321, 0.0163125453526, -0.238671218526, -0.248615197194, -0.0973904680693, 0.407435102394, -0.335944866491, -0.343263585841, -0.261848152847, -0.149338441767, -0.00814680669417, 0.259445469049, -0.368529153813, 0.0787084504542, -0.239950636357, -0.0144118469096, 0.062427517873, -0.0433511479091, -0.153298723346, -0.171289182491, 0.280616884851, 0.12618429598, -0.220657987191, -0.320605892733, 0.00807802207382, 0.250748438906, 0.234964228413, -0.0782506268437, 0.304492136627, -0.431849369134, -0.0265485445918, -0.217743928218, 0.10055054797, 0.1229711217, -0.121221290895, 0.268278951424, 0.0916211010013, -0.129156283075, -0.33116372839, 0.180985043729, 0.160054208431, 0.131688013546, 0.125354030563, 0.254899559451, -0.164120767568, 0.128291812513, -0.138698298294, 0.194596652004, -0.238860708843, 0.0380178899546, -0.315336382899, -0.271256164553, -0.239873872705, -0.176788093091, -0.251522752554, 0.0383030805781, -0.187553800654, 0.323175268881, 0.359247751487, -0.425963475773
 , 0.328243158581, -0.109234678515, -0.220835740328, 0.154468930097, -0.344663447627, 0.0587600299868, 0.0489638466795, 0.225910394992, 0.381801018542, 0.0532836237719, 0.166686728127, 0.205352310597, -0.185271381378, -0.122305494262, 0.204072487562, 0.0253275618271, -0.318368496799, 0.305852917252, -0.0785795132244, -0.132177599249, -0.0223956984967, -0.163778215677, -0.169101075056, 0.128809661107, 0.0633987982098, -0.0479849392255, -0.181109043085, 0.131688752752, -0.135023155226, -0.247046468675, 0.178534189455, -0.167388108544, 0.115145386166, -0.325216612746, 0.236212801864, 0.232417265253, 0.0275544887584, -0.146142886173, 0.092729951582, 0.0261231482138, 0.189902724504, -0.176079531118, -0.160724460124, -0.287686513579, 0.00686818723107, 0.233107367595, 0.0653536619344, 0.0193265084735, 0.247091855313, 0.341688206798, 0.160194596684, -0.146211187577, -0.0952567766309, -0.365147895332, -0.367467123704, -0.329717548045, -0.0437938540316, -0.142335090754, 0.157764133898, 0.22495
 5390564, 0.0204180463078, -0.0156459435779, -0.282572516478, -0.202027800222, -0.0136348703444, 0.305992096924, -0.303347842165, -0.289871604408, -0.169550796146, 0.154117753589, 0.0924538930779, -0.26450552206, 0.300265330006, 0.216765054547, -0.209280298389, -0.00186568214219, 0.181566238741, 0.185709585016, -0.33846860054, 0.0461766277893, 0.156783719634, 0.16938865959, 0.288475748493, -0.274261972183, 0.214575787046, 0.308679474779, -0.275685814424, -0.151737938083, -0.173838335325, 0.219918242517, -0.278211607193, 0.180636284551, -0.148096426835, -0.219930916877, 0.304871225267, 0.181504574575, -0.27226963089, 0.336461176652, 0.23620590145, -0.112188864248, 0.143862685961, -0.0257748685333, -0.0402822352288, 0.107704153034, -0.119800002273, 0.0692525917571, -0.251428924813, -0.287161897936, -0.0820397350264, -0.24985383117, 0.122040141968, -0.26536711973, 0.268599372811, 0.057325393046, -0.198505816142, 0.124212723206, 0.022444656401, -0.126355137902, 0.307666369659, 0.18945176
 4301, -0.259494799334, -0.31968072217, 0.00795670677648, -0.0702930322583, -0.198409405243, -0.033565517624, -0.139009556785, -0.068780961667, -0.065143175056, -0.445839054973, 0.103211129046, -0.376957497667, -0.108534112303, -0.299969258418, 0.137017641376, 0.201240261999, 0.142048120523, 0.350365820349, 0.298654421098, -0.303893952532, -0.302419412963, 0.0154535549696, -0.227188700672, 0.362204759035, -0.272842415841, -0.0823877508299, 0.133683951892, 0.120891443405, 0.205429634656, 0.0577294305128, -0.10340890905, 0.171571449423, 0.531371883887, 0.566553808629, -0.0520780503133, -0.0787628177761, 0.00340433472768, -0.286500355447, -0.402525295392, 0.488865014742, -0.300403773014, 0.200403968008, 0.588210667321, 0.355749565106, 0.487066679508, 0.264312221547, 0.409127729653, 0.167116753031, 0.0968962336003, 0.23274696174, 0.403827993036, 0.172081801878, -0.172811905026, 0.224453246399, 0.206396444251, -0.0353081725339, -0.343618661148, -0.383318563674, 0.678522844038, 0.515604185
 25, 0.304806792601, -0.540454220138, 0.211092277939, -0.37290009409, -0.424084622064, 0.558288983844, -0.551626421418, 0.0108675062321, 0.111220143202, -0.102986852498, 0.134262060987, 0.227250439934, 0.646380169069, -0.0413053530353, 0.019261677, 0.412406597516, 0.663487857047, -0.214333225115, 0.00941033931974, 0.0907604927236, 0.227487539853, 0.491812135301, -0.289395739038, -0.0989568817795, -0.0262702600697, 0.114319043143, 0.20218270762, 0.272918422787, -0.334187836668, 0.130656540733, 0.113742555096, 0.248545131737, 0.198373705871, -0.148636489676, -0.398846723198, 0.142164037048, -0.368336027287, -0.222540537536, -0.10247249525, -0.0480856573101, -0.0961086669627, -0.00954688712445, -0.284862864839, -0.120094349984, 0.1485254925, 0.0377023761729, -0.338321329148, 0.209238823745, 0.195455149231, -0.0344374503483, -0.0980497286311, -0.0728752887693, -0.160014974494, 0.0655260486291, -0.300091123327, 0.270579804162, -0.0520005735765, 0.252068025653, 0.120294068234, -0.027113165
 6795, -0.0195424190368, -0.143025885522, -0.193283148435, -0.175744610701, 0.049721115222, -0.138231334164, -0.259957215742, 0.171879987304, -0.0239295347774, -0.00973926408874, -0.211894114588, 0.247278301157, -0.253814002921, -0.14818291327, -0.217343410028, -0.342578856498, 0.159236637749, -0.191596828412, 0.144625068113, 0.0672091074798, 0.0887828441897, -0.253359727958, -0.355869668291, 0.217899398614, 0.142573640195, -0.277351762767, 0.167348886105, -0.230258858193, 0.294488687145, 0.00417458414963, 0.0692115922053, -0.0748945531361, 0.182125172326, 0.224351298742, 0.0461249134393, -0.099153957096, -0.240098006521, 0.218772649181, -0.278552555453, 0.0500467682231, -0.142268076649, -0.1338

<TRUNCATED>