{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Factor Graphs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "### Preliminaries\n", "\n", "- Goal \n", " - Introduction to Forney-style factor graphs and message passing algorithms\n", "- Materials \n", " - Mandatory\n", " - These lecture notes \n", " - [Loeliger, 2007](./files/Loeliger-2007-The-factor-graph-approach-to-model-based-signal-processing.pdf), pp. 1295-1300 (until section IV)\n", " - Optional\n", " - [Video lecture](https://www.youtube.com/watch?v=Fv2YbVg9Frc&t=31) by Frederico Wadehn (ETH Zurich) (**highly recommended**)\n", " \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Why Factor Graphs?\n", "\n", "- A probabilistic inference task gets its computational load mainly through the need for marginalization (i.e., computing integrals). E.g., for a generative model $p(x_1,x_2,x_3,x_4,x_5)$, the inference task $p(x_2|x_3)$ is given by \n", "\n", "$$\\begin{align*}\n", "p(x_2|x_3) = \\frac{\\idotsint p(x_1,x_2,x_3,x_4,x_5) \\, \\mathrm{d}x_1 \\mathrm{d}x_4 \\mathrm{d}x_5}{\\idotsint p(x_1,x_2,x_3,x_4,x_5) \\, \\mathrm{d}x_1 \\mathrm{d}x_2 \\mathrm{d}x_4 \\mathrm{d}x_5}\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Since these computations suffer from the \"curse of dimensionality\", we often need to solve a simpler problem in order to get an answer. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Factor graphs provide a computationally efficient approach to solving inference problems **if the generative distribution can be factorized**. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Factorization helps. For instance, if $p(x_1,x_2,x_3,x_4,x_5) = p(x_1)p(x_2,x_3)p(x_4)p(x_5|x_4)$, then\n", "\n", "$$\\begin{align*}\n", "p(x_2|x_3) &= \\frac{\\idotsint p(x_1)p(x_2,x_3)p(x_4)p(x_5|x_4) \\, \\mathrm{d}x_1 \\mathrm{d}x_4 \\mathrm{d}x_5}{\\idotsint p(x_1)p(x_2,x_3)p(x_4)p(x_5|x_4) \\, \\mathrm{d}x_1 \\mathrm{d}x_2 \\mathrm{d}x_4 \\mathrm{d}x_5} \n", " = \\frac{p(x_2,x_3)}{\\int p(x_2,x_3) \\mathrm{d}x_2}\n", "\\end{align*}$$\n", "\n", "which is computationally much cheaper than the general case above." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- In this lesson, we discuss how computationally efficient inference in factorized probability distributions can be automated." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Factor Graph Construction Rules\n", "\n", "- Consider a function \n", "$$\n", "f(x_1,x_2,x_3,x_4,x_5) = f_a(x_1,x_2,x_3) \\cdot f_b(x_3,x_4,x_5) \\cdot f_c(x_4)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The factorization of this function can be graphically represented by a **Forney-style Factor Graph** (FFG):\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- An FFG is an **undirected** graph subject to the following construction rules ([Forney, 2001](http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=910573&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F18%2F19638%2F00910573.pdf%3Farnumber%3D910573))\n", "\n", " 1. A **node** for every factor;\n", " 1. An **edge** (or **half-edge**) for every variable;\n", " 1. Node $g$ is connected to edge $x$ **iff** variable $x$ appears in factor $g$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Some FFG Terminology\n", "\n", "- $f$ is called the **global function** and $f_\\bullet$ are the **factors**. \n", "\n", "- A **configuration** is an assigment of values to all variables.\n", "\n", "- The **configuration space** is the set of all configurations, i.e., the domain of $f$\n", "\n", "- A configuration $\\omega=(x_1,x_2,x_3,x_4,x_5)$ is said to be **valid** iff $f(\\omega) \\neq 0$\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Equality Nodes for Branching Points\n", "\n", "\n", "- Note that a variable can appear in maximally two factors in an FFG (since an edge has only two end points)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Consider the factorization (where $x_2$ appears in three factors) \n", "\n", "$$\n", " f(x_1,x_2,x_3,x_4) = f_a(x_1,x_2)\\cdot f_b(x_2,x_3) \\cdot f_c(x_2,x_4)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- For the factor graph representation, we will instead consider the function $g$, defined as\n", "$$\\begin{align*}\n", " g(x_1,x_2&,x_2^\\prime,x_2^{\\prime\\prime},x_3,x_4) \n", " = f_a(x_1,x_2)\\cdot f_b(x_2^\\prime,x_3) \\cdot f_c(x_2^{\\prime\\prime},x_4) \\cdot f_=(x_2,x_2^\\prime,x_2^{\\prime\\prime})\n", "\\end{align*}$$\n", " where \n", "$$\n", "f_=(x_2,x_2^\\prime,x_2^{\\prime\\prime}) \\triangleq \\delta(x_2-x_2^\\prime)\\, \\delta(x_2-x_2^{\\prime\\prime})\n", "$$\n", "\n", " \n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Equality Nodes for Branching Points, cont'd\n", "\n", "- Note that through introduction of auxiliary variables $X_2^\\prime$ and $X_2^{\\prime\\prime}$ each variable in $g$ appears in maximally two factors. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The constraint $f_=(x,x^\\prime,x^{\\prime\\prime})$ enforces that $X=X^\\prime=X^{\\prime\\prime}$ **for every valid configuration**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Since $f$ is a marginal of $g$, i.e., \n", "$$\n", "f(x_1,x_2,x_3,x_4) = \\iint g(x_1,x_2,x_2^\\prime,x_2^{\\prime\\prime},x_3,x_4)\\, \\mathrm{d}x_2^\\prime \\mathrm{d}x_2^{\\prime\\prime}\n", "$$\n", "it follows that any inference problem on $f$ can be executed by a corresponding inference problem on $g$, e.g.,\n", "$$\\begin{align*}\n", "f(x_1 \\mid x_2) &\\triangleq \\frac{\\iint f(x_1,x_2,x_3,x_4) \\,\\mathrm{d}x_3 \\mathrm{d}x_4 }{ \\idotsint f(x_1,x_2,x_3,x_4) \\,\\mathrm{d}x_1 \\mathrm{d}x_3 \\mathrm{d}x_4} \\\\\n", " &= \\frac{\\idotsint g(x_1,x_2,x_2^\\prime,x_2^{\\prime\\prime},x_3,x_4) \\,\\mathrm{d}x_2^\\prime \\mathrm{d}x_2^{\\prime\\prime} \\mathrm{d}x_3 \\mathrm{d}x_4 }{ \\idotsint g(x_1,x_2,x_2^\\prime,x_2^{\\prime\\prime},x_3,x_4) \\,\\mathrm{d}x_1 \\mathrm{d}x_2^\\prime \\mathrm{d}x_2^{\\prime\\prime} \\mathrm{d}x_3 \\mathrm{d}x_4} \\\\\n", " &\\triangleq g(x_1 \\mid x_2)\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- $\\Rightarrow$ **Any factorization of a global function $f$ can be represented by a Forney-style Factor Graph**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Probabilistic Models as Factor Graphs\n", "\n", "- FFGs can be used to express conditional independence (factorization) in probabilistic models. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- For example, the (previously shown) graph for \n", "$f_a(x_1,x_2,x_3) \\cdot f_b(x_3,x_4,x_5) \\cdot f_c(x_4)$ \n", "could represent the probabilistic model\n", "$$\n", "p(x_1,x_2,x_3,x_4,x_5) = p(x_1,x_2|x_3) \\cdot p(x_3,x_5|x_4) \\cdot p(x_4)\n", "$$\n", "where we identify \n", "$$\\begin{align*}\n", "f_a(x_1,x_2,x_3) &= p(x_1,x_2|x_3) \\\\\n", "f_b(x_3,x_4,x_5) &= p(x_3,x_5|x_4) \\\\\n", "f_c(x_4) &= p(x_4)\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- This is the graph\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Inference by Closing Boxes\n", "\n", "- Factorizations provide opportunities to cut on the amount of needed computations when doing inference. In what follows, we will use FFGs to process these opportunities in an automatic way (i.e., by message passing). " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Assume we wish to compute the marginal\n", "$$\n", "\\bar{f}(x_3) = \\sum_{x_1,x_2,x_4,x_5,x_6,x_7}f(x_1,x_2,\\ldots,x_7)\n", "$$\n", "where $f$ is factorized as given by the following FFG\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Due to the factorization, we can decompose this sum by the **distributive law** as\n", "$$\\begin{align*}\n", "\\bar{f}(x_3) = & \\underbrace{ \\left( \\sum_{x_1,x_2} f_a(x_1)\\,f_b(x_2)\\,f_c(x_1,x_2,x_3)\\right) }_{\\overrightarrow{\\mu}_{X_3}(x_3)} \\\\\n", " & \\underbrace{ \\cdot\\left( \\sum_{x_4,x_5} f_d(x_4)\\,f_e(x_3,x_4,x_5) \\cdot \\underbrace{ \\left( \\sum_{x_6,x_7} f_f(x_5,x_6,x_7)\\,f_g(x_7)\\right) }_{\\overleftarrow{\\mu}_{X_5}(x_5)} \\right) }_{\\overleftarrow{\\mu}_{X_3}(x_3)}\n", "\\end{align*}$$\n", "which is computationally (much) lighter than executing the full sum $\\sum_{x_1,\\ldots,x_7}f(x_1,x_2,\\ldots,x_7)$\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Messages may flow in both directions on any edge (here on $X_3$). We often draw _directed edges_ in a FFG in order to distinguish forward messages $\\overrightarrow{\\mu}_\\bullet(\\cdot)$ (in the same direction as the arrow of the edge) from backward messages $\\overleftarrow{\\mu}_\\bullet(\\cdot)$ (in opposite direction). With directed edges, the FFG looks as follows: \n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Crucially, drawing arrows on edges is only meant as a notational convenience. Technically, an FFG is an undirected graph. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Note that $\\overleftarrow{\\mu}_{X_5}(x_5)$ is obtained by multiplying all enclosed factors ($f_f$, $f_g$) by the green dashed box, followed by marginalization over all enclosed variables ($x_6$, $x_7$). " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- This is the **Closing the Box**-rule, which is a general recipe for marginalization of hidden variables and leads to a new factor with outgoing (sum-product) message \n", "$$ \\mu_{\\text{SP}} = \\sum_{ \\stackrel{ \\textrm{enclosed} }{ \\textrm{variables} } } \\;\\prod_{\\stackrel{ \\textrm{enclosed} }{ \\textrm{factors} }}\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Evaluating the closing-the-box rule for individual nodes\n", " \n", "\n", "- First, closing a box around the **terminal nodes** leads to $\\overrightarrow{\\mu}_{X_1}(x_1) \\triangleq f_a(x_1)$, $\\overrightarrow{\\mu}_{X_2}(x_2) \\triangleq f_b(x_2)$ etc. \n", " - So, the message out of a terminal node is the factor itself.\n", " - (Exercise) Derive now that the message coming from the open end of a half-edge always equals $1$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The messages from **internal nodes** evaluate to:\n", "$$\\begin{align*}\n", "\\overrightarrow{\\mu}_{X_3}(x_3) &= \\sum_{x_1,x_2} f_a(x_1) \\,f_b(x_2) \\,f_c(x_1,x_2,x_3) \\\\\n", " &= \\sum_{x_1,x_2} \\overrightarrow{\\mu}_{X_1}(x_1) \\overrightarrow{\\mu}_{X_2}(x_2) \\,f_c(x_1,x_2,x_3) \\\\\n", "\\overleftarrow{\\mu}_{X_5}(x_5) &= \\sum_{x_6,x_7} f_f(x_5,x_6,x_7)\\,f_g(x_7) \\\\\n", " &= \\sum_{x_6,x_7} \\overrightarrow{\\mu}_{X_7}(x_7)\\, f_f(x_5,x_6,x_7) \\\\\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Crucially, all message update rules can be computed from information that is **locally available** at each node." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Sum-Product Algorithm\n", "\n", "- (**Sum-Product update rule**). This recursive pattern for computing messages applies generally and is called the **Sum-Product update rule**, which is really just a special case of the closing-the-box rule: For any node, the outgoing message is obtained by taking the product of all incoming messages and the node function, followed by summing out (marginalization) all incoming variables. What is left (the outgoing message) is a function of the outgoing variable only: \n", "\n", "$$ \\boxed{\n", "\\overrightarrow{\\mu}_{Y}(y) = \\sum_{x_1,\\ldots,x_n} \\overrightarrow{\\mu}_{X_1}(x_1)\\cdots \\overrightarrow{\\mu}_{X_n}(x_n) \\,f(y,x_1,\\ldots,x_n) }\n", "$$\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- (**Sum-Product Theorem**). If the factor graph for a function $f$ has **no cycles**, then the marginal $\\bar{f}(x_3) = \\sum_{x_1,x_2,x_4,x_5,x_6,x_7}f(x_1,x_2,\\ldots,x_7)$ is given by the Sum-Product Theorem:\n", "\n", "$$ \\boxed{\n", "\\bar{f}(x_3) = \\overrightarrow{\\mu}_{X_3}(x_3)\\cdot \\overleftarrow{\\mu}_{X_3}(x_3)}\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- (**Sum-Product Algorithm**). If folows that the marginal $\\bar{f}(x_3) = \\sum_{x_1,x_2,x_4,x_5,x_6,x_7}f(x_1,x_2,\\ldots,x_7)$ can be efficiently computed through sum-product messages. Executing inference through SP message passing is called the **Sum-Product Algorithm**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- (Exercise) Verfiy for yourself that all maginals in a cycle-free graph (a tree) can be computed exactly by starting with messages at the terminals and working towards the root of the tree." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Processing Observations in a Factor Graph\n", "\n", " - Terminal nodes can be used describe **observed variables**, e.g., use a factor $$f_Y(y) = \\delta(y-3)$$ to terminate the edge for variable $Y$ if $y=3$ is observed.\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " \n", " ##### Example\n", " \n", " - Consider a generative model \n", "$$p(x,y_1,y_2) = p(x)\\,p(y_1|x)\\,p(y_2|x) .$$ \n", " - This model expresses the assumption that $Y_1$ and $Y_2$ are independent measurements of $X$.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ " \n", "- Assume that we are interested in the posterior for $X$ after observing $Y_1= \\hat y_1$ and $Y_2= \\hat y_2$. The posterior for $X$ can be inferred by applying the sum-product algorithm to the following graph:\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " - (Note that) we usually draw terminal nodes for observed variables in the graph by smaller solid-black squares. This is just to help the visualization of the graph, since the computational rules are no different than for other nodes. " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "source": [ "- (Exercise) Can you draw the messages that infer $p(x\\,|\\,y_1,y_2)$?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### CODE EXAMPLE\n", "\n", "We'll use ForneyLab, a factor graph toolbox for Julia, to build the above graph, and perform sum-product message passing to infer the posterior $p(x|y_1,y_2)$. We assume $p(y_1|x)$ and $p(y_2|x)$ to be Gaussian likelihoods with known variances:\n", "$$\\begin{align*}\n", " p(y_1\\,|\\,x) &= \\mathcal{N}(y_1\\,|\\,x, v_{y1}) \\\\\n", " p(y_2\\,|\\,x) &= \\mathcal{N}(y_2\\,|\\,x, v_{y2})\n", "\\end{align*}$$\n", "Under this model, the posterior is given by:\n", "$$\\begin{align*}\n", " p(x\\,|\\,y_1,y_2) &\\propto \\overbrace{p(y_1\\,|\\,x)\\,p(y_2\\,|\\,x)}^{\\text{likelihood}}\\,\\overbrace{p(x)}^{\\text{prior}} \\\\\n", " &=\\mathcal{N}(x\\,|\\,\\hat{y}_1, v_{y1})\\, \\mathcal{N}(x\\,|\\,\\hat{y}_2, v_{y2}) \\, \\mathcal{N}(x\\,|\\,m_x, v_x) \n", "\\end{align*}$$\n", "so we can validate the answer by solving the Gaussian multiplication manually." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sum-product message passing result: p(x|y1,y2) = 𝒩(1.1428571428571428,0.5714285714285714)\n", "Manual result: p(x|y1,y2) = 𝒩(1.1428571428571428, 0.5714285714285714)\n" ] } ], "source": [ "using ForneyLab \n", "\n", "# Data\n", "y1_hat = 1.0\n", "y2_hat = 2.0\n", "\n", "# Construct the factor graph\n", "fg = FactorGraph()\n", "@RV x ~ GaussianMeanVariance(constant(0.0), constant(4.0), id=:x) # Node p(x)\n", "@RV y1 ~ GaussianMeanVariance(x, constant(1.0)) # Node p(y1|x)\n", "@RV y2 ~ GaussianMeanVariance(x, constant(2.0)) # Node p(y2|x)\n", "Clamp(y1, y1_hat) # Terminal (clamp) node for y1\n", "Clamp(y2, y2_hat) # Terminal (clamp) node for y2\n", "# draw(fg) # draw the constructed factor graph\n", "\n", "# Perform sum-product message passing\n", "eval(Meta.parse(sumProductAlgorithm(x, name=\"_algo1\"))) # Automatically derives a message passing schedule\n", "x_marginal = step_algo1!(Dict())[:x] # Execute algorithm and collect marginal distribution of x\n", "println(\"Sum-product message passing result: p(x|y1,y2) = 𝒩($(mean(x_marginal)),$(var(x_marginal)))\")\n", "\n", "# Calculate mean and variance of p(x|y1,y2) manually by multiplying 3 Gaussians (see lesson 4 for details)\n", "v = 1 / (1/4 + 1/1 + 1/2)\n", "m = v * (0/4 + y1_hat/1.0 + y2_hat/2.0)\n", "println(\"Manual result: p(x|y1,y2) = 𝒩($(m), $(v))\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example: SP Messages for the Equality Node\n", "\n", "- Let´s compute the SP messages for the **equality node** $f_=(x,y,z) = \\delta(z-x)\\delta(z-y)$: \n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\\begin{align*}\n", "\\overrightarrow{\\mu}_{Z}(z) &= \\iint \\overrightarrow{\\mu}_{X}(x) \\overrightarrow{\\mu}_{Y}(y) \\,\\delta(z-x)\\delta(z-y) \\,\\mathrm{d}x \\mathrm{d}y \\\\\n", " &= \\overrightarrow{\\mu}_{X}(z) \\int \\overrightarrow{\\mu}_{Y}(y) \\,\\delta(z-y) \\,\\mathrm{d}y \\\\\n", " &= \\overrightarrow{\\mu}_{X}(z) \\overrightarrow{\\mu}_{Y}(z) \n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- By symmetry, this also implies (for the same equality node) that\n", "\n", "$$\\begin{align*}\n", "\\overleftarrow{\\mu}_{X}(x) &= \\overrightarrow{\\mu}_{Y}(x) \\overleftarrow{\\mu}_{Z}(x) \\quad \\text{and} \\\\\n", "\\overleftarrow{\\mu}_{Y}(y) &= \\overrightarrow{\\mu}_{X}(y) \\overleftarrow{\\mu}_{Z}(y)\\,.\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Let us now consider the case of Gaussian messages $\\overrightarrow{\\mu}_{X}(x) = \\mathcal{N}(\\overrightarrow{m}_X,\\overrightarrow{V}_X)$, $\\overrightarrow{\\mu}_{Y}(y) = \\mathcal{N}(\\overrightarrow{m}_Y,\\overrightarrow{V}_Y)$ and $\\overrightarrow{\\mu}_{Z}(z) = \\mathcal{N}(\\overrightarrow{m}_Z,\\overrightarrow{V}_Z)$. Let´s also define the precision matrices $\\overrightarrow{W}_X \\triangleq \\overrightarrow{V}_X^{-1}$ and similarly for $Y$ and $Z$. Then applying the SP update rule leads to multiplication of two Gaussian distributions, resulting in \n", "\n", "$$\\begin{align*}\n", "\\overrightarrow{W}_Z &= \\overrightarrow{W}_X + \\overrightarrow{W}_Y \\\\ \n", "\\overrightarrow{W}_Z \\overrightarrow{m}_z &= \\overrightarrow{W}_X \\overrightarrow{m}_X + \\overrightarrow{W}_Y \\overrightarrow{m}_Y\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- It follows that **message passing through an equality node is similar to applying Bayes rule**, i.e., fusion of two information sources. Does this make sense?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### (OPTIONAL SLIDE) Example: SP Messages for the Addition Nodes\n", "\n", "- Next, consider an **addition node** $f_+(x,y,z) = \\delta(z-x-y)$: \n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\\begin{align*}\n", "\\overrightarrow{\\mu}_{Z}(z) &= \\iint \\overrightarrow{\\mu}_{X}(x) \\overrightarrow{\\mu}_{Y}(y) \\,\\delta(z-x-y) \\,\\mathrm{d}x \\mathrm{d}y \\\\\n", " &= \\int \\overrightarrow{\\mu}_{X}(x) \\overrightarrow{\\mu}_{Y}(z-x) \\,\\mathrm{d}x \\,, \n", "\\end{align*}$$\n", "i.e., $\\overrightarrow{\\mu}_{Z}$ is the convolution of the messages $\\overrightarrow{\\mu}_{X}$ and $\\overrightarrow{\\mu}_{Y}$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Of course, for Gaussian messages, these update rules evaluate to\n", "\n", "$$\\begin{align*}\n", "\\overrightarrow{m}_Z = \\overrightarrow{m}_X + \\overrightarrow{m}_Y \\,,\\,\\text{and}\\,\\,\\overrightarrow{V}_z = \\overrightarrow{V}_X + \\overrightarrow{V}_Y \\,.\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "-
Exercise: For the same summation node, work out the SP update rule for the *backward* message $\\overleftarrow{\\mu}_{X}(x)$ as a function of $\\overrightarrow{\\mu}_{Y}(y)$ and $\\overleftarrow{\\mu}_{Z}(z)$? And further refine the answer for Gaussian messages.
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### (OPTIONAL SLIDE) Example: SP Messages for Multiplication Nodes\n", "- Next, let us consider a **multiplication** by a fixed (invertible matrix) gain $f_A(x,y) = \\delta(y-Ax)$\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\\begin{align*}\n", "\\overrightarrow{\\mu}_{Y}(y) = \\int \\overrightarrow{\\mu}_{X}(x) \\,\\delta(y-Ax) \\,\\mathrm{d}x = \\overrightarrow{\\mu}_{X}(A^{-1}y) \\,.\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- For a Gaussian message input message $\\overrightarrow{\\mu}_{X}(x) = \\mathcal{N}(\\overrightarrow{m}_{X},\\overrightarrow{V}_{X})$, the output message is also Gaussian with \n", "$$\\begin{align*}\n", "\\overrightarrow{m}_{Y} = A\\overrightarrow{m}_{X} \\,,\\,\\text{and}\\,\\,\n", "\\overrightarrow{V}_{Y} = A\\overrightarrow{V}_{X}A^T\n", "\\end{align*}$$\n", "since \n", "$$\\begin{align*}\n", "\\overrightarrow{\\mu}_{Y}(y) &= \\overrightarrow{\\mu}_{X}(A^{-1}y) \\\\\n", " &\\propto \\exp \\left( -\\frac{1}{2} \\left( A^{-1}y - \\overrightarrow{m}_{X}\\right)^T \\overrightarrow{V}_{X}^{-1} \\left( A^{-1}y - \\overrightarrow{m}_{X}\\right)\\right) \\\\\n", " &= \\exp \\left( -\\frac{1}{2} \\left( y - A\\overrightarrow{m}_{X}\\right)^T A^{-T}\\overrightarrow{V}_{X}^{-1} A \\left( y - A\\overrightarrow{m}_{X}\\right)\\right) \\\\\n", " &\\propto \\mathcal{N}(A\\overrightarrow{m}_{X},A\\overrightarrow{V}_{X}A^T) \\,.\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "-
Excercise: Proof that, for the same factor $\\delta(y-Ax)$ and Gaussian messages, the (backward) sum-product message $\\overleftarrow{\\mu}_{X}$ is given by \n", "$$\\begin{align*}\n", "\\overleftarrow{\\xi}_{X} &= A^T\\overleftarrow{\\xi}_{Y} \\\\\n", "\\overleftarrow{W}_{X} &= A^T\\overleftarrow{W}_{Y}A\n", "\\end{align*}$$\n", "where $\\overleftarrow{\\xi}_X \\triangleq \\overleftarrow{W}_X \\overleftarrow{m}_X$ and $\\overleftarrow{W}_{X} \\triangleq \\overleftarrow{V}_{X}^{-1}$ (and similarly for $Y$).
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "### (OPTIONAL SLIDE) \n", "#### CODE EXAMPLE\n", "\n", "Let's calculate the Gaussian forward and backward messages for the addition node in ForneyLab. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Forward message on Z: 𝒩(m=3.00, v=2.00)\n", "Backward message on X: 𝒩(m=1.00, v=2.00)\n" ] } ], "source": [ "# Forward message towards Z\n", "fg = FactorGraph()\n", "@RV x ~ GaussianMeanVariance(constant(1.0), constant(1.0), id=:x) \n", "@RV y ~ GaussianMeanVariance(constant(2.0), constant(1.0), id=:y)\n", "@RV z = x + y; z.id = :z\n", "\n", "eval(Meta.parse(sumProductAlgorithm(z, name=\"_z_fwd\")))\n", "msg_forward_Z = step_z_fwd!(Dict())[:z]\n", "print(\"Forward message on Z: $(msg_forward_Z)\")\n", "\n", "# Backward message towards X\n", "fg = FactorGraph()\n", "@RV x = Variable(id=:x)\n", "@RV y ~ GaussianMeanVariance(constant(2.0), constant(1.0), id=:y)\n", "@RV z = x + y\n", "GaussianMeanVariance(z, constant(3.0), constant(1.0), id=:z) \n", "\n", "eval(Meta.parse(sumProductAlgorithm(x, name=\"_x_bwd\")))\n", "msg_backward_X = step_x_bwd!(Dict())[:x]\n", "print(\"Backward message on X: $(msg_backward_X)\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### (OPTIONAL SLIDE) \n", "#### CODE EXAMPLE\n", "\n", "In the same way we can also investigate the forward and backward messages for the gain node " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Forward message on Y: 𝒩(m=4.00, v=16.00)\n" ] } ], "source": [ "# Forward message towards Y\n", "fg = FactorGraph()\n", "@RV x ~ GaussianMeanVariance(constant(1.0), constant(1.0), id=:x)\n", "@RV y = constant(4.0) * x; y.id = :y\n", "\n", "eval(Meta.parse(sumProductAlgorithm(y, name=\"_y_fwd\")))\n", "msg_forward_Y = step_y_fwd!(Dict())[:y]\n", "print(\"Forward message on Y: $(msg_forward_Y)\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Backward message on X: 𝒩(xi=8.00, w=16.00)\n" ] } ], "source": [ "# Backward message towards X\n", "fg = FactorGraph()\n", "x = Variable(id=:x)\n", "@RV y = constant(4.0) * x\n", "GaussianMeanVariance(y, constant(2.0), constant(1.0))\n", "\n", "eval(Meta.parse(sumProductAlgorithm(x, name=\"_x_fwd2\")))\n", "msg_backward_X = step_x_fwd2!(Dict())[:x]\n", "print(\"Backward message on X: $(msg_backward_X)\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example: Bayesian Linear Regression\n", "\n", "- Recall: the goal of regression is to estimate an unknown function from a set of (noisy) function values." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Assume we want to estimate some function $f: \\mathbb{R}^D \\rightarrow \\mathbb{R}$ from data set $D = \\{(x_1,y_1), \\ldots, (x_N,y_N)\\}$, where $y_i = f(x_i) + \\epsilon_i$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- We will assume a linear model with white Gaussian noise and a Gaussian prior on the coefficients $w$:\n", "$$\\begin{align*}\n", " y_i &= w^T x_i + \\epsilon_i \\\\\n", " \\epsilon_i &\\sim \\mathcal{N}(0, \\sigma^2) \\\\ \n", " w &\\sim \\mathcal{N}(0,\\Sigma)\n", "\\end{align*}$$\n", "or equivalently\n", "$$\\begin{align*}\n", "p(D,w) &= \\overbrace{p(w)}^{\\text{weight prior}} \\prod_{i=1}^N \\overbrace{p(y_i\\,|\\,x_i,w,\\epsilon_i)}^{\\text{regression model}} \\overbrace{p(\\epsilon_i)}^{\\text{noise model}} \\\\\n", " &= \\mathcal{N}(w\\,|\\,0,\\Sigma) \\prod_{i=1}^N \\delta(y_i - w^T x_i - \\epsilon_i) \\mathcal{N}(\\epsilon_i\\,|\\,0,\\sigma^2) \n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- We are interested in inferring the posterior $p(w|D)$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Here's the factor graph for this model\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### CODE EXAMPLE\n", "\n", "Let's build the factor graph in Julia (with the FFG toolbox ForneyLab)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject Text(29.88125000000001, 0.5, '$f([1.0, z, z^2]) + \\\\epsilon$')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using PyPlot, ForneyLab, LinearAlgebra\n", "\n", "# Parameters\n", "Σ = 1e5 * Diagonal(I,3) # Covariance matrix of prior on w\n", "σ2 = 2.0 # Noise variance\n", "\n", "# Generate data set\n", "w = [1.0; 2.0; 0.25]\n", "N = 30\n", "z = 10.0*rand(N)\n", "x_train = [[1.0; z; z^2] for z in z] # Feature vector x = [1.0; z; z^2]\n", "f(x) = (w'*x)[1]\n", "y_train = map(f, x_train) + sqrt(σ2)*randn(N) # y[i] = w' * x[i] + ϵ\n", "scatter(z, y_train); xlabel(L\"z\"); ylabel(L\"f([1.0, z, z^2]) + \\epsilon\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### CODE EXAMPLE\n", "\n", "Perform sum-product message passing and plot result (mean of posterior)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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pptuQqPRZLt8kWUrnuH54he/yF//9V+zd+9eNm/ezI9+9CMA/vCHP1BRUbHiAoUQQojzYefgwYOZsGMwGAiHw0xOThKNRoFzmw8WFhayYcMGbrnlFm6++WYJOwK4BIHnC1/4Av/2b//Gfffdx8svv8zw8DB1dXV87nOf4957711xgY8//jgqlYqHHnoocywWi/HlL3+Z0tJSTCYTd911F1NTUyv+LCGEEKtPPB7n0KFDvP7665w+fToTdoLBYCbsnG8dUV5ezoYNG7j99tvp6OiQjuci45Lcln7PPfdk/rx//35efPFF4vE4991334rO29PTw49+9CM2bdq07PhDDz3Eb37zG372s59RUlLC1772Ne644w56e3slyQshxBoSj8c5ePAgr732GsPDw1RVVWEymZidneOUc5RQJIrJoMcQi1HtcLB+/Xr27dtHS0tLtksXq8wl34dHq9XyiU98YsXnCYVC3H///Tz11FM8+uijmeOBQICnn36a5557jltuuQWA559/HrvdziuvvMKHP/zhFX+2EEKI7IvH4xw4cIBXXnmF8fFxbDYbRqORnjOjHDg+SCQWQ6XWoiR9FFTYaLiuhjvvvFNaRYh3tGrn+r70pS/x0Y9+NBNqzuvt7SWRSLBv377MMavVSmtrK4cOHXrX88ViMYLB4LKHEEKI1SkWi/HGG2/w29/+lvHxcex2O0ajke7Tw/xPTz+RaBSVSoOSTKArqSJZXMN/+q3812iKVFrJdvliFVqVgednP/sZR48e5fHHH3/ba16vl5ycHIqKipYdr6iowOv1vus5H3/8cQoKCjIPu91+yesWQgixcrFYjNdff539+/fjcrlwOBwYDAYmJyc5eHwQJZkEtQaUNLrSavSV6zDW70BrLuX7rzjZ/Y+v8ttTnmwPQ6wylzTwHDx4MLON98WanJzk7/7u73j++ecvaM8ERVFQqVTv+vrDDz9MIBDIPCYnJ1dUpxBCiHeWSit0Ds/zf/pcdA7PX9CMSzQa5dVXX2X//v14vV6qq6vR6XRMTExwanCUaDyOolWjQoWurAaDbT259dvQmAoz5/AGo/zt80cl9IhlLukanttvv52+vj7q6uou+hy9vb3MzMxw3XXXZY6lUineeOMNfvjDH/K73/2OeDyO3+9fNsszMzNDR0fHu55Xr9ej1+svui4hhBDv77enPHz7N/14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x9J/7enTpyIlJUXodDqRlJQkrFar7EiKNDMzIyoqKkRsbKwIDg4WCQkJora2ViwsLMiOpgi9vb0rzqji4mIhxI+j6ZcvXxYGg0HodDqxb98+MTIyIje0JL+7V263+5fzvre3d82zaoQQYi0LFhEREdFa4zM8REREpHosPERERKR6LDxERESkeiw8REREpHosPERERKR6LDxERESkeiw8REREpHosPERERKR6LDxERESkeiw8REREpHosPESkGmazGRqNZtmnqalJdjQikozv0iIi1ZidnYXH4/Ff19fXo7u7G319fYiJiZGYjIhk+4/sAEREq0Wv10Ov1wMA6urq0N3dDbvdzrJDRPyXFhGpT11dHVpbW2G32xEXFyc7DhEpAAsPEakKyw4RrYSFh4hUg2WHiH6Fz/AQkSpcvXoVFosFXV1d0Ol0mJycBABs2rQJOp1Ocjoiko2ntIho3RNCIDw8HDMzM8u+6+/vx+7duyWkIiIlYeEhIiIi1eMzPERERKR6LDxERESkeiw8REREpHosPERERKR6LDxERESkeiw8REREpHosPERERKR6LDxERESkeiw8REREpHosPERERKR6LDxERESkeiw8REREpHr/BY3mdzM1QI9rAAAAAElFTkSuQmCC", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Posterior distribution of w: 𝒩(xi=[3.18e+02, 2.18e+03, 1.63e+04], w=[[15.00, 83.82, 5.57e+02][83.82, 5.57e+02, 4.06e+03][5.57e+02, 4.06e+03, 3.13e+04]])\n", "\n" ] } ], "source": [ "# Build factorgraph\n", "\n", "fg = FactorGraph()\n", "@RV w ~ GaussianMeanVariance(constant(zeros(3)), constant(Σ, id=:Σ), id=:w) # p(w)\n", "for t=1:N\n", " x_t = Variable(id=:x_*t)\n", " d_t = Variable(id=:d_*t) # d=w'*x\n", " DotProduct(d_t, x_t, w) # p(f|w,x)\n", " @RV y_t ~ GaussianMeanVariance(d_t, constant(σ2, id=:σ2_*t), id=:y_*t) # p(y|d)\n", " placeholder(x_t, :x, index=t, dims=(3,))\n", " placeholder(y_t, :y, index=t);\n", "end\n", "\n", "# Build and run message passing algorithm\n", "eval(Meta.parse(sumProductAlgorithm(w)))\n", "data = Dict(:x => x_train, :y => y_train)\n", "w_posterior_dist = step!(data)[:w]\n", "\n", "# Plot result\n", "println(\"Posterior distribution of w: $(w_posterior_dist)\")\n", "scatter(z, y_train); xlabel(L\"z\"); ylabel(L\"f([1.0, z, z^2]) + \\epsilon\");\n", "z_test = collect(0:0.2:12)\n", "x_test = [[1.0; z; z^2] for z in z_test]\n", "for sample=1:10\n", " w = ForneyLab.sample(w_posterior_dist)\n", " f_est(x) = (w'*x)[1]\n", " plot(z_test, map(f_est, x_test), \"k-\", alpha=0.3);\n", "end" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Homework Exercises \n", "\n", "- (Ex.1) Reflect on the fact that we now have methods for both marginalization and processing observations in FFGs. In principle, we are sufficiently equipped to do inference in probabilistic models through message passing. Draw the graph for $$p(x_1,x_2,x_3)=f_a(x_1)\\cdot f_b(x_1,x_2)\\cdot f_c(x_2,x_3)$$ and show which boxes need to be closed for computing $p(x_1|x_2)$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- (Ex.2) Consider a variable $X$ with measurements $D=\\{x_1,x_2\\}$. We assume the following model for $X$:\n", "$$\\begin{align*}\n", "p(D,\\theta) &= p(\\theta)\\cdot \\prod_{n=1}^2 p(x_n|\\theta) \\\\\n", "p(\\theta) &= \\mathcal{N}(\\theta \\mid 0,1) \\\\\n", "p(x_n \\mid\\theta) &= \\mathcal{N}(x_n \\mid \\theta,1)\n", "\\end{align*}$$\n", " - Draw the factor graph and infer $\\theta$ through the Sum-Product Algorithm. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Message Passing in State-space Models\n", "\n", "\n", "\n", "Consider the Markov state-space model \n", "$$\n", " p(x^T,z^T) = \\underbrace{p(z_1)}_{\\text{initial state}} \\prod_{t=2}^T \\underbrace{p(z_t\\,|\\,z_{t-1})}_{\\text{state transitions}}\\,\\prod_{t=1}^T \\underbrace{p(x_t\\,|\\,z_t)}_{\\text{observations}}\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The Forney-style factor graph for a state-space model:\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- In principle, for linear Gaussian models these inference tasks can be analytically solved, see e.g. [Faragher, 2012](./files/Faragher-2012-Understanding-the-Basis-of-the-Kalman-Filter.pdf) and previous lesson on state-space models\n", " - These derivations quickly become quite laborious " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Alternatively, we could specify the generative model in a (Forney-style) factor graph and use automated message passing to infer the posterior over the hidden variables. E.g., the message passing schedule for Kalman filtering looks like this: \n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### The Cart Tracking Problem Revisited\n", "\n", "We can solve the cart tracking problem of the Dynamical systems lesson by sum-product message passing in a factor graph like the one depicted above. All we have to do is create factor nodes for the state-transition model $p(z_t|z_{t-1})$ and the observation model $p(x_t|z_t)$. Then we just build the factor graph and let ForneyLab (factor graph toolbox) perform message passing. \n", "\n", "We'll implement the following model:\n", "\n", "$$\\begin{align*}\n", "\\begin{bmatrix} z_t \\\\ \\dot{z_t}\\end{bmatrix} &= \\begin{bmatrix} 1 & \\Delta t \\\\ 0 & 1\\end{bmatrix} \\begin{bmatrix} z_{t-1} \\\\ \\dot z_{t-1}\\end{bmatrix} + \\begin{bmatrix} (\\Delta t)^2/2 \\\\ \\Delta t\\end{bmatrix} u_t + \\mathcal{N}(0,\\Sigma_z) \\\\\n", "\\mathbf{x}_t &= \\begin{bmatrix} z_t \\\\ \\dot{z_t}\\end{bmatrix} + \\mathcal{N}(0,\\Sigma_x)\n", "\\end{align*}$$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "using LinearAlgebra, ForneyLab\n", "include(\"scripts/cart_tracking_helpers.jl\") # implements required factor nodes + helper functions\n", "\n", "# Specify the model parameters\n", "Δt = 1.0 # assume the time steps to be equal in size\n", "A = [1.0 Δt;\n", " 0.0 1.0]\n", "b = [0.5*Δt^2; Δt] \n", "Σz = convert(Matrix,Diagonal([0.2*Δt; 0.1*Δt])) # process noise covariance\n", "Σx = convert(Matrix,Diagonal([1.0; 2.0])) # observation noise covariance;\n", "\n", "# Generate noisy observations\n", "n = 10 # perform 10 timesteps\n", "z_start = [10.0; 2.0] # initial state\n", "u = 0.2 * ones(n) # constant input u\n", "noisy_x = generateNoisyMeasurements(z_start, u, A, b, Σz, Σx);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Since the factor graph is just a concatination of $n$ identical \"sections\", we only have to specify a single section. When running the message passing algorithm we will explictly use the posterior of the previous timestep as prior in the next one. Let's build a section of the factor graph:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "G\r\n", "\r\n", "\r\n", "6947781036024724108\r\n", "\r\n", "placeholder_z_prev_m\r\n", "\r\n", "\r\n", "3201874967886993523\r\n", "\r\n", "placeholder_x\r\n", "\r\n", "\r\n", "12873030637990256788\r\n", "\r\n", "𝒩\r\n", "gaussianmeanvariance_2\r\n", "\r\n", "\r\n", "3201874967886993523--12873030637990256788\r\n", "\r\n", "x\r\n", "1 out \r\n", "1 out \r\n", "\r\n", "\r\n", "10098682789622638638\r\n", "\r\n", "noise_z_v\r\n", "\r\n", "\r\n", "3342751978328243165\r\n", "\r\n", "+\r\n", "addition_2\r\n", "\r\n", "\r\n", "13718701879998900323\r\n", "\r\n", "+\r\n", "addition_1\r\n", "\r\n", "\r\n", "3342751978328243165--13718701879998900323\r\n", "\r\n", "variable_2\r\n", "1 out \r\n", "2 in1 \r\n", "\r\n", "\r\n", "14382197035184157863\r\n", "\r\n", "𝒩\r\n", "gaussianmeanvariance_1\r\n", "\r\n", "\r\n", "3342751978328243165--14382197035184157863\r\n", "\r\n", "noise_z\r\n", "1 out \r\n", "3 in2 \r\n", "\r\n", "\r\n", "14500561023254425370\r\n", "\r\n", "placeholder_z_prev_v\r\n", "\r\n", "\r\n", "12873030637990256788--3342751978328243165\r\n", "\r\n", "z\r\n", "1 out \r\n", "2 m \r\n", "\r\n", "\r\n", "11639027009330125838\r\n", "\r\n", "Σx\r\n", "\r\n", "\r\n", "12873030637990256788--11639027009330125838\r\n", "\r\n", "Σx\r\n", "1 out \r\n", "3 v \r\n", "\r\n", "\r\n", "1541610477257584085\r\n", "\r\n", "𝒩\r\n", "z_prev\r\n", "\r\n", "\r\n", "1541610477257584085--6947781036024724108\r\n", "\r\n", "z_prev_m\r\n", "1 out \r\n", "2 m \r\n", "\r\n", "\r\n", "1541610477257584085--14500561023254425370\r\n", "\r\n", "z_prev_v\r\n", "1 out \r\n", "3 v \r\n", "\r\n", "\r\n", "625576071683671775\r\n", "\r\n", "placeholder_bu\r\n", "\r\n", "\r\n", "13718701879998900323--625576071683671775\r\n", "\r\n", "bu\r\n", "1 out \r\n", "3 in2 \r\n", "\r\n", "\r\n", "9547695080007273316\r\n", "\r\n", "×\r\n", "multiplication_1\r\n", "\r\n", "\r\n", "13718701879998900323--9547695080007273316\r\n", "\r\n", "variable_1\r\n", "1 out \r\n", "2 in1 \r\n", "\r\n", "\r\n", "9400403980255537941\r\n", "\r\n", "noise_z_m\r\n", "\r\n", "\r\n", "12231684841601085031\r\n", "\r\n", "A\r\n", "\r\n", "\r\n", "14382197035184157863--10098682789622638638\r\n", "\r\n", "noise_z_v\r\n", "1 out \r\n", "3 v \r\n", "\r\n", "\r\n", "14382197035184157863--9400403980255537941\r\n", "\r\n", "noise_z_m\r\n", "1 out \r\n", "2 m \r\n", "\r\n", "\r\n", "9547695080007273316--1541610477257584085\r\n", "\r\n", "z_prev\r\n", "1 out \r\n", "2 in1 \r\n", "\r\n", "\r\n", "9547695080007273316--12231684841601085031\r\n", "\r\n", "A\r\n", "1 out \r\n", "3 a \r\n", "\r\n", "\r\n", "\r\n" ], "text/plain": [ "ForneyLab.Baz(\"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nG\\r\\n\\r\\n\\r\\n6947781036024724108\\r\\n\\r\\nplaceholder_z_prev_m\\r\\n\\r\\n\\r\\n3201874967886993523\\r\\n\\r\\nplaceholder_x\\r\\n\\r\\n\\r\\n12873030637990256788\\r\\n\\r\\n𝒩\\r\\ngaussianmeanvariance_2\\r\\n\\r\\n\\r\\n3201874967886993523--12873030637990256788\\r\\n\\r\\nx\\r\\n1 out \\r\\n1 out \\r\\n\\r\\n\\r\\n10098682789622638638\\r\\n\\r\\nnoise_z_v\\r\\n\\r\\n\\r\\n3342751978328243165\\r\\n\\r\\n+\\r\\naddition_2\\r\\n\\r\\n\\r\\n13718701879998900323\\r\\n\\r\\n+\\r\\naddition_1\\r\\n\\r\\n\\r\\n3342751978328243165--13718701879998900323\\r\\n\\r\\nvariable_2\\r\\n1 out \\r\\n2 in1 \\r\\n\\r\\n\\r\\n14382197035184157863\\r\\n\\r\\n𝒩\\r\\ngaussianmeanvariance_1\\r\\n\\r\\n\\r\\n3342751978328243165--14382197035184157863\\r\\n\\r\\nnoise_z\\r\\n1 out \\r\\n3 in2 \\r\\n\\r\\n\\r\\n14500561023254425370\\r\\n\\r\\nplaceholder_z_prev_v\\r\\n\\r\\n\\r\\n12873030637990256788--3342751978328243165\\r\\n\\r\\nz\\r\\n1 out \\r\\n2 m \\r\\n\\r\\n\\r\\n11639027009330125838\\r\\n\\r\\nΣx\\r\\n\\r\\n\\r\\n12873030637990256788--11639027009330125838\\r\\n\\r\\nΣx\\r\\n1 out \\r\\n3 v \\r\\n\\r\\n\\r\\n1541610477257584085\\r\\n\\r\\n𝒩\\r\\nz_prev\\r\\n\\r\\n\\r\\n1541610477257584085--6947781036024724108\\r\\n\\r\\nz_prev_m\\r\\n1 out \\r\\n2 m \\r\\n\\r\\n\\r\\n1541610477257584085--14500561023254425370\\r\\n\\r\\nz_prev_v\\r\\n1 out \\r\\n3 v \\r\\n\\r\\n\\r\\n625576071683671775\\r\\n\\r\\nplaceholder_bu\\r\\n\\r\\n\\r\\n13718701879998900323--625576071683671775\\r\\n\\r\\nbu\\r\\n1 out \\r\\n3 in2 \\r\\n\\r\\n\\r\\n9547695080007273316\\r\\n\\r\\n×\\r\\nmultiplication_1\\r\\n\\r\\n\\r\\n13718701879998900323--9547695080007273316\\r\\n\\r\\nvariable_1\\r\\n1 out \\r\\n2 in1 \\r\\n\\r\\n\\r\\n9400403980255537941\\r\\n\\r\\nnoise_z_m\\r\\n\\r\\n\\r\\n12231684841601085031\\r\\n\\r\\nA\\r\\n\\r\\n\\r\\n14382197035184157863--10098682789622638638\\r\\n\\r\\nnoise_z_v\\r\\n1 out \\r\\n3 v \\r\\n\\r\\n\\r\\n14382197035184157863--9400403980255537941\\r\\n\\r\\nnoise_z_m\\r\\n1 out \\r\\n2 m \\r\\n\\r\\n\\r\\n9547695080007273316--1541610477257584085\\r\\n\\r\\nz_prev\\r\\n1 out \\r\\n2 in1 \\r\\n\\r\\n\\r\\n9547695080007273316--12231684841601085031\\r\\n\\r\\nA\\r\\n1 out \\r\\n3 a \\r\\n\\r\\n\\r\\n\\r\\n\")" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "\n", "fg = FactorGraph()\n", "z_prev_m = Variable(id=:z_prev_m); placeholder(z_prev_m, :z_prev_m, dims=(2,))\n", "z_prev_v = Variable(id=:z_prev_v); placeholder(z_prev_v, :z_prev_v, dims=(2,2))\n", "bu = Variable(id=:bu); placeholder(bu, :bu, dims=(2,))\n", "\n", "@RV z_prev ~ GaussianMeanVariance(z_prev_m, z_prev_v, id=:z_prev) # p(z_prev)\n", "@RV noise_z ~ GaussianMeanVariance(constant(zeros(2), id=:noise_z_m), constant(Σz, id=:noise_z_v)) # process noise\n", "@RV z = constant(A, id=:A) * z_prev + bu + noise_z; z.id = :z # p(z|z_prev) (state transition model)\n", "@RV x ~ GaussianMeanVariance(z, constant(Σx, id=:Σx)) # p(x|z) (observation model)\n", "placeholder(x, :x, dims=(2,));\n", "ForneyLab.draw(fg)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Now that we've built the factor graph, we can perform Kalman filtering by inserting measurement data into the factor graph and performing message passing." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKcAAAGQCAYAAAB7xwPPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xdc1WX/x/HXOYAeVIaIkqCoaertQhtuAUeWk9wjV67blpW2FbfZuk1NzXKPXA0zf1lucU/EUWlqbsuBCiqCweH3B3ISz0EOcOBgvZ+PB49Hfsd1fa7rfG9vz4fr+nwNycnJyYiIiIiIiIiIiDiB0dkBiIiIiIiIiIjIv5eSUyIiIiIiIiIi4jRKTomIiIiIiIiIiNMoOSUiIiIiIiIiIk6j5JSIiIiIiIiIiDiNklMiIiIiIiIiIuI0Sk6JiIiIiIiIiIjTKDklIiIiIiIiIiJO45qdm81mM+fPn8fDwwODweComERERERERERE5AGTnJzM9evX8ff3x2i0fz1UtpJT58+fp2TJktlpQkRERERERERE/kHOnDlDiRIl7L4+W8kpDw8PAHYcOUEhD8/sNCUiIiIiIiIiIg+wG9djqV2hjCVfZK9sJadSt/IV8vDEw1PJKRERERERERGRf7vMln5SQXQREREREREREXEaJadERERERERERMRplJwSERERERERERGnUXJKREREREREREScRskpERERERERERFxmmy9rU9ERERE/rnMSUmYkxIhOdnZoYiIiIiTGF1cMLq65WgfSk6JiIiISBrJycnERV8k8WasElMiIiKCwS0/Jm8f8hX0yJH2lZwSERERkTRu34gl8WYMRX2L4V6wAAYMzg5JREREnCCZZBL/+ovrMTFcv/QHQI4kqJScEhERERGL5ORk4q9dxsvTi8JFijg7HBEREXE2kzsFC3nAubPcjLmSI8kpFUQXEREREYtkcxIkJVHII2eW7YuIiMiDx2Aw4OHlhfl2AubEvxzevpJTIiIiImJhTkoCwMVFC+xFRETkb65uKUXRzWazw9tWckpERERE/nanALrBoDpTIiIi8jdLDcoceFmKklMiIiIiIiIiIuI0Sk6JiIiIiIiIiIjTKDklIiIiIiIiIiJOo+SUiIiIiIiIiIg4jZJTIiIiIiIPgJMnT2JyNdK393N2Hc/JPh80ZrOZJx6tTljLFlm6f97cOZhcjZaf7l27ZCue48eOpWmvfNkyVteMHjkCk6uRkydPOj3evMieOXS03H4Ojh87RsH8bnz+2dRs9SPyINA7gkVERERE7nLy5Ekqlns4zTE3NzeK+flRr34D3njzLapWq+ak6BwvYuNGnmrSiCHhwwgfPsLZ4eSIeXPncPDAAaZO+yJb7bRqHUa1oCAqV6mSrXYK+/gwJHwYAJMnTcxWW/fjqHhzw8IvF7B1y2b2RUZy6OBBbt++zRczZ9GjZy+b1+fWHNqSW89B2XLl6Nz1WcaMGkmXZ7vh6emZrf5E8jIlp0REREREbHi4bFm6dH0WgJs3brBz506WLl7E8mXf8tOaddSpW9fJEaYICAhg/6Ff8PTyeqDazi1JSUmMHT2KBsEhPFGzZrbaahUWlm6yJDN8fHwsicD58+Zmu730OCre3DBiWDinT53C19eXh4oX5/SpU/e9Prfm0JbcfA4GDX6dL+fPY8qnk3hnyNBs9ymSV2lbn4iIiIiIDWXLliN8+AjCh4/g/Y8+ZsOmzbz1zrskJCQwPDzvfEl0c3OjQsWKFC9e/IFqO7f8tHIlZ06fpmu3bs4ORe7js8+nc+T4Cc7+eZF+/f/r7HDyjMpVqlAtKIhZM2dgNpudHY5IjlFySkRERETETi+89DIAe/fsBlK2xJlcjYweOYId27fTstnT+BUpjMk17T+zN2/aRNuw1gT4FcWzgInKFcszPHwocXFxVn0kJSXx8YcfUKnCI3gVdKdShUf48P1x6X4xvV9dqC2bN9OxXVsC/R/Cs4CJsqUD6dS+HVu3bAFS6ho91aQRAGNHj0pT/+bkyZMZ1pyaP28uwXXrUMTLgyJeHgTXrWNzBcjd87QvMpKWzZ7G19uTYj7edGzXNlN1lX5YsQKTq5HxH3/EZ1MmU6fm4/h4FsLX25NO7dtx7tw5qxgNBgNt2raz2V6NalXSjPven48//MCuuJYsXoTJ1cismTPYuGEDYS1b8JCvD/7FfOnetQuXLl2ye4z386DFa6/GTZpQqlSpXO0T4K3XB2NyNbIvMtLq3IzpX2ByNbJo4Zd2t5cT89qufQfOnD7N+nXrMn2vyINC2/pEREREROxkMBhsHt+xfTsfvj+OkNCG9OnbjzNnzljOTf98GgNfepHChQvTvGUrivr6smfPHj4Y9x4RGzeyet168uXLZ7n+hQH9mTt7NqXLlGHA8y8QnxDPpAmfsGP79kzFOm3qFF57ZSDu7u60fqYNJUuW5Pz582zbuoVl335Nvfr1CQ4J5dSpUyyYN5cGwSEEh4RY7vf29ubatWvptv/GoNf4dNJEAgIC6NW7NwaDgWXffku/3s9xcP9+PvzfeKt7Ivfu5ZP/fUxwSCh9+/UnKiqK75d/x6FDB4ncfxCTyZThuPbvjwJgzuxZnDl9mrA2bQkODmHt2jUs/24Zf/7xBxFbtwGQnJzMpoiNVKhYEW9vb5vtdezUmcTExDTHEhISmDxpIgkJCdSr34CjR3/LMK4DUSlxrVuzhjd/GkSzFi3p3acv69at5aulS0hOTmbBosUZtpORBy3evC4qKgo3NzcqVa5sfW5fSsIqKKi63e3lxLzWql0HgI0b1tPkySczda/Ig0LJKRERERHJWHIy2Fjlk+cUKADpJJAcYcqnkwB47PEn0hxft3YN06bPoNdzvdMc//WXX3jtlYEEVa/OylVr8PHxsZz76IP3CR/yLlMnf8qrgwYDKSuM5s6eTbWgIDZs2kLBggUBePPtd6n1WA274zx08CCDX3uV4sWLs37TFkqXLm05l5yczB9//AFASGgoAAvmzSU4JMSqIHp6yaktmzfz6aSJVPzPf4jYsg2vOzWpwoePJLheHSZNnEBYm7bUq18/zX0/rvyB+QsX0aFjJ8ux3r16snDBfL5f/h0dO3XOcGz773z5v3nzJrsjoyj3yCMA3L59m3q1a7Jz5w62b9tGnbp1Ofzrr1y5coWmTzdLt7176/jEx8fToW0bbt++zbTpM6hTt65dyZ79+/cDcOjQQfZEHbDMeXx8PJXKl2Pd2jUZtmGPBy3evO7A/ij+U6kS+fPntzq3LzISk8lEhYoV7W4vJ+b1sccfB8h0glrkQaJtfSIiIiKSsbg48nt55PkfRybQjh8/xuiRIxg9cgRvv/E6DYMb8MG49zCZTIwaMzbNtdVr1LBKTAHMmP45iYmJ/O+TiWkSUwCD33iTokWLsnTJ36sovlwwD4B3h4ZbElOQUpj8xZcH2h379C+mkZSUxPBRo9MkpiBl9Ze/v7/dbdkyf94cAIYOG25JTAF4eXlZ3j6Wes3d6jcITpOYAujZK2XL4N7du+3qOypqHwBz5i2wJKYA8uXLR+cuXQE4cuQwAGfPngXAr1gxu9qOi4ujTetWrF+3lumzZltis8fBA/sxGAx8uWhJmjk3mUwEBpYiISHB7rbs9aDFm9ecOHGCq1evUr2GdeL3r7/+4tDBg1SuUgUXFxe728yJefXw8MBkMnHu3NlM3yvyoNDKKRERERERG34/fpyxo0cBKYXBi/n50alLV9548y2qVK2a5trHn3jCVhPs2rETgNWrfmL9urVW593c3Dhy+LDlzwcPHACgXv0GVtfaOpaePXcSPU2ebGr3PZmRunopOCTU6lzqsQN3VpDcrYaNJECJEiUAuBaT/hbCVNeuXePUyZPUrFmLBsHBVud9ihQBUhILAFeuRAPgXbhwhm3fvHmTNq1bsXXLZmbNnUenzl0yvCfVn3/+yYULF6hTt57VswHw++/HKfPww3a3Zw9nxxvgV5To6Gi7+1y1dr1lpV5ekbptr3p16+fyl59/JiEhgWpBQXa3l5PPgY+PD9GXL2fpXpEHgZJTIiIiIpKxAgVIiLnu7CgyVqCAw5p6sulTrFj5o13XFivmZ/P4latXAPhg3Ht2tRMTE4PRaMTX19fqnJ+f7T5suXbtGgaDIcfeshcbG4vRaKRo0aJW5/z8/DAajcTExFid87xrlVUqF9eUryRJSRm/iSxqX8qqqSZNbSfdzpw+DUDJEiUBcHd3B+DWrVv3bff69euEtWzBrp07mL9wEW3btc8wlrvtvxNXo8aNrc6dP3+eixcv0tiBicK8EG/Hzp25fv2G3X0+9NBDmYoxN6Q+T9VrPGp1LjJyL5C5elM5+RzcunWLAg78+00kr1FySkREREQyZjDAXdvMJK30CqV7enoCcOlqDB4eHhm24+Xlhdls5vLly1aJnwsXLtgdj7e3t6W2VEBAgN332cvT0xOz2cylS5cods+WuYsXL2I2my1jd6QDd4qhlwwMtHl+zapV5MuXj3oNUlaZ+fqmzOHVO0lCW2JjY2ndvBl79+5h4ZKltA57JtNxpRZpr/GodZIjKjJ1dY79SY77ySvxfjLx00z3m9cc2J+yBc/W6qi1q1cDUC0zyakceg7MZjMxMTE2i7aL/FOo5pSIiIiISA55omZNAHbu2GHX9VWrVQNg65bNVudsHUtP6jbDtWtWZ3htaj2dpKQku9sPuvMFe1PERqtzmzdFAGRqO5S9ou5sJ4y1sSprU0QEu3fvosuzz1oSgZUqV8ZoNHLs6DGb7V27do3mTZ9k375Ilnz1TZYSPfD3FsYgG9vD9t3ZOpaZJEd6HrR487pjx47i5+dHoUKF0hw/ffo0P678AYPBYPnfpD1yal6PHT2K2WymchXrrYIi/xRKTomIiIiI5JD/DngBV1dXBr06kDNnzlidv3btmmVrEcCz3XoA8N6Y0dy8edNy/Ny5c5Y3BdqjX/8BuLi4MHJYOKdOnUpz7u639QGWQu3nzp2zu/1u3XsCMHb0KGJjYy3HY2NjLXW6Uq9xpP13iqEvXbKYxMREy/GTJ0/St3cvfH19GTZilOW4t7c3VatVI3LvHpKTk9O0deXKFZo1bcKhQwdZ+vW3NG/ZMutx7Y/C19eXkiVLWp1L/XyDsrly6kGL19mebNQQk6uRiI0b070mf/78REdHc+nSJcux8+fP07VjB+Li4ni4bFm7Vjymyql53bUrpXadrTprIv8U2tYnIiIiIpJDKlepwsTJUxj44gtUq1SRp5s15+GHHyb2eiwnfj/B5k0RdO/Zk8lTpwEQEhpKj169mDdnDo9Vr0ZY2DMk3E7g66VLqVmrNit/+D+7+q1StSofj/+EQa++wqPVqtAq7BkCAwO5cOFPtmzeTLPmzfl4/AQAKlSsiL+/P18tWUyBAu4EBJTAYDDQf8Dz6bbfIDiYF156iamTJ/NoUFXatGlLMsl8t2wZZ8+c4cWXX3b4F+n4+HiOHD5M7Tp1OfrbEerUfJzGjZtwOTqa5cu+xWw28+3yFVbbGFu1DmPMqJHs2b3bspINoMezXdkXGUlIaEN27dppSQCkKu7vT99+/TOMKy4ujuPHjtGwkXWdIUhZMRNYqpTV2xoz60GLN7NmzZzBtq1bAfj50EEAZs+cyaaIlJV4rcPCMrVSzGxOqWHm6pr+V97GjZtw6OBBGtStTbPmzbl08RJrVq+i9TNt2LNnd6bqTeXkvK5buxYXFxeat8h6QlIkr1NySkREREQkB/Xp24+goOpMnPAJWzdv4v9WfI+XlxclAwN5+ZVX6d4j7Qqjzz6fziOPlGfWzBl8NnUKASVKMPDV12jXoaPdySmA5198iUqVqzDxk/Gs/ulHbty4QdFixahZsxbt2ne0XOfi4sLir75hyDtvs3DBAq5fTyl836FT5/u2P37CJIKq12D6tGnMnDEdgEqVKhM+fAQ9ez1nd5z2OnTwIImJiQSHhDB+wkTeGDyIz6d9hru7O083a87QYcOpULGi1X3P9enLuLFjWLRwgSU5ZTab2bZ1CwARGzcQsXGD1X3t2newK9lz8MABzGazzTcRRkdHc/bMGVq1DsvscNN40OLNim1bt7Jg3tw0x7Zv28r2bSkJq1KlStmdnEpOTubwr79QqnRpatWune514SNGcv3GdVYsX878uXOp8ehjzJozj/wmE/PnzsnU1tScmte4uDhWLP+OFi1b4e/vn+n7RR4USk6JiIiIiNyldOnSxCdm/OY4SFnpZM+1jz/xBPO/XGhXmy4uLrzx1tu88dbbVuds9XW/eENCQwkJDc2wz5q1arFmvXXCI70+U/Xs9Zxdiaj7zZO9851abLpaUBCPPvYY6zZGZHgPQEBAAO06dGTJokWMHjuOggULYjQauRJr/5vm7qdW7drpxl+kSBG7n6X7edDizYoZs2YzY9Zsh7T1y88/Ex0dzbARI++7cqpQoUJMnfYFU6d9YXUus/OQU/O6dMlibty4wcuvvJql+0UeFKo5JSIiIiIieV5qvanMbLVKNXL0GG7cuMG0qVOyFUP/Pr0xuRrp3rVLtto5fuwYJlcjJlcjp++pCeZIjoo3L7rfHG7dshk/Pz96Ptc7R/rOrecgMTGRD98fR8tWrVVvSv7xtHJKRERERETyvP37oihYsCBly5XL9L1lypRhxuw5RF++nKW+g4KqMyR8mOXPlatUyVI7qQr7+KRpz9vbO1vt3cvR8eZF95vD/gOev2/NtKzK7efg7NmzdOn6LF27dc9WPyIPAkPyva+tyITY2Fi8vLw4dD4aD09PR8YlIiIiIk6QmBDPzT9OU6p0GfKbTM4ORwRIqbnk6+1J1arViNi6zdnh5IrRI0cwdvQoDh/7ndKlSzs7HBEREuLjOXXyBAWLB+Ka3/a/Ea7HxlLFvwgxMTF4ZiJPpJVTIiIiIiKSpzmy5tKDIjgkFHD8qioRkbxIySkREREREZE8xt5i9iIi/wQqiC4iIiIiIiIiIk6j5JSIiIiIiIiIiDiNklMiIiIiIiIiIuI0Sk6JiIiIiIiIiIjTKDklIiIiIiIiIiJOo+SUiIiIiIiIiIg4jZJTIiIiIiIiIiLiNEpOiYiIiIiIiIiI0yg5JSIiIiIiIiIiTqPklIiIiIiIiIiIOI2SUyIiIiIiIiIi4jRKTomIiIiIiIiIiNMoOSUiIiIi4gQnT57E5Gqkb+/nnB2KSK4xm8088Wh1wlq2yNL98+bOweRqtPx079oly7EcP3YsTVvly5axumb0yBGYXI2cPHkyy/04MmbIOO7jx45RML8bn382NVv9iOQmJadERERERO6SmjQyuRpp07qVzWsiNm7E5GrkpRcG5HJ0Io6V+iyPHjkiV/qbN3cOBw8cYOiw4dlqp1XrMIaED6NNu3ZZbqOwjw9DwocxJHwYXl5e2YrHHo6IGTKOu2y5cnTu+ixjRo0kNjY2W32J5BZXZwcgIiIiIpJX/bjyBzZv2kSD4GCHtx0QEMD+Q7/gmQtfikXygqSkJMaOHkWD4BCeqFkzW221CgujR89e2WrDx8eH8OEjAJg/b2622rKHI2IG++IeNPh1vpw/jymfTuKdIUOz3adITtPKKRERERERG0qVLo3RaGToO2/nSPtubm5UqFiR4sWL50j7InnNTytXcub0abp26+bsUP7xKlepQrWgIGbNnIHZbHZ2OCIZUnJKRERERMSG8uUr0LVbd3bu3MF3y761+7758+YSXLcORbw8KOLlQXDdOjZXN6RXc2rZt9/QpGEoJYv74VXQnbKlA2nVvBnfL/8OgI0bNmByNfLKyy/a7P/XX37B5GqkfZtnMoz17i1d27dto2njRvh6e1LioWIMfOkFbt26BcDqn34itEF9fDwLEej/EEPefoukpCSbbW7etIm2Ya0J8CuKZwETlSuWZ3j4UOLi4tJcd/v2baZO/pSWzZ6mbOlAPAuYKFncj07t2xG1b5/NtjOaG/i7vs+8uXPuO15bx3Zs307LZk/jV6QwJte0X5XsHZcz5/TuvvdFRtKy2dP4entSzMebju3aWtVNGj1yBE81aQTA2NGj0tQxyqjG0g8rVmByNTL+44/4bMpk6tR8HB/PQvh6e9KpfTvOnTtndc/8eXMxGAy0aWu9ra1GtSpp+r/35+MPP7hvPKmWLF6EydXIrJkz2LhhA2EtW/CQrw/+xXzp3rULly5dsqsde4TUq4vJ1cie3bvTHL969So1qlXBq6A7myIinBZ3u/YdOHP6NOvXrcv0vSK5TckpEREREZF0DBsxkvz58zNs6JB0Ewd3e2PQa/Tr/Rznzp2lV+/ePNenD+fOn6Nf7+d4c/CgDO//YtpndOnYgePHjtL6mWcY+OprNGrchLNnz/D98uUAhDZsyCPly7N44UJLouNus2fOAKB3n752j3P3rl00a9oELy8v+vbrT8nAQL6YNo3n/9ufb77+ik4d2lGyZEn69uuPl7c3//v4Iz764H2rdqZ/Po2mjRuyY/s2mrVoyYsvvYy/fwAfjHuP5k815fbt25Zrr1y5wuuDXiMhIYGnmzVj4CuvEhwSyk8/riS0QT2rL/z2zE127Ni+nScbhQLQp28/OnTslKVxOXNOU0Xu3Uvj0GBcXV3p268/jz72ON8v/47mTz1JfHy85brgkFC69egJQIPgEEsdoyHhw/D29r7vfO3fHwXAnNmzePftt6hQ8T/06/9fSpUuzfLvltG1Y4c01ycnJ7MpYiMVKla02XbHTp3T9D8kfBivv/kWJpMJg8FAvfoN7htPqgNRKXGtW7OG9m3C8PTyonefvpQMDOSrpUt4beDLdrVjj9HvjQNg1Ii/62fFx8fT7pkwjhw+zJz5CwgOCXFa3LVq1wFg44b1mb5XJLep5pSIiIiIZCg5Ge5ZpJEnFSgABoPj2gsMDGTA8y8wccInzJ41k779+qd77ZbNm/l00kQq/uc/RGzZZilUHD58JMH16jBp4gTC2rSlXv366bYxe9ZM8uXLx67IKIoWLZrmXHR0tOW/e/fpyztvvck3X39Ft+49LMdv377Nwi8XEBAQwFPNmtk9ztWrfuKrb5fRqnUYAH/99Rd1az3BkkULWbt6FWvWb+TxJ55IGc+IkVSu8AifTpzA62++hatryleKX3/5hddeGUhQ9eqsXLUGHx8fS/sfffA+4UPeZerkT3l10GAAChcuzNETpwgICEgTyy8//0xwvToMGzqElatWZ3pusmrd2jVMmz6DXs/1TnM8s+NK5Yw5TfXjyh+Yv3BRmgRb7149WbhgPt8v/46OnToDEBIaCsCCeXMJDgmx1DGyx/47yZSbN2+yOzKKco88AqQ8g/Vq12Tnzh1s37aNOnXrAnD411+5cuUKTZ+2/VzeWxcpPj6eDm3bcPv2baZNn2FpJ8O49u8H4NChg+yJOkDp0qUt7VUqX451a9fYPcaMBIeE8NTTzVj1049s37aNWrVr06t7N7Zt3cKkyVNsrhDLzbgfe/xxICXxKpLXaeWUiIiIiGQoLg6KeBny/E9OJNDeencIXl5evDd6lNU2qrvNnzcHgKHDhqd5g5aXlxdDwoelueZ+3NzccHNzszpepEgRy39379mL/PnzM3vmzDTXrPh+OZcvX6Z7z164uLhk2Feq4JBQSxIlNYY2bduRnJxM85YtLUkUAA8PD5q1aEF0dDRnz561HJ8x/XMSExP53ycT0yRRAAa/8SZFixZl6ZLFlmP58+e3SkwBVKpcmZDQhmzZvIm//vorzTl75iarqteoYZWYgsyPK5Uz5jRV/QbBaRJTAD17pWwf3XvPirSsiopK2Xo5Z94CS2IKIF++fHTu0hWAI0cOW46njsuvWLEM246Li6NN61asX7eW6bNmW2K3x8ED+zEYDHy5aIklwQNgMpkIDCxFQkKC3W3ZY/TY9zAYDIwaMZxBrw7ku2Xf8u7QcPoPeD5T7eRE3B4eHphMJs6dO5vxxSJOppVTIiIiIiL34ePjw+A33mTY0CF8OnECb73zrs3rUleSBIeEWp1LPXbgzuqI9LRr34Gh777DY0FV6dCxE8EhodStX99qG5Svry9hbdqydPEijv72G4+ULw/AnFmzMBgM9OrdJ1NjrF69utWxh+4Uag8KsnHuoZRz58+ds3yR3rVjJ5CyYmj9urVW97i5uXHk8OE0x/ZHRfG/jz9i29YtXPjzT6tk1OXLly0F4+2dm6y6O1l0t6yMC5w3pwA1atSwOlaiRAkArsVcszqXWdeuXePUyZPUrFnL5pssfe4kC+/+PK9cSVnd5l248H3bvnnzJm1at2Lrls3MmjuPTp272B3Xn3/+yYULF6hTtx5Vqla1Ov/778cp8/DDdrdnj2pBQXTq0pXFC79kw/p19OnXj2EjRmaqjZyM28fHh+jLl7N0r0huUnJKRERERDJUoABExyQ7O4wMFSiQM+2+/MqrTJs6hfEff0Tf/v+1eU1sbCxGo9FqyxmAn58fRqORmJiY+/Yz+I038SlShBlffM7ECZ8w4ZPxuLq68nSz5nw0/hPKlCljubZP334sXbyI2TNn8N4HH3L69GnWrV1Do8ZN0qy8sIeHp6fVsdStZfc7lyb5cPUKAB+Me8+uPrdv28bTTzYGoMmTTSnXrhwFCxXCYDCw4vvlHNi/P81qkczMTVYUK+Zn83hmx5XKGXOayvOulXupXO60n5SU/Te3pRasb9K0qc3zZ06fBqBkiZKWY+7u7gA266Slun79OmEtW7Br5w7mL1xE23btMxXX/jtxNWrc2Orc+fPnuXjxIo2ftB1zdvj6piTjvLy8+GTip5m+PyfjvnXrFgVy6i9GEQdSckpEREREMmQwQMGCzo7Cedzd3RkybDgvDvgvH457j+YtW1ld4+npidls5tKlSxS7Z+vSxYsXMZvNeNpIStzNYDDQu09fevfpS3R0NFu3bGbp4sV8/dVSjh07yt6oA5bteiGhoZSvUIEvF8xn5JixzJ09C7PZTO++9hdCd6TUsV26GoOHh0eG138w7j0SEhJYH7GZuvXqpTm3a+dOIO0qM3vnxmhMqVySmJho1WdsbPrJQUM6xcoyOy5Hcmbf93PgTjH0koGBNs+vWbWKfPnyUa/B30XMfX1TkrZX7yTc7hXm5Pw9AAAgAElEQVQbG0vr5s3Yu3cPC5cspXVYxm+bvFdqkfYajz5qdS4qMhKwvaItOyZPmsjkSZPw8/PjwoULLPxygc3tofeTU3GbzWZiYmKoVLlypu8VyW2qOSUiIiIiYodez/WmQsWKTPtsKmfOnLY6H3Tny+OmiI1W5zZvSnmdfLWgILv7K1KkCK3DnmHBosWENmzE4V9/5fixY2mu6d2nLxcuXGDF98uZN3cOvr6+aeoc5aYnatYEYOeOHXZd//vvx/Hx8bFKTMXFxRG1L/K+995vbgp7p2wbO3/unNV9qSt+MiOz43Kk3Og7Ndlpz9soU0Xd2cIaa2Ml4KaICHbv3kWXZ59Nk1CrVLkyRqORY0ePWd1z7do1mjd9kn37Ilny1TdZSkzB39tmg6pbb2vcd+eZqmZjS2VWLV2ymDcGD6JR4yZs370XDw8PxowameaNiPbIqbiPHT2K2WymchXrrYIieY2SUyIiIiIidnBxcWHUmLEkJCTw3pjRVue7de8JwNjRo4iNjbUcj42NZezoUWmuSc+aVausVvz89ddfltUmpjtbo1KlFkZ//bVXOXP6NN269yBfvnyZH5wD/HfAC7i6ujLo1YGcOXPG6vy1a9fSJIcCA0tx9epVfvn5Z8uxpKQk3n7zdS5dumR1v71zU/3RRzEYDHy1dEmaJMGxo0eZ8umkHB+XI+VG36mF1s/ZSOalZ/+dYuhLlyxO85mcPHmSvr174evry7ARo9Lc4+3tTdVq1Yjcu4fk5L+3CF+5coVmTZtw6NBBln79Lc1btszyWPbvj8LX15eSJUtanUudpyAHrZxat3YtfZ/rRVD16iz5+hv8/f158eWBnD1zhmlTp+SJuHftSqlZZqsumEheo219IiIiIiJ2CnumDbVr12HHDutXszcIDuaFl15i6uTJPBpUlTZt2pJMMt8tW8bZM2d48eWXM/yS2K1rZwoUKEDdevUJDAzkr8S/WLd2Lb/+8gsdOnYi8J5tVEWKFOGZtu1YsmghAM/1cc6WPoDKVaowcfIUBr74AtUqVeTpZs15+OGHib0ey4nfT7B5UwTde/Zk8tRpALzw4kusXbOaRiENaNehAyaTiU0REZw/d47gkFCrFWj2zk1AQADtO3biqyWLqVPzcZo2fYqLly7x/XfLaPrU0yz79pscHZcj5UbfFSpWxN/fn6+WLKZAAXcCAkpgMBjoP+D5NG+dTBUfH8+Rw4epXacuR387Qp2aj9O4cRMuR0ezfNm3mM1mvl2+wuabGFu1DmPMqJHs2b3bsiqsx7Nd2RcZSUhoQ3bt2mlJqKQq7u9P3379MxxHXFwcx48do2Ej67pNkLICKbBUKau3HmbFvshIOndoR0CJEiz/v5WWFWKvDX6dzz+bykcfvE/vvv0y3Mab03GvW7sWFxcXmrfIesJPJLcoOSUiIiIikgljxr1Pk4YhNs+NnzCJoOo1mD5tGjNnTAegUqXKhA8fQc9ez2XY9uix77F61Sp2797FD/+3goIFC1K2bDkmfzYt3To23br3YMmihdStV58KFStmfWAO0KdvP4KCqjNxwids3byJ/1vxPV5eXpQMDOTlV16le4+/V441b9mSRUu/4sP3x7Hoyy8pUKAAoQ0bseTrb22uTMvM3Hw+fQZFi/ryzVdfMe2zqZSvUIEp0z6neHH/TCenMjsuR8vpvl1cXFj81TcMeedtFi5YwPXr1wHo0KmzzeTUoYMHSUxMJDgkhPETJvLG4EF8Pu0z3N3debpZc4YOG57uc/hcn76MGzuGRQsX8ETNmpjNZrZt3QJAxMYNRGzcYHVPu/Yd7EpOHTxwALPZbPNNhdHR0Zw9c8YhW16PHz/OM61aYDKZ+L+VP+Hn93chfS8vL14dNJjh4UMZ//FHjBhl/RznVtxxcXGsWP4dLVq2wt/fP9P3i+Q2Q/LdayozKTY2Fi8vLw6dj7b5xgkRERERebAkJsRz84/TlCpdhvwmk7PDETv876MPGfLO28yYPYdu3Xs4Oxz5h5s5YzovDvgvCxYtpn2Hjpm+v0e3Z1m3ZjW//X6Sgll4y8K8uXPo36c3X8ycRY+evTJ9f3rKl0152+Nvx0+kOT565AjGjh7F4WO/Z/otmKlyKmZIP+45s2cxoF9f1qzfqG194jAJ8fGcOnmCgsUDcc1v+98I12NjqeJfhJiYGLtWD6ZSzSkRERERkQdUfHw80z6bio+PD+3ad3B2OPIvkFpvKiiLhcVHjh7DjRs3Ml2X6V79+/TG5Gqke9cuWW7j+LFjmFyNmFyNnD51Klvx2MMRMUPGcScmJvLh++No2aq1ElPywNC2PhERERGRB8zWLVvYvCmCNatXc+b0aca8Nw73e4qli+SE/fuiUrZUliuXpfvLlCnDjNlziL58OUv3BwVVZ0j4MMufK1epkqV2AAr7+KRpy9vbO8tt3Y8jY4aM4z579ixduj5L127ds9WPSG7Stj4RERERsdC2vgdD6lYjX19fuj7bjfc++BBXV/3eWXKW2WzG19uTqlWrEbF1m7PDyRWO2NYn8k+Rk9v69P9gIiIiIiIPmPDhIwgfPsLZYci/jNFo5ErsDWeHkauCQ0KBnFtVJSIplJwSERERERERsSEkNJSQ0FBnhyHyj6eC6CIiIiIiIiIi4jRKTomIiIiIiIiIiNMoOSUiIiIiIiIiIk6j5JSIiIiIiIiIiDiNklMiIiIiIiIiIuI0Sk6JiIiIiIiIiIjTKDklIiIiIiIiIiJOo+SUiIiIiIiIiIg4jZJTIiIiIiIiIiLiNEpOiYiIiIiIiIiI0yg5JSIiIiIiIiIiTqPklIiIiIiIiIiIOI2SUyIiIiIikutOnjyJydVI397POTuUbLM1lpwe3z9l/sxmM088Wp2wli2ydP+8uXMwuRotP927dslWPMePHUvTXvmyZayuGT1yBCZXIydPnnR6vHmNPfOXE5zxHDhabo/h+LFjFMzvxuefTc1WP46i5JSIiIiISDoi9+7lv/36ULlieXw8C+FdqAD/KV+O53r2YO2aNc4OL0dEbNyIydXI6JEjnB3Kv9q/5XOYN3cOBw8cYOiw4dlqp1XrMIaED6NNu3bZaqewjw9DwocxJHwYXl5e2WrrfhwVb25Y+OUCXnz+v9St9QSeBUyYXI3MmzvH5rW5NX/pedCeA1tyawxly5Wjc9dnGTNqJLGxsdnqyxFcnR2AiIiIiEheYzabefuN15k0cQKurq6ENmxEy5atcHNz48SJE/y08gcWfbmAYSNG8u7QcGeHK3lQQEAA+w/9gmcOfbHN6fZzQ1JSEmNHj6JBcAhP1KyZrbZahYXRo2evbMfk4+ND+PARAMyfNzfb7aXHUfHmhhHDwjl96hS+vr48VLw4p0+dSvfa3Jq/9Dxoz4EtuTmGQYNf58v585jy6STeGTI0231mh5JTIiIiIiL3GB4+lEkTJxBUvToLl3xF2bJl05y/desWn02ZzJXoaCdFKHmdm5sbFSpWfGDbzw0/rVzJmdOnleDN4z77fDrlHnmEUqVK8dEH7xM+5F1nhyQOUrlKFaoFBTFr5gzeeuddjEbnba7Ttj4RERERkbscP3aM8R9/RJEiRfj+hx+tElMA7u7uDHr9DcJHjExzfP68uQTXrUMRLw+KeHkQXLeOzd9Y371la8f27bRs9jR+RQpjcjXadT7V5k2baBvWmgC/ongWMFG5YnmGhw8lLi7O5ti2bN5Mx3ZtCfR/CM8CJsqWDqRT+3Zs3bIFSKml81STRgCMHT0qTb2Su+vrZKbfpKQkPv7wAypVeASvgu5UqvAIH74/DrPZfJ9Pwdrdc7J50yaaNAyliJcHxYsWoUe3Zzl79mym5jinx5JRTaj7fRb2fA73az8rz+G+yEhaNnsaX29Pivl407Fd20zXVPphxQpMrkbGf/wRn02ZTJ2aj+PjWQhfb086tW/HuXPnrOI0GAy0aWt7+1KNalXSjP3en48//MCuuJYsXoTJ1cismTPYuGEDYS1b8JCvD/7FfOnetQuXLl3K1DjT86DFa6/GTZpQqlSpXO0T4K3XB2NyNbIvMtLq3IzpX2ByNbJo4Zd2t+eseQ2pVxeTq5E9u3enOX716lVqVKuCV0F3NkVE2NVWToyhXfsOnDl9mvXr1mX6XkfSyikRERERyVBycjJxf9lOeOQlBdwKYDAYstXGvLlzSEpKok+//vj5+d332vz581v++41Br/HppIkEBATQq3dvDAYDy779ln69n+Pg/v18+L/xVvfv2L6dD98fR0hoQ/r07ceZM2fsPj/982kMfOlFChcuTPOWrSjq68uePXv4YNx7RGzcyOp168mXL5/l+mlTp/DaKwNxd3en9TNtKFmyJOfPn2fb1i0s+/Zr6tWvT3BIKKdOnWLBvLk0CA4hOCTEcr+3t3eW+n1hQH/mzp5N6TJlGPD8C8QnxDNpwifs2L7dzk8krV07d/LRB+/TrHkLXnjpZaL27WPp4kVs27qFrTt2WX1mjpxDR40lo8+iVetnMvwc0pOV5zBy714++d/HBIeE0rdff6Kiovh++XccOnSQyP0HMZlMdo1r//4oAObMnsWZ06cJa9OW4OAQ1q5dw/LvlvHnH38QsXUbkPJ3yqaIjVSoWDHdMXXs1JnExMQ0xxISEpg8aSIJCQnUq9+Ao0d/yzCuA1Epca1bs4Y3fxpEsxYt6d2nL+vWreWrpUtITk5mwaLFdo3xfh60ePO6qKgo3NzcqFS5svW5fSkJq6Cg6na356x5Hf3eOJo2bsioEcP5/oeVAMTHx9PumTCOHD7Ml4uXEBwSwsmTJ5wyhlq16wCwccN6mjz5ZCZH5zhKTomIiIhIhuL+iqPIhx7ODiND0W9ep2C+gtlqY/u2lC/PoQ0b2X3Pls2b+XTSRCr+5z9EbNlmKT4bPnwkwfXqMGniBMLatKVe/fpp7lu3dg3Tps+g13O9bbab3vlff/mF114ZSFD16qxctQYfHx/LudRtN1Mnf8qrgwYDcOjgQQa/9irFixdn/aYtlC5d2nJ9cnIyf/zxBwAhoaEALJg3l+CQEEu9kqz2G7FxI3Nnz6ZaUBAbNm2hYMGUz+bNt9+l1mM17JlaK2tWr+KzL6bzXO8+lmNjR49i9MgRDBv6Lp9Pn5nmekfNoaPGYs9n4e/vD6T/OaQnq8/hjyt/YP7CRXTo2MlyrHevnixcMJ/vl39Hx06d7ep//50vzjdv3mR3ZBTlHnkEgNu3b1Ovdk127tzB9m3bqFO3Lod//ZUrV67Q9Olm6bZ3bw2c+Ph4OrRtw+3bt5k2fQZ16ta1K9mzf/9+AA4dOsieqAOWOY+Pj6dS+XKsW+uYlxs8aPHmdQf2R/GfSpXS/BIg1b7ISEwmU6a2tjprXoNDQnjq6Was+ulHtm/bRq3atenVvRvbtm5h0uQp6a4ctCUnxvDY448DZPkXBo6ibX0iIiIiWbT44CzCFtSlxfyalp/nv+/MxZt/Ojs0yYYLF1I+vxIlSth9z/x5cwAYOmx4mrcieXl5MSR8WJpr7la9Ro10E1P3Oz9j+uckJibyv08mpkmqAAx+402KFi3K0iV///Z8+hfTSEpKYvio0WmSIQAGg8GSDMlIZvv9csE8AN4dGm5J5kBKMe8XXx5oV5/3Kl+hgtWcDHr9jZS+Fy/m9u3bac45ag4dNRZHfRa2ZPU5rN8gOE1iCqBnr5Ttgnvv2Yp0P1FR+wCYM2+BJTEFkC9fPjp36QrAkSOHASzbMP2KFbOr7bi4ONq0bsX6dWuZPmu2JT57HDywH4PBwJeLlqSZc5PJRGBgKRISEuxuy14PWrx5zYkTJ7h69SrVa1gnfv/66y8OHTxI5SpVcHFxsbtNZ87r6LHvYTAYGDViOINeHch3y77l3aHh9B/wfKbayYkxeHh4YDKZOHfubMYX5yCtnBIRERHJgmm7Pmbcpnesjh+6sI9fLx1gSae1+BXK+pfMvKaAWwGi37zu7DAyVMCtgFP6TV0xEhwSanUu9diBO7/xvtvjTzxx33bTO79rx04AVq/6ifXr1lqdd3Nz48jhw5Y/p9Y6afJk0/v2l5HM9nvwwAEA6tVvYHWtrWP2qFO3rtXWTXd3d2o8+hirV/3E0d9+o3KVKpZzjppDR43FUZ+FLVl9DmvYSACkJmevxVyzq+9r165x6uRJatasRYPgYKvzPkWKACmJBYArV1JeJuBduHCGbd+8eZM2rVuxdctmZs2dR6fOXeyKCeDPP//kwoUL1KlbjypVq1qd//3345R5+GG727OHs+MN8CtKdCZe1rBq7XrLqsm8InXbXvXq1s/mLz//TEJCAtWCguxuzxnPwd2qBQXRqUtXFi/8kg3r19GnXz+G3VOzMCM5OQYfHx+iL1/O0r2OouSUiIiISCZ9umMcH29JWYXQvnIPapZI2SJzOzGBSTvGcuLqUdovasiSTmvx9yzpzFAdxmAwZHu73IPCz+8hjhw+zLlz5yhfoYJd98TGxmI0GilatKiN9vwwGo3ExMRYnStW7P41rdI7f+XqFQA+GPeeXfFdu3YNg8FA8eLF7bo+PZntNyYmBqPRiK+vr9W5jOp5padoUdsrbYrdae/eeXbUHDpqLI76LGzJ6nPoedcqq1QurilfFZOS7CtcH7UvZdVUk6a2k25nTp8GoGSJlL8T3d3dgZQ3X97P9evXCWvZgl07dzB/4SLatmtvVzyp9t+Jq1Hjxlbnzp8/z8WLF2nswERhXoi3Y+fOXL9+w+4+H3rooUzFmBtSn6fqNR61OhcZuRfIXL2p3H4ObPH1TUnQenl58cnETzN9f06O4datWxQo4Jxf7qRSckpERETETsnJyUzYNpoJ20cD0LP6Cwyo+Touxr+3FVT2q87z33fmdMzvdFjckCWd1lHCK/ffciRZV6duXTZFbGTD+nU0bGRf3SlPT0/MZjOXLl2i2D3blC5evIjZbMbT09PqvoyKt6d3PrWtS1dj8PDIuBaYt7e3pZ5RQEBAhtenJ7P9enl5YTabuXz5slXC5MKFC1mK4dKlizaPX7zTntc9iRZHzaGjxuKoz8KWrD6HjnDgTjH0koGBNs+vWbWKfPnyUa9ByiozX9+UObx6J0loS2xsLK2bN2Pv3j0sXLKU1mHPZDqu1CLtNR61TnJERaauzrE/yXE/eSXerCQ+8poD+1O2r9laHbV29WoAqmUmOZWLz4EtkydNZPKkSfj5+XHhwgUWfrngvlu6bcmpMZjNZmJiYmwWns9NqjklIiIiYqc5+yZbElN9H3vFKjEFEOAZyBdhX+HvUZKzsafouKQRN27n/e1w8rcePXvh4uLCrBnTM3wtd2p9j6A7Xwg2RWy0umbzppRXhGdmC0pGnqhZE4CdO3bYdX3q1ra1a1ZneG1qDZekpKRs91u1WjUAtm7ZbHXO1jF7bN+2jeTk5DTHbt26xb7Ivbi7u/NI+fJ2teOssdj7Wdzvc0hPbj+Hd4u6s6Uw1sbKrE0REezevYsuzz5rSQRWqlwZo9HIsaPHbLZ37do1mjd9kn37Ilny1TdZSvTA39sYg2xsD9t3Z+tYZpIc6XnQ4s3rjh07ip+fH4UKFUpz/PTp0/y48gcMBoPlf5P2cOa8Ll2ymDcGD6JR4yZs370XDw8PxowaSXx8fKbayakxHDt6FLPZTOUq1lsFc5OSUyIiIiJ2iIm/yvitKfUhej86kD6PvWKVmEr1kEcAX4R9jV8hf87FnuaL3davbpe8q2y5cgx6/Q0uX75MWMvmnDhh/Xrv+Ph4Jn4yntEjRwDQrXtPIOWtcbGxsZbrYmNjGTt6VJprHOG/A17A1dWVQa8O5MyZM1bnr127ZtkWA9Cv/wBcXFwYOSycU6dOpbn27rf1AZbi4OfOnct2v8926wHAe2NGc/PmTcvxc+fOMeXTSfYON43fjhxhzuxZaY6N//gjLl26RMfOncmXL59d7ThrLPZ+Fvf7HNKT28/h3fbfKYa+dMliEhMTLcdPnjxJ39698PX1ZdiIUZbj3t7eVK1Wjci9e6ySjVeuXKFZ0yYcOnSQpV9/S/OWLbMe1/4ofH19KVnSeot16ucblM0VMw9avM72ZKOGmFyNRGzcmO41+fPnJzo6Os0vCM6fP0/Xjh2Ii4vj4bJl7VrxmCon5tWecaxbu5a+z/UiqHp1lnz9Df7+/rz48kDOnjnDtKlTMtVfTj0bu3al1N+zVSsuN2lbn4iIiIgdPt/9P2ITYihT+BF6P/pSuompVMUKPcTLtd9h6NqXmbF3Ir0ffRlvd5/73iN5x8jRY0iIj2fSxAlUq1SR0IaNqFy5Mq5ubpw6eZL169YSHR3NiFEpK+kaBAfzwksvMXXyZB4NqkqbNm1JJpnvli3j7JkzvPjyyw79h3/lKlWYOHkKA198gWqVKvJ0s+Y8/PDDxF6P5cTvJ9i8KYLuPXsyeeo0AKpUrcrH4z9h0Kuv8Gi1KrQKe4bAwEAuXPiTLZs306x5cz4ePwGAChUr4u/vz1dLFlOggDsBASUwGAz0H/B8pvsNCQ2lR69ezJszh8eqVyMs7BkSbifw9dKl1KxVm5U//F+mx97kyaa88tKL/LRyJeUrVCBq3z7WrF5FiZIlGTXGvvpRWZlDR43F3s/ifp/DvVsXU+X2c5gqPj6eI4cPU7tOXY7+doQ6NR+nceMmXI6OZvmybzGbzXy7fIXVNsZWrcMYM2oke3bvtqxkA+jxbFf2RUYSEtqQXbt2Wr48pyru70/ffv0zjCsuLo7jx47RsJF1jR5IWW0SWKqU1dsaM+tBizezZs2cwbatWwH4+dBBAGbPnMmmiJTVeK3DwjK1UsxsTqlj5uqafjqiceMmHDp4kAZ1a9OseXMuXbzEmtWraP1MG/bs2Z2pelM5Na8ZjWNfZCSdO7QjoEQJlv/fSksy7bXBr/P5Z1P56IP36d23n11bbXPy2Vi3di0uLi40b5H1pKojKDklIiIikoGLN/9k1t6UGh69arxEPtf8dt3XpGxL5kRO4diVw0zeMY6hDT/KyTDFgYxGIx/+bzydunTli88/Y8vmzWzZvAmz2cxDxYvT+Mmm9OjZiyZPPmm5Z/yESQRVr8H0adOYOWM6AJUqVSZ8+IhMvUbeXn369iMoqDoTJ3zC1s2b+L8V3+Pl5UXJwEBefuVVuvdIu0Lm+RdfolLlKkz8ZDyrf/qRGzduULRYMWrWrEW79h0t17m4uLD4q28Y8s7bLFywgOvXU7aldujUGS8vr0z3+9nn03nkkfLMmjmDz6ZOIaBECQa++hrtOnTMUnKqVu3avPXOu4wYFs6a1Sl1jDp06sx773+Q6SLrzhqLPZ9FRp9DenL7OQQ4dPAgiYmJBIeEMH7CRN4YPIjPp32Gu7s7TzdrztBhw6lQsaLVfc/16cu4sWNYtHCBJTllNpvZtnULABEbNxCxcYPVfe3ad7Ar2XPwwAHMZrPNtxFGR0dz9swZWrUOy+xw03jQ4s2KbVu3smDe3DTHtm/byvZtKQmrUqVK2Z2cSk5O5vCvv1CqdGlq1a6d7nXhI0Zy/cZ1Vixfzvy5c6nx6GPMmjOP/CYT8+fOydT21JyY14zGcfz4cZ5p1QKTycT/rfwpzd9NXl5evDpoMMPDhzL+448sv+TI7TFAStJrxfLvaNGyFf7+zn3DsCH53jWUmRAbG4uXlxeHzkfjkUOF9UREREScbfi6V5mzbwoVfasys80y3Fzc7L5386l1DP6xN/ldTWzucwQ/D+f+4y8jiQnx3PzjNKVKlyG/yeTscEQsIjZu5KkmjRgSPozw4SOcHY7cZeaM6bw44L8sWLSY9h06ZnzDXXp0e5Z1a1bz2+8nKVgw828EnTd3Dv379OaLmbPo0bNXpu+/n/JlywDw2/G0W3tHjxzB2NGjOHzsd0qXLp2pNnMy3rzG1vz9fOgQj1WvxsRPJ/Pf519wWF+5/RzkxDic8SzPmT2LAf36smb9RrtWVSbEx3Pq5AkKFg/ENb/tfyNcj42lin8RYmJiMvUCBtWcEhEREbmPszGnWHggZfVBn8dezlRiCqB+YCMqF6tBQmI8E7ePyYkQRUScKrXeVGa2WqUaOXoMN27cyHT9nXv179Mbk6uR7l27ZKud48eOYXI1YnI1cvqemmCO5Kh485qM5m/rls34+fnRM5NvqrNXbj0HOTmO3BpDYmIiH74/jpatWju93hRoW5+IiIjIfU3cPobbSbepUbwm9Us1yfT9BoOBF2u9yQsrurDk0BwG1HyDQO8yORCpiIhz7N8XRcGCBSlbrlym7y1TpgwzZs8h+vLlLPUdFFSdIeHDLH+uXKVKltpJVdjHJ0173t7e2WrvXo6ON6/JaP76D3ie/gOed3i/uf0c5MQ4cnsMZ8+epUvXZ+narXu2+nEUbesTERERScfxK0doMrsa5mQzk1ssoGbJBllu68UVXdl9bivP/KcrE1vMzfgGJ9G2PsmrtK0vbzKbzfh6e1K1ajUitm5zdji5Ijvb+kQeZDm5rU8rp0RERETSMWvvJMzJZmqXDOGxgLrZauuFmm/y3LIwVhxewpCQDyhW6CEHRSny7xASGkp8otnZYcg9jEYjV2JvODuMXBUcEgo4flWVyL+Zak6JiIiI2JCQmMCKI18B0K7Ss7gYXbLVXmW/6lQuVp2k5CSW/fKlI0IUEREnCAkNJXz4CCWnRBxIySkRERERGzac+JGY+KsUKVCMWiUcUyi0efm2ACz7daFD2hMRERH5J1BySkRERMSGb++sbmpY5mlMbu4OafPJsq1wMbjy66UDHLn0s0PaFBEREXnQKTklIiIico9rt66w4feVADz9yDMOa9fb3Ye6gaEAfPVz3i2KLiIiIpKblJwSERERuccPv33N7aTbPFy4PJWLVXdo283ubO1bcXgp5mQVdxYRERFRckpERETkHqlb+hqXbZHtQuj3ql+qMQXdCvHnjXNsO73RoW07hMEAQHJyspMDERERkbzE8m+DO/9WcAXgq5EAACAASURBVCQlp0RERETucvra7+w5tw0DBp4qF+bw9k2uJhqXbQHANz/Pc3j72WV0cSUZuHUrztmhiIiISB5yKy4ODAaMLq4Ob9vxLYqIiIg8wJb9ugiAGsVrUcKrVI700bx8W74/vIRVR5cT/9cthxVcdwSjiwtuhby4fOkiAO7uBTDkwG9IRUREJO9LTk4mKSmRG9evExMbg2tBL4wujl1VDkpOiYiIiFgkJyez7M6WviZlW2I05Mwi8+rFa+JXyJ8LN87z49FltKnUNUf6yaoCRYoRB1y8eBGlpURERAQXF0w+fuQr5JkjzSs5JSIiInLH/j93c+LqUfK7mGj8cLMc68doMNLskTbM2TeFb3/5Ms8lpwwGAwV9/TAX9sWclAiqPyUiIvLvZDBgdHHBYHTJ0ZXUSk6JiIiI3PHT0e8AqBMYird7kRzt66lHnmHOvilsP72BGwnXKZTfI0f7ywqji0uOLN0XERERuZsKoouIiIjcsfHETwDUKRmS43WWHi78CP4eJfnL/BebTq3J0b5ERERE8jIlp0RERESAP66f5ddLBzFgoE5gaI73ZzAYqHunnw2//5jj/YmIiIjkVUpOiYiIiAAbT6wCoGLRqhQr+FCu9Fk3sCEAm0+uIVl1nURERORfSskpEREREWDDnS19TwTUy7G39N3rcf+65HPJxx83znH48qFc6VNEREQkr1FySkRERP71bifdZuupdQCWrXa5weTmzqPFawOw7vgPudaviIiISF6i5JSIiIj86+05t40bt69T2ORDlWI1crXv1K19EXe2FYqIiIj82yg5JSIiIv96qW/peyygLvlc8+dq36nJqcg/dnI9ITZX+xYRERHJC5ScEhERkX+9Db+nJKdqlWiQ630HepchwDOQRPNfWj0lIiIi/0pKTomIiMi/2rnY0/wW/TNGg5E6JUOdEkO9wEbA30XZRURERP5NlJwSERGRf7X/Z+++4+S66vv/v865987MrrSqq131Xq3ijrGNC+42NmCKAZOExHQI9RtCCiT0fBO+gVBCCQmYEEzyw5gWBwN23K0uWbIt25LVe++7O3PvPef3x51ZSUY2krdczer9fDyGlXZX93xm2Ad7ec/nfE5tS9+MYXNo7teSSw0XV7f2PbTut3jvc6lBREREJC8Kp0REROS09kB1K935oy7Gmnxujc4e+XIKQZEdh7eyYufyXGoQERERyYvCKRERETltlZMyj6y/DzjSvZSHUljivFEXAXDf6v/OrQ4RERGRPCicEhERkdPWoi2P0RYfZkhDM2cMOzPXWi4aezmQbe0TEREROZ2EeRfQncxxZjSUo4TssxbjIfBZHpd9zhA4MNW/O2OxpL97YW9eeM0uVy0iIiJ5mbfhQQDOHnEBUVjItZbaSYHLti2iI+6gFJVyrUdERESkt/SpzilvDN4cGxc1los0Voo0ViIa4ohiHFBIAqI0IEwt1mehlQGsd9mfOx8me8ALPkRERKR+zduUhVNnjjgv50pg7MCJDGloppKWWbTlsbzLEREREek1fSqcqqmFVN4YrLdYV31429kEZbzH4ABX/ZzH4Dle9HRsYAX2qIeIiIjUp464nce3LgDg3BEvz7kaMMZwzsisjrkbH8i3GBEREZFe1KfCKY/9nUc5dCRB9oitoxJAYh3OerzxeJMCKYaEwCfgLXiLOepxNPu8oEpERETq09KtC6ikFYY2DGP84Cl5lwPAOSMuAGDBxodzrkRERESk9/SZcMq/wFNJbYqzKc44Ult7ZDOmsnDJYoDAZ48j16vNpcq+p8aZ7CEiIiL1bf6mhwCYPfxcoiDKuZrM2dXOqWXbFlFOyjlXIyIiItI7+kw4FVhI0xTnHM45gsCSpimRcQRpmm3B8yEVmz3SMMQHEWUiYl/EuwZ83EDqHal3mMCCNTjvSX0C1uANpD7bBpja7CEiIiL1ad7GLJya03puzpUcMXHwFAaVBlNOO1i6dX7e5YiIiIj0ij5zWl8cxxSi7F1PY6Cjo52GhhJJWqZki7THhlWbN7Nsyw5wAUVCrPM46zEmZsbY8UwZNZggMASBJUkSnHNEUUSaepI0JQgCwigiTVO891hr4TgnBIqIiMiprZyUWbJ1HgDnjrow52qOMMZw9ogLuH/tPczd8AAvH3Np3iWJiIiI9Lg+E04FxnS2gVXKFfo3NlCpxNioQKVs8AGs2ribXyxYjg1KuPaEMPD4wOF9GzeXGmmZOJiBHQlx7AmCALwniSuUSkXiOAVjiOMY5xzFYpE4jgms2qdERETqzbJtCyknHQwuDWHy4Gl5l3OMc0a+nPvX3sOCTZo7JSIiIqeHuktWnj9byniP8Z40TUnjCnG5nVIhJKm0E5DgXJnAeIwBB6RRSIzBByEhYEkp+Q4K5QMMSKFoPAUcNo0pBpbAOdJyTAD4JCW0lmKhQBKnhPbUmE8hIiIiJ6e2pW9W67lEYSHnao51dnUo+tJtC4nTOOdqRERERHpen+mcKhVCvPd4F1PuaCNNU4rFIr58GJMa0jQkdDEF53FxmVIa0ORjdu/eRtqxi43zHmHBzu0kxWy7nsMTJyn9m5oYMWoUo0aPJQhCKpWYUqmEd74Ooz0RERGBI8PQ5ww/deZN1UweOp2m4kAOlvfz+LaFnD/qorxLEhEREelRdRdOhamlI0yJqq1QLoxI9u3i+ktfQTluoy0IsBSwbWUKDSHtDvBFGigTug5m3PIRdjVN4FChgS33/BPp5qeJg4inXMDtoaWYQEoDaWCw6SGabUxbpczHvviPXPvqN1IgpOIruILHOwcEeb8kIiIichLiNGbx5rkAnDfy1Jk3VWON5ewRF/DQut8wd8P9CqdERESkz6u7cMp4AF992Kxbyhs6Oir40IKJSJ2haeBgDrcfhDAgMAV8pUIQRhxqO4wZYPDWEEURFQfeGl5+0cXYQkRQScA2ElvLzs0r2bR8IY1NTdni3gIpFktKilqnRERE6s/y7YtoT9oYUBzElKEz8i7nuM6phlPzNz4Mp15+JiIiItKt6i6cwoDBYQDnwbuQxEHFGaJCf+785f9QiS2NhSLt5TYCnxDaBj70zj9i96bVGBsSBBGp9yQYKsZw27vey9Wvu4XYQ2ggTUPKxrBp5TI++8F3U/YWR0AWRhmMTwlcQOANqfIpERGRujJ/YzZofHbrORTCYs7VHN85I6tzp7bOJ0kTwqD+btlERERETlQdRiuu+si6qLz3gKEQFSn2G4APCiRBgbILSQslbLEBZy1J6sEaANra27HGgLEUSg0cbCuTEJCagIoHSo2YqEAFSDBgg2MHsXuLAYyvw5dPRETkNDdv44MAzBl+Xs6VvLApQ8+gf6GJw/Ehlm9fnHc5IiIiIj2q7tIVbxzGeozxGOsJjMF6gCyAir3B2YhDzlExBTqcpT31EIaU4xQbQBB6fJoQRSFJmhKU+tEWe3yhkdiGdKQeF0b4IAQTkDqHM3k/cxEREemqxCUs2vwYcKQ76VQU2IAzh58PwNwND+RbjIiIiEgPq7twyhmLx+KPCouMh7jcQRKXSZOYIDQUoggbQFiIKJVKpGlKoRBiqQZaeA4fPkwSx1TiCk1NTVQqFaIwAu+JyxWM91ibdWcdm005wOON690nLyIiIl2yYsfjHI4P0b8wgOlDZ+VdzouqhWcLNj+ccyUiIiIiPavuBhh4LKk3BM5jnMEYBz6hFBiM9UQmIY7bMd4QWkfqDcYHWOMwaYLBYX0MBBQjQ8VAZA3lSjthYLGJI/IBgbEEaUroHalJsT4Fk2AMOOtxxuPSbEuhiIiI1IfFW7JT+mYMm0MxKuVczYs7s7rtcNm2RdkbZUb3HCIiItI31V3nVMZyvNJN1lNF4B2Bd9UgqvrdvvYv/fP+UfZ9pvrpwGXfazpXyK5h/JHv4fnXEBERkbqwZMt8AM5oOTPnSn6/ac2zCG3E3vbdrN37XN7liIiIiPSYugunAgeBpzMo8iZ7OFONjHwWUVlvsS7AHBUkeQOOAE+Ir24PpDrU3HqH9bXZUtm/OjaCyuKqI4PQLeqaEhERqS+LN2edU7Nbz8m5kt+vGJaY3pxtPVy4+ZGcqxERERHpOXUXThl/pAsKaqGUJTWG1ASk1uKNxRHijD3q+7JAyWNxGDxh9ndzJKACqtcBZwzeHOmf6gyiamGWM1id1iciIlI3th/awuaDG7DGMrvlrLzLOSGzh2chWm07ooiIiEhfVHfpSlDbYlf9uzeQWvDGkhpLSkhKgZQAT6H6TRa8wWGzAMuEOAypMUcNV8/CK2er1zFZUOWwuFqXVLVjyvrgqO4pERERqQeLt8wDYMKgKQxsGJJzNSdmduu5ADy+dWHOlYiIiIj0nLpLV5KgFkZlJ+UFrrbVL5szFZBgqYBJ8aZS3fLnwGQ9U4FPCXxSnU3lsUfNksq6stLqtWpf/90anHHV9ZPee+IiIiLSJbUtfTOGzcGa+rgFqm0/XLV7BQfLB3KuRkRERKRn1MedmYiIiEgXLdmadU7NbD31h6HXtPYfQWu/ETjvOju/RERERPoahVMiIiLS55WTMk9uXwLAmcPPz7makzN7eLa1b4nmTomIiEgfpXBKRERE+rwndyyhklYYWBzMuEGT8i7npMxprYVT6pwSERGRvknhlIiIiPR5tWDnjJYziYIo52pOTm3u1LJti/D+OMMwRUREROqcwikR6RXee4Ig6Pyzcy7ninqf977zdfDeY4zp/CgiPWvx5iycmjFsTs6VnLypzWdQCIocKO9j5a4VeZcjIiIi0u0UTolIr7DWUqnEAIRhiDGGMAxzrqp3GWMwxpCmKUBnQKdwSqRnee87h6HXupDqSRQUOkO1RZsfzbkaERERke6ncEpEekUcx4A/pmOoUqnkXVZual1U1trTsotMpDdtObiR7Ye2EJiA2cPPzrucl6QWqtVCNhEREZG+ROGUiPSKMAwJggBjDEmSYK3F2tP3f4KstZ3b+0SkZy2unnI3acg0+hcG5FzNSzN7eBZOLd26IOdKRERERLrf6fv/DEVEcqZgSqR31Iahzxh2JtbU561PrXNqzZ6V7OvYm3M1IiIiIt2rPu/QRERERE5QLZya1XpmzpW8dM2NLYxsGoPHs3jz3LzLEREREelWCqdERESkz+qI23lqx+MAzGk9L+dquqbWPbVo82M5VyIiIiLSvRROiYiISJ/15I6lJC5hcMNQRg8cn3c5XVKbO7Vs28KcKxERERHpXgqnREREpM+qBTnTm2cTBVHO1XTNrJbspMEnty/VzDoRERHpUxROiYiISJ/1+NYsnJrWPCvnSrpu8tDpRDZif3kvz+15Nu9yRERERLqNwikRERHps2rh1MyW+h2GXlMIikxtngnA0uqQdxEREZG+QOGUiIiI9El72naxYf8aAGa2nJVzNd2jtrVv6dYFOVciIiIi0n0UTomIiEiftGzbIgDGDBjPkMbmnKvpHjNbs5BtefW5iYiIiPQFCqdERESkT6oNQ5/WPAtr+sYtT61z6tldT9IRd+RcjYiIiEj36Bt3aiIiIiLPU9v6Nn3Y7Jwr6T6jBoxlUGkwsYt5YseSvMsRERER6RYKp0RERKTP8d53dk7NbK3/Yeg1xpjO+VlLNBRdRERE+giFUyIiItLnbNy/lr3tu4lsxPTmWXmX061mVrf2LdNQdBEREekjFE6JiIhIn/N4tWtq0pBpNEb9c66me81syTrBlm1bnHMlIiIiIt1D4ZSIiIj0OY9vPTIM3RiTczXd64zqtr5NB9axu21nztWIiIiIdJ3CKREREelzavOmZvShYeg1A0uDGDNwPACLNXdKRERE+gCFUyIiItKnxGnME9uzk+xmVecz9TW15/X41vk5VyIiIiLSdQqnREREpE95dteTlJMO+hcGMH7w5LzL6REzW7OtfbXtiyIiIiL1TOGUiIiI9Cm1LX1Tm8+gEBZzrqZn1Dqnnty+FO99ztWIiIiIdI3CKREREelTOoehD52VcyU9Z8rQGRSCAvvLe1m9Z2Xe5YiIiIh0icIpERER6VNqnVNntJ6ZcyU9JwoKTB06E4AlW+bmXI2IiIhI1yicEhERkT7jUOUgK3etAHpvGLqvHKJiQ/b4kCBO8S7EOouPLe2ExGlI//gwDXGFILUEaYhNQ7wLu7TuzJZs7tTSrQu642mIiIiI5KZrd0UiIiIip5Anti3B42npN4Lh/Uf2ypomjHjmua24cABb090khETW41IoR40M61ek/6AQ7w2pBfCAITVduxGb2XoWPHmkU0xERESkXimcEhERkT6jFtRMa55JYIPeWTRo5L9+eScUB7IPT+INJevBJzgTcdaU0Yy6MttimBgIfYIFHEGWU71Etc6wlbueoiPuoBSVuuHJiIiIiPQ+besTERGRPqM2DH36sNm9tmbZQxo1cMhZHBHWNpD6EIjwPsSnBush8BB5CJwncI6Cc11ad9SAsQwqDSZ2MU/uWNI9T0ZEREQkBwqnREREpM/oHIY+rPeGoXtjcDYi9oYGl1DyCUUXU0hjCi4hTFNCB4FzWAehNwQerO/abZgxhjOqc6eWbJnXHU9FREREJBcKp0RERKRP2H5oK1sObsQay8xePKkvBJyrYAODNe0Y34aljLUxngomcKTWkVpIjSW2htgGxLbrt2G1rX21jjERERGReqSZUyIiItIn1Lqmxg2axIDioF5b1+AxOCyexNhslpRxODwpQfYVA8ZnH703gKf6oUtmtmadU8u3Lery8xARERHJizqnREREpE+odQ9Na56FNb13i2MB4wFSEvqR0EhCI44S+AIQYlyAdYbQQeQ8hdRTSLs2cwqObF/ceGAde9p2dfl6IiIiInlQOCUiIiJ9Qq1zqjeHodd4U/uTxZCFVdbb6kc6B6LjwTp/5O9dNLA0iDEDxwOwaPPcrl9QREREJAcKp0RERKTuOe9YVt3aNqs6JLy3pBi8yT4GHMbQhjFtYNrwtoIzCWmQEgcpaeCIA0M5gErQPet3zp3atqB7LigiIiLSyxROiYiISN1bs2clB8v7KQYlpgyd0atr10ZHeQOYGEwFcGBSvElxNiY1ntRAYiC2kFqIzYtf90TV5k4t01B0ERERqVMaiN5F1h1p5XemdpdpMHR9joSIiIicmNqWvilDZ1AKG3p1bQPEHQlmQISplMAEQALegw+wrkCYBljAGovx1XuEbnqLsNY59cSOJXjvMaabUi8RERGRXqLOqS6qBVPZR1N9iIiISG/qHIY+bFavhzMWT2NDERcnvbpuzZShMygEBfZ37GXt3lW51CAiIiLSFQqnusibIwGV8UceIiIi0ntqnVMzmnt/GHq2p8+BS3t/bSAKCkwdOhOARVs0FF1ERETqj8KpLvJHPWrUOyUiItJ7ykmZFTuWATCr9ZwcKvAkcUoQdtOE85dgVmt1KPpWDUUXERGR+qNwSkREROraip2PE7uYgcXBjBkwrtfXTxyEUUjq8ps3eUbLmYCGoouIiEh9UjjVRYbfnTSlXX0iIiK9pzZvavqwWURhodfXN9aSOjAmx86p6lD0Z3c9RTkp51aHiIiIyEuhcKqLnj9jyhuHNzqpT0REpLfU5k1Na56Vy/oe8Mbic9zYP2rAWAaVBhO7Ck9uX5JbHSIiIiIvhcKpbmEx3oJCKRERkV63bOsi4MjWtt5mAOMdJsfeaWMMZ7ScBcCSLfNyq0NERETkpVA41UUee8xAdA1DFxER6T37O/ayZu9KAGZWw5neZgGDw/h836Sqbe1buk1D0UVERKS+KJzqAQqoREREeseybVnX1MimMTQ3tuRSg/GewEOQ89TJma1ZOLe8+pqIiIiI1Isw7wLqnT8qicra+n/38yIiItIzasPQpw2bRWDzGUjujSGxkJiAQo7dU7XOsY3717GnbRdDGpspl2HVM7BiuWHFcsPO7RBXoBJDEkP/JpgwGcZN9EyY5DljDjQNyO0piIiIyGlK4VQXGY69CVUoJSIi0ntqw9CnN8/OuZL8DSgOZMzACWzcv5Yvf38BK39+E4vmQZKc+M1JFHkuvMxz9Q2eq27wjBzdgwWLiIiIVCmcEhERkbrkvWdZtXNqZk7D0E8V3sOj95boWHUBtKzl3+9eAo+8GoCmAZ5JUzwTp8LI0Z5CAYIQwhAO7IdN6w2bNsDG9YYd2wwP3Wt46F745Efhossc7/2o55IrPEZvwImIiEgPUTglIiIidWnLwY3sbNtOYEJmDDs9O6e8h3kPlPiXfxjIU0uL8LKL4Yb/pGHqPN46O+WKaz3jJmZB1AuHS0dmZa1eBQ/+xvDw/ZYVy+GxBy2PPQgz53je8xHHDTd7Qt09ioiISDfTQHQRERGpS49vzU6lmzhkCv0KTTlX0/ueWFzgna9u5UNvaeGppUWKJcfFM2YCEI6bzzs/4Jg8DaLoxYKpY02aAre93/O9O1N++r8pb3iro9TgeWq54QN/EnDTpQGPa966iIiIdDOFUyIiIlKXasPQpzfPxprT55amo83wT387iHfc2MryhUUKRccNtxzgGz/Zwp99aAyRLXAw3seGg6u6tM7I0fDnn3L84oGU296X0r/Js2K54bWvDPjrD1v27+umJyQiIiKnvdPnTk5ERET6lM5h6D26pc+DC/GEZHPFUwIH1lk84Hv5dL4ljxW59Yrh3PHtAXhvuOTaw3zjJ1t431/tY/hoRyEoMHFg1j31xM553bLmoCHwno947vxtyrU3Obw3/Me/Wq44O+C+X2kQlYiIiHSdwikRERGpO4lLWL5tMQCzWs7KuZqel6bwjS8M5D2va2XTuoghwxL+/Is7+Nj/3c2IMe6YbXvTh5wNwJO75ndrDUOGwme/5Pjn76eMGefZtdNw2xsD/u6TliTp1qVERETkNKNwSkREROrOc7ufpj1pozHqx4TBU/Iup0cd2Gf46B8M4/avDgTglTce4iv/tZXLrukgOM6d3NTBWVi3YvfCHqnn/Is8P7o7m0cF8K0vW958Q8D2rT2ynIiIiJwGFE6JiIhI3VlaHYY+degZFMNSztX0nOeejnjbtcOZe38DhaLjT/9mFx/57B6GDPUv+G+mVTunntv/FJW03CN1FYrZPKrP/VNKYz/PwscM118YsKh7dhKKiIjIaUaHAYuIiJzGPCHGOzAO4z2YrBsmSRKKxSLlSkqhWCRNPYkz2BDiOCEMQ9LUEUWWpOKwQXa9AIP3Hu891lpM2jMziZZtzbb0TW+eg/ERvHBW0yUWhwOMh9CHWA/WewwxoSkQm5BDKUSJYYBPOGAtBktiSlS8o1jZR0BMJQgppR0UfAXjHd5YAmdIfeMLrv3IvUX+6t2D6Wi3tIxI+D+f38PMsxMMIbzIqKvhpQkMKAzhQGUPz+xaxpxhF3X/C1N1zfUwbTp8/E9hzXOGW18V8vXvea69Mfvv3Zjs4T0kpFhrcc5hwoA0TXHOEdnq9wLG+853TtMTPWJQRERE6l7ddU45oCGBQprdMBocqXW0RR5vHIFzpAbaC45KAGHSSBy1k4TtBA6MKxIHUI46KCaOYurAljGmTOhjnAlIbUoSVIitI7EWZyEJKrigTGodngBnPc6meb8cIiIiXWKOGujtDeCzW4PGxkbKHTFRFFHpiInjlEIISRxTiELSJMYaj3VQCC3Geax34FMMDms8+BRvXI88lm3LOqdmDJuTBWo99EitIwkciYXEQmohDhwuhI60Qgdkf3YVUpsS2ghPgDcBEOBtEWyJ1BtiWySmQMWUiE2RxJRecN177irysduG0NFumX1eB1+8fQezzqlgTqBmYz1TB58JwBO7H+vR1wfjGDfR8b07HRde6imX4d1/YPjBdx2OlNSnpN6R+pRSIcBUQ8TIgnEeY3ooVRQREZG6UnedU86A89m7cLV3SY0nOznHZ4/QZV+qvhGHw2aBEmF24w3gLKkJSExEaiJSE2K9wTqDweOdJXC28ybKeDC+7rI8ERGRF2eObsEx1d+TAeVKSlQsApC6mFKhSPuhNhoiQ5h4SoEFPGncgXcxhTDCu2rHFNkvW+ccSdT9vzvbKod5dteTAMwaPgtMz2xdAwjxGB/gTfY8DA5LShInFKKI0CYYFzK4UKGjo43+USOxtxgb4D0UbII9tJeiy94RtN7gsXT2B5n231nzx98dwBf/aigAr7jmIB/+zA4aGk6u7mlD5rBo+/08tXtej74+NQ394B+/DV/464j/vivkrz9s2bq5zMc/lZ1o6FyC9U0YFxMZQ1pxFAKb3aMdlU95Y9BbfyIiIqefugun4uq2gZAsqAqcJXQQuayjqiG2GAuRsRibYkix3uIISU2A8Y7QpUQGOkyBsm2gYko4IjBQSC0ej/FQSA2FNMB7T+hCAmcw3pJaoHpzKSIiUs+M58gbN9Te98l+v5XLZQphRL+GRtJKzID+DQSuTKXSQRAEHNx/gKeeeopf/epX7Nq1C1JHmmbHthlT3d5nu/935e6GHaTjUwpJkW9+5ivYHvx9XHAOjyU1FrzFkGDxRIEhTlJiZ3AmYvWW3RBGWN+OJyDxHucNgUvZNKCRlQ/8lLAauzgMzgQ4LJgjx9x5D2uefCOrl98KwPDx90PjD/jqF19kD98L2NN/M0yAR1f9hk/87M+658U4Ad7D+Mk3su656/n6F4v85u5fc9PNc5kzZzbX3/gaAu9wqSNNU4JSMctGjcEfvYWv9magOfnnLSIiIvWp7sKp2g20M4Cr3Yxa8Nl7mTXOQAAEPiH0jshl73RaUkIfk/oUQ0J2i+izd0I9pCa7MfeGY65nfXUdERGRPsVXA6qj33SxWAvOGUpRSEd7B4XA8Oj993HXHT/gvvvuY9CgQRw4cIAgCPDOEYYh5qiAodZBFfTArq29M/fBeAi2G1YvXtb9CxwlcgmpCakNEwCweKiGVM6D9wZnCzgMBb8XYwvZK+kNGNi3y3MQn830AjwBqQ2qYddRz2vnh9m3Owum+g++nSD4QqCIjwAAIABJREFUBuufemkBjSskMAHaiwd55skFBOXoJb8GJ8u7xQxqeop9B/+MlSuu5bub1jN4wMf4m7/8aypJTLlc5oMf+TA3v+4NjBs/jsMdFTwWBzgTQPUeLHixwVoiIiLSp9RdOGV8NjDTekiB1FicMcSBpRxAWwTtAVSswxgYULaEzhG5mMAnne/CBQ6CalAVuoTAOYy3HC6k4CG1jnKYza2iGlo5Q+dNtsUTeEdqgrxeChERkR6Txo5CocChg4cYMqg//3XHHXzhs5/FpjGFKOLggQNYYxjW3MzZZ59NU7/+WGsJguz3oq8GMSHdP9T6Zw0/Zxe7mdk8kwte9bJuv/4xTIojALL7jezZZG9qkcYABFGRcsURRCEFUyZxAd4YnMs6yAwGfJqFWRh8rWsKiFx2jSULr2LtM68D4OyX/YrZZz2NtZd3qfS7kg0cCPcy61XTmFCe3qVrnQxjLfgyy574FQ8/dj17D7yLpgGNxB2fwLmUwYMG8i/f+hb//r3bue2d7+Ad734PqXdYk23x893/IyMiIiKnuLoLp6zPTgIyBrzz2Tu71TlU2OxIGI/D2+zjIdtIf1fBmhBnAtpMkbJtILUBKWCtJ7CQph6CCEM2lyEKQnwWf+GNxxtPFocZwOBciseR9WeJiIjUJ2/ITlBLHWFoSJPs92IQGtrb23jfu97J8mWLCX3WP3zWWWdxztnn0dLSQnt7O7a6ba8WSj1f0gNNx9t37QQH05pn01oY3/0LHMWQZPOmfBZOHZG9SZV9z1FD5X1UDVeOfeLHDp4/+msp8x86m7kPXQ3ABZfP5+IrV2Pt6C7XPjqZzAq/kIPDDtAaju/y9U7W1eN202/wQu65+3w2bPoDrrtuOq9+9WKSJOH2229n1+69fOvrX+eb3/wmf/GXf83r3vBGbGgxgSVJ1TUlIiJyOqm7cCrw2Ql9BoMl66SyHiKfneAXxjH9ihG2klAohLQXS5jDeyFO8D6lYi0+KGKMIalUwCTYtEL/UoFy6ml0jjhxlMtt9POegoFKpYLBZ0cf48BaMB4bWKpveIqIiNQna3Au63KK4xiLodzWQSEK6Fcq8MTSJRSCgKhgecub3kRLy3AAEpdSKGUD0/1xgwRT/c/u3de3P93HXrcHg2FMOKYH+rKOZb0FZ7MQz3eexYIhm0OJcdUDU7JeqMT46mEqtbHeR16bzlr9kZHfi+bP4e4fZ8HUeRcv5hVXLsTa7nnNRphxrPAL2ezX9Pjr9EIuvvhZvLP8+lfncs8959HUlHDZZUu57bbbmDdvHvMXLCDF8PlPf4oDBw7wJ+9+L+3tHZT6NZDECqhEREROF3UXTnnvyaZYeLyxeOeJTID14A4e5KO3vQuiImmaHXW9kzKjAsPu9asoNTbQGFaw6QFIoRwZOkj50fe/wx0//HcCE1Bsh9hY2n1CYyEgao/p11AijWPCQoRLsi6rsDEi7mjH1N9LKCIi0imtBSzOUYwKVNoOs2frZj7yoQ+wbs1afBJz881vYOrUqXifzViy1pKmaec2vraODgqFAhwnAgm7OV/YUFkDQIttob9vxPZwfpHNQKqFRf6oZ2iq2/wCvMk+73z1OzoDqqOLs0cFWw5wPPPEZH52x3UAnHX+ci6/ai4hnu4atTSacQBs8WuxqT9mJlhvuuzip0krAffedxZ33nkB/fod4MIL1nPB+S/j0ldcwve+fzubt2zj21//KmEY8se3vZ20UgGjWZ8iIiKni7r8rd8ZUAUWrCEoRiQkVOKYHTu2sX3bFrZv28rGtc+xb8tqNqxZTVRspMMZynEHoUmJjKHQNIg220gSFCi3teMrHTgXY6wnDEPayx3E3tFRKdMyfGTWYu4txmR7CY3Xlj4REalvQWRJ0mrnVLmdYhTwz1/7CuvXraUQGt78pjcyceJEkqR2qpwjSRKMMaRpSnt7O/37969+rQemnz/PmiQLp0aFo7G9EF44k2199CYLlMBV/+6zw1Oe98i2AGYjALLbLAsEeAKcyT56AjZtGM1/fv+1eG8548ynueqGhwjD7n39WhhFQEgHbezy27r12ifrlZc/yfkvW4n3hh/84EpWrBgGgHMJb33LrUyZPBFSx5e/9P+YP/exzuHxIiIicnqoy7Yf7z0pHmcgCcCWIj72t5/gsXvvJfUBFRNifUohBEcbptIPGzawYc9uggEtlH2A8ZYh019OpX8ryeE9TBs9jImtg4mAw5UEGktYn9KUpLSOGs7Mc8+mnDgag+w203ekRD4gVj4lIiJ1rK0jYUD/iMqhMsWowP49O/jf39xDFBhmnzGL8WPHkFTKlBr6gQHvsgNHbGculIVURxwbKpS7+ffk6mo4NSIakx1a0sMCR3WcwJG5UR5XPdmwVkBt2IAjcGl2AvBR7U8OizNHGrD27WriB99+HXGlwJhJG7jitQ/gip5Kt1cfMiwexTa/njVmFQODEd2+wsm48aZFHDzQwDPPjOHb37mej/3ZLxg2ZDONjY3c9KobiYoF/u8Xv8z73vVOrrvhRj759/+Qa70iIiLSe+ounKoduuy8J7FQMRDZgNe+9U286a23EDtDe+opRSEuKVP0MW2VIdhG+MX/ruDHy5+iLSlkxz43jaX/GaNp8O1cfem5XH/RGRjaiAlJCwGuUmaINzjjORwE4AuQgoshsiFhEiucEhGRuhaGlsOHyzQBttLBP/ztZwgIGNB/IJe/8mpsVCQsGrxzuCTBBNmtg3MAtnOL3wuJunHbXeITNsXrARgfjO/2LYPH56ltyfPP69T63Xla2Wwqj+08je/Y60B7W5Hvf/sNHDrYn+bWXbzmll/TGCXdtpXv+UYxnm2sZ4tbzfnu0p5Z5ERZx5ve/Ajf/bcr2bixha9+7Qb+/ON3YYvt2KhAodiATzowxvA/P/0xn/z85/DWUCw10B67bHC/c1jvMPgjuy0xWVhoNKNKRESkXtXftj7j8EGEMSFR4ukXJxQSj08iOpICqYsomAIusUADbWYIDVE7sctmTIUdFQYmhxhkDlEMOohMijMR3jiMT8AXiLylVPY0+gIdRFR8gSgJiNIER4KJEpLA0V5UMiUiIvXNmOzI2zC0fOFzn+e3v/0tkydP5v3vfz/FYhFf3b6XOkcURbnWuinZSEJCo2lkmB2Way0vRZJY7vjXm9m5vZn+TYd4zVvuprFfR4+uOcKMB2CTX92j65yoKEr5wz96gObm/ezf349vf+ta4jggCALiOOYd73g7YRhSLBbZsG49obGU28tYnw3sD4LfvXX1eU17FxERkW5Tf+GUiIiIdJ8kpVQo8h///gPuuusukjjh9a+/mXKlgrGGOI7x1hCEAXGa/P7r9aC1cRawjAxHE9q6a/7mV3ddwdrnxlIoVHj1m+9maPOBHl9zpMmGou9gE4k/NY4Ybmys8Ad/+AClUpkNG1q4445LieOEJEkYMmQob33rWzHG8Pa3/REH9+4jCgJwnkIQkh51MqQ3R4IpBVQiIiL1TeGUiIjIaSzA4NOUhx54kFKhwNEHuhmbHTwShiGJS3M77a1mbXXe1OhgdK51vBSLHpvD/EfOAeO55rX3Mnrcjl5ZdyBDaaAfKSmb/ZpeWfNENDcf5M1veRhjHAsXTOF/7zuz+vPlaW5uprm5md27d7Nh3Vp8mhAEQXYgTlLbQvr8n0Vt6RMREalnCqdEREROY4HNBlDOffRRXJIQBIYkSSgUChzuaMcYQ7lSIbABqcs3AFgbZ+HKmHBsrnWcrA1rRvLLH18NwAWXLGT6rN7bYmeMYQRZ99QG/1yvrXsiJk/exvU3LAbgl798OU89ORZrAxobGznvvPNoLER8/3u3U7AB3iXgfOfW0qOnfelcPxERkfqncEpEROR05jxhGBKGliRJGDVqFGEYEidloijC2mzoufPZQOq87Ev3stftxWAYHY7JrY6TdWBff+747mtJ04BJ01dz8RUL6O2XcYTNwqlTqXOq5sILn+Wcc5/De8vtt1/Jrl2DaG9vZ/LkyYSB5YllS7GWbBB6jj9/IiIi0rP0W15EROQ0FlqDBQKThVMzZswgSY4/WyrPTX21LX0tQSsNpjHHSk5cklju+LfXcuhAf4YO2831N99HGPZ+n89IxgOwya/t9bV/H2Pg1TfNZ8yYnXR0FPiXf7kG70s0NTXhk5Q9u3exdfMWCkGIc676s/m7pyZq5JSIiEh9UzglIiJyGnPOUdsYZawnTd0LzJbKed5UdUvfqHA01tTH7cs9P3slm9aPpFjq4MZb7qGxXzmXOkZUh6LvYyeHXM8PYT9ZYeR5y60P09jYwZYtQ7njjkvwHoIg+5mLk3Lnz6T31Z/V3KoVERGRnlAfd3ciIiLSI7z3hKEB4zHGUCgEWHvsHB8DGJ898lILp0YH9bGl78ml05j30LkAXPOa+2gdsSe3WkqmkcEMA2CDX5VbHS/IewYObOfNb3kEYxwLFkzj4YenEscx1kKapqRpNpA/CIKj/qHp/LnM82dTREREuq7+zmEWERGRbhUEYK0l8f4Ft/TlKfYxG5MNAExgFAP27KXxcBs2SQicw6YpYCiXipQbSpRLJToaG3DHBBm9Z9eOwfz0jusAOPeiJUybmf+sp5FmPHv9Tjb55ziDc/Mu57gmTdrOVVc9zm9/ew4/+tGFNLfMpNT4bPbF35s+edRPJSIiUr8UTomIiJzGKqGhkkJYdlgshoCKzTpSAgfegDPZx15rTnGOwTu2M3TzZoZs3cL69pUklyc0t8GXP/X1E4ognDEcGDyIvc1D2Dd0CLtaW9g6bgzbRo8iLhZ6rPRKJeRH330N5XKRUWM3c8mV83p9APrxjDDjeMovZNMpOBQdYzq361122VNs2DCMZ58dw67t32TkyJuIjaEcGELnCFKDtx5XbefLMiuDVy4lIiJS1xROiYiISL68p3nTRkatfJZRq1YxYvUqSm1tnV9+9OXZxws3Zr0xaRDQ3lgiDUKctbjAYrynUK5QKJcpVGKs9wzas5dBe/YCqzuv5Yxh5/BWNk6awJoZU1k3dRJxsdhtT+XuO69i+5YWGvu1ccPrf0uhmHbbtbtihBkPwBbW4b1/gbli+bMW3vCGh/nGN17N3r2j2bX7c3ht2RMREenzFE6JiIhIrzNpysjnVjFx2VImLFtG0769x3w9iSL2tbSyb9gw/vu8LcB2glFn8s2PX05HQwlvbXbU29Ehi/fgPdY5Gg8eYvCevQysBlTNO3bSsmUb/Q8epnXrNlq3buO8R+aSBgEbJo5n5ZyZPH32HA4PaHrJz+mpx6eyeN4cjHFce/NvGTz04Eu+VndrYSQBIR20scNvotWcurO7Ghpibr31Mf75n6+kre1V3P2zLbz9/+RdlYiIiPQkhVMiIiLSa4Zs2cyMxx5l2sL5NBw61Pn5OCqwY+w4dowbx7bxE9g5egxpoYAHFiafA2DYgBm02/4vfPFqWOWs5dDgQRwaPIiNkyYc8y399+5j5KbNjF29lnHPrWPgvv1MWLWaCatWc/Vdv2TttMmsOPcsnj5r9kl1VB3Y35+f/ee1AJxz4TImTd1w4i9KLwhMyAjGsYnVrPPP0MqpG04BjB+/m8H9/pW9h9/Nlz4/nFfe5Jg6Oe+qREREpKconBIREZEeFVQqTF24gJmPPkzr+nWdn+9oaGTz1KlsmD6DTVOmkZRKx3ZCATv8Lg5wiICAcYzqci2HBg9i5eBBrJw9E4BBO3Yx+dmVTH3yaYZv3sakZ1Yx6ZlVXP2TX/DEy85l8SUXsru15UWv6Rzc9cPraW9rYNjwnbziilNjztTzjTGT2ORXs86v5AKuzruc32tw///gcHw+HR3n8KE/Mvz8gZRSPjPuRUREpIcpnBIREZEeUTp4kNkPPcDshx7o7JJy1rJpyjRWn302G6dOJ/093Ukr/VoARjOckum+2VA1+1qaWdTSzKJLLmLQrt3MePwJZix/ikF79nH+Q49x/kOPsWbqZOZfeSlrpk/9nfAMYP7D5/DcMxMIw5jrX/dbiqVT78RDgNFmEnjY4FflXcoJMcYxdMinOXj4LlYsD/i7T1o+/QUNoBIREemLFE6JiIhIt+q3by/n/Poezpj7KGEcA3Bo4CBWnnc+z519DocHDT5uyHM8K10WTo0zo3p8iPe+5qHMvepy5l5xGeNWreaceQsZv2oNE1c+x8SVz7Fl7GgeufZKVs2cTq01asfWofz6F5cBcPFVcxk+cneP1tgVI814DIb97Gaf28Ug25x3Sb9XEOzig3++gy98cgTf/WfLZZenvPK6vKsSERGR7qZwSkRERLpFw4EDnPObe5j18IOESdY9tHvESFZceBFrZ835vV1Sx7PKrwNgvBndnaW+OGtYP20y66dNZsDuPZz72HxmLV7OyA2buOU732f7yOE8+KpreXr6TH787zeSxBFjJ27gvAuX916NL0HRNNDCKLaziTX+ac7hkrxLOiEXXHyY173VcdcPLR95j+W3C1KGtuZdlYiIiHQnhVMiIiLSJVFHB+f85h7OvP8+okoFgB1jxrL8sleyacpUfPjSbjf2+gPsYDcGmMjYbqz4xB0YOoT7b7qeeZdfwnmPzuPMBUtp3bKNW77zfd438Bts3d9KqaGd626+jyA49becjTaT2O43sd4/WzfhFMAH/tLx+ALDmlWGD7/D8v2fO6zmT4mIiPQZCqdERETkpXGO6fPn8vJf/Ix+Bw4AsGvkKJZd/ko2TpvxkkOpmlXVeVPDaaGfaexyuV3R3tSfh6+7igWXXczLHnyUQ3Mb+Nb+dwPw+SGfoEITexmaa40nYrSZxGL/YN3MnaopluDzX0l5280BD99v+c5XPe/+yKkfBoqIiMiJUTglIiIiJ234mtVc8uP/pGXDBgAODh7CkiuvZu3sOV0OpWpqw9DHmZHYHp43daLKDQ385vJX8aVl78cftNzGv/HRzV8i/krI/Zdew4OXXEkSRXmX+YJGm4kA7GQrh91B+tmmnCs6cZOmwEf+wvP3nzZ88dOWCy9znHVW3lWJiIhId1A4JSIiIies2HaYC3/2U2Y++jAAlWKRp15xKU9e9AqSUqlb11rp1gEw3ozp1ut21U9/eRN7Dg5h4MB9TL/hGdY9Mp7xG9dxzf/+D+cunc/Pb3wDz06bmXeZx9XPDGAww9jLTtb5Z5jJ+XmXdFJe/2bPvEcdD95r+eAfh/z6sYSGfJvqREREpBvYvAsQERGROuA9kxcv4tbPfKozmFp95ln8/AMf5vErrur2YKrNt7OZbQBMymne1PEsfWIWi5edhTGOV1//3xwaO5jvveUd3HnjGznYr4mhe3dz2w++zVv+63b6HT6Yd7nHNcZMBmCdfybnSk6eMfCJLziaWzzrVhs+/Re6lRUREekL1DklIiIiL6px/36u+OEPmPDkEwDsH9rMghtuZNPUaWB7JhxY5dfh8QxlEIPMgB5Z42Tt2z+An/z8NQC8/Px5TBiXbWnEGJ6YeRbPTp7BFQ/fywVL5nLWE0uYsvpZfv6qN7BszjlZqnKKGG0msdzPZb1fmXcpL8nAQfA3f+/44J8E3PG9gKtvSLnies2fEhERqWd6u0lERESOz3umLJzPWz/7KSY8+QRpELD80sv5xfs+wKbpM3osmAJY6dcBMM6Mwpr8b1ecM/znT15Pe0cDw1u3cvklD//O91SKRe656lV85w/ew/bmFvq1HebWH3+ft/3Hv9D/0IEcqj6+0WYSANvYQNl15FzNS3PBKzy3vC0F4M/ea9m9M+eCREREpEvyv9sTERGRU07p4EGu+9dvcc3t/0aprY3dI0bwq3e8i8XXXNftW/iOZ6VfA8A4Rvf4Wifi4bkXsmrNJKKwwmtu+CVRmL7g924ZOZpv//H7uf+iV5JayxnPPsVHv/p3nPH08l6s+IUNZAj9GYjDsaFOu6cA3v8xx/hJnt27DB97n8WreUpERKRuKZwSERGRY4xdsYJbP/85Ji57nDQIWHbZ5dz9rveya+zYXtmeVvEx6/xmACaZ/OdNbd3Wyt2/uQaAyy99kNaWXb/336RByAOXXMW3/vh9nV1Ub/vhv/KGn95BoZxvt5IxprN7ah3P5lpLV5RK8Ll/TAhDz32/svzoe6fO1kkRERE5OQqnREREBICC99yycD6v/drX6HfgAPuGtXDPbe9k8TXXkRaLvVbHGr+BlJQm+jGMob227vHEccgPf/xG0jRk0oTVvOy8hSf173cMG8G33/Z+Hj3/FXjg/MXz+PDX/56RWzb2TMEnaEw1nFrv6rdzCmDqGfCeDzsAPvMXlvVrci5IREREXhKFUyIiIsL4uMKd27dw7YonAXj2vPP4n3e+lx3jJ/b6MO+Vfi2QzZsKbdCraz/fr+69iq3bh9PYeJibrrub4CW8FGkY8psrrud7b3k7+5oGMnTvbt7/7S9xwfyHyWsvWq1zajNrSFycSw3d5a1v95x9vqe9zfDB2wKSJO+KRERE5GQpnBIRETnNFX56F3dt28AZcYVDhQL3v+lNPPbam6k0NuZSz9N+NQATGJPL+jWrVk/koccuAuC6q3/NgAGHunS99WMn8s3bPsCzk6YRpimv++WPufX/uz2XbX7NDKeBfsRU2MBzvb5+dwoC+NQXU/r19zy+yPC1f9D2PhERkXqjcEpEROR0FccM+cuP0/TG19PfO56ICnz1iqtYc9ZZ+B48ie/FlH2F1X49AFPMhFxqAGhrL/Gjn7we7y1nzlrGzOnPdMt1O0oN3PH6P+TXl19Hai1nPrGUD37jiwzftqVbrn+ijLGMNVMBeM4/0atr94QRo+Bjf5tt7/va31uWntzuSxEREcmZwikREZHTkN22lZZXXcOgr3wZgDsbm/jg0GHsbhqQa12r/FoSUgbSRCvNudXxk1+8mv0HBjJ40B6uufJeurUXxxgeu+ASvnvrOzjQfwDDdu/kT7/1/zhv0dxe3eY3rhpOrXErem3NnnT9azxXXu9IU8OH3h7QdjjvikREROREKZwSERE5zRQffogRF51P6bFHcP36cehLX+YrA5sp59QtdbQV1S19E82Y3OZNLVk2h8efmIMxjhuvv5uGUrlH1tk0ahzf/JM/ZdWEKURJwht/9iNu+ckPiCo9s97z1cKpLayj7PI9QbA7GAN/+VlHc4tn/RrDZz6e/8+ziIiInBj91hYRETldeE/TP/0jLTdeQ7BjO/GkyWy747+ovOEWfC8PPX8hT7ts/tFExuay/p69g/jJL28C4KIL5jJ+bM+eqtfW2I8fvvGPuPfSq3HGcO7ji3j/t77E4D27e3RdgEE0M4DBOFLW+Kd6fL3eMGAgfOqL2fa+H91uufd/To2faxEREXlxCqdEREROA+bAAZpvvYXBn/gLTJrSdv2N7PzRncQzZ/3/7N13fBzV9fDh770zs6tidcuWey+4Y3o3GIgDhoTQIRACgRDgR5I3IRBCCBBCEhJKKi1A6C1ACKaDMTWhuGGDMe69SZZkq+3u3HvfP2Ylyw1skLSyfB5/Bkn2aubM7oodnT3n3EyH1qTG1bGUaPbS4AzMm7JW8eiTJ9LQkE23spUcevBbLdvOtx1Oad46YBz/PP1canI60W3tKv7vtj8wYMFnrXpcpRR91BAAFriO0doHsO+BjtO+EyWoLrtIU742wwEJIYQQ4gtJckoIIYTo4LxFC+k6/lBynv03LgiouuIqKm/+E66oKNOhbeZTtwCHo5RiilVhmx//jXcOYsHifgRBkuOPmUTg2TY9/pJe/bn9nItY0bU7ufV1nPfPv3PAf99o1TlUja19izpQcgrg4sss/QY61pcrLrtIt+UoLyGEEEJ8CZKcEkIIITqw+JtvUHbYgcTmfIwpLaX8rnupPfd74PuZDm0rc1y6pU/1Rqu2vURZsaqMF149EoAjDp1M19LyNj1+o415Bdxz5gXMHDYaz1m++dyTnPT0w3hhqlWO17hi3xqWs9FWt8oxMiEeh+tvMQSBY/KLmofvlfY+IYQQoj2T5JQQQgjRQeXecxddjp+At76C5LDhrHvwcZIHHRJNjm6HPknPmxqg2nbeVCrl8/ATJ2OMz8AB89h77PQ2Pf6WwiDgqYkn89K4CVil2Gfae3z/7r/QqWZDix+rk8qnhDIAFrjZLb7/TBo0FC78cVT9dt3lmkXzMxyQEEIIIbZLklNCCCFERxOGFP3kh5RcehEqDKk7egLr7n8E079/piPbrvWuijWUo1AMom3nTT338tGsXtuV3NwaJh79Ap5uBz1gSvHufofw4Eln0xCL02fZYi79+x/osWJpix+qb9PcqY4xFL25M89zjN3X0lCv+OF5HmGY6YiEEEIIsS2SnBJCCCE6EFVZSekJE8m74+8AbPjBJVTe+lcoKMhwZJ9vjlsAQA+60knlttlx584fwFv/PRCACUe+RH5+TZsde0cs6D+YO79zEeXFnSnYUM0P7rqVUR9NbdFjbJo7NadF99seaA3X/tGS28kxc6riz79vn1WDQgghxO5OklNCCCFEB+HP/ZSyww8i+/XXsNk5rP/DLWz80U8gCDId2hdqbOnrr3qh26jtsLYum0efPBGAMaOms8fQuW1y3J1VUdyZO8/+AZ/1H0wQhpz5+H0c/vqLLTYovZcaiEJTRTnr7boW2Wd70rUbXH5d1N731xs10z/IcEBCCCGE2Iokp4QQQogOIP76ZMqOOJhg/jzCbt0pv/d+6r/5rah0pJ1zzjUNQx+o+rbRMeFfz3yDDRvzKS6u4KjDJ7fri6JEPIuHTzyLd/dOV3m99jynPPkgXgv0qcVVNmX0AmC+++gr7689mnCc46hjLMYoLj3Xo7Z9FcgJIYQQu732fB0mhBBCiB2Q+8A/6XLCsejqahKj96T8ocdJ7bVPpsPaYatYSxUb8PHon06StLapM8bw0ccj0NowccJzZGcl2uS4X4XTmpfGH8uko47DKsVeMz7gvH/+jey62q+878a5UwvdJ195X+2ld4uqAAAgAElEQVTV5ddZupQ5li5SXHe5XAILIYQQ7Ym8MgshhBC7KucouPZqSn5wftPg8/J77sf0apsET0v5ON3S15vuZKmsVj9exfoinpo0EYCD9n+XPr2Wt/oxW9IHY/fnoZPOIhGLMWDxAi6+42aKK75aO16fZskp62xLhNnu5BfAr260KOV49D7Ny5Nk/pQQQgjRXkhySgghhNgVNTRQcu7ZFPzhtwBs/O73osHn+fkZDmznfZQexD1I9UW18rwpaxWPPHkiiUQWPbsv5+AD3mVXTFHM7z+Ef3z7+1Tn5VNasY5Lbr+JPksWfun99VD9iBGnjhqWp1ssO6J9DnCcdk40q+vyizXr1mQ4ICGEEEIAkpwSQgghdjm6vJwux00g94lHcb5P5S+vZcMVv9glBp9vqcElmOuipMoealCrH++1Nw5j0ZK+xGIJjp3wPIFvWv2YrWVtaRl3nv0DVnbtTm59HRfc8xdGz/zwS+3LUz59iKqnPrXTWzLMdufin1j6D3Ksr1D89Ae6pebKCyGEEOIrkOSUEEIIsQvx58+j6/hDyPrvO9i8PMr/cht1Z31nlxh8vi2fuPmEGIoooBtdWvVYi5b24uXXDwfgyMNfo2tpeasery3UdMrnnjPOZ86gPfCN4Ywn7mf85Be+1Ep+A/UIAD7roEPRG8XicP0thiBwTHlZ89Ddu2LtnBBCCNGx7JpXskIIIcRuKP7u23Q94mCCBfMJu/eg/N4HSR55NLRyK1xr+shGLX2DVT987bXacerrs3jo8VOw1mPY0E/Yc/TMVjtWW0vFYjx2whm8s89BABw9+QVOffIBvDC1U/vpp4YBsJqlVNv1LR5nezJwCPzgJ9FsrV//XLNwXoYDEkIIIXZzkpwSQgghdgE5jz9Kl4lfw1u/nuTwEZQ/9Bip0WMyHdZX4pxjpvsUgKFqQCseB/71n+OprCqisKCKCUe+jKc6Vi+XU5qXjziGZ48+HqsUY2d8yPfu3bmV/DqpfMroDcCnrmO39gGc8V3HXvtbGuoVl57rkdq5XJ4QQgghWpAkp4QQQoj2zDnyb/wtnc89C5VMUj/uCMr/+RCm5661It+2LGUl1WwkRsBg+rbacT6YviczZo1Ca8OxE56jU25dqx0r0z7ccz8ePOlsErEY/Zcs5JLbb6JkJ1byG6CHA/CZm9FaIbYbWsM1N1o65TlmTVfceoNcFgshhBCZIq/CQgghRHuVTFJ80fkUXnc1ADVnnM36v9yGKyzMcGAtY2a6pW8AvYmreKscY115CU9PmgjAQfu/S7++S1rlOO3Jgv6D+ce3L6Q6r4DO68u5eCdW8hugouTUQjeHlE22ZpjtQtducMV1UXvf329SfPi/DAckhBBC7KYkOSWEEEK0Q6qqii4nTKTTA/fhtKbqZ1dSffU1kJWV6dBaTGNL32DVH9UKc7PC0OPBx08hmYzTu+dSDt7/3d3mwmdtadcvtZJfV3qSSx4pEix0n7RBpJl39ETH0RMt1ip+9D2Pmo2ZjkgIIYTY/ewu12hCCCHELsNbspiy8YeS9cbr2Jwc1t/8Z2q/dwF4rTcwvK1Vu40scssAGKYGtsoxXnj1SJav7EF2Vj0Tv/4cQWBa5TjtVU2nPO4583zmDNy0kt8Rr7/4uSv5KaXpn66emrsbtPY1uvxaS9dujmWLFb+6TC6PhRBCiLYmr75CCCFEOxL78H3Kxh1EMHcOpktXyu++j4Zjj9ulV+TbllluLgDd6UKxKmrx/c+dP4Apbx8CwNfGv0Tn4soWP8auIBVEK/m9u/eBAHzttec55ckH8cJwu9/T2Nr3mZuJ+5xEVkeSlw/X/sGglONfD2pe/E/H+nkTQggh2jtJTgkhhBDtRPYzT9Pl60firVtLcvAQ1j3wCKm99810WK2icd7UYNUP3cKJt5raHB7510kAjB45gxHD57To/nc1TmteGn8sk46KVvLba8YHnPfPv5Fdv+3B8H3UEDw8qihnrVvRxtFmztj94MzzomTc5RdrVu0+py6EEEJknCSnhBBCiExzjrxb/kjpmaeg6+tpOOgQyu9/GNN/QKYjaxWhC/nYzQNgaAu39FmrePTJE9lYk0dJcTlHH/EaWu0e1T9f5IOx+/HQiWeRiMUYsHgBF99+E8Xry7e6XVxl0ZPocfnUTWvrMDPqwh9ZBg9zVFUqLjrL43MKzIQQQgjRgiQ5JYQQQmRSMknxJd+n6Jc/B6Dm5NOo+PuduJLOGQ6s9cx1i2ggQS459KVni+57yjsHMeezIXheyHHHTCI7K9Gi+9/VzR8whLvPvIANnfIprVjHJbffRJ+lW6/kN0Cn507Z3WfuFEAsDr/7syG3k2Pa+4obr5FLZSGEEKItyCuuEEIIkSGqspIu3zyWTvfdi9Oa6p9cTvV1v4GcnEyH1qo+sB8BMFT1J9B+i+134eI+vPDKUQCMHzeZXj1Wtti+O5I1Xbpx59k/YFWXbuTW1XL+3X9l1EdTN7vNIDUKgGXMp9quz0SYGdOzD/ziBgvAHbdqJr8o86eEEEKI1ibJKSGEECID/AXzKTviELLenILNyWX9TX+i5oILwW+5ZE17FDrDVDcbgJFqaIvtd2NNLg88dirWegwb+gl7j52KpBS2b2NePnefeQFzBwwhMCFnPn4f46a81LSSX4Eqpht9cDhmufcyHG3bO/LrjhPPiBJUPz5f5k8JIYQQrU2SU0IIIUQbi7/zNl0PP5hg3lzCsm6bVuTTHf9l+VM3n1rqyCWbwfRvkX1aq3joiZPZsDGfkuJyjjnqRXwtc6a+SCoW45FvfZv/7XUAAF9/9TlOevphtDEADNVjAfjY7n7JKYAfX7lp/tQPvu2RTGY6IiGEEKLj6vhXwUIIIUQ7kvPoQ3Q57mt46ytIDh9B+f2PkNp7H2jhFevaq/fTLX3D1SDiOmiRfb4yZRzzFgwk8JN8Y+Kz5OQ0tMh+dwdOa144ciLPjz8WqxT7THuP8+77O1n1dQxVYwBYxkKq7NaD0zu65vOnpn+g+PUVctkshBBCtBZ5lRVCCCHagnMUXH8tnb93DiqZpP6IIym/90FMv36ZjqzNhC5kmvsYaLmWvjlzB/PK64cDcNQRr9Kj26oW2e/u5r29D+Thb32bZBAwcOE8Lr7jFnpXWnrQD3B85P6X6RAzomcfuPaPUXvf/Xdqnnp090giCyGEEG1NklNCCCFEa2tooOTcsyn43fUAbDz7u6z/099wRUUZDgziToGBBm1wvkdoUnjGoBxYDTb9u7hy0aadQjvV9DWAU9EsKacAT2OcxTmLtQZPA86gleMT9xl11NOJHAa6nngaPA0KCy4EZ7baFBatXHo/IQqL70Wfr68s5sEnTsY5zZiRM9h7z48AF/3ZIoeg0tvux22xRUV6ztqm+0QBvtbMGziEe868gI25eXQpX8Mld9zEAdV9gKi1L3qcosck+tyBtWitcS76WmuNUgochNaC0qSMQW8xS82hNttUunLQOdf0eb2fwvlAKkk2GpwmVA6ndBR304PsmmZltYZDxzvOuTBKUF1xieaTWa12KCGEEGK3JckpIYQQohXptWvpeuxR5D7xKM73qfzFr9hw5S8hKyvToQFRMsDzwfN9wjAEQG0jjfNFv/oHQQznHMlkgpgfEAQBsViAMaYp2dDY0jdSDyY3nkMymaCiopwVK1awaNEi5s+fz8KFC5k/bx4rV66krrYWpRTGhKSSSXzfxzlLGBpSYRZ3P3AGDQ3ZdO+2ggnjX8JhUFrh+V6L3kcdjoN4LHq8fE/jnCMVhihgVdeu3HH2+awu7Uqn2hpuuuctlIMVLGa9XYtSKkpEAb7n43k+WIdLJ4ecczhrAUfMDwhNSCwWI5VKbRZC82eYcq4pKdX4XFFKNSW6fM/HNSXWMpNi/P6PLPseaEk0KL5/ukd1VUbCEEIIITqsjr0kkBBCCJFBwexZlJ76Lfwli7F5+ay/8SYSRxzZ7gafm5QjmUiSE4/heQEQVaZsmZByis0qVFyzqiqAwPMxqZAwTOD7QVOSQmuP9RvX86E3CzyomLKSe1fcGyUyXFTJo5RCobDOopVOJ0Ec1lmci5IenTuXMHDgAPr2HcDjz5zO6rVl5ObWcMLEpwjiSRQ6HbnYZFuJRkcyTBCLBVhrCQJNTU0t1hjmL1zIypUreSy3M3+orWdc9QYOXQJv9IV//O9P5H/UC5MemB4E0fcbY+jVqxfdu3enZ4/edC3rCkqRTDYQBDFSiQZisTjW2s2iUKim51jzyqnGDadJJJIopbAmSk/pdDJt69Ns3cfd8+D6Wy1nf1OxdLHi0nM19zxh8SQPKoQQQrQISU4JIYQQrSD7macpueC76Npawl69qPjT3whHjs50WFtx6eyQVpowDDHGbn0b0r/7N8sJbNk2Z5JJrFIEvo/vR8klQ1RRNXnyZN5PziR5WEhQpwmWOvDAWkc8HiM7O4eseAxrHbF4jNraOpLJBMlEEhxorXAOKirWs3btOl6avB9LVo5Ca8MJEydRUlyN53kopUmlQjCgVPtKALYnMd+jviFFkighGKYSrF65io8/mU1DIoFSGhWLc3GX3vywcg2nzl7HG32ha8+VqKldqI9loZQilUqitYfv+6xatYply5YxK2cWBx98MMOGDUM5cNaRlZVFGJptRBIlqBrzZ865qF0vXUHl+z5JY/B8D601xjqstc2qp1yb9moWFsHv/2Y4/zSPKS9rbrwGfv7rrX9ehBBCCLHzJDklhBBCtCRrKfjNdRT8/jcAJPbZj/U33Yrt1j3DgW2b8nxCk54bZC01NRvTLVRb/tafbtvaTjJAaw+NwtgkEKO6soqHHnqI0Bq01qw5vBqAfvU9OOSAfbDOsinbpdJVNBaFxmGbKqqaRcrqVav5dP5Qlqz8GQAlhX9h6vv3Ulr8NYqKCrHG4Hke1m5dWdN6E4naNwegNlW3ASTDFEoppn3wIUuWLgLAGIvvBxQXl1BcUkJOTjYKeBMYvmYu2r7HZ90s7/jzeXLUKazKK4oeKWdx1lFRUUll5XoqKyt5+eWXef311wnDkGHD9uCII8bjaTarnHJNkyU2tQMCURLKGBoaEjQkU2Rl51CYXxS1h3p+NC/LbfkMVdt8xraGPUbAL35j+dVPPW6/RTN0hOOEU3fXZ5cQQgjRcuRtRSGEEKKFqA0b6Hz6SU2JqZrTv035P/7ZbhNT0GwAtRddEixbtgy9naojR5SccgrQW6QCnMPYJIlEkmkfTuWpp57CGEMsFqNzt1Kq+jQAMKi+d1MiQqEh3UDocOmvI0pF/77pNhDP3pdFK/8GeBTlP0uXoofQGt7577ssWLCQVCpFmErKxU0z0eDwxq+ioeirV63m2WefZcGC+TgHnueTl59P/3796NWrJ51ycokeYo1Wmo+7DqF3dQkAb/TdwHUvPcDIVYuaWi6VVpR0LmbgoIGMGDGc4sICPBVdZM75eA7/fuppli5Zsv0Ym2UhrbVYa6mvr8MPAoqLSsjNy8NulsTavFqprVNDX/+G46zzoxguv0gzc2obByCEEEJ0QFI5JYQQQrQAf/48Sk89kWDuHFwsRtXPf0nd6WfS3ofSOAVJaykqKmb92tWUl5djnSVaaM3htEJ7HiaVwNcexlqCWECYClHpxJY1IVorVq1cxaRnJzUlvPbcc0+ycrL5rHgZoWfolMqmrKGkabi1a1Y59flfQ01tDi9O+TmpVA6dS+Zy+MHP4nvD2FhdzcJFi5g+fTpTp07lmGOOwc/xsWFIPBYnGYZ4nhfNr7K2A7f7bX7fQZTgM8YQj8UIjWHt6jVMnTaVurpawtDQKTeHAQMGEIvFMNbiaY+oni2qQ7Ju0z671g5mcdF/+cdYjyveTnD5lCd5cMxhvDhkL0Clq9wsObk5jBw1Ek97GGuYPm06y1csZdnypfTu1Yujj55APDsLZ1N4fpwwTKG1F80Ys5YgHkAS3n//fQww8RvfwDiH5/uY9GOodeZXXrzoJ5YFn8G7b2i+d6rHpLcNXcsyHJQQQgixC+uoV2hCCCFEm8l69WXKxh1IMHcOprQL6+68l7ozz2r3iSmA0ILSmgnHHoP2AjzPRyuN7weAwxiDDUN8LxpwrrXGhAaNwvM0WkFl5Xqef+4FXnrxRZRS9O7dm9GjR5OXl4fv+3xUMA+AQTW98NItfDvDGJ/X37mSjTVl5Oas49D97yTmJ9AKCguLGDJ4CIWFhWilefH5F/jg/fejKipjmtrE0ArVzgbRtyzFppRNVCHl0vO6TBiycUM1b7z5BrW1NRQWFjJkyBCG7LEHfiyGBTytN0sGbqlPdT9847Ow2HDb3j3ROM6eMYUf/O95gjCVPqKONgueF6CVZtSoUQwfNpzOJSUsX76cBx+8nymTJ+P7Adak8D0fm279NNaQTCRZt24dn302j6zsHA45bByhA2PSq/k1/UxtilU1+29b8Ty4/hZLn/6OtasV557oUVfbpiEIIYQQHUpHvkoTQgghWpdz5N16E6XfOg5dVUVy5CjWPfwEqYMObvXVw1qMVqTCFN/85glkZWURz8piyZIlOOcw1hKPxdJzhWzTSnheuvrIGkNDQwPP/udZFi9eRH1DA3vvvTe9evciNy8Xp6A8qGJFzjqUg4FVvYiqbHb8vnEO3nrvQlatHU7g13Hwfn8lK6sciIa4WyydcnPp06s3/fv3R2nNwgULmfzaa+nZVS4a8J1e/a/jazbHS0FudjaLFy3iuUnPoZUiHs+iX99+5HXKS98qYjf7amuBDehT3ReAmw6M88SwAzFKcciSOfz6lYco21i56cZaUddQTyplCIKA0tJSRo0aRRAEJJNJ5sz5hLq6OsDh0vPBlALPD4jFYkyd+iGpVJJjJk6ktKwrSmssjtBZ9FbtpOmz3d4wtFbUKQ9uvtOQX+iYPVNx8Xc0Zltz34UQQgjxhSQ5JYQQQnwJqqqKzqefTNFVV6Cspfb4E1h338OYvn0zHdpOcUphnCW/MJ9jJx5LXV09M2fOwtOamB8DwFceuKhqSqOwxqDTA66XL19OXW0tgR+Qm5NLTk5OlEywDuccswsXANCjrguFJheFwrod/w1+6ken8dnC8ShlOGCfe+lcvIQoxxQN41bQ9DG3Uw5aK5RW1NbWkmhI4JzB9xUmNKgtExsdzqah4o1JnI9nf8yHH35AdnY2Odk5DB44COMsDpdO7jVSn1s5BTBo/RAAFhcu4tmhQ7j1gG+wIZZN7+pyfvPSA+y1fH60J6WJxWJo38M4RxiGKKUYOHAg8awsrHM89dST1NbWYV0Kz/MJQ4OzhqVLl7Jo0WKCIMaEY45FaU3YNOjesll+sR3kGnv1gZvvMAQxx+QXNddcJpfWQgghxJchr6BCCCHETgpmTqfskP3ImfQMLgiouuznVP3uD5CXl+nQvhytAM153/seXz/m66xYsYL77vsndXV1mFQKrXW0ml56GLXSgHM888y/efXlV8jOzmbvvfdm7Nix0Upq6QqX0Av5OD9aDW7Ixt7pFfkcnt6xkZefzjuSabNOBWDs6Mfo2f2DdLgq/TG6jFEqatlTKEYOH8HgwUPQWvPss88yfeo0rHVoX2Fs2KJ3W/sTtfZZ69LD4UOmT/sQnMX3FHvsMQSlG2/VPFGnd6iarbi+hML6Iqy2fFY8l89Ke3L9uFNZUFRGTpjkp2//m9NnvoG2FmPC9D4VnhdgLZR16cI+e+/NyJEjWL16DQ8//DAvvfQSLr2KXxAEPPnkv1BKUVNTQ7ce3UnZED8WwylF4AfpVR63kOEk1aixcO0forjuv1Pzj7929CSoEEII0fIkOSWEEELsKOfIvecuyo44hGDRQsLuPSi/+35qz/8+BEGmo/tSfJMgy/NoQJOI5XLJz68m6WBjbQ3PPPUYMZIo04DTjpRSKOtwYciLL7zAqpWr8DyPMWPHEsRjKE8TWkNj+mN+znIa/AQ5YRa9a8pobBsz9osrp5auGMtb718IwNBBzzN4wCtbNJ01DuxWOCC0BgcYHLmdchk6dCg4x6KFi5g5fQYqdAR46W7LTa1kEcf2MhxWt69te1TjWofOEQB11dW88dqrGBQlXcsYNHQPQmvRnk9jlZR1Lp2kcunE4+cnVRSKQesHA/Bp509wGKqzc/jjwd/gtX4jATh+zgf8/PXHKWioa2qjtDiMs4Qo0B5FRaWUFJeSSqVYungpASG4BDNnTMVqn1hBMb/6wy1Y5YHyo8orG21eukoOVHpJR5V+um0jadWGjjzGccll0fP6+p9rnntaElRCCCHEzpDklBBCCLEDVG0tJRd8l5JLL0IlEjQcfCjrHnuS5AEH7jrzpbYjTIUYY7HG4LTmqAkTsFpTU9/Ax5/MwaVXUmushqmsqmLRwkXEY3FycnIIgm1XQs1Kt/QN3NiTYCcWCF5XMYBX3/opznn06fk/xox4Ar2T5TFZWdn4XnTMuXM/JQj8aBVC15iGigaGRw9d82Him/Nt+9qaa55Sc1isc8QCn3XrK3jz7bdZX11F59JS+vbpg6c01oH3FYf0963qj2c9qrOqWJ27CgCrPR4fdQh37XUUCc9n+Npl/PbF+xlUvmKr77fWglKMGDGCgoICnHM89cx/eObfz/Dmm2+Sm5/HNddey5ixY79SnJlw1vmOE06zOKf44Xmat1/ftf+/IIQQQrQlSU4JIYQQX8D/dA5dxx1E7iMP4TyPDRf/kIrb7sKWdct0aF+ZpwN8L8D3ffyYj3OOy668kseefJrBI0byxrvv8Ze//p1PP51HVhAnDEOe/c+zOOfo1q0bY8aMYVuJncpgA8ty14CDIRv67HA8lVU9eX7y1YRhNl1KP2Hfve7B0zvft+WwjBk9msLCArTWvPLKq+n2P1BaRQk3BfYL99O+ts1SUumcmlPR3/iBpra+lpdefplkmADl6NunDyY0OCzxeIxkMrnT92VzMRujT1VfAOZ0/nizf/uw5yBuOPQkVucWUtRQy9WvPcZxc95DucZKtXTNk3LE4jHGjB5Lrz69WbVqFStWriIMLZOee5EBg4aQndvpK8WZCUrBz66xjDvKkkoqzj9NM+PDTEclhBBC7BokOSWEEEJ8jpzHHqbssAOIzfkYU1pK+W13sfHSH0FWVqZDaxHWWHAOay3WgnGWjfUNdCrM57obbqAhmcLz47zzzjssXbKURYsWUVtXS25uLn369iGVSm1zv7OaBqGXUpjasUTDho1dee61a0kk8ikqXMwh+/2NmP9lkymK0Fp69OgJQFVVJZXrK5uyUUqBctG29Xdu2qxqX9umGi/XFL9y0diwMLQEQQytIQwNnTt3JhWGeL4HKGxo0N5Xv/QbWBm19i0qXEiD17DZv63OL+aGcSfzYbcB+M5yxsy3uHLKExTV16AcuPSAdJxDKUXv3r2wOLT2GXf4OJLJBNk5OaC+WoVXpngeXH+LZa/9LXW1iu+c4DHv00xHJYQQQrR/kpwSQgghtkFVVVHy3bPofN530LW1NOy9L+sefZLk4eNBd5yXT18HGOPwtEcYpnBaoXwPowOS2uOVKW/w0ysux/MCnv3Ps7z44gvEY3FGjhyJQuH7/latYqEyfFywEIDBG3ttMXx722rrinjutWuoqy+mIG8F4w68hax47Zc+L4VCa0UQDxg0aDCpZIopr7+ONQmwIcqa9LSqaFPb21w724iSUxo2i9M5h+8pZkybRuB55Ofn06dXb7RS0cwmFMZadAtc+nWuK6WgoQCjDZ8Vb515SfgBd+1zNA+MHkfC8xmxZim/f+GfjFk+L/180Zu1wjoXDdt/6ZXXCF3jo7frisXhj7dZho5wVFUqzjzOY/nSTEclhBBCtG87PgBCCCGE2E3E33qTkvPPwV++DOd5bDz3fDb+348gOzvTobW40Fm05+GsxfM8rLLge4QuqmYxSjPu8COJeQHXX3cdnuejtMIPfBzRQG1jQpq39n1SsJD69CD0vjXdvzCGhoY8nn/tGjbWlJGbs47DDrqVnOzqr3ReDotK/8nNzYnOzRo++OA9evfqg3FRQseh0VqB21RCFVVTRV/rdpYmad6G6JolmpSGMJFk4YIFeFrRrUuXaCC5aqyzcpt9/CoUikEVQ/mwx3vMLv2IEetGbZ30Uoq3+w5jXkkZ53/4Cr02VPDTt57m5UFjeHD0YaR8L73ynqJLly5UVlYSWEunTtnU1IUkDfi75hoDAOR2gj/fbTj/dI8lCxWnTvB4/CVDj16ZjkwIIYRonyQ5JYQQQjRKJim4/hryb/kjyjnCXr2ovO4Gkgce3KGqpbZJRaugaRe1j4FGBXHqEwny4jH6DhhAaFJoz6O4uDia34TCppNb1kZpE4vlg+I5AAyv6veFg9DrG/J57tVrqazuTXZWJYcdeDN5ueta4oRw6dYxlV7ZzVjL0iVLWbFiJdrzCU2IdRrP89MJtvR3NiaqlEW59vW4u21UPilAa401IUEQ0K1rKSXFJZgwZNtNl1/dgMqBzOo6g5p4DfOKP2PI+qHbvN2avGJ+d+hJnPDJ/zhy4UyOnjeDPdYu488HHM/ywlIABg8eyMcfzyGZSvHIg49w3IknRQnDXVxhMfztPsP3z/BYvnRTgqp7z0xHJoQQQrQ/kpwSQgghiIaedz7vbGIzZwBQe/wJbLjyKmxJ5wxH1pZcuk5IEZoQhyMWBIQOauvr6NSpEyaZJDs7G2ss2tNopZsSUwBz85dSHashbgKGbuj7uUerbyhg0qvXUlnVh6x4NYcdeAtFBata7GwaB3BbZ4kFPs5ZjIU9hg0H7eEsOM9DbV44ReM8JwDX3lZibDYLvZFy0dezZswgmUjQubSUVJiK5ol9xdX5tsd3PkPLhzGzbDozuk5j8Poh223GCz2PJ0YexCelPTln+mR6VVdww8v38+CYcbwyaAw46Nq1lPXr1zNr1iy+edIp2C8xBL896lIGtz8UJaiWLVGcMsHjXy8byr64oFAIIYTYrZ3cRhMAACAASURBVEhySgghxO7NOTrdeRuFv7gc3dCAKSyk+sqrqT/uG+B3/JdJo6NqKeUcqCjJ5DkPrTRh1HWF9jQLFi2kwSTxrKVzSWdisRipVDJa9Q6HUhqH4/3iaAW3Par7kW3j2z1uXX0Bz716HZXVvcnKqmLcgTdTUtSyg3msdWit8D2frmVlLFm8GKN8Lrv8cjbUJqLEk/YxxuKaKnUa2/mij6adJaeU2xSPxoGLPs6c9iEfTp9GPOajfQ9nLNr3Ma71kjyDK4bySelsqrOqWFywkH7VAz739h+X9eG6I07lnKmTGbFuKd+d9hr7LZvLnfsejSkqwPc1b745hcqKdXQqKOwwP39duzVLUC2OElSPvWDo1iPTkQkhhBDtR/uqVRdCCCHakL9wAV2Om0DxT36IbmigYb8DWPfY09SfcGKH+cV4R9h0vkO7aINoVbV4XKO0pq6ujvXr12PCkFg8Riwe22yeUWOF0sJOK6jIqiawPsOr+233eLV1RU2JqeysSg4/6KYWT0xFcaXPxVpysnNAKaxTNBhQXoBTHqEDpzVOeVGiTWmcUlilsUqhnG5XWxQjOAWWaPk+i2LZipXk5OaA0lgLKWswzn7+HfQVxWyMwRVRO9/0sqk7NM9qYzyHvxxwHI+OOISE5zNs3XJ+/+L9fH3eTArzOhH3febN+wxP75qr9W1PWfcoQVXW3bFkoeJb4z0WL8h0VEIIIUT7IckpIYQQu58wJO9PN1O2355kTZmMi8ep/n+XUXH3fZj+/TMdXZuKhRAYi9OkEzIabaNqnDCZwmqDn6WZPX0quRbKunUDpQitAaVQunHdOMf7JVHV1OANvcg12x4eX72hG/956bfpxNR6xh10E8WFy1r8vBxR8swBBkcsK0ZhQQFxl+Ldd98h6VIYFc3Iitr4DGBx6a+1hcDodM9c+9lUuvWyeQWVcoZPP56FMiHKJHHOopyHpvUTPEPL98CzHuU55azotHyHvkcpxZQBo7lu3GnMLelO3IR8d+ZbPLJ8JkPqanj+6Wc65Ii3bj3gzkcMPXs7Vi5XfOtIjzmzMx2VEEII0T5k/KXfAcZaYnEfY0F7PtYpHHqbm2d3bvOVQStLYJPEwg3U6Rxq/VySDqxLRZehLgl+QIP2d3r/RkVx4XyUjTZc9E6zcSZ6D9EpXKjx1e7zLrwQQrRXwUczKBt3IEW/uBxdX09i731Y+9jT1Fx4McS334bWkTXWu7gtOti00k03SCWjFfn8LSrKXLptbHnOWlZlV+BZzYiqbbd3lVf055mXfsvG2q50yl3D4Qf/geLCHUto7Kwtm/E0Cu37KDT1DQ3bvV1zu8rUI2stqWQSZy3xeBYeGu21zSVelslmwPqBQFQ9tTPKOxVy00En8NDIg2nwAoZVr+P5tTM4cupkwvqGL97BLqisO9z1mGHgEEfFOsXJX/OY+l6moxJCCCEyL+PJKYhWmHEO4jGfVDKBVg6PrTetHMlg5zY8j4RxKB2gdUDM0wTOkKU0gbUEWuErRZhMkUqx0/v3sXg4fByeijYfB9ZEw1Sdw/M0vq8xJtP3tBBC7L5UfT0Fv/oFZYfsT2zGdGxePpVXXUP5fQ8TDh++qQdsN9PYIrZNSoG1YB0NiQQKTRAETW18jbTWvJeumhq4sSf5Ye5Wu1q5egTPvvprGhIFFBYsZfyhv2/R4efbCJ5owHvjiHdFzPdRSlFfU9s08FwptdVD366TUs2DS8dtbdRQ53AE8TjGRSsv2jY6kz3KR6CcYlXeSlbn7Nxj6pTjrYGj+PXhp/JJSXfiOC5ZMoM9zjic7LmzWinizCrpHLX4DR/t2FitOGOixyvP7Z7//xFCCCEaZTw55Xkezjnq6xpIJpNoNHHPQzm71aatxbmd2xoMpFQ2SRRJF60oZG3jO70a5xxa+6ggTpDNTu3bOou2Bm0tONNssyhrCHyNcg4TGpLJcHf9vUcIITIu/uYblO0/loKbbkQZQ/2RR7P2qf9Qd/Y5EItlOryMsor03KJtaUzuKIL0DKDmK/M1WpiznKW5q1FOMbJq4Farts1beBjPT76aVCqH0pK5jD/kRjrlrG/pU9mm5nOQrIte/4PA32x1vsbPHZtyP3a790n7EjUhgnUOa6PHS6nGR61tdEp1ol9l1A77v57v7sDsqc3vWWMtVbn5/Hm/iVyT15ca7ZM7eyrDvrkvPX93Obq2ppUiz5z8Avj7/YZ9D7I01CsuOF1z721yoSiEEGL31S76zLRSxGIxPKWIacV///tf5nw8u+ldzcbVgwA8u3P5tAbtETP1WO0xe9FKNiypBGswnsFzFqPjaBzTa+dR90k34jt5JWp0+hucZlOuz+LFPEq7duXgQw/DqQDt+9E/t+u3Y4UQomPRq1dRdNUV5D76MACmtAvVl19J/bHH7VYDz3eUhc2mFDmnUOkXY98PAAjDsPktMFheL50GwB7VfSlK5W32/R/OPJ3ps08GoEe3aRy4zx3EgkRrnkZTbM3TMw4ITYgDsuJZzW6m2PLFuemrdpkraHZebtNAek97KBUNf4f0LC1Hm1UEjl6zJ0sKF7M2dw3zC+cxqGrwDn1fdOUUzSwLw5BncrrwSe/B3FloKXznVbrdfTMlkx5j6S9uonLCtzpUhWN2Dtx6l+WGX8KkJzXXXOaxZJHll7+1eB1rHrwQQgjxhTJ+Ze6cQymFMQZjLVOmTOHSSy4mHgQoZ9mUoYrEzM5dlFidQCc24AcBDSqLjX4+nrL4JokzKZyOo5RjzQdJ/qctyXDbA1y3J+k1vt0arfDT+G5gQypJLCvOFVdexbdOOQO0JpEweBm/x4UQYjeQTJL3979Q8Lvr0TU1OKWoO+EkNvzkZ9guXTIdXbuzrfdNtPZpSCaIxXwsji5lZcz/aDbV1dV0796NMDT4vs/M4nlUxjeQFcYYWzmkqWoqDGO8/u4PWbT0QACGDHyJPUc+hqfbqh6p8XrBYR2gHHU1NeCgV5++WJqVj2+ex9r07e34DaXGVkxFNK/TD3wsRFXoyiM0IZ7WbdbalxPmMnztSD4qm8F7Pd6lX3U/fBdsGTWfl/Grq6/DOIvu0ZsFV11N/ruv0vvWq4mvXs7AS0+j+oAjWHbVTdQPHtGq59KW/AB++VtLz96O22/xuPfvmqWL4E93W/LyMx2dEEII0XYynipJWYPnogtET8H0qR8S9zQmUU+f3j2jdwM9j9AYtNZsVoe/A0IV4LvoHVqjfEpUHEWI5wwKMOn3iD0Mngv5Mp2OUUQaqzYtwb1o0QICF2f+3E9xJsQRQ/vt/EpXCCF2dc6R9eLzFF15OcG8uQAkR4yi+oorSe6zHx1yCbCvqll1cvN7xzlHLBbHEr1edu5cGiX56uoAiMVi1Kg63i2J5gLtuX4IOSaqSNpYU8qrb17GuvWD0Cpk7OiHGTTgdXSbvgZuOlbgeaRSIYlkErSmT+8+2MAjkTLRbEjtYdPXBdupoWqHNiV6lIbCwiKWqaWEYYpEoo7snE6kUsk2rTTao3w4C4rnURurZVrZVPZdtf/nxr2l2tp64rE4vfv2AU+z4eCj+XifQyi770+UPXwHBf+dTP7xe7P2tAtY8cNfYYpKWvV82opScO5Fjh69DdddrnntBc3xhynuetQwcEimoxNCCCHaRsaTU9GlsG26INbpyqPsnBwGDBjQNNvCEQ1cTaide8c1JAffpqJ9KE2oPBQOz4UoBza9gp7C4jmL1amd2n/MpGc9pFc00g6UcqxetQITGpSxUWUYDoNrD3e4EEJ0SMGMaRRdeTlZb04BwBSXsOGSS6k75fTddhW+HeK2yF80FgQ7R2hClK+Ix7PpP2ggFqivr6e2to7c3BzeKZtJ0ktRnMhnjw19AVi2ck8mv/1jEsk8YkENB+x7Bz3KZrV5h5x14GuNdZbQGioqKrDGkkiGOF/RkEhFyUrrMM7gKTCqWdqkPeeltmBRjBozmo9mTAcFObm5JJOJNm+B853P2FX78FafKczqMpOh5cPIT20q/9msWm0LCsW6detIhiFHH/W19JuRChfPZtUFV1Bx7Gn0/PN1FL3zMl0fuo2S/zzCykuuZO2ZF+E6yM/31yY6uvc0XH6xx8J5iuMP87j5TsuE43ehJ6MQQgjxJbWrt5B1s49hKhUNSyd9fegHJIzFoXdqi9s6AhIEJIi5enJsDTmmlritJ+bqybLpz20C3yV2ev8OjVW6KU6r0q2KDqxJoVU0dN1ai/ZlgIAQQrQ0b/EiSs4/h7JD9ifrzSm4WIyNZ3+XNZNeou6scyQxtYOaXxAowPc0SikcYIyluLikqfKsvr6e1bEKZhUsAGD/ihFoG/DhzFN5YfJVJJJ5FBUs4ahxv6FnBhJTALrpoApro5Y+pRXxrCxi/qazVTqq0N61NJ/mHp1o95490drDGItJhTjn8DJwz/fa0JsuNV0x2vC/nu98zi0tzQej19XXkUomKSgooGtZGd4WVY7JHn1Z+Pt7mHvLI9T1G4K/sYrev/0ZI48eRsm/H6SjLIk8cgw88Ixh9F6O2hrF98/w+N3VmtTOvXcqhBBC7HLaTXLKotL1U7rpUiWRDElZhyGqPMLTm65ldnCzTpHEI3QeIQrjFGHU2EeIJgQM0d+l8HZ6/yEu2hQYHNa5aAVAT+P7PlrrpjcuTSjvfAkhREvRq1dR9OP/o/uew8l95CGUc9R97eus/fdzbLjqV7jS0kyHuOtIvzw1jXl0mkQiief5UfWvM/Tu2xc/HmCtZeWaVbzebSoo6FvTjaLyIbzw+i+ZNus0QNO/z5scedgNFOavytQZ4WkP4ywKha89qqqrsNbiFGysTRDPCpra8kMTwhZrDOr2+pK9xSzOKDel6N2rF507d0ZpxcbaGjytd2DVvFYID8Xeq/ZFOcXiwkUszVuyjVu5Lb4HVixfgfY8jps4kWQqRcpuO9lUs88hzPnnyyz+6W9JlnQlvnIp/S/7LsO/sQ8Fr03a6fEP7VFJZ7jtAcMpZ0VXxLfdrDnxSI+lizIcmBBCCNGKMp+ccjq90t0Wf+3Az4oRxGJYrUlZS6gVHju3WU9jdIyUF8PoGFb7GM8n9GKEXjZGxzHax3gxUl7WTu/faY3TPlZ76c8VTns46zApi0mlooW4fQ+nM/HesRBCdCx6zRoKr7qC7iOHkHfX7ahUiob9DmDdA49Q+ee/Ew4a3KFW9MqUIBYDIJkK8f2A/Pw8Bg4YgOd5zB20glXZFQTGp/tH5/CvSbeyYtUYPC/BPmPuZb+9722jFfm2z1ibniFlsViMsWilOGD/A6LzSkYr93lbVE4p2ukifdvQPA1jrGHM6NEArFm9pun8M6GooZhBFdGwpCl9JlPv133u7VNhSGVVJc45Ro8ZTTwe36pyajOeR8U3z2L2Y2+z/PzLCHPzyJk7i8EXnsCwb+1PwZQXdvkklR/AT6+2XH+rIbeTY+ZUxYQDPJ56ZFd5dgohhBA7J+PJKd9ZnLJY7QjT0XgOlI0uJJPO4DwInCIeRm1zO7MpB74L8V2IdtE7UMqBdhbtQlRjzZYL8V1yp/cPEBhLPEwv3ayji0UPhVKNyTEHxhIzbbVCkRBCdDzeqpUUXv4Tuo8YRP6tN6Hr60mMHE357f+g4r6HSO5/oAw8/zLS2RjlGj9RGM9ibAqtHJ1icUwqxMRiXHnTzahBActGrAeg6J2f8e7LN5BI5lNYsJSjDvstgwa8waZm97ZIEGx5nOg8jHNo7aHQLF++jFhWjAGDB3L8md9GeQHOOgIUoU1FCSwdzThq/GN19Jre/mgaq7y0SxdSKXBenAnfOIFhY8ZSWbWBNStW46FxSuP5AcY5FBprXfoMaba5pq2l7Ll6LwoaCmgI6nm9z2s4HNppFD7GKZznEWIBx/Sp07FGkTCWHgMGpivdvzgWl5XNmu/8kNmPv8vqUy/AxLPJnT2Nwecfzx4nHdQhKqmOPtbx8CTDyD2jNr8fn+9x8dmainWZjkwIIYRoWe3ysksIIYRo5C+YT9GPLqH7iMHk/+3P6Pp6ksNHUHHrXyl/7EkS44+CXW5mUPundDRzKgxTKKVJJlOEfsjcQ9aCBv3RKayd/BsUlqGDXuSocddTUrS4HVQdRcmqmBdVMYfWsGFDDQ2JJOPHjycrHscYkx4En17trh1E/VU5QHmaww49lFgsxtp1a0kZC86As+kkjYsSWVsloVr+/H3nc9DSw9BWszx/GbNKZzbd31o5lHVgaKqQCnEozyOZTJEKU2hvx5eQMQVFrPi/q5n9xLusOfk8bDyLTh99wOALT2D4sXtS/MzDEIYtfo5tpVsPuPMRw/cuMWjPMekpzfi9PZ55XO3quTchhBCiiSSnhBBCtEux9/5L5zNOoduYYeT94w5UIkFizJ5U/PV21j3xbxqOPQ6CINNhdlzOpRNTCmsNnudzyes/o1JtgIqB2En/IAhWMO6gP7Lv6MeJ+4ktKm8UbXOZoWlMrjRWAXk4jDUkU0lmz5pFIpXi1DPPZNTYfTDW4Ps+nudhnU0Pfd/1f8O3xqI9jz1GjKAulSQFzP70U7L8GMlEkrgf4LB46dWFt65ta/mGxqJEEWNX7Q3A+93/R0X2OqJJogpCQ5bns2b1OrQfoGMx/nTbbaggjtJelLzaSWFxKct/eC2zHn+X1aecj8nOJWfexwz46XcYedQedL33T+iNG1r0HNuK58EFP3Tc87ih30BHZYXi0nM9zj1Js3J5pqMTQgghvjpJTgkhhGg/kklyHn+ErkccTNn4Q8n5z9Mo52g46BDK77ib8oefoOFrX5ekVBvwPB9rLShFQ4Phwvsf57W1z4EJUE89RFH2M/TscjIek3HOpNevpVmCStF2zeyNSRVHY+rFR7FgwXyMdSRTIUcePYH6+oYo2eYstrHVX6noPHc1W+RufN/D4qitrye/oAALbKyvAw2BrzE2RAEhYboXsG0ScoPXD6XHhp5YbXml74sY3+CsIx6LU1dXy5qVq2lIpTjwkEMp6NyZ0IZRhZX78omysKQLKy79FbOefI8V5/4/UvlFZC1fTO8bfsqYQ/rS6zc/IbZs15wuPmwUPPhMVEXl+47JL2mO2NPjLzcqGhoyHZ0QQgjx5UlySgghRMZ5K5ZTcP219Bjan87nnk38/fdwQUDtcd9k7b+eoeKe+0kccaQkpdpQMpkgFovz6uQYh178EZPU5QAUzbyKm3+Wx9eOfpOcnCTLV67AmsZ17lu/XWxrm6qmNtUEQV1DLTU1dTitOeGkk6lpSBBk56Vvq/C015SU0rvyrLL06n3GWUATy87mNzfeyLijjkIHMaZ/OJUwlUIT3TMx32/2MLlm/4XWeLwUiv2XH0RWKpvqrGqe7/ssyrOsWLqU2TNmk0imuPGWW/juhd8n5RwGsAaCHe/q2y6TX8jqc/8fs556nyU//jUNvfrj1W6k7J9/ZtT4IQz63nHRXCqz7ZUB26sgFlVRPfCMYcQYR3294o/XeYzfy+OlZ6XVTwghxK5pF74aE0IIsUtLpcj+z78pPfF4uu8xgILfXY+3dg2mtAsbLvgBa158jaqbbiU1eowMOs+AuZ9lcdrZRZxz/TxWHXo6aEP/um9y+7lHMWxEPWedfRZ9+/dHKY95CxZR11CPdQ5Pa4y1NE5y+v/t3XmcHHWd+P/X51NHz5GZyX2ShEAkEAgBEo4Q7gByiSwKgqyCB7uKP5EVRN0VAfUnrHghrCgrKqwHHoDrAQjihiuASSAQwpWQhCRkSMg1d3dXfT6f7x9V3dNzZnqYMEN4P3kMmaO7uqr60596f971OVRJryZon3K8XA6HVu3PLfzrkjVxcTiMSwboNTQ28urqtegg4KBD5nDyKadiHJi0L5fDYZ19ZyelgNK0kitMjO4ArXn/WWcze/ZsYmN5dfVamlpa0UoRxzadd6qzXZOYAkeFyXD8awvwjU99zUb+OuUB1m14HYPDC0Om7jUdpX3QGq01Wivy+YHrzeYqKtnygY+x4pcLWfmtn9Mw5yiUcwx/+H72+dQ/ceBx05l40zfIrFs9YK/5dth7H7jtt4ZrbjCMHuvY8JriX873OPe9HoufGOy9E0IIIcrzTo/KhBBCvJM4R7j4KYZ/8XImzZjGmA+fQ+Vf70NZS+6QuWz75rd448GFNH3hS5gpU0G98yeqfqd58eWAiz8zmpPPnMDDr6yC898HQZZZ1fP49oLLqa2pIIoNfqaCz195JccuWEBbLs8LL77Ca+vWEVubTnJt0el8TklSqdCvyfVrjieNxjqLK0kwFVedUw5rHJ72eX7FC6x5bT0tbVk+/slP8omL/4XYWiqrMji1G4Q9rjDkLf1spKdSK50mqBTWKrwg4JJLLyVvDK25PC+98go69ACHSuZFL74Xhfdn4DrcpInINAnmaY8xuTEc+9pxaKtZO3INrx69Gl1VyZVXXUU2inGFVOZbGM63U1rTeOSJrLrxTp7/1SNs+uAniGuHk3ljA5N+cC0HLpjBvucew5hf/Rhv+9Zdtx8DSCk47SzH7x8wfORiSxA6/rFI8cGTfC48W/P8s4O9h0IIIUTf7AZRmhBCiCHNOYLnl1N3zVeYOGsG448/itr/+kHSS2rUKJo++jE2/e+9bPn172g750NQXT3Ye/yu9PyKgE9dOoqTzpjAfQ9UwYhXCT9xMlTuYMawA7hq1jeo9CuxzuIHPlaBRXPOeR/mqOMXYFBs2dHE6tVriKIIz1NYk0eRzvGEhTSh1J/5jpJklC4muQqpFY1FAfkox4svv0Q2Nlil+djFn+agQw8jF8U4rWnNRbjdIOopzd3owml0yf+cS8+vVijtEeUNN//kJxy94AScH/Dk4/9g3Wvr8JXGg2KSKjKGGDNgfaeSTlztwy1RCmMtW5/azviHJ4KDbfu/yeyrD2TavvuCSpJS2ipUYVXBXTwnVm7KXmy47Fqeu2cJa/79uzQefCROa2qeeYI9r/7/OOjIyUz/1NmMuP9uVG7oT+ZUVQ2fvdJy14OGM862aM+x8AHN6fN9PvZBzeJFg72HQgghRO8GYES/EEII0ZW/aiVVd/2Oqt/9hvClF4q/txWVZI85lrZTTiV7/IkwbNgg7uW7m7Xw94UV/PintTzxVEXx9wef/jCvHv5BGu0WplRO4yszv0VNUAeAU8lKeFpr8iZG4zjn3A8R+AH33ftndjQ0kM9nGT1qNKPHjARIE0rtw7TSEWhlcyVJC532gtLOsXXbNl5b/1oyZM0POfucDzH30EOJjKVyWCVt2TyZipBsNk/oef05VUOWdmBV2nMKizFJErCQrKrIhJx6xhlo7fHI3x5k+/btbKsbTm1dLb7SRDgC3wc0xg5Mgso50J5CaY2LwRjD9u3bsZGhZu1wJi7VbJy7jp+u+y+2m+1cOeObBGpw5pNzmQq2nXYu2047l2DzRkbefzcj//YHqla/xIiH/sSIh/5EXFPHjhPPZMeC99Fw1EnY6qFbZ42fCF/9T8uFn4IffU/z9/sVf79f8/f7NXMOd3z685YTTnHsZh8DIYQQuwHlXP+nTWxsbKSuro7nN26lpra2fxuxCqssSid38H70rW/x69tvx1nDkccfS94Z0AovXVzGDMG7nl4ab0fpbUjfwLNPPEk2ijnr/PP4/NVX45yfzFmq3oErAgkhRF/kcmQWPU7lX++l8q/3E6x8ufgnFwRk5x9N28mnkF1wEm7ECBmyN4i279Dc9YdqfvHrYaxanSQFPO047pg23vP+X/DTpkvJ2xx7Vu3NV2bewKTKKcXnFq9i1uJ7Ps5ZtCPpwWQdX77yclqaGlA4MoHPnnvvQ2VFVfpc26/5phIuHXpmUWjyUZ621hbWr30V52my2YgpU6bypauuwWkNyiPvLEHg05bNoTyNVvod32XcoQpzoKPTEM6qJAHkBwGer4jzFmcdSkHsYgJPg7U88Mc/8rf7/4qNcigFdXV1TN5zGsrTGMBXmoGYTdvh8LWHsZa1a9ewZcs2tFaMGTmaiz72cabvty+3b/gffrrmJhyOQ0ccxbdm3UqdXwc4rCKd6H3w6oiKlSsYdd/vGfn3PxJu2VT8vQ1CGo84nh0LzmDHCWcQTdhj0PaxL9asgjtu1TzwZ0UUJedzjymOCz5hOfcjjtFjB3kHhRBC7HaaGhs5YOIoGhoaqC0jTyTJqQEgySkhxLuV9/oGKh64n8q/3k/FwofQzc3FvznPI3fo4bS991SyJ70XO2aMTGxeBm0H9lxZC08uzvCr31Xxl79WkcsnDdXqKstp723jvH9q4QF7Az9e+20A5gw/giunf526YARaJ/M9Ka0xyvQw4MqiUbQ27eBXv/gly5c/B9ZQFVumTNmTmmHDCCsqiY3B90JiF+OUQ6lkmJ91NpkvSYGzoFWamnAlk6pb0FphreOVV1bS2tKMDQMscMyxx/JP//QBdBACyXZAtQ99K+51eQkPz2mUgshalKewJPtcCJ+c6ng2FC59qfS1C+PwFDidPM+6pOeZAzy7axMwVoG1liD0scawevWr/NcPvk++rQ3tHCOH17HX1KnJaodKE6XvY/KuKDyV9KgqHINCE5uYwPeJXWHOqrQHV3HYJuSzEZu3bGXTps2gPTzP41vfvxkv8FEaUIpHNz/EDSu/Qs5mmVq1N98/+A72qNwzeSlXMmxxMFnLsKcfp+7R+6l74u9k3ljX4c8tMw9mxwnvo3H+iTQfOAfCcJB2tHdvboJf3qb5412K5sbkPQoCx3vPdHzwAsfRJzh8GU8hhBBiAAxqcuq5+gaG19TgnMMrc2u5UKNiCH3AWG664Xp+/T93EMcxxxx9VDJPgTHECnzfLy77/FaVBpaF750rBMl95zsPqywmWfsH5cBzsOypZ7DOceqZ7+fKr11LmwJ8TXV+QHZ/QHjppKpaQ6zAWpMEziWPcSXJNJVOogqg02BbOU1sTfLeqOTx+SgiCAI8M7R6Rdj0frlOfyoci9IOZxXWWjzPw6Qr8M5clgAAIABJREFUOEWqvKWldV7hBV6yGpRSRFGECtsbl7pkshPlNJ4bWolKP22A5Y1F+xqDRSmFLTbAOu5ve3lIGmAqPb7YGnTgJ58vnQ7CcQ6/jw1to4fWeREdeRtfJ/P4Y2QWPUbm8UcJX1jR4e9m1ChyRx5Fdv7RZI8+Fjd6tCSk+skORA8WB8tXhPzxz1X86d5q6t9ob31O3yvPaae0csopreQqXuP6l77EU9seAeC08R/gk9M+R6Vfla7Al/SC8X0PG7cnKjq8lrF4XjKXkTWGwPP42U9/wtNLFmPjCKXAGktVZRWjRo2isqKSmtphaOVhXDKcTHsaZx0mrR99NNlcjmw2S7atjfUbN2JiR0VFhiiOqKis5KD58znvQ+cSG5dci1DJ0DavcJ3quLvln1VVjBOSoYQK7SXHWJyMvGSjRrcnaJIXTL631qI9L02uJedQe5o4Lu9aU65K3yeKHUq55LrkIBNqNqxbx623/IgdW7fiKYijCD8MmDp1CtXDqgFFRVhBbGLi2OD5Go0msiad8B7AJMkrZzG5PFu3buXNLW+Sy8dUVA+jtbWVvaa/h0s/dxlhpoJWo/BDPymY6RvzUsMKvv7S5WzLb6Haq+Fz7/kKZ008Pznnu/TM9IODytUvMfyRvzL8yYeofnFZOkdWwlRW0XzIkTQecRxNhx9DywFzcUHPwxVVXuEFGoMDpXDOUHqp7Bw36AGIG7JZuPePcPedipdWtJfTUWMcZ30QzjrHcdCcvnVsHai4weLA0zjnMKSJ2zLihreDS/a+2PNSdXovCvtsXHIO4jJjmUIMCQ6jIIoi/NCj9FZAoTwU2hpDie+SBRlil5QFaw14uqQsdJxHbmdtCkMSQ+ajCN/3h1RZgN7bFAqPOI7xPK94M6N/bYqSuiFtaxb/XlIWYOi1KTyr0TqpG5SnsOmNqHLrBnR6w8o5IpuUhaFdN7jiNaHQvnw76oZwF/XeeStt56bGRmYNVnJq+cbtDK+tIdAebSYqaxvaD9K7Yxabz3Pzd7/Nb379S3LZNo4//vj0bq0jThNHxgxMEOecI5PJAMmbXJqoKkeAxujkwmpMjHLgo1jyxD9wTvH+D57Dv131H8SexvkaLxpKlYdCpXN2eJ4ml8sThiHOxslfO921jL32iqPIJR84a21SYWCKAeVAJRIHilU6PZ7kAtl+FA6lknLm+z65XERlZYjJx2Vt37lkwtdMJiA2MUoptK+JouQz0XkFoiEWVwC62ADzfQ/nwPMgjuKSACL5VwGR5zoeU3ohcc6htU6GlsQxKIXna6I+nk8tQ72GDufwX11F5vFHk2TUoscJ1nRcat0pRXTALLJHHkXu6GPJzz4IKip62KAoR39jrziGJYszPPj3Sh74WyWvrWtvHFdXWY49po33ndHKgbPyaN/wm9d+yo9WfYusbSNQIRfu+RnOmnQung7AQYxFo4tr7IXpjnXu8KOVJs7nUEDgeSiSBM62xq3853XXsWP7dkLtkQl8Xq/fAMC0SVOorhlGVXU1YRhiTZKk8jyPXC5Hc0sL27dtI7ZJ/RwbA0qRzef58Ic/zJHz55OpqSVvYvwgpK2tDT/M0F3vqMLpLLejklJgrAWXzutkLEqrpK4qXidVsVI3XVqNyQs65/DTHmjgiGOTbMPftZP/GJMkpgCCtLeWUhYTRWjn+NlPbmPxU08xrKqafK4NX6c96oYNY3jtCGprh1FTW4fJRxgsQRiSy+UJfJ/mhm00N7fQ1trCjobG5Lxon1wUYYzlkEMP49zzz6d2eB2giFSItQbP83BpQtLh2JbbwrUvXMErzUmy+5DhR/DVmTcwcdi0XXpuyqVUklezJgnE/S2bGf7oAwx/8u8Me24xQeP2Do83ldU0z51P06HH0Dz7MFoPOARTU9f+AKeSa6SnMTa5XiYJy7cnbnjhOfjT75P5qBp2tL/W+ImOk86wvPd9jsPmO3rOr7XHDZ6XJG77EzcUGjj9jRveDu1rgwLpIgzFvxTmv/M8crmIMAzB9C+G7BJLu6Td806LIXO5PBUVISbuX5siUxEQxyWx9BAqC1DapkjaOmktn3xf0qYwxhEEul9tCqU1nqeITclnIoq6XdF0qJUHpZLrWtLxA7T2+lU3GJMkKz0/yQE4GHp1gypdZXZw6oZd9f73tZx313Zuamxk/0mDlJxasXErNZWV+NojH5QX9Smr8ZxDOYuyhhtv+E/u/PWvcbHhqKPnJ1l4a3BKozw9oCvJOOfSu3eqPSlVxtlwKhnSZ5OIFVQy/4N2sHjRk1hjOeuD53LlNV8li9vlAWi5XGHoQTqEQukk6PZUezY+uVOXPD7ybMlzC9Jz55Klw501SeBmY1QwxPqHl0xf0f4xdsn0Gk4lvcasS86DgiAqr7QZL+2Nl04UjHNoOt1BL7yqGnpDVG16AcEVjiNJWuIKZQGga3koLQuQJHg9RXLXSCtM4e6R17fzqXbxEBfRA2vxV79KuOwZwmefIXh2GeGyZ/C2dVxO3WlNtM8M8rMPJj9nDrkjjsSOGy+9owbZuvUejz1RweOLKlj4WAUNDe3Xm0zGMu+wHAuOa+Oo+W3UDEuuf0u2L+LmVdexonEZADNrZvPpvb/A3sNm9HijxsYx2iu0VHWHleMUaW8va3E2WdHPxYbYd2hn0dYR5dp46rHH+NEPby4+b+LosXhBgDWW2Fo2lczv09kNN3yXuuG1WMDzfZxTOJKeO9YYwopKoijG8z2stR1q38JdzXJvmwSBTy4fpXd9LbV1I5IA2fPo2LBKw7Y08m6/ypQEdMaSCUN2bN2arGBoYvQunpnaOoWzFpxLzotzBL5HnM8Thj42NkmQGce8uvJl7rnr96x8dRUAlZkK2npZqW7ChKnk83m2bq0H4KhjTuSwI45g7qGHonwPpTwiLEp75OIITyl8zyeO8uRzWeJcHmsiQu1jnOFPW+/iN5v/h7zLE6qQ88ZdxAfGXkCN38+pIwZYEPjk81Ey/NQajIMRI0fheT5YS8WqF6hd8gQ1y55g2POL8Rt3dNlGds/30DLrUFpmzaV59lzaZh5MHIbJ3XUbo5Smu2jXqfITq30VR/D4QsV9f9A88Ygi29b+QsNqHUce6zh6geOYEy1T92p/Xse4AbCuf3ED4OkkMaW1wpoYT/c9bhgMqmRxBmeTNoB1SSxtrCXjvLLaFIUYshBL4xzWxgS6ayw9ZGNIAJLjUFqjbHsNmQxx7nubwlmLp5NypXBDryz01qZA4VTSpnBKobTqV5tCK4WJo6SjhonwtNelbihcg4daeXDJG5fUDZDUDbo/dUPyvDiO0Uph7RCsG0rKQnvnh/b2Zee6ocJ6ZSWTuq0bTEzgtdcN8a4KI/rYdtZaYzu1nZsaG5m5x8jBSU49tWIl1WGY3O3IlJeQ0E4T5bL4nqIiCPnRzTfzv3+4G2csB885JJ2TIVkRSCmFP0BlMY5jgvRWkEuzfr7vE5d5NnzlgaeIjaGttRlfaQLfZ/nTy4giwymnn8Zn/u0y8sphSLr2DRW+7xd7jSW902DcuHElDY9Cwi4N6Uu6YBYCJKfAUxpnYpyxtDY2EOfT3nNDbn6tNOvrOt5T9zMhuVyUDiF1xM4ydsx4dC9d8bvlaYwxVIUBb27ehMlHuCjfXnkUzofTuzTI7K8wDMlms0nlaQyjx43H2KScdL6zBe3lobQsKJd0bbf5PFUVFWzZvIk4H2HjPLqPycoRYycO5GGJbugtWwheeQn/lZcJXnwhSUg9twzd1NTlsS4Myc88gPxBB5OfM5fc3MOSycxlqadBYy28utpnyTMZljyd4cmnMry2vmN9VVdrOPzQHEcekWX+vCzD61za68Px2JaH+OnaH7C84WkAqrxqPjzlX3jfhHMIvbcwX85OkjNKKVwckwlDGrZv418+en7ZL3HLz/6n//vXZ8med75am0KjSyliaxk+fAQojSrzum5JEnjZ1hZMFCfBd+FkFW4pO4VTlDR/B8enP/aRPj/21l/+lqrCKnadygJ0LA86HcIWap/Ghh2YOMamN3beyG3kxxu/z4qWZwGo1FWcNeZDfHDsPzMiGDkQh1WG5DrXee4rLwzI5+M0SeXQgU9NdQ3KL/kcGkPlyuepWfoENcv/QdXKFWQ2vd7lFZzWZKfvR+PU6TRPnU7zlL1p23s/2vaYiitcN9/GuCGXhcVPVrDo4Qr+8UQFjQ0d6/rxE2MOOTTHIYfmOHSeZdLkZjxfExvDmH7GDQpwcUxVRQWb6+uxxpQVN7w92j+NnctDoW6wThE7y7hx41Dl1qVpDIk1NO3YjosNCluc1/adEEPmcjmK07E4GDN2fFoWoKc2RaH9XqB10qaoCkLe7EcM+fbpvm7wM8mqsEks7aiurSETVvavTRElsfSbmzdh8zlslCYkVGlir/uezINNpwklpTWRMYwZOw7rVPl1g7M4Y6mqqGDT668nn7MhVx66rxsK7cuBrBuaG3Zgo7hL3WDUrsov9FzOS9vOeRMzftzEDuV8UIf1vffsD/LyM89iTERAeYUlrx0eCqVc0r3dmmSspkruhlqbdJ+PY4fyNOXlGnvWec6pwpftpqtkX7bjlEsy/SYGm3TdN8aQqaiiNcrhBQGxNQRDKLWtcGitMBZ0RUhDUzM/+8UdHHzYYRiVJAWNbs8BV8SuPUNfmpzSChvH2Njw2Yv/hWefXgIOQmOHWDfTXpJlnp/eTQ5obGnm5RdfYVtY3nsVqKSXUHUm5GP//FGeWboYHcV4Sqc3DzreFfCG0HhpgGSaX43TCi/wufX2nzNj5gFJ8lX5xWCoc3mwJOWgmJzyFHE2R21lBRd95EKeXbIYZwzBIK661L0eyoPn46zFKWjL5bnj9l8w55BDaK7ItD+z5FCMNYRBSD6fJ/R8PE+Tzyd3ujwFwyp8DthrGj4O3xmgMLedh0OlUw/TZS4RmzbpndLt5xeFwRGYpOs7XtJDLxmmkzac02dXG8ukOGayiZgWxewdRewd59kryjOyhyG3ORSrg4BX/YBXw5AX/Ayrh1XxRmsb37v5Jg44+KD0AqgxJWUhY9rrhtLAQiuFMzE2Mlz1xS+y4rlnk/rR7tqaIUiHyrjC+H5n067VyZxBWinyuRxBEGCtJVIRYRCQjyI8nQxN0FqTiyKCIEM2n6OiooIojrnn/x7t8XWd1ckcEenxZS14niJ0eXCOCs/j3y79HM8/uwzflTTKeqkbnNNkzRRao/1pifanJTqA5vwsjBve6dVjqvyXGBY+TW24mOpgGZ5un+QwX51n+95b2brvFrKj2gBQRlG3egRjlo8l09TzUMxC3YBWaN/jsi98gUlTpoIGq7xiWFYoD4FNDswmT+6QnLJRRGUYcN3/fx3r164BY2hu2kFrLtmnETUjqMhU9vr+7no91w2kdUM2H/PFL3yRKTNnYModiuwsWMvN3/0eq1a9go9GF3t52WJSCtK5WMqMSwZaNtdWfE8UyaT4zoIKfVrasnzjum8yctxYbDofVzJosWNZgJK6gbRusIaM5/HdG77Nq6+8AtYWk3QOR8O07bx54CZyw3PJa8eKEStHMXLlKGo21nY7tGXg7Txu8D2fiZP24JvXXU/rTm7Q+ls2Uf3CMqpefJZhLy+n+pXnCbZv6faxeRRr/ApeCSp51a9knZ9hg65knV/BJh1i34Yh8M5pcvmZZHNHkM3NJR/tB53ifKWayIQryFSu4NOXHsXJp05h2j6gM32PGxQWG8XUVFZw2snvZeP69TDk4oZeUsVp3OAHIY3NTdxxxy/ZZ/4RZX10Q5X0HLPG8IkPX8ArL7+ItuD1UDcMxRhSa01MEkM2NLewaOkSqmqGYZTGKt1tWXB0jKm0l7QpasKQC//5oyxbuhjioVYWoLe6welk3ETgB5x/wT9z6aWfo7GyvORUoBRRLkdNZQUf+8iFPLt4MZhCm8J1uQk01MqDVklCxmlFjOOW237CwXMOxXkao7w+1w04g4sNtVWVHDFnLm0tLe/MuiHMJHXD7b9g+lFHlLX3hfalNYZ//eiFvLBieZe6Qbldm5zqVknb+Y3Nm1izZl2Hct7U2Mjs8aPLTk4NSNox0BqFxVfglznPkCFJkigLDtN+p9I5FAZPJV3SPV8BSQJoICQjD5Lxm3HaZRLAlZl5jHKGIPQI/IAol0/mUSAZA+p5HnGUw1PgjMED/CE0YZ0zJpnnIDaoQBMqRahUkonVaWLJ6mIF6DvbtYi6ZKyrcpYgfQxxktkfapPz9fQBMyaZ90OnDYQATaBV2WVZp+MjdWzxnUVHMYFL0g8KkuRlocGGHlJlAcDGEQ6FHwZgDYHWBMnq4zidvPfKtZcHz9lio9NBsV5WRpEBlDX4zuKTHPNQO96eyoOzJplsMMgkZUGRlAdnigFU6eJcnlIQx4Rag7OYOOmK7hmHspbqKh8bxfiZEGUMOm284doDMqtce2M0/bcwHFRhsU6jXNILwQMqrGGkNYzOG8aaiIkmZlKcfpmYPeK4xwRUwRvaY4Pvs8H3WRWEvOyHrA4CovSup+d7RHFSb4Vad60b6EPdUJiLRKmkPoiT7th+2QOrymMKdxUL7XoFBgMkE/biQAeaGAM66f1pTPskz845TDr3kbXtvWwLc2cUdJ7T0iqwcftQsgpF0pWddDJs5eHj8KzDc7Z9BhNniVwNrfHetMV7E0V70xrvRVu8N23xnji6Jo4UWaqDF6n2X2RY8Bw14VJ83VCcW8jhyNXmaNyjiW17b6NpUlMxSaAjzYhVIxj9wmgyzWG6F70E2sbiSPYfq/DTXszOAtph08RpoRR7zvUQpjl8QFmL5yzJ9J4wsqaOkaXz8Ozi8rFzPey9NUk58ZLbcD7psZYZIxcmS/WdS25gBGEytUHx1QvnT6GdK+lKPziqMxkK74kzyfSosbEoq/HTG1TtdUOS/O1LWVDOFcsCJkYrjVfy3o9aM5yRa+pomNLI5gM30TYqy7b9trBtvy34LT6jVo2k7rXhDNtUjbdLxzR0ZU2S+C7EDb5SBKrrTYYuzxs1hqajT6Lp6JPYRDKptbfxNepefYVFP/kvajeuY1rcxlSTpcpZZsRtzIjbumwnj2KDl2G9n2G9V0G9F7Kp8KVDNnkBzcqjT7Oa90ZZgsxzDMs8B9yKMZVko4PI5g4iF80il98X52rS5NURXP81uP5r4HmOqdMc0/d1TJ8Be89wTN8X9t/LUl3bNW5orxsM2hgChmLc0HMDtBA3aM/HVx6BSva9nNv/iuQ66akkvtJpL5mOdYMd0jGk5/vJEH9rCJUiKKkbFN3HkB1GRJHEkCqtEwptCg815I63tzaFUxrfD5M2RVo39KdNESjQxuGnbSy6bVMkccuQOz/GYK3DDwMcpOUBTDL+t89tClxyhMoalInfUXVDoX1ZqBsKbQq/05QDO1NoX3ppvdJd3TAQi2V0r29tZ7/k2ArKLfPF5/XrWd1oP0FlfvhK3sue0kI6bZz19phyOecIPA9rDJWZDNOmTWP8+PHEZZ7HQoKrpaWZpUuX4Ew631BJzwANSSUyQPs+ULSnIO2NlmtrIxOGPPnY42zatDnNZusksEkj70KyqTSrnfzC4XsKjKV5+3Y859AmZvAbGN3puk+e76EVGGdpy+bIhCF/+vMfyfZjqIavPeJsG03bt6NdErSr0g+nK5zSoXduPN9P0yaWXFuexxY+zJpXV6dLx6fnIi0PFgjShEShHHQoDzjiKErOgzFoNXCJ5YHT/cXEUx7WT1JImdDn8Sce441N9US+7rYRmtz16fwHRUCAMzGeBl9plC30kXLFbvmQ9jByjjprGGEMI41luLWMsobhxjLCGkYZy1gTM8YYxhrDCGv7VBc2KcVmz+N1z2e9n3y95ges832ate7hznsyLw1a4/mOXDZLGAQs/cdi3nxzS//qButoaWhA4/CcYZfXDR1WGSVNnqR7WDokIn37ezqXvucld4Jtch6CIGDxA38h12UOEN0hYZn0hmr/OZtTNDbV8OZmnxdWzmVT42HEdgJ5M56cmUDOTCSyY3s+HHJU+qup8ldS6a+k2n+BquAltMoV257GN7SMzNI6qpXmCc00TmoiGtZxgZKqNyupe62O4avrCNoCVEmTpzfa06TvLlE+z/PPPUf9xo0o1bluIK0bXO91g4nJtrYk1wkFZbXg3hbd749W4HSSyMsEAc+/9DxvNm5Pewz1ndZJr6G25qYkuDNxhwSUcoU9GGrnJS0LOlmVKMrnCXyP5c8so6a2rlPdkOy9n763PdUNJsrT1tSMhjQx1fGYFTB8XS1162poGdfCtr130Dilkbg6ZtPszWyavRllFNWbqqndWEPVm1VUbakkLCZdB0LX+kp7ySp11hmy+TytrS089vgj5LuZH6j3LTs8BSb2uH/0XrzeksQj2hgm2IjpcRvT4jb2MHkm2BwT4zzjbY4Qx14my14mCzR0u+0WpdmkQzZ7AVt1wDbts137bPOC5F/ts00H7NA+TcqjRemdJrM8r4Vq73GqKx4HwFmfXLw3uWh/2vIzqKk9kh07RpLL+axepVi9Ch74c+kWfKqH5Rg5qo2Ro9oYNbo1+XdUG6NHtlBb20i2GVQc42uGYNzQ/f4U4oa2bCsVYcjjTzzG+i2bcWUkBwsxpLMx2eYmtANt4o6NTld4i4baeUliyKQ3dxJDZsKQv917H5nKyi5xQ1I39B43xNksTWmbYmiWBeipTZFEhYa2bI5XV6/kL/f+mbzfj7oBh8knsbQyyXxsXdsUdrA713ZL+x6eTdoUGMeTjz3OG/VvgNbt18we2hSlx+MrwFhMHEEcJZ8JxRAsDz23L62vaWtrIRNmePyJx1i39c0yt9xeN7Q2NXZfN+xSvbWdk3I+rKqySzlva23t16sNyLC+Mz9wLi8sXQzWlD3mcbA6IWqdrHjgeV5xlZBkgvTy9ih2MV46BMRaW1wuslRpo8UMoQrEWovydDJ8JZcjDEOiyBTnSNKuY4Mr7jB5Yft5iuOYTBAmXTijGOtiNArnDa0upkWq4/jZKF05KPAztLS1EoYVxMaQceVdSNpcch6ifDaZKNcmP7u4uxUsNdEQOz3GGPwwwPM8WltbUcrDU0n56LhkbTLUJO+nK2e6jkmbOI6pDANyuRyB9sAZgiAgb3ftcun9UpLEKJQHq0ArH8/ziIxNVkbRmgwa5RyZ9KsCk/zrHBUWKgq/d8n31ThqnKUiH1HjDDXOUYOj2lqGWcsw1/59tXNl14UG2KY12zzNm57HG57HJs+j3tPU+x71vk+D9gr9OMvbtrXotG7I5/MEQUAcG3xdUjeUPL50WdzSIzEmJvTTuiGOsc7gK73L68HAdS5rvd866dxjtlDOY5f0FtJ+NS1tCuUNJ2+qcaoKY6sxrgZrh2HsMKytI7IjiM1IYjuC2I0gtiOJ7Aisq+rbfustZLz1hN56Mv4GMt5aKvw1BN4GCLOYqoi4MiaqisjV5MnX5MjX5MmNyJKrzXXNkRpF5dZKhtUPo25tHZmGTL8a7MY6PF8nq81kc8mEzSqZrLXQlbywVeUUsdd93WCMIZPOdehpBemqTvEQW9kVKBaC0mtgMlpU43k+sbHEcYyvuk5QuzPW0ygU1kSQ3tjrfm5X1SHJNxQY69BeMg1CFMUEgZ/2Fi1cIzqeDdNj3WAI/AAT55N5K53F93R6V713VluaJjXRuGcDLeNaiKu6rnyk85rKbZWEjRnCppBMU4agOcTP+ng5Dz/royPd989D57ghXQTG90Lacll8P8BaR1hmXZt1howfEkVZtPZQzhD4fjJFRMcdABRxemd6rI2YYnLsEeeYZHKMMRFjbMTo9KumSx24cwZoVh6N2qNJeTSn/zZqnybt0aw8mnSSxGpTHm1K0wJEfkDeD2iIYtrQtOHTwh40xvvQavYiH08ljqcQmclY29c5w3L43na03ob2tuHpbXjedrTegdbNKNWM1k1o3YxOv1e6Ba1aUSqHUlnUrroJ2KksQHvckM3nCMMKoiiiQpU3r0yri6kIwmRl8jgPNomlu59rd2jGkNr3CIKA1tZWwjDExK5YN5S2KRSlE6Kr4tAuaG9TRPksgfawaWw9JGNI6LZNEfghnufT0taK5yU9h/rTpqgIM+RzbXieh7ZJLN21TZGc36FWHmy6AEdh5V1r6VebQiuNpxy5XDISScOQb1N0bl9q5dOWy5LJVParbii0L3urG6JdPad1P9rO1lpWv756cOacOvLYM2ltbireKRsI/Y7F+vTEtKFi03mu0ucUkkvtejqaji9SnE8j/b4wYWp7V9XiJArl5r46BsYDOb5WFf5RxdVWCiVBq/SYXMcnuA7Benpkqus5Ss5DaUfdPux3N9uB9negf0fe9X3qy7Zc4c5Up13a6fOUKhaG4mNV4Vx0fX77Zbmz3l5pZ5+w0uf2/NjOf2nvP9H9axf7BnUKxpQq/dB3/1xHOsfSTnbdFctk+lUMYjr2TVKdvujw2Paj6P45SfNIO9DFplIydKb99x1fM5lhyaV39jsfW/9199wYRaQUEST/KkUM5JUiqxR5rciiyCnIqe57crUfcc9lvi/7nfQKcB2Ga5U2O4sfWeX6PBGnQpP0qelvXaZwrvAOlb4zGufa362kR5hOH6vTwpU81qXvMM5L70v6OOfjCJJ/nV/yu8LgrbdIOdBteP4OtNeA5zei/UaU34jnNaG8ZnS4AxfmsIHBhAbjW2xgsIHFhAbn7/xd81t9Mg0ZKrZVUr2piqpN1XiRNyA9SArXicI1Q6ef6fah+O3vaqxdSZVe8toqORVKJ8M9jbN4nh5yN0CLc10AqPZjUVolw9m0wtm0ZxCqp8tX9xTJoAyV1jE6WVBF686frY6f4aFEaYUxNlk5yRXqymR/k57iHcsCdDwmCt86V7yhp7TCYZNVz8pQGL7aMqGZ1rGtZIenidq+5IgM+DkfL+fj5zy8vIeKNdoolNFoo5MhRkZi37m8AAATMklEQVTjRR1XmVIuGZRrrUuGpjiHQpPkZVUax6dlw/VcRmwaMen0M+FIPlsW1yUGS463pxNRct6cowJLrTXU2Zg6G1PlLMOcpcrGVJHcFKlyhmprqMTu9HSVU8a75MhJrm0GRRNVvMlo3lSj2eLGsI3RbGMU2xnFDkbRwHBiMt1ttmyKGI88PhGaCE/l8YjwVIRHHk2EUgaNTffOolXh++Tn9t+nP3f5OxTelXTWTpJS6dp7SqdfpStdFd9J5Tr87KCYVCv0zCvELp3PbX+rzYHNdXe6GV8yn29Pr1f4uTQGTkLnzkG36hiQD7XKsD1wTn8u3cf2lmEhBu7YnivzdRw42ufO7LiRIXT3olQxhixE5e1tge722Koe4obCT4W2uit0BNlVO16+rrF2aWsqWeVXqfbOK+Xe0Co9LcXPTzqnartdUw52emyk7YT0s1qatDcmZvlzj769yamGhgaGDx8O/wYDdC0RQgghRDdUrPCzPn7OJ2gJ8Vt9wtaQTEtIZnslQTbYJZNEayC2FqXA0z6uZK4QlOuyiost/q595rT0CIhcMp9d5CyFrZS7kMquVkjJQmHP25uBpngegjTQLD+EUmhia5LFJ1RyTjokfgFo75E2lJoehaaRsRbf8wGXrESU/l2pjkkVW1I+VEk5KB6VckkvJKWJXDwgZcEpR7aujWxdjnx1jrg6Il8VEVdEmIwhDuNyO5MKIYQQohw54HuwY8cO6urqdvrwgrcUBTQVlh3/3lvZihBCCCF2xuGI0v/a6DpJshBCCCGEEENFU1NTWcmpt9RzylrLxo0bqamp6dS1rF1jYyOTJ09m/fr1ZXXpEu9eUmZEOaS8iHJJmRHlkPIiyiHlRZRLyowoh5QXUa7BKDPOOZqampg4cWKnaZN695Z6Tmmt2WOPPfr02NraWvkAibJImRHlkPIiyiVlRpRDyosoh5QXUS4pM6IcUl5Eud7uMlNOj6mCITa3vxBCCCGEEEIIIYR4N5HklBBCCCGEEEIIIYQYNN4111xzzS5/Ec/juOOOw/eH1oo8YuiSMiPKIeVFlEvKjCiHlBdRDikvolxSZkQ5pLyIcr1TysxbmhBdCCGEEEIIIYQQQoi3Qob1CSGEEEIIIYQQQohBI8kpIYQQQgghhBBCCDFoJDklhBBCCCGEEEIIIQaNJKeEEEIIIYQQQgghxKApKzl1yy23cOCBB1JbW0ttbS3z5s3jvvvuK/49l8vx2c9+ltGjR1NdXc2ZZ57Jhg0bet2mc45rrrmGiRMnUllZyXHHHceKFSv6dzRiSOmtvGzbto3PfvazzJgxg6qqKqZMmcKll15KQ0NDr9u86KKLUEp1+DriiCPejsMRb4Od1THHHXdcl/f/vPPO2+l2f/jDHzJt2jQqKiqYM2cOjz766K48DPE26a28rF27tktZKXz97ne/63GbUse8e1x33XUopbjsssuKv5M4RvSmc5mRWEb0prs6RuIY0ZvOZUZiGVHqmmuu6fK+jh8/vvj3/sYjQ6l+KSs5tccee3D99dezZMkSlixZwgknnMD73//+4kFfdtll3HPPPdx555089thjNDc3c8YZZ2CM6XGb3/rWt/jud7/LzTffzOLFixk/fjwnnXQSTU1Nb+3IxKDrrbxs3LiRjRs38u1vf5vly5fz85//nPvvv59PfOITO93uKaecQn19ffHr3nvvfRuORrwddlbHAFx88cUd3v8f//jHvW7zN7/5DZdddhn/8R//wTPPPMPRRx/Nqaeeyrp163b14YhdrLfyMnny5A7lpL6+nmuvvZbq6mpOPfXUXrcrdczub/Hixdx6660ceOCBHX4vcYzoSXdlRmIZ0ZOe6hiQOEZ0r7syI7GM6Gz//ffv8L4uX768+Lf+xCNDrn5xb9GIESPcT37yE7djxw4XBIG78847i397/fXXndba3X///d0+11rrxo8f766//vri77LZrKurq3M/+tGP3uquiSGoUF6689vf/taFYeiiKOrx+RdeeKF7//vfv6t2TwxBpWXm2GOPdZ/73OfKev5hhx3mPvWpT3X43b777uu+9KUvDdg+iqGjtzrmoIMOch//+Md7fb7UMbu/pqYm9573vMc9+OCDHeoUiWNET3oqM92RWEb0Vl4kjhHdKaeOkVjm3evqq692s2fP7vZv/Y1Hhlr90u85p4wx3HnnnbS0tDBv3jyWLl1KFEWcfPLJxcdMnDiRAw44gEWLFnW7jTVr1vDGG290eE4mk+HYY4/t8TninalzeelOQ0MDtbW1+L7f67YWLlzI2LFj2Weffbj44ovZvHnzrthlMch6KjO//OUvGT16NPvvvz9XXHFFr3cD8vk8S5cu7VDHAJx88slSx+xmdlbHLF26lGXLlvWpR4PUMbu3z3zmM5x++umceOKJHX4vcYzoSU9lpjsSy4idlReJY0Rnfa1jJJYRK1euZOLEiUybNo3zzjuP1atXA/2LR4Zi/dL7lbMby5cvZ968eWSzWYYNG8Y999zDzJkzWbZsGWEYMmLEiA6PHzduHG+88Ua32yr8fty4cV2e89prr5W7a2II6qm8dLZ161a+/vWv86//+q+9bu/UU0/lnHPOYerUqaxZs4arrrqKE044gaVLl5LJZHbVYYi3UW9l5oILLmDatGmMHz+e559/ni9/+cs8++yzPPjgg91ua8uWLRhjuq1jeqqXxDtLX+uY2267jf32248jjzyy1+1JHbN7u/POO1m6dClLlizp8rc33nhD4hjRRW9lpjOJZcTOyovEMaKzcuoYiWXe3Q4//HDuuOMO9tlnHzZt2sQ3vvENjjzySFasWNGveGQo1i9lJ6dmzJjBsmXL2LFjB3fddRcXXnghDz/8cI+Pd86hlOp1m53/3pfniHeGnspLaeOxsbGR008/nZkzZ3L11Vf3ur0PfehDxe8POOAA5s6dy9SpU/nLX/7C2WefvcuOQ7x9eiszF198cfFxBxxwAO95z3uYO3cuTz/9NIccckiP25Q6ZvfVlzqmra2NX/3qV1x11VU73Z7UMbuv9evX87nPfY4HHniAioqKPj9P4ph3r3LKjMQyoi/lReIYUaqcOkZiGVE6z9isWbOYN28ee++9N7fffntxwvv+1BVDqX4pe1hfGIZMnz6duXPnct111zF79mxuvPFGxo8fTz6fZ/v27R0ev3nz5i7ZuILC7PKdM3O9PUe8s/RUXgqampo45ZRTij0egiAoa/sTJkxg6tSprFy5cqB3XQySnZWZUocccghBEPT4/o8ePRrP86SO2Y31pbz8/ve/p7W1lY9+9KNlb1/qmN3H0qVL2bx5M3PmzMH3fXzf5+GHH+YHP/gBvu8zbtw4iWNEBzsrM4WJ8iWWEdD38lJK4ph3t3LKjMQyorPq6mpmzZrFypUr+xWPDMX6pd9zThU458jlcsyZM4cgCDp0S62vr+f555/vsethoVtr6XPy+TwPP/zwTrsrinemQnmB5C7jySefTBiG/PGPfyzrTnbB1q1bWb9+PRMmTBjoXRVDRGmZ6WzFihVEUdTj+x+GIXPmzOnSXf7BBx+UOmY31V15ue222zjzzDMZM2ZM2duTOmb3sWDBApYvX86yZcuKX3PnzuWCCy4ofi9xjCi1szLjeZ7EMqKoL+WlM4lj3t3KKTMSy4jOcrkcL774IhMmTOhXPDIk65dyZk//8pe/7B555BG3Zs0a99xzz7l///d/d1pr98ADDzjnnPvUpz7l9thjD/e3v/3NPf300+6EE05ws2fPdnEcF7cxY8YMd/fddxd/vv76611dXZ27++673fLly93555/vJkyY4BobG9/CPO9iKOitvDQ2NrrDDz/czZo1y61atcrV19cXv3oqL01NTe7yyy93ixYtcmvWrHH/93//5+bNm+cmTZok5WU30VuZWbVqlbv22mvd4sWL3Zo1a9xf/vIXt++++7qDDz64Q5k54YQT3E033VT8+c4773RBELjbbrvNvfDCC+6yyy5z1dXVbu3atYNxiGIA7eya5JxzK1eudEopd99993W7Dalj3t06r4okcYzYmdIyI7GM2JnS8iJxjOiL7lbrk1hGOOfc5Zdf7hYuXOhWr17tnnzySXfGGWe4mpqaYl3Ql3hkqNcvZc05tWnTJj7ykY9QX19PXV0dBx54IPfffz8nnXQSAN/73vfwfZ9zzz2XtrY2FixYwM9//vMOWd+XX36ZhoaG4s9XXnklbW1tXHLJJWzfvp3DDz+cBx54gJqamgFKv4nB0lt5WbhwIU899RQA06dP7/C8NWvWsOeeewIdy4vneSxfvpw77riDHTt2MGHCBI4//nh+85vfSHnZTfRWZtavX89DDz3EjTfeSHNzM5MnT+b000/n6quv7lDHvPrqq2zZsqX484c+9CG2bt3K1772Nerr6znggAO49957mTp16mAcohhAO7smAfz0pz9l0qRJXVYiKZA6RpSSOEaUY+nSpRLLiD4Lw1DiGNEvEssIgA0bNnD++eezZcsWxowZwxFHHMGTTz5ZrAv6Eo8M9fpFOefcoLyyEEIIIYQQQgghhHjXe8tzTgkhhBBCCCGEEEII0V+SnBJCCCGEEEIIIYQQg0aSU0IIIYQQQgghhBBi0EhySgghhBBCCCGEEEIMGklOCSGEEEIIIYQQQohBI8kpIYQQQgghhBBCCDFoJDklhBBCCCGEEEIIIQaNJKeEEEIIIfrpoosu4qyzzur1MQsXLkQpxY4dO96mvRJCCCGEeGeR5JQQQgghdmsXXXQRSimUUgRBwF577cUVV1xBS0vLW972jTfeyM9//vPiz8cddxyXXXZZh8cceeSR1NfXU1dX95ZfTwghhBBid+QP9g4IIYQQQuxqp5xyCj/72c+IoohHH32UT37yk7S0tHDLLbe8pe32JeEUhiHjx49/S68jhBBCCLE7k55TQgghhNjtZTIZxo8fz+TJk/nwhz/MBRdcwB/+8AcAHn74YQ477DAymQwTJkzgS1/6EnEcF5/7+9//nlmzZlFZWcmoUaM48cQTi72uSof1XXTRRTz88MPceOONxZ5aa9eu7XZY31133cX+++9PJpNhzz335Dvf+U6H/d1zzz355je/ycc//nFqamqYMmUKt956664+TUIIIYQQg0KSU0IIIYR416msrCSKIl5//XVOO+00Dj30UJ599lluueUWbrvtNr7xjW8AUF9fz/nnn8/HP/5xXnzxRRYuXMjZZ5+Nc67LNm+88UbmzZvHxRdfTH19PfX19UyePLnL45YuXcq5557Leeedx/Lly7nmmmu46qqrOgwPBPjOd77D3LlzeeaZZ7jkkkv49Kc/zUsvvbRLzocQQgghxGCSYX1CCCGEeFf5xz/+wa9+9SsWLFjAD3/4QyZPnszNN9+MUop9992XjRs38sUvfpGvfvWr1NfXE8cxZ599NlOnTgVg1qxZ3W63rq6OMAypqqrqdRjfd7/7XRYsWMBVV10FwD777MMLL7zADTfcwEUXXVR83GmnncYll1wCwBe/+EW+973vsXDhQvbdd98BOhNCCCGEEEOD9JwSQgghxG7vz3/+M8OGDaOiooJ58+ZxzDHHcNNNN/Hiiy8yb948lFLFx86fP5/m5mY2bNjA7NmzWbBgAbNmzeKcc87hv//7v9m+fftb2pcXX3yR+fPnd/jd/PnzWblyJcaY4u8OPPDA4vdKKcaPH8/mzZvf0msLIYQQQgxFkpwSQgghxG7v+OOPZ9myZbz88stks1nuvvtuxo4di3OuQ2IKKA7ZU0rheR4PPvgg9913HzNnzuSmm25ixowZrFmzpt/70ttrlgqCoMPPSimstf1+XSGEEEKIoUqSU0IIIYTY7VVXVzN9+nSmTp3aIekzc+ZMFi1a1CE5tGjRImpqapg0aRKQJIXmz5/PtddeyzPPPEMYhtxzzz3dvk4Yhh16P3Vn5syZPPbYYx1+t2jRIvbZZx88z+vvIQohhBBCvGNJckoIIYQQ71qXXHIJ69ev57Of/SwvvfQS//u//8vVV1/N5z//ebTWPPXUU3zzm99kyZIlrFu3jrvvvps333yT/fbbr9vt7bnnnjz11FOsXbuWLVu2dNvT6fLLL+ehhx7i61//Oq+88gq33347N998M1dcccWuPlwhhBBCiCFJJkQXQgghxLvWpEmTuPfee/nCF77A7NmzGTlyJJ/4xCf4yle+AkBtbS2PPPII3//+92lsbGTq1Kl85zvf4dRTT+12e1dccQUXXnghM2fOpK2trdvhf4cccgi//e1v+epXv8rXv/51JkyYwNe+9rUOk6ELIYQQQrybKNfdJAdCCCGEEEIIIYQQQrwNZFifEEIIIYQQQgghhBg0kpwSQgghhBBCCCGEEINGklNCCCGEEEIIIYQQYtBIckoIIYQQQgghhBBCDBpJTgkhhBBCCCGEEEKIQSPJKSGEEEIIIYQQQggxaCQ5JYQQQgghhBBCCCEGjSSnhBBCCCGEEEIIIcSgkeSUEEIIIYQQQgghhBg0kpwSQgghhBBCCCGEEINGklNCCCGEEEIIIYQQYtBIckoIIYQQQgghhBBCDJr/B/ooInCvMOssAAAAAElFTkSuQmCC", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "𝒩(m=[40.95, 1.39], v=[[1.00, 0.00][0.00, 2.00]])\n", "\n" ] } ], "source": [ "include(\"scripts/cart_tracking_helpers.jl\")\n", "eval(Meta.parse(sumProductAlgorithm(z))) # build message passing algorithm\n", "marginals = Dict()\n", "messages = Array{Message}(undef,6)\n", "z_prev_m_0 = zeros(2)\n", "z_prev_v_0 = 1e8*Diagonal(I,2)\n", "for t=1:n\n", " data = Dict(:x => noisy_x[t], :bu => b*u[t],:z_prev_m => z_prev_m_0, :z_prev_v => z_prev_v_0)\n", " step!(data, marginals, messages) # perform msg passing (single timestep)\n", " # Posterior of z becomes prior of z in the next timestep:\n", "# ForneyLab.ensureParameters!(marginals[:z], (:m, :v))\n", " \n", " z_prev_m_0 = ForneyLab.unsafeMean(marginals[:z])\n", " z_prev_v_0 = ForneyLab.unsafeCov(marginals[:z])\n", "end\n", "println(messages[6].dist)\n", "# Collect prediction p(z[n]|z[n-1]), measurement p(z[n]|x[n]), corrected prediction p(z[n]|z[n-1],x[n])\n", "prediction = messages[5].dist # the message index is found by manual inspection of the schedule\n", "measurement = messages[6].dist\n", "corr_prediction = convert(ProbabilityDistribution{Multivariate, GaussianMeanVariance}, marginals[:z])\n", "\n", "# Make a fancy plot of the prediction, noisy measurement, and corrected prediction after n timesteps\n", "plotCartPrediction(prediction, measurement, corr_prediction);\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Recap: Inference in Linear Gaussian Models by Sum-Product Message Passing\n", "\n", "- The foregoing message update rules can be extended to all scenarios involving additions, fixed-gain multiplications and branching (equality nodes), thus creating a completely **automatable inference framework** for factorized linear Gaussian models." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The update rules for elementary and important node types can be put in a Table (see **Tables 1 through 6** in [Loeliger, 2007](./files/Loeliger-2007-The-factor-graph-approach-to-model-based-signal-processing.pdf))." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- If the update rules for all node types in a graph have been tabulated, then inference by message passing comes down to a set of table-lookup operations. This also works for large graphs (where 'manual' inference becomes intractable)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- If the graph contains no cycles, the Sum-Product Algorithm computes **exact** marginals for all hidden variables." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- If the graph contains cycles, we have in principle an infinite tree without terminals. In this case, the SP Algorithm is not guaranteed to find exact marginals. In practice, if we apply the SP algorithm for just a few iterations we often find satisfying approximate marginals. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "open(\"../../styles/aipstyle.html\") do f display(\"text/html\", read(f, String)) end\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.1.0", "language": "julia", "name": "julia-1.1" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.1.0" } }, "nbformat": 4, "nbformat_minor": 1 }