{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Polarizer optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview\n", "\n", "An interesting feature of Mitsuba is its ability to account for the polarization state of light. This becomes even more powerful when combined with differentiable rendering. \n", "\n", "This tutorial demonstrates how those two concepts can be used together to perform a simple optimization. The setup is the following: we place two linear polarization filters in front of the camera. Initially, these are rotated in such a way that all the light passes through them. The optimization process will attempt to rotate one of the filter to minimize the overall brightness of the rendered image. Indeed, it is known that rotating this filter by 90 degrees will lead to complete cancelation of the polarization state, resulting in a darker image.\n", "\n", "More information about polarization can be found [here][1].\n", "\n", "
\n", "\n", "🚀 **You will learn how to:**\n", " \n", "\n", " \n", "
\n", "\n", "[1]: https://mitsuba.readthedocs.io/en/latest/src/key_topics/polarization.html" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Reference image\n", "\n", "As usual, let's import the necessary libraries. For the sake of this tutorial, we already provide an XML file for the scene containing both linear polarization filter (e.g. using the [polarizer][1] BSDF).\n", "\n", "[1]: https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_bsdfs.html#linear-polarizer-material-polarizer" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-09-17T09:13:32.691239Z", "start_time": "2021-09-17T09:13:32.226341Z" } }, "outputs": [], "source": [ "import drjit as dr \n", "import mitsuba as mi\n", "\n", "mi.set_variant('llvm_ad_rgb_polarized')\n", "\n", "scene = mi.load_file('../scenes/polarizers.xml')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can then perform the rendering of our initial scene. As expected, the two filters are aligned and let linearly polarized light through." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-09-17T09:13:33.024683Z", "start_time": "2021-09-17T09:13:32.803338Z" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Bitmap[\n", " pixel_format = rgb,\n", " component_format = uint8,\n", " size = [128, 128],\n", " srgb_gamma = 1,\n", " struct = Struct<3>[\n", " uint8 R; // @0, normalized, gamma, premultiplied alpha\n", " uint8 G; // @1, normalized, gamma, premultiplied alpha\n", " uint8 B; // @2, normalized, gamma, premultiplied alpha\n", " ],\n", " data = [ 48 KiB of image data ]\n", "]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image_init = mi.render(scene, spp=8)\n", "\n", "mi.util.convert_to_bitmap(image_init)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup optimization\n", "\n", "As in the previous tutorial on [pose estimation][1], we setup the optimization using a latent variable to control the rotation of the filter. This rotation angle will be used to construct a transformation matrix that will be applied to all vertices of the filter's mesh. For convenience, we define a function that does all of this, which we will also call later during the optimization loop.\n", "\n", "It is important to apply the rotation once before starting the optimization loop as this will *bind* the optimizer variable to the scene parameter. Otherwise during backpropagation the gradients wouldn't be propagate all the way to the optimizer's variable.\n", "\n", "[1]: https://mitsuba.readthedocs.io/en/latest/src/inverse_rendering/reparam_optimization.html" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-09-17T09:13:33.092925Z", "start_time": "2021-09-17T09:13:33.086230Z" } }, "outputs": [], "source": [ "params = mi.traverse(scene)\n", "\n", "# Key of the scene parameter to be optimized\n", "key = 'filter2.vertex_positions'\n", "\n", "# Get the initial vertex positions\n", "v_positions_init = dr.unravel(mi.Vector3f, params[key])\n", "\n", "# Instantiate an Adam optimizer and define a latent variable `rotation`\n", "opt = mi.ad.Adam(lr=1.0)\n", "opt['rotation'] = mi.Float(0.0)\n", "\n", "# Apply optimized rotation value to mesh vertices\n", "def apply_rotation():\n", " transform = mi.Transform4f().rotate([0, 0, 1], opt['rotation'])\n", " positions_new = transform @ v_positions_init\n", " params[key] = dr.ravel(positions_new)\n", " params.update()\n", "\n", "# Perform the first rotation to enable derivative tracking on the scene parameters\n", "apply_rotation()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimization\n", "\n", "Everything is now ready to run the optimization loop. \n", "\n", "In the following cell we define the hyper parameters controlling our optimization loop, such as the number of iterations:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "iteration_count = 100" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "nbsphinx": "hidden", "tags": [] }, "outputs": [], "source": [ "# IGNORE THIS: When running under pytest, adjust parameters to reduce computation time\n", "import os\n", "if 'PYTEST_CURRENT_TEST' in os.environ:\n", " iteration_count = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example the loss function doesn't compare against a reference as the goal is simply to make the image darker. For this we simply use the sum of the pixel values in the rendered image." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-09-17T09:13:58.916031Z", "start_time": "2021-09-17T09:13:33.094709Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration: 99, rot: 90.0260, loss: 0.0816507\n", "Optimization complete!\n" ] } ], "source": [ "angles = []\n", "losses = []\n", "\n", "for it in range(iteration_count):\n", " # Perform the differentiable rendering simulation\n", " image = mi.render(scene, params=params, seed=it, spp=1)\n", "\n", " # Objective: no comparison against a reference, the goal is simply to make the image darker\n", " ob_val = dr.mean(image)\n", "\n", " # Backpropagate loss to input parameters\n", " dr.backward(ob_val)\n", "\n", " # Optimizer: take a gradient step\n", " opt.step()\n", "\n", " # Apply rotation and update the scene parameters\n", " apply_rotation()\n", " \n", " print(f\"Iteration: {it:2}, rot: {opt['rotation'][0]:.4f}, loss: {ob_val}\", end='\\r')\n", " angles.append(opt['rotation'][0])\n", " losses.append(ob_val.array[0])\n", "\n", "print() \n", "print('Optimization complete!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Results\n", "\n", "We can now look at the optimized scene, which appears much darker as expected." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Bitmap[\n", " pixel_format = rgb,\n", " component_format = uint8,\n", " size = [128, 128],\n", " srgb_gamma = 1,\n", " struct = Struct<3>[\n", " uint8 R; // @0, normalized, gamma, premultiplied alpha\n", " uint8 G; // @1, normalized, gamma, premultiplied alpha\n", " uint8 B; // @2, normalized, gamma, premultiplied alpha\n", " ],\n", " data = [ 48 KiB of image data ]\n", "]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image_final = mi.render(scene, seed=0, spp=8)\n", "\n", "mi.util.convert_to_bitmap(image_final)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the filter rotation and image loss accross the optimization loop." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "nbsphinx-thumbnail": {}, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+0AAAF2CAYAAAAbeXm6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEHUlEQVR4nOzdd3gU5d7G8e9uet2QTiAk9F4DhACKBY2IBUEFRCkiiAIKUc8RRbEdORYUC0WwIwgHBQQLKoioEHrvndCSACGd1J33D477nkjQgIHZJPfnuuaSzD47e88geea3M/M8FsMwDERERERERETE6VjNDiAiIiIiIiIipVPRLiIiIiIiIuKkVLSLiIiIiIiIOCkV7SIiIiIiIiJOSkW7iIiIiIiIiJNS0S4iIiIiIiLipFS0i4iIiIiIiDgpFe0iIiIiIiIiTkpFu4iIiIiIiIiTUtEu4oQOHTqExWLh448/dqx77rnnsFgs5oWqAH7++WcsFgs///yz2VFERETkD0o7vxGRv6aiXcQEH3/8MRaLpdTlySefLPN2Xn75ZRYsWHD5gl4GK1eu5LnnniM9Pf2StzF58mR1+CIiUqn8fm6wbt06s6OIiJNxNTuASFX2wgsvULt27RLrmjVrRlRUFGfPnsXNze1P3//yyy9z55130qNHj8uYsnytXLmS559/noEDBxIQEHBJ25g8eTLBwcEMHDiwxPqrr76as2fP4u7u/veDioiIiIg4ARXtIibq1q0bbdu2LfU1T0/PK5zmnLy8PNzd3bFay3YjTlFREXa73SkKZavVatpxExERERG5HHR7vIgTKsszXxaLhZycHD755BPHrfX/e+X52LFj3H///YSFheHh4UHTpk358MMPS2zj92fAZ8+ezdixY6lRowbe3t5kZmb+aa7XX3+diRMnUrduXTw8PNixYwcAP/30E1dddRU+Pj4EBARw++23s3PnTsf7n3vuOZ544gkAateu7ch96NAhAD766COuu+46QkND8fDwoEmTJkyZMqVEhujoaLZv387y5csd77/mmmtK7M8fn2mfO3cuMTExeHl5ERwczL333suxY8dKtBk4cCC+vr4cO3aMHj164OvrS0hICI8//jjFxcUX/HsQERG5XH7vm5KSkrjlllvw9fWlRo0aTJo0CYCtW7dy3XXX4ePjQ1RUFLNmzSrx/rS0NB5//HGa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dxERkfJ2oSnfSuubunTpYjRt2vS89VFRUUb37t0dP+fl5RmPPfaYUb16dcPLy8vo1KmTkZiYaHTp0uW8qVMPHDhgdO/e3fDy8jJCQkKMxx57zPjyyy8NwFi1alWJths3bjR69uxpBAUFGR4eHkZUVJRx9913G0uXLv3TfSzt/MYw/vr8IT8/33jiiSeMli1bGn5+foaPj4/RsmVLY/LkySXy33///UbdunUNT09PIzAw0Lj22muNJUuW/GkmkYrAYhh/uGdGRERERESqvIkTJzJ69GiOHj1KjRo1zI4jUmWpaBcRERERqeLOnj1bYnaYvLw8WrduTXFxMXv27DExmYjomXYRERERkSquZ8+e1KpVi1atWpGRkcFnn33Grl27mDlzptnRRKo8Fe0iIiIiIlVcfHw877//PjNnzqS4uJgmTZowe/ZsevfubXY0kSrP1CnffvnlF2699VYiIiKwWCwsWLCgxOuGYfDss89SvXp1vLy86Nq1K3v37i3RJi0tjX79+uHv709AQACDBw8udQoKERER+fsmTZpEdHQ0np6exMbGsmbNmgu23b59O7169SI6OhqLxcLEiRPPa/NX5wJQtvMBEfl7Ro0axbZt28jOzubs2bOsX79eBbuIkzC1aM/JyaFly5ZMmjSp1NdfffVV3n77baZOncrq1avx8fEhPj6evLw8R5t+/fqxfft2fvzxR77++mt++eUXhg4deqV2QUREpMqYM2cOCQkJjBs3jg0bNtCyZUvi4+NJTU0ttX1ubi516tTh3//+N+Hh4aW2+atzASjb+YCIiEhl5TQD0VksFubPn0+PHj2Ac9+qR0RE8Nhjj/H4448DkJGRQVhYGB9//DF9+vRh586dNGnShLVr19K2bVsAFi9ezM0338zRo0eJiIgwa3dEREQqndjYWNq1a8e7774LgN1uJzIykpEjR/Lkk0/+6Xujo6MZNWoUo0aNumCbP54LQNnOB0RERCozp32m/eDBgyQnJ9O1a1fHOpvNRmxsLImJifTp04fExEQCAgIcBTtA165dsVqtrF69mjvuuKPUbefn55Ofn+/42W63k5aWRlBQEBaL5fLtlIiISBkYhkFWVhYRERFYrabeFOdQUFDA+vXrGTNmjGOd1Wqla9euJCYmXrbPLcv5QGnU14uIiLMra3/vtEV7cnIyAGFhYSXWh4WFOV5LTk4mNDS0xOuurq4EBgY62pRm/PjxPP/88+WcWEREpHwdOXKEmjVrmh0DgFOnTlFcXFxqv7xr167L9rllOR8ojfp6ERGpKP6qv3faov1yGjNmDAkJCY6fMzIyqFWrFkeOHMHf39/EZCIiIpCZmUlkZCR+fn5mR6mw1NeLiIizK2t/77RF++8D1qSkpFC9enXH+pSUFFq1auVo88fBb4qKikhLS7vggDcAHh4eeHh4nLfe399fHbmIiDgNZ7qNOzg4GBcXF1JSUkqsT0lJ+dM+9+8qy/lAadTXi4hIRfFX/b1zPChXitq1axMeHs7SpUsd6zIzM1m9ejVxcXEAxMXFkZ6ezvr16x1tfvrpJ+x2O7GxsVc8s4iISGXl7u5OTExMiX7ZbrezdOlSR798OZTlfEBERKQyM/VKe3Z2Nvv27XP8fPDgQTZt2kRgYCC1atVi1KhRvPTSS9SvX5/atWvzzDPPEBER4RhVtnHjxtx0000MGTKEqVOnUlhYyIgRI+jTp49GjhcRESlnCQkJDBgwgLZt29K+fXsmTpxITk4OgwYNAqB///7UqFGD8ePHA+cGr9uxY4fjz8eOHWPTpk34+vpSr1494K/PBSwWy1+eD4iIiFRmphbt69at49prr3X8/PuzZwMGDODjjz/mH//4Bzk5OQwdOpT09HQ6d+7M4sWL8fT0dLxn5syZjBgxguuvvx6r1UqvXr14++23r/i+iIiIVHa9e/fm5MmTPPvssyQnJ9OqVSsWL17sGCQuKSmpxOi3x48fp3Xr1o6fX3/9dV5//XW6dOnCzz//DPz1uQBQpvMBERGRyspp5mk3U2ZmJjabjYyMDD3nJiIiplO/VP50TEVExNmUtW9y2mfaRURERERERKo6Fe0iIiIiIiIiTkpFu4iIiIiIiIiTUtEuIiIiIiIi4qRUtIuIiIiIiIg4KRXtIiIiIiIiIk5KRbuIiIiIiIiIk1LRLiIiIiIiIuKkVLSLiIiIiIiIOCkV7SIiIiIiIiJOSkW7iIiIiIiIiJNS0S4iIiIiIiLipFS0i4iIiIiIiDgpFe0iIiIiIiIiTkpFu4iIiIiIiIiTUtEuIiIiIiIi4qRUtIuIiIiIiIg4KRXtIiIiIiIiIk5KRbuIiIiIiIiIk1LRLiIiIiIiIuKkVLSLiIiIiIiIOCkV7SIiIlLlHTiZzWerDrM3JcvsKCIiIiW4mh1ARERESiq2G2ZHqDIyzhby9tK9fLLyEEX/Pe5X1Q/m/s616VI/BKvVYnJCERGp6lS0i4iIlDO73SAzr5DTOQWcySkgLaeAjLOFJZbMs4Vk5xeRmVdEVl4ROflF5BYUkZNfTE62rvZeLve9v5pOTSKJrRNEUloub/ywmzO5hQA0CvdjT0oWv+49xa97T1EnxIfWkdXwcLPi6eqCp5uVED8PmkbYaBLhj6+HTqNEROTyU28jIiJSRoXFdpIz8kjJzCM5M4+UzHxSM/NIzcrnVHY+J7PyOZVdQFpOPrpY7pw2Hklnc2oBk3/e71hXP9SXsbc0oUuDEI6k5fLJykPMWXuEAydzOHAy54Lbqh3sQ6vIAHq1qUnHukG6Ki8iIpeFxTCMKn9akZmZic1mIyMjA39/f7PjiIiISQqK7BxLP8uRtFyS0nI5ciaXo2fOcjz93JKalc/F9Jp+Hq5U83Gnmo87AV5u2LzcCPA+919/Tzd8PV3x83TFz9MNXw8XfDxc8XF3pTgvh9o1QtUvlaPf+/qPlm1n28lCVh88TXGxwbBr6nJP+1q4upQc5ic7v4jF25I5lZ1PfqGdvKJi8gqLOZJ2lu3HMziRkVeife1gH/rF1uLOmJoEeLtfyV0TEZEKqqx1qIp2VLSLiFQlhmGQnJnH/tQc9qVmcfBUDgdP53LoVA7H0s/+5fPk7i5Wwm2ehPl7EOrvSbi/JyF+HoT4ehDs50GwrzvBvh5U83bH3fXSxntVv1T+yvuYns7OZ/vxTJbsTGHehmNk5xcB4O5qpVXNAFpG2mgZGUDLmgHUrOaFxaKr8CIiUlJZ+ybdHi8iIpXWyax8didnsSs5k93JWexJyWJfajY5BcUXfI+XmwuRgV5EVvMmMtCbmtW8qFnNi4gAL6rbvAjycddt0EKQrwdXNwjh6gYh/POmRizcfJzPVh1m+/FM1hxKY82hNEfbat5uNKthO7dE2Gga4U9koDcu+v9IRETKQEW7iIhUeIZhcCTtLFuPZbD9eAbbj2ey/Xgmp7LzS23vYrUQFeRNvRBfaof4UDvIh+hgH2oH+xDq56GronJRfDxc6du+Fn3aRbL/ZA6bjqSz+Ug6m4+ms/NEJmdyCx2D2/3Ow9VK3RBf6of50izCxj2xtfDRwHYiIlIK3R6PbkMUEalozuQUsCHpzH8Lowy2HE13jAD+vywWiA7yoUGYLw3D/WkU7keDMF9qBfpc8q3rV4L6pfJn1jHNLypmd3IWW49lsO1YJtuOZbAnJYv8InuJdvVCfZnSrw31w/yuWDYRETGXbo8XEZFKwTAMDpzKYe3BNNYfPsP6pDOljujt5mKhUbg/zWr406S6P00ibDSu7oe3u7o6MY+HqwstagbQomaAY12x3eBIWi57U7PZk5LFp4mH2JeazW3vruDlns24o3VN8wKLiIjT0ZmMiIg4FcMw2JeaTeKB06w+kMbqg2ml3uZeN8SH1rWq0bKmjRY1A2hU3Q8PVxcTEotcHBerhejgc49k3NAkjN7tIhk1exO/7TvF6DmbWXPwDM/c0lhfOImICKCiXUREnMCJjLP8uvcUK/edYuX+06RmlSzS3V2ttIoMoH10IDFR1WhdK0DTakmlEezrwSf3t+ftpXt5+6e9fL4miYWbjhHfLJwerWrQsW7QeVPSiYhI1aGiXURErrj8omLWHjzD8j2pLN9zkj0p2SVe93C10ja6Gh1qBxFbJ4gWNW14uukqulReLlYLo29oQExUNZ75ahuHT+cyb8Mx5m04RrCvB7e0qM7NzasTE1VNo86LiFQxGogODfgjInIlnMzKZ9muVJbsTOG3fafI/Z9p16wWaBkZQKe6wXSsF0SbWtWqdJGufqn8VaRjahgGG5LOMH/jMb7ZcqLEIIshfh50axZO9+bVaV87UDMdiIhUYGXtm1S0U7E6chGRiuTgqRwWb0vm++3JbD6azv/2OKF+HnRpEEKXhiFcVS8Em7ebeUGdjPql8ldRj2lBkZ1f957km60n+HFHCll5RY7Xagf70KddJL1iahLs62FiShERuRQq2i9CRe3IRUSc0e7kLL7deoLF25LZnZJV4rXmNWxc3ziUro3DaBrhr6uEF6B+qfxVhmNaUGRnxf5TfLvlBN9uPUHOf+9WcXOxcGPTcB65rj4NwzVlnIhIRaGi/SJUho5cRMRMB05m8/WWEyzafJy9qf//fLqr1UJc3SDim4ZzQ5Mwwvw9TUxZcahfKn+V7Zjm5BexaPNxPl+TxOajGcC5x0z6tq9Fwg0NCNKVdxERp6d52kVE5LJKzcpj0eYTzN94lG3HMh3r3V2sXN0gmG7NqnN941CN8i5yGfh4uNKnfS36tK/F9uMZvPvTPr7blszM1Uks3HScEdfVY2CnaE2DKCJSCahoFxGRMssrLOb77cnM23CM3/adoth+7mYtF6uFzvWCubVlBDc0CcPmpefTRa6UphE2ptwbw+oDp3nxmx1sO5bJ+O92sWDTcabe24aoIB+zI4qIyN+gST9FRORPGYbB5iPpPD1/K+3+tYRHZ29i+Z6TFNsNWtcK4MXbm7L26a58cn977oypqYK9Cpg0aRLR0dF4enoSGxvLmjVrLth2+/bt9OrVi+joaCwWCxMnTrykbV5zzTVYLJYSy7Bhw8pztyq82DpBLBzemdfvakmQjzs7T2Ryyzu/sWRHitnRRETkb9CVdhERKVVGbiHzNh5l9pojJQaUq1nNi55tanJH6xrUDtYVvKpmzpw5JCQkMHXqVGJjY5k4cSLx8fHs3r2b0NDQ89rn5uZSp04d7rrrLkaPHv23tjlkyBBeeOEFx8/e3t7lv4MVnNVq4c6YmnSuF8zDM9ezISmdBz5dx8PX1CXhhga4uuh6jYhIRaOB6Kh8g9OIiFwqwzDYdCSdWauTWLTlOHmFdgDcXa10axZO77aRdKgThNWqUd8vJ2ful2JjY2nXrh3vvvsuAHa7ncjISEaOHMmTTz75p++Njo5m1KhRjBo16qK3ec0119CqVasLXqn/K858TC+XgiI7L3+7k49XHgIgrk4QE/u00oCQIiJOoqx9k75uFRER8gqL+c+6I9z67m/cMXklc9cfJa/QTsMwP56/rSlrn+rKW31a07FesAr2KqygoID169fTtWtXxzqr1UrXrl1JTEy87NucOXMmwcHBNGvWjDFjxpCbm3tpO1JFuLtaee62przdtzXe7i4kHjhNt7d+ZdmuVLOjiYjIRdDt8SIiVdjx9LPMWHWY2WuSOJNbCJw70b+lRXX6xdaiTa1qmktdHE6dOkVxcTFhYWEl1oeFhbFr167Lus177rmHqKgoIiIi2LJlC//85z/ZvXs38+bNK3W7+fn55OfnO37OzMwstV1VcFvLCJpU92fk5xvZeSKTQR+v5f5Otflnt4YaXV5EpAJQ0S4iUgVtOZrO9F8P8u3WE44R4GsEeHFvhyj6tIukmo+maRPnMnToUMefmzdvTvXq1bn++uvZv38/devWPa/9+PHjef75569kRKdWL9SX+Q935JXFu/hoxSE+XHGQ1QdPM/XeGCIDNTaAiIgzU9EuIlJF2O0GS3am8P6vB1lzKM2xvkOdQAZ2rE3XxqEapEr+VHBwMC4uLqSklByNPCUlhfDw8Cu6zdjYWAD27dtXatE+ZswYEhISHD9nZmYSGRl5SRkrC083F8bd2pTO9YJ5fO5mth/PpMekFUy9L4Z20YFmxxMRkQvQ2ZmISCVXUGRn7roj3PDmcobOWM+aQ2m4Wi30bF2Dbx7pzOyhcdzULFwFu/wld3d3YmJiWLp0qWOd3W5n6dKlxMXFXdFtbtq0CYDq1auX+rqHhwf+/v4lFjnn+sZhfPPIVTSN8Od0TgH9pq/mi/VHzY4lIiIXoCvtIiKVVG5BEZ+vOcL7vx7gREYeAH6ervSLjWJgx2jCbRpBWi5eQkICAwYMoG3btrRv356JEyeSk5PDoEGDAOjfvz81atRg/PjxwLmB5nbs2OH487Fjx9i0aRO+vr7Uq1evTNvcv38/s2bN4uabbyYoKIgtW7YwevRorr76alq0aGHCUaj4IgK8mDssjsf+s5nvtiXz+NzN7E3J4h83NcJFg02KiDgVFe0iIpVMdn4RnyYe4v1fD5KWUwBAiJ8HgzvXpl9sLfw83UxOKBVZ7969OXnyJM8++yzJycm0atWKxYsXOwaSS0pKwmr9/7s2jh8/TuvWrR0/v/7667z++ut06dKFn3/+uUzbdHd3Z8mSJY5iPjIykl69ejF27Ngrt+OVkLe7K5PuacPEJXt4+6d9vPfLAVbuP81ztzUhJkq3y4uIOAunnqe9uLiY5557js8++4zk5GQiIiIYOHAgY8eOdYxmbBgG48aNY/r06aSnp9OpUyemTJlC/fr1y/w5VXHuVhGpfDLzCvlkxSE+WHGQ9P+OBF8r0JthXerSs00NPN00SnRFoX6p/OmY/rmFm4/z9LytZOUXAXB7qwie7NaI6jYvk5OJiFReZe2bnPpK+yuvvMKUKVP45JNPaNq0KevWrWPQoEHYbDYeeeQRAF599VXefvttPvnkE2rXrs0zzzxDfHw8O3bswNNTt36KSOWXk1/ExysP8d7y/WTmnTvhrhPsw4jr6nFbywg9qy4if+m2lhHE1Qliwg+7mbPuCF9tOs4P21MYd2sT+rSvZXY8EZEqzamvtN9yyy2EhYXxwQcfONb16tULLy8vPvvsMwzDICIigscee4zHH38cgIyMDMLCwvj444/p06dPmT5H376LSEV0tqCYGasOMXX5Acdt8PVCfRl5XT1uaRGh51IrMPVL5U/HtOy2Hs3g+UXbWXf4DBYLfDSwHdc0DDU7lohIpVPWvsmpL7907NiRpUuXsmfPHgA2b97Mb7/9Rrdu3QA4ePAgycnJdO3a1fEem81GbGwsiYmJpmQWEbncCovtzFh1mKtfW8bL3+4iLaeA2sE+TOzdiu9HXc3trWqoYBeRS9a8po25w+Lo2z4Sw4BHPt/I4dM5ZscSEamynPr2+CeffJLMzEwaNWqEi4sLxcXF/Otf/6Jfv34AJCcnAzgGqvldWFiY47XS5Ofnk5+f7/g5MzPzMqQXESlfdrvBN1tPMOGH3Rw6nQtAzWpePHJ9fXq2rqHb4EWk3FgsFp67rSm7krPYmJTOgzPWM+/hjni7O/Wpo4hIpeTUZ3j/+c9/mDlzJrNmzWLDhg188sknvP7663zyySd/a7vjx4/HZrM5lsjIyHJKLCJyeazcd4rbJ61g5OcbOXQ6l2Bfd56/rSk/PXYNd7eNVMEuIuXOw9WFqffGEOLnwa7kLJ74YgtO/FSliEil5dRneU888QRPPvkkffr0oXnz5tx3332MHj3aMfdreHg4ACkpKSXel5KS4nitNGPGjCEjI8OxHDly5PLthIjI37AvNYvBH6/lnvdXs/VYBj7uLozu2oCfn7iWAR2jcXd16l/jIlLBhfl7MqVfG1ytFr7ZcoJJy/apcBcRucKc+mwvNze3xFyvAC4uLtjtdgBq165NeHg4S5cudbyemZnJ6tWriYuLu+B2PTw88Pf3L7GIiDiTU9n5jF2wlfiJv7J0VyquVgsD4qL45R/X8mjX+vh66BZVEbky2kYHMu62pgC8/sMebnzzF+asTSKvsNjkZCIiVYNTn/Xdeuut/Otf/6JWrVo0bdqUjRs38sYbb3D//fcD5563GjVqFC+99BL169d3TPkWERFBjx49zA0vInIJCorsfLLyEG8v3euYL/mGJmE82a0RdUN8TU4nIlXVvbG1yDxbyJSf97M3NZt/frmVVxfvpn9cNA92qYOnm4vZEUVEKi2nnvItKyuLZ555hvnz55OamkpERAR9+/bl2Wefxd3dHQDDMBg3bhzTpk0jPT2dzp07M3nyZBo0aFDmz9E0MCJiNsMwWLY7lRe/3snBU+dGaW5Ww5+x3ZvQoU6QyenkSlO/VP50TMtHZl4hc9Yc4aMVBzmekQdATFQ1pt0XQ5Cvh8npREQqlrL2TU5dtF8p6shFxEwHTmbz/KIdLN9zEoBgXw/+cVND7mxTE6umbquS1C+VPx3T8lVUbOfrLSd49qttZOYVUSvQmw8HtqNeqO4IEhEpq7L2TU59e7yISGWWW1DEuz/t4/1fD1JQbMfNxcL9nWsz4tp6+Hm6mR1PROSCXF2s9Ghdg2Y1bAz6eA1Jabn0nLyCqffF0LFusNnxREQqFaceiE5EpDIyDIPvtp6g64TlTP55PwXFdro0COGH0V0Y062xCnYRqTDqhfqy4OFOtKkVQGZeEf0/WMO8DUfNjiUiUqnoSruIyBWUdDqXZxdu4+fd526FrxHgxbO3NuHGJmFYLLoVXkQqniBfD2YN6cATX2xh0ebjJPxnM2dyCxncubbZ0UREKgUV7SIiV0BBkZ3pvx7g7aV7yS+y4+5i5cEudXj4mnp4uWvUZRGp2DzdXHirdytC/Tz44LeDvPj1DtJzC0i4oYG+kBQR+ZtUtIuIXGbrDqUxZt5W9qZmAxBXJ4iX7mimKdxEpFKxWi2M7d6Yat5uvP7DHt75aR/puYU8f1tTDaopIvI3qGgXEblMMvMKeXXxLj5blQRAkI87T3dvzB2ta+jKk4hUShaLhRHX1SfA251nvtrGjFWHyckvYsLdLfV7T0TkEqloFxG5DH7YnsyzX20nOfPcPMZ3t63JUzc3JsDb3eRkIiKX370dorB5uTF6zibmbTxGnRAfRlxX3+xYIiIVkop2EZFydCo7n3FfbeebrScAiAryZvwdzelYT1MgiUjVcmvLCLLzixgzbyuv/7CHBmF+3Ng03OxYIiIVjqZ8ExEpB4Zh8NWmY9zwxnK+2XoCF6uFYV3q8v2oq1Wwi0iV1bd9LfrHRQEwes4mdidnmZxIRKTi0ZV2EZG/KTUzj6cXbOPHHSkANAr34/W7WtKshs3kZCIi5nvmlibsTckm8cBphny6jq+Gd6Kajx4VEhEpK11pFxG5RI6r62/+wo87UnBzsTC6awMWjuisgl1E5L/cXKxM7teGyEAvktJyGT5rAwVFdrNjiYhUGCraRUQuwansfB76bAOPzt5ExtlCmtXwZ9HIzjzatT7urvrVKiLyv6r5uPN+/3b4uLuwcv9pRszaQGGxCncRkbLQmaWIyEVavC2Z+Dd/YfH2ZFytFhJuaMD8hzvRKNzf7GgiIk6rYbgfU++Lwd3Vyg87Unjk840q3EVEykBFu4hIGWXmFZLwn00M+2w9p3MKaBTux4LhnXjk+vq4uejXqYjIX7mqfgjv3ReDu4uV77YlM3rOJopUuIuI/CmdZYqIlMGqA6fpNvFX5m04htUCD11Tl69GdNKz6yIiF+nahqFMubcNbi4Wvt5ygsfnbqbYbpgdS0TEaWn0eBGRP5FfVMwbP+xh2q8HMAyoFejNG3e3pG10oNnRREQqrOsbh/HuPW0YPnMDCzYdx9XFyqu9WmC1WsyOJiLidHSlXUTkAvalZnHHpJW898u5gr1320i+ffQqFewiIuUgvmk47/RtjYvVwhfrjzL2q20Yhq64i4j8ka60i4j8gWEYzFydxEvf7CCv0E6gjzvjezYnvmm42dFERCqVbs2r80axnVFzNjFrdRLuLlbG3doEi0VX3EVEfqeiXUTkf6TlFPDPL7fw444UAK6qH8yEu1oS6u9pcjIRkcrp9lY1KCiy88QXW/h45SE8XK082a2RCncRkf9S0S4i8l+J+08zas5GUjLzcXex8o+bGnJ/p9p6xlJE5DK7q20khcUGT83fynu/HMDfy43h19YzO5aIiFNQ0S4iVV5RsZ23l+7lnWX7MAyoG+LD231b0zRCI8OLiFwp98TWIr+omOcX7WDCD7uJiapGhzpBZscSETGdBqITkSrtePpZ+k5fxds/nSvY725bk0UjO6tgFxExwaBOtbkrpiZ2A0bN3kRaToHZkURETKeiXUSqrCU7Uuj21q+sPXQGXw9X3urTilfvbIm3u25CEhExy/O3N6VOiA/JmXk8MXezRpQXkSpPRbuIVDmFxXZe/nYnD3y6joyzhbSoaeObRzpze6saZkcTEanyvN1deadva9xdrSzdlcpHKw6ZHUlExFQq2kWkSjmWfpa730tk2i8HABjUKZovhnUkKsjH5GQiIvK7phE2xnZvDMD473ay7ViGyYlERMyjol1EqoyfdqVw81u/sjEpHT9PV6beG8O4W5vi7qpfhSIizua+DlHc2CSMwmKDwZ+s5efdqWZHEhExhc5URaTSKyq289r3u7j/43O3w7esaePbR67ipmbhZkcTEZELsFgsvHpnC+oE+5CSmc/Aj9aSMGcTZzQ4nYhUMSraRaRSO5mVz30frGHSsv0ADIiL4j/D4ogM9DY5mYiI/JUAb3cWjezM/Z1qY7HAvI3H6PrGcr7ectzsaCIiV4yGSBaRSmvtoTSGz9xAalY+3u4u/LtXC25rGWF2LBERuQg+Hq48e2sTbm1ZnX9+uYU9KdmMmLURgFta6He6iFR+utIuIpWOYRh8+NtB+k5bRWpWPvVDfVk4opMKdhGRCqx1rWp8PfIq7usQBcDT87dxIuOsyalERC4/Fe0iUqnk5BfxyOxNvPD1DorsBre1jGDB8E7UC/UzO5pIpTFp0iSio6Px9PQkNjaWNWvWXLDt9u3b6dWrF9HR0VgsFiZOnHhJ28zLy2P48OEEBQXh6+tLr169SElJKc/dkgrA3dXKs7c2oWVNGxlnC3l87mbsds3jLiKVm4p2Eak0DpzM5o7JK1i0+TiuVgvjbm3CW31a4eOhJ4FEysucOXNISEhg3LhxbNiwgZYtWxIfH09qaukje+fm5lKnTh3+/e9/Ex5e+uCPZdnm6NGjWbRoEXPnzmX58uUcP36cnj17XpZ9FOfm5mLlzd6t8HJzYcW+03y08pDZkURELiuLYRhV/uvJzMxMbDYbGRkZ+Pv7mx1HRC7BjztSSJiziaz8IkL8PJjcrw3togPNjiVySZy5X4qNjaVdu3a8++67ANjtdiIjIxk5ciRPPvnkn743OjqaUaNGMWrUqIvaZkZGBiEhIcyaNYs777wTgF27dtG4cWMSExPp0KHDX+Z25mMql2bm6sM8PX8b7q5WFo3oTMNw3VElIhVLWfsmXWkXkQrNbjeYuGQPQz5dR1Z+EW2jqvHNyM4q2EUug4KCAtavX0/Xrl0d66xWK127diUxMfGybXP9+vUUFhaWaNOoUSNq1ap1yZ8rFd897WtxfaNQCorsPDp7I/lFxWZHEhG5LFS0i0iFlZlXyNAZ65i4ZC8A/eOimDWkA6H+niYnE6mcTp06RXFxMWFhYSXWh4WFkZycfNm2mZycjLu7OwEBAWX+3Pz8fDIzM0ssUrlYLBb+3asFQT7u7ErOYvJ/p/YUEalsVLSLSIW0LzWbHpNWsGRnKu6uVl69swUv3N4Md1f9WhMRGD9+PDabzbFERkaaHUkugxA/D164vRkA0389wMmsfJMTiYiUP53dikiFs3RnCndMWsGBkzlUt3ky98E47m6rE3KRyy04OBgXF5fzRm1PSUm54CBz5bHN8PBwCgoKSE9PL/PnjhkzhoyMDMdy5MiRS8onzu/m5uG0jAwgt6CYd37aa3YcEZFyp6JdRCoMwzCYtGwfD/z3+fV20dVYOKIzLSMDzI4mUiW4u7sTExPD0qVLHevsdjtLly4lLi7usm0zJiYGNze3Em12795NUlLSBT/Xw8MDf3//EotUThaLhSdvagTArNVJHD6dY3IiEZHypXmQRKRCyC0o4okvtvDNlhMA9Iutxbhbm+p2eJErLCEhgQEDBtC2bVvat2/PxIkTycnJYdCgQQD079+fGjVqMH78eODcQHM7duxw/PnYsWNs2rQJX19f6tWrV6Zt2mw2Bg8eTEJCAoGBgfj7+zNy5Eji4uLKNHK8VH5xdYPo0iCE5XtOMuGHPbzdt7XZkUREyo2KdhFxesfSzzL003VsP56Jq9XC87c3pV9slNmxRKqk3r17c/LkSZ599lmSk5Np1aoVixcvdgwkl5SUhNX6/1+mHT9+nNat/7+Aev3113n99dfp0qULP//8c5m2CfDmm29itVrp1asX+fn5xMfHM3ny5Cuz01Ih/OOmhizfc5KFm48z9Oo6NKthMzuSiEi50DztaO5WEWe2/nAaD85Yz6nsAoJ83Jlybwzta2s6N6nc1C+VPx3TqmHU7I0s2HScq+oHM2NwrNlxRET+lOZpF5EKb+66I/SdtppT2QU0ru7PVyM6qWAXEZELeuzGhri5WPh17ylW7DtldhwRkXKhol1EnE6x3eBf3+zgiS+2UFBs56am4XwxLI6a1bzNjiYiIk4sMtDb8fjUP7/cwpG0XJMTiYj8fSraRcSpZOUVMuTTdUz/9SAAj1xfn8n92uDjoSE4RETkrz1yfX2igrw5euYsvd9L5OApjSYvIhWbinYRcRpH0nK5c0oiP+1KxcPVytt9W5NwQwOsVovZ0UREpIII9HFnztA46ob4cDwjj7vfS2RvSpbZsURELpmKdhFxCusOpdFj0gp2p2QR6ufBnAfjuK1lhNmxRESkAgq3eTLnwTgahftxMiuf3tNWsf14htmxREQuiYp2ETHd/I1HuWf6ak7nFNA04tyAc60iA8yOJSIiFViwrwezh3agRU0baTkF3Pv+alKz8syOJSJy0VS0i4hp7HaDCT/sZvSczRQU24lvGsbcYXFUt3mZHU1ERCqBAG93PnsglsbV/TmTW8iLX+80O5KIyEVT0S4ipsgrLOaR2Rt556d9AAzrUpcp/WLwdteAcyIiUn78Pd147c4WWC2waPNxft6danYkEZGLoqJdRK64U9n59J2+iq+3nMDVauHVO1vwZLdGGnBOREQui2Y1bAzqVBuAsQu2kVtQZHIiEZGyU9EuIlfU3pQsekxawcakdGxebswYHMvdbSPNjiUiIpVcwg0NqBHgxdEzZ3lryV6z44iIlJnTF+3Hjh3j3nvvJSgoCC8vL5o3b866descrxuGwbPPPkv16tXx8vKia9eu7N2rX8QizmjFvlP0nLKSo2fOEhXkzbyHOxJXN8jsWCIiUgX4eLjywu1NAXj/t4MaTV5EKgynLtrPnDlDp06dcHNz47vvvmPHjh1MmDCBatWqOdq8+uqrvP3220ydOpXVq1fj4+NDfHw8eXkaHVTEmfxn7REGfLiGrLwi2kZVY/7Dnagb4mt2LBERqUKubxzGzc3DKbYbPDVvK8V2w+xIIiJ/yWIYhtP+tnryySdZsWIFv/76a6mvG4ZBREQEjz32GI8//jgAGRkZhIWF8fHHH9OnT58yfU5mZiY2m42MjAz8/f3LLb+InPt3OuGHPby77NyAc7e1jODVO1vg6eZicjIR56V+qfzpmMrvUjPzuP6N5WTlFdGlQQgTe7eimo+72bFEpAoqa9/k1FfaFy5cSNu2bbnrrrsIDQ2ldevWTJ8+3fH6wYMHSU5OpmvXro51NpuN2NhYEhMTL7jd/Px8MjMzSywiUv7yi4oZNWeTo2AfeV093urTSgW7iIiYJtTfkwl3tcTTzcryPSe55Z3f2HpUt8qLiPNy6qL9wIEDTJkyhfr16/P999/z0EMP8cgjj/DJJ58AkJycDEBYWFiJ94WFhTleK8348eOx2WyOJTJSg2CJlLf03ALue38NX206jqvVwmt3tuCxGxtisWiEeBERMdeNTcOZ/3AnooK8OZZ+ll5TVzJ7TZLZsURESuXURbvdbqdNmza8/PLLtG7dmqFDhzJkyBCmTp36t7Y7ZswYMjIyHMuRI0fKKbGIACSdzqXnlJWsOZSGn4crHw9qz10aIV5ERJxI4+r+LBzRma6NwygosvPkvK188NtBs2OJiJzHqYv26tWr06RJkxLrGjduTFLSuW9Cw8PDAUhJSSnRJiUlxfFaaTw8PPD39y+xiEj52HQknTsmr+DAyRwibJ588VBHOtcPNjuWiIjIeWxebky7L4aR19UD4J2f9pKTrzncRcS5OHXR3qlTJ3bv3l1i3Z49e4iKigKgdu3ahIeHs3TpUsfrmZmZrF69mri4uCuaVUTgxx0p9JmWyOmcAppG+DN/eCcahvuZHUtEROSCrFYLo7o2IDrIm/TcQmat1m3yIuJcnLpoHz16NKtWreLll19m3759zJo1i2nTpjF8+HAALBYLo0aN4qWXXmLhwoVs3bqV/v37ExERQY8ePcwNL1LFzEg8xIMz1pFXaKdLgxDmPBhHmL+n2bFERET+kovVwkPX1AVg+q8HyCssNjmRiMj/c+qivV27dsyfP5/PP/+cZs2a8eKLLzJx4kT69evnaPOPf/yDkSNHMnToUNq1a0d2djaLFy/G01PFgsiVYLcbjP9uJ898tR27Ab3bRvL+gLb4eriaHU1ERKTM7mhdk+o2T1Kz8vli/VGz44iIODj1PO1XiuZuFbk0+UXFPDF3Cws3HwfgsRsaMOK6ehohXuRvUr9U/nRMpSw+WnGQ5xftoGY1L5Y9fg1uLk59fUtEKrhKMU+7iDivjLOFDPxwLQs3n5vS7fW7WjLy+voq2EVEpMLq064WQT7uHD1zlkX//UJaRMRsKtpF5KKdyDjL3VMTSTxwGh93Fz4c2I47Y2qaHUtERORv8XJ3YfBVtQGY/PN+7PYqf0OqiDgBFe0iclF2J2fRc/JKdqdkEeLnwX+GxXF1gxCzY4mIiJSLeztE4efpyr7UbL7fnmx2HBERFe0iUnarDpzmzqkrOZGRR90QH+Y/3JGmETazY4mIiJQbf083BnaMBuCVxbtIzcozN5CIVHkq2kWkTL7ZcoL+H6whK6+ItlHV+PKhjtSs5m12LBERkXJ3f6faVLd5cuh0Ln2nrSI1U4W7iJhHRbuI/KWPVxxkxOcbKCi2E980jM8eiCXA293sWCIiIpdFNR93Ph/Sgeo2T/afzKHPtFWkqHAXEZOoaBeRCzIMg39/t4vnFu3AMOC+DlFM7heDp5uL2dFEREQuq+hgH+YMjaNGgBcHTp0r3JMzVLiLyJWnol1ESlVYbOexuZuZunw/AE/EN+SF25viYtWUbiIiUjXUCvJm9tAO1Ajw4uCpHPpOX0V2fpHZsUSkirnkon3GjBl06tSJiIgIDh8+DMDEiRP56quvyi2ciJgjJ7+IwZ+sY96GY7hYLbx2ZwuGX1tPc7CLiEiVExnozZwHOxBh8+TgqRym/XLA7EgiUsVcUtE+ZcoUEhISuPnmm0lPT6e4uBiAgIAAJk6cWJ75ROQKO52dzz3TV/HLnpN4ubnwfv+23NU20uxYIiIipqlZzZuxtzQB4P1fD2hgOhG5oi6paH/nnXeYPn06Tz/9NC4u//9sa9u2bdm6dWu5hRORK+tIWi53Tk1k89EMqnm7MWtILNc2CjU7loiIiOm6NQunVWQAuQXFTFy61+w4IlKFXFLRfvDgQVq3bn3eeg8PD3Jycv52KBG58rYfz6DnlJUcPJVDjQAvvnioI61rVTM7loiIiFOwWCw8dXNjAOasPcK+1GyTE4lIVXFJRXvt2rXZtGnTeesXL15M48aN/24mEbnCEvefps97qziZlU+jcD/mPdyRuiG+ZscSERFxKu1rB9K1cRjFdoNXF+8yO46IVBGul/KmhIQEhg8fTl5eHoZhsGbNGj7//HPGjx/P+++/X94ZReQy+nbrCUbN3kRBsZ32tQOZ3r8tNi83s2OJiIg4pSe7NeSnXSn8sCOFdYfSaBsdaHYkEankLqlof+CBB/Dy8mLs2LHk5uZyzz33EBERwVtvvUWfPn3KO6OIXCYzVh3m2a+2YRhwU9NwJvZppTnYRURE/kS9UD96t6vF52uSePnbnXz5UEfNriIil9UlT/nWr18/9u7dS3Z2NsnJyRw9epTBgweXZzYRuUwMw+DNH/fwzIJzBXu/2FpM6tdGBbuIiEgZjO5aHy83FzYkpfOfdUfMjiMildwlF+2/8/b2JjRUo0uLVBTFdoOxC7bx1n9Hvh3VtT4v9WiGi1VXCURERMoi1N+TEdfVA2Dsgm2sPZRmciIRqczKfHt869aty3zrz4YNGy45kIhcPnmFxYyes4nvtiVjscALtzfjvg5RZscSERGpcB7qUpftxzP4dmsyD85Yz4KHO1EryNvsWCJSCZW5aO/Ro8dljCEil1tWXiFDP11P4oHTuLtYmdinFTc3r252LBERkQrJarUw4a5WHElLZOuxDO7/ZC3zHu6Iv6cGcxWR8mUxDMMwO4TZMjMzsdlsZGRk4O/vb3YckXJ3MiufgR+tYfvxTHzcXZjevy0d6wWbHUtELkD9UvnTMZXLJSUzj9vfXUFyZh5XNwjhwwFtcXX520+gikgVUNa+Sb9RRCq5I2m53DV1JduPZxLk487soXEq2EXkb5k0aRLR0dF4enoSGxvLmjVr/rT93LlzadSoEZ6enjRv3pxvv/22xOspKSkMHDiQiIgIvL29uemmm9i7d2+JNtdccw0Wi6XEMmzYsHLfN5GLFebvyfsD2uLl5sIve04y4cc9ZkcSkUrmkor2atWqERgYeN4SFBREjRo16NKlCx999FF5ZxWRi7TzRCY9p6zk0Olcalbz4ouHOtK8ps3sWCJSgc2ZM4eEhATGjRvHhg0baNmyJfHx8aSmppbafuXKlfTt25fBgwezceNGevToQY8ePdi2bRtwbjaLHj16cODAAb766is2btxIVFQUXbt2JScnp8S2hgwZwokTJxzLq6++etn3V6QsmtWwMeHulgBM/+UA+1KzTU4kIpXJJRXtzz77LFarle7du/P888/z/PPP0717d6xWK8OHD6dBgwY89NBDTJ8+vbzzikgZrTmYxt3vJXIyK5+GYX58+VBHagf7mB1LRCq4N954gyFDhjBo0CCaNGnC1KlT8fb25sMPPyy1/VtvvcVNN93EE088QePGjXnxxRdp06YN7777LgB79+5l1apVTJkyhXbt2tGwYUOmTJnC2bNn+fzzz0tsy9vbm/DwcMei29zFmdzcvDrXNwqlyG7w4tc70BOoIlJeLqlo/+2333jppZeYMWMGI0eOZOTIkcyYMYOXXnqJ9evXM336dF577TXefvvt8s4rImWwZEcK932wmqy8ItpGVeM/D8YR5u9pdiwRqeAKCgpYv349Xbt2dayzWq107dqVxMTEUt+TmJhYoj1AfHy8o31+fj4Anp7//zvKarXi4eHBb7/9VuJ9M2fOJDg4mGbNmjFmzBhyc3MvmDU/P5/MzMwSi8jl9swtTXB3sbJ8z0l+2lX63SciIhfrkor277///rwOGOD666/n+++/B+Dmm2/mwIEDfy+diFy0L9Yf5cHP1pNfZOe6RqHMGByLzVsj2YrI33fq1CmKi4sJCwsrsT4sLIzk5ORS35OcnPyn7Rs1akStWrUYM2YMZ86coaCggFdeeYWjR49y4sQJx3vuuecePvvsM5YtW8aYMWOYMWMG99577wWzjh8/HpvN5lgiIyMvdbdFyiw62If7O9cG4IWvd5BfVGxyIhGpDC6paA8MDGTRokXnrV+0aBGBgYEA5OTk4Ofn9/fSichFef/XAzw+dzPFdoOebWrw3n0xeLm7mB1LROSC3NzcmDdvHnv27CEwMBBvb2+WLVtGt27dsFr//zRl6NChxMfH07x5c/r168enn37K/Pnz2b9/f6nbHTNmDBkZGY7lyJEjV2qXpIobcV09Qv08OHw6lw9/O2R2HBGpBMo8T/v/euaZZ3jooYdYtmwZ7du3B2Dt2rV8++23TJ06FYAff/yRLl26lF9SEbkgwzB49fvdTPn53MnrkKtqM6ZbY6xWi8nJRKQyCQ4OxsXFhZSUlBLrU1JSCA8PL/U94eHhf9k+JiaGTZs2kZGRQUFBASEhIcTGxtK2bdsLZomNjQVg37591K1b97zXPTw88PDwKPO+iZQXXw9X/nlTIx6bu5l3f9pLrzY1CNUjaiLyN1zSlfYhQ4awfPlyfHx8mDdvHvPmzcPb25vly5czePBgAB577DHmzJlTrmFF5HxFxXbGzNvqKNj/cVNDnrpZBbuIlD93d3diYmJYunSpY53dbmfp0qXExcWV+p64uLgS7eHcF/ultbfZbISEhLB3717WrVvH7bfffsEsmzZtAqB69eqXsCcil9cdrWvQKjKAnIJixn+3y+w4IlLBXdKVdoBOnTrRqVOn8swiIhcpr7CYR2dv5PvtKVgt8PIdzenTvpbZsUSkEktISGDAgAG0bduW9u3bM3HiRHJychg0aBAA/fv3p0aNGowfPx6ARx99lC5dujBhwgS6d+/O7NmzWbduHdOmTXNsc+7cuYSEhFCrVi22bt3Ko48+So8ePbjxxhsB2L9/P7NmzeLmm28mKCiILVu2MHr0aK6++mpatGhx5Q+CyF+wWi08f1tTekxewfyNx4itHaj+WUQu2SUX7Xa7nX379pGamordbi/x2tVXX/23g4nIn8vKK2Top+tJPHAadxcrb/dtxU3NdMVJRC6v3r17c/LkSZ599lmSk5Np1aoVixcvdgw2l5SUVOJZ9I4dOzJr1izGjh3LU089Rf369VmwYAHNmjVztDlx4gQJCQmkpKRQvXp1+vfvzzPPPON43d3dnSVLlji+IIiMjKRXr16MHTv2yu24yEVqGRlAQtcGTPhxD898tY16ob60jQ40O5aIVEAW4xImkVy1ahX33HMPhw8fPm8OSovFQnFxxRopMzMzE5vNRkZGhuZ8lQrhdHY+Az9ay9ZjGfi4uzC9f1s61gs2O5aIlBP1S+VPx1TMYBgGw2dt4NutyQT7urNwRGciArzMjiUiTqKsfdMlPdM+bNgw2rZty7Zt20hLS+PMmTOOJS0t7ZJDi8hfO5Z+lrumJrL1WAaBPu58PrSDCnYREREnZLFYeP2uljSu7s+p7AKGzljH2YKKdXFLRMx3SUX73r17efnll2ncuDEBAQEl5kG12WzlnVFE/mtvSha9Jq/kwKkcagR4MXdYHC1qBpgdS0RERC7A292V6f1jCPRxZ9uxTP7x5Zbz7lQVEfkzl1S0x8bGsm/fvvLOIiJ/YtORdO56L5HkzDzqhfryxUNx1A3xNTuWiIiI/IWa1byZ0q8NrlYLizYfZ+ryA2ZHEpEK5JIGohs5ciSPPfYYycnJNG/eHDc3txKvayRXkfL1696TPDhjPbkFxbSMDODjge2o5uNudiwREREpo9g6QTx3W1PGLtjGq9/vomG4L9c1CjM7lohUAJc0EN3/jgp73gY1EJ1Iufp26wkenb2RwmKDq+oHM/XeGHw8LnniBxGpANQvlT8dU3EWT83fyqzVSfh5uDJ/eEfqhfqZHUlETFLWvumSzvwPHjx4ycFEpOxmrU7i6QVbMQzo3rw6b/RuiYeri9mxRERE5BI9d2tT9qVks+ZQGkM+Xc+Chzth83b76zeKSJV1SUV7VFQUADt27CApKYmCggLHaxaLxfG6iFwawzCY/PN+Xvt+NwD3xNbixdub4WK1mJxMRERE/g53VyuT723D7e+u4OCpHEbO3shHA9upjxeRC7qkov3AgQPccccdbN26FYvF4hgB02I598umot0eL+JMDMPg5W93Mv3Xc3e0jLi2Ho/d2MDx70tEREQqtmBfD6b1j6HXlJX8suckk5bt45Hr65sdS0Sc1CWNHv/oo49Su3ZtUlNT8fb2Ztu2bfzyyy+0bduWn3/+uZwjilQdRcV2nvhii6NgH9u9MY/HN1TBLiIiUsk0jbAxvmdzAN79aR/7T2abnEhEnNUlFe2JiYm88MILBAcHY7VacXFxoXPnzowfP55HHnmkvDOKVAl5hcU8NHMDX6w/iovVwut3teSBq+qYHUtEREQukx6tanBNwxAKiu2MmbcVu13zt4vI+S6paC8uLsbP79xIl8HBwRw/fhw496z77t27yy+dSBWRlVfIwI/W8OOOFNxdrUy9N4Y7Y2qaHUtEREQuI4vFwou3N8PLzYU1B9OYu/6I2ZFExAldUtHerFkzNm/eDEBsbCyvvvoqK1as4IUXXqBOHV0ZFLkYp7Lz6Tt9FasOpOHn4cqn97fnhiaat1VERKQqiAz0JuGGBgD865udnMzKNzmRiDibSyrax44di91uB+CFF17g4MGDXHXVVXz77be8/fbb5RpQpDI7eiaXu6Ymsu1YJkE+7nw+tAMd6gSZHUtERESuoEGdomka4U9mXhEvfL3D7Dgi4mQuafT4+Ph4x5/r1avHrl27SEtLo1q1ahowS6SM9qZkcd8Ha0jOzKNGgBczBrenToiv2bFERETkCnN1sfLvni24fdJvLNp8nJ5tanBtw1CzY4mIk7ikK+2lCQwMVMEuUkYbk85w13uJJGfmUT/Uly8f6qiCXUREpAprXtPGoE61AUiYs0mjyYuIQ7kV7SJSNr/uPUm/91eTnltIy8gA/vNgHOE2T7NjiYiIiMkeu7EBLWvaOJNbSP8P1pCSmWd2JBFxAiraRa6gb7ac4P6P15JbUMxV9YOZ9UAs1XzczY4lIiIiTsDb3ZUPB7ajdrAPx9LPMuDDNWScLTQ7loiYTEW7yBUyc/VhRny+gcJig+7Nq/P+gLb4eFzSsBIiIiJSSQX5evDp/e0J8fNgV3IWQz5ZR15hsdmxRMREKtpFLjPDMJi0bB9Pz9+GYcA9sbV4u29rPFxdzI4mIiIiTigy0JtPBrXHz8OVNYfSGD1nE4ZhmB1LREyiol3kMrLbDV76Zievfb8bgBHX1uNfPZrhYtWgjSIiInJhTSL8mT6gLe4uVr7blsxPu1LNjiQiJqlQRfu///1vLBYLo0aNcqzLy8tj+PDhBAUF4evrS69evUhJSTEvpMh/FRbbeXzuZj747SAAz9zShMfjG2qWBRERESmTDnWCGNQ5GoBXFu+i2K6r7SJVUYUp2teuXct7771HixYtSqwfPXo0ixYtYu7cuSxfvpzjx4/Ts2dPk1KKnJNXWMywGeuZt/EYLlYLE+5qyeDOtc2OJSIiIhXMw13qYfNyY09KNl9uOGp2HBExQYUo2rOzs+nXrx/Tp0+nWrVqjvUZGRl88MEHvPHGG1x33XXExMTw0UcfsXLlSlatWmViYqnKMs6em6Zl6a5UPFytvHdvDL1iapodS0RERCogm7cbw6+tC8CbP+7RoHQiVVCFKNqHDx9O9+7d6dq1a4n169evp7CwsMT6Ro0aUatWLRITEy+4vfz8fDIzM0ssIuUhNSuPPtNWseZQGn4erswYHEvXJmFmxxIREZEKrH9cNBE2T05k5PHxykNmxxGRK8zpi/bZs2ezYcMGxo8ff95rycnJuLu7ExAQUGJ9WFgYycnJF9zm+PHjsdlsjiUyMrK8Y0sVlHQ6lzunJLLzRCbBvh7MeTCO9rUDzY4lIiIiFZynmwsJNzYEYPKyfaTnFpicSESuJKcu2o8cOcKjjz7KzJkz8fT0LLftjhkzhoyMDMdy5MiRctu2VE07T2TSa+pKktJyiQz04suH4mgS4W92LBEREakk7mhdg0bhfmTmFTH55/1mxxGRK8ipi/b169eTmppKmzZtcHV1xdXVleXLl/P222/j6upKWFgYBQUFpKenl3hfSkoK4eHhF9yuh4cH/v7+JRaRS7X2UBp3v5fIyax8GoX78eWwjkQF+ZgdS0RERCoRF6uFf97UCICPVx5i/8lskxOJyJXi1EX79ddfz9atW9m0aZNjadu2Lf369XP82c3NjaVLlzres3v3bpKSkoiLizMxuVQVS3akcO/7q8nKK6JddDXmPBhHqH/53RUiIiIi8rtrGobQqV4QBUV2Bn20llPZ+WZHEpErwNXsAH/Gz8+PZs2alVjn4+NDUFCQY/3gwYNJSEggMDAQf39/Ro4cSVxcHB06dDAjslQhX6w/yj+/3EKx3eD6RqG8e08bvNxdzI4lIiIilZTFYmFi79b0nLKCpLRcBn+8ls+HdsDb3alP6UXkb3LqK+1l8eabb3LLLbfQq1cvrr76asLDw5k3b57ZsaSSm/bLfh6fu5liu0HPNjWYel+MCnYRERG57EL8PPhkUHuqebux+WgGI2dtpKjYbnYsEbmMLIZhGGaHMFtmZiY2m42MjAw93y5/yjAM/r14F+8tPwDAkKtqM6ZbY6xWi8nJRKQyUb9U/nRMpbJZfziNe6avJr/Izj2xtfhXj2ZYLDofEalIyto3Vfgr7SJXSlGxnX98scVRsP/zpkY83b2JCnYRERG54mKiAnmrTyssFpi1OolpvxwwO5KIXCYq2kXKIK+wmGGfrWfu+qNYLfBqrxY8dE1ds2OJiIhIFXZTs+o8e0sTAF5ZvIvle06anEhELgcV7SJ/ISO3kPs+WM2Snal4uFp577623N0u0uxYIiIiIgzsGE3vtpHYDRg5awOHTuWYHUlEypmKdpE/kZKZR+9piaw9dAY/T1c+vb89NzQJMzuWiIiICHBuRPkXejSlda0AMvOKGDpjHTn5RWbHEpFypKJd5AIOnMym5+SV7ErOIsTPgzlD44itE2R2LBEREZESPFxdmHpvDCF+HuxJyebxuZvRWNMilYeKdpFSbDmazp1TEzmWfpboIG/mPdSRJhEabVhEREScU5i/J1PvjcHNxcJ325KZsny/2ZFEpJyoaBf5g9/2nqLvtFWk5RTQvIaNLx7qSGSgt9mxRERERP5UTFQ1Xri9GQATl+zlWPpZkxOJSHlQ0S7yPxZuPs6gj9eQU1BMp3pBfD60A8G+HmbHEhERESmTPu0iia0dSEGRnYk/7jE7joiUAxXtIv/10YqDPPL5RgqLDbq3qM6HA9vh6+FqdiwRERGRMrNYLPyzWyMAvtxwlD0pWSYnEpG/S0W7VHmGYfDq4l08v2gHcG7qlHf6tMbD1cXkZCIizmnSpElER0fj6elJbGwsa9as+dP2c+fOpVGjRnh6etK8eXO+/fbbEq+npKQwcOBAIiIi8Pb25qabbmLv3r0l2uTl5TF8+HCCgoLw9fWlV69epKSklPu+iVQGbWpV46am4dgNeHXxbrPjiMjfpKJdqrSiYjv//HILk38+N1jLE/ENGXdrE6xWi8nJRESc05w5c0hISGDcuHFs2LCBli1bEh8fT2pqaqntV65cSd++fRk8eDAbN26kR48e9OjRg23btgHnvjjt0aMHBw4c4KuvvmLjxo1ERUXRtWtXcnL+f77p0aNHs2jRIubOncvy5cs5fvw4PXv2vCL7LFIRPR7fEKsFluxMYd2hNLPjiMjfYDE0HwSZmZnYbDYyMjLw99cI4VXF2YJiRszawNJdqVgtML5nc3q3q2V2LBERp+6XYmNjadeuHe+++y4AdrudyMhIRo4cyZNPPnle+969e5OTk8PXX3/tWNehQwdatWrF1KlT2bNnDw0bNmTbtm00bdrUsc3w8HBefvllHnjgATIyMggJCWHWrFnceeedAOzatYvGjRuTmJhIhw4d/jK3Mx9TkcvlyS+3MHvtEdpFV+M/D8ZhseiihIgzKWvfpCvtUiWdySngnvdXsXRXKh6uVt67r60KdhGRv1BQUMD69evp2rWrY53VaqVr164kJiaW+p7ExMQS7QHi4+Md7fPz8wHw9PQssU0PDw9+++03ANavX09hYWGJ7TRq1IhatWpd8HNFBEZ1bYCHq5W1h87w067S74YREeenol2qnKNncuk1dSUbk9Kxebkx84FYbmgSZnYsERGnd+rUKYqLiwkLK/k7MywsjOTk5FLfk5yc/Kftfy++x4wZw5kzZygoKOCVV17h6NGjnDhxwrENd3d3AgICyvy5+fn5ZGZmllhEqppwmyeDOtUG4JXFu8grLDY5kYhcChXtUqXsSs6k15SVHDiZQ3WbJ18Mi6NtdKDZsUREqiw3NzfmzZvHnj17CAwMxNvbm2XLltGtWzes1ks/TRk/fjw2m82xREZGlmNqkYrjoS51CfB2Y09KNsNnbqCw2G52JBG5SCrapcpYdeA0d01NJCUznwZhvsx7uCP1w/zMjiUiUmEEBwfj4uJy3qjtKSkphIeHl/qe8PDwv2wfExPDpk2bSE9P58SJEyxevJjTp09Tp04dxzYKCgpIT08v8+eOGTOGjIwMx3LkyJGL3V2RSsHm7cbUe2PwcLWydFcqo+Zsothe5Ye0EqlQVLRLlfDt1hP0/2ANWXlFtIuuxtwHO1Ld5mV2LBGRCsXd3Z2YmBiWLl3qWGe321m6dClxcXGlvicuLq5Ee4Aff/yx1PY2m42QkBD27t3LunXruP3224FzRb2bm1uJ7ezevZukpKQLfq6Hhwf+/v4lFpGqqkOdIKbeF4Obi4VvtpzgyS+3YFfhLlJhuJodQORy+2TlIZ5btB3DgPimYbzVpzWebpqDXUTkUiQkJDBgwADatm1L+/btmThxIjk5OQwaNAiA/v37U6NGDcaPHw/Ao48+SpcuXZgwYQLdu3dn9uzZrFu3jmnTpjm2OXfuXEJCQqhVqxZbt27l0UcfpUePHtx4443AuWJ+8ODBJCQkEBgYiL+/PyNHjiQuLq5MI8eLCFzbMJS3+7Rm+KwNzF1/FB8PV8bd2kQjyotUACrapdIyDINXv9/NlP/OwX5fhyieu60pLpqDXUTkkvXu3ZuTJ0/y7LPPkpycTKtWrVi8eLFjsLmkpKQSz6J37NiRWbNmMXbsWJ566inq16/PggULaNasmaPNiRMnSEhIICUlherVq9O/f3+eeeaZEp/75ptvYrVa6dWrF/n5+cTHxzN58uQrs9MilUS35tV5/a6WJPxnMx+vPERuQREv9WiOu6tuvhVxZpqnHc3dWhkVFNl58sstzNt4DIDHb2zA8Gvr6dtkEakQ1C+VPx1Tkf/3+Zoknp6/FbsBHesGMaVfDDZvN7NjiVQ5mqddqqzs/CIGf7KWeRuP4WK18OqdLRhxXX0V7CIiIiJA3/a1eH9AW3zcXVi5/zR3TFnB4dM5ZscSkQtQ0S6VSmpWHr3fS+TXvafwdnfh/QFtubutpvkRERER+V/XNQpj7rCOVLd5cuBkDndMXsmWo+lmxxKRUqhol0pj/8lsek5eyfbjmQT7ujN7aAeubRhqdiwRERERp9Qkwp+vhneieQ0baTkFPDFXo8qLOCMV7VIprDuURq8pKzl65ixRQd58+VBHWtQMMDuWiIiIiFML9ffks8Gx+Hm6sjsli6+3njA7koj8gYp2qfAWb0um3/urSc8tpGVkAPMe6khUkI/ZsUREREQqBJu3G0OvqgPAxB/3UFRsNzmRiPwvFe1SoX2y8hAPzVxPfpGdro1DmT2kA0G+HmbHEhEREalQBnWuTTVvNw6cynHMviMizkFFu1RIdrvB+G93Mm7hdgwD7omtxdR7Y/BydzE7moiIiEiF4+vhykPX1AXgrSV7KSjS1XYRZ6GiXSqcvMJiHpm9kfd+OQDAE/EN+VePZri66H9nERERkUt1X4doQvw8OJZ+ljnrjpgdR0T+S1WOVCjpuQX0/2ANX285gZuLhTd7t2T4tfU0B7uIiIjI3+Tl7sKIa+sB8O5Pe8krLDY5kYiAinapQI6k5dJrykrWHErDz8OVTwa1547WNc2OJSIiIlJp9GkfSYTNk5TMfGYkHjY7joigol0qiC1H07lj8gr2n8yhus2TuQ/F0bFesNmxRERERCoVD1cXHrm+PgDjv9vJk19uITUrz+RUIlWbinZxekt2pND7vVWcyi6gUbgf8x7uSKNwf7NjiYiIiFRKvWJq0qNVBHYDZq89wjWv/cw7S/dytkC3y4uYQUW7OLUZiYcYOmMdZwuLuap+MHOHxVHd5mV2LBEREZFKy83FysQ+rZk7LI6WkQHkFhQz4cc93Dhxua66i5hARbs4pd+ndHvmq+3YDbi7bU0+HNgOP083s6OJiIiIVAntogOZ/1BH3urTiuo2T46kneXZBdvNjiVS5ahoF6eTV1jMiM83OKZ0e+yGBrzSqwVumtJNRERE5IqyWi3c3qoG7w9oi6vVwuLtyXy79YTZsUSqFFVB4lROZ+fTd/oqvt2a7JjSbeT19TWlm4iIiIiJmkbYeOiaugA8+9U2zuQUmJxIpOpQ0S5OY//JbO6YvJKNSenYvNyYMThWU7qJiIiIOIkR19Wjfqgvp7ILePHrHWbHEakyVLSLU1h14DQ9J68kKS2XyEAvvnyoIx3qBJkdS0RERET+y8PVhVfubIHFAvM2HmPZrlSzI4lUCSraxXTzNhzlvg9Wk3G2kFaRAcx/uBP1Qn3NjiUiIiIif9CmVjUGd6oNwFPzt5KZV2hyIpHKT0W7mMYwDN74cQ8J/9lMYbFB9+bVmT20A8G+HmZHExEREZELeOzGhkQFeXMiI4+7pyaSdDrX7EgilZqKdjFFflExo+Zs4u2lewF46Jq6vNO3NZ5uLiYnExEREZE/4+Xuwrt92xDs68Gu5Cxuffc3ftlz0uxYIpWWina54k5n59Nv+mq+2nQcV6uFf/dszj9vaoTVqhHiRURERCqC5jVtfD2yM60iA8g4W8jAj9Yw5ef9GIZhdjSRSkdFu1xR+1LPjRC/7vAZ/Dxd+XhQe/q0r2V2LBERERG5SOE2T+Y82IE+7SKxG/DK4l08MnsTeYXFZkcTqVRUtMsVs2LfKe6YvMIxQvz8hzvSuX6w2bFERERE5BJ5uLrw714tePmO5ri5WFi0+Tj3TF/Fqex8s6OJVBoq2uWKmL0miQEfriErr4iYqGoseLgT9UL9zI4lIiIiIuXgnthafHp/LDYvNzYkpdNj0gr2pGSZHUukUlDRLpdVsd3gX9/s4Ml5WymyG9zeKoKZD8QSpBHiRURERCqVuLpBzH+4I9FB3hw9c5Zek1fy614NUCfyd6lol8smO7+IoZ+uY/qvBwEY1bU+E3u30gjxIiIiIpVUnRBf5j3cifbRgWTlF/HAJ+vYnawr7iJ/h4p2uSyOpZ/lzikrWborFXdXK2/3bc2org2wWDRCvIiIiEhlFujjzowH2nNV/WDyi+w88vlGDU4n8jeoaJdytyHpDLe/u4JdyVkE+3owe2gHbmsZYXYsEREREblCPFxdeOPuVgT7erA7JYvx3+40O5JIhaWiXcrVV5uO0WfauRFDG4X7sWB4R9rUqmZ2LBERERG5wkL8PJhwd0sAPkk8zJIdKSYnEqmYnLpoHz9+PO3atcPPz4/Q0FB69OjB7t27S7TJy8tj+PDhBAUF4evrS69evUhJ0S+EK81uN3j9+908OnsTBUV2ujYO48uHOlKzmrfZ0URERETEJF0ahPBA59oAPPHFZlIy80xOJFLxOHXRvnz5coYPH86qVav48ccfKSws5MYbbyQnJ8fRZvTo0SxatIi5c+eyfPlyjh8/Ts+ePU1MXfXkFhQxfNYG3l22D4BhXeoy7b4YfDxcTU4mIiIiImZ74qaGNI3w50xuIQn/2USx3TA7kkiFYjEMo8L8qzl58iShoaEsX76cq6++moyMDEJCQpg1axZ33nknALt27aJx48YkJibSoUOHMm03MzMTm81GRkYG/v7+l3MXKp1j6WcZ8sk6dpzIxN3Fyss9m3NnTE2zY4mIVGjql8qfjqmIufafzOaWt3/jbGExNzcP583erfBw1YxCUrWVtW9y6ivtf5SRkQFAYGAgAOvXr6ewsJCuXbs62jRq1IhatWqRmJhoSsaqZP3hNG5/9zd2nMgk2NedWUNiVbCLiIiIyHnqhvgysU8r3F2sfLs1mfs/Xkt2fpHZsUQqhApTtNvtdkaNGkWnTp1o1qwZAMnJybi7uxMQEFCibVhYGMnJyRfcVn5+PpmZmSUWuThfrD9K32mrOZVdQOPq/iwY3om20YFmxxIRERERJxXfNJwPB7bD292FFftO02/6KtJyCsyOJeL0KkzRPnz4cLZt28bs2bP/9rbGjx+PzWZzLJGRkeWQsGoothv865sdPD53MwXFdm5qGs4Xw+I04JyIiIiI/KXO9YOZNaQD1bzd2Hw0gzunruRIWq7ZsUScWoUo2keMGMHXX3/NsmXLqFnz/2+/Dg8Pp6CggPT09BLtU1JSCA8Pv+D2xowZQ0ZGhmM5cuTI5YpeqWScLeT+j9cy/deDAIy8rh6T+7XRgHMiIiIiUmatIgOYOyyO6jZPDpzM4ZZ3fuOnXZr9SeRCnLpoNwyDESNGMH/+fH766Sdq165d4vWYmBjc3NxYunSpY93u3btJSkoiLi7ugtv18PDA39+/xCJ/bv/JbO6YtILle07i6WZl0j1teOzGhlitFrOjiYiIiEgFUy/Ujy8f6kjLmrb/Xhhax6uLd1FUbDc7mojTcepLpMOHD2fWrFl89dVX+Pn5OZ5Tt9lseHl5YbPZGDx4MAkJCQQGBuLv78/IkSOJi4sr88jx8teW7U7lkc83kpVXRITNk2n929Kshs3sWCIiIiJSgUUEePGfYXG8/M1OPkk8zOSf97P+8Bne6duaUH9Ps+OJOA2nnvLNYin9Ku5HH33EwIEDAcjLy+Oxxx7j888/Jz8/n/j4eCZPnvynt8f/kaaBKZ1hGExdfoBXv9+FYUC76GpMuTeGYF8Ps6OJiFRq6pfKn46piHNbtPk4T365hZyCYvw8XHnk+voM6BiNu6tT3xgs8rdUiinfDMModfm9YAfw9PRk0qRJpKWlkZOTw7x58y6qYJfSnS0o5pHZm3hl8bmCvW/7SGY+0EEFu4iIMGnSJKKjo/H09CQ2NpY1a9b8afu5c+fSqFEjPD09ad68Od9++22J17OzsxkxYgQ1a9bEy8uLJk2aMHXq1BJtrrnmGiwWS4ll2LBh5b5vImKOW1tGsHBkZ5rXsJGVX8S/vt1J/MRfWLozBSe+xihyRTh10S7mOHoml15TVrJo83FcrRZe6tGM8T1b6JtOERFhzpw5JCQkMG7cODZs2EDLli2Jj48nNTW11PYrV66kb9++DB48mI0bN9KjRw969OjBtm3bHG0SEhJYvHgxn332GTt37mTUqFGMGDGChQsXltjWkCFDOHHihGN59dVXL+u+isiVVTfEl6+Gd+LVXi0I9vXg4KkcBn+yjmGfrafYrsJdqi5VYVJC4v7T3PbuCnacyCTIx51ZQzpwb4cos2OJiIiTeOONNxgyZAiDBg1yXBH39vbmww8/LLX9W2+9xU033cQTTzxB48aNefHFF2nTpg3vvvuuo83KlSsZMGAA11xzDdHR0QwdOpSWLVuedwXf29ub8PBwx6Lb3EUqH6vVwt3tIln2eBce7FIHdxcr329P4cv1R82OJmIaFe0CnHsU4cPfDnLvB6tJyymgWQ1/Fo7sTPvagWZHExERJ1FQUMD69evp2rWrY53VaqVr164kJiaW+p7ExMQS7QHi4+NLtO/YsSMLFy7k2LFjGIbBsmXL2LNnDzfeeGOJ982cOZPg4GCaNWvGmDFjyM3V3M4ilZWfpxtjujXmHzc1BGDCj7vJLSgyOZWIOZx69Hi5MvIKi3lq3lbmbTwGwB2tazC+Z3M83VxMTiYiIs7k1KlTFBcXExYWVmJ9WFgYu3btKvU9ycnJpbb/fUYYgHfeeYehQ4dSs2ZNXF1dsVqtTJ8+nauvvtrR5p577iEqKoqIiAi2bNnCP//5T3bv3s28efNK/dz8/Hzy8/MdP2dmZl70/oqI+e6Li+LjlYc4euYsH/52kBHX1Tc7ksgVp6K9ijuWfpYHZ6xj27FMXKwWnr65MYM6RV9w5H4REZHy9s4777Bq1SoWLlxIVFQUv/zyC8OHDyciIsJxlX7o0KGO9s2bN6d69epcf/317N+/n7p16563zfHjx/P8889fsX0QkcvDw9WFJ+Ib8ujsTUxdfoA+7WtpYGSpcnR7fBW2ct8pbn3nN7Ydy6SatxszBrfn/s61VbCLiEipgoODcXFxISUlpcT6lJSUC87cEh4e/qftz549y1NPPcUbb7zBrbfeSosWLRgxYgS9e/fm9ddfv2CW2NhYAPbt21fq62PGjCEjI8OxHDlypMz7KSLO5dYWETSvYSM7v4i3l+41O47IFaeivQoyDINpv+wv8fz6opGd6Vg32OxoIiLixNzd3YmJiWHp0qWOdXa7naVLlxIXF1fqe+Li4kq0B/jxxx8d7QsLCyksLMRqLXlK4uLigt1uv2CWTZs2AVC9evVSX/fw8MDf37/EIiIVk9Vq4ambGwMwa3USB05mm5xI5MrS7fFVTE5+Ef/4cgvfbDkBQK82NfnXHc30/LqIiJRJQkICAwYMoG3btrRv356JEyeSk5PDoEGDAOjfvz81atRg/PjxADz66KN06dKFCRMm0L17d2bPns26deuYNm0aAP7+/nTp0oUnnngCLy8voqKiWL58OZ9++ilvvPEGAPv372fWrFncfPPNBAUFsWXLFkaPHs3VV19NixYtzDkQInJFxdUN4vpGoSzdlcori3fxdt/WWC0WXCwWLBZ0p6hUairaq5ADJ7MZ9tl69qRk42q1MO7WJtzbIUq/5EREpMx69+7NyZMnefbZZ0lOTqZVq1YsXrzYMdhcUlJSiavmHTt2ZNasWYwdO5annnqK+vXrs2DBApo1a+ZoM3v2bMaMGUO/fv1IS0sjKiqKf/3rXwwbNgw4d4V/yZIlji8IIiMj6dWrF2PHjr2yOy8ipnqyWyOW7U7l++0pNBy72LHexWrhqvrB9IuN4rpGobhYdW4rlYvFMAzD7BBmy8zMxGazkZGRUWlvn/thezKP/WczWflFhPh5MKVfG9pGazo3ERFnVBX6pStNx1Skcnj5251M++XABV+PsHnSp30t7onVgHXi/MraN6lop3J35MV2gwk/7Gbyz/sBaB8dyLv3tCbU39PkZCIiciGVuV8yi46pSOVxtqCYIrsduwF2u8Gp7Hy+WH+U/6w7wpncQgBC/Tz4fGgH6ob4mpxW5MLK2jdpILpK7HR2PgM+XOMo2O/vVJuZQ2JVsIuIiIhIheXl7oKfpxs2Lzeq+bhTP8yPMTc3JnHM9Uzs3Yo6IT6kZuXTd9oq9mvQOqkEVLRXUhuSznDLO7/x275TeLm58FafVjx7axPcXPRXLiIiIiKVj6ebCz1a12Dug3E0DPNT4S6Vhiq4SsYwDD5NPETv9xI5kZFHnWAfvhrRidtb1TA7moiIiIjIZRfk68GsIbE0Cj9XuPdR4S4VnIr2SiQnv4hRczbx7FfbKSw2uLl5OF+N6ESDMD+zo4mIiIiIXDFBvh7MfOBc4X4yK5/e761i1YHTZscSuSQq2iuJfalZ3D5pBV9tOo6L1cLY7o2ZdE8b/DzdzI4mIiIiInLF/V64N67uz6nsfO6Zvop3lu6l2F7lx+GWCkZFeyXw1aZj3PbuCvalZp8bKXNIBx64qo7mXxcRERGRKi3I14MvH4qjV5ua2A2Y8OMeBny4hpNZ+WZHEykzFe0VWH5RMc8s2MajszeRW1BMx7pBfPPIVbSvrfnXRUREREQAvN1dmXB3S167swWeblZ+23eKm9/+le+3J6PZr6UiUNFeQSWdzuXOKYnMWHUYgJHX1WPG4FhC/DxMTiYiIiIi4nzuahvJwhGdqR/qy8msfB6csZ4HPlnHkbRcs6OJ/CkV7RXQ4m3JdH/nV7YeyyDA242PBrbjsRsb4mLV7fAiIiIiIhfSIMyPhSM6M/zauri5WFi6K5Ub3lzOpGX7OFtQbHY8kVJZDN0TQmZmJjabjYyMDPz9/c2Oc0EFRXb+/d0uPlxxEIA2tQJ49542RAR4mZxMRETKU0XplyoSHVMR+aN9qVk8PX8bqw+mAeDuYqVVZAAd6gYRVyeINlEBeLi6mJxSKrOy9k0q2qkYHfmRtFxGfr6RTUfSARhyVW3+cVMj3Fx0s4SISGVTEfqlikbHVERKYxgG8zceY8IPeziWfrbEazUCvHirTyvaRmu8KLk8yto3uV7BTHKJvt+ezBNzN5OZV4S/pyuv39WSG5uGmx1LRERERKRCs1gs9GxTkzta1+Dw6VwSD5wmcf9pVuw7xbH0s9z9XiKPXt+AEdfV06OoYhoV7U6soMjO+O928tGKQwC0igzgnb6tiQz0NjeYiIiIiEglYrFYiA72ITrYh77ta5GVV8izX21n/sZjvLlkDyv2neLNPq2oocdSxQS6t9pJHT6dw51TVzoK9iFX1eY/D8apYBcRERERucz8PN14s3cr3uzdEh93F9YcSuOmib8wcckeMs4Wmh1PqhhdaXdCizYfZ8y8rWTnF2HzcmPCXS3p2iTM7FgiIiIiIlXKHa1r0qZWNR6ZvYnNR9KZuGQvH/x6kEGdorm/c20CvN3NjihVgK60O5GzBcWMmbeFkZ9vJDu/iHbR1fju0atUsIuIiIiImCQqyIf5D3Xk3Xta0zDMj6z8It7+aR+dX1nGf9YeMTueVAG60u4kdidnMfLzDexJycZigRHX1uPR6+vjqtHhRURERERMZbVauKVFBDc3q87325N5a+lediVn8Y8vt7DxyBnG3doUTzdNDyeXh4p2kxmGwczVSbz49Q7yi+yE+HkwsXcrOtULNjuaiIiIiIj8D6vVQrfm1YlvGs7kn/cx4cc9fL7mCNuPZzLl3phSB6qz2w32n8xm7aEzZOUVMqBjtAp8uSgq2k2UnlvAk19uZfH2ZAC6NAhhwt0tCfb1MDmZiIiIiIhciNVqYcR19WleM4BHZ29ky9EMbnn7V25vVQOLBSycmx7u8Okc1h0+U2Lwun2p2bx6ZwssFk0hJ2Wjot0kaw+l8ejnGzmekYebi4V/3tSI+zvVxqr5H0VEREREKoQuDUJYNKIzD81cz7ZjmXy88lCp7TzdrLSoEcC6w2nMXX+UVrUC6BcbdWXDSoWlov0KKyq2885P+3jnp73YDYgO8ubtvq1pUTPA7GgiIiIiInKRIgO9+WJYR2avSeJkdj6G8f+vBfq40y46kCYR/ri5WJny835eWbyL5xZup0l1f1rXqlbqNg3DYO2hM3yaeIi8wmLui4vm6vrBujpfRalov4KOpOUyas4m1h8+A0DPNjV44fZm+Hror0FEREREpKLydHNhYKfaf9luWJc6bD6SzuLtyTz02QYWjexMiN//PxpbWGzn260n+OC3g2w5muFYv2RnKi0jA3jkunpc1yhUxXsVo2rxClm0+ThPzd9KVl4Rfh6uvHRHM25vVcPsWCIiIiIicoVYLBZeu6sFe1Oz2H8yhxGzNjCwYzTbjmew7VgmW49lkJZTAICHq5WebWri6Wbl8zVJbD6SzuBP1tE0wp/BnWvTvUV1PFxLDmhnGAZ7UrIxMKgT7Iu7q2aiqgwshvG/N3BUTZmZmdhsNjIyMvD39y/XbWflFTJu4XbmbTgGQOtaAbzdpzWRgd7l+jkiIlJ5XM5+qarSMRURZ7IvNZvb3/2NnILi814L9nWnf1w0/WJrEfTfAapPZuXz/m8HmJF4mNz/vifIx52+7WvRu10kSWm5/LA9mSU7UzmWfhYANxcLdUN8aVzdnybV/WkbXY1mNWy4aUppp1HWvklFO5evI9+QdIZRszeRlJaL9b9zrz+iuddFROQvqMAsfzqmIuJsluxIYcz8rYT7e9Kshj9NImw0jfCnaYT/eVfQf3cmp4BZa5L4bNVhTmTkldrGy80FVxcLWXlFpb7WulYA7aIDia0TSJta1S7b9HMnMs59eVDddv40eHKOivaLUN4deVGxnUnL9vP2T3spthvUCPBiYp9WtIsOLIe0IiJS2anALH86piJSmRQV2/lhRwofrzzEmoNpBPm407VxGDc0CaNz/WA8XK0cz8hj14lMdp7IZNORDNYdTiM9t7DEdtxdrbSODKBDnSBa1LRRP9SPmtW8HDNanc7OZ0NSOhuSzlBYZGfwVbX/tAg/ln6W77ae4OstJ9h0JB13Fyuv392S21pGXNbjUVFlZGQQEBCgor0syrMjP3w6h9FzNrEhKR2A21tF8GKPZvh7upVDUhERqQpUYJY/HVMRqazScwvw83TD5S+mjrbbDfadzGbNwTTWHExj1YHTpGbln9fO081K3RBfcguKOXgqp8Rrfp6uPHNLE+6KqekYDK/YbvDD9mTe/+2gY8DtP3oiviEPX1NXA+j9j/WHzzDui7V883j8X/ZNGoiunBiGwdz1R3l+4XZyCorx83DlxR7N6NFag82JiIiIiMjlEeDtXqZ2VquFBmF+NAjz494OURiGwcFTOaw6kMaag6fZlZzFgVM55BXa2X480/G+eqG+xNSqxu6ULDYdSecfX2zhu60neOH2Zqzcf4r3lh/gwH+Le4sF2kcH0r1FdW5sEs60Xw7w4YqDvPb9bpJO5/LSHc0u+Ex9sd3gePpZgn098HL/61v2i4rtrDqQxvI9qXi5uVAz0JvIat5EBnpR3eb1l19i/M5uN0g8cBrDgCYR/gT6/P/xLCy2s+1YBmsOprEvNZs/Xu22WsCCBav13CCDIb4e1Av1pX6YL7WDfUp9zOFIWi6vLN7F11tOYM/PLVNGXWnn73/7fiangKfmb+W7bckAtK8dyBt3t6RmNQ02JyIiF09XhcufjqmIyF8rKrZz5MxZ9qVm4+5qpVXNAGze5+4YLrYbTP/1AG/8uIeCInuJ9/l7ujKwYzT3dogi1N+zxGufrDzE84u2YzfOFfRtoqrh5mJxFNWHT+eyJyWL/SezySu04+fpyuDOtRnUqTY2r5J3KxcW21l7MI2vt55g8bZkx0j7fxTs60HPNjW4M6YmDcL8Lri/h07l8M8vt7D6YJpjXbi/J42r+1FYbLD+8BnOFp4/WGBZWC0QGehNVJAPUYHeRAV5k5qVz8crD1FQZMdigdsaB/D2gM66Pb4s/k5H/vPuVJ74Ygsns/Jxc7GQcENDhl5dp8zf7IiIiPyRCszyp2MqIlI+9qVm8djcLWw+kk6YvwcPdK5D39ha+Hpc+CbuJTtSGPn5xr8sgK0WsP+3OvXzdOX+TrW5tlEoaw+msXL/KdYcTCsx4n41bzdubBKOi4uFI2m5HD1zlmNnzlJQ/P9fKrSsaeP2VjWIiapGo+p+eLi6UGw3+GjFQV7/YTd5hXa83V0I9fPg0Onzr3wHeLvRLjqQ5qWMvG9gYBjnrtYXG+fuFNiXms3e1OxSBwL8Xce6QYzt3oSavmggurK6lI78bEExL3+7kxmrDgPnbhuZ2LsVzWrYLmdUERGpAlRglj8dUxGR8lNUfO4W+t+L4LLYk5LFgo3HyC+yU1Rsp9BuYLcb1KzmRf3/3rZfs5oXP2xP4a2le9iTkl3qdn4v1G9pWZ24OkHnzcxVWGxn2a5Uvlh/lJ92pVJk//9y183FQsNwP4rtsPPEuUcAOtUL4t89WxAZ6E12fpFj8D6LxUK76EDqh/o6BuYrK8MwOJmVz4FTORw+ncPh07kcPp1LbkER93aI4rpGoVgsFo0efzEutiPffCSd0XM2OZ7dGNQpmn/e1OiyTZcgIiJViwrM8qdjKiJScdjtBou3J/PuT/s4ciaXtlHV6Fg3mI71gmgc7l/mIvp0dj4LNh1n+Z6TbD2azpn/GT3fz8OVp7s3pne7SNMGyFPRfhHKerAKi+28+9M+3l22j2K7QZi/B6/f1ZKr6odcwbQiIlLZqcAsfzqmIiJVm2EYHEs/y5ajGaRk5nFTs3DT55Ava9+k0ePLaP/JbBLmbGLz0QwAbmlRnZd6NCvzaI0iIiIiIiJiDovFQs1q3hVysHAV7X/BbjeYseow47/bSV6hHX/Pc1O53d5KU7mJiIiIiIjI5aWi/U8cTz/LP77Ywm/7TgFwVf1gXr2zhem3UYiIiIiIiEjVoKK9FIZh8NWm4zzz1Tay8orwdLMypltj7usQddEjB4qIiIiIiIhcKhXtf3Amp4CxC7bxzdYTALSMDOCNu1tSN8TX5GQiIiIiIiJS1aho/x+/7DnJ898f5GRWPq5WC49cX5+Hr6l73tx/IiIiIiIiIleCivb/8fDMDVg9vKkX6subd7eieU2b2ZFERERERESkCqs0l5AnTZpEdHQ0np6exMbGsmbNmkvazv2davP1yM4q2EVERC7gYvvcuXPn0qhRIzw9PWnevDnffvttidezs7MZMWIENWvWxMvLiyZNmjB16tQSbfLy8hg+fDhBQUH4+vrSq1cvUlJSyn3fREREnE2lKNrnzJlDQkIC48aNY8OGDbRs2ZL4+HhSU1MvajsfDGjLs7c2wdPN5TIlFRERqdguts9duXIlffv2ZfDgwWzcuJEePXrQo0cPtm3b5miTkJDA4sWL+eyzz9i5cyejRo1ixIgRLFy40NFm9OjRLFq0iLlz57J8+XKOHz9Oz549L/v+ioiImM1iGIZhdoi/KzY2lnbt2vHuu+8CYLfbiYyMZOTIkTz55JN/+f7MzExsNhsZGRn4+/tf7rgiIiJ/ypn7pYvtc3v37k1OTg5ff/21Y12HDh1o1aqV42p6s2bN6N27N88884yjTUxMDN26deOll14iIyODkJAQZs2axZ133gnArl27aNy4MYmJiXTo0OEvczvzMRURkaqprH1ThX+mvaCggPXr1zNmzBjHOqvVSteuXUlMTCz1Pfn5+eTn5zt+zsjIAM4dNBEREbP93h852/fql9LnJiYmkpCQUGJdfHw8CxYscPzcsWNHFi5cyP33309ERAQ///wze/bs4c033wRg/fr1FBYW0rVrV8d7GjVqRK1atS5YtKuvFxERZ1fW/r7CF+2nTp2iuLiYsLCwEuvDwsLYtWtXqe8ZP348zz///HnrIyMjL0tGERGRS5GVlYXN5jxjrFxKn5ucnFxq++TkZMfP77zzDkOHDqVmzZq4urpitVqZPn06V199tWMb7u7uBAQE/Ol2/pf6ehERqSj+qr+v8EX7pRgzZkyJb/3T09OJiooiKSnJqU6OKrLMzEwiIyM5cuSIbkMsJzqml4eOa/nTMf37DMMgKyuLiIgIs6NcEe+88w6rVq1i4cKFREVF8csvvzB8+HAiIiJKXF2/GOrrLz/9W788dFzLn47p5aHj+veVtb+v8EV7cHAwLi4u540gm5KSQnh4eKnv8fDwwMPD47z1NptN/8OVM39/fx3TcqZjennouJY/HdO/xxkLy0vpc8PDw/+0/dmzZ3nqqaeYP38+3bt3B6BFixZs2rSJ119/na5duxIeHk5BQQHp6eklrrarr3cO+rd+eei4lj8d08tDx/XvKUt/X+FHj3d3dycmJoalS5c61tntdpYuXUpcXJyJyURERCqXS+lz4+LiSrQH+PHHHx3tCwsLKSwsxGoteUri4uKC3W4Hzg1K5+bmVmI7u3fvJikpSX29iIhUehX+SjucmypmwIABtG3blvbt2zNx4kRycnIYNGiQ2dFEREQqlb/qc/v370+NGjUYP348AI8++ihdunRhwoQJdO/endmzZ7Nu3TqmTZsGnLtC06VLF5544gm8vLyIiopi+fLlfPrpp7zxxhvAuasQgwcPJiEhgcDAQPz9/Rk5ciRxcXFlGjleRESkIqsURXvv3r05efIkzz77LMnJybRq1YrFixefN/DNhXh4eDBu3LhSb6OTS6NjWv50TC8PHdfyp2Nauf1Vn5uUlFTiqnnHjh2ZNWsWY8eO5amnnqJ+/fosWLCAZs2aOdrMnj2bMWPG0K9fP9LS0oiKiuJf//oXw4YNc7R58803sVqt9OrVi/z8fOLj45k8eXKZc+v/y/KnY3p56LiWPx3Ty0PH9cqpFPO0i4iIiIiIiFRGFf6ZdhEREREREZHKSkW7iIiIiIiIiJNS0S4iIiIiIiLipFS0i4iIiIiIiDipKl+0T5o0iejoaDw9PYmNjWXNmjVmR6owxo8fT7t27fDz8yM0NJQePXqwe/fuEm3y8vIYPnw4QUFB+Pr60qtXL1JSUkxKXPH8+9//xmKxMGrUKMc6HdNLc+zYMe69916CgoLw8vq/9u4upKk+jgP493FzUwm2Stq0mq0IrDQwxZoGXShECUVBEIwwgsKapAWVFHYTS6Gr6qIoyC6yRkKv3oTMEgTzZaG1XtRQsAunRCwLJWP7PXeH9pTPi551zh6/HxjoOf+LH9+LffnhPEtFbm4uenp6lPsigrNnzyIjIwOpqakoLS3F4OCghhPrWyQSQW1tLZxOJ1JTU7Fq1SqcO3cOPz7blJmSXrDr54Z9H3/se3Ww69XHvtcJmcd8Pp+YTCa5ceOGvH79Wg4ePChWq1XGxsa0Hi0hbN26VRoaGiQYDEpvb69s375dHA6HfP36VTlTUVEhy5cvF7/fLz09PbJp0yYpKirScOrE0dXVJStWrJD169dLVVWVcp2Z/nefPn2SrKws2b9/v3R2dsrQ0JA8efJE3r9/r5ypr68Xi8UiDx48kL6+PtmxY4c4nU6ZmprScHL98nq9snjxYmlubpbh4WFpamqSBQsWyMWLF5UzzJT0gF0/d+z7+GLfq4NdHx/se32Y10t7YWGheDwe5fdIJCKZmZlSV1en4VSJa3x8XABIW1ubiIiEw2FJTk6WpqYm5czbt28FgHR0dGg1ZkL48uWLrF69WlpaWmTLli1KiTPT2Tl16pRs3rx5xvvRaFTsdrtcuHBBuRYOh8VsNsudO3d+x4gJp6ysTA4cOBBzbffu3eJ2u0WEmZJ+sOvVx75XD/tePez6+GDf68O8/Xj89PQ0AoEASktLlWtJSUkoLS1FR0eHhpMlrs+fPwMAFi1aBAAIBAL4/v17TMbZ2dlwOBzM+B94PB6UlZXFZAcw09l69OgRCgoKsGfPHixZsgR5eXm4fv26cn94eBihUCgmV4vFgo0bNzLXGRQVFcHv92NgYAAA0NfXh/b2dmzbtg0AMyV9YNfHB/tePex79bDr44N9rw9GrQfQysePHxGJRGCz2WKu22w2vHv3TqOpElc0GkV1dTWKi4uRk5MDAAiFQjCZTLBarTFnbTYbQqGQBlMmBp/PhxcvXqC7u/une8x0doaGhnDlyhUcP34cp0+fRnd3N44ePQqTyYTy8nIlu1+9HzDXX6upqcHExASys7NhMBgQiUTg9XrhdrsBgJmSLrDr1ce+Vw/7Xl3s+vhg3+vDvF3aSV0ejwfBYBDt7e1aj5LQPnz4gKqqKrS0tCAlJUXrcf43otEoCgoKcP78eQBAXl4egsEgrl69ivLyco2nS0x3795FY2Mjbt++jXXr1qG3txfV1dXIzMxkpkT/Y+x7dbDv1ceujw/2vT7M24/Hp6enw2Aw/PQUzrGxMdjtdo2mSkyVlZVobm7G06dPsWzZMuW63W7H9PQ0wuFwzHlmPLNAIIDx8XFs2LABRqMRRqMRbW1tuHTpEoxGI2w2GzOdhYyMDKxduzbm2po1azAyMgIASnZ8P/j3Tpw4gZqaGuzduxe5ubnYt28fjh07hrq6OgDMlPSBXa8u9r162PfqY9fHB/teH+bt0m4ymZCfnw+/369ci0aj8Pv9cLlcGk6WOEQElZWVuH//PlpbW+F0OmPu5+fnIzk5OSbj/v5+jIyMMOMZlJSU4NWrV+jt7VVeBQUFcLvdys/M9L8rLi7+6euJBgYGkJWVBQBwOp2w2+0xuU5MTKCzs5O5zmBychJJSbEVYjAYEI1GATBT0gd2vTrY9+pj36uPXR8f7Hud0PpJeFry+XxiNpvl5s2b8ubNGzl06JBYrVYJhUJaj5YQDh8+LBaLRZ49eyajo6PKa3JyUjlTUVEhDodDWltbpaenR1wul7hcLg2nTjw/Pk1WhJnORldXlxiNRvF6vTI4OCiNjY2SlpYmt27dUs7U19eL1WqVhw8fysuXL2Xnzp38upK/UV5eLkuXLlW+AubevXuSnp4uJ0+eVM4wU9IDdv3cse9/D/b93LDr44N9rw/zemkXEbl8+bI4HA4xmUxSWFgoz58/13qkhAHgl6+GhgblzNTUlBw5ckQWLlwoaWlpsmvXLhkdHdVu6AT01xJnprPz+PFjycnJEbPZLNnZ2XLt2rWY+9FoVGpra8Vms4nZbJaSkhLp7+/XaFr9m5iYkKqqKnE4HJKSkiIrV66UM2fOyLdv35QzzJT0gl0/N+z734N9P3fsevWx7/XhDxERbf7GT0RERERERER/Z97+TzsRERERERGR3nFpJyIiIiIiItIpLu1EREREREREOsWlnYiIiIiIiEinuLQTERERERER6RSXdiIiIiIiIiKd4tJOREREREREpFNc2omIiIiIiIh0iks7ERERERERkU5xaSciIiIiIiLSKS7tRERERERERDrFpZ2IiIiIiIhIp/4EeCyHoyEZ6LkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "\n", "fig, ax = plt.subplots(ncols=2, figsize=(12,4))\n", "\n", "ax[0].plot(angles);\n", "ax[0].set_ylabel('angle'); \n", "ax[0].set_title('Filter rotation');\n", "ax[0].set_xlim([0, 99]); \n", "ax[0].set_ylim([0, 100])\n", "\n", "ax[1].plot(losses); \n", "ax[1].set_title('Image loss')\n", "ax[1].set_xlim([0, 99]); \n", "ax[1].set_ylim([0.08, 0.11])\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## See also\n", "\n", "- [polarizer plugin](https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_bsdfs.html#linear-polarizer-material-polarizer)" ] } ], "metadata": { "file_extension": ".py", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" }, "metadata": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" } }, "mimetype": "text/x-python", "name": "python", "npconvert_exporter": "python", "pygments_lexer": "ipython3", "version": 3 }, "nbformat": 4, "nbformat_minor": 4 }