Files
projet_dd/Main.ipynb

861 lines
209 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "8b22a2d1",
"metadata": {},
"source": [
"# Introduction\n",
"\n",
"Bonjour et bienvenue dans le notebook du projet sur les bases de données tablebase.\n",
"\n",
"Dans ce notebook. Nous allons montrer comme fonctionne le stockage d'une base de données tablebases en prenant comme exemple la table base \"syzygy\" avec comme taille 3 à 5 pièces pour des raisons de taille.\n",
"Nous allons expliquer comment les finales ( ou position d'échecs) sont stockés dans le format key-value puis nous verrons ensuite les performances de la base à l'aide de Redis.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "78fdf40a",
"metadata": {
"ExecuteTime": {
"end_time": "2025-12-06T09:21:56.560113Z",
"start_time": "2025-12-06T09:21:56.104871Z"
}
},
"outputs": [],
"source": [
"#import du projet\n",
"import redis\n",
"import time\n",
"import chess\n",
"import chess.syzygy\n",
"import random\n",
"import numpy as np\n",
"import pandas as pd\n",
"import os\n",
"import hashlib\n",
"from IPython.display import display\n",
"from scipy import stats\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "d584aba1",
"metadata": {},
"source": [
"## Peuplement de Redis\n",
"\n",
"Dans un premier temps, on ajoute les positions de la tablebase à Redis afin de pouvoir les utilisers derrières pour faire les tests."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "e6058974",
"metadata": {
"ExecuteTime": {
"end_time": "2025-12-06T09:22:49.905572Z",
"start_time": "2025-12-06T09:22:06.592819Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Configs ok: {'KRvK', 'KQvKP', 'KRvKB', 'KNvK', 'KRBvKP', 'KBvK', 'KBNvK', 'KPvK', 'KPvKP', 'KRPvKP', 'KQvK'}\n"
]
},
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 390 390\" width=\"390\" height=\"390\"><desc><pre>. . . . k . . .\n",
". . . . . . . .\n",
". . . n . . . .\n",
". . . . . . . .\n",
". . . . . . . p\n",
". P . . . . . .\n",
". . . . B . . .\n",
". . . . K . . .</pre></desc><defs><g id=\"white-pawn\" class=\"white pawn\"><path d=\"M22.5 9c-2.21 0-4 1.79-4 4 0 .89.29 1.71.78 2.38C17.33 16.5 16 18.59 16 21c0 2.03.94 3.84 2.41 5.03-3 1.06-7.41 5.55-7.41 13.47h23c0-7.92-4.41-12.41-7.41-13.47 1.47-1.19 2.41-3 2.41-5.03 0-2.41-1.33-4.5-3.28-5.62.49-.67.78-1.49.78-2.38 0-2.21-1.79-4-4-4z\" fill=\"#fff\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linecap=\"round\" /></g><g id=\"white-bishop\" class=\"white bishop\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><g fill=\"#fff\" stroke-linecap=\"butt\"><path d=\"M9 36c3.39-.97 10.11.43 13.5-2 3.39 2.43 10.11 1.03 13.5 2 0 0 1.65.54 3 2-.68.97-1.65.99-3 .5-3.39-.97-10.11.46-13.5-1-3.39 1.46-10.11.03-13.5 1-1.354.49-2.323.47-3-.5 1.354-1.94 3-2 3-2zM15 32c2.5 2.5 12.5 2.5 15 0 .5-1.5 0-2 0-2 0-2.5-2.5-4-2.5-4 5.5-1.5 6-11.5-5-15.5-11 4-10.5 14-5 15.5 0 0-2.5 1.5-2.5 4 0 0-.5.5 0 2zM25 8a2.5 2.5 0 1 1-5 0 2.5 2.5 0 1 1 5 0z\" /></g><path d=\"M17.5 26h10M15 30h15m-7.5-14.5v5M20 18h5\" stroke-linejoin=\"miter\" /></g><g id=\"white-king\" class=\"white king\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22.5 11.63V6M20 8h5\" stroke-linejoin=\"miter\" /><path d=\"M22.5 25s4.5-7.5 3-10.5c0 0-1-2.5-3-2.5s-3 2.5-3 2.5c-1.5 3 3 10.5 3 10.5\" fill=\"#fff\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" /><path d=\"M11.5 37c5.5 3.5 15.5 3.5 21 0v-7s9-4.5 6-10.5c-4-6.5-13.5-3.5-16 4V27v-3.5c-3.5-7.5-13-10.5-16-4-3 6 5 10 5 10V37z\" fill=\"#fff\" /><path d=\"M11.5 30c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0\" /></g><g id=\"black-pawn\" class=\"black pawn\"><path d=\"M22.5 9c-2.21 0-4 1.79-4 4 0 .89.29 1.71.78 2.38C17.33 16.5 16 18.59 16 21c0 2.03.94 3.84 2.41 5.03-3 1.06-7.41 5.55-7.41 13.47h23c0-7.92-4.41-12.41-7.41-13.47 1.47-1.19 2.41-3 2.41-5.03 0-2.41-1.33-4.5-3.28-5.62.49-.67.78-1.49.78-2.38 0-2.21-1.79-4-4-4z\" fill=\"#000\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linecap=\"round\" /></g><g id=\"black-knight\" class=\"black knight\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M 22,10 C 32.5,11 38.5,18 38,39 L 15,39 C 15,30 25,32.5 23,18\" style=\"fill:#000000; stroke:#000000;\" /><path d=\"M 24,18 C 24.38,20.91 18.45,25.37 16,27 C 13,29 13.18,31.34 11,31 C 9.958,30.06 12.41,27.96 11,28 C 10,28 11.19,29.23 10,30 C 9,30 5.997,31 6,26 C 6,24 12,14 12,14 C 12,14 13.89,12.1 14,10.5 C 13.27,9.506 13.5,8.5 13.5,7.5 C 14.5,6.5 16.5,10 16.5,10 L 18.5,10 C 18.5,10 19.28,8.008 21,7 C 22,7 22,10 22,10\" style=\"fill:#000000; stroke:#000000;\" /><path d=\"M 9.5 25.5 A 0.5 0.5 0 1 1 8.5,25.5 A 0.5 0.5 0 1 1 9.5 25.5 z\" style=\"fill:#ececec; stroke:#ececec;\" /><path d=\"M 15 15.5 A 0.5 1.5 0 1 1 14,15.5 A 0.5 1.5 0 1 1 15 15.5 z\" transform=\"matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)\" style=\"fill:#ececec; stroke:#ececec;\" /><path d=\"M 24.55,10.4 L 24.1,11.85 L 24.6,12 C 27.75,13 30.25,14.49 32.5,18.75 C 34.75,23.01 35.75,29.06 35.25,39 L 35.2,39.5 L 37.45,39.5 L 37.5,39 C 38,28.94 36.62,22.15 34.25,17.66 C 31.88,13.17 28.46,11.02 25.06,10.5 L 24.55,10.4 z \" style=\"fill:#ececec; stroke:none;\" /></g><g id=\"black-king\" class=\"black king\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22.5 11.63V6\" stroke-linejoin=\"miter\" /><path d=\"M22.5 25s4.5-7.5 3-10.5c0 0-1-2.5-3-2.5s-3 2.5-3 2.5c-1.5 3 3 10.5 3 10.5\" fill=\"#000\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" /><path d=\"M11.5 37c5.5 3.5 15.5 3.5 21 0v-7s9-4.5 6-10.5c-4-6.5-13.5-3.5-16 4V27v-3.5c-3.5-7.5-13-10.5-16-4-3 6 5 10 5 10V37z\" fill=\"#000\" /><path d=\"M20 8h5\" stroke-linejoin=\"miter\" /><path d=\"M32 29.5s8.5-4 6.03-9.65C34.15 14 25 18 22.5 24.5l.01 2.1-.01-2.1C20 18 9.906 14 6.997 19.85c-2.497 5.65 4.853 9 4.853 9M11.5 30c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0\" stroke=\"#fff\" /></g></defs><rect x=\"7.5\" y=\"7.5\" width=\"375\" height=\"375\" fill=\"none\" stroke=\"#212121\" stroke-width=\"15\" /><g transform=\"translate(20, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M23.328 10.016q-1.742 0-2.414.398-.672.398-.672 1.36 0 .765.5 1.218.508.445 1.375.445 1.196 0 1.914-.843.727-.852.727-2.258v-.32zm2.867-.594v4.992h-1.437v-1.328q-.492.797-1.227 1.18-.734.375-1.797.375-1.343 0-2.14-.75-.79-.758-.79-2.024 0-1.476.985-2.226.992-.75 2.953-.75h2.016V8.75q0-.992-.656-1.531-.649-.547-1.829-.547-.75 0-1.46.18-.711.18-1.368.539V6.062q.79-.304 1.532-.453.742-.156 1.445-.156 1.898 0 2.836.984.937.985.937 2.985z\" /></g><g transform=\"translate(20, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M23.328 10.016q-1.742 0-2.414.398-.672.398-.672 1.36 0 .765.5 1.218.508.445 1.375.445 1.196 0 1.914-.843.727-.852.727-2.258v-.32zm2.867-.594v4.992h-1.437v-1.328q-.492.797-1.227 1.18-.734.375-1.797.375-1.343 0-2.14-.75-.79-.758-.79-2.024 0-1.476.985-2.226.992-.75 2.953-.75h2.016V8.75q0-.992-.656-1.531-.649-.547-1.829-.547-.75 0-1.46.18-.711.18-1.368.539V6.062q.79-.304 1.532-.453.742-.156 1.445-.156 1.898 0 2.836.984.937.985.937 2.985z\" /></g><g transform=\"translate(65, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M24.922 10.047q0-1.586-.656-2.485-.649-.906-1.79-.906-1.14 0-1.796.906-.649.899-.649 2.485 0 1.586.649 2.492.656.898 1.797.898 1.14 0 1.789-.898.656-.906.656-2.492zm-4.89-3.055q.452-.781 1.14-1.156.695-.383 1.656-.383 1.594 0 2.586 1.266 1 1.265 1 3.328 0 2.062-1 3.328-.992 1.266-2.586 1.266-.96 0-1.656-.375-.688-.383-1.14-1.164v1.312h-1.446V2.258h1.445z\" /></g><g transform=\"translate(65, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M24.922 10.047q0-1.586-.656-2.485-.649-.906-1.79-.906-1.14 0-1.796.906-.649.899-.649 2.485 0 1.586.649 2.492.656.898 1.797.898 1.14 0 1.789-.898.656-.906.656-2.492zm-4.89-3.055q.452-.781 1.14-1.156.695-.383 1.656-.383 1.594 0 2.586 1.266 1 1.265 1 3.328 0 2.062-1 3.328-.992 1.266-2.586 1.266-.96 0-1.656-.375-.688-.383-1.14-1.164v1.312h-1.446V2.258h1.445z\" /></g><g transform=\"translate(110, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M25.96 6v1.344q-.608-.336-1.226-.5-.609-.172-1.234-.172-1.398 0-2.172.89-.773.883-.773 2.485 0 1.601.773 2.492.774.883 2.172.883.625 0 1.234-.164.618-.172 1.227-.508v1.328q-.602.281-1.25.422-.64.14-1.367.14-1.977 0-3.14-1.242-1.165-1.242-1.165-3.351 0-2.14 1.172-3.367 1.18-1.227 3.227-1.227.664 0 1.296.14.633.134 1.227.407z\" /></g><g transform=\"translate(110, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M25.96 6v1.344q-.608-.336-1.226-.5-.609-.172-1.234-.172-1.398 0-2.172.89-.773.883-.773 2.485 0 1.601.773 2.492.774.883 2.172.883.625 0 1.234-.164.618-.172 1.227-.508v1.328q-.602.281-1.25.422-.64.14-1.367.14-1.977 0-3.14-1.242-1.165-1.242-1.165-3.351 0-2.14 1.172-3.367 1.18-1.227 3.227-1.227.664 0 1.296.14.633.134 1.227.407z\" /></g><g transform=\"translate(155, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M24.973 6.992V2.258h1.437v12.156h-1.437v-1.312q-.453.78-1.149 1.164-.687.375-1.656.375-1.586 0-2.586-1.266-.992-1.266-.992-3.328 0-2.063.992-3.328 1-1.266 2.586-1.266.969 0 1.656.383.696.375 1.149 1.156zm-4.899 3.055q0 1.586.649 2.492.656.898 1.797.898 1.14 0 1.796-.898.657-.906.657-2.492 0-1.586-.657-2.485-.656-.906-1.796-.906-1.141 0-1.797.906-.649.899-.649 2.485z\" /></g><g transform=\"translate(155, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M24.973 6.992V2.258h1.437v12.156h-1.437v-1.312q-.453.78-1.149 1.164-.687.375-1.656.375-1.586 0-2.586-1.266-.992-1.266-.992-3.328 0-2.063.992-3.328 1-1.266 2.586-1.266.969 0 1.656.383.696.375 1.149 1.156zm-4.899 3.055q0 1.586.649 2.492.656.898 1.797.898 1.14 0 1.796-.898.657-.906.657-2.492 0-1.586-.657-2.485-.656-.906-1.796-.906-1.141 0-1.797.906-.649.899-.649 2.485z\" /></g><g transform=\"translate(200, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M26.555 9.68v.703h-6.61q.094 1.484.89 2.265.806.774 2.235.774.828 0 1.602-.203.781-.203 1.547-.61v1.36q-.774.328-1.586.5-.813.172-1.649.172-2.093 0-3.32-1.22-1.219-1.218-1.219-3.296 0-2.148 1.157-3.406 1.164-1.266 3.132-1.266 1.766 0 2.79 1.14 1.03 1.134 1.03 3.087zm-1.438-.422q-.015-1.18-.664-1.883-.64-.703-1.703-.703-1.203 0-1.93.68-.718.68-.828 1.914z\" /></g><g transform=\"translate(200, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M26.555 9.68v.703h-6.61q.094 1.484.89 2.265.806.774 2.235.774.828 0 1.602-.203.781-.203 1.547-.61v1.36q-.774.328-1.586.5-.813.172-1.649.172-2.093 0-3.32-1.22-1.219-1.218-1.219-3.296 0-2.148 1.157-3.406 1.164-1.266 3.132-1.266 1.766 0 2.79 1.14 1.03 1.134 1.03 3.087zm-1.438-.422q-.015-1.18-.664-1.883-.64-.703-1.703-.703-1.203 0-1.93.68-.718.68-.828 1.914z\" /></g><g transform=\"translate(245, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M25.285 2.258v1.195H23.91q-.773 0-1.078.313-.297.312-.297 1.125v.773h2.367v1.117h-2.367v7.633H21.09V6.781h-1.375V5.664h1.375v-.61q0-1.46.68-2.124.68-.672 2.156-.672z\" /></g><g transform=\"translate(245, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M25.285 2.258v1.195H23.91q-.773 0-1.078.313-.297.312-.297 1.125v.773h2.367v1.117h-2.367v7.633H21.09V6.781h-1.375V5.664h1.375v-.61q0-1.46.68-2.124.68-.672 2.156-.672z\" /></g><g transform=\"translate(290, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M24.973 9.937q0-1.562-.649-2.421-.64-.86-1.804-.86-1.157 0-1.805.86-.64.859-.64 2.421 0 1.555.64 2.415.648.859 1.805.859 1.164 0 1.804-.86.649-.859.649-2.414zm1.437 3.391q0 2.234-.992 3.32-.992 1.094-3.04 1.094-.757 0-1.429-.117-.672-.11-1.304-.344v-1.398q.632.344 1.25.508.617.164 1.257.164 1.414 0 2.118-.743.703-.734.703-2.226v-.711q-.446.773-1.141 1.156-.695.383-1.664.383-1.61 0-2.594-1.227-.984-1.226-.984-3.25 0-2.03.984-3.257.985-1.227 2.594-1.227.969 0 1.664.383t1.14 1.156V5.664h1.438z\" /></g><g transform=\"translate(290, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M24.973 9.937q0-1.562-.649-2.421-.64-.86-1.804-.86-1.157 0-1.805.86-.64.859-.64 2.421 0 1.555.64 2.415.648.859 1.805.859 1.164 0 1.804-.86.649-.859.649-2.414zm1.437 3.391q0 2.234-.992 3.32-.992 1.094-3.04 1.094-.757 0-1.429-.117-.672-.11-1.304-.344v-1.398q.632.344 1.25.508.617.164 1.257.164 1.414 0 2.118-.743.703-.734.703-2.226v-.711q-.446.773-1.141 1.156-.695.383-1.664.383-1.61 0-2.594-1.227-.984-1.226-.984-3.25 0-2.03.984-3.257.985-1.227 2.594-1.227.969 0 1.664.383t1.14 1.156V5.664h1.438z\" /></g><g transform=\"translate(335, 1) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M26.164 9.133v5.281h-1.437V9.18q0-1.243-.485-1.86-.484-.617-1.453-.617-1.164 0-1.836.742-.672.742-.672 2.024v4.945h-1.445V2.258h1.445v4.765q.516-.789 1.211-1.18.703-.39 1.617-.39 1.508 0 2.282.938.773.93.773 2.742z\" /></g><g transform=\"translate(335, 375) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M26.164 9.133v5.281h-1.437V9.18q0-1.243-.485-1.86-.484-.617-1.453-.617-1.164 0-1.836.742-.672.742-.672 2.024v4.945h-1.445V2.258h1.445v4.765q.516-.789 1.211-1.18.703-.39 1.617-.39 1.508 0 2.282.938.773.93.773 2.742z\" /></g><g transform=\"translate(0, 335) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M6.754 26.996h2.578v-8.898l-2.805.562v-1.437l2.79-.563h1.578v10.336h2.578v1.328h-6.72z\" /></g><g transform=\"translate(375, 335) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M6.754 26.996h2.578v-8.898l-2.805.562v-1.437l2.79-.563h1.578v10.336h2.578v1.328h-6.72z\" /></g><g transform=\"translate(0, 290) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M8.195 26.996h5.508v1.328H6.297v-1.328q.898-.93 2.445-2.492 1.555-1.57 1.953-2.024.758-.851 1.055-1.437.305-.594.305-1.164 0-.93-.657-1.516-.648-.586-1.695-.586-.742 0-1.57.258-.82.258-1.758.781v-1.593q.953-.383 1.781-.578.828-.196 1.516-.196 1.812 0 2.89.906 1.079.907 1.079 2.422 0 .72-.274 1.368-.265.64-.976 1.515-.196.227-1.243 1.313-1.046 1.078-2.953 3.023z\" /></g><g transform=\"translate(375, 290) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M8.195 26.996h5.508v1.328H6.297v-1.328q.898-.93 2.445-2.492 1.555-1.57 1.953-2.024.758-.851 1.055-1.437.305-.594.305-1.164 0-.93-.657-1.516-.648-.586-1.695-.586-.742 0-1.57.258-.82.258-1.758.781v-1.593q.953-.383 1.781-.578.828-.196 1.516-.196 1.812 0 2.89.906 1.079.907 1.079 2.422 0 .72-.274 1.368-.265.64-.976 1.515-.196.227-1.243 1.313-1.046 1.078-2.953 3.023z\" /></g><g transform=\"translate(0, 245) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M11.434 22.035q1.132.242 1.765 1.008.64.766.64 1.89 0 1.727-1.187 2.672-1.187.946-3.375.946-.734 0-1.515-.149-.774-.14-1.602-.43V26.45q.656.383 1.438.578.78.196 1.632.196 1.485 0 2.258-.586.782-.586.782-1.703 0-1.032-.727-1.61-.719-.586-2.008-.586h-1.36v-1.297h1.423q1.164 0 1.78-.46.618-.47.618-1.344 0-.899-.64-1.375-.633-.485-1.82-.485-.65 0-1.391.141-.743.14-1.633.437V16.95q.898-.25 1.68-.375.788-.125 1.484-.125 1.797 0 2.844.82 1.046.813 1.046 2.204 0 .968-.554 1.64-.555.664-1.578.922z\" /></g><g transform=\"translate(375, 245) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M11.434 22.035q1.132.242 1.765 1.008.64.766.64 1.89 0 1.727-1.187 2.672-1.187.946-3.375.946-.734 0-1.515-.149-.774-.14-1.602-.43V26.45q.656.383 1.438.578.78.196 1.632.196 1.485 0 2.258-.586.782-.586.782-1.703 0-1.032-.727-1.61-.719-.586-2.008-.586h-1.36v-1.297h1.423q1.164 0 1.78-.46.618-.47.618-1.344 0-.899-.64-1.375-.633-.485-1.82-.485-.65 0-1.391.141-.743.14-1.633.437V16.95q.898-.25 1.68-.375.788-.125 1.484-.125 1.797 0 2.844.82 1.046.813 1.046 2.204 0 .968-.554 1.64-.555.664-1.578.922z\" /></g><g transform=\"translate(0, 200) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M11.016 18.035L7.03 24.262h3.985zm-.414-1.375h1.984v7.602h1.664v1.312h-1.664v2.75h-1.57v-2.75H5.75v-1.523z\" /></g><g transform=\"translate(375, 200) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M11.016 18.035L7.03 24.262h3.985zm-.414-1.375h1.984v7.602h1.664v1.312h-1.664v2.75h-1.57v-2.75H5.75v-1.523z\" /></g><g transform=\"translate(0, 155) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M6.719 16.66h6.195v1.328h-4.75v2.86q.344-.118.688-.172.343-.063.687-.063 1.953 0 3.094 1.07 1.14 1.07 1.14 2.899 0 1.883-1.171 2.93-1.172 1.039-3.305 1.039-.735 0-1.5-.125-.758-.125-1.57-.375v-1.586q.703.383 1.453.57.75.188 1.586.188 1.351 0 2.14-.711.79-.711.79-1.93 0-1.219-.79-1.93-.789-.71-2.14-.71-.633 0-1.266.14-.625.14-1.281.438z\" /></g><g transform=\"translate(375, 155) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M6.719 16.66h6.195v1.328h-4.75v2.86q.344-.118.688-.172.343-.063.687-.063 1.953 0 3.094 1.07 1.14 1.07 1.14 2.899 0 1.883-1.171 2.93-1.172 1.039-3.305 1.039-.735 0-1.5-.125-.758-.125-1.57-.375v-1.586q.703.383 1.453.57.75.188 1.586.188 1.351 0 2.14-.711.79-.711.79-1.93 0-1.219-.79-1.93-.789-.71-2.14-.71-.633 0-1.266.14-.625.14-1.281.438z\" /></g><g transform=\"translate(0, 110) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M10.137 21.863q-1.063 0-1.688.727-.617.726-.617 1.992 0 1.258.617 1.992.625.727 1.688.727 1.062 0 1.68-.727.624-.734.624-1.992 0-1.266-.625-1.992-.617-.727-1.68-.727zm3.133-4.945v1.437q-.594-.28-1.204-.43-.601-.148-1.195-.148-1.562 0-2.39 1.055-.82 1.055-.938 3.188.46-.68 1.156-1.04.696-.367 1.531-.367 1.758 0 2.774 1.07 1.023 1.063 1.023 2.899 0 1.797-1.062 2.883-1.063 1.086-2.828 1.086-2.024 0-3.094-1.547-1.07-1.555-1.07-4.5 0-2.766 1.312-4.406 1.313-1.649 3.524-1.649.593 0 1.195.117.61.118 1.266.352z\" /></g><g transform=\"translate(375, 110) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M10.137 21.863q-1.063 0-1.688.727-.617.726-.617 1.992 0 1.258.617 1.992.625.727 1.688.727 1.062 0 1.68-.727.624-.734.624-1.992 0-1.266-.625-1.992-.617-.727-1.68-.727zm3.133-4.945v1.437q-.594-.28-1.204-.43-.601-.148-1.195-.148-1.562 0-2.39 1.055-.82 1.055-.938 3.188.46-.68 1.156-1.04.696-.367 1.531-.367 1.758 0 2.774 1.07 1.023 1.063 1.023 2.899 0 1.797-1.062 2.883-1.063 1.086-2.828 1.086-2.024 0-3.094-1.547-1.07-1.555-1.07-4.5 0-2.766 1.312-4.406 1.313-1.649 3.524-1.649.593 0 1.195.117.61.118 1.266.352z\" /></g><g transform=\"translate(0, 65) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M6.25 16.66h7.5v.672L9.516 28.324H7.867l3.985-10.336H6.25z\" /></g><g transform=\"translate(375, 65) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M6.25 16.66h7.5v.672L9.516 28.324H7.867l3.985-10.336H6.25z\" /></g><g transform=\"translate(0, 20) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M10 22.785q-1.125 0-1.773.602-.641.601-.641 1.656t.64 1.656q.649.602 1.774.602t1.773-.602q.649-.61.649-1.656 0-1.055-.649-1.656-.64-.602-1.773-.602zm-1.578-.672q-1.016-.25-1.586-.945-.563-.695-.563-1.695 0-1.399.993-2.211 1-.813 2.734-.813 1.742 0 2.734.813.993.812.993 2.21 0 1-.57 1.696-.563.695-1.571.945 1.14.266 1.773 1.04.641.773.641 1.89 0 1.695-1.04 2.602-1.03.906-2.96.906t-2.969-.906Q6 26.738 6 25.043q0-1.117.64-1.89.641-.774 1.782-1.04zm-.578-2.492q0 .906.562 1.414.57.508 1.594.508 1.016 0 1.586-.508.578-.508.578-1.414 0-.906-.578-1.414-.57-.508-1.586-.508-1.023 0-1.594.508-.562.508-.562 1.414z\" /></g><g transform=\"translate(375, 20) scale(0.75, 0.75)\" fill=\"#e5e5e5\" stroke=\"#e5e5e5\"><path d=\"M10 22.785q-1.125 0-1.773.602-.641.601-.641 1.656t.64 1.656q.649.602 1.774.602t1.773-.602q.649-.61.649-1.656 0-1.055-.649-1.656-.64-.602-1.773-.602zm-1.578-.672q-1.016-.25-1.586-.945-.563-.695-.563-1.695 0-1.399.993-2.211 1-.813 2.734-.813 1.742 0 2.734.813.993.812.993 2.21 0 1-.57 1.696-.563.695-1.571.945 1.14.266 1.773 1.04.641.773.641 1.89 0 1.695-1.04 2.602-1.03.906-2.96.906t-2.969-.906Q6 26.738 6 25.043q0-1.117.64-1.89.641-.774 1.782-1.04zm-.578-2.492q0 .906.562 1.414.57.508 1.594.508 1.016 0 1.586-.508.578-.508.578-1.414 0-.906-.578-1.414-.57-.508-1.586-.508-1.023 0-1.594.508-.562.508-.562 1.414z\" /></g><rect x=\"15\" y=\"330\" width=\"45\" height=\"45\" class=\"square dark a1\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"60\" y=\"330\" width=\"45\" height=\"45\" class=\"square light b1\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"105\" y=\"330\" width=\"45\" height=\"45\" class=\"square dark c1\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"150\" y=\"330\" width=\"45\" height=\"45\" class=\"square light d1\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"195\" y=\"330\" width=\"45\" height=\"45\" class=\"square dark e1\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"240\" y=\"330\" width=\"45\" height=\"45\" class=\"square light f1\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"285\" y=\"330\" width=\"45\" height=\"45\" class=\"square dark g1\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"330\" y=\"330\" width=\"45\" height=\"45\" class=\"square light h1\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"15\" y=\"285\" width=\"45\" height=\"45\" class=\"square light a2\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"60\" y=\"285\" width=\"45\" height=\"45\" class=\"square dark b2\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"105\" y=\"285\" width=\"45\" height=\"45\" class=\"square light c2\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"150\" y=\"285\" width=\"45\" height=\"45\" class=\"square dark d2\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"195\" y=\"285\" width=\"45\" height=\"45\" class=\"square light e2\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"240\" y=\"285\" width=\"45\" height=\"45\" class=\"square dark f2\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"285\" y=\"285\" width=\"45\" height=\"45\" class=\"square light g2\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"330\" y=\"285\" width=\"45\" height=\"45\" class=\"square dark h2\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"15\" y=\"240\" width=\"45\" height=\"45\" class=\"square dark a3\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"60\" y=\"240\" width=\"45\" height=\"45\" class=\"square light b3\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"105\" y=\"240\" width=\"45\" height=\"45\" class=\"square dark c3\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"150\" y=\"240\" width=\"45\" height=\"45\" class=\"square light d3\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"195\" y=\"240\" width=\"45\" height=\"45\" class=\"square dark e3\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"240\" y=\"240\" width=\"45\" height=\"45\" class=\"square light f3\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"285\" y=\"240\" width=\"45\" height=\"45\" class=\"square dark g3\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"330\" y=\"240\" width=\"45\" height=\"45\" class=\"square light h3\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"15\" y=\"195\" width=\"45\" height=\"45\" class=\"square light a4\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"60\" y=\"195\" width=\"45\" height=\"45\" class=\"square dark b4\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"105\" y=\"195\" width=\"45\" height=\"45\" class=\"square light c4\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"150\" y=\"195\" width=\"45\" height=\"45\" class=\"square dark d4\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"195\" y=\"195\" width=\"45\" height=\"45\" class=\"square light e4\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"240\" y=\"195\" width=\"45\" height=\"45\" class=\"square dark f4\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"285\" y=\"195\" width=\"45\" height=\"45\" class=\"square light g4\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"330\" y=\"195\" width=\"45\" height=\"45\" class=\"square dark h4\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"15\" y=\"150\" width=\"45\" height=\"45\" class=\"square dark a5\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"60\" y=\"150\" width=\"45\" height=\"45\" class=\"square light b5\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"105\" y=\"150\" width=\"45\" height=\"45\" class=\"square dark c5\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"150\" y=\"150\" width=\"45\" height=\"45\" class=\"square light d5\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"195\" y=\"150\" width=\"45\" height=\"45\" class=\"square dark e5\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"240\" y=\"150\" width=\"45\" height=\"45\" class=\"square light f5\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"285\" y=\"150\" width=\"45\" height=\"45\" class=\"square dark g5\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"330\" y=\"150\" width=\"45\" height=\"45\" class=\"square light h5\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"15\" y=\"105\" width=\"45\" height=\"45\" class=\"square light a6\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"60\" y=\"105\" width=\"45\" height=\"45\" class=\"square dark b6\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"105\" y=\"105\" width=\"45\" height=\"45\" class=\"square light c6\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"150\" y=\"105\" width=\"45\" height=\"45\" class=\"square dark d6\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"195\" y=\"105\" width=\"45\" height=\"45\" class=\"square light e6\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"240\" y=\"105\" width=\"45\" height=\"45\" class=\"square dark f6\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"285\" y=\"105\" width=\"45\" height=\"45\" class=\"square light g6\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"330\" y=\"105\" width=\"45\" height=\"45\" class=\"square dark h6\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"15\" y=\"60\" width=\"45\" height=\"45\" class=\"square dark a7\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"60\" y=\"60\" width=\"45\" height=\"45\" class=\"square light b7\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"105\" y=\"60\" width=\"45\" height=\"45\" class=\"square dark c7\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"150\" y=\"60\" width=\"45\" height=\"45\" class=\"square light d7\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"195\" y=\"60\" width=\"45\" height=\"45\" class=\"square dark e7\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"240\" y=\"60\" width=\"45\" height=\"45\" class=\"square light f7\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"285\" y=\"60\" width=\"45\" height=\"45\" class=\"square dark g7\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"330\" y=\"60\" width=\"45\" height=\"45\" class=\"square light h7\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"15\" y=\"15\" width=\"45\" height=\"45\" class=\"square light a8\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"60\" y=\"15\" width=\"45\" height=\"45\" class=\"square dark b8\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"105\" y=\"15\" width=\"45\" height=\"45\" class=\"square light c8\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"150\" y=\"15\" width=\"45\" height=\"45\" class=\"square dark d8\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"195\" y=\"15\" width=\"45\" height=\"45\" class=\"square light e8\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"240\" y=\"15\" width=\"45\" height=\"45\" class=\"square dark f8\" stroke=\"none\" fill=\"#d18b47\" /><rect x=\"285\" y=\"15\" width=\"45\" height=\"45\" class=\"square light g8\" stroke=\"none\" fill=\"#ffce9e\" /><rect x=\"330\" y=\"15\" width=\"45\" height=\"45\" class=\"square dark h8\" stroke=\"none\" fill=\"#d18b47\" /><use href=\"#white-king\" xlink:href=\"#white-king\" transform=\"translate(195, 330)\" /><use href=\"#white-bishop\" xlink:href=\"#white-bishop\" transform=\"translate(195, 285)\" /><use href=\"#white-pawn\" xlink:href=\"#white-pawn\" transform=\"translate(60, 240)\" /><use href=\"#black-pawn\" xlink:href=\"#black-pawn\" transform=\"translate(330, 195)\" /><use href=\"#black-knight\" xlink:href=\"#black-knight\" transform=\"translate(150, 105)\" /><use href=\"#black-king\" xlink:href=\"#black-king\" transform=\"translate(195, 15)\" /></svg>"
],
"text/plain": [
"Board('4k3/8/3n4/8/7p/1P6/4B3/4K3 b - - 0 1')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Récupération des positions de la tablebase KBNvK\n",
"Récupération des positions de la tablebase KPvK\n",
"Récupération des positions de la tablebase KPvKP\n",
"Récupération des positions de la tablebase KQvK\n",
"Récupération des positions de la tablebase KQvKP\n",
"Récupération des positions de la tablebase KRBvKP\n",
"Récupération des positions de la tablebase KRPvKP\n",
"Récupération des positions de la tablebase KRvK\n",
"Récupération des positions de la tablebase KRvKB\n",
"Récupération des positions de la tablebase KBvK\n",
"Récupération des positions de la tablebase KNvK\n",
"Total positions récupérées: 55000\n",
"Ajoute de toutes les positions des tablebases dans Redis terminé!\n"
]
}
],
"source": [
"def get_250_random_position(tablebases, config):\n",
" positions = []\n",
" tries = 0\n",
"\n",
" while len(positions) < 10000 and tries < 5000:\n",
" board = generate_board_from_config(config)\n",
" positions.append(board)\n",
" tries += 1\n",
"\n",
" return positions\n",
"\n",
"def generate_board_from_config(config):\n",
" \"\"\"\n",
" Génère un board contenant exactement le matériel d'une config Syzygy. Exemples de config :\n",
" - 'KQvK', 'KPvKP'\n",
" Cette fonction est important car il faut générer les positions qui dont les informations sont dans la tablebases.\n",
" \"\"\"\n",
"\n",
" piece_map = {\"K\": chess.KING,\"Q\": chess.QUEEN,\"R\": chess.ROOK,\"B\": chess.BISHOP,\"N\": chess.KNIGHT,\"P\": chess.PAWN}\n",
"\n",
" white_str, black_str = config.split(\"v\") #Sépare la config entre les 2 couleurs\n",
"\n",
" board = chess.Board(None) # donne un plateau vide\n",
"\n",
" # boucles pour placer les pièces sur le plateau\n",
" for p in white_str:\n",
" piece = piece_map[p]\n",
" sq = random.choice([s for s in chess.SQUARES if board.piece_at(s) is None]) #choisi une pièce et vérifie que il n'y a pas déjà une pièce dessus\n",
" board.set_piece_at(sq, chess.Piece(piece, chess.WHITE))\n",
"\n",
" for p in black_str:\n",
" piece = piece_map[p]\n",
" sq = random.choice([s for s in chess.SQUARES if board.piece_at(s) is None])#choisi une pièce et vérifie que il n'y a pas déjà une pièce dessus\n",
" board.set_piece_at(sq, chess.Piece(piece, chess.BLACK))\n",
"\n",
" # désactive les règles des échecs.\n",
" board.castling_rights = 0\n",
" board.ep_square = None\n",
"\n",
" # Donne une couleur aléatoire pour savoir quelle couleur doit jouer le prochain coup.\n",
" board.turn = random.choice([chess.WHITE, chess.BLACK])\n",
"\n",
" if not board.is_valid():\n",
" return generate_board_from_config(config)\n",
"\n",
" return board\n",
"\n",
"def add_tablebase_to_redis():\n",
" #Connect to Redis server\n",
" redis_server = redis.Redis(host='localhost', port=6379, db=0)\n",
" \n",
" tablebases_path = \"tablebases/\" #Chemin vers les tables bases Syzygy\n",
"\n",
" tablebases = chess.syzygy.open_tablebase(tablebases_path)\n",
"\n",
" available_tables = set()\n",
" for f in os.listdir(tablebases_path):\n",
" if f.endswith(\".rtbw\") or f.endswith(\".rtbz\"):\n",
" available_tables.add(f.split(\".\")[0])\n",
"\n",
" print(\"Configs ok:\", available_tables)\n",
"\n",
" position = chess.Board(\"4k3/8/3n4/8/7p/1P6/4B3/4K3 b - - 0 1\") #Position d'exemple\n",
" display(position) \n",
" \n",
" configs = [\"KBNvK\",\"KPvK\",\"KPvKP\",\"KQvK\",\"KQvKP\",\"KRBvKP\",\"KRPvKP\",\"KRvK\",\"KRvKB\",\"KBvK\",\"KNvK\"]\n",
" config_valide = [c for c in configs if c in available_tables]\n",
" #Configurations de toute les tablebases que l'on utilisera dans le projet.\n",
" all_positions = []\n",
" for config in config_valide:\n",
" print(f\"Récupération des positions de la tablebase {config}\")\n",
" position = get_250_random_position(tablebases,config)\n",
" all_positions.extend(position) #Ajout des positions générées à la liste globale\n",
" \n",
" print(f\"Total positions récupérées: {len(all_positions)}\")\n",
" print(\"Ajoute de toutes les positions des tablebases dans Redis terminé!\")\n",
"\n",
"if __name__ == \"__main__\":\n",
" add_tablebase_to_redis() "
]
},
{
"cell_type": "markdown",
"id": "1b443c8c",
"metadata": {},
"source": [
"## Accès à Redis\n",
"\n",
"Nous avons rajouter 250 positions apparentant à chacune des tablesbases présent dans le dossier. Il y a des configurations ayant 3,4 ainsi que 5 pièces pour voir si cela a une incidence sur le temps d'accès à Redis.\n",
"\n",
"Pour la suite, nous allons donc pouvoir passer sur Redis pour vérifier cette hypothèse et faire d'autres tests sur notre base.\n",
"\n",
"## Benchmark redis"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "8d49b928-7522-4727-b6d8-224e2bd3a1b7",
"metadata": {
"ExecuteTime": {
"end_time": "2025-12-06T09:27:00.752325Z",
"start_time": "2025-12-06T09:27:00.748915Z"
}
},
"outputs": [],
"source": [
"def benchmark_redis(redis_serveur, pos):\n",
" latency = []\n",
" start_time_all = time.time()\n",
"\n",
" for board in pos:\n",
" fen = board.fen()\n",
" start_individual = time.time()\n",
" redis_serveur.hset(fen, mapping={\"board\": board.fen()})\n",
" latency.append(time.time() - start_individual)\n",
"\n",
" total_time_all=time.time()-start_time_all\n",
" latency= np.array(latency)\n",
"\n",
" return{\n",
" \"count\": len(pos),\n",
" \"average_latency\": np.mean(latency),\n",
" \"p50\": np.percentile(latency,50),\n",
" \"p90\": np.percentile(latency,90),\n",
" \"p95\": np.percentile(latency,95),\n",
" \"p99\": np.percentile(latency,99),\n",
" \"std\": np.std(latency),\n",
" \"min\": np.min(latency),\n",
" \"max\": np.max(latency),\n",
" \"total_time\": total_time_all,\n",
" \"latency\": latency,\n",
" \"rps\": len(latency)/total_time_all,\n",
" }\n",
"\n",
"def benchmark_syzygy(tablebases, pos):\n",
" latency = []\n",
" start_time_all = time.time()\n",
"\n",
" for board in pos:\n",
" try:\n",
" start = time.time()\n",
" tablebases.probe_wdl(board)\n",
" tablebases.probe_dtz(board)\n",
" latency.append(time.time() - start)\n",
" except chess.syzygy.MissingTableError:\n",
" continue\n",
"\n",
" total_time_all=time.time()-start_time_all\n",
"\n",
" return{\n",
" \"count\": len(pos),\n",
" \"average_latency\": np.mean(latency),\n",
" \"p50\": np.percentile(latency,50),\n",
" \"p90\": np.percentile(latency,90),\n",
" \"p95\": np.percentile(latency,95),\n",
" \"p99\": np.percentile(latency,99),\n",
" \"std\": np.std(latency),\n",
" \"min\": np.min(latency),\n",
" \"max\": np.max(latency),\n",
" \"total_time\": total_time_all,\n",
" \"latency\": latency,\n",
" \"rps\": len(latency)/total_time_all\n",
" }\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "0d955b0d-dc80-4518-954b-7c2df295adca",
"metadata": {
"ExecuteTime": {
"end_time": "2025-12-06T10:18:18.501308Z",
"start_time": "2025-12-06T10:18:18.393765Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BENCHMARK SYZYGY\n",
"BENCHMARK REDIS\n",
"Redis latency array length: 55000\n",
"Syzygy latency array length: 50215\n",
" test statistic p-value \\\n",
"0 paired t-test 93.454797 0.0 \n",
"1 KS-test 0.690232 0.0 \n",
"\n",
" interpretation \n",
"0 H0: mean latency equal (Redis vs Syzygy) \n",
"1 H0: same latency distribution (Redis vs Syzygy) \n"
]
}
],
"source": [
"def statistical_tests(bench_redis, bench_syzygy):\n",
" redis_lat = np.array(bench_redis[\"latency\"], dtype=np.float64)\n",
" syz_lat = np.array(bench_syzygy[\"latency\"], dtype=np.float64)\n",
" \n",
" min_len = min(len(redis_lat), len(syz_lat))\n",
" redis_lat = redis_lat[:min_len]\n",
" syz_lat = syz_lat[:min_len]\n",
"\n",
" # PAIRED T-Test (Comparaison median)\n",
" t_stat, t_p = stats.ttest_rel(syz_lat, redis_lat)\n",
"\n",
" # KS Test (Comparaison distribution)\n",
" ks_stat, ks_p = stats.ks_2samp(syz_lat, redis_lat)\n",
"\n",
" df_stats = pd.DataFrame({\n",
" \"test\": [\"paired t-test\", \"KS-test\"],\n",
" \"statistic\": [t_stat, ks_stat],\n",
" \"p-value\": [t_p, ks_p],\n",
" \"interpretation\": [\n",
" \"H0: mean latency equal (Redis vs Syzygy)\",\n",
" \"H0: same latency distribution (Redis vs Syzygy)\"\n",
" ]\n",
" })\n",
"\n",
" print(df_stats)\n",
" return df_stats\n",
"\n",
"\n",
"def run_experiment_test_latency():\n",
" redis_server = redis.Redis(host=\"localhost\", port=6379, db=0)\n",
" tablebases = chess.syzygy.open_tablebase(\"tablebases/\")\n",
"\n",
" configs = [\"KBNvK\",\"KPvK\",\"KPvKP\",\"KQvK\",\"KQvKP\",\"KRBvKP\",\"KRPvKP\",\"KRvK\",\"KRvKB\",\"KBvK\",\"KNvK\"]\n",
"\n",
" all_positions = []\n",
" for config in configs:\n",
" all_positions += get_250_random_position(tablebases, config)\n",
"\n",
" # Benchmark Syzygy\n",
" bench_syzygy = benchmark_syzygy(tablebases, all_positions)\n",
" print(\"BENCHMARK SYZYGY\")\n",
" #print(bench_syzygy)\n",
"\n",
" # Benchmark Redis\n",
" bench_redis = benchmark_redis(redis_server, all_positions)\n",
" print(\"BENCHMARK REDIS\")\n",
" #print(bench_redis)\n",
"\n",
" # Length info\n",
" print(f\"Redis latency array length: {len(bench_redis['latency'])}\")\n",
" print(f\"Syzygy latency array length: {len(bench_syzygy['latency'])}\")\n",
"\n",
" return {\n",
" \"bench_syzygy\": bench_syzygy,\n",
" \"bench_redis\": bench_redis\n",
" }\n",
"\n",
"if __name__ == \"__main__\":\n",
" results = run_experiment_test_latency()\n",
" statistical_tests(results[\"bench_redis\"], results[\"bench_syzygy\"])"
]
},
{
"cell_type": "markdown",
"id": "37b01080",
"metadata": {},
"source": [
"Cette partie teste les accès Redis, afin de savoir si le nombre de pièces de la configuration importe sur le temps d'accès : "
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "a68060e1-0052-4446-a0d3-40bc1756f210",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"300000\n"
]
},
{
"data": {
"text/plain": [
"{'3pieces': {'mean_ms': np.float64(0.12955952677155436),\n",
" 'median_ms': np.float64(0.09466399933444336),\n",
" 'min_ms': np.float64(0.05069299913884606),\n",
" 'max_ms': np.float64(500.89298599959875),\n",
" 'std_ms': np.float64(3.1546466323114712)},\n",
" '4pieces': {'mean_ms': np.float64(0.11004601521946825),\n",
" 'median_ms': np.float64(0.09354500070912763),\n",
" 'min_ms': np.float64(0.05039899951952975),\n",
" 'max_ms': np.float64(500.61054899924784),\n",
" 'std_ms': np.float64(2.2517206408942836)},\n",
" '5pieces': {'mean_ms': np.float64(0.12113958316016578),\n",
" 'median_ms': np.float64(0.09381000018038321),\n",
" 'min_ms': np.float64(0.05028300074627623),\n",
" 'max_ms': np.float64(500.7266320008057),\n",
" 'std_ms': np.float64(2.6293209302022604)}}"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"\"\"\"\n",
"redis_client : instance redis.Redis déjà créée\n",
"test_positions : dict {\"3men\": [...], \"4men\": [...], \"5men\": [...]}\n",
"\"\"\"\n",
"def benchmark_redis_get_comparison(redis_client, test_positions: dict, iterations=100):\n",
"\n",
" results = {}\n",
" j = 0\n",
" for label, fens in test_positions.items():\n",
"\n",
" times = np.zeros(iterations)\n",
"\n",
" for i in range(iterations):\n",
" fen = random.choice(fens)\n",
" key = f\"tb:{fen}\"\n",
" j = j + 1\n",
" start = time.perf_counter()\n",
" _ = redis_client.get(key)\n",
" times[i] = time.perf_counter() - start\n",
"\n",
" results[label] = {\n",
" \"mean_ms\": np.mean(times) * 1000,\n",
" \"median_ms\": np.median(times) * 1000,\n",
" \"min_ms\": np.min(times) * 1000,\n",
" \"max_ms\": np.max(times) * 1000,\n",
" \"std_ms\": np.std(times) * 1000,\n",
" }\n",
" print(j)\n",
" return results\n",
"\n",
"\n",
"#IMPORTANT : Es-ce qu'on garde ca comme ca ? \n",
"TEST_POSITIONS = {\n",
" \"3pieces\": [\n",
" \"K7/8/8/8/8/8/8/k7 w - - 0 1\",\n",
" \"KB6/8/8/8/8/8/8/k7 w - - 0 1\",\n",
" \"KN6/8/8/8/8/8/8/k7 w - - 0 1\",\n",
" ],\n",
" \"4pieces\": [\n",
" \"KQ6/8/8/8/8/8/8/k7 w - - 0 1\",\n",
" \"KP6/8/8/8/8/8/8/k7 w - - 0 1\",\n",
" \"KQ6/kr6/8/8/8/8/8/8 w - - 0 1\",\n",
" ],\n",
" \"5pieces\": [\n",
" \"KQ6/8/8/Kp6/8/8/8/k7 w - - 0 1\",\n",
" \"KR6/1p6/8/8/8/8/8/k7 w - - 0 1\",\n",
" \"KRP5/1p6/8/8/8/8/8/k7 w - - 0 1\",\n",
" ],\n",
"}\n",
"\n",
"redis_server = redis.Redis(host=\"localhost\", port=6379, db=0)\n",
"benchmark_redis_get_comparison(redis_server, TEST_POSITIONS, 100000)"
]
},
{
"cell_type": "markdown",
"id": "abd8ddc4",
"metadata": {},
"source": [
"Nous pouvons réaliser un graphique permettant de visualiser l'évolution du temps d'accès aux données avec Matplotlib : "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fd521dcc",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHHCAYAAAC88FzIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAjxBJREFUeJzs3Xd8U2XbwPHfSZruDZ1Q2gKVjUAZIiCrUIYoDhBEwb3AhY8iKioucLw4AEGfRxRUhrgHsqkM2ciW1cXqYHXRlSbn/SNtaGgKLbQ5pb2+fPqhOec+J1fupu3VeyqqqqoIIYQQQtRROq0DEEIIIYTQkiRDQgghhKjTJBkSQgghRJ0myZAQQggh6jRJhoQQQghRp0kyJIQQQog6TZIhIYQQQtRpkgwJIYQQok6TZEgIIUSNoqoq77//Pn/88YfWoYg6QpIhIUSV++qrr1AUhaSkJK1DqRXuu+8+IiIitA7DYWbMmMHs2bO555575D0kHEKSIVFnlfzCVhSF9evXlzmvqiphYWEoisLNN9+sQYSiRG5uLq+//jpxcXFahyKqWUJCAm+99Ra///47L774Ig8++CAX7xq1ZMkSXn/9dW0CFLWSJEOiznN1dWX+/Plljv/1118cP34cFxcXDaISpeXm5jJ58mRJhuqAf//9l3nz5tGiRQteeOEFBg8ezLFjx2zKLFmyhMmTJ2sUoaiNJBkSdd6gQYNYvHgxRUVFNsfnz59PdHQ0wcHBGkUmhOOcP39e6xAAGDx4MLGxsQAoisL48eNp1KiRxlGJ2k6SIVHnjRw5kjNnzrBixQrrscLCQr7//nvuvvtuu9ecP3+e5557jrCwMFxcXGjWrBkffPCBTXN+z549uf766+1e36xZM+sPfACz2cxHH31Eq1atcHV1JSgoiEcffZRz587ZXBcREcHNN9/M+vXr6dy5M66urjRu3Jh58+bZlCvpAtywYQPjx48nICAADw8PbrvtNk6dOlUmnj///JMePXrg4eGBl5cXgwcPZt++fZevPGDfvn306dMHNzc3GjZsyFtvvYXZbC5TTlEUu10bERER3HfffeXePykpiYCAAAAmT55s7dosfa8DBw5w55134u/vj6urKx07duTXX3+1Wyfr16/nqaeeIiAgAF9fXx599FEKCwvJyMhg9OjR+Pn54efnxwsvvGDz9UxKSkJRFD744AM+/PBDwsPDcXNzo2fPnuzdu9fmuVJTU7n//vtp2LAhLi4uhISEcOutt1Zo/MvPP/9M69atcXV1pXXr1vz00092y1X0PWPPfffdh6enJ/Hx8QwaNAgvLy9GjRpVqfuqqspbb71Fw4YNcXd3p3fv3uzbt6/M1/P1119HUZQyMZQ3ruxy78X77ruPmTNnAljfC6XvfzX1IuowVYg66ssvv1QBdevWreqNN96o3nvvvdZzP//8s6rT6dQTJ06o4eHh6uDBg63nzGaz2qdPH1VRFPWhhx5SZ8yYoQ4ZMkQF1GeeecZa7r///a8KqHv27LF53i1btqiAOm/ePOuxhx56SHVyclIffvhhdfbs2eqECRNUDw8PtVOnTmphYaG1XHh4uNqsWTM1KChIfemll9QZM2aoHTp0UBVFUffu3VvmtbVv317t06ePOn36dPW5555T9Xq9Onz4cJt45s2bpyqKog4YMECdPn26+u6776oRERGqr6+vmpiYeMk6TElJUQMCAlQ/Pz/19ddfV99//301KipKbdu2rQrYXA+or732Wpl7hIeHq2PGjCn3OXJyctRZs2apgHrbbbepX3/9tfr111+ru3btUlVVVffu3av6+PioLVu2VN999111xowZ6k033aQqiqL++OOPZeqkXbt26oABA9SZM2eq9957rwqoL7zwgtq9e3f17rvvVj/99FP15ptvVgF17ty51usTExNVQG3Tpo0aERGhvvvuu+rkyZNVf39/NSAgQE1NTbWWvfHGG1UfHx/1lVdeUf/3v/+p77zzjtq7d2/1r7/+umR9Llu2TNXpdGrr1q3VadOmqS+//LLq4+OjtmrVSg0PD7cpW9H3jD1jxoxRXVxc1CZNmqhjxoxRZ8+ebX0/VvS+r7zyigqogwYNUmfMmKE+8MADamhoqFq/fn2br+drr72m2vtVU/L1KP0eqch78e+//1b79eunAtb3wtdff10l9SLqLkmGRJ1VOhmaMWOG6uXlpebm5qqqqqrDhg1Te/furaqqWiYZ+vnnn1VAfeutt2zud+edd6qKoqhHjhxRVVVVMzIyVFdXV3XChAk25Z566inVw8NDzcnJUVVVVdetW6cC6rfffmtTbunSpWWOh4eHq4C6du1a67H09HTVxcVFfe6558q8tpiYGNVsNluPP/vss6per1czMjJUVVXV7Oxs1dfXV3344Ydtnjs1NVX18fEpc/xizzzzjAqomzdvtonHx8enypIhVVXVU6dOlXt937591TZt2qj5+fnWY2azWb3xxhvVqKgo67GSOomNjbWpk65du6qKoqiPPfaY9VhRUZHasGFDtWfPntZjJcmQm5ubevz4cevxzZs3q4D67LPPqqqqqufOnVMB9f3337/ka7KnXbt2akhIiPXro6qqunz5chWwSYYq856xZ8yYMSqgvvjiizbHK3rf9PR01dnZWR08eLBNXb700ksqcEXJUGXei2PHjrV7z6utF1F3STeZEMDw4cPJy8vj999/Jzs7m99//73cLrIlS5ag1+t56qmnbI4/99xzqKrKn3/+CYCPjw+33norCxYssHa3mEwmFi1axNChQ/Hw8ABg8eLF+Pj40K9fP06fPm39iI6OxtPTkzVr1tg8T8uWLenRo4f1cUBAAM2aNSMhIaFMrI888ohNF0KPHj0wmUwkJycDsGLFCjIyMhg5cqTNc+v1erp06VLmue3VxQ033EDnzp1t4inpcqluZ8+eZfXq1QwfPpzs7Gxr/GfOnCE2NpbDhw9z4sQJm2sefPBBmzrp0qULqqry4IMPWo/p9Xo6duxot06HDh1KgwYNrI87d+5Mly5dWLJkCQBubm44OzsTFxdXqa6ZlJQUdu7cyZgxY/Dx8bEe79evHy1btrQpW9n3THkef/zxK7rvypUrKSws5Mknn7Spy2eeeabCr/diV/terEz8QlzMSesAhKgJAgICiImJYf78+eTm5mIymbjzzjvtlk1OTiY0NBQvLy+b4y1atLCeLzF69GgWLVrEunXruOmmm1i5ciVpaWnce++91jKHDx8mMzOTwMBAu8+Xnp5u89jeYFI/Pz+7v3gvLuvn5wdgLXv48GEA+vTpY/e5vb297R4vkZycTJcuXcocb9as2SWvqypHjhxBVVUmTZrEpEmT7JZJT0+3SV4urpOSxCMsLKzMcXt1GhUVVebYddddx3fffQeAi4sL7777Ls899xxBQUHccMMN3HzzzYwePfqSg/FL3jf27t+sWTN27NhhfVzZ94w9Tk5ONGzY0OZYRe9bXqwBAQHW91hlXe17seQeV1svom6SZEiIYnfffTcPP/wwqampDBw4EF9f36u+Z2xsLEFBQXzzzTfcdNNNfPPNNwQHBxMTE2MtYzabCQwM5Ntvv7V7j5LBwyX0er3dcupFa7FUpGzJQOevv/7a7i9qJ6fq/xFhMpmu+NqS+P/zn//YDEgvrWnTpjaPy6sTe8ft1WlFPPPMMwwZMoSff/6ZZcuWMWnSJKZMmcLq1atp3779Fd2ztMq+Z+xxcXFBp7PtHKiK+17M3uBpKPt1r4r3YnXEL+oGSYaEKHbbbbfx6KOPsmnTJhYtWlRuufDwcFauXEl2drZN69CBAwes50vo9XruvvtuvvrqK959911+/vlnHn74YZtfvE2aNGHlypV069YNNze3anhl5WvSpAkAgYGBNglaRYWHh1v/oi/t4MGDZY75+fmRkZFhc6ywsJCUlJTLPk95v1AbN24MgMFguKL4r4S913vo0KEyK0Q3adKE5557jueee47Dhw/Trl07/u///o9vvvnG7n1L3jcVqc/qes9U9L6lYy35GgCcOnWqTGtaSUtRRkaGzR8YpVtQS54bKvZeLO/9oOX3kri2yZghIYp5enoya9YsXn/9dYYMGVJuuUGDBmEymZgxY4bN8Q8//BBFURg4cKDN8XvvvZdz587x6KOPkpOTwz333GNzfvjw4ZhMJt58880yz1VUVFQmgahKsbGxeHt7884772A0GsuctzcNv7RBgwaxadMmtmzZYnONvb/MmzRpwtq1a22Off755xVqGXJ3dwcoUxeBgYH06tWLzz77zG5Sdbn4r8TPP/9sMw5py5YtbN682fp1z83NJT8/3+aaJk2a4OXlRUFBQbn3DQkJoV27dsydO5fMzEzr8RUrVrB//36bstX1nqnofWNiYjAYDEyfPt2m9eyjjz4qc11JklP6a3/+/Hnmzp1rU64y78WS8XYXv04tv5fEtU1ahoQoZcyYMZctM2TIEHr37s3LL79MUlIS119/PcuXL+eXX37hmWeesf7wL9G+fXtat27N4sWLadGiBR06dLA537NnTx599FGmTJnCzp076d+/PwaDgcOHD7N48WI+/vjjcscvXS1vb29mzZrFvffeS4cOHRgxYgQBAQEcPXqUP/74g27dupVJ+kp74YUX+PrrrxkwYABPP/00Hh4efP7554SHh7N7926bsg899BCPPfYYd9xxB/369WPXrl0sW7aM+vXrXzZONzc3WrZsyaJFi7juuuvw9/endevWtG7dmpkzZ9K9e3fatGnDww8/TOPGjUlLS2Pjxo0cP36cXbt2XXU9lda0aVO6d+/O448/TkFBAR999BH16tXjhRdeACytRH379mX48OG0bNkSJycnfvrpJ9LS0hgxYsQl7z1lyhQGDx5M9+7deeCBBzh79izTp0+nVatW5OTkWMtV13umovcNCAjgP//5D1OmTOHmm29m0KBB/PPPP/z5559lvp79+/enUaNGPPjggzz//PPo9XrmzJljfZ+VqMx7MTo6GoCnnnqK2NhY9Ho9I0aM0PR7SVzjtJvIJoS2Sk+tv5SLp9arqmUa8LPPPquGhoaqBoNBjYqKUt9//32bacalvffeeyqgvvPOO+U+z+eff65GR0erbm5uqpeXl9qmTRv1hRdeUE+ePHnJWFRVVXv27GkzDby817ZmzRoVUNesWVPmeGxsrOrj46O6urqqTZo0Ue+77z5127Zt5cZbYvfu3WrPnj1VV1dXtUGDBuqbb76pfvHFF2Wm1ptMJnXChAlq/fr1VXd3dzU2NlY9cuRIhabWq6plfZno6GjV2dm5zDT7+Ph4dfTo0WpwcLBqMBjUBg0aqDfffLP6/fffX7ZOSqZ+nzp1yub4mDFjVA8PD+vjkqn177//vvp///d/alhYmOri4qL26NHDuuaRqqrq6dOn1bFjx6rNmzdXPTw8VB8fH7VLly7qd999d9nXqKqq+sMPP6gtWrRQXVxc1JYtW6o//vijOmbMmDLrDKlqxd4z9lz82q7kviaTSZ08ebIaEhKiurm5qb169VL37t1r9+u5fft2tUuXLqqzs7PaqFEjddq0aXbXGVLVir0Xi4qK1CeffFINCAhQFUUpM83+SutF1F2Kql7hCEEhRIV9/PHHPPvssyQlJcnWAteopKQkIiMjef/99/nPf/6jdTg1VkREBL169eKrr77SOhQhKkzGDAlRzVRV5YsvvqBnz56SCAkhRA0kY4aEqCbnz5/n119/Zc2aNezZs4dffvlF65CEEELYIcmQENXk1KlT3H333fj6+vLSSy9xyy23aB2SEEIIO2TMkBBCCCHqNBkzJIQQQog6TZIhIYQQQtRpMmbIDrPZzMmTJ/Hy8ip32XchhBBC1CyqqpKdnU1oaGiZvfcuRZIhO06ePFlmB2shhBBCXBuOHTtGw4YNK1xekiE7SjbfPHbsGN7e3lV2X6PRyPLly61LxIvqIfXsOFLXjiH17BhSz45RnfWclZVFWFiYzSbaFSHJkB0lXWPe3t5Vngy5u7vj7e0t32jVSOrZcaSuHUPq2TGknh3DEfVc2SEuMoBaCCGEEHWaJENCCCGEqNMkGRJCCCFEnSZjhoQQQohLMJlMGI1GrcOoNYxGI05OTuTn52MymSp1rcFgQK/XV3lMkgwJIYQQdqiqSmpqKhkZGVqHUquoqkpwcDDHjh27orX8fH19CQ4OrtJ1ACUZEkIIIewoSYQCAwNxd3eXRXiriNlsJicnB09Pz0otjKiqKrm5uaSnpwMQEhJSZTFJMiSEEEJcxGQyWROhevXqaR1OrWI2myksLMTV1bVSyRCAm5sbAOnp6QQGBlZZl5kMoBZCCCEuUjJGyN3dXeNIxMVKviZVOY5LkiEhhBCiHNI1VvNUx9dEkiEHMplNJBgTWJq0lK2pWzGZKzeKXgghhBBVT8YMOcjK5JVM2TKF9Nx0+NtyLMg9iBc7v0hMeIy2wQkhhBBAUlISkZGR/PPPP7Rr107rcBxGWoYcYGXySsbHjbckQqWk56YzPm48K5NXahSZEEKI6mQyq2yMP8MvO0+wMf4MJrNarc83a9Ys2rZta91bs2vXrvz5558Vvj4sLIyUlBRat25djVHWPNIyVM1MZhNTt0xFpew3gIqKgsK7W96ld1hv9LqqX0hKCCGENpbuTWHyb/tJycy3HgvxceW1IS0Z0LrqpoWX1rBhQ6ZOnUpUVBSqqjJ37lxuvfVW/vnnH1q1anXZ6/V6PcHBwdUSW00mLUPVbEf6DtJy08o9r6KSmpvKjvQdDoxKCCFEdVq6N4XHv9lhkwgBpGbm8/g3O1i6N6VannfIkCEMGjSIqKgorrvuOt5++208PT3ZtGkTYBl8PGvWLAYOHIibmxuNGzfm+++/t16flJSEoijs3LnTemzv3r0MHDgQT09PgoKCuPfeezl9+rT1vNls5r333qNp06a4uLjQqFEj3n77bev5Y8eOMXz4cHx9ffH392fo0KEcPXrUej4uLo7OnTvj4eGBr68v3bp1Izk5uVrqpzySDFWzU7mnqrScEEIIx1NVldzCogp9ZOcbee3XfXb6A7Aee/3X/WTnGyt0P1W9sq41k8nEwoULOX/+PF27drUenzRpEnfccQe7du1i1KhRjBgxgn///dfuPTIyMujTpw/t27dn27ZtLF26lLS0NIYPH24tM3HiRKZOncqkSZPYv38/8+fPJygoCLBMf4+NjcXLy4t169axYcMGPD09ufPOOyksLKSoqIihQ4fSs2dPdu/ezcaNG3nkkUccPotPusmqWYB7QJWWE0II4Xh5RhMtX11WJfdSgdSsfNq8vrxC5fe/EYu7c8V/Xe/Zs4euXbuSn5+Pp6cnP/30Ey1btrSeHzZsGA899BAAb775JitWrGD69Ol8+umnZe41Y8YM2rdvzzvvvGM9NmfOHMLCwjh06BAhISF8/PHHzJgxgzFjxgDQpEkTunfvDsCiRYswm83873//syY4c+bMwd/f39oilJmZyc0330yTJk0AaNGiRYVfa1WRZKiadQjsQJB7EOm56XbHDSkoBLkH0SGwgwbRCSGEqG2aNWvGzp07yczM5Pvvv2fMmDH89ddf1oSodCtRyePS3WKl7dq1izVr1uDp6VnmXHx8PBkZGRQUFNC3b99yrz9y5AheXl42x/Pz84mPj2fAgAHcd999xMbG0q9fP2JiYhg+fHiVbrVREZIMVTO9Ts+LnV9kfNz4MucULFnyhM4TZPC0EELUYG4GPfvfiK1Q2S2JZ7nvy62XLffV/Z3oHOlfoeeuDGdnZ5o2bQpAdHQ0W7du5eOPP+azzz6r1H0AcnJyGDJkCO+++26ZcyEhISQkJFz2+ujoaL799lvrsZK9ySIjIwH48ssveeqpp1i6dCmLFi3ilVdeYcWKFdxwww2VjvdKyZghB4gJj2Far2l4OdtmxkHuQUzrNU3WGRJCiBpOURTcnZ0q9NEjKoAQH1fKG/WiYJlV1iMqoEL3u9rxM2azmYKCAuvjksHUpR+X1zXVoUMH9u3bR0REBE2bNrX58PDwICoqCjc3N1atWlXu9YcPHyYwMNDm2saNG+Pj42Mt1759eyZOnMjff/9N69atmT9//lW95sqSZMhBYsJjeLrd0wA0823GnNg5LL1jqSRCQghRy+h1Cq8NsXRJXZzGlDx+bUhL9LqqHyQ8ceJE1q5dS1JSEnv27GHixInExcUxatQoa5nFixczZ84cDh06xGuvvcaWLVsYN26c3fuNHTuWs2fPMnLkSLZu3Up8fDzLli3j/vvvx2Qy4erqyoQJE3jhhReYN28e8fHxbNq0iS+++AKAUaNGUb9+fW699VbWrVtHYmIicXFxTJgwgePHj5OYmMjEiRPZuHEjycnJLF++nMOHDzt83JB0kzmQs84ZgHpu9egU3EnjaIQQQlSXAa1DmHVPhzLrDAVX8zpD6enpjB49mpSUFHx8fGjbti3Lli2jX79+1jKTJ09m4cKFPPHEE4SEhLBgwQKbAdalhYaGsmHDBiZMmED//v0pKCggPDycAQMGWHecnzRpEk5OTrz66qucPHmSkJAQHnvsMcCyqeratWuZMGECt99+O9nZ2TRo0IAePXrg7e1NQUEBBw4cYO7cuZw5c4aQkBDGjh3Lo48+Wi31Ux5JhhyoZFyQSZU9yYQQorYb0DqEfi2D2ZJ4lvTsfAK9XOkc6V8tLUIlSlpkLiU0NJTly+3PZIuIiCgzlT8qKooff/yx3PvpdDpefvllXn75Zbvng4ODmTt3rvWx2WwmKysLb29vdDodP/3002Vjrm6SDDmQXilOhmSDViGEqBP0OoWuTeppHYa4DBkz5EAlLUNFapHGkQghhBCihLQMOZCTYqluaRkSQgihhStdzbq2k5YhB7J2k8mYISGEEKLGkGTIgWQAtRBCCFHzSDLkQDrFUt3STSaEEELUHJIMOVDJmCEZQC2EEELUHJIMOZC1m0xahoQQQogaQ5IhB5IB1EIIIUTNI8mQA5W0DJlVs8aRCCGEEPYlJSWhKAo7d+7UOhSHkWTIgWTMkBBC1DFmEySugz3fW/538DCJqVOnoigKzzzzTIWvCQsLIyUlhdatW1dfYDWMLLroQLIdhxBC1CH7f4WlEyDr5IVj3qEw4F1oeUu1P/3WrVv57LPPaNu2baWu0+v1BAcHV1NUNZO0DDmQrDMkhBB1xP5f4bvRtokQQFaK5fj+X6v16XNychg1ahT//e9/8fPzszmnKAqzZs1i4MCBuLm50bhxY77//nvreXvdZHv37mXgwIF4enoSFBTEvffey+nTp63nzWYz7733Hk2bNsXFxYVGjRrx9ttvW88fO3aM4cOH4+vrS/369bn77rtJSkqyno+Li6Nz5854eHjg6+tLt27dSE5OrvqKKYckQw4kLUNCCHGNUlUoPF+xj/ws+PMFwN7WF8XHlk6wlKvI/a5gC42xY8cyePBgYmJi7J6fNGkSd9xxB7t27WLUqFGMGDGCf//9127ZjIwM+vTpQ/v27dm2bRtLly4lLS2N4cOHW8tMnDiRqVOnMmnSJPbv38/8+fMJCgoCwGg0Ehsbi5eXF+vWrWPdunV4eHgwaNAgCgsLKSoqYujQofTs2ZPdu3ezceNGHnnkERRFqfTrvlLSTeZA0jIkhBDXKGMuvBNaRTdTLS1GU8MqVvylk+DsUeG7L1y4kB07drB169ZyywwbNoyHHnoIgDfffJMVK1Ywffp0Pv300zJlZ8yYQfv27XnnnXesx+bMmUNYWBiHDh0iJCSEjz/+mBkzZjBmzBgAmjRpQvfu3QFYtGgRZrOZ//3vfyiKgtlsZubMmURERBAXF0fHjh3JzMzk5ptvpkmTJgC0aNGiwq+3Kkgy5EAygFoIIUR1OnbsGE8//TQrVqzA1dW13HJdu3Yt87i82WO7du1izZo1eHp6ljkXHx9PRkYGBQUF9O3bt9zrjxw5gpeXl83x/Px84uPj6d+/P/fddx+xsbH069ePmJgYhg8fTkhIyGVebdWRZMiBpJtMCCGuUQZ3SwtNRST/Dd/eeflyo76H8Bsr9twVtH37dtLT0+nQoYP1mMlkYu3atcyYMYOCgoIK36tETk4OQ4YM4d133y1zLiQkhISEhMteHx0dzbfffgtYxhfl5ORYxx8BfPnllzz11FMsXbqURYsW8corr7BixQpuuOGGSsd7JSQZcqCSbjIVFbNqtu5VJoQQooZTlIp3VTXpY5k1lpWC/XFDiuV8kz5Q/HuhqvTt25c9e/bYHLv//vtp3rw5EyZMQK+3PN+mTZsYPXq0tcymTZto37693Xt26NCBH374gYiICJycyqYNUVFRuLm5sWrVKmvX28XXL1q0iMDAQLy9vTGbzWRlZeHt7Y1Od+H3YPv27Wnfvj0TJ06ka9euzJ8/32HJkPw2dqCSliGQ1iEhhKi1dHrL9HkALh4EXPx4wNQqT4QAvLy8aN26tc2Hh4cH9erVs1k3aPHixcyZM4dDhw7x2muvsWXLFsaNG2f3nmPHjuXs2bOMHDmSrVu3Eh8fz7Jly7j//vsxmUy4uroyYcIEXnjhBebNm0d8fDybNm3iiy++AGDUqFHUr1+fW2+9lXXr1pGYmMj69et5+umnOX78OImJiUycOJGNGzeSnJzM8uXLOXz4sEPHDUnLkAM56S5Ud5FahAGDhtEIIYSoNi1vgeHzyllnaKpD1hm6lMmTJ7Nw4UKeeOIJQkJCWLBgAS1btrRbNjQ0lA0bNjBhwgT69+9PQUEB4eHhDBgwwNqyM2nSJJycnHj11Vc5efIkISEhPPbYYwC4u7uzdu1aJkyYwO233052djYhISHExMTg7e1NXl4eBw4cYO7cuZw5c4aQkBDGjh3Lo48+6rD6kGTIgUp3i0nLkBBC1HItb4Hmgy1jiHLSwDPIMkaoGlqELiUuLq7MsdDQUJYvX263fEREBOpF0/mjoqL48ccfy30OnU7Hyy+/zMsvv2z3fHBwMHPnzgUo003m7e3NTz/9VMFXUz0kGXIgm24ymV4vhBC1n04PkT20jkJchowZcqDSyVCRWabXCyGEEDWBtAw5kKIo6NBhxiwtQ0IIITRxcReYkJYhh9MVV7lZNWsciRBCCCFAkiGHK0mGpJtMCCGEqBkkGXKwkmRIusmEEEKImkGSIQcrmV4vU+uFEEKImkGSIQezdpPJZq1CCCFEjSDJkINZu8mkZUgIIYSoESQZcjAZMySEEKKmSkpKQlEUdu7cqXUoDiXJkIOVjBmS2WRCCFH7mcwmtqZuZUnCErambq32XoHXX38dRVFsPpo3b17h68PCwkhJSbHZ1LUuqBHJ0MyZM4mIiMDV1ZUuXbqwZcuWcsv+97//pUePHvj5+eHn50dMTEyZ8qqq8uqrrxISEoKbmxsxMTEcPny4ul9GhUjLkBBC1A0rk1cS+0MsDyx7gAnrJvDAsgeI/SGWlckrq/V5W7VqRUpKivVj/fr1Fb5Wr9cTHByMk1PdWpNZ82Ro0aJFjB8/ntdee40dO3Zw/fXXExsbS3p6ut3ycXFxjBw5kjVr1rBx40bCwsLo378/J06csJZ57733+OSTT5g9ezabN2/Gw8OD2NhY8vPzHfWyyiVjhoQQovZbmbyS8XHjSctNszmenpvO+Ljx1ZoQOTk5ERwcbP2oX7++9ZyiKMyaNYuBAwfi5uZG48aN+f77763n7XWT7d27l4EDB+Lp6UlQUBD33nsvp0+ftp43m8289957NG3aFBcXFxo1asTbb79tPX/s2DGGDx+Or68v/v7+DB06lKNHj1rPx8XF0blzZzw8PPD19aVbt24kJydXU+3Yp3kyNG3aNB5++GHuv/9+WrZsyezZs3F3d2fOnDl2y3/77bc88cQTtGvXjubNm/O///0Ps9nMqlWrAEur0EcffcQrr7zCrbfeStu2bZk3bx4nT57k559/duArs09mkwkhxLVHVVVyjbkV+sguyGbKlimolN32Qi3+N3XLVLILsit0v8pun3H48GFCQ0Np3Lgxo0aNskk8ACZNmsQdd9zBrl27GDVqFCNGjODff/+1e6+MjAz69OlD+/bt2bZtG0uXLiUtLY3hw4dby0ycOJGpU6cyadIk9u/fz/z58wkKCgLAaDQSGxuLl5cX69atY8OGDXh6enLnnXdSWFhIUVERQ4cOpWfPnuzevZuNGzfyyCOPoChKpV7z1dK0HaywsJDt27czceJE6zGdTkdMTAwbN26s0D1yc3MxGo34+/sDkJiYSGpqKjExMdYyPj4+dOnShY0bNzJixIgy9ygoKKCgoMD6OCsrC7B8EY1G4xW9NnuMRqN1zFChsbBK7y0uKKlXqd/qJ3XtGFLPjlG6nk0mE6qqYjabMZvN5Bpz6bqwa5U9V1puGjcuvLFCZTeO2Ii7wb1CZTt16sScOXNo1qwZKSkpvPnmm/To0YPdu3fj5eUFwJ133skDDzwAwOTJk1mxYgWffPIJM2fOxGy2bBVV8rqnT59Ou3bteOutt6zP8b///Y/w8HAOHDhASEgIH3/8MZ988gn33nsvAJGRkdx4442YzWYWLFiA2Wzm888/tyY4X3zxBfXq1WPNmjV06tSJzMxMBg0aRGRkJADNmjWzxmCP2WxGVVWMRiN6vd7m3JV+j2iaDJ0+fRqTyWTNIEsEBQVx4MCBCt1jwoQJhIaGWpOf1NRU6z0uvmfJuYtNmTKFyZMnlzm+fPly3N0r9gasqJKWoc1bN5NpyKzSewtbK1as0DqEOkPq2jGknh1jxYoV1q6mnJwcCgsLySvK0yye7Oxsipwq1pvQrVs36+cREREsWLCANm3aMG/ePGuy0q5dO+sf/QAdOnRgz549ZGVlkZOTA8D58+fJyspi+/btxMXF4e3tXea59uzZw4kTJygoKKBLly429yyxdetWjhw5go+Pj83x/Px89u/fT9euXbn77rsZOHAgvXr1olevXgwdOpTg4OByX2NhYSF5eXmsXbuWoiLbesnNza1ALZV1TY+Qmjp1KgsXLiQuLg5XV9crvs/EiRMZP3689XFWVpZ1LJK9N8CVMhqNfP7j5wC069COPmF9quze4gKj0ciKFSvo168fBoNB63BqNalrx5B6dozS9WwymTh27Bienp64urripXqxcUTFeix2pO1g7Jqxly03s/dMOgR1uGw5Nye3K+428vb2plmzZpw4ccL6+8zV1dXmd5uzszNOTk54e3vj6ekJgIeHB97e3uTn53PzzTczderUMvcOCQkhISEBAE9PT7u/L41GI9HR0Xz99dfWY6qqcv78eSIiIvD29ubrr79m/PjxLFu2jF9//ZW3336bZcuWccMNN9h9Tfn5+bi5uXHTTTeV+d1vLyGrCE2Tofr166PX60lLsx1glpaWdsmsEOCDDz5g6tSprFy5krZt21qPl1yXlpZGSEiIzT3btWtn914uLi64uLiUOW4wGKr8B09JyxA65IdaNauOr5+wT+raMaSeHcNgMKDT6VAUBZ1Oh05n+bntqfes0PXdGnYjyD2I9Nx0u+OGFBSC3IPo1rAbep3ezh2qTk5ODvHx8dx7773W17Flyxbuu+8+a5nNmzfTvn17m9da8nl0dDQ//PADjRs3tjvDrFmzZri5ubFmzRqaNGlS5nx0dDTfffcdwcHB1mTJbDaTlZWFt7e39fmio6OJjo7mpZdeomvXrixcuJAbb7TfjVjytbH3/XCl3x+aDqB2dnYmOjraOvgZsA6G7tq1/L7Z9957jzfffJOlS5fSsWNHm3ORkZEEBwfb3DMrK4vNmzdf8p6OInuTCSFE7abX6Xmx84uAJfEpreTxhM4TqiUR+s9//sNff/1FUlISf//9N7fddht6vZ6RI0dayyxevJg5c+Zw6NAhXnvtNbZs2cK4cePs3m/s2LGcPXuWkSNHsnXrVuLj41m2bBn3338/JpMJV1dXJkyYwAsvvMC8efOIj49n06ZNfPHFFwCMGjWK+vXrc+utt7Ju3ToSExOJi4tjwoQJHD9+nMTERCZOnMjGjRtJTk5m+fLlHD58mBYtWlR53VyK5t1k48ePZ8yYMXTs2JHOnTvz0Ucfcf78ee6//34ARo8eTYMGDZgyZQoA7777Lq+++irz588nIiLCOg7I09MTT09PFEXhmWee4a233iIqKorIyEgmTZpEaGgoQ4cO1eplWsk6Q0IIUfvFhMcwrdc0pm6ZajO9Psg9iAmdJxATHnOJq6/c8ePHGTlyJGfOnCEgIIDu3buzadMmAgICrGUmT57MwoULeeKJJwgJCWHBggW0bNnS7v1CQ0PZsGEDEyZMoH///hQUFBAeHs6AAQOsrTqTJk3CycmJV199lZMnTxISEsJjjz0GgLu7O2vXrmXChAncfvvtZGdn06BBA3r06IG3tzcFBQUcOHCAuXPncubMGUJCQhg7diyPPvpotdRPeTRPhu666y5OnTrFq6++SmpqKu3atWPp0qXWAdBHjx61VjjArFmzKCws5M4777S5z2uvvcbrr78OwAsvvMD58+d55JFHyMjIoHv37ixduvSqxhVVFUmGhBCibogJj6F3WG92pO/gVO4pAtwD6BDYoVq7xhYuXHjZMqGhoSxfvtzuuYiIiDJT+aOiovjxxx/LvZ9Op+Pll1/m5Zdftns+ODiYuXPnWh9f3E32008/XTbm6qZ5MgQwbty4cpvo4uLibB4nJSVd9n6KovDGG2/wxhtvVEF0VUsWXRRCiLpDr9PTKbiT1mGIy9B80cW6xjpmSFqGhBBCiBqhRrQM1SXWFahlo1YhhBAOVtnVrOsKaRlyMBkzJIQQQtQskgw5mIwZEkKIa4e0pNQ81fE1kWTIwUrGDMlGrUIIUXOVLN53pds7iOpT8jWpygVIZcyQg0nLkBBC1Hx6vR5fX1/S09MBy3o5jt5JvbYym80UFhaSn59vs3TO5aiqSm5uLunp6fj6+pbZpPVqSDLkYHosXzwZMySEEDVbyfZOJQmRqBqqqpKXl4eb25Xtuebr63vZLbsqS5IhBytZil1mkwkhRM2mKAohISEEBgZiNBq1DqfWMBqNrF27lptuuqnSXV0Gg6FKW4RKSDLkYLLOkBBCXFv0en21/AKuq/R6PUVFRbi6utaYjYdlALWDyZghIYQQomaRZMiBTGaVzALLXxfHM3IwmWXKphBCCKE1SYYcZOneFHr931q2nbIkQ3/uPUn3d1ezdG+KxpEJIYQQdZskQw6wdG8Kj3+zg9SsAqxVrphJzczn8W92SEIkhBBCaEiSoWpmMqtM/m0/1g4xtWQQntl6bPJv+6XLTAghhNCIJEPVbEviWVIy8y8cUC1Vrihmy0MgJTOfLYlnNYhOCCGEEJIMVbP07Hybx2qpbrJLlRNCCCGEY0gyVM0CvVxtD6glVW6+dDkhhBBCOIQkQ9Wsc6Q/IT6uXFhw3LZlSAFCfFzpHOmvQXRCCCGEkGSomul1Cq8NaXnhQEnLkGKyJkivDWmJXicbAAohhBBakGTIAQa0DmHWPR3wczeglgygxkywjyuz7unAgNYhGkcohBBC1F2yN5mDDGgdgqseHvp5EwDXN/Lm25v7SIuQEEIIoTFpGXIgdxcn6zpDXq46SYSEEEKIGkCSIQdyM+hBtSRAsmu9EEIIUTNIMuRAbgY9yK71QgghRI0iyZADuRh01tlkRWqRxtEIIYQQAiQZcig3gx4Vy5ihIpO0DAkhhBA1gSRDDuRq0FtbhoxmaRkSQgghagJJhhzIWa+gFA+gLpJkSAghhKgRJBlyIEVR0CslLUPSTSaEEELUBJIMOZhBkdlkQgghRE0iyZCDOemKZ5NJN5kQQghRI0gy5GAGpXg2mSy6KIQQQtQIkgw5mJN0kwkhhBA1iiRDDmYdMySLLgohhBA1giRDDmZQLFPrzdJNJoQQQtQIkgw5mEFX0jIkyZAQQghRE0gy5GDOxcmQtAwJIYQQNYMkQw5msCZDZo0jEUIIIQRIMuRwzsUDqM1Iy5AQQghRE0gy5GAlLUOgSuuQEEIIUQNIMuRgLsWzyUDWGhJCCCFqAkmGHOxCyxAUyVpDQgghhOYkGXIwF/2FKpeWISGEEEJ7kgw5mHOpliFZa0gIIYTQnpPWAdQ1LpIMCaEZk1llS+JZ0rPzCfRypXOkP3qdcvkLhRC1miRDDuaiU1BVHYpilm4yIRxo6d4UJv+2n5TMfOuxEB9XXhvSkgGtQzSMTAihNekmczCDDlBlSw4hHGnp3hQe/2aHTSIEkJqZz+Pf7GDp3hSNIhNC1ASSDDmYs16lpNqLzDKbTIjqZjKrTP5tP6qdcyXHJv+2H5PZXgkhRF0gyZCDScuQEI61JfFsmRah0lQgJTOfLYlnHReUEKJGkTFDDuaswzJmCJlaL4QjHEnPrlC5V3/Zy8DWwURH+NOhkS9eroZqjkwIUVNIMuRgBh1Yu8lk0UUhqk1KZh6f/ZXAN5uSK1T+cHoOh1cfAUCnQPNgbzpF+NExwp9OEf4E+7hWZ7hCCA1JMuRgzqW6yQqLjNoGI0QtdPxcLrPi4lm87TiFJsv+fwa9gtFkf0yQAtT3dOHpmCh2HD3HtqRzHD2by/6ULPanZDF3oyWZaujnRqcIfzpG+NEpwp+mAZ7oZFq+ELWCJEMOVrplKNcoLUNCVJXkM+eZueYIP+44QVHxYOgukf481TeKrDwjT3y7A8BmIHVJKvPm0FYMaB3CPTeEA5CWlc+2pHNsTTrLtuSz7D+ZxfFzeRw/d4Kf/jkBgI+bgehwP2ty1KaBD64GvaNerhCiCkky5GClB1DnFhZqG4wQtUD8qRxmrj7CL7tOWmeEdW9anyf7NKVL43rWcrPu6VBmnaHgctYZCvJ2ZXDbEAa3tRzPKSjin6Pn2Jp0jm1JZ/nnaAaZeUZWH0hn9YF0AJz1Oto29CnuVvMjOtwPX3fn6n75QogqIMmQgykKKMUtQ3lGSYaEuFKH0rKZvvoIv+8+iVrc3NOrWQBP9okiOtyvTPkBrUPo1zL4ilag9nRxokdUAD2iAgAwmsz8m5JlTY62Jp3jdE4B25LPsS35HLP/slx3XZAnHSP86RhuaT1q6OeGokjXmhA1jSRDGlCwNKXnGWXMkBCVte9kJjNWH+HPvanWYzEtgniyT1OuD/O95LV6nULXJvUuWaYiDHodbRv60rahLw92j0RVVZLP5Fq61ZLOsTX5LAmnznMoLYdDaTnM33wUgCBvF0vLUbhlYHaLEG/ZDkSIGkCSIQ3oFD1mJBkSojJ2H8/gk1VHWPlvmvXYwNbBjOvTlFahPhpGBoqiEFHfg4j6HgzrGAbAmeKWou3JlrFHe45nkpZVwB+7U/hjt2XFa08XJ9o38rUOzG4X5ou7s/xYFsLR5LtOAzp0kgwJUUHbk88xffVh4g6eAixdzTe3DWVc76Y0C/bSOLry1fN0IbZVMLGtggHIKzSx63iGtVttR/I5sguKWHf4NOsOnwbASafQKtS71LgjfwK8XLR8GULUCZIMaUCnFHeTFcmYISHKsznhDNNXH2H9EUuioNcp3Hp9KE/0bkrTQE+No6s8N2c9NzSuxw3Fg7pNZpWDqdlsSz5rHXuUkpnPruOZ7DqeyRfrEwGIrO9Bh0Y+OGcqtDh9nqhgHxl3JEQVk2RIAyXJUL5MrRfChqqqbIw/w8erDrO5eHsMJ53C7R0a8ESvpkTU99A4wqqj1ym0DPWmZag3o7tGAHAiI6+45cgy9uhgWjaJp8+TePo8oGfBxxuo5+FMxwg/OoZbutZahfrg7CQ7KwlxNSQZ0oC+OBkqKJJkSAiwJEF/HTrF9NVH2J58DrAslDisYxiP92xCmL+7xhE6RgNfNxq0a8Ct7RoAkJlrZMfRc2xOOM2KfxI4lqfnzPlClu1LY9k+y9gpV4OOdmEl445kKxEhroQkQxooSYbyZQVqUcepqsqqf9OZvvowu45nAuDspOPuzo14tGdjQnzcNI5QWz7uBno3D6R7Ez9aGA/Tt38/DqafL14Q8hzbks+SkWtkU8JZNiVYWtIu3kqkY4Rfna9HIS5HkiEN6HVOoEKBJEOijjKbVZbvT2X66iPsO5kFWFo47ukSziM3NSbQW/YBs8fFSUd0uD/R4f482tNSjwmnc9haslp2OVuJNPB1s9lnLSpQthIRojRJhjSgV/SWZMgk3WSibjGZVZbsSWHG6iMcTLPsJu/urGd01wge6hFJfU+ZOVUZOp1C00AvmgZ6MbJzI8D+ViInMvI4sTOPn3eeBMDb1cnaaiRbiQghyZAmnHR6MMtGraLuKDKZ+W33SWasPkL8qfMAeLk4cV+3CB7oFomfh2xbUVXsbSWy82iGNTnakZxBVn6R3a1EoiP86BTuT3S4n3xNRJ0iyZAGnHSWapcB1KK2M5rM/PTPCT5dc4SkM7mAZYPTB7pFcl+3CHzcZKBvdfN0caJ7VH26R9UHLr+VyGckABAV6Gld70i2EhG1nSRDGnDSFc8mM0nLkKidCopM/LD9BJ/GHeH4uTwA/NwNPNSjMaO7hstsJw2Vt5XItuRz1mn98afOczg9h8PpOSzYYn8rkebBXjjpZUq/qB00T4ZmzpzJ+++/T2pqKtdffz3Tp0+nc+fOdsvu27ePV199le3bt5OcnMyHH37IM888Y1Pm9ddfZ/LkyTbHmjVrxoEDB6rrJVRaSctQocmkcSRCVK18o4nvth1jVly8dXf4+p4uPHJTJKO6hOPhovmPHHGR0luJ3BndELBsJbK9uKVoa9JZ9p4ou5WIh7OeDuGW9Y46RfjRrpFsJSKuXZq+cxctWsT48eOZPXs2Xbp04aOPPiI2NpaDBw8SGBhYpnxubi6NGzdm2LBhPPvss+Xet1WrVqxcudL62MmpZn2DGopbhgqlZUjUEnmFJuZtPs5nf8WTnl0AWFoSHr2pCSM7N8LNWQbnXkvqebrQv1Uw/Yu3Esk3mth1LMOaHG1PKruViF6n0Fq2EhHXKE2zhGnTpvHwww9z//33AzB79mz++OMP5syZw4svvlimfKdOnejUqROA3fMlnJycCA4OrnAcBQUFFBQUWB9nZVmm+hqNRoxVuH9Yyb2cFEvTcmFR1d5fWJTUqdRt9cs4n8eqEwpvTFvLmfOW+g7xceXRHhHc2aEBLgY9YMZoNGsb6DVO6/e0HugQ5k2HMG8e6R6OyaxyOD2nuPXIkiSlZhWU2Uokop470eG+RDfyJbqRH5H13Wv0uCOt67muqM56vtJ7apYMFRYWsn37diZOnGg9ptPpiImJYePGjVd178OHDxMaGoqrqytdu3ZlypQpNGrUqNzyU6ZMKdO1BrB8+XLc3at+5dvszCzQQWZOFkuWLKny+wuLFStWaB1CrZVXBOtSFeJSdJwv0gNG6rmoxDQw0zkgB6cze1m1Yq/WYdY6Ne097Qf084R+reBsASRkKSRkKyRmK6TkQtKZXJLO5PLDDsuUfk8nlUgvlcbeKo29VBp6QE3cSaSm1XNtVR31nJube0XXaZYMnT59GpPJRFBQkM3xoKCgqxrf06VLF7766iuaNWtGSkoKkydPpkePHuzduxcvL/s7XE+cOJHx48dbH2dlZREWFkb//v3x9va+4lguZjQaWbFiBUEBgSSdAYOrC4MGDaqy+wuLknru168fBoMM1K1KmXlG5m5MZu7Go2TlW2ZDBriqPBvbgqHtG2KQAbXV4lp8T2flGfnnWAbbkzPYdjSDXcczySkys+ecwh7Ljiu4GnRc39CH6EZ+dAz3pV2Yj6aD66/Fer4WVWc9l/TsVFbNGkxTBQYOHGj9vG3btnTp0oXw8HC+++47HnzwQbvXuLi44OJStm/bYDBUyzeEi5PlnkVmk3zDVaPq+vrVRWfPF/LF+gTm/p1MToElCWoa6MnjN0WiHP+HIR0bSV07wLX0nq5nMBDTyp2YVqGAZYbh3hNZ1un825PPci7XyObEc2xOtGRHykVbiXTSaCuRa6mer2XVUc9Xej/NkqH69euj1+tJS0uzOZ6Wllap8T6X4+vry3XXXceRI0eq7J5Xy1lvqfYis6wzJGq2U9kF/G9dAl9vSia30DL7sXmwF0/2iWJg62BMpiKWnPhH4yjFtcDFSU90uB/R4X482tOyL138qfPW5Ghb8lmSz+Tyb0oW/6ZkMU+2EhEOpFky5OzsTHR0NKtWrWLo0KEAmM1mVq1axbhx46rseXJycoiPj+fee++tsnteLWe9JXM1ytR6UUOlZeXz2V8JzN+STH7x4OdWod481TeKfi2CrL+M5C0srpSiKDQN9KRpoCcjircSSc/Kt85Y25Z0jn0nM8vdSiQ63LIYZNuGspWIuHqadpONHz+eMWPG0LFjRzp37sxHH33E+fPnrbPLRo8eTYMGDZgyZQpgGXS9f/9+6+cnTpxg586deHp60rRpUwD+85//MGTIEMLDwzl58iSvvfYaer2ekSNHavMi7XApaRlSpWVI1CwnM/KY/Vc8C7ceo7DIkgRdH+bL032b0rtZYI2eCSSufYHergxqE8KgNmW3EtmefI4dR8/Z3UqkTUMfyz5rspWIuEKaJkN33XUXp06d4tVXXyU1NZV27dqxdOlS66Dqo0ePotNdGJB58uRJ2rdvb338wQcf8MEHH9CzZ0/i4uIAOH78OCNHjuTMmTMEBATQvXt3Nm3aREBAgENf26W4FK97ZDLLn9WiZjh2NpdP4+L5fvsxjCYVgI7hfjzVN4oeUfUlCRKauHgrkSKTmX9Tsq37rG1NOsepbMsCkdvL2UqkY7g/Yf6ylYi4NM0HUI8bN67cbrGSBKdEREQEqqpe8n4LFy6sqtCqjXPxAGqTasJsVqX/W2gm6fR5Zq45wo//nMBktnxvdW1cjyf7NqVr43ryC0TUKE7FrUBtGvrwQPFWIkfP5pbaZ83+ViKBXi50ivC3tB7JViLCDs2TobrIVV9S7Wbyi0yyhL1wuCPpOcxcc4Rfdp6gOAeiR1R9nuobRacIf22DE6KCFEUhvJ4H4fUubCVy9nyhZTHI4uRoz4lM0rML+GNPCn/ska1EhH3y1ddAydR6RTGTVyjJkHCcg6nZTF99mD/2pFDSyNqneSBP9mlK+0Z+2gYnRBXw93CmX8sg+rW0DLcos5VI8jmy8+1vJdI+zAfljEKn7AJC/WVqfV0iv4U1YCjeqBXFTJ5Rxg2J6rf3RCYzVh9h6b5U67H+LYN4sk8UbRr6aBiZENXL1aCnS+N6dGlcDwCTWeVQWjbbks6yLfkc25LOcSIjz7qVCOj58r2/iKjnfmHcUYQ/jet7SLdxLSbJkAb0upJpoGbrtGUhqsPOYxlMX3WYVcUzbxQFBrUOYVyfprQIqbrV1YW4Vuh1Ci1CvGkR4s29XSMAOJGRx7aks2xJOMOavUdJyVOsW4l8v/04YGlx6lg8nT86wo/WoT4418S9RMQVkWRIA3qlOBlSzORLy5CoBtuTz/LxqiOsPXQKAJ0CQ64PZVzvpkQF2d+WRoi6qoGvGw3aNWBQq0A66xPp3rsfu1NyrAtC7jqWwdnzhSzfn8by/ZaFgl2cdLQL87UOzO4Q7oe3hluJiKsjyZAGdMW71qOYpJtMVKlNCWf4ZNVh/o4/A1j+Ch7argFjezehcYCnxtEJcW3wdjPQu1kgvZsFAlBYZGbvycwLq2UnlWwlcpbNiWeBmrOViLgykgxpwKl4zJCCZQC1EFdDVVU2HLEkQVuSLD+YnXQKd0Y35IleTWlUz13jCIW4tjk76ejQyI8Ojfx45KbKbSXSsVRydF2glyylUkNJMqQB6SYTVUFVVeIOneKTVYf552gGYFmNd3inhjzWswkN/SQJEqI6XGorkW3FydG+k1nWrUR+KbWVSHT4hX3WZCuRmkOSIQ1YkyFkNpmoPFVVWbE/jRlrjrD7eCZgGb9wd5dGPHpTE4J9XDWOUIi65+KtRM4XFLHzWIZ1n7WSrUTWHDzFmoOWsXyltxLpGO5PR9lKRDOSDGnAOptMWoZEJZjNKkv3pTJ99RH+TckCwM2g596u4TzUI5JAL0mChKgpPFyc6Na0Pt2aVm4rkaaBntZtRDpFyFYijiLJkAaclFLrDMmYIXEZJrPK77tPMnPNEQ6l5QCWFXTH3BjBg90jqefponGEQojLsbeVyLGzeTbJ0ZH0HOvHgi3HANlKxFEkGdJAScuQgpk8WWdIlKPIZOaXnSeZGXeEhFPnAfBydeL+bpE80C0CX3dpThfiWqUoCo3qudOonjt3VHIrkfaN/KzJUbswXzxc5Ff51ZIa1IAMoBaXUlhk5qd/jjNzTTxHz+YC4Otu4MFukYy+MQIfN1nLRIja6FJbiZSsmJ2dX8T6I6dZf+TCViKtQr2t+6xFR/hJl/kVkGRIAxeSIZMkQ8KqoMjE4m3HmRUXz4mMPADqeTjzUI/G3Ns1HE/560+IOuXirUTMZpVD6dnWtY5KthLZfTyT3cczmbMhEcC6lUjH4plrTQJkK5HLkZ+uGriwHYcqs8kE+UYTC7ccZfZfCaRm5QMQ4OXCozc15u4ujWQjXyEEADqdQvNgb5oHe3PvDeHAha1EtiVZNqI9mJZtdyuR6HA/64KQspVIWfJTVgMygFoA5BYWMX/zUT5bm8Cp7AIAgr1deaxnY0Z0biTrjwghLqtkK5Fb2zUAIDPPyD9Hz1mTo53FW4ms2J/GCtlKpFxXnQyZTCb27NlDeHg4fn5+VRFTrVd6AHV+kQygrmtyCor4emMy/1uXwJnzhYDlB9rjvZowrGNDXJwkCRJCXBkfNwO9mgXSq5JbiTQL8rKZtRbqW7e2Eql0MvTMM8/Qpk0bHnzwQUwmEz179uTvv//G3d2d33//nV69elVDmLVL6QHU0jJUd2TlG5m7IYkvNiSSkWsEoJG/O2N7N+G29g2l2VoIUeXK20pke/KF5CjpTC4HUrM5kJrN15vq5lYilU6Gvv/+e+655x4AfvvtNxITEzlw4ABff/01L7/8Mhs2bKjyIGubC4suygDquiAjt5A5G5L4ckMi2flFADSu78G4Pk255fpQWTNECOEwpbcSuatT8VYi2flsTzpn3WfN3lYiXsVbiXQqHph9fZhvrerKr3QydPr0aYKDgwFYsmQJw4YN47rrruOBBx7g448/rvIAayPrmCHZjqNWO5NTwBfrE5m3MZmcAksSFBXoyZN9oxjcJgR9Lf4rSwhx7Qj0cmVgmxAG2tlKZHvyOXYUT+mPO3iKuOKtRAx6hTYNfIq71vyJDvfDvwJbiZjMKpsTz7L9tEK9xLN0bRpYI34WVjoZCgoKYv/+/YSEhLB06VJmzZoFQG5uLnp97ckSq5NOKW4JkHWGaqX07Hz+uzaBbzYdtSa7LUK8ebJPUwa0Cq7VTc1CiGufva1EDqRmW/dZ25p0lvTsAnYczWDH0Qw+W3thK5GO4Re61hr5u9tM6V+6N4XJv+0nJTMf0DPv8DZCfFx5bUhLBrQO0eKlWlU6Gbr//vsZPnw4ISEhKIpCTEwMAJs3b6Z58+ZVHmBtVDJmSFGkZag2Sc3MZ/Zf8SzYcpSC4oHxbRr48FTfKGJaBMo6H0KIa5KTXkfrBj60buDD/d3KbiWyLekch0ttJbJwq2UrkQAvF+s+a0aTmal/HkC96N6pmfk8/s0OZt3TQdOEqNLJ0Ouvv06bNm04evQow4YNw8XFsi+SXq/nxRdfrPIAa6ML6wyZyZcB1Ne8Exl5zIo7wndbj1NosiRB7Rv58lTfKHpdFyBJkBCiVrG3lci54q1EthYnR7uPZ3Aqu4Ale1JZsie13HupgAJM/m0//VoGa9ZlVqlkyGg0MmDAAGbPns0dd9xhc27MmDFVGlhtZrPOkLQMXbOOnsnl07gj/LDjOEaT5e+dzhH+PNU3im5N60kSJISoM/w8nIlpGURMqa1Edh/PZGvSWVbsT2Xnscxyr1WBlMx8tiSepWuTeg6K2FalkiGDwcDu3burK5Y648JsMkmGrkUJp3KYuSaen3eewGS2JEE3NqnHU32juKGxNt/IQghRk7ga9HSO9KdzpD8N/dx4euHOy16Tnp1f/YGVo9LdZPfccw9ffPEFU6dOrY546gTrOkOYyTeaUVVVWhGuAYfTspmx5gi/7TpJcQ5Ez+sCeKpvU6LD/bUNTgghaqiKbhyr5QazlU6GioqKmDNnDitXriQ6OhoPDw+b89OmTauy4GqrCwOoVcBMQZG5Vq3XUNv8m5LFjNVHWLI3BbU4CYppEci4PlG0C/PVNDYhhKjpOkf6E+LjSmpmfpkB1GAZMxTs40rnSO3+qKx0MrR37146dOgAwKFDh2zOSetGxTjpSle7ZRVqSYZqnr0nMvlk1WGWF+/nAzCgVTDj+jSldQMfDSMTQohrh16n8NqQljz+zQ4UsEmISrKG14a01HS9oUonQ2vWrKmOOOqUC91kWMcNya5uNcc/R88xffURVh9IByz79gxuE8K4Pk1pHuytcXRCCHHtGdA6hFn3dCi1zpBF8LW6zpC4ehem1iMLL9YgW5PO8smqw6w7fBoAnQK3tmvA2N5NaBropXF0QghxbRvQOoR+LYPZeCSd5es2079Hl2t3BerevXtfsjts9erVVxVQrWY2US/7X5z+PV/6oMwo05CqqmxMOMMnqw6zKcGyg7OTTuG29g14ondTIut7XOYOQgghKkqvU+gS6c+Zf1W6RPrXiEQIriAZateunc1jo9HIzp072bt3r6w1dCn7f8Xpzwl0zz6JegSItGyQ10e/nXxjX21jq4NUVWXd4dNMX32YrUnnAMteO3dGh/FEryaE+btrHKEQQghHqXQy9OGHH9o9/vrrr5OTk3PVAdVK+3+F70ZTMmxMAfSqiklRmGL4jLNH2kD4KE1DrCtUVWXNwXQ+WXWEnccyAHB20jGiUxiP9WxCqK+btgEKIUQtZjKb2Ja2jV2FuwhMC6RzaGfboSMaqbIxQ/fccw+dO3fmgw8+qKpb1g5mEyydAKiUbgzUq2BSwIRCxLY3ofcIqAFviNrKbFZZ8W8a01cfZu+JLABcDTpGdQnnkZsaE+St3foWQghRF6xMXsnULVNJy7XM0F28ajFB7kG82PlFYsJjNI2typKhjRs34uoqv1DKSP4bsk6WOawv3pHFrAO3vBRLucgejo+vljObVf7cm8r01Yc5kJoNgLuznntvCOehHo0J8HLROEIhhKj9ViavZHzceNSLVhpKz01nfNx4pvWapmlCVOlk6Pbbb7d5rKoqKSkpbNu2jUmTJlVZYLVGTprdwyVtQKaS9qJyyokrY1bh110pzFqbyJF0S/etp4sT990YwQPdI/H3cNY4QiGEqBtMZhNTt0wtkwgBqKgoKLy75V16h/XWrMus0smQj4/tYnM6nY5mzZrxxhtv0L9//yoLrNbwDLJ7WF+8lLFJuXQ5UTlGk5kf/znBBzv1nNq0BwBvVyce6B7J/TdG4uNu0DhCIYSo/YxmI8eyjpGQmcDa42utXWP2qKik5qayI30HnYI7OTDKCyqdDH355ZfVEUftFX4jeIdCVgql190syX2NqkKOSxCe4TdqEl5tUVhk5ocdx/k07gjHzuYBCn7uBh7q0Zh7u4bj7SpJkBBCVLW8ojySMpNIyEywfGRY/j+adZQitahS9zqVe6qaory8KxozlJGRwffff098fDzPP/88/v7+7Nixg6CgIBo0aFDVMV7bdHoY8C58N7q4MdCSEDkVtwwVKfCt3+O0Tcygcw1ac+FakW80sXjbMWbFxXOyeFXTeh7OdKuXxxuj++DrKbPDhBDiamUVZpGQkUBiZiIJmQnEZ8STkJnAyZyTdru/ANyc3Gjs0xhvZ282pmy87HMEuAdUddgVVulkaPfu3fTt2xdfX1+SkpJ4+OGH8ff358cff+To0aPMmzevOuK8trW8BYbPgz8nQLZlMHVJy9DbppH8nXQd/HcTITVkWfJrQb7RxPzNR/lsbTxpWQUABHq58GjPJgxrH8KalcvwcJEF1oUQoqJUVeVM/hkSMxOtyU5JS8+pvPJbbXxcfGji04RIn0ga+zSmiW8TGvs0JsgjCJ2iw2Q2EftDLOm56XYTJwWFIPcgOgR2qM6Xd0mV/m0xfvx47r//ft577z28vC5sUTBo0CDuvvvuKg2uVml5C0VN+pP5yU3UP3+QXLMbYGST2sJaJDUzn8e/2cGsezpIQlSO8wVFfLs5mc/XJnI6x5IEhfi48nivJgzvGIarQY/RaNQ4SiGEqLnMqpnU86nWhKd0a09WYVa51wW6BdLYtzGNfYo/ij/3d/W/5M4Uep2eFzu/yPi48cX9IxcSIqV4EtGEzhM0XW+o0snQ1q1b+eyzz8ocb9CgAampqVUSVK2l03PWoyn1zx9EV/wGUDBbT1sm28Pk3/bTr2WwdJmVkp1vZN7GZL5Yn8jZ84UANPRz44leTbkjugEuTrJGkxBClFZkLuJY9jGbFp6S5CevKM/uNQoKDTwbWFt3In0iaeJrafXxcr7yPRpjwmOY1muazTpDAEHuQUzoPOHaW2fIxcWFrKyymeOhQ4cICNCuv+9akWAO5jrApWRgmWK2Oa8CKZn5bEk8S9cm9RweX02TmWfkqw1JzNmQSGaepcUnop47T/Ruym3tG2DQ6zSOUAghtJVflE9yVrLNWJ7EzESSspIoMtsfxOykcyLcK9ympaeJbxPCvcNxdaqeNQNjwmPoHdabLSe3sGLjCvp17XftrkB9yy238MYbb/Ddd98BoCgKR48eZcKECdxxxx1VHmBtc1KxTKF3pQjQlUmGSqRn5zswqprn3PlC5mxI5KsNSWQXWL6ZmwR48GSfKG5uG4KTJEFCiDompzCnzKythMwEjmcfv+Qg5gjvCGtLT0n3VkOvhhh0jp9lq9fp6RjUkXTndDoGdawRiRBcQTL0f//3f9x5550EBgaSl5dHz549SU1NpWvXrrz99tvVEWOtUuhmSYbcKAKcAfvJ0CcrD3M6p5AhbUMIrENbRZzOKeB/6xL5emMS5wtNADQL8mJcn6YMahMiXYdCiFpNVVXO5p+1tu5YBzJnJpCem17udd7O3tbWndIDmYM9gtEp8sfj5VzRoosrVqxg/fr17N69m5ycHDp06EBMjLb9fdeKID8f8o86W6fWl9cyFH/6PG/+vp+3/thP18b1uLVdKANahdhdNNBkVtmSeJb07HwCvVyvySn66Vn5fL42gW82J5NvtNRJyxBvnurblP4tg9FdY69HCCEuRVVVUs+nWhOd+Ix460DmjIKMcq8LcAuwGbxc8nk913qXHMQsLu2K5x53796d7t27V2UsdYJOp6PQOwI9mYDtAOqSt/G7d7Yl32jil50n2Z58jr/jz/B3/Bkm/byPXs0CuLVdA/q2CMTVoGfp3hQm/7aflMwL3WrX0hT9lMw8PvsrgflbjlJYZKmL6xv68FTfKPo0D5RvbiHENa3IXMTx7ONlurcSMxPJLcq1e42CQqhnqM009UifSBr7WtbsEVWvQsnQJ598UuEbPvXUU1ccTF3hGRKFPnOr5UGplqHgi5KY0V0jOHY2l992n+TXnSc5kJrN8v1pLN+fhoezntYNfNiceLbM/a+FKfrHz+UyKy6exduOU2iy1EF0uB9P9Y3ipqj6kgQJIa4pBaYCkjKTyixKmJyVjNFsf7kPJ8WJRt6NyrT0RPhE4OYkC8Y6UoWSoQ8//LBCN1MURZKhClD9InEqToae7NuYCNd25XZvhfm780SvpjzRqykHUrP4dedJft11kuPn8uwmQlCzp+gnnznPzDVH+HHHCYrMlq7CGxr781SfKLo2kWZeIUTNdt543u6ihMdzjmNW7Q97cNW7EukTaZ2mXpL0hHmHaTKIWZRVoWQoMTGxuuOoU1S/SPSJlkSgcYAbQ5pUbAuT5sHeNB/gzfOxzZi3MZnXft1X/nNQs6box5/KYebqI/yy6ySm4iSoe9P6PNmnKV0aax+fEEKUdi7/XJmxPPEZ8ZfccNTL4GVt4Sk9kDnUM1QGMddwsl+BFvwbU/JtYVJNlb5cURR8K7j7evLZ85omQ4fSspmx+gi/7T5JyZjx3s0CGNcniuhwP83iEkIIVVVJy02ztvAcOXeE7dnb+eCHDy45iLm+W/0L43hKjeup7yZd/NeqK0qGjh8/zq+//srRo0cpLCy0OTdt2rQqCaw2U/0bW2eTmYoKL1PavkCvik23f/2XfRxIyeb+bhGE1/O4oue6EvtOZjJj9RH+3HthVfJ+LYN4sk9T2jb0dVgcQghhMps4kXOizKKECZkJnDeet3OB5b9Qj1Cblp6SBMjHxcexL0BUu0onQ6tWreKWW26hcePGHDhwgNatW5OUlISqqnTooN0ma9cUrxD0xU2mptzTV3SLzpH+hPi4kpqZX85SW+CkU8gvMvPV30nM3ZhETIsgHugWyQ2NL72PzNXYfTyDT1YdYeW/lqZkRYGBrYMZ1zuKlqEyC0IIUX0KTYXWlZhLL0qYlJlEodn+H556RW8dxBzuFU5WYha33XQbTf2b4m5wd/ArEFqpdDI0ceJE/vOf/zB58mS8vLz44YcfCAwMZNSoUQwYMKA6Yqx9FB16gwdgouh8+YtoXYpep/DakJY8/s0OFLBJiErSnOkj2+Pp6sSc9YmsOXiKFfvTWLE/jRYh3jzQLYIh14fiaqia1T+3J59j+urDxB207GysKDCkbSjj+jTluqAr389GCCEulmvMLTNrKzEzkWPZx8odeuCidyHCO6JMS08jr0YY9JZhB0ajkSUnltDCvwUGgwxsrksqnQz9+++/LFiwwHKxkxN5eXl4enryxhtvcOutt/L4449XeZC1kd7FE8yZmK4wGQIY0DqEWfd0KLPO0MVT9HtEBRB/KoevNiTx/fbj/JuSxfPf7+bdpQcY1SWcUTc0stvtVpHFHDcnnGH66iOsP2Jp4dLrFG5tF8rY3k1pEuB5xa9NCCEy8jPsLkqYcj6l3Gs8DZ52FyUM9QitMVs/iJqn0smQh4eHdZxQSEgI8fHxtGrVCoDTp6+sy6cucnL2gvxMTOevrs4GtA6hX8vgyyYtTQI8eXNoa/7TvxkLth5l7t9JpGTm8/Gqw8yKi2fI9aE80D2CVqGWvvBLLeYY2yqYjfFn+HjVYev0fiedwh0dGvJE7yYOHZskhLi2qapKem663T23zubbXz4EwN/V3+72EwFuATKIWVRapZOhG264gfXr19OiRQsGDRrEc889x549e/jxxx+54YYbqiPGWknv6g35UJR75urvpVMqPGPMx93AYz2b8GD3SJbtS2XO+kR2HM3ghx3H+WHHcbpE+tOukS+f/5VQZixSamY+j32zg8YBHiScsgw6dNbrGNaxIY/3akJDP+lfF0LYZzKbOJlz0m5LT44xp9zrQjxCyrb0+DTG19XXccGLWq/SydC0adPIybG8cSdPnkxOTg6LFi0iKipKZpJVgt7FFwBTXvl/+VQng17HzW1DubltKP8cPceXG5JYsieFzYlnL7mYI0DCqfM46xXu7hLOoz0bE+IjK6UKISyMJiNHs4+WWZQwKSuJAlOB3Wv0ip4wr7AyixJG+kTKIGbhEJVOht555x3uuecewNJlNnv27CoPqi5wcvMFwJR3DnZ/B14hEH4jaNCn3b6RH+0b+TFxUHOmLjnAL7tOXvaaj0e0Z2CbmrnVhxCi+uUac0nKSiqzKOGlBjE765yJ8Iko09IT7h2Os97Zwa9AiAsqnQydOnWKAQMGEBAQwIgRI7jnnnu4/vrrqyO2Wk2fa2l9KcIMPz5sOegdCgPehZa3VO5mZhMk/w05aeAZdMVJVYiPG31aBFqTIR1mOusOEEgG6fiyxdwcc/FykSX7iQkharfMgkzb7SeKW3tOni//jyYPg4e1Zad0S08DzwYyiFnUSJVOhn755RfOnTvH4sWLmT9/PtOmTaN58+aMGjWKu+++m4iIiGoIs3ZRDvyO/vAK8PHC5u+nrBT4bjQMn1fxhGj/r7B0AmSV+sF0pUkVFxZzjNVt4TXDPEKVC11mJ1V/JhtHs8zcucKLPgohaj5VVTmdd7rMVPX4jHjO5Jc/rtHf1d9m8HLJ50HuQTKIWVxTrmgFaj8/Px555BEeeeQRjh8/zoIFC5gzZw6vvvoqRUVFVR1j7aKa0S9/CScnywgcM6V/YBRvsbr0RWg++PKtO/t/tSRPFw91vpKkqljnSH9GeO7kHeNHZc4Fc5ZZho94yfACnSMHVeq+QgjtmVXzhUHMpWZtJWQkkG3MLve6YI9gm2nqJZ/7ucqWOqJ2uKq9yYxGI9u2bWPz5s0kJSURFBRUVXHVWvVyDqJkn0TvZ5nCXlTmjycVsk7Az0+AfyQoOssKhoqu+ENv+R/gr/cokwiV3APg1yfh/KkL5StAr5p5Q5mNguVpS9MpYFbhdf0c9Nn3gZsfGNzKFhRCaMpoNnIs61iZlp7EzETyTfl2r9EpOusg5ou3n/AwyHIZona7omRozZo1zJ8/nx9++AGz2cztt9/O77//Tp8+fao6vlrH1ZgBgL44XzFRTiKxe+HVP1l+BvwxvtKXOQMolu15dri6cEqvJ8BkokN+AXoFXAtOw4ctLYV1TuDiBS7e4OoNLj7F/3tf+N/Fq9QxH9tzrt5g8ACd7OgsRGXlFeWRlJlUZqr60ayjFKn2W+kNOsOFQcylWnrCvcNx0bs4+BUIUTNUOhlq0KABZ8+eZcCAAXz++ecMGTIEFxf5BqqofIMvAPri1htTeY0qzQaDVzCoZvsf55Lg2ObLP2Foe/BuUPEAs07AyX9Y6e7G1Hp+pDldeIsEFRXx4plzxOTmQckmIOYiyDtn+bhiStkEqcz/XuUnUyUJlwzMFLVUdmE2R4uO8nP8zyRnJ1u7t07mnEQtZ3dCdyd3a7IT6RNJE58mNPa1DGJ20l1Vp4AQtU6lvyNef/11hg0bhq+vbzWEU/ud8WyG6hWKXrWs1WQq08WkWAZA3/X1pX+5J66DuTdf/gn7vQmRPSoeYOI6Vi4exvjA+mV+xKbr9YwPrM+09NPEDPsOQjtAQRbkZ5X6P/PC44Lsi85lQX6m7WNzEaBarivIrHic9jh7gos3Ti5e9Mgzoc+cC272WqrsJVw+loRKL/sRCW2oqsqZ/DNlxvIkZCZwKs+y5x92/v7xdfG1aeEpSXpkELMQFVfpZOjhhx+u0gBmzpzJ+++/T2pqKtdffz3Tp0+nc+fOdsvu27ePV199le3bt5OcnMyHH37IM888c1X3dDhFh6n/O+hXPgWAbUN28Q+uAVMv38oRfqMlacpKwf64oeKkKvzGSoVnCuvC1PrFidBFP0hVRUFRVd6tX5/eYTegd3IGF0/L81wJVYWi/PKTKZv/s8s/V7KQW2EOFOagZIM/QMKRysdkcL+o2+/ihOnibj873X9O0lIqymdWzaScT7EmOqWnrWcVZpV7nbfiTcugljTxa2LTxeXv6u/A6IWonTRtK120aBHjx49n9uzZdOnShY8++ojY2FgOHjxIYGBgmfK5ubk0btyYYcOG8eyzz1bJPbWgNr8Zp1Mb4difti1D3qGWRKgiM8B0esv0+e9GQ3n71lckqbrIjtO7SNOX/9ekqiik6uGJNU8S6hmKs84ZZ70zBp0BZ73l8/KOGfQG67kyxzzr4+xjuZ+Tzqlyf9EWFZRqjcqi6PxZdvwdR4dWUTgVnb+oVSrbTqKVBcZcy72MuZaPnLRK1ZsNvcvlE6bLjaWSgenXvCJzEceyj9m09MRnxJOUlUReUZ7da3SKjgaeDWji04RI30hrS09Dj4asXbGWQX0GyW7qQlQDTZOhadOm8fDDD3P//fcDMHv2bP744w/mzJnDiy++WKZ8p06d6NSpE4Dd81dyT4CCggIKCi4sE5+VZfnrzGg0YjQar/wFXqTkXkajEQJawbE/MUb0oKjbQPAMQg3rakleKvqcUQNR7vgS/fKXULIvrDOkeodi6vc2atTAit+rWGp2aoXK/X3y70rdt7IuTqisiZWunGOlEi09ek64nOFvtR6urq44uwdg0IXaLWu9BzoMRYU4mwoxGAtwKcrH2ZiHwZiHS8F59IU51mRLKci2JlVKqYRKKSzeX8lUALkFkHvlm/CqpQemu3ijlmqtUl1KJVMuXhceX3zO2bPaEyqb9/Q1wGQ28c+pfzidd5r6bvVpH9D+qhcBzC/K52j2UUsrT5ZlxlZCVgJHs49SZLY/iNlJ50S4VziNfRoT4R1BY2/LuJ7yBjFfa/V8rZJ6dozqrOcrvadmyVBhYSHbt29n4sSJ1mM6nY6YmBg2btzo0HtOmTKFyZMnlzm+fPly3N2rfl+cFStWcKDgAADHMwv4o8gNyIJ9y67gbjpo8g71cg7iaswg3+DLGc9mkKCDhCWVvluCMaFC5ToZOuGt96ZILcKEiSK1iCKKMKkmy//2jhX/b++YGdsVrQvNhRSaCysdf2nr9q+7qutL06FDjx4nxcnyP044uTihd/HCycev+JgeA4rlQwVnVS3+MONiNuOimnA2m3BVi3AxF+FqMuJiNuJmKsTVXIibuQA3U/6F60w5OJ/PxjnnBAbrvSwfBihvHqKVioJR70aRzg2j3p0ivRtGfenP3S95zqhzo0jvVqGlGVasWFEl9Vyd9hXu44+8P8hSL3RFeSveDHYbTCvnVpe9Pl/N55TpFOmmdE6ZT1k+N6eTYc4odxCzM87U19cnUBdIgD6AAF0AgfpA/HR+6BU9ZAFZYMLEkeJ/l3It1HNtIPXsGNVRz7m5uVd0nWbJ0OnTpzGZTGXWJgoKCuLAgQMOvefEiRMZP/7CFPSsrCzCwsLo378/3t7eVxSLPUajkRUrVtCvXz9yk3L5fevvBAYFMuimqljAsAKDqSvAZDbx+6+/k56bbve8gkKgeyCf3vJplS6rb1bNFJoKMZqNFJosiZDRZLQmRdbPyylT+nx+UT5HEo8Q0jAEE6by71vquNFc9ljpX3Dm4n9GtdRfHfZ//9mrNLhkVSmAS/FHxd9vBhScUXBWKZUsmXE2m3A2my3HUHFWwVnNw6DmXkiozCoGExclWCWfW467qioGVcXg5IqzkzvOBg8Mzh44G7wwuHhicPHGyeDFsRNnaNayA87u/tauvwstVMVdfxrPXlp1bBUL1y1AVVWb1rJscyYLcxfwXvT79A3ri6qqnCs4Z23dScxMJDEr0XYQsx0+zj5E+kQS6R1p/b9kJWZdJdb5Kk/pnx3STVZ9pJ4dozrruaRnp7JkfiXg4uJid3kAg8FQLd8QBoMBF4Pl+cyYa9Q3nQEDEztP5Nm4smOylOK2iBc7v4irS9Vvx+FC1Qw8NhqNLEldwqAuVz6+QlVVitQiS+JUnETZJFOljlkTrUscK52AlXvM3vUlj03GMuvGGFExonJeoVQzka74ozoUFH+cvfApgCuQsB1dSVJV0ipGyWPVkrQpepwVPQadE87WLk4XnJ1cihMut+Kky6046fLE2cULZ2dvDK7eOBvcbcacle4mLXOs+LiiKJjMJj7Y9GaZRAgsY+BQVV7d8BLz67UmISuBzEvMagx0CyTSt3iaeqkZXP6u/g6ZuVVdP5OELalnx6iOer7S+2mWDNWvXx+9Xk9amu1A1bS0NIKDg2vMPauLXrE0FZS3MJqWYsJj6BjUkW1p22yOB7kHMaHzBGLCYzSKzHEURcGgGDDoDLgbqr6r9EqUtJ6VTpAulaRddeJWVEBhUR5GU4Hlc2v5IgrVIgpVk03jmFlRyFcU7K9vXEIFjJYPU65lZc9qHJ7hpOjRKzoKzMbyx08pCnlmI/+c+sfyEIUGng1o7GsZvBzpE2lNerycvaovWCGEZjRLhpydnYmOjmbVqlUMHToUALPZzKpVqxg3blyNuWd1KeliMplNlynpeOfyz7Hr1C4AXunyCl7OXgS4B9AhsIPsOK0hnaLD1ckVV2rGJrmqqpJXmMfvf/5O75jeqDq1bBJWlEthfibG/AwKC7IsH4XZFBbmYCzMpdCYQ6Exz5J0FeVRaJN4GTEWJ12FChQqCkYUCpULH8bi4yUfRRclPEWqiSK1Yt9jI0N7cnv0OCK8I3B1qhl1LIRwDE27ycaPH8+YMWPo2LEjnTt35qOPPuL8+fPWmWCjR4+mQYMGTJkyBbAMkN6/f7/18xMnTrBz5048PT1p2rRphe5ZUzgplqo3VfAHtSP9ePhHjGYjreq14q7md2kdjqihFEXBoDPgorjg6+Jbfd0KZlP5SyJctFyCOT8TY34mhYVZFOZnYTTmsM2UxcR6Ppd9mn4eETT3b149r0EIUaNpmgzdddddnDp1ildffZXU1FTatWvH0qVLrQOgjx49iq7UnlUnT56kffv21scffPABH3zwAT179iQuLq5C96wpamrLkMls4ruD3wFwVzNJhEQNoNODm6/l43JFuTAUvcTAhL/4aM1jpOv1ljFCF1FUlSCTiQ7BHasoYCHEtUbzAdTjxo0rtwurJMEpERERYRkEeRX3rClq6pih9SfWc/L8SbydvRkYOVDrcIS4avqI7ryYpzDe05L4lE6IlOKfJxPOnEO//mPwCoWA67QKVQihEdkqXCMlGyWazebLlHSsBQcXAHBb09tk3ISoHXR6YvpMZVr6GQJNti2xQSaTZa+9fCMkrIZZXWH5K5ZuOCFEnaF5y1BdVdIyVJPGDB3LOsaGExtQUKSLTNQuLW8hBui9dAI7CtM4pdcTYDLRwbk++ps/h6BWsOwlOLQU/p4Ou7+DmMnQ9i7Qyd+MQtR2kgxppGTMUE3qJlt0cBEA3Rp0I8w7TONohKhiLW9B33wwnZL/tuw95xlk2ci4ZIbk3Yvg0HJY+iKcjYefH4Ntc2Dgu9Cgg7axCyGqlSRDGrG2DNWQAdR5RXn8dOQnAEY0G6FxNEJUE50eInuUf/66/tC4J2yaBWvfh+Nb4L99oMO90OdV8AxwXKxCCIeR9l+N1LRusqWJS8kqzKKBZwO6N+iudThCaMfJBbo/A+O2WbrJUGHHPJgeDZtmg6nmtOYKIaqGJEMasXaTlbOrtSOpqsrCgwsBGHbdMFlYUQgA7xC4/XN4YBkEt4WCTFg6AWZ3h4S/tI5OCFGFJBnSSE1adHHP6T3sP7MfZ50zt0fdrnU4QtQsjW6AR+Lg5g/BzR9O/QvzboHvRkPGMa2jE0JUAUmGNFKTFl0sGTg9IHIAfq5+GkcjRA2k00PHB+DJ7dDpYVB0sP8XmNEJ4t4FY57WEQohroIkQxqpKWOGzuWfY2niUkBWnBbistz9YfAH8Og6CO8ORXkQ9w7M7Az//gYVWBRWCFHzSDKkkZoyZuinIz9RaC6kZb2WtKnfRtNYhLhmBLeG+36HO+eAdwPIOAqL7oGvb4NTB7WOTghRSZIMaaQmjBkqvQ/ZiGYjUOzs2ySEKIeiQOs7YNxW6PEf0DtDwhqYdSMsfcmyiawQ4pogyZBGasKYofUn1nMi5wTezt4MiBygWRxCXNOcPaDvJBi7GZoNAnMRbJppmYr/zzdQw7bcEUKUJcmQRmrCRq0l0+lva3obbk5umsUhRK3g3xhGLoBRP0C9pnD+FPwyFr6IgePbtY5OCHEJkgxppGSjVq1ahkr2IQMY3my4JjEIUStFxcDjG6Hfm+DsCSe2w//6WBKjnHStoxNC2CHJkEZKWoZUVMyq45vRvzv0HSoq3Rp0o5F3I4c/vxC1mpMzdHvKMhX/+pGWY/98Y+k62/gpmIzaxieEsCHJkEZKr/Ls6Nah/KJ82YdMCEfwCobbZsODKyCkHRRkwbKJxatYx2kdnRCimCRDGimZTQaOn1H2Z+KfZBZkEuoRSo8Gl9i0UghRNcI6w8OrYcgn4F4PTh2AebdapuOfS9Y6OiHqPEmGNGLTMuTgZKhkxenhzYbLPmRCOIpOD9FjLF1nXR4DRW9ZqHFmZ1gzBQpztY5QiDpLkiGN6JQLVe/IhRf3nNrDvjP7MOgM3BZ1m8OeVwhRzM0PBr4Lj62DiB5QlA9/TbUkRft/kVWshdCAJEMaKRlADY5tGSqZTj8gYgD+rv4Oe14hxEWCWsGY32DYV+DdEDKPWTZ/nXcrpP+rdXRC1CmSDGlEp+isrUOOGkBtsw9Zc9mHTAjNKQq0us2yivVNL4DeBRL/glnd4M8XIS9D6wiFqBMkGdKQozdrLdmHrIV/C9rWb+uQ5xRCVICzO/R5GcZtgeY3g2qCzbMsU/F3zAMNlt8Qoi6RZEhDJQsvOmLMUOl9yEY2Hyn7kAlRE/lFwIhv4Z4fof51kHsafn0S/Zf98Tsfr3V0QtRakgxpyJEtQxtObpB9yIS4VjTtC4//Df3fBmcvdCk7uenQZPS/PQnZaVpHJ0StI8mQhhy5WevCA5aB00ObDpV9yIS4FugNcOM4eHI75raWVax1uxdYus7+ng5FhRoHKETtIcmQhhy1Weux7GOsP7EekH3IhLjmeAVhGjKdtde9hjmkPRRmw/JXYHY3OLJK6+iEqBUkGdJQySrU1d0y9N3B4n3IQrsR7h1erc8lhKge5zyaYLp/GdwyA9zrw+lD8M3tsHAUnE3UOjwhrmmSDGnI2k1WjWOGbPYhay77kAlxTVN00OFeyyrWNzxhWcX6wO8wswusfltWsRbiCkkypCFrN1k1ziZbmrRU9iETorZx84UBU+DxDRB5E5gKYO17MKMT7PtJVrEWopIkGdJQydT66mwZWnTAsg/ZsGbDZB8yIWqbwBYw+lcY/jX4NIKs47D4Ppg7BNL2ax2dENcMSYY0ZJ1aX01jhvae3sveM3sx6AzcHnV7tTyHEEJjigItb4Gxm6Hni+DkCknrYHZ3WPIC5J3TOkIhajxJhjRU3WOGFhxYAEBsRKzsQyZEbefsDr0nwtgt0OIWyyrWWz6zTMXf/hU4aNsfIa5FkgxpqDoXXczIz7iwD1kz2YdMiDrDLxzu+hru/RnqN4PcM/Db0/DfPnBsi9bRCVEjSTKkoersJiu9D9n1AddX+f2FEDVck96WAdaxU8DFG1J2whf94MdHITtV6+iEqFEkGdJQSTdZVS+6aDKbWHTQMnB6RPMRsg+ZEHWV3gBdn4And0D7eyzHdi+0dJ1t+FhWsRaimCRDGqqulqGSfci8nL0YGDmwSu8thLgGeQbArTPhodXQIBoKc2DFqzCrKxxeqXV0QmhOkiENVdfUetmHTAhhV8NoeHAl3PopeATAmSPw7R2wYCScTdA6OiE0I8mQhqpj0cXS+5DJwGkhRBk6HbQfZVnFuus40DnBwSUw8wZY9SYUntc6QiEcTpIhDVXH1PrFBxejonJj6I2yD5kQonyuPhD7Njz+NzTubVnFet0HllWs93wvq1iLOkWSIQ1V9Uat+UX5/HjkRwBGNJN9yIQQFRDQDO79Ce76FnwbQdYJ+OFB+GowpO7VOjohHEKSIQ1VVcuQyWxia+pW3tv6HpkFmQS7B3NTw5uqIkQhRF2gKNDiZsuCjb1fBic3SN4An/WAP/4DuWe1jlCIaiXJkIaqYszQyuSVxP4QywPLHmDxocUA5BhzWHNsTZXEKISoQwxu0PMFGLcFWg4F1Qxb/2uZir9tjqxiLWotSYY0dLUtQyuTVzI+bjxpuWk2x3OMOYyPG8/KZJkyK4S4Ar6NYPhcyyawAS0g7yz8/ix83guObtI6OiGqnCRDGrqaMUMms4mpW6aiUv4gx3e3vFttm8AKIeqAxj3hsfUw8D3LgOvU3TAnFn54GLJStI5OiCojyZCGrmYF6h3pO8q0CJWmopKam8qO9B1XHJ8QQqB3gi6PWlax7jAaUGDPd5aus/UfQlGB1hEKcdUkGdLQ1axAfSr3VJWWE0KIS/KoD7dMh4dXQ8NOYDwPK1+HT7vCoeVaRyfEVZFkSENXswK1j4tPhcoFuAdU+t5CCFGuBh3ggeUwdDZ4BMLZeJg/DL4dDmfitY5OiCsiyZCGrC1DlUyG/j3zL+9tee+SZRQUgt2D6RDY4YrjE0IIu3Q6aDfSsor1jU9aVrE+vAw+vcHSWlSQo3WEQlSKJEMa0imW6q9oN5nJbOKLPV9w95K7SchKwMvZC7AkPqWVPJ7QeYJ1XJIQQlQ5V2/o/xY8vhGa9AVToWUc0YyOsHuxrGItrhmSDGmoMt1kJ3NO8uDyB/lox0cUmYvoE9aHP277gw97fUige6BN2SD3IKb1mkZMeEy1xC2EEDYCroN7foARC8AvArJT4MeH4MuBkLJb6+iEuCwnrQOoyyqy6KKqqvye8DvvbH6HHGMO7k7uvNj5RYY2HYqiKMSEx9A7rDc70ndwKvcUAe4BdAjsIC1CQgjHUhRoPgia9IGN02HdNDi6ET7vCdH3Q59XwN1f6yiFsEuSIQ1dbtHFzIJM3tr0FkuTlgJwfcD1TOk+hTDvsDL36RTcqXqDFUKIijC4wk3Pw/UjYfkk2PcjbPvC8n+fVyyJkfyxJmoY6SbT0KUWXdyUsonbf72dpUlL0St6xrYby1cDviqTCAkhRI3k0xCGfQn3/QGBrSDvHPzxHHzWE5I2aB2dEDYkGdKQolgGOidlJbE1dSsms4kCUwHvbX2Ph5c/THpuOuHe4Xw98Gseu/4x6xgjIYS4ZkR0h0fXwsD3LatYp+2BrwbB9w9C5gmtoxMCkG4yzaxMXsncfXMB2JK6hS2pW6jnWg+DzkBqbioAw68bznMdn8Pd4K5lqEIIcXX0TtDlEWh9B6x+E7Z/BXu/h4N/wk3PQddx4OSidZSiDpOWIQ2sOraK8XHjyTHarsVxJv8MqbmpeBo8mdFnBpO6TpJESAhRe3jUgyEfwSNxENbFsor1qjdgZhc4uFTr6EQdJsmQg5lVM+9vf/+SG6y6O7nTvUF3B0YlhBAOFNoOHlgGt30OnsFwLhEW3AXfDoPTR7SOTtRBkgw5WFJREum56Zcsk56XLhusCiFqN0WB6++CJ7dBt2dAZ4DDyy2rWK94FQqytY5Q1CGSDDlYtlqxb3DZYFUIUSe4eEG/yfDEJmjaD8xG2PAxTO8IuxbJKtbCISQZcjAvxatC5WSDVSFEnVK/KYxaDCMXgV8k5KTCT4/AnFg4uVPr6EQtJ8mQg0U4RRDoHlhmP7ESssGqEKLOUhRoNgDGboa+r4LBHY5ths97wW9Pw/kzWkcoailJhhxMp+h4Pvp5QDZYFUIIu5xcoMdzMG4btL4TUC3T8ae3h82fg6n8LYyEuBKSDGmgb1hfpvWaJhusCiHEpfg0gDu/gPv/hKA2kJ8Jfz4Pn90ESeu1jk7UIrLookZkg1UhhKig8BstaxPt+ApWvwXp++CrwdDqduj/pmXrDyGugiRDGpINVoUQooL0TtDpIUsCtPot2P6lZfPXQ0uhx3jo+qRlk1ghroB0kwkhhLh2uPvDzdPgkb+gUVcw5lqSo0+7wIElMhVfXJEakQzNnDmTiIgIXF1d6dKlC1u2bLlk+cWLF9O8eXNcXV1p06YNS5YssTl/3333oSiKzceAAQOq8yUIIYRwpJC2lrFEd3wBXiFwLgkWjoRv7oDTh7WOTlxjNE+GFi1axPjx43nttdfYsWMH119/PbGxsaSn21+l+e+//2bkyJE8+OCD/PPPPwwdOpShQ4eyd+9em3IDBgwgJSXF+rFgwQJHvBwhhBCOoijQ5k7LrLPuz4LeGeJXWVaxXv4K5GdpHaG4RmieDE2bNo2HH36Y+++/n5YtWzJ79mzc3d2ZM2eO3fIff/wxAwYM4Pnnn6dFixa8+eabdOjQgRkzZtiUc3FxITg42Prh5+fniJcjhBDC0Vw8IeZ1yyrW1w0AcxH8PR1mdISdC8Bs1jpCUcNpOoC6sLCQ7du3M3HiROsxnU5HTEwMGzdutHvNxo0bGT9+vM2x2NhYfv75Z5tjcXFxBAYG4ufnR58+fXjrrbeoV6+e3XsWFBRQUFBgfZyVZflrwmg0YjQar+Sl2VVyr6q8pyhL6tlxpK4dQ+q5grwbwbBvUI6sQL/8JZRzifDzY5i3foEpdgqEtLvk5VLPjlGd9Xyl99Q0GTp9+jQmk4mgoCCb40FBQRw4cMDuNampqXbLp6amWh8PGDCA22+/ncjISOLj43nppZcYOHAgGzduRK8vO3V9ypQpTJ48uczx5cuX4+7ufiUv7ZJWrFhR5fcUZUk9O47UtWNIPVecrtErNHZbRrPUX3A6sRVlTj+S6/Xk35A7KTR4X/JaqWfHqI56zs3NvaLrauXU+hEjRlg/b9OmDW3btqVJkybExcXRt2/fMuUnTpxo09qUlZVFWFgY/fv3x9v70t80lWE0GlmxYgX9+vXDYDBU2X2FLalnx5G6dgyp5yt1K2r2JMyr30C3dzERZ+IIz9mBueeLmKMfAJ3tr0CpZ8eoznou6dmpLE2Tofr166PX60lLS7M5npaWRnBwsN1rgoODK1UeoHHjxtSvX58jR47YTYZcXFxwcXEpc9xgMFTLN0R13VfYknp2HKlrx5B6vgL+jeDO/0Hnh2DJf1BS96Bf/hL6nd/AwHch8qYyl0g9O0Z11POV3k/TAdTOzs5ER0ezatUq6zGz2cyqVavo2rWr3Wu6du1qUx4sTW3llQc4fvw4Z86cISQkpGoCF0IIcW1pdINlbaKbPwQ3f0jfD3OHwHdjIOOY1tEJjWk+m2z8+PH897//Ze7cufz77788/vjjnD9/nvvvvx+A0aNH2wywfvrpp1m6dCn/93//x4EDB3j99dfZtm0b48aNAyAnJ4fnn3+eTZs2kZSUxKpVq7j11ltp2rQpsbGxmrxGIYQQNYBODx0fgCe3Q6eHQdHB/p9hRif46z0w5mkdodCI5mOG7rrrLk6dOsWrr75Kamoq7dq1Y+nSpdZB0kePHkWnu5Cz3XjjjcyfP59XXnmFl156iaioKH7++Wdat24NgF6vZ/fu3cydO5eMjAxCQ0Pp378/b775pt2uMCGEEHWMuz8M/gCix8CfEyB5A6x5G6cdXxPiPxTUgVpHKBxM82QIYNy4cdaWnYvFxcWVOTZs2DCGDRtmt7ybmxvLli2ryvCEEELURsFt4L4/YO8PsHwSSuZROmd+gnnBbhj0HgQ00zpC4SCad5MJIYQQmilZxfrJbZi6jcekOKFLjINZN8KylyE/U+sIhQNIMiSEEEI4e2Du9RKrW0zBHFW8ivXGGTC9I/zzraxiXctJMiSEEEIUy3UJwjT8Gxj1A9RrCufT4Zcn4It+cGK71uGJaiLJkBBCCHGxqBh4fCP0ewOcPeHENvhvH/hlLOSc0jo6UcUkGRJCCCHscXKGbk9bpuK3Ld7Z4J9vYHo0bPwUTLKHWW0hyZAQQghxKV7BcPtn8MByCLkeCjJh2USY3R0S4rSOTlQBSYaEEEKIimjUBR5eA0M+Bvd6cOoAzLsVFt0D55K1jk5cBUmGhBBCiIrS6SH6PkvXWedHQdHDv7/BzM4QN1VWsb5GSTIkhBBCVJabn2VhxsfWQUQPKMqHuCkwozPs/wVUVesIRSVIMiSEEEJcqaBWMOY3GPYVeDeEzKPw3WhL91n6v1pHJypIkiEhhBDiaigKtLoNxm2Bm14AvQsk/gWzusHSiZCXoXWE4jIkGRJCCCGqgrMH9HkZxm6G5jeDaoJNn8KMjrDja1nFugaTZEgIIYSoSv6RMOJbuOdHqBcF50/Br+Pgf33h+DatoxN2SDIkhBBCVIemfeHxv6H/W+DsBSd3WBKin5+AnHStoxOlSDIkhBBCVBcnZ7jxSctU/HajLMd2fmtZxfrvGbKKdQ0hyZAQQghR3byCYOin8OBKCG0PBVmw/GWYdSPEr9Y6ujpPkiEhhBDCUcI6wUOr4Zbp4F4fTh+Cr2+DhaPgXJLW0dVZkgwJIYQQjqTTQYfRlq6zLo9bVrE+8LtlwcbVb0NhrtYR1jmSDAkhhBBacPOFgVPh8Q0QeROYCmDtezCjE+z7SVaxdiBJhoQQQggtBbaA0b/C8HngEwZZx2HxfTB3CKTt1zq6OkGSISGEEEJrigItb4WxW6Dni+DkCknrYHZ3WPIC5J3TOsJaTZIhIYQQoqZwdofeEy1JUYshllWst3xmmYq/fS6YTVpHWCtJMiSEEELUNH7hcNc3cO/PUL8Z5J6B356C//aBY1u0jq7WkWRICCGEqKma9LYMsI6dAi7ekLITvugHPz0G2alaR1drSDIkhBBC1GR6A3R9wjIVv/09lmO7FsD0jrDhEygq1Da+WkCSISGEEOJa4BkIt860LNrYIBoKs2HFJMsq1kdWah3dNU2SISGEEOJa0jDasq3HrTPBIwDOHIZv7oAFI+FsotbRXZMkGRJCCCGuNTqdpcvsye1ww1jQOcHBJTCzC6x6EwrPax3hNUWSISGEEOJa5eoDA96BxzZA416WVazXfWBZxXrvD7KKdQVJMiSEEEJc6wKbW6bh3/UN+DaCrBPw/QPw1c2Qulfr6Go8SYaEEEKI2kBRLAs1jt0CvV6yrGKdvB4+6wFLnofcs1pHWGNJMiSEEELUJgY36DUBxm21bPGhmmHL55ZVrLfNkVWs7ZBkSAghhKiNfBtZNn8d/SsEtIC8s/D7s/B5Lzi6SevoahRJhoQQQojarHFPeGwdDHgXXHwgdTfMiYUfH4GsFK2jqxEkGRJCCCFqO70BbnjMMhW/w2hAgd2LLF1n6z+EogKtI9SUJENCCCFEXeEZALdMh4dXQcNOYDwPK1+HT7vC4RVaR6cZSYaEEEKIuqZBNDywHIbOBo9AOBsP394J8++CM/FaR+dwkgwJIYQQdZFOB+1GWrrObnzSsor1oaXw6Q2wcjIU5GgdocNIMiSEEELUZa7e0P8teHwjNOkDpkJYP82yivWe7+vEKtaSDAkhhBACAq6De36EEfPBNxyyT8IPD8KXgyB1j9bRVStJhoQQQghhoSjQfLBlFever4CTGxz9Gz67CX4fX2tXsZZkSAghhBC2DK7Q83l4chu0us2yivW2L2B6B9j6v1q3irUkQ0IIIYSwz6chDPsKxvwOga0g7xz88Rx81hOS/9Y6uiojyZAQQgghLi2yBzy6Fga+D64+kLYHvhwI3z8IWSe1ju6qSTIkhBBCiMvTO0GXR+DJfyD6PkCBvd/D9I6wbto1vYq1JENCCCGEqDiPejDkY3gkDsK6WFaxXjUZZnaBg0u1ju6KSDIkhBBCiMoLbQcPLIPbPgfPYDiXCAvugm+HwekjWkdXKZIMCSGEEOLKKApcf5dl1lm3p0FngMPLLatYr3gNCrK1jrBCJBkSQgghxNVx8YJ+b8ATG6FpDJiNsOEjy3ii3d9dWMXabEJJXk+DsxtRktfXmCn6TloHIIQQQohaon4UjPressfZ0hfhXBL8+DBs/cKymOPmWThlnaQjQPIs8A6FAe9Cy1s0DVtahoQQQghRdRQFmg2EJzZD31fB4A7HNsGKSWWn4WelwHejYf+v2sRaTJIhIYQQQlQ9gyv0eM6SFDm5lVOouPts6YuadplJMiSEEEKI6pORDEV5lyigQtYJTVe0lmRICCGEENUnJ61qy1UDSYaEEEIIUX08g6q2XDWQZEgIIYQQ1Sf8RsusMZRyCijg3cBSTiOSDAkhhBCi+uj0lunzQNmEqPjxgKmWchqRZEgIIYQQ1avlLTB8HniH2B73DrUc13idIVl0UQghhBDVr+Ut0HwwRQlr2bluGe16xOLU+CZNW4RKSMuQEEIIIRxDp0cN784J/66o4d1rRCIEkgwJIYQQoo6TZEgIIYQQdZokQ0IIIYSo0yQZEkIIIUSdJsmQEEIIIeo0SYaEEEIIUadJMiSEEEKIOk2SISGEEELUaZIMCSGEEKJOk+047FBVFYCsrKwqva/RaCQ3N5esrCwMBkOV3ltcIPXsOFLXjiH17BhSz45RnfVc8nu75Pd4RUkyZEd2djYAYWFhGkcihBBCiMrKzs7Gx8enwuUVtbLpUx1gNps5efIkXl5eKIpSZffNysoiLCyMY8eO4e3tXWX3Fbaknh1H6toxpJ4dQ+rZMaqznlVVJTs7m9DQUHS6io8EkpYhO3Q6HQ0bNqy2+3t7e8s3mgNIPTuO1LVjSD07htSzY1RXPVemRaiEDKAWQgghRJ0myZAQQggh6jRJhhzIxcWF1157DRcXF61DqdWknh1H6toxpJ4dQ+rZMWpiPcsAaiGEEELUadIyJIQQQog6TZIhIYQQQtRpkgwJIYQQok6TZEgIIYQQdZokQw40c+ZMIiIicHV1pUuXLmzZskXrkGqMKVOm0KlTJ7y8vAgMDGTo0KEcPHjQpkx+fj5jx46lXr16eHp6cscdd5CWlmZT5ujRowwePBh3d3cCAwN5/vnnKSoqsikTFxdHhw4dcHFxoWnTpnz11Vdl4qkLX6upU6eiKArPPPOM9ZjUcdU5ceIE99xzD/Xq1cPNzY02bdqwbds263lVVXn11VcJCQnBzc2NmJgYDh8+bHOPs2fPMmrUKLy9vfH19eXBBx8kJyfHpszu3bvp0aMHrq6uhIWF8d5775WJZfHixTRv3hxXV1fatGnDkiVLqudFO5jJZGLSpElERkbi5uZGkyZNePPNN232pZJ6vjJr165lyJAhhIaGoigKP//8s835mlSvFYnlslThEAsXLlSdnZ3VOXPmqPv27VMffvhh1dfXV01LS9M6tBohNjZW/fLLL9W9e/eqO3fuVAcNGqQ2atRIzcnJsZZ57LHH1LCwMHXVqlXqtm3b1BtuuEG98cYbreeLiorU1q1bqzExMeo///yjLlmyRK1fv746ceJEa5mEhATV3d1dHT9+vLp//351+vTpql6vV5cuXWotUxe+Vlu2bFEjIiLUtm3bqk8//bT1uNRx1Th79qwaHh6u3nfffermzZvVhIQEddmyZeqRI0esZaZOnar6+PioP//8s7pr1y71lltuUSMjI9W8vDxrmQEDBqjXX3+9umnTJnXdunVq06ZN1ZEjR1rPZ2ZmqkFBQeqoUaPUvXv3qgsWLFDd3NzUzz77zFpmw4YNql6vV9977z11//796iuvvKIaDAZ1z549jqmMavT222+r9erVU3///Xc1MTFRXbx4serp6al+/PHH1jJSz1dmyZIl6ssvv6z++OOPKqD+9NNPNudrUr1WJJbLkWTIQTp37qyOHTvW+thkMqmhoaHqlClTNIyq5kpPT1cB9a+//lJVVVUzMjJUg8GgLl682Frm33//VQF148aNqqpavnl1Op2amppqLTNr1izV29tbLSgoUFVVVV944QW1VatWNs911113qbGxsdbHtf1rlZ2drUZFRakrVqxQe/bsaU2GpI6rzoQJE9Tu3buXe95sNqvBwcHq+++/bz2WkZGhuri4qAsWLFBVVVX379+vAurWrVutZf78809VURT1xIkTqqqq6qeffqr6+flZ677kuZs1a2Z9PHz4cHXw4ME2z9+lSxf10UcfvboXWQMMHjxYfeCBB2yO3X777eqoUaNUVZV6rioXJ0M1qV4rEktFSDeZAxQWFrJ9+3ZiYmKsx3Q6HTExMWzcuFHDyGquzMxMAPz9/QHYvn07RqPRpg6bN29Oo0aNrHW4ceNG2rRpQ1BQkLVMbGwsWVlZ7Nu3z1qm9D1KypTcoy58rcaOHcvgwYPL1IPUcdX59ddf6dixI8OGDSMwMJD27dvz3//+13o+MTGR1NRUmzrw8fGhS5cuNnXt6+tLx44drWViYmLQ6XRs3rzZWuamm27C2dnZWiY2NpaDBw9y7tw5a5lLfT2uZTfeeCOrVq3i0KFDAOzatYv169czcOBAQOq5utSkeq1ILBUhyZADnD59GpPJZPMLBCAoKIjU1FSNoqq5zGYzzzzzDN26daN169YApKam4uzsjK+vr03Z0nWYmppqt45Lzl2qTFZWFnl5ebX+a7Vw4UJ27NjBlClTypyTOq46CQkJzJo1i6ioKJYtW8bjjz/OU089xdy5c4ELdXWpOkhNTSUwMNDmvJOTE/7+/lXy9agNdf3iiy8yYsQImjdvjsFgoH379jzzzDOMGjUKkHquLjWpXisSS0XIrvWixhk7dix79+5l/fr1WodSqxw7doynn36aFStW4OrqqnU4tZrZbKZjx4688847ALRv3569e/cye/ZsxowZo3F0tcd3333Ht99+y/z582nVqhU7d+7kmWeeITQ0VOpZVIq0DDlA/fr10ev1ZWblpKWlERwcrFFUNdO4ceP4/fffWbNmDQ0bNrQeDw4OprCwkIyMDJvypeswODjYbh2XnLtUGW9vb9zc3Gr112r79u2kp6fToUMHnJyccHJy4q+//uKTTz7BycmJoKAgqeMqEhISQsuWLW2OtWjRgqNHjwIX6upSdRAcHEx6errN+aKiIs6ePVslX4/aUNfPP/+8tXWoTZs23HvvvTz77LPWlk+p5+pRk+q1IrFUhCRDDuDs7Ex0dDSrVq2yHjObzaxatYquXbtqGFnNoaoq48aN46effmL16tVERkbanI+OjsZgMNjU4cGDBzl69Ki1Drt27cqePXtsvgFXrFiBt7e39RdT165dbe5RUqbkHrX5a9W3b1/27NnDzp07rR8dO3Zk1KhR1s+ljqtGt27dyiwNcejQIcLDwwGIjIwkODjYpg6ysrLYvHmzTV1nZGSwfft2a5nVq1djNpvp0qWLtczatWsxGo3WMitWrKBZs2b4+flZy1zq63Ety83NRaez/TWm1+sxm82A1HN1qUn1WpFYKqTCQ63FVVm4cKHq4uKifvXVV+r+/fvVRx55RPX19bWZlVOXPf7446qPj48aF/f/7d1bSFTRHgbwb5fNxbwVldcsxUytxDGThoTsQjT0YKZYImWRDxIxkaEEYWleGqR8UCpKYzIaMi3tQiJqeqAIbzFjKIOENUEwEGiRlVToOg/Rxik5RsdSm+8H+2HvtWbN2mtg+Fh7/vofYbfb5ePTp09yn8zMTBEYGChaW1tFd3e30Gq1QqvVyu3fy763bdsmLBaLaGxsFIsXL56w7Ds7O1tYrVZx/vz5Ccu+neWzGl9NJgTXeKp0dnYKFxcXUVRUJJ4/fy5MJpNwdXUV169fl/sYDAbh5eUl7t69K549eyYSEhImLE3WaDSio6NDPH78WKxYscKhNPndu3fC29tb7N27V/T29orq6mrh6ur6U2myi4uLOHv2rLBareLUqVOzuuR7vPT0dOHv7y+X1tfV1YlFixaJnJwcuQ/X+fcMDw8Ls9kszGazACBKS0uF2WwWr169EkLMrHX9lblMhmHoLyovLxeBgYFCoVCI2NhY0d7ePt1TmjEATHgYjUa5z8jIiDh06JBYsGCBcHV1FYmJicJutzuMY7PZhE6nE2q1WixatEgcO3ZMfP361aFPW1ubiIqKEgqFQgQHBzu8x3fO8ln9GIa4xlPn/v37YvXq1UKpVIqwsDBx+fJlh/axsTGRm5srvL29hVKpFFu2bBH9/f0OfQYHB0Vqaqpwc3MTHh4e4sCBA2J4eNihT09Pj4iLixNKpVL4+/sLg8Hw01xqampEaGioUCgUYtWqVeLBgwdTf8PT4P379+LIkSMiMDBQqFQqERwcLE6cOOFQqs11/j1tbW0Tfienp6cLIWbWuv7KXCYjCTHuT3USERERORn+ZoiIiIicGsMQEREROTWGISIiInJqDENERETk1BiGiIiIyKkxDBEREZFTYxgiIiIip8YwRERERE6NYYiIZjxJknDnzp3pngYR/aMYhojon2az2SBJEiwWy5SOy4BG9O9gGCIiIiKnxjBERNMuPj4eer0eOTk5WLhwIXx8fJCXl+fQx263Q6fTQa1WIzg4GLdu3fqlsYOCggAAGo0GkiQhPj5ebqusrER4eDhUKhXCwsJw4cIFue3Lly84fPgwfH19oVKpsGzZMpw5cwYAsHz5cgBAYmIiJEmSz3t6erBp0ya4u7vDw8MDa9euRXd39+8tChH9NQxDRDQjVFVVYf78+ejo6EBJSQlOnz6N5uZmuT03NxdJSUno6elBWloa9uzZA6vVOum4nZ2dAICWlhbY7XbU1dUBAEwmE06ePImioiJYrVYUFxcjNzcXVVVVAICysjLcu3cPNTU16O/vh8lkkkNPV1cXAMBoNMJut8vnaWlpCAgIQFdXF54+fYrjx49j3rx5U7ZGRPRn8L/WE9G0i4+Px+joKB49eiRfi42NxebNm2EwGCBJEjIzM3Hx4kW5ff369YiOjnbYzZmIzWZDUFAQzGYzoqKi5OshISEoKChAamqqfK2wsBANDQ148uQJ9Ho9+vr60NLSAkmSfhpXkiTU19dj586d8jUPDw+Ul5cjPT39N1aBiKYLd4aIaEaIjIx0OPf19cWbN2/kc61W69Cu1Wp/aWdoIh8/fsTAwAAOHjwINzc3+SgsLMTAwAAAYP/+/bBYLFi5ciX0ej2ampomHTcrKwsZGRnYunUrDAaDPBYRzWwMQ0Q0I/z4OEmSJIyNjf2R9/rw4QMAoKKiAhaLRT56e3vR3t4OAIiOjsbLly9RUFCAkZERpKSkIDk5+X+Om5eXh76+PuzYsQOtra2IiIhAfX39H7kHIpo6DENENCt8Dynjz8PDwyd9nUKhAACMjo7K17y9veHn54cXL14gJCTE4fj+g2vg22Ov3bt3o6KiAjdv3sTt27cxNDQE4Ft4Gz/md6GhoTh69Ciampqwa9cuGI3G37pfIvp7XKZ7AkREv6K2thYxMTGIi4uDyWRCZ2cnrly5MunrlixZArVajcbGRgQEBEClUsHT0xP5+fnQ6/Xw9PTE9u3b8fnzZ3R3d+Pt27fIyspCaWkpfH19odFoMGfOHNTW1sLHxwdeXl4AvlWUPXz4EBs2bIBSqYRKpUJ2djaSk5MRFBSE169fo6urC0lJSX94ZYjo/8WdISKaFfLz81FdXY3IyEhcu3YNN27cQERExKSvc3FxQVlZGS5dugQ/Pz8kJCQAADIyMlBZWQmj0Yg1a9Zg48aNuHr1qrwz5O7ujpKSEsTExGDdunWw2WxoaGjAnDnfvjbPnTuH5uZmLF26FBqNBnPnzsXg4CD27duH0NBQpKSkQKfTIT8//88tChFNCVaTERERkVPjzhARERE5NYYhIprViouLHcrjxx86nW66p0dEswAfkxHRrDY0NCRXeP1IrVbD39//L8+IiGYbhiEiIiJyanxMRkRERE6NYYiIiIicGsMQEREROTWGISIiInJqDENERETk1BiGiIiIyKkxDBEREZFT+y91DSyW3FOL4AAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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PlT374fdfgoHBASg0WhIT7d8pD49Pf2KuUXBwcFXbX/hwgVeffVVZs6cSb9+/bj11lsZP348DzzwAO+///4V+9KlSxcAjhw5cj0f6bpp1BrquvoBUE9vwFmjwaBAel7xNc4UQghhb4qiUKgrrNSfvOI8pm2ZVmHuqlL2v+lbppNXnFep61V1K5PDhw8TGhpK48aNGT58OCkpKRbvT5o0icGDB/PPP/8wfPhwHnzwQfbv31/htbKzs+nRowcdOnRg27ZtxMfHk56eztChQ81t4uLimD59OpMmTWLfvn0sXLjQvGKk0+mIiorCy8uLP//8k7/++gtPT0/uv/9+SkpKKC0tJSYmhu7du7N7926SkpIYN25ctWaerofdZphcXFzo1KkT69evJyYmBjBGoOvXr2f8+PEVnhMREcH69et5/vnnzccSEhKIiIgALiZgXx7pazSaqyaN7dq1C4CQkJDqfyAr0aiMXxK9ohDi40ZKViFnsi9Qz9fNzj0TQghxNRdKL9BlYRerXS+9MJ2ui7pWqu3fD/2Nu3Pl8mm7dOnCt99+S/PmzUlNTWXKlCnceeed7NmzBy8vLwCGDBnCY489Blx8wOrTTz/ls88+K3e9WbNm0aFDB959913zsblz59KgQQMOHTpESEgIH3/8MbNmzWLkyJEANGnShG7dugHGJ+YNBgNff/21OQiaO3cufn5+JCYm0rlzZ3Jycujbt695Fahly5aV+qzWZNcludjYWEaOHMltt91G586d+eijjygoKDA/NTdixAjq1avHtGnTAHjuuefo3r07H3zwAX369GHRokVs27aNL7/8EgBvb2+6d+/OhAkTcHNzIywsjN9//53vvvuOmTNnApCcnMzChQvp3bs3/v7+7N69mxdeeIG77rqLW2+91T4DcQmN2pjoZ0Ah1FdrDpiEEEIIa7jvvvvM/33rrbfSpUsXwsLC+OmnnxgzZgyAeSLCJCIiwjy5cLl//vmHDRs24OnpWe695ORksrOzKS4u5t57773i+UeOHDEHayZFRUUkJycTHR3NqFGjiIqKomfPnkRGRjJ06NAan+Swa8D0wAMPcPbsWd544w3S0tJo37498fHx5mm6lJQUi9mirl27snDhQl5//XVeffVVmjZtysqVK2nTpo25zaJFi4iLi2P48OFkZWURFhbGO++8Yy5M6eLiwm+//WYOzho0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WZP69eszdOhQDh065FImOzubxx57jDp16uDv78/w4cNJSUlxKXP8+HEGDhyIn58f9evXZ+rUqeTm5rqU2bBhA926dcNkMtGiRQs+//zzQu25Vj6rWbNmoWkakydPdu6TOJefkydPcu+991KnTh18fX3p2LEjO3bscB5XSjF9+nRCQ0Px9fWlb9++/PHHHy51pKWlMWbMGAICAggKCuKBBx4gMzPTpczu3bu5+eabMZvNNGrUiNmzZxdqy7Jly2jTpg1ms5mOHTuydu3ainnTlcxqtfLiiy8SHh6Or68vzZs355VXXnG5jpjEufT+97//MWjQIMLCwtA0jejoaJfj3hRTd9riFiW8wpIlS5SPj4/67LPP1L59+9RDDz2kgoKCVEpKiqeb5hUiIyPVggUL1N69e1VCQoIaMGCAaty4scrMzHSWeeSRR1SjRo1UXFyc2rFjh7r++uvVDTfc4Dyem5urOnTooPr27at27typ1q5dq+rWraumTZvmLHP06FHl5+enpkyZovbv36/ef/99pdfrVUxMjLPMtfJZbdu2TTVt2lR16tRJPfHEE879EufykZaWppo0aaLuu+8+tXXrVnX06FG1bt06dfjwYWeZWbNmqcDAQBUdHa127dqlBg8erMLDw9XFixedZfr37686d+6stmzZojZu3KhatGihRo8e7Tx+/vx5FRwcrMaMGaP27t2rvvrqK+Xr66s++eQTZ5lff/1V6fV6NXv2bLV//371wgsvKKPRqPbs2VM5wahAr732mqpTp45as2aNOnbsmFq2bJny9/dX7777rrOMxLn01q5dq55//nm1YsUKBaiVK1e6HPemmLrTFndIwuQlevbsqR577DHnttVqVWFhYWrmzJkebJX3Sk1NVYD6+eeflVJKnTt3ThmNRrVs2TJnmQMHDihAbd68WSll/wXX6XQqOTnZWWbu3LkqICBA5eTkKKWUevrpp1X79u1dXmvkyJEqMjLSuX0tfFYZGRmqZcuWKjY2VvXu3duZMEmcy88zzzyjbrrppiset9lsKiQkRL355pvOfefOnVMmk0l99dVXSiml9u/frwC1fft2Z5nvv/9eaZqmTp48qZRS6qOPPlK1atVyxt7x2q1bt3Zu33PPPWrgwIEur9+rVy/18MMPX92b9AIDBw5U999/v8u+YcOGqTFjxiilJM7l4fKEyZti6k5b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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAHHCAYAAABQhTneAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAexhJREFUeJzt3Xd8FFXbxvHf7qYTQqhJkCJNqihFIIqidEQEQRFFRV+7ICKPiEjv2CtiByxYsIsKBJTeQToC0hGSQEIaaZvd8/6BrIQESCDJpFzf55PHzMyZM9ecTdg709ZmjDGIiIiIlBB2qwOIiIiIFCQVPyIiIlKiqPgRERGREkXFj4iIiJQoKn5ERESkRFHxIyIiIiWKih8REREpUVT8iIiISImi4kdERAqV9957j88//9zqGFKMqfgRKSA2m40xY8ZYHSPfLVq0CJvNxqJFi6yOUiyMGTMGm81mdYwC8/PPPzNmzBiefPJJVq9ebXUcKaZU/EixNmPGDGw2GzabjWXLlmVZboyhatWq2Gw2brnlFgsSSk5MmjSJH374weoYks/i4uJ44oknmDVrFtOmTeOBBx4gLS0tU5sVK1YwZswY4uLirAkpxYKX1QFECoKfnx+zZs2idevWmeYvXryYw4cP4+vrm+8ZUlJS8PLSr9zFmDRpErfffjs9evSwOorko23btvHyyy9z0003AZCYmMjOnTtp3Lixp82KFSsYO3Ys999/P8HBwRYllaJO/xJLiXDzzTcze/Zs3nzzzUwFyKxZs2jWrBnHjx/P9wx+fn75vg2Ri3Hy5ElKlSpldQyuu+66TNMPPfSQRUmkuNNpLykR7rrrLmJiYoiIiPDMS09P55tvvuHuu+/Odp2XX36Za6+9lvLly+Pv70+zZs345ptvMrWZPn06NpuNjz/+ONP8SZMmYbPZ+PXXXz3zzr7m5/S1HLt27eKee+6hTJkyVKxYkZEjR2KM4dChQ3Tv3p2goCBCQ0N55ZVXMm3j9Cm9/fv3Z5qf3TU3N954I40aNWLz5s20adOGgIAAateu7dmfxYsX07JlS/z9/albty4LFiy44JgCHD58mB49elCqVCkqVarE008/neU0BcDll1/O/fffn2X+jTfeyI033njebdhsNk6ePMnMmTM9pzDP7Ouff/7h//7v/wgJCcHX15eGDRtmeT1Oj8nXX3/N2LFjueyyyyhdujS333478fHxpKWlMWjQICpVqkRgYGC2p1tsNhsDBgzg888/p27duvj5+dGsWTOWLFmSqV1iYiKDBg3i8ssvx9fXl0qVKtGhQwc2bNhw/sEEli1bxjXXXIOfnx+1atXivffeO2fbzz77jGbNmuHv70+5cuXo06cPhw4duuA2Tv/cbd++nbvvvpuyZctmOiKa037ff/99atWqhb+/Py1atGDp0qVZXs/c/IwCrF69ms6dO1OmTBkCAgJo06YNy5cvz5R9yJAhANSoUcPz83Bm/xc7LlKy6MiPlAiXX3454eHhfPHFF3Tp0gWA3377jfj4ePr06cObb76ZZZ033niDW2+9lb59+5Kens6XX37JHXfcwZw5c+jatSsADzzwAN999x2DBw+mQ4cOVK1alS1btjB27FgefPBBbr755gtmu/POO6lfvz5Tpkzhl19+YcKECZQrV4733nuPtm3b8sILL/D555/zzDPPcM0113DDDTdc1BicOHGCW265hT59+nDHHXcwbdo0+vTpw+eff86gQYN47LHHuPvuu3nppZe4/fbbOXToEKVLlz5nfykpKbRr146DBw8ycOBAKleuzKeffsrvv/9+UfnO5dNPP+Whhx6iRYsWPPLIIwDUqlULgKioKFq1auUpTCpWrMhvv/3Ggw8+SEJCAoMGDcrU1+TJk/H39+e5557j77//5q233sLb2xu73c6JEycYM2YMq1atYsaMGdSoUYNRo0ZlWn/x4sV89dVXDBw4EF9fX9555x06d+7MmjVraNSoEQCPPfYY33zzDQMGDKBBgwbExMSwbNkyduzYQdOmTc+5n1u2bKFjx45UrFiRMWPGkJGRwejRowkJCcnSduLEiYwcOZLevXvz0EMPcezYMd566y1uuOEG/vzzzxydDrrjjjuoU6cOkyZNwhiTq34/+ugjHn30Ua699loGDRrE3r17ufXWWylXrhxVq1a94Laz8/vvv9OlSxeaNWvG6NGjsdvtTJ8+nbZt27J06VJatGhBz5492bVrF1988QWvvfYaFSpUAKBixYp5Ni5SQhiRYmz69OkGMGvXrjVvv/22KV26tElOTjbGGHPHHXeYm266yRhjTPXq1U3Xrl0zrXu63Wnp6emmUaNGpm3btpnmHz161JQrV8506NDBpKWlmSZNmphq1aqZ+Pj4TO0AM3r0aM/06NGjDWAeeeQRz7yMjAxTpUoVY7PZzJQpUzzzT5w4Yfz9/U2/fv2y7Nu+ffsybeePP/4wgPnjjz8889q0aWMAM2vWLM+8v/76ywDGbrebVatWeebPmzfPAGb69OnmfF5//XUDmK+//toz7+TJk6Z27dpZtl+9evVM2c/M1aZNm/NuxxhjSpUqle36Dz74oAkLCzPHjx/PNL9Pnz6mTJkyntfw9Jg0atTIpKene9rdddddxmazmS5dumRaPzw83FSvXj3TPMAAZt26dZ55Bw4cMH5+fua2227zzCtTpozp37//BffpbD169DB+fn7mwIEDnnnbt283DofDnPlP9f79+43D4TATJ07MtP6WLVuMl5dXlvlnO/1zd9ddd2Wan9N+09PTTaVKlczVV19t0tLSPO3ef/99A2R6PXP6M+p2u02dOnVMp06djNvt9rRLTk42NWrUMB06dPDMe+mll7Lt81LHRUoWnfaSEqN3796kpKQwZ84cEhMTmTNnzjlPeQH4+/t7vj9x4gTx8fFcf/31WU5fhIaGMnXqVCIiIrj++uvZuHEjH3/8MUFBQTnKdeZ1DQ6Hg+bNm2OM4cEHH/TMDw4Opm7duuzduzenu5tFYGAgffr08UzXrVuX4OBg6tevT8uWLT3zT39/oW39+uuvhIWFcfvtt3vmBQQEeI7O5DdjDN9++y3dunXDGMPx48c9X506dSI+Pj7La3Xffffh7e3tmW7ZsiXGGP7v//4vU7uWLVty6NAhMjIyMs0PDw+nWbNmnulq1arRvXt35s2bh8vlAk69VqtXr+bIkSM53heXy8W8efPo0aMH1apV88yvX78+nTp1ytT2u+++w+1207t370z7HBoaSp06dfjjjz9ytM3HHnvsovpdt24d0dHRPPbYY/j4+HjWv//++ylTpkyO9/lMGzduZPfu3dx9993ExMR4tn3y5EnatWvHkiVLcLvd5+0jr8ZFSgad9pISo2LFirRv355Zs2aRnJyMy+XK9MZ9tjlz5jBhwgQ2btyY6fqP7J650qdPHz777DN++eUXHnnkEdq1a5fjXGe+2QGUKVMGPz8/zyH9M+fHxMTkuN+zValSJUv2MmXKZDlNcfoN7MSJE+ft78CBA9SuXTtLn3Xr1r3ojLlx7Ngx4uLieP/993n//fezbRMdHZ1pOruxBrIdA7fbTXx8POXLl/fMr1OnTpZtXHHFFSQnJ3Ps2DFCQ0N58cUX6devH1WrVqVZs2bcfPPN3HfffdSsWfO8+5KSkpJt/3Xr1s107dju3bsxxmTbFshU3J1PjRo1Mk3ntN8DBw4AWcfC29v7vPt4Prt37wagX79+52wTHx9P2bJlz9tHXoyLlAwqfqREufvuu3n44YeJjIykS5cu57wGYOnSpdx6663ccMMNvPPOO4SFheHt7c306dOZNWtWlvYxMTGsW7cOgO3bt+N2u7Hbc3Zg1eFw5Gge4Lk2A7IvwgDPEYic9pmTbV2q82U91/Yv5PSRgHvuueecb5pn3iINBTMGvXv35vrrr+f7779n/vz5vPTSS7zwwgt89913nuvNLoXb7cZms/Hbb79lmzswMDBH/Zx5ZDMv+z1TTn9GT7+WL730EldffXW261xo+/mRX4ovFT9Sotx22208+uijrFq1iq+++uqc7b799lv8/PyYN29epmcATZ8+Pdv2/fv3JzExkcmTJzNs2DBef/11Bg8enOf5z3T6r+CzH/Z2+i/z/Fa9enW2bt2KMSbTm9zOnTuztC1btmy2D6U7cOBAjo4WZPcmWrFiRUqXLo3L5aJ9+/a5C3+RTh+hONOuXbsICAjwXHQLEBYWxhNPPMETTzxBdHQ0TZs2ZeLEiecsfipWrIi/v3+2/Z89nrVq1cIYQ40aNbjiiisucY9y32/16tWBU2PRtm1bz3yn08m+ffu46qqrPPNy+jN6+gL2oKCgC76W5yqo8mtcpHjSNT9SogQGBjJt2jTGjBlDt27dztnO4XBgs9ky/YW6f//+bJ8y/M033/DVV18xZcoUnnvuOfr06cOIESPYtWtXfuyCx+k3jDNvtXa5XOc8BZTXbr75Zo4cOZLp9v/k5ORst1+rVi1WrVpFenq6Z96cOXNyfAtyqVKlsryBOhwOevXqxbfffsvWrVuzrHPs2LEc7knOrVy5MtN1RIcOHeLHH3+kY8eOOBwOXC4X8fHxmdapVKkSlStXzvYRAKc5HA46derEDz/8wMGDBz3zd+zYwbx58zK17dmzJw6Hg7Fjx2Y5MmWMuehTozntt3nz5lSsWJF333030+s5Y8aMLK9RTn9GmzVrRq1atXj55ZdJSkrKku3M1/L084jO3lZ+jYsUTzryIyXO+a4rOK1r1668+uqrdO7cmbvvvpvo6GimTp1K7dq12bx5s6dddHQ0jz/+ODfddBMDBgwA4O233+aPP/7g/vvvZ9myZTk+/ZVbDRs2pFWrVgwbNozY2FjKlSvHl19+meUi3fzy8MMP8/bbb3Pfffexfv16wsLC+PTTTwkICMjS9qGHHuKbb76hc+fO9O7dmz179vDZZ5953hwvpFmzZixYsIBXX32VypUrU6NGDVq2bMmUKVP4448/aNmyJQ8//DANGjQgNjaWDRs2sGDBAmJjY/N0nxs1akSnTp0y3eoOMHbsWODUM36qVKnC7bffzlVXXUVgYCALFixg7dq1WZ7TdLaxY8cyd+5crr/+ep544gkyMjJ46623aNiwYaafuVq1ajFhwgSGDRvG/v376dGjB6VLl2bfvn18//33PPLIIzzzzDO53rec9uvt7c2ECRN49NFHadu2LXfeeSf79u1j+vTpWY7i5fRn1G638+GHH9KlSxcaNmzIAw88wGWXXcY///zDH3/8QVBQED///DOA54Lz4cOH06dPH7y9venWrVu+jYsUUwV7c5lIwTrzVvfzye5W948++sjUqVPH+Pr6mnr16pnp06d7bhM+rWfPnqZ06dJm//79mdb98ccfDWBeeOEFzzzOcav7sWPHMq3br18/U6pUqSwZ27RpYxo2bJhp3p49e0z79u2Nr6+vCQkJMc8//7yJiIjI9lb3s9c9136fzpqT27UPHDhgbr31VhMQEGAqVKhgnnrqKTN37tws2zfGmFdeecVcdtllxtfX11x33XVm3bp1Ob7V/a+//jI33HCD8ff3N0Cm296joqJM//79TdWqVY23t7cJDQ017dq1M++//76nzelbq2fPnp2p33P9fGT32pwek88++8zzc9GkSZNM+5mWlmaGDBlirrrqKlO6dGlTqlQpc9VVV5l33nnngvtojDGLFy82zZo1Mz4+PqZmzZrm3XffzfIzd9q3335rWrdubUqVKmVKlSpl6tWrZ/r372927tx53m2c6+cut/2+8847pkaNGsbX19c0b97cLFmyJNvXM6c/o8YY8+eff5qePXua8uXLG19fX1O9enXTu3dvs3Dhwkztxo8fby677DJjt9uz3PZ+seMiJYvNmDy8qlFEpJiy2Wz079+ft99+2+oohdbppzuf/eRmkcJG1/yIiIhIiaLiR0REREoUFT8iIiJSouiaHxERESlRdORHREREShQVPyIiIlKi6CGHnPpMmCNHjlC6dOlzPjpdREREChdjDImJiVSuXDlXD5RV8QMcOXIky6c6i4iISNFw6NAhqlSpkuP2Kn6A0qVLA6cGLygoKM/6dTqdzJ8/n44dO+Lt7Z1n/UpmGueCoXEuOBrrgqFxLhj5Oc4JCQlUrVrV8z6eUyp++O9TgoOCgvK8+AkICCAoKEi/WPlI41wwNM4FR2NdMDTOBaMgxjm3l6zogmcREREpUVT8iIiISImi4kdERERKFF3zk0Nut5v09PRcreN0OvHy8iI1NRWXy5VPyUomb29vHA6H1TFERKQIUvGTA+np6ezbtw+3252r9YwxhIaGcujQIT0/KB8EBwcTGhpqdQwRESliVPxcgDGGo0eP4nA4qFq1aq4eouR2u0lKSiIwMDBX68n5GWNITk4mOjoagAoVKlicSEREihIVPxeQkZFBcnIylStXJiAgIFfrnj5V5ufnp+Inj/n7+wMQHR1N2bJlLU4jIiJFid6RL+D0tTo+Pj4WJ5GznS5GMzIyLE4iIiJFiYqfHNI1O4XP6dfEGGNxEhERKUpU/IiIiEi+cGWks37zdA7FfsP6zdNxZeTurun8ouJHsrV//35sNhsbN260OoqIiBRBC5ZNptMnTXl461u8Z9/Iw1vfotMnTVmwbLLV0awtfsaMGYPNZsv0Va9ePc/y1NRU+vfvT/ny5QkMDKRXr15ERUVl6uPgwYN07dqVgIAAKlWqxJAhQwrlNSAut2Hlnhh+3PgPK/fE4HLn76maadOm0bhxY8/nlYWHh/Pbb7/leP2qVaty9OhRGjVqlI8pRUSkOFqwbDKD//6cqLOqjGg7DP77c8sLIMvv9mrYsCELFizwTHt5/Rfp6aef5pdffmH27NmUKVOGAQMG0LNnT5YvXw6cuhi5a9euhIaGsmLFCo4ePcp9992Ht7c3kyZNKvB9OZe5WyMZ/8sOjsaneuaFlfFjdLcGdG4Uli/brFKlClOmTKFOnToYY5g5cybdu3fnzz//pGHDhhdc3+Fw6Bk6IiKSa66MdKbs+hxjB866XtbYbNiM4YVdn3NTq//h8LLmZiLLix8vL69s32Tj4+P56KOPmDVrFm3btgVg+vTp1K9fn1WrVtGqVSvmz5/P9u3bWbBgASEhIVx99dWMHz+eoUOHMmbMmHPeoZWWlkZaWppnOiEhATj1RGan05mprdPpxBiD2+2+qIccLtwZwzPf/8XZx3ki41N5/LMNTL27CZ0b5X2R0bVr10zT48ePZ9q0aaxYsYL69evjcDh4++23+fnnn1m8eDFhYWFMmTKF22+/HTh12qtWrVqsX7+eq6++GoCtW7fy7LPPsmzZMkqVKkWHDh149dVXPc/ZcbvdvPLKK3zwwQccOnSIkJAQHnnkEZ5//nkADh06xDPPPENERAR2u53WrVvz+uuvc/nllwOwaNEinnvuObZt24a3tzcNGzbks88+o3r16tnuo9vtxhjjOdJ39msneev0+Gqc85/GumBonPPH+s0ziHKc+yYhY7MR6YC1m2bQrPEDl7Sti33tLC9+du/eTeXKlfHz8yM8PJzJkydTrVo11q9fj9PppH379p629erVo1q1aqxcuZJWrVqxcuVKrrzySkJCQjxtOnXqxOOPP862bdto0qRJttucPHkyY8eOzTJ//vz5WZ7lc7o4S0pKIj09HWMMqc6cFUEut+GFiL1ZCh/AM2/Mz9toXMkHh/3Cd5P5edsv6q4zl8vFDz/8wMmTJ7nyyis9xd6oUaMYPXo0EyZM4KuvvuLuu++mevXq1K1bl6SkJABOnjxJQkIC8fHxtGvXjnvvvZdx48aRmprKmDFjuP322/npp58AGD16NJ988gmTJk2iVatWREZGsnv3bhISEnA6nXTq1IlrrrmGX375BS8vL15++WU6d+7MsmXLsNvt3Hbbbdx333289957pKens2HDBpKSkjx5z5aenk5KSgorVqwAICIiItdjI7mncS44GuuCoXHOW4dil+boopp1m5cSdTjkwg3PIzk5+aLWs7T4admyJTNmzKBu3bocPXqUsWPHcv3117N161YiIyPx8fEhODg40zohISFERkYCEBkZmanwOb389LJzGTZsGIMHD/ZMJyQkULVqVTp27EhQUFCmtqmpqRw6dIjAwED8/PxITs+gyQt594sSnZhO69dX56jt1jEdCPDJ+Uu2ZcsWrrvuOlJTUwkMDOTbb7+lRYsWnuV33HEHAwYMAKBp06YsXbqUGTNmMHXqVAIDAwEoVaoUQUFBvPXWWzRp0oSXX37Zs/6MGTOoXr06kZGRhIWF8d577/Hmm2/y0EMPAXDVVVfRqVMnAD777DPPOqcLuE8//ZRy5cqxYcMGmjdvTkJCAj179uSqq64C4Jprrjnv/qWmpuLv78+1117LkiVL6NChA97e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b7tu3bqe6d69e5uuXbtm2n7Lli3No48+emk7WQh07drV/N///V+meT179jR9+/Y1xmic88LZxU9hGtOcZMkpnfbKY+np6axfv5727dt75tntdtq3b8/KlSstTFZ4xcfHA1CuXDkA1q9fj9PpzDSG9erVo1q1ap4xXLlyJVdeeSUhISGeNp06dSIhIYFt27Z52pzZx+k2p/soKa9V//796dq1a5ax0DjnnZ9++onmzZtzxx13UKlSJZo0acIHH3zgWb5v3z4iIyMzjUGZMmVo2bJlprEODg6mefPmnjbt27fHbrezevVqT5sbbrgBHx8fT5tOnTqxc+dOTpw44WlzvtejKLv22mtZuHAhu3btAmDTpk0sW7aMLl26ABrn/FCYxjQnWXJKxU8eO378OC6XK9ObBUBISAiRkZEWpSq83G43gwYN4rrrrqNRo0YAREZG4uPjQ3BwcKa2Z45hZGRktmN8etn52iQkJJCSklIiXqsvv/ySDRs2MHny5CzLNM55Z+/evUybNo06deowb948Hn/8cQYOHMjMmTOB/8bqfGMQGRlJpUqVMi338vKiXLlyefJ6FIexfu655+jTpw/16tXD29ubJk2aMGjQIPr27QtonPNDYRrTnGTJKX2qu1iqf//+bN26lWXLllkdpdg5dOgQTz31FBEREfj5+Vkdp1hzu900b96cSZMmAdCkSRO2bt3Ku+++S79+/SxOV3x8/fXXfP7558yaNYuGDRuyceNGBg0aROXKlTXOkis68pPHKlSogMPhyHLHTFRUFKGhoRalKpwGDBjAnDlz+OOPP6hSpYpnfmhoKOnp6cTFxWVqf+YYhoaGZjvGp5edr01QUBD+/v7F/rVav3490dHRNG3aFC8vL7y8vFi8eDFvvvkmXl5ehISEaJzzSFhYGA0aNMg0r379+hw8eBD4b6zONwahoaFER0dnWp6RkUFsbGyevB7FYayHDBniOfpz5ZVXcu+99/L00097jmxqnPNeYRrTnGTJKRU/eczHx4dmzZqxcOFCzzy3283ChQsJDw+3MFnhYYxhwIABfP/99/z+++/UqFEj0/JmzZrh7e2daQx37tzJwYMHPWMYHh7Oli1bMv3CRUREEBQU5HkTCg8Pz9TH6Tan+yjur1W7du3YsmULGzdu9Hw1b96cvn37er7XOOeN6667LsvjGnbt2kX16tUBqFGjBqGhoZnGICEhgdWrV2ca67i4ONavX+9p8/vvv+N2u2nZsqWnzZIlS3A6nZ42ERER1K1bl7Jly3ranO/1KMqSk5Ox2zO/bTkcDtxuN6Bxzg+FaUxzkiXHcnV5tOTIl19+aXx9fc2MGTPM9u3bzSOPPGKCg4Mz3TFTkj3++OOmTJkyZtGiRebo0aOer+TkZE+bxx57zFSrVs38/vvvZt26dSY8PNyEh4d7lp++Bbtjx45m48aNZu7cuaZixYrZ3oI9ZMgQs2PHDjN16tRsb8EuSa/VmXd7GaNxzitr1qwxXl5eZuLEiWb37t3m888/NwEBAeazzz7ztJkyZYoJDg42P/74o9m8ebPp3r17trcLN2nSxKxevdosW7bM1KlTJ9PtwnFxcSYkJMTce++9ZuvWrebLL780AQEBWW4X9vLyMi+//LLZsWOHGT16dJG9Bfts/fr1M5dddpnnVvfvvvvOVKhQwTz77LOeNhrn3EtMTDR//vmn+fPPPw1gXn31VfPnn3+aAwcOGGMK15jmJEtOqPjJJ2+99ZapVq2a8fHxMS1atDCrVq2yOlKhAWT7NX36dE+blJQU88QTT5iyZcuagIAAc9ttt5mjR49m6mf//v2mS5cuxt/f31SoUMH873//M06nM1ObP/74w1x99dXGx8fH1KxZM9M2TitJr9XZxY/GOe/8/PPPplGjRsbX19fUq1fPvP/++5mWu91uM3LkSBMSEmJ8fX1Nu3btzM6dOzO1iYmJMXfddZcJDAw0QUFB5oEHHjCJiYmZ2mzatMm0bt3a+Pr6mssuu8xMmTIlS5avv/7aXHHFFcbHx8c0bNjQ/PLLL3m/wxZISEgwTz31lKlWrZrx8/MzNWvWNMOHD890+7TGOff++OOPbP9N7tevnzGmcI1pTrLkhM2YMx6NKSIiIlLM6ZofERERKVFU/IiIiEiJouJHREREShQVPyIiIlKiqPgRERGREkXFj4iIiJQoKn5ERESkRFHxIyIiIiWKih8RKXRsNhs//PCD1TFEpJhS8SMixcr+/fux2Wxs3LgxT/tVQSZSfKj4ERERkRJFxY+IFLgbb7yRgQMH8uyzz1KuXDlCQ0MZM2ZMpjZHjx6lS5cu+Pv7U7NmTb755psc9V2jRg0AmjRpgs1m48Ybb/Qs+/DDD6lfvz5+fn7Uq1ePd955x7MsPT2dAQMGEBYWhp+fH9WrV2fy5MkAXH755QDcdttt2Gw2z/SmTZu46aabKF26NEFBQTRr1ox169Zd3KCISIFR8SMilpg5cyalSpVi9erVvPjii4wbN46IiAjP8pEjR9KrVy82bdpE37596dOnDzt27Lhgv2vWrAFgwYIFHD16lO+++w6Azz//nFGjRjFx4kR27NjBpEmTGDlyJDNnzgTgzTff5KeffuLrr79m586dfP75554iZ+3atQBMnz6do0ePeqb79u1LlSpVWLt2LevXr+e5557D29s7z8ZIRPJJrj8HXkTkErVp08a0bt0607xrrrnGDB061BhjDGAee+yxTMtbtmxpHn/88Qv2vW/fPgOYP//8M9P8WrVqmVmzZmWaN378eBMeHm6MMebJJ580bdu2NW63O9t+AfP9999nmle6dGkzY8aMC2YSkcJFR35ExBKNGzfONB0WFkZ0dLRnOjw8PNPy8PDwHB35yc7JkyfZs2cPDz74IIGBgZ6vCRMmsGfPHgDuv/9+Nm7cSN26dRk4cCDz58+/YL+DBw/moYceon379kyZMsXTl4gUbip+RMQSZ58estlsuN3ufNlWUlISAB988AEbN270fG3dupVVq1YB0LRpU/bt28f48eNJSUmhd+/e3H777eftd8yYMWzbto2uXbvy+++/06BBA77//vt82QcRyTsqfkSkUDpdlJw5Xb9+/Quu5+PjA4DL5fLMCwkJoXLlyuzdu5fatWtn+jp9gTRAUFAQd955Jx988AFfffUV3377LbGxscCpYu3MPk+74oorePrpp5k/fz49e/Zk+vTpF7W/IlJwvKwOICKSndmzZ9O8eXNat27N559/zpo1a/joo48uuF6lSpXw9/dn7ty5VKlSBT8/P8qUKcPYsWMZOHAgZcqUoXPnzqSlpbFu3TpOnDjB4MGDefXVVwkLC6NJkybY7XZmz55NaGgowcHBwKk7vhYuXMh1112Hr68vfn5+DBkyhNtvv50aNWpw+PBh1q5dS69evfJ5ZETkUunIj4gUSmPHjuXLL7+kcePGfPLJJ3zxxRc0aNDggut5eXnx5ptv8t5771G5cmW6d+8OwEMPPcSHH37I9OnTufLKK2nTpg0zZszwHPkpXbo0L774Is2bN+eaa65h//79/Prrr9jtp/6ZfOWVV4iIiKBq1ao0adIEh8NBTEwM9913H1dccQW9e/emS5cujB07Nv8GRUTyhM0YY6wOISIiIlJQdORHREREShQVPyJSpEyaNCnT7epnfnXp0sXqeCJSBOi0l4gUKbGxsZ47sM7m7+/PZZddVsCJRKSoUfEjIiIiJYpOe4mIiEiJouJHREREShQVPyIiIlKiqPgRERGREkXFj4iIiJQoKn5ERESkRFHxIyIiIiXK/wMLv9V3a0H5KQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"nb_tests = [100, 1000, 5000, 10000, 50000, 100000]\n",
"\n",
"#Pour 3 pieces\n",
"moy3 = [0.1858, 0.1169, 0.1128, 0.1064, 0.1637, 0.1295]\n",
"min3 = [0.0874, 0.0833, 0.0694, 0.0498, 0.0510, 0.0506]\n",
"max3 = [2.2310, 2.2054, 2.5722, 4.1666, 3.7527, 3.1546]\n",
"\n",
"#Pour 4 pieces\n",
"moy4 = [0.1224, 0.1038, 0.1037, 0.1037, 0.0969, 0.0110]\n",
"min4 = [0.0897, 0.0513, 0.0507, 0.0706, 0.0506, 0.0504]\n",
"max4 = [0.7966, 2.8069, 2.5015, 1.6767, 3.0232, 500.6105]\n",
"\n",
"#Pour 5 pièces \n",
"moy5 = [0.2286, 0.0574, 0.0656, 0.1007, 0.0975, 0.1211]\n",
"min5 = [0.0854, 0.0511, 0.0562, 0.0706, 0.0662, 0.0503]\n",
"max5 = [2.7619, 0.1623, 2.5723, 3.9987, 8.1657, 500.7266] \n",
"\n",
"plt.plot(nb_tests, moy3, marker='o', label='3pieces')\n",
"plt.plot(nb_tests, moy4, marker='o', label='4pieces')\n",
"plt.plot(nb_tests, moy5, marker='o', label='5pieces')\n",
"\n",
"plt.xlabel('nb_tests')\n",
"plt.ylabel('valeurs')\n",
"plt.title('Moyenne du temps de requête')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()\n",
"\n",
"plt.plot(nb_tests, min3, marker='o', label='3pieces')\n",
"plt.plot(nb_tests, min4, marker='o', label='4pieces')\n",
"plt.plot(nb_tests, min5, marker='o', label='5pieces')\n",
"\n",
"plt.xlabel('nb_tests')\n",
"plt.ylabel('valeurs')\n",
"plt.title('Minimum du temps de requête')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()\n",
"\n",
"plt.plot(nb_tests, max3, marker='o', label='3pieces')\n",
"plt.plot(nb_tests, max4, marker='o', label='4pieces')\n",
"plt.plot(nb_tests, max5, marker='o', label='5pieces')\n",
"\n",
"plt.xlabel('nb_tests')\n",
"plt.ylabel('valeurs')\n",
"plt.title('Maximum du temps de requête')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "a68060e1-0052-4446-a0d3-40bc1756f210",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MEMORY USAGE REDIS\n",
"Memory Redis: 9.43M\n"
]
},
{
"data": {
"text/plain": [
"'\\n#Test Mémoire Syzygy\\nimport psutil\\n\\ntablebases = chess.syzygy.open_tablebase(\"tablebases/\")\\n\\n#Récuperer les données de proccesus de Syzygy\\nprocess = psutil.Process(os.getpid())\\nmem_bytes = process.memory_info().rss\\nmem_mb = mem_bytes / (1024**2)\\nprint(\"MEMORY USAGE SYZYGY\")\\nprint(f\"Memory Syzygy: {mem_mb}\")\\n'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Test Mémoire Redis ( Stockage du Redis )\n",
"redis_server = redis.Redis(host=\"localhost\", port=6379, db=0)\n",
"info= redis_server.info(\"memory\")\n",
"mem_human = info[\"used_memory_human\"]\n",
"print(\"MEMORY USAGE REDIS\")\n",
"print(f\"Memory Redis: {mem_human}\")\n",
"\n",
"\"\"\"\n",
"#Test Mémoire Syzygy\n",
"import psutil\n",
"\n",
"tablebases = chess.syzygy.open_tablebase(\"tablebases/\")\n",
"\n",
"#Récuperer les données de proccesus de Syzygy\n",
"process = psutil.Process(os.getpid())\n",
"mem_bytes = process.memory_info().rss\n",
"mem_mb = mem_bytes / (1024**2)\n",
"print(\"MEMORY USAGE SYZYGY\")\n",
"print(f\"Memory Syzygy: {mem_mb}\")\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d6d03e08",
"metadata": {},
"outputs": [],
"source": [
"def benchmark_hash(redis_serveur, pos):\n",
" latency = []\n",
" start_time_all = time.perf_counter()\n",
" \n",
" for board in pos:\n",
" fen = board.fen()\n",
" key = hashlib.md5(fen.encode()).hexdigest()[:16]\n",
" \n",
" start_individual = time.perf_counter()\n",
" results = redis_serveur.hgetall(key)\n",
" latency.append(time.perf_counter() - start_individual)\n",
" \n",
" total_time_all = time.perf_counter() - start_time_all\n",
" latency = np.array(latency)\n",
" \n",
" return {\n",
" \"count\": len(pos),\n",
" \"average_latency\": latency.mean(),\n",
" \"p50\": np.percentile(latency, 50),\n",
" \"p90\": np.percentile(latency, 90),\n",
" \"p95\": np.percentile(latency, 95),\n",
" \"p99\": np.percentile(latency, 99),\n",
" \"std\": latency.std(),\n",
" \"min\": latency.min(),\n",
" \"max\": latency.max(),\n",
" \"total_time\": total_time_all,\n",
" \"latency\": latency,\n",
" \"rps\": len(latency) / total_time_all,\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "46157e5c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Configs ok: {'KRvK', 'KQvKP', 'KRvKB', 'KNvK', 'KRBvKP', 'KBvK', 'KBNvK', 'KPvK', 'KPvKP', 'KRPvKP', 'KQvK'}\n",
"Récupération des positions de la tablebase KBNvK\n",
"Récupération des positions de la tablebase KPvK\n",
"Récupération des positions de la tablebase KPvKP\n",
"Récupération des positions de la tablebase KQvK\n",
"Récupération des positions de la tablebase KQvKP\n",
"Récupération des positions de la tablebase KRBvKP\n",
"Récupération des positions de la tablebase KRPvKP\n",
"Récupération des positions de la tablebase KRvK\n",
"Récupération des positions de la tablebase KRvKB\n",
"Total positions récupérées: 2250\n",
"Ajoute de toutes les positions hashés des tablebases dans Redis terminé!\n"
]
}
],
"source": [
"def get_250_random_position(tablebases, config):\n",
" positions = []\n",
" tries = 0\n",
"\n",
" while len(positions) < 250 and tries < 500:\n",
" board = generate_board_from_config(config)\n",
" try:\n",
" tablebases.probe_wdl(board) # thử probe WDL\n",
" positions.append(board)\n",
" except chess.syzygy.MissingTableError:\n",
" pass # bỏ qua nếu table không tồn tại\n",
" tries += 1\n",
" return positions\n",
"\n",
"def add_tablebase_to_redis():\n",
" h = hashlib.new('sha512_256')\n",
" #Connect to Redis server\n",
" redis_server = redis.Redis(host='localhost', port=6379, db=1) #db1 pour H4\n",
" \n",
" tablebases_path = \"tablebases/\" #Chemin vers les tables bases Syzygy\n",
"\n",
" tablebases = chess.syzygy.open_tablebase(tablebases_path)\n",
"\n",
" available_tables = set()\n",
" for f in os.listdir(tablebases_path):\n",
" if f.endswith(\".rtbw\") or f.endswith(\".rtbz\"):\n",
" available_tables.add(f.split(\".\")[0])\n",
"\n",
" print(\"Configs ok:\", available_tables)\n",
" \n",
" configs = [\"KBNvK\",\"KPvK\",\"KPvKP\",\"KQvK\",\"KQvKP\",\"KRBvKP\",\"KRPvKP\",\"KRvK\",\"KRvKB\"]\n",
" config_valide = [c for c in configs if c in available_tables]\n",
" #Configurations de toute les tablebases que l'on utilisera dans le projet.\n",
" all_positions = []\n",
" for config in config_valide:\n",
" print(f\"Récupération des positions de la tablebase {config}\")\n",
" position = get_250_random_position(tablebases,config)\n",
" all_positions.extend(position) #Ajout des positions générées à la liste globale\n",
" \n",
" print(f\"Total positions récupérées: {len(all_positions)}\")\n",
" for position in all_positions:\n",
" try:\n",
" fen = position.fen()\n",
" key = hashlib.md5(fen.encode()).hexdigest()[:16] #Limite à 16 caractères\n",
" wdl = tablebases.probe_wdl(position)\n",
" dtz = tablebases.probe_dtz(position)\n",
" redis_server.hset(key, mapping={\"wdl\": wdl, \"dtz\": dtz}) \n",
" except (KeyError,chess.syzygy.MissingTableError): #vérifie que les positions générés appartiennent bien au table du projet seulement\n",
" continue \n",
" \n",
" print(\"Ajoute de toutes les positions hashés des tablebases dans Redis terminé!\")\n",
"\n",
"if __name__ == \"__main__\":\n",
" add_tablebase_to_redis()\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "099ce824",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BENCHMARK REDIS (FEN)\n",
"{'count': 2250, 'average_latency': np.float64(0.0007091928058200412), 'p50': np.float64(0.0006681680679321289), 'p90': np.float64(0.0009292125701904298), 'p95': np.float64(0.00102473497390747), 'p99': np.float64(0.0013124537467956525), 'std': np.float64(0.00022609616592649846), 'min': np.float64(0.0004031658172607422), 'max': np.float64(0.004224300384521484), 'total_time': 2.1053922176361084, 'latency': array([0.00342536, 0.00068593, 0.00071573, ..., 0.00083399, 0.00082922,\n",
" 0.00101638], shape=(2250,)), 'rps': 1068.6844860318968}\n",
"BENCHMARK REDIS (HASH)\n",
"{'count': 2250, 'average_latency': np.float64(0.0004489188648941409), 'p50': np.float64(0.0004307850003897329), 'p90': np.float64(0.0005560255000091274), 'p95': np.float64(0.0006055185504919784), 'p99': np.float64(0.000822205319836939), 'std': np.float64(0.00018291225647658574), 'min': np.float64(0.00024306299928866792), 'max': np.float64(0.003079133999563055), 'total_time': 1.5033779259993025, 'latency': array([0.00307913, 0.00059742, 0.00061489, ..., 0.00038755, 0.00035628,\n",
" 0.00050254], shape=(2250,)), 'rps': 1496.6296638314775}\n",
"Redis FEN latency array length: 2250\n",
"Redis Hash latency array length: 2250\n",
"\n",
"============================================================\n",
"MEMORY USAGE BY KEY (ESTIMATION)\n",
"============================================================\n",
"Taille moyenne clé FEN: 136.46 bytes\n",
"Taille moyenne clé Hash: 97.84 bytes\n",
"\n",
"Estimation pour 66009 clés:\n",
" FEN: 8.59 MB\n",
" Hash: 6.16 MB\n",
" Gain: 28.3%\n",
"============================================================\n",
" test statistic p-value \\\n",
"0 paired t-test -44.041712 4.787276e-306 \n",
"1 KS-test 0.691556 0.000000e+00 \n",
"\n",
" interpretation \n",
"0 H0: mean latency equal (Redis vs Syzygy) \n",
"1 H0: same latency distribution (Redis vs Syzygy) \n"
]
}
],
"source": [
"def run_experiment():\n",
" redis_server = redis.Redis(host=\"localhost\", port=6379, db=0)\n",
" redis_hash = redis.Redis(host=\"localhost\", port=6379, db=1)\n",
" tablebases = chess.syzygy.open_tablebase(\"tablebases/\")\n",
" configs = [\"KBNvK\",\"KPvK\",\"KPvKP\",\"KQvK\",\"KQvKP\",\"KRBvKP\",\"KRPvKP\",\"KRvK\",\"KRvKB\"]\n",
" all_positions = []\n",
" for config in configs:\n",
" all_positions += get_250_random_position(tablebases, config)\n",
" valid_positions = []\n",
" for board in all_positions:\n",
" try:\n",
" tablebases.probe_wdl(board)\n",
" valid_positions.append(board)\n",
" except chess.syzygy.MissingTableError:\n",
" continue\n",
" print(\"BENCHMARK REDIS (FEN)\")\n",
" bench_redis = benchmark_redis(redis_server, valid_positions)\n",
" print(bench_redis)\n",
" print(\"BENCHMARK REDIS (HASH)\")\n",
" bench_hash = benchmark_hash(redis_hash, valid_positions)\n",
" print(bench_hash)\n",
" print(f\"Redis FEN latency array length: {len(bench_redis['latency'])}\")\n",
" print(f\"Redis Hash latency array length: {len(bench_hash['latency'])}\")\n",
" print(\"\\n\" + \"=\" * 60)\n",
" print(\"MEMORY USAGE BY KEY (ESTIMATION)\")\n",
" print(\"=\" * 60)\n",
"\n",
" # Échantillonner 50 clés de chaque base\n",
" sample_fen = [redis_server.randomkey() for _ in range(50)]\n",
" mem_per_key_fen = [redis_server.memory_usage(k) for k in sample_fen if k]\n",
" avg_fen = np.mean(mem_per_key_fen)\n",
"\n",
" sample_hash = [redis_hash.randomkey() for _ in range(50)]\n",
" mem_per_key_hash = [redis_hash.memory_usage(k) for k in sample_hash if k]\n",
" avg_hash = np.mean(mem_per_key_hash)\n",
"\n",
" nb_keys = redis_server.dbsize()\n",
" estimated_fen = avg_fen * nb_keys\n",
" estimated_hash = avg_hash * nb_keys\n",
"\n",
" print(f\"Taille moyenne clé FEN: {avg_fen:.2f} bytes\")\n",
" print(f\"Taille moyenne clé Hash: {avg_hash:.2f} bytes\")\n",
" print(f\"\\nEstimation pour {nb_keys} clés:\")\n",
" print(f\" FEN: {estimated_fen / (1024*1024):.2f} MB\")\n",
" print(f\" Hash: {estimated_hash / (1024*1024):.2f} MB\")\n",
" print(f\" Gain: {(1 - avg_hash/avg_fen) * 100:.1f}%\")\n",
" print(\"=\" * 60)\n",
" \n",
" return {\n",
" \"bench_redis\": bench_redis,\n",
" \"bench_hash\": bench_hash\n",
" }\n",
"\n",
"if __name__ == \"__main__\":\n",
" results = run_experiment()\n",
" statistical_tests(results[\"bench_redis\"], results[\"bench_hash\"])\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}