{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# RealNVP for the LSUN bedroom dataset\n", "\n", "> In this post, we are take a look at an application for RealNVP. This is a homework assignment of lecture \"Probabilistic Deep Learning with Tensorflow 2\" from Imperial College London.\n", "\n", "- toc: true \n", "- badges: true\n", "- comments: true\n", "- author: Chanseok Kang\n", "- categories: [Python, Coursera, Tensorflow_probability, ICL]\n", "- image: images/realnvp_lsun.png" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "import tensorflow_probability as tfp\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "tfd = tfp.distributions\n", "tfpl = tfp.layers\n", "tfb = tfp.bijectors\n", "\n", "plt.rcParams['figure.figsize'] = (10, 6)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensorflow Version: 2.5.0\n", "Tensorflow Probability Version: 0.13.0\n" ] } ], "source": [ "print(\"Tensorflow Version: \", tf.__version__)\n", "print(\"Tensorflow Probability Version: \", tfp.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \"bedroom \n", " \"bedroom \n", " \"bedroom " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The LSUN Bedroom Dataset\n", "\n", "In this post, you will use a subset of the [LSUN dataset](https://www.yf.io/p/lsun). This is a large-scale image dataset with 10 scene and 20 object categories. A subset of the LSUN bedroom dataset has been provided, and has already been downsampled and preprocessed into smaller, fixed-size images.\n", "\n", "* F. Yu, A. Seff, Y. Zhang, S. Song, T. Funkhouser and J. Xia. \"LSUN: Construction of a Large-scale Image Dataset using Deep Learning with Humans in the Loop\". [arXiv:1506.03365](https://arxiv.org/abs/1506.03365), 10 Jun 2015 \n", "\n", "Our goal is to develop the RealNVP normalising flow architecture using bijector subclassing, and use it to train a generative model of the LSUN bedroom data subset. For full details on the RealNVP model, refer to the original paper:\n", "\n", "* L. Dinh, J. Sohl-Dickstein and S. Bengio. \"Density estimation using Real NVP\". [arXiv:1605.08803](https://arxiv.org/abs/1605.08803), 27 Feb 2017." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load the dataset\n", "\n", "The following functions will be useful for loading and preprocessing the dataset. The subset you will use for this assignment consists of 10,000 training images, 1000 validation images and 1000 test images.\n", "\n", "The images have been downsampled to 32 x 32 x 3 in order to simplify the training process.\n", "\n", "> Note: Since the dataset is too large for maintaining in github. Please refer to the official homework assignment page in Coursera." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Functions for loading and preprocessing the images\n", "\n", "def load_image(img):\n", " img = tf.image.random_flip_left_right(img)\n", " return img, img\n", "\n", "def load_dataset(split):\n", " train_list_ds = tf.data.Dataset.from_tensor_slices(np.load('./dataset/lsun/{}.npy'.format(split)))\n", " train_ds = train_list_ds.map(load_image)\n", " return train_ds" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Load the training, validation and testing datasets splits\n", "\n", "train_ds = load_dataset('train')\n", "val_ds = load_dataset('val')\n", "test_ds = load_dataset('test')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Shuffle the datasets\n", "\n", "shuffle_buffer_size = 1000\n", "train_ds = train_ds.shuffle(shuffle_buffer_size)\n", "val_ds = val_ds.shuffle(shuffle_buffer_size)\n", "test_ds = test_ds.shuffle(shuffle_buffer_size)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Display a few examples\n", "\n", "n_img = 4\n", "f, axs = plt.subplots(n_img, n_img, figsize=(14, 14))\n", "\n", "for k, image in enumerate(train_ds.take(n_img**2)):\n", " i = k // n_img\n", " j = k % n_img\n", " axs[i, j].imshow(image[0])\n", " axs[i, j].axis('off')\n", "f.subplots_adjust(wspace=0.01, hspace=0.03)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Batch the Dataset objects\n", "\n", "batch_size = 64\n", "train_ds = train_ds.batch(batch_size)\n", "val_ds = val_ds.batch(batch_size)\n", "test_ds = test_ds.batch(batch_size)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Affine coupling layer\n", "\n", "We will begin the development of the RealNVP architecture with the core bijector that is called the _affine coupling layer_. This bijector can be described as follows: suppose that $x$ is a $D$-dimensional input, and let $dFigure 1. Spatial checkerboard mask (left) and channel-wise mask (right). From the original paper." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Custom model for log-scale and shift\n", "\n", "Here, I built a custom model for the shift and log-scale parameters that are used in the affine coupling layer bijector. In total, the network should have 14 layers (including the `Input` layer)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from tensorflow.keras import Input\n", "from tensorflow.keras.models import Model\n", "from tensorflow.keras.layers import Conv2D, BatchNormalization\n", "from tensorflow.keras.regularizers import l2\n", "from tensorflow.keras.optimizers import Adam" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def get_conv_resnet(input_shape, filters):\n", " \"\"\"\n", " This function should build a CNN ResNet model according to the above specification,\n", " using the functional API. The function takes input_shape as an argument, which should be\n", " used to specify the shape in the Input layer, as well as a filters argument, which\n", " should be used to specify the number of filters in (some of) the convolutional layers.\n", " Your function should return the model.\n", " \"\"\"\n", " h0 = Input(shape=input_shape)\n", " \n", " # 1st Skip connection\n", " y = Conv2D(filters=filters, kernel_size=3, padding='SAME', activation='relu', kernel_regularizer=l2(l=5e-5))(h0)\n", " y = BatchNormalization()(y)\n", " y = Conv2D(filters=input_shape[-1], kernel_size=3, padding='SAME', activation='relu', kernel_regularizer=l2(l=5e-5))(y)\n", " y = BatchNormalization()(y)\n", " h1 = tf.math.add(y, h0)\n", " \n", " # 2nd skip connection\n", " y = Conv2D(filters=filters, kernel_size=3, padding='SAME', activation='relu', kernel_regularizer=l2(l=5e-5))(h1)\n", " y = BatchNormalization()(y)\n", " y = Conv2D(filters=input_shape[-1], kernel_size=3, padding='SAME', activation='relu', kernel_regularizer=l2(l=5e-5))(y)\n", " y = BatchNormalization()(y)\n", " y = tf.math.add(y, h1)\n", " h2 = Conv2D(filters=2 * input_shape[-1], kernel_size=3, padding='SAME', activation='linear', kernel_regularizer=l2(l=5e-5))(y)\n", " shift, log_scale = tf.split(h2, num_or_size_splits=2, axis=-1)\n", " y = tf.math.tanh(log_scale)\n", " model = Model(inputs=h0, outputs=[shift, y])\n", " return model" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"model\"\n", "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_1 (InputLayer) [(None, 32, 32, 3)] 0 \n", "__________________________________________________________________________________________________\n", "conv2d (Conv2D) (None, 32, 32, 32) 896 input_1[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization (BatchNorma (None, 32, 32, 32) 128 conv2d[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_1 (Conv2D) (None, 32, 32, 3) 867 batch_normalization[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_1 (BatchNor (None, 32, 32, 3) 12 conv2d_1[0][0] \n", "__________________________________________________________________________________________________\n", "tf.math.add (TFOpLambda) (None, 32, 32, 3) 0 batch_normalization_1[0][0] \n", " input_1[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_2 (Conv2D) (None, 32, 32, 32) 896 tf.math.add[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_2 (BatchNor (None, 32, 32, 32) 128 conv2d_2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_3 (Conv2D) (None, 32, 32, 3) 867 batch_normalization_2[0][0] \n", "__________________________________________________________________________________________________\n", "batch_normalization_3 (BatchNor (None, 32, 32, 3) 12 conv2d_3[0][0] \n", "__________________________________________________________________________________________________\n", "tf.math.add_1 (TFOpLambda) (None, 32, 32, 3) 0 batch_normalization_3[0][0] \n", " tf.math.add[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_4 (Conv2D) (None, 32, 32, 6) 168 tf.math.add_1[0][0] \n", "__________________________________________________________________________________________________\n", "tf.split (TFOpLambda) [(None, 32, 32, 3), 0 conv2d_4[0][0] \n", "__________________________________________________________________________________________________\n", "tf.math.tanh (TFOpLambda) (None, 32, 32, 3) 0 tf.split[0][1] \n", "==================================================================================================\n", "Total params: 3,974\n", "Trainable params: 3,834\n", "Non-trainable params: 140\n", "__________________________________________________________________________________________________\n" ] } ], "source": [ "# Test your function and print the model summary\n", "\n", "conv_resnet = get_conv_resnet((32, 32, 3), 32)\n", "conv_resnet.summary()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Plot the model graph\n", "\n", "tf.keras.utils.plot_model(conv_resnet, show_layer_names=False, rankdir='LR')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 32, 32, 3)\n", "(1, 32, 32, 3)\n" ] } ], "source": [ "# Check the output shapes are as expected\n", "\n", "print(conv_resnet(tf.random.normal((1, 32, 32, 3)))[0].shape)\n", "print(conv_resnet(tf.random.normal((1, 32, 32, 3)))[1].shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Binary masks\n", "\n", "Now that you have a shift and log-scale model built, we will now implement the affine coupling layer. We will first need functions to create the binary masks $b$ as described above. The following function creates the spatial 'checkerboard' mask.\n", "\n", "It takes a rank-2 `shape` as input, which correspond to the `height` and `width` dimensions, as well as an `orientation` argument (an integer equal to `0` or `1`) that determines which way round the zeros and ones are entered into the Tensor." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Function to create the checkerboard mask\n", "\n", "def checkerboard_binary_mask(shape, orientation=0):\n", " height, width = shape[0], shape[1]\n", " height_range = tf.range(height)\n", " width_range = tf.range(width)\n", " height_odd_inx = tf.cast(tf.math.mod(height_range, 2), dtype=tf.bool)\n", " width_odd_inx = tf.cast(tf.math.mod(width_range, 2), dtype=tf.bool)\n", " odd_rows = tf.tile(tf.expand_dims(height_odd_inx, -1), [1, width])\n", " odd_cols = tf.tile(tf.expand_dims(width_odd_inx, 0), [height, 1])\n", " checkerboard_mask = tf.math.logical_xor(odd_rows, odd_cols)\n", " if orientation == 1:\n", " checkerboard_mask = tf.math.logical_not(checkerboard_mask)\n", " return tf.cast(tf.expand_dims(checkerboard_mask, -1), tf.float32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function creates a rank-3 Tensor to mask the `height`, `width` and `channels` dimensions of the input. We can take a look at this checkerboard mask for some example inputs below. In order to make the Tensors easier to inspect, we will squeeze out the single channel dimension (which is always 1 for this mask)." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Run the checkerboard_binary_mask function to see an example\n", "# NB: we squeeze the shape for easier viewing. The full shape is (4, 4, 1)\n", "\n", "tf.squeeze(checkerboard_binary_mask((4, 4), orientation=0))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The `orientation` should be 0 or 1, and determines which way round the binary entries are\n", "\n", "tf.squeeze(checkerboard_binary_mask((4, 4), orientation=1))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def channel_binary_mask(num_channels, orientation=0):\n", " \"\"\"\n", " This function takes an integer num_channels and orientation (0 or 1) as\n", " arguments. It should create a channel-wise binary mask with \n", " dtype=tf.float32, according to the above specification.\n", " The function should then return the binary mask.\n", " \"\"\"\n", " mask_list = []\n", "\n", " for i in range(num_channels):\n", " if i < num_channels // 2:\n", " mask_list.append(orientation)\n", " else:\n", " mask_list.append(not orientation)\n", "\n", " mask = tf.cast(tf.constant(np.array([[mask_list]])),dtype=tf.float32)\n", " return mask" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Run your function to see an example channel-wise binary mask\n", "\n", "channel_binary_mask(6, orientation=0)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "def forward(x, b, shift_and_log_scale_fn):\n", " \"\"\"\n", " This function takes the input Tensor x, binary mask b and callable\n", " shift_and_log_scale_fn as arguments.\n", " This function should implement the forward transformation in equation (5)\n", " and return the output Tensor y, which will have the same shape as x\n", " \"\"\"\n", " x_b = x * b\n", " shift, log_scale = shift_and_log_scale_fn(x_b)\n", " y = x_b + (1 - b) * (x * tf.math.exp(log_scale) + shift)\n", " return y\n", "\n", "def inverse(y, b, shift_and_log_scale_fn):\n", " \"\"\"\n", " This function takes the input Tensor x, binary mask b and callable\n", " shift_and_log_scale_fn as arguments.\n", " This function should implement the forward transformation in equation (6)\n", " and return the output Tensor y, which will have the same shape as x\n", " \"\"\"\n", " y_b = y * b\n", " shift, log_scale = shift_and_log_scale_fn(y_b)\n", " x = y_b + (1 - b) * (y - shift) * tf.math.exp(-log_scale)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The new bijector class also requires the `log_det_jacobian` methods to be implemented. Recall that the log of the Jacobian determinant of the forward transformation is given by $\\sum_{j}s(x_{1:d})_j$, where $s$ is the log-scale function of the affine coupling layer. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def forward_log_det_jacobian(x, b, shift_and_log_scale_fn):\n", " \"\"\"\n", " This function takes the input Tensor x, binary mask b and callable\n", " shift_and_log_scale_fn as arguments.\n", " This function should compute and return the log of the Jacobian determinant \n", " of the forward transformation in equation (5)\n", " \"\"\"\n", " x_b = x * b\n", " shift, log_scale = shift_and_log_scale_fn(x_b)\n", " return tf.reduce_sum(log_scale * (1 - b), [1, 2, 3])\n", " \n", "\n", "def inverse_log_det_jacobian(y, b, shift_and_log_scale_fn):\n", " \"\"\"\n", " This function takes the input Tensor y, binary mask b and callable\n", " shift_and_log_scale_fn as arguments.\n", " This function should compute and return the log of the Jacobian determinant \n", " of the forward transformation in equation (6)\n", " \"\"\"\n", " y_b = y * b\n", " shift, log_scale = shift_and_log_scale_fn(y_b)\n", " return tf.reduce_sum(-log_scale * (1 - b), [1, 2, 3])" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "class AffineCouplingLayer(tfb.Bijector):\n", " \"\"\"\n", " Class to implement the affine coupling layer.\n", " Complete the __init__ and _get_mask methods according to the instructions above.\n", " \"\"\"\n", "\n", " def __init__(self, shift_and_log_scale_fn, mask_type, orientation, **kwargs):\n", " \"\"\"\n", " The class initialiser takes the shift_and_log_scale_fn callable, mask_type,\n", " orientation and possibly extra keywords arguments. It should call the \n", " base class initialiser, passing any extra keyword arguments along. \n", " It should also set the required arguments as class attributes.\n", " \"\"\"\n", " super(AffineCouplingLayer, self).__init__(**kwargs, forward_min_event_ndims=3)\n", " self.shift_and_log_scale_fn = shift_and_log_scale_fn\n", " self.mask_type = mask_type\n", " self.orientation = orientation\n", " \n", " \n", " def _get_mask(self, shape):\n", " \"\"\"\n", " This internal method should use the binary mask functions above to compute\n", " and return the binary mask, according to the arguments passed in to the\n", " initialiser.\n", " \"\"\"\n", " height, width, channels = shape[-3:]\n", " \n", " if self.mask_type == 'checkerboard' :\n", " mask = checkerboard_binary_mask((height, width), self.orientation)\n", " elif self.mask_type == 'channel':\n", " mask = channel_binary_mask(channels, self.orientation)\n", " return mask\n", "\n", " def _forward(self, x):\n", " b = self._get_mask(x.shape)\n", " return forward(x, b, self.shift_and_log_scale_fn)\n", "\n", " def _inverse(self, y):\n", " b = self._get_mask(y.shape)\n", " return inverse(y, b, self.shift_and_log_scale_fn)\n", "\n", " def _forward_log_det_jacobian(self, x):\n", " b = self._get_mask(x.shape)\n", " return forward_log_det_jacobian(x, b, self.shift_and_log_scale_fn)\n", "\n", " def _inverse_log_det_jacobian(self, y):\n", " b = self._get_mask(y.shape)\n", " return inverse_log_det_jacobian(y, b, self.shift_and_log_scale_fn)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# Test your function by creating an instance of the AffineCouplingLayer class\n", "\n", "affine_coupling_layer = AffineCouplingLayer(conv_resnet, 'channel', orientation=1, \n", " name='affine_coupling_layer')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TensorShape([16, 32, 32, 3])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The following should return a Tensor of the same shape as the input\n", "\n", "affine_coupling_layer.forward(tf.random.normal((16, 32, 32, 3))).shape" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TensorShape([16])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The following should compute a log_det_jacobian for each event in the batch\n", "\n", "affine_coupling_layer.forward_log_det_jacobian(tf.random.normal((16, 32, 32, 3)), event_ndims=3).shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Combining the affine coupling layers\n", "\n", "In the affine coupling layer, part of the input remains unchanged in the transformation $(5)$. In order to allow transformation of all of the input, several coupling layers are composed, with the orientation of the mask being reversed in subsequent layers.\n", "\n", "![Coupling layers](image/alternating_masks.png)\n", "
Figure 2. RealNVP alternates the orientation of masks from one affine coupling layer to the next. From the original paper.
\n", "\n", "Our model design will be similar to the original architecture; we will compose three affine coupling layers with checkerboard masking, followed by a batch normalization bijector (`tfb.BatchNormalization` is a built-in bijector), followed by a squeezing operation, followed by three more affine coupling layers with channel-wise masking and a final batch normalization bijector. \n", "\n", "The squeezing operation divides the spatial dimensions into 2x2 squares, and reshapes a Tensor of shape `(H, W, C)` into a Tensor of shape `(H // 2, W // 2, 4 * C)` as shown in Figure 1.\n", "\n", "The squeezing operation is also a bijective operation, and has been provided for you in the class below." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "# Bijector class for the squeezing operation\n", "\n", "class Squeeze(tfb.Bijector):\n", " \n", " def __init__(self, name='Squeeze', **kwargs):\n", " super(Squeeze, self).__init__(forward_min_event_ndims=3, is_constant_jacobian=True, \n", " name=name, **kwargs)\n", "\n", " def _forward(self, x):\n", " input_shape = x.shape\n", " height, width, channels = input_shape[-3:]\n", " y = tfb.Reshape((height // 2, 2, width // 2, 2, channels), event_shape_in=(height, width, channels))(x)\n", " y = tfb.Transpose(perm=[0, 2, 1, 3, 4])(y)\n", " y = tfb.Reshape((height // 2, width // 2, 4 * channels),\n", " event_shape_in=(height // 2, width // 2, 2, 2, channels))(y)\n", " return y\n", "\n", " def _inverse(self, y):\n", " input_shape = y.shape\n", " height, width, channels = input_shape[-3:]\n", " x = tfb.Reshape((height, width, 2, 2, channels // 4), event_shape_in=(height, width, channels))(y)\n", " x = tfb.Transpose(perm=[0, 2, 1, 3, 4])(x)\n", " x = tfb.Reshape((2 * height, 2 * width, channels // 4),\n", " event_shape_in=(height, 2, width, 2, channels // 4))(x)\n", " return x\n", "\n", " def _forward_log_det_jacobian(self, x):\n", " return tf.constant(0., x.dtype)\n", "\n", " def _inverse_log_det_jacobian(self, y):\n", " return tf.constant(0., y.dtype)\n", "\n", " def _forward_event_shape_tensor(self, input_shape):\n", " height, width, channels = input_shape[-3], input_shape[-2], input_shape[-1]\n", " return height // 2, width // 2, 4 * channels\n", "\n", " def _inverse_event_shape_tensor(self, output_shape):\n", " height, width, channels = output_shape[-3], output_shape[-2], output_shape[-1]\n", " return height * 2, width * 2, channels // 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see the effect of the squeezing operation on some example inputs in the cells below. In the forward transformation, each spatial dimension is halved, whilst the channel dimension is multiplied by 4. The opposite happens in the inverse transformation." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TensorShape([10, 16, 16, 12])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test the Squeeze bijector\n", "\n", "squeeze = Squeeze()\n", "squeeze(tf.ones((10, 32, 32, 3))).shape" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TensorShape([10, 8, 8, 24])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test the inverse operation\n", "\n", "squeeze.inverse(tf.ones((10, 4, 4, 96))).shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now construct a block of coupling layers according to the architecture described above. Our Chained bijector has specific structure,\n", "\n", "* Three `AffineCouplingLayer` bijectors with `\"checkerboard\"` masking with orientations `0, 1, 0` respectively\n", "* A `BatchNormalization` bijector\n", "* A `Squeeze` bijector\n", "* Three more `AffineCouplingLayer` bijectors with `\"channel\"` masking with orientations `0, 1, 0` respectively\n", "* Another `BatchNormalization` bijector\n", "\n", "The function takes the following arguments:\n", "* `shift_and_log_scale_fns`: a list or tuple of six conv_resnet models\n", " * The first three models in this list are used in the three coupling layers with checkerboard masking\n", " * The last three models in this list are used in the three coupling layers with channel masking\n", "* `squeeze`: an instance of the `Squeeze` bijector" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "def realnvp_block(shift_and_log_scale_fns, squeeze):\n", " \"\"\"\n", " This function takes a list or tuple of six conv_resnet models, and an \n", " instance of the Squeeze bijector.\n", " The function should construct the chain of bijectors described above,\n", " using the conv_resnet models in the coupling layers.\n", " The function should then return the chained bijector.\n", " \"\"\"\n", " bijectors = []\n", " orientations = [0, 1, 0]\n", " for i in range(3):\n", " bijectors.append(AffineCouplingLayer(shift_and_log_scale_fn=shift_and_log_scale_fns[i], \n", " mask_type='checkerboard',\n", " orientation=orientations[i]))\n", " bijectors.append(tfb.BatchNormalization()) \n", " bijectors.append(squeeze)\n", " \n", " for i in range(3, 6):\n", " bijectors.append(AffineCouplingLayer(shift_and_log_scale_fn=shift_and_log_scale_fns[i],\n", " mask_type='channel',\n", " orientation=orientations[i % 3]))\n", " bijectors.append(tfb.BatchNormalization())\n", " \n", " flow_bijector = tfb.Chain(list(reversed(bijectors[:-1])))\n", " return flow_bijector" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "# Run your function to create an instance of the bijector\n", "\n", "checkerboard_fns = []\n", "for _ in range(3):\n", " checkerboard_fns.append(get_conv_resnet((32, 32, 3), 512))\n", "channel_fns = []\n", "for _ in range(3):\n", " channel_fns.append(get_conv_resnet((16, 16, 12), 512))\n", " \n", "block = realnvp_block(checkerboard_fns + channel_fns, squeeze)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TensorShape([10, 16, 16, 12])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test the bijector on a dummy input\n", "\n", "block.forward(tf.random.normal((10, 32, 32, 3))).shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiscale architecture\n", "\n", "The final component of the RealNVP is the multiscale architecture. The squeeze operation reduces the spatial dimensions but increases the channel dimensions. After one of the blocks of coupling-squeeze-coupling that you have implemented above, half of the dimensions are factored out as latent variables, while the other half is further processed through subsequent layers. This results in latent variables that represent different scales of features in the model.\n", "\n", "![Multiscale architecture](image/multiscale.png)\n", "
Figure 3. RealNVP creates latent variables at different scales by factoring out half of the dimensions at each scale. From the original paper.
\n", "\n", "The final scale does not use the squeezing operation, and instead applies four affine coupling layers with alternating checkerboard masks.\n", "\n", "The multiscale architecture for two latent variable scales is implemented for you in the following bijector." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# Bijector to implement the multiscale architecture\n", "\n", "class RealNVPMultiScale(tfb.Bijector):\n", " \n", " def __init__(self, **kwargs):\n", " super(RealNVPMultiScale, self).__init__(forward_min_event_ndims=3, **kwargs)\n", "\n", " # First level\n", " shape1 = (32, 32, 3) # Input shape\n", " shape2 = (16, 16, 12) # Shape after the squeeze operation\n", " shape3 = (16, 16, 6) # Shape after factoring out the latent variable\n", " self.conv_resnet1 = get_conv_resnet(shape1, 64)\n", " self.conv_resnet2 = get_conv_resnet(shape1, 64)\n", " self.conv_resnet3 = get_conv_resnet(shape1, 64)\n", " self.conv_resnet4 = get_conv_resnet(shape2, 128)\n", " self.conv_resnet5 = get_conv_resnet(shape2, 128)\n", " self.conv_resnet6 = get_conv_resnet(shape2, 128)\n", " self.squeeze = Squeeze()\n", " self.block1 = realnvp_block([self.conv_resnet1, self.conv_resnet2,\n", " self.conv_resnet3, self.conv_resnet4,\n", " self.conv_resnet5, self.conv_resnet6], self.squeeze)\n", "\n", " # Second level\n", " self.conv_resnet7 = get_conv_resnet(shape3, 128)\n", " self.conv_resnet8 = get_conv_resnet(shape3, 128)\n", " self.conv_resnet9 = get_conv_resnet(shape3, 128)\n", " self.conv_resnet10 = get_conv_resnet(shape3, 128)\n", " self.coupling_layer1 = AffineCouplingLayer(self.conv_resnet7, 'checkerboard', 0)\n", " self.coupling_layer2 = AffineCouplingLayer(self.conv_resnet8, 'checkerboard', 1)\n", " self.coupling_layer3 = AffineCouplingLayer(self.conv_resnet9, 'checkerboard', 0)\n", " self.coupling_layer4 = AffineCouplingLayer(self.conv_resnet10, 'checkerboard', 1)\n", " self.block2 = tfb.Chain([self.coupling_layer4, self.coupling_layer3,\n", " self.coupling_layer2, self.coupling_layer1])\n", "\n", " def _forward(self, x):\n", " h1 = self.block1.forward(x)\n", " z1, h2 = tf.split(h1, 2, axis=-1)\n", " z2 = self.block2.forward(h2)\n", " return tf.concat([z1, z2], axis=-1)\n", " \n", " def _inverse(self, y):\n", " z1, z2 = tf.split(y, 2, axis=-1)\n", " h2 = self.block2.inverse(z2)\n", " h1 = tf.concat([z1, h2], axis=-1)\n", " return self.block1.inverse(h1)\n", "\n", " def _forward_log_det_jacobian(self, x):\n", " log_det1 = self.block1.forward_log_det_jacobian(x, event_ndims=3)\n", " h1 = self.block1.forward(x)\n", " _, h2 = tf.split(h1, 2, axis=-1)\n", " log_det2 = self.block2.forward_log_det_jacobian(h2, event_ndims=3)\n", " return log_det1 + log_det2\n", "\n", " def _inverse_log_det_jacobian(self, y):\n", " z1, z2 = tf.split(y, 2, axis=-1)\n", " h2 = self.block2.inverse(z2)\n", " log_det2 = self.block2.inverse_log_det_jacobian(z2, event_ndims=3)\n", " h1 = tf.concat([z1, h2], axis=-1)\n", " log_det1 = self.block1.inverse_log_det_jacobian(h1, event_ndims=3)\n", " return log_det1 + log_det2\n", "\n", " def _forward_event_shape_tensor(self, input_shape):\n", " height, width, channels = input_shape[-3], input_shape[-2], input_shape[-1]\n", " return height // 4, width // 4, 16 * channels\n", "\n", " def _inverse_event_shape_tensor(self, output_shape):\n", " height, width, channels = output_shape[-3], output_shape[-2], output_shape[-1]\n", " return 4 * height, 4 * width, channels // 16" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "# Create an instance of the multiscale architecture\n", "\n", "multiscale_bijector = RealNVPMultiScale()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data preprocessing bijector\n", "\n", "We will also preprocess the image data before sending it through the RealNVP model. To do this, for a Tensor $x$ of pixel values in $[0, 1]^D$, we transform $x$ according to the following:\n", "\n", "$$\n", "T(x) = \\text{logit}\\left(\\alpha + (1 - 2\\alpha)x\\right),\\tag{7}\n", "$$\n", "\n", "where $\\alpha$ is a parameter, and the logit function is the inverse of the sigmoid function, and is given by \n", "\n", "$$\n", "\\text{logit}(p) = \\log (p) - \\log (1 - p).\n", "$$" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def get_preprocess_bijector(alpha):\n", " \"\"\"\n", " This function should create a chained bijector that computes the \n", " transformation T in equation (7) above.\n", " This can be computed using in-built bijectors from the bijectors module.\n", " Your function should then return the chained bijector.\n", " \"\"\"\n", " return tfb.Chain([tfb.Invert(tfb.Sigmoid()), tfb.Shift(shift=alpha), tfb.Scale(scale=(1 - 2 * alpha))])" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "# Create an instance of the preprocess bijector\n", "\n", "preprocess = get_preprocess_bijector(0.05)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train the RealNVP model\n", "\n", "Finally, we will use our RealNVP model to train\n", "\n", "We will use the following model class to help with the training process." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# Helper class for training\n", "\n", "class RealNVPModel(Model):\n", "\n", " def __init__(self, **kwargs):\n", " super(RealNVPModel, self).__init__(**kwargs)\n", " self.preprocess = get_preprocess_bijector(0.05)\n", " self.realnvp_multiscale = RealNVPMultiScale()\n", " self.bijector = tfb.Chain([self.realnvp_multiscale, self.preprocess])\n", " \n", " def build(self, input_shape):\n", " output_shape = self.bijector(tf.expand_dims(tf.zeros(input_shape[1:]), axis=0)).shape\n", " self.base = tfd.Independent(tfd.Normal(loc=tf.zeros(output_shape[1:]), scale=1.),\n", " reinterpreted_batch_ndims=3)\n", " self._bijector_variables = (\n", " list(self.bijector.variables))\n", " self.flow = tfd.TransformedDistribution(\n", " distribution=self.base,\n", " bijector=tfb.Invert(self.bijector),\n", " )\n", " super(RealNVPModel, self).build(input_shape)\n", "\n", " def call(self, inputs, training=None, **kwargs):\n", " return self.flow\n", "\n", " def sample(self, batch_size):\n", " sample = self.base.sample(batch_size)\n", " return self.bijector.inverse(sample)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# Create an instance of the RealNVPModel class\n", "\n", "realnvp_model = RealNVPModel()\n", "realnvp_model.build((1, 32, 32, 3))" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total trainable variables:\n", "315156\n" ] } ], "source": [ "# Compute the number of variables in the model\n", "\n", "print(\"Total trainable variables:\")\n", "print(sum([np.prod(v.shape) for v in realnvp_model.trainable_variables]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the model's `call` method returns the `TransformedDistribution` object. Also, we have set up our datasets to return the input image twice as a 2-tuple. This is so we can train our model with negative log-likelihood as normal." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# Define the negative log-likelihood loss function\n", "\n", "def nll(y_true, y_pred):\n", " return -y_pred.log_prob(y_true)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is recommended to use the GPU accelerator hardware on Colab to train this model, as it can take some time to train. Note that it is not required to train the model in order to pass this assignment. For optimal results, a larger model should be trained for longer." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "938/938 [==============================] - 97s 94ms/step - loss: -2471.9236 - val_loss: -5264.1875\n", "Epoch 2/20\n", "938/938 [==============================] - 86s 91ms/step - loss: -5968.5244 - val_loss: -6436.4800\n", "Epoch 3/20\n", "938/938 [==============================] - 85s 91ms/step - loss: -6787.8242 - val_loss: -7112.7544\n", "Epoch 4/20\n", "938/938 [==============================] - 87s 92ms/step - loss: -7243.9448 - val_loss: -7462.9360\n", "Epoch 5/20\n", "938/938 [==============================] - 86s 92ms/step - loss: -7573.0698 - val_loss: -7738.2793\n", "Epoch 6/20\n", "938/938 [==============================] - 86s 92ms/step - loss: -7801.1133 - val_loss: -7942.5913\n", "Epoch 7/20\n", "938/938 [==============================] - 86s 91ms/step - loss: -7978.1836 - val_loss: -8082.8511\n", "Epoch 8/20\n", "938/938 [==============================] - 86s 92ms/step - loss: -8132.2954 - val_loss: -8124.5166\n", "Epoch 9/20\n", "938/938 [==============================] - 88s 94ms/step - loss: -8242.4521 - val_loss: -8312.3848\n", "Epoch 10/20\n", "938/938 [==============================] - 89s 95ms/step - loss: -8339.6230 - val_loss: -8414.3115\n", "Epoch 11/20\n", "938/938 [==============================] - 90s 96ms/step - loss: -8124.6929 - val_loss: -8372.0430\n", "Epoch 12/20\n", "938/938 [==============================] - 89s 95ms/step - loss: -8453.0684 - val_loss: -8446.0449\n", "Epoch 13/20\n", "938/938 [==============================] - 87s 92ms/step - loss: -8527.1289 - val_loss: -8574.1846\n", "Epoch 14/20\n", "938/938 [==============================] - 86s 92ms/step - loss: -8586.6006 - val_loss: -8650.7441\n", "Epoch 15/20\n", "938/938 [==============================] - 88s 94ms/step - loss: -8639.4971 - val_loss: -8638.4111\n", "Epoch 16/20\n", "938/938 [==============================] - 86s 91ms/step - loss: -8680.0918 - val_loss: -8715.3389\n", "Epoch 17/20\n", "938/938 [==============================] - 89s 94ms/step - loss: -8709.9248 - val_loss: -8777.8477\n", "Epoch 18/20\n", "938/938 [==============================] - 87s 92ms/step - loss: -8758.4932 - val_loss: -8764.7441\n", "Epoch 19/20\n", "938/938 [==============================] - 86s 92ms/step - loss: -8789.6807 - val_loss: -8831.9355\n", "Epoch 20/20\n", "938/938 [==============================] - 87s 92ms/step - loss: -8811.7500 - val_loss: -8797.5312\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Compile and train the model\n", "\n", "realnvp_model.compile(loss=nll, optimizer=Adam())\n", "realnvp_model.fit(train_ds, validation_data=val_ds, epochs=20)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "157/157 [==============================] - 3s 19ms/step - loss: -8791.1699\n" ] }, { "data": { "text/plain": [ "-8791.169921875" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Evaluate the model\n", "\n", "realnvp_model.evaluate(test_ds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate some samples" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/chanseok/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py:2183: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n", " warnings.warn('`layer.apply` is deprecated and '\n" ] } ], "source": [ "# Sample from the model\n", "\n", "samples = realnvp_model.sample(8).numpy()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAGKCAYAAAB6smy1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAACY20lEQVR4nO39Z7StyUGei9bMOa4c99o5h845SWqpWxKKICyiCbaxjQPHhoPB+Mg22AcwYGwZYQ4YhA1YAglJKKfuVkd12jmHlXOaOYfzA8Mdd9RTe2HNH3fcMd7n59vVX6j41Zqjnu3pdrtGCCGEEEIIIb5TvP+/fgAhhBBCCCHE/3+jTYUQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNET/tv9x//+pU+hGqpdL2L5jeUNzIfHUlZWrdex7PhwEvP56XnME7EA5rm1GubxdATzco6fJxiz913bmwUs2zeQwLy0VcXceJoY50olzNu+NuaXZpYwv/PuU1Z28OAJLHvPnXdhvsxNbU4vXMM83eD6XZq9jnnQeDDPRO16X1lcwbIDmTjmq3N5vnaf3R+NMeZHfvQn+WH+F2VTwfHgNy0sXzHcvsGu3de2ctNY1lO7hfnK6ctcPsANltvguqs0NzG/eo3H28j+KSsbHrgDy/aN7cJ8c4n7dyLN7Vgp898+Yqko5vlKB/Nk0i6/sriOZYf6eCzXqmzLy2Ycz1Lmdw2FeeptVLnPRKMhK6tXG1g2EuNrb25XMA9EuPwjD/z4bcfDH3/+v2NlhLw8l+bynMdgyihtOcrG7HowxphSkesi6Zjvp+eXMR8b5bmhVuU+lUjaddfIc5tn+7iPrK5uYx6ANjfGmFyO3zUaD2Ner/C60d9v9/GlNZ4/YlleZ/PlMuZDjnU8v8Hr8sF9PFe0OzzeAl57TihWeOykYlwvq47xkElyH3jq0e+57Xi46/gufNhohP+33Xt3Yx4I2pfZKHC9Hb/jMObxIPedkRF+t0qR+0g87hhvZa7r/kH7+o0mr49DQxm+doX71PjoIOYbmzxXxB1zxfY6f7/F4F1XVrlsAtYSY4yZmeH11Bfgfry6yt/Mu/aMYp4vc12G4XtpeZbX/ECIr9HqcJuaALfHv/5nn8SOrV8qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNETt7U/xaMO40OXT76PjmYxr7Zsc0bCYbZYzbE5IxrlRy1W/+an4Y0xpuPh64TCbNQoVGyzQCrBNolW24d5zPHsWw4rh9fDppHowDDmR8Jsqlnbst/pvfv2YdlKg5+922GzQsrH5obBbBBzv2G7R6LNVotSzc53jfP7bzr6TH9/DPOKwyiyE13DdVF22J/yuVXMM3EYP/C+xhiTiE5gHj/FpqQvfP5/Yr5nPI25t81j/O1PslVks2735VCIDTtbBbZGTE6OYH51gW0VYcc01fCwYSYa4vYtNe08m3ZYnjp8T7+P+0C+zO3n9fJYLjfZtBF3zIttnz2uQmG+ti/M/T7Jsdko8dy3Ix6uiysLbFY6MjmO+bXpOSubyPJa0nD8Hazb5fovt3g+OnZkD+Y35hcwTztMMpWGPYfHIvyMJShrjDGZLPfBzZLDSBhkm1DBYT9qFtmCt12zrYSxMM8H1+e2+Fl8bDbczLPRaryf2/Uy9AFjjAl1uM5SA/Yc4m2wzWnDZZBqcf3OrHD/3Yn0BL9b0/GNUq7wutVt2X1tcGgAy3qD/C1WKXP9bxd4rk4FeL7rwrxjjDEjg9xnWwG7/0Qdc2YZvguNMSYWcVjPinwd4/iGKLKs0RjHXJEv230tHOT+VyhzX3PVy+Imj8GBrMNGWuN3jfr5nQp5ew4fiHHbOQSDxl9j09XyChutXOiXCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0xG3tTx44yW+MMZ0KW1pKjsP2yYhtq2j7+dqZIOe5DhsU4h4+yd82fPI92OXT/M04m2TCrXUrK9b5GkMsYjAVw7aoeITtB/m6wy61zbaIipcNArtG+qysWOZ9ZMJhedreLmIecZg2on1pzIMdrpxS3tGu0A3ydbZC9Kf5nXJ5NpMkut+Z7SZu2Hj1xtwLmK/NLmF+D5hnFhbZvHDfiSOYtyNswprYcwLz9c1pzMezacx9KX7XY0m7T/nCbHNqt3mctL1sripfPs95II35ZJvbsdLhfhKCsV9tcd8JdhxGEYexJOkwMZUc803Ez+Ubhue/cNvuyyWXPaXI1q1yg61BfRFuj50IpLieIxvcLnUWzJnhAduY4jLD7B5jw45ncgjzsJcXpUqXl779jvIrea7TuB/mLy/3qajheinXuV38Xda05BoOy1OF57uGl9dCb9u+zhIvMSYc4rYu1vhZDu3m+WlgiA1gps7rycI6W3NKuQ0r8wb5GeM1vkbOIRPqcxiwduKOh+7HvLTCFsBAmNdtA1aqaD/PseGQw9oY4vGQiPK3RcNhrsx6uG92QzxnJEN2+Vqb2yUW4LHWdcyB/XGurwVHHzQVbndfgN+1P2LnuTqPnYTDKLZd4u+ZsQxfZ87Rv4fCfB2fj79Tkx77eba3eDAvn3kN83bD8b3ksJG60C8VQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOiJ29qfvGAcMcaYUp21CUnHaf5q0z7N73dc25scxDzdYAvR5jaf/Pc2+frrdT7JHnSccO/67FP7ScfJ/HyV6yUVYptBKcxGpH4W75jtFlsLymu2CcMYY15b3rIyb5stBO/7wPdgvn7mIuahNFsI5q5fwLzmMJZ4HYaGXbv3W1m3m8Oyqxts6knEuL6uL21jvhPF+gzmF6/ewPzISBrzl16zLUcbi2xUm1/kd3vPW+/EfJOHiek6jGVXF9hMstfRNxsDaSvzVtkyUehwX/N3uP4bXYe9JcB/+2j6+BlDbR7LlabdH3xtts5sV7m/xoM8x206rB9BH19nC2wdxhgT6rBlaK5sm4O6NX72MxdvYl7NcTvtPXwS83sexPivqVTs+cUYY1bL/A6jdc63SvZcPTY0wPd0GAZjDnudJ5LGfHfCNk4ZY8xrq7btzxhj0hHuyx2v3WdruQUs64vyPZtVRz0WeQ0LennZrofZyBPusHWqE7Ln8KThCi42eUzFI3ztapufcebaFcwT6X7MQx2et2oe+/qxJs+VK0V+xniQ55X1Krf1TqSTPB+trjqMi3V+3ib0qVGH+cgf4z413s99wSEtMkNRh+nTx3OyafJ4C0RiVhYxPDfW2pwnQ9x3CjUu3yzzN4Q3yKYrX9th9gM7XtextlWhjYwxJh7icZKr8rNHAo51I8rtN5ZKY76+Yfex+sYalt2//yDfs8kfD44u40S/VAghhBBCCCF6QpsKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED1x24PajTYfMtw3xieJFxyH3Prg4E0kwwfxQoYPVc0X+HBNOsivsLCRwzzm+CfaOwE+ZOVt2ochPfEUlk15+VBZg1/JhD18SKfk5YNisTAfAson+dD01VdfsLKBNNf7N7/+Ncwn9vKhnmatgPl60z7sZIwxgQ73pfkNvk4+94aVBeNZLNt1HADdbnLFN0vf2UHtjQb3nQfufADzRoP77FRs2MrmV7kvvOuh+zB/+bXTmA+neWyWgqOYB2r8d4WLq1yn//VT/8HKOh0+5Ld3YjfmDz/6Dn4W7jqm2rYP/xljTMjPY3arxuMw7LPruOnjA3EJLx9Pq9e5T8X8XL7U4HZdnpvGvOPjw4VdEB20HIcFk1Gul1KJ66VZ5gPfO3Hj+izmG9MzmA888DbMG237OgXHWPN5+Fm3fLwO7InyO3sDXHers9cxjw2NYZ5btw9lB3w8pvr4UcytZV43Mxme17frfP3hfj60u1HkOgv57fVko8hzls/xLbBR43woy3muzOMh0NrE/KZDJDE52mdlLUe/j3p53XQdJs+EuO/txOSuvZjXtvmwryfAh68HMvb3hTfJa5/p8GH+TpjnzGCLn2W7yu2eCXE7BuLcNyMg62n7eY4d5GXDlOuOQ81dzuN9LPepl3OYV7rc7tG2ffh8o8z1m4rxYC46vn98Hq7HuuHyjZpDfhLl9T0ctPvs6P6jWPbaOf52WC3xvHL84D7MXeiXCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0xG3tT+vrS5hXymxAyS/PYe7ZDRaYbTZefPuNNzGf6rdtD8YYk0ykMR9IOIwxcS7frvM/O7/atBUFwRabEqpe1hl4Gmzf6IbZ1hHwsHFgZouvs3SL2+m73v8BK9s7Mo5lL19jG40/wCYqX4gtNYGOQ3XlMPUUNtnuUY3YdRNyWGpKDgNJcWsR83aYzS87MZJgi8Vahe0iiTAPr24mbWXf9W7u36Eo3zMIlg1jjIkmhjBvNB114WMbWDe3hfmug3daWXmdywazI5gXt/OYL+a47wQ73EemdrHdIu0w/jQ9tiEj1nGM+xL3tYTDMlR09M1ug8eyx8fjIdhlG0gOXikZ4vkmMDKJeTTO9e6Ps1FkJ9YXb2K++8AxzN948RXMWyGYB1tcby/MzGO+du0a5k+/+12YH57gPnX1xg3Mx1vcT/wwT+2btO1uxhiTGeC86+c59ubKBubtBpvZVvNsE2pV2bC3BTKdrsOYN7PBY3wgxWtYvc1zbDrK6/L0jG3RMsaYqI/nuULNfvhQnevLwHxrjDGdEn+DLFa+s/WhvMnXe/bZb2GejXB7PfK2p6xsa+kKlt11lOfAQJfrLVfmuTHRZNvQInUSY0zAz+OnBebK4cF+LLvt4flrMMH1Uunw3Dg3zca2jp/bcSDJc28naButMhn+u3u5wfVYKbPFLFflcdVpcT67yt8Ufh+Pt0LV/gaaGuB6vzC9gvmuIf52WGvxt54L/VIhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ64rf1pYZ2NAOU1Pj1+zz33YD6ctk/z+6N8onxqjO1E5SLbVbwVfsauwyzQKLMJo9LiqsiE7esU+eC/qZe2MS8V+YT/xBibMGotfvZwx7bXGGPMW9/+Ti4Pppp6h9/z1NHDmGf62SDQqhUx3yyxLSIb4/s2vJzHvLbNwB9J8bX9bIqJhHZh7m2zvWsnthv8bt0mmxoqXm6vaNfuD6Eglw13uZ4PHjmA+c3rr2Je7/DfD7wdHlcBP9d1sGX38Wub/IzhOI/Ny222pKxMsz2uf3gv5qbmGPsh2+JhjDFxqIJSnusl5WMDSbHMprGIY77Z7vA8NzHosKE55GlDEfv61S7f02vY/NLMDGIeCXDf24lUks1k3/jMpzD3R9gucvWabW8hq5IxxlQLbLCqFHhe/1sf+C7Mt8psc3rpmW9i/nO//MuYt5u2iem5N89i2f0TbIZpeLmPnHRYtJp+rvfVRTYoLRf5XVMBez6rOp6lnZvF3Dc4hnmrznPyjellzMfSPGZnl/lbI1azjYeBNK+nUYctKxLle0Ydc+JObN5iw95QiMdXrcjz5vTpN6zsnrfxGh/18bVzpIszxmzMsilyo+lYQ7u8Vl66yea3O+6w++ylTYc5LM39eDvA1qZoiO1Pq+s8roaybLVrdjj3NOx1/MoCzzdDWZ6fSl3Or1+x29QYY/IVrt/D+3jNm1vneS7otef8X/nt/4ZlPVX+Xlne4sXnXUN7MHehXyqEEEIIIYQQPaFNhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoie0KZCCCGEEEII0RO3tT9NL7IpYGRwAPN4jI0p11bs0/mjaT7hv11h88L29auYZ7JsFIl0+TqFskOv0mWzTzNuW3Bc9qC2J4h5JsX53DLborwhrptYmt/V77AP0atmomyLyFf4/cccBqOcn59x7xgbNZa22AAxlGHL0MKq3WeO9LGJ6uY624QGHDaQZogNDTsR8rBVp+jhOvK3uA+2/fZevi/M+/t6ja/h6bCtY8/eQ5hfO8t1VKixUWM4wxaYz37u61Y2MsmWrXvuexLzYJf768deeBPzRCyLea3O7REHq40xxpTgXWtFtnsYL5uV/F5up0KN83SC+1qlzc+ejHN7rMNgjgS5HlsBnofDfjbCbLnmxB24dOES5n1DbPC7eoYNQjSd7p7sw7LXttj0EvVzexnDc8Ar33oG8+QAz7HNKs9flbY99nOb/IznWMJk+sI81nJbPMYTjvWh7rCB+ao8h7xx+oqV3XXnUSy75DCzdes81syefRinHSakC5evYd6p8vjspO1x1d5i+9Lew2zKS/p4HV/cXMN8Jw7tZxNWOvEo5nHH33RDWfv7Kp3kMT27xWarSimH+cwsG8Laa9OYT+2Zwjzu5/lrCWxd+/bw+jAzy+11aN8E5svL3Bd2DfH36No2t6/Py9fZCtpzxfgot+l6gcemr8PjoVjjT+2WwybYMTzG22U2hnkGh63sx/72D2PZjSqvA3syPPe1/Nz3XOiXCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0xG3tT+UKn57fWl/FvB2+F/Pp5det7Kd/5r9g2XvecRfmuZt8z+99+h2YH5rai3krdx3zSIrNQkEQauRbjmqrsM2pm2A7weQIm0lubbKtoy/ARoBCmU/zR3221aWT5PccTfK1yx1+12qJrRMbmBoz2s82l4898yrmY9m4lc0n7MwYY/ZOjmI+PsUGkuUFtk7sRLPD5pJAk+u/WGOzQ9drj6t8hw1hnQrbHipNtky4DFW+0AjmQxEuH8raNgljjPne99ummmN3P4BlkyF+p0Akjflw+vOYDwxOYt6fYrPSpsNm5O/a7+qNcp9qVwuYrxW530+MpjGvtdjQlHTIiqoOg1y4ZduHWgGePyIOM0vJYajqc5i+duIzH/9zzM9euoH5r/7H/wfz3MqylR08dQLLumxxoTBb537+F34B82ScG2Bqig0oWzmekxMxe94cntyDZYdTacy/9vVvYf6WR3hcRSLcZzsOM9bmGq9LybY9P42leX04Os5rWLnJ3wiVGbY5GUcdLF06g/nQMM/tkYhtSYtluQ8kG2z76Trm3IPJ72w8tEpsBEoZ1zrAfbBbsVfRxXVee9ZXbNuSMcaUHUbIvZODmK91eb5rlrhPeQzPsUd22dd3SPpMJszvVK/xejriMOmV29yOoQ7r1hqOdi/B+OkbYRPV3Q473cZGCXOPQ7BXdthOr188jfkDb2GjYiFnP/tfvHkey/7A93wQ8+dePIP53UcOYu5Cv1QIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoidua39aWV3HfP9jD2H+zWe/gfnc2oKV3fuW+7Hs1noO83SU7USxLNsq1lbnMd+osKFhJMqWnXzFtigkgmyHCPazOcTbYf1BKxDFfGyQLQftMOeDMbZemIBdfmFmBotW+9gKscth8FnaZMvBiGEr0YXVNcyP7tuPeb1tX8fXYYuGP8FGmOtXz2HeCbE9ZSc8LX631RwbgVJeVj5UuvZ75NaXsGypwfeMdNnukXLYW8KBCObpPu6zr515A/Ps6JSVdar8nq/N8xi8aw9buZ5+73sxLznmoWqb6yDi57zhseeQsEPLUfNznxqNOv4OE+L6jTR5nFQ7fJ1omI0w62CFSgTYntL28/wU6XA/XS2ywWcnri2xRS06yKagH/6hD2P+y7/2USu7fO4Mls0OcX8tFdnw849/5qcxd7V7vs7ttXSTrYGdqG3g6k9k+dolttEMJHgdKJX4GUsbNzEvlHl+DHe4fYteu/+szbO1qVbnvjM5xOtGxWHw2Zznejywn22Ng2nuy+GYvbbtm+S5b36V+2k6wvUbTnP/3Ym+DK8rN/LcN4tL9neRMcYslGwj0H0PsQWr7DASth0myqLD5uhtct9s+m3LljHGpKLcZ3MFu6/F4/yMHg+3bX7ZtsEZY0zBx9+AE6NsaBo4cAzzSoPbPTpo17G3w2tJ1/Ht1qrwd87wGBvh6luOdX90F18/zzauZ5+zDXILM9y/Zu66D/NrrzyP+be++heYf/f7/jbm+qVCCCGEEEII0RPaVAghhBBCCCF6QpsKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED1xW/vTgw88jHl9q4B5q82XOzgyZmVfuXAZy546yWaYtQU+JV8vshkm3+BT+8Egm5jKHbYfJCL2Ow0MsvGiVmSzVN84G44CDgtRN+UwnJRtK4QxxkQCtoHEGGOqedtkMr6f63fXCNslrjnqfXx0GPN4ig1VQ122GLUabCxpl7asLJxiw85oNo35f/nTT2P+yP13YL4TtRabMAYT/M43brDFYjBhm3y6ATaO9Ie53goF7gtrS3zPZpPrOZ7g67R8PJZzYKsottic9vsf+23M7/3Y72Jezq1ivlJkI88Bh2lss8VjfzBpm5XyhueDYJvng5UyX3siyfUVSPG4ClfZptMMsBElEbPbyR/OYFmfY6zlmjx+skk2vO3EhSVur5SPzTMLObYQ3XXX3VZWcxhahrNcP74Y5+U8jwefw3o2EOE5+Zmvncc8EbbvG7r7USxrarxW+R1Wv5nrV/g6HjaE7Z3gd1prcPtm4rZN59I1tjO1G7y2hRNsHoxHuK0nJnnuTUd5/CwscvsN9dn2nVKN+0w6zP3eOOxpQxm2SO3E6Ru8VkZ9PMfcKvCcvLJkj5/MEs+BoTb/XTiQ5HcYc9i0rmyytWhiOI15uc52r0TE/hbperh/+ztsxapW+dqZGK+/m1s8l45EuQ/uPn4X5nmYk6se7iMBHz/L8CRbm5YdY7nuMBhmQnzfmGN+ev+jtk31yjCPHbMwjfGjJ45jnoo4xo8D/VIhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ64rf3p/jvY1LC8uYl5oJrDfHHNPoU+lmFrxNWzFzFPh9lgsb7JJ/8zSdsOYYwxdZ/DgBLk68eztkUhFWXb0maO7RODHbY/RPvYIuUL8rNXumwE8LbZ9uKBU/ueItdX22E52D3Cz1iosVkh0OU6SDlsK0PZDcxfvnHTyjzTbCYJgT3GGGN+6MPvx7xhvjPbTbPKBo5vvvQa5senRjAvg0UqFuKhuFbkevbX2E7U6LIZplFhI8+Nee47A2m2TOQatpmjts0Wjw/+wA9gnt9cwfy3Pvo7mD/1rqcwL3fYnBEPspkjkk5Zmd/LJrvMwB7Mt85wW4fibGIydbbmNB1jPODhd2r77Dmn5eiPTcc8EfLytbdqbKHZiTcvXsI8v8VGsfICt3t2xDamTI31YdnVDdsKZ4wxHoe9ZnGV16rMJo+H8d1TmIccf36LpbJWVl7nZ3n1TYdBKmRbmIwxJpa2r22MMZ0K29b6s1xnET8//DaYZyJBfpYBR73s2cUWwOU1Nl2FfQ5jW4Hns1CAx3Lba8/hnib3u/Ucj/H+NH+DrFX5GXdifm4O8+0yj9MXv/E85kNTu63s7G9+FMs+/ra3Y/5j3/8uzDuG1+fTLz+LeWWALVK1JrdXoWN/c4QdY6fh5zkwEeNnrLXZCpX0ct4O8PWbdb6+Cdv9wVPhtc1l3jNVnp8CMe5rvhzPiSO7pjB3mcRuLNvvtHucv7mGJ3ltyy/OYN4P9tbboV8qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKInrjtQW2T4MMlnvVFzJuOQ16DCfvATCrDB4BKjoN15SYfULl50T7Qa4wxsaFRzqN88Guw/wjmAWMffJ1e4oNfrTIfALp6kw8jR9f5EOeuU/dhng6HMS9W+dBUwGc/T7CPD9alonxtT5APC8Ydh0QDQd6nFrb48GI0bh+eNcaYO4/ut7JW1z7AZowxUT/3jWKN27o/9Z0d1F5c4cOd4a7jwHA/H3Jv1uyDljEQAhhjTDDC7RIJj2PeLvJBsY01vk5pmw+KvfnmNcz7++wDw+lhfpZQg8dDIceHz//dR34B806I5QoRwwf0mj5+VwNygWSG2yjgEBdMTR3APBri8hUfT7G+Oo+f7TL3pZDfvn6pw4fyw14eD/kqX9vXcRxc3IERxyHOYJ371OQdd2Ie8drv9uYFFnZ42yyamFngNSke5Pof2G3PL8YYU9vm8ZMZ5EOPjYI9ty9VuP5HUjzXXbw5g/k+x9jveLjdgwG+78w6r1d9SVjfg3zYu91yHMyt8z3jEf4WaLa4vKfDB2KbjsO2xaq9dm5u8DobNHzPppfnFdPkcbITd586inkqzt9Rp44cx3x3v/3tMjnJ886bz38L85if+/35869j7otzu2cG+HthYXoB831j9lqQd4ggAj5eT1tVXp9P7rWFDsYY489OYp4Z4APGNcc3TXHL/vZMpwewrLfOa9jKJksUsgkWn4R27cN8zwi3x/Q8z3Opkr2e9E9wn2k6xAGxKZ4T9+znenehXyqEEEIIIYQQPaFNhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoie0KZCCCGEEEII0RO3tT95HYaShodP5ye7bDOa3rTtE+MDfKp+aoRNMvlVtgeNHjqMeTDKzzi1/xDmiS4bUOJR2xRwwGHF8gbZ7uHvcjVfXFjGfI/DuOCLsq1ifZ1tK+Wabb0Yy/AzeoNs2XAIRUyxw2YSb4etCMEQl4822OZST9tmmWCHy1br3HbpKO+Z51bYMLYTYQ+3o8tu0W7weIgk7DYIg93HGGN8yQzm/RHuC+1EAvOBRBrzrp/Hw/jkHszLbdu4VC+xuaXcYDtTt8LteGt2CfPJUZ4rKlHuy7UqzxX1esvKdvvZUtP18fwxkOaxX3KYrvLrPMZLUI/GGNNtsmWnRXNui00jJsJ9wNfh8t0ol9+Ja+evYl5v8riLtNhCtPuQbc3JxHi+uLXAdqa+VBrzco3r8/rly5h3PWz+GR/g8Vav2X0qHuayF+e4X+7btxfzGws8HvaMs9lwtcBz7+TYCOYbObs/eBxmmEqVr52KONpjiMdstFPBfLHK4zAZ43x53Z5zCjm+tj/A7VGbX8d8u8pjcydWb0xj/uD3/jDm1cq3MR/fa8+9l19+Gcum+tN8jRHOc3We789e4bFc5KXNjAyzNS+Wtb9d3vzmN7Fs2zFnHhthu9mLr5/HPJd/DfMD9zyG+dDoBOZxMGM+/8XPYtnXX+NneeTuOzCfdRjb9jjaqWl4zB46wEanCzftvnf9Fe4ze44cw9w1Nk9Ps3HqEMv89EuFEEIIIYQQoje0qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXritvanSo0tCPkltlIUWZxhEiHbXLLWZdtNLMyn5EeOsuVpz94pvmkmjXGzycaB1NB+zIcyfVZWafBerNtmVVL/CNsGntjN96zUHNagDldwNMR2i4l+2+jUdTR5pcgGn47DChUL8LMUKrYNxRhj4mG26VTr/Oz9SbsuyzUPlk162VpQb7E5JBvm8juxlGdr1PQ1NkH8wHd/F+bVum1d6QS433tq/KxrDi1HpMvtUm/weGsWHLYXw+0S8NoWmI0693t/i40xlQ73hb3jbBQxoTjGHYddKxCMYR712n3z6uwtLDsxbNvHjDHm0195FvOxIdsSZ4wxw1OTmIcNj5OKj/tB2GO3d5mHg4kEuQ80Y1yPkSD3jZ3oy0xh7nW0ywsvsqWl27bv3/RzPcQc80ityeWHMvzOpSAbyPwOg+HZqzOYT4CZzA8GHGOMGd/Hc+/py9wHOy0eV60QG8iWHetyKMrrzMriHNyU75kM85oXi/E4CXW5/GaJ561gl8eDN8wWKZ/Hnrc6fh6DwSD3mZUttpHdt5vbbyfabbbRfeXPP4356IGDmC/OXLPLHtyNZV3zzksOu9mB3WzXfOp978e82+F2+dxXv4X5w/fZffzU/hNY1pTYRnfvHVwvv/iv/hXm/WNcN9dfeQXz096zmE9N2MalrMMq9xPfy2v7N57jOe6hu09h/uY5bqdbV69jvv/EccwHwPp4/NTdWHZjjW2hoTD3pWySTXwu9EuFEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXritvana+cuYD4zN495tFPHPDNgGyJy2zks+8Cjj/KzXOdT8p0Qm14ijv1SIGOf8DfGGF+QT7gvFm37QX+C7RvJNJswPB62q+RbbFboVNiKsFZmE9D26gLnGdums2uAbRpLqxuYH3LYtQp1tmiFvA7zjKM9In7Oq13b3BQ0bCrarDqMU35+Fn+ELR07sXuI+1rjkccwv3TxDb5/1DY1uCwbHS9bbSYH2JRUaPB1miXuO+s5rlNPm+04gZDdLiWHFatcY/vTSIrNUpsNbq+EwyKVq3F5r9nGfLFplx/LsvFicWsL80fvZftG1cPtVNhaxLyZSGPebXM7bcG7xgI8dmoOa1CMH9HMrK3zf9gBb4tNPuUG3/++U1x30T573py5dRXLDo6wTctT5/7q9bMBbijrGg85zFcXX8b8xB13Wdny6jKWTfSNYV4tn8N8aJTLex3msGKTbY3G8PgZmpqysqWrbLJbznNbm1fZdhOO8RgPB/nZn3zXuzGPp3itfalu9/0De9JYNgdruDHGDIOFzxhjKl42Hu5E3Mvr/NDIXsyTfrZS5Ru21m140LZQGmPMy2f4G+2D73sK81yd7WbdOTaHnblyE/OU48txaytnZf1Rrs+Dp+7EPB3lee2Bx5/EPBblevfGuO+0HN9dIZiTO1VeSy5fWMX80RNsWnvz9GnMo2FW+NUNz1sjfWyza3uGrOzmRbZcmZD9/WGMMceH7GsYY8xinr8RXOiXCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0xG3tT7E4n9rPrbIpYK3Nhoj+gbSVTRw8gGWXFmcxjybYfuCt8Un+zNBuzMuFAuZ9u7l8vWrbEhoeR7V12HpSYTmBifv55H8pwif/Aw0+hZ8amsB8IGaf8m91eR85NcI2IW+QDRWtPFsRik2HWcHjqBuHscTXta9TdNiBgo6tcaXNz+7tsPllJ7bKbAvx1dme4w/t4/s3bRtLx8/2sTh3ETM9y1ahpKPv1NqOSmqyDWS7xnavLLTjzUV+/9IGW8nKI2yZGEjys+fbbJIJBbhP1brc7qmwXb4R4MEZ8/O11xwmmUaZ7WmeMD9Lu87zUCfIZrKIz26njQK3XTLAbVdwmJBSrgG0A8WawxxWcxhmImwuaVVt01YgzuOhXWHTmMt4NRrluToQZlPf5ib3Za+Pn+fCOduwMjrJ4z4d43pOptkq15/m9ookuR4HA7xej+1hY1Y2Zvf91CO2zcoYY6Yvsn2x2WKlWMwxNgMRhxUqwO10Y5ZNWlmwS1Uc6+9gP1uAtiv8LMmQQ5O2A6Eot0sf2P6MMaaQYyvXx37nt6zsqXeyzenYqaOYr2+zibPtsKTFo2zB2zPE5ecctjsfGOHqQa7/+XU2KK2EuC/c9dA9fJ01/h6NO8xK03NrmI9BM62UeC4dS/MzVms5zCeHef6o+Hn9iUR53Th9kU1xnardTuUKr1V7d/F8s+5oj9H0/54tU79UCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOgJbSqEEEIIIYQQPaFNhRBCCCGEEKInbmt/Sqf5xLonwifTn7ybT+f7QrYVYXX5FpatRPhkurfKppHskTswr+bYrtL1syHD22FzVbVr24lSAbYKdMFYZIwxEcOGo64jr5dzmNfaXD6/zuaZhXnbnHFglM074TjXe5KFS2azwnaJINSXMcaU/Q4Li6POKg3b5BHycr03Avzs1S02uRhH+Z1Yn7+EeaZvFPNWJY95BUxMwQ7376KXDTB9DjNbocxGkXiIx+zcqm3eMcaYsJ/bcaNlzwnrK2yieuyJxzDvj3FfKFb42bs1tm6VW9w5U3G+fqVtmzZCHn5Pf4SNLRNc7abQZkNGq8qmkXWHRSrqsLNsF+35KdBhM0kjxM/ib3H9zm1z39uJxZtXMd+z7xDmzRL3tfWq/W4+D8/HpYaj3vz897ECX8aMxnguOX+J16VomG03axv2O02Mcbt0vGx6GeljO86ufWyRChi+frHKc/Ibr30b80QmbWXxDtevQ+pnfHVHH2yziWlsIIN5KH435iNd/gZpeuz5LOTh+j196Qbmo/1sPDp9hfvATlx+/U3MK5s8f4Udlqk0fC+t3WST3p73vR/z1SW2Zl28egXzh+5mi9TYffdinrnJdRofsL8vNrb4/WuO9dzb4X7c8DnGj6NPFapseTy8j22ZpbJdPuAwRWYHdmFuHHOsQyJlLp57GfO7H3oc88GIY20Da2Bu4zqWvXAxx9ceGMB8cYO/lx59C8b6pUIIIYQQQgjRG9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOgJbSqEEEIIIYQQPXFb+1P/+CDmD953HPN9h09gXlqzDSjpDNselmanMU/2j2N+/dJlzIem9mCeibBZ4NYCm0wm+m2zQKvK1RY0fO1Vh2En5GFDRsFhVnrhuWcxzwzzuxqwHzwzw9aGu04cwzzisEK1Kmx06EQcepwaWxSKNYdtpGybk9J9bCdolPlZ/INsaGg12NCwE5US/3/tCtdprY/7bNBn7+U9aX432wPylzQdfw+IhblP5RxWqKiX679Q5by9vW1l/gjbN1aX2HxU6evHPBHgd8q1uE+FfazUqBs2xsSjtm3EE2PLk+k4LB4eNrY0qpuYr+RzmPsdtrnlItdBpGs/exUsYsYYk/SwQaoVZ8tQs7yE+U6kHIascIPvnytze4Xadl9bL7KRqt3kdlmuc95X5Py1V89hvrbE7RiKsKnm0C7bJDMwwoa9DPS/v7w4m9mGsmzxWnHYuryGx2wwynNL1G/35eUVNglmw2ze8QR4rD35KK/vY7sPYn7k8GHMm12+78KibUNaXLXnJmOMeeBefpblFV5n/a1VzHeiv5+/l1ZvsYWn6+N5LeO1+8PVmzex7K0b/P3zu5/8n5h/8INPY359aR7z6Dqb/Vo+thJ2cnbdtX3cR0IBrv98na1+5XWep/xengfvv4O/U69cvYb51IDdfm+srGDZ0cE+zFswpowxJpRNY14Pcf/uS3LfiIR5rS3O2MayUoPXmLrje+n4O9+Buc/nmLcc6JcKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvTEbe1PUceWo8iH883W0hzml67PWtnaEp/k90bYULLy7KuYZ0bHMN/+6lcwP/XwA5jfe3wv5o26bTIZikSwbNA3jHlfki0pV25xfR3eNYX540+yucHnMGTcWly2Mu+6nRljzE1He7jsT8tgATLGmOocWypGx9nEFOywFSqYsvtB1M8drxlkE8Vggq0TC5ttzHei7TBebbe4/o3DIjJ5wDadNPIFLFv3c18LV9msVA85+maTTRAVh2msU8phPjI1ZWVrK9x36l2u/7Sj+udyVcy9bbYJFXxc7xnHu24X7PLxisNyFeYx6/dwO5U7/FLtCj97zfCzdxxmDl961MqC5RyWNSG2/bSKtlHNGGOi6SxfZweiHl4gltdyfH+HAa7UtMd1t8r15gly/96VZU/a2jbXZ7zNc0k2w8almYtnMZ8Ys+e1PQ4zTCjN1rPN+a9ifrWP14f+DK+R6ZFJzFfneU6+fMOeQyYHHM8O87ExxqzfvIh53c9z8u49uzFf2Oa+EXKIZzxgThoe4DGVdpj1DhzkZzx5P1uDdiIAVj9jjBndewDz1Rn7u8gYY+556GEra4e4fhKj/M3xkY/8PObzm7wmxf08f61v85zhb7CBrBO17USJGNfL6iZfOx1jG9rSBpdv59jQtHtsBPO4l9/1yF13Wtk3vvJFLBt+y+OYxxI8P23M8jpz70k2pn77DZ5vJjNcl1tbdnuEO2zb8ycdBqkt/qYIZHjecqFfKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ647UHt5155DfOgqWHe9vPBmD2j9j9/vr3FBx77HAfClgJ8eCcZ4cNWieP2YVhjjHnsYfswjjHG/N6ffQbzR47bB2kuNrnaPvTUHsyDST78dvwoH7J67Rr/M/KjGT482vFyHezdbR8a8h88hGW7DT4k2/bwuyYc/7y8z8ftZxp8sLtc58NEwYZ9KGuzxv90fV+S71nt8oHd/ZN8cG8n1ha43we9fAhrfXEL8+mb9gHMVB8LBwbS3OaD49x3OsVFzI2jjwyF+NnPzfKhrc3leSvLjvCzp/xdzEtVbpewjw/P5vkRTdzL5csN7rPxkP03lA2HdSLZ4QPs3gS3h7fGbR2ND2GeifAzXi/yocPimn3Asu4QZsQchzrTWfuwtzHG3HjtDb7QDjS63L57R/idry0uYH5ij/1cUcfhwPo213O7y38f253ieefKDT4ku36DD7KGgywdCHbsk8Rf++KzWPaHf/RvYz4xPo75a89+E/P3/dD3Y+7t8hye6uN2TyXsA5uNDrfpsaO8nq6O8Nq25RB5rJR5vk/H+KC9xxPAfDhmd/5glKUiVy+e43s66r3V5G8TY/Y58r+k7ViHag1eN/xD3Me7UBVtR/288PzXMI8N8LudOsaHxi9cvoz54d08t+fzPD8GW/Zkvb3N/TLhmAO3Cw5JQ5371NR+Pvxf3L6F+eHDpzA3bXsOOX+L19MfcnyPXl/m+Wl8lL+N//2v/QbmE31pzE/s5nGYW3jByqIpPpBtHBKMQJD72L5Bnj9c6JcKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvTEbe1PV86+jvmeg3wCPeiwHDz/+nn7xh5WlwyPnsT8PSOTmD/7Bhuq4h7+Z+RLLd5Hxfx8mv/s3IaVnfvKM1j28OH7MV+4/iLm02tsM3jyobsxLzbZzBFz2IcaXtvQFKjxyX+/4/3DPq6vZJrNApkO94GtPFsRAi021XR8tvXDW+H62nRYaPozaczXtvg6ByYw/msWrrMJYteeKczDrSLmlYrdXh0f99e5bW6vVo3rrd5is5KnyddZWue6GOpPYd6EOk3F2SzVdRhzuk3uI4Um92Nvh/Omj01MnirXZb5rl2866tHTx3atsJf7molkMQ7Ucph3PGyqObV/P+Z5MGY18pt87RBbPCobbDa68x6eb3Yik+b7FBrcB+87zua5etuep1x2uXKK67mV47qYz/MYTHi5Dw45jDwd42h3jz1v5rbYLDW7yPW/NM2Wmqfe+xTm+8b4Gb/xrVcwf/KRxzBfXrXHfmFtBstGI7w+7BpKY/7o42/H3GXR8oZ5vslvrGM+u2znR/ezffH89RuYj1S5z1zJLWN+Yu99mP8V61u8PrjMZBHHXLJSsMsn/Y5PNce63S7kMP/Kl5/H/L3vehzzazPcl9MhnvOrDXinJo/BToTNYaUtbvNoP1sbH3n0Hsz/9vf9AOa/8DP/AvPTr1+1stwy2/gaDpviaJr7cbnD7ffQSf7efeO0/c1sjDGnX+JvyYDXNn16qry2ra5xv98/wpanYplNXy70S4UQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQggheuK29qd7jh3H3Nv1YL66VcX8iQdsa8JmmQ0hI1m2e8yA7cEYY/wO282BQ2w0uXXxIuZPv/P9mBcLtrmgUeS92LXr1zFvdbmahzJsTzEhNmS0q2xRqIbZghPz2M/pqHaT9PJ/WNgsYJ4Ocx8g+YMxxqSCXAeFOucxb9vKmo56iQW5PfxBNjRMOGxFO7G0wAarUYeRZnaRbSADKbvdZzfYRnNw3xTmqeQI5v1ZrqNElm1d5RLbn7phtooE/LaV5+YKj81aiftOKMnWjwHTwHxmaY2fxWH8iSfZjhMAg0/VyxamYNvuf8YY0/HwWIv7eO4L9o1jno5y/ab6+Nl98OztDo/BviQ/4/XFJcxDfJkdqZS4vUzFNuYZY0wjxc+VCdoPEApEseyll57DvFjl9nJIi8wGzOvGGJOK8/9wdSWH+a6A3e6lOk+C1y9cwPzWLBt2+q+exnxzm9vx1AE2h1VyecwPDdjGmLmabd0zxpjcrTcw92fZGPPSc1/B/PmXuQ4OHNiF+cFDbMcZAPNYq8Nj8LGH7sS8G+H+2J3lOXQn0kM8l/iaPE6qNbba0RTe9fAgzfjYoumJ8LMsvXkG8//4scuYn32V2/2Ohx7A/MlH7Dye4vn+xuWzmA/uPYj51vI85t94hp8xFEpiPr3BVqTRoSH7nh2u32uz1zCf3H8E890pfpbOPWwMraywKW5xnsf+AyePWtmtJS57cNx+T2OMKZV4/AwMcHkX+qVCCCGEEEII0RPaVAghhBBCCCF6QpsKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED1xW/vT+Tdfx7zAh+fNWx95DPMLl5etrFtn29D8NJ9Y/66n34L56uoc5iMOw8+eY6cwX9xgk0w6a598/4c//kNY9k8+83nMI102kzzx1scxjzuMDts1rrOxJDdjHuo47meLRMGhbepP2oYQY4xZ2WATkq9VxrzhMGB4HEarHOx3YyG2ZWy1uH79QYfJpMyGl10sMvlrBr0pzMeH9mK+ubiC+eGjd1lZKsL9NTXGlqeJKYfBoVvHvC+TxjzZx3kswnU3t2GbffaP8bNcnee+1m2wZaLM3d4kw/y3j4V1NmYlIjxO2lG7/ZJ+vmmly/fsa3Mf9DpMMhNDbN2qNPk6jQpPrqn+QStrt7ge237u3wNJNsLcdNi1diIds01gxhgTHZrCPBHg52r47L5/aIT71B/dmsH88nm21/SP8aCORrlvzm7y+vPO978T8//yq5+0ssQg94UfuvcezH96Pz9jZnQA80iX+87g8Bjm9W22P3Xadt/fPcx9pAPWN2OM6Xa5v+7by9amB+9iK+P5mzOYDyR4XfIF7Xx9ja/xua+xMezee9gKVW07FIY7EA7z3OtLcH/obOcwr3jsdhlL8dqzuMGGPW+Zx/TYPjaE9SV5bH78Dz6O+foWfy/9+n/5LSt7/E62I04dOOy4NhsJMxN7MP/z3/8dzH/tP3NedxhD+2H8hGI8Hu66/3HMuw6DYalUwnwkxd9XN6/cxPwH3/cezAt1u+895FiXNyrcTzMx/gZxmfLsFekv0S8VQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOiJ29qf3vm2xzFfXmCrzb0PPIh51GubBeoNtm80mmwPqtTYMvH2B+7AfGSCTRiZVBTzpmN7NdI/bGXVLlfbj373uzBPpfowDxu2TLTbfDo/vLGOeSDKhoKU1zYRdBz2p1CZDSFFhxUqGWVTQKXJ14942VJRbrB1wlO3y3tD7BtIeh1GqwrbgabG2EaxE5fOvor5P/2RH8C802Er1digbWX48tefwbJPPRnHPF9hG8jwCOeRRBLzoMPesrrK9hBvy67TL339BSx7/PABzKt+NktlDVttrqw6xgM3u7m5ZBuqjDEmEbL7eDzNhp1wjS1Aqw4xTDbKc8Kbb7L1YzDD1o8bDhPT/Xcds7K64Qq44wDXe9fDY3a0n+tgJxbmFzDfXnsD833H78P8gbtsC88nPv0lLPs9H/wg5itPs3Wl5ehT7/ru92N++foZzP0h7rMPPvC4fY1F23ZojDF3HmfzzuWb3HeCHe73KUd7hTpcB51o2HF9e631xtgY03asy9fmeE361pc+h/n8ElsDH3r4Xr5+nuvmsQdsi9S1OR6zJ/byO2WTacwTZV43dqJvlE1vhmVDxp/gb5RiDuq6bxzLJjy8bg+MTWHubfO7ZYd4TWw3+OGbhseDKdvjbT3Pk2bEz2tPwtG/h7P8jPFduzH/5f/8nzD/5z/zbzDvduz5sX8Xz6XGYe+r+XhOrhW439cca9WHnmTbabnGxr8ofNd5fPxtlYw5vpcchs5oiNcNF/qlQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9cVv7U63Ap8GPHrNtHcYYc3jXFOa//fuftLJdI3yS32XsSUR5/1N1nFi/euE05u/78I9g3tyaw9w3YlsX4h0++e+Ls6mnUCxi7gmxtalZ4jq4OcPWrdEBtit0/LZhJuhhm8Pzr7Kx5eguNi4lMmy6qBbY8uQJ+DD3O+ws/phtMWqUc1h2tcKWlF3DtrnLGGPyZX5GdnH8f/gHP/aDmP/3z/8F5tduXcT88XfalrCJsX4se3lmGvP3P8zWs1KdLS39fh4/Zy7PY55JsTHmz7/4dSv79vMvYtlanduluJ3DfLvGfaHd5es0Azx+GlWXVcTuD/0Vrq9amw0ZCYdy6ozDatOq8dhfcNi1jhzeg/krZ+wsv8L2pbFB7smdKptD5jf52Q+MHsf8ryiV2Fzii7EtxNviur61vmplv/CRn8GyX/7m85iHDT/L3lNsFdpYZ0PThVuzmO8f4vkuX7Pn06Sfl9Vba2xKKmxvYh4a4vkr4LA8Feo8fhIRnntbbdvgE3DYgTxhtseNZHk9uTnDJqZ4gPvgmbNnMP+xv/tDmC+CCTHQ4HHfdRjbBrxcL9EJtgntxJWLN/g+u/Zhfu89JzFfL3asLBzib4tAik1J/Wm2AIYSbL/slngOqHi48uoVntf+6f/5z61scZbH1OnL1zHfvsn1uF5mA9baGo/9F7/+bcw7YbZx/uD3232tUWW71maerX6pJPepbpDX08V5fle/wyLVbWxjXmra900FHDa4oMPcucrfAu3BCcxd6JcKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvTEbe1PoVga80qRT743O3zyvS9hnzYPhdlCcPP0K3ztFlsIogHeF/kjbEvYWmHrx6/94m9g/n/87D+xssMOo8j1K9cw9/rZHOJL2JYHY4wxHj753xdh201fmi0hxS3b6NBxWJgOD7NFwu+xDSHGGJMJcv6FF1/H/JH7jmF+9Spbt3YN2uaqaJwNJHEfW0+Mn+sxGXboQHbg7qdOYP7pn/5zzDshtix0Gra5ZNlhRPKs8bulMmnMA1UeD3/x5a9gvrHC9R/vG8K8U7PtLW9997ux7Oggm8M+9dVnMc9k2Vjy7EtvYm66/K6Te/ZiPuS1273c5DEYj3D/LrHsxgS9fJ2Uw8QU8vLUOzbKzz41ahtLZj1BLLviMIYNDE9iHnM8y07c8SCPh5EUt+PwOJutEmF7rN+Y4bl0dIjn9fPTl/nai3ydcpvbayDKdZGvcMMPpBJWVnKUbTqMObEBNr+16jnMG3FeTzxtNiuVG7zWJoL2+Gn5uO0CLTawJVI8xu88bNeLMcYsrqcx7zqMigurbMaq5Gwrz/wCr+3rN3k8DAZ5jsufPYf52z50BPO/4sYCt/t6ju9/Y4G/ow4ftO1TT737A1h2bXUR87aX174wL0mm6uf2CgT5e+HCCluLdg/Z3xHTebYztTxtzPfd9QDmQ2le/xfXuY/8nZ/4x5h7A1wJfRl7bjn5yFuwbMthrZxZYatfqszmt+IGGz2n3+A176kPPY15IW9/621tcr2nsmy/urZgW/iMMeZIhOcPF/qlQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9cVvthzdkWzmMMabm59PzpQLbLTYqtjni+c9+CsvuPXgI8/Immx02ihXMvQU2K7zw6lnMb91iS8hv/c7vW1k0ws/+zg9+CPPJfq7H5RobSBwCEnP9FtdBJMBWqFoD7AqtApbdBpuGMcZkQmxoaKbZCHDf8X2Yex2Gmf1TbK6KRML2NVrc1jXDFpzN1XnMW4bfaXwC47/mq1/5LObBfn635ZkZzAP977CyA1muz6+/xDatZruG+avnuX9HHNaPF984jfnUOBtpDhw+bmVrq2yNuHyT54Nqjq0UU/u57xw/wPmRO9nC1qjy2N+uNKzM12arTdM45r6CbdkwxpjMMFueKhtcN/Es29aCHfsZjTFmfsm2h8TAZmWMMV6vPXaMMaa0yc/e7LLhZSf2HmJTVdhh3vO32I7TBvPM1hZbVMptHusP3HMP5iuFMua+NveRhpfnUn+TzUqbFXtgDWbYUrNd5ffvNPhZag67V7vOfbbd4fIZL//tsAyXSYR5Lit3uK+tzt7EPJzgOohFeVxdX+O+2TpzBfOlbXstiNS5ja7O87X7zvBcuZbndeZtvLz/Nbmiw2C1wXai9Da3Y65qr0+Hj3A9L67xtVNxnvDjcTawHRjldXh2ZQHz0QT3kxWwEN24zCajk/c8gflwH8+NyQybxvYO81rVByYqY4zp1ni8ler2XHHqCM9xcytsbTo8wWa2XI7ns3Qfr/vHHziJuS/AfcYbsPvMUJrHfcPwnGi2+Z1SEX4WF/qlQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6InbHtSOpEY4d5zrm13Zxnwgm7Kyz8wuYdlugB9p774DmBfnZzDfKPChuOtX+UB2LDWEeSJgP/vBk3wosFviQzS/9j/+K+YP3nEK83seuB/zfsfhq2qND+16GvbBtXqLy/bFuFHDMT70Wctx+5VKOcz3jPEBpvkq37dZtw9ThZJ8jYSHD16Xm3xwLuo4jLgT1Qz/f3c9eBjza47Dzh1jH5avRex+ZowxbZPD/KP/479hnop4MB8c4oPEizNXMT9yeDfmz3zlc1bWCnG/zCbTmEfi3OZzl/lQ+tpGDvONL9vPYowxe46fwjwFp9WLXW7TqOG+03Icet1eZ4lCOGofQjbGmFqRD6vnyjzeMjDpBuI8HkobfCiwHk1jHo/yPXfCl+WDk6EuH+qtd/k+no5dp0UfH/RNOA4A31zmA6tew/csuJa+Vo7jII9PLxz6rPr58OW44+DoepEPtvtqLDrI1bkPDgY5vzXP67IHDog/+OjDWLa5eIuvEeM5LhjmOeHZ0zcwT0S4zq4s8bhq5+xnv3zxHJYdHeR6/9TXXsZ8aZYFHz//b/8j5n/FrUUe03393Hcijjl5ZMQ+NN3sOg5eO+ajUpGFD4UlFkcERriOAiUWuOS3+bBzOgxze43XpNkzZzDfzI5ivnuK+/HwCJfvFHlOWMvzQeXRuP1tFOoGsGx5lfvla8s8Ts5+68uYHxzmb+zdw7xuLDnqPQHdo8Gfeibk4f9w5yle8zM+Fh240C8VQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOiJ22pwCmW2TyyV2ax0bIrNHE0TsbKNZTaUDAzxafjlBT5tX6yxSabTZANJpc0WhamJKczbHtsekvSyEaDR4up8z9sex/zVN89gvm+XbX8wxpib03OYF1a+hfnb3vGklc1cPo9lW6aD+dBAEPOxqV2YH97LRotSi81Y8SCbm/Igr+hWbGuSMcY0Q2xPCXnZOlFzGH92Ittn92NjjDlzbhbzw4f2YO6J2tdZvMVWMp/DHjR7/TLmsRTbWAo5tnhUOmw5unDuTcwjSXuMpwL8twlviM07Jw6zNej6LM8Je8d5zEYybGzzeV32IXuuiPkdZblbmoiPx4knzH0wEeI+GAqxbSUS4BvXjV0HrS2H5amexnyow8++kP9O/7bEdZfr8pwRr3P5Ztju4wE/18NGmd+hVuX5ZbXIppNuky0qHT/XhX+b6zrW32dlfWG+xpeefQHzsX62eK2ssnUl0uZ3/foCm33Wpnl+Cobteejk3Xdj2StLOcxf/OozmK9ss2FnzmGRWtuyTYXGGOPpshUqO2jPc9U1fv9CheurfyCLebOf1/edqDraZatcwbxy6QLmw1n7uW6cOY1lZ27NYN6p8z1/6QtszLv7ABuU/tNHfx3zow6D36989Let7Mxz/M3xxPs+jHkpzhat+ZlpzOPcRcxahcf4eIZtXNMVe845uXcCy7Z5GjIDCX6YaIbX5ZlF/qartrh8f5rXk0bcXpf7Ya02xphuh+fhiMPYtrrIc98kTxX6pUIIIYQQQgjRG9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOgJbSqEEEIIIYQQPXFbDc52kQ0cE32O0/Pz65hfP2Of/v/wh38Ey165chHzDZbXmETIcWLdYa7K1tgGsrzBZqEBkOPkHPar7a0rmI+MshHpvhNsB/riV76C+f0njmKenNyN+fqsbRYo5FlbsLJ4FfPGvn2Yt30LmJsot4epcQPemnGYk6ZsG0Wwn+sx2GaDUcXL3bvfYe/aGf7/sn7OS0U2cAQKdh9cWGLjRcphUFrf5P66PMuWtK1hNopN7eI+WHcYlOIe++8QuRqXTRoeg1dzbIY5tJ/78ewqzyt+w+Nwo8S5aeWsqBtku1ZfiseJL8gGsHjQYUIqsdUm4uM+WwuyCchXyVlZx8uWpU5+E/NrBcecGPvOxkO3w2N9e3Yec3+ax2+kbj+XN8Zmnv4wv/PnvsQmnWCI26Xt52cPGzb4VOu8bsRW7L7Z2juFZRt5thN94/zrmEc8bHqpg6XGGGPWpmcwjzrMZMWlJSv7yK/+Jl97hdt0cWmb7xmIYZ7nLmh8HR5XyeFxzLtVew7JlXheaXEXMA3HGJwY5763E4VtXuMifm5Hn2N9mn79eStr3GBj3hGHKXKtyc/ytlNsM5rI8rj6/K/9PObjju+C7z9ywMoSizwfjdd4PHSyxzAfnmBj3gun2VTYl+Z38nZ4zp/qs81NK+u8Lmdi3HaLYK00xphshp+96uNxMtDPFilfjPtSps82PS2u8ffHwo0ZzEMO4+Gpo9weLvRLhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoie0KZCCCGEEEII0RPaVAghhBBCCCF64rb2p3qthPm1eT5VvjUzg3mz47Oy+VvXsOw99z+I+YWztkHKGGPqHT7hH/Pb9zTGmIUVNhEc3LcLc6/fPlU/fY0tTw889DDm6wtsVpraux/zas62chhjzPwKmx6G42wQ+ItvnLaywvIilj188k7M/+C//FfM/9kv/Szmp5+3zRXGGLO+xQaf+04ewvzcNdsK9dQgv3+tzX0gGWBTwuVZNlcd5kf5a7pVNmqk+kcwz8bZ3LS8bSsi0mE28DS9bEUZybAdopxge1DQz2qHlQIbUIJBLr+0adtxdo2wmeTydTbGzDnG/nPPcDtG42zqaXk5nxjn9mh67Loc6Gfbz5bDvJOKsVmq0HQ8O8cm7zDIZXzcx2rGvlDMx6qRrQqbq0YHuS/NrrHhZCfqeTaQxeLcH1au38B8Yo9tF9mYYyvcy5duYj4+xEZCT8Kev40xxtviNSwYY0NVrMP2p+2yfZ21GX7PtW02JYUc1+4G+dlHBzj3tbjPxhwmt0XI15dtY6Axxixt5zAP+PkTIhBh49RklvvG4hqbgKqFLcx9cF8PjBFjjKm4zF1t/ptqfGIK852IRnm+9/n4W2Q4y+t2o2hbrKKGzValHH/PlDd5jUuGeJ1JtbieH7z3Pi6f4nWm0rT74FtOHseye+57G+btPu4j3zjN31HH97LRaiXnMJN5eM3z+Oy6GU5w/653OW/muB9fuMHj6viEw4iX5W+ddoO/DZfztmVwM89z3FefO4f5niTPK/6wbeI0xpi9mOqXCiGEEEIIIUSPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hKfbZTOEEEIIIYQQQvxN0C8VQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET/C/Nf6/+N2P/iKe4k6k21j+hW+9jvnAZD/cmf/p+pEJ/ufJV1ftf4bcGGP6BwYwbzSCmGf74VmMMVvFGl8/k7KvXXWUTcUw97Tsf7reGGMG01z+1WdexHz15gXMt8prmI/vCVvZyuwmls1vzmO+/+AE5kcP78K8U7f/qXtjjJnac4DLt6OYByL2s+dLZSwbSocw3y5HMI9kuQ88+vD3c0P9Lz77Zx/B8dDwtLB8//BBzPdP2nU3GhvHss0qv/ObXzuN+eLWIuazm0uYj+7n+96aW8U8lLbbK1fuYNkgN4upF/OYd7o8rkIdbsf3fs9TmL92YQHz0b1DVtaq8hQ4MT6CeX96EPNggOebfKGBeSzK79RxzBX+gP33n0ad673r5fm5ZVjK4ffz35b2ZAdvOx4uLF3DC5aL61j+7OVZzLNpe6wvLs5h2b4krxuFzQrmxsvvPLO6gXnbNDFfWeR3iobtuvPW+Z6jo/ZaYowxhTWek/fs5T64vV3APJGx69EYY0yH+3gim7Syrolj2VDY0b/LPPelkjyvbxV4jA9lE5jXc9yuqYQ9uayt8pwV7+OxtrbM89Dgbh7jH37qp247Hn7mk5/Aho8bngPOnL6I+ciA3Y6eEvfLPeNZzCsFfreRQa5n4+izvgC/crPJ67wvaLd7q819p9bgto2HuL2CIe5rrQbPg5evnsG80+XrvPf9T1tZyTGtDAzyd2rTUY/hINfjrekZzEcG05hXqnydfbvtdfzc5WtYdmGF18dShV+26alj/nN/5yP4MPqlQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9cVv7kxesHMYY8+LZs5gHwlz+2nX7tPnAAFsIwuk+zGMxNgg0vfwKIZYTmFKTLQqRAJ/ab3jsPAPmCWOMqTfZutKfZKNGocFWiOMH92P++uvP831LbL1Y2rafJ+Fo8b7Ro5in+thY0vKzQWk3mI2MMabR4hs3K2wW6IbsOss4bFlzOTZdBIJsiqk2+J47cePyJcxXN9gmMTHMVpevr3zZypJNHjurG2x66dbZhhbps40uxhize88Y5i4zzNF9+zCfy5WsbCDF9o1rc2wUu/ga280+8KEPYr61wCag/kE2V913bxrzXN0eD0PDjv7t4fnG1+V5omu4r8XjbDJpO8p7fQ5zk88u33VYZeqGDSHeNpt3aj6HNWgHOi02ky1sFjFPhrmvNdr282ZiXG/rOR4Pvjo/S921PhieA/Jc/SYZ4Tm/BHN4yrH2bOX5GcN+bq/VTZ7Xotw1TdExl/Y7Jv1SxV4LMzGugO0Cm2Fc7VR1rLNRH+f1Bt83HuG/ezbb9jjMOoxTTQ83SCLG9eLt8jvtxPkXX8I8GOd1a3PuJubJiG1KjNZ4TPmDPK+Hfdx3alz9ZmqALVI3F1cwj/p4zas27faKOr45UsO2jc8YY+IhbvOAw0AWc/xpvFjjOvj2M1/BPJ2wrV+1Mr9/JMLfr80qr/nVNs8fu8ZHMV9cZ6Pn4V1TmI8M2f3guWf5e/GuO+/B/KUXX8D81jLPuS70S4UQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQggheuK29qeChw0lx06yKWhrnU+J7w/Zt1mvctmwl00YNcOn55M+Lt+JsHEp7GN7S9nxrskuGFYCfG2HLMsU62xdyc+x1SbqZ4vFU088jvnv/NHvYj612zYxtRr8kFfOz2BeKdi2H2OMuXKRn/3l7DLm9504gnlfHxsgyiuLVrZd2cKyiTi/U8lhbBmIOhQYOzA7x0aG5//0Ocx3T7Ihqy+csbLzOX6mRx9+EvPowWOYD/SxaaTp534/mrSfxRhjlvPcZ5Pwd4jlKtuf7jt+AvM7Dx3GfGyEzVWZu05h7muz/ajrsL30Rey8DuYhY4zpi3PfaXscU2aTn6UElhpjjGnU2ATk8TvuW7L7frXNc5a/yyadqqO+EmF+FtM3zPn/YrPMBrJmyWELCfA49Tbs+xe4+5mUwzC4uMlzg6+zjXmry3023GSDUjvI5pkBWNuqjr6QdFhtKnXug3GHYccX5jEe83L5toffNeW3+0kNjFDGGDOS4rHZ8XF/DXW4b7RCvLZlY451vM3lw1772XNdHvdxj8OoFuJ67A/wuNqJ69fY5vSW+3mubiX5/oW5aSsLD/A6GWpzfy17ub+Ga2zxKjXTmGejXKfbJe4nIWOP5UCa15hklNu86fhG64txu3Qc75oKcX7u4nXMP/Unn7CyPSdOYdlMluebaDKNOSw9f3mdDNufWg473fjoBOaVvG26ikTZbJhfXMf8pW+fwzzxvzke9EuFEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXritvan1ZzD4uEwoAxH2RDhT9mn//f52YzTCrJNoumwpTQcppeYw/hQ77BZIOphc0bXZ9tGWhU2itQc7x9z1HJgjO0qoSLbQz717BXMSw671DffuGplwTbXV4ury+TLbH+aOLgH8/mX2CDwyBPfhXm9WcS86bXNGPUO25fa3HSmtc2Wg80SmxUe5sv8NXcdugfzlaNswoqs2UYGY4w5ePi4Hd66gWX/zr/4x5hPX7yFeXpyAPNbly5h3u2yIWM4w5adpbKd7xvga6wWuG2zce6DJe72ZsBhn5hdz2Ee8PGAawUTVjbab2fGGLO2xf3e52WrTanJhp1Wncv743zfuMP6UajZ14l4uN6rPMWZboPNLxvN2y4DTppFngc9DsuTcZhnilV7APu7PKhLTX65gQybdLaKfJ2+ME94qw5zU8hhzmrDu0YDbMZpOcxecYeZrR3kemw65nuHMMsMR7hvhqJgVnINQocdMeLor+WmY0FpO6xQkT7Mgx2+fq5s5zGHXWt2JYd5xDGvLOe+M/vTicO8nn/z63+B+dq1Gcyffu97rWw8G8GyjTa/c8TDfWppnee10QHus+sOy1M6zHN4AWx6/UmHwSvL34BJhzkslM5iHnXMd5+ftw2SxhizvczmppN32l8AczP2N5QxxvzEb/wW5necYstlqcFj8N47DmH+jWfYKPl//N2/j/l6zq6z5fkFLOvZx884PszfDqtlXsdd6JcKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ257Qq8TTWM+nOW87jjwF4F/dj3f5UNo8S4fDCo2+J90H8nyYcVSnQ/oxXx8gMzjOEQXbNmHVILhOJYNOw6tVRyHC/2OQ4F1Hx/KevLtb8X82SunMf+nP//PrOxnf/YjWDblOGR+qcCHnRvrfHhnoczt9Hd/8uf4OhU+zHzn8XEru+sJPii9e1ca81yd6z3t43baidQQHyz7xV/+COZnX+F2eeO5l60suX8Cy3odB1a/ee4NzB8wBzEvOqQL5QLX/8SpOzCPde3xM5fjvuD18rMv5zA2lfklzL/6/POYP3TvKcz9cVsMYYwxpe2LVhZ5mMeUxyF6SPUPYd7d5npcqfEYz0A9GmNM2XGgL+63D4+6DmR3Kiy1yMPhVmOMGcjwHLoTuRIfDW6XuK/Vu3y4M+y366Li5fWhD8oaY8zKJt+zP81ztT/MB7uD/g3MSy1+9mrePvTZ8KWxbMgxHuotPsga4K5gaiCxMMYYf5vHYZ6XVFPbWLWvEeTDsJ6CXdYYY4IZHmtxx8MXO/yN0Klyn604ZATdpt2X5wp8wDcc4DWp6FgG4p7vbH0YbbK4YN+9hzH/6vYm5t4tW0ji9ezDsn1R7peJiWOYv6Wf2/f1s/bcaIwxxWVe/1+6cg1zn9+u6wceeweWbba4Y27keZwkO3yA3uOQ+/zoB78f8y9+8jOYXzt/wcpeeP11LBt1yEC24MC0Me4++IWv8IHsyiYfJv+TT38V8x//wQ9b2ee++i0su+j4Fvj4H38S88PH+JvChX6pEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURP3Nb+9OxLZzB//K1vwbyxxoaI6bZt7Bj08cn/kYlRzIMua1OQTUlpwzYJ42ebRKDDlpau1y4faLMdot7lawcdppelzRzmYym2GVyfW8Y84GHTxtsff8TKfsZhyEgcZPvQnsE05our3NaZ1CDm11a4/MG9Y5jfAqPQjU9/Ccv6ImzAeOCeuzA/cPIE5juRHOJ/xv7bNxcwD4a5PySPHbeyvZNTWPYTX/865o89zias5TU2kESi/PeDppetX7UGGyK8cdtUk2qWsOwWdzXTafB/ePnVc1y+yc/ywMMPY/71L3E/MWD8OfPmeSw6uu8I5v4Oj/2pI2zLSoS43jsp7vetErdf02vPCdzrjcnXeW4NtNnWtFX8zv621CiwKclpeXLZ8eBvWyGHfatheEylI2yL8gX5WSJtnu9LDvPeYJTvuwKZv879u9HhZ4l6+Vm8Pn6nmI/tODWHwTDs4fYlOV51i8faNjeHCRtWkPnCCcwzUbZx5Wv8ThGH7asJ63KnyQa2ip/r0Tjsi81oisvvwPaNG5jng3z/vQ5z1lCfbWjaP8zPVPewVShmuD6bHu6DJw8ewPxnP/6HmA+m+HmaAXuOjTq+0Zaa/OzZDK+zvlga81CH+8hL57+N+Y/+wN/BfHpl0co6VR7LoRgb29bmb2LeDXEf2DU2jHkhwGN5cpjr5pd//WNW9uVvfA3Lxhz21obD5vfqsy9i7kK/VAghhBBCCCF6QpsKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ25rf0pn+aT5mVdexXx9mW0ge0f6rMzTz3aIyuXTmPcNDWEeL7GtIhZh40AqwPuoWotP5wc6tkWh7rAWJPycF+s+zlfWMI/v2of57KU3MX/XO5/CfH8ybWVP338nln36bU9i/s9/9ucwz6TZ/rCwvI75hMMiVS6yEcZr7LpsdNloMTzQj3mhyWaSo3umMN+J0f2nMB+aYvtEseIwil29bGUrRTYvDKS5H59fZ5tW3PA9F8o5zI/tm8I8OMQ2sA4Yf4YnHca2lSXMS0G2ntx9mA0kb169iHllnfvaQw8/ivn8zKyVDY7xe/q6bFD6rd/7BOZT+97APNbH89bhqXHM77iDjWUJv90/tsrc7yI+noeWNtkstWeczUY7UXMYe5plvk81yMaUcNCek6s+fqaEw3zUCKUxj3q5fNdhVop4K5gHHEag/o49x1TibFTLg13GGGPaDTby+BzmmXaU186UwzTmNfzsA2G7/AtnuB/H/VyPpu6Y4xpzmD/81Hsx99X4XbdLbHGsV7bsMMRmqWSITTp5w/XYqvHY34mNWzwfeR2GpqFJnnu8xZyVTUxw2b4BnksDUc5bFV5vt3j5Me954gnMP/f1ZzBPtu0+lewfwbLL5VuY1w2veY06Wy6TDovWiVOnMJ/L8PfCCb9t8Lt4cC+WDTqMbdUOP2M+T544Y2YWuM8MRbidJvZzP5hdtuvyp3/lZ7Ds03c/hPk/+yf8rXfPkYOYu9AvFUIIIYQQQoie0KZCCCGEEEII0RPaVAghhBBCCCF6QpsKIYQQQgghRE9oUyGEEEIIIYToidvan7YLYFgwxmys8Il1z3YR86tF+zrRzjCW7cTZ1DCYZTtEIMx2lWSYjUv1lsPc5Chfrdl5LMDWFa+frQWjEbZ7bCUHMb/wGtu1fvjH/zbmAxm2qmwtT1vZz//k92HZb77E9/yfv/crmDdDMcxrDd6nvnz6AuamyaaYc7duWNmZl17HssUK942Deycx365/Z3aPasexB3fYjLpVHg/bAbvPJge4T52dt41FxhhzdJINFt4YP0uyyXqPVorLhwM8TkzEbnd/iw0tEShrjDFzN69h7glxP446bEbnrtp9xBhjChvLmH/w+z5sZZ0q236CCZ6fvvd9bElbLnBb333yKOarjrlybZHfqZqw54p2mZ+96OM51NcqYV6osQVnJ1JxNjRtGm73UIvHXbNjP2+3nseyxTYbfvxdtrEsO+xEcQ8/S6XlGONg5DHGmNkl24a2MHsTywbCbGG6cz8bZjxebseQh612uarDjLXuWMeNff0+hzXIOKyJ9951gu/pYwvOy99+BfN8g8t7KtxnTci2dw05THmVIPeZmGO+md5ko+ROZILc7yNZtoGNOcxw6XHbplfdYLPmuWW2AO6eYONSOMPzWn+a6+jPvvpFzLdX+Xn233+flW1ssuVyeoX75VCa18JEjC2DzQav/7FMGvPJLl8/X7L72v7dY1g2GOe2LhS4PZa3+Bvw0AE2K22V+Z0qRbZIPfH0Y1b21S9/Ccu+meD+mEnwGD93je2LLvRLhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoie0KZCCCGEEEII0RPaVAghhBBCCCF64rb2p61lPmk+/SIbHPYePox50mvfxu9ho0vdYW5ZdNhookE+VT9x6iTmJs/GgabHYdrw20aN9U22rgQabMEpBNisUFhZxHyrxOaTEw4b12qNyw/32/e9ucTmnVr+OuZXbvK1sw6zwjfPz2M+PsoWhXPXuY/df9dxKzv7+ptYtlrkei812JKyb4gNGDvxyixbQY4PsgmiVGfLQm3b3sun7ziFZfeH+jAfGB3A/E8//jHM772bLURHslnMlwpszbl0zjZBTE2wlcPfYONU3/A45lMxtrHc9fCdmAc8/Iwth90jCAYsXz/Xb8RhuwmwYMa88w6eb3wOA1Y8yPahYIytXtmIPZa/dd22uxljzEiWLUO+GD98JMDjZCdaIZ4zIzU29nijPA9263UrW6tyG6YDbEXJO8xHEQ/nbT+vG4Np2ypkjDGLGzwP7pu0DT4ex5/qUkG2Zfmi3EeijutcneE5Nh7gd2o4bFwDCbs9cl3+JOhL87OvldnatGuSx9VigefQ6xcvYT4+uQ/zIWO/62aB23psiM2OwSyPta1L/Cw7EU2lMb/r1N2YL1X4O2JkAOb2FrfLwwf3Yz5bYEPnkT089xqHuSrexzmZ9IwxJl+yrXYlh3lwfICvXW9wO4Y8XF/NrmNc1fi+bS8PrGTM7lNrW1x2eY6/ozby3L87Dbb99ad5XTYOY1bfCH9HFTaWrOytb38cy/7FZ/4n5nUvrwP3PXgH5i70S4UQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQggheuK29qf8NbYgHD3ORobq6izmD77te6ws2uZT8uteNgIMZdikE82yBSe/tY25N8wGEn+LTTIbBdsgkAyxTaJcZ2OJv8kn/7fy/Iz7945g/uu/+Z8wv/PEQcxDcdtkMjDApoSasQ0sxhhjNm9gnB1lo0Vhk60I3oNTmN95dDfmmUE773a53kMJtt1EPGwzeOXqVcyfeADjvyaZtU0vxhjzSx//FOZTIW7H8JQ9fn7vX/0mlj35MLdt4tsvYZ4anMD84oXLmEdTPH5KDqPWc6/Z9qf5W2wOi8V5zB6e5DYf3jWFeRgMbMYYE4ixYaa6zUaxasCeW0IeHrPLqzw2Sxts5Xj+pU3Mk1E2JF2fZvNbf5JtXCO7bMvL1BCXXc5x22W9/K7FVhrznYiE+G9SpSBbvIZiXBfViG2lOjE8iGXDiTTmW0vc5pEE98HSNlsG81VeB/rS/E7+qD33pILcF7ohNkt5umxQKjisNteu8Vj2RxKY//0f+THMqw27/SrbG1h21bGeZlNsFCs22W723e98C+a1d78dc0+Fx36+ZOfBJtuBJg7yHBoI8OfP//Xvfx7zncimeDwG4mnMn7z3HsxvzNtzg9/Da9+NxVXMf//3eT059t9sq6Ixxlw6dxbztz31DszTWe7L/bvt9Sfs4b5gHP01HeZ5yvU3cH+HLU/1LvedrsPSmQNbVDrKRrVixWHLqvO33uw2f1+dfeNVzE/deS9fnx/HVGEeuvD6t7FsxFHvw3s5L3W4Hl3olwohhBBCCCFET2hTIYQQQgghhOgJbSqEEEIIIYQQPaFNhRBCCCGEEKIntKkQQgghhBBC9MRt7U8PHuLT4GszVzB/59sex/wQCDgi2T1Y9rDXg/kb82xdefnPP4/53/q+H8I8WGS7R7PD+6tk0D5uPzc9jWVbW+uYezxs8Ti1fwzzK4tzmNeKbDgJxk9h3qyVrGxunc0H3i4bF3wpNiulEmxy+f4f/VHM2y1u1z/6xOcwb7XOWVm0j58ll69ifn2VDWObBbY/7USmfxjzWIKNS4Epto785r/6l1Y2cPIQln332x/H/Or105gnDBtQPN1RzBfm2VRzbpb72usv2+2SfZJNFbEIGy9eOcv2mqNH2UziD7Jhpj/G4+ryKo/xRs02c1xY5D4yN30L87UtLr9/chLz2aUc5qP945hHHDauetFu16LDfnXu9dcxf/q73495t872oZ1YLrIVZKwvjXk8xUan0sxNK9tqsbltH08BZtPHfaGwzutG28/2mnCQ58Fqm+1PiYh932iaLXHdBltqCjXHMuyw2nQCXAn33HUM86sLM5gnA/acXG7w+9dqS5i3/PyNEGnzs9+YY7tUp8brUjjNc+79J05aWalsr3fGGJMMcT+tdLmPPXGc7XQ7cezUCcx3TXJ/uD47g/n84oKVbdR5Xn/nOx7B/MvP8frwyT/9JOZ9I7yGHdvPBsPdB+/AfBvmqYCXx1qjxO2Vq7AtKhVg9VG5xuuMt8V5o8Xznbdtf0dU29xHYj7Oc45P6rGhDOZb6w5zVYHXma7DdDk+YK8bnaNs6EzM8vdrdpjXsHXH96gL/VIhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ64rf0pGeXT9q2BLOZHD7BBIBSzDRGBLhtaig22Ch3fy7aouZUtzNt1NgiUHK+cDLKdqFizc1+Xr71RYdvAcNLHz+KwEGRTbBoJpdkg0O1wXdbBpLVvjG0a1zr87CPDbBsoOGxOrTW2CdX9acx/8AMfwvwvnn3FynZX+Z4rGznM15fYWJK8ky1DOzE4wHXxzLfZJvWBPfsxTx+3rVC5hUUse32Z+/fxXWzleOGVFzGPOiwW+47cg3nOYUkb3GWP8UunX8Oym6M8T2xMz2P+z37yxzGPdNnutbbJfa1VzGH+0tlLVhZP8jOmhnkuSzlsaFUWzJjVedvkYowx3gmezyZTPCc0vLZlqFljI0yuzdf4k//+R5j7s6DnM8a8/4nvwvyvODDBNqeZlW3MK7lZvn8wbmXNMvf7QpXby9Nki8r1BbaYRQI8HjxhNtX0O2x3JTDVDKfs9zHGmM0Kz+vFVTYiLW/atjJjjNk7uQvzjo/b8cAutgyuFfJW9vLn/xzL/sAP/QDmW6tshql4HDbFEOfVELfrwvR1zL9Ssvv+B97yKJbdLrJlaDjN9bWYY/POTgRDbCD72rfexPzi3DXMBw/Y60Zii+e65TL3+3/3Sz+P+QmHYe/sGV43Tl/j+n+yzt8Ly0V7XIXa3OaZYe7HmQjb/nxe/v6JtB3fYw67VIA/x4w/aI/xOBihjDFmetseO8YYs7HE1sCOj+eEkSS/U67CC0p/kJ+nGLCv35fktWri4ccwD3i5Yv7zK9/C3IV+qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXritge1g3H7gLUxxvQZPtCx1uE81bQP9aRSfGDYX+KDKGXHP92+K8mH3way/ZhXc3yIsOvjA3rZmL3vWqzyQchmw/FPrgf5XRcX+BCnJ8qHAo+dPIm5ifGBnHDdPnB2a4UPBcbDfDiq3OV6GfTxIX7/AB8KrBT5YNcXv/Ey5sVNOKjZ5YNwD951J+a5Bh9kXb7JB+R24p9cXsbc+67HMd84xHVx/MG3Wtm3fv3/xrIf/9jHMP/Zn/pbmPf7uA8evuN+zJuVMuaf++SfYL65aB+yvvvufVjWU+Sx9uBb+Vm8LT6cm2/wofH8Jh9u90VjmD9y771W1onwQTkPD3GzkePx0yzlMO/r40Nx/Y5DdAYOLRtjjKdt18HSNh/knZ9mcUClyoeTi44D7+bXOP4rFta571RW1jBvB3mufvGZz1pZdpTnTPP6GxgXG9xggQ6vGyO7pjAP1rl9fWk+WB809oHKHE91Jupn0cRGkOe1RjmHeSfMB4wvnz6HebPFdTDcZ8/td9z/IJa9dYP7VGZoiO9Z4D5V4qFs4tw1zH/7oy9i/qlP/p6Vbda4fw+kBjC/scD99MNPfz8/zA68fokP6d796H2YPzfjWE/ybSu7ucHCgfc6BDO3bjkOuH+S15OTd/EB7of382HqgbTju6DP/i7IV7hdJoa43/si3L9blXXMKw4pT720innJw/cNeux6Tw5w33nw5DHM/8Wf/Snm99/N3yg3p/kw+b138bdeK8DfacGO/ew1x/d4ezOH+ZETd2O+N8N9wIV+qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET9zW/nTTYUcYGp7E/LnnX8O8DKfzHzh2FMsODPK1w0H7dLsxxizMs0FhNMMGgRslNgJ5amzN8SbTVjY5OoplC8ks5pfPs5Wj1nVYEZJsr2kG2VRTr7JBoNq2jShhxz9RX+xyVzjYx/aD9PAE5pUSq0++8q1vY17P8bMfOnWPld26fAHLrufYgjPQx0qRYovtWjsRIiOVMcazPIf55OYU5p/55B9Y2d/71X+FZffuYsvW44fGMf+3X/4E5hfOX8S80WB7yFseOoL53C27b67MXcaynhD37xufYTPJ7CLbU05/+UXMz194HfPtLW6njZo9HkpVNofkOmwTSoa4vrZbbEMJl3m+SfX3YV4ucF/eaNrPmU1wP0475qfFN97EPNjHc+VOBFs8J1ea/Leq+YtnME+mwNTnmI/nHaYqb922MBljzO59hzH3Vdgy2PLyBFla57Ww0LTvO9Q3iGUrhttr1zjPsTeneV4ZSvH6sOyw4Hig7xhjjDdkG7aCDsPOap61TY02W4mqHW6PxVvTfP0im8QeeOAE5qehbh49xgajlTy39Wf/9M8xTw/x2rYTP/SPfhTzsSP8DuH9bNt55lX7O2rxG1/Fsmen2XA0MsTfIvMJts5FPNxerRbn3iKPh3rAXnOLq/yMq4b71NraGX4WH/f7RjWP+WaJ55DRfq6DWTBjhn08x124xmvYeWg7Y4x577s/gHl3gcd4zWFY9be4L+fh+y3Y4W+xhp/tV7VqDvM3rvP3qwv9UiGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKInrit/Wm+zAaUFz/BJoLBEbZexKMRK2udTGDZm5fZJJMY5GvvmeDc42fTRtTPr5xjEYHxgpWi6WdbStBhu+mEufxohu1Evgifzvd32ZCxuc3GmGjA3jPGh9kM4+tyW3siXL/FAj/L9Co/y9TECOY3u2yRyK3PW1m1zSaKEYe9xheOYx7dYIPMTlz9wjf5ev1smfhPv/ALmCcG7Pat5q5g2TtOnMT8zXNsmdiV4f79+3/2Wcwfe+JhzNt17sv7hmwDx9NP/DCW3b+H2/w/fPwPML/v/vswD3l4PPzGf/xNzO+6xzaHGWNMOm4/e8kxljNxe84yxpjVJtu4fJ5tzsNcfmn2GuYmzIaTiSHbEPQbv8emr/lbbBRZ3+Qxu3+AjXs7cfYS27qy/Mpmo8iT7PhI2spKDhuNWVrEOJYYwry2wvNLJMV2nGaN54a1FrdLP8w9TS+PwWyc5/vLc2wwvP9uNrDNzNuWGmOMOXV0D+YtHz/PWDZtZYUEz5nZPu47bce12w028tyaWcA8EeUx/uk//QLmC2u2UWjmiaewbLTFa9sGi9nM0pv8DbIT03meAy5984uYLza57p5/5VkrG9y/D8u+dvY85icP8Nz79Ac+hPmtS2cx33CYm0bGec4oFOz2rTtscNVNHsvrG2yEPH/mNOYNL084D959J+ZbDlukr2H38aLD0Hlo1xjmr41wPn3jJuZ941OYdx32tO0a2wfDAfsbpO1jg1Sozu+/sMrmt3c9/hDmLvRLhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoie0KZCCCGEEEII0RPaVAghhBBCCCF64rb2pzsevB/zxYtsF9m1fxfmmwu2QeAD72FTw9kLbF6Ietng8Na3vxvzmzeX+DpZ26JijDGeAKsglsAUVFxn+8ZWnq0F586cwzyYZgPWU2/hevcH2czRcpzaD/XbpqdWi20GFQ8bFPoNl1/eqmK+Pmdbm4wxJphii9T05WcwD4CpJxFio9dWgffGKYfRaqvOJpOd+Ac/9h7Mv/41NjE98cEM5q+89HUre+YPfwfL/tL3fwbza2U2Z7zzHTweGgW22qQHhzH31+qYG69tRfI4TC9vnGMbypHDbDJpeNkAMz7JppGio8+GWHphrs7aZpJkth/LlupshfJ7eJ7YBEucMcbEutw3B/dwHZhWE2NPvM/KXvzc5/kaTTaEBDNpzId2swlpJyJ+nhu6ITYl7R7lOaAKhpUD49wuI4M8fy9f5zVpY51NJ7nlG3ydtRXM/8W//AeYFzv2HPP6a2zSmTx0nPNhrv/lzQLm+3ZxPY5P7MU86uc+uFW1jTHNKvfjeoevMdLPa9Jqg+ePQ1NsH/TH+TrNHK+p73qvbTFaXeY1/5OfYvuSqfM4aQV5HtqJh+88hvmrc9ynkg6r3d1PPGZlN85fx7LpQf7mOn/2TcyvtXhOHovxpDnpsE7VGmw8HBq3n6dd5jkzkuG+8MprX8K87XGs8xGH0bPCfXAgzWa/kjdsZSEwQhljzKVb3NeSiTTmnjjPZ34v98GVIj97Km4/ozHGLIPZb+8If3/Mr/H3YjTI36P/5t/8OuY/9Q/+Peb6pUIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOgJbSqEEEIIIYQQPXFb+9NTD9+N+T96/3dhvrbNp/xNMWdFS5tsUJoYYROGB6wzxhgzc+sm5ttVhwEFbB3GGLPsMDdFI7ahYc3HFqJslquzE2GzxaXLVzDff+wo5iu3rmI+OcXWj6UF+5T/3W95GMt2G2xJWVxnW0Tc0XOi8TTmvgb3DZ+X97XpkH2DQJStMgmH/WE9x+/U57Bo7cSHDrFpY8rDfSpb5PzPfvXfWtk//5c/iGVXl2cxf/aVM5gfmhzCPNU/gnktx1aouMMUFGjalomWl01J3SYbwrwhtkz0p/meZ89zvx/L8H3PL7BtpY/GcpH7ZbTBFqa2n/taOsAmqkiM57OEY/x8/NNfxfzhR+6xsoceexTLbqzYlitjjGk4LCwffOAOfpidcNi3wt0G5hUvl0/5WlY2e2sZy95zNxuUOh026QwNs0XF1+U5/Mzv/hbmb1y8hfmhA/acsOfAESybTvH8lau1MT8wxmO2VOa+Wd5gq0vRz+/q7djtVKzYbWGMMUmHHcg1xwa6fJ1wmMd+dY3b++F7H8Dcs23PW1MDbBP6wBO85v35F5/DvAMmnb8Jf/B7X8F8ZO845l86z+v/zZvTVpaNp7Ds2rVLmKf83EdSDjOe8fP3VbHCc3iuxX3WF4xaWavNY3Nzng2GbQ8/i6fFfS2cctjr2jz2Z1Yd356DtlUtFOE1/80z1zC/MstWqMejbG1Kje/BPLfBdbNZ5no3bdugt7jG8/36HL//+ixbHN/60H18Twf6pUIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET2hTIYQQQgghhOgJbSqEEEIIIYQQPXFb+1N9I4d5e3A35kk/nzb/GlgOnnrrI1g2EGJDRsSx/+mG2AATaRcwL3bsU/LGGAOyIWOMMeFMv5UNO4wILYfd5Kmnnsb82xcnMb/nznsxnx5mi8SBsWHMTdC2Lly9+gYWPXP5IuYn9vEzrrXYbDQY4/ZrOwxBI/1sbgin7PKeDhtFqg5Tz1Af33O5xH1jJy7PXsc8GOa6uGfXFOb1um3U+pWP/DqWveMO7gszN2xDiDHGpJJpzPObbPEanZrCvF5cxbwE46cvwEaKbpCNF7uHuM2XN7hdBrMZzDNDY5h7vdweKyW7/9QKbErKDk9gHgvUMK9x1zThFtd7PcF988G7jmHuCdrlf/anfpKfpcnv76vlME9mbevJ34RmjS05l+f4nUfAvmWMMaG+ASsLFrawrMdhhjm4m+vzzQtsaXnwBK9h//Cf/xPME2Fu4ETW7sv+AJsEq11eewZivPi0DK8nySA/S7nO7R7u8npVbNnP063xGMx7bKuPMcak42xZbHT5nUJcBabS5rkiWOe53R+yjVYvfZntS4sOs+Noiq1YVwprmO/EB97FlqmiYx7s38PmnxfPnrOyqTT3+621ecxn3vwm5qEkW6Q6ba7nmTU2Ag0P8py8nLev46uxtckb5jEb5C5lJg/sx/zYsQOYX7jF5sRlR37nCds09kcf/0MsO7PG81O5yGPtzDX+djh45BDmhQi3UxqMbcYYU/Pb7ZF1mL6Cu7i+Lr/2KubecB9fyIF+qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXpCmwohhBBCCCFET9zW/nT+ygzm/X22Eekvr8an+b0ee++yuM5GhqkRNiW04w5rQb2OuS8axzxY5vtuOaxQkZZ92r4R4fdM+NnW0RpnI9LcX3wZ8xcvsp2gP8RahMw4WyRMy7azfObLL2NRn4+NIuubbG4YSXM7XW2xCag/wfaQwV27MA957fbYKrFtJunjtusEuD0GY/wsO3FgkN/5//qtj2L+S998E/MumLMGDx3Gsp/9/Ocxvzy3jHksxeOkBOYjY4zZG+a6iMS4XRqFTfueMdveY4wxo7u4319d2MA8EWBdxXaQx3Ihl8O8E+PxGW7DWO6wAcZfY8tTtcKGnbjDyLNWYFtHKM42l3qQp+QHj9nmk+tLK1i2vM316/NwewyDWepvQraPrXNby2wO80bZ+hU0tjEm6JhjV+fYetZ2lB9KOOZkw+01PMxjfG17na9Ts01BLgtg1HHPhuE+GGjzfNdxGBLjXl4La7D+GmNMImTP1f4QW338MHaMMabr42cPNnmdLTa5fr0tHvuXp+cwf/iuISs7eOJOLDu+zTayZ1/gtXB3jOebnVgo8DuXy2xoKvq4n/SH7XavOUxryQC3+b7DbJHzdfg6s465JOb4ptmqOiyaVdt+5HVYzCJVfpZmh78hMl3Ot5tsXPrh7/sw5k+/5wcx//Rn/5GVedp8z2MnD2KeyiYwr2zzeh1Ppbl8ka1b+TKvPzGYW65eZbPh3jF77BhjzPT0EubvffotmLvQLxVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6Inb2p9KVdv0YowxK8UK5kEP2y3OXLONHQ/edx+WbfvYRhPy8v5nrckWgrCfbRVrDkPD9hobSwpgganlC1i22jeC+ey1a5gX67b1xBhjpi9dxrxzmI0Df/TH/wPzUw8+YGU/8mNsPqg57Ff17UXMn33xRczf9eg9mK9u5fi+W2zmSPfbdekPsYFlq8z9MeToj6VwEPOd+PVP/R7mxW02ZN1x8AjmN85csLL8Or/bmSvXMa86TFizW2yNmEiz0WRsD1tCthavYF7u2FOG12GdqbS5nr0OA8nqJps2hvvZLrW6ze3u63Jfztft63fL3HaFCBtLQrUc5g2HxSPQ5md89oXnMd93hMf4H//5p62s45g/RqfYJJb1c/nZEpuu7Nnj/5v1VbaFbBV5jh2M81jfaNgGoaiXLScmxNasUt62MBljzOoWz9W7p9iAUmjwuhEJOMwzFbvuIo56bngda5vh8eMQhxm/l9+pbni8BX387EUYD0HDN216+FMhHeCxtlbk9ltZmMF8ZJDXzqEszxWf/9IXrezQYZ5vz8P3hzHGPHQf26KuOQxjO7G2xv8f9wZjyrUtzDdgXB2Y4P6aq3DfaYL50RhjNspc3rB8yxQcD58O8NpagKkk4pjvS02+RtjLlsu6w8TUKvJ4mF3lNTW3zmvkh77vB6xszzCbTi/NzGBe40c34/v28n9osLnKH01jfmKM7VLPvfiKlWWivIblHfP9gV3jmL9+lr8FXOiXCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoidue1C7v38Q81tXzmOeHpzC/OC+MStbzvFhmWiMD7OtOA4lpmIxzNcch1GijjO6K14+cFbbmrOy+ZUcX3vFLmuMMXv2H8X8Q+/hf/48kuF6X1ycxTy+fwrzasOuY0+E67eaX8F8boMPQA4M8HW+8Rof4H7kDj4QPJfnLlgp5KwsFM9g2VCVDztVO7xnHs8mMd+JTCuF+cwCH6wfOPEg5r/yS79kZc0o18PFc/YBLGOMKdT5wN3dJw9hvrTJB5JrTT6YWe3wyb1s3D5Uu8dxCO3W/A3MNys5zAcHuN8X23z6LRFy9J0GHwCMBe0xvh3iA6W1Gvf7Tce8dTTFE0u9w9ffP5TF/NwbpzEfHYdDdNkJLHv14jnMV7d4TmwVefz8rSeewvyvWF9iiUMnz9KLXIwPDgbadh/MB7k+x0I8pmuOQ9CpDOfdMIsLQlVu35IJYx5p232tAjIDY4wJeXmsbTcc/TtmjzVjjNmuOg6xd3mMlxpc70m4frXO9R5zHOQt13hdTnC1m/N1Pqx/fGgS80ZsGPPrl+0+vrDKa1i9zPdsB3ldXp9dxnwnrk+zVCMR4nY/fJLvn9uw15N6k79zirl5vkaJ+1TbISJYK3EeMCya6BtgoYTPY/fNikMCE/FxXnI84/5J+zvSGGMCkTTnXa6Dj/z6f8C8krfX1I/+Cpft+ngMDu/jfrxrhNe2+AALCvIFXjtvLXAfX5q9aWWhEA/CdIjniW1HvWci/3tiG/1SIYQQQgghhOgJbSqEEEIIIYQQPaFNhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoieuK39aXJyP+a+KJsIDo3v4gsFbPvE6gz/k/aeCP8z5CHHyfRilfNghw0wWzX+p959NbYc1MBcEOqwLWUlz9d4/Q8/xs9S4PLBIFs/Av1sPzrzxmuYt8Bo5Y+zxcTvsBkkAmxQeN973o350489hPnWVhnzbIztIbHkgJXFw6wgyRX52okOX7sRjGC+Ewf67Gcyxpip970f87mLbAP58vNnrOzxR+7AsunBUczj1Rzmvhj3kZUL1zAPPsYGssTWOubGb/eHgTRbJoJhtkIZsP0YY4w/ySaMGzcWMC/XuW/GHH25BUaruMPIU27yPFErsBkmX2CbUCbK463S4jG+t68P889+4RkrW8mVsOz0HJurHFOi8STZDrQT+TW2P1UrbCarb/Nz+TP2O/u7/LA5x/xdb+cwD6XSmEf9/Pe0XJuXxGiAc3/Mvn64zf2v2mGLitdwO9a7jnZps6Gq4jC2ZZIOMxlUpUPQhWWNMSboWAt9jn5/cA/PoU0/m4D2TfZjvnDEtg+9+epZLPtj//inMR/I8LfG9UX+NtmJXVN8vYqj8tYXeU4+eNB+t+X5GSw7Pb+EeTzKhsO1vGO+y29hvr6dw3xlmedBf8Dua6kwz9N++C40xph3Ps5rUnYEDHjGmM3CJuaDw2zHOxJgi+Mv/+rvWNn/+XM/g2W/8fwLmG8VuV7OX76F+cjIRczDUX5Gb7eA+cCw/Z1QL3JZf4z7RjTEa36Rh6YT/VIhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ64rf3pyJGHMV9bZutHNL0H89V524JT77IpYSCVxbxYYstEeY1P23e9bKQZjLC5atOwrcIUbGNJrcJWoW5xG/Ph/iHMy1tsf9iu5DA/eYBNQEvjg3ydnG0JqRXYlDS+n80KAcfJ/7iHjQ6bBTZdhL28f3WIYkwWird93KamwQ9Za7HlKdvmvrcTm1vcvqEuv3N8MM35im1pWSlyRQwNsQ3oK187j3kryP34nR/4PszrNb7vepHb69HjthHO5+O+kAlyX7v36CHMlx3zSneEbRUBx99EljbYehEN2OXLQb729vI85uFsGvPhfp5Xbl2ew/zlb76Eea7Fpp6lJXseasT5nmMZNoAtLLN9KVD439R7/C9Chtu9lGOTzGqHzTOBfM7KfJE0lj0+MIZ51XC97R1mo9jqGveRk/vZWNb1cV+r12t2GOL5xfUXvNVttj8lw/xO528UMW+Vcphnd+/GvLxl94e6o00DdX7GdoAtZsEml5+5xbaiJFiDjDHm9PIK5murs1b26FNvxbLRANu4zt+yr2GMMQd381q4E14vf04NJLjlSw1eny6cftMu2+E1ZnuF56linL8V/I51uGvYHHbH4QOYb26ycSkMHwwzC2zvMzX+pns+w98zY4s8f43us21Zxhhz8+oVzDf5883863/5U1aWTPG328k72da4lF/FfCjJ60y5wX3m8lk2mQVjPN4O7Lbnua0cf0vHfdzWh/Y8ifmuIb6OC/1SIYQQQgghhOgJbSqEEEIIIYQQPaFNhRBCCCGEEKIntKkQQgghhBBC9IQ2FUIIIYQQQoieuK39KRxiO8H9Dz2BeX+crRfPPPu8fW1TwbJdP5+qz6QCmPsdtpsvfPpzmO/axzaDqZFhzC9X7ecs5m5i2dXtHOaBFusGPFGu/uKKbW0yxpgKCyDMrmF+9mz/gJV1G2xgGRxjq0rKcPmtbbYG7Rtj08Y2i4DM4CA/++CUbRnKrbLp6+DROzEPOmwchZqjIndg9zBbEK7MstEkv8l5N2TbF+JhNvDEEnzPn/qHP8H3bHH99zmsagMDbNo4tWsX5ovTtnVqqI/ruVxtYV7KseUpE49jPn+dTVehDPfZeGMD83DINmlFHP275rD9bK2wMaYyzPXYqbNlqOG4bzrC89zElD1Oig51Wpm7gJkcTGG+usWmnp3wdnleG5hge04xxyafWHbCytptfom5NTawnTh2BPNrs3zPH/mepzDf3GTDzECK+2YyZc+xPoddpWq4beNxHicLDttct8HWnMwI13sErGfGGHNlw15ngk02S23kuY+EfY5nX+V6j3i5329u833TEa7L7IQ99utlrq+Wn9//2AGe4/7D89/AfCeuXngdc180jfm9d7G16KWX160st8FzmifE/TKT5G+3ZoctWwFHny2Uua+1SjyvhUZsC9FQmteeV147h3kwfBXzo997H+Z7xicx3yg75vYC2+m2++05NhpOY9l4xh73xhhz4+VvYt53/0OYexwGrNFx7pvhEI+3uTk7T0bY5OYLsEVzOMuGqnbYYd10oF8qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNETt7U/jY8OYZ6NssWi3WGrzt/58PdY2Se+wHamW9N88v/AoWOYN8s1zB95+l2Yt6qsIZpbYrNQs2MbTr73R/4ell1ZmMY82ZfB/Itf/Czm40dPYb66wM+Yq7GFZTBr27iqAbZCBJpsFfBG2C7Rn0xj7o9znxkIsalmucAWsETCvm8gtAfLdqrcB1a2Oe/L8DvtxNU1NnCUimyM8cW5roc8dnuFYlzW32TrSrXKRo16jq0c2X1sVQv5eMwWWtwfokl7yii3+Rq1Ols2ym1ulyGHpaZW5TpIhtgiNX3xAua7x+2+uThvm1aMMabPYd2aXVvAfHWW58SOn80Zb38720Cee/EFzKeStrnKE2NDyPnz1zD3cJOa4TYbYXZi9MBezPsivKxsl3luWFuy29Eb4bJDg2nMN0tsUfG0eb5fcZiVpgbZ4hUMxjDPggVmtcz91eeYYz1RtiZ2tni++foLL2F+5DD3h1T/OzCfGOy3stw2j8F0he1MK9tsKuxUuH4bYbY1epq8Dmy1Qpj7wKg4BzYrY4w5vM31+LyjHg8O2PXyN+Gdj7EVc25lFfNoitv95/7p37eyl86wAW9rgd/tjSvzmE+McP+uNtg+aBrcl9c6XL5dsef2PQdOYNn+fraVzS1z37ly4SLmJYdl8J47+b6mw3P10k3b7Bfy8zowmOVvuvFd/I2SjHA/Xiryt9v2OveZI3ecxDwStL8fGh2eh+M+tkJV6/yNFvA6dIIO9EuFEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ7QpkIIIYQQQgjRE9pUCCGEEEIIIXritvanoRSfWK+0+eS/r8GmjY7HPj3+3e98EsuuFtle02o0OPfyK8QifMK96OH85JEDmAei9vVX5uew7PAU21DWltjG0g2wCaM/wvmyj206aXhGY4xZWNy0ssE0Gyeig2wz8DrsD2WWFphOgy0sWxXH/+AwAXXBiOKtsaknmOZnj5aWMM/XuS/txOb2Cua1NtsRYo66C8Rtk0zYoeYpVPhZbzz/POYn7nsEc1+DzQ7+NJuw2g22scwu2laKdpKfseswhPjBqGaMMdPzM5h38mw9m9j/IObfXL3J1xlLWdnhiWEsu7zFtpuhAbZ09Y/YFiBjjKnkeTw0Dbd3to9tUS2fPcZfe/lFLGt8aYxjAR/mW23uGzviZ+vXJYel7kPvYQvRa2/a4+HS5RtY9if+7v+N+a1F29xijDFXb/B1kg7b2maJ56OJIbvvGGPMtVnbshONcRumstzXqnW+56G9d2IeD7OJ6hd//vcwf+eH2ZKWidtjv7p8BcsWtnntOXaIbTfXp3kMZlP87MlEEvOwcdhxwJqTX2VjzmaRv0vefOVZzB9/+rsw34mvfOGrmO+7j817D93Jc/Vv/tFHrezit17DshubjrWszWN998Q+zPdO8vx1+RYbLTNJXh+6XtucNZi1zXXGGDM/z33qgfvvx/zaDK/nx8EUaYwxNxfYymjq/OxRGJ+1Cn+PlmLcj1120YLD0OntOCyLfWzp8hqec5999bSVHd3PNrgNR5cZz/C3Ybp/lP8HB/qlQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9cVv7U7nL9pZ2h20hq9tsTBlI2TajzTIbL0qb25jPzC9gPpxlK8f1BTYFpaNstCr4g3z9lH0ifqbG71/eYtvAep5tAwNRvmcsO4J5fiOP+fkbbD6JBWzDyWaOn2X3JBuMppfZHDKUZVNA0WE/GHAYGlKDbCjwgH0o33AYFIr8jCbIFq1ky2Gi2gGfn/tOt8Z9tuqwtGSMPa6281xvw2nuI3PLbDppv/4K5qlBtkkcdFjShvqymOdu2VNGs+GwPDV4jHc8AcwHM2zxKg8PYV4sb2D+wR/8fsxHB20Lyc1b3HcSE2wseeENHuP1Jo+rrSrn8SC36/om20Zy23bu6XLbhbtsfgnBXGaMMQ/tYYPPThy56yDmgXM8P/ochp/9B2xr3od/8Mex7OY2z+tFx5yciHNfa4NNyxhjKiXbmGeMMa9f43a54+hxK6vxVGq2C9xfA2C6M8aYdoXX03OnL2D+7Ff+BPNGhOfeYNueB70erscb517mZ7nEz9Jx9PuKY06sbnH9tmPcZ3x1+zk9Ab52OsTztifA9VJY57l1J37tD7+FefwTz2H+H/7TH2P+9redsLLtMvfX7/ue92D+nz/6u5jfcWA35rG0bW0yxphvPfdNzCMpLt8By+CZy2wCCwb4b9rXZ9nyFA1zHbQCPJeGurz+BFJpzE3LtjVuO+xP6SaP2VKT5+SrVy9jHoryuuwxrGiaXeP1Z2rSXq9CDkNVKsITlBe+F40xZnvJNtwZY4zZa/dTY/RLhRBCCCGEEKJHtKkQQgghhBBC9IQ2FUIIIYQQQoie0KZCCCGEEEII0RPaVAghhBBCCCF64rb2p2Ef21im21uY96fZtuOn0/ktvkY0xUaGP/7F38H8gYefwLy8yRaPfUdPYh7qcvn5JdsgsHcXG4tWCmwKCHfbmJernJ/92tcwv+exJx3XaWG+UbZNDMXFOSzb9PDJ/+EU94Gbc8uYj46zuaqbYotHpcA2g426bVHYOzGKZddztrXBGGOCTTYozG3nMN+JTofbq9plu0ioxCaVxaLdXt0K12dtnM08pVwO8/BxNjKEHDaJtRybq669/CXMY2G7XXb5eRqZXed2GUixfeLmFpt94mGeV3yhKObNJpu06l3bkLFvL/epfIPr67iH6/eN8xcxTzvMJNUO/z1n/0G2s+w7+pCVrczyHPrpz30Vc0+VbUI3Z3nu2xGHBbDgsB99/av8XNtVO4uluV0OHb8H80yH58BPf+ITmDceYpPe9ibX0due5Lm32LbvC0PEGGNMX5aNaqkgm8au5tm6cuLgIcyHRnmuiMd4nMRSth2msDGDZafG2TJ06/pVLr//KOaLM7z+VDs8hxSX2MR066Y9Xy7PssntxjTPK2950h5Txhiz5/gpzHfCF+U1tJvisb7isOr84X+7ZWVHHW0ejfO3iCmxfavV5floZc6+pzHGbIB1zhhjtq6x0SneP2ZlY8PDWLbksAZ6K/zsd93D33qlHM9fOR+vy4MOa147YK8z4SLPsRdu8vqQiPA9q4a/az2Ob8NmkM1NQcPmystz9jhpnuU1ac9eHpv7Brle5td4TuTRo18qhBBCCCGEED2iTYUQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKInrjtQe3lJh+0rNXgZJ0x5s1ZPmx6x4T9T5FfnONDSoNpPux0z8N8LCQZwNh4+vmAcX6dD4rFM2nM947ah+iCUT74FtjcwHxq9zHMX3jmRcyP3X0n5qtz1zHPjvLh6NVL9j8NH8z2Y9m+Qa6v2QIfVPpb7+dDU3OOg3UHp/iw1oljd2O+VbDrslbnw5iZJPfTrp8Ppe3b7TjctgPdLh+2cvgJTKnKB9GWpu1DbqUGH9i6OvMq5oMT/A7nT7+J+We/+AXMf/i73475cIZfau9wysqqDkHBrWt8iHPJcXD02P5JzL1dnqb6+rk98tUc5tWK3ZfzdT5VHIj4MG94OR8c5MO25QIfGu86Dk13ozyhbW0tWFkrxHPlh77nnZhfvcljs+U4GLkTi8v8Dp0yH2Lcc8cDmH/969+wsv/6+5/Esj/5j9KYRxMsgnj3O9+C+d2nTmFedhz6nJqYwrxQstv36gwfYn3gBM+BPEsYM33hEuZvefx9mAd9PK6CKZ7zSWhQcByYTvl47u0b2Yd5u34N85ku9+9OlQ/9F6t8eHRj3R7LxRbP9+vXeM0/+cjbMC+9fgXz7+Zh9dfE0/bcaIwxQ1nOV20HjDHGmEzI/ltvYYPH1Mc/9p8xb3a4Lv7gt38b8/0nj2M+Omh/uxljTLvD82Ab5CjTC3xQ/vjRw5ivbfJ6srwwi3lykL9/mjX+Lji3xnKSSMTu+30TDvlBkK+9sskCiJF+np860QHMQx1el/I1Hj97x/dbWXXkAJZNQf8yxphmlOvxqXfwHOpCv1QIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoidua3+6epkNDrt2TWA+Gmf7xDdffcnKJobYSHF9lk/4z9zkZ6mPTmFe3mTTyfAUW3OGAmzfKXds60VjYxHLdvxsRGhV2Tbgj/E/xT5/nf959UqHPSH9aTZnPPbYvVa2uGhbZIwxpuowerWLbG5YXmXT1R2HuH5LFVZdXLz0OuYmYNuHsrEEFs1ks3zPPNd7znBb74TXYbxo+tjsEIuwVWdxy7bmJGNsW2o5DFbTN9kElhocwry0zVabz3z1m5gfG+F3yh+ybRi/86u/jGV/4h/+JOZn37DnA2OMyZe5f9+5fzfm00tsCfEazv0hmO5qDjtTh8dmy9GPu15uv5if36nob2Ie7XDfTPelrSxRZUPI/Cr3+0yMn6WRYDvNToxPTmHuD3LfmRwaw/zv/YOfsrID47zGPPcmzxdDhttlaJjtNYWtJcy3tth2tzLPBqGhcbtvXnn9ZSx7/iyvYd/33d+H+ZefeQPzf/Mv/zHm4STPj6U6z+2eiF0+3eBrbGyvYX7sgG2dMcaYN6tsi6q9fBrzpbUc5pEu25/GpvZaWXue57iBPv7WyG/wGpaeHMd8J1oVNjTlQ7w+J6Jc17W63ZcP7ebxcP78Ocw9TR4PGyWe1zoXz2MeTvPaeuSgXf/GGJMdscfD9K1bWNYXdsyxzRXMjaO8z8N9zZdhs9JUiufYdtBuj0WHpdSE+Fn2jfH62w5w+UmHddMbZrPhcIrnVl/YNgGmHHbAco37adlhJBzJ8HVc6JcKIYQQQgghRE9oUyGEEEIIIYToCW0qhBBCCCGEED2hTYUQQgghhBCiJ7SpEEIIIYQQQvTEbe1Pf/jvfgPzj3/qjzCvVNi+8PLX/6eVbUROYdlXX/gW5g1PCPOFWTYLBCJcvlNlM8xKiS07npxtUhmf3Idl69vLmPv6ufzbHr0L82s3LmMeN3xqv+oJYN7O3bCyZID3kRNZNlF4R9n+EGmyYWY7z9eJFNiqEvSwaWMgbZvEcnm2PATL3Ka5BtdXq5LDfCeWN/j/O7CLDTNf+MarmI9N2laKpXWun41FNo3tdtg3VubYCtUJcB9pVLmOfue//inmoxMjVlbiYW/+4I8+jXmzw/dMXWPDzuxlzt/z9KOY5+tsjBlI2/auepOtHAkf11fIy0aR0QjbOpoOq9zBSTZq3JzjOWQCxkM5zDay4QzbnBZWeJw08pzvxNjuA5gPZPh6Bw+cwvzSpTNW9o2X2AKYjXHb9vcNYx5osdGkWmMT1u5xtrHUmjxvBj12++4+yPUSDbMd8dVbbETyRtm4VIvwst2ts1Es4bDA1GEc9vWxvaawzaakWIatRI/ey/X40nNsxhpOcvmGw4YWbttrwXqFx3I4xH1m16GDmMf835kdMJbmd2hV2QJYqPE48XVsW9f1VV4HBob7MM8X2WoXCHPfKbNIzqSD3O9nVtkK6Qnb31GLW1w23WBDVWKQ59h2g8dyN8zlkxH+pusbmsQ8m7TNSrv3sd2sL859rW9oFPPZaftbzBhj2h5+Rl+d37Vj+Psq5bP7bNvLc1w4xOtGJM12vnWHLXPI8HX0S4UQQgghhBCiJ7SpEEIIIYQQQvSENhVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQggheuK29qd//Wsfwfzn/+PPYv7ai2x7+dD3vNfKrt5is0XVx4aM4jbbQFpdNjsczPDp/NlVtuw8spuNAMWObXUp5fnZk31sISg5rFDhGL9r0s+n9gtF2wphjDH7ptj2slUJW9kwH9g3r712DvOH7zmK+eo2259GR7gOmn6HgcRhFdn22OWjDhNF07Cpp+Z4xjPzbGJ46n6M/5rxYbZ7lFt8/yfedjfmn/jUF61sbZntHpGYbaQwxpgzr7yGedvDfce06hivzbF9ohvgfH3VNpb4G2xaq3X42Z96guvl2y+9gPnWOo+3F1/lPnvffYcxrzTs/hNz2NCKJa7HZoFNLoksW3N8+RV+lrLDPjTM48dv7Dru5ynONLrcdvUCm8FqDtPVjjR47o0PsNEt5OG63jVp25LCAX7WrpfvOTt9CfO5xSXMT+xlW9TaFi+Jewf5nb7w7bNW1i7zPH3gxAOYB/xsQytmeH3oD/Bcum24TzmmfOPx2HVZrZaw7MToFOabhs1s3Xoa86TDythwCJe8TR5vw/sPWdk7vpvnlV/89f8H8+OHpzD/7Dee5YfZAU+b2yWU5nfOOox880vzVuYya9b9PNaDXjYl5spshco6poCOn5895TBqLYLFcCDNZrxAnM2Sk6P9mFc89veMMcbsGubyDQ+PH9d3hDdkX38owmVTWZ6nYz4uv38/G+FMk41txs/zkLfFxiwDc3jY8S3QCXNjF4r8vdQMORaaMPd3/VIhhBBCCCGE6AltKoQQQgghhBA9oU2FEEIIIYQQoie0qRBCCCGEEEL0hDYVQgghhBBCiJ7wdLsOW4wQQgghhBBC/A3QLxVCCCGEEEKIntCmQgghhBBCCNET2lQIIYQQQgghekKbCiGEEEIIIURPaFMhhBBCCCGE6AltKoQQQgghhBA98f8Clkw4MhNErjEAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Display the samples\n", "\n", "n_img = 8\n", "f, axs = plt.subplots(2, n_img // 2, figsize=(14, 7))\n", "\n", "for k, image in enumerate(samples):\n", " i = k % 2\n", " j = k // 2\n", " axs[i, j].imshow(np.clip(image, 0., 1.))\n", " axs[i, j].axis('off')\n", "f.subplots_adjust(wspace=0.01, hspace=0.03)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 4 }