Skip to content

Instantly share code, notes, and snippets.

@omad
Created August 23, 2016 03:33
Show Gist options
  • Save omad/14bc0c8a896c86c851e37e4dd0708a8e to your computer and use it in GitHub Desktop.
Save omad/14bc0c8a896c86c851e37e4dd0708a8e to your computer and use it in GitHub Desktop.
notebooks/Interactive PQ.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Interactive Datacube within Jupyter Notebooks\n\nCurrently a work in progress, there are two demos.\n1. Switch between time slices of an image interactively\n2. Click on a PQ image and have the flag values displayed in a table"
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-08-23T13:28:25.218819",
"end_time": "2016-08-23T13:28:25.230032"
},
"collapsed": true
},
"cell_type": "code",
"source": "%matplotlib notebook\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nfrom datacube import Datacube\nfrom datacube.storage.masking import mask_to_dict\n\nfrom ipywidgets import interact\nfrom IPython.display import display\nimport ipywidgets as widgets\n",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-08-23T13:28:26.179548",
"end_time": "2016-08-23T13:28:26.202016"
},
"collapsed": true
},
"cell_type": "code",
"source": "dc = Datacube(app='damien-notebook')",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-08-23T13:29:03.520444",
"end_time": "2016-08-23T13:29:04.886894"
},
"collapsed": false
},
"cell_type": "code",
"source": "pq = dc.load(product='ls5_pq_albers', x=(149.25, 149.35), y=(-35.25, -35.35), time=('1991-03-01', '1991-05-30'))\n# pq_autumn = pq.pixelquality.loc['1991-3':'1991-5']\npq_autumn = pq.pixelquality\npq_autumn.plot(col='time', col_wrap=3)",
"execution_count": 8,
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"data": {
"application/javascript": "/* Put everything inside the global mpl namespace */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function() {\n if (typeof(WebSocket) !== 'undefined') {\n return WebSocket;\n } else if (typeof(MozWebSocket) !== 'undefined') {\n return MozWebSocket;\n } else {\n alert('Your browser does not have WebSocket support.' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.');\n };\n}\n\nmpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = (this.ws.binaryType != undefined);\n\n if (!this.supports_binary) {\n var warnings = document.getElementById(\"mpl-warnings\");\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent = (\n \"This browser does not support binary websocket messages. \" +\n \"Performance may be slow.\");\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = $('<div/>');\n this._root_extra_style(this.root)\n this.root.attr('style', 'display: inline-block');\n\n $(parent_element).append(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n fig.send_message(\"send_image_mode\", {});\n fig.send_message(\"refresh\", {});\n }\n\n this.imageObj.onload = function() {\n if (fig.image_mode == 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function() {\n this.ws.close();\n }\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n}\n\nmpl.figure.prototype._init_header = function() {\n var titlebar = $(\n '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n 'ui-helper-clearfix\"/>');\n var titletext = $(\n '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n 'text-align: center; padding: 3px;\"/>');\n titlebar.append(titletext)\n this.root.append(titlebar);\n this.header = titletext[0];\n}\n\n\n\nmpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n\n}\n\n\nmpl.figure.prototype._root_extra_style = function(canvas_div) {\n\n}\n\nmpl.figure.prototype._init_canvas = function() {\n var fig = this;\n\n var canvas_div = $('<div/>');\n\n canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n\n function canvas_keyboard_event(event) {\n return fig.key_event(event, event['data']);\n }\n\n canvas_div.keydown('key_press', canvas_keyboard_event);\n canvas_div.keyup('key_release', canvas_keyboard_event);\n this.canvas_div = canvas_div\n this._canvas_extra_style(canvas_div)\n this.root.append(canvas_div);\n\n var canvas = $('<canvas/>');\n canvas.addClass('mpl-canvas');\n canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n\n this.canvas = canvas[0];\n this.context = canvas[0].getContext(\"2d\");\n\n var rubberband = $('<canvas/>');\n rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n\n var pass_mouse_events = true;\n\n canvas_div.resizable({\n start: function(event, ui) {\n pass_mouse_events = false;\n },\n resize: function(event, ui) {\n fig.request_resize(ui.size.width, ui.size.height);\n },\n stop: function(event, ui) {\n pass_mouse_events = true;\n fig.request_resize(ui.size.width, ui.size.height);\n },\n });\n\n function mouse_event_fn(event) {\n if (pass_mouse_events)\n return fig.mouse_event(event, event['data']);\n }\n\n rubberband.mousedown('button_press', mouse_event_fn);\n rubberband.mouseup('button_release', mouse_event_fn);\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband.mousemove('motion_notify', mouse_event_fn);\n\n rubberband.mouseenter('figure_enter', mouse_event_fn);\n rubberband.mouseleave('figure_leave', mouse_event_fn);\n\n canvas_div.on(\"wheel\", function (event) {\n event = event.originalEvent;\n event['data'] = 'scroll'\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n mouse_event_fn(event);\n });\n\n canvas_div.append(canvas);\n canvas_div.append(rubberband);\n\n this.rubberband = rubberband;\n this.rubberband_canvas = rubberband[0];\n this.rubberband_context = rubberband[0].getContext(\"2d\");\n this.rubberband_context.strokeStyle = \"#000000\";\n\n this._resize_canvas = function(width, height) {\n // Keep the size of the canvas, canvas container, and rubber band\n // canvas in synch.\n canvas_div.css('width', width)\n canvas_div.css('height', height)\n\n canvas.attr('width', width);\n canvas.attr('height', height);\n\n rubberband.attr('width', width);\n rubberband.attr('height', height);\n }\n\n // Set the figure to an initial 600x600px, this will subsequently be updated\n // upon first draw.\n this._resize_canvas(600, 600);\n\n // Disable right mouse context menu.\n $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n return false;\n });\n\n function set_focus () {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('<div/>')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n // put a spacer in here.\n continue;\n }\n var button = $('<button/>');\n button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n 'ui-button-icon-only');\n button.attr('role', 'button');\n button.attr('aria-disabled', 'false');\n button.click(method_name, toolbar_event);\n button.mouseover(tooltip, toolbar_mouse_event);\n\n var icon_img = $('<span/>');\n icon_img.addClass('ui-button-icon-primary ui-icon');\n icon_img.addClass(image);\n icon_img.addClass('ui-corner-all');\n\n var tooltip_span = $('<span/>');\n tooltip_span.addClass('ui-button-text');\n tooltip_span.html(tooltip);\n\n button.append(icon_img);\n button.append(tooltip_span);\n\n nav_element.append(button);\n }\n\n var fmt_picker_span = $('<span/>');\n\n var fmt_picker = $('<select/>');\n fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n fmt_picker_span.append(fmt_picker);\n nav_element.append(fmt_picker_span);\n this.format_dropdown = fmt_picker[0];\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = $(\n '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n fmt_picker.append(option)\n }\n\n // Add hover states to the ui-buttons\n $( \".ui-button\" ).hover(\n function() { $(this).addClass(\"ui-state-hover\");},\n function() { $(this).removeClass(\"ui-state-hover\");}\n );\n\n var status_bar = $('<span class=\"mpl-message\"/>');\n nav_element.append(status_bar);\n this.message = status_bar[0];\n}\n\nmpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n}\n\nmpl.figure.prototype.send_message = function(type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n}\n\nmpl.figure.prototype.send_draw_message = function() {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n }\n}\n\n\nmpl.figure.prototype.handle_save = function(fig, msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n}\n\n\nmpl.figure.prototype.handle_resize = function(fig, msg) {\n var size = msg['size'];\n if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n fig._resize_canvas(size[0], size[1]);\n fig.send_message(\"refresh\", {});\n };\n}\n\nmpl.figure.prototype.handle_rubberband = function(fig, msg) {\n var x0 = msg['x0'];\n var y0 = fig.canvas.height - msg['y0'];\n var x1 = msg['x1'];\n var y1 = fig.canvas.height - msg['y1'];\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0, 0, fig.canvas.width, fig.canvas.height);\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n}\n\nmpl.figure.prototype.handle_figure_label = function(fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n}\n\nmpl.figure.prototype.handle_cursor = function(fig, msg) {\n var cursor = msg['cursor'];\n switch(cursor)\n {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n}\n\nmpl.figure.prototype.handle_message = function(fig, msg) {\n fig.message.textContent = msg['message'];\n}\n\nmpl.figure.prototype.handle_draw = function(fig, msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n}\n\nmpl.figure.prototype.handle_image_mode = function(fig, msg) {\n fig.image_mode = msg['mode'];\n}\n\nmpl.figure.prototype.updated_canvas_event = function() {\n // Called whenever the canvas gets updated.\n this.send_message(\"ack\", {});\n}\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function(fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n evt.data.type = \"image/png\";\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src);\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n evt.data);\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig[\"handle_\" + msg_type];\n } catch (e) {\n console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n }\n }\n };\n}\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function(e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e)\n e = window.event;\n if (e.target)\n targ = e.target;\n else if (e.srcElement)\n targ = e.srcElement;\n if (targ.nodeType == 3) // defeat Safari bug\n targ = targ.parentNode;\n\n // jQuery normalizes the pageX and pageY\n // pageX,Y are the mouse positions relative to the document\n // offset() returns the position of the element relative to the document\n var x = e.pageX - $(targ).offset().left;\n var y = e.pageY - $(targ).offset().top;\n\n return {\"x\": x, \"y\": y};\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys (original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object')\n obj[key] = original[key]\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function(event, name) {\n var canvas_pos = mpl.findpos(event)\n\n if (name === 'button_press')\n {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x;\n var y = canvas_pos.y;\n\n this.send_message(name, {x: x, y: y, button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event)});\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n}\n\nmpl.figure.prototype._key_event_extra = function(event, name) {\n // Handle any extra behaviour associated with a key event\n}\n\nmpl.figure.prototype.key_event = function(event, name) {\n\n // Prevent repeat events\n if (name == 'key_press')\n {\n if (event.which === this._key)\n return;\n else\n this._key = event.which;\n }\n if (name == 'key_release')\n this._key = null;\n\n var value = '';\n if (event.ctrlKey && event.which != 17)\n value += \"ctrl+\";\n if (event.altKey && event.which != 18)\n value += \"alt+\";\n if (event.shiftKey && event.which != 16)\n value += \"shift+\";\n\n value += 'k';\n value += event.which.toString();\n\n this._key_event_extra(event, name);\n\n this.send_message(name, {key: value,\n guiEvent: simpleKeys(event)});\n return false;\n}\n\nmpl.figure.prototype.toolbar_button_onclick = function(name) {\n if (name == 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message(\"toolbar_button\", {name: name});\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n this.message.textContent = tooltip;\n};\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.close = function() {\n comm.close()\n };\n ws.send = function(m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function(msg) {\n //console.log('receiving', msg['content']['data'], msg);\n // Pass the mpl event to the overriden (by mpl) onmessage function.\n ws.onmessage(msg['content']['data'])\n });\n return ws;\n}\n\nmpl.mpl_figure_comm = function(comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = $(\"#\" + id);\n var ws_proxy = comm_websocket_adapter(comm)\n\n function ondownload(figure, format) {\n window.open(figure.imageObj.src);\n }\n\n var fig = new mpl.figure(id, ws_proxy,\n ondownload,\n element.get(0));\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element.get(0);\n fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n if (!fig.cell_info) {\n console.error(\"Failed to find cell for figure\", id, fig);\n return;\n }\n\n var output_index = fig.cell_info[2]\n var cell = fig.cell_info[0];\n\n};\n\nmpl.figure.prototype.handle_close = function(fig, msg) {\n fig.root.unbind('remove')\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable()\n $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n fig.close_ws(fig, msg);\n}\n\nmpl.figure.prototype.close_ws = function(fig, msg){\n fig.send_message('closing', msg);\n // fig.ws.close()\n}\n\nmpl.figure.prototype.push_to_output = function(remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n}\n\nmpl.figure.prototype.updated_canvas_event = function() {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message(\"ack\", {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () { fig.push_to_output() }, 1000);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('<div/>')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items){\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) { continue; };\n\n var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n button.click(method_name, toolbar_event);\n button.mouseover(tooltip, toolbar_mouse_event);\n nav_element.append(button);\n }\n\n // Add the status bar.\n var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n nav_element.append(status_bar);\n this.message = status_bar[0];\n\n // Add the close button to the window.\n var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n button.click(function (evt) { fig.handle_close(fig, {}); } );\n button.mouseover('Stop Interaction', toolbar_mouse_event);\n buttongrp.append(button);\n var titlebar = this.root.find($('.ui-dialog-titlebar'));\n titlebar.prepend(buttongrp);\n}\n\nmpl.figure.prototype._root_extra_style = function(el){\n var fig = this\n el.on(\"remove\", function(){\n\tfig.close_ws(fig, {});\n });\n}\n\nmpl.figure.prototype._canvas_extra_style = function(el){\n // this is important to make the div 'focusable\n el.attr('tabindex', 0)\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n }\n else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n\n}\n\nmpl.figure.prototype._key_event_extra = function(event, name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager)\n manager = IPython.keyboard_manager;\n\n // Check for shift+enter\n if (event.shiftKey && event.which == 13) {\n this.canvas_div.blur();\n event.shiftKey = false;\n // Send a \"J\" for go to next cell\n event.which = 74;\n event.keyCode = 74;\n manager.command_mode();\n manager.handle_keydown(event);\n }\n}\n\nmpl.figure.prototype.handle_save = function(fig, msg) {\n fig.ondownload(fig, null);\n}\n\n\nmpl.find_output_cell = function(html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i=0; i<ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code'){\n for (var j=0; j<cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] == html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n}\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel != null) {\n IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n}\n",
"text/plain": "<IPython.core.display.Javascript object>"
}
},
{
"metadata": {},
"output_type": "display_data",
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<img src=\"data:image/png;base64,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dsSO6l5gY+LJJney/JNNzkzLN4M4IvpXafmqT0fpruOatvFCsN7z1PuLiEHpFZX1/CCDv8fXEIPMu9I6ddfzEQZr4XwG7zfo9vlM2t4ziIHJk6nPccQlMNb8qrHmrfm21byINIBjiC/d7qnc7s+vJ46I3EJ8yS8mvuTePUQbC4HfEzuHG1n+aMw5qb0lDD6T/E8M/h2Mbp/da2ufStOfrPU5BfjfqY0HiEsE6n0uIL7Qnkjvda/dPZc4nVxfz2XEzuDJ1O7jtT5fT3wpP0Ecrbm81udbiWfCP5jW61riuefd7VVfx+71u4sZvFHw0dp23Z3YuTyR2nxkiO16XtpWT1fmu5c4evdC1/ELad4tU19ja+v4A2JH/wSxk/wIK9JdvscZ+tnu1XVc0zbWFOs9T73fDfyfYfp8KK1j90h1tc96LVw5xHqex2At3E4ctX0Ea36kWPPWfNtqXkREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQayDbA3cB7K++dDfwO2GJUlkgkL9a8tAnrXUREimQfYAnwGuCA9PPMUV0ikbxY89ImrHcRESmSk4mjZH8EThjlZRHpBda8tAnrXUREimNT4EHgDmD90V0UkZ5gzUubsN5FRKQ4/hm4CrgZ+OQoL4tIL7DmpU1Y7yIiUhTvI46KbQHsAjwMHDqaCySSGWte2oT1LiIiRfE64DHglZX3DiV2UC8dlSUSyYs1L23CehcRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERGR5vD/AfSsnkN3HMAiAAAAAElFTkSuQmCC\">"
}
},
{
"metadata": {},
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": "<xarray.plot.facetgrid.FacetGrid at 0x7f85ae886fd0>"
}
}
]
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-08-23T13:29:14.128834",
"end_time": "2016-08-23T13:29:14.133207"
},
"collapsed": false
},
"cell_type": "code",
"source": "len(pq_autumn.time)\n# pq_autumn.time",
"execution_count": 9,
"outputs": [
{
"metadata": {},
"output_type": "execute_result",
"execution_count": 9,
"data": {
"text/plain": "9"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Run the next two cells for a slider to flick between images"
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-06-23T18:21:00.545587",
"end_time": "2016-06-23T18:21:00.964421"
},
"collapsed": false
},
"cell_type": "code",
"source": "fig = plt.figure()\nax = fig.add_subplot(1, 1, 1)\nax.imshow(pq_autumn.isel(time=0))\n\n# plt.grid(True)\n# fig.canvas.mpl_connect('button_press_event', callback)\n\nplt.show()",
"execution_count": 5,
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"data": {
"application/javascript": "/* Put everything inside the global mpl namespace */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function() {\n if (typeof(WebSocket) !== 'undefined') {\n return WebSocket;\n } else if (typeof(MozWebSocket) !== 'undefined') {\n return MozWebSocket;\n } else {\n alert('Your browser does not have WebSocket support.' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.');\n };\n}\n\nmpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = (this.ws.binaryType != undefined);\n\n if (!this.supports_binary) {\n var warnings = document.getElementById(\"mpl-warnings\");\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent = (\n \"This browser does not support binary websocket messages. \" +\n \"Performance may be slow.\");\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = $('<div/>');\n this._root_extra_style(this.root)\n this.root.attr('style', 'display: inline-block');\n\n $(parent_element).append(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n fig.send_message(\"send_image_mode\", {});\n fig.send_message(\"refresh\", {});\n }\n\n this.imageObj.onload = function() {\n if (fig.image_mode == 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function() {\n this.ws.close();\n }\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n}\n\nmpl.figure.prototype._init_header = function() {\n var titlebar = $(\n '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n 'ui-helper-clearfix\"/>');\n var titletext = $(\n '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n 'text-align: center; padding: 3px;\"/>');\n titlebar.append(titletext)\n this.root.append(titlebar);\n this.header = titletext[0];\n}\n\n\n\nmpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n\n}\n\n\nmpl.figure.prototype._root_extra_style = function(canvas_div) {\n\n}\n\nmpl.figure.prototype._init_canvas = function() {\n var fig = this;\n\n var canvas_div = $('<div/>');\n\n canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n\n function canvas_keyboard_event(event) {\n return fig.key_event(event, event['data']);\n }\n\n canvas_div.keydown('key_press', canvas_keyboard_event);\n canvas_div.keyup('key_release', canvas_keyboard_event);\n this.canvas_div = canvas_div\n this._canvas_extra_style(canvas_div)\n this.root.append(canvas_div);\n\n var canvas = $('<canvas/>');\n canvas.addClass('mpl-canvas');\n canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n\n this.canvas = canvas[0];\n this.context = canvas[0].getContext(\"2d\");\n\n var rubberband = $('<canvas/>');\n rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n\n var pass_mouse_events = true;\n\n canvas_div.resizable({\n start: function(event, ui) {\n pass_mouse_events = false;\n },\n resize: function(event, ui) {\n fig.request_resize(ui.size.width, ui.size.height);\n },\n stop: function(event, ui) {\n pass_mouse_events = true;\n fig.request_resize(ui.size.width, ui.size.height);\n },\n });\n\n function mouse_event_fn(event) {\n if (pass_mouse_events)\n return fig.mouse_event(event, event['data']);\n }\n\n rubberband.mousedown('button_press', mouse_event_fn);\n rubberband.mouseup('button_release', mouse_event_fn);\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband.mousemove('motion_notify', mouse_event_fn);\n\n rubberband.mouseenter('figure_enter', mouse_event_fn);\n rubberband.mouseleave('figure_leave', mouse_event_fn);\n\n canvas_div.on(\"wheel\", function (event) {\n event = event.originalEvent;\n event['data'] = 'scroll'\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n mouse_event_fn(event);\n });\n\n canvas_div.append(canvas);\n canvas_div.append(rubberband);\n\n this.rubberband = rubberband;\n this.rubberband_canvas = rubberband[0];\n this.rubberband_context = rubberband[0].getContext(\"2d\");\n this.rubberband_context.strokeStyle = \"#000000\";\n\n this._resize_canvas = function(width, height) {\n // Keep the size of the canvas, canvas container, and rubber band\n // canvas in synch.\n canvas_div.css('width', width)\n canvas_div.css('height', height)\n\n canvas.attr('width', width);\n canvas.attr('height', height);\n\n rubberband.attr('width', width);\n rubberband.attr('height', height);\n }\n\n // Set the figure to an initial 600x600px, this will subsequently be updated\n // upon first draw.\n this._resize_canvas(600, 600);\n\n // Disable right mouse context menu.\n $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n return false;\n });\n\n function set_focus () {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('<div/>')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n // put a spacer in here.\n continue;\n }\n var button = $('<button/>');\n button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n 'ui-button-icon-only');\n button.attr('role', 'button');\n button.attr('aria-disabled', 'false');\n button.click(method_name, toolbar_event);\n button.mouseover(tooltip, toolbar_mouse_event);\n\n var icon_img = $('<span/>');\n icon_img.addClass('ui-button-icon-primary ui-icon');\n icon_img.addClass(image);\n icon_img.addClass('ui-corner-all');\n\n var tooltip_span = $('<span/>');\n tooltip_span.addClass('ui-button-text');\n tooltip_span.html(tooltip);\n\n button.append(icon_img);\n button.append(tooltip_span);\n\n nav_element.append(button);\n }\n\n var fmt_picker_span = $('<span/>');\n\n var fmt_picker = $('<select/>');\n fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n fmt_picker_span.append(fmt_picker);\n nav_element.append(fmt_picker_span);\n this.format_dropdown = fmt_picker[0];\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = $(\n '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n fmt_picker.append(option)\n }\n\n // Add hover states to the ui-buttons\n $( \".ui-button\" ).hover(\n function() { $(this).addClass(\"ui-state-hover\");},\n function() { $(this).removeClass(\"ui-state-hover\");}\n );\n\n var status_bar = $('<span class=\"mpl-message\"/>');\n nav_element.append(status_bar);\n this.message = status_bar[0];\n}\n\nmpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n}\n\nmpl.figure.prototype.send_message = function(type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n}\n\nmpl.figure.prototype.send_draw_message = function() {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n }\n}\n\n\nmpl.figure.prototype.handle_save = function(fig, msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n}\n\n\nmpl.figure.prototype.handle_resize = function(fig, msg) {\n var size = msg['size'];\n if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n fig._resize_canvas(size[0], size[1]);\n fig.send_message(\"refresh\", {});\n };\n}\n\nmpl.figure.prototype.handle_rubberband = function(fig, msg) {\n var x0 = msg['x0'];\n var y0 = fig.canvas.height - msg['y0'];\n var x1 = msg['x1'];\n var y1 = fig.canvas.height - msg['y1'];\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0, 0, fig.canvas.width, fig.canvas.height);\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n}\n\nmpl.figure.prototype.handle_figure_label = function(fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n}\n\nmpl.figure.prototype.handle_cursor = function(fig, msg) {\n var cursor = msg['cursor'];\n switch(cursor)\n {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n}\n\nmpl.figure.prototype.handle_message = function(fig, msg) {\n fig.message.textContent = msg['message'];\n}\n\nmpl.figure.prototype.handle_draw = function(fig, msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n}\n\nmpl.figure.prototype.handle_image_mode = function(fig, msg) {\n fig.image_mode = msg['mode'];\n}\n\nmpl.figure.prototype.updated_canvas_event = function() {\n // Called whenever the canvas gets updated.\n this.send_message(\"ack\", {});\n}\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function(fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n evt.data.type = \"image/png\";\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src);\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n evt.data);\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig[\"handle_\" + msg_type];\n } catch (e) {\n console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n }\n }\n };\n}\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function(e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e)\n e = window.event;\n if (e.target)\n targ = e.target;\n else if (e.srcElement)\n targ = e.srcElement;\n if (targ.nodeType == 3) // defeat Safari bug\n targ = targ.parentNode;\n\n // jQuery normalizes the pageX and pageY\n // pageX,Y are the mouse positions relative to the document\n // offset() returns the position of the element relative to the document\n var x = e.pageX - $(targ).offset().left;\n var y = e.pageY - $(targ).offset().top;\n\n return {\"x\": x, \"y\": y};\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys (original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object')\n obj[key] = original[key]\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function(event, name) {\n var canvas_pos = mpl.findpos(event)\n\n if (name === 'button_press')\n {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x;\n var y = canvas_pos.y;\n\n this.send_message(name, {x: x, y: y, button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event)});\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n}\n\nmpl.figure.prototype._key_event_extra = function(event, name) {\n // Handle any extra behaviour associated with a key event\n}\n\nmpl.figure.prototype.key_event = function(event, name) {\n\n // Prevent repeat events\n if (name == 'key_press')\n {\n if (event.which === this._key)\n return;\n else\n this._key = event.which;\n }\n if (name == 'key_release')\n this._key = null;\n\n var value = '';\n if (event.ctrlKey && event.which != 17)\n value += \"ctrl+\";\n if (event.altKey && event.which != 18)\n value += \"alt+\";\n if (event.shiftKey && event.which != 16)\n value += \"shift+\";\n\n value += 'k';\n value += event.which.toString();\n\n this._key_event_extra(event, name);\n\n this.send_message(name, {key: value,\n guiEvent: simpleKeys(event)});\n return false;\n}\n\nmpl.figure.prototype.toolbar_button_onclick = function(name) {\n if (name == 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message(\"toolbar_button\", {name: name});\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n this.message.textContent = tooltip;\n};\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.close = function() {\n comm.close()\n };\n ws.send = function(m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function(msg) {\n //console.log('receiving', msg['content']['data'], msg);\n // Pass the mpl event to the overriden (by mpl) onmessage function.\n ws.onmessage(msg['content']['data'])\n });\n return ws;\n}\n\nmpl.mpl_figure_comm = function(comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = $(\"#\" + id);\n var ws_proxy = comm_websocket_adapter(comm)\n\n function ondownload(figure, format) {\n window.open(figure.imageObj.src);\n }\n\n var fig = new mpl.figure(id, ws_proxy,\n ondownload,\n element.get(0));\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element.get(0);\n fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n if (!fig.cell_info) {\n console.error(\"Failed to find cell for figure\", id, fig);\n return;\n }\n\n var output_index = fig.cell_info[2]\n var cell = fig.cell_info[0];\n\n};\n\nmpl.figure.prototype.handle_close = function(fig, msg) {\n fig.root.unbind('remove')\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable()\n $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n fig.close_ws(fig, msg);\n}\n\nmpl.figure.prototype.close_ws = function(fig, msg){\n fig.send_message('closing', msg);\n // fig.ws.close()\n}\n\nmpl.figure.prototype.push_to_output = function(remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n}\n\nmpl.figure.prototype.updated_canvas_event = function() {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message(\"ack\", {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () { fig.push_to_output() }, 1000);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('<div/>')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items){\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) { continue; };\n\n var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n button.click(method_name, toolbar_event);\n button.mouseover(tooltip, toolbar_mouse_event);\n nav_element.append(button);\n }\n\n // Add the status bar.\n var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n nav_element.append(status_bar);\n this.message = status_bar[0];\n\n // Add the close button to the window.\n var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n button.click(function (evt) { fig.handle_close(fig, {}); } );\n button.mouseover('Stop Interaction', toolbar_mouse_event);\n buttongrp.append(button);\n var titlebar = this.root.find($('.ui-dialog-titlebar'));\n titlebar.prepend(buttongrp);\n}\n\nmpl.figure.prototype._root_extra_style = function(el){\n var fig = this\n el.on(\"remove\", function(){\n\tfig.close_ws(fig, {});\n });\n}\n\nmpl.figure.prototype._canvas_extra_style = function(el){\n // this is important to make the div 'focusable\n el.attr('tabindex', 0)\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n }\n else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n\n}\n\nmpl.figure.prototype._key_event_extra = function(event, name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager)\n manager = IPython.keyboard_manager;\n\n // Check for shift+enter\n if (event.shiftKey && event.which == 13) {\n this.canvas_div.blur();\n event.shiftKey = false;\n // Send a \"J\" for go to next cell\n event.which = 74;\n event.keyCode = 74;\n manager.command_mode();\n manager.handle_keydown(event);\n }\n}\n\nmpl.figure.prototype.handle_save = function(fig, msg) {\n fig.ondownload(fig, null);\n}\n\n\nmpl.find_output_cell = function(html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i=0; i<ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code'){\n for (var j=0; j<cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] == html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n}\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel != null) {\n IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n}\n",
"text/plain": "<IPython.core.display.Javascript object>"
}
},
{
"metadata": {},
"output_type": "display_data",
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hcxdW/X8uWe+8dg40B25hquuk1dIzpvYcSQhK+j4T8KflCwpcESAjJR+gtlNjYpjfTS0wLzYDBxr33XmRL+j/n7l1pJe1Kd3fvrmb3/uZ5eIy0M2fOvGe0+9u5M2eaoCICIiACIiACIiACIhApAk0iNVoNVgREQAREQAREQAREAAlATQIREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNAREQAREQAREQARGIGAEJwIgFXMMVAREQAREQAREQAQlAzQEREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNAREQAREQAREQARGIGAEJwIgFXMMVAREQAREQAREQAQlAzQEREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNAREQAREQAREQARGIGAEJwIgFXMMVAREQAREQAREQAQlAzQEREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNAREQAREQAREQARGIGAEJwIgFXMMVAREQAREQAREQAQlAzQEREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNAREQAREQAREQARGIGAEJwIgFXMMVAREQAREQAREQAQlAzQEREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNAREQAREQAREQARGIGAEJwIgFXMMVAREQAREQAREQAQlAzQEREAEREAEREAERiBgBCcCIBVzDFQEREAEREAEREAEJQM0BERABERABERABEYgYAQnAiAVcwxUBERABERABERABCUDNgXwQuA64CugITAQuARblo2P1IQIiIAIiIAIiUJeABKBmRa4JnA/cBpwKzATuBFoBB+a6Y9kXAREQAREQARFITkACUDMj1wQ+BcYBt/gd9QFmA7sAX+a6c9kXAREQAREQARHQCqDmQH4JNAfWAwcB7yZ0PRX4A3Bvft1RbyIgAiIgAiIgAkZAK4CaB7kk0AuYC+wAfJ/Q0XvASwmrgrn0QbZFQAREQAREQARqEZAA1JTIJQETgPOA7WsJQFsNfLmWALS52BtYk0uHZFsEREAECpxAO2A+UFng45D7jUxAArCRA1Dk3afzCNj2BtpqoYoIiIAIiED9BPr6X67FSQQyJiABmDE6NQxIIOghkPbAqmuAFgENq1o1gdeBQwQkbQLiljayqgZilxm7bLhtAu6IddsBWJ2ZB2olAjECEoCaCbkmcB7wJ+B0//Tv7UBr/2BIYt+eALSEgRKA6YfkFeCI9JtFvoW4ZT4FxC4zdtlwMwF4qwRgZuDVqg4BCUBNinwQ+G/gasBE3mvApcDiWh1LAGYRiWw+VLLotuCbilvmIRS7zNhlw00CMDPmapWcgASgZoYrBCQAs4jENGBQFu2j2lTcMo+82GXGLhtuEoCZMVcrCUDNAbcJSAC6HR95JwIi0MgEJAAbOQBF1r1WAIssoAU8HAnAAg6eXBcBEcg9AQnA3DOOUg8SgFGKtttjlQB0Oz7yTgREoJEJSAA2cgCKrHsJwCILaAEPRwKwgIPX2K7vAXzU2E6ofxHIMQEJwBwDjph5CcCIBdzh4UoAOhwc112zqxF0hYzrUZJ/2RKQAMyWoNonEpAA1HxwhYAEoCuRkB8iIAJOEpAAdDIsBeuUBGDBhq7oHJcALLqQakAiIAJhEpAADJOmbEkAag64QkAC0JVIyA8REAEnCUgAOhmWgnVKArBgQ1d0jksAFl1INSAREIEwCUgAhklTtiQANQdcISAB6Eok5IcIiICTBCQAnQxLwTolAViwoSs6xyUAiy6kGpAIiECYBCQAw6QpWxKAmgOuEJAAdCUS8kMERMBJAhKAToalYJ2SACzY0BWd4xKARRdSDUgERCBMAhKAYdKULQlAzQFXCEgAuhIJ+SECIuAkAQlAJ8NSsE5JABZs6IrOcQnAogupBiQCIhAmAQnAMGnKlgSg5oArBCQAXYmE/BABEXCSgASgk2EpWKckAAs2dEXnuARg0YVUAxIBEQiTgARgmDRlSwJQc8AVAhKArkRCfoiACDhJQALQybAUrFMSgAUbuqJzXAKw6EKqAYmACIRJQAIwTJqyJQGoOeAKAQlAVyIhP0RABJwkIAHoZFgK1ikJwIINXdE5LgFYdCHVgERABMIkIAEYJk3ZkgDUHHCFgASgK5GQHyIgAk4SkAB0MiwF65QEYMGGrugclwAsupBqQCIgAmESkAAMk6ZsSQBqDrhCQALQlUjIDxEQAScJSAA6GZaCdUoCsGBDV3SOSwAWXUg1IBEQgTAJSACGSVO2JAA1B1whIAHoSiTkhwiIgJMEJACdDEvBOiUBWLChKzrHJQCLLqQakAiIQJgEJADDpClbEoCaA64QkAB0JRLyQwREwEkCEoBOhqVgnZIALNjQFZ3jEoBFF1INSAREIEwCEoBh0pQtCUDNAVcISAC6Egn5IQIi4CQBCUAnw1KwTkkAFmzois5xCcCiC6kGJAIiECYBCcAwacqWBKDmgCsEJABdiYT8EAERcJKABKCTYSlYpyQACzZ0Ree4BGDRhVQDEgERCJOABGCYNGVLAlBzwBUCEoCuREJ+iIAIOElAAtDJsBSsUxKABRu6onNcArDoQqoBiYAIhElAAjBMmrIlAag54AoBCUBXIiE/REAEnCQgAehkWArWKQnAgg1d0TkuAVh0IdWAREAEwiQgARgmTdmSANQccIWABKArkZAfIiACThKQAHQyLAXrlARgwYau6ByXACy6kGpAIiACYRKQAAyTpmxJAGoOuEJAAtCVSMgPERABJwlIADoZloJ1SgKwYENXdI5LABZdSLMbUAkwBJicnRm1FoGiISABWDShdGIgEoBOhEFOABKAmgZ1CDQFysVFBETAIyABqIkQJgEJwDBpylY2BCQAs6GntiIgAkVPQAKw6EOc1wFKAOYVtzqrh4AEoKaHCIiACNRDQAJQ0yNMAhKAYdKUrWwISABmQ09tRUAEip6ABGDRhzivA5QAzCtudaYVQM0BERCBqBNoVgr24Vu5ObbHtTIgEAnAgKBULRABCcBAmFQpDwS0ApgHyOpCBESgcQl07QmnXwKdOsCCv8CXs2F+LZdaD4MNG2D2DzVfkABs3NgVW+8SgMUW0cIdjwRg4cZOnouACAQkcPAxsP+Rscqbl8CSR2HTdOhySrWBdvvC2rXwzD9h2jfVv5cADAhZ1QIRkAAMhEmV8kBAAjAPkNWFCIhA4xHoChzeGgZcDc37xPwoXwMVG6G0W12/Fj4Pi16G8f5LEoCNF7ti7FkCsBijWphjkgAszLjJaxEQgYAEBgAH+HX73gylXRpuuOheWPUFjANWAbfGmnQAVjfcWjVEIDUBCUDNDlcISAC6Egn5IQIikBMC5yZYbVIKPS6FVtun6Mo7JRJ7bcljMGsSvAb8SgIwJ7GJolEJwChG3c0xSwC6GRd5JQIiEAIBW/nb4yJY+wms/xy6XwRNO0JLWxaMF7v/sML/If7pXAmV5bDiWRj3OlwsARhCNGTCCEgAah64QkAC0JVIyA8REIHQCTQDfn0XVG6J/VfSMkkX9olsIjBeTAz6q4DrPocn7pMADD0wETYoARjh4Ds2dAlAxwIid0RABNIjYB+o3dvEDnTsOwe2lMMrwFrfzGU/h66doFnHFHbt8uv40owJvwQBaL+e8Shs86FXQ3sA0wuNaqf4viEwIuACAQlAF6IgH0RABNIi0AYY5LewBM8HnwNtdoFVr8Py8bAEmOe/vhA4YTB0O6ceEWgq0v6LPwpO8Gbhp9DrQQnAtAKkyikJaAVQk8MVAhKArkRCfoiACAQm0L8vHNsLWg6GUvs3YU/f2o9hycPVplYAnYDev4AWiXv/4lUSDn4kc2D1BuhwrQRg4OCoYr0EJAA1QVwhIAHoSiTkhwiIQCACpSVw/Z31V139bmwlsLKsul7Pq6HVtoG6qFFJj4DTZ6YWqQlIAGp2uEJAAtCVSMgPERCBBgn0HQAXjISSPRus6lVYdF/s9G+89LgM7Mq3ZGX9V1DSClrGny37lea+Af0sIaD2AAaDrlr1EpAA1ARxhYAEoCuRkB8iIAINEjjzx7Dt0Aar1aiw+h0wcbfhW+h6BrTbJ/byiuegfH3s/78DZr8PHdvCiJ2gw6HVCaP1CDg93qpdPwEJQM0QVwhIALoSCfkhAiJQLwFbmDvux9A+TQFoRsvXQcX66qvflj8LqybGDn38AEwCtthpYuDUA6HT8VBSGnNHAlATM0wCEoBh0pStbAhIAGZDT21FQATyQqA3MOog6DIqje4st188v5+d7k044bv0cVjzQeyatwm1TO4AHHURtN9ZAjAN2qoakIAEYEBQqpZzAhKAOUesDkRABLIlYNe5tc9GACY6UAFLH0stAK2qbRPc5kzYdW+tAGYbO7WvSUACUDPCFQISgK5EQn6IgAjUINB/IAwpgY1TYZuO0PPH0LxPGpASVwBrCcBNs2Dh32DTWvgYmJrEbEkJ7LsjDNsDet7rVVAi6DTwq2pyAhKAmhmuEJAAdCUS8gN79LbcTm6KReQJtGoDP/steJd0lMeSNJe0SBNLPQLQHgfP/n9QvgK+BT5KYdo+rLc0hd+aDxKAaQZA1ZMRkADUvHCFgASgK5EoAD967wRbNsHiKQXgrFwsWAKWtPnUIdDz8hCGYAoy2SeuCbpKmHFl/QLQPNgE3BpzRSuAIYQk6iYkAKM+A9wZvwSgO7Fw2pMhR8OJd8KGlTDuJzDz/bruHnANLPwavnvV6aHIOccJDAbOuCskJ+3TNn7Xb6LJclj1Bix4Gt5NuDYuWa8SgCHFQmY8AhKAmgiuEJAAdCUSDvsx+FA44Q5o3Tnm5Kr5sCp+0WqC3/1HwGdPwjM/d3gwcq0gCFiuP8v5F0pplsRKOcz+NUxYEdt2UF+RAAwlCjLiE5AA1FRwhYAEoCuRcNyPE/8Cw0dBkwDvXuN/Cl+McXxAcs95AsN2gVHnQZNkK3jpel/7UbAvAB+wi4IlABtCoNdDJBDgLTTE3mSq0AicCFwB7A60AywdaUIGK+w2y38AewELgf8BHkwYpL3V/RE4G2gOjAdsN42f874GDgnAQpsdjejvSX+F9r1gwN4NO/G/Q2OPi1VEIFMClpR57wNg4GBov1OmVhKWXeKfvPZvBUz6NbwsAZglWDVPl4AEYLrEolX/TKC/L/p+V0sA2sOMb4APgJuBEcDDwI+AN31M9vtzgNOAdcBDwGTgvCQYJQCjNbeyHq0dBLnkxZiZF35Zbc72/7W1T2y//O8w2BDgwzUdhwbadV3A5nQaqW7BE7C49xkJew6GNruEMBz7BJ4Dd9wFq9Y2bE+PgBtmpBrBCUgABmcV5ZoHAG/UEoDHAY8CPYCNPpx7gK7ASf7+UsuicQ3wT/91u/nybf+Wo9ofyRKAUZ5hGYy9aXPoYNcyWMqWmdUGOvSJ/f6CCfDSDfDRg1CZuG6dQV+1m7T0T2RWhmBLJgqLgGV0adcKTtwDBthtIPEbPtIZxsdw9+tw2fnw+pPw/jSoCDCZJADTgay6DRGQAGyIkF43AskEoD3uNUF3SAIiWzH8g31JBuy6TLvXfEDsO65X7K3SHv8eC7xWC60EoOaaCIhAwRHoOyC2PzBe1k+GV8fCLH/fzGH+C7b/ZSTwThYjlADMAp6a1iEgAahJEYRAMgFoe/9sX+AZCQYOBeyhnO33s91Z7wGtgLKEOnOB/05YFYy/JAEYJBKqIwIiEFkCEoCRDX1OBi4BmBOsRWc0qAC01cCXGhCAthp4nQRg0c2R0Ae0f5arJaE7JIMi0MgEJAAbOQBF1r0EYJEFNEfDyeQRsO2X/r7WI2CbbxvqewRsJ0nimRbMgD1HVokmATtltCWaQ9eoRaCKwDTgB/8nuzTE7gvWTSCaIGEQkAAMg2Lx20gmAG0fnx0C6ZlwCORu/4BHqkMg9ljYDoHYwREdAin+eaMRioAIhEhAK4AhwpQp3QSiOVAvAbsK09LA2MKcnfC1fID2JXSqnwHDUrpYGpjf+HUszYulgXnLt3qTnwbG9gna4Y/7/TQw5yfpVXsANRlFQAREoBYBewrSxv+dvYmepRVAzZGQCGgFMCSQRWrmXD+xc+0EBQf527PsveleYE8/EbQJQROB8WJPc+1UsJ2Rsyd64/zE0koEXaQTRsMSAREIh4B9+7YM+963cEumBazeBD3+7v1vB/sxnJ5kJaoEJACjGnn3xq0VQPdiIo9EQAQagYDl02ozEHr7wi/uwuoN0OFaCcBGCElRdikBWJRhLchBSQAWZNjktAiIQJgELJP+kUDnw6GzpdtPKBKAYZKWLQlAzQFXCEgAuhIJ+VGUBN7kQA6q2p5blEMsikFZFv2DgYF31R2OBGBRhNiZQUgAOhOKyDsiARj5KSAAuSLwBgfxPvvSgVVVXfyY/6NUiXZyhTwru/YIeFsJwKwYqnHDBCQAG2akGvkhIAGYH87qpUAJbKAlD3Eei70sSrFyPg/QjjV8wU68zYHe737CX2qMcCrb8pJ3OL9uuZGbC5RG47nd1u/aEppaSoSwS5t2cM1voFlpXctaAQybdrTtSQBGO/4ujV4C0KVoyBfnCLzOwbzn3SYbXjma5z1j2zOFtqwLz3ARWrKEp71HwD4toGwefD4DVvrZ7sMc7umXwHbDk1uUAAyTtGxJAGoOuEJAAtCVSMgPJwnkQgDGB3oB99MPu6ZbJRmB/gPhmIOg61AoKYXNS2DxA1A2Bx4OGZkEYMhAZS4lAQlATQ5XCEgAuhKJAvZjNz9LebElSJtFfx7lbMq9dJrhFwnA1ExbtYGf/RZKaz2SrSiDWb+AzRWxtnYJeu3rjTKJlARgJtTUJhMCEoCZUFObXBCQAMwF1QjZ7AscAkyAhKMOhQ9gLn24n4tyNpADeIsDvRsaVZIRuCnJYYx4vfm3Q/O+0PUUWPIoPPkhLMsSY1wAVmyEZWNhziTY7NvscCDsELtnSYmgs+Ss5ugqOE0CZwhIADoTisJzxL7JxrdNTQHsztRiKF8xjPGcSCUlORuOBGD9aA87AfY9NBj+KVfCk8Gqpqx1+jGw3eGwcTos+DO8ACz1a3fxDvlIAGaJWM19AloB1FRwhYAEoCuRKFA/bEmkOslJgQ4CExCn0pwytuM7nucYNtIqZ4PpziLO4HE66FaxlIxblsClR0Kn5Aepa7QLQwB2bQOtuoOtAJYtiD1W3uL3Yl9sbpUAzNnfQ9QMSwBGLeLujlcC0N3YyLMcECgjtqnsQc5nIb1y0EP9Jksp41f8Pu/9FmKHw3aBUedBE7vdPEWZ/b/wwJzcjk4CMLd8o2ZdAjBqEXd3vBKA7sZGnoVMYArb8RSnhWw1PXOjGMswvk6vUURrdwf2PgCGnVD3MIghWbwAnvgHrIg/q80RJwnAHIGNqFkJwIgG3sFhSwA6GBS5FC6BGQzgG4bwCbvjwhbsw3iVffh3uIMsYms77QHNW1QP8KjRsPxDePptWJCHLDoSgEU8uRphaBKAjQBdXSYlIAGoiVHUBJbRmfu5kA20dmaczdjs3SQymjH0YqEzfhWKI526wpY1sCZPp44kAAtlZhSGnxKAhRGnKHgpARiFKEd4jIvpxv9xubMEbE/gT7hTN4I4GiHLAGkC8Lcx/5QGxtE4FZJbEoCFFK3i9lUCsLjjG/nRraEt/+IU5tLPWRY9WcCJjKc7S5z1MYqOWRKgPcC7q+ViCcAoToGcjFkCMCdYZTQDAhKAGUBTk8IhsIr2PM4ZLKaHs073YS6jeJpO3i23Kq4QsPPiZ9hNI3vBbpO0AuhKXArdDwnAQo9g8fgvAVg8sdRIkhD4Hb9kM82dY7Mf7zKdbTiHRyihgtKqrHPOuRpZh85qAdvcAmu2QMfrJAAjOxFCHrgEYMhAZS5jAhKAGaNTQ9cILKI7ZTTnBwbyNgc2mntNqKAP86r6b89qRjO20fxRx8EJDAb26wg9L4fmvWPtVm+ADtdKAAanqJr1EZAA1PxwhYAEoCuRkB9ZEZjO1ozjJNbRNis7YTQ+mNcZyXthmJKNPBPYF9j9aOh0VHXHEoB5DkKRdycBWOQBLqDhSQAWULDkanIC8+jNU5zKGmw6N365kZsb3wl5kBEB2/e3dyfYz1YA/YtiJAAzQqlGKQhIAGpquEJAAtCVSMiPjAnczI0Ztw274YXcR9+Ex79h25e9/BCwK4j3uCvWlwRgfphHpRcJwKhE2v1xSgC6HyN5WA8BF653S3RPArA4putuwLG/BnpKABZHRN0ZhQSgO7GIuicSgFGfAQU8/o8YwUvYZi133lIlAAt4QtVyfe8BcMRoWN1dh0CKJ6qNPxJ33q0an4U8aFwCEoCNy1+9Z0HAkjzfzs+qBOBpPEFb1nJfPG1vFrYzabonkziUiTSjPJPmauMggRF7wMjREoAOhqZgXZIALNjQFZ3jEoBFF1INKJGA3QX8GGexlrZswbb41y2tWccGWlGJ3f0AbVhLKZurKq6hHeXYpWDVpYRyRvIu9prl87uaOwW+SAnoLuAiDWwjDUsCsJHAq9s6BCQANSkiQSDxcbHdvNGThVXj3okv+I7teJ/96M4iTmIcPVhc9fp77MtKOtbgZCuNB/J2JNhFfZASgFGfAeGOXwIwXJ6yljkBCcDM2allgRH4lu09j7uxhK4sq+O9vd6JFfRkUYGNTO7mkoAEYC7pRs+2BGD0Yu7qiCUAXY2M/BIBEXCCgASgE2EoGickAIsmlAU/EAnAgg+hBiACIpBLAhKAuaQbPdsSgNGLuasjlgB0NTLySwREwAkCEoBOhKFonJAALJpQFvxAJAALPoQagAiIQC4JSADmkm70bEsARi/mro5YAtDVyMgvEXCUQJMm0KwUNlumnEpHnQzRLQnAEGHKlENp6xWMqBOQAIz6DND4RSANAtsPh5594cAfwbhbYOkCmJ9G+0KsKgFYiFFz12etALobm6h5JgEYtYhrvCKQBYGb7qpuPPcW2LAAJgE/ZGHT9aYSgK5HqLD8kwAsrHgVs7cSgMUcXY1NBEIm0KU7XHVDzOiW5TDnBpgGvB9yPy6ZkwB0KRqF74sEYOHHsFhGIAFYLJHUOEQgTwQG7QBnXRHrbPMqePl6+DRPfTdGNxKAjUG9ePuUACze2BbayCQACy1i8lcEGplAt54w6nzo2QfWrILbrm9kh7Lo3m6H3jpF++/930sAZgFYTesQkADUpHCFgASgK5GQHyJQQAS694YzL4OSr+C2MQXkeIKrewEd28OOp1T/cvNCWPE8dDoO/vxs7PcSgIUZX1e9lgB0NTLR80sCMHox14hFIBQCJzSHF8phc3ko5vJuZBQw9DYoaVHddWUFVJZBk+ZQVgbrv4Sxj8AlsSodgNV5d1QdFhUBCcCiCmdBD0YCsKDDJ+dFQAQyIbA3cMhvoFnnhlvPfhG2elECsGFSqhGEgARgEEqqkw8CEoD5oKw+REAEnCLQFzjjN9A6gABcvQE6XCsB6FQAC9gZCcACDl6RuS4BWGQB1XBEQAQaJjAMOPY30EICsGFYqhEqAQnAUHHKWBYEJACzgKemIiAChUvgeGCXhMTWqUaiFcDCjbGLnksAuhiVaPokARjNuGvURUignz+mxf7J1SIcYuhDOuti6JXEastB0LRN7AUJwNCxR9qgBGCkw+/U4CUAnQqHnBGBzAmc6zd9GViUuZlItbQ8gNsA2wGdEkbe6+fQ0k8QKAEYqSmR88FKAOYcsToISEACMCAoVRMBlwkcA3SRAMw4RK0ASwvTFGh/IHQ6HkpMHWoFMGOmapicgASgZoYrBCQAXYmE/BCBLAic7ouX/wDfZGEn6k0vGQi9r6mmULEJViyBrrd6v1MewKhPkBDGLwEYAkSZCIWABGAoGGVEBBqXwAhgAzC5cd0o+N4TBWDlFpg5Bv7zPpwcG5kEYMFHuPEHIAHY+DGQBzECEoCaCSIgAiLgE0gUgBUb4NtrYSZgj9glADVNwiAgARgGRdkIg4AEYBgUZUME0iDQd1c4+4lYg7L1cNsuaTRW1ZwQ2B+w5NCDboeS5rEuTADOuhbeAi6QAMwJ9ygalQCMYtTdHLMEoJtxkVdFSuD6aVBqJw4Sysx/w5jLYN3SIh20Q8NqUgK79wfT3C/PgYMS7jFusRX0jt34USUAv78WJgJXSQA6FMXCdkUCsLDjV0zeSwAWUzQ1FucJjPwJHPLfdd18/jr45FHn3S94Bw85DkYeHhvGqjdiq3zx0vFIaGLHgBME4DvXwitA7AyI9gAW/ARwYAASgA4EQS54BCQANRFEIM8EbppXs0NbARz7Y1i7JM+ORLC7mwLc/CEBGMGJkcchSwDmEba6qpeABKAmiAjkmcCvplZ3WLYO/rRznh2IQHfNSqBJM9hcBvaB27QpXPBz6N0/+OBtdVArgMF5qWYwAhKAwTipVu4JSADmnrF6EAERyCOBji3gwpOg3b7w4NXQqSUcdhq0SfOwTUUZfPkXeG4W3BDzX2lg8hjHYu1KArBYI1t445IALLyYyWMREIF6CIzaB3Y8I1Zh9XvQtB202SkzZOs+hyfug4slADMDqFZ1CEgAalK4QkAC0JVIyA8RiDCBE4HxIY3/ppOAg8MxJgEYDkdZqSYgAajZ4AoBCUBXIiE/RCDCBM4htlfPynPA8ixYdIrZhfIAACAASURBVOkKl/8CmrbNwojfVAIwe4ayUJOABKBmhCsEJABdiYT8EIEIE9gT2D4kAWgb9c45ALqMzh6oBGD2DGVBAlBzwE0CEoBuxkVeiUDkCJwbkgDs3BEuvQxa2NUeWRYJwCwBqnkdAloB1KRwhYAEoCuRkB8iEHECzfzxb8mSQ9cecOX/y9KI31wCMByOslJNQAJQs8EVAhKArkRCfoiACIRCoGtXuPK/gNbZm5MAzJ6hLNQkIAGoGeEKAQlAVyIhP0QgQgSGAKXAYmBByOPu2gmuvBLokb3h+Z/DY/eBf3uf8gBmjzTyFiQAIz8FnAEgAehMKOSICESHwClAK2A98CawNMShd20PV14IDMzO6Ozb4Zl1MH+R7gLOjqRaJxKQANR8cIWABKArkZAfItAAgUrgG4YwlurjrbvyKcfyfIPsyrz1tlgpZXNVypUGG+aogicAm0CTUqjcDA9XVqeBsXFmW3bfD350CpSUZGZpzp/g/pmxtpuQAMyMololIyABqHnhCgEJQFciIT9EoAECkxnK05xco9Y2/MDxPEN71iRtvYjurKATT3Fa1esnMo72rGYAsxqN+b7ADr2hx8Ww+H54ZS7eCNoBs0Py6ozLYPCw9IytXwuzf4DXnoFl9nxaAjA9gKrdIAEJwAYRRbbCjYAlxbeUWOuAV4Cf+ltl4lC2Bf4B7AUsBP4HeDCBWFPgj8DZQHM/wf7l/tOW2mAlACM71TTwQiEwlUF8z2A+YURSlwcyjU6sSPrabPqzOMlmuNasYwjfsBeT6JJV2uXMKe7WGnbrAZtmxGw8nLmppC0zEYBP3gNTvqxpTiuAIQcm4uYkACM+AeoZ/jjgCeAjoCNwF2APMewLsxXLlPAN8AFwM3ifCPa++SN/K43Vsd9bYn37ym8i8iFgMnBekn4lADUXRcBxAm9xAG9zYE68PJeHGm0l0N7Y2iSMKvkaZubDTlcAzr0F7ktyIkUCMPMYqGVdAhKAmhVBCewOfOifZ7N90scBj/o/b/SN3AN0BewGTJtbi4BrgH/6r+8DvA10hzrLBBKAQSOheiLQiATGcDLz6c1KOmXkRUdWUEZz1idIrpZs4Ez+SV/mZWTT9UbpCMAtq2HuDbBwC7xca2ASgK5HurD8kwAsrHg1preHA8/6q4Em+Oxxrwm6QxKcOhP4A9AHGAR8BwwA5vh17Iu2HbY7Fnit1mAkABszuupbBNIgUE4JT3A6P3h/5sHLUCZzMk8zm35M4ARW0Jnd+IRBTGN77+2i+Er3XjDqPOhh74oNlLL5sPgh2DwfPvYfsSQ2kQBsiKBeT4eABGA6tKJb1/bvvUfsPekKH4Pt/bN90mckYDkUeNHf77e338YyLJQl1JlLLJVVfFUw/pIEYHTnl0ZegATW0Ja5xO44+xenphxBCeWczFjv9W2YTgv/7WAevVlNe3ZgSgGOPpjL7VrAmaOgp31VDlA2L4XFD0DZ7OT7ECUAA0BUlcAEJAADo4psRVu1ewroDxyUcIAjmQC01cCXGhCAthp4nQRgZOeTBp4jAmMZxVS25ZfcmrKHTl3hsutg7IMw9evwHFlMN/4PO99Vt1zH76tEX3g9FoalXx0Hze1d0Y7DBSwV9nW5An7zi7oNJAADQlS1QAQkAANhimwlmx+PAMOB/YFVCSQaegRsqU+/r/UI2OxtqO8RsJ0kib9XmoH0HjBFNk4aeEQJLKAny+hSIyVLf2Zxvnfeqrq0BTr0hYvtq5dfZl4DEzbDypDYTWE73mdfzuZRmrM5JKv5M2OPKuzuX/PcMhXaLR6jroRO7WDR3+GtpfD92ob9aQF07gpn/gza2nONDMusafDgn2Ea8INvo9x/DGPhBFZnaFrNRMAjIAGoiVAfgfuB/fz/ltSqaPv47BBITyB+CORu/4BHqkMg9ljYDoHYxUi1c0XoEbDmogikSeAOfspqTwtUl2QC0B7Unn4TtLEjWn5Z+TKsXAqfTYKpKXIzpelOQVa3q+AsnYH925lYDsB+R8Gw7aFlwg0e334BC+fC2/aMA9ixJ3S2O363gxnfwezpsS+vB/eC3c+BFv2ywzHzMXhpUuwkXbxoBTA7pmpdk4AEoGZEKgIm5kzIWVqX+CEOq2tCsML/kmwpXSwNzG/8NDC27GD13/KN3uSngbF9gnb4wwSltTk/SacSgJqLIpAmgaAC0Mz26geX+hfJxrup2Ahl8+CRJ2F+2BfhpjmWfFfvDewEdAGW+dfB2abmXtfUFH61/bLkzFa6tYVWtlTYGSY+A++9Bi1bws+vhdIQ7v6dcSV8BiSmApQAzPcsKe7+JACLO77ZjM5EXuJNSDZX7OetExLk2xPae4E9/UTQJgQTnz3ZF2I7FWx5/yxvoOUWtEMkJgZrFwnAbKKltpEkcBdXsMzLvBQrpZTxK35fL4sRI+HoxDMbFXDf7TDXv26smEHuYit3/qOvtntDN8tbEKBUlkOlPR+2ZKj2jLdWsdfsyraxS+BnpwOWNCvLsnEaLPgzvJBwP7EEYJZQ1bwGAQlATQhXCEgAuhIJ+VFQBJ5MOIE7mjE09RboU5dBQ2D3eDp3qzYPXnsLliX7WlZQJII5a/uMh7WDrerXyTWMLfoYpvjXg/T7MWxjj3cT9vctfwYeew2O3AUG27JiCAKwbAFMvRdeWVy92U8CMFiMVSsYAQnAYJxUK/cEJABzz1g9iIAI2B6UNAXgVx/D074AbNkMdtwu9uj3qNFQUgJxAbiqBI4+BHY9PhzM8z6EMWNgpb/LWgIwHK6yEiMgAaiZ4AoBCUBXIiE/RKBICQwD7ALzjlkIwEQ0llbn6mOhfHu498+wYgVcdUN2p39roJ8C9z0Kc/38CxKARToxG2lYEoCNBF7d1iEgAahJIQIikHMClr6gaxvo+2toaqc+ApTEFcDa1QdsC+ddHcBIBlXefB7eTrgPTgIwA4hqkpKABKAmhysEJABdiYT8EIEiJmBJTS17S4utoN1esNOeUGp3HdVTJACLeEJEeGgSgBEOvmNDlwB0LCByRwSiQGDbIdChFA7YMSYIa5eKDfDBX2Hi7OQ0crkCuGQBPHkvLFsc61srgFGYkfkbowRg/lirp/oJSABqhoiACDQagf0OhkMt82lCmX87lM2F8rLYZegzknjXswmcfgJ0sCvfclDu+1N1ih4JwBwAjrBJCcAIB9+xoUsAOhYQuSMCUSRwlH+heXzsR/t3rr2bBMbZlhcQaLcfdD4xeY7ATBlu2giLF8Czj4OtBGoFMFOSapeKgASg5oYrBCQAXYmE/BABEagiYHmf9wBqC0DLiD8yIZVG7/+CFv3DA/f1YzBmUk17WgEMj68sKQ2M5oA7BCQA3YmFPBEBEfAJpBKAo0+AgVvDpjmweWGIK4DfwEOvwsppsLJWFCQANS3DJKAVwDBpylY2BCQAs6GntiIgAqERsHsrrdjtb+faKp9/Sni8fwn6GftD5xOy7M6Ml8CWLVBhl2yui92iPuZLmLo0uW0JwCyZq3kNAhKAmhCuEJAAdCUS8sM5AlOwqydgK2bRCv9aCOe8LB6HTPRZ+Rg4aA/odk7IY1sKU54DBsBHb8L05cHsSwAG46RawQhIAAbjpFq5JyABmHvG6qFACdzMjZ7nO/ANpzCmQEdRGG7vCex7SrWv7fcP2e+F8N4EmDg5fbsSgOkzU4vUBCQANTtcISAB6Eok5IdzBOIC0BzrxXwu4V7nfCwGh/axFb8boLR7jkazAj54Cl7/Bsor0u9DAjB9ZmohAag54D4BCUD3YyQPG4nAbfyMtcTuLWvBRq7kLtp6m8bcKmtpw1+5ik6s4FSeoi1rKfV20hVGaQX8153QxHK7ZFgqNsHcx+CJz2BDhjZSNZMADBloxM1pBTDiE8Ch4UsAOhQMueIWgZlsxcOcV+XUEL5mNGO9nz9hN+/fQUyjI6sa1fExnMw3DK3yYW8+4HBea1Sf0ul8e+DULAXggk9h3IOwJJ2OA9aVAAwIStUCEZAADIRJlfJAQAIwD5DVRWESeJDzmM1WVc63YzUnMIGvGcp/fAHYlzmcx0M0JYNniyFhqS0AzeyN3ByS9fyYuTEbAbgFJo+Dse/kxlcJwNxwjapVCcCoRt69cUsAuhcTeeQAgT9wLRtoXceTpmyhnKYJqYjhen5LM8obzevNNOM2fs4mWno+nMljDOKHRvMn3Y4PAvYPIABXvw3Ln4Wt/gBNLAR+2fAM3PY6bMmRBpcATDeiql8fAQlAzQ9XCEgAuhIJ+eEUgdqrf8mc24MPOYqXk/q9nlYso4v3WjO20IuFTo3PFWfsZo/jL4eOQ+r3qGwBTL0F1vrVev8cPnkXvvgo9yORAMw94yj1IAEYpWi7PVYJQLfjI+8akUDiKeBkbvRhrvdIuCvLary8haaM58SqfXmdWcZV3NWII3G76+Ej4MRzoEk9n4wmAD+7Bd4D1uR5OBKAeQZe5N1JABZ5gAtoeBKABRQsuZpfAg0JQPOmK0toxQYu4MEq5+7jQubRt+rnZmymFwuqfu7OYo7hhfwOxvHe+m0NR/mfjN3OqpsSxgTgvFtgIjAvz2ORAMwz8CLvTgKwyANcQMOTACygYMnV/BIIIgDjHv2S39GUcioo4XdcX6+jWzOdc3g0v4MpoN6OMmHdFgbeWu304gXw91saZxASgI3DvVh7lQAs1sgW3rgkAAsvZvI4TwTSEYDm0jC+Yj69We7v/Uvm5mC+43SezNMICrebFi3hxLOhVz/o0BlmvQUPxjLw5L1IAOYdeVF3KAFY1OEtqMFJABZUuORsPgm8zBF8yF5pd2mPfA/n1ap2L3J01f//ilsKKklz2oMPucHWg6FrD1jyLswM2XZQcxKAQUmpXhACEoBBKKlOPghIAOaDsvooSAK3cw1rsD+R9MpP+AudWFnVaDpb8yjncDTPsxufog+A9Hg2dm0JwMaOQHH1r7//4opnIY9GArCQoyffc0ZgBR25k6tT2q+9j28soziZp+vUX0V7OrA6Z37KcO4JSADmnnGUepAAjFK03R6rBKDb8ZF3jUBgKoN4gtOpJPXltPGbNnoDbYHvU/j5F37CvrxPN5awFbMbYTTqMlsCEoDZElT7RAISgJoPrhCQAHQlEvLDCQLfsy3PchzrPFmXusQFYDfgCOCxJFXtvuBXOZzNNKcjKziZsfRhvhPjlBPBCUgABmelmg0TkABsmJFq5IeABGB+OKuXAiDwe67zrnkrp1mD3vZkAZdyj1fPap8CfAlMTmj5HMdU3Rlsvz6VJ9me7xq0rQpuEZAAdCsehe6NBGChR7B4/JcALJ5YaiT1EFhCV/6PH9OThRzFS3VqPslprKdNYIYdWMm5POwd9phLH/ompCeuoAnvsy9vcEgNe2EJwBc5ij35kC4sD+yvSxXbgXdr8RKgFWB3AdtK6lJgFXgps23XpD1e370rNG0LY2bCikYahARgI4Ev0m4lAIs0sAU4LAnAAgyaXE5OwB65rqUtPVjEDkzxKr3FAd6/X7Fjvfn5MmFqV8FtyzTeZn8O4B0qfSO2ivgeI+uYjIoANDFn4s142KpovNhK6VCgP9AZ+NwXfoNHQGnXmrhWvgSlvaDbudCiLyx4Ab6YCRu+jdX7IpOAZdhGAjBDcGqWlIAEoCaGKwQkAF2JhPzIisDH7M5rHObtt2vNOrr49/PO8eSGGyV+bZx5swufsYsngdIvy+lEO9Y4mU+wczc446zYwZj5d4DptY/9Idqq36m1httmN+hyKjRtXfOFjT/EVv5Ke1T/ftUbsHxc7Gez+1H66DJqIQGYETY1SkFAAlBTwxUCEoCuREJ+pE1gC025xbt2rfDeUg/gLQ7k7bTH7HKD0lK4/o5qDysrYeZV8B9fsJ2Z4HyTUqjcAh0Ohc7HNzyqik2w+h0Y84zuAm6Ylmq4TKDw3q1cpinfsiEgAZgNPbVtNAK2CjaG0SykV9Y+2IGODqziO7bP2lZQA8UmAO3KtnN/Ai1tU59fTAAuuB02zahJpXk/6HkVrHwRupzcMLH138DHf4/Vs0e/+d75qBXAhmOkGsEJSAAGZ6WauSUgAZhbvrKeIwIfsDevcXjW1nsxnxMZTzeWknj375G8xAo6ZXQVXBCnDvR2J7qxArgnePeWpDqfPKzW6eZk4ztsO9j7Yiix57wJZf23sOhvsV80aRFb7Wu5HTRPeLRbH681H8Kyp+ChsiBUc1NHAjA3XKNqVQIwqpF3b9wSgO7FRB41QGApXXiAC9hArY1jaZJryQau4G+0ZZ3XchoDmcww9ucdOrGCWWzFw5xXx+p5PMgWmvEYZ6fZY3X1xl4B7OifvjWPhtwI076Hp56oO5yLr4X2q2D6PfCef3I32aD3A7brUutpfBPo80sot6O9Vkqg1OqkUcpXw9zfw4Nr0mgUclUJwJCBRtycBGDEJ4BDw5cAdCgYciUYgWwEYDM205a1XkdXc2fSDtfShs2UMpe+jGNUnTo/5Q7vercvGM4LHO0dPMmkXMD99GNuJk2zbmM67LhW0ONyaLl1zNyKl2D8JIhrrSNPhu12jL22+t3YAYyHNtff9cHAG36Vc4F+t0CzDlm7y+bF8M6f4IP1UJ69ubQsSACmhUuVGyAgAagp4goBCUBXIiE/0iLwA9t4N3asJri62JVPvSvZ9uLDlH0tojvjOInFpH5GeTCvM9JbD7MTrrvzEkfVe23cML5iMr6SSuh5H97nMCamNe5MK28DTAdvx6Tl4eu1H+wxBNoMD25x1ZvwwtOxa+8s1UunJFfgtQC28k3ubXn+toeeVwbvo76aG76DJx+DWXlOCCgBGE78ZCVGQAJQM8EVAhKArkRCfqRNYDb9eJDzA72ljuQdDuLNet98V9HeuwN4ET0b9CV+FZxV/C3X13t7yDb8wHQGJrWZaKfBTjOssAewLbHTs5Zub6uzoZ1t/MugrPsc70Zje4Rsbx5/vK+mkVLA+hvk/7qkLXQ9AzZOhbeXw77W7kBoZQ7VV+wa5oq6Fb78Oyz/xvI75q9IAOaPdRR6kgCMQpQLY4wSgIURJ3mZgsAmmnMrv0zJx3LvXcR9lLKZEj9V85scyCT2qtOmkiaBH+cmXgXXkACs3ZElkD6bR71ftyD3pxtOAIb/qdoLO4zRJKRPoS+uhPG1Bmjazf6rSvtiGaDL4eHK2LV5TZrB1b+Btvbuk6o09TNJ1xKBFWUw6xcwtwJez9NfhQRgnkBHpJuQ/vQiQkvDzCUBCcBc0pXtvBCYR29e5kivrzN4nMc5o6rfC3mghg/z6YVd+7bGW7+qLnYauIKSQKt/2Q4qH6t+5qPdunH4ydDhwGw9Tt1+yyp483p4P0UVW3Ec4b+WeAGf7RVs2xW2OpeqC/jiexG96ilWAO2l+bfD/OkxAbghd0OrsiwBmAfIEepCAjBCwXZ8qBKAjgdI7oVPYCKH8D52brW6XMPtNKWc8ZzID1UPMMPvez/e5ZCqYxLh249btA8Zu4xutxwLwIqNMOkReDXxzreAw9rJr2f7E+2NaOu7AjYEZlwJ84mdTM61CJQADB4X1WyYgARgw4xUIz8EJADzw1m9OERgJR14jLNY5u2Ii5XezONi7mMSe/KKv5qYC5d/xS15u8KtLzA6WwFoK3FWkuzHi/NZ8iGMfzQmyNIpJvzsTuCp4J2jbmm/AE44C7p0T21pwR0w7we8ozx2HmRLOp1mUFcCMANoapKSgASgJocrBCQAXYmE/MgbgXJKuI+LQrlFJKjTJZRzKk8x2JM7uS8mqC7cGXpclGVfthcv8ROrMrafr3aZ8DB8Hr/0N8surXn1Q/xqY1P8lcLewOMh9BHUhARgUFKqF4SABGAQSqqTDwISgPmgrD4ajYAdEpmBn+jO9+ILdmIKO+TEp62YSUs2soZ2zKeP10cpZRzOq+zOpznps7ZRWzwbtQv0uDCE7uInOhJN2WpgrRXBxQ/DAx/DxoR6/fz/t1tGGjGPc9YQJACzRigDCQQkADUdXCEgAehKJORHqAQsSbMlct5AK77GLjPLbenMMvZiEjvwrXeziN1VPIETmEN/TuJpdmRy1g6YFrP0KpaHL1mxQx9fA0cAe6exny6lY/ZJZf/FHwPHK9oqoAlA+9cvG6bA+/fCqk3wlf87SwRtZTF4l96tz4LAO4xkf97NwkLmTSUAM2enlnUJSABqVrhCQALQlUjIj9AIfMdgL5lzGZaWOD+lP7M4n4dqdLaO1myiBZ29nWrpl2OJpU2xR59Dz4fe/aGVf+jh4b/CquUwANjFN90GvEvtBpwHHXZP0Z+JOfsEaug6jbjwS/y0sjYm+uK/SxCA1tvmpfDlTfCc37UlnD7J/3/za2yaCCyOr3hyFlbRAbs/OZ6AO01TWVWXAMwKnxrXIiABqCnhCgEJQFciIT9CIWCi609cm7WtjqygL3MZxbgatuwE8QfsU+fmj6FM5mSezrrfRAPHAT0HQO9f1DX78J2w5Hu8h9u7t4OS5tDv5ga6NzUZLyn28lW9bp9Stv8vscQFoJ/Xr2oFMCFly6a5MP/WWCOjYRfpdTgc1n8B8xfBiwEJ1Y6jrbBeyP20zvmZ37oOSgAGDJqqBSIgARgIkyrlgYAEYB4gq4v8EfiAvXmNw7PqcBBTOZ0nqhJH1zb2Ogd7j5atTGMQ2zCd46rWvbLquk7jIwfAXkkEoFVc+mSsert9oEX/AP3WPtARbxIXdvZzqjq1zSe2sU80fzUwLgDn2D3Afht7BGxroJMCuBivkkzI78W/OYJXq6zMpQ8L6ZnzvZUSgGkETlUbJCAB2CAiVcgTAQnAPIFWN/khcDM3ZtXRtnzPcTzr7eMLUubQlz7MSykWg9ior85xA2DXFAIwbdvJVvXMiIm3+KPdoJ9OKVYQ4wLQZJpdC2fFxF+6h0C20JSJHMqHCTe2dGI5PVhUNewldPNS+QznC05kQto4gjaQAAxKSvWCEAj6JxbEluqIQDYEJACzoae2zhFYQUfu5OqM/OrCUi7jbpo1uEEuI/NpNxoNtG4CnY6BjrGtcNmVVAIwbjXxEW+QnpIk4IsLQHvpn0Fs1FPnK4YxznuI3FCpZCe+4ASeaahiRq9LAGaETY1SEJAA1NRwhYAEoCuRkB9ZE1hEd1bTnserb6ENbNOugruEewPXz0dFy4Vnq2gdj4JORwfsMZ62JdkKXbKULrXNmgisvfevvq5ricDNi2HBX2HZCjw51sE7wFFd7NGulTasx1ZPE0s/5lb9OJVBKeNodyk3STiCPNd/2Gy3rAzme+/e554JK4UByaWsJgGYLUG1TyQgAaj54AoBCUBXIiE/sibwCbvxAsdkZMeugmuf9oPKjLoK3GhHYNd0BGBtgVdbBAYRgIG98ysmEZobf4DHH4HZy8Au95juVy2j1Ltqz4o9yn2bmpcUH8Bb3n5Ke7T7PHYGum4ZxlecxLgaualrP/bvyhKu4O/pjkQCMDRiMlQfAQlAzQ9XCEgAuhIJ+REKgUz2ANrK0QG87cyj3ziIw7wr6tJYAUz2iDeeqiW+shfWp0+SZNCJAfz2r/DUdzVDupY23Eb9Gxo7sJL1tGazdzlczWInrY/mBVr56aZN8H/JcC/XYmK5hH/Qi4WhzCczohXA0FDKUK2LdQREBBqTgARgY9JX33kl8Huuo4IStvjHE+yGjiF8k7O9Y9kOLqNHwMny92XrSGL7htLHJNSdcWXsh0/8BNX2+PcOrqHcy26Yfkk8BZzqEfFPuYMOrE7feD0tJABDxRl5Y2F9B4s8SAHImoAEYNYIZaCQCNg+wTc5yHP5NJ5y2vWMBKCNKPHmjvhtHmGNNMnBj9qmbR9g2QJY7G+pnAZ8ZImiAbuhZYL/GDhdlwbzHbvwmdfsKU6r07wnCzibR0PPFSgBmG6kVL8+AhKAmh+uEJAAdCUS8kMEahFoUACa0IuncKmPXtDcfkEi0MCjXzOxciKsmBBz7UPwHtCaiHrHchfSxbsib16tAyBBuk5V50e84L00gJl0Y2k2ppK2lQAMHWmkDUoARjr8Tg1eAtCpcMgZEagmEBeAJa2h55W1kj3HD3QEEGSexcyeutYNR1xwWr8pSvl6GHc3zJ4ey/9nF/LZjj77/yls5x0ECeuavlN5ku2ptdkw5EkkARgy0IibkwCM+ARwaPgSgA4FQ66IQCoCF1wD/QfWejUu6hJv5UhlICwBmGi/nn7HPQLT7bmvv/pnj38bOgSSmNA56JV+F3MPvVmQ04kjAZhTvJEzLgEYuZA7O2AJQGdDI8dEoJpAUgGYmNbF9uYlXMlWh10uUsDEO0lxMGTpE7Dm/epDIKkEoN2+0p7VHOM/yjWzEoCa/cVKQAKwWCNbeOOSACy8mMnjiBEYugscfSq0bptk4EH3AVrTPIvAykpY+SLMeAle9xJCN+U1DuMj9uQ4nqGln86lH3PqXL0XVAAOYAbn8ogH5iNGMIOtPTF5FC+HNku0AhgaShlSGhjNAYcISAA6FAy5IgLJCBxwFBwU9CaQ+hCGeRgkWT9JVgI3fAsL/wbP+ncCl3tpeJrRnLIayZxrm/sdv0yaCzBZt+1ZxRG8wtOMooKmNKHCuw1kNGMYxA9ZTyoJwKwRykACAa0Aajq4QkAC0JVIyI+8EVhJB9bQjhIq6MP8vPWbaUd2edqpp8FW+2Vqwb/eLdefPLVSxNgK4PdXwSRgRkDXLTaPcjbL6RKwRf3VzuNBtmJ2VrYkALPCp8a1COT6z1DARSAoAQnAoKRUryAJfMzujPBSEcfKCjp6p1Dt9ohmbOZExjOEb50eWw/AtN+Od2XpZi4OgiS6lEQAfnAVvJaG2xM5hPe90YZXbuTmrIxJAGaFT40lADUHHCUgAehoYORW9gSe5FSmsw2H8Dp7eqmI4e/8mCV0rzJud8uOYlz2neXYwpHAXtkKwFzuAUySjsZWANMVgMlWAC3VSxnNGc9JGVGWAMwImxrliIBWAHMEVmbTJiABmDYyNcglOX1OaQAAIABJREFUgc00oxlb2EwpTSmnKfUknEviiG1Ds7bPcwzfsgPdWczF3FdVcyZb8TiWYQ9asYFr+HMuhxOq7bNKYeAfoElplmZr7wWM3xdsZuOfTvHfBf20qpUSpmIzzLom5mf8Krh0vF5PK/7MTzmG5xnOVyyhK//g0oyukevHbM7iMa/75t59JOkVrQCmx0u16ycQ9E9KHEUg1wQkAHNNWPYDE1hGZ8YwmgN4m39xKjvzmbe5v6V3j0TDZQYDWE37qqvGfsZttGNtww0LpIbptkt2hB6XhuBw4nVxZs50duK1cfUJwGTXyyUIQLsKbvH9MG0edAP+DcwJweXvGMxzHMs6kh2HDtbB6TzOYKYGq+zXkgBMC5cqN0BAAlBTxBUCEoCuREJ+8D77MJHDapAYymRO5uk6dKaztbfCl1i+ZigbsCMTsbITn3MCzxQN2b2bwshLoPVQB4ZU+3FyggC0q+A+mBC7/9ei2dAeQEvfsoRuHM2LDQ7sn5zBNLZtsF6qCk3Zwo94kV39O4WDGJIADEJJdYISkAAMSip69a4Dzge28u9Ofx+wBynxXer2zvcP2w4ELAT+B3gwAZMtEvwRONu/fWk8cDmwPgVKCcDozTFnR5xMAJqzfZnDhTxQ5bfdJ/sAF9QQe6kGle3+r8aGdSdXeS6czFiGli7g6jsa2yO//0QBWGv/38cT4eUJYJqwPgFocbTH8XYiewulJN4EkmyUn7EzL3FU4PQwqUgN4WtGMzYwSAnAwKhUMQABCcAAkCJa5URgOXjJqzoBNwB7evecx9K4fgN8AN6xthHAw8CPgDd9Xvb7c4DTvGT68BAwGThPAjCiM6rAhv0IZzODbZJ6fTiv8C4jAwm/uIHOLONC7qc1G5wmYXve7uESzudBOrDa8/X/uIzF2BngWLmGv3DadtD1dHj4Tli53Pa0lTF69HpGjIQmtR/rZjviuMiL5/dLlkcwyd3Aq9+H5WPB9gHGUjTXLJbk2Q513MnVNV6wvXp2Krt2uZ8Ls3rsW9veIKZ6groFZYEISQAGwqRKAQlIAAYEpWpsD3ztLYLEBN+j4H0ibPTZ3AN0Be94nM2rRf6K4T/91/cB3gbv2OOKJDy1AqhJljGBCprwH3ZN2n5nPqeZtwaUXpnEnryCnXkNr+zFvzmCV8MzmANLL/AjPmEErVnHKfyrKnfdzdxYb2/9mcXxPMMf/riClq1CdixI4ugkp3/Ni1VvwrKnkwvA8ZzAl+wUsrPBzXViOScwgf4BdyZKAAZnq5oNE5AAbJiRatghxdhK3+HAzv7jXhN0hyTAORP4A9AHGAR8568Wxvdc23d4e/x7bIqtOBKAmmlpE/iGHfiKHamkCd9531HqFrvf9QyeSNu2NTD7Yzglo7bJGtkHfg/vuxGcyr9CsxuWobn08W6xWOkt+sNufFJ1L25DAtDqn8wYHv3jN2kJwEX3xrzvdDQ0713PSOzTyoRgslLr5G/tKtOvdFMAtmO1J5oHMj1QCCUAA2FSpYAEJAADgopoNbv06UnwdrPbo2DbRjPL3/vXDvwcFjE4h4K3c7o5sDfwnpfdghrPNuYC/w3EVwUTsUoARnSSZTrsBfTEHsmV03BWYVudOt/bhZC6PMux2OGNX3Irtvr3Jgd5lctokamL9bbLRpjmwqHfcx0V3vVo1bldci0AZ/8aHlkJdpbkyKuhVZAzFfFw2yPfeGaexPQxSeC4KgDN1WN4jt34T6CQSgAGwqRKAQlIAAYEFdFqJuB6+Y967QDIMGB3wLZ/1xaAthr4UgMC0FYD7XCJBGBEJ1RYw55Hb+7j4jrmOrKCc3mYYQNWUb4WtiyFv3AmZySdcrHmltLjSU4Py7XAdnoxn9N4kvasCdwm7IqbaM5iunspTRKTUsf72Z5v2cfb6gsPcGG93e/Kp5zJ81zxR2jRCrashO/+D1bPg1fsW+HBMGSXahNvPA97fhf7hjkQ2APYLtsE0yk8tETQC26Dr5bDR6tjh0KsvM3+vMP+3r29jVFasd5bAdyO7wN1LwEYCJMqBSQgARgQlKp5yyxLgQsAexuv7xGwvZ/bO5odGIk/Ara5Zrvf630EbJsL42/FZsSeJauIgBHYSAsmsZe3wfRd9ku68ncEL3PVyA85+lTYNAfWfwnvTYTVm0mZcS3Io81cRWBrpnuHDRorR+Bs+vGg9yedXWnBRi7vN56rhn3PgMOhfB1MfgRe+z52AixZsfQCdtGanQyzh+K2E2/vHAnAeP/rv4UHHoGlCZr7A/ZmOZ351Ptum98S5BTwNP/xi3lmwvXjmIsdwD+hk1+X1VsREZAALKJg5ngo9lzIBKClhrEU9nYIpGfCIZC7/QMeqQ6B2GNhOwRiB0d0CCTHwSo2809zEsvowgJSbxKzk5ujGcN1v15LN5uZftk4E9YvgJf/GftWUrs0pgA0Xy7mHnqzoFFCZiuAi+jh3VaSbAUwqFM2hmP3WcCxsYtNMObT/gSv+3/sloQ5Lq+atoPuF0HFC1DpB8REor3B5GoFMHEcC+bC6hXwtiWxAuZ7j/lLmcihfMwenMeDPOS9zeW2NGcTF3MvXVkWuCOtAAZGpYoBCEgABoAU0Sp26ONZ8D6ZTLRdCxwMDPZX8uyLuz0b+o1/Ktg2WFkamLd8Xjf5aWDsI8EOf9zvf9lP9c6qPYARnWhBhn03l7LI+76RvLRlA9c1/wOHDYY9zoJkFzSsfBWefDb2Lca2jpXR1LvSa6l3R0SqUkkpm2vc4Ws1U50eteS+QfYklvpbYw/iTfZmUhAEOa/zO35Z1YddYVd9F1t11yWUewduKimhCRXeVXmXcTedWeGlRD7hAmiza0wALvgTvOyv7tnJMHvzsJNgW98FleWw+EFY/3ns22RisTqJD2TbjIBuZ0GTEJ/Slq+B2f8P2AJP+W9oNmYbTwmV5ONLga2aXsf/phVXCcC0cKlyAwQkADVFUhGwI4r7+qt6q4B3gF8BU/wG9nTWzu9ZbkBLBG1CMHGXvb1d26lgy/tnj4/tlvsrlAhaEy4TAnbbxqNeWsnkZeHON9PjorqvbZoFzftARRnMHAvPfQTHA3Ya6b84nEneeaXUxfbAJTuta4dEZno7HGqWA3mLtziwwSFaehUTGq6W5zmatUlU9DAmeyuGdltGH+Yx0jvrFSv1CcD467bFo8/FsPQ7mGnvKAmJQ+N2ugDD/R/6+/+2Pxg6HwdNGj7vExjp2o9gySMxAfiWn/LnTB5jED/kRQDuyJeclCTXYH0DkAAMHF5VDEBAAjAAJFXJCwGtAOYFc+F18jVDeJ5j2UjLpM7vySQm3WXHDKrLhvXwxnPwwZSd2W3g16zb1IonPtuPJfaY0c9M/m/61buqaNYK/faOfEa7IQFovmztnxJb6a8MNuSfxcrWZ20/cNu9YiuBDZXPJsH8WbBvR+h4RPLaFRvB0s9M/g5v/fUGP8dhPgVgJnNLArCh6Ov1dAhIAKZDS3VzSUACMJd0C9S2rfz9i1PYlEL82bDO5SEeusuyE1WXKTfADct34BmOpzXrvfQmq7198+mVTD6k0+uheGrbQ+OD2sFeN0LZwpqPgLMZpYk/OyziCch6DoncaZtOgLVroGwTtG8KO3SCg86GFtvAX2+OpTHY7zJY9HeYvtwOE3lPgb0Vv134D0fxEqVsycsKYCZzSwIwm5mktrUJSABqTrhCQALQlUjk0Y9yT5hZ6OFuLvP2k1kZy8nM93KKN1xO4mnuu2kyndqC6cQtK2DK/4Pr2ZlnvQe+2RXLIWi3NbRjTUY3imTXe2G1tv0g8ajZXhG7LzKMYo+O+wGde0Gvn0LTNlC2GP75OLTq1op//zuWq/FbduA1L1+9bVxeyGXedeU1i+Wr6ghedkd7gD07iYP52AMoARjGzJCNbAhIAGZDT23DJCABGCbNArH1DiN50zsekF05luf50Z7Qb8Acmr+0mA2r7dRROAIw7tlI3uHgqquus/NXrTMjsJdll98BthsO656Cu2jvrfImu7O5Pau8e3b7eTs+axZbrbT9hZbdPllxVQBOpS+Px8ajNDCZTSG1SiAgAajp4AoBCUBXIpEnP17kKC/tRjZlB75hKV2rUpjYqs8ZPO6d5nyMs+pNG5NJv5ms2mTSj9okJ/AUp7AD33IoX3mbAt5gIP8k9cbAziyjO4s9Yz1ZyAHeWba6xVYY7SSbPW62NAYuCMAldPWSdA/111Htmr6xHMOq2KqmBKD+SLImIAGYNUIZCImABGBIIBvDjD2eG+l3/HiCA7fxM8pozn68V+PE6CveCVxbz8nuLchW5UbyLr/j+qpe4ylWNnu3EtYsp/M4W3m3GVqOukPSFqASgI0xu2J9/pmrWUVHLNVOU/8uj9pX16X2rpJf8Ttvf99R/h2VlpbAyol+igP7vaUueDhPt8PUN5f+yC+8vxtLuVNzrJbA6FYJwMabhkXVc3bvvkWFQoNpZAISgI0cgEy7t8wcZyY0tg/QtbTx9vHNqpUq5Rwe5hHOzbSrOu124nN249MGrymLN7T+t2amt3zyCnt6IjDx7tuGHLOruy7kfrqwvKGqej1kAn/gWjZ415JnUiq50ctUFTtQYqeRLR+kvenUPltu87cxVgDn0NfzzxJSz8buSUlWqo6BaAUwk2mgNjUISABqQrhCQALQlUik6Ycl7t0xoY19RD3K7rzI0WlaCrf6EBawmaZMpbtn2G4KsWvXOrGSbYBXGch4TmQ9bdLq2B4zm50e/qPFtBqrcsYEwhKA5sC2lHIv+3AEU9ieRdil55ZyxooJQEv0vYZ2Xr7Dtd615+GXA3jLW/+OZ4N8O0D+SJAADD8S0bUoARjd2Ls2cglA1yKSoT+dgVm09VYAU69kZGg8YLPWrOP3PMBmmnA9F9GWtZzFY3TEcppbIug+PMWpGX+4n8B4duLLgN6oWhgEwhSAtkJ9G7/A9gi2YR3dWMEFTPDctFyRdu+0PYJdT2v+wWVhuB+SDQnAkEDKTNYbcIRQBMIjIAEYHsu8W4pf0GA51RKLXS+WbC9ePhwczhcczzM1btzYTLMa+wXD8GNvPuBwXgvDlGw0QCCbR7Pb8ANn85jXQ1wAJuvuBm72VuYsRdG9XNxgsvD8Bk0CML+8i7s3rQAWd3wLaXQSgIUUrQRfbT/VQe2hxQD4N/B5wsLYWEbxtZd+t3HKKMYyjK+Z4j/ge5ODWOxdbR1ekQAMh+Vs+tGfOfUay0YA2qN7u4LP7i22Fb5HOCfpKfFTeMq77fgLdmIKO4QzuNCsSACGhlKGsjyCJ4AiEB4BCcDwWObFkm1Zt6S/OzSD7pdA6yGxbj9+Bzb+AGs/hY+BlzmMf7NPXnyq3Ymt+nRmOZ9giT7CLz/iBS+9SLJcc+H3VrwWpzGQZzmOn3FH0kF+xs7Mp3fWcezLHEYzhvas4QuGM8E7A1x/ac4mDmWiJwjn+Qc1GmqTu9clAHPHNnqWtQIYvZi7OmIJQFcjk8KvnYGdgL43QWnXmpUqNsCi+2HJFHiKZt6GetsTuIDeaY1ya6ZzDM/zKGezkk5ptc115Qu5j77My3U3kbD/LvvRgVUM56s64/2G2JV+Zd7dHdmXS7mb9qzm71zOOuz6mPrLT/iLd3DIHhvbbTVB2jRkM/PXJQAzZ6eWtQlIAGpOuEJAAtCVSATwowtwmH+dVt+bodR+UassugfWfwn/Ajb4r6XzCM/SO1/B372Wd3EFy6ilMgP4mbxKpXcoJIzTnSYOWrCJ1lUjzNgpNUxCYDXtuIOfhc7mIu7lPi5u0K7ljRzMVMooZQIn8C3+MneDLcOvYPktW7NciaDDRxtZixKAkQ29cwOXAHQuJPU7ZI+A7b+mzWDoKJhv6WBGQAs/sVpcAK4BJvt3rv6LY/mMXQON9Gier6r3FgcGXnkZyuR69x02oYLd+STtJNCpnLbHzMfxLB1YHWhcqhScwHvsy+scGrxBDmraPJxHHz5nlxxYD2ayhHJO4UUO4T9x2ao8gMHQqVY9BCQANT1cISAB6Eok0vTD3kRsAfBlduOYHabQq/k6746PTTPhzVWwPzAD+BB4iNP4virjWpodBai+M59xJC8zmWE8z7EBWoRT5UweY1DKm2XD6SOKVtJZMc4nn8F8x8587nX5L07NadeHMJFeLOEqvveSVtu2C10Fl1PkkTEuARiZUDs/UAlA50OU2kE7ZTuG0d61VXbK8kru9ipbWphewFT25a+MDG0fVypP7Jqwy7ibe7gkr+lnJABzM3lzLQCP4TmGMZlb+WXgAVzH7xlKOesp91a9v2dbnuCMwO3TqWhXHR7IW5xFJaWAraZLAKZDUHXrIyABqPnhCgEJQFcikYEfMxjA04wK/Jg2gy6cbGL7suyE6B7eeWeVsAnkUgCO4AtuYwLve4mfa5b7ucD7hR07+smAB6pePBjY5hc1686fDT//x+48veqw0L90HMibHMA73p06tgPWVtFPj3WvR8BhT7YI2pMAjGDQHR2yBKCjgQnq1vMczafsHrR6UdTrziJ+7K92FsWAHBtErgSgCfefM55LmOLtT/3aF3sL/PH7q2zsvi/08xVXfWgmPgN/fm03XuCYUAnGBaBdtzjS9txuD4OnSACGCjnCxiQAIxx8x4YuAehYQNJ1xyUBaFfB7cp/eM/72KwuR/KSl7fvIc5Pd3hJ62sFMBSMKY3Y1oKnOC30Ti7nXq7eYT79j4yZXg7e/rrZ46DzSfi3R0PzvlASIPvMnGdgzGt22KlfDV8f9FcSMxnA+Tzgpcaxw0WlzeGiK6C0HXT5jQRgJjzVpi4BCUDNClcISAC6EokM/LBcbWM4JYOW9TexE7vN2MKl/IMu3sc0jOFkvmFoyobN2MyN/K7q9Sa2eSrhna6yDKaxDY8nbN6vwM5Zxi+0S2cYlezHexzCG+k0Ut2ABCwNzJ38JMPYJO/E8gAOYBHnjYCe5wZ0pJ5qG6bBi3+Fr8qhOXgpx+1GHFu1W0IX/sZlDfpvc7Yry7iCf1TP22awYyUMbwoDbo/9evUG6HCtBGD2UZMFIyABqHngCgEJQFcikYEfuRKAvZnHyYz1EvHGS0MC8HL+xhmlSxnk3+LV7Rwo8VPTmI1F/4Dvv4LXfYN2P/BEDuUj9gw88l7M95IJd2QlR/JK4HaqmD6B6WzNR+zhNfyO7dM3UKuFCcCeLGL4CDgpBAFo5j95Br5IuA56p77QrzMs+RJ+xx48wVH1+n01f6Y/q7x7SZb4p+r7XQ9l86HtbtVNJQCzDr8MJBCQANR0cIWABKArkcjAj1wJQHPFHtvuyUeeV3ZfrCXkXUHnlF6aABzYcSk/+23yKpXlMPlqvM3/C72TlW25nZ8HGnX8WrCtmeGt2Kjkl8BEDuF99suq0yF8zWjG0qU7nHgO9B2QlTmv8cYZUJZwjXHLwdC8J6x4Hia83J3rOKneO6iH8wXnMoG9gfeAE4Bt76rrlwRg9rGShWoCEoCaDa4QkAB0JRIZ+GE3JTzHsUxmxwxa19/E9vPZbRtWNtGC9bRJ2cDSZvwPbzP85go6JbmdxBpWVsLaf8OLj8O3wF/4SdJr5k5gPP2Yw77ExKKVJlTWWI0MfbAyWC+BBfTkHi7NmlIf5nIR99OmHVx+PbRp+Ea4jPosWwgTfws/5XSmMrheG5ZH8gIe82a6ufMLCcCMmKtRcAISgMFZqWZuCUgA5pZvXqynElP56NwOZJzIi9zQ8QuGplj9iwvABZPgjX/aXkCInzQ1oXkFf/NWGM/giaQur6AjzSmjDevzMST1UYtAWAKwFeu9WB/Beg78HTSzd58syoZ1sHED/HAT3v01hx4PQ3eBb26C37IHLzfwCDjeta0EWt6/c1nJrkkE4Iql0Pkmr7bSwGQRLzWNf6EVCRFwg4AEoBtxyMqLxhSA2/I9d/AEh/069vgtVakoh/uvhnle+o8hjGW0V/VExjGcr+odv4lF+5A+kQlZcVLjzAjUJwDtC8BwvmQGW7Pcu5um/mJxtDyA2QrAT96FiV/24b1vk0+6mQyo92rCZF7atoexl3xEm+HVr25eCpMehv3tWh0JwIbCq9cDENAKYABIqpIXAhKAecGc204aWwBewRMcsx0MvCr1OG0P4HtXxw6B/J0fs8RP+mEHTs7mUVr6j5uTWfiW7b3UHL2JZ4zLLU9Zr0lgIy08gZes2GnxbZnGPHqzmvb1XtHWgo2cwyNcdMACRpwA3knxDMq/7oMbPz+FJXRjmZeqObxyTpt3+NGgN72bs/9/e+cBJlV5/f8PbKH3XkVQxAY2BI1SVFDEBnaTWBNN7DVFf/9ImjGmGEussaFGJVGwYEEFUUIUVAQjigWQLr23XXb/z7lzZ5ndndm50+/c+b7Pw6Mwbznv59yZ+c5bzrFDD5ZWccFC+H+hIbQCmD7UBduTBGDBut53E5cA9J1LEjPodY7nA+cmbW4+VmwF0LZuLZjLhe2h66+i2x9LAFptW0Wyc35WzuFZ9mRhYhBU2zcE7MJQrDh8v+Q2Djm0zLkEUlSUuMkbp8I5L53J2zt6ZSy9oYVAOobJDOY/zjvK0ira+cDbJQATd5haRCWQm09qOUMEahOQAAzAUzHO3U49i39Vm807DGYqQzI2Q4vi91Pur7qZ26MpnHMZbASauZLUTu1tAZb9JRRq40N3BXANbejsZHWFZXSmgpAiaMsqruC+jNmsjjNLYAUdeJCfuINUMoAPaM1aevENnVjL2f2hVxJhYJbMhEueGMgkjk96ApZBxs6SRpZLeBS7Tf9f5y4wdOA7TmJitToSgEkjV8MoBCQA9Vj4hYAEoF88kQE7FrIH4xnFRmfnKjOlNWsYxXi6spTw9/pU90aliUD78vy4xtAzOYwySjjSCd1rt32P5C2GOf+vs36Z8VO2eo0UgIN5hyHY07C7JBsH8Jkr4S26OpeFvJw1DI9oN9TrU+H81bLUNGdTwigkABNGpgZ1EJAA1OPhFwISgH7xRIbseJSLWEz3DPUe6rYl67iAJziQDU7QDYupZl+ati1sGb1sBTBeicw/241FXMxj8ZrodR8SsNBEFuDbVv0G8kE1C0c2hp434sQCTLSMuTLU4mnO42v29tT8ON7kSKanfDhCAtATblXySEAC0CMoVcs4AQnAjCPO/QC38UvKnIRZsYtt5xaxy6kQr260Xiyt1i0RqeAi69jmbv1SKN+Js9Fr56pqlu9oz0Nc6mwF25nAm/lD7sHJgrgELF+ulfJyqAwttMUsY6KEWIk7gFvht1fiPJ3PcRZfOJlJQl+j4efOtnFtdTBcDuNDhhORJsTrQFHqSQCmAE9NaxGQANRD4RcCEoB+8UQG7SiniMe5kKV0jTpKQ7ZxIq9yIP/D6v6e//NsTRM205UlTnvbXrObk5YvxMK9hPXAKT3hoGvhrX9AP2DqPJgbijFdrdht39n04xye8zy+KuaGQPum0Lo7nHN5aPwXnoA5M+u25Wc/hcax00nX2XjWlfCiW8POvFoeaSvDmURr1mUUggRgRvEWXOcSgAXnct9OWALQt65Jr2EWTNlWSBaxR62Oz2Qc+zn5OUy01eNVTuQjDotrgN2YvKbTM5x3tIV2hrdfhtEng0Vm+wpYOQ4atYFDfgzNI7Tn5o9g8mPVzwZO5ER6Mp99+SLuuKqQewLH94YjLgTcYM6zn4BlM6mx6bvbTstVM/wH0GxgcrZHCsDkeki+lQRg8uzUsjYBCUA9FX4hIAHoF09kwQ4TWR/Sv9pIl/EAHfmu2r/NozfPcm7Vv1ke12OdCH5wD1dX/fu19e/mN79dRzP3jsm6NVRLBVe2CuoXQ5E9ZTXCfvz5Stjs9vQwP2InpVzEYzRmWxZIaIhUCdQUgLs2wpLfwbdbYXJE56Pc/+95GTRLIWOhBGCqHlN7vxCQAPSLJ2SHBGABPQNTGMI0jqoKuWJT/wV/oEGN0Bjz2dPJMWxBe1uxvhohCzrdn5nODd5kznRt3QI7tsFdodRaKnlK4Og9YcglUNSy+gR2LofvHtj9bw17QbvzU59k2Up4988wfWvoLGA2i1YAs0k7+GNJAAbfx/kyQwnAfPFUmuw0EbiW1vyP0HJMNAHoZSjb0f1Rgof6N6yFCU/Bgi+9jKA6fidw+YXQPv5JgbRNY9s8eO8pmJ7ZI3+17JUATJsL1VHOQvYLvQjUJiABWIBPhYXqmMRwJyiube0WVV3X8A7DInmccTC0vwQ+/i989T84+8ex21fMgMfeg8WhnKpRSzegl/vKO95NUc0cEbj8CGj//ewOvuI+mDcXpmRxWAnALMIugKG0AlgATs6TKUoA5omj0m3mLvcWZTLiL2yLxfmr3yAUAqRiVyi+21UxUsFVTIDfvBV7FraTeBLQ+TJouDfMmwfPPZzuWau/dBIoqQ+3WGIOWw62691ued/U2Ssw8C/pHC3UV8VO+PZGeCJOyJl0jiwBmE6a6ksCUM+AXwhIAPrFEwGwozFw0UBo94O6J7PycXjuQ1gTUa0V8MPjoPXuUG6seQGemkyGg3wEAHyOp7BXWxjcM2TEmq0w4X+7Dbri/6CdXQtPY1lwNUyogA1p7LOuriQAswS6QIaRACwQR+fBNCUA88BJ+WJiCXBsVzjkfCjtXLfVK56HiVNgsVtNAjBfvJyYnaN+CP0GJNYmXm0TgNMq4Jt4FdP0ugRgmkCqG4eABKAeBL8QkAD0iyfyyA47p2cp38JlLvCt+5eGwDHt4bCboH6j2JOqLIcPX4OJb4TqSADm0QOQgKkDh8IJpyfQIE7VNeNh3NvUCFyUvv6j9SQBmFm+hda7BGChedy/85UA9K9vfGXZmRfD/odEN2nSeOjwnnPsi36d4aR9gWEQJ/scu3aFMkj0+TiUM7hm+RgUFtpXT0HixuzZG35wBRTViAOZeE+hFk/fB1/ZL44sFgnALMIugKEkAAvAyXkyRQnAPHFUrs2sSwDGtK0MWB3KDfeFm+CjfWdo3S7UYsE8GP+KF4mVAAAgAElEQVQkbIwINWgv2SpieGs41/PW+KkTOGgA9OkL3YuTTwVnVqxdBf96FJZn+eGQAEz9GVAPuwlIAOpp8AsBCUC/eMLndvTqA+dcCiWlCRhq35yz4f1v4fWpoXbHj4Yjjtndx+zH4eUPoRzoBIwYDC07wLQVMOPdBMZSVd8TOLAEhp+dXDq4TTNhnIURmp/9aUoAZp95kEeUAAyyd/NrbhKA+eWvnFr7izugoV31TaTshCf+Dgu/gXP2gj0urd6HpRDbuAMq3R3jxi2gfimULYdXH4dZSxMZTHX9TMC++A7vDyMu8G7lmxPg80+gfDNs3O69XTprSgCmk6b6kgDUM+AXAhKAfvGEz+0YDAy6A4oSFYApzOuNF+C/kYllU+hLTf1D4JRRcGA/KGkb3aby9VC/OXwwFd54Pvd2SwDm3gdBskACMEjezO+5SADmt/+yZn1dAnD7N1DSKb3isHwdvPYUfDQva1PUQFkiYLfIBwJ710glaGdBv/wU1r8BjYaArf75oUgA+sELwbFBAjA4vsz3mUgA5rsHs2S/LdacdgB0/Un1AXcsgpWPQnEbeLch2K3Pw00tpli2zoVX7oMsX/isstqmEPlBbWcUp6U4JzXfTaALMHootDkd1r0GO5fAxE2wKAdn/OL5RQIwHiG9nggBCcBEaKluJglIAGaSbsD6PhfYJ2LVZuENsLQCpthtX8ACQV8wEDrGyQTiBUvlLrAt4PfdyyNe2qRSxxKQ2DQmAs5q5x+hXkTokm3b4E//L5UR1LYmgbb1YK9S+KgMKitCF4H8WCQA/eiV/LVJAjB/fRc0yyUAg+bRDM+nBXCkO8ZrUcbay1YKL4Kmh6ZuSDrPAK6iLdtpSDeWRDWsNXBGj9BLrUdDQze1Wc3Ktj050bYpF0JRcyi2hsCShanPVz34k4AEoD/9kq9WSQDmq+eCZ7cEYPB8mtMZpVMAfj0Vxr8IW3YmP6UtNGYm/fmUA1lLG05jPP2Y43RoC3wHuF3vV2N1M96I6yZCgx5uXLsvYfzdsILsZqiIZ6NeTw8BCcD0cFQvIQISgHoS/EJAAtAvngiIHV5TwcWbrq2ovfEUrFgJZRXxasd+/UEuZYUTYTBUerCACxhb9UFsZxv7Aof8GJr0S3KctbB9HWwh9Gf5nSExOKtGd29xLIvozsU8luRAapYLAhKAuaAe3DElAIPr23ybmQRgvnksj+y9+S8hY22lrV4FfH0ThNO7nQc07R86L1jfPWtnqeGW3QuPfJX6JMsp4i6uYTPNqnV2K7/ebZPZVRpKXdfPzi3Wkbs4UYu2zIaXH4EvXPH6EYcwkZFUUp+wDYn2qfq5ISABmBvuQR1VAjCons2/eUkA5p/P8s7ig4CWwDtRLB85FFrsBaaTPp8Ns2ekZ3ofcDhvcRzlztWUUNmHLziH55z/Pwno3h/aJxCUOFHLNr4LD4+HTe4lmfc4iqV0qbIh0f5UPzcEJABzwz2oo0oABtWz+TcvCcD881mgLLbN2ZXArgzM6hP6URYhAA/jQ+f8TTdLOTcMOp+agUFrdDn1VpiyJvPjaITMEZAAzBzbQuxZArAQve7POftWAH7IoUznSK7mHn+Sk1V5S+AQy0n8M2jQPfNTWHwrPCIBWA30sN6w72i4+/bM869rhAuvgeYtQ6vOU6NdaXcbSwDm1k9BG10CMGgezd/55EQAWt7XWRzMy5zikLuauyhlJ03YynpasIKOPMc5Uak2YTM/5X6nrooIJEPgsMYw/Foo7ZxMa+9tdm2GpbfDo+u9twlyTfvi698fTqy57T4L7vonrNuWvdmffC4c+r3d463+J2yaDpZ5zi6dR148lwDMnl8KYSQJwELwcn7MMScCcAb9eY0TqxHqxiL6ModJDKeM0pj0StjJibzKQczOD8Ky0ncE+vSFk8+DJk0zZ9ra1TDnSbA0ee9nbpi86tluiF8c69zlHBjzUHamY24/7VzYK0IA2sgLr4PKMlgMTAe2awUwOw4psFEkAAvM4T6ebtYF4GSG8h6DEkLSkeUM4l2nTTHl7M3XCbVX5cIhcOr+8OJn8efbY2+48GiL/xK/bqI1ynbC43fB0m8TbRns+iYAL+kP7WJcvJkyse6t2HTR2cOCfp8LzWIIwAVuVpgGwCpCN9fd3WqLg74xXXaon8IkIAFYmH7346wdAWj3IrOVc/VxLuBb3JQLHonsxVd8n396rK1qhUzg1mGwswNgV4/Dxb7RP4fbJ4MdPwiXFg3huqHu345JXxiYHdvgDzcVshdiz/3g/nBqDAFYUQGTxsP7U9LD7swHYK+h8Id9qvdnX8DfK4Yhv9qdycVqVGyHb28MXUiyOvUB0/BvSACmxyHqxSEgAagHwS8EHAH4D8B+2n7n/uLNpHHJCMCuLOYsxtGMzZk0TX0HgMAYi+9yQuyJ/P1KnKcofNysZ2sYuhc8MwvOvRq2fAwbXAGy58+gfbvEheGubfDKTbUDQQcAb8pTsGOXo0dD2yEhhVW+AcrXhrptuGfovw/cDiuiZ+zzPP5+J8HJf4RGLWFMl9rNjgB6A51ugKJmUGIRwWuUim3w7U3wNvDj0GtaAfTsAVWMRUACUM+GXwg4AvCPwHD3127N7AXpNjQZAWg2HM/rDOSDdJuj/gJGIJ4AXDUWvpwRCj1TDtS1W9yyIYw6C/Y4PDFItgJ4302hANiutkmsgwDWPrQrNC2F79zfcKNvgNIm8PXb8On40IRH3Rv678z3YOFzdfvGC6IDR0GbnvCOG5A8sk1YANq/NRsEbc+q3WOZK+QtLvnPJQC9IFcdDwQkAD1AUpWsEKg6A2gLHQOBSRkeNiwA7dLHcbzljPYYF8cdVQIwLiJVAOIJQFvV2bkshGrbdrjr/rqx9W8Fw66A0o5R6tkneeSeslvFtjIXT4Jpr0AakprktV87N4cTToCO+0JpEWxZAuOfh9OOgp2VMHYarHdV8pjLgAND0936DawOz3wmPDrNO4YmFufxIGg+FJbfBa9FSSVo+WFGuIu7Rc2huC10ugrqlYRuA096H9ZWwNKFoFvA3tmrZnwCEoDxGalGdghk/RKITeuP/Iyfc0fVDG/jl9VmW/MWsM4AZudhCMIoY2wp2yI9HxxnNrtg5zb47Mm6L43YObBLroUue8UQgFYh/Iluh8dcQWip4F58BL5MIY9xPvujuD7UK4Zb/lp7FuPHRs/40rM3nH+le/guxuSffRjO6gS3vQXltoQbUcwVo4FW3aCLu2RnL//uaiivww+2FXxYRD9zgP9F/F0CMJ+fRP/ZLgHoP58UqkU5EYDxYP+aWyOqVDKEdxjs3gKO11avFzaB7x8Oew9zT2s1DrEoWwVLl8EefWHrIlhscfk+g2ct1kecYjqyL7Cnuz1Zq7qpDvtjws9EhisAN66HF5+Cb76IN0IwXx/SC4ZcF31u70+ANyfDrhqirENTOOskaDMAIhK41O5kBSxYCE88Vf2lI4G9o/hq4ePw+IfJc5YATJ6dWtYmIAGop8IvBBwB+G/Azlyv84FVkxjGf7GP8lCpRwW/4rfO/7/L0WzCNm/skucndMHdy/OB3TIhOwTe4lgnaPgg3os6oK08jdwXDu4HNIXVn8OipfD2fNj3KNg0D+ZZbA+Pxe4GDLadSS8CMCKf3dxZMO4Rj4PkoJrdgD7KzjZ2hIpKeO1f6TdiTAxmn7wCr0yKvirXtQWceTW0sJvc0Yrd6P40dGmnph+9CMCR7lm/OR/C4vne5iwB6I2TankjIAHojZNqZZ6AIwB/5y5c1NhRyfzoNUZ4neOZweFUOksq4VJJK1eabqAFFc7RetvqeZ4Dq23UZN1cDZglAndzVdVI62lJfSqcVeGj+E9UC+ysmV04sGIH+S2rg32JJ1tGWgaLWALQOg09ktUSGvtZAF76M2jSBFrYb6lSqNwFc64JTcFO5W5KFlSNdpe0g24Ri/mWGWXZn2HqJvi6DodYerbGxWDcI0uzgdCyJdzzAqyJkgjI4gyeDOxfw1d/uQE2ueOFRemWTaHbxps2xJ+sBGB8RqrhnYAEoHdWqplZAr7YAl5EN08XQcIoStlBY7ZyKQ/RqCpef2ZBqffcELifn7CS2stBRzCd4byZFqMal0CDYsDdMg532qUZnGEHxCxgdCvvQ61YCg/8wXv9bNUsbQBnXAS9D0hsxDuuJGriRUvk+FKNroqKYMhIONrOYkaUpX+ADUthXAJDW1SYyJDxJuQnu+GqYnVjFzv6jAntIJtwu+e3UBGxMnvLGKhfCnbxwx6fMS/GN0gCMD4j1fBOQALQO6tCrzkBnIS5x7mffcbDTsjYb1z7GLcNEQs5OzEClF2Cs9ftPLR9Zj4J3OieUKrJM6cC0ITfStozEQve5q0oFZw3TkGplQ0BeOogONiCBdu2cWSxkCUfAe1g4xooaQeN+tRN9vNP4DkLrOmzYquiI0+AfqaQEizfPguTFtfObGJnI+3CRLj0Atp2gRHV73Q5L69/Hd57JYTTS7Gt/GP3hr0tPIF9eG2FmR/DTA+NG4Hzk2FhlLoWg3pHN9hs+8VfwCseMkpKAHqAriqeCUgAekZV0BUvAuzEiv2WtmPt9uO3NaHIEpY10wJYmDj8k/vV9aVL6wlXHNpnnYnBZ4CxFiEjCs2cCMDnnGlZ4OkOrHOm5L2cx9NKBecdV97VtOs+9lyEywL2ZAe2uVe9pHMFcGg3OOoKKIqSG3jOZPh8GmxZCZ1awJAf1iECl8DD/4ClVfFL/IO/RXO47mdAy+RsWv0drFpeu+2urbDaTdLTFehyFTSqkXkj3GqM3fD1WGxV9mc/AA4NNVi3HMb+PvVzyt0txAwRIWY82CMB6AGSqngmIAHoGVXBVrR0lVPBuQ1h9zPCK4BXg3Mgyi67hYuF7rOoBde7G1UW49bi7IcPSJ0H/M39UVwzalnWBOAyOvEEoRxQO7Esm3WXgfzXOedVQX3u4Occy1v0ZyYNnEVNlaAR+I72PMrFlFFS4wxo7Zm2Y6Wz/V/sJO1KvdiJ02t/C81rbPNu/xpevQfmuMNUpRC7FYqjbQl/AQ8/CUs9nCtL3erEemjRCq4L3aVKa6mshMqI83z1a2v1qvESEYDW6OCucKobF3DlZrgv+r2ftM4nWmcSgBlHXFADSAAWlLsTnqw9H7ba95i7cmfBEsIC0LZzTQFdEtHrLcCJlt7SrWfbwbYLEg6yYImQFgP2u7xmXNqsCMCldOYf4WRKHnDYNu8w3qQ/icdu2E4DR0QobZwH0Dmo8gbDeZ8jaMombmB3kLjqoX+8GWbBwQfwQVpya15/IzR3U1TvXAFLb9v9DrJfUqbp6jeBQ9rBYZe6Z8himPnQn2CZJZH1UWneDK66PrSNnasy98rEzgDmys6a40oA+sUTwbBDAjAYfszULG5wI0/Y9q4VE3LHApah1PKS2zGamyMG/5GbqchWBc8FLPGRpdwMFzvebqLRjrLXvDaZFQE4je/xtqNhvZVOLONSHvZWOaLWVAazhtZspTGnMYGmbEm4DzXILIGwALSLPKMYTx/mOQMmIwCt3WDecdqHk3IMcRbOEy9H7AEN9gcL+9JiJpSvgpYjYNs82DE/FNS47fnQ9JD4fZeXwQtjwW4C+6XYpYgTj4CDv587iyQAc8deI/uHgASgf3zhN0vsiLnlHrevme9c4yJXAKMJQFsN/IW7LRxNAFqQirJcCkCbx8cczMvOkcX4xVYAhzOJwzwfGQcLIfOBk8wuVDqynMuco5IqfiKwjpZOLEdL/9ePTziN0DXMT+jHi5yWsqm38uuU+rClczs/0fcaaLQ3lK+FcguQWQQN3RVCLwOsmQUTHgktvfuh2M7sWUdATwnAhN2hFcCEkalBHQQkAPV4xCJgh+QsfGzkWT0TcHYK6Vm3UV1bwLZSaFvAFtDC8xZw/4hQZnaTL5z1qqRRKI5auooFcp7CMZ66s0P+liu4frRkq1F6+Cfn8hUWs2N3acVaruYeT+OpUnYJbKIptmJ7UsQF9v8ykCkMdbbwSyhjF0VVcR+9WteIrVzPX1M6H3jeTxIPleLEAozIBGL2rhkHj70LdpnYD6XfADj1PKgfjluYBaMqK2D1C/D0O2AJWPKlfA184xprH77u7eMWwMZ8mYPs9CcBCUB/+sUPVtmWrF2miyx2wcNW+Wz173T3Ekik0nkdmBtxCcRWDodGbPfaquBdiV4C6T4Azn8GHhsNSz9JHc02GvIaI/jUSazlrQxlcsyMD9F6eJaz2UITltCNHizgAufys0q+EbBb4mczjlkcxDz2YR5xYq/UmOAeLHS2l1sk+V19+vFwwEioFxmP3AvEcEq4iJ9v426FuWu8NM5OHYsDeIB7szbTI9oFkRWvwquv+WclNJk5awUwGWpqE4uABKCejUQIRG4BW8wUC/die5sPuoHv73Ayo4X+3crjFgwfuNgNA/O0e5kk2t5YzDOAfUbAGffBsxfB16FjVkkXS+9mGRw+Z7+E+0h0S28DzfmS3uzPZzQmjcuXCVuuBukiMJPDnK5m04+ltX4fRR/lVCZwEB6CvEVpbsvo+34PSjpAC28L1qFebGXNPt3tHeuuv2+eAX/20e+QXn3gnEuhxM2Uki4fRfaz7Qsoagkbp8KE90JhDPK5SADms/f8Z7sEoP984meLbAciHAfQ7LQMnve5Is8CQdulkdciJhAZCNrO/llcQAsWXSP1utOizksgrbrDukXJodlIMx7nQqexib/q6d2895moAPTes2rmE4Ev2IfxjPIUQqg38xjNC0mHDDIBaMvw9Uqg9WhobtenohX7JI9cJQx/stsKoP1x33GJhj/JtF9+2AZ6pXBU0sLjrHoKOl4OJe2rW2s3qN+9E1oWw9QN6Usrl2kmdfUvAZhL+sEbWwIweD7N1xml/RbwVhqxgwbcjZtcNAUy5/MEe0aN5x+9U/vO3UxTitjlxJTbRiMu5z6aRE1klYJhapoSAbsPbjlnvZYK6vEBA5jE8dWaWCiZYspZH5GnrR4VTmiY47HwmImVVo3hoKEweAQs+U3oAogjACPzkYW7tLv1dZWIVcD582Csz46intMZOlwKTVtAiV0R9ljKVobYWOlwORS3J3TX/jN4aAJss5+cASsSgAFzaI6nIwGYYwdo+CoCaReArzKCmc4iZerFgkG3ofYBKvu3sDD8MJwqwFl0qcdM+tOUzSygJ0obl7oP/NCDxXZ8jrNZiGWH3V2+z1PsxTe8wkjnH+eyHwfxSVI5gvt2gtFnuNEy3SE2TI6xBWyrfvHOB7oCcPNMeP6JUM5GP5YLr4EekWHl4xi54MqQ4DNRZLchNjk3/INdJACD7d9sz04CMNvENV4sAr4WgLGMbsF6OhHKS/UF+8b0bs1gw3oM8peAne1cRmde5NSq1HBhARie1Xz2pGeSUuv6QdA8lKHQW/G4Arj4Vli7BsZ76zXrtbr3gouviz/slk/AxOzE2Tgna22hz4RgABf8asGQAIz/fKiGdwISgN5ZqWZmCeSlAPSK5JfcRmlBfEV5JZL/9f7MDWyhKYc727xveA4TFG/mJUVwi92VT6TYJ3mskCruCmDFDvj0Bv8KQJtuw4bwi7MBiwcVo0yfBJNfgvJE+ASkrgRgQBzpk2lIAPrEETKj7ksgyfK5hytZS5tkm6el3U+4nw5YWmQVEfBGoGVruOAaaOX10Q1fAon1iW7XtyphzUq4xz03580Sf9QaMhLs1vCa12HCZ/6wKRdWSADmgnpwx5QADK5v821maV8BNAAfcDivMyImi3D6rq/ZK25Yj0FM5V0GJ8z1MGYyklcTbqcGhU2gSw8YfT60qXG7NSaVukRgngvAwn4Sds9eAlBPQjoJSACmk6b6SoVARgSgGbSIbo5dltmh5uH9cGiX1ziBGQyo0/6uLHYCOydTFEImGWpq07Yj/PSXUOQlY4ZdBrFP9Gif6q4A/PyP8JxfcsLJvQkTkABMGJka1EFAAlCPh18IZEwA1pzgQvbgCS6kmDJu4baqlx/kUif115FM95Qr+Eru4V6uisuv5jhxGyRRodxJVVafelRSEnE6ysKWlFPshCiJTGVXRrFzU9lKzdeSGF5NMkTAcgEffQcUWULFmqUuwReuWyMO4EdXwssZslXdZp6ABGDmGRfSCBKAheRtf881awLwcS5wYvSdxTjas6oaFRNGbzIspfAx3VhE44h4fyfwOi3ZkFH6L3IKn3AwzdnAiIhY3Ctp7+Q8HsYkWrO2yoaXOZmtWJxuOIdn2KcqeUuoigU7ttKRFRm3PaNgAtD5Dywn9r0xJhIrDEwN4Rdu7bdA0AFwT1anIAGYVdyBH0wCMPAuzpsJZk0AbqaJkxGkK0trwbEQH3+jdiyKAbzvCKjXODEmUBNfRzHNyRjb3IlKlp2yjE68wGjW0DapAffiK87hWWcNcR69sfOQH7rXME/iZQ4NfHS1pLBlrZEl2x45uo5UcDVFoIk/2/KNUiQAs+a2jAwkAZgRrAXbqQRgwbredxPPmgCsa+bRBOChfOiE+bCt0nURmR5sFfExJ81xqFzLnbRwQtJmr2yjIX/nCiccSSqllbs6aBlLttOoqqvGbOEyHsyqoE1lHkFtu9/ecFZdCW3CsQDriI3y+F2w8KugEiqMeUkAFoafszVLCcBskdY48Qj4QgCGjbRLIV/Sm2u4O57dOX3d0t39iZ9lxYb+zODEaqmeszKsBgFnbff0Y6HjSaG8wLVK+AZw5MrfNli3BZqUwkvPw/8+Esp8JyABmO8e9Jf9EoD+8kchW5MzAWgn4ew7dX0e0p/OEbzJ8KxYLgGYFcwxB7H75yOGQedT49ux9FtYPhlenwX9OsFHtU87xO9ENXxHQALQdy7Ja4MkAPPafYEyPmcC0DY8bQcte6f20ue3X3Nr+jqL05MEYNZQxxyoI/CTWBdC3FYrp8C4abD6u9zbm2kL+rpp4Ewc7wSmZ3rAHPcvAZhjBwRseAnAgDk0j6eTMwGYx8xYTwvu4tqsTEECMCuY4w4yxgSgpZ/+GO6dDhu3V29SUQbllv4t4MW+vOyGtN15sTCJ9t/wEcjnARNLQSsSgEHzaG7nIwGYW/4afTcBCcAkn4Zv6OncAg6HdYnspgHbKWUnm5xMe6mXs3mWPsxLvSP1IAIpEri0J3S+PnYnn94Gzy9LcRCfNZcA9JlD8twcCcA8d2CAzJcATMGZFrdvBR3ZQhMnhMsBfEob1tCS9TRnI4vo7qSIWEk7Pme/pEeSAEwanRqmkUDfw0Np8uoq65fAlNvhG2BzGsfOZVcSgLmkH7yxJQCD59N8nZEEYBo8Z4Gsl9OJdqxyArpElh2U8jA/TjpeYB8+52RepjHb0mCpuhCB5AmM7AT9b6m7/Y4lsOx2mOTumCc/mn9aSgD6xxdBsEQCMAheDMYcJAAz6EcThrcR5xszzvg6A5hBB6nrhAjYvfeBf4H6DWI3W3gdfFYGs2ztuxS+71adWAar7MBgHhYJwDx0mo9NlgD0sXMKzDQJwAw6/CF+zHI6pzSCZQw5hZdoFpgNtZRwqHEOCRwE9KsHna6Dhj2jGxJeAWywJ3S+YXedNf+GF94hSh6gHE7I49ASgB5BqZonAhKAnjCpUhYISABmEHI6BKCZZyLQzhVaWrwjeD+DFqtrEaibwAVAo32h4xXR6+3aDFs+hsYHQnGr6nXWTIJXXwqdD8ynIgGYT97yv60SgP73UaFYKAGYQU+nSwCGTSymjGG8yeHMzKDV6loEYhNoBnQsgUEtotfpNiZ2210bYcrNMC3PAEsA5pnDfG6uBKDPHVRA5kkAZsDZdvZvEsOdm8GplPrscm4TW1lPS+dG8RCmMJh3U+lWbUUgJQIdgO8BbwHH1eipbx0BsyUAU8KuxgEhIAEYEEcGYBoSgGl24kccwmra8j5HpNzzIKYylHecfixP8lz2c24E9+arlPtWByKQCQI3XQJNDo7eswRgJoirz3wjIAGYbx4Lrr0SgGnw7Qaa8zonOD19QR9npS6Vcigf0otv2JcvqnWzkD3owbepdF3wbds3hdaN4YuVBY8iIwB+fhU02qd212uehy0r4cXPYE1GRs5cp9oCzhzbQuw5tW+HQiSmOWeKgARgGsjexi8pozQNPYHF/TuDf1NEfuQVszvOQ2rM3M54LUoLjfR3csuxUK8e/OMDWJGPiajTjyStPXbbEy4J3/61sC+vwttfw/tfQ2Xl7rRxaR00w51JAGYYcIF1LwFYYA738XQlAJN0zqccwAuc7ql1I7Y6GUKslFHCd3SkDav5Kfc7Qm8yQ3mPQdSjgqOYxjFM8dRvZKXldKQTKxJul2wDuwNwmtt4BtAb6HwgdLgMJr8Cn0+Csgo7u+iv0qk5tGsCcyyvr4oIeCAgAegBkqp4JiAB6BmVKmaYgARgkoC/oz2fs6/b2t7SlXzKgaylTbUeBzOVdqxkf+Y6/76VRsxggJM2ri1rWE8LxjOKReyB5RD+BX9MyqK7uYqruSeptrEazaA/W2nsvLwfc2nPqqqqx9ttUPdvS4CeR0OXs3f3tH4SbCmDOfNh+zyYnVbL1JkIZI+ABGD2WBfCSBKAheDl/JijBGAa/bSKtmyjkZMWbhXt6MscurO42gjPM5p9+Zz3Gej8+w4asBK7V2knByvoismp6uVY3maPOJuqy+hEZ9K7rHUvV1SlsDuDf1WJWLPO7iSf6prZfAi0OgXqR9kFL18P5Wtg1p3wRhpZqysRyBYBCcBskS6McSQAC8PP+TBLCcAMesnCwVRSz1kpnMColEa6kT/RhK3swoLDFFFKWUr9eWn8AJexltb0YzYj7TBXjVIf+CHQ+nRoMbTuHit3wbRr4G0vA3uoU78eFBWH7tuU7fTQQFVEIEkCEoBJglOzqAQkAPVg+IWABGCaPLGWVqykfbXeLBbgOlqnaQQ4m2edbea57M+5/DPn4WDsg2wEsI8XAVgBH94JExekjqNBEZzQB/dFZ9sAABLLSURBVA62I5jt4dmHdvdZXg5fh3bbVUQgLQQkANOCUZ24BCQA9Sj4hYAEYBKemMiJdGYZ9algCV2dHr6jA4vpnkRvyTUpZQe/5PbkGqexlc3+TA8C0Ib86jN4+v7UB+/QFH56CmDx5hpV769sG0y8Ez5Zlvo46kEEjIAEoJ6DdBKQAEwnTfWVCgEJwATpPcvZzKMPJsCs7KRBgj2kp7pfBGCRZYVoAkffCCXt6p7bzp2wZBxseh+2O8GtYfgo6NMXVq2AZx70xsYRgLb3vH/t+ltfg7+/CVu0LewNpmrFJSABGBeRKiRAQAIwAViqmlECEoAJ4P0PRzKFoezCDp/lvuzLXM7iXzk3ZNAJMPgE90yeB2tW/B3KVkKTg6B1jaORy++BB+fF7+TIPWD4BaEt4HDZuB7++n/x26qGCCRCQAIwEVqqG4+ABGA8Qno9WwQkABMk/SCXsoJOCbbKTHW/CECb3eARMHRk6vPcMAXufD5+PzUF4OIF8K9HwESgigikk4AEYDppqi8JQD0DfiEgAZigJ/wkAJuxkVN4ib34JsFZZKb6IUfCKeel3veYK+P3YenczrwMOvWCFUtg3COwdneYwvgdqEbGCYQzxDQdAO99BRvWZnzIjAwgAZgRrAXbqQRgwbredxOXAEzAJVMYwnscTSUWAMUfZSSvcBgf+cMYoH8PGGkisDMsvAFaHAOtElwZ9CIAbcLFJXDLcTB/DTxp6UhUfEXAdugb9oaOl0PZLrgtnCLOV1bGN0YCMD4j1fBOQALQOyvVzCwBCUCPfLfTgFc5kU/p67FFdqr5TQBGztpCxFjpdSa0HeyNx6o34e8vequrWtklYOn/NgAlbiBwW9DbFcUEu5h9DNBlT+gcIfq2bYGH/wRrV2fX7lRHkwBMlaDaRxKQANTz4BcCEoAePTGfPXmS8z3Wzk61tqxiFOPTngEk3db3ArqPDJ0TjFfG3gPzPVwCidePXk8vAbtrcxQ4hw1at4W+/WHme7BlM5gQtC+1VkBRM+h1lLMAXHvltxxmT4Txb6bXtkz3JgGYacKF1b8EYGH528+zlQD06B2/rQAWU8ZlPOjkE86XcsQxcPzouq2VAPSfN+1DYhjQ1EyrB11uhtJOsGMxlK+Dbx8KCcCGtvP/C2gQCo1Zu1TA7Hdg/Av+m2NdFkkA5pe//G6tBKDfPVQ49kkAJuDryQxlGkfl/Aygib9buC0By/1T9bhT4fBBIXtKiqCeRdQph4r6UD4P/vlPWLjOP/bKEpxcNieb9iuGHn+LTmTV07DlI+jx17qJzZkB48dCZR6BlQDMI2flgakSgHngpAIxUQIwQUe/wXBW05av2TvBlumpbtu+Z/NcXq38RZt5KXBsb2hhZwNnwbru8EaerQylx6P+78UE4Kh20OFHUNolQXvt287+VITabZ4BL4yF+Ql2k8vqEoC5pB+8sSUAg+fTfJ2RBGASniuj2LkQ8omTiyx7pRVrOYN/+/7MX/aIaKRsEDAB+INh0PrUBEezy/LhC/PlEoAJ0lP1gBKQAAyoY/NwWhKASTptB6W8yKl8zn5J9uC9md307cl8iimnOZu8N1RNEUgDgToFoOUCtGIrfDX3dSMT5rgCsGJ7aAv40zlpMCxLXWgFMEugC2QYCcACcXQeTFMCMA1OWkNrHuESttE4Db3t7qIl6+jLHIbyTlr7VWcikAiB3gfAeT+po4UJPRN/0WLCWDP7xosQhyYAZ+dR3EYJwESeFtWNR0ACMB4hvZ4tAhKAaSK9gB58xv5Obx9xWEq97sFC2rKak5iYUj9qLALpIDDm5lBg76glvMpnK4Dhb7ZYQhBYszJ0BnDpwnRYlp0+JACzw7lQRpEALBRP+3+eEoAZ8NGvuTXpXruymNG8QCuU1DZpiGqYVgJH9IXjL43RpX2bhbeBrUodK4Hbt8LYe2HZorSal/HOJAAzjrigBpAALCh3+3qyEoAZcM+X7M0zeE+KO4ipfMXerKU1N/AXSiwuiooI+IRAvXow6AQYWldKv/CFjwgBWFkJ394IrU6GFkPg99dD2U6fTCoBMyQAE4ClqnEJSADGRaQKWSIgAZgB0LYdPBbLhFp36cISfsQj8arpdRHwBYHzr4Ke+9SxEmgi0N3+3bkcZv0eLOubXVta6v7XFxNJ0AgJwASBqXqdBCQA9YD4hYAEYAY84VUA3sLvKI55cj4DhqlLEUiBQL8BMOpwIJYIdPvePh8+GAtT8iznbyw0EoApPDRqWouABKAeCr8QkADMgCcsbdxrjGAO/biIR6tGGMdZbAkl1OI43uRIpledm8+AGepSBNJOoFtLSwa8u9tLrq8+RNlKmH4vTFsLZWkfPTcdSgDmhntQR5UADKpn829eEoD55zNZLAK+I3DKefDWS7B1s+9MS9kgCcCUEaqDCAISgHoc/EJAAtAvnpAdIiACviQgAehLt+StURKAeeu6wBkuARg4l2pCIiAC6SQgAZhOmupLAlDPgF8ISAD6xROyQwREwJcEJAB96Za8NUoCMG9dFzjDJQDT4NJ1tGQWB/Meg5zeerCACxibhp7VhQiIQK4JSADm2gPBGl8CMFj+zOfZSACm6L3Z9GUCo6r1IgGYIlQ1FwEfEZAA9JEzAmCKBGAAnBiQKUgApuDIGfTnTYZRTokEYAoc1VQE/ExAAtDP3sk/2yQA889nQbVYAjBJz85lX57ndCqqJUINdXYzv1c6tyS5qpkI+I2ABKDfPJLf9kgA5rf/gmS97wXgYrrW4m15c+283U3cQWO2Zc0fb3Es/+GoWuMVU8axvM1APsiaLRpIBEQgOwQkALPDuVBGkQAsFE/7f545EYDvMJg2rOFA/heT0CK6MZ+eTGVIzDpH8h+G8VbWKMcSgG1ZxRXclzU7NJAIiED2CEgAZo91IYwkAVgIXs6POWZdAL7KCGZyOA3ZRjtWOZSasIWzGVdF7FEuYiPN2YDlnaq73Mqv41VJ2+t1rQAex1sMYEbaxlJHIiAC/iAgAegPPwTFCgnAoHgy/+eRdQH4OBfwLT3SQq6EndzMH1Luq4xiKiOy8pZQVvW3coqooD4L6cEznFdjrK+BvZx/G8D7nMAbKdtSCB3splYIs03vHMUuOZ6pcJMATI65WkUnIAGoJ8MvBLIqAFfThnGcxSrap2X+6TgDuJJ2PMO5rKdVlU2n8CKN3LOFUxnMCjrFsNcE3/GUsoPjeYNDmJWWeQW9kxA1lWQIiF0y1HB+miX7zEkAJsdcrSQA9Qz4m0BWBeC7HM0UjkkLkYOYxYm8mvJt2zc5jul8L0mbQl8rp/NvDuCzJPsovGapfBkXHq3qMxa75J6AVLhJACbHXK0kAPUM+JuAIwCvAxpkwc5tNOA5zmYFnVMe7WReZH8+T6mfB7iMbTRkB42S6qcLj3MS22nF+qTaF2qjt4FjC3XyKc5b7JIDmAo3E4B3hoZtAWxMzgK1EoEQAW0B60nwC4EuwBK/GCM7REAERMDHBCwm1VIf2yfT8oCABGAeOKlATLRn0ZbjNhXIfDVNERABEUiGQDNgGVCZTGO1EYEwAQlAPQsiIAIiIAIiIAIiUGAEJAALzOGargiIgAiIgAiIgAhIAOoZEAEREAEREAEREIECIyABWGAO9/F0fwFcBU7KDcupdinwnY/tzYZpo4ArgMMAO/dTAlREDLw38CAwEFgB/BZ4LOL1IuBPwA+BUmA8cDmwNRvG53CMWwFj1wfYQij02rXASrGr0yv2HrwI2AMoA/4D2MX88BV3PW/eHuoJwCnAccBkt8kA4F7gAGABcBMwMaK7Ju7ro4GdwJPAjTXe795GVy0R8EhAAtAjKFXLKAH70vkLcDawELgbnHgosZPvZtQc33T+faC7+yVwWw0BWAzMBaaDk4OuP/AEcCIwxZ2B/fv5wDmuEHocnKTHF/pmhpkx5AXgGXDy4dkPCvvirQ9VQRbFLjp3E81rgW/AiUb+KyexDE66HOOn5y3+82qfZWcBw4FhrgBsDXwFPATc74pD+2HWD/jS7dLeuyYOL3AyUoae37HAmPhDqoYIJEdAAjA5bmqVXgIfAfal/Xu3WwsJswg4GJiT3qHysrfB7hdJ5AqgrTDYKkEHYLs7K/uCaQvYKoK9t20F1VZwnnZfPxKYCk76k3V5SSI5o20F9QOX1Wr3C1js4rO0FVSLKm4hR+wHhpjVzcxWTu39Ze8zC2kVXgG82t3dsBXUcJnk/hi73hXbtjptP3ht1dWK5Xr8m/vM6rZv/GdVNZIgIAGYBDQ1SSsB25q0LcmhwHsRPdsv5juAh9M6Wn52Fk0A2navfdFExjG2FUNjZgLaEgPPc1dvFrvTtlUcY30y8GZ+okjKaluNecldDTSxLHbxMdoKvK0gG7uDxCwuMPsute1eO4JhK3d2VCMsAE0427buJRG93OKu1lvqH6tn28HGPHzEw97D9r7dx109jGuAKohAogQkABMlpvrpJmDJbe3X8r4R2yE2xjTgtYhVwXSPm0/9RROAdvbPzgXaSkG42BfJq+55vyNchvalYl8+4WKsfx6xKphPHJKx1X5g2LM00z1PaX2IXWySI4FngcbuVrBtY34rZnEfvRsAe5/ayrwVE3L248yOY9gZVNvluDmilx+570NbFTzXPQITmZbIjinY+/boiFXBuEaogggkQkACMBFaqpsJAiYALaK9bTeFz8PYOLYa+LoEoIPcqwC0LxwTzSZ6YglAW1Www/7hbeFM+NQvfdqK53PuOUpbYQ5ffokmAMUu5DX7wWDvSTtaYMcH7FyabaFbBrKaPzjELMTMPrssw9shERfXIlcAowlAWw2092EsAWgXuOwijgSgXz5NAmiHBGAAnZpnU9IWcHyHJbMF3MsV1HaAP7wFbO/3bQWyBWxzta24vsAgyzMdgTneFnChswujslUoOzN5sXset64jB4XMzC5uPFIjM4cJuF3uaqrxrGsL2IS0bQHbqqu2gON/HqpGmghIAKYJpLpJiYAugdSNL5oAtHN8draoY8QlkAfcCx6xLoHYqqAdUrfVnaBfArEv5KPcP6tq4BU7b29Xu3RkAtButtpqlJ636NyauxdlIl+12/a2ymerf6e7l0B6R1Sw3Q27VR2+BGIXtmyVOnwJxLaF79IlEG8PqmolR0ACMDluapVeAhaW5M/uWRi7/ftX99ewfSAWcrFQHBYGxm5g2g1f24qzVQW7IGNfyPYlY2FgfuPWsTAvFgbmHReahZCwMDB2TtC2P00UWRv7Qg9yMSFsIthYhFc/bb4mBG2FxYSN2NV+AuzSh12WWe4KD4tVdwxgwsVWjsXM+7smcgvYwsDY8RZ7D9vxA/sBYpe17HJN+NiLvXf3d1dbLQyMHdGwFWzziYoIZISABGBGsKrTJAjYxYRrAPs1bTdUL6sRuDeJLvO+iW0t2a3CmmEgTBi/6970tVvSFqvNAkGbELQvknCxbSj7ojGBbdt5FmrHAksHPRC0fflGMrPPOfv7nm54IeNjt6TFrvpbZJwbK9HCBNmWuT1jdnHhC7eamHn/SLEfauE4gNbqcOA+V+RZIGi7NGLndcMlMhC0/bizuIAmwCMDv3sfXTVFwAMBCUAPkFRFBERABERABERABIJEQAIwSN7UXERABERABERABETAAwEJQA+QVEUEREAEREAEREAEgkRAAjBI3tRcREAEREAEREAERMADAQlAD5BURQREQAREQAREQASCREACMEje1FxEQAREQAREQAREwAMBCUAPkFRFBERABERABERABIJEQAIwSN7UXERABERABERABETAAwEJQA+QVEUEREAEREAEREAEgkRAAjBI3tRcREAEREAEREAERMADAQlAD5BURQREQAREQAREQASCREACMEje1FxEQAREQAREQAREwAMBCUAPkFRFBERABERABERABIJEQAIwSN7UXERABERABERABETAAwEJQA+QVEUEREAEREAEREAEgkRAAjBI3tRcREAEREAEREAERMADAQlAD5BURQREQAREQAREQASCREACMEje1FxEQAREQAREQAREwAMBCUAPkFRFBERABERABERABIJEQAIwSN7UXERABERABERABETAAwEJQA+QVEUEREAEREAEREAEgkRAAjBI3tRcREAEREAEREAERMADAQlAD5BURQREQAREQAREQASCREACMEje1FxEQAREQAREQAREwAMBCUAPkFRFBERABERABERABIJEQAIwSN7UXERABERABERABETAAwEJQA+QVEUEREAEREAEREAEgkRAAjBI3tRcREAEREAEREAERMADAQlAD5BURQREQAREQAREQASCREACMEje1FxEQAREQAREQAREwAMBCUAPkFRFBERABERABERABIJEQAIwSN7UXERABERABERABETAAwEJQA+QVEUEREAEREAEREAEgkTg/wOQXU7QUWtZlwAAAABJRU5ErkJggg==\">"
}
}
]
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-06-23T18:21:00.965893",
"end_time": "2016-06-23T18:21:01.086765"
},
"collapsed": false
},
"cell_type": "code",
"source": "\ndef show_image_slice(time_idx):\n ax.imshow(pq_autumn.isel(time=time_idx))\n# plt.draw()\n\n\ninteract(show_image_slice, time_idx=(0,8))\n\n",
"execution_count": 6,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Run this cell for interactive clicking to get destructured PQ"
},
{
"metadata": {
"trusted": false,
"ExecuteTime": {
"start_time": "2016-08-23T13:29:21.061575",
"end_time": "2016-08-23T13:29:21.231065"
},
"collapsed": false
},
"cell_type": "code",
"source": "w = widgets.HTML(\"Event information appears here when you click on the figure\")\n\ndef callback(event):\n x, y = int(event.xdata + 0.5), int(event.ydata + 0.5)\n \n value = int(pq_autumn.isel(time=2, x=x, y=y))\n \n sample = mask_to_dict(pq.pixelquality.flags_definition, value)\n df = pd.DataFrame.from_dict(sample, orient=\"index\")\n w.value = bin(value) + '<br>' + df._repr_html_()\n\n\nfig = plt.figure()\nplt.imshow(pq_autumn.isel(time=2))\nplt.grid(True)\nfig.canvas.mpl_connect('button_press_event', callback)\n\nplt.show()\ndisplay(w)",
"execution_count": 10,
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"data": {
"application/javascript": "/* Put everything inside the global mpl namespace */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function() {\n if (typeof(WebSocket) !== 'undefined') {\n return WebSocket;\n } else if (typeof(MozWebSocket) !== 'undefined') {\n return MozWebSocket;\n } else {\n alert('Your browser does not have WebSocket support.' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.');\n };\n}\n\nmpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = (this.ws.binaryType != undefined);\n\n if (!this.supports_binary) {\n var warnings = document.getElementById(\"mpl-warnings\");\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent = (\n \"This browser does not support binary websocket messages. \" +\n \"Performance may be slow.\");\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = $('<div/>');\n this._root_extra_style(this.root)\n this.root.attr('style', 'display: inline-block');\n\n $(parent_element).append(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n fig.send_message(\"send_image_mode\", {});\n fig.send_message(\"refresh\", {});\n }\n\n this.imageObj.onload = function() {\n if (fig.image_mode == 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function() {\n this.ws.close();\n }\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n}\n\nmpl.figure.prototype._init_header = function() {\n var titlebar = $(\n '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n 'ui-helper-clearfix\"/>');\n var titletext = $(\n '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n 'text-align: center; padding: 3px;\"/>');\n titlebar.append(titletext)\n this.root.append(titlebar);\n this.header = titletext[0];\n}\n\n\n\nmpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n\n}\n\n\nmpl.figure.prototype._root_extra_style = function(canvas_div) {\n\n}\n\nmpl.figure.prototype._init_canvas = function() {\n var fig = this;\n\n var canvas_div = $('<div/>');\n\n canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n\n function canvas_keyboard_event(event) {\n return fig.key_event(event, event['data']);\n }\n\n canvas_div.keydown('key_press', canvas_keyboard_event);\n canvas_div.keyup('key_release', canvas_keyboard_event);\n this.canvas_div = canvas_div\n this._canvas_extra_style(canvas_div)\n this.root.append(canvas_div);\n\n var canvas = $('<canvas/>');\n canvas.addClass('mpl-canvas');\n canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n\n this.canvas = canvas[0];\n this.context = canvas[0].getContext(\"2d\");\n\n var rubberband = $('<canvas/>');\n rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n\n var pass_mouse_events = true;\n\n canvas_div.resizable({\n start: function(event, ui) {\n pass_mouse_events = false;\n },\n resize: function(event, ui) {\n fig.request_resize(ui.size.width, ui.size.height);\n },\n stop: function(event, ui) {\n pass_mouse_events = true;\n fig.request_resize(ui.size.width, ui.size.height);\n },\n });\n\n function mouse_event_fn(event) {\n if (pass_mouse_events)\n return fig.mouse_event(event, event['data']);\n }\n\n rubberband.mousedown('button_press', mouse_event_fn);\n rubberband.mouseup('button_release', mouse_event_fn);\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband.mousemove('motion_notify', mouse_event_fn);\n\n rubberband.mouseenter('figure_enter', mouse_event_fn);\n rubberband.mouseleave('figure_leave', mouse_event_fn);\n\n canvas_div.on(\"wheel\", function (event) {\n event = event.originalEvent;\n event['data'] = 'scroll'\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n mouse_event_fn(event);\n });\n\n canvas_div.append(canvas);\n canvas_div.append(rubberband);\n\n this.rubberband = rubberband;\n this.rubberband_canvas = rubberband[0];\n this.rubberband_context = rubberband[0].getContext(\"2d\");\n this.rubberband_context.strokeStyle = \"#000000\";\n\n this._resize_canvas = function(width, height) {\n // Keep the size of the canvas, canvas container, and rubber band\n // canvas in synch.\n canvas_div.css('width', width)\n canvas_div.css('height', height)\n\n canvas.attr('width', width);\n canvas.attr('height', height);\n\n rubberband.attr('width', width);\n rubberband.attr('height', height);\n }\n\n // Set the figure to an initial 600x600px, this will subsequently be updated\n // upon first draw.\n this._resize_canvas(600, 600);\n\n // Disable right mouse context menu.\n $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n return false;\n });\n\n function set_focus () {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('<div/>')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n // put a spacer in here.\n continue;\n }\n var button = $('<button/>');\n button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n 'ui-button-icon-only');\n button.attr('role', 'button');\n button.attr('aria-disabled', 'false');\n button.click(method_name, toolbar_event);\n button.mouseover(tooltip, toolbar_mouse_event);\n\n var icon_img = $('<span/>');\n icon_img.addClass('ui-button-icon-primary ui-icon');\n icon_img.addClass(image);\n icon_img.addClass('ui-corner-all');\n\n var tooltip_span = $('<span/>');\n tooltip_span.addClass('ui-button-text');\n tooltip_span.html(tooltip);\n\n button.append(icon_img);\n button.append(tooltip_span);\n\n nav_element.append(button);\n }\n\n var fmt_picker_span = $('<span/>');\n\n var fmt_picker = $('<select/>');\n fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n fmt_picker_span.append(fmt_picker);\n nav_element.append(fmt_picker_span);\n this.format_dropdown = fmt_picker[0];\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = $(\n '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n fmt_picker.append(option)\n }\n\n // Add hover states to the ui-buttons\n $( \".ui-button\" ).hover(\n function() { $(this).addClass(\"ui-state-hover\");},\n function() { $(this).removeClass(\"ui-state-hover\");}\n );\n\n var status_bar = $('<span class=\"mpl-message\"/>');\n nav_element.append(status_bar);\n this.message = status_bar[0];\n}\n\nmpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n}\n\nmpl.figure.prototype.send_message = function(type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n}\n\nmpl.figure.prototype.send_draw_message = function() {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n }\n}\n\n\nmpl.figure.prototype.handle_save = function(fig, msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n}\n\n\nmpl.figure.prototype.handle_resize = function(fig, msg) {\n var size = msg['size'];\n if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n fig._resize_canvas(size[0], size[1]);\n fig.send_message(\"refresh\", {});\n };\n}\n\nmpl.figure.prototype.handle_rubberband = function(fig, msg) {\n var x0 = msg['x0'];\n var y0 = fig.canvas.height - msg['y0'];\n var x1 = msg['x1'];\n var y1 = fig.canvas.height - msg['y1'];\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0, 0, fig.canvas.width, fig.canvas.height);\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n}\n\nmpl.figure.prototype.handle_figure_label = function(fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n}\n\nmpl.figure.prototype.handle_cursor = function(fig, msg) {\n var cursor = msg['cursor'];\n switch(cursor)\n {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n}\n\nmpl.figure.prototype.handle_message = function(fig, msg) {\n fig.message.textContent = msg['message'];\n}\n\nmpl.figure.prototype.handle_draw = function(fig, msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n}\n\nmpl.figure.prototype.handle_image_mode = function(fig, msg) {\n fig.image_mode = msg['mode'];\n}\n\nmpl.figure.prototype.updated_canvas_event = function() {\n // Called whenever the canvas gets updated.\n this.send_message(\"ack\", {});\n}\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function(fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n evt.data.type = \"image/png\";\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src);\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n evt.data);\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig[\"handle_\" + msg_type];\n } catch (e) {\n console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n }\n }\n };\n}\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function(e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e)\n e = window.event;\n if (e.target)\n targ = e.target;\n else if (e.srcElement)\n targ = e.srcElement;\n if (targ.nodeType == 3) // defeat Safari bug\n targ = targ.parentNode;\n\n // jQuery normalizes the pageX and pageY\n // pageX,Y are the mouse positions relative to the document\n // offset() returns the position of the element relative to the document\n var x = e.pageX - $(targ).offset().left;\n var y = e.pageY - $(targ).offset().top;\n\n return {\"x\": x, \"y\": y};\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys (original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object')\n obj[key] = original[key]\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function(event, name) {\n var canvas_pos = mpl.findpos(event)\n\n if (name === 'button_press')\n {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x;\n var y = canvas_pos.y;\n\n this.send_message(name, {x: x, y: y, button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event)});\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n}\n\nmpl.figure.prototype._key_event_extra = function(event, name) {\n // Handle any extra behaviour associated with a key event\n}\n\nmpl.figure.prototype.key_event = function(event, name) {\n\n // Prevent repeat events\n if (name == 'key_press')\n {\n if (event.which === this._key)\n return;\n else\n this._key = event.which;\n }\n if (name == 'key_release')\n this._key = null;\n\n var value = '';\n if (event.ctrlKey && event.which != 17)\n value += \"ctrl+\";\n if (event.altKey && event.which != 18)\n value += \"alt+\";\n if (event.shiftKey && event.which != 16)\n value += \"shift+\";\n\n value += 'k';\n value += event.which.toString();\n\n this._key_event_extra(event, name);\n\n this.send_message(name, {key: value,\n guiEvent: simpleKeys(event)});\n return false;\n}\n\nmpl.figure.prototype.toolbar_button_onclick = function(name) {\n if (name == 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message(\"toolbar_button\", {name: name});\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n this.message.textContent = tooltip;\n};\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.close = function() {\n comm.close()\n };\n ws.send = function(m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function(msg) {\n //console.log('receiving', msg['content']['data'], msg);\n // Pass the mpl event to the overriden (by mpl) onmessage function.\n ws.onmessage(msg['content']['data'])\n });\n return ws;\n}\n\nmpl.mpl_figure_comm = function(comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = $(\"#\" + id);\n var ws_proxy = comm_websocket_adapter(comm)\n\n function ondownload(figure, format) {\n window.open(figure.imageObj.src);\n }\n\n var fig = new mpl.figure(id, ws_proxy,\n ondownload,\n element.get(0));\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element.get(0);\n fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n if (!fig.cell_info) {\n console.error(\"Failed to find cell for figure\", id, fig);\n return;\n }\n\n var output_index = fig.cell_info[2]\n var cell = fig.cell_info[0];\n\n};\n\nmpl.figure.prototype.handle_close = function(fig, msg) {\n fig.root.unbind('remove')\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable()\n $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n fig.close_ws(fig, msg);\n}\n\nmpl.figure.prototype.close_ws = function(fig, msg){\n fig.send_message('closing', msg);\n // fig.ws.close()\n}\n\nmpl.figure.prototype.push_to_output = function(remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n}\n\nmpl.figure.prototype.updated_canvas_event = function() {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message(\"ack\", {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () { fig.push_to_output() }, 1000);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('<div/>')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items){\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) { continue; };\n\n var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n button.click(method_name, toolbar_event);\n button.mouseover(tooltip, toolbar_mouse_event);\n nav_element.append(button);\n }\n\n // Add the status bar.\n var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n nav_element.append(status_bar);\n this.message = status_bar[0];\n\n // Add the close button to the window.\n var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n button.click(function (evt) { fig.handle_close(fig, {}); } );\n button.mouseover('Stop Interaction', toolbar_mouse_event);\n buttongrp.append(button);\n var titlebar = this.root.find($('.ui-dialog-titlebar'));\n titlebar.prepend(buttongrp);\n}\n\nmpl.figure.prototype._root_extra_style = function(el){\n var fig = this\n el.on(\"remove\", function(){\n\tfig.close_ws(fig, {});\n });\n}\n\nmpl.figure.prototype._canvas_extra_style = function(el){\n // this is important to make the div 'focusable\n el.attr('tabindex', 0)\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n }\n else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n\n}\n\nmpl.figure.prototype._key_event_extra = function(event, name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager)\n manager = IPython.keyboard_manager;\n\n // Check for shift+enter\n if (event.shiftKey && event.which == 13) {\n this.canvas_div.blur();\n event.shiftKey = false;\n // Send a \"J\" for go to next cell\n event.which = 74;\n event.keyCode = 74;\n manager.command_mode();\n manager.handle_keydown(event);\n }\n}\n\nmpl.figure.prototype.handle_save = function(fig, msg) {\n fig.ondownload(fig, null);\n}\n\n\nmpl.find_output_cell = function(html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i=0; i<ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code'){\n for (var j=0; j<cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] == html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n}\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel != null) {\n IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n}\n",
"text/plain": "<IPython.core.display.Javascript object>"
}
},
{
"metadata": {},
"output_type": "display_data",
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4nO3dfbRlZX0f8O/AMLwIwyDgG29GTCGA4jtjhveBSZqx6WomUdNZ1ZXSrkRGMXbUUkcdooAmIkriezDWJopt0pgGq8UkiFldTZpG81KrKzFBUcEoqYpAfYnM7h/7XOecM/fueTlzz97Pcz+ftb7r3nPunnuf+/N6zpd9zt47AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAP1CkruT3J/kjiRn97oaAACW1cuS3JXkrCSHJ7k+yZeSHNXnogAAWD53Jnnh2O1Dk3w1ydZ+lgMAwHJam2RXkvOm7r8tyQ3zXw4AAMvt5LQF8Iyp+z+Q5F1T961KclLa0igiIovnpLSPlwCDtTb7vgfwpCSNiIjsNScFYOAWew/gV7LnewDXJmlekjRXy37n5AGsocSYm9mVNLeX5PsFcO18Hr4BDtxLk3w+7alfjkxyXZIvZs+jgNdm9CC3U/Y75w5gDSXG3MyupLldHQUQKMs1Sb6c5IEsfR5ABXCGrB/AGkqMuZldSXNTAIEaKYAzZOsA1lBizM3sSpqbAgjUSAGcIVcMYA0lxtzMrqS5KYBAjRTAGbJ5AGsoMeZmdiXNTQEEaqQAioh0RAEEaqQAioh0RAEEaqQAioh0RAEEaqQAzpANA1hDiTE3sytpbgogUCMFcIZsH8AaSoy5mV1Jc1MAgRopgCIiHVEAgRopgCIiHVEAgRopgDPEVRnMzezKiCuBAExSAGfIlgGsocSYm9mVNDcFEKiRAigi0hEFEKiRAigi0hEFEKiRAjhDdgxgDSXG3MyupLkpgECNFMAZsn4Aaygx5mZ2Jc1NAQRqpADOEHtjzM3syog9gACTFEARkY4ogECNFEARkY4ogECNFMAZ4pxs5mZ2ZcR5AAEmKYAzxFUZzM3syogrgQBMUgBFRDqiAAI1UgBFRDqiAAI1UgBnyPYBrKHEmJvZlTQ3BRCokQI4QzYMYA0lxtzMrqS5KYBAjRRAEZGOKIBAjRRAEZGOKIBAjRRAEZGOKIBAjRTAGbJ5AGsoMeZmdiXNTQEEaqQAzpArBrCGEmNuZlfS3BRAoEYKoIhIRxRAoEYKoIhIRxRAoEYK4AzZNoA1lBhzM7uS5qYAAjVSAGfIxgGsocSYm9mVNDcFEKiRAigi0hEFEKiRAigi0hEFEKiRAigi0hEFEKiRAjhDvB/L3MyujHgPIMAkBXCGOCLT3MyujDgKGGCSAigi0hEFEKiRAigi0hEFEKiRAjhDXJfV3MyujLgWMMAkBXCGbB7AGkqMuZldSXNTAIEaKYAiIh1RAIEaKYAiIh1RAIEaKYAiIh1RAIEaKYAzZMMA1lBizM3sSpqbAgjUSAGcIdsHsIYSY25mV9LcFECgRgqgiEhHFECgRgqgiEhHFECgRgrgDNk6gDWUGHMzu5LmpgACNVIAZ8iWAayhxJib2ZU0NwUQqJECKCLSEQUQqJECKCLSEQUQqJECOEN2DGANJcbczK6kuSmAQI0UwBmyfgBrKDHmZnYlzU0BBGqkAM4Qe2PMzezKiD2AAJMUQBGRjiiAQI0UQBGRjiiAQI0UwBninGzmZnZlxHkAASYpgDPEVRnMzezKiCuBAExSAEVEOqIAAjVSAEVEOqIAAjVSAGfI9gGsocSYm9mVNDcFEKiRAjhDNgxgDSXG3MyupLkpgECNFEARkY4ogECNFEARkY4ogECNFEARkY4ogECNFMAZsnkAaygx5mZ2Jc1NAQTm5TlJ/jDJfUkeSnLI1NefmOTjSR5I8qUkOxf5Hr+Q5O4k9ye5I8nZS/wsBXCGXDGANZQYczO7kuamAALzcnnaEvgz2bMAHp3kniTXJlmT5JwkX0zy4rFtXpbkriRnJTk8yfVpi+JRi/wsBVBEpCMKIDBvF2XPAvj8JH83dd9VST47dvvOJC8cu31okq8m2brIz1AARUQ6ogAC83ZR9iyANyb5yNR2zxxtd3TaB6hdSc6b2ua2JDcs8jMUwBmybQBrKDHmZnYlzU0BBObtouxZAG9OcsvUdmeOtntMkpPTFsAzprb5QJJ3LfIzFMAZsnEAaygx5mZ2Jc1NAQTm7aLYAygi0msUQGDeLsqeBfB5ObD3AH4lHe8BPD1p1o/y3NHHHWMPgFuSZuvY7e3Z89JKmzN5pN227Plf3Rsz+VLMFdnz9AwbMnndzq2jn79we4f1WZ/1Wd8yr2/hcXB92sfHRAEElt8haY/e3ZS2AB41ur0q7V6+u5O8NskRaY8CviuTRwG/NMnn05765cgk16U9UthRwCIi+xl7AIF5eX7al3EfGmXh8wtHXz8n7XkCH0x7SphXLfI9rkny5bTnCrwjzgO4LPF+LHMzuzLiPYAAkxTAGeKITHMzuzLiKGCASQqgiEhHFECgRgqgiEhHFECgRgrgDHFdVnMzuzLiWsAAkxTAGTJ9igkxN7MbZmaZmwII1EgBFBHpiAII1EgBFBHpiAII1EgBFBHpiAII1EgBnCHTl6sSczO7YWaWuSmAQI0UwBmyveefX2rMzexKmpsCCNRIARQR6YgCCNRIARQR6YgCCNRIAZwhWwewhhJjbmZX0twUQKBGCuAM2TKANZQYczO7kuamAAI1UgBFRDqiAAI1UgBFRDqiAAI1UgBnyI4BrKHEmJvZlTQ3BRCokQI4Q9YPYA0lxtzMrqS5KYBAjRTAGWJvjLmZXRmxBxBgkgIoItIRBRCokQIoItIRBRCokQI4Q5yTzdzMrow4DyDAJAVwhrgqg7mZXRlxJRCASQqgiEhHFECgRgqgiEhHFECgRgrgDNk+gDWUGHMzu5LmpgACNVIAZ8iGAayhxJib2ZU0NwUQqJECKCLSEQUQqJECKCLSEQUQqJECKCLSEQUQqJECOEM2D2ANJcbczK6kuSmAQI0UwBlyxQDWUGLMzexKmpsCCNRIARQR6YgCCNRIARQR6YgCCNRIAZwh2wawhhJjbmZX0twUQKBGCuAM2TiANZQYczO7kuamAAI1UgBFRDqiAAI1UgBFRDqiAAI1UgBFRDqiAAI1UgBniPdjmZvZlRHvAQSYpADOEEdkmpvZlRFHAQNMUgBFRDqiAAI1UgBFRDqiAAI1UgBniOuympvZlRHXAgaYpADOkM0DWEOJMTezK2luCiBQIwVQRKQjCiBQIwVQRKQjCiBQIwVQRKQjCiBQIwVwhmwYwBpKjLmZXUlzUwCBGimAM2T7ANZQYszN7EqamwII1EgBFBHpiAII1EgBFBHpiAII1EgBnCFbB7CGEmNuZlfS3BRAoEYK4AzZMoA1lBhzM7uS5qYAAjVSAEVEOqIAAjVSAEVEOqIAAjVSAGfIjgGsocSYm9mVNDcFEKiRAjhD1g9gDSXG3MyupLkpgECNFMAZYm+MuZldGbEHEGCSAigi0hEFEKiRAigi0hEFEKiRAjhDnJPN3MyujDgPIMAkBXCGuCqDuZldGXElEIBJCqCISEcUQKBGCqCISEcUQKBGCuAM2T6ANZQYczO7kuamAAI1UgBnyIYBrKHEmJvZlTQ3BRCokQIoItIRBRCokQIoItIRBRCokQIoItIRBRCYh9cl+csk9yW5O8n7k5w8tc0pSW5N8s0kX03yK0lWT22zLcnnkjyQ5E+TXLDEz1MAZ8jmAayhxJib2ZU0NwUQmIfrkjw5baFbm+R9Sf5s7Our0hbE9yR5WNoy+BdJ3jS2zU8l+XqS80ff58ok9yc5aZGfpwDOkCsGsIYSY25mV9LcFECgD+cmeSjJsaPbFyX5TpLjxrb58bQF77DR7duTvHHq+3wyyY5Fvr8CKCLSEQUQ6MPLk9w5dvuqJJ+Z2ubRSXYlOWd0+2tJnjO1zTuT/NYi318BFBHpiAIIzNtlaffsXT523yuT/NHUdkekLYA/PLr9vSQ/MrXN65N8dJGfoQDOkG0DWEOJMTezK2luCiAwT89K+z6+H5+6v2sP4Nmj2/u9B/D0pFk/ynNHH3eMPQBuyeTF1LdnzxOrbs7k+2y2Jc3GqW02Tj0QX5E935y9IZNn7d86+vkLt3cMaH0bB76+oc7v/IGvb8jzO23g6xvq/Ba23df1LTwOrk/7+JgogMDy25q2/F22yNcuTPLtLP4ewDWj27cnuWHq330i3gMoIrLfsQcQmIcXpi1/G5b4+qokf57k15IcneTUtEcJjx8F/JNp9wKen/bAkBekPWWMo4BFRPYzCiAwD7vSHuX7zVHuH30cL4SnJPnQ6Gv3Jrkpu48AXnBlks8neTDteQDPX+LnKYAiIh1RAIEaKYAzZPo9SGJuZjfMzDI3BRCokQI4QxyRaW5mV0YcBQwwSQEUEemIAgjUSAEUEemIAgjUSAGcIa7Lam5mV0ZcCxhgkgI4Q6ZPgivmZnbDzCxzUwCBGimAIiIdUQCBGimAIiIdUQCBGimAIiIdUQCBGimAM2T6gvVibmY3zMwyNwUQqJECOEO2D2ANJcbczK6kuSmAQI0UQBGRjiiAQI0UQBGRjiiAQI0UwBmydQBrKDHmZnYlzU0BBGqkAM6QLQNYQ4kxN7MraW4KIFAjBVBEpCMKIFAjBVBEpCMKIFAjBXCG7BjAGkqMuZldSXNTAIEaKYAzZP0A1lBizM3sSpqbAgjUSAGcIfbGmJvZlRF7AAEmKYAiIh1RAIEaKYAiIh1RAIEaKYAzxDnZzM3syojzAAJMUgBniKsymJvZlRFXAgGYpACKiHREAQRqpACKiHREAQRqpADOkO0DWEOJMTezK2luCiBQIwVwhmwYwBpKjLmZXUlzUwCBGimAIiIdUQCBGimAIiIdUQCBGimAIiIdUQCBGimAM2TzANZQYszN7EqamwII1EgBnCFXDGANJcbczK6kuSmAQI0UwL3kV49Nc8uJaW5e1/9aRGT+UQCBGimAHfn3D0/zjQvSNJvS3Hdhmvce3/+aRGS+UQCBGimAHflvp7XlbyEPXpzmLQ/b/fVtA1hjiTE3sytpbgogUCMFcIm89ejJ8jeeG49ot9k4gHWWGHMzu5LmpgACNVIAl8gdpy9dAB+8uP/1ich8ogACNVIAx/Jrx6V5z3FpPnHW0uVPARRZWVEAgRopgKP84mFpvruxza7LFUARaaMAAjVa0QXw+tVp/uIJ3WVvsfz1U9p/7/1YBxZzM7uS5qYAAjVa0QXwvQ/fXeq+szHNx05P8+Vn7r0A3vbY9t87IvPAYm5mV9LcFECgRiu6AI7vAXzn2va+m45qX+LtKoDfu6wti32vX0SWPwogUKMVXQB3Js1//0dtqbv2kN33ffOive8F/Msn9L92EVn+KIBAjVZ0AfzFw9J8+kltofvWJWnesTbNO45J8/8u2XsB/PzT01y1pv/focS4nq3ZlTQ3BRCo0YougOPvAWw2pbl3Q5t9PRjk2tPal5H7/j1Ky+YBrKHUmN3856YAAjVSABc5wOOmI9t8/PF7L4E3HN7/7yEiyxcFEKjRii6AN69rX/ptNqX50nmTX3vNqr0XwAcuTvNLXgYWqToKIFCjFV0AdybNBx6R5n/90J73d10KrtmU5u/PT/Orx/a/fhFZ3iiAQI1WfAFcKvtyFPCGAayzxJib2ZU0NwUQqJECuESaN6dpXtxdALcPYJ0lxtzMrqS5KYBAjRTARfKOtWmat4yydelLwYlI/VEAgRopgIvkmxelaV66dAHse30iMr8ogECNFMBF8s61aZp/nKZ5Tppm89IFcOsA1lpizM3sSpqbAgjUSAFcIm95WJrvXLpn3nbM7m22DGCdJcbczK6kuSmAQI0UQBGRjiiAQI0UQBGRjiiAQI0UwBmyYwBrKDHmZnYlzU0BBGqkAM6Q9QNYQ4kxN7MraW4KIFAjBXCG2BtjbmZXRuwBBJikAIqIdEQBBGqkAIqIdEQBBGq01wL48hzRnJlnN8nOJtnZnJHnNP8yJzevyqreH5j7jnOymZvZlRHnAQSYtNcC+Oyc2SyUv/Gcn0t7f1DvO67KYG5mV0ZcCQRgUmcBfEVWNyfkymaxApjsbJ6SZ/X+wC4ispxRAIEaLVkAX5HVzVLFbzwX5uLeH6BFRJYrCiBQo0UL4LYc3xyfbc3eyt8ReXnzEzmn9wfovrJ9AGsoMeZmdiXNTQEEarQ2SfPkXN48LT/W7MihzYtyXPOY/KtmX/b+PSzbm5/OD/b+4N5XNgxgDSXG3MyupLkpgECN1iZpkqubZGdzXF7UHJOXNPtS/rwELCIrIQogMA+vTvI3Sb6R5KtJPpLk3Kltnpjk40keSPKlJDsX+T6/kOTuJPcnuSPJ2Uv8vIkCOEuuyrreH6hFRA52FEBgHn4wybGjz1cn+TdJ/i7JqtF9Rye5J8m1SdYkOSfJF5O8eOx7vCzJXUnOSnJ4kuvTFsWjFvl5B60AHpJXNpvz1OYFObH3B2wRkYMVBRCYt8OT/HySh5IcP7rv+WkL4SFj212V5LNjt+9M8sKx24em3Zu4dZGfcdAK4EIemZ9tzsyze3/Qnkc2D2ANJcbczK6kuSmAwLz8WJKvJ9mV5HtJ3jD2tRvTviw87plpS+LRaR+gdiU5b2qb25LcsMjP2q8C+HN5xD5tl+xsTswLen/QX+5cMYA1lBhzM7uS5qYAAvO2Lu1Lu1vG7rs5yS1T252ZtgA+JsnJaQvgGVPbfCDJuxb5GQd9D+BCVspeQBGpOwog0IdVaQ8IecLo9jLtATy9SdaP8tzRxx3N7kK3pUm2jt3e3iQbmsnSt7lJrvj+7W1Js3HqgXRj0mwbu31F9nxpZkMmz9m1NZPX8dyRNOtHHxfu25LJSz1tz56nfdicyb0A1md91md9S63vuaOP65Pm9CiAwPytTvJgkp8Y3X5eDuw9gF9Jx3sAn55LmoO5929Lzp540K0123r++aXG3MyupLnZAwjMw1VJHjH6/MS0L9t+LckjR/cdnfb0Lq9NckTao4DvyuRRwC9N8vm0p345Msl1aY8UXvIo4KuT5uxsaQ7Lv5t44DsqL21elVXNk/NPmv0pgC/Mw3t/wJ9HpvdAiLmZ3TAzy9wUQGAebk3y5bTn77s7ye8kecrUNuck+cO0ewbvSfKqRb7PNaPv80D24TyAi10LeGfSPCdnNBuysdnfPYArpQCKSP1RAIEadRbAA30JWAEUkVqiAAI1WrIAnpWfbPan9L0ox30/r8whvT9oi4gcjCiAQI32KIA/k1Oa/Sl+K/lawN6PZW5mV0a8BxBg0h4F8EU5rnl0/nWjAO49jsg0N7MrI44CBpi06EvAV+aE5tk5s3l2zmw25LJmoewt3DeeK3NC7w/uIiLLFQUQqFHnQSA7k+aVOaS5Omuaq7Om9wdiEZF5RwEEarTXAihLx3VZzc3syohrAQNMUgBnyPRlpsTczG6YmWVuCiBQIwVQRKQjCiBQIwVQRKQjCiBQIwVQRKQjCiBQIwVwhmwYwBpKjLmZXUlzUwCBGimAM2T7ANZQYszN7EqamwII1EgBFBHpiAII1EgBFBHpiAII1EgBnCFbB7CGEmNuZlfS3BRAoEYK4AzZMoA1lBhzM7uS5qYAAjVSAEVEOqIAAjVSAEVEOqIAAjVSAGfIjgGsocSYm9mVNDcFEKiRAjhD1g9gDSXG3MyupLkpgECNFMAZYm+MuZldGbEHEGCSAigi0hEFEKiRAigi0hEFEKiRAjhDnJPN3MyujDgPIMAkBXCGuCqDuZldGXElEIBJCqCISEcUQKBGCqCISEcUQKBGCuAM2T6ANZQYczO7kuamAAI1GlwB/Ohj09z+uDZvOqL/9XRlwwDWUGLMzexKmpsCCNRoMAXwfSekuevpab53WZpmU5u/e2aazz29/7WJyMqNAgjUqLcCeE3S/MkP7S57S+Vbl/T/BCAiKzcKIFCj3grgO9em+b/nL176PvOk3en7wV9EVnYUQKBGvb4E/O51aT508mT5u+20/h/w9zWbB7CGEmNuZlfS3BRAoEaDeA/gu9ftLoCvXz35tWuS5hNntZ//9VPa9wn2/WSykCsGsIYSY25mV9LcFECgRoMogDevm9wL+OYj23zhGd3vD3zH2jQ3HN7/k4uI1BsFEKhR7wXwPz1y7weCdOUbF6Z517HdP+PfPzzNrSfvzhuVRhHZxyiAQI16K4DvWJvm0+em+falsxXAZlOaeze032s6nzgrza8dl+YbF0xu/x+OPzi/w7YBPDmVGHMzu5LmpgACNeqlAH770jTf3bhnkfvgY9Jcd+jshXAhuy5f/Od8d+PB+T02DuCJrcSYm9mVNDcFEKjR3ArgdYem+dVj09yzfvGytnCgx860RfBglcCl0vcTkoiUEQUQqNHcCuC71nac7PnSNO8/cfe2f3rW5F68v3jCwS+Atz+u/ycWERl+FECgRnPdAzhe7MbzzrWT2157aHtk8M3r0tx8bJrXrR67PcrfPNVeQBFZ/iiAQI3m+h7Ajz42zUOX7y5g/3BZml8+6sC+12tWpXnw4n4LoPdjmZvZlRHvAQSYNPeDQD73tLZ83X9Rmt84Yf///WsPSXPLiWk+//QDL353PePgXGbOEZnmZnZlxFHAAJPmXgDff2J7+bcDKX87k+bPzpn9pd+DdRoYEak/CiBQo95PBL2v+f0fSPN/zz84B4AogCKyr1EAgRoVUQB/44SDewTwbz/64KzLdVnNzezKiGsBA0xakQXwYB0BvHkAsykx5mZ2Jc1NAQRqtGIL4KfP7f/3EpHhRwEEajT4ArjUZeOGshdQROqOAgjUaPAFcKnydvvj0nzrkv0vffdd2F6VpO/fS0TKiAII1GjQBfC3H31w9/h97PSDewTwhgHMqMSYm9mVNDcFEKjRIAvgrxyV5q6nH9gevqXyvgM872BXtg9gViXG3MyupLkpgECNBlkAD+Zev4cuS/Obj+r/dxKRMqMAAjWqugB+5klpPnxq/7+PiJQbBRCoUbUF8OOPX/51bh3ArEqMuZldSXNTAIEaDbIA3vKI2crfHz4+zWtWLf86twxgViXG3MyupLkpgECNBlkAdybN7/3AbHv/5lEARaT+KIBAjaosgM2mNG89uv/fQUTKjwII1GiQBfDNR6b5yg/vWeo+fGqa/3JSd/G7Z32aDzwizfWHLv86dwxgViXG3MyupLkpgECNBlkAv7PIpd8++tg014y+fuvJi5e/XZenee0h81vn+gHMqsSYm9mVNDcFEKjRIAvgUnv3futRaX712HYP4cdOT/O9y/YsgPNc58HeG3NN2t/vM09qf5+3H9P//xYlzG0lxezmPzcFEKjRIAvgn57V/TLvn53dbvfRx7ZF8G+f2t7/sdP7X/ssuX715O/54MVpfn0ZrmAiIvseBRCo0SAL4LWHpvlfP7T3AriQGw5Pc/O6/tc9a6YLYLMpzf88s/91iazkKIBAjQZZABdy59P2rQD2lYN9TraVUgCdy87sSpqbAgjUaNAF8I7TFy+Adz41zRsP7399B/uqDNcekuZL59VfAF3NwuxKmpsCCNRo0AXww6cuXgC/8Iw0Nx3V//qWI//xkfUXQJGSogACNRp0AVzsJeD7L0rzS2v6X9ty5dpD0/zvJyqAIkOJAgjUaG2S5vVHpPnsU9rC0feD7XS+dv5k+l7PeLYv4/f++gXt/x7fujTNex/e/+9aytxqj9nNf24KINCHDybZleTSsfsuTvKJJA8m+dskPzf1b9YkeWuSe5Pcl+R3k5y8xPdfm6S579Lde5xuObH/B+tSsmEZv/fXL0jzrUvS/Oaj+v89S5pb7TG7+c9NAQTm7XlJbkvyUHYXwNOSPJC29K1OcmGSbyT5p2P/7q1J/jxt6Ts6yXuTfHKJn7FHAbzr6f0/WNecT5+b5ndO2vt2/+H4NO89vv/1iqz0KIDAPJ2c5POjj+N7AF+ddu/fuBuT/N7o88PT7hl81tjXj0/y3SQbFvk5a5M0rzokzXWHtrl2jpdSW4lpNrVXMPl15U6kiCiAwDzdluSK0efjBfC3k7x9atufTvL3o8/PTbvH8JFT2/xVkhcu8nMGfRBIjfnCM9J85LT+1yEi+xYFEJiXK9MWwAW7klwy+vz3k7xuavsfTbuHL0nOT1sAD5/a5o+TvGKRn6UAzpDNA1hDiTE3sytpbgogMA+PS3JPklPG7tufPYBPjD2Ac8sVA1hDiTE3sytpbgogMA/PT/LtJF9NexTvvWkL4NeTvCPJq7L/7wE8Icl30vEewNOTZv0ozx193DH2ALglk2fS3549j6rbPPUguy1pNk5ts3F0//iD8vR/mW/I5CkbtmbyMk47rM/6rM/6lnl9C4+D69M+PiYKILC8jkjymKnsSvJTSdYlOTXtUcA/m+SwJBekLYfjRwG/Je1Rv6ckOSbtUcDTpXGBPYAiIh2xBxDoy/hpYJL21C+fTLun7860ZXDcmiS/kvZl4W8muTXJSUt8bwVwhmzr+eeXGnMzu5LmpgACNVIAZ8j0S1BibmY3zMwyNwUQqJECKCLSEQUQqJECKCLSEQUQqJECKCLSEQUQqJECOEO8H8vczK6MeA8gwKQiCuDLj1nXnP2GDzT5VNP8y3PXNy865fTe17Qzjsg0N7MrJY4CBphURAH85xf84yafar6fR/7mJ5uLX/Dq5hVHHNn72kSk7iiAQI2KLIALecz7/7j3tYlI3VEAgRoNvgD+uyOPap698Z8tWgDzqabXtbkuq7mZXRlxLWCASYMvgEsVv3yqaR7/tv/a69qmrzMq5mZ2w8wsc1MAgRoVXQBftu743tcnInVHAQRqpACKiHREAQRqNNgC+G+PWdec9L7/0VkA+34PoIjUHwUQqNEgC+BLjzuxOeOmD+61/J177Xt6XeeGAcyqxJib2ZU0NwUQqNEgC+Bj3/0Hey1/5738xmbHYWt6Xef2AV1tEg8AAAucSURBVMyqxJib2ZU0NwUQqNHgCuDa37trouhdfdTRzdVHHd08bcdbv3/fE17/G80rD13d+1pFpP4ogECNBlEAdxy2pjn/qusmit/5L76+9wd+EREFEKjRIArgzz/q5Inyd9GV1zT/Yv3G3h/495atA1hDiTE3sytpbgogUKNBFMBHf+BPvl/+/vn5P9r7k8W+ZssA1lBizM3sSpqbAgjUaBAFcHzv38vXHrfH169JmmsPbdP3E4mIrKwogECNBl8AbzkxzR2np2k2tbnlxD3zlof1/yQhInVGAQRqNIgCeMm/fkWTTzXNk15zc7NjzeHfv//Dp+4ufl25Z32aXz5q/uveMYAnpxJjbmZX0twUQKBGgyiArzx0dfOiU05vrj7q6O/f97snp/nuxn0rgM2mNPddOP91rx/AE1uJMTezK2luCiBQo0EUwOnsa+mbzpuPTPPBx0zeXsg1y7BOe2PMzezKiD2AAJMGWQD/z7kHXgKXyi+t6f/3EpHyogACNRpkAXzn2oNfAP/qyf3/XiJSXhRAoEYrpgA2m9J84RkHd53OyWZuZldGnAcQYFLvBfDtx6R5xzG7by9X+Ws2pfnyMw/u2l2VwdzMroy4EgjApF4L4K8fn+aBi9N869I0tz+uzf4c+dt3ARSR+qMAAjXqtQD+8RnLV/YUQBE5GFEAgRr1VgDfd8J8y1+zKc0XD/J7ALcP4MmpxJib2ZU0NwUQqNGKKYB//ZSD/ztsGMATW4kxN7MraW4KIFCjFVMAnQdQRA4kCiBQo14K4GtWpfnmRQqgiAw/CiBQo14K4Lzf+6cAisiBRgEEaqQAzpDNA3hyKjHmZnYlzU0BBGo09wJ4x+nzL39/dEaa1xxy8H+XKwbwxFZizM3sSpqbAgjUaO4F8HNPm38B/M+P7v8JSETKjAII1GjuBfBPfmi+5e/Pz+n/CUREyo0CCNSouPcAfvvSNB87vc2+XDZuOQvgtgE8OZUYczO7kuamAAI16qUAvue4Ay+A71y7+/u8a233tg9enOamo5bv99g4gCe2EmNuZlfS3BRAoEa9nQj6149P873L9q/8fXfjnt/nbUdPfp+HLk/znUvb9P2kIyLlRwEEatRbAdyZNP/lpPYl3X0tgG952OLf55ZHpPnMk9rc/rj+nzBEpJ4ogECNei2AO5Pm3g2zF0ARkeWKAgjUaK4F8EOntO/bG7/vxiP2rfx9/PHtJeT6fjIYj/djmZvZlRHvAQSYNLcCuHDAxm8+Ks2bj5xMqXsAHZFpbmZXRhwFDDBp7gVwlgytAIpI/VEAgRrNrQC+bnWav3yCAigiZUUBBGo01/cAvmZVmrueXk8BdF1WczO7MuJawACTirkU3NcuSPOmI/t/IhnP5gGsocSYm9mVNDcFEKjRXAvgu9e15+k7kAL4kVP7fxI5kLz2kPZ3vv1xaa5f3f96RGT/ogACNZprAfyDHziw8veFZ6R5w+H9PxEcSL543u7f40vn9b8eEdm/KIBAjeb+EvBnn7K7EP3DZbsv2/YPHZeF++sn9/8kcCB57SF7/i73rO9/XSKy71EAgRr1ciWQhcu2/cYJu+9778N33/+5p+0uTLsuT/MHA72824a9fP3u8/YsgH2veQjZ29zE7IY0NwUQqFHvl4JbLL94WJoPndzm1pP7X89S2b6Xr//HR06Wv9//gf7XPITsbW5idkOamwII1GiQBbCmjBfAG4/ofz0isn9RAIEaKYDLnK9fsLsAvntd/+sRkf2LAgjUSAGcIVv3YZvXr57cC3jr6GXtlbw3cF/mJmY3lLkpgECNFMAZsmUftpkugOOntvn0uf3/DkOdm5jdUOamAAI1UgCXIe9el+bbl6Z5+zHtx65zHH770jS3Pbb/NYvI4lEAgRopgDPkzUemeeDi3WXuv52W5qGO8xkulT9wdLDIYKMAAjVSAPcxbzqyvZzbG9bsvrTbnc84sCubTOdvn5rmhkKvdHIg2TGANZQas5v/3BRAoEYK4D7mKz/clrUvP3N3cXvJaQenADab0rxrbf+/47yyfgBrKDVmN/+5KYBAjdYmaa4dwAP0EHPtoW0eunzx0va7TzrAwvcjo6zQAvjcAayh1Jjd/OemAAI1WpukeWPSvG2UX06a1wzgAbvvfPjUvRe5A94D+CNpmh9buQXQXiyzK2luCiBQoz0K4NuS5qakuSFp3jCAB+6+si9FbqaXgFfwHkAlxuxKmpsCCNRobZLmurQlcDo3JM0vjuX1owfD2vN/nprmvkv3nk3H79t2+5Kbjun/955XTh/AGkqN2c1/bi+JAgjU56TsfnATEZGlc1IAKrEq7YPaWhERWTInpX28BAAAAAAAAACAIfmFJHcnuT/JHUnO7nU1/XtOkj9Mcl+Sh5IcMvX1Jyb5eJIHknwpyc5FvsdKnOnrkvxl2rndneT9SU6e2uaUJLcm+WaSryb5lSSrp7bZluRzaef7p0kuWL4lD8ark/xNkm+knctHkpw7tY2/u737YJJdSS4du+/iJJ9I8mCSv03yc1P/Zk2Stya5N+3f7u9mz79bgOq8LMldSc5KcniS69M+uRzV56J6dnnaEvgz2bMAHp3kniTXpn3iOCfJF5O8eGyblTrT65I8OW2hW5vkfUn+bOzrq9IWxPckeVjaMvgXSd40ts1PJfl6kvNH3+fKtGWm9iMvfzDJsaPPVyf5N0n+LrsPOPB3t3fPS3Jb2v/PLhTA09IW5p9LO9cL05bsfzr2796a5M/Tlr6jk7w3ySfns2SA/tyZ5IVjtw9Nuwdiaz/LGZSLsmcBfH7aJ+bx+65K8tmx22baOjft/BaKzUVJvpPkuLFtfjxtwTtsdPv2JG+c+j6fTLJj+ZY5OIcn+fm0szt+dJ+/u24nJ/n86OP4HsBXp937N+7GJL83+vzwtHsGnzX29eOTfDfJhmVaK0Dv1qZ9sDxv6v7bktww/+UMzmIF8Ma0L8+Ne+Zou6NjpuNenraULLgqyWemtnl02nmdM7r9tbR7X8e9M8lvLccCB+bH0u793JXke0neMPY1f3fdbktyxejz8QL420nePrXtTyf5+9HnC/+R8sipbf4qk2UaoCoL/7V8xtT9H0jyrvkvZ3AWK4A3J7llarszR9s9Jma64LK0e/YuH7vvlUn+aGq7I9LO64dHt7+X5Eemtnl9ko8uwxqHal3al3a3jN3n725pV6YtgAt2Jblk9Pnvp31v6rgfTbuHL2nfavBQ2j2B4/44ySsO7jIBhmOl7zXYG3sAD8yz0u7J+vGp+7v2AC4crLCS9wCOW5X2vWpPGN32d7e4x6V9b+QpY/ftzx7AJ8YeQGCFWux9Q1/Jynjf0N4sVgCflwN7L9ZKmenWtOXvskW+dmGSb2fx9wCuGd2+PXsWlk9kZb0HMGkPWHgwyU+Mbvu7W9zz0/5NfTXtUbz3pi2AX0/yjiSvyv6/B/CEtO9V9R5AoGovTfvm6bOTHJn2SM4vZuUcObiYQ9I+MWxKWwCPGt1elXZvy91JXpv25ctz0h55OX405kqd6QvTPvEu9cS5Ku3Rlr+Wdo6npj1KePwo4J9Muxfw/LQHhrwg7Sljaj8K+Kokjxh9fmLal22/lt17pvzdLe6ItC+Bj2dX2qPJ16X9G3sgyc+m/Xu6IO3f6PhRwG9Je6DRKUmOSXsU8HRpBKjSNUm+nPaB8o6svHOHTXt+2ieRh0ZZ+PzC0dfPSXuewAfTvvz0qkW+xzVZeTPdlXbPyTdHuX/0cbwQnpLkQ6Ov3Zvkpuw+AnjBlWmLzINpzwN4/nIueiBuTfv3cn/aovc7SZ4ytY2/u30zfhqYpP3/7SfTzu3OtGVw3Jq056P8+7R/r7em/v/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBXu/wMJObwwi/nvKAAAAABJRU5ErkJggg==\">"
}
}
]
},
{
"metadata": {
"trusted": false,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"toc": {
"threshold": 6,
"number_sections": true,
"toc_cell": false,
"toc_window_display": false,
"toc_section_display": "block",
"sideBar": true,
"navigate_menu": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"widgets": {
"version": "1.2.0",
"state": {
"108b318e8b804db1911465768a38278d": {
"views": [
{
"cell_index": 9
}
]
}
}
},
"language_info": {
"nbconvert_exporter": "python",
"mimetype": "text/x-python",
"version": "3.5.2",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"name": "python",
"file_extension": ".py",
"pygments_lexer": "ipython3"
},
"nav_menu": {},
"gist": {
"id": "",
"data": {
"description": "notebooks/Interactive PQ.ipynb",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment