Skip to content
Snippets Groups Projects
skimage_test.ipynb 3.07 MiB
Newer Older
  • Learn to ignore specific revisions
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
    {
     "cells": [
      {
       "cell_type": "code",
       "execution_count": 26,
       "metadata": {},
       "outputs": [],
       "source": [
        "import numpy as np\n",
        "from scipy.interpolate import RectBivariateSpline\n",
        "from skimage._shared.utils import _supported_float_type\n",
        "from skimage.util import img_as_float\n",
        "from skimage.filters import sobel\n",
        "\n",
        "\n",
        "def active_contour(\n",
        "    image,\n",
        "    snake,\n",
        "    alpha=0.01,\n",
        "    beta=0.1,\n",
        "    w_line=0,\n",
        "    w_edge=1,\n",
        "    gamma=0.01,\n",
        "    max_px_move=1.0,\n",
        "    max_num_iter=2500,\n",
        "    convergence=0.1,\n",
        "    *,\n",
        "    boundary_condition='periodic',\n",
        "):\n",
        "    \"\"\"Active contour model.\n",
        "\n",
        "    Active contours by fitting snakes to features of images. Supports single\n",
        "    and multichannel 2D images. Snakes can be periodic (for segmentation) or\n",
        "    have fixed and/or free ends.\n",
        "    The output snake has the same length as the input boundary.\n",
        "    As the number of points is constant, make sure that the initial snake\n",
        "    has enough points to capture the details of the final contour.\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    image : (M, N) or (M, N, 3) ndarray\n",
        "        Input image.\n",
        "    snake : (K, 2) ndarray\n",
        "        Initial snake coordinates. For periodic boundary conditions, endpoints\n",
        "        must not be duplicated.\n",
        "    alpha : float, optional\n",
        "        Snake length shape parameter. Higher values makes snake contract\n",
        "        faster.\n",
        "    beta : float, optional\n",
        "        Snake smoothness shape parameter. Higher values makes snake smoother.\n",
        "    w_line : float, optional\n",
        "        Controls attraction to brightness. Use negative values to attract\n",
        "        toward dark regions.\n",
        "    w_edge : float, optional\n",
        "        Controls attraction to edges. Use negative values to repel snake from\n",
        "        edges.\n",
        "    gamma : float, optional\n",
        "        Explicit time stepping parameter.\n",
        "    max_px_move : float, optional\n",
        "        Maximum pixel distance to move per iteration.\n",
        "    max_num_iter : int, optional\n",
        "        Maximum iterations to optimize snake shape.\n",
        "    convergence : float, optional\n",
        "        Convergence criteria.\n",
        "    boundary_condition : string, optional\n",
        "        Boundary conditions for the contour. Can be one of 'periodic',\n",
        "        'free', 'fixed', 'free-fixed', or 'fixed-free'. 'periodic' attaches\n",
        "        the two ends of the snake, 'fixed' holds the end-points in place,\n",
        "        and 'free' allows free movement of the ends. 'fixed' and 'free' can\n",
        "        be combined by parsing 'fixed-free', 'free-fixed'. Parsing\n",
        "        'fixed-fixed' or 'free-free' yields same behaviour as 'fixed' and\n",
        "        'free', respectively.\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    snake : (K, 2) ndarray\n",
        "        Optimised snake, same shape as input parameter.\n",
        "\n",
        "    References\n",
        "    ----------\n",
        "    .. [1]  Kass, M.; Witkin, A.; Terzopoulos, D. \"Snakes: Active contour\n",
        "            models\". International Journal of Computer Vision 1 (4): 321\n",
        "            (1988). :DOI:`10.1007/BF00133570`\n",
        "\n",
        "    Examples\n",
        "    --------\n",
        "    >>> from skimage.draw import circle_perimeter\n",
        "    >>> from skimage.filters import gaussian\n",
        "\n",
        "    Create and smooth image:\n",
        "\n",
        "    >>> img = np.zeros((100, 100))\n",
        "    >>> rr, cc = circle_perimeter(35, 45, 25)\n",
        "    >>> img[rr, cc] = 1\n",
        "    >>> img = gaussian(img, sigma=2, preserve_range=False)\n",
        "\n",
        "    Initialize spline:\n",
        "\n",
        "    >>> s = np.linspace(0, 2*np.pi, 100)\n",
        "    >>> init = 50 * np.array([np.sin(s), np.cos(s)]).T + 50\n",
        "\n",
        "    Fit spline to image:\n",
        "\n",
        "    >>> snake = active_contour(img, init, w_edge=0, w_line=1)  # doctest: +SKIP\n",
        "    >>> dist = np.sqrt((45-snake[:, 0])**2 + (35-snake[:, 1])**2)  # doctest: +SKIP\n",
        "    >>> int(np.mean(dist))  # doctest: +SKIP\n",
        "    25\n",
        "\n",
        "    \"\"\"\n",
        "    max_num_iter = int(max_num_iter)\n",
        "    if max_num_iter <= 0:\n",
        "        raise ValueError(\"max_num_iter should be >0.\")\n",
        "    convergence_order = 10\n",
        "    valid_bcs = [\n",
        "        'periodic',\n",
        "        'free',\n",
        "        'fixed',\n",
        "        'free-fixed',\n",
        "        'fixed-free',\n",
        "        'fixed-fixed',\n",
        "        'free-free',\n",
        "    ]\n",
        "    if boundary_condition not in valid_bcs:\n",
        "        raise ValueError(\n",
        "            \"Invalid boundary condition.\\n\"\n",
        "            + \"Should be one of: \"\n",
        "            + \", \".join(valid_bcs)\n",
        "            + '.'\n",
        "        )\n",
        "\n",
        "    img = img_as_float(image)\n",
        "    float_dtype = _supported_float_type(image.dtype)\n",
        "    img = img.astype(float_dtype, copy=False)\n",
        "\n",
        "    RGB = img.ndim == 3\n",
        "\n",
        "    # Find edges using sobel:\n",
        "    if w_edge != 0:\n",
        "        if RGB:\n",
        "            edge = [sobel(img[:, :, 0]), sobel(img[:, :, 1]), sobel(img[:, :, 2])]\n",
        "        else:\n",
        "            edge = [sobel(img)]\n",
        "    else:\n",
        "        edge = [0]\n",
        "\n",
        "    # Superimpose intensity and edge images:\n",
        "    if RGB:\n",
        "        img = w_line * np.sum(img, axis=2) + w_edge * sum(edge)\n",
        "    else:\n",
        "        img = w_line * img + w_edge * edge[0]\n",
        "\n",
        "    # Interpolate for smoothness:\n",
        "    intp = RectBivariateSpline(\n",
        "        np.arange(img.shape[1]), np.arange(img.shape[0]), img.T, kx=2, ky=2, s=0\n",
        "    )\n",
        "\n",
        "    snake_xy = snake[:, ::-1]\n",
        "    x = snake_xy[:, 0].astype(float_dtype)\n",
        "    y = snake_xy[:, 1].astype(float_dtype)\n",
        "    n = len(x)\n",
        "    xsave = np.empty((convergence_order, n), dtype=float_dtype)\n",
        "    ysave = np.empty((convergence_order, n), dtype=float_dtype)\n",
        "\n",
        "    # Build snake shape matrix for Euler equation in double precision\n",
        "    eye_n = np.eye(n, dtype=float)\n",
        "    a = (\n",
        "        np.roll(eye_n, -1, axis=0) + np.roll(eye_n, -1, axis=1) - 2 * eye_n\n",
        "    )  # second order derivative, central difference\n",
        "    b = (\n",
        "        np.roll(eye_n, -2, axis=0)\n",
        "        + np.roll(eye_n, -2, axis=1)\n",
        "        - 4 * np.roll(eye_n, -1, axis=0)\n",
        "        - 4 * np.roll(eye_n, -1, axis=1)\n",
        "        + 6 * eye_n\n",
        "    )  # fourth order derivative, central difference\n",
        "    A = -alpha * a + beta * b\n",
        "\n",
        "    # Impose boundary conditions different from periodic:\n",
        "    sfixed = False\n",
        "    if boundary_condition.startswith('fixed'):\n",
        "        A[0, :] = 0\n",
        "        A[1, :] = 0\n",
        "        A[1, :3] = [1, -2, 1]\n",
        "        sfixed = True\n",
        "    efixed = False\n",
        "    if boundary_condition.endswith('fixed'):\n",
        "        A[-1, :] = 0\n",
        "        A[-2, :] = 0\n",
        "        A[-2, -3:] = [1, -2, 1]\n",
        "        efixed = True\n",
        "    sfree = False\n",
        "    if boundary_condition.startswith('free'):\n",
        "        A[0, :] = 0\n",
        "        A[0, :3] = [1, -2, 1]\n",
        "        A[1, :] = 0\n",
        "        A[1, :4] = [-1, 3, -3, 1]\n",
        "        sfree = True\n",
        "    efree = False\n",
        "    if boundary_condition.endswith('free'):\n",
        "        A[-1, :] = 0\n",
        "        A[-1, -3:] = [1, -2, 1]\n",
        "        A[-2, :] = 0\n",
        "        A[-2, -4:] = [-1, 3, -3, 1]\n",
        "        efree = True\n",
        "\n",
        "    # Only one inversion is needed for implicit spline energy minimization:\n",
        "    inv = np.linalg.inv(A + gamma * eye_n)\n",
        "    # can use float_dtype once we have computed the inverse in double precision\n",
        "    inv = inv.astype(float_dtype, copy=False)\n",
        "\n",
        "    ####### OURS #######\n",
        "    energies = np.zeros((max_num_iter, 3), dtype=float_dtype)\n",
        "\n",
        "\n",
        "    # Explicit time stepping for image energy minimization:\n",
        "    for i in range(max_num_iter):\n",
        "        # RectBivariateSpline always returns float64, so call astype here\n",
        "        fx = intp(x, y, dx=1, grid=False).astype(float_dtype, copy=False)\n",
        "        fy = intp(x, y, dy=1, grid=False).astype(float_dtype, copy=False)\n",
        "\n",
        "        if sfixed:\n",
        "            fx[0] = 0\n",
        "            fy[0] = 0\n",
        "        if efixed:\n",
        "            fx[-1] = 0\n",
        "            fy[-1] = 0\n",
        "        if sfree:\n",
        "            fx[0] *= 2\n",
        "            fy[0] *= 2\n",
        "        if efree:\n",
        "            fx[-1] *= 2\n",
        "            fy[-1] *= 2\n",
        "        xn = inv @ (gamma * x + fx)\n",
        "        yn = inv @ (gamma * y + fy)\n",
        "\n",
        "        # Movements are capped to max_px_move per iteration:\n",
        "        dx = max_px_move * np.tanh(xn - x)\n",
        "        dy = max_px_move * np.tanh(yn - y)\n",
        "        if sfixed:\n",
        "            dx[0] = 0\n",
        "            dy[0] = 0\n",
        "        if efixed:\n",
        "            dx[-1] = 0\n",
        "            dy[-1] = 0\n",
        "        x += dx\n",
        "        y += dy\n",
        "\n",
        "\n",
        "        ######## OURS #######\n",
        "        shape_energy = x @ (A @ x) + y @ (A @ y)\n",
        "        image_energy = np.sum(intp(x, y, grid=False))\n",
        "        total_energy = shape_energy + image_energy\n",
        "\n",
        "        energies[i, 0] = shape_energy\n",
        "        energies[i, 1] = image_energy\n",
        "        energies[i, 2] = total_energy\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "        # Convergence criteria needs to compare to a number of previous\n",
        "        # configurations since oscillations can occur.\n",
        "        j = i % (convergence_order + 1)\n",
        "        if j < convergence_order:\n",
        "            xsave[j, :] = x\n",
        "            ysave[j, :] = y\n",
        "        else:\n",
        "            dist = np.min(\n",
        "                np.max(np.abs(xsave - x[None, :]) + np.abs(ysave - y[None, :]), 1)\n",
        "            )\n",
        "            if dist < convergence:\n",
        "                break\n",
        "\n",
        "    energies = energies[: i + 1]\n",
        "\n",
        "    return np.stack([y, x], axis=1), energies"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 33,
       "metadata": {},
       "outputs": [],
       "source": [
        "def plot_energies(energies):\n",
        "    \"\"\"\n",
        "    Plot the shape, image, and total energies over the iterations.\n",
        "    \n",
        "    Parameters\n",
        "    ----------\n",
        "    energies : (num_iterations, 3) ndarray\n",
        "        2D array where\n",
        "        - energies[:, 0] = shape_energy\n",
        "        - energies[:, 1] = image_energy\n",
        "        - energies[:, 2] = total_energy\n",
        "    \"\"\"\n",
        "    plt.figure(figsize=(8, 6))\n",
        "    plt.plot(energies[:, 0], label='Shape Energy')\n",
        "    plt.plot(energies[:, 1], label='Image Energy')\n",
        "    plt.plot(energies[:, 2], label='Total Energy')\n",
        "\n",
        "    plt.xlabel('Iteration')\n",
        "    plt.ylabel('Energy')\n",
        "    plt.title('Evolution of Energies')\n",
        "    plt.legend()\n",
        "    plt.grid(True)\n",
        "    plt.show()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 42,
       "metadata": {},
       "outputs": [],
       "source": [
        "def plot_energies_specific(energies, iteration_range):\n",
        "    \"\"\"\n",
        "    Plot the shape, image, and total energies over the iterations.\n",
        "    \n",
        "    Parameters\n",
        "    ----------\n",
        "    energies : (num_iterations, 3) ndarray\n",
        "        2D array where\n",
        "        - energies[:, 0] = shape_energy\n",
        "        - energies[:, 1] = image_energy\n",
        "        - energies[:, 2] = total_energy\n",
        "    \"\"\"\n",
        "    import matplotlib.pyplot as plt\n",
        "\n",
        "    lower = iteration_range[0]\n",
        "    upper = iteration_range[1]\n",
        "\n",
        "    plt.figure(figsize=(8, 6))\n",
        "    plt.plot(range(lower, upper), energies[lower:upper, 0], label='Shape Energy')\n",
        "    plt.plot(range(lower, upper), energies[lower:upper, 1], label='Image Energy')\n",
        "    plt.plot(range(lower, upper), energies[lower:upper, 2], label='Total Energy')\n",
        "\n",
        "    plt.xlabel('Iteration')\n",
        "    plt.ylabel('Energy')\n",
        "    plt.title('Evolution of Energies')\n",
        "    plt.legend()\n",
        "    plt.grid(True)\n",
        "    plt.show()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 10,
       "metadata": {},
       "outputs": [],
       "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib.image as mpimg\n",
        "\n",
        "simple_image = mpimg.imread('simple_image.png')\n",
        "simple_image = simple_image[:, :, 0]  # remove unnecessary coordinates\n",
        "\n",
        "simple_points = np.load('simple_points.npy')"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 6,
       "metadata": {},
       "outputs": [],
       "source": [
        "def interpolate_user_points(user_points, min_points=1, max_points=5):\n",
        "    new_points = []\n",
        "    for i in range(len(user_points) - 1):\n",
        "        start_point = user_points[i]\n",
        "        end_point = user_points[i + 1]\n",
        "        distance = np.linalg.norm(end_point - start_point)\n",
        "        num_points = int(np.clip(distance / 10, min_points, max_points))\n",
        "        \n",
        "        x = np.linspace(start_point[0], end_point[0], num_points)\n",
        "        y = np.linspace(start_point[1], end_point[1], num_points)\n",
        "        \n",
        "        new_points.extend(np.vstack((x, y)).T)\n",
        "    \n",
        "    return np.array(new_points)"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 11,
       "metadata": {},
       "outputs": [],
       "source": [
        "points = interpolate_user_points(simple_points, min_points=5, max_points=20)"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 12,
       "metadata": {},
       "outputs": [
        {
         "data": {
          "image/png": "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",
          "text/plain": [
           "<Figure size 640x480 with 1 Axes>"
          ]
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "source": [
        "plt.imshow(simple_image, cmap='gray')\n",
        "plt.plot(points[:, 0], points[:, 1], 'r-')\n",
        "plt.show()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 29,
       "metadata": {},
       "outputs": [
        {
         "data": {
          "text/html": [
           "\n",
           "<link rel=\"stylesheet\"\n",
           "href=\"https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css\">\n",
           "<script language=\"javascript\">\n",
           "  function isInternetExplorer() {\n",
           "    ua = navigator.userAgent;\n",
           "    /* MSIE used to detect old browsers and Trident used to newer ones*/\n",
           "    return ua.indexOf(\"MSIE \") > -1 || ua.indexOf(\"Trident/\") > -1;\n",
           "  }\n",
           "\n",
           "  /* Define the Animation class */\n",
           "  function Animation(frames, img_id, slider_id, interval, loop_select_id){\n",
           "    this.img_id = img_id;\n",
           "    this.slider_id = slider_id;\n",
           "    this.loop_select_id = loop_select_id;\n",
           "    this.interval = interval;\n",
           "    this.current_frame = 0;\n",
           "    this.direction = 0;\n",
           "    this.timer = null;\n",
           "    this.frames = new Array(frames.length);\n",
           "\n",
           "    for (var i=0; i<frames.length; i++)\n",
           "    {\n",
           "     this.frames[i] = new Image();\n",
           "     this.frames[i].src = frames[i];\n",
           "    }\n",
           "    var slider = document.getElementById(this.slider_id);\n",
           "    slider.max = this.frames.length - 1;\n",
           "    if (isInternetExplorer()) {\n",
           "        // switch from oninput to onchange because IE <= 11 does not conform\n",
           "        // with W3C specification. It ignores oninput and onchange behaves\n",
           "        // like oninput. In contrast, Microsoft Edge behaves correctly.\n",
           "        slider.setAttribute('onchange', slider.getAttribute('oninput'));\n",
           "        slider.setAttribute('oninput', null);\n",
           "    }\n",
           "    this.set_frame(this.current_frame);\n",
           "  }\n",
           "\n",
           "  Animation.prototype.get_loop_state = function(){\n",
           "    var button_group = document[this.loop_select_id].state;\n",
           "    for (var i = 0; i < button_group.length; i++) {\n",
           "        var button = button_group[i];\n",
           "        if (button.checked) {\n",
           "            return button.value;\n",
           "        }\n",
           "    }\n",
           "    return undefined;\n",
           "  }\n",
           "\n",
           "  Animation.prototype.set_frame = function(frame){\n",
           "    this.current_frame = frame;\n",
           "    document.getElementById(this.img_id).src =\n",
           "            this.frames[this.current_frame].src;\n",
           "    document.getElementById(this.slider_id).value = this.current_frame;\n",
           "  }\n",
           "\n",
           "  Animation.prototype.next_frame = function()\n",
           "  {\n",
           "    this.set_frame(Math.min(this.frames.length - 1, this.current_frame + 1));\n",
           "  }\n",
           "\n",
           "  Animation.prototype.previous_frame = function()\n",
           "  {\n",
           "    this.set_frame(Math.max(0, this.current_frame - 1));\n",
           "  }\n",
           "\n",
           "  Animation.prototype.first_frame = function()\n",
           "  {\n",
           "    this.set_frame(0);\n",
           "  }\n",
           "\n",
           "  Animation.prototype.last_frame = function()\n",
           "  {\n",
           "    this.set_frame(this.frames.length - 1);\n",
           "  }\n",
           "\n",
           "  Animation.prototype.slower = function()\n",
           "  {\n",
           "    this.interval /= 0.7;\n",
           "    if(this.direction > 0){this.play_animation();}\n",
           "    else if(this.direction < 0){this.reverse_animation();}\n",
           "  }\n",
           "\n",
           "  Animation.prototype.faster = function()\n",
           "  {\n",
           "    this.interval *= 0.7;\n",
           "    if(this.direction > 0){this.play_animation();}\n",
           "    else if(this.direction < 0){this.reverse_animation();}\n",
           "  }\n",
           "\n",
           "  Animation.prototype.anim_step_forward = function()\n",
           "  {\n",
           "    this.current_frame += 1;\n",
           "    if(this.current_frame < this.frames.length){\n",
           "      this.set_frame(this.current_frame);\n",
           "    }else{\n",
           "      var loop_state = this.get_loop_state();\n",
           "      if(loop_state == \"loop\"){\n",
           "        this.first_frame();\n",
           "      }else if(loop_state == \"reflect\"){\n",
           "        this.last_frame();\n",
           "        this.reverse_animation();\n",
           "      }else{\n",
           "        this.pause_animation();\n",
           "        this.last_frame();\n",
           "      }\n",
           "    }\n",
           "  }\n",
           "\n",
           "  Animation.prototype.anim_step_reverse = function()\n",
           "  {\n",
           "    this.current_frame -= 1;\n",
           "    if(this.current_frame >= 0){\n",
           "      this.set_frame(this.current_frame);\n",
           "    }else{\n",
           "      var loop_state = this.get_loop_state();\n",
           "      if(loop_state == \"loop\"){\n",
           "        this.last_frame();\n",
           "      }else if(loop_state == \"reflect\"){\n",
           "        this.first_frame();\n",
           "        this.play_animation();\n",
           "      }else{\n",
           "        this.pause_animation();\n",
           "        this.first_frame();\n",
           "      }\n",
           "    }\n",
           "  }\n",
           "\n",
           "  Animation.prototype.pause_animation = function()\n",
           "  {\n",
           "    this.direction = 0;\n",
           "    if (this.timer){\n",
           "      clearInterval(this.timer);\n",
           "      this.timer = null;\n",
           "    }\n",
           "  }\n",
           "\n",
           "  Animation.prototype.play_animation = function()\n",
           "  {\n",
           "    this.pause_animation();\n",
           "    this.direction = 1;\n",
           "    var t = this;\n",
           "    if (!this.timer) this.timer = setInterval(function() {\n",
           "        t.anim_step_forward();\n",
           "    }, this.interval);\n",
           "  }\n",
           "\n",
           "  Animation.prototype.reverse_animation = function()\n",
           "  {\n",
           "    this.pause_animation();\n",
           "    this.direction = -1;\n",
           "    var t = this;\n",
           "    if (!this.timer) this.timer = setInterval(function() {\n",
           "        t.anim_step_reverse();\n",
           "    }, this.interval);\n",
           "  }\n",
           "</script>\n",
           "\n",
           "<style>\n",
           ".animation {\n",
           "    display: inline-block;\n",
           "    text-align: center;\n",
           "}\n",
           "input[type=range].anim-slider {\n",
           "    width: 374px;\n",
           "    margin-left: auto;\n",
           "    margin-right: auto;\n",
           "}\n",
           ".anim-buttons {\n",
           "    margin: 8px 0px;\n",
           "}\n",
           ".anim-buttons button {\n",
           "    padding: 0;\n",
           "    width: 36px;\n",
           "}\n",
           ".anim-state label {\n",
           "    margin-right: 8px;\n",
           "}\n",
           ".anim-state input {\n",
           "    margin: 0;\n",
           "    vertical-align: middle;\n",
           "}\n",
           "</style>\n",
           "\n",
           "<div class=\"animation\">\n",
           "  <img id=\"_anim_imgc71c3bb1562e420e8fc6d46ad750245b\">\n",
           "  <div class=\"anim-controls\">\n",
           "    <input id=\"_anim_sliderc71c3bb1562e420e8fc6d46ad750245b\" type=\"range\" class=\"anim-slider\"\n",
           "           name=\"points\" min=\"0\" max=\"1\" step=\"1\" value=\"0\"\n",
           "           oninput=\"animc71c3bb1562e420e8fc6d46ad750245b.set_frame(parseInt(this.value));\">\n",
           "    <div class=\"anim-buttons\">\n",
           "      <button title=\"Decrease speed\" aria-label=\"Decrease speed\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.slower()\">\n",
           "          <i class=\"fa fa-minus\"></i></button>\n",
           "      <button title=\"First frame\" aria-label=\"First frame\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.first_frame()\">\n",
           "        <i class=\"fa fa-fast-backward\"></i></button>\n",
           "      <button title=\"Previous frame\" aria-label=\"Previous frame\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.previous_frame()\">\n",
           "          <i class=\"fa fa-step-backward\"></i></button>\n",
           "      <button title=\"Play backwards\" aria-label=\"Play backwards\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.reverse_animation()\">\n",
           "          <i class=\"fa fa-play fa-flip-horizontal\"></i></button>\n",
           "      <button title=\"Pause\" aria-label=\"Pause\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.pause_animation()\">\n",
           "          <i class=\"fa fa-pause\"></i></button>\n",
           "      <button title=\"Play\" aria-label=\"Play\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.play_animation()\">\n",
           "          <i class=\"fa fa-play\"></i></button>\n",
           "      <button title=\"Next frame\" aria-label=\"Next frame\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.next_frame()\">\n",
           "          <i class=\"fa fa-step-forward\"></i></button>\n",
           "      <button title=\"Last frame\" aria-label=\"Last frame\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.last_frame()\">\n",
           "          <i class=\"fa fa-fast-forward\"></i></button>\n",
           "      <button title=\"Increase speed\" aria-label=\"Increase speed\" onclick=\"animc71c3bb1562e420e8fc6d46ad750245b.faster()\">\n",
           "          <i class=\"fa fa-plus\"></i></button>\n",
           "    </div>\n",
           "    <form title=\"Repetition mode\" aria-label=\"Repetition mode\" action=\"#n\" name=\"_anim_loop_selectc71c3bb1562e420e8fc6d46ad750245b\"\n",
           "          class=\"anim-state\">\n",
           "      <input type=\"radio\" name=\"state\" value=\"once\" id=\"_anim_radio1_c71c3bb1562e420e8fc6d46ad750245b\"\n",
           "             >\n",
           "      <label for=\"_anim_radio1_c71c3bb1562e420e8fc6d46ad750245b\">Once</label>\n",
           "      <input type=\"radio\" name=\"state\" value=\"loop\" id=\"_anim_radio2_c71c3bb1562e420e8fc6d46ad750245b\"\n",
           "             checked>\n",
           "      <label for=\"_anim_radio2_c71c3bb1562e420e8fc6d46ad750245b\">Loop</label>\n",
           "      <input type=\"radio\" name=\"state\" value=\"reflect\" id=\"_anim_radio3_c71c3bb1562e420e8fc6d46ad750245b\"\n",
           "             >\n",
           "      <label for=\"_anim_radio3_c71c3bb1562e420e8fc6d46ad750245b\">Reflect</label>\n",
           "    </form>\n",
           "  </div>\n",
           "</div>\n",
           "\n",
           "\n",
           "<script language=\"javascript\">\n",
           "  /* Instantiate the Animation class. */\n",
           "  /* The IDs given should match those used in the template above. */\n",
           "  (function() {\n",
           "    var img_id = \"_anim_imgc71c3bb1562e420e8fc6d46ad750245b\";\n",
           "    var slider_id = \"_anim_sliderc71c3bb1562e420e8fc6d46ad750245b\";\n",
           "    var loop_select_id = \"_anim_loop_selectc71c3bb1562e420e8fc6d46ad750245b\";\n",
           "    var frames = new Array(49);\n",
           "    \n",
           "  frames[0] = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\\\n",
           "bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9h\\\n",
           "AAAPYQGoP6dpAABgUklEQVR4nO3dd3hUxcIG8Hd76qYnm0ASIJTQq4Yg2IgiYkG4CIiKio0mRb2I\\\n",
           "Ba/lGi56bfcCtovYEMRPRBRBioBKABMIhBZ6QiCFAOnJJtmd74/jbnKyG2ra7nl/z7NP2JnZzRyz\\\n",
           "5ryZc2ZGJYQQICIiIiLFUDd3B4iIiIioaTEAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAA\\\n",
           "EhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGR\\\n",
           "wjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyAR\\\n",
           "ERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkM\\\n",
           "AyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhER\\\n",
           "ESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAA\\\n",
           "EhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGRwjAAEhERESkMAyARERGR\\\n",
           "wjAAEhERESkMA+Bf5s+fjzZt2sDDwwNxcXHYsWNHc3eJiIiIqFEwAAJYtmwZZs6ciZdffhk7d+5E\\\n",
           "z549MWTIEOTl5TV314iIiIganEoIIZq7E80tLi4O11xzDf773/8CAKxWKyIjIzF16lQ899xzzdw7\\\n",
           "IiIiooal+BHAyspKpKSkICEhwV6mVquRkJCApKSkZuwZERERUePQNncHmlt+fj4sFgvCwsJk5WFh\\\n",
           "YTh48KDT15jNZpjNZvtzq9WKc+fOISgoCCqVqlH7S0RERFdGCIHi4mJERERArVb2GJjiA+CVSExM\\\n",
           "xCuvvNLc3SAiIqIrcPLkSbRu3bq5u9GsFB8Ag4ODodFokJubKyvPzc2FyWRy+prZs2dj5syZ9ueF\\\n",
           "hYWIiorCyZMnYTQaG7W/REREdGWKiooQGRkJX1/f5u5Ks1N8ANTr9ejbty82bNiA4cOHA5Au6W7Y\\\n",
           "sAFTpkxx+hqDwQCDweBQbjQaGQCJiIhaON6uxQAIAJg5cybGjx+Pfv364dprr8W7776L0tJSPPzw\\\n",
           "w83dNSIiIqIGxwAIYPTo0Thz5gzmzJmDnJwc9OrVC2vWrHGYGEJERETkDrgOYAMoKiqCn58fCgsL\\\n",
           "eQmYiIioheL5uoay50ATERERKRADIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHC\\\n",
           "MAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBER\\\n",
           "EZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwD\\\n",
           "IBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERER\\\n",
           "KQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAAS\\\n",
           "ERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHC\\\n",
           "MAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKYxLB8At\\\n",
           "W7bgzjvvREREBFQqFb7//ntZvRACc+bMQXh4ODw9PZGQkIDDhw/L2pw7dw7jxo2D0WiEv78/JkyY\\\n",
           "gJKSkiY8CiIiIqKm5dIBsLS0FD179sT8+fOd1s+bNw/vv/8+PvjgA2zfvh3e3t4YMmQIKioq7G3G\\\n",
           "jRuHffv2Yd26dfjxxx+xZcsWPP744011CERERERNTiWEEM3diYagUqmwYsUKDB8+HIA0+hcREYGn\\\n",
           "n34azzzzDACgsLAQYWFhWLx4McaMGYMDBw6gS5cu+PPPP9GvXz8AwJo1a3D77bcjKysLERERl/S9\\\n",
           "i4qK4Ofnh8LCQhiNxkY5PiIiIro6PF/XcOkRwAs5fvw4cnJykJCQYC/z8/NDXFwckpKSAABJSUnw\\\n",
           "9/e3hz8ASEhIgFqtxvbt25u8z0RERERNQdvcHWgsOTk5AICwsDBZeVhYmL0uJycHoaGhsnqtVovA\\\n",
           "wEB7G2fMZjPMZrP9eVFRUUN1m4iIiKjRue0IYGNKTEyEn5+f/REZGdncXSIiIiK6ZG4bAE0mEwAg\\\n",
           "NzdXVp6bm2uvM5lMyMvLk9VXV1fj3Llz9jbOzJ49G4WFhfbHyZMnG7j3RERERI3HbQNg27ZtYTKZ\\\n",
           "sGHDBntZUVERtm/fjvj4eABAfHw8CgoKkJKSYm+zceNGWK1WxMXF1fveBoMBRqNR9iAiIiJyFS59\\\n",
           "D2BJSQmOHDlif378+HGkpqYiMDAQUVFRmD59Ol5//XV06NABbdu2xUsvvYSIiAj7TOHOnTvjtttu\\\n",
           "w2OPPYYPPvgAVVVVmDJlCsaMGXPJM4CJiIiIXI1LB8Dk5GTcdNNN9uczZ84EAIwfPx6LFy/G3//+\\\n",
           "d5SWluLxxx9HQUEBBg4ciDVr1sDDw8P+mq+++gpTpkzB4MGDoVarMXLkSLz//vtNfixERERETcVt\\\n",
           "1gFsTlxXiIiIqOXj+bqG294DSERERETOMQASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAAS\\\n",
           "ERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHC\\\n",
           "MAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBER\\\n",
           "EZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwD\\\n",
           "IBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERER\\\n",
           "KQwDIBEREZHCMAASERERKQwDIBEREZHCMAASERERKYy2uTtARFemuho4exY4dw44f97515wcoKQE\\\n",
           "sFoBIRwfAKBWAxqN9LX2vzUawGBwfHh4SA9vb+nh4yM9bP/29QWMRunh5QWoVM3734mIiBwxABK1\\\n",
           "MFVVQGYmcPw4cOIEcPo0kJfn+Dh7trl7enFqtTwQ+vsDQUFAYGDNw/Y8OBgIDZUeQUFSACUiosbB\\\n",
           "AEjUDEpLgUOHgPR06euxY1LgO34cOHVKGrFzB1YrUFgoPS6HSiUPhJGRwDXXAP36Ad27S6ONRER0\\\n",
           "5VRC2C4E0ZUqKiqCn58fCgsLYTQam7s71EJUVkqB7sgR4PDhmsCXni6FPLoyajXQsSPQu3fNo1cv\\\n",
           "KTASEV0Iz9c1OAJIdBUqK6XLtLaQZ/t6+DCQkQFYLE3TD29v6TJqQID8a0iI9FWlcv4ApHsBLRZp\\\n",
           "tM72sFikewwrKwGzGaiokL7aHuXl0ihmSYnjV7O5cY/VagUOHpQeX39dUx4eLo0OdutW87VLF+k+\\\n",
           "RCIikmMAJLoIs1m6RGsLeLUfGRmNd7nWaATatgWiooCwsJrLobUftoCn1zdOH65EZSVQXAwUFckf\\\n",
           "hYVAQYE0OcU2ecX2OHsWyM+/uvsas7Olxy+/1JSpVEBMTE0gtD06dAB0uqs+VCIil8VLwA2AQ8qu\\\n",
           "z2qVJl4cOCBdorWN4h0+LJU3RshTqaRw17GjFEjatq15tGkD+PhUwWyuQGVlJQoLC5GRkYHCwkJY\\\n",
           "/+qMEAIqleqiX521BQCdTofQ0FC0atUKXl5eUKsdV4VSqVTQaDTQarWyMpVKBa1W6/Q1V6OqSgqC\\\n",
           "tSe75OQAu3cDycnSz6YhfhY6HRAbKwXDnj2lS8i9ekmhmojcF8/XNRgAGwA/UK7l5EkgJUUKe/v3\\\n",
           "S18PHADKyhrn+wUHA+3bSyGvUycp8HXsKNChA6BSVaC0tBRVVVUoLi7GuXPnUFZWhrNnz2LXrl3Y\\\n",
           "u3cvTp48iXPnzqG4uBhmsxkN9b+sRqOBh4cH/P394e/vLwt5Nnq9HkFBQQgODoaHhwdUKhXUajV8\\\n",
           "fHwQERGBVq1awcfHxx4qbeHQ09MTgYGBDnUeHh7w8vJy+r0uRVkZsGcPsGsXkJoqfd2zp+EuO4eH\\\n",
           "S0HQFgr79QPateNSNkTugufrGgyADYAfKNdQWgpMngx8/nnNGngNxRbybEGv9ld/f4HS0lJkZ2cj\\\n",
           "IyMDGRkZyM7OxtmzZ5GdnY28vDwUFRWhsLDQHgbNZjPKyspgaaqbCC9CrVY7hDytVgu9Xg+tVmuv\\\n",
           "s9XrdDr4+PjAaDTaRwq1Wi0CAwPRrVs3xMXFISgoyN7Ox8cHOp0OWq0Wnp6e8PDwuOTRxepqaaQ2\\\n",
           "LQ3Yu7fm69GjDfNz9vcH+vaVwqDta5s2DIVErojn6xoMgA2AH6iWSwjp8uGXXwKffSZdXrxSoaFS\\\n",
           "qLMFO9sjJkYKCQBgsVhgsVhQUVGBvLw85Ofn48iRI9iyZQv+/PNPZGRkoLS0FNXV1RBCNNhonitR\\\n",
           "q9Xw8vKCt7c3dDodvLy8YDQa4evrCx8fH4SHhyM6Ohr+/v7QaDTQ6/UICQlBYGAgAgMDERYWBl9f\\\n",
           "X2g0GlnwrKu0VBrZTUsD9u2rCYanT1/9MQQGSkHQ9ujbV1qqhqGQqGXj+boGA2AD4Aeq5cnKAr76\\\n",
           "Sgp+e/de+uv8/IDOnWvuy6sd+Jz9aIUQqKysxJkzZ7Bv3z7s2bMHBw4cwOHDh5GTk4OCggKUlJSg\\\n",
           "srLSfu8e1c82ulh3xNE2Mujn54e2bdvimmuuQUxMDFq1aoWgoCB4eXnBx8cH/v7+0Ov19tFEZwHx\\\n",
           "3LmaQJiWJl1K3rPn6m8BCAmpCYO2R+vWDIVELQnP1zVcOgAmJibiu+++w8GDB+Hp6YkBAwbgX//6\\\n",
           "Fzp16mRvU1FRgaeffhpLly6F2WzGkCFDsGDBAoSFhdnbZGZmYuLEifj111/h4+OD8ePHIzEx8ZLv\\\n",
           "U+IHqmUoKAC++04KfZs2Xfzy36BB0ozQzp2l5UK6dAFMpvpP2EIIlJeXo7S0FKWlpcjIyMC+ffuQ\\\n",
           "lpaGPXv24NixYzh37hyqqqoUObLXlGz3L3p6esLT0xMGgwFGoxHBwcEIDQ1FeHg4TCYTTCYTYmJi\\\n",
           "EB0dDR8fH3s4rBsMLRZpVndqas0jJQU4c+bq+hkSIgXBPn1qLh9zpJCo+fB8XcOlA+Btt92GMWPG\\\n",
           "4JprrkF1dTWef/557N27F/v374f3X1sFTJw4ET/99BMWL14MPz8/TJkyBWq1Gn/88QcA6ZJdr169\\\n",
           "YDKZ8OabbyI7OxsPPvggHnvsMbzxxhuX1A9+oJpPcTHwww/AsmXAmjXSLNKLGTgQWLRIGtm7ENsl\\\n",
           "2rKyMmRnZ2P79u3YuHEjDh06ZL+Hz3Y5t7HZRsY0Go1sdOxSZgDXPh5bHSB99q1Wq/25C/8qcEqt\\\n",
           "VkOv18PPzw8xMTHo2LEjIiMjER0djeDgYAQFBSE0NNR+r6Knp2ed/7bSSHJycs0jJeXqt+ALDpaP\\\n",
           "EvbtK80GZygkanw8X9dw6QBY15kzZxAaGorNmzfj+uuvR2FhIUJCQrBkyRL87W9/AwAcPHgQnTt3\\\n",
           "RlJSEvr374+ff/4Zd9xxB06fPm0fFfzggw8wa9YsnDlzBvpLWGCNH6imVVYGrF4NLF0K/PSTtEjx\\\n",
           "xURFAePGAfffL430OWM2m1FYWIj8/HycOnUKhw8fRnp6Og4fPmy/pFtWVtZol3JtAc92+VKn0yEw\\\n",
           "MBCdOnVCTEwMIiMjERoaCoPBYG9fN9TVfq8LhUMAKCsrs1+mto1a1m5jNpuRm5uL7OxslJSU2I/b\\\n",
           "arWiokKavWy7tF07RFosFlRXV8NisbSoUKlWq+1L2mi1WhgMBvj4+CA4OBghISGIiIhA+/bt0atX\\\n",
           "L7Rt2xZ+fn4wGo2yCSlCSAt/p6TIQ2FBwdX1rXYotN1XyMvHRA2P5+sabrUQdOFfG44GBgYCAFJS\\\n",
           "UlBVVYWEhAR7m9jYWERFRdkDYFJSErp37y67JDxkyBBMnDgR+/btQ+/evR2+j9lshrnWuhNFRUWN\\\n",
           "dUhUS3o68P770izekpKLt/fzA0aNkkLfoEHSFmI2VqsV1dXVqKysRElJCdLS0rBx40akpKQgMzMT\\\n",
           "Z86cQUlJSYNfzlWpVPbg4e3tDW9vb4SEhCA0NBSBgYFo3bo1QkND4eXlBS8vL0RHR6Ndu3bw8fGx\\\n",
           "j/41JCGELMDVrTObzSgoKEB5ebls/cHy8nLk5+ejoKAAFRUVsgBYUVGB3NxcnD59GmVlZfZQmJeX\\\n",
           "hyNHjuD8+fOorq6G1WqF1Wp1GIlsLLbvV/XXMHFxcTHy8/Nx4sQJADUB3NfXFxEREQgNDUVkZCRi\\\n",
           "YmLQrl07BAUFISgoCCaTCbfc4oe77vKEXq+HENJC4bUD4c6dl7f/cX4+sHat9LCx3VPYrx8wZkz9\\\n",
           "f7gQEV0JtwmAVqsV06dPx3XXXYdu3boBAHJycqDX6+Fvm6L5l7CwMOTk5Njb1A5/tnpbnTOJiYl4\\\n",
           "5ZVXGvgIyBmrVdrZ4b33pEu8F6PXA0OHSqN9d94JeHjU1AkhUFJSgvT0dKSlpeHAgQM4cuQIDh06\\\n",
           "hKysLJSUlDT4siu2CQxeXl5o1aoV4uLiMHDgQHTt2tUeAAMDA+2XH+tOfmhsttBTH9syLRdSX3is\\\n",
           "PVIqhEB1dTWysrJw9OhRFBQUwGw249y5czhx4gTy8vJQUlKC4uJinD9/3j7SajabUVRUBLPZ3Oj3\\\n",
           "Vtr6eP78eZw/fx779u2TLXljMBjg6ekJo9GIyMhI9OrVC/Hx8Wjfvj1CQkIwdKgR99zjAZ1OB0CF\\\n",
           "Y8ekMFj7cTkjhWfOAD//LD3++U9g9Gjg5pul9Qm7dgU8PRvpPwQRKYLbBMDJkydj7969+P333xv9\\\n",
           "e82ePRszZ860Py8qKkJkZGSjf18lKSmRRvref18a+bsQrRa45RZplOTuu6WRPxuLxYKSkhKcOnUK\\\n",
           "v/32G1auXIl9+/bh7NmzqKioaNDAZ1voOCQkBJGRkYiKikK7du3so3ht27aFyWSCp6dnk4S7puLs\\\n",
           "WGwzeWvT6XTo0KEDOtS6+dJqtaKyshJms9l+6bi8vBxVVVX2upycHBw7dgzHjx/H7t27cfz4cRQW\\\n",
           "FqKsrAyVlZX2y82NcWnedlm8srISlZWVKC4uto9kbt68GZ988gkCAwMREBAAk8lkHzGMjY1Fq1at\\\n",
           "0LdvAG6/PQxeXl5QqdQ4frwmDF7O5WOrVdr32Lb3sUYjLSpuW7TaNskkIKDB/xMQkZtyiwA4ZcoU\\\n",
           "/Pjjj9iyZQtat25tLzeZTKisrERBQYFsFDA3Nxcmk8neZseOHbL3y83Ntdc5YzAY7PdhUcPKzAT+\\\n",
           "8x/g448vfAlNrQZuukkaFRkxAggKqqkTQqCoqAi7du3Ctm3bkJKSgl27duHkyZOorKxskH7W3iLN\\\n",
           "aDQiIiICXbt2Rf/+/XHttdeibdu28PHxgcFgaPDLtu5ErVbDw8MDHrWHauuwjehbrVaUlJQgJycH\\\n",
           "eXl5yM3NRVZWFs6fP4/CwkL7otpnzpzB+fPnUVRUhPLy8ka7F9FqtaK4uBjFxcXIyMiwl9tmKPv6\\\n",
           "+iI0NBRdu3bFtddei86dOyMsLAz9+wfhttv8/7q3UIOMDPVlh0KLRdrFZv9+YMmSmvL27aVLxtdc\\\n",
           "I33t0we4yAAuESmUS08CEUJg6tSpWLFiBTZt2iQbWQBgnwTy9ddfY+TIkQCA9PR0xMbGOkwCyc7O\\\n",
           "RuhfG4F+9NFHePbZZ5GXl3dJQY83lV4dIYCkJODdd6VlXC40KBcYCDz2GDBpkjSxo7bKykpkZWVh\\\n",
           "69atWLx4MXbu3ImSkhL7ostXS6VSwcvLCzExMejfvz9iY2PRpk0bREdHo3Xr1vD19WXga0K171+0\\\n",
           "Xb61WCwoKyvD6dOnkZWVhf379yM1NRWnTp2yb6dnW8an7gSWxmK7hOzh4QEfHx8EBgaiVatW6Nix\\\n",
           "Izp16oROnTohNjYWJpMJOp3Ofk9hSgqwYQOweDFwpX+3qFTSUkcDBgDx8dLX9u05uYSUi+frGi4d\\\n",
           "ACdNmoQlS5Zg5cqVsrX//Pz84PnXDTITJ07E6tWrsXjxYhiNRkydOhUAsHXrVgA1y8BERERg3rx5\\\n",
           "yMnJwQMPPIBHH32Uy8A0sqoqYPlyKfj9+eeF23btCkybJt3b5+UlrysvL8fu3bvx9ddfY8uWLTh6\\\n",
           "9CiKi4uvuF+1Fx62zRK1nbD79euHvn37om3btjAYDG51KdcdVVdXo7S0FMXFxSgvL0dBQQEKCgpw\\\n",
           "5swZnDhxAllZWcjKysKpU6dw+vRp+/2GTREMbcvUBAQEoG3btrj22mvRrVs3tGnTBpGRkfDz84PB\\\n",
           "YEBWlg4rVuiRlqbB7t1qHD58dVvcBQdLQXDAAGlJpH79AF7QIKXg+bqGSwfA+k6+n376KR566CEA\\\n",
           "NQtBf/3117KFoGtf3s3IyMDEiROxadMmeHt7Y/z48Zg7dy4Xgm4k+fnARx8BCxYAp07V306lAoYN\\\n",
           "A6ZPl25+r/vjLikpQWpqKr799lssX74c2dnZV3zStoW+kJAQ9O7dG/3790eXLl0QHR2NsLAw+Pn5\\\n",
           "wdvbm6N7bsQ2gmgLhidOnMCuXbtw+PBhnD9/HmfOnEFGRgbOnDmD8vJyVFZWNurSNrUnDPn5+dln\\\n",
           "h4eEhCAoKAidO3dGXFwcQkPb4ehRT+zZo8bu3Srs3Cltd3ilo4QeHtLo4A03SI+4OE4wIffF83UN\\\n",
           "lw6ALQU/UJdm715pNu+XX1547T5vb+CRR4CpU50v1lxZWYldu3Zh4cKFWL9+PXJzcy97MWa1Wo2A\\\n",
           "gAD7wsDt2rVDly5d0Lt3b7Rt2xZGo/GS/wAg91FdXY2qqir7hBTbBKKTJ0/i/PnzyMjIQHJyMtLT\\\n",
           "03Hu3DlUVFTYl7RpLLb7TT08PBAcHIxOnTqhffv2iImJQefOndG6dWt4evrhxAkfHDzog927dUhO\\\n",
           "lra5u5I1yvV64NprpYlVt90mTS65wERxIpfC83UNBsAGwA9U/axWadHmd9+V7me6kOho4KmnpPBX\\\n",
           "Z+Wev97LitOnT2P58uX46KOPcOjQocs68Wo0Gnh5eSEyMhLXX389brvtNnTr1g0hISHw9PSsd+9Y\\\n",
           "IhuLxYJz587hwIEDOH78OM6ePYvs7GxkZGQgMzPTvrC2bdmahl5WyKb2aKFthDAkJATdunXDTTfd\\\n",
           "hJ49e0Kt9sbevTr8+acW27ersXWrCvWsbHVBgYHArbcCQ4ZIj/Dwhj8eoqbC83UNBsAGwA+Uo7Vr\\\n",
           "pcu827df+DIvIN2HNH26tIRLfYNu5eXlWL9+Pd566y1s375dthD3hajVaphMJvTo0cO+blvXrl0R\\\n",
           "Hh7udsuxUNOyTT6xLWZdWlqKvLw8ZGdnIysrCwcOHEBKSgoOHTqEs2fPNuqMZBvbQtatW7eGyWRC\\\n",
           "SEgIYmJi/tpNpj1UqrY4dCgIO3Zo8dtv0ijh5XanVy/g9tulR//+HB0k18LzdQ0GwAbAD5Tc1q3A\\\n",
           "9ddfeDavTiet2zdtmnSJqT7V1dU4evQoPvzwQyxbtuyS7vOzzdaNjIzErbfeirFjx6J9+/YwGo3Q\\\n",
           "6XQMfdQkbItK5+Tk2BfAzsrKQkZGBo4dO2bfT7q8vLxR7yu0XT728/ND69atERcXh4SEBHTq1Akq\\\n",
           "VRB27/bF1q06bNmiwq5d0qj9pQoMlEYFhw2TvgYHN8phEDUYnq9rMAA2AH6galRXS2uPpaU5rw8J\\\n",
           "AZ58Epg48eKXkkpKSrB69Wq8+eabSE1Nveh9frbgN3DgQIwaNQrx8fGIiYnhmo3UYti21zt//jyy\\\n",
           "srKQmpqK3377DTt37kRubi5KS0vti2DbRhgbmu3/k7CwMPui1b1798aAAQPg5xeF5GQDNm5UY80a\\\n",
           "4MCBy3lfacvFUaOAkSN5qZhaJp6vazAANgB+oGq88w5Qa5MUux49pMu8Y8fKt2dzprq6Grt378Z/\\\n",
           "/vMf/PDDDzh//vxFv29ISAiuu+46jB07FjfffDMCAwM5Y5daPKvVioqKCpw7dw6nTp2yL0djW5rG\\\n",
           "tkxNTk6OfXu8hqZWq2EwGBAYGIguXbogPj4ePXv2RExMDKqqIrBjRwA2bNBi/XrgUrc9V6mkWzts\\\n",
           "YTAiosG7TXRFeL6uwQDYAPiBkpw+DcTGAnWX4PvtN+C66y5t8dmioiL8+OOPmDdvHvbu3XvRm+g9\\\n",
           "PDzQr18/zJw5E4MGDWLwI5cnhIDFYkFFRQWKi4tx5swZHDhwALt27cLx48ftk01s2+HZFsBuKBqN\\\n",
           "Bt7e3ggJCUHr1q3RsWNHDBo0CNdeex0yM1th/Xo9Vq9WYe/eS3s/lUq6V7BbN+Cee6S9uomaC8/X\\\n",
           "NRgAGwA/UJKxY4GlS+Vlf/whLTh7MUII7Nu3D//+97/x3XffoegiQw1qtRodOnTAQw89hAcffBDh\\\n",
           "4eG8t4/cmm2yiW0/4pMnT2L//v1IT0/H7t27kZ6ejsLCwsteEulS6HQ6REdH45ZbbsGgQYPQq1cv\\\n",
           "AFHYvNkLq1ersGEDUFZ2ae81f760kw9Rc+D5ugYDYAPgB0pa4iUhQV728MPAokUXf63VasW2bdsw\\\n",
           "a9YsJCUlXXQ0IygoCHfeeSeeeuopdO3aFXq9/ip6TuS6bJeQCwsLcfjwYezZswdHjx5Fbm4u8vPz\\\n",
           "kZ2djfz8fPvSNFf76962lFJYWBj69euHe++9FwMHDoSPTzB++UWF5cuBH35wvApQm0oFfPuttIc3\\\n",
           "UVPj+boGA2ADUPoHymwGevYE0tNrygICpOchIRd+bXl5OdauXYvXXnsNu3btuuAJSqPRoFu3bpgx\\\n",
           "YwbuvPNOBAQEcNSPqBbbnshmsxmVlZWyySbr169HWloazpw502Db3QUEBGDQoEG4++67ceONN6J1\\\n",
           "69awWvX45Rcp5K1c6fy+QYMBWLdOmjRC1JSUfr6ujQGwASj9A5WYCDz/vLzsgw+AJ5648OtOnz6N\\\n",
           "BQsW4IMPPsDZs2cv2DY4OBj33HMPnnrqKXTu3BkaLj5GdMlsl45ty9GkpqZi3759SE9PR0ZGBoqK\\\n",
           "iq4qDBoMBsTGxmL06NG4//770apVK6jVapjN0tWBF14AUlPlr/H3B37/Xdrnm6ipKP18XRsDYANQ\\\n",
           "8gfq5Elp4kft+3+uuQZISqp/gVir1YojR47gueeew5o1a1BeXl7v++t0OvTt2xdPP/00EhIS4O9s\\\n",
           "ixAiuiwWiwUlJSXIz8/H0aNHsWXLFuzYsQMnT57EmTNnUFJSgsrKyssOhZ6enujZsycmTJiA4cOH\\\n",
           "I/ivhQGFkP4g/PhjefvWraV1QyMjG+rIiC5MyefruhgAG4CSP1BjxgDLltU8V6mAHTuAfv2ctzeb\\\n",
           "zdi8eTNee+01bN269YLLWvj6+mLs2LGYMWMGOnbsyNm9RI3EarWiuLgY+fn5OHToEPbt24d9+/Zh\\\n",
           "27ZtOHHixGXfP+jj44N77rkHzz//PDp06ACNRoPqamlJmB9+kLft2lUaCeTfdtQUlHy+rosBsAEo\\\n",
           "9QP166/AzTfLy554Qrr860xZWRkWLVqEf//738jIyKj3hKJSqRAVFYVZs2Zh7NixHPUjamIWiwVm\\\n",
           "sxlnz57F5s2bsWbNGuzevRuZmZkXnaFvo9Fo0KFDBzz11FO477774Ofnh7IyabJYUpK87S23SHuG\\\n",
           "17cVJFFDUer52hkGwAagxA9UVRXQuzewb19NWUAAcPgwEBTk2L6goACffvopEhMTcebMmXrfV6vV\\\n",
           "ol+/fnjhhRcwePBgeHp6NkLviehSWa1WlJSU4NSpU9izZw+WLVuGP/74A2fPnr2k9Qf9/f3x5JNP\\\n",
           "YubMmQgODsa5cyoMHAgcPChvN3GitEQM53VRY1Li+bo+DIANQIkfqHffBWbMkJctWCD9Eq+roKAA\\\n",
           "r7/+Oj788EOUlJTU+57e3t4YN24cnn76aXTo0IEzfIlaoPLyciQnJ+Pbb7/FihUrkJWVddHLwwaD\\\n",
           "AWPGjMEzzzyDbt26ISMDiIsDcnPl7d5/H5g6tRE7T4qnxPN1fRgAG4DSPlC5uUDHjvLlHXr1ApKT\\\n",
           "5RM/hBA4cuQI/vnPf2L58uUou8BKsREREXjuuefwwAMP8JIvkQsoKytDamoqFi1ahHXr1uHUqVMX\\\n",
           "HBHU6XS48cYb8e6776Jz587YsUOFG26QlpGyUauBn34CbrutCQ6AFElp5+sLYQBsAEr7QD38MLB4\\\n",
           "sbzs99+l7d5sqqursWPHDrzyyivYsGFDvScGlUqFdu3aYc6cObj33nvhcbGNgomoRSkpKUFqaio+\\\n",
           "++wzrFix4oJLOmk0GiQkJOC///0vYmJisGyZCmPHytv4+kozg7t1a+SOkyIp7Xx9IZxWSZclKckx\\\n",
           "/D34oGP427BhAx5//HGsX7++3vCnVqsxaNAgfPHFFxg7dizDH5EL8vHxwcCBA/HOO+/gww8/RJ8+\\\n",
           "feqdsW+xWLBu3To89dRT2LlzJ+6914qXX5a3KS4Gbr0VOHasCTpPpGAMgHTJLBZg8mR5ma8vMHdu\\\n",
           "zXMhBH7//XfMmjUL+/fvr3eZF41Gg9tvvx3vvvsu+vfvD51O14g9J6LG5uPjg+HDh+Ojjz7C4MGD\\\n",
           "692i0Wq1Yt26dXjmmWeQmpqKl16yYswYeZvsbGm28KlTTdBxIoViAKRL9tFHwK5d8rJXXgHCw6V/\\\n",
           "V1dXY9OmTZg6dSp2795d743hOp0OCQkJeOedd9C7d29O9iByExqNBn369MF7772HcePGwWAwOG1X\\\n",
           "XV2NLVu2YObMmUhL24NFi4ABA+Rtjh+XlofJz2+CjhMpEAMgXZL8fGk7p9q6dgWmTJH+XVlZiZUr\\\n",
           "V+Lxxx/Hvtprw9RhNBoxYcIEzJ8/HzExMY3YYyJqDiqVCrGxsZg7dy4mTZoEHx8fp+2sVit+++03\\\n",
           "TJ06FQcP7sKqVVb07Clvc+CANCGksLAJOk6kMAyAdEmefx44f15e9t//Ajqd9Nf8mjVr8OKLL+LI\\\n",
           "kSP1jvyZTCbMmTMHr732GmJiYjjyR+SmVCoVQkND8fzzz+Ohhx6qdz1Pq9WKpKQk/P3vf0de3iH8\\\n",
           "8ou0wkBtKSnAnXcCF9gxkoiuAAMgXVRyMvDJJ/KyMWOAG2+smfDx7LPP4mDdlV1riYyMxJtvvomp\\\n",
           "U6fa9wclIvcWHByMF198EdOnT693eSeLxYJff/0Vr776KsrLM7B+PRAVJW/z22/A6NHSAvRE1DAY\\\n",
           "AOmChACeeUb6auPtDbz5Zs0v7meeeQaHDx+u9z0iIyPxxhtvYNSoUfXeGE5E7iksLAzPPfccZs2a\\\n",
           "hcDAQKdtLBYLvvvuOzz33HNQqbKwfj0QFiZvs2oV8OijwAW2Dyeiy8AASBf044/A5s3yspdeAsLD\\\n",
           "Ldi0aRNmzpyJvXv31nvZt127dnjzzTdx77331ntDOBG5N6PRiEmTJmHGjBnw9vZ22sZsNmPFihV4\\\n",
           "++23ERR0Dr/8Avj5ydt8/rnjH6REdGUYAKle1dXArFnysuhoYPLkaqxduxZPPPHEBSd8xMbG4r33\\\n",
           "3sOIESM48kekcEajEU899RSeffZZ+Pr6Om1jNpvxwQcf4K233kLbtsX48Ueg7u2D77wjX3qKiK4M\\\n",
           "AyDVa9EiaRZeba+9ZsW2bZvw7LPP4ujRo/WO/EVFReG1117DrbfeyjX+iAiAFAKnTZuGRx99tN6J\\\n",
           "IeXl5fjss8+wefNmXHedwPLl8i0mAWlS2scfN0GHidwYAyA5VVIChxX6+/QRaNVqC5555hns37+/\\\n",
           "3tdGRUUhMTERd999N0f+iEjG398fM2fOxJgxY6DVap22yc7Oxocffojz589j2DDH3YcAYNIk4MSJ\\\n",
           "Ru0qkVtjACSn3n4byMmRlz322GHMnj0LaWlpTl+jUqnQqVMn/Otf/8KIESM48kdETrVu3Rqvvvoq\\\n",
           "hgwZAk3d4T1IOwpt3LgRixYtQkVFBe6/H3jvPXmb6mpphQIiujIMgOQgJweYN09edvPNFdi0aQ6S\\\n",
           "k5Odbu+mUqnQtWtXfPDBBxgxYgT39SWiC2rVqhVefPFF9Ky7+vNfysrKsHDhQvz5558AgKeeAoxG\\\n",
           "eZtz5xq7l0TuiwGQHDz3HFBaWvNcrRZo1+5DrFy5st69fWNiYvDee+/hhhtu4GVfIroolUqFa6+9\\\n",
           "Fi+99BKCgoKctjl+/Dg+/PBDFBUVAQCGDJHX793b2L0kcl8MgCSzdSvw2Wfysvj4Q/j++9dRUVHh\\\n",
           "9DXh4eF49dVXMWjQIO7uQUSXTK1W4+abb8ajjz7q9KqBEAKrV6/GDz/8AIvFgh495PV79jRRR4nc\\\n",
           "EAMg2VksNXv72nh5VeHIkdHIr2dH9oCAALz44ou854+IrojRaMSMGTMQFxfntP78+fP48MMPkZ+f\\\n",
           "7zQAck1AoivDAEh2H30E7NolL/P1/Tdyc3c7bW8wGPDII4/ggQce4CLPRHTFQkND8eijj8JY9ya/\\\n",
           "v/z555/YsmWLQwA8fx7IymqCDhK5IQZAAgDk5wMvvCAv8/I6jry8l52212q1uOuuuzB16tR6F3Ul\\\n",
           "IroUKpUKgwcPxq233ur0NhKz2YyPP/4YGk2Ww0QQXgYmujIMgARACn/nz8vLKioegxCVDm1VKhUG\\\n",
           "DBiAf/7zn4iOjm6iHhKROwsPD8fs2bMRERHhtH7btm1Yv34devSQX/NlACS6MgyAhJQUx1X1NZrl\\\n",
           "sFo3OG3fu3dvJCYmon379k3QOyJSii5duuCuu+5yujZgcXExfvjhB3TpUi0rZwAkujIMgIT//Ed+\\\n",
           "I7VKVQaLZYbTtlFRUfjHP/6BuLg4zvglogZlMBgwcuRIhIWFOa3funUrfH1PyMp2O79FmYguggFQ\\\n",
           "4YQAfvutbtk7AE45tPXz88Pzzz9f7+r9RERXw3Z7ydChQ53+gZmfn4+dOz+VlaWny9ctJaJLwwCo\\\n",
           "cNu2AceO1S39zqGdXq/H3/72N4wePZoLPRNRo/H09MSoUaOcLg5ttVqxe/cXUKuttcqA1NQm7CCR\\\n",
           "m2AAVLjPP69bcgjATlmJ7a/y6dOnw9/fv4l6RkRKdc011+Cmm25yOgp4/vwpBAXlyspSUpqqZ0Tu\\\n",
           "gwFQwSoqgKVL65Y6JEK0bdsWc+bMQZcuXZqkX0SkbAEBAZgwYQICAgIc6oQQUKnkC5YmJzdVz4jc\\\n",
           "BwOggq1aBRQU1C39QvYsODgYzz77LPr37w+1mh8XImp8KpUK/fv3R79+/ZzWl5f/LnvOEUCiy8cz\\\n",
           "uoI5Xv7dCCDT/kyn0+Hhhx/G+PHj4enp2ZRdIyKF8/HxwQ033OB0i8myMvnMtYMHORGE6HIxACrU\\\n",
           "2bPAmjV1N9GsSYQqlQo33ngjJk6cyPBHRE1Oo9GgX79+CAwMdKizWFIA1KwHyIkgRJePAVChli2z\\\n",
           "orq69g3W5QD+z/4sICAAM2fORJs2bZq6a0REAIDu3bsjNjbWSU051Op0WQkvAxNdHgZAhfr886o6\\\n",
           "JT8AKAEAqNVqDBs2DAMHDuRiz0TUbMLCwnDHHXdAq9U61Akhn/nBEUCiy8MAqEBHjlRi+3ZDndIl\\\n",
           "9n+1bdsWjzzyCLy9vZu2Y0REtajVagwePNjpmoBCpMqec0s4osvDAKhAH35YWKfkPIA1AKT7bu67\\\n",
           "7z7Ex8dz9I+Iml14eHg9t6LI94Dbtw+ornbSjIicYgBUGKvViq+/ttYp/RZAJQCgU6dOGDt2LAyG\\\n",
           "uiOERERNz9vbG23btnXyB2ma7FlFBXDkSNP1i8jVuXQAXLhwIXr06AGj0Qij0Yj4+Hj8/PPP9vqK\\\n",
           "igpMnjwZQUFB8PHxwciRI5GbK19BPjMzE8OGDYOXlxdCQ0Px7LPPotqN/4z888/zOHWq7kbr0mrQ\\\n",
           "BoMBo0ePRtu2bZu+Y0RETnh4eKBTp05O7gPMB3BaVsLLwESXzqUDYOvWrTF37lykpKQgOTkZN998\\\n",
           "M+6++27s27cPADBjxgysWrUKy5cvx+bNm3H69GmMGDHC/nqLxYJhw4ahsrISW7duxWeffYbFixdj\\\n",
           "zpw5zXVIjcpisWDu3Lob/+YC2AwA6NChAx588EF4eHg0ed+IiJzR6XTo1atXPctRyS8DMwASXQbh\\\n",
           "ZgICAsQnn3wiCgoKhE6nE8uXL7fXHThwQAAQSUlJQgghVq9eLdRqtcjJybG3WbhwoTAajcJsNl/y\\\n",
           "9ywsLBQARGFhYcMdSCPIzc0VPj5HBCBqPeYLAEKv14vExERhsViau5tERDLZ2dmiW7duAkCdx1zZ\\\n",
           "77M772zunlJL5yrn66bg0iOAtVksFixduhSlpaWIj49HSkoKqqqqkJCQYG8TGxuLqKgoJCUlAQCS\\\n",
           "kpLQvXt3hIXVXBIdMmQIioqK7KOI7mTDhiyUlMTUKf0GgDT6N2zYMG73RkQtTkhICG6//XYnv5/k\\\n",
           "Q34cASS6dI6LK7mYtLQ0xMfHo6KiAj4+PlixYgW6dOmC1NRU6PV6+Pv7y9qHhYUhJycHAJCTkyML\\\n",
           "f7Z6W119zGYzzGaz/XlRUVEDHU3jsVqt+PTTunslZQP4DRqNBqNGjUKnTp2ao2tERBek0WgQHx8P\\\n",
           "X19fFBbWXsVA/od6ZqY0GYR3sRBdnMsP93Tq1AmpqanYvn07Jk6ciPHjx2P//v2N+j0TExPh5+dn\\\n",
           "f0RGRjbq92sIp0+fxh9/tK5T+i0AK4KDg3H33XdDr9c3R9eIiC4qMjLS4Q96QD7tVwjgWN3bnInI\\\n",
           "KZcPgHq9Hu3bt0ffvn2RmJiInj174r333oPJZEJlZSUKCgpk7XNzc2EymQAAJpPJYVaw7bmtjTOz\\\n",
           "Z89GYWGh/XHy5MmGPagGJoTA11/vQVlZ3dm9ywBIIToqKqrpO0ZEdIlCQ0Od/F4uhXQlo8bhw03W\\\n",
           "JSKX5vIBsC6r1Qqz2Yy+fftCp9Nhw4YN9rr09HRkZmYiPj4eABAfH4+0tDTk5eXZ26xbtw5GoxFd\\\n",
           "unSp93sYDAb70jO2R0tWXV2NpUtFndIsAFuh1WrRq1cv7vpBRC1aQEBAPQtCyxMf1wIkujQufQ/g\\\n",
           "7NmzMXToUERFRaG4uBhLlizBpk2bsHbtWvj5+WHChAmYOXMmAgMDYTQaMXXqVMTHx6N///4AgFtv\\\n",
           "vRVdunTBAw88gHnz5iEnJwcvvvgiJk+e7FYLIVdUmJGe3rNO6TcABPz9/XHjjTfy8i8RtWgGgwHt\\\n",
           "27eHWq2G1Vp7MfsjAK63P+MIINGlcekAmJeXhwcffBDZ2dnw8/NDjx49sHbtWtxyyy0AgHfeeQdq\\\n",
           "tRojR46E2WzGkCFDsGDBAvvrNRoNfvzxR0ycOBHx8fHw9vbG+PHj8eqrrzbXITWKtDQ1Skvr3v/3\\\n",
           "DVQqFQYNGoTrr7+e274RUYum1WoxYMAAGAwGlJeX16qRD/lxBJDo0qiEEHWvDdJlKioqgp+fHwoL\\\n",
           "C1vk5eBZs6yYN6/21f4TUKli0KlTRyxYsAA33XRTs/WNiOhSZWVlYfDgwTh06FCt0r8BWG5/FhUF\\\n",
           "ZGQ0edfIRbT083VTcrt7AMnR8OFqPPhgBby9pb+aAwLW45ZbEvDqq6/a74ckImrp/P390bVr1zql\\\n",
           "8iG/kyelpWCI6MJc+hIwXZr4eCA+3gPz55vx7bfZCAiIx7XXDkNISIiT/TWJiFomnU4Hk8lU5z5A\\\n",
           "x6Vgjh8HOndu+v4RuRKe/RXEx8eAhx4KBxDe3F0hIrpsarUa/v7+0Gg0tQJgCYA8AKH2dgyARBfH\\\n",
           "S8BEROQS1Go1IiIinFy5kK/+zMWgiS6OAZCIiFyCRqNBmzZt4OGw19tx+bPjIKKLYAAkIiKX0bp1\\\n",
           "a/j6+tYp5Qgg0eViACQiIpcRHBzsZE9gjgASXS4GQCIichkGgwEBAQF1Sh1HALnCLdGFMQASEZHL\\\n",
           "8PDwQHR0dJ1S+ZBfcTFw7lzT9YnIFTEAEhGRy/D29sb1119fZ7/2kwCqZe3S0pq0W0QuhwGQiIhc\\\n",
           "hlqtRt++fREWFlar1AJgv6zd1183abeIXA4DIBERuZTg4GCYTKY6pUtlz377ren6Q+SKGACJiMil\\\n",
           "GAwGJzOBf5U9O3gQKClpsi4RuRwGQCIicikeHh4ICQmBSqWqVbob0qVgiRBAampT94zIdTAAEhGR\\\n",
           "S/H29kaHDh2gVtc+hZWj7n2AO3c2abeIXAoDIBERuRS1Wo2wsDBoNJo6NSnyZykgonowABIRkcvx\\\n",
           "8fGpMwIIMAASXToGQCIicjkmkwk6na5OabLs2YEDQGlp0/WJyJUwABIRkcvx8fGBXq+vUyqfCGK1\\\n",
           "Art3N2m3iFwGAyAREbkclUrl5B5Ax4kgnAlM5BwDIBERuRy9Xl9nOzibPbJn+/Y1TX+IXA0DIBER\\\n",
           "uZzg4OA628HZyBPf3r1N0x8iV8MASERELickJAS9e/d2MhNYHgD37ZMWhSYiOQZAIiJyOXq9HjEx\\\n",
           "MdBqtXVq5EN+Z88CublN1y8iV8EASERELkmv1zsZATwOlapcVsL7AIkcMQASEZFLku8FbCOg1R6S\\\n",
           "lfA+QCJHDIBEROSSnI8AAmr1QdlzjgASOWIAJCIil6NSqRAYGOjkHkBACPmQ3549Dk2IFI8BkIiI\\\n",
           "XI5KpYLJZIKXl5dDnRC7ZM/37AGqq5uqZ0SugQGQiIhckp+fHzw8PJzUyANgeTmQnt40fSJyFQyA\\\n",
           "RETkkjQajdN7AIXIg9FYICvbubOJOkXkIhgAiYjIJanVaqcB0GKxIDAwQ1bGAEgkxwBIREQuydvb\\\n",
           "Gz4+Pg7lQggYDPKpvwyARHIMgERE5JICAgLq2Q8Y0OvlM4F37QKs1qboFZFrYAAkIiKXpNVqERgY\\\n",
           "6LROpZJPBCkuBo4caYpeEbkGBkAiInJJWq0W/v7+TusKCw8iOFi+9ktychN0ishFMAASEZFL0ul0\\\n",
           "CA8Pd7olXFlZKTp2LJKV7djRVD0javkYAImIyCVpNBoEBQU5nQlcUVGBmJizsrI//2yqnhG1fAyA\\\n",
           "RETksvR6vdMRwIqKCvj4HJCV7dwJVFU1Vc+IWjYGQCIiclkGg8HpfsDV1dU4e3aNrKyiAti3z6Ep\\\n",
           "kSIxABIRkcuKjo6udy3A3Nz9iI6WTwThfYBEEgZAIiJyWe3atUNMTIzTOrPZjJ49zbIy3gdIJGEA\\\n",
           "JCIil2U0GhEdHe30PsDq6mr06CEPgNu3N1XPiFo2BkAiInJZarUafn5+TmcCl5WVoVMn+VIw+/ZJ\\\n",
           "i0ITKR0DIBERuSyDwYDWrVs7DYBFRUVo1SoHteeIWK28DEwEMAASEZEL02q1aNOmDXQ6nUNdRUUF\\\n",
           "qquL0auXvHzbtqbpG1FLxgBIREQuS6VSwd/fHxqNxqHObDajtLQU8fHy8qSkJuocUQvGAEhERC7N\\\n",
           "x8fH6VqAZrMZWVlZDgFw2zZAiCbqHFELxQBIREQuLTg4GF5eXg7l1dXVyMjIQFycVVaenw8cPdpU\\\n",
           "vSNqmRgAiYjIpfn6+sLX19eh3Gq1Ijs7G61bWxAWJq/jZWBSOgZAIiJyaT4+PggKCnJad/r0aZSV\\\n",
           "Od4H+MEH0oxgIqVymwA4d+5cqFQqTJ8+3V5WUVGByZMnIygoCD4+Phg5ciRyc3Nlr8vMzMSwYcPg\\\n",
           "5eWF0NBQPPvss6iurgYREbkGPz8/hIeHO63Ly8tDYWEhBg6Ul2/dCixY0ASdI2qh3CIA/vnnn/jw\\\n",
           "ww/Ro0cPWfmMGTOwatUqLF++HJs3b8bp06cxYsQIe73FYsGwYcNQWVmJrVu34rPPPsPixYsxZ86c\\\n",
           "pj4EIiK6QlqtFiaTyeluILm5uTh27BjGjwcCA+V18+YB/HuflMrlA2BJSQnGjRuHjz/+GAEBAfby\\\n",
           "wsJC/O9//8Pbb7+Nm2++GX379sWnn36KrVu3Yttfi0D98ssv2L9/P7788kv06tULQ4cOxWuvvYb5\\\n",
           "8+ejsrKyuQ6JiIgug1qtRocOHZzOBC4uLkZycjL8/auxZIm87uRJ4LvvmqiTRC2MywfAyZMnY9iw\\\n",
           "YUhISJCVp6SkoKqqSlYeGxuLqKgoJP11929SUhK6d++OsFp3Bw8ZMgRFRUXYt29fvd/TbDajqKhI\\\n",
           "9iAioubTs2dPBNYd4gNQVVWF9PR0VFZWYsgQoH9/ef077zRRB4laGJcOgEuXLsXOnTuRmJjoUJeT\\\n",
           "kwO9Xg9/f39ZeVhYGHJycuxtwupMDbM9t7VxJjExEX5+fvZHZGTkVR4JERFdjTZt2qBNmzYO5Var\\\n",
           "FTk5OaiqqgIA1LpNHIC0JiB3BiElctkAePLkSUybNg1fffUVPDw8mvR7z549G4WFhfbHyZMnm/T7\\\n",
           "ExGRXFBQENq1a+e07uTJkygvLwcAjBwJ1P2b/d13G7lzRC2QywbAlJQU5OXloU+fPtBqtdBqtdi8\\\n",
           "eTPef/99aLVahIWFobKyEgUFBbLX5ebmwmQyAQBMJpPDrGDbc1sbZwwGA4xGo+xBRETNx8PDA23a\\\n",
           "tIFa7Xhay8vLQ35+PgBAqwWmTpXXf/stkJnZFL0kajlcNgAOHjwYaWlpSE1NtT/69euHcePG2f+t\\\n",
           "0+mwYcMG+2vS09ORmZmJ+L8WhIqPj0daWhry8vLsbdatWwej0YguXbo0+TEREdGV0Wg0iImJcbon\\\n",
           "cHFxMY4dO2Z//uijgLd3Tb3FAvz3v03RS6KWw3HKlIvw9fVFt27dZGXe3t4ICgqyl0+YMAEzZ85E\\\n",
           "YGAgjEYjpk6divj4ePT/6y7gW2+9FV26dMEDDzyAefPmIScnBy+++CImT54Mg8HQ5MdERERXRqVS\\\n",
           "ISIiAgaDwX6/n01FRQUyaw3xBQQADz0EzJ9f0+ajj4CXX5YHQyJ35rIjgJfinXfewR133IGRI0fi\\\n",
           "+uuvh8lkwne15vxrNBr8+OOP0Gg0iI+Px/33348HH3wQr776ajP2moiIrkRISAi8nSQ4i8WC5ORk\\\n",
           "lJSU2MumTQNqLxtYWAh8801T9JKoZVAJIURzd8LVFRUVwc/PD4WFhbwfkIiomZw+fRq33nqr02W8\\\n",
           "OnXqhCVLlqBPnz72sttvB37+uaZNXBxnBLs7nq9ruPUIIBERKUdAQAB69+7tdEeQzMxM/P7777DW\\\n",
           "2gD4iSfkbbZvB3bvbuxeErUMDIBEROQWPDw8cMstt8DHx8ehrqKiAtu2bZPt8jRsGBARIW/38ceN\\\n",
           "3UuiloEBkIiI3IJKpcINN9yADh06ONQJIbB79277cjCAtCTMhAnydl98AZSWNnZPiZofAyAREbmN\\\n",
           "iIgI9OvXz2ldZmYmUlJSUPvW9wkT5JNBioo4GYSUgQGQiIjchk6nQ58+faDT6RzqSktL8fXXX6Ow\\\n",
           "sNBeFh0N3HabvN2HHzZ2L4maHwMgERG5lWuvvRbh4eEO5UIIbN68GXv27JGVO5sMsmNHY/aQqPkx\\\n",
           "ABIRkVvp0KEDBg8e7HRbuPz8fCQnJ8suAzubDPLKK43dS6LmxQBIRERuxcfHB6NHj4avr69DXXV1\\\n",
           "NZKTk2E2m+1lWi0wfbq83erVHAUk98YASEREbqd3796IiYlxWrdz507Z3sAAMGkSEBIib8dRQHJn\\\n",
           "DIBEROR2/P390bNnT6eLQmdkZGDVqlWyPYO9vYG//13ejqOA5M4YAImIyO3odDoMGDAAXl5eDnUV\\\n",
           "FRVYsWIFzp07JyufONFxFPAf/2jEThI1IwZAIiJyOyqVCgMHDkT79u2d1h88eNBhz2Bno4A//yzN\\\n",
           "CiZyNwyARETkltq1a4fbb7/d6Wzg4uJirFixAiUlJbLyiROB0FB521dfbcxeEjUPBkAiInJLer0e\\\n",
           "d999N4KCghzqrFYrfvjhB6SkpMjK67sXMDm5MXtK1PQYAImIyG116NAB/fr1czoZJCsrC0uWLEFl\\\n",
           "ZaWs/MknHe8FfP31xuwlUdNjACQiIrfl7++PUaNGwdvb26HOarViw4YNOHnypKzc2xt4+ml525Ur\\\n",
           "gdTURuwoURNjACQiIrelVqsxZMgQ9OnTx2l9VlYWli9f7jAKOGkSEBgob8tRQHInDIBEROTWTCYT\\\n",
           "7rvvPnh6ejrUmc1m/O9//3OYEezrC8ycKW/7f/8H7N3bmD0lajoMgERE5NbUajVuuOEGdOzY0Wn9\\\n",
           "0aNHMX/+fBQXF8vKp0wB/P3lbTkKSO6CAZCIiNxedHQ0hg8fDr1e71AnhMDKlSvxzTffoLq62l7u\\\n",
           "5+e4R/A33wAHDjRyZ4maAAMgERG5PU9PTzz00EPo37+/0xnB+fn5WLBgAU6cOCErf+opwGiseS4E\\\n",
           "9wgm98AASEREihAVFYXp06cjODjYaX1aWhrmz5+PgoICe1lAgBQCa1u2DNizpxE7StQEGACJiEgR\\\n",
           "1Go1br75ZgwdOhQajcahvqqqCl999RXWrFkDq9VqL3/6acd7AefMaeTOEjUyBkAiIlIMPz8/TJs2\\\n",
           "DZ07d3Zaf+bMGbz33nuytQH9/Z2vC/jnn43YUaJGxgBIRESK0qNHD0yZMsXp4tAAsGvXLixYsEC2\\\n",
           "T/C0aUDdHeVeeqkxe0nUuBgAiYhIUbRaLUaMGIEbb7wRarXjadC2NuDGjRvtl4J9fYHnnpO3W7sW\\\n",
           "+O23pugxUcNjACQiIsUJCQnByy+/XO+l4LNnz2LevHlIT0+3l02aBJhM8nb33gtYLI3ZU6LGwQBI\\\n",
           "RESK1KtXLzzxxBMwGAxO63fs2IE333zTPivYywt44QV5m5wcIDIS+PhjwGxu5A4TNSAGQCIiUiSd\\\n",
           "TodRo0YhISHB6aXgqqoqLF++HB999BHKysoAAI89JgW+2rKzgccfB9q2Bd56C6izoQhRi8QASERE\\\n",
           "ihUWFoaXX34ZsbGxTutLSkrw1ltv4csvv4TZbIbBAPzrX87fKzsbePZZICoKePFF4MyZRuw40VVi\\\n",
           "ACQiIsVSqVTo06cPpk6dioCAAKdtzpw5g9dffx2ff/45ysrKMHYs8MMPQO/ezt+zoAD45z+B6Ghp\\\n",
           "EenMzMbrP9GVYgAkIiJF02g0GDNmDMaNGwedTue0zcmTJ/H8889j0aJFKC8vx513Aikp0kzgm25y\\\n",
           "/r7l5cB//gO0bw9MmAAcPtyIB0F0mRgAiYhI8fz9/TFjxgwMGTIEWq3WaZv8/Hy89tprWLhwIQoK\\\n",
           "CqBSAbfeCmzcCCQlAcOHO3/vqipg0SIgNhYYM4bbyFHLwABIREQEoG3btnjllVcQFxcHlUrltE1e\\\n",
           "Xh5ee+01/Otf/0J+fr69vH9/YMUKYP9+4KGHAGcZ0mqV9hHu2RO46y5g27ZGOhCiS8AASEREBOl+\\\n",
           "wF69euH1119Hz5496w2BBQUFePfdd/Hiiy/KtowDgM6dgU8/BY4eBaZMATw8nH+vVauA+Hhg6FDp\\\n",
           "UjJRU2MAJCIi+otarcbAgQOxYMECxMfHO10eBgAqKiqwePFiTJw4Edu2bYO5ziKAUVHS/X8nTgCz\\\n",
           "Zkk7iTizZg3Qrx8wYgSwd28DHwzRBTAAEhER1aLVatG/f38kJiaiW7du9Y4Ems1mrF69Gvfffz/m\\\n",
           "z5+PvLw8hzZhYcDcuUBGBvDqq0BgoPPvuWIF0KMHcN99wKFDDXk0RM4xABIREdWhUqnQv39/zJ07\\\n",
           "F3FxcfVODBFC4OjRo5gzZw4eeeQRrF+/HiUlJQ7tAgKAl16SguBbb0nB0PG9gK+/Brp0AR5+GDh4\\\n",
           "sKGPiqiGSgghmrsTrq6oqAh+fn4oLCyE0Whs7u4QEVEDqaqqwv79+zF37lysXLkS5eXl9bZVqVQw\\\n",
           "mUwYOXIknnjiCXTs2BF6vd5p29JSYP58aVHpc+fq//533iktLj1wIFDPQCRdBp6vazAANgB+oIiI\\\n",
           "3Ft2djbmz5+P+fPn2/cGro9Go0H79u3x+OOP495770WrVq3qvYxcWAi8+y7w739feAu5uDgpCA4f\\\n",
           "Dmg0V3wYisfzdQ0GwAbADxQRkfsrLi7GsmXL8NZbb+HQoUO42OnTy8sLPXr0wGOPPYZbbrkFERER\\\n",
           "0NST3s6elS4Nv/8+8Ne2w061bw/MnAmMHw94eV3N0SgTz9c1GAAbAD9QRETKUF1dja1btyIxMRG/\\\n",
           "/vqrw+xfZzw9PdG3b1/cfffdGD58OKKiouq9NJybK4XABQukLeXqExgIPPEEMGkS0Lr1FR6MAvF8\\\n",
           "XYMBsAHwA0VEpBxCCJw6dQrvvfcevvrqK2RnZ1/S63Q6HaKiojBixAjcdttt6N69O4KCgpwuNVNc\\\n",
           "DPzvf8A771x4L2GtFvjb34Dp06XLxHRhPF/XYABsAPxAEREpT0FBAbZv347PPvsM69atw9mzZy96\\\n",
           "WRiQ7hEMDg5G586dMXz4cNx1112IiIiAwWBwaFtVBXz7LfDmm8CuXRd+3/79gWnTgJEjgXq2NFY8\\\n",
           "nq9rMAA2AH6giIiUq6ysDD/99BPefvttJCcno7q6+pJfq9FoEBsbi1tuuQU333wz+vfv73RUUAhp\\\n",
           "z+G33pIWj76QyEjgv/+VtpsjOZ6vazAANgB+oIiIlM1isSArKwtffPEFli1bhvT0dFRVVV3y6zUa\\\n",
           "DXx8fBAbG4vRo0djxIgRiIyMdHp5+OBB6T7Bzz678ISRJ58E3nsPqOd2Q0Xi+boGA2AD4AeKiIgA\\\n",
           "oLKyEgcOHMDKlSuxfPlyHDt2DGUXSmlOGAwG9O7dG4888giGDRuGsLAwp7OHz50DPvlE2nIuK8v5\\\n",
           "ew0YIF1CDg+/kqNxPzxf12AAbAD8QBERUW0WiwXZ2dlYu3Ytli1bhq1bt6K0tPSy3kOv16NXr14Y\\\n",
           "P3487rnnHphMJqfrCVZVSVvJvfMOsG2b4/tERAD/93/SPYJKx/N1DQbABsAPFBEROWO1WpGfn49N\\\n",
           "mzZhyZIl2LVrF3Jzcy9p+Rgbb29v9OrVCw8++CBuv/12REREOL00LATw6afAlClA3Q1L9HppaZkJ\\\n",
           "E672iFwbz9c1GAAbAD9QRER0IUIIFBcXY//+/fjjjz/w7bffIi0tDeXl5bBarZf0HgaDAQMHDsSU\\\n",
           "KVNw6623wquelaBTU6UdQzIyHOsmTZJGCpV6XyDP1zUc/4RwIf/4xz+gUqlkj9jYWHt9RUUFJk+e\\\n",
           "jKCgIPj4+GDkyJHIzc2VvUdmZiaGDRsGLy8vhIaG4tlnn72sGVxEREQXo1KpYDQa0b9/f0yfPh2r\\\n",
           "Vq3CF198gUcffRRdu3Z1ugRMXWazGRs2bMAjjzyCGTNmYP/+/U7DY69eQHIycPPNju+xYAGQkCDt\\\n",
           "PELK5tIBEAC6du2K7Oxs++P333+3182YMQOrVq3C8uXLsXnzZpw+fRojRoyw11ssFgwbNgyVlZXY\\\n",
           "unUrPvvsMyxevBhz5sxpjkMhIiIFsK0DOHz4cLz77rv47rvv8NZbb6Fv377w8PC46OvPnz+PRYsW\\\n",
           "YcKECfj+++9RUlLi0CY4GFi7Vto2rq7ffpPuBzx8uCGOhlyWcGEvv/yy6Nmzp9O6goICodPpxPLl\\\n",
           "y+1lBw4cEABEUlKSEEKI1atXC7VaLXJycuxtFi5cKIxGozCbzZfcj8LCQgFAFBYWXtmBEBGRolmt\\\n",
           "VnHq1Cnx1ltviT59+gidTicAXPQREBAgpk2bJg4dOiSsVqvT9/7qKyE8PISQ7hKseQQGCrF5cxMf\\\n",
           "aDPj+bqGy48AHj58GBEREWjXrh3GjRuHzL/2zElJSUFVVRUSEhLsbWNjYxEVFYWkpCQAQFJSErp3\\\n",
           "746wsDB7myFDhqCoqAj79u1r2gMhIiLFUqlUiIiIwLRp0/Ddd99h3rx56NOnT717BtucP38eCxYs\\\n",
           "wBNPPIFNmzY5XXvwvvuArVsd9ww+d066HPzllw15JOQqXDoAxsXFYfHixVizZg0WLlyI48ePY9Cg\\\n",
           "QSguLkZOTg70ej38/f1lrwkLC0NOTg4AICcnRxb+bPW2uvqYzWYUFRXJHkRERFdLq9UiOjoaU6dO\\\n",
           "xddff42XXnoJUVFRTmf92lRVVWHTpk145JFH8PHHH6OgoMChTe/ewPbt0lf5a4EHHgD+8Q9pXJCU\\\n",
           "w6UD4NChQzFq1Cj06NEDQ4YMwerVq1FQUIBvvvmmUb9vYmIi/Pz87I/IyMhG/X5ERKQsGo0GHTt2\\\n",
           "xHPPPYcVK1bggQcegJ+fX73thRA4ceIEnnnmGUyaNAl79+51mCASEQFs2QLceafj6195Bbj/fqCi\\\n",
           "oqGPhFoqlw6Adfn7+6Njx444cuQITCYTKisrHf4Sys3NhclkAgCYTCaHWcG257Y2zsyePRuFhYX2\\\n",