summaryrefslogtreecommitdiff
path: root/notebooks/plot_fgw.ipynb
diff options
context:
space:
mode:
authorRémi Flamary <remi.flamary@gmail.com>2020-04-22 11:39:23 +0200
committerRémi Flamary <remi.flamary@gmail.com>2020-04-22 11:39:23 +0200
commit135c011092cb442b0b874b565b6a2ca3f09234c4 (patch)
tree06a1a5209ee090824ae74af76bd2426295edc424 /notebooks/plot_fgw.ipynb
parent5f679247f64fa1c8e277f34165850caea311a084 (diff)
remove notebooks and cleanup readme and doc
Diffstat (limited to 'notebooks/plot_fgw.ipynb')
-rw-r--r--notebooks/plot_fgw.ipynb365
1 files changed, 0 insertions, 365 deletions
diff --git a/notebooks/plot_fgw.ipynb b/notebooks/plot_fgw.ipynb
deleted file mode 100644
index a4c7329..0000000
--- a/notebooks/plot_fgw.ipynb
+++ /dev/null
@@ -1,365 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "# Plot Fused-gromov-Wasserstein\n",
- "\n",
- "\n",
- "This example illustrates the computation of FGW for 1D measures[18].\n",
- "\n",
- ".. [18] Vayer Titouan, Chapel Laetitia, Flamary R{'e}mi, Tavenard Romain\n",
- " and Courty Nicolas\n",
- " \"Optimal Transport for structured data with application on graphs\"\n",
- " International Conference on Machine Learning (ICML). 2019.\n",
- "\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "# Author: Titouan Vayer <titouan.vayer@irisa.fr>\n",
- "#\n",
- "# License: MIT License\n",
- "\n",
- "import matplotlib.pyplot as pl\n",
- "import numpy as np\n",
- "import ot\n",
- "from ot.gromov import gromov_wasserstein, fused_gromov_wasserstein"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Generate data\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We create two 1D random measures\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "n = 20 # number of points in the first distribution\n",
- "n2 = 30 # number of points in the second distribution\n",
- "sig = 1 # std of first distribution\n",
- "sig2 = 0.1 # std of second distribution\n",
- "\n",
- "np.random.seed(0)\n",
- "\n",
- "phi = np.arange(n)[:, None]\n",
- "xs = phi + sig * np.random.randn(n, 1)\n",
- "ys = np.vstack((np.ones((n // 2, 1)), 0 * np.ones((n // 2, 1)))) + sig2 * np.random.randn(n, 1)\n",
- "\n",
- "phi2 = np.arange(n2)[:, None]\n",
- "xt = phi2 + sig * np.random.randn(n2, 1)\n",
- "yt = np.vstack((np.ones((n2 // 2, 1)), 0 * np.ones((n2 // 2, 1)))) + sig2 * np.random.randn(n2, 1)\n",
- "yt = yt[::-1, :]\n",
- "\n",
- "p = ot.unif(n)\n",
- "q = ot.unif(n2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Plot data\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAHwCAYAAACPCeeDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3ic5ZX///eZouoi94ptBAZMxxYdQrOBJUAIMSbZBAjZAMlmd0l2E9jsZrOkbeJkN1vSvoYfCakUU0IaIZgSWigy1TRjGxsMtjGWm6w25fz+mEf2SJ4ZaaTRjEb6vK5Llz3z3PPMGcOlM3c7t7k7IiIiUj5CpQ5ARERE8qPkLTJEmNliM/MC/2wt9ecSkb2Zhs1FhgYzqwdWBw+vdfdv5/HaOqABmAssAOanXV7g7ssKGOfc4P7bgDVAo7tvK9T9RYYDJW+RIcTMFgJLg4fz3P2ZPt6nDlgMXAnc7u4XFSi+K4O/NgEXAwuBbe4+phD3FxkulLxFhhgzW0oqKa5x9/36ea+FwFJ3twLFtsTdr0p7XAfU9/VLhshwpeQtMgSZ2WqgngL0ms3sGlJfBG4vQFzL3X1ef+8jMtxpwZrI0NSZsBcGvec+C+bOj+5/SACsMbPFBbqXyLClnrfIEBX0mDsT5X7uvqaU8QCY2XzgPgq8CE5kuFHyFhnCzOw+Uiu7nxksw9XBkP5YYF+tMhfpGw2bi+RgZguDZJPp2lIzW1LsmPJ0EaktWXMHw3B10PNeDNQBN5Q4HJGypeQtktsXSSW/LoJV0gszXRtMgp5t5/z3NUHyLDozm2tmS919mbtfDywjNR8/txTxiJQ7JW+R3OaSSjTdNQR/3lfEWPokmFu+Pni4NPjiUTRBgr4fuCLt6c4Ri4uLGYvIUBEpdQAig1VaLzVTgl4AuxNjb++3hK6Vy/KxJJ+Kad25+1XB56knVcRlQV/v1QdLgW92m9/u/HerL2IcIkOGkrdIdrkS9EIgr8Ii6cVJSmQBqfKp881sbjEKowQV1erZ0/MHUsP5ZgapSmsikiclb5Hs5pMhQXdWBQP63BMuBXdfY2bLSBVcKVZFs4uAZTlWlWdcDCgiuSl5i2QQJOi5ZE7QuYbTB61g3/dYdy/YkHmwgr0+RxW3Brr1uoPXdQ6XP9Pt+c6CMgtIrUrv/Lee15eRi+Azd35xqIPdRWdEypqSt0hmnUnj6QzXugynm9k1vUkIpZzzDua7vwjs29d7ZLGEnoe+t2R4rrP2+u4piSDGZcGQ+lhSX47mAYvow9y4mS0HrugcZQiONy3IASsipabkLZJZZ+8003DvIlJHWXYa15sblmrOO+jlLgXOKHRRlF5UbWsEMh2OchV7qr+l368zvv1IFZbZRqrn3qX3HvSon8m2YDCtHnt6z74uiKfX9xEZrFRhTSSDtIM9upyLHQwTzwVw9wXBgqzGwXwqVvBZFgf7q4v93vXActKqqXUWi3H3a3O87j5Sp5n1KWYzc9JKsAbb1Zb295Q1kcFCyVukm2C+eyvQeYpWeu/ym8GfN5AaUt9WiqTYW8HxoE397fWbWX16Lztt29l+uZJw0HYuqSH7p0n1qFf3NAUQJN8+1WMPvjCsTj/GNOhhH12oc8lFSk3D5iJ765yXXpJjOHXQJ4FeLCbr7X3qgWtJDXWnn8F9fZBkcybvYFSi1zF0Vl3rTNzB+40NVsvXkfrvU5/jC0Ade093LCA1ddD5xaOxF/cRGbRUYU1kb3kXYBlsggR1JXBGAW63lD0V0QAagsQ9n66jEn1mZvPTashf3O2+i9J64A3BueIXp722Phhh6NQlpuDLQAPQmJa497qPSDlRz1tkb/PJXBK1LBRqgVrQy11Kqne6e04/7UvNVXRN6v3RBCwLtootCd7/SlK96N3TEu6+rHNVetpr60kVnpkf1E7fZmZXdC5aC36uJZWonw7+TTLdR6RsaM5bJE3afPe15TicGsS/nFT8t/fUPsc9riQ1T10HfLv7vHbav9OYYh/rGfSyr+0+H25mC/P5zNnuI1IO1PMW6aqe1HxpnxLfINA5fDw26Ln2pI7UVrc6Umdsz2XvPdW3ZnjdIvbsyZ5f5CmG+mD+e/f7BqMN+Sbhve4jUi6UvEXSBMPDY0odR18EyXr3YrsC3TZbKdV5wH1ppWKLaVmGXvbCPoyUZLqPSFnQsLmI5C2YL15AaktWSbfKBV8gGtR7luFEyVtERKTMaKuYiIhImVHyFhERKTNK3iIiImVGyVtERKTMlGyr2Pjx433WrFmlensREZFBbfny5e+5+4RM10qWvGfNmkVjY2PPDUVERIYhM1uX7ZqGzUVERMqMkreIiEiZUXnUQSCe2MD25p/S2vYAEKK2+v2Mqv1rwuFxpQ5NREQGISXvEmtp+zObtnwC9wTQDkA8tpKdO7/HxPE/p6ry2NIGKCIig46GzUsontjMpi2X494CtBMlxMRQNfuEw0wNOZGmS0hu+yc8saXUoYqIyCCi5F1CO3f9HILa8hWEmBKuodrCmBkhM0IG3vZ7fMsFeLKpxNGKiMhgoeRdQi1tf8ZpA2BcuAoDzKxLGyMJyS34zv8pQYQiIjIYKXmXkAVLDiIYUUJ7Je494tD6a9zjxQtOREQGLSXvEqqt+QBmNUQshNPT0awJ8OaixCUiIoObkncJjaz5EGZVJByMbL3uTgZWW5S4RERkcNNWsRIKhWqZOuEuNmxeSILWHN+kQlB1NmbRIkbXM3dnQ+sLvLj11+yIb2BUZDKHjrmAqdVH5JgCEBGR/lLyLrGK6AHMmLKc1p0/INKyBCPRrUUIbAQ28nMliS+bpCe4752vsW7Xk8S9HXA2s5J1u55kn9oGzpp6HSELlzpMEZEhScPmg4BZlJpRnyU09mcQmQ1UgY0EKqHiGGzcnVh4WqnD7OKZLb9i3a4niHsb7J6vd+Lexlu7nqZxy89LGZ6IyJCmnvcgYhVHY+N/j8fXQXIrhKdg4UmlDmsvSU/w3Nbbgh733uLezgtbb2feuI8SHmRD/SIiQ0FeydtSE5kXAGcB04DKDM3c3c8qQGzDlkVmAjNLHUZWO2LvBOVcs3NPsr3jHcZWDt7PISJSrnqdvM2sAvgdcAZgpMZK01cledrzMoQZPW9tc1yL1kREBkg+c97XAPOBbwGTSSXqrwIzgEuBt4FbgOoCxyiDzKjoFCpCNTnbRENV1EWnFykiEZHhJZ/kfTHwrLv/q7u/GzyXdPf17v4L4DTgPOAzhQ5SBhezEPPGXsLIUJJpkS3sG93ErOi7jAk1EyJJxKpoGHcpZloPKSIyEPL57VoPPJb22IHdq5HcfTXwe+AThQlNBit3x+JPMDmylZpQjIg5UUsyNtzMzOh7zBl1CofWXVDqMEVEhqx8knccaEl73AxM6NZmLakkL0PYxl2/592WPwGxLs+HDCIG0cTTmu8WERlA+STvt4H0ScyVwHHd2hwBbO1vUDK4rd12PQlvzXI1ya7YGnZ2rCxqTCIiw0k+yfsxuibru4HDzWyJmZ1lZt8EzgQeKmB8Mgjtir2R87oRYmf7y0WKRkRk+Mlnn/fNwCwzm+Xua4H/JrXn+wrgk6RWn78B/HOhg5TBJWRREjmPJzXCoaqixSMiMtz0Onm7+wPAA2mPd5nZ8cCFwP6k5rvvdte5lUPdhJr5bNz1eyCZ8boTZ2z1icUNSkRkGOlXeVR3jwG3FigWKRP1dZ/i3ZZlJDPMe4esmn1GfYRoaGQJIhMRGR60EVfyVltRz9zJNxANjSFstUCEkFURooJpIz7E7DH/VOoQRUSGNB1MIn0ypmoe75vxMFtaH2FXx2rCoRFMrJ1PZXh8qUMTERnylLylz0IWYULNaUyoOa3UoYiIDCsaNhcRESkzSt4iIiJlRslbRESkzGjOewhoiTfz3LZH2dz2DiOjdRw15mTGVHQvOy8iIkNF3snbzA4BPgLMAWrd/ezg+RlAA/CAu28raJSS1VNb7ufXb/8Yw4h5O2GLsGzT7Rwz7gw+MPUTOiBERGQIyit5m9mXgS+zZ7jd0y5HgaXA1cD3CxKd5LRy5/Pc/faPiXvH7uc6y5Y+veVBRkZGc8akhaUKT0REBkiv57zNbBFwHakSqQ3A4vTrwXney4HzCxif5PDHDb8ilpa408W8nYfe/Q3xZCzjdRERKV/5LFi7GlgNnOfuzwBtGdq8DMwuRGCSW0eijXda1/bY7q2WVQMfjIiIFFU+yftw4I/u3p6jzQZgUv9Ckt5IkOhxPtuwHk7/EhGRcpRP8jayHSO1xwQgV3KXAqkK1TAiMjpnm7jHmFI9qzgBiYhI0eSTvFcBx2e7aGYh4CRSQ+cywMyM0yZ+kKhVZrwesQiHjj6W2ohO9xIRGWrySd63AfPM7Oos168hNd99c7+jkl45btyZHDr6aCpCXRN4RaiSiZXTuXD6lSWKTEREBpK5e8+tADOrAR4HDgOeIDWMfizwHeBk4DjgaeDk4JzvnBoaGryxsbGPYQ89Te1b+ePGh3hiyzMkSXLIqAM4d+oC9qmZmvN17s6q5hU8svl3vNe+gRGR0Zww/mwOHX0MkVC0SNGLiEihmdlyd2/IeK23yTu4UR2pPdwfpmuv3YFbgE+7+47e3EvJe4/Xdq7mP17+P+KeIB4sMAsRIhIKc0X9R3nfhONKHKGIiBRbruSdV5GWoHLax8zsc8AxwDhgO/Cku2/sd6TDUEcyxrde+T5tya7r/JIk6UgmuWHNLzlg5H5MrlK5UxERSenTwSTuvtndf+/uP3P3u5W4++6JLctJevZF/ElP8scNDxQxIhERGex0qliJvbLj9b163eninuDlHa8XMSIRERnsej1sbmbX97Kpu/tVfYxn2KkIVfSijRaeiYjIHvnMeX+yh+tOagW6A0revXTcuLk8+O7jtGfpfVeGKjh5/LFFjkpERAazfJJ3tprldcDRwJeAR4I/pZcOGrk/06onsa7lbRKe6HLNsFTynqDkLSIie/Q6eQenhmWz3MzuAV4A7iV1gIn0gpnxr3OuZvGrP2Bdy3o6kjEcpypUycjoCP51zj9QE6kudZgiIjKI5LXPu8ebmf0MONzdj+yprfZ5721N8zqe3baCRDLBQaP259DRBxEyrSkUERmOCrbPuxc2AQcU+J7DRv2ImdSPmFnqMEREZJArWLcuOJjkNKBXFdZERESkb/LZKnZCjnvsA3wCOAq4sQBxiYiISBb5DJs/SmobWDZG6uCSa/oVUT+809rE0jcf5uHNK0h4kiPq9uWvZ57GgaOmlyokERGRgssnef8HmZN3EtgKPOXujxckqj54butqrn3+x8SSCeLBlquH3n2Rx997hc/MPo8Lpmc9ilxERKSs5LNVbNDu325PxPji8z+hNdHR5XnHaU/G+MHrv+WoMfsxs3ZiiSIUEREpnCGxD+mBd58nmWNEP55MsPTNRwY8Dnfnha3rufftl2h8b13OA0dERET6qtBbxUripW3r9up1p0uQZMX2tQMawzNb3uTa5Xeytb2FkBlJnJpwBV896jxOnXzggL63iIgML1mTt5mt7OM93d2Lmq2qwxW7i6pnUxXu+QCQvnpp2zt88vGf05aIdXm+Jd7BPz69lO8d+2FOnLj/gL2/iIgML7mGzWuA6j781AxgvBmdOulwKnOczlUVquDsKfMG7P2/veJPeyXuTm2JOF9//g8UspJdPra0tXDfW6+zbP3rbG1vKUkMIiJSWFl73u5eNvurDh41g9kjp/LqjreIdTvcI4RRE6nkzMkDk7x3xtp4bsubOdtsatvJ2uYt7Dty/IDEkElrPMa/PHEPf3jzVSrCYQBiiQTn73sIXzvmLCrDQ2LGRERkWBoSC9bMjG8f+TccUVdPZShK1MKECVEdrmBazXh+2PB31EQqB+S9d8baCIfCOdtELMSOWOuAvH8m7s7HH7iVe958lY5kguZYB82xDtqTCX679mU++eDSko0EiIhI/w2Z7ldtpIrvzr2Stbs28eSWV4knkxxWN4vDRs/CzAbsfcdXjuixTUcywbSaMQMWQ3ePb1zHiqaNtCcTe11rS8R55r23eea9t5k3oWwGV0REJE3eydvMosA8YBqQsTvr7r/qZ1x9Nqt2ErNqJxXt/SrCEc7f53DuWvfcXkP2AGEzjh0/i/FVPSf5Qrll1XO0xDPPwUNqSP3WVc8reYuIlKm8kreZXQp8B8g2edu56LtkybsUPnfwfJ7YvIaNrTvoSOvtRizE6IpqvnLUeUWN5722XTmvey/aiIjI4NXrOW8zOxP4CbAF+GdSifq3wL8DDwaPbweuLHyYg9voimqWnnoVl+13PKOiVQDUhCu4eFYDd572KSZXjy5qPHPGTCSS4xzwilCYOXWqNiciUq6stwuXzOxPwFyg3t13mFkSuM7dvxpcvwr4HnBqb2qcNzQ0eGNjY98jH8QSniScI3kOtDd2NHHO72+kLRHPeL0yHOH+869kWm1xv1SIiEjvmdlyd2/IdC2fDDMP+I27p5/Xvfv17r4EeAIYtDXQi6WUiRtg31Fj+fvDTqQ6HN3rWnU4wheOPEWJW0SkjOUz510LbEh73A6M7NbmKeDy/gYl/fe3h57AAXUT+N8XHuWlpo0AHDFuKlcffhKnTtuvxNGJiEh/5JO8NwIT0h6/A3Qvgzoqz3vKAJo/fTbzp88mkUwdkBIODYlt/SIiw14+v81fpmuyfgw4w8yOBzCzOcCioJ0MIuFQSIlbRGQIyec3+j3AiWY2JXj8bVK7jh41sw3Ai6R63t8obIgiIiKSLp/kvQSYCTQBuPsKYAFwH9BMarvYue7+u0IHKSIiInv0en7a3TuAt7s99xhwdqGDEhERkezyKdIyaiADERERkd7JZ9h8g5n90szOtIE86UNERERyyid5vw18hNTCtbfM7JvBCnMREREpol4nb3c/ADgR+P+AGuBaYIWZPWlmf2tmxTvzUkREZBjLa/Ovu//F3a8CppDqhd9Lqt7594F3zOx2Mzu38GGKiIhIpz5V7nD3dne/1d3PAaYD1wArgQuBXxcwPhEREemm32W33H0TsBx4FoiROhpUREREBkif65Cb2f7AZcAlwD6kkvYbwM8KE5qIiIhkklfyNrPRwMWkkvZxpBJ2M/BT4CZ3f7jgEUqPVja9xy9WPMea7VuZOmIkHzn4CI6cOBnt6BMRGZp6nbzN7FbgPKAyeOoh4CbgDndvKXhk0iN35+uPP8QvX3qeWDJBwp2QGb9d9SqnzqjnewvOJaIDSUREhpx8frNfRGqv978D+7r7Ge7+cyXu0rn11Rf51cvP05aIk3AHIOlOazzOQ2+u4b+eerTEEYqIyEDIJ3mf7O6z3f3r7v7mgEUkveLu/F/jX2iNxzNeb43H+dmKZ2nLcl1ERMpXPkVaHhvIQCQ/77W28F5r7kEPw3h1y+YiRSQiIsWiCVEREZEyo+RdpsZX1zC+uiZnG8c5aNyEIkUkIiLFouRdpsyMqxtOoDqSecNAdSTCZYceRVWW6yIiQ9narVu58enl/PCJJ3nkjbUkg0W9Q4V+s5exRQcdyutbt/CLFc912SpWGQ5z2sx6/umYk0odoohIUbXFYnzud3/g4bVrcXfiSac6EmFkVSU3fuiDHDhhaIxGmpfo20hDQ4M3NjaW5L2HmlVbt/CLl55nzbYmpo4YyV8ffASHT5xc6rBERIruU3fdzSNr19GeYafNqMpK/vQ3H2d8bW3xA+sDM1vu7g2ZrqnnPQTsP2Yc1510eqnDEBEpqTeatmZN3ADt8Ti/ePZ5PnvSCUWOrPDynvM2s4iZzTezvzezL6Y9X2FmY001OUVEpASWrVpFMpnMer09keA3r7xSxIgGTl7J28zmA2tIneP9v8DX0y7PAzaTqn0uIiJSVO3xBPEcybuzzVDQ6+RtZnOB35Eaav8CcEv6dXf/C7AW+GAB4xMREemVQydPpKYimvW6AYdPHhrrgfLpeX8ZaAUa3P27wGsZ2jwNHFmIwERERPJx8qxZ1EQrsl6vikS44piM67/KTj7J+yTgLnd/J0ebN4Ep/QtJREQkf+FQiBs/9EFGVlZQEQ7vft5I1b749HHHMnfa1NIFWED5rDYfQWpOO5dqVPhFRERK5OBJE7n3Ex/nZ888y29feY2ORJwjpkzhymOOHjKJG/JL3m8Dh/TQ5kjgjb6HIyIi0j8TR4zg8+87mc+/7+RShzJg8ukl3wucbWbHZ7poZmcCJ5Ja1CYiIiIDJJ/k/R/AdmCZmX0DOAjAzM4KHt8BbAK+W/AoRUREZLdeD5u7+3ozOwu4Dfgi4KTWAfwh+HMtcKG76wBpERGRAZRXeVR3bzSzA4APAMcB40j1xp8gtRK9o/AhioiISLpeJ28zmwrEgp71HcGPiIjIoNQei3PPSyt56LU1AJx6YD1/dcgBVEbL/1iPfD7BW8DPgMsHKBYREZGCeP3d97jsx7fTHo/T0hED4JHX1/LtPz7MTz+xkNkTx5c4wv7JZ8HaNuDdgQpERESkEFo7Ylz246VsbWndnbgBWjpibG1p5bIfL6UtlvnksXKRT/J+EjhqoAIREREphHtWrMx5AEl7PME9KzJV+C4f+STvrwCnmNnHBygWERGRfrvv5VVdetzdtXTE+NPLq4oYUeHlM+d9BvAAcKOZfYrUISQbSW0ZS+fu/s0CxSciIpKXpOc+FhTIee53Ocgneaef3X1M8JOJA0reIiJSEqcdWM/Ta9+mNZa5910djXLagfVFjqqw8kneCwYsChERkQI574g5/Peyx2jNMnIeDYc474g5xQ2qwPKpsHb/QAYiIiJSCLWVFdx42YV84qd3Ek8kaA1WlldHI0TCYW687EJqK7Of+10Oyn+nuoiIFFVzaztPv/ImbR1xDpwxkfqp40od0l4OnTaZB/7xb7jr2Zd54LXVAJxx0P5ccOQcRlRVlji6/jP37uvNiqOhocEbGxtL8t4iIpJbIpnk6VXreXd7MxNHj+Do/adjGD+861FuXvYskXAIdyeRdOqnjuPbf3seU8aNKnXYQ4qZLXf3hkzX8imPGmPvleWZuLuX/9caEZFh6uGX1/Bvt/yJjlgCd8cMKqIR5k6dwtMvrKM9Fqc9bT75tbfe5bJv/IqlX72M0SOqSxf4MJLPsPmTZE7edcD+QCXwIrCjAHGJiEgJPPX6W3z+p7/fqwLZrvYY97+2hkjC9yoQkkw6u1o7uOOh5/nEuccVL9hhLJ8Faydlu2Zmo4D/AxqA8woQl4iIlMC3f/1Q9tKhBvEqqNi196X2WJxfP7pCybtI8qmwlpW77wD+hlTP/BuFuKeIiBTXxm07Wbd5a+5GIXDLfKmlLXtVMymsgiRvAHdPAA8CHyzUPUVEpHh2tXUQCYd7bJctec+cPKbAEUk2BUvegQpA//VERMrQ5LqRxBPZD/ToZBkqi1ZXRrnkrIwLo2UAFCx5m9ls4CJgdaHuKSIixVNbVcGCI2YTDWdODeGQEUkYYeva9a6uiHLaUftzypH7FSNMIb+tYtfnuMc+wPuCv19bgLhERKQErr3gNJ594x0279hFR9qxmhWRMBNG1fKtj/wVt97/LH9+djWxRIKZk8Zw+TnH8FfHzcEsy3i6FFyvi7SYZRoo6WIV8B13v6E391ORFhGRwWlnazs/f/gZbnvseba3tDG6popFJxzOJafMY2S1yngUS64iLfkk72zjIUlgq7tvyycoJW8RESk3bW0xHvjzK/zx3hdpbevg0IOnc+EF89hn+tiCv1dBKqy5u+ayRURk2Hr33R383ed+QXNzG63Btrg31r7HH+59gc986nTOf/9RRYul1wvWzOx6Mzu3hzbn5JgbFxERKUvuzj//21K2NDXvTtwAiUSSjo44P1zyAK++tqFo8eSz2vyTwNwe2hxFqliLiIjIkPHKaxvYsHE7yWTmqeaOjgQ33/ZE0eIZiH3ePW8SFBERKSMrVqwnHs+e3tydF15cX7R48k3eWVe3mVkUOBnY1K+IREREBplQONTjVrhQqHhb5XIuWDOzld2eutrMLsnQNAxMBGoAzXmLiJTYpg3b+ONvn+Od9U1Mmjyas88/iqkDsCJ6uDhm3r7c8OM/Z70eDoc48fjZRYunp9XmNezpbTsQBTId1poAVgL3A18pWHQiIpK3m65/kNt/8ReS7sRjCSKREHfe+iTnfGAun/7cWSqm0gczZozjsEOn88KLbxGL7T18Ho2EWLTw6KLFk3PY3N2nu/s+7r4PYMB/dT7u9jPL3ee5+zXunuGwOBERKYZ7f/ccd/zqCTo64sSDJBOPJ+loj3PPb57lzlueLHGE5esrX7qAA2ZPoqoqSuf3n6qqKNXVUb5+3YeYPq14Ixu93ucNLADWDFQgIiLSP+7Oz254iPYsR3O2t8W4+aZHuOCiYwhHCr1eeeirra3ke9/9GC+/8g4P/PkVWnZ1cPDBU5l/2sFUV1cUNZZ8irTcP5CBiIhI/2zetIPt21pytol1JHhz3Xvsu9/EIkU1tJgZhxw8jUMOnlbSOPLpeQO7V5XPA6YBGYvcuvuv+hmXiIjkKZFM9jifbQbJZE9HVchgl1fyNrNLge8A47M1IbWwTclbRKTIJk4aTWVlJOuwOaR+Qe8zI9uvcCkX+ZRHPRP4CbAF+GdSifq3wL8DDwaPbweuLHyYIiLSk3A4xKKPnUBlVTTj9crKCOd9qIGKyrwHXWWQyWfFwueBrcBx7v6d4Lln3P3r7j4f+DRwAfBKgWMUEZFeWvjREzj+5AO6rIgGqKqOcsS8WXz8qtNKF5wUTD5fv+YBd7v7jrTndid/d19iZh8FvgScU6D4REQkD6GQ8cWvXsiK59/k7qVPs+HtrUycNJrzLzqaI+fN0h7vISKf5F0LpB+Z0g6M7NbmKeDy/gYlIiJ9Z2YcduRMDjtyZqlDkQGSz7D5RmBC2uN3gAO7tRlFH1awi4iISO/lk2hfpmuyfgy4yMyOd/e/mNkcYFHQTkREeqm9I8b9j6/kz0+9TtKdE+fWc+bJc6ipKm7hDykf5p71oLCuDc3+HvhvYB9332Bmh5IaJq8E3iXVKw8B57v773q6X0NDgzc2NvY5cBGRoeCN9Vv4zHW30t4RpzXY4lVdGSUcCfF//3YRB9VPKnGEUipmtqkhRcoAACAASURBVNzdGzJdy2fYfAkwE2gCcPcVpEqm3gc0k9oudm5vEreIiEBHLM7ffeU2tu9o3Z24AVrbYzTvaucfvrqU5pb2EkYog1Wvk7e7d7j72+7envbcY+5+trvPdvcF7v6HgQlTRGToefCJ12lvj5Ft/DOeSPKHh14qakxSHlSZXkSkRB5tXEVLjmpobe0xHmlcVcSIpFz0pbb5IcBHgDlArbufHTw/A2gAHnD3bQWNUkRERHbLq+dtZl8Gngf+BfggqTnvTlFgKfCxgkUnIjKEnThvP6qzlDIFqKqMcNK8/YoYkZSLfGqbLwKuAx4g1cNenH7d3VcDy4HzCxifiMiQddpxB1BZkX0ANBwK8f7TDi1iRFIu8ul5Xw2sBs5z92eAtgxtXgZmFyIwEZGhrrIiwvf/fRGjR1ZTXbmnB15VGWVETSX/+28XMaIm48nLMszlM+d9OHBT+mrzDDYA2pQoItJL9fuM564fXsGyx17lwSdfx4MiLWefcgi11SrSIpnlk7wN6OkE9wmkap6LiEgvVVVGOff0wzj39MNKHUrJuTsrGt9gzSsbqKqp4NjT51A3dkSpwxp08kneq4Djs100sxBwEiqPKiIifbB25Uau+9RN7GjaRTyRJBwK8YOv/JqzFh7Np750PuGwdjd3yudf4jZgnpldneX6NaTmu2/ud1QiIjKsvLdxO5//yI/YtH4rrS0dxNrjtLWm/rzvzkb+39d/U+oQB5V8kvf/AC8C3zWzx4CzAMzsW8HjbwBPkyqjKiIi0mt33fQI7VkK1rS3xrj39qfZtqW5yFENXvmUR20BTiXVsz4WOI7UPPg1wd9vAc509+zlgkRERDJ48DfPEo8lsl4Ph0I8+YBmZTvlVWEtqJz2MTP7HHAMMA7YDjzp7hsHID4RERkGOtrjOa8nEknaWtU37JR3eVQAd98M/L7AsYiIyDA1Y/9JvPLsuqzXw5EQ+x44uYgRDW45h83N7FIzO7xYwYiIyPC06MpTqcqxr31UXQ2HHVNfxIgGt57mvG8CLkh/wswuM7MHBiwiEREZdo49fQ6nnnfkXgk8Eg1TM6KKf//RZZhZiaIbfPoybD4LOKXAcYiIyDBmZvzD1y7kmFMP4rbrH+LNVZuoqIxy6nlHcuEnTmbC5LpShzio9GnOW0REpNDMjOPnH8Lx8w8pdSiDnsrViIiIlBn1vEVEgKaNW3nolsfZ+u42ptRP5pRFx1M7qqbUYYlk1Jvk7QMehYhIibg7P/7Szdzx3d9hBh1tMapqK/nh1T/mH350BWdeemqpQxTZS2+S93Vmdl33J80sWykcd3f16EWkLNzxP7/jrv/9A7H2PQVA2nalDkf8v0/fwNjJY2g484hShSeSUW/mvC3PH82ji0hZiMfi/PJrd9Dekvkk4/bWDn7yr78qclQiPcvZQ3Z3JWIRGbJWLl9DMpnM2Wb18+vYtaNF898FlEgkWXbLX7j9+39i05tbqKyp4LSFx3DR35/FhKljSh1eWdDwtogMW7H2WI+FP0JhI96Ru+629F4ikeQrH/shLzy+kvaWDgBiHXHuuekRHrjtSf7rD19g5oFTSxzl4KeetYgMW/seNqPLXHcmI+pqGTl2RJEiGvr+9KvHeDEtcXeKxxO07GzlG5+4vkSRlRclbxEZtkaNHcmJHzyWaGU04/XKmgou+vz5hEL6VVkot3//Ptq6Je5O7vDu+iZWPf9mkaMqP/o/UkSGtat/dAXTD5hCVW1ll+erRlQxb8ERXPjZ95cosqFp07r3cl43M9a99k6RoilfmvMWkWGtdlQN33/qW/z51se5+wf3sO3dHUypn8SFn30/x75/rnrdBVZRHaW1OfPqfkgl75qRVUWMqDwpeYvIsFdRGWXBpaew4FKduTTQTrmggftu+QuJeOZV/p5MctQpBxc5qvKjr5QiIlI0F3/2r6jMcm53ZU0FH/7cOVTVZD/XW1KUvEVEpGgmzxzPd37zeabMGk9VbSVVNRVUj6iisrqCD3/2r1h09VmlDrEsaNhcRESKqv7Q6dz41Nd4tfEN3ly5gdpR1cw77WCqR2iuu7eUvEVEpOjMjDlH1zPn6PpSh1KWNGwuIiJSZpS8RUREyoy5l+a4bjPbDKwryZuLiIgMfjPdfUKmCyVL3iIiItI3GjYXEREpM0reIiIiZUbJW0REpMwoeYuIiJQZJW8REZEyo+QtIiJSZpS8RUREyoySt4iISJlR8hYRESkzSt4iIiJlRslbRESkzCh5i5Q5M1tsZl7gn62l/lwikp0OJhEpc2ZWD6wOHl7r7t/O47V1QAMwF1gAzE+7vMDdlxUs0D3vOTd4n23AGqDR3bcV+n1EhjIlb5EhwMwWAkuDh/Pc/Zk+3qcOWAxcCdzu7hcVKMTO+18Z/LUJuBhYCGxz9zGFfB+RoU7JW2SIMLOlpJLhGnffr5/3WggsdXcrSHB77rvE3a9Ke1wH1Pf1y4bIcKXkLTKEmNlqoJ4C9JrN7BpSXwRuL0hwqXsud/d5hbqfyHClBWsiQ0tnwl4Y9J77LJg7P7r/IXWxxswWF/ieIsOOet4iQ0zQY+5MkPu5+5pSxpPOzOYD9zFAi+FEhgslb5EhyMzuI7Wi+5nBNkwdDO2PBfbVKnORvtGwuUgaM6szs+VmtjXY73xllnaLgwVig9VFpLZizR1Mw9RBz3sxUAfcUOJwRMqWkrdIGnffFvRUvxk8tdfQbrBC+hpSe5QHpaBH2zn/fU2QNEvGzOaa2VJ3X+bu15P6d10Y7PkWkTwpeYtkdjSp/ceZEnRnb/zWIsaTt2BO+frg4dLgS0fRBQn6fuCKtKeXBH9ePJDvG4yiaG5QhhzNeYtkEJQHXZZpu1UwZ7vG3Rf04j5L6Fq1LB9L8qmWliOGzu1jy3oTc6EF79/lswRfJLYyAIVgur33lcBFpfjcIgMpUuoARAaboNxoHalV0d2vLSSVCHuVDNILkpTQAlLlU+eb2dxiFkQJkmc9e0YAgNSwvplBqtLaQFpAhv+OIuVOyVtkb5095S7z3UFv8QbgqsG0/aon7r7GzJaRGi0odiWzi0j1+LOtKl+d5flCmc+e9QsiQ4bmvEX2toDM8933k0pE12d4zaAV7PseW6JRgAZgry8MwegG6dfMbL6ZXdl9dbyZLe3Lwra096g3s4XBDoH6nC8SKRPqeYvsbT7QmP5EsC1sTb7zs6We8w5WmX8R2Lc/98lx/2tIFVzJNY2wJcNznTXYlwX3qQPq3P36YIHZtd3aXpHhHj3ZPYISDNOvIXV4y6Da9y7SF0reImm6z3cHSeV+4Na+JNJSznkHn2UpcMYAFkO5nm7z2d00ApkOSbmKPVXgABrc/fbgy0aX3jipUZBtac/VATf04ovUAlJHpHa+dhupo093y+NeIoOKVpuLpAkWWC0h9Yt/LqktY9eW0xx3p2CV9+JSDvMHXyCWk1ZNrXNY3N2vzdB+CbC684tS0LM/ui/JNdgxMK/zv12w2PAGHT8qQ4F63iJdzSNVfGUBfextDwbBMH+/5+fNrD7TF5cgEY4llRyzji4Ei+XOAG4ws6dJ9cJX5/h3XUTXYe0F7DmnPJ+4O4fh02NfQIaiOyLlSD1vkSEm6NnO729N86DXfG335ByMTiwLEvNWClSjPHi/1elniAfz3/M6V8mnbdW7PddoSHCv+9LPNQ9iPSPfe4kMRlptLjKEBHPEVwJnFOB2S9lTCS1dU5C460itDyiUJlLz0sDuLwmkJdv5pHrOmeau69NrzQfJOP1ei4Hre3MvkXKgnrfIEJE2v7y7d9nH+9SRStwNueaHgwS4JL1321/BHDekkuoCUkPfC7q1WRK8b/eFbUtJVVPrXMG+kNSahS2kFr3tNYWQ6V4i5UDJW2QICBLuclLD3Lf34x5XktpaVgd8O9OisrT2i0kl1wFZUR8ca3pf9/lxM1uebUrAzBbm8/lz3UtkMNOCNZGhoXPIeGy2Y0y7qQPGBX+OJTV03L2ASU8HrxS0eln6nHTwRaKBPSejpctYUjUYech37nqgy7OKDAglb5EyFyTrzoIkmeao+6I3pVTnUqDV20Gyvj7tPW8Arui+EK77PvBuFuazO6CHe4kMakreImUumMst6l7uoFzptu7Jta+CCmirgy8i+5Gah870xSDjQSNB8s83EevQEilbmvMWkbz1p3hKH99vYVCBrd9z1IW8l0ipqOctIn1xMcU9retiMxtL32qcD+S9REpCPW8R6VEwLP0GqepndcDSQm4RE5H8qOctIr21jNTCuP3QyVwiJaWet4iISJlReVQREZEyU7Jh8/Hjx/usWbNK9fYiIiKD2vLly99z9wmZrpUsec+aNYvGxsZSvb2IiMigZmbrsl3TsLmIiEiZ0WpzEREZMjy5HToagQREj8TCE0sd0oBQ8hYRkbLn3oHv+Cq03g0WDZ7swCtPxUZ/CwuNKG2ABaZhcxERKXu+7bPQ+hugHbw59UMHtD+EN12Ce7zUIRaUkreIiJQ1j70E7Y8CbRmudkDiDWh/qMhRDSwlbxERKWveehfQkaNBC97S0/H05UXJW0REyltyC5Dsoc3WooRSLEreIiJS3iIHAZU5GoQhemCxoikKJW8RESlrVv2hHlpEsZpLihJLsSh5i4hIWbPweBj1b0BVhqvVUHs5Fj2o2GENKO3zFhGRsheqWYSHZ+DN34PYcsAhchA24jNY1Zk5X9sRX8/WXXcQT2ygIlLPmNoPEQmPK07gfaTkLSIiQ4JVHodVHkfqqGvHLPfgsruzYdtXaGr+OU4SiGFUsWn7YibX/QvjR/5NUeLuCyVvEREpmWSyifbW35CIv004MpXK6g8QCo3t1z3NDLAe223e+SOadv0Sp333cx7sFd+4/VtEw9MYXXN2v2IZKHknbzM7DrgcOAoYDWwHngFucvcnChueiIgMVS3NS9i1YzGpRNsGVNG8/WvUjrqGmhGfGtD3do+xecf3cW/Ncr2VTdu/PTSSt5n9N/AP7P2VpgG4wsz+193/sVDBiYjI0NTWche7dnwH0nq9nRXSdu38Tyw0geqanlaR911rx0v0tDe8I/4G8cRWIuExAxZHX/V6tbmZ/S1wNbAOuAKYDYwM/rwSeBO42sw+PQBxiojIEOHu7Nr5TSBzrxdvpWXn4mDueoBiIE7PQ+uhoN3gk0/P+2+BjUCDuzelPb8aWG1mvwZeAD4D/KhwIYqIyFCSTLxJMtHUQ5smkol1hCOzBiSGquhBOLGcbcKhUURCg3PVeT77vPcDlnZL3Lu5+3vAHUE7ERGRjNw7elwJbhbCPUe98n4Kh0ZQV3MhlqUym1k140d+usc4SyWfqJroOjmRSRuwpe/hiIjIUBeOzOixjeO9atcfU+u+QnXFoYSstsvzIathVNUCxo/85IC+f3/kk7zvBs43s4xD7WYWBc4P2omIiGRkVklVzSVkrogGUEV1zccwy3a9MEKhauon3sH0sf9DbeVJVEYOYGTVAmaO/zH7jPvBoO11A1hvFwSY2WjgAVJbw/7Z3Z9Ku3Ys8C1SC9hOd/cdPd2voaHBGxsb+xS0iIiUN/d2tm/5a2KxF8Bb9lywGiLRw6gbdzNmuQ4bGfrMbLm7N2S6lnXBmpmtzPB0JXAk8Bczawc2AxPYc5zLeuBpYGgd3yIiIgVlVsnocbfS0fZHWnbdSDLxDqHwFGpqP0lF1dlkGeSVQK5/nRogU7f8nbS/h+g6xx0KXiciIpKTWYTK6nOprD631KGUnazJ292nFzMQERER6Z3BOxsvIiIiGSl5i4iIlBmtCBARkUEr6XHW73qE17bdSWtiC6OiM5hTt4iJ1UcFp4cNT0reIiJDyPb2FWxpeQQnyZiqoxlTdXTZJrl4so373v4M29rXEA9O/9re8QYbWp5gxojTOWHSv5XtZ+svJW8RkSGgI7GVZzdeRXNsFUlvB5ywVVMZnsjcyf8f1dFped1vc9sa3mp5ATBm1B7J+MqZAxJ3Lk+9+x2a2l8n2aVMqhP3NtY1P8D4qkM4sG7gTh4bzJS8RUTKnHuS5Rs+zq7Ymi6nYCW8hZb4mzy94a85cfofCYeqe7xXS3wbd62/js1ta/Bgt7ABk6sO5AP7fJnq8KgB+hRddSR2srb5vm6Je4+Et7Fi6085YPSFw7L3rQVrIiJlrqntL7TG12c5vjJJPNnMxl339HifpCe4Zd0/san1deLeTsI7SHgHce9gQ+sr3LbuWtxzn4FdKFvbXydk0Zxt2uJb6Uj2WNBzSFLyFhEpcxub/0givcRoNwlvYUPzb3q8z6qdf2FnfAvJDF8CEsTZ1rGBtbue6VesvWUW7rGNkyQ0TCux5Z28zewQM/u6md1hZn9Me36GmV1oZnWFDVFERHJJBou5crdp67HNS9uXEUtmv1fMW3l5+/15xdZX4yrn0NPZG3UV9URDtTnbDFV5JW8z+zLwPPAvwAeBBWmXo8BS4GMFi05ERHpUV9VA2LLPZxsVjKk6usf7dCSz997zaVMI4VAFh4z5KOEsJ4uFrZIjx3+qKLEMRr1O3ma2CLiO1MliDcDi9OvuvhpYTupYUBERKZIpI84jtawsMzNj+qiP9HifqdUHE84xzxyxCqZWH9yXEPvksLGXs9/IcwhbBaFgfXXYKglbBXPH/z3Ta08sWiyDTT6TBVcDq4Hz3L3dzM7L0OZl4JSCRCYiIr0SCdVy5KQf8dymT5P0GE4suBImZFEOGf8NqiNTe7zPkWPez/KmO3K2Oazu7AJE3DtmIY6ddA0Hj/0oa3bcQ0t8M6MrZlI/6hyqwsN7hjaf5H04cJO7t+doswGY1L+QREQkX2Orj+H4ab/hrR2/4N2WZThJxlYdz8zRlzOiYr9e3WNkdAJnTv4sf9r4vyQ8hpNaWW6ECFuUc6Z+gZrI6IH8GFnimsYR4z5Z9PcdzPJJ3gb0tEdgApAruYuIyACpjk7jgHHXcsC4a/t8j4PrzmBc5Qye3HIbb7Y8i2HMrJ3HseMWMaGqvoDRSn/kk7xXAcdnu2hmIeAkUkPnIiJSpiZVz+b86f9a6jAkh3xWm98GzDOzq7NcvwaYDdzc76hEREQkq3x63v8DLAK+G6w8NwAz+xZwMnAc8DSwpNBBioiIyB69Tt7u3mJmpwLfBz7Mnl77NYADtwCfdvdY5juIiIhIIeRVV87dtwEfM7PPAccA44DtwJPuvnEA4hMREZFu+lQU1t03A78vcCwiIiLSC8OzoruIiADwTusbrNv1KmYhDhh5JGMrVKqjHPQ6eZvZ9b1s6u5+VR/jERGRItgRa+Kna7/Fu23rcRzD+B03MXvEEXxk5mepCKVqijfHm1m26U88vPkhWhItjIqOZv7EBZw68XQqQhUl/hTDl/V0asvuhmY9FWhxUivQ3d17PMutoaHBGxsbe/XeIiJSOLFkO//12mfZEWsiSaLLtYhFmVFzAFfUX8eO+Ha+/vJX2BnfSdz3HBMatSiTqybzzwd9icpwZbHDHzbMbLm7N2S6ls8+79lZfo4G/pZUadRbgQP6Fa2IiAyo57c9Tkt8516JGyDuMd5qWcX61lX8dO1P2B7b3iVxA8Q8xoa2Ddz9zl3FClm6yWer2Oocl5eb2T3AC8C9pA4wERGRQaix6QE6cpzvHfMOntryAC/veIlklqrYcY/z8OaHuHDaQja0vccd6+/l6aYXSHiCfWv34UPTz6Jh7KED9RGGvbzO887F3dcBdwOfLdQ9RUSk8DqSrT20cLbFmojmOB4UIOEJnmp6ji88v5hHNjfSkmijPRnj1Z1r+M/XbuRna39duKCli4Il78AmNGwuIjKoTa+ZTYjsS5MqrJIpVftm7XV3SpLkB6t+SXuyY6+27ckO/rDhz7yyQwOxA6FgyTs4mOQ0YEeh7ikiIoV34vhzCFn25O3A6RPPpyZck/M+4yomkXTLer0jGePut+/va5iSQ6+Tt5mdkOXnfWb2UeA+4CjgNwMWrYiI9Nukqn04e/JHiVolwTEVAIQIEbVKPjbzn6iK1HDxPn9N1DJvB6sIVTC1ajZtyeynQDvOG7vWFzp8Ib8iLY+S+kKWjQGPk6p1LiIig9hJE97P9Jr9ePDdO3cXaZkzqoFTJnyASVX7ANAw9mg6kh3c/NYvcHeSJFMJPlTBFfVX8cqO9YQJk8iwar1TtbaSDYh8kvd/kDl5J4GtwFPu/nhBohIRkQE3q/YgLt/3X3K2OWH8iRwz9lhe2rGCHbHtjK+cwIEjDyJkIeqiE7j1zXtIeObkXRmqYP6kEwYi9GEvn61iXxrIQEREZHCKhCIcUXfkXs9PrZ7IMeMO5+mmF+hIdj1QMkSI2kg1p088bq/XtSdiPPTu89y/8Vk6knHmjp3NedOOZUzFyAH7DENNryusFZoqrImIlL9YMs7/W30zj2xuJGxhHAecadWT+eKcqxhfOaZL+w2tW/i7xh/QkminNZGaL68IRQkB1x12KceNn1P8DzFI5aqwpuQtIiL9tq1jB89ue4VYMs7skTPZt3b6Xm2SnuSjj3+LjW1bgyTfVVUoyk+O+wJTqscWI+RBL1fyzjpsbmYr+/h+7u4H9vG1IiJShuoqRnHaxGNztlne9DrbYrsyJm6AuCe5861H+cwB5w9EiENKrjnvGnKvLhcRkUFoW0cLS9c9wa/fWk5zvJ0ZteO5tP4kzph8MCErdG2u3lve9PruofJM4p7giS2v8BmUvHuSNXm7+95jHiIiMqhtaN3GJY/9P3bF22hPpg4UeWn7eq574U7+tOFFFh91cckSeMiyF3TZ3Yae20jhy6OKiEgJXfvMLWyL7dqduDu1Jjp4bPNK7n7rmRJFBkePPZDqcPYzwKMW4cQJOsykN5S8RUSGiDeaN/P6zo0ksyxEbkvEuGnNw0WOao8jx+zHhMo6wll6/pFQiAuma194b+RTpAUAM4sC84BpQMbSOe7+q37GJSIieVq5YyMRC9NOPGub9S1NuDvWiyHsQjMz/uuoq7j6mR+ytaN59/x3VagCM+M/jriciVV1RY+rHOWVvM3sUuA7wPhsTUgtclPyFhEpsupwlJ6mjCOhcEkSd6cJVaP52XHX8MSWV3hw0/N0JGPMHbM/Z05poDZSVbK4yk2vk7eZnQn8BHgN+E9gMalDSBqBU4HTgduBewsepYiI9Ojo8fUkPfsxniGMUyeWvghKJBTmpAmHcpLmt/ssn57350nVMD/O3XeY2WLgGXf/OvB1M7sK+B7wPwMQp4iI9KA6XMFl9Sdz05pHaEvE9rpeEY5w5ezTShBZYbzXtovfrXuZDS07mFY7mvNnHkJdZXXO1yTdue+dV7lx5eOs29XEyGgli2bN48P7zmNURfn29HtdYc3MtgB3u/sngsdJ4Kvufl1am4eBZnc/p6f7qcKaiEjhuTvff+0+frn2ccJmxJNJoqEwFaEI35n3EeaN3bfUIfbJD196jO+9+ChgtCfjVIUjOHDtkafx8QOPzviapDtXP7mURzetpiXty0xlKMLoiipuP+2TTKoeVZwP0Ad9qrCWQS2wIe1xO9C9ivxTwOX5hSciIoViZvz9QWdySf1JPLTpFZpjbcwcMZ4TJszOusp7sLt11XP8YMXjtCf3nF7WlkgtyvvOcw8ysWoE58zcezrgtjee4ZFNq2ntNgrRnoyzpb2Ff3zqTn55yscHNPaBkk/y3ghMSHv8DtC9DOqoPO8pIiIDoK6ihgv2mVfqMPot6c53X/jzXgm4U2sizneef5C/mnHQXgvxblj5WNbXJTzJi1vf4c3mJmaMKL9a6vl8DXuZrsn6MeAMMzsewMzmAIuCdiIiIv22ZscWdsU7crbZ2NrMxtadXZ5LeJK3W7blfF00FObV7Zv6HWMp5JO87wFONLMpweNvk9oW9qiZbQBeJNXz/kZhQxQRkeGqI5nosWRqGKMjkejyXAjrVRnYynB5Dhbnk7yXADOBJgB3XwEsAO4DmoEHgXPd/XeFDlJERIanfUeOJdHDwupwKMTU2q4Lz8yMUybtnzPtJz3JsRNm9T/IEuj1Vw537wDe7vbcY8DZhQ5KRET26EgkuHfdSm5/fQXNsQ6OmjCFSw+ey4yRQ78aWXUkykX1h3PrmudpT+xdOa4qHOHSA+YRDYX3uvYPB5/K45vX7F7c1uW+4ShXHngSVeHogMQ90PLZKjbK3XcU6o21VUxEpGfvte7iQ7//FZtbmtkVTy2+ioZChCzEV487gw8feESJIxx4bfEYlzxwM69s3dRly1dNJMrc8dO58dRFGZM3wOPvruGzT95O3JO0J+JEQ2GS7ly2/7H84yGnl7TaXE9ybRXLJ3nvAn4N/BS4z3v7wiyUvEVEenbBb3/Bi+9tJJ6hclpVOMKt53yEIydMyfDKoSWeTPKn9a9x02tPs7FlJ9NqR3P5gUdzxrTZhEO5Z4BjyQR/3vg6bzRvYXS0mgVTD2JMZU2RIu+7QiXvlcD+pBapbQB+DvzM3V/pS1BK3iIiub3atJkP/PbnGYd9IVXGfMGM2dww/4PFDWyY29XRwbod26iKRNh39JgB670XpEiLux8QbAv7OHARcC1wjZk1kuqN3+zuWwsQr4iIAE9sfItc3SsHntz4VrHCGfZ2dXTwtcce4tevvUIkFCLhScZUVfPFE97HebMPKmoseZXbcfe/uPtVwBTgI6QOIZkLfB94x8xuN7NzCx+miMjwEzLr6ZAwQoN3ynZIaYvHWXjnLdz12su0JeI0xzpojcd5p3knX3jgXn7+4nNFjadPtfLcvd3dbw1qmE8HrgFWAheSmhcXEZF+OmnqzJw977AZp0yvL1o8w9mdr73E2u1bae+2nxxSif0bj/+Z5o7cxWQKqd+Fbt19E7AceBaI0eNpsiIi0hv1o8dyzKRpVGRZSR0Nhfn0YccWOarh6aYXnqU1nnntAaSKwvxxzetFi6fPydvM9jezr5nZWmAZcCmwHvhqgWITERn2fnj6BcwZO4GaSHR3IRYTFwAAIABJREFUz6gqHKEqHOH/Tj2Pg8ZOyPl6KYz3WlpyXm9PxNm0q7lI0eR5iIiZjQYuBi4DjiPVy24mtWDtJnd/uOARiogMY6MqKrn7vEt4YuNb3LX6JXZ2dDB3wlQWHXAYoyvL9zzqcjOpdgRNba1Zr1dGIkwd0f2gzYHT6+RtZrcC5wGVwVMPATcBd7h77q8kIiLSZ2bG8VNmcPyUGaUOZdj6xBFz+fLD92cdOnd3zq6fXbR48hk2v4hUedR/B/Z19zPc/edK3NKdu/P2jh2saWqiPccckYhIufjAAXM4aNwEKsN7rz+oikT42vvmUx0tXqnVfIbNTw5qmYtkde/rr7P44UfY2NxMxAwHLj7sMD5/0olUFfF/bBGRQqoIh7n5gov4zyce4+aXX8CBRDLJPqNG88UT3scZs/Yrajy9rrBWaKqwNvTc8sILfO3Bh2jr1tuuDIeZM3ECN198MRUZvrWKiJST9kScDTt3UhWJMHkA57lzVVjr91YxEYDmjo6MiRugPZHgtffe4/evvVaCyETk/2/vvuOlKM8Fjv+e3T0NDr2KIGhUxAqCAlYQEVHARI3R2DWxJ95oTGJu9BKvphE1PfaWXLtGQVGTUERFQFpsKCC9CSjttD1bnvvHzMK6Z+s5Ww/P9/OZz+7OvDPz7Hv27LMz8877muyq8Pro17FTThN3Kpa8TVa8vnQZniT9+9YHgjy6YGEeIzLGmNbLkrfJik01u6gPBJKW+bwmf/dAGmNMa2bJ22RFz+rqlC0tu7Vtm6dojDGmdbPkbbJizEEHEUrS+LGqzMdlRx+dx4iMMab1suRtsqJdRQW3nnQSlb6mdx9WeL0c2LkL4w/pX4DIjDGm9cmoe1QAEfEBI4ABQLWq/tKdXw5UA9u0UPefmYK6eNBAOlVV8pu33uaLujpnvNtwmLMPO4xbTz6JijiJ3RhjTOYy7dv8VOARYF+cfs0V+KW7eDDwNnAh8HQWYzQlZNwhh3Bm//6s3r4dfyjEfh065LXXIWOM2RukfdpcRI4GXsFJ+LcQk6BV9V1gFfCNLMZnSpCI0K9TJ/p37WqJ2xhjciCTI+/bgXpgiKpuEJH/iVPmPWBQViIzOfX5rho+3byVCq+XQX16Wc9nxhhTQjJJ3icA/1DVDUnKrAHOaFlIJpe+rKvnJ5PfYPbKNVT4vCiAwrUnHMt3hg9BknS0YowxpjhkkryrgS0pylSxF7Zgr28MMG3JZ2zcvpNu7doy+rCDaFtRXuiwmqhrDPDNR55i485dBMNhGkOh3cv+9NYcdvkbuWnk8QWM0BhjTDoySd7rgcNSlBkIrGx+OC3TEAjy4twPefLtRXxRU0fn6jZ8+/iBnDPsCCrLctPSecriJUx8eRoi4A8GqfD5uGPKdG4ecyIXDhuYk3021wv/+YgtNbUEw+Emy+oDQR6du4DLhh5N5zZVBYjOGGNMujI5Sn4DOF1EhsdbKCKnAcfjNGrLuzp/Ixf+4SnuffUtVm/dTk1DI2u2bud3U9/mgt8/SW1DY9b3OWvpSv7n5X9THwhQ1xggFFbqGgM0BILc/cZbvLJ4Sdb32RJPLvhP3IFDIgTh9SVL8xiRMcaY5sgkef8C2AH8W0TuAg4BEJEx7usXgM+Be7IeZRp+O2UWq7ZsoyHw1eTUEAiyZut2fjtlVtb3effrbzXZX/R+7/7n2xTTLe876huSLvcHg2yrq89TNMYYY5or7eStquuAMTgJ+lbgPJx7vae6r7cAY1U11XXxrKtvDDBlwRIag6G4yxuDIV5ZuIQ6f/KBMzKxtaaW1V9sT1pmZ72fz7Z8mbV9ttR+nTomXV5VXkbfFGWMMcYUXkYXglV1vogcDJwFDAO64ByNz8FpiZ79c9Np2LhtJx5P8lbSXo+HDdt2cGDPrlnZZ0NjEK/HA6H4PxicfQr+BEfmhXD5sKP55OUt1CUY/UuA0YccmN+gjDHGZCzt5C0ivYCAe2T9gjsVharyMkKhpo2wogXDYarKs9dhSPf21XhSnLcIhEL07VI8R7Kj+x/IS/svYfbK1dTH/Kio9PmYdNZY68LUGGNKQCbXvNcCv8lVIC2xT6f27NOpfdIyPTu2o1eKMpko93k575gjqfDF79yk3OvljCP6U11ZkbV9tpRHhD+dO46bRhxP9+q2eD2CR4ShfXvz2IXncGr/rxU6RGOMMWnI5DBrO7A5V4G01C3jT+Kmv70a9zR1ZZmPH447MesdkHx/1HEsWr2BTzdt+cqRbFWZj96dO/DTcSOzur9s8Ho8XDr0aC45dhD1gSA+r8d6VzPGmBIj6baGFpGpgE9VT8vGjocMGaLz58/PxqZ2e2XBEv73xWkIEAiGKfN5UIX/PvsUJgw5NKv7imgMhpj6/ic8PnsRn+/cRZe2bbho+CDOGnRozu4tN8YY0/qJyAJVHRJ3WQbJeygwC7haVR9raVC5SN4A/kCQmR+vYPOOGrp3qGbEoQdQYUnUGGNMiUmWvDPJaqOA6cDDInINziAkm3CGBY2mkTG+C6GizMeYow4u1O6NMcaYnMsked8Z9fxYd4oneoxvY4wxxmRZJsl7dM6iMDm3dst2lm3YSpuKMo7+2r6U26UEY4wpWWl/g6vqtFwGYnJj07Zd3PrYa3y8ZhO+SKtyVa4eO4yLRw22IUCNMaYE2eFXmpau3cI/537Crno/A/r1YMyxh1BVkb1OX3JhR20DF016km019YTCij+wpze4v0x9l4ZAiKvGDi1ghMYYY5rDkncKDY0BfvyXV5j/6VoCgRBhVaoqyrj7qZn86tpxHH/E/oUOMaGn31zMzjo/oXDTOwoaGoM8/M+5XDBiIO2qiqcjGWOMMaml3cOaiAREpDGNyZ/LgPPtjkfeYP4na/A3Bgm7t9XV+wPU+wP8+C9TWL5ua4EjTOzF2R8kHKwFnA5b3vzgszxGZIwxJhsy6R51boLpUyCEcxS/BJiX5RgLZvO2Xcxc9NlXTjdHawyGeGxq8b7dmhRjmAdCIXbWtarfWsYYs1fIpMHaCYmWiUh74A/AEGB8FuIqCnM+Wo3X64EER6/hsPL2+yvyHFX69u3SgaXrE4/QWub10qdb8QycYowxJj2ZHHknpKo7gStx7vG+KxvbLAbBUJhUPdDFu56ciXR7uGuOS0cNTjqSWrnPx3ED+uZs/8YYY3Ijaw3WVDUkIjOAc4Hrs7XdQjrya/ukLHPY/j0z3u7ylZt59OnZzF7wGaFQmD69OnPROUM5feRhWb116/Qh/Zk6/xMWLF9HQ+OegVNEnJ7oJl15pjMmuTHGmJKS7W/ucqBTlrdZMAf27sYBvbrg9cRPqJXlPi4/M1FHc/HN/88qrv3J//HWvGUEg2FUYc36L7nn/n9z5++mZvVI3Ovx8Purz+L7E06gR8dqRASvRzj5iK/xxM3nc8zBfbK2L2OMMfmT9sAkKTckchAwB9ioqoenKp+rgUmybcu2Gi7/xVPsqG2g3h8AwOMRyn1eLj/zWK4cNyztbQUCISZc9mdqauM3EqusLGPizeM5/pjcjKsdCIbwejx4EvwYMcYYUzyyMjCJiDyQYJEP6AOc5D7/ccYRFrFunap5/s7LeH3eJ7w06wNq6xsZ0K8HF542mP77dc9oW2+/t5xwkmvkDQ0Bnn7pvZwl7zKfjdttjDGtQSbXvL+TYvlyYJKqPtSCeIpSZUUZXz/xCL5+4hEt2s7a9V9Sn+L2rTXrv2jRPowxxrR+mSTvgxLMDwPbVHV7FuJp1arbVlBe5sMf1XgsVts21tuZMcaY5NJusKaqnyWYVlriTs/Jww9O2iCtotzHhNOOymNExhhjSlEm3aM+ICLjUpQ5I8m18b1el07VTBgzkMqKpic8vF4P7aorGTf6yLzF428MMvf9Vcx8bxlrN23L236NMca0TKbXvNcBryQpMwins5arWhJUa/a9K0ZSVeHj2SkLnN7bcDqD6X9AD35+y3iq2+b+tLmq8uSr83nkxXd331ceCIbov38P7rjhTHp2bZ/zGIwxxjRftkcVK8fp59wk4PEIV118EhedO4xFHzgDnhy4f3f227dz3mJ47KU5PDF5Hg3+r157/2j5Rq687f948jeX0aFdVd7iMcYYk5lMk3fCC7YiUgacCHzeooj2Em2qyjn+2APzvt+aOj+PvzQPf6Bpo7lwWKmp8/P8vxZz5dnD8x6bMcaY9CRN3iKyNGbWjSJycZyiXqA70Aawa95F7O2Fn+HxCgTiL28MhJg8/X1L3sYYU8RSHXm3Yc/RtgJlQLzzqSFgKTAN+HnWojNZt7OmgWAonLRMbX3ye9GNMcYUVtLkraq9I89FJAzcrap35DwqkzN99ulEmddDIMEY5QC9unXIY0TGGGMylck179FA8Q5ebdJy7BF9qSgvo64h/nnzyooyLhx3TJ6jMsYYk4lMOmmZpqorcxlMa6OqfLxwFVOfnsP0yYuo2Vlf6JDwejzcdeN4Kit8xI4+WlnuY9CA3px6XP/CBGeMMSYtGd8q5rYqHwzsC8S9KVlVn2xhXCVv1dJN3HHdE2zbugsNKx6PEAqFmXDJ8Vx+8+l48jCOdjAYYsknG6lvaGT/vl3p1s25f3vQgN48+PNv8/ALs3lr4QrCoTDdu7TjwnHHcPboo2yMb2OMKXIZDQkqIpcAk4CuiYoAqqoph68qlSFBm2PLpu1ce+a91O5qaLKsoqqM8Rcdx5W3nNFkWX19I8s+3QTAQQf3pKpNebNjeGnyQh5+bBbhsCICjY0hBh7Zh5/cciadO1fvLqeqhMKKz2sJ2xhjikm2hgQ9DXgU+BT4LfBrYDIwHxgBnAI8D7zRwnhL3gsPzcJfH/+asr8+wOQn3uFbV4+kur3TcD8YDPHQX2fwyssLdyfRYDDM2PFHcdX1p1JWltlQnk89M4fH//4O/phOWBYuXsM133uCR+6/gurqSgBEBJ/Xxvc2xphSksnh1g+BbcAwVZ3kzluoqneq6qnAtcDXgSVZjrHkzJiyiGAwcWtur9fDvBlONakqd97+D155aQH+hgC1tX5qa/34/QFem7KYiT99PulgJrFqa/089remiRsgFAqzY0c9k19dnPmbMsYYUzQySd6DgcmqujPe+qp6PzAH+FmWYitZ/gQtuSNCYaWu1g/Ap0s2MH/eirjJ1u8P8v7i1Xz0/rq09/3Ou8vwJjmSbmwMMuUVS97GGFPKMknebYGNUa/9QLuYMvOAoS0NqtT13r9b0uUej9Dv4J4ATJ2ymMY4iTvC3xDglckL0973jh31BIPJO2GpqWl6Ld4YY0zpyCR5bwKis9IGIPaeovZkf7CTkvPN746gsipxY7OOXao5bHA/AL7YsivpaXFV+HJrTdr77tWrI2W+5NfIu3e3UcOMMaaUZZK8P+aryfodYJSIDAcQkQHAeW65vdpJZxzJsFGHNkngPp+HNtUV3P7nS3YPxdmnX1d8vsR/Bq9X6NO3S5P5oWCIhXM+Y/pr7/PR4jW7fwAMPeaA3UONxlNZWcZ55x7bnLdljDGmSGRylPwacK+I7KOqG4HfAOcCb4vIZpyjcg9wV/bDLC0iwo/uPp83X/0Pzz04k/WrtlJeUcaI8QM598qT6N6r0+6y4846mikvLgDin+r2+bxM+Mbgr8yb9a8P+cNdrxAKhogctLdrX8WPf3EOhw/qy89+Op7bf/6PJtfRKyp8HDagF6eecmhW368xxpj8Svs+bxEpx0nQW1XV7847HrgN+BqwCrhXVaems73WfJ93ph5/6E2ee3puk4ZulZVlTDh7CN+97pTd82bPWMKvbn0+bgO3isoy7n7kCg4a0ItPPt3Iw4/OYuHi1XhEqG5XybfOPZZzzx6CL8VpdWOMMYWX7D7vjDppySZL3l81c9rHPP7Qm2zcuB2AHj06cPEVJzLqtMN3n2JXVS4eew9bPt+ZcDuDhh7Ar+67dPfrQCBEIBCkqqp893aMMcYUv6x00mJya8SoQxkx6lBq3ZbgbdpWNEm2K5d9zq4U/aN/sGAV9XV+qto4PdeWlXkz7uTFGGNMcWtO3+aHARcAA4C2qnq6O38/YAgwXVW3ZzXKvUhbt+ezeGp3NSRtjAbg8Xqor2vcnbyNMca0PhklbxG5HbidPa3Uo8+5lwHPATcCf8pKdOYrevXpTGNj4p7bwOm9rX2HNnmKyBhjTCGkfauYiJwHTASm4xxh/zp6uap+BiwAJmQxPhOlS/f2HD5oPzwJjr7Lyr2MPXswPjtNbowxrVom93nfCHwGjFfVhUC8bro+Bg7KRmAmvpsmfp32HarwlX31T1de7mOf3p25+JqRBYrMGGNMvmSSvI8EXo/cJpbARqBHy0IyyXTv2YH7nr2OCd8aSttqp1Fbx85tueA7J/HHv19Fm7Z2rdsYY1q7TK55C4l6EtmjG06f5yaHOnWp5uqbT+fqm08vdCjGGGMKIJMj7+XA8EQLRcQDnIB1j2qMMcbkVCbJ+1lgsIjcmGD5j3Cudz/V4qiMMcYYk1Amp81/hzPwyD1uy3MBEJFfAScCw4D3gPuzHaQxxhhj9kg7eatqnYiMwLmH+3z2HLX/COd+76eBa1U1EH8LxhhjjMmGjDppcXtOu0hEfgAcC3QBdgBzVXVTDuIzxhhjTIxm9W2uqluAV7McizHGGGPSkLTBmohcIiJH5isYY4wxxqSW6sj7MZwuUd+PzBCRS4FLVfWUBOuYvczyD9Yy+dE3WbN0E517dODMi09g0En98XgyuZnBGGNMuppz2rwfcHKW4zAlSFW5//YXeP2p2QQaQ4RDTh8+i2Z9wkFH7cedf7+O8sqyAkdpjDGtjx0amWb793Nzef2pd/HXB3YnboCGukY+Xbiav972fAGjM8aY1suSt2kWVeXJ372Ov74x7vJGf4DpL75H7c76PEdmjDGtX7Nam5vMhcNhFk77iJf++i82rd5Cl16dOOvqUxk6diDeBEN8FrO6mga2rN+etIyvzMuy99cw8IT+eYrKGGP2Dukkb815FK1cKBjijgv/xH9mLaGh1hm3Zd2yTXw6fwUHHtWXX7z0w5K7Nuw0Rkv90Ug09rgxxpjmS+ebdaKIhCITcDtA9LyYKZjbkEvPM/e8yuKZH+9O3BENtX6WLlzJw7c/W6DImq+qbQV9Dkw++ms4FObggX3zFJExxuw90knekuFkh1pRQsEQL/7pn4mvDTcEeOOJt2iocxK7qvLJvGW8/Y+5fDJvGarFe+Ljkh+No6KqPO6yiqpyxl16IpUJlhtjjGm+pKfNVdUScQtt3bCNgD95d+8er7B26UZqt9Uw6fI/s+vLGsQjhENK+y7V3PLo9QwceXieIk7f8DFHcuFNY/nbb18FhUBjEI9XKCvzMXzMEVx264RCh2iMMa2SNVjLMV+ZN+XRs6qy6sO1/P6a+/DXffUIvaG2gZ+N/yW/euM2Dj/+kFyG2izfvO5URnx9MG889S5rlm2iS48OnHb+cPYf0KvQoRljTKslhTotO2TIEJ0/f35B9p1PqsoVA3/CxpWbE5bp2K0dnTpVsnzhyoRlDh5yAH+e9+tchGiMMaYIicgCVR0Sb5mdFs8xEeGy289OfG24TTlnXTOa1R+tS7qdVR+uZeuGL3MRojHGmBJjyTsPTj5nKJf87BuUV5TtviWsrMJHWUUZ37juNIaNPQpfefIrGL4yHzXbavMRrjHGmCJn17zz5Jzvnc6oC45j+jPvsnHFZrr16cIp5w2na69O1O6oJRhIfoddMBCkW+/OeYrWGGNMMbPknUcdu7bn7OvHNJnftkNbho8fwjv/mEcoGGqy3OvzMnzCMbTt0DYfYRpjjClydtq8SNzwhyvo2KNDk9PnvnIfHXt04PrfX16gyIwxxhQbS95FolOPjty/aBJnXT+GqnaViAhV1ZVMuG4M9y+aRKceHQsdojHGmCJht4oVIVUlGAjiK/MhIoUOxxhjTAEku1XMrnkXIRGhrLy0BioxxhiTP3ba3BhjjCkxlryNMcaYElOwa94isgVYXZCd519XYGuhgygCVg9WB2B1AFYHYHUAqeugr6p2i7egYMl7byIi8xM1OtibWD1YHYDVAVgdgNUBtKwO7LS5McYYU2IseRtjjDElxpJ3fjxQ6ACKhNWD1QFYHYDVAVgdQAvqwK55G2OMMSXGjryNMcaYEmPJ2xhjjCkxlryzSEROF5FPRWS5iPwkzvIKEXnGXT5XRPrlP8rcSqMObhKRj0XkfRGZJiJ9CxFnrqWqh6hy54iIikiru2UmnToQkfPcz8NHIvJkvmPMtTT+H/YTkRkissj9nzijEHHmiog8IiKbReTDBMtFRP7g1s/7InJ0vmPMhzTq4UL3/X8gIrNF5KiUG1VVm7IwAV7gM+AAoBz4D3BoTJnrgPvc5+cDzxQ67gLUwUigjfv82tZWB+nWg1uuHTALmAMMKXTcBfgsHAQsAjq5r7sXOu4C1MEDwLXu80OBVYWOO8t1cBJwNPBhguVnAK8BAgwD5hY65gLVw3FR/wdj06kHO/LOnmOB5aq6QlUbgaeBs2LKnAU87j5/HhglrWvYsJR1oKozVLXOfTkH6J3nGPMhnc8CwP8CvwYa8hlcnqRTB98F/qyq2wBUdXOeY8y1dOpAgfbu8w7AhjzGl3OqOgv4MkmRs4An1DEH6Cgi++QnuvxJVQ+qOjvyf0Ca34uWvLNnX2Bt1Ot17ry4ZVQ1COwAuuQluvxIpw6iXYnzq7u1SVkP7unBPqr6aj4Dy6N0PgsHAweLyDsiMkdETs9bdPmRTh1MBC4SkXXAVOB7+QmtaGT6nbE3SOt70YYENQUhIhcBQ4CTCx1LvomIB7gHuKzAoRSaD+fU+QicI41ZInKEqm4vaFT5dQHwmKreLSLDgb+JyOGqGi50YCb/RGQkTvI+IVVZO/LOnvVAn6jXvd15ccuIiA/nNNkXeYkuP9KpA0TkVOC/gQmq6s9TbPmUqh7aAYcDM0VkFc61vsmtrNFaOp+FdcBkVQ2o6kpgKU4yby3SqYMrgWcBVPVdoBJnsIq9RVrfGXsDETkSeAg4S1VT5gVL3tnzHnCQiOwvIuU4DdImx5SZDFzqPj8XmK5uC4VWImUdiMgg4H6cxN3arnFGJK0HVd2hql1VtZ+q9sO5xjVBVecXJtycSOf/4SWco25EpCvOafQV+Qwyx9KpgzXAKAARGYCTvLfkNcrCmgxc4rY6HwbsUNWNhQ4q30RkP+BF4GJVXZrOOnbaPEtUNSgiNwBv4LQyfURVPxKRO4D5qjoZeBjntNhynMYL5xcu4uxLsw4mAdXAc25bvTWqOqFgQedAmvXQqqVZB28Ap4nIx0AIuCWdI45SkWYd3Aw8KCI/wGm8dllr+kEvIk/h/EDr6l7X/x+gDEBV78O5zn8GsByoAy4vTKS5lUY93I7T/ukv7vdiUFOMNmbdoxpjjDElxk6bG2OMMSXGkrcxxhhTYix5G2OMMSXGkrcxxhhTYix5G2OMMSXGkrcxRcYdZUxFZETM/H5Ry/oVJDhjTFGw5G2MaRER6SgiE92pY6HjKQQRGej+qFqburQxLWedtBhTOgLAp1HPi0VHnE4nAB4D9qa+ySMio4W9XNAozF7DkrcxJUJV1wOHFDoOE5clb5NXdtrcGGNawO2XehDOEL8zCxuN2VtY8jZFS0T6iMhvRGSxiOwQkXoR+UxEXhaRS0SkMs46XhG5QkSmi8hWEfGLyHoReS62AViCfY5wy653190qItNE5HIR8SZYZ6J7vXOm+/ocEfmniGwWkbCITIwp30lEJrnvpUFENrr7HJwitoQN1ty4VUTUfX2giDwiImvd97FORB4UkbhjJYuIR0RGicgfxBlbe52INIrIFyLypohcIyJlcdabCayMmrUyKsbddRKzTrmIXCciM9z6bRSRTe7fdWyS918lIj8UkXdFZJuIBERki4h8LCKPi8g5yeovzvb+6sa4PVEDQBG51i0TFJGTEmwqctT9mqoG3L9vnbveeSli+F+33ApxO7U2Ji2qapNNRTcBFwP1OIM1KOAHtuJc643MGxizTgdgRtTyILANCEfNm5Rkn/dElQu76waj5k0D2sVZb6K7fCZwd9T6X7rrT4wq2w9YFfO+dkQ9nxC1bETMfvpFLesXs2xE1LKRwC73+c6YOlsP7BvnPURvW931t8fMmwVUxaz3Is4oWJEyW4BNUdOLMeX7Ah/G1HPsfv4aJ752wOI4f5/o97Yqw89YVVQsswFfzPLD2fMZ/HmS7fzbLfOtqHmPufP+nWQ9L86wqAr8tND/czaV1lTwAGyyKXYCzmRPwn0bZ2B6j7us3H39AHBozHrPRyXB7wFt3Pk9cUZ0i3zJXxNnnzdELb8f6OnObwv8V1SSeDrOuhOjEp4CvwK6ucsqgL7ucy/OMJGKk9i/GUkYwKFuctwWFceImP30i1rWL2bZiKhlX+Jcez0kqs7Ow0nkCjwR5z30Bv4OjAc6R82vBi7DSfoK3BNn3YRxxZRrCyxxy80ATgYq3GUdgB9E1eGNMev+zJ3/BXB21HoeoBfOj70HmvFZOxxnNCsF7oqaH53Y3wa8Cdbv6H42/ED7qPlD2fMj44AE6453ywQinzebbEp3KngANtkUPeE0olzhfqm9BZSnuV7ky1KBqxKUiST3LUBl1PwqNyko8GSCdb8Xtf3BMcsmRi27O0mM50WVGxVneRucoRFbmryn4/7YSfAe6og5ykyjfoe469ZE112quGLK3caeMxRlCcp8I+pv5IuaP9Wdf2sOPnPXuNsOASPdefe587YB+yVZ99tuuTfiLFvkLvtlgnWnuMtfyMX/kk2te7Jr3qbYjAT2d5//QFUb01zvW+7jOuChBGVucx+7AqOj5o8GOrvPJyZY9y/ARvf5txOUCQO/ThJjZPz2d1R1WuxCVa0DfpNk/XT9QlXDceZHWkJXAQdlskFVnQ9sxjl6HtjMuK50H+9R1US3ur2Ec4agKxDdBiBy+9k+zdwrcPsFAAAGq0lEQVR3QuqMp/wizlH830XkKuBqd/F3VXVNktWTtTL/q/t4WWx7AbftQeT6/v3NCtzs1Sx5m2JznPu4yU0Y6YoMXD8jQeJCVZfgnP6NLh/9fK2qLk2wbgjniDZ23WjLVXVzGjFOT1Im2bJ0zU0wf0PU886xC92GZNe4je02uA3ddjc+A7q7RXtnGpCbrPq6Lx92G6g1mXB+IFW75fpGbeIV9/EGEXlKRL4uIl0zjSOJ7wBrcE7BR5LpQ6r6fKIVRKQcJwErMDlOkSdxLgP0xDlFHu0KnMsoK4F/tShys1ey5G2KTU/3cXWG60USy/qkpZwj8+jyLV03WrLEne5+1iVZlhZV3ZVgfjDqZeyRYHdgPs7R4micI9wwTiPBz90p8qOobTPC6hX1vCvQI8kU+V5qExX7k8DvcRLl+cA/gC0iskxE/pyqpX4qqroNuD5q1grgxhSrnYLTkG6Bqjb5u6lqDU47AoCrIvNFxMOesxAPqqo2N26z97LkbYpNKX+RhQodQAvcCxyBc+3/CmAfVa1S1W6q2lNVe7LnyL05tzRF32Y3QFUljemx6A2o6n8B/YGfAq/hnEo/ELgOmC8iv2tGXNG+G/V8X3fbyaTTMUvk1PnoqNvRTsM5qxAEHs0sRGMclrxNsdnkPvZNWqqpyFFvqlO6keXRR8ktWTcTkfXi3mudxrKccK/Hnu2+vEFVH1XVTTFlvDhHzM0Vvb1M/7a7qepyVf2lqp4BdAGG41wnB7hRRCY0Z7sicgPObXoh4GOcuwSeFpE2CcqLWx6SJG9V/QDnNrToo+3Ij4SXY+vZmHRZ8jbFZrb72FNEEl1bjidyfXyke1qyCRE5hD3J8b046/YWkYMTrOvFaUwXu24mdseYpMwpzdx2S3QDIh3eLEpQ5oSoMrGi2xjEPSpX1VXsuVwQe/23WVQ1rKpzgHNxrlfDVxsipkVEjgAmuS/vAM7AOaofgHNGIp5jcC4FrHATdDKRo+8r3Gv/kff/QKaxGhNhydsUmxk41xsB7nUbBaXjafdxX5zGR/Hc4T5uxelYI+JfOKeLIXFr86vZc932qTRjivWM+3iCxOntTUSqgFuaue2WiNz/DXBU7EIR8QF3pVg/ItmoYg+6j1eKyKBkAYlI55jXFYnKuo0JI3clxG2smGQ/VTifnUqc+7nvUtXV7LlGfVWCntsy6cv8OZzPVy+cRmxlWEM100KWvE1Rcb+IIx2mnABME5ETIkfTbovoESLydxE5NGq9ecAL7ss/isgNkVOeItJTRB7E6RQF4DZVbYhat549SfsCEblPRHq467YRke8Dkeupz6jqgma+vReAhZHn4nSj6nX3MwDnOm63Zm672dyGVe+4L+8RkVOi6vtwnHushwC1Cdbfzp6j6svdZB/P3cAHOIlyhvs36hJZKM7QomNF5Amce/yjzRWn69YRItI2ap1eIvJH9lyfnprm2464F6eDnO3Ahe7nD1V9DqdjH4AHRaRPzHppJ29V9eP0uAYQ6WLVGqqZlin0jeY22RRvAi4BGtjT+UcD6XWPOjNqeQCnt7Hmdo/6Zcz+ppOie9Q03tcBOKd4o99XpHvQrHSPmmL/ibY9GKcDlui4IkfkAZwezFa5ry+Ls92fxay7xi3/dEy5XsC7MfW8jT1dxEamZTHrrYqzTk3MOk16f0tRF2dHrXtunOVt2NMj3CzcXtaAr7nztpKg57U42zow6nNoParZ1OLJjrxNUVLVJ3CGv/wdTgOiIE7nIqtxGihdjPPFGr3ODmAUTsOgmTj32FbjNJZ6Aaf3rISnpVX1Jpxrzi/g3BpV7W5jBk4L7NGa4DasDN7XCpxOTu7BOXUqOMnueeA4VY13v3DOqXM24VjgWZyk5MF578+6cf0txSZ+gXNr1Xyc5NQbp2Faz+hCqroB54zKBTj3Rm/ESZLlOAl6Ck53tLGDgJyPM2b4NJx6K8c5/bwa53LEKPfvlxb3SDrSmc/DGud+bnU6zbkA50fViTg/UGDPUfer6h6pp6Kqy3H6ZgdrqGayQFTtzI0xxqRLRGbhJPNzVPXFNNfpCazF6f53jKr+M4chmr2AHXkbY0ya3F7djsM5W/JGBqteg5O4l2MN1UwWJGpYYowxpqnOwJ04XenGbcAXy73l8Wb35T1qpztNFthpc2OMyQERWYXT2Uvkuv8iYKgmHpTFmLRZ8jbGmBxwB3MBp8Hk68BPVPXzAoZkWhFL3sYYY0yJsQZrxhhjTImx5G2MMcaUGEvexhhjTImx5G2MMcaUGEvexhhjTIn5f5EY+tTB7D3cAAAAAElFTkSuQmCC\n",
- "text/plain": [
- "<Figure size 504x504 with 2 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "pl.close(10)\n",
- "pl.figure(10, (7, 7))\n",
- "\n",
- "pl.subplot(2, 1, 1)\n",
- "\n",
- "pl.scatter(ys, xs, c=phi, s=70)\n",
- "pl.ylabel('Feature value a', fontsize=20)\n",
- "pl.title('$\\mu=\\sum_i \\delta_{x_i,a_i}$', fontsize=25, usetex=True, y=1)\n",
- "pl.xticks(())\n",
- "pl.yticks(())\n",
- "pl.subplot(2, 1, 2)\n",
- "pl.scatter(yt, xt, c=phi2, s=70)\n",
- "pl.xlabel('coordinates x/y', fontsize=25)\n",
- "pl.ylabel('Feature value b', fontsize=20)\n",
- "pl.title('$\\\\nu=\\sum_j \\delta_{y_j,b_j}$', fontsize=25, usetex=True, y=1)\n",
- "pl.yticks(())\n",
- "pl.tight_layout()\n",
- "pl.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create structure matrices and across-feature distance matrix\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "C1 = ot.dist(xs)\n",
- "C2 = ot.dist(xt)\n",
- "M = ot.dist(ys, yt)\n",
- "w1 = ot.unif(C1.shape[0])\n",
- "w2 = ot.unif(C2.shape[0])\n",
- "Got = ot.emd([], [], M)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Plot matrices\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 360x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "cmap = 'Reds'\n",
- "pl.close(10)\n",
- "pl.figure(10, (5, 5))\n",
- "fs = 15\n",
- "l_x = [0, 5, 10, 15]\n",
- "l_y = [0, 5, 10, 15, 20, 25]\n",
- "gs = pl.GridSpec(5, 5)\n",
- "\n",
- "ax1 = pl.subplot(gs[3:, :2])\n",
- "\n",
- "pl.imshow(C1, cmap=cmap, interpolation='nearest')\n",
- "pl.title(\"$C_1$\", fontsize=fs)\n",
- "pl.xlabel(\"$k$\", fontsize=fs)\n",
- "pl.ylabel(\"$i$\", fontsize=fs)\n",
- "pl.xticks(l_x)\n",
- "pl.yticks(l_x)\n",
- "\n",
- "ax2 = pl.subplot(gs[:3, 2:])\n",
- "\n",
- "pl.imshow(C2, cmap=cmap, interpolation='nearest')\n",
- "pl.title(\"$C_2$\", fontsize=fs)\n",
- "pl.ylabel(\"$l$\", fontsize=fs)\n",
- "#pl.ylabel(\"$l$\",fontsize=fs)\n",
- "pl.xticks(())\n",
- "pl.yticks(l_y)\n",
- "ax2.set_aspect('auto')\n",
- "\n",
- "ax3 = pl.subplot(gs[3:, 2:], sharex=ax2, sharey=ax1)\n",
- "pl.imshow(M, cmap=cmap, interpolation='nearest')\n",
- "pl.yticks(l_x)\n",
- "pl.xticks(l_y)\n",
- "pl.ylabel(\"$i$\", fontsize=fs)\n",
- "pl.title(\"$M_{AB}$\", fontsize=fs)\n",
- "pl.xlabel(\"$j$\", fontsize=fs)\n",
- "pl.tight_layout()\n",
- "ax3.set_aspect('auto')\n",
- "pl.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Compute FGW/GW\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "It. |Loss |Relative loss|Absolute loss\n",
- "------------------------------------------------\n",
- " 0|4.734412e+01|0.000000e+00|0.000000e+00\n",
- " 1|2.508254e+01|8.875326e-01|2.226158e+01\n",
- " 2|2.189327e+01|1.456740e-01|3.189279e+00\n",
- " 3|2.189327e+01|0.000000e+00|0.000000e+00\n",
- "Elapsed time : 0.0014753341674804688 s\n",
- "It. |Loss |Relative loss|Absolute loss\n",
- "------------------------------------------------\n",
- " 0|4.683978e+04|0.000000e+00|0.000000e+00\n",
- " 1|3.860061e+04|2.134468e-01|8.239175e+03\n",
- " 2|2.182948e+04|7.682787e-01|1.677113e+04\n",
- " 3|2.182948e+04|0.000000e+00|0.000000e+00\n"
- ]
- }
- ],
- "source": [
- "alpha = 1e-3\n",
- "\n",
- "ot.tic()\n",
- "Gwg, logw = fused_gromov_wasserstein(M, C1, C2, p, q, loss_fun='square_loss', alpha=alpha, verbose=True, log=True)\n",
- "ot.toc()\n",
- "\n",
- "#%reload_ext WGW\n",
- "Gg, log = gromov_wasserstein(C1, C2, p, q, loss_fun='square_loss', verbose=True, log=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Visualize transport matrices\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 936x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "cmap = 'Blues'\n",
- "fs = 15\n",
- "pl.figure(2, (13, 5))\n",
- "pl.clf()\n",
- "pl.subplot(1, 3, 1)\n",
- "pl.imshow(Got, cmap=cmap, interpolation='nearest')\n",
- "#pl.xlabel(\"$y$\",fontsize=fs)\n",
- "pl.ylabel(\"$i$\", fontsize=fs)\n",
- "pl.xticks(())\n",
- "\n",
- "pl.title('Wasserstein ($M$ only)')\n",
- "\n",
- "pl.subplot(1, 3, 2)\n",
- "pl.imshow(Gg, cmap=cmap, interpolation='nearest')\n",
- "pl.title('Gromov ($C_1,C_2$ only)')\n",
- "pl.xticks(())\n",
- "pl.subplot(1, 3, 3)\n",
- "pl.imshow(Gwg, cmap=cmap, interpolation='nearest')\n",
- "pl.title('FGW ($M+C_1,C_2$)')\n",
- "\n",
- "pl.xlabel(\"$j$\", fontsize=fs)\n",
- "pl.ylabel(\"$i$\", fontsize=fs)\n",
- "\n",
- "pl.tight_layout()\n",
- "pl.show()"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.9"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}