{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Practical Work: Reinforcement Learning\n",
    "## Part 2: Solving the CarRacing environment\n",
    "\n",
    "On this environment, like a real human, we need to learn from pixels.  \n",
    "The observable space is really big, thus we need to reduce it by hand-crafting features, or by Deep Learning.\n",
    "- Hand-crafting features heavilly use image processing (find contour, lines, predict motion...).\n",
    "- Deep Learning on images heavilly use Convolutionnal Neural Networks to extract features from pixels.\n",
    "\n",
    "Then, we need to choose our next action (state space is also big) by Control Theory or by using a Deep predictive model. Note that the action space is low here.  \n",
    "\n",
    "Here, we will take the Deep Learning way."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# II - CarRacing\n",
    "\n",
    "Easiest continuous control task to learn from pixels, a top-down racing environment.  \n",
    "\n",
    "Discret control is reasonable in this environment as well, on/off discretisation is fine.  \n",
    "State consists of __STATE_W x STATE_H pixels__.  \n",
    "\n",
    "## Reward\n",
    "Reward is __-0.1 every frame__ and __+1000/N for every track tile visited__, where N is the total number of tiles in track. For example, if you have finished in 732 frames, your reward is 1000 - 0.1*732 = 926.8 points.  \n",
    "\n",
    "## Solving\n",
    "CarRacing-v0 defines \"solving\" as getting __average reward of 900 over 100 consecutive trials__.\n",
    "\n",
    "## Track\n",
    "Track is __random every episode__.  \n",
    "Episode finishes when all tiles are visited. Car also can __go outside of PLAYFIELD__, that is far off the track, then it will get __-100 and die__.  \n",
    "\n",
    "## Indicators\n",
    "Some indicators shown at the bottom of the window and the state RGB buffer:  \n",
    "\n",
    "- true speed  \n",
    "- 4 ABS sensors  \n",
    "- steering wheel position  \n",
    "- gyroscope  \n",
    "\n",
    "Environment created by Oleg Klimov. Licensed on the same terms as the rest of OpenAI Gym.\n",
    "\n",
    "## Technical fixes\n",
    "### HDPI fix 1\n",
    "[OpenAI's GitHub issue](https://github.com/openai/gym/issues/492#issuecomment-278181766)  \n",
    "Additionally, to fix large window you can change display DPI on your Mac, or change:  \n",
    "\n",
    "```python\n",
    "WINDOW_W = 1200\n",
    "WINDOW_H = 1000\n",
    "```\n",
    "in `gym/envs/box2d/car_racing.py` to smaller values.\n",
    "\n",
    "### HDPI fix 2\n",
    "[OpenAI's GitHub issue](https://github.com/openai/gym/issues/1268#issuecomment-450603215)  \n",
    "Change line 386 of car_racing.py to:  \n",
    "`gl.glViewport(0, 0, WINDOW_W*2, WINDOW_H*2)`\n",
    "\n",
    "```bash\n",
    "avconv -version\n",
    "if not brew install libav\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 - Play by yourself!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Track generation: 1140..1436 -> 296-tiles track\n",
      "Track generation: 1107..1388 -> 281-tiles track\n",
      "Step: 0 | Reward: +7.04 | Action: [0. 0. 0.]\n",
      "Step: 200 | Reward: +22.76 | Action: [0. 1. 0.]\n",
      "Step: 400 | Reward: +59.90 | Action: [0.  0.  0.8]\n",
      "Step: 600 | Reward: +39.90 | Action: [1. 1. 0.]\n",
      "Trial 2 | Score: 22.999999999999254 | 770 steps | 20.88s.\n",
      "Track generation: 1025..1288 -> 263-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1068..1339 -> 271-tiles track\n",
      "Step: 0 | Reward: +7.31 | Action: [0. 0. 0.]\n",
      "Step: 200 | Reward: +31.75 | Action: [-1.  1.  0.]\n",
      "Step: 400 | Reward: +48.79 | Action: [0.  0.  0.8]\n",
      "Step: 600 | Reward: +158.42 | Action: [0. 0. 0.]\n",
      "Step: 800 | Reward: +264.34 | Action: [0.  0.  0.8]\n",
      "Trial 3 | Score: 261.1444444444442 | 833 steps | 1551202624.86s.\n"
     ]
    }
   ],
   "source": [
    "# Try to play by yourself!\n",
    "import gym\n",
    "from pyglet.window import key\n",
    "import numpy as np\n",
    "import time\n",
    "\n",
    "bool_do_not_quit = True  # Boolean to quit pyglet\n",
    "scores = []  # Your gaming score\n",
    "a = np.array( [0.0, 0.0, 0.0] )  # Actions\n",
    "\n",
    "def key_press(k, mod):\n",
    "    global bool_do_not_quit, a, restart\n",
    "    if k==0xff0d: restart = True\n",
    "    if k==key.ESCAPE: bool_do_not_quit=False  # To Quit\n",
    "    if k==key.Q: bool_do_not_quit=False  # To Quit\n",
    "    if k==key.LEFT:  a[0] = -1.0\n",
    "    if k==key.RIGHT: a[0] = +1.0\n",
    "    if k==key.UP:    a[1] = +1.0\n",
    "    if k==key.DOWN:  a[2] = +0.8   # set 1.0 for wheels to block to zero rotation\n",
    "\n",
    "def key_release(k, mod):\n",
    "    global a\n",
    "    if k==key.LEFT  and a[0]==-1.0: a[0] = 0\n",
    "    if k==key.RIGHT and a[0]==+1.0: a[0] = 0\n",
    "    if k==key.UP:    a[1] = 0\n",
    "    if k==key.DOWN:  a[2] = 0\n",
    "\n",
    "def run_carRacing_asHuman(policy=None, record_video=False):\n",
    "    global bool_do_not_quit, a, restart\n",
    "    # env = CarRacing()\n",
    "    env = gym.make('CarRacing-v0').env\n",
    "\n",
    "    env.reset()\n",
    "    env.render()\n",
    "    if record_video:\n",
    "        env.monitor.start('/tmp/video-test', force=True)\n",
    "    env.viewer.window.on_key_press = key_press\n",
    "    env.viewer.window.on_key_release = key_release\n",
    "\n",
    "    while bool_do_not_quit:\n",
    "        env.reset()\n",
    "        total_reward = 0.0\n",
    "        steps = 0\n",
    "        restart = False\n",
    "        t1 = time.time()  # Trial timer\n",
    "        while bool_do_not_quit:\n",
    "            state, reward, done, info = env.step(a)\n",
    "            # time.sleep(1/10)  # Slow down to 10fps for us poor little human!\n",
    "            total_reward += reward\n",
    "            if steps % 200 == 0 or done:\n",
    "                print(\"Step: {} | Reward: {:+0.2f}\".format(steps, total_reward), \"| Action:\", a)\n",
    "            steps += 1\n",
    "            if not record_video: # Faster, but you can as well call env.render() every time to play full window.\n",
    "                env.render()\n",
    "            if done or restart:\n",
    "                t1 = time.time()-t1\n",
    "                scores.append(total_reward)\n",
    "                scores.append(total_reward)\n",
    "                print(\"Trial\", len(scores), \"| Score:\", total_reward, '|', steps, \"steps | %0.2fs.\"% t1)\n",
    "                break\n",
    "        if not bool_do_not_quit:\n",
    "            scores.append(total_reward)\n",
    "            print(\"Trial\", len(scores), \"| Score:\", total_reward, '|', steps, \"steps | %0.2fs.\"% t1)\n",
    "    env.close()\n",
    "\n",
    "run_carRacing_asHuman()  # Run with human keyboard input"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# Plot your score\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "plt.plot(np.arange(1, len(scores)+1), scores)\n",
    "plt.title('My human performance on CarRacing-v0')\n",
    "plt.ylabel('Score')\n",
    "plt.xlabel('Human Episode')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 - Create an Agent to solve the problem\n",
    "\n",
    "- Reinforcement Learning\n",
    "    - Policy Gradient\n",
    "    - Imitation Learning\n",
    "    - Deep Q-Learning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Observation Space: Box(96, 96, 3)\n",
      "Action Space: Box(3,)\n",
      "\n",
      "\n",
      "Observation Space Param: 96x96x3 values for Red, Green and Blue pixels\n",
      "Observation Space Highs: 255.0\n",
      "Observation Space Lows:    0.0\n"
     ]
    }
   ],
   "source": [
    "import gym\n",
    "import numpy as np\n",
    "# Define the Environments\n",
    "env = gym.make('CarRacing-v0').env\n",
    "\n",
    "# Number of Dimensions in the Observable Space and number of Control Actions in the Environments\n",
    "print('Observation Space:', env.observation_space)\n",
    "print('Action Space:', env.action_space)\n",
    "\n",
    "print(\"\\n\")\n",
    "print(\"Observation Space Param: 96x96x3 values for Red, Green and Blue pixels\")\n",
    "print(\"Observation Space Highs:\", np.mean(env.observation_space.high))\n",
    "print(\"Observation Space Lows:   \", np.mean(env.observation_space.low))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Run the environment\n",
    "\n",
    "from collections import deque\n",
    "import gym\n",
    "import numpy as np\n",
    "from pyglet.window import key\n",
    "import time\n",
    "\n",
    "bool_quit = False\n",
    "\n",
    "def key_press(k, mod):\n",
    "    global bool_do_not_quit, action, restart\n",
    "    if k==0xff0d: restart = True\n",
    "    if k==key.ESCAPE: bool_do_not_quit=False  # To Quit\n",
    "    if k==key.Q: bool_do_not_quit=False  # To Quit\n",
    "    if k==key.LEFT:  action[0] = -1.0\n",
    "    if k==key.RIGHT: action[0] = +1.0\n",
    "    if k==key.UP:    action[1] = +1.0\n",
    "    if k==key.DOWN:  action[2] = +0.8   # set 1.0 for wheels to block to zero rotation\n",
    "\n",
    "def key_release(k, mod):\n",
    "    global action\n",
    "    if k==key.LEFT  and action[0]==-1.0: action[0] = 0\n",
    "    if k==key.RIGHT and action[0]==+1.0: action[0] = 0\n",
    "    if k==key.UP:    action[1] = 0\n",
    "    if k==key.DOWN:  action[2] = 0\n",
    "\n",
    "def run_carRacing(policy, n_episodes=1000, max_t=1500, print_every=100, record_video=False):\n",
    "    \"\"\"Run the CarRacing-v0 environment.\n",
    "\n",
    "    Params\n",
    "    ======\n",
    "        n_episodes (int): maximum number of training episodes\n",
    "        max_t (int): maximum number of timesteps per episode\n",
    "        print_every (int): how often to print average score (over last 100 episodes)\n",
    "\n",
    "    Adapted from:\n",
    "    https://gist.github.com/lmclupr/b35c89b2f8f81b443166e88b787b03ab\n",
    "\n",
    "    \"\"\"\n",
    "    global bool_quit\n",
    "\n",
    "    if policy.__class__.__name__ == 'Policy_Human':\n",
    "        global action\n",
    "        action = np.array( [0.0, 0.0, 0.0] ) # Global variable used for manual control actions with key_press\n",
    "        env = gym.make('CarRacing-v0').env\n",
    "        env.reset()  # This is mandatory for keyboard input\n",
    "        env.render()  # This is mandatory for keyboard input\n",
    "        env.viewer.window.on_key_press = key_press\n",
    "        env.viewer.window.on_key_release = key_release\n",
    "    else:\n",
    "        print('** Evaluating', policy.__class__.__name__, '**')\n",
    "        # Define the Environments\n",
    "        env = gym.make('CarRacing-v0').env\n",
    "        # Set random generator for reproductible runs\n",
    "        env.seed(0)\n",
    "        np.random.seed(0)\n",
    "\n",
    "    if record_video:\n",
    "        env.monitor.start('/tmp/video-test', force=True)\n",
    "\n",
    "    scores_deque = deque(maxlen=100)\n",
    "    scores = []\n",
    "    trials_to_solve=[]\n",
    "\n",
    "    for i_episode in range(1, n_episodes+1):\n",
    "        rewards = []\n",
    "        state = env.reset()\n",
    "        if 'reset' in dir(policy):  # Check if the .reset method exists\n",
    "            policy.reset(state)\n",
    "        for t in range(max_t):  # Avoid stucked episodes\n",
    "            action = policy.act(state)\n",
    "            state, reward, done, info = env.step(action)\n",
    "            rewards.append(reward)\n",
    "            if 'memorize' in dir(policy):  # Check if the .memorize method exists\n",
    "                policy.memorize(state, action, reward, done)\n",
    "            # Environment must be rendered! If not, all pixels are white...\n",
    "            env.render()  # (mode='rgb_array')\n",
    "            if done:\n",
    "                trials_to_solve.append(t)\n",
    "                break\n",
    "        # if t + 1 == max_t:\n",
    "        #     print('This episode is stuck.')\n",
    "\n",
    "        scores_deque.append(sum(rewards))\n",
    "        scores.append(sum(rewards))\n",
    "\n",
    "        if 'update' in dir(policy):  # Check if the .update method exists\n",
    "            policy.update(state)  # Update the policy\n",
    "\n",
    "        if i_episode % print_every == 0:\n",
    "            print('Episode {}\\tAverage Score: {:.2f}\\tSteps: {:d}'.format(i_episode, np.mean(scores_deque), t))\n",
    "        if np.mean(scores_deque) >= 900.0:\n",
    "            print('Episode {}\\tAverage Score: {:.2f}\\tSteps: {:d}'.format(i_episode, np.mean(scores_deque), t))\n",
    "            print('** Environment solved in {:d} episodes!\\tAverage Score: {:.2f}'.format(max(1, i_episode-100), np.mean(scores_deque)))\n",
    "            break\n",
    "        if bool_quit:\n",
    "            break\n",
    "\n",
    "    if np.mean(scores_deque) < 900.0:\n",
    "        print('** The environment has never been solved!')\n",
    "        print('   Mean scores on last 100 runs was < 900.0')\n",
    "    if record_video:\n",
    "        env.env.close()\n",
    "    env.close()\n",
    "    return scores, trials_to_solve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Performance plots\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "def plot_performance(scores):\n",
    "    # Plot the policy performance\n",
    "    fig = plt.figure()\n",
    "    ax = fig.add_subplot(111)\n",
    "    x = np.arange(1, len(scores) + 1)\n",
    "    y = scores\n",
    "    plt.scatter(x, y, marker='x', c=y)\n",
    "    fit = np.polyfit(x, y, deg=4)\n",
    "    p = np.poly1d(fit) \n",
    "    plt.plot(x,p(x),\"r--\") \n",
    "    plt.ylabel('Score')\n",
    "    plt.xlabel('Episode #')\n",
    "    plt.title(policy.__class__.__name__ +  ' performance on CartPole-v0')\n",
    "    plt.show()\n",
    "\n",
    "def plot_trials_to_solve(trials_to_solve):\n",
    "    # Plot the policy number of trials to solve the Environment\n",
    "    fig = plt.figure()\n",
    "    ax = fig.add_subplot(111)\n",
    "    plt.hist(trials_to_solve, bins='auto', density=True, facecolor='g', alpha=0.75)\n",
    "    plt.ylabel('Frequency')\n",
    "    plt.xlabel('Number of Trial to solve')\n",
    "    plt.title(policy.__class__.__name__ +  ' trials to solve CartPole-v0')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Temporal Difference (TD0)\n",
    "\n",
    "#### Image processing for information reduction\n",
    "From a _(96, 96, 3) = 27 648 values_ observation space to _(10*10 + 7 + 4) = 111 values_.  \n",
    "\n",
    "Note that without this reduction, the problem is still solvable but with a significative computing power.  \n",
    "\n",
    "#### From the original (96, 96, 3) pixels  image\n",
    "- Crop the track to 10*10 pixels.\n",
    "- Extract 1 steering setting, 1 speed, 1 gyro and 4 abs values from the bar on the window bottom\n",
    "\n",
    "#### Resources\n",
    "- #### [Original code from Luc Prieur](https://gist.github.com/lmclupr/b35c89b2f8f81b443166e88b787b03ab)  \n",
    "- [Denny Britz excellent repository](https://github.com/dennybritz/reinforcement-learning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# env = wrappers.Monitor(env, \"monitor-folder\", force=True)  # video_callable=lambda episode_id: True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cv2\n",
    "# Hand-crafted image processing to extract: 10*10 pixels track, upper and car images\n",
    "def transform(state):\n",
    "    # crop_img = img[200:400, 100:300]  # Crop from x, y, w, h -> 100, 200, 300, 400\n",
    "    # NOTE: its img[y: y + h, x: x + w] and *not* img[x: x + w, y: y + h]\n",
    "    # bottom_black_bar is the section of the screen with steering, speed, abs and gyro information.\n",
    "    # we crop off the digits on the right as they are illigible, even for ml.\n",
    "    # since color is irrelavent, we grayscale it.\n",
    "    bottom_black_bar = state[84:, 12:]\n",
    "    img = cv2.cvtColor(bottom_black_bar, cv2.COLOR_RGB2GRAY)\n",
    "    bottom_black_bar_bw = cv2.threshold(img, 1, 255, cv2.THRESH_BINARY)[1]\n",
    "    bottom_black_bar_bw = cv2.resize(bottom_black_bar_bw, (84, 12), interpolation = cv2.INTER_NEAREST)\n",
    "\n",
    "    # upper_field = observation[:84, :96]  # This is the section of the screen that contains the track\n",
    "    upper_field = state[:84, 6:90]  # We crop side of screen as they carry little information\n",
    "    img = cv2.cvtColor(upper_field, cv2.COLOR_RGB2GRAY)\n",
    "    upper_field_bw = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)[1]\n",
    "    upper_field_bw = cv2.resize(upper_field_bw, (10, 10), interpolation = cv2.INTER_NEAREST) # rescaled to 10*10 pixels\n",
    "    upper_field_bw = upper_field_bw.astype('float') / 255\n",
    "\n",
    "    car_field = state[66:78, 43:53]\n",
    "    img = cv2.cvtColor(car_field, cv2.COLOR_RGB2GRAY)\n",
    "    car_field_bw = cv2.threshold(img, 80, 255, cv2.THRESH_BINARY)[1]\n",
    "    car_field_t = [\n",
    "        car_field_bw[:, 3].mean() / 255,\n",
    "        car_field_bw[:, 4].mean() / 255,\n",
    "        car_field_bw[:, 5].mean() / 255,\n",
    "        car_field_bw[:, 6].mean() / 255]\n",
    "\n",
    "    return bottom_black_bar_bw, upper_field_bw, car_field_t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_argmax_qval_to_env_action(output_value):\n",
    "    # we reduce the action space to 15 values.  9 for steering, 6 for gaz/brake.\n",
    "    # to reduce the action space, gaz and brake cannot be applied at the same time.\n",
    "    # as well, steering input and gaz/brake cannot be applied at the same time.\n",
    "    # similarly to real life drive, you brake/accelerate in straight line, you coast while sterring.\n",
    "\n",
    "    gaz = 0.0\n",
    "    brake = 0.0\n",
    "    steering = 0.0\n",
    "\n",
    "    # output value ranges from 0 to 10\n",
    "    \n",
    "    if output_value <= 8:\n",
    "        # steering. brake and gaz are zero.\n",
    "        output_value -= 4\n",
    "        steering = float(output_value) / 4\n",
    "    elif output_value >= 9 and output_value <= 9:\n",
    "        output_value -= 8\n",
    "        gaz = float(output_value) / 3 # 33% \n",
    "    elif output_value >= 10 and output_value <= 10:\n",
    "        output_value -= 9\n",
    "        brake = float(output_value) / 2 # 50% brakes\n",
    "    else:\n",
    "        print(\"[WARNING] Error in convert_argmax_qval_to_env_action()\")\n",
    "\n",
    "    white = np.ones((round(brake * 100), 10))\n",
    "    black = np.zeros((round(100 - brake * 100), 10))\n",
    "    brake_display = np.concatenate((black, white))*255  \n",
    "    \n",
    "    white = np.ones((round(gaz * 100), 10))\n",
    "    black = np.zeros((round(100 - gaz * 100), 10))\n",
    "    gaz_display = np.concatenate((black, white))*255\n",
    "        \n",
    "    control_display = np.concatenate((brake_display, gaz_display), axis=1)\n",
    "\n",
    "    # cv2.namedWindow('controls', cv2.WINDOW_NORMAL)\n",
    "    # cv2.resizeWindow('controls', 100, 20)\n",
    "    # cv2.imshow('controls', control_display)\n",
    "    # cv2.waitKey(1)\n",
    "\n",
    "    return [steering, gaz, brake]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# This function uses the black bar at the window botttom to extract steering setting, speed and gyro data\n",
    "def compute_steering_speed_gyro_abs(a):\n",
    "    right_steering = a[6, 36:46].mean() / 255\n",
    "    left_steering = a[6, 26:36].mean() / 255\n",
    "    steering = (right_steering - left_steering + 1.0) / 2\n",
    "    \n",
    "    left_gyro = a[6, 46:60].mean() / 255\n",
    "    right_gyro = a[6, 60:76].mean() / 255\n",
    "    gyro = (right_gyro - left_gyro + 1.0) / 2\n",
    "    \n",
    "    speed = a[:, 0][:-2].mean() / 255\n",
    "    abs1 = a[:, 6][:-2].mean() / 255\n",
    "    abs2 = a[:, 8][:-2].mean() / 255\n",
    "    abs3 = a[:, 10][:-2].mean() / 255\n",
    "    abs4 = a[:, 12][:-2].mean() / 255\n",
    "    \n",
    "    # white = np.ones((round(speed * 100), 10))\n",
    "    # black = np.zeros((round(100 - speed * 100), 10))\n",
    "    # speed_display = np.concatenate((black, white))*255\n",
    "        \n",
    "    # cv2.imshow('sensors', speed_display)\n",
    "    # cv2.waitKey(1)\n",
    "\n",
    "    return [steering, speed, gyro, abs1, abs2, abs3, abs4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "111\n"
     ]
    }
   ],
   "source": [
    "# Information reduction from the original image pixels:\n",
    "#   - Crop the track to 10*10 pixels\n",
    "#   - Extract 1 steering setting, 1 speed, 1 gyro and 4 abs values from the bar on the window bottom\n",
    "state_space_dim = 10 * 10 + 7 + 4\n",
    "print(state_space_dim)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Deep Neural Networks to model the Q Table:\n",
      "** Found a local race-car.h5 model.\n",
      "  race-car.h5 model loaded!\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 512)               57344     \n",
      "_________________________________________________________________\n",
      "activation_1 (Activation)    (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 11)                5643      \n",
      "_________________________________________________________________\n",
      "activation_2 (Activation)    (None, 11)                0         \n",
      "=================================================================\n",
      "Total params: 62,987\n",
      "Trainable params: 62,987\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "** Evaluating Policy_TD0 **\n",
      "Track generation: 1143..1442 -> 299-tiles track\n",
      "Episode 1\tAverage Score: -13.34\tSteps: 979\n",
      "Track generation: 1087..1369 -> 282-tiles track\n",
      "Episode 2\tAverage Score: 89.24\tSteps: 999\n",
      "Track generation: 964..1212 -> 248-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1176..1474 -> 298-tiles track\n",
      "Episode 3\tAverage Score: 158.60\tSteps: 999\n",
      "Track generation: 1283..1608 -> 325-tiles track\n",
      "Episode 4\tAverage Score: 174.19\tSteps: 999\n",
      "Track generation: 1217..1526 -> 309-tiles track\n",
      "Episode 5\tAverage Score: 208.32\tSteps: 999\n",
      "Track generation: 1096..1374 -> 278-tiles track\n",
      "Episode 6\tAverage Score: 208.07\tSteps: 999\n",
      "Track generation: 1198..1501 -> 303-tiles track\n",
      "Episode 7\tAverage Score: 191.03\tSteps: 999\n",
      "Track generation: 1159..1453 -> 294-tiles track\n",
      "Episode 8\tAverage Score: 192.62\tSteps: 999\n",
      "Track generation: 957..1205 -> 248-tiles track\n",
      "Episode 9\tAverage Score: 175.85\tSteps: 999\n",
      "Track generation: 1181..1480 -> 299-tiles track\n",
      "Episode 10\tAverage Score: 198.60\tSteps: 999\n",
      "Track generation: 979..1234 -> 255-tiles track\n",
      "Episode 11\tAverage Score: 183.43\tSteps: 257\n",
      "Track generation: 1320..1654 -> 334-tiles track\n",
      "Episode 12\tAverage Score: 181.59\tSteps: 999\n",
      "Track generation: 1067..1338 -> 271-tiles track\n",
      "Episode 13\tAverage Score: 184.14\tSteps: 999\n",
      "Track generation: 1067..1338 -> 271-tiles track\n",
      "Episode 14\tAverage Score: 189.51\tSteps: 999\n",
      "Track generation: 1207..1513 -> 306-tiles track\n",
      "Episode 15\tAverage Score: 193.16\tSteps: 999\n",
      "Track generation: 1106..1396 -> 290-tiles track\n",
      "Episode 16\tAverage Score: 184.44\tSteps: 262\n",
      "Track generation: 1296..1628 -> 332-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1047..1319 -> 272-tiles track\n",
      "Episode 17\tAverage Score: 172.57\tSteps: 760\n",
      "Track generation: 1245..1560 -> 315-tiles track\n",
      "Episode 18\tAverage Score: 176.19\tSteps: 999\n",
      "Track generation: 1232..1544 -> 312-tiles track\n",
      "Episode 19\tAverage Score: 181.62\tSteps: 999\n",
      "Track generation: 1120..1408 -> 288-tiles track\n",
      "Episode 20\tAverage Score: 177.29\tSteps: 999\n",
      "Track generation: 1225..1536 -> 311-tiles track\n",
      "Episode 21\tAverage Score: 182.98\tSteps: 999\n",
      "Track generation: 1077..1357 -> 280-tiles track\n",
      "Episode 22\tAverage Score: 174.58\tSteps: 488\n",
      "Track generation: 1322..1664 -> 342-tiles track\n",
      "Episode 23\tAverage Score: 183.94\tSteps: 999\n",
      "Track generation: 1035..1297 -> 262-tiles track\n",
      "Episode 24\tAverage Score: 182.61\tSteps: 429\n",
      "Track generation: 1297..1626 -> 329-tiles track\n",
      "Episode 25\tAverage Score: 183.62\tSteps: 999\n",
      "Track generation: 1294..1621 -> 327-tiles track\n",
      "Episode 26\tAverage Score: 181.33\tSteps: 999\n",
      "Track generation: 1055..1331 -> 276-tiles track\n",
      "Episode 27\tAverage Score: 176.12\tSteps: 338\n",
      "Track generation: 1202..1507 -> 305-tiles track\n",
      "Episode 28\tAverage Score: 177.42\tSteps: 999\n",
      "Track generation: 863..1087 -> 224-tiles track\n",
      "Episode 29\tAverage Score: 186.72\tSteps: 999\n",
      "Track generation: 1227..1538 -> 311-tiles track\n",
      "Episode 30\tAverage Score: 199.85\tSteps: 999\n",
      "Track generation: 1317..1652 -> 335-tiles track\n",
      "Episode 31\tAverage Score: 201.77\tSteps: 999\n",
      "Track generation: 1115..1402 -> 287-tiles track\n",
      "Episode 32\tAverage Score: 211.90\tSteps: 999\n",
      "Track generation: 1168..1464 -> 296-tiles track\n",
      "Episode 33\tAverage Score: 208.74\tSteps: 872\n",
      "Track generation: 1056..1324 -> 268-tiles track\n",
      "Episode 34\tAverage Score: 207.11\tSteps: 688\n",
      "Track generation: 1204..1509 -> 305-tiles track\n",
      "Episode 35\tAverage Score: 212.53\tSteps: 999\n",
      "Track generation: 1260..1579 -> 319-tiles track\n",
      "Episode 36\tAverage Score: 214.41\tSteps: 999\n",
      "Track generation: 1100..1379 -> 279-tiles track\n",
      "Episode 37\tAverage Score: 220.21\tSteps: 999\n",
      "Track generation: 1185..1485 -> 300-tiles track\n",
      "Episode 38\tAverage Score: 220.23\tSteps: 999\n",
      "Track generation: 1034..1296 -> 262-tiles track\n",
      "Episode 39\tAverage Score: 232.55\tSteps: 999\n",
      "Track generation: 1076..1352 -> 276-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1132..1419 -> 287-tiles track\n",
      "Episode 40\tAverage Score: 232.72\tSteps: 999\n",
      "Track generation: 1292..1619 -> 327-tiles track\n",
      "Episode 41\tAverage Score: 234.48\tSteps: 999\n",
      "Track generation: 1275..1598 -> 323-tiles track\n",
      "Episode 42\tAverage Score: 232.72\tSteps: 999\n",
      "Track generation: 1056..1324 -> 268-tiles track\n",
      "Episode 43\tAverage Score: 236.05\tSteps: 999\n",
      "Track generation: 1092..1377 -> 285-tiles track\n",
      "Episode 44\tAverage Score: 231.00\tSteps: 586\n",
      "Track generation: 1127..1413 -> 286-tiles track\n",
      "Episode 45\tAverage Score: 230.74\tSteps: 999\n",
      "Track generation: 1104..1384 -> 280-tiles track\n",
      "Episode 46\tAverage Score: 235.86\tSteps: 999\n",
      "Track generation: 1131..1430 -> 299-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1195..1498 -> 303-tiles track\n",
      "Episode 47\tAverage Score: 239.00\tSteps: 999\n",
      "Track generation: 1155..1448 -> 293-tiles track\n",
      "Episode 48\tAverage Score: 237.08\tSteps: 999\n",
      "Track generation: 1317..1650 -> 333-tiles track\n",
      "Episode 49\tAverage Score: 235.85\tSteps: 999\n",
      "Track generation: 1180..1479 -> 299-tiles track\n",
      "Episode 50\tAverage Score: 236.79\tSteps: 999\n",
      "Track generation: 1170..1467 -> 297-tiles track\n",
      "Episode 51\tAverage Score: 235.48\tSteps: 573\n",
      "Track generation: 1022..1282 -> 260-tiles track\n",
      "Episode 52\tAverage Score: 236.68\tSteps: 999\n",
      "Track generation: 1230..1542 -> 312-tiles track\n",
      "Episode 53\tAverage Score: 239.73\tSteps: 999\n",
      "Track generation: 1018..1278 -> 260-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1126..1412 -> 286-tiles track\n",
      "Episode 54\tAverage Score: 240.20\tSteps: 999\n",
      "Track generation: 1251..1568 -> 317-tiles track\n",
      "Episode 55\tAverage Score: 237.32\tSteps: 936\n",
      "Track generation: 1202..1507 -> 305-tiles track\n",
      "Episode 56\tAverage Score: 232.17\tSteps: 232\n",
      "Track generation: 1265..1592 -> 327-tiles track\n",
      "Episode 57\tAverage Score: 229.03\tSteps: 999\n",
      "Track generation: 1049..1315 -> 266-tiles track\n",
      "Episode 58\tAverage Score: 231.49\tSteps: 999\n",
      "Track generation: 1345..1685 -> 340-tiles track\n",
      "Episode 59\tAverage Score: 231.53\tSteps: 999\n",
      "Track generation: 929..1167 -> 238-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1059..1328 -> 269-tiles track\n",
      "Episode 60\tAverage Score: 233.84\tSteps: 999\n",
      "Track generation: 981..1236 -> 255-tiles track\n",
      "Episode 61\tAverage Score: 234.69\tSteps: 999\n",
      "Track generation: 1220..1529 -> 309-tiles track\n",
      "Episode 62\tAverage Score: 236.05\tSteps: 999\n",
      "Track generation: 1062..1332 -> 270-tiles track\n",
      "Episode 63\tAverage Score: 241.33\tSteps: 999\n",
      "Track generation: 1148..1439 -> 291-tiles track\n",
      "Episode 64\tAverage Score: 241.12\tSteps: 999\n",
      "Track generation: 983..1235 -> 252-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1106..1387 -> 281-tiles track\n",
      "Episode 65\tAverage Score: 240.24\tSteps: 554\n",
      "Track generation: 1068..1339 -> 271-tiles track\n",
      "Episode 66\tAverage Score: 244.23\tSteps: 999\n",
      "Track generation: 1285..1611 -> 326-tiles track\n",
      "Episode 67\tAverage Score: 241.20\tSteps: 999\n",
      "Track generation: 1224..1534 -> 310-tiles track\n",
      "Episode 68\tAverage Score: 242.47\tSteps: 999\n",
      "Track generation: 1095..1373 -> 278-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1209..1515 -> 306-tiles track\n",
      "Episode 69\tAverage Score: 245.68\tSteps: 999\n",
      "Track generation: 1167..1463 -> 296-tiles track\n",
      "Episode 70\tAverage Score: 247.52\tSteps: 999\n",
      "Track generation: 1215..1523 -> 308-tiles track\n",
      "Episode 71\tAverage Score: 249.51\tSteps: 999\n",
      "Track generation: 1292..1619 -> 327-tiles track\n",
      "Episode 72\tAverage Score: 252.92\tSteps: 999\n",
      "Track generation: 1099..1378 -> 279-tiles track\n",
      "Episode 73\tAverage Score: 255.52\tSteps: 999\n",
      "Track generation: 1179..1478 -> 299-tiles track\n",
      "Episode 74\tAverage Score: 254.44\tSteps: 999\n",
      "Track generation: 1107..1388 -> 281-tiles track\n",
      "Episode 75\tAverage Score: 253.66\tSteps: 999\n",
      "Track generation: 1209..1519 -> 310-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1233..1544 -> 311-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1234..1555 -> 321-tiles track\n",
      "Episode 76\tAverage Score: 251.07\tSteps: 999\n",
      "Track generation: 1232..1553 -> 321-tiles track\n",
      "Episode 77\tAverage Score: 247.70\tSteps: 614\n",
      "Track generation: 1214..1522 -> 308-tiles track\n",
      "Episode 78\tAverage Score: 247.08\tSteps: 999\n",
      "Track generation: 1151..1450 -> 299-tiles track\n",
      "Episode 79\tAverage Score: 244.98\tSteps: 999\n",
      "Track generation: 1213..1529 -> 316-tiles track\n",
      "Episode 80\tAverage Score: 242.93\tSteps: 999\n",
      "Track generation: 1252..1569 -> 317-tiles track\n",
      "Episode 81\tAverage Score: 242.20\tSteps: 583\n",
      "Track generation: 1040..1304 -> 264-tiles track\n",
      "Episode 82\tAverage Score: 241.67\tSteps: 471\n",
      "Track generation: 1128..1414 -> 286-tiles track\n",
      "Episode 83\tAverage Score: 244.15\tSteps: 999\n",
      "Track generation: 1121..1408 -> 287-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1048..1319 -> 271-tiles track\n",
      "Episode 84\tAverage Score: 246.18\tSteps: 999\n",
      "Track generation: 1224..1534 -> 310-tiles track\n",
      "Episode 85\tAverage Score: 246.45\tSteps: 999\n",
      "Track generation: 1140..1429 -> 289-tiles track\n",
      "Episode 86\tAverage Score: 248.44\tSteps: 999\n",
      "Track generation: 1114..1400 -> 286-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1052..1319 -> 267-tiles track\n",
      "Episode 87\tAverage Score: 250.57\tSteps: 999\n",
      "Track generation: 1045..1313 -> 268-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1131..1418 -> 287-tiles track\n",
      "Episode 88\tAverage Score: 252.82\tSteps: 999\n",
      "Track generation: 1122..1412 -> 290-tiles track\n",
      "Episode 89\tAverage Score: 249.96\tSteps: 231\n",
      "Track generation: 1239..1553 -> 314-tiles track\n",
      "Episode 90\tAverage Score: 249.05\tSteps: 999\n",
      "Track generation: 1022..1283 -> 261-tiles track\n",
      "retry to generate track (normal if there are not many of this messages)\n",
      "Track generation: 1123..1408 -> 285-tiles track\n",
      "Episode 91\tAverage Score: 249.59\tSteps: 999\n",
      "Track generation: 1158..1462 -> 304-tiles track\n",
      "Episode 92\tAverage Score: 248.59\tSteps: 999\n",
      "Track generation: 1313..1645 -> 332-tiles track\n",
      "Episode 93\tAverage Score: 248.80\tSteps: 999\n",
      "Track generation: 1000..1254 -> 254-tiles track\n",
      "Episode 94\tAverage Score: 248.66\tSteps: 999\n",
      "Track generation: 1259..1578 -> 319-tiles track\n",
      "Episode 95\tAverage Score: 246.75\tSteps: 999\n",
      "Track generation: 1316..1655 -> 339-tiles track\n",
      "Episode 96\tAverage Score: 244.65\tSteps: 999\n",
      "Track generation: 1086..1367 -> 281-tiles track\n",
      "Episode 97\tAverage Score: 244.74\tSteps: 999\n",
      "Track generation: 988..1238 -> 250-tiles track\n",
      "Episode 98\tAverage Score: 241.85\tSteps: 223\n",
      "Track generation: 1072..1344 -> 272-tiles track\n",
      "Episode 99\tAverage Score: 240.71\tSteps: 999\n",
      "Track generation: 1152..1444 -> 292-tiles track\n",
      "Episode 100\tAverage Score: 237.61\tSteps: 413\n",
      "Track generation: 1066..1341 -> 275-tiles track\n",
      "Episode 101\tAverage Score: 242.11\tSteps: 999\n",
      "Track generation: 1070..1341 -> 271-tiles track\n",
      "Episode 102\tAverage Score: 242.06\tSteps: 724\n",
      "** The environment has never been solved!\n",
      "   Mean scores on last 100 runs was < 900.0\n",
      "** Mean average score: 239.06616008258862\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from keras.models import load_model, Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.optimizers import SGD, RMSprop, Adam, Adamax\n",
    "import math\n",
    "import os\n",
    "from pathlib import Path\n",
    "import random\n",
    "import shutil\n",
    "import time\n",
    "\n",
    "state_space_dim = 10 * 10 + 7 + 4  # We extract a 10*10 image and values from the window bottom\n",
    "# 7*7 + 3.  or 14*14 + 3\n",
    "\n",
    "# Define a Temporal Difference Policy\n",
    "class Policy_TD0():\n",
    "    def __init__(self, state_space_dim=state_space_dim, action_space_dim=3):\n",
    "        self.action_space_dim = action_space_dim\n",
    "        self.state_space_dim = state_space_dim\n",
    "        self.gamma = 0.99  # 0.95 is slow  # Discount rate\n",
    "        # self.epsilon = 1.0  # 1.0 0.2 1.0<->0.1  # This should be tuned carefuly\n",
    "        self.epsilon = 0.5 / np.sqrt(901)\n",
    "        # self.epsilon_min = 0.01  # 0.0001 0.001  \n",
    "        self.epsilon_decay = 0.995  # 0.995\n",
    "        self.learning_rate = 0.002  # 0.001  # This should be tuned carefuly\n",
    "        self.learning_rate_decay = 0.01  # 0.01 Learning rate decay\n",
    "        # self.batch_size = 64  # 32\n",
    "\n",
    "        self.episode = 0  # Episode counter\n",
    "        print('Deep Neural Networks to model the Q Table:')\n",
    "        if os.path.exists('race-car.h5'):\n",
    "            print('** Found a local race-car.h5 model.')\n",
    "            self.model = load_model('race-car.h5')\n",
    "            print('  race-car.h5 model loaded!')\n",
    "        else:\n",
    "            self.model = self._build_model(self.state_space_dim, action_space_dim)\n",
    "        self.model.summary()\n",
    "        # self.memory = [] \n",
    "        # self.memory = deque(maxlen=100000)  # We can limit the memory size\n",
    "\n",
    "    def _build_model(self, state_space_dim, action_space_dim):\n",
    "        # Neural Net for Deep-Q learning Model\n",
    "        model = Sequential()\n",
    "        print('** Build a 2FC layers to model the Q-table of this problem **')\n",
    "        model.add(Activation('linear'))\n",
    "\n",
    "        # Optimizer:\n",
    "        # rms = RMSprop(lr=0.005)\n",
    "        # sgd = SGD(lr=0.1, decay=0.0, momentum=0.0, nesterov=False)\n",
    "        # Adam(lr=0.0005)\n",
    "        # Adamax(lr=0.001)\n",
    "        model.add(Dense(action_space_dim, activation='linear'))  # Linear output so we can have range of real-valued outputs\n",
    "        model.compile(loss='mse', optimizer=Adamax(lr=self.learning_rate, decay=self.learning_rate_decay))\n",
    "\n",
    "    def act(self, state):\n",
    "        self.qval = self.model.predict(self.current_state, verbose=0)[0]\n",
    "\n",
    "        # epsilon = max(self.epsilon_min, min(self.epsilon, 1.0 - math.log10((self.episode + 1) * self.epsilon_decay)))\n",
    "        if np.random.random() < self.epsilon:  # epsilon-greedy action selection\n",
    "            self.argmax_qval = random.randint(0, 10)\n",
    "            # action = env.action_space.sample()\n",
    "        else:\n",
    "            self.argmax_qval = np.argmax(self.qval)\n",
    "        return convert_argmax_qval_to_env_action(self.argmax_qval)\n",
    "\n",
    "    def memorize(self, next_state, action, reward, done):\n",
    "        # Memorize all observables and environment trial results\n",
    "        a, b, c = transform(next_state)\n",
    "        next_state = np.concatenate(  # this is 3 + 7*7 size vector.  all scaled in range 0..1\n",
    "            (np.array([compute_steering_speed_gyro_abs(a)]).reshape(1,-1).flatten(),\n",
    "             b.reshape(1,-1).flatten(), c), axis=0)\n",
    "        next_state = np.array(next_state).reshape(1, self.state_space_dim)\n",
    "        # self.memory.append((self.current_state, action, reward, next_state, done))\n",
    "\n",
    "        # Standard Q-Learning TD(0)\n",
    "        next_qval = self.model.predict(next_state, verbose=0)[0]\n",
    "        G = reward + self.gamma * np.max(next_qval)\n",
    "        y = self.qval[:]\n",
    "        # y[np.argmax(self.qval)] = G\n",
    "        y[self.argmax_qval] = G\n",
    "        self.train(self.current_state, y)  # Update model on every run?\n",
    "        self.current_state = next_state\n",
    "\n",
    "    def update(self, state):\n",
    "        self.episode += 1  # Increment trial counter\n",
    "        # Train the Q-Network\n",
    "        # if len(self.memory) > self.batch_size:  # If there are enough trial in memory\n",
    "        # if len(self.memory) % 4:  # Train only every 4th trial\n",
    "        # if len(self.memory) > 2000:  # We can lazy start to acquire more data before learn on it\n",
    "        #     self.replay_to_train(self.batch_size)\n",
    "\n",
    "        # Update epsilon\n",
    "        # if self.epsilon > self.epsilon_min:\n",
    "        #     self.epsilon *= self.epsilon_decay\n",
    "        # self.epsilon = 0.5 / np.sqrt(self.episode + 1 + 900)\n",
    "        self.epsilon = 0.5 / np.sqrt(self.episode + 900)\n",
    "\n",
    "    def train(self, state, G):\n",
    "        self.model.fit(state, np.array(G).reshape(1, 11), epochs=1, verbose=0)\n",
    "\n",
    "    def replay_to_train(self, batch_size):  # TODO: implement TD\n",
    "        state_batch, Q_batch = [], []\n",
    "        minibatch = random.sample(self.memory, min(len(self.memory), batch_size))\n",
    "\n",
    "        for state, action, reward, next_state, done in minibatch:\n",
    "            Q_target = self.model.predict(state)[0]  # Use the model to predict the target\n",
    "            if done :  # Full reward because environment was solved\n",
    "                Q_target[np.argmax(Q_target)] = reward\n",
    "            else:  # Discount the reward by gamma because environment was not solved\n",
    "                Q_target[np.argmax(Q_target)] = reward + self.gamma * np.max(self.model.predict(next_state)[0])\n",
    "\n",
    "            state_batch.append(state[0])\n",
    "            Q_batch.append(Q_target)\n",
    "        self.model.fit(np.array(state_batch), np.array(Q_batch), batch_size=len(state_batch), verbose=0)\n",
    "\n",
    "    def reset(self, state):\n",
    "        # Set current_state\n",
    "        a, b, c = transform(state)  # this is 3 + 7*7 size vector.  all scaled in range 0..1\n",
    "        self.current_state = np.concatenate((np.array([compute_steering_speed_gyro_abs(a)]).reshape(1, -1).flatten(),\n",
    "                b.reshape(1, -1).flatten(), c), axis=0).reshape(1, self.state_space_dim)\n",
    "\n",
    "    def save_model(self):\n",
    "        filepath = 'race-car.h5'\n",
    "        if Path(filepath).exists():\n",
    "            timestamp = os.stat(filepath).st_ctime\n",
    "            print('** OLD', filepath, 'exists! Created:', time.ctime(timestamp))\n",
    "            shutil.copy(filepath, filepath + '_' + str(timestamp))\n",
    "        self.model.save('race-car.h5')\n",
    "        print('** Model saved to', filepath, '!')\n",
    "\n",
    "policy = Policy_TD0()\n",
    "scores, trials_to_solve = run_carRacing(policy, n_episodes=102, max_t=1000, print_every=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "** Mean average score: 239.06616008258862\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEWCAYAAABIVsEJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXd4FUXXwH8nPaQQSmgBQi8SOiJNQBQERZog0gRBsGD/7P21vVYsLyAiHRSEUKV3pPcihF4CSSghhfR65/tjNzeFCElIcpMwv+fZ5+7O7s6eLXfPzjlnzohSCo1Go9FocoudrQXQaDQaTfFEKxCNRqPR5AmtQDQajUaTJ7QC0Wg0Gk2e0ApEo9FoNHlCKxCNRqPR5AmtQEowIvKJiMwx56uLSIyI2NtarqKIiPQVkUvmNWpua3k0+YeIdBaRIFvLURLRCqQYICIXRCTefLldFZEZIuKemzqUUheVUu5KqdR8lu1+U64YEYkVEZVhOcZUXJtFJEFEokUkSkT2i8g7IuKcpa7XROSKuc20rOsLmO+AF81rdLAQj1siEBFPEflRRC6a9/2suVw+j/WNEJFtWcpmiEiSWX+4iKwTkQb5cwZ5Q0RqiMgmEYkTkRMi8pAt5SlstAIpPjymlHIHWgCtgA9sLA8ASqmt5kvXHWhkFnullSmlLpplLyqlPIDKwP8BTwIrRUQARORh4B3gQcAXqAX8p6DlFxEHc9YXOJbHOu7qVp2IOAEbMO5/d8ATaAuEAa3zUJ/DLVZ/Yz5rVYFrwIzc1p/PzAUOAuWA9wF/EfG2rUiFh1YgxQylVDCwCvADEJEqIrLM/CI7IyKjs9vP/FJSaX9OESkrItNFJEREIkRkiVl+VEQey7Cfo4hczy+zjlIqVim1GeiF8ZJ51Fw1HJiqlDqmlIoAPgNG3OZcxpjyXxaRNzKstzNbOGdFJExE5otI2Sz7jhKRi8BWEYkB7IHDInLW3K6h2XKKFJFjItIrQ/0zROQXEVkpIrHAA2bZRBFZZX4hbxeRSuZXeIT5ddo8Qx1p8kWLSICI9M2wboSIbBOR78x9z4tIjwzrs7135rqeInLIlHuHiDT5t3shIu1EZK+I3DB/22VYt1lEPjPPI1pE1t6iNfEUUB3oq5QKUEpZlFLXlFKfKaVW5vB8t4vIDyISBvwJTALamtcyMusBlVJxwB+k/w+czWsdYk4/yr+0YM3/zEIRCTWv7cu3uEarROTFLGWHRaSfiNTD+KD7WCkVr5RaCPwDPP5v9ZU0tAIpZohINeARjK8egHlAEFAF6A98KSJdclDVbKAUxldjBeAHs3wWMDTDdo8Al/PbrGO2TPYB95tFjYDDGTY5DFQUkXK3qOYBoC7QDXg7g/ngJaAP0AnjukQAE7Ls2wloCHQxv2gBmiqlaouII/AXsBbj2rwE/C4i9TPsPxj4AvAA0kwtT2C0DMsDicBO4IC57A+My7D/WfPcS2O0tOaISOUM6+8DTpr7fgNMFTFaa/zLvTMV1DTgWYwv4l+BZdm9SE2FugL42dx2HLAiy/UeDDxtHsMJeCNrPSYPAauVUjH/sj6n53sOqIjx/D0H7DRbsV7ZyO8ODCH9f/A+0AZoBjTFaPnc1EoXETuMe3sY8MFo8b4qRgs4O+YCgzLsfw9Ga3UFxvU/p5SKzrD9YdJb4iUfpZSeivgEXABigEggEJgIuALVgFTAI8O2/wVmmPOfAHPM+RqAAhwwzEgWoEw2x6oCRAOe5rI/8FYO5bQeI0v5ZuCZbLafB/xmzp8FumdY52jWVeMWx2mQoewbjBYMwHHgwQzrKgPJ5rmn7VsrS50KqGPO3w9cAewyrJ8LfGLOzwBmZdl/Rtq5mMsvAcczLDcGIm9x7Q4Bvc35EcCZDOtKmfJVus29+wX4LEvZSaBTNtsOA/ZkKdsJjMhwzz7IsO4FDCWRnezrgK9y+UxnPd+LWdaPALZlc40TMP4HV4BlQO0Mz88jGbZ9GLhgzncGgsz5+7I51rvA9H+R0wOIBXzN5S+AaRmu4a4s23+B+f+7GybdAik+9FFKeSmlfJVSLyil4jFe9uEq8xdQIMaX1a2oZu4XkXWFUioE2A48LiJeQA/g9/w5hZvwAcLN+RgM23kaafPR/DuXMswHYlwPML4QF5tmnEgMhZKK8XWb3b5ZqQJcUkpZstSf8bpmt//VDPPx2SxbAx9E5KkMpqZIDFNMRhPRlbQZZZhrMPf/13uHcd7/l1anWW810q9L1nMMzFKW9RyvZJiPyyh/FsIwFNu/koPzvdX9yMh35v+gklKql1LqrFme9XwyPg8Z8QWqZLlG72E+G5IlAMT8b63A8NmB0RpJ+z9kfWYxl2/1zJYotAIp3oQAZUXEI0NZdSD4NvtdMve7yTRgMhPDjDAAw4xwu/pyjWmKawlsNYuOYZge0mgKXFVKhd2immoZ5qtjXA8wzq+H+aJJm1yynMet0lCHANVMc0fG+nO6/y0REV/gN+BFoJwyTDRHAbnljga3uneXgC+ynHcppdTcbLYNwXiZZiQnz052rAceFhG37Fbm8HyzXs/cXt+s55PxecjIJeB8lmvkoZR6BEClB39kDACZCwwSkbaAC7DJLD8G1Mry/2tKHoMxiiNagRRjlFKXgB3Af0XExXSYjgLm3Ga/yxiO+IkiUkYMR3nHDJsswXAOvoLhE8k3RKSUiHQClgJ7gJXmqlnAKBG5x3w5fsDtI2w+NOtrhGGr/9MsnwR8Yb64EBFvEemdCzF3Y3xxv2Vem87AYxgmt/zADeMFGWrK9zSmM/h23Obe/QY8JyL3iYGbiDya5QWXxkqgnogMFhEHERkI3AMsz8P5zMZ4MS8UkQZiBDGUE5H3ROSRPJ7vVaCqGBFeOWEu8IF5r8sDH5H9/2APEC0ib4uIq4jYi4ifiNx7i7pXYiinT4E/01qmSqlTGKa4j83/X1+gCbAwhzIXe7QCKf4MwrDrhwCLMSJC1udgv2EYfoETGOGQr6atMM1jC4GawKJ8knO8iERjvBh+NOvvnuHPuBrDj7EJuIhhgvj4NnVuAc5ghJB+p5Raa5b/hGEfX2secxeG7TtHKKWSMBRGD+A6hs/pKaXUiZzWcZv6A4DvMXwOVzH8I9tzUUW2904ptQ8YDYzHCBw4w79Espktu54YIdVhwFtAT6XU9TycTyKGI/0Ehj8kCuNFXR7Yncfz3YjxJX9FRHIi0+cYQRlHMCKhDphlWWVNxTjvZsB5jPs7BcO5f6vzW2Se4x9ZVj+JEVYfAXwF9FdKheZA3hKBmI4fjSYTIvIRUE8pNfS2GxcyIlID48/vqJRKsa00Gs3dy6067GjuUswQz1EYX7oajUaTLdqEpcmEGB0RLwGrlFJ/ZygfkiVCJW26axyGGo0mM9qEpdFoNJo8oVsgGo1Go8kTJdoHUr58eVWjRg1bi6HRaDTFiv37919XSt02KWSJViA1atRg3759thZDo9FoihUikjVLQbZoE5ZGo9Fo8oRWIBqNRqPJE1qBaDQajSZPaAWi0Wg0mjyhFYimRKIs4Tkq02g0ecdmCkRE6pvjA6RNUSLyqhjDda4TkdPmbxlzexGRn8UYtvWIiLSwleyaoo1KvYy63hNL9M/pZcnHUKEPo+L+vMWeGo0mN9hMgSilTiqlmimlmmGMCxGHkU32HWCDUqouRpbVd8xdemAMX1oXGIMx+ppGczN2FcG5E8SOxxL9s6E8wkeAuINTe1tLp9GUGIqKCetB4KxSKhDojTGgEeZvH3O+N8YwokoptQvwyjKmskYDgIgd4vkFuD4OseNRYX1B3JGysxGHqrYWT6MpMRQVBfIkxoAwABXNQXPAGFIzbRhSHzIPexlENkO3isgYEdknIvtCQ++atPyaLIjYIaUGpxc4tdbKQ6PJZ2yuQMwRx3oBC7KuU0amx1xle1RKTVZKtVJKtfL2vm1PfE0JxTBbjQS7yuDUBhIWZ/KJaDSaO8fmCgTDt3FAKXXVXL6aZpoyf6+Z5cFkHgO7Knkbv1lTwlGpIVafh5T9HSkzI92cFTvb1uJpNCWGoqBABpFuvgJjKNLh5vxwjLGz08qfMqOx2gA3Mpi6NJp07CojbiOtPg+rT8RtLLg8bGvpNJoSg03HAxERN4zxr2sppW6YZeWA+UB1jHGxn1BKhYuIYIz13B0jYutpcwzof6VVq1ZKJ1PUaDSa3CEi+5VSrW63nU2z8SqlYoFyWcrCMKKysm6rgLGFJJpGo9FobkNRMGFpNBqNphiiFYhGo9Fo8oRWIBqNRqPJE1qBaDQajSZPaAWi0Wg0mjyhFYhGo9Fo8oRWIBqNRqPJE1qBaDQajSZPaAWi0Wg0mjyhFYhGo9Fo8oRWIBqNRqPJE1qBaDQajSZPaAWi0Wg0mjyhFYhGo9Fo8oRWIBqNRqPJE1qBaDQajSZPaAWi0Wg0mjxhUwUiIl4i4i8iJ0TkuIi0FZGyIrJORE6bv2XMbUVEfhaRMyJyRERa2FJ2jUajuduxdQvkJ2C1UqoB0BQ4DrwDbFBK1QU2mMsAPYC65jQG+KXwxdVoNBpNGjZTICJSGugITAVQSiUppSKB3sBMc7OZQB9zvjcwSxnsArxEpHIhi63RaDQaE1u2QGoCocB0ETkoIlNExA2oqJS6bG5zBahozvsAlzLsH2SWZUJExojIPhHZFxoaWoDiazQazd2NLRWIA9AC+EUp1RyIJd1cBYBSSgEqN5UqpSYrpVoppVp5e3vnm7CaOyc04RTGLc1cptFoiie2VCBBQJBSare57I+hUK6mmabM32vm+mCgWob9q5plmmLAtfjjLA58ll2hk6xK5FjEEhYFjuZM1EYbS6fRaPKCg60OrJS6IiKXRKS+Uuok8CAQYE7Dga/M36XmLsuAF0VkHnAfcCODqUtTxPF2acA9Xr05EjEPAE/Hymy79gO+bu2o6d7BxtJpNJq8YDMFYvIS8LuIOAHngKcxWkXzRWQUEAg8YW67EngEOAPEmdtqigkiQvsKrwBYlUh1t7Z0rfIf7O2cbCnaXUl0ciipKhkvpyrWssikEOzFEQ9HbfrV5AybKhCl1CGgVTarHsxmWwWMLXChNAWGiFDGyde67OlYBTtxtKFEdydKKVYEf050cigDfL/Fy8mHyKRgFgS+iYejNwN9f0REbC2mphhg634gmruIYxFL2HbtR6q7taVB6Z4cjVyYySeiKRxEhAcrvUyKSmJB4JtciNnHgsA3SVFJPFjpZa08NDnG1iYszV3C1fgAq8+ja5X/YCeO2IsjRyLm4e1SlzqeD9laxLsKb5fa9K/+NXPOP8/iS+8BMLTmL3i71LaxZJrihFYgmkKhgktDHqj0PrU9Olt9Hu0rvEIFlwbU8uhsW+HuUhztXG65rNHcDm3C0hQKIkK90t0yOcyNsu7Yif6OKWzSfB4u9p48XOUtXOw9WRD4JpFJOjJek3O0AtFo7jKUUqwK/poUlUT/6l9zT+mH6F/dWF4V/LX2SWlyjP7002juMkSE7lXeIkUlWn0eaT4RB3HWTnRNjtEKRKO5CynjXPWmMu1A1+QWbcLSaDQaTZ7QCkSj0Wg0eUIrEI3NuZpw+SbH7dUEneZMoynqaAWisSlBcYF8cfxdll/2tyqR/RG7+CzgbfaG77CxdBqN5lZoJ7rGplRxrUbrsu1ZdWWpdXn6+YnUdKtD49LNbSydRqO5FVqBaGyKndgxuPooAKsSqe1Wj7F13sTF3tWWomk0mtugTVgam2MndjTwaGxdrl6qJs46rYZGU+TRLRCNzdkfsYsZFyZSy60uZZzKsSl0DS72LvSs3F93atNoijBagWhsyqW4QKvPY2ydN3Gyc8bZzplVV5bi7VyJNuXut7WIdy3nYwOJSo6mqZeftexk9GksStHQs54NJdMUFbQC0diUqq7VGVBtGPeV7WD1eQyuPgofV19alrnPxtLd3cy7uIgT0ad4rd4LNPNqzMno03xz4icqu1bi00bvYSfaAn63I7ZMnCYiF4BoIBVIUUq1EpGywJ9ADeAC8IRSKkIMW8ZPGMPaxgEjlFIHblV/q1at1L59+wruBDSaEkxsSixfHh9HUHwIj1buxporGyjjVIb3G/4fZZy8clFPPNcTw/F187GWRSXHEJ0Sg49rpYIQXXOHiMh+pVR2o8Vmoih8QjyglGqWQdh3gA1KqbrABnMZoAdQ15zGAL8UuqQazV2Em4Mb7zV8nRSVwtKQlSRYEnOtPAB+Pfs7Hx8bx7mYi4ChPD499iNfBown2ZJSEKJrComioECy0huYac7PBPpkKJ+lDHYBXiJS2RYCajR3C0HxIZmWA+Mu5bqOob59KWXvwqcBP3E48jifHvuRkIRrPFt7CI522openLG1AlHAWhHZLyJjzLKKSqm0PBZXgIrmvA+Q8ekNMssyISJjRGSfiOwLDQ0tKLk1mhKP1efhUomvG/+HGqWq88OpiRyK/CdX9VRwKccnjV4nxZLK5wE/ExgXzDsNnqeJV8MCklxTWNhagXRQSrXAME+NFZGOGVcqw0GTKyeNUmqyUqqVUqqVt7d3Poqq0dxdLAtZZfV5VC1Vhfcavk5V1yosDl6ORVlyVZeLvTP2GZzu7g5u+S2uxgbYtP2olAo2f6+JyGKgNXBVRCorpS6bJqpr5ubBQLUMu1c1yzQaTQHwUp0xJKQm4uVUGkj3iViUylUEVprPI1ml8FztISwMWsWnAT/x0T2vUMu9ekGJrykEbNYCERE3EfFImwe6AUeBZcBwc7PhwFJzfhnwlBi0AW5kMHVpNJp8xsXexao80nBzcMPD0T1X9Uw5N5eQhGu80+B5HqzYgU8avU4pexe+O/mrdqIXc2wWxisitYDF5qID8IdS6gsRKQfMB6oDgRhhvOFmGO94oDtGGO/TSqlbxujqMF5NfpKqLJnMMP9WpslMRNINQuKv0qh0eufDawlhRCbfoJ5HLRtKpvk3chrGa9N+IAWNViCa/CIhNYkPjkylU4WmPObTDoCYlHjeO/wbvau258GKLW0soW2ISo4jPCmKGm7p/TnCEqNISE3Cp1R5G0qmuROKUz8QjabIYyd2ONs78uMpf/4K3kFMSjxvH/qVk9GXcLFztrV4NuOrgLm8emAi52MMa3JYYhSvH/yF945MJTWXjnZN8UO3QDSaHJJkSeE/R2ewKywAAAex56NGw2nv7XebPUsuQXGhvHZgIskqlQ8aDeF/p5ZwLTGSr5uOpomXNk8VV3QLRKPJZ5zsHHijwUDrcosyde9q5QFQtZQ3P7R4gejkON48NJmLcde08riL0ApEU6AkZRNlU1wjb2JS4vngyFTr8p7wE/wVrIfddbV3hgxp9z0ciuZAYLEpCTkqy0pCahKrQjKn3YtJTmDd5cP5JltxRSsQTYERGBvKE1u/Z9f1U9ayE1HB9N/6HUciAm0oWe6JS0ng7UO/ciYmmE/9RrKq0ze0KXcPP57yZ3nITluLZzPSfB5Odg682eAJyjt58trBX6w+kezI+gGhlCrwjwr/izsZvP1HguLCrGW/nVnPiJ3jiUyKveW+Cy/t4tOj85l6dj1gKI9X9k/l06PzCYkLL1C5izpagWgKDC/HUng6uvLWwdnsun6KE1HBvLx3KoJQ3sXT1uLlCmc7R6q5VbD6PJzsHPjYbwSdKzSjiks5W4tnM749Md/q83ikyn380OIFHMWej4/OzNaJPvXsRl7YO5W4lETAUB4/n1zFGwfmFKgSaeLlS3xqEmP3/kZQXBi/nVnP1LMbaFqmBp6Ot24xPenbgR6VWzDl7Hp+PrmCV/ZP5WR0MF80HUyVUmULTObigHaiawqUG0mxvLRvKqeijS/SSi5eTGw9hiquZWwsmSY/uJoQQWhiJH6la1rLguJCiUtNpJ5H1Zu2X3f5CB8dmY+fVzV+bDmCKWc28PuFbQyo3oY3Gj5WoCNQnooK4cV9U4hKjgegp09L3mvUL0e96lOVhfcOzeHvUCOA4utmw+hYoVGByZobTtwIoUHpKrctyw3aia4pEpR2cmNsvR7W5eG1OmvlUYKo6FImk/IAw7GenfIA6Fq5CZ82eYKjkZd4YP1/Ck15ANTzrEKzMumyPlWz878qj/DEGKae2WzN+RWfkkRIfLq56nR00UiCsSP0NEN2TGDmub+tZdPObmbIjgnsvn6mwI+vFYimQDkRFcyHh+dSyt4ZDwcXfjixPJNP5E45fiPkJlPJschgSnLLurjzUKXGlHf2sC6/UO/hAlceYPg8/r4WQD2PKng4uPDSvimZfCIZWR1yhAmn1vP1seVEJcXxwr5fORNzBXuc6VzBjyln11t9IrakdblaPFy5CT+fXMPMc38z7exmJpxaR48qTWlVruAj4bQC0RQYZ6Kv8PLeqZRycGZO+1fwv/8Narh589bB2ewPO3vH9V+KDWfY9sl8eGiRVYmsDvmHYdsn88eFXXdcvyb/SfN5XE24QVknd+wQXt0/w+oTKSh+v7CVqWc30NOnJTPajmXCvaOtPpGIpJibth9Uoy1P1+rIgot7GL3nV05HX8YeZya1Hs3nTQfTo3ILZp3fbHMnuoOdPZ826W9VImnK4z9N+hdKih09moumwKjsWoY25evxXL2HrWar/7UaxbfHl+Hrfuep9qu5leXZup0Zf3IDAPdXqMf7hxbStEw1+lZrccf1a/KfiafWZjJbrb/yDx8dmc8r+2cw4d5ROBXQAFMdvBsQnhjN2HrdsRM76nlWYXyrZ9h09ShejjenlhcRXqzflSsJN1gVcgjBnhntnsHPyzDNve/Xn8E1OhYJJ7qDnT01M/yfarlXLLT8bFqBaAoMNwdnPm36ZKay0k5ufN50UL4dY3TdzgCMP7mBFcGHaVamOhNaD6OUw92bXqQo06xsDZJVKq/U74GI0LVyEwDOx1zDUewL7Li+bt68VP+RTGX1PKtQzzPd0ZxsSeVA2EXu8zb8JFcTbnAk4iIgKGB50EEalfbBTuywFzvqeBSN8dynnd3MpNMbeLhyE1KVhQmn1mIvwvBaHW+/8x2iFYim2FPNLT2MtqyzG872jjaURnMr2nvXp713/UxlaUqksDgTFcrc83t5t3F3HOyML/VjkZf54shKDodf4r8t+9K6vC+jd03lcvwNLCmODKzVggUXdwPwdqOeuRoPpSDZHnoyk9lKKYW92PHzyTXU96xCm/J1CvT4WoFoijWrQ/7hvYP+tCjrS/Oyvkw98zcfHlrEZ8366TTrmmzZc/0Cf5zbS0RiHN+06sfJqKuM2jaLUg7ONC9XnXf3L6ZX9UZcjr9BQrLwabNe9K3eDHcHZxYH7ePp2h2p5Opl69MAoG35unzc+HEe9WlmPO8CnzbpT5vydbmvXO0CP75WIJpiy6XYcN4/6E/TMtWsZitXe0fGn9xAw9JVGFarna1F1BRBBte6l4TUZL49uo6AyMtcT4zBy6kUMzsMp6xzKZ7ZMZulF48BwufN+9DPtzkAL9bvypM12uLt4nHrAxQidmJHr6qZ/X0OdvY3lRXY8QvlKJqbOHXjGq/tXkR8SrK17HB4MG/tXUqSJdWGkhUfqrmV5avmAzL5PEbX7cxXzQfwhO+9NpZOU5QZWbcdj1b1IzA2nNiUJKa1H4aPmxcikiGkWKwmLjAc60VJeRQFbK5ARMReRA6KyHJzuaaI7BaRMyLyp4g4meXO5vIZc30NW8p9p5yKusbKoGM8t+NP4lOSORwezMhtv7Pv+kUiE+NsLV6RIyb55jDPmOREulbxu8lh3sOnSbHxg2y9cpZz0Zn7ImwIOUVwbKSNJLo7OBZ5mW1X0zva/RiwkZjkRF7aPY+DYRf5sMkj3Fe+Ju/uX8yySzpp4r9hcwUCvAIcz7D8NfCDUqoOEAGMMstHARFm+Q/mdsWWntX8+KpVL3aFnqf9ih8YvHkGpR1dmdPpKSq46q+cjFyKieDh1ZOYdzY9I+qxiCs8uHIia4JO2FCyOyMxNYUP9q9g6ObZViWy6lIAY3csYNzRzbYVrgRzLPIyo7bNwt3RhfXdXuFNv66sCj7GkL+nsuPaWT5r3ptBtVozsc0gWpevyYcHl3El/oatxS6S2FSBiEhV4FFgirksQBfA39xkJtDHnO9tLmOuf1AKo/tqAdLXtylDat9LTEoiycrClA6DqFKqtK3FAiAg4mqOygqDCq4eNPSqyAf7VzLv7AGORVxh+Jbfcba3p6FXRZvIlB842zsw5f5BWJRi6ObZTAjYymu7F9O8XFX+06LH7SsowhgZdlNvW2YLTkRewcPRhZkdhuPj5sXIuu14068ryakWxt37hNXn4ergxMQ2g5jcdiiVXIvG/7KoYdNkiiLiD/wX8ADeAEYAu8xWBiJSDVillPITkaNAd6VUkLnuLHCfUup6ljrHAGMAqlev3jIwsOimDU8zW0Wb5pm23jWZ1G4grg62Nb9sCjnDM3/P571mDzKqwX0AjD+2jR/++Zs5DwymbcUahS5TYmoKY3f4s/myYXaoUsqTOZ2HUd29+OfVOh0VyiNrfgWgrHMpNvQYi7tj8e7H8tM/f7PvehCT7x+Aq4MjSik+P7ieoNhIxrfvh6NdwfX5yAnxKck3/c+yK7tbKfLJFEWkJ3BNKbU/P+tVSk1WSrVSSrXy9r7z3s4FRZryKO3oyuYeL/O1ac5K84nYkg6VatKjWgO+PLSBqSd2W5VHH18/WntXt4lMzvYOjL2ng3W5V3U/myqPXwN2ciQsPaGeUoqf/tnKqcjQXNd15kb6PompKVxLuDm1RnHD16MsO69eYMzWBcSnJPP5wfXMOLWX6u5lcCgC4dXZKQqtPHKPLcN42wO9ROQRwAXwBH4CvETEQSmVAlQFgs3tg4FqQJCIOAClgewzoRUDrsVHU97Znen3D6FKqdL09W0KwLRTu4hPTbLpw+xoZ88PbXsD8OUhI01IH18/vrmvJ/Z2tvnzH4u4wuitf1LO2Q0vZ1cmndhBVTcvnqxd+ClLopIS+OP0QX45tpNZXQbRuGwlvjy4gakn9mBRFup5dcpxXasuBfDa7sW0Kl+Nd5o+xLPb5jN082zmdB5GLY/iO85InxrGUL9v7FqGn/+3AIys35r3mj1YKIkTNYWDzT4FlFLvKqWqKqVqAE8CG5VSQ4BNQH9zs+HAUnPvL2JWAAAgAElEQVR+mbmMuX6jKsYpV7v6NGB512cz+Tz6+jZl0YPPUNb55tw8hY2jnT11Pctbl+t7VbCZ8rgQHc7wLb9TysGRBQ+OYFnXZ+hcuQ4f7F/JXxeP3nH9Sil+OrKNkxHpLQGLUnx7cAsXoiJu2t7TyYU/HhpCaScXhm38g8EbfmfqiT2MqNeKVxvnPH1EYmoK3/6zkeblqvJbhydpWtaH2Z2HYlGKSce33fF5FTah8bGZWmW9fRvh6ehiXX69cSetPEoYtm9L3szbwOsicgYoB6QNQj0VKGeWvw68YyP58o3s7MC2tg2nMf7YNn4+to2e1e+hW9V6fH14I1NP7LaJLFXdvOjj29jq83C2d2BCu/4Mqd2S1t6+d1x/WEIcf5w6xOB1czkZEYpFKd7fvYYJR3ey5lL2qed93Erzx0NDiE5OZPe1i7T0rsqHLbvm6gXpbO/A7E5D+a3Dk1afR11Pb/7sMpzPWj562/2Xng9gY1DmMR/mnT7MmsBThCdkDgW/EhdNdFLBZrx9d9cqhqybx4FQI53+O3tWcCM5ATsEAas5S1Ny0CMSam5iY/BpRm9dYDVbWVC8tnMpqy6dYFbnQbSvVPP2lRQzzkeF8+TaP0i2pFLTsyz7Q4N50a8d/9fs/myVglLKarYC8HB0ZnaXwTQpV7lQ5E21WOi3ejbHw68xqXNfulStw++nDvL+rjWUdnKhspsHf3QdRFmXUoTERjFo7R/4epRh1kMDC0ymy7FRPLnuD8IT4mlTuSobL5/GAXvmPTiUwNgI3ti1jLYVazCt08Ai86GkyZ6cOtG1AtHchEUpFp4/Qr8aja1mq2RLKksuHKV/zSYl1gxxLiqcLksnA9C1al0md+53W+Uxol4rRjW8j8Hrf+dGUgKzugwqNCVyIzGBoevncTIilI5VarI+6AxdfGoztH5znt+yhJqeZfi+fU9e2LKY8IR4Zj00kObeeR/mNCdcjo2i05JfSVIpiCgWdRtOc28fAJZcOMqlmAhe8ru/QGXQ3DlFPgpLU3SxE2FAraaZfB6OdvYMqNW0xCoPi1L8FrDHunwgNJhTkdez3TY6OZEtIWcZUa8VH7bsajVnlXZyYduV84UlMqWdXZjz0JMkWVJZH3QGAX4xWyNTHnicExGhPLp8OoHRkYWiPAAsmB+kSlAWOzJ+nvap4aeVRwlDKxDNXU+az2Pu6UO86NeOTb3H4GBnZ/WJZMXTyQX/bsMz+Tx83ErzV4+RPH9P20KVfXlgehIHBWy/fAGA2qUzR3D5ehR89tjg2BsMWjsXZ3sHJnXqi6+HF8M3zOdAaPDtd9YUS7QC0dz1RCTGs/3yBavPo6ZnWeZ1G4yDnR07r2bfEdXTyeWm1lh2ZQVJms+ji09t9gx4kcblKvHc5sX4nznCoLV/4OHozBvNOuJs78DgdXNvcqznNx/vWUdEYjyzHxpI9+r1mdd1MGVdXHl9+3JSLJbbV6ApdmgfiEYD3EhKwNPROZMCuJGUQGknl1vsZTtSLRYGr5uLm4MTv3Tui7O9AzcSExiybi6XYm5gUcpqttoacp5nNi2klbcPv3fLv9EgsxKWEMfl2Cj8yqWP1Hc5Noro5ETqeRXdTr2am8l3J7qIdADqKqWmi4g34K6UKjyDbx4oaAVy9PpVfg84xGcdulrTPu+9EsSKcyf5qG0X7Eqov0BTNIhNTsLBzg5n+/T+wFFJCZyICMXRzj6Tz2NbyAXKu5aiQZkKthBVU8zIqQLJUU90EfkYaAXUB6YDjsAcjN7kdy17rwQx98QRopIS+alLTw5eC2HEKn8qlnLnRosEyri42lpETQnGzdHppjJPJxdaV6x2U3mHKjUKQSLN3UZOU5n0BZoDBwCUUiEictfnHH/aryVJqan8d/cW9l8NJiIhAR93D+b2fFIrD41GU+LJqRM9yUwbogBExPa5NooIzzZtTVffOlyJjSExNYXZjz5BRTd3W4ul0Wg0BU5OFch8EfkVI9HhaGA98FvBiVV82HsliB0h6ZE6X+7arCNONCWa+ORkrsZkzhgclZhIWLweSfNuI0cmLKXUdyLSFYjC8IN8pJRaV6CSFQP2Xgmy+jzm9nySJWcC+O/uLQD81KVnpvGUNZqSwmvrVnIi7Dpz+z5BZXcPohITGb5sISmWVJYMGGKzpJuawue2d9ocs3yTUmqdUupNpdQbWnkYnIsMp2Ipw+dR0c2dZ5u25t37OnH+RgSxyUm2Fk+jyURSaiqJKSmZyhJSkklOzd0ogc+2uJfw+DgGLZ7PqbDrDF+2kKOhV3np3rZaedxl5CiMV0Q2AP2UUsVqYODC6AeSkJKCi4PDbcs0GluilOL5lctITE1l0iO9cHZwID45mdErllDGxZWfH340V50gD14JoZ//XOvyr4/0plutOgUhusYG5HcurBjgHxGZKiI/p013JmLJIDtFoZWHpqghIjxQoxabA8/z3Mpl3EhIYPSKJey4dJEHatTKdQ/62mUyp0ppXKH4jk2vyTs5fdMtMieNRlNMGdioMQDvbFxLs98mAPB91x70a3BPrupJ83k42Nkxulkr5hw9xKDF860+Ec3dQ45aIEqpmcBcYL85/WGWaTTFimUnThAeH5+pbFFAANGJBTvYUlGhV70GmZYfrVMv13W8tm4lR0OvMqH7Y7zV7n5m9nqc8Pg4nv5rEak6AvGuIkcKREQ6A6eBCcBE4JSI5HzsTo2mCHA1JoZ3165l6IIFViUyac8e3ly9mhkHD9pYuoInzechwH0+VQF4buWymxzrt+ONNh34pUcvq8+jeaUqzOz1OB926Kyd6HcZOb3b3wPdlFKdlFIdgYeBH+7kwCLiIiJ7ROSwiBwTkf+Y5TVFZLeInBGRP0XEySx3NpfPmOtr3Mnxc8PVmBj+PPJPprKLkZEsORZQWCIUCEop1p0+Q8ZAilSLhXWnz9xir+JLRXd3JvfuzYWICIYuWMCXW7bw7bZt9GrQgOdbty40OeYeOsK+oMwpzqfu3c/Rq1cL7JhpTvQdly7yXdcezOs3kK+6dGNz4HleXL2c3CRVbVjem4dq1s5U1rxSFdpXu/PhhYsrV6Kj+WjdhkzKODAykv9s2JjrKLfiRE4ViKNS6mTaglLqFEY+rDshEeiilGoKNAO6i0gb4GvgB6VUHSACGGVuPwqIMMt/MLcrFKbv28/7a9YxZY8R0XUxMpKhfy7gi02biUpIKCwx8p3Vp07z/JJlfLX5b5RSpFosvLN6Lc8vWcbeoCBbi1cgtPf15bc+fTh5/TpT9+/nfl9fvu3evdD67CSmpDB9/35G+i+yKpGJu3bz381bWHDkaIEdV0To37AR32XweQxs1JivunSjf8NGJXagsMJiT1Awvx8+zPNLjRZdYGQkQ/5cwLLjJwiOirK1eAVGTp3o+0RkCkYCRYAhwB3Fx5qpUdK6szqakwK6AIPN8pnAJ8AvQG9zHsAfGC8iogohH/0bHe8nJCqar7b8zaUbN9h07hxxScnMfKI/ni5FM913Tuhery7Dmjdj6r79pCrFjYQEFh8L4NX27bi3alVbi1dg/JPhS/9KTAxRiYmUdS2c3GXODg7MGTiAIfMWMNJ/Ea2rVWXzufP0atiAjx58oECP3TOL/wPSHeuaO6NXwwbEJyfz3tp19Jw1m8j4BCxKMeeJAdQoU8bW4hUYOf3seh4IAF42pwCz7I4wOykeAq4B64CzQKRSKq0dGAT4mPM+wCUAc/0NIHMsoVHnGBHZJyL7QkNvHk0uLzjY2TGu5yM0qVSR3w8dJiQqmplP9KdRxeKdGltE+OjBBxjSrCkz9h+wKo8X27WxtWgFxqQ9e6xmq+n9+hmtyQw+kcKggrs7vz85gLjkZDafO4+PpyffPtK9QPwHf5+7wJazmUddWH3iNHsulswWpi0Z2KQxz9/XmnPhEYTHxzP18b40rFCyx0HJ6RPrAPyklOqnlOoH/AzY3+nBlVKpSqlmQFWgNXDzJ1Lu65yslGqllGrl7Z1/Ny8kKipT/p+dgRfzre7CILvomFSLBYtSxCal95qPTkzMlT3cFpwPi7hJxvNhEbfd72pMDL/s2UOvBg34tnt3OtaowW99+nAhIoJ5R47kq4xKKb7dtJVNp89ZyyxK8dnaTey6cAn/o8es5dfjYjkYcjlfj58mw4Ttu3h+0V9WJbLqxCleXbqCSTv3FPn7XNwIjIxkSUD6EMM/79iZ6wCF4kZOTVgbgIdINzm5AmuBdvkhhFIqUkQ2AW0xEjY6mK2MqkCatzEYqAYEiYgDUBoIy4/j3440n0diSiqLhw3mtz37+GrL3wA80/q2nTVtzuHgK7z112om9H+MOuWNRtvuwEt8vGoDtSuVZc3pM7zavh1hcXFM3bcfgHc6dyySdvHzYRH0njqHgc0b895DnRARNp0+x4uLlvNht8482bzJv+5b0d2dhYMGUaNMGavPo72vL0uHDqV22bL5KmdCSgo7L1xixu4DjH/8MTrVqcmHq9az4NBRToeHsePSRXo1bMCbne5nzMw5fDTpV77teD+NPNwhLs6YunQBNzc4fBh27IDkZEhJgdRUsFhg7Fhwd4etW2HbNrCzA3t7Y3JwQJ59ll/79+GTb8bh/+nnnKtdi43Bl+nnU4X369fGeneVgiJ4r4sTaT6P+ORklj81jCNXrvDe2nU8v3QZv/Q2ev6XRHJ6Vi5KKevnt1IqRkRK3cmBzVENk03l4Qp0xXCMbwL6A/OA4cBSc5dl5vJOc/3GwvB/AMw/ctTq82hUsQLjej4CwLR9+3miiV+R94O4OzsRk5DIU3P8mTW0P2GxcYyetwQvdxer8nixXRvrF+nUffvpWrcOrar63KbmwqdGWS+ebN6YGXuNsNt2Narz4qLl1K9Qnh4Nbt+noU65m6ye1M2mLNckJ8O1a3D1Kly7hmtoKDM7d2D45p1M+f4nZOdWesZE87KdQGQEHgkJOG/Zgr2HB7+nJuH5xWfwRZY6T56EevVg3Tp4882bj/nUU4YCWb8ePv305vUjR+Ll5sZX1y/jMmsaAE+nrfvkA0MZicBzz8G8eeDlZUzlykGVKjDHdHlu2ABhYVC5cvrkpkd0yMiJ0FCSUlOZ88QAGlbwtpquft6xk9DYWKqWLm1jCQuGnObC2g68pJQ6YC63Av6nlGqb5wOLNMFwkttjmNLmK6U+FZFaGMqjLHAQGKqUShQRF2A2xsBW4cCTSqlz2ddukF+5sCxKEXwjimpe6Q9BisXCtZgYqnh63nH9hcHZ6+E8NWcBobFGyu263uWYOfhxzoSH06Z6+gh2Sil2XwrKVFbUUErx3/VbrErEr1IFpg96nNKuBaTIExONl/mlSxAUZEzBwTBmDLRpY7zgu3W7eb8VK4h8oAuvv/AK765cSrJnaRo2qEeyhwcOZcpg98YbULMmnDpF7NatuJYujZ27O5QqBa6u0LgxuLhAdDTExoKjIzg4pLcyXFwMBZCSYkwWizGlLZcrByJs2LqdH/yX4JKcjGtyEm/f2wK/MqVhwABDTn9/owUTGQkREYaysLeHLUZmaXr2hBUrMp+bnx/8Y4a2jx8PUVHg6wu1ahlThQrFolVjUYqzoWHUrVDeWpZisRAYFkFt79x9WMQmJeHm5HRTWUxCEhU9M48RdDUq5qayokS+jokuIvdivNRDzKLKwECl1P47krKAKYxkisWJufsP8/HqjQDMGTqA1r7FN9Jq0+lzPLvAaJz2bXwPX/XslneTW0oKHD8O584Z0/nzxjRiBDz+OBw5Ak2bpm9vZweVKsHPPxvrL16EGTOMsgoVoGJF8PbG4uPDh5u2seCQEZ7raGfH+Mcf44G6tbIV42pUDO4uTpleQsGRUZR3L5VnE8iqE6d4belKmvlUZtxjPXhh0V+cuh7GL/0eo1PtmjmrJCwMQkLg8uX0ydER/u//jPUdOxpmtIx07gybNhnz48eDpyc0aGBMReija9K2PUzcuotfBvamfS1fUiwW3l6ymk2nz7PqheFU9Lizl/yKoyd59681THiiF/fXrgHA5O17+GXbHhaMHESdXCqpwiJfFIipOC4ppa6IiCPwLNAPIwrrI6VUeH4JXBBoBZLO7sBLjJ63hBTTcV62lCuzhva3+kSKE2k+j/re5ahXoTyLjgQw/N7mVp9ItiQmwtmzRkvi1Clj6tABnn4awsONr/U0PD2NlsHrrxtmorg44wu8WjVjqljRaAncAotSVp/HC+3vY+R9LRgxdxEnr4Zmq0SSUlN5bNJsvN1K8evgPrg5OXEhLIKnZvnTpmY1vunTPdfXSSnFsLn+pFgsTBnQF3dnJyLjExgxbyGVPNz55fFe+efnio01FGmaEi5TBoYONfwr5csb1ziNatWM1tsHHxjLAQFQpw443TzGe0ETHhfP8Nn+BIZHMH5AL5YeCWD5sZP8X5f2jGl/551LI+LieXrOQs5eD2fiwF4cv3KN7zdup6dfA77u/XCRHTMovxTIAeAhpVS4mbpkHvASRse/hkqp/vklcEFQkhTI+esR/LBhG1/27oa7izMAJ6+E8uu2vXzZuxsujv/+Qtt7MYhRcxdTrUxpZg3pT2R8Ak/NWYACfh/2BDXLFW6cekxCIu8uXctrD7anVnnDeR0RF88HS9fxXo/O+Hj9+xfq+bAIek6ZTf0K5Zn+ZD88XZyt5qyPuj3A0IZ1jdZEQIBhp3/8ceMl5uVlmFnSqFjRsP1/8omx7O8PNWoY5pcyZe7Y/JKQnMIzfy6mVTUfXunYFhEhKiGBp+cu4tF76jPyvpY37bPi6EneWLyKltWq8H73zjw7dylJqanMGPY4DSrmLaIwJtGIsHN3Tn8530hIwMXBofAcu8nJhlI5ftyYjh0zlPdzzxlmszJljBaNnx+0bAktWsDDDxv3ohAIj4tn2Mz5nLluKLn8Uh5ppCmR41eNbgVFXXlA/imQw2ZPcURkAhCqlPrEXD5khuAWWUqSAtl44iwvz1+OX5WKTBnal+DIKIbP9MfF0YHfRw685Us3KPIGn67ZxH97dqOcmxH7cPZ6ON9u3Mo3vR4u9CCA89cjGDp9PnYCM0cMoEwpV56euZBz18OZPKQPbWpVv+X+8w4eoUedWpSOugE+PiilOP3EQOrs34/dhfOGwgC4/37424iWY/x440VVv77hmC4EM0pSaiqOdnaZvvKTUlNxsv/3CPgVR0/y+qKVADg72DN/1KA8K49iQWwsLFtmRJodOAD79xutlUmT4NlnITAQvv8e2rY1Jl/ffPetpFgsjJm7mO3njND8aUP60b5W/qZl+Wb930zdaVj8Jz/Zh051/918ePBiCM2rV7EuK6U4HHSFZtUq56tMtyK/FMhRoJlSKkVETgBjlFJ/p61TSvnlm8QFQElSIABrA07zuv9KnOztSbZYKOfmyszhA/At52Vr0XLNmWthDJ/pT1RCInZivPMnDupNhzr/8sc9csSwsx86ZExHjxr+hkBzPPpXXoErV6BRI+NL9p57oHZt48u2GHEhLIKHJ8wAoLSLM5tefeYmx2yJRinDFObhAWXLwpo10K+fYUYE8PExWi+ff26Yve6QNJ/H8mMnGdmmJdvOBRIYHmH1ieQHk7fv4fuN2+lQ25dr0bFcCItg4sB0n0hGVh89xWvzV/B2906MaNcCpRRfrd7CrJ0HmTv6yUJTIvmlQN4HHgGuA9WBFkopJSJ1gJlKqfb5JXBBUNIUCMD/Nu1kwpZdoGDRc0O4p3J6b3iLRWFnV/QjX9LYFxjE0OkLAHi/R2eG3dfcMDMdPAj79hlfpdOnGxFBY8fCxImGr6JZM8Op3ayZYWcvBtE+OSHN55GUmsrAFo2ZvH0vLatVsfpE7lpSUoyIrx07YPt240Ni924j1HjaNFi+3Ogz89BDRgszF8/D+L938b8tO61mqzSfyMXwSNa++PQdO9GXHAng7aVrrGar6IREq09k4TODqZch+gsgOTWVt/xXsfrYad7u3onLN6KYtfMgT7Vtzjvdb+Hjy2fyLQrLTHBYGVirlIo1y+oB7mlhvUWVkqZATl4JZfhMfyJjE5BUaFjVm1lPD8DdxZkdZwIZt2YbvzzVB2+Poh+jHxEXz+gp8zgRGkaKvT39zp/kk50bcTpzJt0EVbUq7Nxp/F68aEQ/+fiUGIWRkaTUVB6ZOJOYxCSrzyPNJ9LjnnqMe/wRW4tYNBk/3jBxXbhgLPv4QPfuMHmy8bzchuiERDacPEufpumDaoXHxbPz3EUe9at/x+LFJCYya88hxrS/1+rziIiLZ8HBf3im3b3YZfMsJ6em8qb/KtYcOw1Q6MoD8jmMt7hSkhRImvJwcXTg/Ycf4B3/1cQnJdOgqjdjO7XhjT9XUqN8WaaNfJwybkZiwEthkVTLYt7KrqxQUMoIjd29m4St27i4ajU1LgVyctosXLs/zE8ffsHAbRu4p9ejlO14v+FMrXDnucaUUkzZspdHmtbHp4zRj8diUUzatJsB9/rhXYRi8becPk9FT/dMPo81x09Tv0J5ahRyoEOx49w5o0Pl+vVGv5lVq4zy1183AigefRSaN8+RUrE1Sim+WLmZ33cfArCaswqTnCoQlFIldmrZsqUqKWw7c0F1+2maunA9Qiml1D+XLqsWn/xPNXxvnGr43jjV5+fZKjwmzrr96sMnVZN3f1Srj5y0lk3asEs1e/8nFRB0teAFjo9XautWpY4fN5b37VPKUCMqtVQpdbhOfXVp9LNKBQQopZQ6ffW66vbTNLU/MDhfxbgcGaXa/GeCeuirKSooPFKlplrUJ4vWqXveGadmbt2fr8eyJTEJiSohKTlTWVRcgkpKSbGRREWA1FSlOnZUSsR49qpUUerZZ5Xavt0m4gRej1AvzFiiIjL8T09fCVUvzVyqouMTlFJKWSwW9eXKTarBh+PUZ8s3qlfm/aUafDhOTd9euM8qsE/l4B1bMhO0lEDa1/Zl+dincDQjePyqVuK5zq35Ye12AL7o19Xa8gDoUL8GTapX4s25RkTPhdAIfl67g17NG1KvcvmbD3CnWCxGX4m0vEz790NSErz6KvzwAzRpAr/8Am3aYOfnxz1ih4N9+tdgnQrlWDF2eKay/KBSaQ+mPdOfkVP8eerXBdSuUJbtpwMZ07k1w9o3z9dj2QqLRTF2xlKcHOz531O9cHZ04EZcAqOnLsK3vBffDrpLzV92dkZv+mvXYPVqI9przhyoXh3atTMiwFauhEceKZTULCERUew4HcioKQuZ+szjXI+J5enJ/jjY2xEeG4+7izOrjp7K5PNIsVgQ4OvVW2hatVKm6KyigDZhFVN2nAlk7OylJKYYo51VLePJ9FED8CmTHp4am5jEc9MXc+CCkUCgV/OGfD6gW/6kDQ8KMkJkk5Nh+HCjbVG5spEKo2VLI1KmfXvjj5qPWZHzSkDwVQaM/wOAR5s24OuB3Ytkssi8snjvMT5cuJZ2dX35YkA3xs5cxqnL1/lpWE86Nbx1f4q/j58nOiGRR5unJ8Neffgkzg4OPNCo9i32LIYkJBgfNp6esHixEeHl6mqYuAYMMH4LUJlsPxXIi7OWYjG/4Mu5l2L66AHU8DZMlBaLYvWxU/Twq2d9PpNTU9lw/Czd/XI/fn1eyakJS7dA8kCqxXLTSzi7soJi59mLjJ291OrzCI64wTPTF/H01AXMfOYJKnt5AODm7ESLGj5WBdKxQc07k3HZMliyxPiqO2emIWvc2FAgIkbqipo1jRxNNiA5NdXaQksjJdWCnQgL9qQPSXwgMJiQyCirT6Qk0PfeRgB84L+Wzl/8BsDEEb1vqzyUUvyx/RA7TgWilKJni4asPnySt/9Yxb21qtL5nlolStHi4pL+fPbqZTzLCxYYHUn9/Q3lceyY0d+kAGhfz5dXH+7ANyuMPGM/Dn3MqjwA7OyERxpndt472tsXqvLIDUXfo1TEWHHgBEN+nseNuPShbP/ccZiRv/gTl5h0iz3zj/LupWhVo6rVYe5XtRJTnu5HTe+yeLikh3v+unE3Uzbv5aFGdWhWvTJv/7mKNf+cytlBgoJg9mx44QXDPAVGuOTSpYbSGDfOCLU9kCEQr2FDmymPsOg4Bv7wBysPnLCWXY6Iou+3s3h+xhLm7/mHMZ1b4//SEGITkxgx2Z/giBu3rXfVwZNciYjOVLZ07zHCouPy/RzulC5ZWgtt6ty6QyYYg4qNe6onrWpV5b15a3h5xjLe/mMVTX0r8/OIfEx1UhSxtzfyeP3vf8bzvmmT0Z+ounnd3n4bXnoJ9u5Njwy8Q85cvc6UzXusy58u3kBkbOENZpbfaAWSSzxdnTkVcp3RkxZyIy6BP3cc5vOFG/Fwccp3+32qxcKuU5kHrkpOSSUiKp7fnu6XyefhV7USvw7va01zsuLQCavPY9yQR5k8qh9Nq1fmzbkrCQi+SrYcOmSkl6hXz8hX9NRTRprvtPHRv/sOQkONVshrrxmmqiIyzoGrkyOlS7nw7h+rWXngBJcjonh64gJCo2L5J+gKYzq35uVu7WhYpQLTnulPTGIiW09euGWdkbHxfOa/gZETF1iVyKwtB/hg7lpmbi5aeUTTfB6O9vZ0a1wXEXhp1jISk28/oFEpJ0fGj+yNRSk2HjtLqkUxaVRfSjnfRX1P7O2NBJBffJEeJh4RAb/9Bq1bGx1Uv/3W6KyaR85cvW71eaz4vxFMHtmPc6HhjJqysPgqkZx42ovrVFBRWH8HnFPN3/xJ+b0+Tvm9Pk6NnbJYJSYn337HXDJnywHV+LVxat62Q0oppZKSU9Sr05appq//oM5fDb/lvglJyWr63/tUSmqqtSwmIVHN2rpfWSwWpWJjlVqzRqk331TqkFG/+usvpTw8lOrZU6nvv1fq4EEjkiUX3IiLV69NW6aCwiKtZdejYtWr05apa5HRuaort8QmJKkRE+Zb70vb9yaofwIvq+vRscY5Z+B6dGyO6jx0PkS1eXe86vH5VPXNks3K7zGrDbAAACAASURBVLVx6rXpy4pUdFNqqkUNGj9XNX33J7U54KxSSqlFe46qRm+PUy/PWpajOlYdOqEavTHOOv21P6AgRS4+REQoNXmyUm3bGpFcL75olFssSuXyGdh/Pkg9+t10df5a+n9328kL6rHvZ6iQiKj8lPqOIYdRWNqJnkdemraUzccMP8Cmj8dQ2s2FE0GhNPatZN0mMTmFs1fCuKdaxTwdIyklhddnLOfvgPO83acz+84GseGfM7zdpzNDOuYhgig6GiZMMMav2LbNcCY6OcGvvxqpy5OTje3+Jf1HckoqU9btYXiXVpRyNraJT0pmxoZ9jOp6L04ODpwKuc7ICfNxd3Zm6ov9cXF05JmJ/gSH3WDSc/1oUatgB6k6dzWM3t/MAmBYxxa81bvTHdd5+MJlhv48D4Am1Ssx46UnbvK12Jo1R07h4uiQyeexZP8xqnh50rr2rcd2SfN5NPWtzLhhPXnr91XsOxfEl08+TM8WDQta9OLDiROGw93X14g2HDwYRo2C0aONDow5ICXVcpOlIrsyW6M7ElJwCiTNbGVvJ6RaFA19KtC6VlXm/X2Y70f2pJNfLRKTU3h1yjIOngvm+e5tGf5g+r24HhXL9uMX6H1fo9seKyklhZenLmPHSSPnU66UR3CwoSxcXWHgQCOledmyRg6hrl2NqUOHHEed7Dl9iWcnLqRFbR/+N7oPIvDyb0vZdyaISc/34756hu044NJVxvx/e+cdFsXVxeH3Uixg77EbSxS7MdbE2FuMhWjsGmPsvcQejVFjL7FhrJFPY+8llqiJvQU7NmwIgtKRDrv3+2OWBWwgsCzgfZ/Hh527MztnHNjf3HPOPWfFDiIidQghkFKytE9bapQ2bZOqaLfVc/8grK0sCY+MYmaX5rSsVjb+g9+B479OzN2jBT0/ypkVx8EdKZAza3KYbHaklAxbvw//kFCj2yokIpLBa/eQKYMVy3q1Sd9xkMRy8SJMngxHjmjpwm3aaOV2GjRIF5USlIBgGgHZdu46v2w/xpd2JVjQsxUX7j9l2Lp9lMiXEyspeODhy6weLdhx7gbn7j6hfoWSnLj+gP7NazGgZW28A4Pps2Q7Hn4v2fvTd+TL/u6V0JFROoav28ep248AmPhNQzrWrfz2A06ehH37tLz3m1ojI5o21YrSAQQEQBLaa/713x0mbDiEXZH8WAjBTVdPpnVtRqvqcZ9Uz9x5zIDfdwHwS6emtE2AWCaFFwFB9Fi6hcCQcFb2s+fj/LkZtGY3Tg/dmdO9Jc0qJy6LJVo8mlQqRbd61Ri0ejc5bTOzdmCHdCMiEVFRROn0cWIeIRGRWApBxne0CUhpfF+GcPXhMxpWjimi6On3knvuXtSr8Hq2WZROz0NPH8oUikkjj4iMwtXbn1LJtRbqwQNtBr92rSYcT59qiSQybfeZT6iAmG3eJIQoIoQ4IYRwFkLcEkIMM4znEkIcFULcN/zMaRgXQojFQggXIcR1IUTKru03UCJfLlpU+YQFPVuRwcqKL8qV4LdeX1OucD5WDPiG4vlyMmrdfs7eecKUTk2Y/30rWte0Y8Wh80zfcow+S7bzzC+Qpf3aJkg8xvzvIKduP2JEqy+oZ1eCGTuOs+XMtZidHj6M6V0N2qK9xYu1fhdz5mgFCQ8dink/ib2ZW3xalp86NuamqyfXn3gwsUPD18TD52UI8/acNG6vOHwed9/4M56SQg7bTFQuVpCV/eypULQANhmtWda7LY0rlaJk/lyJ+kz/4FBW/32RJpVKMbt7S6p9XIgVfe3xCw5l67nryXwF5iODldVrAXObDNYpKh53nr7A8VjcxISrD5+x9VTM7/qKv84zas0+9l1wBjTx6LN4G5M3HCY47PUMSIeD5+gxfzOX7j0FNPH4ce0Bvlu4Fb+gZApalyyp/Z25uWkPaZkygU4HNWvC+PGaFyAdY7YZiBDiI+AjKaWTECIr8B/QFvgO8JVSzhJCjANySinHCiFaojWzagnUBH6TUtZ81zmSMgMJCA7DycWdBpVjUiO9AoK46+bF5+XfXMs/PDKK3ku2ceOJlqmxuE8bvqzwMTq9niG/7+HM7ccArBnSgeql428nu/HkFWbv/sfotoqIimLMql2EHTvO7NyQ/d8TWoc90H6BCxXSnoBy5TLZYqjQiEiGrtrDxfvaH2X1UoVZ0qetMSbi8zLEGPNY2qctWTJloO+KHcaYSKFcaWvtxVNvfwrkzBon5vH4hR9F8+RIU5WPUzuzt51g079XGdSqDn2a1+Tqw2cMXLaTfDmysHlsNzJlsCI0IpLhK/dy8Z4rg76qy57zN/ELCsVhkD0Vi79e5tz3ZQh9lmzH3TuABX2+ZsvJa/x78yETvm3It1+8YxafVHx9tY6Lu3Zp7q1OneDHH7VqDGmEVD8DkVJ6SEM1XynlS+A2UAhoA6w37LYeTVQwjDsakgTOAzkMImQSVhw4x6iVe9lveNrxCgii36IdTFz3Fy9Dw1/bPzrmcdPVk9Ftv6R8kfyMWruff28+xC8oFHefmCfwS4Yv3/joWLcyy/q0pevHecHfnwxWVsyzDmDFjhVkX79O66C3aJEmItFBvCJFTC4el13cmNGtObO6t8DpgTtDVu0mJFwLwAeGhhEeGWWMedgVyc/K/t8gBMn31JeCFMmT47WAefF8OZV4JDOjv/mSVjXKsWz/WQY77Gbgsp3kzZ6FlUPakymDNhPKnMGaRX1bUyxvTpbuP8NT74C3igdArqw2rBrSnnw5sjBw+a6UEQ/QHuC2bwcXFxg8WBOSypW1RYsm5plPYILGkotU4eAUQhQHqgIXgPxSSg/DW55AdApTISD2N6+bYcwj1hhCiL5AX4CiReNfSPU2hrb9nEeevkx2PIxPYAh7zt7C0/8lywa1I2vmjK/tv/LwBc7d1dxW7WpVoE1NO/ov38mPf+ynQPasPA8IYtXg9uy75MyKQ+cBGNCy9ptPrtPBxYtYHTjAF/v3a26o5cthwACs2rbVSoY0aAA2Nom+vsRw++lzrj1+9lrMY8rmIzg/fU71UoUpkS8Xe8b3jPOla1ckP3snfJfqMpcUr+P6wp+g0HDsisVkDrq4eyMElCxoghpqBiwtLJjarSnXHnlw+pYW71s1VPvyj01AcBjBsRbsPn7uF0dAIqN03Hfzwq64lg2ZJVOGOH+vJRLpzkwUJUpoLuXJk7VFuZ9/ro07OmoVglu1StbqwJfvPWXg4p1M6NyItnW1Xn+7z97k1z+PsXRwO2qUTfz34dswexBdCJEF+BeYIaXcKYTwl1LmiPW+n5QypxBiPzBLSnnaMH4MGCulfKuPKqlB9NCISLrP3sQDDx8A1o78lqql3pyuFxIeyaX7T/kyVjAvMCSM+btPcsjpLsv6taN66cLo9Hp+3nSUE9cfsHNCj5g4SHTQLThY6wX94oW2uKluXa0+T/v2KdYj+l14BQSR95XYzZvGFGkPKSV9Fmzjvrs3DsPssStWABd3b/ot2k7+HFnZOKGLSTOyrj58Rv+lOwiL0BY/RruzoomOefgFhbKwb2tWH77IxXuu/NK1GV/X1Pp5LNx+kq3/XGXBwDZ8WroQI1fv47TzYzIKSwrmy4aH70uW9G/LZ2VMmxH4VqSEWrW0LK6KFWHSJPjmG+1vPYmER0YxcsVezjk/YXK3JiBg2oaj1CxbjAX9WxtncgkhTWRhCSGsgf3AYSnlAsPYXaC+lNLD4KL6R0r5iRDid8PrTa/u97bPT6qAeAUE0XPuFjx8tSngtJ7NaFXTLp6j4iKlxNXLn2L5Yurd6PR63H0CKRrsr2VM7dunuZ12aVlL/PST1pK1eXOtj7cizbD24EWqlipI1TJajEtKyYq956hfpSTliiVuPVBK8swnkH4LtxEYEs7oDl+yaOcprCwsWDWyA0XzJ+/vYpROj9/LEPLmyGKMeeTJZsuc71uy4cQV9l+8HUdEZm8/wb4Lzka3VXRMxOWZN3sn98I2Uwb8gkIZsHAHT577UqdyCY5dd0HoYFqPZtQpX1zLgPQN5MDPvcmZJXM8FpqIqCitwsOMGdraknLltMZYDRsm+aNjiwhArXLvLx6QBmIgQnuUWQPcjhYPA3uBnobXPYE9scZ7GLKxagEB7xKPpBId8/APDsVhiD01yxZlsuNhY0wkoQgh4ogHgOWaNRRt/KU2xR06VOu2VyFWe/lp06BzZyUeaYyQsAgOnLvNkMW7uXLPDSklC7edZPX+Cxy99HoNsiid3gxWvpuCubPx+4gOvAwJZ8r6I/i9DDWJeADM2XSCnjM34+blz4nrLuTJZkvBrFmZ8PtfTOjYkFY1ynH0yn3jjGRk23qsH9nJ6LKKjomsGdYBW0MNuJxZMuMw4hvy58zK8csuiEhNPFrVsjPGRGb0aGE+8QCt/E+3blqa/ebNmhsro8HNFhwcU3suEWS0tqJ+pZjEn3qVPn5v8XgfzLn8sS7QHWgohLhq+NcSmAU0EULcBxobtgEOAg8BF2AVMNCUxq0/etkY86hVrhgL+7emxidFmb/93zcG0d9KWJjWJ6N/f+2XA8DbWxOHefPg3j3tKWTaNNNciCLFsMmUgRWjtC+vIYt30/PXTWw86kT7+pW4/9SLlXvOGfcNCYtgwNxtbP479XWFDnklJTYo7D1+39+D9l9WIiw8kr7zttOmhh2Fs2Xj0u2ndGtaDZuMGZjarSmrh8UE0a2tLCn5Ue44n5E5gzXFX4lrZMpgReaM1ghASMidLSapJFdWGxpUSp4S9ZFROv5+5cEgLDySE//dT9gHWFpqC3xv3NBc1QCjR0O1atp3RiK8Q7vP3mTWluNUK12IT0sXZs6WE+w+c/O9PyehmD0GYkqS4sKKjNLxyNOXMoVjFiGFRkTyzCfwtV/i1wgM1KrW7tmjrcEIDoYsWbR2mzVrpvlFRop34+UfRPMftZLqnxTNh+OETkz/4yj7zzrTt3VtujX7lKGLdnHjwTOm9WlJ0xpJ772dXETHPKwsLPilV3OmbzhKYEi4MSaS3Nx76kXv2VuMWXwTuzfCvl7i011DIyIZsWwPl+4+ZWT7L9l3zpknz31ZMLANte2St0T75qNOzN/0DwPt69KrVU3CwiMZsXg3V+66sXXGd4mbtW3eDBMnauu76taFmTPhiy8SdOiFO64MXLzDGPMQAqM7a/lQe2qVS/j1p3oXVmrH2soyjniA9rTzVvFwdY3pkfHwoVbJ9tw56N5d68/s7a2JB7xTPPwCQ1i56yy6WNPY574vWbP3POlZ7M3BX2ed8fYPjjO29+RNAoPD3nJE/Egp+d+RmAVxTzx9ufHAg596NaVVHTtW7j1HvUFLU6V4SCmZvfmEMeZRs2xRfh/RgWw2GZmx8ZhJfv+KF8hJVpuYLKka5ZKWKeSw5yyX7j5l6nfN6Nq4Gg4jvqFY/lyM+X0/AUm4r2+iQ6MqtKhdjuU7z+Cw8wwjFu/G6Y4bk3s3S7zLr1MnzSPh4KB9j9Srp2VyJYBqpQsxuE1dY8wjo7UVC/q3ZkjbunxaJv51Z4lBzUASi5Ra45ldu7Ty5k5O8P33sGaN9p6TE1St+t5perv+uc7MP/6mZV07furdFG//YAbO3oZvYAgbpnajUL4c8X+IIl68/YP5ZuxaCuTOyrIxHciTw5Z1+y7gsOMMfdrWpk/bt6RYv4PomMfGo050bFiFXi0+o//8HTz3e8mSoW0pXTgv9YcsA+DjgrnZOq1nPJ+Y8ngHBBMSHknRWL9nz3wCEQI+ypXtHUe+PxGRUfzosJ/TNx7RoX5ljly6S6aM1qwc3Z7CeRP3ex4UGo7TfXfqVYrJWPQLCuWO64tkn4GAlhAzweEAxw1uq6l9mlOnYgk2HrxMP/s6WFlp2VXe/kFsP3aNPu1qJ7ypW0gI/PabFg8tXhwePdLq2hVI/pngq6gZiKlp1EhLw5s8WQuAzZ6tlS4AbYbx6aeJyvFuV78S/ezrcPCMM0Pn7aTfzK34BoaweJS92cTjvqtXgsaSEykl/ztwiYCXMYsPdXo96/ddJDg06Y278uSwZeHIdnh4BzJozjbmbzyBw44zNK9dlu9bv7PAwVsJDY/k8l03Ojaswo+d6pM3RxZjTOS8syvDF+8GIGMGKx4+84kTE0kt5MluG0c8QAusJ7d4AMzaeJzTNx4xsXsjxnVtyIpR7QkLj2Tggh0J6mPyJrJkzhhHPEALrJtCPAAiI3X4x1og+9znJeeuPWL9gUtMdDhAVJQOb/8g+s/cxqbDTrh6+iX8w21stO+U4sW17SFDtEKo06Zp4pIKUDOQ+IiMhH/+gZ07tdztS5c0YVixQhOK1q21hX3JzKz1f7PzhFZvafXETlQqXTDZz5EQzt94zLA5OxnauR5dW2oPJP/bf4mlW06xdFx7Piuf/IuTAB66+9Dzpw0UL5iLpWPbk8U2IzNWHeHAaWcm9WnK1/UqxP8hCcDprhv9Z24FoEb5ovw2yj5JbX+DwyKwyWgdZ72Eb2AIY5bv5cYDD6b1aUmj6qWZtu4I+886M6BdXXq3SpxgpXUee/py86EnrerEpMbfe+rFY09fmn6Welx7byM65uF0x43J3zfjgvMT/jp3m4H2dclkbc3CP/+hYqmP8A0IwTcwhN9G21OlTBLaGbi4aF0Sd+7UKk7MmaMF4U0QT1U90ZPKlSua73HfPvD319ZptGihvc6VS8uqMhHPfV9yyTmmE+HOf65TvmSBFOu5HpvqdkVpXLMMizdpxRH1esnSLadoWvsTqpY1jV8V4ONCuZk7vA0/LtrDwJnbKJA7G6evPqSPfe1kEw+Aa/diit15+rzELzCUPDkSXgomSqdn2u+HqFO5BM3qlsM2UwYiIqOYvOwgX9UrzxfVSpIza2bsihfg24ZVjTGPn3o1xdrakk+K5o3nDOmX4gVyUbxA3AyqMkXyUqZI2vg/2Xv6Jk533JjyQzNa1rajeW2tbcDKPefYMr0n3v5B/O+g9gC7fFz7pIkHaLOPHTu0XiTDhmmuLR8frYy8mVAzkLdx6JDWMKZ1a2jXTiuJntn0uePPfV8aYx6LR9lz0dmV33eeNcZEzCEiUTo9UxwO8vcFLWWxae1PmNKvRYo0wTl77REj5mkLLDs2q8rIbg2S7bOjYx7Na5eldb0KjFy4m4/yZDPGRBJCWHgkI+bu5Nodd6YMaEGDGqUZv2gfZ64+ZOz3jWnXyMR1lxRmQ0rJrYeeVCgZ44HQ6fXcefKC/Dmz0H/mNqPLqkH1UswY8JUxJpJkdDqtPMo330DWrFoqcMGCkDueDNEEomIgSaVxY3j+HP74Q2sWkwLiAXDplqtRPCqWKkjv1rXoZ1+HM9ce4unzMkVseBUrSwtKx3pSLlM0X4qIh06v5+/zd43bV+64xYmJJAVv/2D+d/AyzWuXZUqf5lQvV5RFo+zx8A5k78mE581nymjNgtH2VC5biCnLD1Lvu984c/UhY3op8UjvCCHiiAdoNb2ixcPLL4iVEzsyokt9Tlx2McZEkgVLS62LaNasWtJOly5QpozWmyQJCxHfFzUDSYX4BoaQK5tNvGMpRXTMo1GNMuil5MSl+3FiIqZAp9cbYx597GtToeRH/LhojzEmkj1r0gXd1dOPQvmyx5nVPfHwpWiBnO9d8ykgKJRm/ZYDULVsYRx+6phk+xRpk6MX7vLr2qMsHNXO6LbadNiJNXvOsWZyF4oVMEGFiZs3tSD7P/9AjRpajLZqItpeG1AzkDTMm4TCXOJx7vojY8zjl4EtmT7oK2NM5MKNJyY771NPf45fuk8f+9r80K42tSoVZ+7wNjx55su564+T5RxFC+R8zSVY7KNc7y0eEZFR/OIQ07Tr2l13Dp+5nSw2KtIeTWp+wq55vePEPDo3q8b22d8nSTzuPXrx9rEKFeD4cc2t9fgxVK8O11Og6ZmUMt3++/TTT6Uiaeh0ernnxHUZGaUzjkVG6eSeE9dlSEj4a/uHhUUk27k9vQMTNGZOwiMi5cg5O2XNLvPkjqNXZUhohOw/bbOs3XW+PHTa2dzmKdIJpy65yDrfzJVb9/9nHFuz5Yys236uvHLLNe7Ofn5SLlsmpV6f6PMBl2UCvmPVDETxTiwsBK3rV4wT87CytKBcsfx0GryGi1cfG8ev3nrKtwNXc+te8tS4zJ/79Z7jbxozOwLG9GqMfePKZM6kxUSq2ZmpXLgiXVKrSnG+rFmaReuOs+2AE2u3nmXN1rO0rF+BSq9mQ+bIAQMHpki5JBUDUSQK/8AQhk/dhuszP2aNbUsGa0tGz9hBgbzZ+O3njuTOaZquiKkRKeVrbq83jSkUSSEqSsfkhfv594K26v2rBhUYN6CZSbpjqhiIwqTkyGbDoikdKFowJyOnbWfw5C0fpHgAbxQKJR6K5MbKypLihWPSdEsWy2v21spKQBSJJkc2G3p1iKkZ1a1dzSSLx5tmxOl5lqxQJJS1W8+yfsd5mtWzo16NUiz+4wTbDpi3HYASEEWiuXrrKdMWHyRndhty5bBhzu9H48RE3peAwFCGjd/MzTsxq8O9fYIYPPZPXN6QgaJQfCicuujCmq1n+apBBSYNbsG0kV8bYyJXbj01m11KQBSJwvm+hzHm8cf8njgu/I6iBXMybvZurjm7JeozIyKj8PYN4sfJ27l5xx1vnyCGT9zMg8dehCZDAUWFIq1S59OPmTCwmTHmYWVlyS8jWjFhUHOq2JmupFB8mLsn+lqgFfBCSlnBMJYL2AIUBx4D30op/QwtcH8DWgIhwHdSynfO31QQ3XQEh4SzaM1x+nerZ3Rb+QeGsGz9vwzp1YBsWTIl6nNfeL9k+ITNuHv4A5A5szVzprSnUnnz/ZEoFB8aaSWI/gfQ/JWxccAxKWVp4JhhG6AFUNrwry/gkEI2pitCQsJZsfoE4YYOcKC5jn5f+w+RkQkvs2Brk5GJQ1rEiXnkyGbDxCEtEi0eAPnyZOWn0a2M2991qqPEQ6FIpZhVQKSUJwHfV4bbAOsNr9cDbWONOxrWuZwHcgghkr+OejLxpi/j9/mCNhVXrz9ly46LTPh5B+HhkQQEhjJq/Ga277rMg4fmjzN4+wQxY8EB4/b6zefixEQUCkXqwdwzkDeRX0oZvRLNE8hveF0IiB0tcjOMxUEI0VcIcVkIcdnLy7RNj97G38ed6d1vLV7eMcUPd+11ov+Q9QQGJk8xwMRSp1YpxoxoidPVJwwZtZHBIzfwxNWH6VPsKfuJefU4Oubh7RvEklmd2bauPzlz2BhjIgqFInWRGgXEiGFJ/XsFaaSUK6WU1aWU1fPmNU9fgQL5s+HjG8SI0Zvw8n7Jrr1OLF56lAL5spM5cwaz2BSbFk0rMuCHBtxzec5TN18mj2tNzeofx3+gibGysiB7tszGmEe+PFlZ9GsnihXJTQbrD6t1jZ9fMGFhkXHGvL1fpopZbGohJCTc+DoyUoeU8rUxhWlJjQLyPNo1ZfgZ7VdxB2LXhyhsGEt1VChfmNkzOuDnH8y3XZazeOlR6tQqxc8/tcXaOpn6ASSBgMBQjhy/Zdzevd8pTkzEXOTIbsPS2V3ixDzy5cmKw7yulCmZ/x1Hpi+ionSM/nEzEydtN4qI5/MAhg3fwLz5B81sXepgy+bz9O+3Di+vl+zbd4UB/dex+LcjDB36P4KDw9n05zmGD/tfHEFRJD+pUUD2Aj0Nr3sCe2KN9xAatYCAWK6uVEeF8oWpU6uUcXvwgEapRjxGjd/ME1cfZk/vwNiRmjsrOiZibtSqbm3FcceONbl69QkTJ23H1dWHUaP+JDAwjHZtTVdCPy1RoUJh/PyCGTVyI7a2GXF19WbvXifKlCnAnj3/sXr1PxQsmJOMGa3NbWq6xtxpvJuA+kAe4DkwBdgNbAWKAk/Q0nh9DWm8S9GytkKAXlLKd+bomjONN9ptlT17ZkJCIsiXNxsL53Umbx7zFgO8ePkhU2bs4eeJbYxuq7+O3GDpir9ZNKcLpUt9OE/6qZ0jR28ya9Z+QHPvLf6tO2XLptq8kRTn1k03xo7dYlwjZGEh0Ou177OGDe0YN/5rLFOg8Vl6JKFpvKqYognYf/Aq8xcdNrqt7t7zYOzEbeTMYcvSRd3IkcM8vT2i8Q8IIUd2m3jHFObF83kAXbpo2eq2thnZtnUwmTKpJ+popJQMH7aBmze1hasVKxbmxg3t9dZtQ8idO4s5zXsnUkpu3nCjYqUYr7xeL3G+5UaFiuav5JxW1oGkS8p+UpBmTSoYYx7RMZFqVYuRNWvi10gkF28SCiUeqQvP5wGMGvUntrYZadfuU0JCwuPERD50pJSs/P0EN2+6UapUfqysLLlxw43s2TNjZWXB2DGb8fcPMbeZb+XvIzcZMdiRndsuApp4/Db/L0YMduTe3VTrmX8NJSAmoFTJfIz78as4MY8K5QszclgzNaVWxEtUlI4xY7YQGBjG3DmdGDK4CWPHtuLq1SfMnauC6AD/czzN1q0XaN2mGo0blycqSoelpQW2thmZPKUd7u5+jB71J0FBYeY29Y00aGTH5198wvIlR9mx9SK/zf+LA/uu0KlrHUqXKWBu8xLMh5UbmU6JiIgiQwareMcUaQMrK0v69a1P7txZjTGPpk0qYGlpQfHieV7rNaLXS7OX9U5OXO56cPnCQzp2r2O8zlvXn3Lvjgftvq0BQN3PyxARoaP3D19y+/YzvmpVhcaNynP1mit16pRmxq8dOHf2PjY2Gc15KW/FysqSSVPbMW3KThyWHgWgc7c6fN+nfppKGlGPw2kcp4sP6dVhKY8exKwiP3X8Nr07LsfjmZ8ZLVMkhbp1y7wWMG9Qvxy7/zzPuhXHjSXuo6J0/PrTDjY7njaHmSbh2OGbrHU4juOqf5FScuv6UyaM+JN9Oy4ZA+YlS+bnB8OXrZ1dIUaObEGlykXp0eNzhBBUq1acQYObpGphtbCwIEssl3bOnLZpSjxAzUDSPPkKZEevl4wZ5MicZT1wNNc9WAAAFaRJREFUe+LDjJ+2U9auENlUXCPdYWVtyeb1ZwDo0ac+s6bs4uQxZ8qWf60oQ5qlz+DGBAeFsXHdKZxvuHHH2Z1cubMwd2mPVLEQNzmIjnkcPnidDp1q4eHux/Il2kzEvkMNM1uXcFQWVgqj1+uxsLCId+x9cHP14cdBjvh4aaVT7CoWZsairtjaps7puyLx6PWSJXMPcmDXf8axvkOb0L5L7XcclTy86jqL/u4wxVOzXi/p23UFro+9Adi0dzi585o3BT45OXLoOnN+3UfnbnVo3aYaKxYcIkwvuXDhActXfU8W24z8sewYwye1xsYMf8cqCysVcvmsC8N6rsLfL9g4duqYM6N/WEfwy8QH+woXzU3r9p8Zt/sMaZKi4hEWGsGyOQcIiHVdwUFhLJ19IEnXpXgdCwvBwJExBaytM1jyTedaJj/vNsfTLJq2F71eD2ji4ehwnJULD5ukY+Ttm268eB5g3N6/67901ZmyUZMKTP7Fnu/71MftiQ8XTt3Dz92fseNbkcU2I2P6/YHTxYd4xfo/SI0oAUlBLK0sePLAi7H9/sDfL5hTx5z5dfw2JBKRBF/tqeO3Wb/yBNlz2GBjk4Gfx2yJExMxNY8fvODQbifGDlhPgF8wwUFhTByygYM7LnPv9rMUs+NDICpKx+yfdxm3IyN0cWIipiIkOIJDe5z4bfo+9Ho9jg7H+XPNSUKCw5P93NExj9x5srJxzzCaf12FjetOGWMi6QFLSwvq1S+HEIKqNT5myrxOuD72wmH2QQZ0diAsLJLZDj0p9nE+c5v6TpQLK4W5cvEhU4b/aSwbYle5CL8s7Mr928+oVqukcb+I8EhuX3tK5RrvLnJ4/vQ9fh67hbJ2hZixqCt+PkH8OMiRqEgdC1f2onDR3Ca9nmicLjxgyog/yZUnK5aWFni6+zFx1rfUbVguRc7/IaDT6Zk5eScnjznTd2gT7DvVMrqzOvf8nF4DGprs3FJKHFec4M/V/xrHmretxrCJXyfJ/fom1q04zsnjt5m3rAe582ZFr5csmrWfe3c8WPj7d+kmDvIqe7deZNkcLU179oqeVKlewmy2KBdWKqVqjY9p8nUV4/aYX+w5tOs/JvT7g792amIXER7JtFGbmTBgPZ5u786k+rhUfr5sVN4Y8yhcNDdzl/XgszqlyJsvm0mvJTbVapZk7PRv8HT3w93Vh8HjvlLikcxYWAgKfJTDGPOwsBAM+bElreyrU6BQTpOeWwhBj/4N4owNHd8q2cUD4Lt+DViyprcx5mFhIRg+rhXzl6efIPqrPHPzZev6mEy6VQsPExiQehdCRqNmIClMtNtKr9N8ycVL5mPa4m4s/mUPl8/cZ+D4Vlw6fY9Lp+4x9KfWtIwV20jNRLutbl/XWraUKJ2f2Q49yR6rY6Ei7RId8/hzzUnjWPM21Rg2KflnIB8az9x8GdPvD6Pbytf7JVNHb6ZYibzMXN7DLNmUagaSCjl9XBOPshUKsevkBGY59MTDzY+fhm5g2OQ2VP6sBMtn7k+z4nHvljuT53Zi5vIeuLv6GGMiirRPtHg0b1uNvy5NocsPX8aJiSgSj593EBYWgtkOPSlZpgCf1SnNlHmdCAoK46WZG9DFh1oHkoLkzpuVT2uVZMLMDtjYZqRqjY+ZuqgLezZfIFPmDHHSIZMSVE9pnj31xe2Jd5yYx9SFXZgxbhuuj7yoqGYhaR6bLJnixDyi3VnhYZFpbvFbaqN8laKs2TkE61hN0z6rU5rV2wfHGUuNKBdWKiA65nHp1D36j2nJ5TP3uXzmPsOmtKGFfdro/xAcFIZtlkzxjqV2dFE6fvtpJw2+rkLVOqUBrSzMwvHbaN2tDuWqFjOzheYjJdeBKMyLcmGlIfZsumB0W7XtWpvJCztTvW5pls7YF28QPbXwJqFIa+IBEBIczv2b7vzcfz1Xzt4nIiKKGUM38M/+azxxeW5u88zKq0IhhFDi8YGjZiCpgKhIHdcuPeLTOjEdDCPCI3G++pQqNc3fq/xDI8A3mHE9V+Hq8hwra0siwqMY/HNbvkqBBXsKRWpAzUDSEFbWlnHEAyBDRmslHmYiey5bpq3uhV4viQiP4vNmFZV4KBRvIM0JiBCiuRDirhDCRQgxztz2pBf8fYKYPXwDAb5BxjFvT3/mDN/wwZUjiYiIYsmUmNXeF/+5zZWz981okSK18NzNlyWTthMRHmUcc3vwAoefd6KL0pnRMvOQpgRECGEJLANaAHZAZyGEnXmtSh88dXnO2UPXGd/VgQDfILw9/RnbeTnnj93C44m3uc1LMaJjHhdP3GHwz23ZfO4nChbLY4yJKFIWKSXBr6Sy6vV6sz3U3Lz4kIMbzzJj4B9EhEfh9uAFYzov4+T+q3h7pu66VaYgTQkIUANwkVI+lFJGAJuBNma2KV1QsWZJpqzqjfsjL/o2ns2A5nPx837JjPX9KFWhsLnNSzEiI6J46R9ijHlkz2XLrPV9KFIyHwG+ak1LSrNhwSGGfb0Ab09/QBOPZZO282P7xYQGh6e4PY3sqzN4ensuHndmYPO5jGy/GKmXzNo0kPyFc6W4PeYmrQlIIeBprG03w5gRIURfIcRlIcRlLy+v9/rwK6fvsmDkxjhT0XOHr7N0wtYPYrFUtS8+YfD09gT6BRMUEMrYRd0oV624uc1KUWyzZGLuhn5xYh7Zc9ny27ZB1G9V5R1HKkzBp1+WxdcrkHEdl+Hl4c+ySds5uOEsnzUoRyYb85Q1+aprHdp+Xw/3x1689A9humM/ipVOO21ok5O0JiDxIqVcKaWsLqWsnjdv3vc69vHtZxzdeoE5QxzRRek4d/g6v/Zfh8v1p4SHRprI4uTjuZsvM/quIShWDR03l+fMGriOsJD4n9a8Pf3ZvOxv4/b6eQfjxEQ+FCytLBM0pjA9dtVLMN2xPz7PA+hR82cObjjLtwMb8d3YVmZLIXZ78IJ/910xbjvO/ytOTORDIq0JiDtQJNZ2YcNYstCuTwN6T2zDyX1XsP9kDNN+WEPJ8oWZvnEAmdNAcyY3l+ecP3KDCZ2XERQQgpvLc8Z+u5hrZ+7j7fFu/2x0zMPP+yULdgxlhmM/3B95GWMiCoW5KFutGAWL5zFuf/3dF2YVjzGdlyH1khVHxhjdWdExkQ+NtCYgl4DSQogSQogMQCdgb3KeoP2ARpSv8TER4ZFIKfnlf/3JkkZaw35avxyTVv3AI2d3etacwuBms9HrJLO2DqFwyXf3FfD2CCA8LJIZ6/tRrlpxqn3xCVNW9eZlQCh+hk6HCkVKEx3zeOj8jAo1S5I5S0bGdVxmjImkNI/uPEMIwaxNAylWugBfda3D4OnteXzX44N80EpzCwmFEC2BRYAlsFZKOeNt+yZmIWG02yoqUouD1Pu6KmOW9EhTLowdK46xetpuAObtHkH5zxK2niQiPJIMGa3jHVMoUoo1v+5l+4rjRrfV7f8eM6nHCnLlzcaSg6PN4hkICwknk03GeMfSMgldSJi6K3W9ASnlQeCgKT47Wjyi3VaH/jzHmhl7ANKMiLi5PGfnyuPG7d+n7ODXTYMSNIt6k1Ao8VCYk/ptqmGTJROdhjRBCGGMidy58thsbuU3CUV6Eo/3Ia25sEyKv3cQJSto4pEluw3tBzSi98Q2BPgEERmZ+hcJRcc89DrJiuMT+PmPfjxydjfGRBSKtEbJ8oXpPLRpnJiHXfUS2Pdp8I6j0gc6nZ6jm87EyQCNjIji781nU01rXyUgsWjRtQ7zdw2P87TefkAjZvw5kExpoBOar1cg1hmsmLV1CMU++YiaTSowadUPBAeEKgFRKNIYZ/c7MX/gOpaM3IBerycyIoqZvX9n3oC13DrvYm7zgDQYA3kf0koxxeQkMiIK6wxW8Y4pFIrUjZSS9dN3sXnBQZp0qUOQfwjnDl6l/6xOtO3X2KTnTrcxEMW7eZNQKPFI2wT6BpExcwYyxpoF+3sFkiWHDVapvOGQIvEIIeg5qR2RETp2LD0MQL9fO5pcPN4H5cJSKFIxuigd47+ew9SOiwgPjQDAx8OfUU1nsHDgGjNbpzA1UZE6PB6/MG673vVIVVUxlIAoFKkYSytL2vRvgtPxW0ztuAjPx16MaTkTn2d+tOhV39zmKUxIdMzj7P4r9J/ViU4jW/LX+pPGmEhqQM1/FYpUTtPuXwAwv/8qepYfhYWlBXMPjadCnU/MbJnClFw8ct0oHm37NTZmXm1Z+BeNO9WmfK3SZrZQBdEVijSBj4c/XUoNBSCTbUa2PlkWJyaiSJ/cv/aE0pWLGbellLhcd40zZgpUR0KFIp3g4+HPmJYzyZwlE82/+5LwkIg4MRFF+uVVoRBCULJiEY46/hvHjaWL0nHU8d8UXx+iBEShSMXoonRMaD0Hn2d+TN81ihHLejPS4Qecjt9ifv9V5jZPYQYuHHBizndLWfDDCvR6PbooHbO6L2bOd0u5euJmitqiYiAKRSrG0sqS7pPakSNvNmPMo2n3L7C0sqBo2ULxHK1Ij9T+ujo9pnyL49St6HQ6IsIiObntHH3ndKdqw4opaosSEIUilfN5m89eG2vUua4ZLFGkFrpP6YBOp2Pj9B0A/DCrGx1Gt05xO5QLS6FQKNIYuigd7vc9jNtP77ibJbVXzUAUCoUiDREd8/hny1n6zulOWHA4jlO3AjBydX8sLFJuXqAERKFQKNIQlw9fNYpHbLeV49StNO5ejyoNKqSYLWodiEKhUKQx7js9pHS1j+MdSyxqHYhCoVCkU94kFMklHu+DWQRECNFBCHFLCKEXQlR/5b3xQggXIcRdIUSzWOPNDWMuQohxKW+1QqFQKGJjrhnITcAeOBl7UAhhB3QCygPNgeVCCEshhCWwDGgB2AGdDfsqFAqFwkyYJYgupbwNxGlTaaANsFlKGQ48EkK4ADUM77lIKR8ajtts2Nc5ZSxWKBQKxaukthhIIeBprG03w9jbxl9DCNFXCHFZCHHZy8vLZIYqFArFh47JZiBCiL+BAm94a6KUco+pziulXAmsBC0Ly1TnUSgUig8dkwmIlDIxfRfdgSKxtgsbxnjH+Fv577//vIUQT97ThjyA93sek5ZR15u++dCuFz68azbF9SaoXnxqW0i4F/hTCLEAKAiUBi4CAigthCiBJhydgC7xfZiUMu/7GiCEuJyQ/Of0grre9M2Hdr3w4V2zOa/XLAIihGgHLAHyAgeEEFellM2klLeEEFvRguNRwCAppc5wzGDgMGAJrJVS3jKH7QqFQqHQMFcW1i5g11vemwHMeMP4QeCgiU1TKBQKRQJJbVlYqYGV5jYghVHXm7750K4XPrxrNtv1putaWAqFQqEwHWoGolAoFIpEoQREoVAoFIlCCYiB9F6sUQhRRAhxQgjhbChkOcwwnksIcVQIcd/wM6e5bU1ODLXUrggh9hu2SwghLhju8xYhRAZz25icCCFyCCG2CyHuCCFuCyFqp+d7LIQYYfh9vimE2CSEyJTe7rEQYq0Q4oUQ4massTfeU6Gx2HDt14UQ1UxpmxIQtC8Z0n+xxihglJTSDqgFDDJc4zjgmJSyNHDMsJ2eGAbcjrU9G1gopSwF+AG9zWKV6fgNOCSlLAtURrv2dHmPhRCFgKFAdSllBbQU/06kv3v8B1px2di87Z62QFs/VxroCziY0jAlIBo1MBRrlFJGANHFGtMNUkoPKaWT4fVLtC+WQmjXud6w23qgrXksTH6EEIWBr4DVhm0BNAS2G3ZJb9ebHagHrAGQUkZIKf1Jx/cYbSlCZiGEFWADeJDO7rGU8iTg+8rw2+5pG8BRapwHcgghPjKVbUpANBJcrDE9IIQoDlQFLgD5pZQehrc8gfxmMssULALGAHrDdm7AX0oZZdhOb/e5BOAFrDO47VYLIWxJp/dYSukOzANc0YQjAPiP9H2Po3nbPU3R7zIlIB8YQogswA5guJQyMPZ7UsvpThd53UKIVsALKeV/5rYlBbECqgEOUsqqQDCvuKvS2T3OifbEXQKt9JEtr7t60j3mvKdKQDTeVcQx3SCEsEYTj41Syp2G4efRU1zDzxfmsi+ZqQu0FkI8RnNJNkSLD+QwuDsg/d1nN8BNSnnBsL0dTVDS6z1uDDySUnpJKSOBnWj3PT3f42jedk9T9LtMCYjGJQzFGg0ZG53QCjumGwz+/zXAbSnlglhv7QV6Gl73BExWaj8lkVKOl1IWllIWR7ufx6WUXYETQHvDbunmegGklJ7AUyHEJ4ahRmh15dLlPUZzXdUSQtgYfr+jrzfd3uNYvO2e7gV6GLKxagEBsVxdyY5aiW5ACNESzWceXazxtXpcaRkhxOfAKeAGMTGBCWhxkK1AUeAJ8K2U8tWAXZpGCFEfGC2lbCWE+BhtRpILuAJ0M3TATBcIIaqgJQ1kAB4CvdAeFNPlPRZCTAU6omUZXgF+QPP5p5t7LITYBNRHK9v+HJgC7OYN99QgpEvRXHkhQC8p5WWT2aYERKFQKBSJQbmwFAqFQpEolIAoFAqFIlEoAVEoFApFolAColAoFIpEoQREoVAoFIlCCYhC8RaEEDohxNVY/95ZhFAI0V8I0SMZzvtYCJEnEcc1E0JMNVRq/SupdigU8WGWnugKRRohVEpZJaE7SylXmNKYBPAF2iK6L4DTZrZF8QGgZiAKxXtimCHMEULcEEJcFEKUMoz/LIQYbXg91NB75boQYrNhLJcQYrdh7LwQopJhPLcQ4oihr8VqQMQ6VzfDOa4KIX43tB541Z6OQoiraKXNFwGrgF5CiHRVTUGR+lAColC8ncyvuLA6xnovQEpZEW3V76I3HDsOqCqlrAT0N4xNBa4YxiYAjobxKcBpKWV5YBfa6mKEEOXQVlnXNcyEdEDXV08kpdyCVl35psGmG4Zzt07KxSsU8aFcWArF23mXC2tTrJ8L3/D+dWCjEGI3WtkJgM+BbwCklMcNM49saD087A3jB4QQfob9GwGfApe0ChVk5u2FEMuglS4BsDX0fFEoTIoSEIUicci3vI7mKzRh+BqYKISomIhzCGC9lHL8O3cS4jJanSQrIYQz8JHBpTVESnkqEedVKBKEcmEpFImjY6yf52K/IYSwAIpIKU8AY4HsQBa0YpZdDfvUB7wNPVlOAl0M4y2A6J7lx4D2Qoh8hvdyCSGKvWqIlLI6cACtN8YcYKKUsooSD4WpUTMQheLtZDY8yUdzSEoZncqbUwhxHQgHOr9ynCWwwdBiVgCLpZT+QoifgbWG40KIKcc9FdgkhLgFnEUrU46U0lkIMQk4YhClSGAQWvXVV6mGFkQfCCx4w/sKRbKjqvEqFO+JoUlVdSmlt7ltUSjMiXJhKRQKhSJRqBmIQqFQKBKFmoEoFAqFIlEoAVEoFApFolAColAoFIpEoQREoVAoFIlCCYhCoVAoEsX/AT07ZZP1sXB6AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print('** Mean average score:', np.mean(scores))\n",
    "plot_performance(scores)\n",
    "plot_trials_to_solve(trials_to_solve)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save the model\n",
    "policy.save_model()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Going further\n",
    "\n",
    "## On self-driving car\n",
    "[Comma.ai's real self-driving dataset & solutions](https://github.com/commaai/research)\n",
    "[Self Racing Car challenge & dataset](http://selfracingcars.com/)\n",
    "\n",
    "## On latent-space Reinforcement Learning: World Models  \n",
    "- [Ha and Schmidhuber, \"Recurrent World Models Facilitate Policy Evolution\", 2018](https://worldmodels.github.io/)  \n",
    "- [Hardmaru blog post on World Models](http://blog.otoro.net/2018/06/09/world-models-experiments/)  \n",
    "- [PlaNet](https://planetrl.github.io/), and the paper: [Learning Latent Dynamics for Planning from Pixels, Hafner & al., 2018](https://arxiv.org/abs/1811.04551)\n",
    "\n",
    "## David Silver course\n",
    "[Reinforcement Learning course page](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html), [Videos on YouTube](https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ)\n",
    "\n",
    "## Richard Sutton & Andrew Barto book\n",
    "[Reinforcement Learning: An Introduction](http://incompleteideas.net/book/the-book.html)\n",
    "\n",
    "## OpenAI docs  \n",
    "- [Spinning Up in Deep RL](https://spinningup.openai.com/)  \n",
    "- [Requests for Research](https://openai.com/requests-for-research/) \n",
    "\n",
    "## Technical hints\n",
    "- [How to Parallelize Environments?](https://www.reddit.com/r/MachineLearning/comments/8aimei/d_what_is_the_right_way_to_parallelize_rollouts/)\n",
    "- [Hot to Create an Environment in Gym](https://stackoverflow.com/questions/45068568/is-it-possible-to-create-a-new-gym-environment-in-openai)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.10"
  },
  "nbsphinx": {
   "execute": "never"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
