{ "worksheets": [ { "cells": [ { "cell_type": "code", "metadata": {}, "outputs": [], "input": [ "import numpy as np\n", "import pandas as pd\n", "import IPython.display as display\n", "\n", "from reportlab.lib import colors\n", "\n", "from tia.analysis.perf import returns_cumulative\n", "import tia.rlab as rlab" ], "language": "python", "prompt_number": 1 }, { "cell_type": "heading", "metadata": {}, "level": 3, "source": [ "The goal is to construct a table which looks like this" ] }, { "cell_type": "code", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAABFIAAADwCAYAAAAjIUD8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAIKbSURBVHhe7b3vrx3Fle/NnwEvo3mZvInmzegi\nJKxk0Egjja5GQgEkExRuMsL42gEGj7jC4jyOEyb8cOIbHJMxJA6Wgw3jMww5vudmfI/j2HfAAYMt\nsIHYlu0kYIwJDtj4JiEcraequ1b1quqq6uree5/de/v7kb7SOXv37h9Vq6rWWl1dfRUBAAAAAAAA\nAAAAgCyQSAEAAAAAAAAAAADIBIkUAAAAAAAAAAAAgEyQSAEAAAAAAAAAAADIxEmk7Nj/MgRBEARB\nEARBEARB0BWjtiCRAkEQBEEQBEEQBEHQFau2BBMpYDJB/QEAAAAAAAAAAHl0jaGRSJkiUH8AAAAA\nAAAAAEAeXWNoJFKmCNQfAAAAAAAAAACQR9cYGomUKQL1BwAAAAAAAAAA5NE1hkYiZYpA/QEAAAAA\nAAAAAHl0jaGRSJkiUH8AAAAAAAAAAEAeXWNoJFKmCNQfAAAAAAAAAACQR9cYGomUKQL1BwAAAAAA\nAAAA5NE1hkYiZYpA/QEAAAAAAAAAAHl0jaGRSJkiUH8AAAAAAAAAAEAeXWNoJFKmCNQfAAAAAAAA\nAACQR9cYGomUKQL1BwAAAAAAAAAA5NE1hkYiZYpA/QEAAAAAAAAAAHl0jaGRSJkiUH8AAAAmksXz\ndGTvLK1fdTtde/OXCy2b2UZzR8/TotnEcvkM7du6npY1bWf5I52cfaDc78wCnTOfxlg8t0D3LNf7\n/hqt3vOu+TTC+QVabc4jrDW0fvYlOnk5fnbNLNLHp35Oc29cNv8DAAAAYFh0jaGRSJkiUH8AAAAm\njsX3aP9jawJJiDIR8a2D71VJksWzNLd+RWC7+2jT0YtmI8klOrlnM93E2zUlUpz9DyORYrRqOx3p\nlEzh879HXR8SKQAAAMCw6RpDI5EyRaD+AAAATBqLp5+j5UXCYQWtnj1BH+sPL5+g7TMmoWGTEIt0\n8eDmcibK8kdo7twnbhLm7ufoZJVxoY9Pv0TbN3oJmmQiRf3m6PYq6TLMRMrNK2n9wQvmRy2w+0ci\nBQAAABgFXWNoJFKmCNQfAACAyeJTOrfnIZNseIjmzn9qPhdJk5sfoO2n/6g+u0D7N64stl228SXi\n+SdVIoa3U8gEx/Kv0013mkeGUomUy6/TJvFoUbtESijR8Qmde+0ZWr283J88Z83i+WM0Jx5RunbV\nY7T94JkykaT489FtdAN/Z2WO8+kx2nRb+dkNW4/Rn81v1EXQka33lNveto2OFMX5Ls3NfK38bGaW\n9tsZOmV5VcdR5X/uXTqyZ5s9Z31OO7zHpmrnffPtdNPGWZpPPl4FAAAA9JOuMTQSKVME6g8AAMB0\nEEik2OSBl+C49BKtLwJ/MeuDExyrNtPc6RMikRBLpFykI1vvU9usoHu2bqGVxXEHTaRoZBKjOvbi\n+RfpW07ShlXNyhlJIkVq+Wbaf2lRHOceWj1jfutsZ2b/aGrJJqnY41UAAABAf+kaQyORMkWg/gAA\nAEwFcq0SE/BXCRMvwRFKsJw/QJu2vmAWeQ0nMyrEIz368aBznBwZ7oyUKuEhZtbM/JSOF+eotj24\nxZkpUhDbf+dECidq1DWf/109YVMkni6pTy/R8dkHTSKLy0HMHnKSK9VjWMvWL9BZTEsBAAAwQXSN\noZFImSJQfwAAACYeZ/HZ2+mmra+Xj7vYpEJGIsWhIZFiZ1mYGRWx44Sw2zZJzNawCSEvObJ4irbf\nrc/jdlo+e6p8TGbYiRROSgmqRIq3jos9Tz6GePvRUN5GBAAAAIyfrjE0EilTBOoPAADAROO/wWfV\nFtp/3sx8GEkihZMDGQmbEFmJFLGIriL8yI4ru57KsBMpzoK8JfLRnvQx/MV4jZavp00/+zntL2ay\nAAAAAJNF1xgaiZQpAvUHAABgYvGTKMsfpO2nRHA+gkTK4rkFume5+ly+nniIiZRlM8/QK5wIMuQk\nUux5DjuREpiRU52PeKRIEzyG9zppR27CCAAAAJgEusbQSKRMEag/AAAAk4lck0PJT6JoYgmT0GKz\nDrFEgnxjUErybUIegUTH4vnXaYd97XI9uRCdARJiSRMp3nVGj6FYPE9H9i7Q887bewL7AAAAAHpO\n1xgaiZQpAvUHAABg8viEzu55JJ1EKagSAo2vP3ZY2kRKgVws9+YVdM+es+WaJxr7G7EWSozWiRRx\nraNMpDjI+stIDgEAAAA9omsMjUTKFIH6AwAAMHGIRU1rSQcHEbDzW2Pk40CB9T9K0omEGjZ50ebR\nnkACQb4qWL7lxnkjESeN5Ft7Aq9x9mfb2IVp1Xd2HRnvsZuhJ1Kqtw05a9fI2USBxWwBAACAPtM1\nhkYiZYpA/QEAAJgs5JtgYhJJCvGqXVfirTg1xpRI8RZnla8GtmuzmO+knFcIy4RJIT6ON4vHaiXd\ntGp0M1JS5401UgAAAEwiXWNoJFKmCNQfAACAyUIE+VF5SYrLZ2ifWJtj2cw2mjt6PvGIzLgSKZqL\ndGTrfeWxvdk2i+eP0ZxcY0S//WbPMTrnXMgifXx6gdbzzBb5+JJep+TfH6sSNUU5nKFXRrxGij7v\n+dnquHzs5w+eQRIFAADAxNE1hkYiZYpA/QEAAAAAAAAAAHl0jaGRSJkiUH8AAAAAAAAAAEAeXWNo\nJFKmCNQfAAAAAAAAAACQR9cYGomUKQL1BwAAAAAAAAAA5NE1hkYiZYpA/QEAAAAAAAAAAHl0jaGR\nSJkiUH8AAAAAAAAAAEAeXWNoJFKmCNQfAAAAAAAAAACQR9cYGomUKQL1BwAAAAAAAAAA5NE1hkYi\nZYrg+oMgCIIgCIIgCIIgKE9tQSJlipCGAEEQBEEQBEEQBEFQs9qCRMoUgfoDAAAAAAAAAADy6BpD\nI5EyRaD+AAAAAAAAAACAPLrG0EikTBGoPwAAAAAAAAAAII+uMTQSKVME6g8AAAAAAAAAAMijawyN\nRMoUgfoDAAAAAAAAAADy6BpDI5EyRaD+AAAAAAAAAACAPLrG0EikTBGoPwAAAAAAAAAAII+uMTQS\nKVME6g8AAAAAAAAAAMijawyNRMoUgfoDAAAAAAAAAADy6BpDI5EyRaD+AAAAAAAAAACAPLrG0Eik\nTBGoPwAAAAAAAAAAII+uMTQSKVME6g8AAAAAAAAAAMijawyNRMoUgfoDAAAAAAAAAADy6BpD9yCR\n8i7NzXyNrr35y2Gteoy2HzxDH5utR8MlOv7Tn9Nrn5p/Cxbp49Mv0KaZFdW5LN9M+y8tmu9zuExH\ntt5T/va2bXSk2H/os+Ewnvoj+vPRbXRDUUb30Kajl82noMb5BVrNthRTa5v4lM7tecj8/iGaOz9E\ng+oVfj+xktYfvGC+Y/5IJ2cfENt8jVbvedd8d6VzgfZvXGnLZtnGl+ii+ebKRrafeNksnn6Olott\nrp1ZoHPmO8CMbmybfoZQdp8eo023lfZ5w9Zj9Gfz8fSwSBcPbqZl3AZb+2NXEtp/fZme37q+Ki+l\nZTPb6PmR+9OTx+L5YzT/s220enlVVtcuX0+bfnaAjpz/xGw1AJdP0DN7Tkxkm6z8+4jfIPza6ex3\nRN8cko5R9x6jc1PZFV1U136fudYVdM+es6pn8ZG+5X303a3fsfaSFvvn/SnfrjF0/xMphWIVOAQu\nn6K5jWvqzsviKdp+9+3uebR2cELO0eiczfHUHxIp2SCRMgD1fqI2qNfaLBIplksv0XrHSUQQUlJP\npNTLxk/QKSGREmB0Y9v0M4Sym/pEipsMDifTQZFEOfVTNyng6Ha6aevrSKYUNJWV1hr61sH3OsYf\nOqG1QOtX3T6xbVImUq69+QHafvqP5hvDlZ5IMVo281M6fnn6fKrFcwt0D7ePVdvpiHONyr6Pbqeb\nuAyUT37BsZeUMhMpRktRvl1j6AlJpCiNxPEXTrTvvAzFKVlax3I89YdESjZIpAxAoJ+4+zk6KbqE\n2qwBJFIM3p3cQrfT8tlTHZ3DaSKQSPGdxVBSHYmUAEikdAeJlEb8ZLCWNwYARai/quk+5athTqIT\nJCbVtbwqv2U6EikqoF2/QGdlm0MixWhaE5Sf0Nk9jxj/0bvGxbM0t948tbH8EZo790nNXuJql0hZ\nivLtGkP3KpFSa4Q8W6QoRD9I15nel2i7/V4p9BiQbeSq0mYPVPu7extt/2Gg8pQT8/KRkCHIoCzz\n2EHnKOUw5e43zHjqL5FIWTxPR/YEpkvucadpVb9/SDXEd93fqOvfcfT8dAR81hbzE056yumcnJ5b\nswcvkXL6JO2z26uOZ+Pu4UxNHTsykfI1ummVvjMpA15OFvB35XZOIiXLHsVxZmZp/57NJtseuBMz\nMVR3cpetf5q2bTDlEwxC5PXvoZPO441raP2/vy7KStreg8ouf1bceZusJI2bSFm26h660T9/E8CV\n35XbuYmUT+jc0QX3MdCbV9DqrQum7YkZLaEbAjZAnPTkVnhsi44PocDffqbb7m+8cvXtb5oYZtlN\nY0AjksHLH6Jt//odM8aF++VW5Vag2/Bu03+p7wu/410VQJi+oear9RgR2C6beYZeseP/JTppxzP1\nXW1Gpz8+qvY2+xKdlHeBpT+95wSdfGH7BPtqcoaT9pWeo/2nL5nvAr5XbbxU5XnwucpmTBlY/0zY\nmtSktc2qLbG8pFIykeKXkV/O8iZPvS1XN8fGOfssFbOp65NtwB/fc9oUc/kM7Z99zLbPkE2OjUDC\nxE2wJJ4acfqM0I3NAcp3yHSNofudSNEEg0816B3cIgxOShnfYy9WzpZo5FLLNu5VAaepPClVkelE\nSotjBw0kZjRt9htmPPUXc1rks3W+1PWIzKL8/eqZQJ3YhjvhBG05zuL5F+lbcpC2UkHa7AlTfjIQ\nXEk3reJkg9CqLbR/4pMpMpHyAG2d/YGyGRl4slO0njYp56fcTnbcufYojyM04g58lFR33bQz8ruk\n4+Jc/5330E08gFnJvig0m0Nrkqbcy2tQ9vTMLP1P7fxap7lK0K3e+sNqLLGJFHdqa01mKmzcIUw7\nkpPFMJMBys5m1gXKdYSP+Y6VYZbd5AVrjQhHvkgANCQfW5Vb1PcS/ojjq/WcVOAiZ6vIZPDie7T/\nMXEDT8iZUm/3fTvduOrrpt+SGuQxmCVGzHCqzbKwSL9B9s+X6Pjsg4Hr1zJ9lLA1qUlrm1Vb+jqt\n31om4pzyEjGWc20Jm3Ls5PLrtCl4A6bhBsSSkQr0NdIHEON7bpvSXD5B250bMUI9iX/kjO+iD7b1\nlmo/ilR/VNCxfEdA1xh6ImekVIGBcrY2Lpjsnsy2C2dLNPJrlz9I20/p7N5lOnde70s40X4FRpyS\nVscOGkjYaNrtN8x46i/stFSNTg6s4g6AuPbq90qrNtNckYGVA1WsAU4Y0haDko/miFkEttOVDh8P\n6l4wa5MmcltlUxM/5VAmOFQ5Hf1ZUZb2rhq3VxUAv/Ua21NlN/n2KI/DCSvVkZ//3YSWX8AZkQ6k\nf1fSuX7RFzlOAd+Rcm3P2unl39G5wl4nAXkN2l5eKa/fOm7cX6v2duKVyjHmIMQGJqqsbIJJJke4\nTxTt2Slz8XnKGZkIwmNb12RAcfduz6my/cl1DKbysarhll3Nl5pw6olI0XcHgqxW5SYCgmr8lL6X\nkqiT3iPvHus2NLuH5pMzReRsH/aR1af2Ro4IcB0fhtun3FZ9XltHoZ9UNpIOzirbC/kTykfYdrjo\n950ysDaZiG8mBKctvXbC2JYos2AiRc5WqOzEielsgkD4KHLWj0j61f2UpSTcNzvYfoXbSos25fho\n6+nx13RbdZO7471+RiYV5U3vhsfeBk6kKGrlOxq6xtCTs0aK7ZxTWUoxuHKDFI28boxtEyktjx00\nkNBnbfcbZjz1l3BaGD29be8Czclpa6K8owOaCPimwjFsk0ix1+6VqQjcyg5FBoK+QyBsJ9ZBTQxe\nIuXcibIcTHthx0a38Wqxq0jHnbRHcZxaW5xAgs5IKghJXH+tPaZsb1LwEylnTF9srofLT5fFhyrg\nMmNCOJhXzs/RAzS3Z1ZMZeb2Kx0rUa62TCe1/CTDTQa44/U09WUhhlt2UzFeWkL+kUxW1ttOm3Kr\nJ2mYybW56GzW4Jtoqut07UaUe6M/HUoe9xl5vvIGVgBrM+xzibbqjJG6vB6k1VvnReJqyhIpRy9V\nswMCNmGvMZUEsWNeFRRXbbCa9RNvl0tNuG928eu5RZuKjXm6DP/xweG9OWoYyKRzoYybtMNIpCxR\nO+oaQ09IIkXeRRbb15xZ6RSbztFWYiiT1TaR0vLYQQMJfdZ2v2HGU38xp2WRaq+PlhLl3cpZnGRa\nJFKqMomr7HRT9pFvO/1H9hP6Ws6bgUrbzAUzOJUddVV2suPOtUdxnIbE5SQQc0biTkqqL/K/k/Y1\nqY+lyGvQ9nLWOti6z/kTl5O+XtEfOWVz+YxYl8iX6NNqSZNIcmViCTtErfr3aJ+f42xNMqMsuwkn\nFpQlgrX8csscPyfR5oobBvORMU/41KJMouL+KRUUNQZMfaKFb2TLh2OI1BjpU207qW2y3pY4SWBm\nyQu/1l5j0hYC5WfbMpdx6ubyUpMz9nj1PKw21TvkYzZKObPPGq+vQ/maT4dN1xi654kUPbXcX2wn\n0AgtsnM0jT5ZiYmBMuiUtDx20EBCn7Xdb5jx1F/YaXFXQ+fppWfolaSz6AVjwTqYYKwtputRU5VJ\nQoWtpByC1HeThmgjhe3wtemB92XaVwzspf1USYKqzefbY6otThrCGUnIfaQkdf3+d9NgX4H+ldvp\n3bP0ygs60WGcOxG42bJxptHr8WqW5vYeo7ft42WyrVd3qcrAz/9/0hlmMsC/8ZHjbE0ywyy7KRkv\nDVV/npC3jkB+uWWOn1Ngc3rx1Pk9IrHCgZwok7hM2aT86caAqV9UNpKe8VD3J9r4CNW2k9omQ23J\nlokOpE/vMfUurjFpC6L8bLvyZmp8Gk+SLj0ZY4/frwyrTfWRtuNM4/V1KF/z8bDpGkP3f7HZGqlO\nLDAoJisxMVAGK67lsYMGEvqs7X7DjLr+ws5JaEqnzCZLB6fJWfSub4kaz5JhbdFz7gJEHcEaKfvI\nt53+Ux987WDOi6JGM/xt7DHVFicMGfgnJROY4vprM3L8spkG+5LXYNqaLTdevJkd7bptVE62u4ZV\nY1+pbfXsixP6WE/M8akSQ+H+3evLQv27/cwfr2PHnDSWouymZLwsyEsG+4m3/HLLHD8nxuZiY11F\nrWza2I0dW/1Ep6IxYOoZ4lHVdovNpsZIn2rbSW2T4bbE5aLGva1baGXxvbjGpC3Ux1FNNZaqcj64\n2/y+D2Nj09gjZ2mY8x1Wm+ojbceZxn6hQ/mOiK4x9AQmUuRA4U/5Es4Id3DJSkwMlEFjaXnsoIGE\nPmu73zCjrr+qoxMLKzqLUPJA09VZRCLFkt25SkfQ72Tybaf/iMGXbUc4Qs411tp8G3sMD/KTh0xw\nNknamLh+3xGvPducCkImBXkN3C6FXRQKONDGNsJOZii5bLBluIJWztxfJVWcPr/vyOC2ekTAWZdB\n9DfRoNa2U9G/2z7fH6+bnK1JYSnKbkrGS43fx6fUsdwqvyYxfk6Mzbn9/rKZ7bTPeaXv67Sj9gIH\n0a81+Qmi/NzkgzyuTMz3Gbefr5dV7PXHoi9y+m5dBj+g5XpWIr8CWZTtpLbJWFtyZ/mWsteYeOyu\n7kcYxOM99o1QvVi4ODX26HXRxGvTrT20aFOi33bLStvnOlo/u9CPVyAzbceZmj/u06V8R0PXGHoC\nEymqvcmAPvutPQ2JFL+CIsbS6thBAwkbTbv9hhl5/dUWGvJkO4yQsxhfBb/qqJFIsTjvbedVv+VK\n3uz0yUBQyb71SG47IZnuJGJgsrYjPlOyNlJr823sUexzohMpwkmMDT5yxop1WNwytW/iCSZMpzWR\n4rWphG3Uk8t6LZ6FwGKzjJ+kCTiavcd7Tromt7+pl5H60Hkjn2i7ts+f1kTKUpTdlIyXqhSq4Dx2\nJ1L27dXbI1qV27S9tafJT2PZcUG+YYXfVKfKUCT3bB8lEimxbRsDxx4RSgaE5b6ZJGxf8hW2vH01\nZkxeP18STUqqq6lm65Sq+h3X50q/tYdxk4B+Xzg+xNiTlLIFu/BqizYV9E/VOCHfVNeLhJJhlImU\npGT5joauMfREJlJcIw0UNndsmoZKrDpEIx4wo8bS4tgtEint9htm9PWXOsfq7pqmeYCqAi8kUsKk\nyrC6GySDPn4Uwdu+T51wZ0IJDjkACUc7EIzl22PoOBOIuJMbd+BC5Seunx+ZKr5nycFs2hIp1TXI\ncaEqP9F3s204a6SE5I87vrMYCxB7Tuq6bTBqiG0r7Mv274G2WxIbNyeQkZfdlIyXOclgRbCttik3\n5dfIV41aLV9H6zeYoG+ibM4LwoJy/bWkTcqA1/owYtaAo4ZXofYOVfevPdOurAou0fHZBzP8dTnG\nlpq0thlPpCi8GWPOtaVsKlimCmd/fZnZlBfo25tOTG6b0jhJOF+RshoXbceZISVSauU7ArrG0BOa\nSNHoO38v0XZxh+HaVY/RdjulztBYid6dB86mJ40l89hB5y/lEObuN8zS1J831Upp2cw2mrOve2P0\ntYg7s/q1e3uO0bmPuKOsZtggkRKnNr2Uy9EWthcInj4p3iCiBvSNu/vz6rSBCCU4ItOJg8FYrj1O\nQyIl505uST0Ica//7PnD9LhdnLDB9qYokRKefiz6bmkbzp3uFbR664Jqc+/ZILD2/L10Fkc8VXWk\n6LeC/Lt4hbi99np/4z5SYLY7e7jevwfbriY1bk4gIy27KRkvs5LBCjmzTrSn7HIrcP2a8jGPD6u+\nYQJtrlhcVr7iv5BeaD3yqIC2yT3bRFIhYJOOP/0bJwkR9gMnhMtnaP/P5LVr6bLan/CfVOxw8DnH\nFy789b1yjFQ448PkzQ5OJlK8RFG93/HLSPuk/gtEJCJ52puZTQ2BfqjOmZw2xWgbdNqrLqtZ8Srt\nntB2nBk0kZIq3yHTNYbuQSIFDAvUHwBgMKYhkdRzxNT7ZIAIABgjIkichuTdMGgMigAAYDLpGkMj\nkTJFoP4AAIOBRMpokVPCJ20aPABTiE0OKInHYMPrGVzhIJECAJhSusbQSKRMEag/AMBgIJEyGurT\nV+Ov3AQALBnJtRyU7GLvAIkUAMC00jWGRiJlikD9AQAGA4mU0SCfJZ+mtYsAmAKCa2Q0redwBYJE\nCgBgSukaQyORMkWg/gAAAAAAAAAAgDy6xtBIpEwRqD8AAAAAAAAAACCPrjE0EilTBOoPAAAAAAAA\nAADIo2sMjUTKFIH6AwAAAAAAAAAA8ugaQwcTKRAEQRAEQRAEQRAEQVeC2oJECgRBEARBEARBEARB\nV6zaEkyk/P7j/wdNoFB/EARBEARBEARBEJQnjqHbgkTKFAn1B0EQBEEQBEEQBEF54hi6LUikTJFQ\nfxAEQRAEQRAEQRCUJ46h24JEyhQJ9QdBEARBEARBEARBeeIYui1IpEyRUH8QBEEQBEEQBEEQlCeO\noduCRMoUCfUHQRAEQRAEQRAEQXniGLotSKRMkVB/EARBEARBEARBEJQnjqHbgkTKFAn1B0EQBEEQ\nBEEQBEF54hi6LUikTJFQfxAEQRAEQRAEQRCUJ46h24JEyhQJ9QdBEARBEARBEARBeeIYui1IpEyR\nUH8QBEEQBEEQBEEQlCeOoduCRMoUCfUHQRAEQRAEQRAEQXniGLotSKRMkVB/EARBEARBEARBEJQn\njqHbgkTKFAn1B0EQBEEQBEEQBEF54hi6LS0TKZfo+NyDdO3NX47oXlq74wAdfv/jwG+HpY/pnWM/\no52vfOB+9sbP6dG1d1Tnsvx7NP9em/P4gA5suav87W0/ogMflZ//7uUf0V8X+7yLHn1ZHnPU+pAO\n77i/PJ+183Q8uI2r5vqrdOH40/SDL3ybDgfL6GM6d+Db9MhVf0+7j1wIfB/Sh3T6wJP01HVX08xV\nVyl9kZ76/i46fPLDwLbn6K3nv02br9bbKV19Cz37/Gt0ztlG7W/fd+w26275Dr1a29eHdOon/0Dr\nrgtdxwV66/tfoke+ud/b7zCkj3snbXD2ra5p92Zx/VfTI3dtphePnBO/S+jiKTr8g7tVmZsyue5u\n2r3z/9Lpi/62meWs9vfqP99C64ptPkub/3mhvq+Lb9HeWz8fLqOLR2j3F/6Onj3wrvv5MFQc90vO\nvi+c3E/zd33RXJMuu02078ApuiB/F5Wy1yPP07O3fNb8Xl3vN58ewPb0+SzQLt6f2mbXvvq5FG3o\n6r8JltGFI5tpQ9AuB9D7b9H8jo10I/dxrfpb3UceoCcevdf8VmnlRnpi31v0TnBb2Z/eQSu2/Lx+\nnIu/oV/8cB0t421+eJCO12zsFO2cWUk3bjkUOM5oNPy+LdS2w/ZZt+NQH9DTvi1oX/+HDpz5KLy9\npw/OHKIfWvu6nW58dCf968u/oQ/8bTPt+IMzB+m7bIPL19F3f1nf1wen52nV8n9SY/N7zufjlWo/\nL/9YXd/99MQboT4opPfp8L5nae3K25vLzyp1nI/o+C+304rlZRkvW7udflGrx4/orblv07KVP6YD\nI/XZMjSQ7Z2l+UdXmt958v3A3OP0tG8r9Z7yVf+Jrv36s3S45h9ElD12hOzwWZp/431vu57bV1E3\nqu9oU0ZWueWbbueT1X+p+nz530S9t+v7dXs58IywL+1b/K9X620meJyAHfa6/U27/D5A+3/z+bbg\n9zVRPzOwrbaHZw45de36Fer7uTdr+yrbkeqHHj1Av/W+ayOOodsy5ERKqWUz8/RW684rR6qC576n\nCt1Lalx8k574Ole6kUiG5KlPiRS+TnMtw06kFIHsdfSDn7wVDFQvnJyjbUXQkBtsqMBg9/1VEkCq\nFgi8S4e/+Tf17VTwK8+nCESv+iJt232SLlw8SS/+owpO/H29t5+eve6v6Kndv60+kyq+H34yoAjU\nPvMPtPc4D56xa9IKB9qO+Ppqv1WBmBMs5ZazDrT+Xn12P72oArSyPj/j7csElFffSy+eDTk55vth\nJwNMgLj+1qfplOkjKnvzryuj7PR5vvovVWJEqqPtlUkkVV7/OEenL3KZ++dS7mvdXfN01n4mpb//\nu+EFu+8fokftwOap0VFlhy/wW+0oO45IfFu3XzeJ3pWP07waYD848wt6YOVXw/tqndQeQCPo24qE\nRs1mtNx9lIm10Hau7fSyb+PAI1DvOcFIWf8h+/SChFw7LsZ0ZU/f+YVyqpTzve9xZZN+wFEGPIM6\nT8NWVRa5iRQTcIbKJLGP1HE+eONZukU5nQ/s+zV9cPHXNP8d5Yj6/URRF6tp7b6zzm+XXAPaXtD/\nY8m+J/s4Pe3bCnFb8M85oeyxwyQQQtt5ba/f9iXaU24ZWeWXb7KdT1T/Ja7ZV6NvocT1X/u971sk\n+jnnOH1uf9OuRB+w/Nu083RDMiXa19xBK3YcFfWX2lb4mtxnF8f+wNjPSq9P4UkHueNtXBxDt2Uk\niZRraxc6JJ2ZpxXF/r2kxkev0qO3lcf+6y2v0u/kb7IVTqQsrVTn4N811hpqIsUEBl/YHEh2uXdK\ns4ONwqlXwcl199JevvuqGkA5I+Jq2vD9Iyao4bvBV5sg1Xx25Onybq8N6k0iwP7/MZ3dfa/a1+dF\nYJG6DlbONi1lZnFU11QFUOtu+Tb9p737fI7e+sm9ZdIjeXxRJnc9TW+ZQaGaESHqILeci0TA1SLI\n/y29eNfnRXnqberXUVPONi1VlpW0K05ufJGe+skRk3QQdthYd3xtX6bdr3LZc/Kji+1xoCts7ew8\nPaXrVyRN6tdRV842eWIHRN8ZEDND3n+TdhZ9xe10y44343eu7WC0jh7d+5YZzHRfM2/uOogBiAc3\n48SUn/FxRL9ugpfKCTR3hWuBy8r0uQ1VI+jbTFvSM8TmeQZKsG9jO/RmOL13hPbqGSo2UdLPvq0M\njPTd53+zd56qO6pNDgo7X/JukXLO+Y61DUjy7bg8H2Fv7x2gtWpfMugo70IN7jwNT+Kai7E789w4\nEbByI/2QZ6DYO7Khtt10HONY2rb4Mf123/c8B9TURetAc/gazPaUArYRUvZxetm3KTl36ZWy6q5F\nm+O7umt/TLvtDBRxU88er9/2xdeRX0ZG2eXb3M4nqv+yY/73aCfXe7L/kTIJjaJdzVv7CrYrLgPH\nvtgPEYmSvra/K0Cl3ZZ2XSYzVP0cm7W2no6vOaGhtl2+np44puqYfc9aOxGzCK2vKZM4ZltjMxwD\n88QGp6/P7P9zxDF0W7onUmrJBncWhVvggQRBcLrPadq59qvl92t30rzd3/20ecf3zcwQqbvon7ds\nDHz+VVoxd7rab9a0xrYzUnKvqYVsokhp+Wq6cYXJ1g0zkVIEBp+v37EVsyLW3XI/PeMH8VGFAoFS\nZUAaCjZEQF/I30d9u9q+iuA2Y8ZCsV393LqqOI+r5WwUPvdQWZnrSJZjrExMwGV/26Kca4F/ZF+N\ns03MdrVz66ryPNaJ2SihJEUhDmCbAsXs3+faXqCcg/v6q4zZJuUxa+fWWmbQCTl2PNCkHMZim5BD\nxA4wfxdyiI38wao2ePl3Bcy+cu5oDUtD79tCfZiRbxMxO1Qq99Hnvi1+R4eDz6TDGnNkOEFgbTPX\njgN2GNyXGiOdu5RjlLgru2zt4/RQbhJAKVrGtWvWn+Ucpx541I5RlHcfHikY0PaU8rZrcZwe9m3V\n7Ic7aMXjj3sJypTatrmQzZp92O96bF9FUkAF5Y8/TY/6bSeh7PLNan+T1H8FztUor13VbaFUpM2E\nfAvelvfRw/Z3ZUjHtP9JO7boBJqId8VEhWQsyjau24bwBUo70r+v97G1WN0Xx8R8XP9/axvD6Ws4\nhm7LEBMpWlUipEqkJKaNqYItp77Vf+9INbCf7n2iUyKl6iD9bZTkXddWiZQ219RCbCRFZvioSCoN\nK5GSCIy1U/4ZvptqnP3MYCOo916j//ymvmsr9mGCj+bAsumubSAgj2pYwaxW23351xHaJiQ9U8Ks\n+dGUSMgqZy94K74PBJwhDS1YU8reF69jEghgfcVsyv882/b8wFd9Vpx3FSQX3zvJtJiGnYgKyAxe\ntSA2U+Ugx86N59AEtreqHddzqIrvV9KquVMJJ2yYGkXfFkiqWbltO5pw0Srsh7/rY98Wc4aVOtvX\n+3R4749VQNLkiBt5x3HtUn3vOdfF9zlTjZdK+vxu4xlfpjyDQamvFgGG/izrOP7v/GOU34/uEew2\nGtT2UuUn1eI4teN6vy2+X9q+TV/jX/OdfA5CMpMEUWWVr5ZvT321L3NHWwfY7x0rri2vjFqUb2Y7\nn7j+y9f7b9HuIqDO6cN86YDcrLFmy9DYTHB/bD/mu961vytZMta9I13mdiKAN+YHEjEyrn5obsFZ\nS6iaNa3EbdH7nbUNbldD6ms4hm7LyGekVNPs5NQvua2sHJlIucM8U6Ua5Zm3y4K1FZX5aI+cVmSn\nrelGzlPaZQXkJ1LaXVMLnVmgR+30Szk7Z1iJFBNENAXnrYINTyboLKbPy+nw9jsdULxCZ53FQb9I\nT/1gv7MYahmYmHUE+PEPM4OifGQiZ/0MrSEGs05AFPjeV/FozGczgyItDqp0mehHfZ6MLJiqlCpn\nE4zxGinlI0G8Rop5JKBxNgprWMEaX1vKptjuwjYRlrGN4KM9fjIkz/bKpAuvkcKPBBl7M487Za99\nUhw3J3nUTWVf1LG/4enX1qEzDot2ft5jR4r7uWo6fCnjGHEymu8EFnfYzH6X9I7RKPo2046C27rf\npRIp5XdeIq5PfZtxXIOBQ+q7oDi40HZTXzguppodF8flNQbUmF1MHzd3ncy07t7MRqkpHmDVlQow\nUt9pNQVyZg0LGWCq9liWdR9moygNbHtcRv+DHp2brxbI1g75nFjsstVx+ta3eUoF+i2UPXYYP1oG\nK/2zL7+PyLGdiLLLN9HOi+NPYP/F167bkHzUMEucENG/932GnH7OTcT1tv1dKeI2xGN5YJFXRzmJ\nlCK2bloihGN/9VuO4YNrpLDdDK+v4Ri6LSNaI4UvjC9UfVa7EyAcLtthieRBbXullomUsrPXn/t3\nK2SD54adm0hpe01dNYJEysXcu/LdEykcNJRBqg7yq/U8ONh45JYvqcBUbFNIfe4Ep+6aBtWbLcrA\nIz85wccdPJhttx+TsMhaMJXFwZkoE7FuilSqnAupDij41p4iqZI5G6WQOaeBE1EZ+zH2WV2/XDcl\nIedaw79tZ3tq++Bbe0xSJWs2ilF2m+sgHmQ6OhWlw6scHnboeOBc+QCtCM3i848TW1m/cHyW+I7R\nSPq2/ESKtV3nDU9iZpmyo+rceta3pYKOtgGJ43xpZThgETsOv/XCBCV9vpvbg0SKv45D9VaVMujt\nx2wUpYFtT/hcAdnrbHucPvVtvoaRSMkeO0zgWgtWemZfpl6qACzHdiIaRiJFaRL7rypmMpLrpjRK\nxEaF5I3mat/uG5545qLeXsRpfW5/V4pkAiR4M82T2N6Z5WbjdqVQIoXbgly0WLSP6Ft7Clvo2MYj\n4hi6LSNIpKgCt4+2nE4kA+S+HqSdZy6524cKp1UiJbR/s72W3Rc/BpSbSGl7TfL7NkodJ6zG+sue\nUdE9kVJJLOTJd1tt8O/NAuAFGTOO5yzgqZyB6pXB+pW3zyeSDi1mkgSVM6OCxTMi1Dl9/+W8mQs1\n8WK19SDfVb2cw9tpuQtUOq9qjbwGOB1MtlHujAEjaxNNiShx/YUdVJKvlR2G7fFslNKOVB2L11C7\nCw3L35gAO/e6c8WDDi/qFdomIX7kcdnaWXqFHWl2PmuDJs+2y3lMwzjepv92BkF/2uYwNZK+rUUi\nRdthMXPJtcEiSfffVxVJk6Ykz9j6trZBZq7sgpaJO0Zt7bgIAHmRQRXMiVdpuosYjlN9SKSEVSZP\nzfYqWKleWaqCldArzketQW2Pt/HtxwZiJjgbio2PqW/zNWgiJbvN8bR+cYe4QWOxL3M9TvImu04D\nGlIiJaiJ6L+0Pq5m7ne6UVP5DNXMGzNzqbAHqXvpfzz6QNVWa/ti9aT9XWl6/yg9wQnBZJsQ9WsX\nmxXJEa1aIsX1KatEXsPaKWwLjTbTThxDt2W4iZTaYqu5SYecJIXSSBIp/JthJ1K8c2yt4SdS8p3u\nYSRStDj5UN4x5eMHEwNZgZC5Y1sEJCYpwLMDzBttgsFKse/mQCat3ITCMJIoLFMPjbNB3HIOb6NU\nlJF5parz2BEHgaHfZ+67SV0SCjn1ZuzGnbkjkiucNBrY9kwZmboog15+bTI/XhSqp9w6bKFRJFG0\n2PkMOk7GaWxyLou7BOaVl+auZ+ng8vTm4Q58rNH0bW0SKfozbXeBx8be6XnfNpQgMyITlATXYWht\nx3w3t5wJ6j6aYJy40EzWJVdfEylmtkBRF8YR5Tt/5u5esJ5GqaWyvWEcZ0x9W02DJFJGmEQZj315\nx+HPB7GdkSVSJqX/Yvlr34S2ScmUj3NNcgaKUvH40K/p13KNlNp+jPrS/oYm+WREpSXvgxslzzMd\n17JvKa/HUS2R4iVManG5u38r05/YNmrX9NG/FTOYQr9NiGPotgx5sVlfpzOTDoEZKUuWSLlyZqSM\nO5GSDFgzAoLi/Dm4MIF5tb0JbEIB6zCCjZxEil34NfORlEYNM5FSnj8/NlDagti+Vp6sPidS+NxC\ndeJ9N6DtlefPj0TVba1WnlbDTKQoh4EXcWs15ZbFTow75bZSKlkScop8lYEf3xks7y4I58Y4t6Nw\nFEbTt6VsP9HfeIrbhrfN2Pq2RN0OWmfBREpHOy7Ohad1mySDOOeavY1NbQKsVLBSv0ZXbY5jysdO\no/brtelYo9JS2d6gxxlf31ZTp0RKizZng5KMx/KExmJf5jilzx1T5oLXrFElUopznYT+izWKREpI\nObbRo/Y3NE1KIkXGwU0zRVTd1GYK/ZyecGJZed1dEin+bBRjP8XM13MmqdayzRtxDN2WESdS+AJ1\ngfqNhDsh9Z3tsIaZSOHGpj/3OwJZkdwJXgFrpKSCSUdd7tomgg3eTzRYV2o8N31O4pWztQDCO5b4\nbX6QlVIqaFfHODlH2/QMCGeNhAxxgiEUJDnJhxbl7HxnVJQXPyYTCBCdY8nfZuw7S8amvP2XdRMO\nBJvrLXVu3jUOZHtmX/bRqXpyJHqu0XJtK75DqAZa5xnjTNkplqlsfcqhMX1bql8rHFB+jCPghLHT\nO3DfGNBI+raUDXr2PFD7GXffxmNaICAo6jTtlPA4G3IAy+/k77vasbEnO1uq7qTXjzUusR/QIsER\nPO+mNtfmOHpb8bpVJ8mgv0/YwEg1DNuLbOP8frDjlNuMqW/zZeou/1j5bc7eUbZreoS3q2tM9jUx\niZS+9l9cL36MJL9LXB+Xf8hn8NpE9Ppy2k6f2t/UihMUyvad+uTy1m2pQ/u18bmoe5EwkX5DaSP6\n85A9GnFdc1vybbB1/1iJY+i2jDiRIgtG3gXl5+f053LV8NxEilfIkUSKLWD9m2G+tafVNXXVCBIp\nxtkPBpOOWgYbxWMOyvG/5V/oDdH4/Mcr9GdlcOvN2Ghcp4IfqxCLfNauxQQbgYREGWyk7wjnKLof\nM/V+Rp5ftnhRWv9RoGqNFA6S8svZV30Ry9q1RG0jXq7tFNmPecTIfeuOUubaJeV16DUknnbecFQl\ntvh4XW1Pb+Mv0Fu/lqhtZLe5lHjqquyv2oifXc3ol4pByJ+xUj3vHHfyzLRucX5lP1l3dkZyx2VE\nfRvv10mQXuT1S2QCg5Mdsh1X6+jEF5DtR9/GY5oMtKo7Sw3Ok5lmXXtcwK6Rwr8fwI6LqbxykUHj\n5NcCkYQDtmRqE2ApWUdQBK92fYlUm8s9jil3+fhDrS3Wy3OpNJjtcdl5tmcTx9Xvux9nzH2br1aB\nQos2x9Pl/cdkGtVD+2K76BJYjyKR0uP+q3zESLcL+aivqlOOk5LlwMG3/whYwGcItVXbz6V8k561\nv6mVSKSI+rTJVf25tYVQvMztQX1m+4L36ZUd601yRvYrYlteQ8322XrbWD/BSR1hLxz/83n4/9f2\nERfH0G0ZeSLFrRxfymG3C9NqNSQPuCHa35vkRiyRosSdRPUbIX69VrFtfiKl3TV11QgSKf5d1OA2\nWolgw9wtdZ16TgbwAotCfoDMgXNt28Siqs4in/x5aB0BfsWv+K1qeEUAHQhCWit41ztx7VYc6HAw\n783AiJaJnzRpUc5CziKW/HlwjZTQwq6lLQyWCNDia6/bFCeIatdUSy6xXcrA0axPUvtt+Xvn7URd\nbI/L3GszwTVSQov9FjYzYKDLgWqtrxGyA09194CdimQfaFQ5IIm+LbHoXHkMz6EMPsfMd5Xc3w+u\ncfRtbuI0asepBGtf+raEjbkBGDtArsMftzHhYLeyYz6elrFJz6Evj8kOlUkWJmx06ZQIsDhIc64z\n0eaSQW1mIFeUOy9wyZ+bY/L+i0CPXzEqfrsUyra9et+mP3vn2Gy15oIjL7jLPo6r8fdtnlKBvm9f\n2W3u9wmflhUJ8vtoX7FESrD9eRp6IqXv/Veq/5EJylD7U0q1Kyc5Ez/ORLW/aVaqv3BsIRQvcz14\nvytUT5Q5CZqGba24Xct2YhN0pk1nt9+6OIZuyxIkUrRUAb9xgJ7g56a0agvTajUlD/R+qtkktgNL\nJFIKvf8Wze/g1cO17qW1Ow54awS0SaRo5V5TV40ikRIPZl21DTa03LeYlG+acGcJWKnGevgn37Kv\n/4y/MUaL79gGggW9n8Y3WwwrEaAVCta4rMy1BNWQSNFyrkVJl8lP/m/1dhmrFuVcSC5i6X6X9dae\nYSQCWMFEVCnnXJTW3fIt2nvAf0SKy9o/n3P01u7Nokxiv1dqZXtKRRBrFuh1vst5a8+QAl0eGLif\nCck6hr6zU/0f/J2R4xgph+f4y/Pl8/TF9yogSb5xwdwxcvZRaulW1h9h3+bbTNS+9Oywedpt7bip\nbfapb9N19SrttAu2cb3Pe688DCdSyt+LulZatvZHtPNl8XhAKzuu9lsGYWaRQfl5YacT9taeWCCn\n78zO/chJCNTKr6acQM44t6FyXaq3qmQoz/YigZy+Rs8X02W3I+CL5R1Hqg99m6dUoODbV3abe9vY\nUuB7q1Aipaf21adEykT0X+65tGt/Sk5d6/JV7WHu1cAN5ffp8L5nq+NEt2P1sP1Nu2pjUcgWwvFy\n3XdMj2N+f5we89j+/Fma/AiaTqRNxBopUJ+VVX/FtPHPBIPZqdQwEwFK5VT6pmBtWjTEO96FzCMK\njbMGpkXDDXShBqFvgyAIgiAImi75M0/kd5P11h6oz8qrv/CjCtOpEVxrcCr+lGoE1xp8zGhKdSVd\naz+Evg2CIAiCIAhqJ46h24JEyiglViZuUvxVT/nKrr8iQP7i9N/JLB7L+LvAuh+DqQiQPzOsWRp9\nlXnsILTux0AqA8D1Uz9LQz9S9XeJtVegkQh9GwRBEARBENRCHEO3BYmUUaqviRQdJL/6L7T5C8MO\nkvskHbDfSRtGEsieoze+/99GtO+eqAhIvzSaQO29l2n3LSPad09UJNumun31VejbIAiCIAiCoHxx\nDN0WJFKmSKg/CIIgCIIgCIIgCMoTx9BtQSJlioT6gyAIgiAIgiAIgqA8cQzdFiRSpkioPwiCIAiC\nIAiCIAjKE8fQbUEiZYqE+oMgCIIgCIIgCIKgPHEM3ZZgIgVMJqg/AAAAAAAAAAAgj64xNBIpUwTq\nDwAAAAAAAAAAyKNrDI1EyhSB+gMAAAAAAAAAAPLoGkMjkTJFoP4AAAAAAAAAAIA8usbQSKRMEag/\nAAAAAAAAAAAgj64xNBIpUwTqDwAAAAAAAAAAyKNrDI1EyhSB+gMAAAAAAAAAAPLoGkMjkTJFoP4A\nAAAAAAAAAIA8usbQSKRMEag/AAAAAAAAAAAgj64xNBIpUwTqDwAAAAAAAAAAyKNrDI1EyhSB+gMA\nAAAAAAAAAPLoGkMjkTJFoP4AAAAAAAAAAIA8usbQSKRMEag/AAAAAAAAAAAgj64xNBIpUwTqDwAA\nAAAAAAAAyKNrDI1EyhSB+gMAAAAAAAAAAPLoGkO3TKR8Suf2PETX3vzliNbQ+tmX6OTlRbP9KFik\nj0/9nObeuGz+16jPTr9Am2ZWVOeyfDPtv9TmPC7Tka33lL+9bRsd+bT89M9Ht9ENxT7voU1H5TFH\nw+L5YzQ/+xjdxNdx8wpavXWBjpz/xGwRp40RLL69i568YQOdsGW0SH/41QItrLmBZq66qtT1a2jh\nuUN0IasY9e//Nz1/6+fM7z9HWx7eRSfO/sl8z7xPr635y+oYUtfcR699xAf7E1345WO05Zryu2/c\n+hgdr+3rT/S7XXfSN66X18H8gd558hba8PAv1V9LxSU6efA5Wr/qdlN3t9NNG5+j/acvme+b8O1Y\n1/0LgfYUOs4szR89r/YgWDxPr2xbT8t4X9sO0zl/V4tnaW79Srpp6+v0sflobKjzPfLvwvZXPUbb\n9x6rn3OQUNmF2s0iXTy42ZSJr5W0/uAFs50+ncP0OO9v+Xp6/DWvfBWL5xbonuX3qb7hovlkqfiE\nzu55RF3HA7T99B/NZ2kWz79OOzauMdcasJnFU7T9brapiGS/OlH2pe3jJdpur1+plX19QueO7hZt\nLj7WNZZzgdrfa8/Q6uXluSybeYZeqdmqqeNV2+nISMdUw+UztN8Ze/Q17s8ae4gu0P6NK83vPCXH\n4rgd97v9+QxqX819+uLp52g57zuiZRtforIkemhfuVx+nTat+hotnz1Vq2+fdmWiUeX8wnZbLtqu\nNu0J1FHv+rbMMT+HZPnmHqdv9hVpfwfPZNZN7nXnH2ey+q/Q9bfwXYNjR2h8zBxHJ813nSj+SCdn\nHyjLf2aBzplPK3xbaBvXq9/n9LG144R9dtefUuey51S9rRXtyO/r29MmhpYMOZFSatn6BTqbW+at\nUAW/Z7NqrF5SIxQAiGRIHuNPpCyef5G+ZY3K06ottL/Boc02gsUzdPAr19OTu87Yjr1IrJikhatr\n6LtPvlkbAFwW6Q9vbrVJD0d+kmPxTVq44Zr6dloikbL4qyfpu1fdQDsX3qbFxbfptftuqO/r0i/p\n+ev/Cz298L75wKP4/r/S84d+bz4YJReV/dwXrrubcwZKNUAf3S4Gokpue+LAo77dtU4wYjpLYzel\nbX3NG3TMMVsnHUfA4nu0/zHhnFipAb1xoFTXceqnVcctVXPixCBSk0ikFH2KKq/HXlQDgBr8D25R\ndePXY1nng3beXeCBw63zOPG+RVxTTiLl7ufoZFGck2VfVXn5uj0jYEu0Oc++sspZUQaAa+hbB99T\n/Zuxfd9Wi4Dn605yb2QUTiknIT3ZOk+Qsp1E/UftuOftz2dk9iXKpTlpUB2rd/aVix0HcsqtXZlo\n//H47IOBcvbHmL71bbljfgbJ8s0/Tr/sK+471es2RO51tzjORPVfA/quRT3H4hZpE7nj6IT5rhMF\nx9Cm3GuJlLgtLJv5KR2X7TtIrI79dpiwueWP0Nw5E+uyX1J8dtns273hWfn0LfvCANkxtMdIEin+\nnd2hcX6BVhf795Ianx6jTbeVx75h6zH6s/m4HeFEytIhArzlD9L2UzoTrDoLGyA2Dwh5RmBmcdzw\nJL1j24SevXEjzVx1Az299ZdmBoqYEeJsG8LMMrnmK7Tw5kfmM/X7hRna4CdiPlqgp9U+v7FmQZV4\nDHM+NrGySJcX7qNvXPWXImkSug6fnG2Gg82IzmynfTaLLzqtpmCEByOZMLt8iuaKTKwf4OvtHqMd\nfLfEZu+Fc2S2qwZpc8dYDjwmo5/jsI4WdlCUjW9csJnv6o5OUwfJ18btRsPOi+8wBsohQOkoinK/\n9BKt1/UrnJ6yzgfvvFvjBL05x+dBS2bzVfnwHcXGQJkDkHrSZTLsi/tWdf3//rq5M9Li+rnunbat\nbPb0Aq13HLzccjbnY8uKZ0nJcdM4JDlJjCFQ2rtuf7vtHaH89qcItI9GEnbc6/ZXY0D7yu3TY1w+\nQdt1PdlgpH/2lYNzBz/nulPUykRh27EICGxiQdhR3/q2Qe3D0Fi+2cfpmX1xP6LvfL/AM0O4f1bX\n09R/5V53i+NMUv81mO/KgbOeTSBmT1vfVZRf7jjat/Y3Fehy9mZSaXmJlNJu9XeqPmdPqPqQiZGM\nvsbUsf79PXvOqm3ZD9ef+e1Df6bsobhRrM5P3Ay1cTzvz5wnT2xw/IxA2+pKXgxdp3sipZZscDNd\nbkIjUImq06pPh3uX5ma+Vn4/M0v77f4eoK2zPzAzQ6Tuoe9ufSzw+ddo9Z53zT4VWdPO2s5Iyb2m\nXOS1S+M2nYj+vGFQyjKCYkbIXzqzUewskVrCgRMsN9LCrxIPyMSSI4H9ljNNmma5cGLGn6Eiflcc\n82+bZ5sU28kEzChgRyI0KHL9pQbMkCNi8DoJDnhqHRo7A2wjtc6FnX0+D3NM/y7SWAgMlAX+OUeI\ndaR+mcQ+qxGoj9rv9Dl/vTG5OXxMsL5qC23fen9z2WjalE8N1c9xkkte6yTZV/Q6c+wr0Tb9gCK7\nnOv2XmvXxb4y7gYOhXg5RPsbj9ztKlJ23Of2F2Ag+0qUXVb75OSdtJW+2VcTwtlWQer//GG7BEGd\nUJnE23G4bPrTtw1mH5q88s0/Ts/sqzhW4LzVf2Wdh76ryL7u7ONMUv/F5xrqo0w9J/svs03IBk07\nKr8LlImlaRwdb/ubCuwkBN0HKLu7U9mi/tuJNbmc9TZV27a2qz8P1bOF6zj2+6p9fHz6ZXp+q+6H\nRFwtJkTY8+Lzjv1vz3k4fU1WDB1giIkUTZUMqBIpMiPlSznnxdS3YkOFSCZIqUrZ+8LWTomU+FRr\nJXn3v1Uipc01DQp3ZmrfSSPOqT8zs8NZi0SRmCVSJjAaEhEmYRJLpFSfh2aWhGiakVJ+/42v7KLf\nNZZzmZRJz4AZJd4gESRnG02Lwch0XtVg5Dk/xfcrTda4j+jO1qx50mD39Ws1hD6vDdJhSudKlLP3\nu+J7OQVxSeCkhh40zpsBJB2kxblknmNNO5l2EPSdlkmyr0Sd1+q5Bg/UoXJOOaFMqJz99u636/L7\n0T0i6+PVnSTWthxS/VKIZjvuZ/uLMJB9tejTA5T795KcvbOvJrT9rTF3tD8159rQLyUIl0m8Lmqf\n96pvG8w+SnLKt81xJse+Rt3+GP84teP2uf+Kkn/9QZx2ZPaVM472qv1NCZyAWLWZ5k6fiNy0F/G3\n43OL2Pjmh2jufOxxDbGds19Tf+rz0BhZImNqns2iMO2G91ebkcLtakh9TXMMHWbkM1J42liRYLDT\n9uW2otCcRApPLVJO1/nflQNi20d75NThwoD0dDIdoPFUPFkB+YmUdtc0GNWxUkZY0lx/ZqaHN/Mk\nNUskbwbJ7+nEw38bebRHJk14hst/ped37aoWpr3mVvX/IWdR2/K4Zo0U3r9ZI6VczyVjNkpBJHm0\nVBgbTDd009HozuvSGdpXZGrZvqqp9nZgCw5G/nfmf04WFo8O8fRJM12vlxl9HlRD1x/D3IEMPtrj\nOkilg6OcyK17aK8t58AiV8Vgzc84y8BPtUAzrXTJ7yY5dZiyhRTVoOY+ihAiw8mcAPuydR4IzFLf\nleS0uVD5pMu5PK5ZY4Dt15RX2ecv0d1cjXFcgwnL1HcWLof7adOehWrB59giczl23Mf2F2H09hVr\n416AIeiVfbWC+5xUmaWIlwk/Pht8tMfZ3pR7L/q2QewjRKx82x1nMuzL1FUyYTGM8g0cZ4L6ryhZ\nvmuc0g44FsopZx5Hzf8T57v2mPMHaJN99Cr29ENOIsV/MkMifB5nv7EEi4F9jGL/8rFohbHB8Bop\nbDfD62uaY+gwI1ojhS+ML1R9VhvYRKHbShMVGRoIWyZSys5ef+47ujyY6O+4YecmUtpeU3fc2TTN\nxtJYf5GZI4MnUhTK4I9vuJW+4SwgewM9vetNqh4KSryxR8mdYRJ7a0+ZVMmbjVJSXsOoH+8JYTr9\nprrjjmTVOlodmj1lBw22vcxB3z7nq/ezolr5vBiY+prRF+2rkExWJnCuleV1yk67D8hzuMKr7hun\naMnvJpXOahUEpGwhgTNoafllJOBtY33ZhNjXYIEub/NlVfbyzRQ800RfeyCR0ljOn0TeemHqeSnv\n5qbquckGCsS4F5B7Lfl23K/2F2cw+2rZpwvS++6RfbVisERKU3m764QY2Ztsgt70bd3tI8xwEimT\nYF9lIK/8h2TCYvDyjR1nUvqvMJm+awwOgEXCo9U4OpG+66QQS6SIGNiJbeUEh1QiJWO/oUSKfKRH\n9Uv+zdPoW3sKW2jyTdrRnAMJM4JEiioI+2hLrGA1cl88XUhsHyqcVomU0P4Fdl/8GFBuIqXtNXXD\nTaLIMo3TWH/FIzz1pMjgiRT96uNd9PT19bfxOK8t5jVTnJkrCpuEaU52lLNRzJot6ncntq6hDcWx\n9OuW/ze94yffFNnJoKHCMyLUIFDMrEpggy6/E+FZTuz0DD7o2wHStC+nk9J3kO0ian2guv60M6Sc\nEzHLTModtLmM/DqpnMKmWV+lg8CLnKnfiVf5uYuoDRNjS47zlVvfCeyCcCFniR3utrPr+mdfgwW6\nmjI4kHZVag3NbFynyiiQSJEky9mldMpNnSpn8oh9Hbiy2eCr0IfAoIkU3saZEaawzjCXzxDseCzt\nL81g9tW1T+eZF+0CsrHYVysGSaQ0lYmcNSwlArUk4+jbutpHjGElUsL0xb7Yf25+08hg151/HEMP\n+686pp/Wddbku4aws7y88WDQcXQs7W8aicWwPHNK1wnXPdsC19UIEikMLxCut0v5GwWc6GuymXY0\n50DCDDeRUltsNTfpkJOkUIwkkcK/GXYiJWVwafx1XXI76ab6iyUUBk6kmATNhjW7RCJDJFdy3pqT\nWKelwsxGKbYxb+S55k46+PaflI+kX3UcWKdFk7XvYdJyIOJAJDhd0TiHRccyBGenyOKaVxIWgzpP\n3eROdLgd0+CwcxyYocYUz0nqJJScuSKSK42dsibjOHqfxd2kcpvSaeREg3ESkr/vhnscJt+5TRJd\n3yGnPAL00L4GT6Ro5J0zpeIND+/Rh0VQklEH0XKWmLu5xTbGUeCg0Nx9aUz0dWHQREoKcd0fDmzH\n42l/TYwlkZJlTz5jsq9WDJBISZYJ79efGebfrEgwlr6to31EGWUipR/21S650f26WydRVGn3sf9y\nGVUShRlgHO2hbzEY3BZNWRiNvo0kYlj7FjP3nCqNMJHilEdD/Gz6E+uXXJZLIijbzUqM12nOgYQZ\n8mKzPrlJh8CMlFCBXwkzUmRWTim/k+6eSBlssVleCDb0Zp/Udx4ZyY7iXDhxUntMyV+gVrCUiRTb\noBOPTNSQyRLzkUUGtH82HU1owDCDfnIgLrfhabelky/2ZYKm8TvTkqaAnjvf0CCc+s4nI3FQlA9P\nK62Xd608hwI7c2V/ENUQAl2nzjsFaj21r8S1DFZnOW3OkFGexblw4FErqxbHak3C9getM3vd++mV\nQe14LO0vg4Hsi/uo0DaxOk/9Js747KsNfG1tEylNZZIxxib70LJ8lr5v62IfKWLlO/hxxm9fHKT7\nN1VSdLnuLsdR9LX/Yjr5rsxi9XKA0KNySXJso9xmsnzXJtj23DFw9NfQEGfXZpLtp/2zD5rzS8W1\nsYSJ6V8zrq2Kt7037zr4s1GM/RQzfj80SbUOiXhFcw4kzIgTKXyBavtaI6kKtxrAhplI4camP/c7\nJ2nAHGTlJlLaXlMLTJa1+L1SmySKprH+ioRCIJHCj9zUZo7kJEJSr0h237aTnN0SOzeLXl/lv9CG\nh39ZrrlSS47EzyNrVs0QsDOJ7POwuaQGEtfJK2061ElkOIOFw8+PFwQcCDMYdbLdQeDjhq6/8Zy4\nPaYSKeYak/tqKj+zLztryGwvzjleN4Mg+puUEnXG/WBoEIudc/m532820Hf7qh2XzzGdaIvWq7ff\nLuVcoe1JvA6zFpyn7HxQEvsuziNt08lrs79/k44PZMfjan8ZjMq+on1SaryIMU77agOXWdt6bCiT\nnL4/VZ5j7Nva20eKePkOdpwx25e9k97+bnSr6+58nB73X4ruvqumevzDfZTaJXp9OW1njO1v+miI\ns2uI2DhZviI/IPtSrhtb95wI8baz9ao+T/UTvD9uS/w/78v0PV1soTkHEmbEiRR1jUXj0QUjs7c8\nnVJ/Lqf65iZSPAc/kkipKlB9N8y39rS6plykESlxZr8FjfUXWWy2SkJ8jrZs+L/m7Tl/oguHnsp6\nNKdMVOg1SnbRCV4PRbF49j9op/49zxKJrpHyNr123w2RZIxmkf5waANt4NkoxUf5M1KaZ9UMAZ5q\n1qHeCorG79/hYJsSg4/tNMSAZzPIqUHYTLu19q5+VthxfTAKBYKjhTtWfzpp4PoDlNehM+fum3cq\n54A7a3bm/OOwI5A4TlG/cpGzuuNeK8+R0sIx5QStP93Wrt3h76OL09tn+xL1bp1fVef8fHrTgGvb\nnCg/2+ZEX9+6nBme8i36jlpZ1e1tmPCYJh3h6hn0BjsIlY/GBh2p32faWu/an2RY9pXZp/P22Y7i\n+O0rn3ign6SxTPj6/DdJiSAw2i+NuW9rax9JEuXb+Tjjti/zWIzsi9uQfd0DHKfP/ddAvqupe91+\nRPsIYsu5YRyt0WffYhKJxdkyBuX6UPV76qfmUSxZR+F4uXxcTW5b9a/VGC8SKWo79sWtv64/j/bj\nfI7iXDj+5/Pw/29Bcw4kzMgTKW6h+VKBo7OIatOUI9MQ7e9NciOWSFFUFRsQv16rID+R0u6aMqld\nW0ANZd5cf+HXH2vKRVzdhWJLfY6e3HXGNB6FmQniJizM64lrv9WSv1+kP7y51b6Jx99uy5Ovl7NN\nfBbP0MGv/KU3oyS0RspfVDNWLEvx+uOUPbC40686K7fTT+zDWTslsV1iICzbgResBJ8z5az/EuPN\nxpJyZ2aZOzmOw8EOTv23NafHe3ROKj4DzJS517kHn3F26mqUcPDmB6Bh+4r3g35SSVO/W9ZE3+0r\ndf2OffDdDOfa423Odx7blbOhKCdegJAxx+Q2XTi7/ArIEZBqf841htqfdLZ8Ja67IGbHkj62P5dR\n2VewTzf7yA4a+mBf2XD/FQrcY2OnIqdMOGD0y1ir12NnC/sI2pckVb4t7ZAZs33F214laxcDtL9W\nx3Ew++9l/5W4dquE75oYN6xsWceP5Y+jkvG3v2kjEWcn+ki3jsLxsmpgdHz2wUAdq7hYtv2U3fg3\nZCQcJ8t2YhN0xs64jUeTMXGaY+gwS5BI0ShDP/0SbecVlrVqC9NqmqYc6f3It3OYxpVIpBRcPkP7\nZ3XW0xxbPwM4+5L3bGObRIom95oyEYvfRjVwIiX1qI6egbKLnr/1c1Vy45pb6fldh8wMFUMwkaL5\niN5ZeNJ5c883bn2YDh4STmSBXoR2gRbW6Bko1XYvLPwqnETR2xezUQKJENUYm9/aUyaPRrs+CgcX\ngTqzakqkaPRdzIXyOdPiNyoICa10r7P4e7Y5gcuymW00d9TcTalhMvqBQb5XK5/buxPmump3DzWh\nQE5ziU4efE70DYky8fsDfZyfvVwvZ6YYXMwiZw7irnNxvKVcdb9dIkXj1HVxvpHy8QemRibBvvy2\nZc7Ht69oIOLZV9A2S7LLucA4gaGydtpDpC8YIovnj9GcXbCNj+nO8oq3v/p4qK/7+cbxMCOR0sv2\n5zOgfbXo0+3soUB7q9Mf+8ojFegn+rbcMqn5giEbl/Skb8u1j4ESKYoWdlgybvuqbILPNyRbf53b\nX8vjSHrdfw3ou3J51n4j5JR1/jhaMiG+60SRjrNrfkCwjmKJFI2qY7mgcKyOa22uqS+O9V3sQ+hE\n2kSskQL6TFb9FY/E/MXI1wvpDUXiZ8SP9QAAAAAAAAAAGC6pG3x2oWSTkOn3W3tAn8mrP/NITM4r\niSeeK+laAQAAAAAAAAC0oWsOBImUUZLzuI5R8JGklmTXX7HmyA3TP0ujWDflv9Lzh35vPgAAAAAA\nAAAAAEq65kCQSBklfU2kkFn09YYNdCL4HO00oGejrKbv1hafBQAAAAAAAAAAkEgBCtQfAAAAAAAA\nAACQR9cYGomUKQL1BwAAAAAAAAAA5NE1hkYiZYpA/QEAAAAAAAAAAHl0jaGRSJkiUH8AAAAAAAAA\nAEAeXWNoJFKmCNQfAAAAAAAAAACQR9cYOphI+f3H/w+aQKH+IAiCIAiCIAiCIChPHEO3BYmUKRLq\nD4IgCIIgCIIgCILyxDF0W5BImSKh/iAIgiAIgiAIgiAoTxxDtwWJlCkS6g+CIAiCIAiCIAiC8sQx\ndFuQSJkiof4gCIIgCIIgCIIgKE8cQ7cFiZQpEuoPgiAIgiAIgiAIgvLEMXRbkEiZIqH+IAiCIAiC\nIAiCIChPHEO3BYmUKRLqD4IgCIIgCIIgCILyxDF0W5BImSKh/iAIgiAIgiAIgiAoTxxDtwWJlCkS\n6g+CIAiCIAiCIAiC8sQxdFuQSJkiof4gCIIgCIIgCIIgKE8cQ7cFiZQpEuoPgiAIgiAIgiAIgvLE\nMXRbkEiZIqH+IAiCIAiCIAiCIChPHEO3BYmUKRLqD4IgCIIgCIIgCILyxDF0W1omUi7R8bkH6dqb\nvxzRvbR2xwE6/P7Hgd8OSx/TO8d+Rjtf+cD97I2f06Nr76jOZfn3aP69NufxAR3Yclf529t+RAc+\nKj//3cs/or8u9nkXPfqyPOaI9P5bNL9jI91or2MdPTr3Kh2/GNjWU3P9Vbpw/Gn6wRe+TYdFGV04\nuZ/m7/oizVx1ldLV9Mhdm2jfgVN0QfwuV8X+r76aNnz/SOL3H9O5A9+mR676e9p95IL33Yd0et93\naPPV+lyuonW3fIdePflhbZtTP/kHWnedex2lLtBb3/8SPfLN/XTO+Xyp9J6yp3+ia7/+LB3OqLtC\nF39DB54Rdb9yIz3xv0J1/z4d3vcsrV15e7ndzbfTjY/upH99+Tf0gdxO7e8XP1xHy4pt7qAVPzxY\n39fFU7RzZiXduOUQvSM/H4v8dqzOecvPO/QnLcr+/UP06Mqv0i073nTLTumDMwfpu3wuqh1+95de\n+eptTs/TquX/pPqG95zPR6Js+whJl+0BeuLRe03ZBn5/8U164utsUxHJfnXi7IulyuLlH6tyvJ+e\neMPvU2L6iI6//G+izemx7v/QgTMfBbYVKq5f2VDNFtX+frmdViwvy3XZ2u30i9q+PqK35r5Ny1b+\nmA6MdEwNKNEushS9bv1dwI73vVWzj961P6PQ2FkpNabFpH5z5Hl69pbPmrH3s7T5m8/TW8H9n6O3\nnv+2HRdnrr6Fnn3+NW+M6/PYqY97J22I7fu9/fTsdZ9p8Btc1f2WzfTikXPVNheP0O4vXG2+j+jq\ne+nFs9yvnaJX//kWWld8p+rinxfodM2G36K9t34+XEbF8f6Onj3wrvv5QMoc82Py/cqUr6623b2F\n+3XdN/2Ydr/xvrdd3/qvjPEtqZDvMT9A/97X/ivU/lSfsnszPXUdt5EBfP9g+9X9yd9XbS2oz9NT\nu39bbt/L9nclqCm+12oTB39Ih3fcX/5u7TwdD25T6oM3nqVbiv0/SDvPXHK/O3OIfmjbteq35t6s\n+wpFO1L90KMH6Lfed23EMXRbhpxIKbVsZp7eyuq82koNJnPfU4OBV5mhAEAkQ/LUg0RK4byGA5mc\nMm2uP6OiE7qOfvCTt2xnd+HkHG2zHanU37TvkIr9a6cwnUipjll3Oi8c2Uwbrvoibdt9ki5cPEkv\n/qNylHynr+i0/6rqgH0V34+jQ1VOxr7HS6clN5Fy8dc0/x3hBFgph8kJQo1zUttOSwaGphNb+TjN\nK2fggzO/oAdUYOTuywSUrZOOoxAHt/XrateftCh7W+a31wPGok9R5fWdXyhHjPfpOzxlwmbQzjtL\n2fYRFg80od/ba89JpNgynTT7qlSeq77O3ESKsClfySBBtFXPFkvH4V56YN+v6QOuW39fxXiwmtbu\nO1t9thRKtYssxa/bBh6yDAt5dty39scKjJ1SqTEtLE68+OPuVbTu1qfplNN/vUuHv/k3te10sOGM\n5T0eO4sk1Gf+gfYeD7Q7PtcGv0GqvGHjl4eW8FuKwKohkfKFzWaMMUHfdffTiyc/NPX5GS9gM3Um\nky+OzPfBJFUX5Y75ESX8ynCfE9h2+bdp5+kqqdC3/itrfItKjVPHZm1SyFHH/r2v/Ve9/ZmEaqhN\ntEoGK0Xbb04ihY/Vx/Z3pWiYiRSO1c3vookUncCcFwliL5HC/kLR/3xg2ttKr0/hhE2bG2NhcQzd\nlpEkUq6tXeiQdGaeVhT79yrzo1fp0dvKY//1llfpd/I32QonUpZOInt38x20au6U6vzfp1d2rDcD\naLMBN9efluk4reOgxQ7aF+mpnxwxHZa4q+Vs2yTZMcccIveOWb3DNp2p7Sg/prO771X7FFnr4HX4\nytlmyHLu0is1BfOFOImg7zLN27tE1R0N0UFwsLtyI/2Q70bZY9aD4mqQPkvzj670ZhToTmplx2Bp\nyGIHzgTm5Wdv0s4iE53Zn7Qoe+duUcDZKh1Fcdz3DtBa5WhJp6d03gbvvJvVwj6C4r7lXlr7zCFz\nh045d3xHsdFGuR8SjuCk2Vchcc1FvWfWnbXN79FOvjMbanOeHOfeKWNTH7asPqbf7vue2pe0c+Ok\nZ/Ufw1NTu8hR/Lr5Ov2ZZux0VfbVr/bHSo0nTWNaREXCQgX5JnAoPztCe4sZFnK8M8GBvlv8j3Pm\nDq367MjT5Z1kO1b2eOw0d5FDPsGFkwu0y87IyU2k/JZevOvz9Vk5XH6NgdQ5euP7X1ZlU0+6rLtr\nns4W2/AxRNCWuA6rnG1ylTvmB8XBvtfm7Ngqf29mcnKCpPisCoiqtte3/mvQ8Y3HrvX0xDGeecPJ\njy79e0/7r5BNcpLxurtpnmeg2BkhLRKandqv6r9e/RfVZ6o+jRMlfWx/V7pEcnXZ2ll6JZpY1NKJ\nEW9mmFYokVKbJaflJVJMu+Hf88QG2Y5CbaurOIZuS/dESi3Z4Gag3IRGoHCD03lP0861Xy2/X7uT\n5u3+7qfNO75vZoZI3UX/vGVj4POv0oq509V+s6Y1tp2RkntNuVLlt++n5dTC4PG9awqouf6Uio7q\n8+4dtbPz9JRyAKvOS26rOtlsZ4qdvb+hZ77/AG0Idag2a62nHN9PzxSdr+901jvP8i6b2F9xzhmz\nZYrtpBM5OlV3upXT8vjjmYO4ViAILcQOQjXYlgN0YHBnZ4uPV+tc/H0Z5yd5x2WpFHLEjDI7yfyy\nZwdJfb98HT30eMgZDZyPX75Fna3Omg0yuPLtI6jaubNyfi+SOPJaJ8q+lMSMnmVrH6eHshJQWnHb\njLZFrcL5+Crd+PjT9Git7Ov1WdtXUb7+HcxRKqddZKjldVs5ibm+tT+j0NhZfJ4zpoUUSnIY1cbk\nQEBRyN9Hf8fO4jyu9mejfEind99fzsi5+hZ65v9rEcDVyqhSec2pcxeJKXm3u7ZPvpvO9WnKuzFJ\nY7ar1Vd7ZY/58jsr0+ZC25g+3H4XHWv9dtuz/mug8U0pdt2p8k32c/3sv0Ltr9Y3sLJ9/wHar00i\ni7bUw/Z3ZYuTq9ovcGelBWUnO+jtlX2vUDav/64lUkSsr2LbG1eq/qT420uk8P749/7/to0Pp6/h\nGLotQ0ykaFWFUyVShINWk3LOi6lv9d87Uh32T/c+0SmRUgVY/jZK8u53q0RKm2saQHI6f4YRN9df\nm86Fn8XO7BS1io6xnIZ3NtZB647yM3wHyTh9Naez6a5a+X196nNI5TFCztZwVQ6ef83PE/tOSvA3\nKelEnXlm1+4jHtTZDoWdGzNwV86B5/wU3680M5/kfsYh79yD26TUpux1Odxr7s5dMuVZd1JLx1CU\ns+dsFd/nDCwjU8g+Ioo5ikq16/TFDqCfEJko+1LSZXDbOnp0r050m3PNSqREZNcRCO3DOB+6zN47\nVpafU0e+vfvtuvx+dI/IhpTXLtJquG62pWi7VHVivutf+0uMnVljWkj+OBfaxsgENs3jWF/Hzti+\n9OdfNGvCXDTnmudzRINArSIgS+yHA0U/IKuVs6lPLs/i+0AyLaTiHAZNRLUY853vMuT14Y1jgVXP\n+q9Bxjet2ljW8Hlj/97H/ivU/vy+QW6f2zd1bb9m//7SAb1rf1e2qllXmb4AJzqK2btHxcSIWCJF\nr3lylA7bJ11azkjhdjWkvoZj6LaMfEaKrIhqWrrclh9j0fuQiZQ7aMWOo8rpVQHDmbfLrG3bR3vk\n89h2WrYOQKpnsqoKyE+ktLumbio7Yr0vJTmlPKHm+jOdUjLLbLYppuh9kZ76wf76Qk9BmceDjGOS\ndHKs+Fh1p7P8vXnO29938Vx0xh21Qm2SR0MUdwDBoCEldkrYvv5NLHhmHJhg8OZ/Z/7nZCHfQSnu\ngJhpt32ZLSCDqPfkQnf+9Wcqu+y5rGN3+1R5FUlRnpVhst7mkZUlvRtulbKPsMq+JDwQpr6rjpVw\n4ifCvnwNkEhh2yr6ZTHV3sq3lXDyoCx3nkIvHHNVXuX4spSzUXwl2kVUGdcdKQvnOycR16f2lzN2\nasXHtLrEPs++Rv/5TV5gUS/2+CQdlgvE2sTAK3TWWZi2Pkb3cuxsSmwU4sAuJxBLJ1LK78KzVarj\nJALI68yjVuLm0DnV5xWPOzXeDWeV9Rs+h1y1GfPld80q+xn2VbnN6329TYf3/rh6BDLQz/Wp/+o+\nvrHM+Qcf7fHHvrz+vXf9V7D9cTIj1FelvoupRfstzifUPvvW/q5kmXZR9AGZvtyZBXrUPkIo4vlA\nIuVft2w3i1jLJUParJHC/d/w+hqOodsyojVS+ML4QtVntaw5O7PqO9sJiYIPZdlbJlLKTlR/Xu8M\nq2CEB6HcRErba+qm6rha8tnPuBrr76Kf7Q3IbFM6acZRs+umxGSmyV79Zdr9arla/qCJFF3O4TcP\nlI5h3h21UuW5LHFmunMiRdhXIZmsSzlOge+cNUPuqN6qUgS9PZotwM7IygdoRWj2WNuAfBiJFKXw\nqvvGKRrbbJSUfYS2H8DRjDmJ9vsJsa+auidSqjHFyE9ym2svbwKo/6NlqBz14FsvSudlaWej+OqQ\nSMm6brZdYSvFb0XyVIypvWp/OWNnoRaJFB5rr/sSbS4WqOUx10gEDDyePnLLl8pp9I68x1NUOfdt\n7MzbT7tEii2/q2+hXfv4DSN63Zgq0RSsL/5dLCmmnPfgW0OKoC7zbnghExQOlIhqOebnigMUO7by\nvu6iFWuNH+zID1b60391Ht+k/PXVCum75d4bQrL79371X+H2N65ESsO+e9X+rmDZm0Yt/ABHpxOJ\nFKlEIkUp+taeoi0m/NMO4hi6LSNIpCjH3j7akirIUOGJ7UOF0yqRkq6cal/8GFBuIqXtNcnv20p1\nunY18WZjbqy/rLtCQnbRu/QdrHJlbbeDY8eveyIlrPKOmtledbiHf3C3cSzjr4zMO5chq3MiRYpn\nOak2Vdy9GIZT5S4C53RSarAvH30I/W6EYmdEX6czw6K6/lYd+ZASKUEVDigvoKqcSfFK3PBrIkcp\n3z5C23R1NLls2s6u66F91TTAjBQr1TfzzEYORsyjmE4Q0ZSM8lTezTXnpZz76jXBd3gLtI5SLdtF\nm+tm56e4JqGV36a1OugI3UCRGlf7yx47OyRSdCLEmYFyjt76yb3F+h18vHIM0+OcNwPFjtHNxxvf\n2MkBVtM5tkykqO3LdU70NUip8vzvq4pEUj2Rwsdw33TULHfxXeeVy8FXUGt1CUZ9jSCRwo+MOzMw\neF+6LcoZKKKfy+jDxtF/DZ5IEdfI/ZGR81rnIfTv4+m/Yu1vTIkUno3SIqE7vvZ3pUr0B01jclSp\nWFmqS9xs/MzgbOnu4hi6LcNNpNQWW81NOuQkKZRGkkjh3ww7keKdY2eJWS61x6lcNdVfJ6coOgXP\nqFgd+7O1TnE0iRRzR604F9Ox8uJZRbY6csew6RpGoaEkUrRM/Red2YXBnaoikDGvJCwG9TuMY2Du\nlAy5Y8oSOyPBmSfm+tuU48gSKaaMzMDiTo3m6cFdB52ukvYRPm43R7N5v0H10b5q4j61ZQBSE9uP\nvqZflwO7f6exlaNt7uYWz/8aR4H3ZxIQ9ef1R6E27cI7T/48dd1yBoo6Rpk8VUFKYzsfX/vLHzu7\nzEgJTVU3++HAwRzfnXlilJXkGefYmRvQtE2kaLkzUGyi6Z1YmZhybXuXuigj87pox+fhZE5otg1f\nzyAzeoacSAkmUbR4X6Fp8twfNB1nPP3XwImUwl/Q/ZCc2SmSK0Wf1KGfq2lc/Ves/Y0jkdKxTYyt\n/Y1S3K70OFhpacb4BrFdD3Q+qVhZqkMihW/IcLtzfApvxmsLcQzdliEvNusrVZChwmso+CtuRoqW\nOK+GfTbV3ygSKeU++U5QTLHOuF0ipTgWO3/GCa3Oy3T8IQdpahIpF0Xg5gejxhFKDsTlNnxHpXQy\nxL5M57n0HXkqWdIhoB9VIqUoH35kpV7etfJcEmWUjymPUL1Gzznxm7j6al++RpBI2fuf1vGIK21n\nRXmxo14rq5z2PSy1aBfC4Yorfz9J2xhj+xtJIsVLlgS/4/EslSzJGN/GO3bmBmVdEilhlfUVCKA6\nXU95/nyzqLbvWnmyhhHIiT6mZtdt+gSdGDCLkwfX3OPjhPrE1DlUGlv/1WV8s8q5bvXd0SOD93Nj\n679i7S9ln4k+Iaqc9tslkTnO9jdKsX25djR+/0iJfeiB7HFUiRR/NoppS0US+Jy5YZfp03viGLot\nI06k8AWq7WsdKDuz6jsb8AwzkcIdk/7cNwZpwNyBjnmNFHP3Vv/WbUj5+2ysv4gzVnZMYeei/C7e\nMfJvwwkU1jASKXrbv6ruyNUcoriz1nQNI1F2MK/EwUjIyeDvzH5Kmw51EsZOUscrzonvOAWcI+9Y\ntd+PTCknK+O6fGWXPZdBTqdrtrWzZsx51Ryhbh14Ui3sw/mucRu+/roT2cmp6619+eI+NeQ8++L+\nPlQW/N0wHG19TuJ1mMaGa4FI1jkPqhbtgus0eL0s3k/8Gprbzhjbn1Zk7KyrzZiWClbMfjjJEg0W\nlBrPbdxjJwc0TWWSE4gJmTKpJ6KarqdlYFWUFz/eHAjOOpxHGw005hf6yL5l0nlUxVO8z4+PE5XG\n2H91GN8qpc5LjGEDJ8rH2X/F21+8fXv9j/NdTBntN9WPxTTm9nflie1e2/Qg7XVEiRRu7/aRavM/\nt6Vs/78ujqHbMuJECncOuoDk1LmMt/YkEyleZx9JpDhO3jDf2tPqmjIlEinVtMtqAEx30qUa6y/W\niZmpcjNisdhCLZ6/9pXngOU6nWb6nnwHfu1a4k5pJ+dpULVqzJxhvaNaxKxQYI0Q22nw4mX6M34W\nOWUjZtqttfeA42T2PZaMeFFe/vTaHq2RUkwllAuoGges5giFHNFB1cI+gmJnUU55FM9n18qpi9Pb\nc/tyZJzYzOsrp2DrIGSWXrG26U/9rv+uELfXpC3ylG8xbbxWVnV7G51atIuYItfNY6csS7uOjj9t\nXmqs7U8pOwBok0hRMkmQR+56WqxRUl8jRddJGUB4i783jtH9GDvz9pMRiDniQOmztPn7L5sy+ZBO\nH3iSntKPKnmPG3cLrOoL9NauJWob8XJtJW5Lrcd8LdO36DYn+uawTL/ozFjJ6efG3X+1Hd9clf2G\n+u2WeecNeB+c+QU9oH+fOues/l1pzP1XtP0Z23UWbFaxSLl+Um47ZDW33/I82uy3B+3vihO3Jx2L\nxmw/HC+7GkUihX0TEWNz/M/n4f9f20dcHEO3ZeSJlCoI0IXkSwVOdmFarYaC507L/t4kN2KJFCV2\ngqvfCPGrO4tt8xMp7a4pX6lzdZ34sJrrL55lLheiC80mkU6Kkrmb1dQ55XWYmU5nkej5vLev0HPe\n/Jo08Vvu3Je6M40G81W21wkoZSLNk1v3CdtLBCKlbXmBY3ANi9Az0kuhxHU5a6dwEJxwOIaeSDHn\n5u0v+Iyzc65DVLZ9hO0r3reEkr71u2VN6r99SSUSKWw7zrWn2py/1oCnHEe7KCdegJA/N8fkNl04\n4vx6afHbkSjVLjLan1bsuqN2nLr50IP2l32HNjGmBcdOM47Vxl0lf+0UvuFR2zaydor9TQ/GTpMw\nSvsDqUCMv3Nnzkb9Fpk4sjJ10+J6nAV6+fPgGg2hBfnL4zUn35qU6n+8Md/vvxLjhpUM5qPjRKLf\n7kH/lT2+Bft303fUfquV6peUshIpPei/ou0v0f84bSjc/lyl2q/8Pj8x24/2d6VJxMJRux5TIoXb\nm2wn/Bm36Wz/vy6OoduyBIkULZ3VPkBP2FcYKdUWptVqKniRHS/2YxzhRCKl0Ptv0fwOXj1c615a\nu+OAt4J4m0SKVu41tdMHZ16lnXbRHCX9pou5V7MSM831xx1ZOHHhrIStO8xbvkV7D/BrBY2WPJHC\nd9QCx1MDePObB8bUmUYbcySRouWscp+oe73d3I/sqwe1lq39Ee20K+37MrMF/OMp9eutKvou0nz5\nHHdxXfoukb/S/xgSKYUTaBZQdb4Td72KOhjxW3uy7CNmX37Zxn6v5A9M8rugJsW+WG0TKVpuXZe2\n6d7BDKrR0TYJplBZO/Udaguj0ggTKVreeJzuu5R60f7SY2elxJgWHTv1LIqnxYKp8bfoFGPeT75l\nX20cf2OFVp/GTlMuyURUKhDj7/xATl3jkXnabf0WfS1PizcgCdm777mJFLlAr/td1ltDivrODxqT\nyh3z/f6L/ze/Ccrre3wfNN2u+tJ/ZY5v0f79fTq871nRv2f0S1qN/btSL/qvRPvz+xTdxmq+f6z9\nSaXarxbPCMttEz1qf1eUchIg40ikxPwSnkGjk70TsUYK1Gdl1V/hTHymIcExRUJnCkEQBA0qjJ0D\nqby50pSImhaZoDI7aQNBoxXaHzTRSt3gm6y39kB9Vl79mal8jVOUp0FX0rVCEARBoxPGzoEUfMxo\nSnUlXSs0GUL7g6CkOIZuCxIpo5RdHLdZwUeSWiq7/opO5ovTP0ujePb77wLPTkIQBEFQS2HsHEjF\nmgefmfa7xOaRKn+NGwgas9D+ICgujqHbgkTKKNXXRIruaF79F9r8hWnuaPQdtTtpQ2wRPgiCIAhq\nJYydg+kcvfH9/zbd43KRbPsSbuBAPRTaHwTFxDF0W5BImSKh/iAIgiAIgiAIgiAoTxxDtwWJlCkS\n6g+CIAiCIAiCIAiC8sQxdFuQSJkiof4gCIIgCIIgCIIgKE8cQ7cFiZQpEuoPgiAIgiAIgiAIgvLE\nMXRbkEiZIqH+IAiCIAiCIAiCIChPHEO3JZhIgSAIgiAIgiAIgiAIuhLUFiRSIAiCIAiCIAiCIAi6\nYtWWYCIFTCaoPwAAAAAAAAAAII+uMTQSKVME6g8AAAAAAAAAAMijawyNRMoUgfoDAAAAAAAAAADy\n6BpDI5EyRaD+AAAAAAAAAACAPLrG0EikTBGoPwAAAAAAAAAAII+uMTQSKVME6g8AAAAAAAAAAMij\nawyNRMoUgfoDAAAAAAAAAADy6BpDI5EyRaD+AAAAAAAAAACAPLrG0EikTBGoPwAAAAAAAAAAII+u\nMTQSKVME6g8AAAAAAAAAAMijawyNRMoUgfoDAAAAAAAAAADy6BpDI5EyRaD+AAAAAAAAAACAPLrG\n0EikTBGoPwAAAAAAAAAAII+uMfQVnkj5lM7teYiuvfnLSd2w9Rj92fxi6XmX5ma+Vp7LzAKdM5+G\nyK6/S7+k56+/hmauuZMOvv0n8+Ef6J0nb6SZq64K6Hp6/tAls12CS7+i155cQxvs726gp7f+ki4s\nmu8L/kQXDv2UFtbcUO3/mlvp+V2H3O0Wz9KJrbyva2jDml30ziVnR2qbM3TwK59Tv7+PXvvI/W7x\n7V305DXqt9dvoBP+75aAxdPP0fLCfh6iufOfmk/TVL+py7XBS3Ty4HO0ftXt5vvb6aaNz9H+024d\nLZ5/nXZsXGO2WUPr95yij813zOK5Bbpn+Zdp2caX6KL5bHws0senX6Lt9pyVVj1GO46eV9/k01z2\nqvxe2E6r1XUXx1i+njbtOUbnnIN8QueO7q7KeNVmmvPKV29zds8jtOzmlbT+4AXz2Qi5fIb2zz5G\nN4my2X7wTK1Oa5xfoNX8m4hq9tVYPpNoX4bFU7T9bl2vX6PVe941H+aTtq+wDdfqafE8Hfl3rkvd\nfhfo5GW/gM/S3PoVqvw30/4l6MMWzx+jeWlfN6+g1VsX6Mj5T8wWKerXvWxmG80F2m5eP9fD9qcJ\njp0KNfYdefhW+oYZ075x68N08NDZrH5r8VdP0nd5LPT0zYcPKS+FWaQ//GpBjJ16XHySXvvVR+Z7\nw0SOnXl9TpgWtpdp433u25bWt1DXPvtSoG/qX/9VP3d9Xrsz+6+M6241jva0/4phx8T6NV172zY6\n0mBm+fZVkbLjifUt+ozvP8b6WN22986KthDvT9P8kU7OPlDuIxi7+m1u/H1x1xwIEilXXCLlT/S7\nXXcWDt831izQZfMp0fv02pq/tA6cq4xECjuYgd9/4yu76HdFC/wTXViYEYkWKeXw3fcfJpnC5/g5\nenLXGfrUOHbu+arGUzig19B3n3wz0MD5esp9tOsABkE7dQuic8h1dhbp4sHNalB1bY8lB+hy8A1t\ndx9tOmq6EevEPEJz5y5HBmzu6B6g7af/aD4bF6rcjm4XDq7UCrpnT05QklP2sfJTTtfW120HbTvm\n9Qt09tOIQ8jOx93P0clRG9jl12mTGNgqqcFn9kRtYHFo6QDmlM/k2Zfh8imas4Ny20RKs32x3bhl\npyXLj8u4tOs/R5yA0tG8nZbPnsqw/cFYPP8ifStoX0qrttD+ZDDSpu3m9XO9a38FkbGTkxK1Me1v\n1bj5e7NRjEW6vHCfTcD4qhIpi/SHQxvCY+c1X6GFNzmZMoljZ2afEyTf9rJtvLd9W874FiLXt7hI\nR7beF9xm2cxP6bhNKvSv/0qde1mPqf4r87pbjKP97L8SXHqJ1gfHLaXGREqufTENdjypvkWfifqP\nxkbZ/hbfo/2PVQlpV2voWwffy2zLl+jkns1Vv1yLXTPb6xLbQtccCBIpV1oiZfFNWrhBJzz+kp5e\neN98qPjzIXr+L7RjFnOuUogkzPUz9NpZfafu93Ti4b8tP7vqRlr41R/EsZVjd+tW+m0xqHxEv33y\nK8aRZMeT9/cPdPCsKnk+N+fumdkmcEetRDioNzxJ77S7oG74Gd9Cuc7OZdWx3FP+JjWwigGPO0Dp\nIFpnhrczNvPno9voBvm9xmwzaBZ3KNjrUs7zYy+WWXLZ+Tc5G7llb4/DTvYndO7gFvM77ojZMeBA\nm+tGduC8jd+pjwIeKNQ5Ln+Qtp+6pA5vBhjnvNsgBjLepyarfMR2k2JftbsfWi0SKVn2dYH2b1xZ\nfsfOgHRMrCPN25nff3qMNt0mv9eYbXzneyQE7EvV/MenfmpmCDQEtPJuJl/35RO0fcbYp+OI5/Rz\nfWt/huDYKcYZnqWy+Da9dp+ZNdI49lxS4+T1zdsGxk47c8T57QSOnbl9Tohs22th433s25bAt6hm\nCHByXia4ZEKkb/2XDOQ52JMJtnQyJ/+6Q4TG0Z72XwnYxrv5Enn2VZBjxxPnW/Qd0ffZPvYSHZ99\n0Nj4PbTpaJlmr7cFhexPV22nI/7MMwedJPNm5Gp5sWt1HFWHRRwj+2IRcy+xLXTNgSCRwomUjOlr\nVWdTGV4BDyTSAGTnoozg7PljNLd1ve2cg1MOnemSyjBmttO+0yeGmEiRTp/rRFXTizMf45F8tEBP\nFw7dX9CWXb8xHwY4u4u2FMfwtrO/5yTOb+jgrX9ROYO1//l8r6END/+S/lB8EsDu10sajQSR8FID\n6E2rTECV6+wIhzCVuKs6IDkAC1tjO+a7J2wz/v+2cxWzWMaGdIRynUNJbtmL40gHz5Y9O03cL7Aj\n5P8vftM4sAwBYRtysKhsoe1dP+lk8sBafp5XPoqJsi83Yb5s1T10Y/F3biIl074i9VQfN3h//Hv/\nf67bnDvyw0BcnzPGiMRQykHWzvHPthVOUHD8k+Ukyijez/Ws/RXExs7qJoKc9VGNp+YmQgyRIHEf\n43Gp9ifHMvk4Lh9n0sbOFn1OiGzba2HjvevbMvufGFltTiaaQvWgPrd9QN/6L1GHTt3m0Oa6fWLj\naB/7rxSiDDLioBpZ9qXJtOOJ8i0mAX0T6We0SSdDRP1Wfolvp36dSP+8IdHGdaW1/Ot0052mDTnt\nUidbXqbni3hYxNIijo7W/YhtoWsOBIkUNpxRJlJWraPVgWlVWVOqosZYp7n+Kqdv5tZdavhhhJN4\n1fW05VZzh+yqz9GWh/93/flqj08PPUzfNL99btdu2n2rmeas1z75j1/FnTWmlkhpuqvGd9S859Rr\nsBNZn9o8fHiQ0M/wnaCTwQ4pAWdetfMxs85LplWJrexESlMml7O40gbHhjz/LTT36jM2M+1ff5jc\nshfHcdpS5YiV5cMDBw8w/Dsuc/5eOk8jxA5OXlARGnhykLNZHCcxt3wUE2Vf3M/rBPYCnTy9x5Sn\ncGyTZNqXcCjTiRQuT/P72h1d872c4joWRICSSqQEcGbJSRvI6ud61v4KImOnnckZuznQkIgQY9+G\nW2+xj+5849YNdMSuffJnurDrH8pje4mZauzl40/a2Nmiz8kkantBAjbeu75tKXwLEeTGxgR7vJ71\nX9L//uEC/XIb37DUay68UF+7xaHNdXtEx9E+9l8pRBuQsYpeQ+OFjDXYsuxLk2nHvWt/U4gzU7ap\nnbK96rrKTKQUawLlTwLQjwtWsxBFu1hiW+iaA0EixTbmiIQB1B1iQ1MihR143aHLaVK2A5GZbbUt\nP9rgJ1cajLGx/qJ3v8T04oCqx3BCSCcvpM/RlidfTyRTqufOK6cz/Zx31h21gsxp00PhXZrf+owZ\nOGKZ3TiVbQUkH70Qgzd3HpXjqGyH7wAlny3sW0ZfODMhyesPklv2wmFw2lLdmU8+47zUd5NyEinZ\nd5JkX+PXf375TJZ9KZvY+3TlFNryzE+k5NmXmBLOzonsw629pNcYWNq7uXHkei/5way4uynHPUNu\nP9er9qeJjZ02EeIlUmIJFo8qERKQXfskJ5HC5zVpY2eLPqeRtO2FCNp47/q2pfAtchIK7Pf2rP+y\n/XlY7vouPm2uW5IaRyu76k3/lUL6ETU1r8GW7bvm2vFE+RaTR3UzVim4CLKHiDmqZGmE8wdok01e\niraV6sPFDagyySYWk11iW+iaA0EixTbmiIQBdE6kOMYns3u8n9i2CpvtVWpwKBrrL/ZojV3PRDlY\na56iE8UaJx/RO7vuM3fIUovOeYmU0HPi0btf3uKz8i0BqgGF3zzA59owZbpAnls1tXn0tHV2xKBs\n31Kjp79VC3LJjOvi+cP0uE3GsdSAt+2wswJ3dLVrXnvEcRzGiZtIqSeI3OtPkyr7WMcectpjq+5z\nXbV9nGYARP/iBLTSgcxOpIjApVb/bcpnkuzLo3UiRdLQthfP0yv2jmilZTPP0CvyUc7oWy/4mfsu\nz6oPD9n22jkqMgBRct661aaf61H708TGztjnWYkUsYDs9Wvo54f0XTj9Zp5d9LRZuJ0Xaq8SJnKG\nizv22gTPRI2d7fqcNCnbq5Oy8f72baPyLUTZOT6oHJuF39un/stJpPDd7Mgd7hotr9uSGkc1Peu/\nUti16JSd//vrZn06sSg73xQIkmtfZnNL2o4n1reYANzEl6jzEM7N/LbJ0Vjf7uEk8nRf4i57sZS2\n0DUHgkSKbcwRCQPonEjxgpz6flIGl2mMiqb6q56zzlwHRdyFcx8FkkiHy12otjpeyJn03+BzA+1c\neLtxYOEF9nKnG1cOaI7zOCzaOjsx5B023o8aoF+rHn2RqgVrQfhuEmd1+4B0WqQDFrr+JlJlH2tL\nLZx2myFvyMwPlcCCdv5stcxESvjRMGYI5dNL+/IYYSIlnORUWr6eHn8tHtQx9k5m9gyQ4eMGmMqx\n4RmSrZCL2TUFVS3a+VjanzpsbOwcKJESQ659YpIY4q14drHZs/9BO8Wb8lJrrGj6OXYOo8/xaba9\nbjbeh75tVL7FJ1VAbGchyGSEViih4DKW/ksmUmRQJe90R21IJAJaXHd6HE0wpv6rC9U1dhknm/r0\nLnY8Ab5FW4KzgQZp17kouxcLbQeTer6P2fj2Pp/82LVAPq3RmBwZjS10zYEgkcKNOSMQ6ZxI8Yxi\nXImUyjHKXVBWTO/9i4fpRPCmlEykeE6jdTJ9J89PojQ9/sP4d9Q+onf+YwNtKaZWawfzMTpezKap\naH/Nw2BYzk7dVqqpyGLKZZtVtf0s7uUztM8uglyf1bI0CBt3ykuWY7MTV5Iq+0Gddv9ukr7z8kK5\niJf+bWaw3AXX8Q8oK5EinJugIzdo+Sh6aV8eo0qksJOsvqumk8ugrmlmh3839xKdfGG7WC8oJ1E6\nGL6dpafFNyBmU1bjYpjo2OowvvYXHUdGkkgJHc8fM+tKJ1L6OnYOoc8JkbC9zjbei75tdL5FLXCq\nqWkMHlP/JRMpjq0I20qNj62vu2kcjTG+/qsTwbgmn3Sf3sGOJ8G3aMvYEikaMavKbx9+m2h8vD5E\nrG+PEXpaI8KIbKFrDgSJFG7Mo0ykeEZU30/K4PKNsan+2jtGYoG96HPScqHanETKIv3hza3WgctP\noqhfpp735jt23nlOdiLFX+TpcrVfbwDPC0T8LC47BDrA+9Ab5JcS0aE75SXLsaFjtaTKPtYmq+Mn\n76T5d5OcZ50/9JzI4eNMcSwWgnuBtrcaqJquc8Dy6a19eYwqkWL3690lyXRI/bu5zloDvuMwCpz1\nu3TgM0ASRSOdxKR9Zi5mN8b2Fx1HYgmTgd56I8dUORvkT3Th0FPVYz96QdqFfwkncjz6O3YO2udE\niNleZxvvS982Kt/CtBnnkR0VkGzdT/tnH8w63tj6r+jj75mJFE2r6+5om2P2H1pjy7WLXTf16W3t\neEJ8i7aMNZEi+l7nmPLmj1KnJIqmbSJFxjEp32x0ttA1B4JECjfmQRIpIiPeLZEitvUz3ENcIyU6\nPbn21hyDeLQnOR1YJEzkdtXxKmeSHbq2SZRquvPfqnP/vfif981JH+l4Soe0z2ukVAOz62hwB8F2\n8Qfv/8pOshIpzsCtfsv/877Y1kYZrAWR5SWDUP/6c04qVfbiO7k/LoeGztdxDO3/7Eyx47CEg7kd\nhDOP2egYDVY+/bUvjxElUqqp0F0SKdIZ0K45/8/74j5iRI62mE2j1SaJUs2S8667Zm+5/Vz4uONs\nf9GxM/J2m2r71GMxsRsV4tEe51XLdapkR+o4fR47B+yTs21PMYCN96dvS41vIQZrc45vmry2cfZf\nImAL2lDLhEdB4robx9EwvfMfCuIJj+h45tDVvlracW/a3wQi+j23HYTqjpMUul503XVNomhiiRRx\nDMc2mpJvhhHaQtccCBIp3JgzEilVx6I6Q36mVi7KpNQtkcJT/tL7HjSREn3DgFwL5fr76GDx2sWP\n6LdPfsU4UuyAScdNOpTCIeRtncVmvVcvFtspx9MspJeFOffqN/zYEZ+H/79GPHbU4JAOl9QgIezC\n2pwYdOxiSsomxDOM5eArOxppJ+IuW3DQ0vBvxcJrHODxefj/LyXWOVEyHaScgm0HgMagND1Ay0ej\n6ovSpZw8M+iIhde4HfN5+P8PDzHg2eOLuwbOYnAh+yrJcYy6l0/P7UuSSKQ0JyQT9uXYMD9PLO/u\nJBxS89tqYT6uRz/ZnkiUdkb2K0qpxQUD7a+yGXX+HJw6U4PZbnL7uRDjbH+K2NhJ4q1zoYXWRYKk\nPnaKhMlVN9DTu95Un8gZm2bGiP6xPb4YAy+9Tgu3fs79LETPx878Pqfet+XbXgsbr9Gnvi09vtX7\nry6+BV+n3E5ce4je9F98PdKGqn63Xj7trzsvweAz5v4rgRPXhN4uygFroP1179PTduzSp/Y3gcgE\nsk2MyPYhknfSh0m2+ZAt+GQkUtQxeIkC55HLaBJktLbQNQeCRAo35pxC9+5oWN15D91kjK/qBIWh\nNSZSNGJBSanlX6eb7jTGNWgiJfr6Y/H2gJqEM6eITff1F76rVL3xp7pLF1f4OW//jpr8LHVXTazx\nEn00aRSkBolIB8RTX7nepexApkg+z5vo+PwsrvysF1l92bF7kk4vd5Lq87DD0TRAe9MWrVJBnCqq\nwtlwt2EHZPR3lJRjYhOtvvw6jw9wVb+TSoh0K5/+25dgVImUlA0rhd9eoGFnlO/mys/YWedkWqru\nOsL1FDhnK99JUZ9V7c+7i+WocpQKcvs5j/G2P0V07FSIhIYrOV6poguNnWIR2ZrkW+zsGieB7aJv\nxdNMwtiZ2+eE+rZM22tj4z696tvS41uw/8ptc4nt4n2XZsz9lybhF8lzb1s+oevOG0ddxt5/JYnE\nHoVknQ7ouzo0+WmCXrW/yUQmnH1VM/NkUiwmbjdxP7Mi8WhPLJbWSs2CGbEtdM2BIJHCjTlqDC7u\nq5j0s5QLdOTs4YBzKQwtK5GicJ7T1Aa+nfadPpH9nFlz/Yk7YLW38OjXLi7QwhpzJ03r+jW0sPAr\n9auKWCJFs3j2EB18+FYzi+Uq+satD9PBQxzkyUVp4womUvhunOfQlYmZ1HPePO3ae2Rp5KQGiUQH\ndPkM7Z+t6r/I8M++ZF4rKLlEJw8+V71aT2nZzDaai77qMTZISweoD8+ZqkD06EK1+Bq3L7lA3cCJ\nFI27CF6x3sieY4nFqSJOoNOpj/oZZ79sYnUes68Wjkvr8pkU+zKMLJGiWaSPT79E2+VMwqbyiwz8\njvPNzuooHEXxaGpUbEvR9pdrn4rsfo7pQ/tLjZ2KS7+iI9GxryQ6dqrfvvYkv65Y6wZ6+skF88pi\ngXI+T+x62F1f7OFddMJbJNZhYsbOnD4n1rdl2F4bG3foW9+W7n+i/Vdmm1s8f4zm7KKNSo19v2Lc\n/Rej/ec925I2FCuf/OtuM44yfei/mvB9SlVvG5+j/cUrm5lh+K5MbjlOmG/RY5ptXCQ+ohpSIkXj\nt9eQv+8welvomgO5whMp00Vz/Ynnnpf0UZdB8O+eSRrePGCnQ7t3Bq84/IytZEirXU8z7p0jiQ6a\ne7zq/lIB+xoAdgJC08Td4HIp3trTR/rR/jB2XpGgb2sA/VcT8B8GAO0PMEtgC11zIEikTBFZ9Wen\nKIecq2lCOL4jn5oMAABgqsHYCQAAAEwlXXMgSKRMEXn1Vy2Ol3wTz8TDz31Xa7QAAAAA3cDYCQAA\nAEwjXXMgSKRMEdn1x89ET8wU5Q7w1GRnwT4AAACgIxg7AQAAgKmjaw4EiZQpAvUHAAAAAAAAAADk\n0TWGRiJlikD9AQAAAAAAAAAAeXSNoZFImSJQfwAAAAAAAAAAQB5dY2gkUqYI1B8AAAAAAAAAAJBH\n1xg6mEiBIAiCIAiCIAiCIAi6EtQWJFIgCIIgCIIgCIIgCLpi1RYnkQIAAAAAAAAAAAAA4iCRAgAA\nAAAAAAAAAJAJEikAAAAAAAAAAAAAmSCRAgAAAAAAAAAAAJAJEikAAAAAAAAAAAAAmSCRAgAAAAAA\nAAAAAJAJEikAAAAAAAAAAAAAmSCRAgAAAAAAAAAAAJAJEikAAAAAAAAAAAAAmSCRAgAAAAAAAAAA\nAJAF0f8PN6pNKSwUjOQAAAAASUVORK5CYII=\n", "text": [ "" ], "metadata": {} } ], "input": [ "# The goal is to build a table which looks like the following\n", "display.Image('returns.png')" ], "language": "python", "prompt_number": 2 }, { "cell_type": "heading", "metadata": {}, "level": 3, "source": [ "First, Create some fake fund data" ] }, { "cell_type": "code", "metadata": {}, "outputs": [ { "output_type": "pyout", "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Portfolio_1Portfolio_2Portfolio_3Fund
2014-01-0.048752-0.004033 0.005801-0.046984
2014-02-0.013185-0.001041 0.040603 0.026377
2014-03 0.006299 0.015496 0.006989 0.028784
2014-04 0.017744 0.007020-0.001317 0.023446
2014-05 0.019605-0.056622-0.019955-0.056972
2014-06 0.043809-0.007819-0.020782 0.015208
2014-07 0.012296-0.001631-0.005637 0.005028
2014-08-0.020952 0.026630 0.014684 0.020362
2014-09 0.000942-0.038948 0.002801-0.035205
2014-10-0.022562-0.013278-0.026065-0.061905
2014-11-0.021469-0.003409 0.009949-0.014928
2014-12 NaN NaN NaN NaN
\n", "
" ], "text": [ " Portfolio_1 Portfolio_2 Portfolio_3 Fund\n", "2014-01 -0.048752 -0.004033 0.005801 -0.046984\n", "2014-02 -0.013185 -0.001041 0.040603 0.026377\n", "2014-03 0.006299 0.015496 0.006989 0.028784\n", "2014-04 0.017744 0.007020 -0.001317 0.023446\n", "2014-05 0.019605 -0.056622 -0.019955 -0.056972\n", "2014-06 0.043809 -0.007819 -0.020782 0.015208\n", "2014-07 0.012296 -0.001631 -0.005637 0.005028\n", "2014-08 -0.020952 0.026630 0.014684 0.020362\n", "2014-09 0.000942 -0.038948 0.002801 -0.035205\n", "2014-10 -0.022562 -0.013278 -0.026065 -0.061905\n", "2014-11 -0.021469 -0.003409 0.009949 -0.014928\n", "2014-12 NaN NaN NaN NaN" ], "metadata": {} } ], "input": [ "# create fake returns for year\n", "index = pd.PeriodIndex(start='1/2014', end='12/2014', freq='M')\n", "returns = pd.DataFrame(.025 * np.random.randn(12, 3), index=index, columns=['Portfolio_{0}'.format(i) for i in range(1, 4)])\n", "# remove last month to see how table handles no data\n", "returns.iloc[-1, :] = np.nan\n", "returns['Fund'] = returns.sum(axis=1)\n", "returns" ], "language": "python", "prompt_number": 3 }, { "cell_type": "heading", "metadata": {}, "level": 3, "source": [ "Manipulate the data to look like the view" ] }, { "cell_type": "code", "metadata": {}, "outputs": [ { "output_type": "pyout", "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2014 Returns
JanFebMarAprMayJunJulAugSepOctNovDecYTD
Portfolio
Portfolio_1-0.048752-0.013185 0.006299 0.017744 0.019605 0.043809 0.012296-0.020952 0.000942-0.022562-0.021469NaN-0.029194
Portfolio_2-0.004033-0.001041 0.015496 0.007020-0.056622-0.007819-0.001631 0.026630-0.038948-0.013278-0.003409NaN-0.077535
Portfolio_3 0.005801 0.040603 0.006989-0.001317-0.019955-0.020782-0.005637 0.014684 0.002801-0.026065 0.009949NaN 0.005297
Fund-0.046984 0.026377 0.028784 0.023446-0.056972 0.015208 0.005028 0.020362-0.035205-0.061905-0.014928NaN-0.098515
\n", "
" ], "text": [ " 2014 Returns \\\n", " Jan Feb Mar Apr May Jun \n", "Portfolio \n", "Portfolio_1 -0.048752 -0.013185 0.006299 0.017744 0.019605 0.043809 \n", "Portfolio_2 -0.004033 -0.001041 0.015496 0.007020 -0.056622 -0.007819 \n", "Portfolio_3 0.005801 0.040603 0.006989 -0.001317 -0.019955 -0.020782 \n", "Fund -0.046984 0.026377 0.028784 0.023446 -0.056972 0.015208 \n", "\n", " \n", " Jul Aug Sep Oct Nov Dec YTD \n", "Portfolio \n", "Portfolio_1 0.012296 -0.020952 0.000942 -0.022562 -0.021469 NaN -0.029194 \n", "Portfolio_2 -0.001631 0.026630 -0.038948 -0.013278 -0.003409 NaN -0.077535 \n", "Portfolio_3 -0.005637 0.014684 0.002801 -0.026065 0.009949 NaN 0.005297 \n", "Fund 0.005028 0.020362 -0.035205 -0.061905 -0.014928 NaN -0.098515 " ], "metadata": {} } ], "input": [ "# Create the View for the pdf\n", "view = returns.copy()\n", "view.index = [i.strftime('%b') for i in view.index]\n", "# YTD Returns\n", "ytd = returns_cumulative(view)\n", "ytd.name = 'YTD'\n", "\n", "# transpose so dates are the columns\n", "view = view.append(ytd.to_frame().T)\n", "view = view.T\n", "view.index.name = 'Portfolio'\n", "# make a multi-level header\n", "view.columns = pd.MultiIndex.from_arrays([ ['2014 Returns']*len(view.columns), view.columns])\n", "view" ], "language": "python", "prompt_number": 4 }, { "cell_type": "heading", "metadata": {}, "level": 3, "source": [ "Create a pdf builder, create a template, and build the 2 tables. (1 table is fixed width\n", " and height, 1 table expands to fill frame)" ] }, { "cell_type": "code", "metadata": {}, "outputs": [], "input": [ "# Setup the builder and any templates\n", "FONT_SZ = 8\n", "FONT = 'Helvetica'\n", "FONT_BOLD = 'Helvetica-Bold'\n", "FONT_COLOR = colors.HexColor('#3b595f')\n", "GRID_COLOR = colors.HexColor('#a8c2cb')\n", "RPAD = LPAD = 3\n", "TPAD = BPAD = 4\n", "LEADING = FONT_SZ\n", "ROW_COLORS = [colors.HexColor('#eff4f6'), colors.white]\n", "\n", "pdf_path = 'returns_example.pdf'\n", "pdf = rlab.PdfBuilder(pdf_path, showBoundary=0)\n", "t = rlab.GridTemplate('page1', 100, 100)\n", "\n", "t.define_frames({'tbl': t[5:95, 5:95]}) # whole page\n", "t.register(pdf)\n", "\n", "# helper method to place box around a region\n", "def add_box(rng):\n", " rng.apply_style('BOX', .7, GRID_COLOR)\n", "\n", " \n", "tf = rlab.TableFormatter(view)\n", "\n", "\n", "# Styles for all cells\n", "# Use direct method\n", "tf.all.apply_styles({\n", " 'FONTSIZE': FONT_SZ, 'FONTNAME': FONT, 'TEXTCOLOR': FONT_COLOR,\n", " 'VALIGN': 'MIDDLE', 'ALIGN': 'RIGHT',\n", " 'LEADING': LEADING, \n", " 'RIGHTPADDING': RPAD, \"BOTTOMPADDING\": BPAD, 'TOPPADDING': TPAD, 'LEFTPADDING': LPAD,\n", "})\n", "\n", "\n", "# \n", "# Can use methods which means you do not have to remember style names and arguments\n", "# \n", "box_args = {'weight': .7, 'color': GRID_COLOR}\n", "regions = [tf.all, tf.cells, tf.header, tf.index, tf.all.iloc[-1:, :], tf.header.iloc[:1, :]]\n", "[region.set_box(**box_args) for region in regions]\n", "\n", "# cells Style\n", "tf.cells.set_row_backgrounds(ROW_COLORS)\n", "\n", "\n", "\n", "# make the last column bold\n", "tf.all.iloc[-1:, :].set_font(FONT_BOLD)\n", "# make the last row bold\n", "tf.all.iloc[:, -1:].set_font(FONT_BOLD)\n", "# format as percent and use red for negatives\n", "tf.cells.percent_format()\n", "\n", "# Header\n", "tf.header.set_fontname(FONT_BOLD)\n", "tf.header.set_align_center()\n", "tf.header.detect_colspans()\n", "\n", "# Index\n", "tf.index.set_font(FONT_BOLD)\n", "tf.index.set_row_backgrounds(ROW_COLORS)\n", "\n", "# Index-Header\n", "tf.index_header.set_fontname(FONT_BOLD)\n", "\n", "# don't allow table to expand or shrink\n", "pdf.build_page('page1', {'tbl': tf.build(expand=None, shrink=None)})\n", "# allow table to expand both width and height wise\n", "pdf.build_page('page1', {'tbl': tf.build(expand='wh', shrink=None)})\n", "pdf.save()" ], "language": "python", "prompt_number": 13 }, { "cell_type": "heading", "metadata": {}, "level": 3, "source": [ "Open the directory to find the returns_example.pdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Click ME](https://github.com/bpsmith/tia/raw/master/examples/returns_example.pdf)." ] }, { "cell_type": "code", "metadata": {}, "outputs": [], "input": [ "" ], "language": "python" } ] } ], "cells": [], "metadata": { "name": "", "signature": "sha256:08d600038b0f6d528771d6b8eb83b50fdc0e17b5546ab90df2ee161b02da6f14" }, "nbformat": 3, "nbformat_minor": 0 }