summaryrefslogtreecommitdiff
path: root/firmware/Run_analysis.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/Run_analysis.ipynb')
-rw-r--r--firmware/Run_analysis.ipynb4874
1 files changed, 4819 insertions, 55 deletions
diff --git a/firmware/Run_analysis.ipynb b/firmware/Run_analysis.ipynb
index eea8d94..aeebf6d 100644
--- a/firmware/Run_analysis.ipynb
+++ b/firmware/Run_analysis.ipynb
@@ -9,7 +9,7 @@
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
- "%matplotlib inline\n",
+ "%matplotlib notebook\n",
"import numpy as np\n",
"import numpy.polynomial.polynomial as poly\n",
"\n",
@@ -32,10 +32,8 @@
},
{
"cell_type": "code",
- "execution_count": 31,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 3,
+ "metadata": {},
"outputs": [],
"source": [
"def fetch_run(names_or_ids):\n",
@@ -70,13 +68,33 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 4,
"metadata": {
- "collapsed": false
+ "collapsed": true
},
"outputs": [],
"source": [
- "def plot_run(figtitle, *names_or_ids, combine_plots=False):\n",
+ "def apply_style(ax):\n",
+ " ax.spines['top'].set_visible(False)\n",
+ " ax.spines['right'].set_visible(False)\n",
+ " ax.spines['bottom'].set_color('#08bdf9')\n",
+ " ax.spines['left'].set_color('#08bdf9')\n",
+ " ax.tick_params(axis='x', colors='#01769D', which='both')\n",
+ " ax.tick_params(axis='y', colors='#01769D', which='both')\n",
+ " ax.xaxis.label.set_color('#01769D')\n",
+ " ax.yaxis.label.set_color('#01769D')\n",
+ " ax.grid(color='#08bdf9', linestyle=':')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "color_bright, color_dark = '#ffd2e9', '#fe3ea0'\n",
+ "\n",
+ "def plot_run(figtitle, *names_or_ids, figsize=None, combine_plots=False, svgfile=None):\n",
" run_info, data, cal = fetch_run(names_or_ids)\n",
" \n",
" if combine_plots:\n",
@@ -84,8 +102,9 @@
" else:\n",
" rows = (len(data)+1)//2\n",
" cols = 2 if len(data) > 1 else 1\n",
- " fig, axs = plt.subplots(rows, cols, figsize=(16,5*max(2, rows)), squeeze=False)\n",
- " fig.suptitle(figtitle)\n",
+ " fig, axs = plt.subplots(rows, cols, figsize=figsize or (8,3*max(2, rows)), squeeze=False)\n",
+ " if figtitle:\n",
+ " fig.suptitle(figtitle)\n",
" if combine_plots:\n",
" axs = np.array([axs[0,0]] * len(names_or_ids))\n",
"\n",
@@ -105,15 +124,18 @@
" \n",
" offx, slope = fit_coefs = poly.polyfit(duty, volt, 1)\n",
" fit_func = poly.polyval(duty, fit_coefs)\n",
- " ax.errorbar(duty, volt/vref, yerr=stdev/vref)\n",
- " ax.plot(duty, fit_func/vref)\n",
+ " ax.errorbar(duty, volt/vref, yerr=stdev/vref, color=color_bright, zorder=1)\n",
+ " ax.plot(duty, fit_func/vref, color=color_dark, zorder=2)\n",
" \n",
+ " apply_style(ax)\n",
" ax.set_xscale('log')\n",
" ax.set_yscale('log')\n",
" bit_offx = offx/slope\n",
" offsets.append(bit_offx)\n",
+ " \n",
" print('Channel {} offset: {:6.3f}lsb'.format(ch, bit_offx))\n",
- " ax.set_title('Channel {}, offset={:.3f}lsb'.format(ch, bit_offx))\n",
+ " if figtitle:\n",
+ " ax.set_title('Channel {}, offset={:.3f}lsb'.format(ch, bit_offx))\n",
" \n",
" # reuse latest duty cycles here\n",
" ax.set_xticks(duty)\n",
@@ -124,17 +146,19 @@
"\n",
" ax.set_xlim([min_x*0.9, max_x*1.1])\n",
" ax.set_ylim([0, max_y*1.1])\n",
+ " \n",
" if len(names_or_ids) > 1:\n",
" print('Offset statistics: mean={:.4f}lsb, stdev={:.4f}lsb'.format(\n",
- " statistics.mean(offsets), statistics.stdev(offsets)))"
+ " statistics.mean(offsets), statistics.stdev(offsets)))\n",
+ " \n",
+ " if svgfile:\n",
+ " fig.savefig(svgfile)"
]
},
{
"cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 6,
+ "metadata": {},
"outputs": [],
"source": [
"def fetch_runs(*names):\n",
@@ -147,50 +171,2411 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 11,
"metadata": {
- "collapsed": false,
"scrolled": false
},
"outputs": [
{
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.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 backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\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 * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.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.\n",
+ "mpl.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\n",
+ "mpl.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",
+ " */\n",
+ "function 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",
+ "\n",
+ "mpl.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 * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.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",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\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 + '\" width=\"' + width + '\">');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.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.\n",
+ "if (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/html": [
+ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4nOy9eZxcVZ3+/yCjoqO4Mjrj1xkGdDYdld84+0wTVtlEQJCgqHFDVtlSreDWiqIOLogihlRjZyEECIQlEAiEBAgJIUAgkBACIQnZ9+70Wtvn8/vj3Op7q7qqu6r63Dqnup7361WvpE/duvc551Q9n3vOPQtACCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELGKgqgLfL3hCDtYAvnbgvO9V4L5/KBNpj8xEUHgJ4Kjy2uN0IIIYQQQpxzPsyN6tJhjmEDpHLawAYIIYQQQgghZXkCwDqYm9UPlTmGDZDKaQMbIIQQQgghhJTkb2FuUk8FsAPAD8scxwZI5bSBDZBS/LlrAYQQQgghxD3fA7AXwJsA/AHAmjLHjaYB8g8AbgOwE0A/gJcB/DTyfhvCpy8dADoBdAH4E4C3Fp3rKwAegWkspQCsAnBeiWuuBzAHwP8AeArAAIDXAHyp6Lh8Pv4bwK8Djb0AZgM4qMR5jwfweHBMN4D7AHyk6Jh8fqIcA2BRkLcemDK4usT5K6EjOMchAB4MtGwB8AMA+xUdW1xvHTBlU0wpzQBwNoBnYOptD4CZAD5Ygcb8+f4JwAyY79jy4L2FwauYYm0HB+eYCOAcAGth6nwZgH8t+uz7Yb4vm4JjtgK4G3YayIQQQgghxCIvAUgG//9fmBu+4ps7oPYGyMdgGhO7YG64zwHwCwArIse0Bed6FsAdMA2KyUHaL4rO9xTMjeYlAC6EuQFXABcUHbcewGoA22AaOxfA3EgLChsM+Xw8C2B+cM5fAsgCuLXonF8MPj83OK4VZujaXhSWQz4/eT6C8Mb5WwC+CeAaAI+iNjpgGgRrAEwN8nZvcM0fFx07mgbId2HyOxOmTn4A00BbB+CdI2jMn28lgLuCz58fvLcQ1TVAngXwCkx5JwINGwG8MXLsEzCNu6sAfA3AFTAN1ZYRdBJCCCGEkDryLzA3eEcHf+8Hc2N3bYlja22APApgH4C/LkqP9tS3BedqLzrmTpiGS5S3lLjGAzC941HWB+f830jaQTBPQn4ZSZsQHPdQkaZfwzRC3hH8/TaYhsaNRdd5H8yNbzS9DYU385fA7hCzjuB810XS9oN54pMquk6tDZC/gcn/lUXHfRRApkR6ufPdUuK9haiuAbILwLsi6ScH6ScFf78T4ZMSQgghhBDiMb+GeUKwfyTtlyXSgNoaIAcFx5Rq0ERpQ+knL5cG6QeW+dw7YG62rwiOe0fkvfUwve/FPA/TsMkzIfjsGUXHnRqkf6zo7yOCa0ZfD8L00Bfnp/gaXwPwhjJ5qYaO4Hx/V5R+XJA+PpJWawPkUpinHx/C0PyugmmwDUf+fKWeQCxEdQ2Q64uOe1eQ/q3g7zfDNLzmoLChQgghhBBCPGJ/mHkDt8DcZOZfZ8Dc3B1bdHwtDZB/D475+gha2oLj3leUnr/G30TS/hvAwzDzHrToFX3Ksh5mqFQxCwEsKHGNfy86blyQfnjwd2uJ60VfXSXyk+ctMPM/FGb40EwAn0PtjZEOADkAf1aUfkhwjW9H0mptgPwBw+f3+RE05s9Xar7IQlTXAPl2iWMVhQsmXAJTJmkAj8HU1/tH0EgIIYQQQurIMRj+BnNK0fG1NED+A9U1QIqHKBVf41CYIVTPwcyjOAFm+NivS2hZD9MjXsxCFN785q/xyaLjxgXp44K/vxP8fXZwzeLXuMhn8/mJ8gYARwVaVwXvz8fQJ02V0IHSDZBDMXID5E8o3QC5qkjzH2GegHwKpfP7HyNobEP5YWcLULoBMg3lJ6EXU2p1r0MBXA5gHswTkb0ADhtBJyGEEEIIqRMdALYDOL3EawbMvI3ofIt6DMEaqQGSn0tRPJ/kpyW0rIfdBki5J0OlaMPIy/BeicL5N9XQgdqHYP0aZs5KMVNRqDlR5hqV0obyDZA7YRqRxTyG0TVAonwY5inZ9JGEEkIIIYSQ+HkLTAOjeNJ3nv+CucE7M5JWj0noIzVALsLQIVnvgBlKFncD5ECYYVYLUbj6Up7okr1tKLyZf3eJ408IjjmxxHsj0YHyk9DTRVqK6+0CFM5tAYC/hFlSOKr5UJhJ6Ddj6NK++wF4zwga21C+AXINzJOsqM6PwzzVWR9JOxiVNUDeCuCAovffADOX6fYRdBJCCCGEkDpwJswN3GfKvP8GmH027omk1doA+TjMzW1+Gd5vwDyxiPaAt6GyBsjfwwytWQFzI/1tAK8G54q7AQIAn4e5SX4BZonacwD8BGZ/i9+XyE+ea2GWkr0KZjjalTD7VWxE4cT5hUWfK0cHCpfhPR/hMrw/LTq2uN7eDbOHyFoAF8NM4H8dZoni4mvnh509AfNE5FyYZZHXYOQVp9pQvgHyjzDl+CxMPf4I5mncCtTWAPkEgN0AboBppJ4HMwxLAXx2BJ2EEEIIIaQO3ANzA1u8yV+UP8H0pud7umttgABmH4w7Ycbk98PszxHdr6INlTVAAODTMBOg+2H2o2iF2ZywHg2QfPoDMMOY+mEaQH+CWdK4OD95joTZC2MzTANqM8wwtw8XnftpmA30RqIDQzci3BZct3hie6mhSsfANKJSMHXxhRKa85wGs/FiT/B6CaaxNdLQrPz5yi09/AWEGwsuhxna1oHaGiDvCTS9FGjsBPAkhq5sRgghhBBCCAl4O8z+GsUbKhJCCCGEEEKIdU6E6f1/k2MdhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIZ6jAH7vWoRFFECbaxEWeR+AWQB2weTtkiD9wwDmAegK0k9xoq55aIMp52oYF3zmdNtiiHfQR/2mnF/+K4DFAHqD9E84Udc8tIE+SsiY51AAkwC8BmAAwD4ATwC4GMBbIsc1Y+B8C4B2AC/CBKQeAM/DlM0bi479SwA/B7AAQHdw/nHW1I7MjOC6EwGcDeAfgvTFALYCuDBI/3+Wr/tfMOX4Tkvnew+ABIDHAOwE0AngSQBnVnme98F8rzfDfK/Xw9RlMUfD1Nmu4FpPAfhiiePOA3A7gNdh6rajzHXbwMDZjNBHy1ONjwLGS26E+f33wvw+/z87ckeklF++EcY/VgM4J0h/l+XrngC7DbkPAvghjJ/thfG3hTB+Vw2HwsSWHQD6AbwC4KdFx3wDwKMAtgNIAVgH4E8ADi46rprvQRvoo4SMaU4A0AdjUL+FMZILANwCIA0TBPI0Y+B8N8zN7/8BOB/AuQCmAhAYU44yLjjnGpggVu8GyDYA04vSDoDR+pMYrzsRJq8HWzrfSTDfvbtgAtMFAB5BdT2tH4RpKLwO4PsAvgrgewDuKTruZJjyeQLmhuMCmECqAC4tOnY9gN0A5gLIgA0QEkIfHZ5qfPQNML/HHpgb6AsArIRp0H3YlugylPPLf4DJ59djvPbvUb1vDMeFMN/JGTBleDGAZ4JrfKXCc3wCplNmJYBvw+T/xzCNiyh/gPHDy2G89iqYeLQTwF9Fjqvme9AG+ighY5a/hekxfwmm976YD8GYVp5mDJzl+F3w+Wi5vR3GYAFjgPVugAiG1s9fBzomxnhd2w2QvwXwN0Vp+wGYD9Oz/OcVnON+mJ7o94xw3DyYJyRvjqT9GYBXYXrmovxNoAMwN0cdZc7ZBgbOZoI+atdHP4ehv4WDYBp3xTeptinnly0lNNnGdgPkIwDeW5T2Zpjv6cYKPv8GAC/ANBjeMsKxpfgXmPx8p4JjS30P2kAfJWTMcgPMj/W/Kjw+HzhPgXmEmoLpGTmu6Li/gekReRnmke1umKErBxcdNyE4538D+DXCx+2zYQJOlPUA5gD4H5hHygMwN5hfKqHznQCuhTHZFMzN5LdhDLU4P21lczs8lwef/4cy79tsgBwCU357YHq0ngRwYuT9CcG1il9tJdLWB595O0wZrYcpox0AHsLQYQ7/DuABmMflfTBPB/478n6pa9hsjES5KDj3P49wXL638rzg7wNQepgHYMryxTLpTw5zjWobIMcAWATTm9gD89u4OvL+uOAzZwbp22B+C/fAPM0h/kIfteujt8F8/4uvMwkmX29GbRwG8/RyH8xvcD6A/4i834bSftlRIn1h8Jn3wzwN2ARTRlsB3I2hdXQ8gMcD/d0A7oNpIOQpdQ2bjZEovwrO/fYRjjsuOO744O+3Ati/iuu8J/j8zys4ttT3oA30UULGLJsArK3ieAXwHIAtMMNZLg4+34vCnpbTg+N+BDMU4acwN8/rYUwsz4TgnM/CBIMLAfwSQBbArUXXXg8z/nZbcL4LYB4nCwqN/K0wPde7g+O+CWBKcNy1JfLTVlHOgTcFefwggFNhAs16mN7yUthqgLwPJs/7YIYFXApTthLoAEwD5ezgevOC/58N4GMwE9EVpufwbIQTKm+GCZi/AvA1AK0wgfMLkWsfGRyzGMBlwbmeD9L+LTjmY8G585Pe89fOP6V4B0y5jfR6WwVl8VMM7SUrxYXBcafBfK8U5js1F0NvDH4evH8VTE/1oTBDtrIAPjvMNappgHwEpsyWAfgWzHfyGpjGXJ5xwWdWwJTxpQB+BnPj+TJq64Ek9YE+atdHX4F5glnM11BZB0QpPgLzm82X+bcRztX59+CYcn75nwi957dB+jHBZ56AuRm+KtB3Bcxw0ZbItb8IU25zYeqmFWaOxF6EfvSfMN6tCD307Mg53oXKfDT6vSjHzTDftZEaE78M9BwJ4Ong/wMAZiJ80l/MewD8BYBPwtz0K8KyilLJ96AN9FFCxiQHwvxQ76riMwpjAIdG0j4WpF8YSSv1I/+P4Ljo5N4JQdpDCIe2AKYXLwtz85pnfXDs/0bSDoIxxF9G0r4HE2iKxwr/LDhntBekmsA5HoU9U8swfCC01QD5TXCe/4mkvQ0meK5DYS9hqaEdB6P0kILOEsdG2Q9mLssDKKybtwTXnhdJG24I1kKU7tkrfnUMowUwAW87zMT0kfhtcM5dMEH/c4HGbphe3GiQ/nOYmzSJaOkF8JkRrlFNAyR/U1M8HCLKuOCYTSjsmTwjSP/WCHqIG+ij9n20B6UXizgh+MynKrxWlNkwZX5IJO0vYTp2ojewB6O0X47D0KE97yxzbJS3wTQ0bixKfx+MB0fThxuCtR6V+WjbMFoA08nSDzPvYiTuRuij02E6ZH4MM//tCRR+1/IMRLTsgnlqXYpKvgdtoI8SMib5fzA/yGlVfEZhHh0X0wUT7ErxRphekffC9N79JvLehOCcZxR95tQg/WORtPUwwxSKeR7AnUV/z8XQnqGjgnNGe/irCZzvg1k95HSYIReLUfj4vhhbDZCXASwtkf6d4PwfjaRV0wBZDzME469QmsOCz30JQ8tyMkygyTd+hmuA/AtMuY30+qcyOhBcZy7MDcTHhzkuT3ug50UUNtDyQS86kfTPYHovbwve/wLMDUk3hq/fahogE4K/v4ahw0ryjAuOuboofT+YXtsHhtFC3EEfte+jOZihZ8UcGVyr2mXE94fpVCh+GgQAf4TpfDgw+PtgVN4AeTOMJ81B+RWx8nVwBIaW5YMwT3vyDNcA+W9U5qOHlPk8YDpelsN8fz4wzHF58k+P5xal52NPqdW0joAZsnUZzBO5cvM/KvketIE+SsiYpNaeuxtKpK9H4aoYb4HpKdmIwp5lBXBT5LgJQdq/o5BxQfrhRdcoNkLA9LAviPzdV3S94ld0ZaNqAmcxV8LcpL6/zPu2GiADKN1b9Zng/NG5INU0QD4H0xOWg2mItKEweOUngg73ygdd25PQi7keQ3t9hyMfyH9QlL4/TO9d9Dv4R5hhLtGA9kaYpz+lGn55qmmAvAVm3LLCjM+fCVO+0WuOC94vtTrNYzATR4l/0Eft+6jtJyDvDz734xLvXRy8lx9+djAqb4AAplc+B7PS2WMww6uieWnF8OXYFTnW9iT0KPvDPNFIwTTkKmEOwk6oKPmJ+sX+WsyhMDHmwhGOA0p/D9pAHyVkzLIZ1Y9dLjVsZz0Kb8aSMKb8KxjDPgamt2NX0XETgnN+suh84zD05n09jCEWsxDhhEDA3LDPQ/keor8uyk9biXNWwt8Fn/9mmfd9b4AAZgjC+TA3T70wwSI/4XB85HPlyjI/sXu4Bsi7YYLKSK93lPgsYJbhVJgx25VyJcrXzTaY4RiAGYecwdA17QEzjCuH8hNeq52E/gaY3uNfA1gVvD8f4TjscSgfOB8HA6fP0Eft+qjtOSB/ifgaIIC50b4cprxSMEOuDgveyz8tOBuly3Fc5DzDNUAOQmU+Wm4u3U0wjdizyrxfihtRusF3QJD+myGfGMpiAEsqOK7U96AN9FFCxiyTYH6s/1nh8ZUGzk4U9tABxrSyiD9wroQxvUoYTeD8ePD51jLvxz0E69vB+WsdglXMX8CMm10U/P2vwefOqUBjfgWTg0u8txAjP0lRlL6ZvwCVB7oon0LpG443wXwH8+Ou8zcmpVZp+UPwXrlJi9U2QIrJN5LywxjGgUMHGhX6qF0fvR2lV8G6EbWtgjXcEKwbUPsQrFJ8OLhWfj+m/NyDYyvQmV+KthTrUZmPtpX47DXBexeXeG84vhl87qtF6YcE6VdWcI7lMA2FkSj1PWgDfZSQMcuhMDdSK2HGZJZ6v5L169ejMCDuxtCNihIYeqM5AfYDZ77HvNRj+neicJWNSgLne1F6sl0+WJR7nG17Enr05ubPYXpc16G2Sej7o/QTh6dgJgMiOO+rMEORSvWqRZf3PDe4xidKHFfrHJAzYXp/p6N0+ed5K8zSjdGJiW+GmbC+FuaGLc85gc78WPn9YXorX4ZpnOR5G8ywl+F6y6ppgJRaMSY/nCT/BGtc8He5yZPV3jyQ+kEfteujZ2Lozf57YX6rM0e4TjlmwzzVOTiS9j6YIVC1TkJ/Kwr9BTC+uQ2mEQWYhk0XTNmWWgo86qP5FfneWeK4WueA5L8vpZ7yRnkHjI9G48L7YcrscRTGmauDc/5r8PefofQcmH+DaSxHn+BX8z1oA32UkDHNyTBDb/bALK/4dZhhOdNhHidPihxbaeCcAmM818Lc9P0J5oauHkMH3gqzrGQGZrL0uTA99B0wNwnRG9VKAuclMMtW/jzIS/5Ru2LortqAWT3mezA7ICvMWOZ8WpQ2VNZAyS/D2wnTo38JTK9SdBneaH4qaYC8E+EN9KUwS3zeGhx3WeS4cTDfjQ2B3m8E/z4K4N7IcfmnJffBzNMYj8o2CyzHvyHcm+QrKFyW8mwUBtlxKF2PXwzSn4JZieUahOO0o8tPfjc47lmYsr0c4aP96ERbAPg0wrpMBZ/J/x2d6NuGwsB5bXDsVTC/rythAuRGhAE/n4/88pGXIFw+8hVUtrwmcQd9dHiq8dH9YYbtdMPMMzgfZkGJbgB/X3RsB8o/fY2SX4Z3E8zvrxWmgyK6DC9QXQPkEzCNxBtgPOa8SJ6iS3h/HqYz5QUYvzkHZkn15Sj8HuRvkqfCeM/4EfI0EvkJ8Gsw1EPPRmFjeUJw7ISic3w/SJ8HUw+TMHTX8nw8aYeJH98M8tULUz7RldSq+R60gT5KyJjnwzCPt9fBBMt9MENxLkTh4+5KA+c7YYYO7IQJGg/ABI7i4ybAfuAETA/21TCGkwp0PAFjdtFeqEoC5ydhVkjaEJyrByYwX4rSe4AM93g8yi9hjLzcRoZR8hsR7oUx0qUonPsRvXYlDZA3Afg/mMnX+U25nkO4cV+UTwC4A+amJwVTD7di6JOf78EEgxwquyEYjgkYvhwnRI4dh/L1OB4mXwMwjbjfo/TmW5+HKdO9CDd6LLUHSEeFmtpQWN9Hwsyz2QxThpthAng0MOfzMR7mu7s90DIHhePtib/QR8tTrY++C2YOzC6YG9mFGJo/AJgF8zsp9dSgmMNgyrA7OOcjGDps7mBU3gB5D0w9vhTkpxPGO4pXI8t//oHgmH6Yp8t/gnlCnGd/ANfBdLzkFx0YDW0Y3kfHRY6dgNINkP1gvr8vw3TgvA7TAIjW/5tgGgfPwzztScN8z5IYGgeq+R7k9eehjxJCiAWeQviYnhBCSPVsg3m6SQghhJAROBCmB+cfXQshhJAG5SMwT5neO9KBhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQGtkP9+8+EMPvBE0IIaQ89FFCCCGkYu7ffeAB81PalRGNMpATvWptRgdyhek+4Ks2X3WpUlst+KpLtTG1uba6WKGPWsNXXarUVgu+6lJtTG2urY6Q0ZOYfAFak6tw5dTVpQJnV0a0VLoP+KrNV12q1FYLvupSbUxtri0vFuij1vFVlyq11YKvulQbU5tryyPEHmV67nqyoictT2tP1r8fpq/afNWlSm214Ksu1cbU5trqYoU+ag1fdalSWy34qku1MbW5tjpC7FEmcBJCSC1IJlsy3bXVxQp9lBBiEcnlSqa7tjpC7MHASQixhLy4Q+Vzt6u8uGPIe66tLlboo4QQS8jefpVv3Kvy+IYh77m2OkLsUSZwZnKiSzpzmvFwcpav2nzVpUptteCrLlU/tckL21WOv1mlpUP3nDd3iDbXVhcr9FFr+KpLldpqwVddqn5qk919Kl+crdLSof2fuVUzPamC911bHSH2KBM4G3Fylmt81aVKbbXgqy5V/7TJ89tUPjVdpaVDM1++S//ivu7mmjxJH7WGr7pUqa0WfNWl6p822dWncvadKi0dmj1hhn5yxrbm8lHSZDBwWsNXXarUVgu+6lL1S5ss3zLY+JCv3q1du/uab/UW+qg1fNWlSm214KsuVb+0ya5elc+bxoecOEO7X9zRfD5KmowygbM7I3rYk2nt9uCHWYyv2nzVpUptteCrLlV/tMnTW1SODRofX7tHZd9AWW2urS5W6KPW8FWXKrXVgq+6VP3RJjt6Vc66w/joSbeovLyrOX2UeERi8nlobV+BRHIfEsl9aE0uweU3Hg8AuDT5brQmf4fW5MtItPch0f46EpOvwzmT3lHVNTh5khBSA7Jsc9j4+Pq9Kt0Dwx4fh0VWBH2UEOIpsr1bZXzQ+Pj0LSprdg17fBwWSchQJiY/jcTkE3DZjX+Hy278OyQm/xSJZBqX3vgRTEx+FK3JO8wxkw7FxMlHItG+BonkrKquwcBJCKkSWbpJ5ZhpJmieM2fExoeqw8BJHyWEeIhs61Y5c5bx0ZNvUXl194ificklCamA1uQeTJz8tZLvJZJnoLU9hXFtf1bx+coEzpyIbuwXzYl/AdVXbb7qUqW2WvBVl6pbbbJkY9j4OHeOSm+6Im22LNAK9FFvtfmqS5XaasFXXaqOfXTrPpXP5RsfM1XWFjY+GsJHSZNwxhn7Y2JyPFrbU7j8j/9U8phE8utIJHdWdV5OnrSGr7pUqa0WfNWl6k6bLHpd5eig8XHefSp96SHHlNNmwwZHjS0fvei6N+Oi6w4cfN2w+AMHzE/ppv6cdmVE+4Pdi/NlkU/vjexqnMmJdmXMK7rbcVbC9H2RMpRIeim/zr+iNyzdkfToUqM9WdFN/Tk9YH5Kd6XCDc/6suHxA5HjByJa+yNaU5F0W3nL68rnsZa85dPTkXQbeSuuTxf1Vi5v+XLbEanPetZbubwV16eLeiuXt+L6rFe9yZZ9Kmfcbla7+sxM3ffKniF5y5fb9kh9pnLih4+SJuHSSf+MRHsPEu1ZtCY7kZh8QsnjLp/0XrQmNyAx+afDno+Bs2qTqjRvDJwMnGM5cGYe3aBy1FSz1O7592tXd7pk3rwMnLZ9tHVy236t7Tr4umKqHjA/NfhKrMkU1FP+ddaKsME2b1duML1lWZi+sjtMP2RRuAdA8bmiHLQwTN/YH9bHYU+mB9OXdIb1cdLyMH3alnDn+nNXZQbTr90Qpl+1NjMkb6qqN23OxpK36O9uNHmbtT1Mt5G3Yp0u661c3n6xLsxDveutXN6i9emi3srlrVh/PertvhVdKqffptLSoTs/c5v+/azdw+bt4tWFeYvDHgkpzRltb8KlyQ+htf2TSLT/DInkziE9dxdddyBak0uRSM7FOZPeOOz5qgic73iEgbPavB200N/A+a4FDJzV5u09C/wNnO+O1Gfc9Xbijes1c6RpfMhFc/XC5/pHzJtXgdO2j1bRkfPeBf525Lx3gZ8dOVEf9a0jJ1qfvnXkvHeBnx05713gb0dOtD7jrrd96zs191nT+JBTb9X+1/aWzVu+3LzqyCFNTiL5MBLtkwb/bm1/OxLJxUgkH8aEtgNG/HyFgbPeJuVDcGHemDfmbWjeeh5+TXP5xse3HlDpz9SUtzhtsWpG66PFcBI6IWQY5PVOldNuNT562m0qG7tqOo9NGySkOhLJR9Ca7ACQ77FbgkT7Qpwz6a01nY+BkxBSBnlorcqRU0zQvPQBlYHMyB8qg0UXHD30UUJInZD1nSqnBo2Pz9be+FD1zEfJGKY1eTUSk/8Xl9xwcDCG+WdItAsun3yM6bFrf9Ksbz/pUCSuf//g64wz9h/x3InJF6A1uQpXTl3NwEkIKUbmrVU5Imh8XD5PJZ0d+UPDUAfHLA19lBDiCFm/V+WUoPFx+u0qW/aN6nx1cExCACSS7Ugk16O1PYXW9h1IJB/G5ZOPAQBMnDyuYC5H5IVLbji44mtwFSxr+KpLldpqwVddqvFrk7mvho2PidU1Psppi8klR4Y+WhJftfmqS5Xaat+6KKIAACAASURBVMFXXap18NHX9qp8Zqbx0TOqa3x456OEWIeB0xq+6lKltlrwVZdqvNrk/jUq44LGR+tDVT/5aMrASR+1hq+6VKmtFnzVpRqzj67dY/b3aOkw+31sre7JR1P6KGkyGDit4asuVWqrBV91qcanTe59OWx8fGd+TcOumjJw0ket4asuVWqrBV91qcboo6/sVvn0LcZHz5ylsr3bmjbXVkeIPcoEzvxKOuLh7qW+avNVlyq11YKvulTj0SZ3rVY5vMMEze/OV8nUNuejnDbXVhcr9FFr+KpLldpqwVddqjH56JpdKicFjY+z7lDZ3mNVm2urI8QeXL2FkKZH7nwpbHx8/5GaGx/D4drqYoU+SkjTI6t3ho2Pz9+hsrPX+jVcWx0h9mDgJKSpkdtXhY2PHy5UyeZG/lANuLa6WKGPEtLUyEs7VE6cYXz0C3eq7OqL5TqurY4Qe5QJnPsyoocsShVscOYLvmrzVZcqtdWCr7pU7WmTW18MGx8/ftRK46OcNtdWFyv0UWv4qkuV2mrBV12qFn30xR0qJwSNj7Nnq+wefeOjKX2UNBmcPGkNX3WpUlst+KpL1Y42ueUFEzBbOlR+8phKzs6Tj6acPEkftYavulSprRZ81aVqyUdf3K5y/M3GR780W2WPnScfTemjpMlg4LSGr7pUqa0WfNWlOnptMn1F2Pi4+nFrjY/htLm2ulihj1rDV12q1FYLvupSteCjK7arHBc0Pr58l8re/ti1ubY6QuxRJnBmRXRld06zHq5c4as2X3WpUlst+KpLdXTaZMrzYePjF4usNj6G0+ba6mKFPmoNX3WpUlst+KpLdZQ++vw2lU9NNz464W6rjY/htLm2OkLswcmThDQN8qflYePjmiesNz6Gw7XVxQp9lJCmQZZvDRsfX7lbpdNu42M4XFsdIfZg4CSkKZDks2Hj49dL6r4uv2urixX6KCFNgTy9WeXYoPHxtXtU9g3U9fqurY4Qe5QJnD1Z0ZZlae3J+hdQfdXmqy5VaqsFX3WpVq9NbnwmbHxc+2SsjY9y2lxbXazQR63hqy5VaqsFX3Wp1uCj0cbH1+9R6Y6v8dGUPkqaDE6etIavulSprRZ81aVahTYRlRuWhY2P3y2N/clHU06epI9aw1ddqtRWC77qUq1Omzy1SeWYacZHz7k31sbHcNpcWx0h9mDgtIavulSprRZ81aVaoTYRld8/FTY+rl/mVJtrq4sV+qg1fNWlSm214Ksu1cq1ydJI4+PcOSo9KWfaXFsdIfYoEzgzOdF5u3KayflnGr5q81WXKrXVgq+6VCvQJqJy3dKw8fHHp51rc211sUIftYavulSprRZ81aVamTZZslHl6KDxcd59Kr3xNz6G0+ba6gixBydPEjKmkFzOzPPINz5ufMa1JFUd44GTPkrImEMWva5y1FTjo+ffr9KXdi1pbPsoaTIYOAkZM0gup/KrxWHjo325a0mDuLa6WKGPEjKmkMc2hI2PC/1ofKiOcR8lTUaZwNmbFT1rRVp7PVy5wldtvupSpbZa8FWXamltksupXBNpfPzJTeOjXLm5trpYoY9aw1ddqtRWC77qUi2vTR5dr3Jk0Pj41lwnjY+m9FHSZHDypDV81aVKbbXgqy7Vodokl1P5+aKw8TH1eW+05XFtdbFCH7WGr7pUqa0WfNWlWlqbLFgXNj4ufkBlIOONNtUx7qOkyWDgtIavulSprRZ81aVaqE1yOZWrHw8bH9NXeKMtimurixX6qDV81aVKbbXgqy7VEh05818LGx+XPuis8VFKWx7XVkeIPcoEzlRO9KbNWU15uHKFr9p81aVKbbXgqy7ViLZMVuWqx8LGxy0vuJZWttxcW12s0Eet4asuVWqrBV91qRZqk4fWqhwxxfjo5fNUUllvtEVxbXWEjJ7E5AvQmlyFK6eu9rV3ghBSHsnmVH70qAmYh3eo3Pqia0nD4tryYoE+SkjDI/NeVRkXND4mzlNJu218DIdryyPEHly9hZCGQ7I5lR8uDBsfs1a6ljQirq0uVuijhDQkMveVsPHR+rDXjQ/VMe6jpMkoEzj7s6KJNRnt93DlCl+1+apLldpqwVddks5q5nsLVFo6NHd4h8rsl1xLKqBcubm2ulihj1rDV12q1FYLvupSVU3NeUUz+cbHt/1qfDSlj5Img5MnreGrLlVqqwUfdUk6awJlS4dmDp+ivbNXu5Y0hKacPEkftYavulSprRZ81SV3vWQ6cFo6NHXFfK8aH6pN6qOkyWDgtIavulSprRZ80yX9aZXLHjRPPsZN0S/8do032qI0ZeCkj1rDV12q1FYLPuqSW180Q1dbOvSmix/Trj53q12Voyl9lDQZZQLnQE70qrUZHfBw5QpftfmqS5XaasEnXdKbMrvxtnSoHDlVU/PWeqOtmHLl5trqYoU+ag1fdalSWy34pkumPDe4amDmqsf0qjVpb7RFaUofJU0GJ08S4jWyb0DlnDkmaB41VeWxDa4l1YRrq4sV+igh3iOTng6XLP+/J1RyOdeSqsa11RFiDwZOQrxF9vSpfOVuEzCPmaaydJNrSTXj2upihT5KiLeIiMp1S8PGx2+XNmTjQ3WM+yjxiMuTLUi034vW5Jb9WtsVrclThhxzyeR/RCJ5DxLtXWhN9iKRXIaLJ/11xdcYZujAtRuy3j6a9FGbr7pUqa0WXOuSnb0qX5xtAuZx01WWb/VG23CU02bTGquCPloSX7X5qkuV2mrBtS4RMU878o2PSU+rinihbTi881HSZFx+4/FoTf4El08+rWTgTEw6FInkbkyc/H+4LHkYEpMORWv7yZh4w19UfA1OnrSGr7pUqa0WXOqSrftUxt9hAuYJM1RW7vBG20h4N3mSPloSX7X5qkuV2mrBqY/mROWqx8LGR8dzg40P19pGwjsfJc1L6cCZnIlEctqoTszAaQ1fdalSWy240iWvd6mccbsJmJ++ReWVXd5oqwSfAyd9NMRXbb7qUqW2WnDmo+msyvceCTdrnfFCQePDpbZK8NlHSZMxNHC2vQGtyW5MnPx9JJIPorV9B1qTS0sOLxiOMoGzLyt67qqM9nm4eZCv2nzVpUptteBCl7y2R+XUW03QPOVWlfV7vdFWKeW0WbbEmqCPhviqzVddqtRWC058NJ1VSTxkfHTcFJU7S2/W6muZqfrto6TJGBI4E9e/P0jrRSJ5KRI3fgKJyd9Bol2QuPHwsie66Lo346LrDhx83bD4AwfMT+mm/px2ZaRg181UTrQrY169kfRMJL0nkp6VMH1fJBBLJL1UD2H+lYv0TnRH0jORMZA92TA9HUnvi6RHx0wORLQyb8yb13lbtVOzJ89UaenQ7GdvU9nUNXbylhMvAid91H69Mm/Mm1d560tr+uIHzH5JR0xRmbNm7OTNEx8lTcaQwNna/lf7tbYrEu0zCg5MJO9Ba/KWsidqndy2X2u7Dr6umKoHzE8NvhJrwg15btqcHUw/a0V6MH3ertxgesuyMH1ld5h+yKJUwY81eo0oBy0M0zf2hz+0w55MD6Yv6QxXqzhpeZg+a3uYfu6qzGD6tRvCHU2vWpth3pg37/MmL2zX3hNuUWnp0JWn3annPdY5ZvKmauotNnOsAvqo/Xpl3pg3X/ImfWndeI7ZL6n3yGn6s2nrxkzeVP3xUdJkDAmcZ7S9Ca3JDBLJ7xUcmEj+Aq3tT5Q9UYU9d+mc6MytWd2VynnXS7IrldOpW7Lamwl/yD70AO1K5XTW9txgD4dPvVvpnOit28L69KkHKF+f3ZH69KHnblcqp7dtyw7qjave5OktKsffbDbGOnu27tveO2Le0jnR2yL16VPPXb4+96XD+vSl544+GtYrfbT6vNFHPfbRnpTKN+41Tz6OnqY9C9bTRwmxQZnJk4uHTJ5MJGcP6c0bDk6etIavulSprRbqoUsWv65y7HQzVvkrd6t09nujrVbKabNihKOEPhriqzZfdalSWy3UxUc7+1Um3GV89NjpKksq2y/J1zJT9dtHSTNw/vVvM2OSb/yEGSYQjFHOr08/8cZTkUimMbH9G7g0+SFMTF6IRHsWl0/6n4qvwcBpDV91qVJbLcStSxasUzl6mgma59yr0pMa+UN10jYavAuc9NGS+KrNV12q1FYLsfvo7j6Vs4P9ko6/WeXZLd5oGw3e+ShpMiZOHlcwzjh4oTXZMXhMIvlVtCZfQWt7P1rbn8PEyZ+p6hplAmdPVvSk5emCx7C+4Ks2X3WpUlstxKlLHnhV5cipJmhecL9KX3rkD9VJ22gpp82yO1YOfbQkvmrzVZcqtdVCrD66vTvcL+mkGSovbPdG22jxzkcJsU6ZwEkIiQe5Z7XKEVNM0Lz0QZWBzMgfGgO4trpYoY8SUldk8z6V04P9kk6eqbJ6p2tJdcG11RFiDwZOQuqDiMptK8269C0dKt95WCWdHflzYwTXVhcr9FFC6oZs6DT7JLV0mH2T1u5xLaluuLY6QuxRJnBmcqJLOnMFKzn4gq/afNWlSm21YFWXiMrU582OvC0dKj9coJLNjfy5emizTDltrq0uVuij1vBVlyq11YJtXfLKbpVPmyXL5fTbVTZ0eaPNJk3po6TJ4ORJa/iqS5XaasGaLhGVyc+YgNnSoXL14yqjDHi+lplqk06epI9aw1ddqtRWCzZ1yUs7VU6cYXx0/B0qW/Z5o802TemjpMlg4LSGr7pUqa0WrOgSUfndU2Hj49dLVGT0+fS1zFSbNHDSR63hqy5VaqsFW7rk+W0qx5n9kuTsO1V29HijLQ6a0kdJk1EmcHZnRA97Mq3dHv4wfdXmqy5VaquF0eqSbE7ll4vDxscflllpfNjQFifltLm2ulihj1rDV12q1FYLNnTJss3hfkkT7lbZ3eeNtrhoSh8lTQYnTxJiHcnmVH76eNj4uGm5a0nOcW11sUIfJSQW5InXw/2SvnGvSldlm7WOVVxbHSH2YOAkxCqSzqr8YEHY+JjxgmtJXuDa6mKFPkqIdWTBunC/pPPvq2qz1rGKa6sjxB5lAmdORDf2i+YsDRmxia/afNWlSm21UIsuGciY5XVbOsyKV3eu8kZbvSinzbXVxQp91Bq+6lKltlqoVZc88Gq4ZPklD1S9WWuc2upBU/ooaTI4edIavupSpbZaqFaX9KZVLnvQBMxxU1TuW+ONtnrSlJMn6aPW8FWXKrXVQi265O7V4ZLliYdi26zV1zJTbVIfJU0GA6c1fNWlSm21UI0u6UmpXHi/CZhHTFF5+DVvtNWbpgyc9FFr+KpLldpqoeqOnNteDBsf330k1s1afS0z1Sb1UdJkDBM4D1ro7w/TR22+6lKltlqoVJd0Dqh8c44JmEdNVXl8gzfaXFBOm2urixX6qDV81aVKbbVQjS6Z9nw4d+5Hj6pkat+s1ba2etOUPkqaDE6eJKRmZFefylfvNgHzmGkqT21yLclbXFtdrNBHCRkVBZu1/nyRSjbexkej4trqCLEHAychNSHbu1W+ONsEzE9NV3luq2tJXuPa6mKFPkpITYiIyu+Who2Pa59UybHxUQ7XVkeIPRg4Caka2bxP5aw7TMA84WaVlTtcS/Ie11YXK/RRQqpGRFSuKdysVT1ckconXFsdIfbg5Elr+KpLldpqoZwuWbdX5YzbTcA86RaVV3Z5o80HmnLyJH3UGr7qUqW2WijrozlR+cljhZu11rnx4WuZqTapj5Img4HTGr7qUqW2WiilS17ZpXLarSZgnnKryoZOb7T5QlMGTvqoNXzVpUpttVDSRzM5le8vCPdLunmFkycfvpaZapP6KGkyGDit4asuVWqrhWJdsmqHymdmmqD52dtUNu/zRptPNGXgpI9aw1ddqtRWC0N8NJ1V+fbD4X5Js1Y5G3bla5mpNqmPkiajTOAUEe3KiIqH4zF91earLlVqq4WoLnlumxlu1dKhMn6WyvYeb7T5Rjltrq0uVuij1vBVlyq11UKBj/ZnVC59MNwv6d74NmutVptvNKWPkiaDkycJGRZZulnl+JtN0Dx7tsruXteSGhLXVhcr9FFChkX60ioX3B/ulzTvVdeSGhLXVkeIPRg4CSmLPP66WWK3pUPlK3erdPa7ltSwuLa6WKGPElIW6UmpnHOv8dGjp6ksWOdaUsPi2uoIsUeZwLkvI3rIopTu8zCg+qrNV12q1FY1Itr70GvafXTQ+Dhnjkr3gGtVg3hZZgHltLm2ulihj1rDV12q1FYL+3b36bOfDxofx05XWfy6a0mD+Fpmqk3qo6TJ4ORJa/iqS5XaqkJE5a6XNHfkVJWWDk1fcL9Kb8q1qgK8K7MITTl5kj5qDV91qVJbtci2bs2MN/sl5Y67WWXZFteSCvCxzPI0pY+SJoOB0xq+6lKltooRUel4ziwN2dKhd3/jIe3qzbhWNQSvyqyIpgyc9FFr+KpLldqqQdbtHVyyfMsJM7X72W2uJQ3BtzKL0pQ+SpqMMoEzK6Iru3Oa9XB1CF+1+apLldoqQbI5ld88ObgxVu6qx3RlZ8a5rlL4UmalKKfNtdXFCn3UGr7qUqW2SpEXtqucOMP46Gdv0zUv7PZCVzE+lVkxTemjpMng5ElCVFIZlR8uDHflvX6Zl0szNjKurS5W6KOEqKqqPPG6yjHTglUD71TZ4m6/pLGIa6sjxB4MnKTJkZ5UuDb94R0qt7zgWtKYxLXVxQp9lBCV+9aY/T1aOsyqV3v6XEsac7i2OkJGT2LyBWhNrsKVU1eXCpw9WdGWZWntyfoXUH3V5qsuVWorh+zuU/nGveHGWA+Ea9OzzGqjnDbXlhcL9FHr+KpLldqGQ25eMTh3Ti6bp9Kb9kLXcDSiNteWR4g9OHnSGr7qUqW2UsimLpUv3GkC5jHTVJZs9EJXJTSiNtdWFyv0UWv4qkuV2kohIiq/WxoOX/3RoyrprHNdldCI2lxbHSH2YOC0hq+6VKmtGHlll8ppt5mAeeIMlZXbvdBVKY2ozbXVxQp91Bq+6lKltmIknTUNjnzj47qlKrmcc12V0ojaXFsdIYYzztgfieRVaG1fh9b2frS2r8XEyd8HsF/F5ygTODM50Xm7cprJ+ffD9FWbr7pUqS2KPLt1cIUW+extKhv2eqGrGhpRW3xGaIHReil91Bq+6lKltijSn1G5LDJ3burzqiUW7mCZ1UZD+ihpIhLtV6K1fRcmJk/EJTccjMsnn47WZDcmTv5Wxefg5EnSRMjCdSrH5ldoma2ys9e1pKYhRiccPaP1UvooaSKkayCcO3fkFJV7X3YtqWmI2QkJqZDW5Bwkku1FaXcgMXl6xedg4CRNgty12gTLlg6Vc+eodA+4ltRU2LY/q4zWS+mjpEmQ7d3h3Lljp6s8tsG1pKYiDvsjpHoS7VcikVyPy278OwDAZX/8OBLt29Ha/oWyn7noujfjousOHHzdsPgDB8xP6ab+nHZlRPuDFRd6s6JnPp/SrQMmvTeyEkMmJ9qVMa/oCg1ZCdP3RQKxRNJLjZHOv3KRx7fdkfToI8ierOjWgZye/lxKO9PhWNO+bHj8QOT4gYjW/ojWVCTdVt62DuT0rBXpwfPVkrd8ejqSbiNvxfXpot7K5S1fn3si9Wm13tI57bvpOc3lV2hJPKTSnx4xb1sHcjr++dTgdVzUW7m89WZFx0fq00W9lctbvj53R+ozlRO/A2e1XkofHaxX+mh9682Zj2ZE972yW7P5uXMnzVB5bht9lD5KmpO2N2Bi8udItAtakxkk2gUTk1cM+5HWyW37tbbr4OuKqXrA/NTgK7EmM/gDi6aftSI9+COYtys3mN6yLExf2R2mH7IoVfBjjZ4rykELw/SN/eEP8LAn04PpSzrDH+BJy8P0aVvClTbOXZUZTL92Q5h+1drMkLypqt60ORtL3qK9oKPJ26ztYbqNvBXrdFlv5fL2i3VhHqzV276sXv3dZeEkyZ88ppLJVpy3aH26qLdyeSvW77LeyuXt4tWFeauTKdZIlV5KHx2sV/qom3qrq4925/Q/p23VbcfdEs6dW7uHPkofJU3LxOR4tCY3YmJyPC6d9M9oTX4RieRuXJ78ctnPVNhzl//x5dN96rnb1G+MZFfKr567vK58Hn3quSuuT5967vLltiNlt+dO0lnN/WDBYOOj//fh7uaV5K24Pn3quSuuT5967vLltj3VQD131XopfXSwXumj9a23evuoqmp20QbNBbubZ75wp8rWfRXnjT7aRD5KmojW5EYkJl9QkJZIfg+J5OqKz1Fm7HIqJ3rT5qymPFwdwldtvupSbT5t0pdWueSBUe1u3mxlZoty2mzbn1VG66X0UWv4qku1ObXJfa+oHDk12N18jsrefi902aARtcVhf4RUTyK5G4nJ5xWkTUxegUT7morPwcmTZIwhe/tVvn5PsELLVJUHXnEtiajngXO0XkofJWMQmR7d3fxBlb70yB8isRKH/RFSPa3JDiTaNw0uHTnxxlORSO5EIvmLis/BwEnGELJln8pZd4QrtBTtbk7cEaMTjp7Reil9lIwhRMRsKlhmd3PijpidkJAKaW1/OxLJa9Ga3DC4eVZr8ic4o+1NFZ+jTODsz4om1mQKxlb6gq/afNWl2hza5NXdKqfeGqzQcovKizu80BUHjagtRiccPaP1UvqoNXzVpdoc2iRTtLv5b4fubu5CVxw0oraYnZCQOlImcOYnZ/nYo+erNl91qY59bbJ8q8oJwe7mp9+msr7TC11x0YjaXFtdrNBHreGrLtWxr036MyqXzwvnzk0rvbt5vXXFRSNqc211hNiDgdMavupSHdva5NH1KsEKLfLF2So7erzQFSeNqM211cUKfdQavupSHdvapGtA5ZzI7uZz1nihK04aUZtrqyNk9CQmX4DW5CpcOXV1qS/5QE70qrWZgqXhfMFXbb7qUh272uTu1Srjgt3Nz7tPZZ+93c3HapnFTTltri0vFuij1vFVl+rY1SbborubT1N53N7u5mO1zOKmqXyUNCmcPEkaFOl4Lhyn3PqQykBm5A8RZ7i2ulihj5IGRV7bqxLd3fz5ba4lkWFwbXWE2IOBkzQYIqLymyVh4+Onj6tka58kSeqDa6uLFfooaUBkxXaVE4O5c6eZ3c2J37i2OkLsUSZwDuREr92Q9fbRpI/afNWlOna0STqrEtndXG54elQrtNjSVW8aUZtrq4sV+qg1fNWlOra0yaINZqnylg4z/Gp7txe66kkjanNtdYTYg5MnreGrLtWxoU360ioXj2538zh0uaARtbm2ulihj1rDV12qY0ebzFljJprndzfvqm5387h01ZtG1Oba6gixBwOnNXzVpdr42mRvv8rXgt3Nj5qqMjf+3c0bvcxc0ZSBkz5qDV91qY4NbUN2N++Pd+7cWCgzFzSlj5Imo0zg7MuKnrsqo30ebtDjqzZfdak2tjbZuk9lfLC7+aemqyyuz+7mjVxmLimnzbXVxQp91Bq+6lJtbG2Syw3d3TwT/+7mjVxmLmlKHyVNBidPEo+RV/eonDLTBMyTZ6q8sN21JFIjrq0uVuijxGOG7G5+3eh2NyfucG11hIyeEdavJ8Q1snyryvE3m4B5xu0q6/a6lkRGgWvLiwX6KPGcIbubT1/hWhIZBa4tjxB7lOm5S+dEZ23PadrD1SF81earLtXG0yaPrjdzPVo6VL58V2wrtFSryxcaUZtrq4sV+qg1fNWl2njapLO/cHfz++zsbj5aXb7QiNpcWx0h9uDkSWv4qku1sbQV7G5+/n0qnfZ2Nx+NLp9oRG2urS5W6KPW8FWXamNpK9zdfLrKInu7m49Gl080ojbXVkeIPRg4reGrLtXG0TZkd/OYV2ipVJdvNKI211YXK/RRa/iqS7VxtMlre8LdzU90u7t5o5SZbzSlj5Imo0zg7MmKnrQ8rT0erg7hqzZfdan6r+3Tz6Q09avI7uZXP66Sjn+FlpF0+VxmjabNtdXFCn3UGr7qUm0Mbb3Ltxbubv6a27lzjVBmjaTNtdURYg+u3kIcI5mcyvcju5v/YZmqh2NyyehwbXWxQh8lHjB0d/Me15KIZVxbHSH2YOAkDpHelMq35pqAOW6KyowXVIXfxbGIa6uLFfoocUzh7ub3qnTGt7s5cYdrqyPEHmUCZyYnuqQzpxkPe6J91earLlU/tcnmfSpfnK3S0qGZo6dp5r5XvGp8+FhmeRpRm2urixX6qDV81aXqpzbJ5VQmP6O5YHfzXB12N68GH8ssTyNqc211hNiDkyet4asuVf+0yTNbBscpZ0+cof87ZbM32vL4VmZRGlGba6uLFfqoNXzVpeqfNulLq1wxf3D46qRLF2mXR40PVf/KLEojanNtdYTYg4HTGr7qUvVLm8xapXLElMFxyvte3u2Ntig+lVkxjajNtdXFCn3UGr7qUvVLm2zepzLhrsHhq31TntcDHh7wQlsUn8qsmEbU5trqCLFHmcDZnRE97Mm0dnv4w/RVm6+6VP3QJpmcys8XhZPNL3tQpbPfC22l8FWXamNqc211sUIftYavulT90SbPbFE5eabx0eOmqyx63RttxfiqS7Uxtbm2OkJGT2LyBWhNrsKVU1f72gNAxg6yp0/lvPvCxsd1S1UybpfZJfXFteXFAn2U1BMRlTtfUjlqqvHRM2c5X2aX1BfXlkeIPbh6C4kZWbNL5bPBpljHTFOZs8aryeakPri2ulihj5KYkXRW5ZeLw06ci+aqdA24lkXqjGurI8QeZQJnTkQ39ovmPLxR9FWbr7pU3WmT+a+ZRkdLh8qpt6qsGLojr6/l5qsu1cbU5trqYoU+ag1fdak69NG9fSoXPxA2Pn61RCWb80LbSPiqS7Uxtbm2OkLswcmT1vBVl2r9tYmIyqSnVYKlIeUb96rsKL0plq/l5qsu1cbU5trqYoU+ag1fdam60SZrdqmMv8P46JFTVe5a7Y22SvBVl2pjanNtdYTYg4HTGr7qUq2vNulLq7Q+WwFXFAAAIABJREFUHPbW/fhRlYHyS0P6Wm6+6lJtTG2urS5W6KPW8FWXap21iagsWKdyws3GR0+6ReW5rX5oqwJfdak2pjbXVkeIPYYJnAct9PeH6aM2X3Wp1k+bbAo3F5RxU1Smrxhxvoev5earLtXG1Oba6mKFPmoNX3Wp1lFbNqfyp+eMh7Z0qHzpLpVt3X5oqxJfdak2pjbXVkeIPTh5klhClm02vXQtHSonzFB54nXXkohHuLa6WKGPEktIb0rlhwvDJ8hXzvdqZ3PiFtdWR4g9GDiJBeT2lSpHBr11n79DZT2XhiSFuLa6WKGPEgvI5i4zXy7f+Eg+q+LhBGniDtdWR0hpJiav2K+1XZFIXlvxZxg4ySiQdHbo5oLdXBqSDCVG57MLfZTUGxGzuWB0ufIF61yrIh4So/MRUiOX3/ivaG1fh0TyeRuBsxEnZ7nGV12q8Wgbsrng754asjSkK2028FWXamNqi9H97EEfdY6vulRj0pbNqdy9WuXYYLny025TWbPbD20W8FWXamNqi9H9CKmB869/GxLtazDxxqORaF/IwOkGX3Wp2tcmL+1UOT3orTt6msr9r3ijzRa+6lJtTG0xOqAd6KNe4Ksu1Rh8tD+tct3ScLnyc+9T2dvvhTZb+KpLtTG1xeiAhNRAon0KWtt/E/x/+MB50XVvxkXXHTj4umHxBw6Yn9JN/Tntyoj2Z6Xgy59P782GP4JMTrQrY149kfSshOn7Ij8aiaSXCtD5V3TDne5IeiYXpvdkRTf15/SA+SndlQp72/uy4fEDkeMHIlr7I1pTkXRbecvryuexlrzl09ORdBt5K67P0dSbzFuruWOnq7R0aPaUWzX34vZR5S1fbjsi9VnPeiv3nSyuTxf1Vi5vxfUZ5++t2rzly217pD5TOfE/cNJH6aP19NFdvZqa+NDgE+Tc1Y+rpLM1540+Wn3e6KOEjIaJyfFIJF/AhLYDAIwcOFsnt+3X2q6Dryum6gHzU4OvxJrM4I/v+tezg+lnrUgP/gjm7coNprcsC9NXdofphyxKFfxYo9eIctDCMH1jf/gDPOzJ9GD6ks7wB3jS8jB91rbsYPq5qzKD6dduCNOvWpsZkjdV1Zs2x5O3rowMThocVd62h+k28iYietf27KjyJrmcyh/DzQUfO/s+/eA9Xfbytj7MQ73rLUq03l7qyQ3Wp4t6K5c3EdGlnXX+vVWbt5cL81YvS6wJ+mjl9UofHV29iai8vFPlS2a58vThU/SSn72gG/tCrfRR+mhD+ihpIi67/oNItG/HZX/8+GCapZ471fr2kvjQu8W8DZO3zgGVb4ebCw786FHt6k2PjbyN5XrzKG/1sMSaoI+Oql6ZtyrylsqZzQVPNsuV546/WXuWbBobeRvL9eZR3uphiYSMTGvyFLNaS3s2/wr+FiTaszjjjP1HPAdXbyEjIK93DvbWybgpKjNe4NKQpGrq4Ii1QR8l9SCVVZm+QuWoqeFy5a93ulZFGow6OCIhFdDa/nZMTH604JVILkMiOQ0Tkx+t6BxlAue+jOghi1IFPQK+4Ks2X3Wp1q5Nntyk8ulgc8Hjb1ZZstEbbXHjqy7VxtQWsxvWDn3UtZQCfNWlOgof7RpQufrxcMXAy+epdKdG/mAdtMWNr7pUG1NbzG5IyCjg6i3O8FWXag3aRFRmvqhyZNBbd1Z8vXW+lpuvulQbU1uMrmcf+qgzfNWlWqOPbuhUufD+sPFxfW3LlVvXVid81aXamNpidD1CRgkDpzN81aVanTYZyKj87PHCzQV77PbW1aqtnviqS7UxtcXoevahjzrDV12qVWrLicqyzSpnzjI+etRUlbm1L1duVVsd8VWXamNqi9H1CKkzZQJnVkRXduc06+FYf1+1+apLtXJtsrNH5fzI5oK/f0olF29+fC03X3WpNqY211YXK/RRa/iqS7UKbamsyr0vm2GrLR0qJ89UiSxX7lRbnfFVl2pjanNtdYTYg5MnSYC8uEPljNvr0ltHmg/XVhcr9FGSpztllisfN8V46VfvUdne41oVGSO4tjpC7MHASURU5r6i8imzuaCcMlNl1Q7XqsgYw7XVxQp9lIiobOlW+d4j4RPkHyxQGciM/FlCKsS11RFijzKBsycr2rIsXbBeti/4qs1XXarltUk6q/KHZYObC8rX71XZ1euFNtf4qku1MbW5trpYoY9aw1ddqsNoy4nKyh3GP/ONjynP13W5cl/LzVddqo2pzbXVEWIPTp60hq+6VEtrk87+gs0F5UePqqSyw5ylftp8wFddqo2pzbXVxQp91Bq+6lItoy2VVVm4XuW024yPHjtd5bH1fmjzAF91qTamNtdWR4g9GDit4asu1aHa5LU9Kl++ywTMwzucbi7oa7n5qku1MbW5trpYoY9aw1ddqiW0dadUZr6gcuw046Vn3K7y6h4/tHmCr7pUG1Oba6sjxB5lAmcmJzpvV04zMa+AVAu+avNVl2pEWzansuh1sypLS4fKcTerPGl/c8GatHlWbr7qUm1Mba6tLlboo9bwVZdqkY/u6FH51eJw+OqF96vs7XevzbNy81WXamNqc211hNiDkyebh0zOPOk4KthccHx8mwsSUoxrq4sV+mjzkBOVV/eY3czzw1evWaySrv/wVdJ8uLY6QuzBwNkUSE9q6OaC3fFtLkhIMa6tLlboo81BKqvy1GaVL842Pjpuisqdq1yrIk2Ea6sjxB5lAmdvVvSsFWnt9XB1CF+1ealLRGXdXs2cf3/h5oLZnGtlg3hZbuqvLtXG1Oba6mKFPmoNX3Vp14D2zVmju04Mhq+eOEPlmS2uVQ3ia7n5qku1MbW5tjpC7MHJk9bwTlcmp3LXapWTblFp6dC+I6Zq733+bS7oXbkF+KpLtTG1uba6WKGPWsM7XTlR2dil8qvFmjvCbC6YOXu2yqYu18oK8K7cAnzVpdqY2lxbHSGjJzH5ArQmV+HKqasZOO3gky7Z3qNy5fzBpx6Zz9+p/zF9qxfaivGp3KL4qku1MbW5trxYoI9axytdAxmVJ15X+crdg146+5yHtatzwLWyIXhVbhF81aXamNpcWx4h9ijTc5fKid60OaspD1eH8FWbF7pEVB5Zp3LqreESu9c+qan+jHttZfCi3Ergqy7VxtTm2upihT5qDS90iajs7lWZ9IzKMcESu5+aruk5a/SmTRnvykzVk3Irga+6VBtTm2urI8QenDw5ZpDulMrVj4fLQp52m8rTm13LIkRVx3jgpI+OHbI5lRXbVKLz5i68X2VLt2tlhIxtHyVNBgPnmECe2aIyflYYMH/8qEoPV7ki/uDa6mKFPjo26E2r3PKCygkzjI8eOdUsXe7Roh2kuXFtdYTYo0zg7M+KJtZktN/D1SF81eZCl6QyZlWrYHKknDRDZcE6L7RViq/afNWl2pjaXFtdrNBHreFEl4jK+r0qiYfCTpwv3zVkV3Nfy0zVX22+6lJtTG2urY4Qe3D1FmvUW5es2aUy4a4wYE6cp7Knzwtt1eCrNl91qTamNtdWFyv0UWvUXVc6qzL3FZVTIvPm/rBMJTV0Y0Ffy0zVX22+6lJtTG2urY4QezBwWqNeuiSXU5n6vMrRweTIY6er3L1aRcpf19cyU/VXm6+6VBtTm2urixX6qDXqqUt296pc9Wg4b+6M21We2+qFtmrxVZuvulQbU5trqyPEHmUC50BO9Kq1GR3wcHUIX7XVQ5ds2ady/n3hU49z56hs3ueFtlrxVZuvulQbU5trq4sV+qg16qIrJypLNqqMvyP00qsfV+lNu9dWI75q81WXamNqc211hNiDkycbBrn7ZZVPTTfB8qipKlOf4+RI0jC4trpYoY82DNKbUvnt0si8uVtUHtvgWhYhFeHa6gixBwOn98iePpXWh8Oeui/NVlmzy7UsQqrCtdXFCn20IZBVOws2FZTEQ2XnzRHiI66tjhB7DDN04NoNWW8fTfqoLQ5d8uh6lU/fYoLluCkq1y0tOTnShTZb+KrNV12qjanNtdXFCn3UGrH4aCZr5s0dE5039/Kw8+bqpc0WvmrzVZdqY2pzbXWE2IOTJ61hU5f0pFR+8ljYU/e521We3eKFNtv4qs1XXaqNqc211cUKfdQatnXJ5i6VC+eGXvrNyubN1UObTXzV5qsu1cbU5trqCLEHA6c1bOmS5VtVPntbGDB/8tioNxX0tcxU/dXmqy7VxtTm2upihT5qDWu6RFTmrCncVLBjdPPmfC0zVX+1+apLtTG1ubY6QuxRJnD2ZUXPXZXRPg836PFV22h1SSprhljll4T8zEyzqWCVwwTi0BYnvmrzVZdqY2pzbXWxQh+1hg1d0tmv8t1Hwk6cL9ypsnr08+Z8LTNVf7X5qku1MbW5tjpC7MHJk14ga3arnD07DJjfeVhlV69rWYRYw7XVxQp91BtkyUaVUyObCv5micpAxrUsQqzg2uoIsQcDp1Mkm1OZ8ly4JOQJM1Rmr1b1cFIcIaPBtdXFCn3UOTKQUbnmifAJ8qm3qjy12bUsQqzi2uoIsUeZwJnOic7antO0hzfCvmqrVpds7FI5Z0741OOiuSobOr3QVk981earLtXG1Oba6mKFPmqNWnTJqp0qn49sKviDBSrdo5s3Z0tbvfBVm6+6VBtTm2urI8QenDxpjUp1iYjKXS9FloScZp6CpOIbJuBrman6q81XXaqNqc211cUKfdQa1eiSbE6l/dnCJ8gPvuqFtnrjqzZfdak2pjbXVkdIyMTkFUgkl6E12Y3W9h1IJO9Ca/vfV/x5Bk5rVKJLdvWqXPZg2FP3tXtUVm63MtF8tNpc4as2X3WpNqa2GF1w9NBHvaHijpxNXSrfuDf00ovnqmzr8UKbC3zV5qsu1cbUFqMLElIlre0PINE+AZfe+BFc9sePI5G8D63JDZh4zZ9X9PkygbMnK3rS8rT2eLg6hK/aRtIl818rXBLy90/FMkygFm0u8VWbr7pUG1NbzE44Ouij3jCij4qo3Bl5gnzMNJUZL6jkal9e15Y2l/iqzVddqo2pLWYnJGQUXHTdQfu1tisuT7ZUdDwnT8aOdA2o/HBh4ZKQSzaqjmI9ekIajZidzy70US8Z8gT5q/eovLLbtSxC6kbMzkfIKLg0+aH9WtsVE5Mfreh4Bs5Ykac2qZwSLAk5borKzxep7OTyuqT5iNn57EIf9Q5ZsE7lxPwT5Ckq1z/F5XVJ0xGz8xFSK21vQGtyDhLJRWUPuei6N+Oi6w4cfN2w+AMHzE/ppv6cdmVE+4PHfZmc6GN7sro7ZdJ7I48BMznRrox5RR8PZiVM3xcJxBJJLzVGOv/KReZBdEfSM5FVIHqyortTOX14d1b7MuEThL5sePxA5PiBiNb+iNZUJN1W3nancrqkM6eZnKj0pXXgmsWDPXW5029Xmfeqaio7bN7y6dGVL2zkLZMTXbQ3rE8X9VYub/n67InUZz3rrVzedqdy+sTe7GA+XNRbubwV16eLeiuXt3x9dqfD+kzlpIECJ33UFx9VVe3qHNDUjx4Nn3qcdYfKss3anc7RRyN5o49Wnzf6KCG2SEy+AYnkelw0+f+VPaZ1ctt+re06+Lpiqh4wPzX4SqzJDP7AoulnrUgP/gjm7coNprcsC9NXdofphywK5zYUnyvKQQvD9I394Q/wsCfTg+lLOsMf4EnLw/RpW7KD6eeuygymX7shTL9qbWZI3lRVb9qcjSVvB8xPafdz21XGzxoMmL+buFg3vbp3cKJ5JXmbtT1Mt5G3Yp0u661c3n6xLsxDveutXN6ivdou6q1c3or1u6y3cnm7eHVh3urohKODPuqFj3ZlRGX5Vl1/8u0qLR2abenQrp88rtLZH9t3lj5KH3VVb2POR0kTkWj/PVqTGzFx8t8Oe1yFPXf5H18+3aeeu039xkh2pfzqudu0L60/v/IpzQUbYWVPnqk9s17Srs5UbL0kleatuD596rnL1+eOlF89d3ld+fd96rkrrk+feu7y5bY91YA9d/RR9z7an9MDH+zTgd8uHdxUMHvKrdrz4FrNZcKbNPoofZQ+Sohb9kOi/fdIJDcj8ccPV/3pMmOXuzOihz2Z1u6idB/wTZvkROXh1zR7+u3hMIGJ81RW7vBmorlvZRbFV22+6lJtTG0xeJ9N6KOe0Ltiu778udmhl37nYZXN+1zLUlV/y0zVX22+6lJtTG0xeB8hNZJI/gGtyU4kbjwcievfP/i69NdvqejznDxZMyKisnijyoS7w2B5wgyVqc+r7u6LfW8PQhqJmJ1wdNBHnSNr96h8++FCL71tpSonmhMySMxOSEjlFIxDjryQaJ9Q0QkYOGtCnt2qcu6cMFgeO13lF4tUlm5S7UuPfAJCmox4nXB00EfdIZu7VNoWDg63ksM7VBIPqby0UzXH8iQkSrxOSEg9KRM4cyK6sb9wfKMvuNQmq3aqXPJA2PA4aqrKjx9VeX6b5valdGNfjmVWJb5q81WXamNqc211sUIfrRrZ2aPyiydUjpgS+ulFczW3+HXd2JlmmVWJr9p81aXamNpcWx0h9igTOPOTs3zs0XOhbcjwgCOmqHzvEZXlW1V7C1fUYJlVh6/afNWl2pjaXFtdrNBHK0a6+lV+u1Tl6Kmhn55zr8qj61VTWZZZjfiqzVddqo2pzbXVEWIPBs5hkY1dKj9cMHR4wNObhwy1YpnVhq/afNWl2pjaXFtdrNBHR0R6UiqTnlY5bnrY8PjSXSoPrVVNh6tbscxqw1dtvupSbUxtrq2OEHsMEzgPWujvDzNubbKtW+XqxwuHB1z8gMqSjar9pSdFNnuZ1Yqv2nzVpdqY2lxbXazQR8si/WmVKc+pnHRL6KXjZ6nMWaMSWVa33rpqgdqqx1ddqo2pzbXVEWIPTp4sQPb0qfxqicqRkeEB592nsuh11dTQYEkIqQzXVhcr9NEhyEBGZeaLKqfeGnrpabeqzFqlkqaXElILrq2OEHswcKqqqnQNqPz+KZVjpoXB8qt3q8x/rWB4ACGkNlxbXazQRweRgYzKXatVzpwVeumnb1GZvkKFS+oSMipcWx0h9mjywCk9KZUbn1E57uYwWJ59p8oDr7KXjhCLuLa6WGlyH1VV1f6MytxX/n/2zjzMjerK28eQgCcLSWYgyYRJ4hAmmezwZZKZzEwas69hjYnZTQKEzQHbKg0QmHRCSEISAnEA41YVkXcbm303GGwwXjBmscEbNt6Xtrtt995qSef3/XGlVkktqaXqKt2r1nmfR89j3y5Jb1W1fqdvqe694EtciwieMg3svAnuiOm2E4RBge6oEwT/qNHBk9wV73tf8k/mgJ9Ym/e+5Ep5BYW4lY+pXkB1uumOukCp0RwFAHT2gOdtBF/5ZCZLT5iivlFu6dbnFQDiVj6megHV6aY76gTBP2qscHIsdV/y2TNd9yU/BJ498PuSB+sxCxpT3Uz1AqrTTXfUBUqN5SiYgbYY+NXN4NHPZk9P/udF4KZOPV4BI27lY6oXUJ1uuqNOEPyjRgonxxLgR1aDR8zOFMszZ4Cn+Xdf8mA7ZpXCVDdTvYDqdNMddYFSIzkKZqClG7x4Kzj0Qvb05Le/At7RpserQohb+ZjqBVSnm+6oEwT/KFA4mRktcQYbuEJoOW4cS6jpHi98ONPxOG0a+O9vgbt6+n1+UF6VRtzKx1QvoDrddEddoAzyHAUzsLcL/Po28K0vZ09Pfss88MZ9erwqjLiVj6leQHW66Y46QfCPwTp4MpYAv7ABfNljmUJ58lTwhDfAbeXflywIwsDQHXWBMlhzNMlAUwd4+Q7wb19RYzvSeXrjc+BVe3QbCkJNoTvqBME/Blvh7I6D528EX+UeEDkZ/Ncl4H3e70sWBGFg6I66QBlsOZpIArvbwW/vUmM6TnatXn7Vk+DlO3QbCkJNojvqBME/ChTO1jjjiIUxtBpYUPO6dcXBC7eAr88ZEPnH18B72vV5GYK4lY+pXkB1uumOukAZLDkaTwI721TH497Xs2cJvPQxNeg84NtVqu6YGYKpbqZ6AdXppjvqBME/qn3wZGcPeOk28Li52QMif+PPgEjPXoYhbuVjqhdQnW66oy5Qqj1HYwlgeyv4nV1g+83s1ct/Mketi5RIVt7LMMStfEz1AqrTTXfUCYJ/VHHhbH19B/jmeeDhrgGRv3wJvGm/Vi+Tj5m4lY6pXkB1uumOukCp4hxt2dSiOh5TV2SvXn72LDVzYIUXZK2KYyZuJWOqF1CdbrqjThD8o0DhTDDjvbYkEibNDpGaAjLx5k7suW0BksdNzhTL0Fzw2iatekYesxTiVj6megHV6aY76gKl2nK0PYbExv147809SDy0Cnypa/Xy06arzkinv7MEloqRxyyFuJWPqV5AdbrpjjpB8I9qGDyZSIJ3tYMfXQ0Ov5A9E8t1z4BXNOo2FAShH3RHXaBUQ44mGdjbCaxrBlY0gp9Ym716+UlTwROXg1tllkBBMBXdUScI/mFw4eTOHvCCTeD6+dmDIeui4CueUHPSG3jlQhCEvuiOukAxOEfRkwB2tgHv7Qa/shn8l8XgC1zrIh03GXz3kgGtXi4IQmXQHXWC4B8FCmd7glG3rAftiQoXVGbwe7vBdy0Gn/dQdqfjtOngPy9C5/KdqHs9Vnm3ftB2zEpA3MrHVC+gOt10R12gGJijaO8BNu8HL9kGfuANddHmmEyeJo+bjGfGLkDH1pbKuvVDNf5um4CpbqZ6AdXppjvqBME/DBk8yTvbwM5b4Eseze50nDAFfNvLaord1GBIUweOmeoFiJsXTPUCqtNNd9QFiiE5mr7NilftBk95B/yLZ9U3HO5Mvf4Z8ONr0NLcZeTvUDX+bpuAqW6megHV6aY76gTBPzQWTm7tVuM6rnk668ocD58EvuE58LPvgzv6DoQ0NTRM9QLEzQumegHV6aY76gJFdwekJwHe0Qp+bDX4pnnZCwfWRdUg8ykrsqYmN/V3yFQvQNy8YKoXUJ1uuqNOEPyjQOGMJxlzm5KIJ/39YHJ3HPzSB2owee6VuZ8+oWZfaS5+L3JQbgPFVC9A3LxgqhdQnW66oy5QKpyjvXT0gBduBt/+Cvismdl5es4s8P3LwOua846VM/V3yFQvQNy8YKoXUJ1uuqNOEPyjAoMnOZ5UA8bveKXvlbmRD4P/thS8vlndtywIwqBEd9QFSiUHoScZvLYZPH5p9mDyuij4lGngPywEL99RsYUDBUGoHLqjThD8I6DCyenB5PcsAZ+Zc2Xu7FngO14FL9mqVuAVBGHQozvqAqUSF3L2doKnrewzmJyPnQS+6UXwyxvB3ZKngjCY0R11guAfBQpnR4JxwYoedJQ5OwRv3Ae23wSPnJPd6Thtmlql/Ol14N3twACuznl1CxpTvQBx84KpXkB1uumOukDxOUfTcHcCPHcDeNzz4OMmZWfqz59SY+havK3bYervkKlegLh5wVQvoDrddEedIPiHD4MnubEdPGOlGsORO4PVuLnqZ+83A60xX26zMnXgmKlegLh5wVQvoDrddEddoPg4CJ2TrG6h+s2CvresXvAwOPImeEdrYOdJN6Z6AeLmBVO9gOp00x11guAfHgsnt3SDH1+rpnnMncHq2qfBD74FXr4D2N4KdMcr8sHUjalegLh5wVQvoDrddEddoPhxIWd9M/je19XgcXen48wZ4DtfA69s9HXhVVN/h0z1AsTNC6Z6AdXppjvqBME/ChTOWJLx4PYEYq4ZGLgrDp73AfjmeXlmsHpczbiyaCuwtglo6hjQbVbFyOdmAqZ6AeLmBVO9gOp00x11gVJGjrrhXW1q5r9Lc9Y/Onmqytl5H4B9voBTqpsuTPUCxM0LpnoB1emmO+oEwT/6GTzJ8aRaSff2PDNYXfiIWrF8/iZgRSOwcR/Q2i2zWQmC0AfdURcoZQxC59Zu8BNrwaOfzc7T4yapthkrwY3talFBQRAEF7qjThAyjLPryHKepLC9Y0jYAYXts8t6fp7Cyczq6/67F/edweq8h9QMVs+vV52Od3cHcpuVIAiDi4AS0B8CyFE33J1Qs1TdMg98fJ71jx54A7x6N5Bn4VVBEIQ0ASWgIHhgXMOpFLZ/S+Mi5/rWAXltS3aB/NEMNSDysTXgd3apjseaJmBPcLdZFaMrwbDWxdFl2MwVpnoB4uYFU72A6nQLKAH9IYgcTSTR/fp2LL3lVSRPndZ3/aO7FoEXbgZ2tQE9lZ8+19TfIVO9AHHzgqleQHW6BZSAgjAwfCuc3QkkznsIU66fj/bZq8Bv7VSdjhWNwAf6b7MydeCYqV6AuHnBVC+gOt0Cij3f8S1HG9tzBpPPVBdynn0feL8Z2Nup9TYrU3+HTPUCxM0LpnoB1ekWUOwJwsAoqXCOHn8wjR5/SO9jwqLDh86LYXVbAtu6kmjsTqJlfwzb3mzE0HkxrF7eiG1v78bOTa1oae9BS5zRHEtiW5d67OxOoiXOaIkz9vZk2rd3Zdr3u9q3udpb4pzVvq8n87MdrvbmWKZ9Z3cSq9sSGDovho0did72Xd2Z7Xe7tt/tcm10ue4psA8D2be0V3ofvexbur3J1e7Hvm3rSsJ9nnWct0L7lj5uG1zns5LnrdC+5Z5PHeet0L7lnk8d563QvqWP23rX+dwTS4KeaT6EiIZUJg2941uOdsSxZ8xc3DvuNWyYvRrblu/Czg370bI/hpaepOSo5KjkqOTooM1RocYoqXCGI/VDwg56H7dOx9B5MXnIQx7yCPyRKp5GIzkqD3nIw+RHNeSoUGN4unI3euoh9H8z3qdnmg/JekxYdPiQmyeDJiw6vM/PdD+CdLtl8pqKe5X6nv1tV+znxdwGss+6zmeQzunXDvp8DuT8F3Ir9lpef+bn+ayCK3eSoz48qjlHi23Tn5vOLJUclRwVBF14uneZiChsr+rTNnr8IUPCDmj0ePN62kG65TsWpeLVq9T37G+7Yj8v5jaQffYDL8dvRwrDAAAgAElEQVQtSOf0awd9Psvd3r1dIbdir+X1Z+VicnaUgOSoD1Rzjhbbpj83nVkqOSo5Kgi68Fw4rch1fdpM/uUP0i3fsSgVr16lvmd/2xX7eTG3geyzH3g5bkE6p1876PNZ7vbu7Qq5FXstrz8rF5OzowQkR32gmnO02Db9uenMUslRyVFBqCjX3vcxshqOIqvhqCFhB2TZY8hqOIpumPiFAb2uyb/8prqZ6kUkbl4w1YtI3PxGctQcTPUiEjcvmOpFJG6CMCBCkeFZgyFTDwrb0QG97ujxB1M4Uk+jxx/sj6iPmOpmqheRuHnBVC8icfMbyVFzMNWLSNy8YKoXkbgJgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiCYixW5jix7E1l2N4XtpTTG/r5uJSIiGmfXkeU8SWF7h+e5+oMgZN9Mlr2MwnYbhZ3dZNmPUdj5qm4tIiKyItdQ2FlBlt1Klt1KYXsxjWs4VbdWH0L2zanpT+/RrULhSH2f2ZAse41uLSIiGjPhcLIiU8mymynsdJFlr6Sw8++6tciyN+WdRSpk36dbTSsmZqnkaPlIjpaPyTlKZGaWSo4KNY0V+QmFnRiFIpfTuAe+TmG7gSxnH4UmfFq3Go1rOJXC9m9pXORcowpn2HmOLGcUjWn4Bo194Dtk2U9T2N5MoT99VLcahewfkRU5jcY2fIXGNnyFrMgdZNk9NKbhG7rVehnX8D0KOxvJst8xpXBS2H6XrPs+2/sYN/FQ3Vp0zf2fSv0x+3caY3+fQpEvkeWcRNbEL+tWo9HjD8s6XqGGE1ThjAzXraYNU7NUcrR8JEfLx9QcJTI3SyVHhZombC8ly7k301B/AFn2drIiN+mT6otRhTOX0eMPGxJ2QOPsOt0qeQnbeykU+ZluDSJKLQDnrKNQwwlkOfPNKZzO27o1+hCy/0Bh51XdGiVh2feQZa8noiG6VbRRBVkqOToAJEeLY2qOElVPlkqOCjXDiPqDyHISfQqS5Uwiy35ck1VejC6cY+wjU1+bflO3ShYjRhxIIXskhZ0YjXvg67p1iEj9boWdu1P/Nqhw2h0UtneQZX9Alj1twCti++Jlr6KwczeFndmpW1TeopBzpW6tPoyoP4jCThNZzi26VbRRJVkqOeoBydHSMDVHiaojSyVHhZoi7HxOBb7zg6z2UOSPFLaXarLKi7mFs/4ACttPkWUv1G3Sy5iJ3yLLaU/9QbSfrMhpupWIiChkjyTLXkmj6ocSkTmFc1zDqWTZIygU+TaNaziZLHsRhe3NFHY+rtXLsrtTYwl+R2Ptoylk/1zduxy5VKtXLqGG89XvmvM53SraqJIslRwtA8nR8jA1R4mqI0slR4WaolDRtOw/keUs0WSVF2MLpxWZQJa9iUZH/kW3Si8j6g+iMfaRFHb+nSzn92TZe7RfuRt73+fJchpp7APf6W0zpXDmcuPdnyTLadF+u4Vl95BlL8pui4ynsL1Yk1F+LPt5spwndWtopUqyVHK0DCRHB4YpOUpUHVkqOSrUFFVy2wCRoYXTcu6lsL2VQpEv6VYpimW/SJYzUatD2D5bzYriJNKP1P+ZLCdBI0YcqNUvF8teRpbze60O6uqhndVmRa4hy96uyagv4+wvUthOUihylm4VrVRJlkqODgDJ0fIxIUeJzM9SyVGhJgnbSyls/y3TUH8AWc42kwZOEhlXOIeQ5dyrBpg+8K+6ZfrFsl+isB3V6hB2Pk4h+5tZD8teRpY9xbh7vq+972OpAae/0OphOdP7DJwMO3f3uZKnk3CknixnJw2v/5BuFe1UQZZKjg4AydHyMCVHiczPUslRoSZJTx05zr6Mbox8jSxnIlnOProh8hndamqmj4ajyGo4KjWn+BiyGo7SPrDNsu9X9wQ3HJM1hd6Yv/yDVi8iorD9O7IiP6QbJwxL3cP8e7IcpnGRE3Wr9cGUWwcs589kNRxDN04YRmMb/oss5wWy7D00evxhWr3GNXyPwnacLOcWGmMfSSH7QjXI07lIq1cv9QeoaVPtP+g2MQJTs1RytHwkR714mJmjRIZnqeSoUMuE7OtTX1HGKGwvpdDE/6jgu4OI7s37k1BkeN5FejRfhcrnlPoafBSp/anXJmfZDln2JnUund1k2S8OsGj+KxHNJaIWUvuWvnr6PSJaREQdqfajync1pXDaMyls76CwE1NXrO2Z2ueHT2M1nEGWvZK+/p9J+ugnesqcuWUUqXMTzGJblnPSkLADGtvwlUBevxrRl6WSo34iOVo+JucokcrSr/y/fXTIP4EsZ3UZWTqKJEcFoar4MhFNJKIPiKibiFqJ6DUiuoGI3Fe4ChfO6qSUwvl5IvoVEb1ORPuIqImI5hPRCQW2P5GIFhJRZ2r7OUQ0bMCmpbGIiHYS0fVEdDER/QsRfZiINhHRGiK6KtX+KZ/f9zTy9w+Qco95Ib5MRNOJaDcRdRHR+0R0R8423yei+4loORHFSf1OFOMzpD4r20l9VjYRkZOzTTTVXg6jKMjCKVQCydHClPuZ/i4RPUVEu4ionYhWENEviKgS4yYkR7MpJUfdfIiIVpH6vQjl/OxzRDSViNYSURsR7U/5XUp919OIkuSoIAxqTqPMH8t/JaIrieg6IppBRD1E1ODathYL5/Wkjs90UsflBlJ/rIKILs/Z9gwiShLRMlLF8lYi2kNE24go6K+2hxIRE9Fvc9r/jZTrFQG+973U/x/u5VDOMS/EUaSK23tE9L+k9v83RPT3nO3qSf2ev0GqKBbbj88T0ZbU4zYi+impc/xEznZRksJZa0iOFqecz/R3iShGRO8S0Rgi+jkRPZba9q9+SRdAcjSbUnPUzVhSncZ8HZBvk+oE3UHqvF5PRI+ntv1dzrZRkhwVhEHLl0hdhVhNRP+c5+dHkgqtNLVYOL9BRIfmtB1M6phtzWl/j9TVoYNcbd8h1Sm5y7NlaXyB8gd+Xar9xwG+t9+Fs5xjno8DiGglES2h7CvP+fiMa5v+9uMZUle3/6mf14ySFM5aQnLU3xxtINUB+cec9gWkbosKEsnRDOXkaJpPk+qw3Eb5j2MhniTVaXF/wxUlyVFBGLRMIPVh/a8St08XzrNJXZ2Kkfqj+5Sc7b5I6raWtaS+sm0motnU91akUanX/G8i+gupbws6iOhR6vuNwSZSX8n/D6mvbLtJ/TGYb3GiTxLRPaRCNkZE60ldvTkgz/7UF9zb4tyVen564aZ/TP3/j3m2fZfULTteOZqIniV1S0c7Ec0jov90/bw+9d7uxyZSAZ7bPj/1nM+Suoq1jdQx2knqStSwnPc+lYheJXVe2ojoaVKFLU2+9/CziLrJPeaFOCW13amp/3+ESrt1o9gfAOkroNek/j+U1G0Z+YhS38I5ktTVxzZS53ElZf9ROir1+nWkbuNpTm03mfy/1UPwF8lR/3KUiGgmqY5G7vvMJHVLllckRxVB5uiDRLSUVKe8nA7I30h98+Tu6ERJclQQBi3biGhDGduDiN4moh2kbj25IfX8Dsq+0vLj1Ha/JnUrwh1EtJdUmHzEtd2o1Gu+SaoYXE9EfyaiBBHNynnvTaTuv92Ver3rSAURU3aQf4SI3iEVPOmveSeltssd/DeQwjmN1H6nA/mfU6/36zzbvp762Wc9vM83SBXL9DH/X8rcY54eNPttIrox9R7TSd2ffDYR/YDUMUjfunAxqTEqROre9P1EdDsR/YyIbiail0gFd5pLSB23Z0mdmzARbSR1m8mw1DY/IDVgE6nXTz/SfIrU70Z/D/fvRSFyj3kh/pzyOY7UrVUgdbxmUt+rqm6KdUCuT/3sXFK/qyD1e/os9f1jI0rZhfPE1PYvEtG1qcffKPt3fFRqmxVE9AoRjU5tkyR15Tf3/mjBHCRH/ctRIqKrU68ZIaKvkeqIXU3qVrYbPb6P5GiGoHL0+6Ty6gep/SrWAfmHlO8wIrqM1Ll5LWebKEmOCsKg5BBSH9THyngOSF3lcc+W8e1U+/Wutnxf1/5nartLXG2jUm0vUHYw/IVU8fyEq21TatsfutoOIxWIf3a13UoqzHLnqv996jU/n7M/9Xlc++NIUlckJ7vaDiBVUF7M2fafKHM/7Hc9vNejpI75Ea62fyZ1VWeBq20Y5Q/84dT31oFPFtjWzcdI7U9DTvtnSBVcd3uxP9w3Uf4re7mP+iIuRPmPeSHS9xQ3kRrweB6p+5bjpIpcoSJUbD/+6nrNZ4nofFLHr43UlWF34Y9SduG8h9QxK1bwR6Ve/w3K/mbFSrWfWeS5gj4kR/3NUSL1OfkbqQ5HOh8SpDohXpEcVQSVo0NIffMxPfX/YVT82NyU4/0iZf9OEUmOCsKg5V9IfSCnlPEckPrqOJcWUsUuHx8m9Uf4oaSu3t3t+tmo1GuOyHnOOan2b7vaNpG6TSGXd4jokZz/P0t9rwwdn3pN91ziXgrnR4joLVL7cnjOz/6Qes0/kCrc3yV1RTJdSP+nzPc6kNSVqtyrmERED5C6qnZI6v/DqPTCeTCpYvwUFf5aOn0OjqW+x/J5UmNd0hQrnP9NataV/h5HFHg+UfFjno/0NxTP5rSni16hWWCK7YeT+tm7lH1ryMhUu3twapSyC2c9qT+gcm+xcTMq9TpX5bR/jFTBf6DIcwV9SI76n6NE6puIJ0ndGnY+qQ5EnDJT4paD5KgiyBy9nNSA93QnYhgV74B8MfX8C0h9I/MiEeVObRslyVFBGJR4vXI3IU/7JsqeFeMfSF0p2Uoq3N1XOh50bTcq1ZY7//7wVPsxOe+RG4RE6l7cl13/78x5v9zHmJz9qc/zmoU4kNRVoRipr6VzOYiIbFJf96bf73nK3CNe7rzxn0097zd5fnZD6mfp2yaGUemFk0gV+CSpztErpG4LcN8iFqbix9E9GNTvwZNu+jvm+Xgq5ZN7X3t6gOn/FXhesf1I/yz3uQeSKmzu3+soZRfOT1NmWsptqW1zi+goyvyhkssWyv+7L+hHctT/HL2J1FiKj+W0v0xqLF25K1BLjgabo4eQuqXPffvxMOr/2yE3DaR+z4uNAZEcFYRBxHYq/97lfLO3bCIVFmnSf4TfRSqwTyR1taMpZ7tRqdfMnbFieKp9eM57PJXnvedTZkAgkbqVYC4VvkLkXlG43ML5IKk/BC7oZ7vPENEP6dJfLU0tOjWd1PHoO+jPsjdRKFLovub0uJLswnnjhGF03Mh0AfNaOIlGhv9K/3XmdlLHK0bqVoGjUz9NX+W6mPIfx+GuVypWOA8jVZD7e+T+sZGm1GPupiHlc3JO+9BU+919nqEoth+3pH728zw/20XqCm2aKPUdPHkQEf2I1KDijanXmuT6+SgqXDi3khROk5Ec9TdHt5C6Kp7BcubT0ccuSL3XkXmfVThL8+coEdEnP/1rIgL95+nnplqGUbk5SvRl+sZ/PU+fO7KVajNHf0PqW5Wvkzp+w0h92w9SY2eGUfbMkPk4Kc97RUlyVBAGLRNJfVh/UOL2pRbO/ZR9hY5IhVaCgi+c75FaSKoUyimcf0ptf0N/G/ZiOfNp7MS/khr4mN9p9PjD6KqJveMHUqsep28zyH/rwIgRB9JBQ6Pk/dYBRThST2Hn7dT//jX1XlPT75J63klF91HxNypcODdR8SuA6Ud9nueWf8wVP08976c57Uek2m8p8LxifwCcTPn/iDmI1O+1+17uKBWfPvIAUrcCuP+YGkVy60C1Ijnqb47GSA10zmA58+nbP3w19dx/y/uswlna/y1Yn/hC+haqYVR+B8SdpbWYo9ESvPr79v+s1Hbnu9qiJDkqCIOWL5MaaPgeqav2+X5eyvz1myi7IDZT34WK0oPA3NuNIv8L568o/1UbIjVo0P31famFM+1ebPXXPM9y5tO3/2dh6rnnlfKUnA4Ikbqy3k3ZMy19htRX914HT36EiIbmdEAOIHUlf3bq/4ek3mM+5Z9u1j29Z3rsyyfzbOf13uVSj/knSP1B4h5o+1lSx+xVyh6v8bvUa36vwGsV64AcTESNpK50D3W1X5V6jvv++yhlF85864ZcS9nfYI1K/b/Q4MmzCngJ+pEc9TdHV5La98znJjRxPn38nxpJDRovNP11FjlZGlyOErk7ILWYo/+P1Ngc9yOdi39P/T/9uoUW5H2C1AU197dbUZIcFYRBzZmkZsXYS2qWiStIfainkroSNdG1bamFcxKpq3T3kAqiv5P6+rMStw58hNS0knFS0zheTUTjUu/bTtnTXJZSONODCNdR9vSI6Yf7D46LSRW6MUR0JQ37xm4iAn3h6++R5bRQ2Gkiy76d1IwhUSICXXnHtt7bBix705Cwg/SDLHsTZaaP3EbqilOYhhywmQ78EOibP1TTNIYiw+nnd6orTf95+laynE6y7EUUdr5K7sJpRW4iy2mkS/+vgz50UDd98Wtv0v+cu43U2hZqCsjvnnQ/Wc5qsuxuOvnSHaSKwkoi+iV9/T8epO+f2kMHfHgVpX8PrMgEOvWn21PvMZnU4NSR/RzT/ijnmI9KbTsq5zXSC2HNJfX7PDG1L9NztvsiqRl/biW14BZc/78kZ9tLUj9/ndT0jn+izL3fxRbQepTUHzm/IjVV529I3aaR/oPFvR/p6SOvp8z0ka+STB9pOpKjxSnnM31Ratv1pMZQjKZD/6WFiEDf+u/FOVkaTW07LOsWrNwsvexX2yk3R9XFhBhd/EuQ1aCu0J/yMzWpxOH/+gCF7Td6s/TI76Q/+6oDYkVuoktva6ahHwUd8a3VdNTwF+iY87ZSZird88iyryDLWU2nXdFDQ4aA/uGj24nol0R0FX3+q4/ToYcn6aMfz0xecMyPnyci0AEHTKPqy9FchlH+jtw9RLSM1LTFV5KaDjk9Tf34nG2jJDkqCIOefyV1C8lGUsWylYgWkvrwHuzartTC+UlStw7sITVN6XNE9NU8240i/wsnkfq69XekZhiJpTxeI1VA3VdFSimc9VT8q2W34/dJBeReIuqiT32mnU68sJushnso7HyVws5FFLY7KORcSURziKiTrr9nS2/RHD3+MNXxcEaRdd9nafT49NWio0kdwzYi6qAPfXgRXXRzpmi6OyCfO+J+GvfA18myX6Gw8xqlj+V3fngXWXY3hSI/o9Ou+g/64teW0ac+naQDP5wkdavHEvrOMX+lsL2DxkXOpVDkSzQuci6dP7aFPv6PK1LbdNFHPtFGX/nuHvrwh79PIft0CjsxuuGe75EqHrspM1h2IJRzzEdR/sI5hNTv71pSnYQtpIpe7lXI4UXeZ34et5GkCl43qSud91LfsT1Ryi6c55GajKCR1O/jZlK3ArgHq6b3I72A1l5S53sqFV+7RDAHydHC1FPpn2ki9c3L/NR7xuiTn26nEy7sJsvOztJ/+uflpAbMfzKrA5I/S7NzlOgl+vI3z1Hb5XRAfnDGZrIajunN0nNGr6R0ByTUcD5Zdjdd9ptf0EcPmUof+XgTffgg0IcPTpK6iDEi5ZfJ0v84/Tb64td6aMgBHaQ6quvpS9/aSCPD79Lw+g9RyD6dQpEYHXLoDKrOHM1lGOXvgJxIanaz7anXS39GRlHfzkGUJEcFQRA8YDnzKWyvInewhuw/pNp2EdGfcgdO5rkFqy83ThiWVTRDkeGp5x2fee/IaUPCDmhUvbpFwLIXUci+L8dviesWLCLLXk9WJHuQomXfSpaduRf8mvs/RWF7K1n2/RS2d5HlFBpPIQiC4A+FsnToRxOkvonsMwhdslQQBEGoTSxnPoWd7EGkochZdPmv46Su/Bzqa9HMfGNCNNY+ekjYAd0w8Qspl31kRbKnUww7d/cWzdCfPpq6YthJltOeedjdZDmNOft1kvJ0XiOqP4AEQRCCJF+Wnnzx9XTQUNDHPvZptY1kqSAIgiAU7oCE7TiNGKHGDPhZNG+8OzN40Wo4SrVNGJZy2UdhO3tMg7to3hD5TKoQXkRj7COzHqHIl7KfZ/+WLCdBYWcjjR5/CAmCIASJZKkgCIIglEjmtgF32++z2nLnrrfsHrKc4jNmeSqaeW4bCNuLs28bcLZRKHJb0fce2/BfZNk9NK7hVAo7K8hyJhXdXhAEYaBIlgqCIAhCiaii2UaW/RcKO18lK3IBWU47hezMYnZ9iqazjiz7frLu+yxdc/+n8r2st6IZ+QmFnS4KRS6nsQ1fIcv+NVl2a859y1eQ5XRSKPILGtvwFRoz8VsUilxOIWcsERGFnY9T2NlAYfsuIiIaM/Fb6rYC2z0FrSAIgr9IlgqCIAhCiVjOfArZ95EVmaCmjrT3khW5g9wDKXOLZsj+EYXt9ylsx1PT8PbFS9FUPreQZe+hsN1GYTtKln1nVtFU738hWfZbFHZiFLb3UtheQKGGc4iIKOw8SGFnBY0en5nRJ+SMJctupjETDvd6mARBEIoiWSoIgiAIgiAIgiAIgjA4GULPNB9CsniOIAiCVyRHBUEQBKFknmk+ZOi8GFriDDfdScbtG+LoTma3m4CpbqZ6AeLmBVO9gOp00x11gSI56humegHi5gVTvYDqdNMddYIwcKzIdRS2V9Etk9fkK5wtcUa+dhMw1c1UL0DcvGCqF1CdbrojLxAkR33HVC9A3LxgqhdQnW66I08Q/KPAlbv2BOOMt3rQnjDvg2mqm6legLh5wVQvoDrddEddoEiO+oapXoC4ecFUL6A63XRHnSD4R4HCKQiC4AVOJvO26466QJEcFQTBR2oyR4UaQwqnIAg+wR/sBf/sCfAHe/v8THfUBYrkqCAIPsH7usBXPgleuLnPz3RHnSD4R4HCGU8yFu9PIm7g4CxT3Uz1AsTNC6Z6AWa68Ya94LNmguui2HfFU4jHs6/g6Y66QJEc9Q1TvQBx84KpXoCZbry3E3zpo+C6KLrOmoV4R0/Wz3VHnSD4R4HCWY2Ds3Rjqhcgbl4w1Qswz43XN4PPVJ2P+PlzMOyx/bU1eFJy1DdM9QLEzQumegHmuXFzJ/hi1flInDoN35u2q7ZyVKgxpHD6hqlegLh5wVQvwCw3XtcM/tEMcF0UPHIOWre31d7sLZKjvmGqFyBuXjDVCzDLjZs6wRc9onL09OloW7m79nJUqDEKFM62OOPoJT1oM+CDmYupbqZ6AeLmBVO9AHPceG0T+Ix05+Nh8O72gm66oy5QJEd9w1QvQNy8YKoXYI4b7+kAX5jpfPCaPbWZo4JBWJFrKOysIMtuJctupbC9mMY1nEpERGPsf6Sw/TcK22vJcjrJcraQFRlPV038RFnvIYMnBUHwAK9uAp8xXRXNCx8G7+koun0QEVkSkqOCIBgK724HX/CwytEzZoDXNhXdPoiIFIS+hOwfkRU5jcY2fIXGNnyFrMgdZNk9NKbhGxSyv0lh+2G1zcQvUyhyHFnOOrLsOWW9hxROQRDKhFftVlfq6qLqtoHm4p0PQGPhlBwVBMFAuLFNfXNcF1W3sa4r3vkApAMi6CRs76VQ5Gd5f2bZIyjsxGh4/YdKfr0ChTPJjK1djCSbV1BNdTPVCxA3L5jqBeh14/d2g09LdT4ufgS8t7MkN78i0BckR411M9ULEDcvmOoFaM7RXW3gn8xROXrmDPD65pLc/IpAQSidESMOpJA9ksJOjMY98PW821j2FWTZe4q+zujxB9Po8Yf0PiYsOnzovBi2dSXREmd0pVbdTA/OSrd3uFbjjCcZLXH1cK/SmeBMe6urELOrPd8gzfTD/UFrc7W7p8hrTzC2dSUxdF4MTbHMNJ+dicz23a7tu12uXS7XmKvdr31Le6X30cu+pdt7XO1+7Fvu+dRx3grtW/q47Xadz0qet0L7lns+dZy3QvuWez4rdd743UbwqdPUbFeXPIqWPR199i193Bpd5zOWZDMKp+Ro73mVHC1/3yRHJUf9OG+8sxV8vup8JM6cidZ1zdWVo0KNMGbit8hy2slyEhS295MVOS3vduMmHkphezNZkTuKvl44Uj8k7KD3cfNkDJ0X631Y6+JZH8z044IVmbmo5zYle9vrlmXa32vLtB+xMJb1YXW/lpvD5mfat3ZlPoBHL+npbV+8P/MBPOOtTPuUHYne9qtXxXvb79mcab99Q7zPvgHAg9sTgeybO2gHsm9zGjPtfuxbrqfO81Zo3+7cmNmHSp+3QvvmPp86zluhfcv1r8R5e+HVnb2djw8uehyfebqt6L7dsCZ734KIx5KRHJUclRwN/LwV2jfJ0Uz7UytbwCNmg+uiaPrRLHxtdlP15KhQY4yoP4jG2EdS2Pl3spzfk2Xv6XPlbvT4QyhsLyXLfpaumvjhoq9XxpW7Q18298rdoS+beeXusPnmXrlzn0/Trtwd+rKZV+4OfdncK3fu8xn0eWt7cyeSp6jOB496DJ17OwvuW/q4GXXlTnJUclRyNNDzJjna/761bm5B8scPqRw9exa6NuytrhwVahzLfpEsZ2Lv/8POx8myF5Flv0ij6oeW/XoyeFIQhCLwmzvBJ09VRfPyx8EtXZ5ex88YHDCSo4IgVBDe2gI+L9X5OGcWePN+T6/jZwwKQnlY9ksUtqNElL5it5gsZz5dNfEjnl5PCqcgCAXg5TvAJ6U6Hz99Atza7fm1fEzBgSM5KghCheAt+8HnzlI5eu4s8BZvnQ/AsBwVBjFh+3dkRX5IN04YlrqH+fdkOUzjIieqK3bOEjW//cQvk3XfZ3sfI0Yc2O9rW5HrKGyvolsmr5HCKQhCLvzG9kzn44qBdT4AjYVTclQQBE3w5v3qG4+6qPoGZGvLgF6vAokpCERk2Q5Z9iYKOzEKO7vJsl+kcZETiYgoFBmeNQjS9aAbJwwr+T0KXLlriTNMLaimupnqBYibF0z1AoJ349e3g0+coormlU+C20rvfBRyCygl+0dyNC+mupnqBYibF0z1AiqQo5v2gc9OdT5+PBu8vfTOh3E5Kgi+I4XTN0z1AsTNCxUZ+rcAACAASURBVKZ6AcG68dJtmc7HVU+V1fko5qY76gJFctQ3TPUCxM0LpnoBAefoxn3gs2aqHB0xG7yj1Rc33VEnCP4hhdM3TPUCxM0LpnoBwbnx4q2ZzsfVT4HbY/0/qUQ33VEXKJKjvmGqFyBuXjDVCwgwRzc0g89MdT7OnwPeWV7no5ib7qgTBP8oUDjTU9CxgauXmupmqhcgbl4w1QsIxo1f2wI+IdX5uOZpcGdP/08qw0131AWK5KhvmOoFiJsXTPUCAsrR95vVyuZ1UbXS+a42X910R50g+IfM3iIINQ8v3Aw+frIqmtc9A+6K9/+kMtEddYEiOSoINQ+vawKfkep8jHwY3Nju+3vojjpB8A8pnIJQ0/ArmzKdj9HPBtL5AAZ54ZQcFYSahte6Oh8XPAze3RHI++iOOkHwjwKFszXOOGJhLGtlUFMw1c1UL0DcvGCqF+CfG8/fCD4u1fn4hT+dj0JuuqMuUCRHfcNUL0DcvGCqF+Bjjq7eAz59usrRCx8BNw2881GTOSrUGDJ40jdM9QLEzQumegH+uPFLrs7Hjc+Bu/355qMmB09KjvqGqV6AuHnBVC/ApxxdtRt8WqrzcfEj4KbOQN10R50g+IcUTt8w1QsQNy+Y6gUM3I3nfQA+bpIqmmOeB8cSgbvpjrpAkRz1DVO9AHHzgqlegA85+u5u8KnTVI5e8ii42Z/ORzE33VEnCP5RoHAmmPFeWxIJA2euMNXNVC9A3LxgqhcwMDeeuwF8bKrzMW6ur52PYm66oy5QJEd9w1QvQNy8YKoXMMAcXdmY6Xxc+hh4r3+dj2JuuqNOEPxDBk8KQs3Az60HD091PkIvgHv87XwUQ3fUBYrkqCDUDLxiF/iUVOdj1GPgfV0Ve2/dUScI/iGFUxBqAn72/Uzn439frGjnAxjkhVNyVBBqAn57F/jkqanOx+MV7XwAgzxHhRqjQOFsTzDqlvWgPWFeQTXVzVQvQNy8YKoXUL4bP70u0/m4KdjORyE33VEXKJKjvmGqFyBuXjDVC/CQo2/uyHQ+fvo4eH9wnY+azFGhxpDBk75hqhcgbl4w1Qsoz42fXAs+JqqK5i3zAv/moyYHT0qO+oapXoC4ecFUL6DMHH1jO/ikVOfjZ0+AW7u1uOmOOkHwDymcvmGqFyBuXjDVCyjdjR9fk+l8/PKlitx2VZOFU3LUN0z1AsTNC6Z6AWXkqLvzccUT4LZgOx/F3HRHnSD4R4HCGU8y5jYlEU+aFxqmupnqBYibF0z1Akpz40dXZzoft70Mjie1uumOukCRHPUNU70AcfOCqV5AiTn6+jbwiVNUjl71ZEU6H8XcdEedIPiHDJ4UhEEHP7wq0/n41fyKdT6KoTvqAkVyVBAGHbzE1fn4+VPg9phupcGdo0KNIYVTEAYVPPu9TOfj1wvACf2dD2CQF07JUUEYVPDireATUp2Pa54Gd+jvfACDPEeFGqNA4exIMC5Y0YMOA2euMNXNVC9A3LxgqhdQ2I1nvasKZl0UfPsr4GTlOx+F3HRHXaBIjvqGqV6AuHnBVC+gSI4u3AI+frLK0Wv1dD5qMkeFGkMGT/qGqV6AuHnBVC8gvxvPWJnpfNzxqpbORyE3YJAXTslR3zDVCxA3L5jqBRTI0Vc2Zzof1z8D7uwxxg0Y5Dkq1BhSOH3DVC9A3LxgqhfQ142nuzofv1+orfORzy2N7qgLFMlR3zDVCxA3L5jqBeTJ0QWbwMelOh+jn9XW+cjnlkZ31AmCfxQonLEk48HtCcQMnLnCVDdTvQBx84KpXkC2G09Zkel83Pma1s5Hrpsb3VEXKJKjvmGqFyBuXjDVC8jJ0Zc3Zjofv3gO3BU3xs2N7qgThIFjRa6jsL2Kbpm8xtSrE4IgFIcnvZPpfPxpkfbORzF0R14gSI4KQtXD8z7IdD5ufA7crbfzUQzdkScI/iGztwhCVcIPvpXpfNxlducDGOSFU3JUEKoSfnED+NhJKkfHPg+OBb9Y60DQHXWC4B8FCmdXgmGti6PLwJkrTHUz1QsQNy+Y6gUAPfabmc7H3YuN6nwUOm66oy5QJEd9w1QvQNy8YKoXAMSe24CedOdj3FyjOh81maNCjSGDJ33DVC9A3Lxgohczgye80dv56Lp7KcDm+AE1OnhSctQ3TPUCxM0Lpnrx0+uQHK46H7HQC+AeczofQI3mqFBjSOH0DVO9AHHzgmlezAy+Z0lv5+O2+jfR0mPONx9parJwSo76hqlegLh5wUQvfmR172KtU6+fj5ZO88Z81GSOCjVGgcLZnWTcviGObgNnrjDVzVQvQNy8YJIXJxn8h4W9nY+eicuNccul0HHTHXWBIjnqG6Z6AeLmBdO8eEZmsdb4bS/j9nU9xri5qckcFWoMGTwpCEbDiST4NwtU0TwmCp70tnG3XZWC7qgLFMlRQTAejr6dGTv321eMGjtXKrqjThD8QwqnIBgLx5PgW+ZlOh8z363KzgcwyAun5KggGA1PfKNqpiwvhu6oE2qFcXYdWc6TFLZ3DAk7oLB9dp9tbox8jSz7CbKcFgrbHWTZy+iGiV8o+T2K3Dpwz+aEsV9Nmuhmqhcgbl7Q7cWxODj0giqYwyeBH13d2/nQ7VaMQm5+RmNZSI7mxVQ3U70AcfOCbi9mBv91aabzMX5pb+dDt1sxjMtRocYY13Aqhe3f0rjIuXkLpzXxy2TZzRSK/JHG2keTNfHLFHbOpNCET5f8HjJ40jdM9QLEzQs6vbgrDr7hOVUwj5sEfnqdMW79YdzgScnRvJjqZqoXIG5e0JqjzOA7X8t0PiYuz/oG2dRjBhiYo0Ltkr9w2jPJsqcM6IWlcPqGqV6AuHlBlxd3xMDXPq0K5vGTwS9+YIxbKZhcOCVHM5jqZqoXIG5e0JajSQbfviDT+Yj2HTtn6jEDzM5RocboWzjrD6Cw3UahyG1k2c9T2NlNYXtp3tsLilGgcHYmGFeviqPTwMWDTHUz1QsQNy/o8OK2bvAVT6iCeeIU8ILNxriVSiE3nyPRE5KjGUx1M9ULEDcvaMnRngT41pdcY+dW5h07Z+oxA8zOUaHG6FM4rfs+m2rrIMseQ1bDUWRFbiLLYbIajin4QqPHH0yjxx/S+5iw6PCh82LY1pVES5yzVt2MJRktcfXocLXHXe3trvYEZ9pbXYWYXe35rhCmH0lXQLS52uOueyDbE5n2Hld7p6vdfc9kt8tV9k32zeh929uJ+GWPgeuiSJ48Fbx46+DZtyQbUTglR/0/r7Jvsm9G7VtXj1pYsC6qFhp8ZPXg2TdDclSoMfoUzrDzuSFhB2Q507M2tOwnKGzPKPhC4Uj9kLCD3sfNkzF0Xqz3Ya3LLMjz4PZEb/sFK3p62+c2JXvb65Zl2t9ry7QfsTCW9WF1v4ebw+Zn2rd2ZT5oRy/p6W1fvD8zW8UZb2Xa5zRm2q9eFe9tv2dzZkXT2zfEZd9k34zfN27uQNMFj4Lromg8ZQZuenznoNk3QJ23wMKxDCRH/T+vsm+yb6bsG3fFsfm658F1UXQdOxl//vv7g2bfAHNyVKgx+hTOEfUHUdiOk2XfmrWhZd9JYee1gi9U4pW7niRj5s4EmmJJ466SNMWSmLwjgY545oNswhWgplgScxqTvVc4TLq61ZNkzNqVOZ8mXQFKn8821/k04cpdUyyJh3Ylen2DOm+8qx38kznguigSZ8xA21u7+t23niTjIdf5NOnKXfp8trpWaTflyp3kaOa8So6Wv2+SowbnqGvsXPL4yWh/boPkqCD4QYHBk4v6DJ607Ef7XM0rhgye9A1TvQBx80IlvHh7K/i8h9S9ymfNBK/eY4ybVwq5+RKEA0RyNIOpbqZ6AeLmhYrkaFs3+MonVY6eMAW8YJMxbl4xOUeFWuDa+z6m7kluOErdJpC6Rzk9P32o4Ryy7B4KOVfSGPtICtnXk+UkaNzE/yn5PaRw+oapXoC4eSFoL968H3z2LFU0z50FXt9sjNtAMK5wSo7mxVQ3U70AcfNC4Dna0gUe9bjK0ZMyY+dMcBsIxuWoUGOEIsOz7jNOPShsR3u3seyfUth+n8JOF4WdtykUOaus9yhQONsTjDPe6sn6GtYUTHUz1QsQNy8E6cXrm8E/mqGK5ojZ4E37jHEbKIXcfE7H0pEczYupbqZ6AeLmhUBztLkTfLEaO8enTgO/sd0Yt4FiXI4Kgu8UKJyCIAQDr94DPm26KpojHwZva9GtVBF0R12gSI4KQkXh3e3gkWrsHJ8+Hbxil26liqA76gTBP6RwCkLF4BW7wKdMU0XzkkfBjW26lSqG7qgLFMlRQagYvKNVfXNcFwWfOQO8qrSxc4MB3VEnCP5RoHDGk4zF+5NZMzmYgqlupnoB4uYFv734jR1qccG6KPjyx8FNHca4+UkhN91RFyiSo75hqhcgbl7wPUc37wefkxo7d84s8Pulj50L2s1PajJHhRpDBk/6hqlegLh5wU8vXrwVfMJkVTSvfBK8t9MYN7+pycGTkqO+YaoXIG5e8DVHN+zNjJ378Wzwpv3GuPlNTeaoUGNI4fQNU70AcfOCX148fxP4uFTn49qnwS1dxrgFQU0WTslR3zDVCxA3L/iWo2v2qLEedVE19sOHsXOmHjOgRnNUqDEKFM62OOPoJT1oM/CDaaqbqV6AuHnBDy+eux48fJIqmjc8B26P9f+kCrkFRSE33VEXKJKjvmGqFyBuXvAlR1c0ZsbOXfQIeFe7MW5BUZM5KtQYMnhSEAKBn1wLPiaqimZoLrirR7eSVnRHXaBIjgpCIPDyHWp9j7ooeNRj4D3ex84NBnRHnSD4hxROQfAdnrMq0/m4ZR64K65bSTu6oy5QJEcFwXfU2LnUxB1XPAHeN7Cxc4MB3VEnCP5RoHAmmbG1i5Fk8wqqqW6megHi5gWvXjxthSqYdVFw/XxwLGGMWyUo5KY76gJFctQ3TPUCxM0LnnN0gWvs3DVPg1u7jXGrBDWZo0KNIYMnfcNUL0DcvODFi523Mp2P370Kjvvf+fDqVilqcvCk5KhvmOoFiJsXPOXoCxvAx6bGzv3iWd/GzvnhVilqMkeFGkMKp2+Y6gWImxfK8WJm8H3LMp2PuxYH1vko163S1GThlBz1DVO9AHHzQrle/PS6zMQd4+aCO4MbO2fqMQNqNEeFGqNI4TxsvrkfTBPdTPUCxM0LpXoxM/gvizOdj3tfBwJe2MrUYwYUdtMddYEiOeobpnoB4uaFcrz4YdfYuZvmgbuDHTtn6jEDajRHhRpDBk8Kgmc4yeDfL8x0PhqWB975qFZ0R12gSI4KwoDg6SszOfqr+eCe4L5BrmZ0R50g+IcUTkHwBCeSapB5XVRdtZv0tnQ+iqA76gJFclQQPMN/d42duyO4sXODAd1RJwj+IYVTEMqG40k1vW5dVN2vPPNdwMCZVExCd9QFiuSoIJQNM4MnvJHpfPx5kXQ++kF31AmCf8jgSd8w1QsQNy8U8uJYQg2OrIuqmVoeXlXxzoepxwyo0cGTkqO+YaoXIG5eKJijzOB7lmQ6H+OXVvwbZFOPGVCjOSrUGFI4fcNUL0DcvJDPi7vialrIuij4+MngJ9dq+ebD1GMG1GjhlBz1DVO9AHHzQt4cTTL4D66xcxPf0HL7qqnHDKjRHBVqDCmcvmGqFyBuXsj14o4etSBWXVStzvv8em23XZl6zIAaLZySo75hqhcgbl7ok6OJJPjXCzJj56JvS47moSZzVKgxChROZkZLnMEG3tduqpupXoC4ecHtxa0x8M+eUEXzpKnglzdqHfNh6jEDCrvpjrpAkRz1DVO9AHHzQlaOxpPgX7rGzk1fKTlagJrMUaHGkMGTglAU3tsJvuwxVTRPmQZ+bYsMOPeA7qgLFMlRQSgKxxJg64VM50PD2LnBgO6oEwT/kMIpCAXhPe3gCx9RRfP06eDXt+lWqlp0R12gSI4KQkG4Kw6+4TmVo8fpGzs3GNAddYLgHwUKZ2ucccTCGFoNLKimupnqBYibF9q2tWLDOQ+rovmjGeC3dupW6sXUYwYUdtMddYEiOeobpnoB4uaF1tYYFl32jGvs3AZjOh+mHjOgRnNUqDFk8KRvmOoFiFu58KZ9SJwzC1wXReLsWeB3d+tWysLEY5amJgdPSo76hqlegLiVC+/tRPzyx8F1USRPnAKev9GYzgdg5jFLU5M5KtQYUjh9w1QvQNzKgd/dDT5tOrguijXnPIzW1U26lfpg2jFzU5OFU3LUN0z1AsStHHhnK/gnc8B1Uew5eTraXtmiW6kPph0zNzWZo0KNUaBwJpjxXlsSCYOuVqQx1c1UL0DcSoUXbwWfOEVdsbv4UaxZu98Ir1xMOma5FHLTHXWBIjnqG6Z6AeJWKrx+L/ismSpHz5qJ95fuMsIrF5OOWS41maNCjSGDJwUBAMDPvq9WNq+Lgq96Cry7XbfSoEJ31AWK5KggAAD47Z3gU6epHD1/Nvj9Zt1KgwrdUScI/iGFUxDA01dmVuUdNxfc2q1badChO+oCRXJUEMCvbAKfMFnl6GWPgXe26lYadOiOOkEYOFbkOgrbq+iWyWvyFc72BKNuWQ/aE+YVVFPdTPUCxK0QzAy+9/VM56N+Prg7rt2rP6rRTXfkBYLkqO+Y6gWIWzH48bVqfY+6KPjap8H7uozwKkY1uumOPEHwDxk86RumegHilg+OJ8G/WZDpfNy9BBxPaPcqhWp00x11gSI56humegHiVgiOvp3J0f99EdzZY4RXf1Sjm+6oEwT/kMLpG6Z6AeKWC3fH1a1WdVHwMVHw398GkvIZ8IOqLJwjRhxIln07hZ2NFHa6KOxsoFDkNiIaUtLzJUd9w1QvQNxy4SSD/7I40/n43atZF3F0eZVKNboFG4SCUCoDLZpEBQtnPMmY25REPGneB9NUN1O9AHFzwy3dapB5elXeR1fnnZtejpk3CrkFF4Q+YDm3UNhpopB9Ot04YRiNi/yYwnYbhSK/KOn5kqO+YaoXIG5uOJ4E3/pSpvNx/7I+F3F0eJVDNboFnISCUCIDLZpEMnhSqCl4dzv44kdUwTxpKviljUYtjDWYCTAJB07Yfoos28lpe5isyNSSni85KtQQ3BED/+JZlaPDJ4Gnr5QcrRBBxJ8glM9AiyaRFE6hZuBN+8DnPqSK5hkzwMt36FaqKfyOP1+xnFvIsjfR2IavEBHR2Ae+Q5bTSGHnopKeLzkq1Ai8rxP8U7W6OR8/Gfzs+9L5qCBBxqAglI6Xojl6/ME0evwhvY8Jiw4fOi+GbV1JtMQZXakZFzoSjJ+8E8PObtXe4ZqJIZ5ktMTVwz1DQ4Iz7a2uQsyu9nz3SKcfSVeItbna3V9BticYO7uT+PHbMezvSfa2dyYy23e7tu92uXa5XGOudr/2bWd3Ehes6Ol9PS/7lm7vcbX7sW+551PHeSu0b+nzudd1Pv0+b23vNCJxulrdnM97CLy2qd9929mdxMh3Yr3vo+O8Fdq3jgRjpOt86jhvhfYtfT6bXeczlmTDC2f9ARSy/0CWwxS242Q5TCH75oKbS472nlfJ0cqeN5052rqlBYnU6uZ8yjTwa1skRyVHhdqkzKJJRBSO1A8JO+h93DwZQ+fFeh/WunjvB8zdfsGKzKwWc5uSve11yzLt77Vl2o9YGMv6sLpfy81h8zPtW7syH8Cjl/T0ti/en/kAnvFWpn3Kjsxgt6tXxXvb79mcab99Q7zPvgHAg9sTgeyb+yroQPZtTmOm3Y99y/XUed4K7dudGzP74Od5OzWyGS0nTFVF86JHwNtaSt439/nUcd4K7Vuuv87zVmjfbliTvW8VCkVvhOyRFLa3UsgeSWMmfovC9iVk2c00zr4s7/aSo73nVXJUz3mrdI4eNXM3tpyR+gb5zJnglY2So5KjQs1SbtEkKvnKXfrDl2436crdti4VJE0xs67cpb3S+2jSlbvc82nSlbv0cdsdC+DK3TPvI5la3bznyifBzZ0l71vu+TTpyl3u+TTpyl36uDXGqujKXdjeSlbkuqw2y76VLHtN3u0lR3vPq+RoZc+blhxdvh3J1OrmiRGzwZv2lbxvkqM1lKNCDVFu0cxHgXuXY0nGg9sTiBk4O4SpbqZ6AbXpxtNXqil266LgMc+D22P9P6kCXn5QjW5+x5+vWHYzWZFrstpC9s1kOetKer7kqG+Y6gXUphvP36jGeqRXN9/dboSXH1SjWxDxJwjlM9CiSSSDJ4VBBzOD78tZ3TwW7/+JQqD4HX++ErajZDnbemcUDDWcQ5a9hyz7zpKeLzkqDEL40dWu1c2fAbd061aqeQJOQkEokYEWTSIpnMKgguMJ8O2vZK9unkj2/0QhcAJMwoETdj5Oln0Phe3NvWsqhe3f0oj6g0p6vuSoMMjgB9/KXt28Wy7imEDASSgIJTLQoklUsHB2JRjWunjWvZWmYKqbqV5AbbhxVxwccq1uPumdAU0PWQvHLAgKuQWYhPqRHPUNU72A2nDjZBJ816JM5+P3C8Fx7xdxauGYBUFN5qhQYxQonOnBWSZe0TPVzVQvYPC7cUs3+Ofp1c0ngZ9Ya4RXUFSjm+6oCxTJUd8w1QsY/G7ck8he3XziGwNe42OwH7OgqMkcFWoMKZy+YaoXMLjdslc3nwJesMkIryCpRjfdURcokqO+YaoXMLjduKMne3XzWe8Z4RUk1eimO+oEYeBYkesobK+iWyavyfdL3p1k3L4hnjU1nCmY6maqFzB43XjTPrWwYF0UfPp08Ns7jfAKmmp00x15gSA56jumegGD1433doIvd61uPneDEV5BU41uuiNPEPxDBk8KVQqvbASfMUMVzXMfAq9v1q0kFEF31AWK5KhQpfD2FvBI1+rmS7fpVhKKoDvqBME/pHAKVQi/thV8Ump18wsfAe9s060k9IPuqAsUyVGhCuF1TeCzZmZWN1+1W7eS0A+6o04Q/KNA4exOMu7ZnDD2q0kT3Uz1AgaXGz/zvhpoXhcFX/kkeF+XEV6VpBrddEddoEiO+oapXsDgcuPlO8Cp1c15xGzw1hYjvCpJNbrpjjpB8A8ZPOkbpnoBg8etz+rmXcHNTT9YjlmlqcnBk5KjvmGqFzB43HjeB+ATpmRWN2/qMMKr0lSjm+6oEwT/kMLpG6Z6AdXvxskk+N6c1c3jCe1euqhGN91RFyiSo75hqhcwONz4kZzVzdtjRnjpoBrddEedIPhHgcLZmWBcvSqOTgMX6DHVzVQvoLrd+qxu/tcl4GTwq5tX8zHTSSE33VEXKJKjvmGqF1Dlbsxg581Mjt48DxwLfnXzqj5mGqnJHBVqDBk8KRhMn9XNJ7+jW0nwiO6oCxTJUcFgOJkE/8m1uvmdC8GJ4C/iCP6jO+oEYeD0M3+9IOgma3XzYyeBn1ynW0kYALojLxAkRwXD4Z4E+Jeu1c0bloMHuLq5oA/dkScI/lHgyl1PkjGnMYkeA2eHMNXNVC+g+tx4Vzv44kdVwTxxCvgVf1Y3H6iXKVSjm+6oCxTJUd8w1QuoPjdui4FHu1Y3n+PP6uYD9TKFanTTHXWC4B8yeNI3TPUCqsuNP9ibWd38tOngd3YZ4WUS1eimO+oCRXLUN0z1AqrLjZs6wD91rW7+4gdGeJlENbrpjjpB8A8pnL5hqhdQPW68YldmdfNzZoE/2GuEl2lUo5vuqAsUyVHfMNULqB433upe3XwqeNl2I7xMoxrddEedIPhHgcLZnmCc8VYP2g2cHcJUN1O9gOpw61ywGXxyenXzh8G79K5uXg3HrJrcdEddoEiO+oapXkB1uHW8uwd8dnp18xngNU1GeJl8zKrJTXfUCYJ/yOwtggHwU+vAx01WRfOKJ8Et3bqVBJ/RHXWBIjkqGAC/vi17dfNtwaxuLuhDd9QJgn9I4RR0wgyeuiJndfMe3VZCAOiOukCRHBU0wy9syKxuPuoxcHOnbiUhAHRHnSD4R4HCGU8yFu9PIm7g7BCmupnqBZjpxj0J8F2Le6eHTPxqPrgn2NXNy8HEY5amGt10R12gSI76hqlegKFuqYs4ydTq5snrgl/dvByMPGYpqtFNd9QJgn/I4EnfMNULMM+N93WBb3yut/Nx581L0dJj1sJYph0zN9XopjvqAkVy1DdM9QLMc+PuOPg3C3pzdPp1L6Olw6xvkE07Zm6q0U131AmCf0jh9A1TvQCz3Hh9sxpkXhcFHzcZHQ+vNsbNjUnHLJdqdNMddYEiOeobpnoBZrlxY3tmoda6KLoeWI6hL3Yb4ebGpGOWSzW66Y46QfCPAoWzLc44ekkP2gz8YJrqZqoXYIgbM3jBJrW2R10UfMZ08Fs7zXDLg6leQHW66Y66QJEc9Q1TvQBz3HhFY2atpBOngF/8wBi3XEz1AqrTTXfUCcLAsSLXUdheRbdMXmPqFQBhEJFk8KS3wceq+5T5kkfBO1p1WwkVRHfkBYLkqFBJmMFPrwOflJqu/NxZ4LV6p9kVKovuyBME/5DZW4SA4c6erPuU+X9fBHeYM0hSqAy6oy5QJEeFgOGeBPi+1zMzBl71FHivzHRVa+iOOkHwjwKFM8mMrV2MJJtXUE11M9UL0OfGO9uy7lPmiW+Ak9Xxu2aqF1CdbrqjLlAkR33DVC9AY47u71IXbtI5+ttX+swYaOpxM9ULqE433VEnCP4hgyd9w1QvQIMbM/itXeAfz1YF84Qp4Bc3mOFWIqZ6AdXppjvqAkVy1DdM9QL0uPEHe8GXPaZydPgk8Mx3wXn+YDb1uJnqBVSnm+6oEwT/kMLpG6Z6ARV2S7Ja2fzk1H3K5xS/T9nU42aqF1CdbrqjLlAkR33DVC+gwm7M4Ne2gM+cqXL01GngpdvMcCsDU72A6nTTHXWC4B9FCudh8839YJroZqoXUDk37o6D71uWuU/5yifBTR1GuJWLqV5AdbrpjrpAkRz1DVO9gAq6xZPgGSvBx09WOTryYfCW/Wa4lYmpXkB1uumOOkHwDxk8yuPWbgAAIABJREFUKfgE7+0E3+S6T/n2BeCYOSubC3rRHXWBIjkq+AS394D/sDCTo2OeB7fJpB2CQnfUCYJ/SOEUBgqzWlxw1OOqYB4TBU9fmfc+ZaF20R11gSI5KvgA72gFj3420/kYvxScSOrWEgxCd9QJQn5C9s1Dwg7Isu8p+TlSOIWBkGTwq5vBZ6XuUz5lGnjxVt1WgoEEmHz+IjkqVBpm8Du71K1WdVHwcZPBT6/TbSUYSIDJJwgeGdfwPQo7G8my3/GjcFbj4CzdmOoFBOQWS4BnvKtmuKqLgn8yB7xpnxluPmCqF1CdbgGmn39IjmrHVC8gILdEEvzs++DTpqkcPXMmeGWjGW4+YKoXUJ1uAaafIHjg2vs+RpazjkINJ5DlzJfCqQdTvQD/3bi1G/zH1zK3CtzwHLi12wg3vzDVC6hOtwAT0B8kR43AVC8gALeuODiyXE2vWxcFX/44uLHdDDefMNULqE63ABNQEDxgOZMo7Nyd+nfxwjl6/ME0evwhvY8Jiw4fOi+GbV1JtMQZXQnO+uVPt3ckMh+CeJLRElePdld7gjPtra4PDbva8xXo9MO94E6bqz3uWriuPcHY1pXE0HkxNMUy98Z2JjLbd7u273a5drlcY652v/Yt7ZXeRy/7lm7vcbX7sW+559PzeWMGb2tB7BfP9XY+kncvBseTnvctfdx2u85nJc9bod/J3POp47wV2rfc8xnk563cfUsft0bX+Ywl2fzCKTkqOVqpHAXAzR3ovvXlTI7e9hK4K+553yRHy983yVFBGAgheyRZ9koaVT+UiPovnOFI/ZCwg97HzZMxdF6s92Gti/d++O7bkuhtv2BFT++HYG5Tsre9blmm/b22TPsRCzOzdqQ/5OmHm8PmZ9q3dmU+gEcv6eltX7w/8wE8461M+5xdmRmWrl4V722/Z3Om/fYN8T77BgAPbg9m31ri3Dv4ekD71php92PfmBmPNSYGtG9IMvitneALHwHXRdE9fDKu/tMq//ZtU2YfKn3e3LjP2+r2ZO/51HHeCu0bM2Pp/gp/3srdt7XZ+1apSPSE5Gjp51VydGDnjRn8frOaojzV+fi/X72JrZ0ZV8lRydGqzFGhhhh73+fJchpp7APf6W3z6codUNmrJCZc3ZJ9K7JvHXF1n/Lp08F1USROn4725TsGx74N5vNm0L5VIhI9ITk6oPMq+1bGvnUn1OKC5z2kvvU4cQo6Xt40OPZtMJ83g/atEpEoCP0Tts9Ws7U4ifQj9X8my0nQiBEH9vsaMnuL0B/tMbDzJvi41H3Klz0G3tGm20qoMiqQiN6QHBUqQVccPPs98EmpSTt+PBu8fq9uK6HKqEAiCkIJhJ2PU8j+ZtbDspeRZU+hkP3Nkl6jQOFsjTOOWBjLuiJgCqa6meoFeHRjBje2g+sXZAab3zwP3NHT/3ODdqsApnoB1ekWcBp6R3JUt0oWpnoB3t14Xxf47iVqjaS6KPi6Z8D7uoxwCxpTvYDqdAs4DQVhAMjsLdow1Qvw4JZk8Nom8NVPZzofkTfBSf/3zdTjZqoXUJ1uAaae/0iOasNUL8CDGzN4y35waG4mR//4Grgn0f9zg3arEKZ6AdXpFmDqCcIAkcKpDVO9gDLdehLghZvBI2argnnCFPCLG8xwqyCmegHV6RZg6vmP5Kg2TPUCynRLJNWkHZc+qnJ0+CTww6t6B2NrdasgpnoB1ekWYOoJQoUpUDgTzHivLYlEQGE5EEx1M9ULKMOtPQZ+ZLVa0bwuCj5nFnhNkxluFcZUL6A63XRHXaBIjvqGqV5AGW5dcfDz68FnzlA5etp08Bs7zHCrMKZ6AdXppjvqBME/ZPCkkIL3dID/tjSzKNZVT4GbOnRrCYME3VEXKJKjQpqWbnD0bfDxk1WOXvQIeFuLbithkKA76gTBP6RwCkkGb9wHvmle5j7l218Bd/t/n7JQu+iOukCRHBWYwTvawL99NZOj1gvg9lj/zxWEEtEddYLgHwUKZ3uCUbesJ2u+bFMw1c1UL6CIW08C/OYO8E8fVwXzmCh4+orA7lMuy00zpnoB1emmO+oCRXLUN0z1Aoq4JZLg1bvB1z+T6XzcvwycSOZ/oUq6acZUL6A63XRHnSD4hwye9A1TvYACbu094Bc2qHEedVHwyVPBi7aa4WYApnoB1emmO+oCRXLUN0z1Agq4dcfBC7eAfzJH5ejxk8HPrzfDzQBM9QKq00131AmCf0jh9A1TvYA8bs2d4KkrwCemFsUaOQe8cZ8ZboZgqhdQnW66oy5QJEd9w1QvII9bS7eatOPU1KQdZ88Cv7fbDDdDMNULqE433VEnCP5RoHDGk4y5TUnEA1j3YaCY6maqF+ByiyfBW/eD/7Qoc6vADc+B9/u7KJYnN8OOm6leQHW66Y66QJEc9Q1TvQCXWyIJNLar26zSk3Zc8QR4d7t+N8OOm6leQHW66Y46QfAPGTxZO/QkwKv2gMc8n+l8/GUxOF65+5SF2kV31AWK5GjtkEiC1+8F3/pSJkfr54O747rNhBpAd9QJgn9I4awNOnrAr20FX5xaFOvYSeDH1+i2EmoI3VEXKJKjtUF3HLx8B/iKJzOTdkyp7KQdQm2jO+oEwT8KFM6OBOOCFT3oMHB2CFPdjPRiBvZ0oPOJtWg+faYqmmfMAL+5U7dZL0YeN5jrBVSnm+6oCxTJUd8w1Qv7utA5dwN2nD07M2nHws26rXox9biZ6gVUp5vuqBME/5DBk75hnFc8Cd6wF3z3EiSPVfcpxy99DLy9VbdZFsYdtxSmegHV6aY76gJFctQ3jPNKMnjLfvB9y5A8QU3akTh/DnjDXt1mWfz/9u48OK7qzhf4zySVkMmEmlQ93lDDvHnJvCz1sryQmq3eVD1wBgYChISQOAkhIc5kY4kAWX3vDGQZzZCEMMxAosEYq89ljG1s1rAYjOOF1QvGgI2NjbEx2FjeVy2W1Oru3/f9cVvqbkktd7fu7XOu9f1UdVW4arW/fa/0PdHte89xbr8VuJoLSGY221VHNH5e+mrxzSa5YfZmDpzRcCpXdwb6/A7oPzw2dJ3yIz9cis5O9xbFcmq/lXA1F5DMbLYrLxbs0cg5las3C13dAb3iiaEeXfqdJ9F1sNd2shGc2m8lXM0FJDOb7cojik6FM3eZvOKuXTlkHJwdwtVsTuRShe7ugqZfgZ47Nxw0z52LgUc3466OrHP7DHBkv43C1VxAMrPZrrpYsUcj40QuVeDgMejd66CfL0yxe84cZO/biLt2skdr4WouIJnZbFcdUXR48+SJI5ODrt0NbXqyODvLlU9AOzptJyM6sQdO9uiJI5uHbtwPbVlc7NHvPQZb6yQRlbJddUTR4cB5YjjaB733NeiF84qzXM1+lVPskjNsV12s2KMnhp5MuLDgFwsTdkyeBU2/DB3I2U5GBOAE71GaYCoMnH05hbcliz4HZ4dwNZuVXHmFbj0EvX5Z8Wzdtx+GvnHQfrYquZrN1VxAMrPZrrpYsUcjYyWXFm40//nTxR79xoPQDfvsZ6uSq9lczQUkM5vtqiOKDmdviUzDc/VloQu3Qr9yf3HQbFs96oJYru4zwN1sruYCkpnNdtXFij0amYbnyuSgS9+Cfu2BYo/eshLaO2A/Ww1czeZqLiCZ2WxXHVF0OHBGpmG5VKF7u6E3PR8uhHXmLOgl90Nf2m0/Wx1czeZqLiCZ2WxXXazYo5FpZC493Bv+sTE5nKZcv3QvdNVOJ7LVytVsruYCkpnNdtURRafCwNmfV9y4LYt+B2eHcDVbQ3Jl8+GK5pf9rni27l+ehXaNPb2uq/sMcDebq7mAZGazXXWxYo9GpiG58gpdsxt6+SPFHv3pU9Cjffaz1cnVbK7mApKZzXbVEUWHN08mhnb1Q6e/CD17djhgXnAPdNlbtmMRVcV21cWKPZoY2jsAnfkStLCooH7+HuiiN6HKY0fus111RNHhwOk+1XBayB8sKJ6tu24RdH+P7WREVbNddbFij7pPCxN2XPF4sUd/vBC6jz1KyWG76oiiM8alA7/ZkXP2o0kXs8WSK5OD3rMeet7cocWw9MFNNZ+tc3WfAe5mczUXkMxstqsuVuzRyMSSK5eH3r+xuKjg2bPDactr/Ddc3WeAu9lczQUkM5vtqiOKDm+ejEzUuXRnJ3Ta78sXw9px1IlsUXI1m6u5gGRms111sWKPRibyHt3bA02VLCo49RHoW4edyBYlV7O5mgtIZjbbVUcUHQ6ckYksV16hT26FXjS/sBjW3dD2l8e1qKCr+wxwN5uruYBkZrNddbFij0Ymslyq0KXbiosKnjULOmPNuBYVdHWfAe5mczUXkMxstquOKDoVBs7enOKKTVn0OrhAj6vZosilR/qgrc8Uz9Z97UHoa/udyBYXV7O5mgtIZjbbVRcr9mhkIunR7n7ojc8Ve3TKA9D1e53IFhdXs7maC0hmNttVRxQd3jzpBlXo6o5woBwcNG9ePupiWERJZLvqYsUedYa+sjs8cTPYo796Hnps7GnKiZLCdtURRYcDp3WayUJ/+0JxMawvzocuf8d2LKJI2a66WLFHrdOBHPQ/Vxd79KL50Oe2245FFCnbVUcUnQoD50Be8eC+PAYcnB3C1Wz15NI3DkK/U7IY1j8uhR7pdSJbo7iazdVcQDKz2a66WLFHI1NXj755KLy5fLBHvSXQw+xRF7iaC0hmNttVRxQd3jwZmVpyaT4PnfNqcTGs8+ZCF7wR22JYru4zwN1sruYCkpnNdtXFij0amZp6VDWcpry0Rx/dzB51iKu5gGRms111REUpc714Zo34plv8YL945hHxg49X/f0cOCNTbS7d0wW9emHxbN0Vj0N3dzmRzQZXs7maC0hmthhbcPzYo86oukf3docLCQ726I8eh3Z0OpHNBlezuZoLSGa2GFuQqEZ+sEi8YKo0t39Spt35GfHME+KbHZK65f1VfX+FgbMnp/jC2gH0ODg7hKvZqsmlC7dCzy8shvV3s6Gz1kFz9U+vG2U2W1zN5mouIJnZYm7C8WGPOqOqHl1U0qNnz4betZY96mg2V3MBycwWcxMSjUNT26mT/ADSYs6s6vm8ebIhtLMf+pOnimfrLvsddPMB27GIGibm5osWe9RJI3r0W7+Dbhr/NOVESRFz8xGNQ7P5yCQ/gKTMp6p6PgfO2OnqDujF9xUXw/qPldD+rO1YRA0Vc/NFiz3qnLBHSxYV/PeVnKacJpyYm4+oXq0niW8eF88sr/iUprb3SlPbKUOPGStPP3lZBh19eXRmFX2Fj/uyecVzh3M4lAm3Hyv5GDCbV3Rmw0fpx4M5LW7vKhmItWT7aNdIDz7yJTcOdpdsz5bMAtGTUxzK5LH0UA69JSuD9+aKz+8veX5/Sda+kqyZku1RvbdDmTxWHc0P5e3sGUD/LSuRP6twtu6S+6Grdo753ga3l858EcV7y+YVy48Uj6eN41bpvQ0ez56S49nI41bpvR3K5LHiSG7ofdg4bpXe2/DjaeO4VXpvg8eze6B4PDN5TdDAyR51sUeHPvX4yv3QFTvRPZBnj5a8N/Zo7e+NPUoUFS89QzyzXZrSf1rxOX66dZIfYOhx/WycvCwz9PC2ZId+wUq3X7q+eKZp8cH80PYz1xS3b+wubv/z5cWFn4a/VqlTnylu39lX/AX87AsDQ9tXHS3+An5hbXH7nN25oe1XbMoObf/NjuL2G7dlR7w3ALhrVy6W9zZ4FlQ3H8Cmrz48NGh2/+Rp6NG+qt/bg/uK26N4b8Nz2jxuld7bzW8X30Ojj1ul91Z6VtvGcav03obnt3ncKr23azeXv7cGNuH4sEfd6dFN+7H5kt8N9WjXT5+GHmGPskfZo0Tu8ILbxTc7JZX+8JjPq/LM3eAv3+B2l87cdfSFRXIw49aZu46+PP5gSR/6grXQz4WLYeUunIeeBVuQzxez2jgDNPx4unTmbvB47s+4deZuMNfg1106czf8eLp05m5wv+3LJPDMHXvUiR59/5I+9KVfKfboF+aHPZpjj7JHo3tv7FGi8ZkkXnC7eGaXeHd+tObvrnDtcndW8dkXBtA9bLsLXM3Ws/0oXv7248VLBa55Eror3ul1q+XqPgPczeZqLiCZ2WLoviixRx3Rs+UQXr1sQbFHr1sEfeeo7VgA3N1ngLvZXM0FJDNbDN1HVCfP3CG+OSpe+1niTT9t6NF86/uq+n7ePDlueuAY9OYVQ2fr9Nw50NmvQrO5438z0QQRcxOOD3vUOt3VBf3nZ8IbzAcXFZyznhN2EJWIuQmJqld2HXLJQ7xgalUvwIGzbtrZD21bXVyFd3AxrE37gZhW4iVKqnibcHzYo/bogR7ozcuLJ3DOnAW9dhF0wz72KNEw8TYhUSNVGDjzqtjZV359oytsZ9NjA9D0y9DP31McMC9/BPnF27CzO8t9ViNXs7maC0hmNttVFyv2aM30aB/0ty9Az5lddgIn/+x27Owc4D6rkavZXM0FJDOb7aojik6FgXPw5iwXz+jZyqb92fCSgIvmFwfMrz8IXbAFOpDjPquTq9lczQUkM5vtqosVe7Rq2pOB3vlSeInVYI9OfQS6ZBvAHq2bq9lczQUkM5vtqiOKDgfO49JMDvrgxnD++cEB88v3QR/YCM0Ur0/mPquPq9lczQUkM5vtqosVe/S4tC8LnbUOeuG8Yo9e+hD0ifAEjq1ctWC22rmaC0hmNttVRxSdMQbOU59x9xezEdk0k4UueAP6zYeKA+aF86BzXoX2jbwxkvusPq5mczUXkMxstqsuVuzRijSThd77GvTi+8oXE/zd62V/eDQ6Vz2YrXau5gKSmc121RFFhzdPjtSfhS7ZBp36aHHAPG8udObL0J7M8b+fiEawXXWxYo+OoJks9OHN0K89WOzRL86HztsAzXCGQKJ62K46ouhw4CzqHYA+tx16xRPFAfPs2eGNkoVVzImoPrarLlbs0SHan4Uu3Ar9VnEFcz3/Huhda6F9A8d/ASKqyHbVEUWHAyfQk4Gu3Alt/n1xwJx8N/Sm5dD9PbbTEZ0QbFddrNijQF8Wuuwt6PceK/bo38+B3rEG2tVvOx3RCcF21RFFZ6LePKkKdPZD1+yCXr8s/INjcND8+dPQnZ12csWE2Wrnai4gmdlsV12sJmqPAsCxAehzO6BXLSx26N/Nht66Cnq4116uGDBb7VzNBSQzm+2qI4rORBs4VYEjfdBX9kD/9dnwEqvBQTO1GLrlkJ1cMWO22rmaC0hmNttVF6uJ2KNdGeiqndCWxcXVy8+aBf3l89B99X9yfMLus5i5ms3VXEAys9muOqLoTJSBM6/AoV7our3Qf1sBPbdkDvqrnoCu22snV4MwW+1czQUkM5vtqovVROlRVeBoH/TFXdAbhn1y/LOnoDuO2snVIMxWO1dzAcnMZrvqiKJTYeBUVXRmFergCqE1Zcvlgf3HoK/uhbatLp+Dfuqj4Rm8iN7jCbPPGszVbK7mApKZzXbVxepE71FV4HAv9OXdIz85blkMfeOgnVwNxmy1czUXkMxstquOKDon6s2T2Tywtxu6YR+0/eXyOei/8VA4zW7+BHvPRA6zXXWxOlF7NK/AgWPQtXugN8fzyTERVc921RFF50QbOAdywK6u8A+POevL56D/8n3QRzdDs3nbKYkmHNtVF6sTrUdzeWBfD3TdHuhvV0MvKPnk+LvRfnJMRNWzXXVE0akwcHZlFX++PIMuBwfUUbP1Z4GdncCGfdAHNkEvf7h89fJ7Noy6ennsuRzBbLVzNReQzGy2qy5WJ0qPDuSBPd3hJaszX4J+6d5ij176EHTpW7F/cpy4feYIV7O5mgtIZjbbVUcUnaTfPNk7AOw4CqzfB13wBvQHC4oD5rlzw8uvuhqzenli9pljXM3mai4gmdlsV12skt6jmRzQ0RX+4TFrHXTKA8UeveR+6GNvNOyT48TsM8e4ms3VXEAys9muOqLoJHngfPNI+IfH4m3Qa54sn4P+thegB2ufgz6SXC7vM2armqu5gGRms111sUpyj77dGf7hce9r0MtKVi//wvxwW3+8nxxXzOXyPmO2qrmaC0hmNttVRxSdCgNnThUbu/PIuXSdrypwtB+5rYex8ZUDyD29HeovKZ+D/hfPQXd3WYnn5D4rYLbauZoLSGY221UXq6T1aHcGubePhD368GboPzxa/MPjvLnQu9ZCexrzyfFwTu6zAmarnau5gGRms111RNFJws2Thal08fqB8BOPFe9A//mZ8JOOwUHzhmXQbYdtJyWiCmxXXayS0KOFtZCw5VDYowu3hjNZDXboObOht78IPdJnOykRVWC76oii4/LA2ZcFOgo3lq/bC31oE/T6ZeVTQV6zCPrafttJieg4bFddrFzu0UwO2NMNbNwPXf5OuB7St0sm6fjc3eHirONYvZyIGsN21RFFp8LA2ZNTnLlmAD25Bg+oqkBnP7DtcHiWbtGb0Bufg15cMhvLmbPw+jcfQ++qDqemgrS2z6rAbLVzNReQzGy2qy5WLvZoTwbYcRS6ZhfUvAK94vGylcvzk+/G0muewrG3x796eZSS+LPtAlezuZoLSGY221VHFB1Xbp4sucxKn90OvXVVOO1jyR8dev490JtXoOfF3Xjf0n7nzjYm8YY2F7iazdVcQDKz2a66WLnSo/nCiuWbDkDnbYA2/x56zpzyHv3R49AHNqFr3zEnf4aS+LPtAlezuZoLSGY221VHFB3bA2dfNpz+8cUO6MyXod9fULypfHBGqxuWQZ9+G9qfa2y2GrmaC2C2eriaC0hmNttVFyvbPTqQg+7uCqci/+lT0AvuKf+j49KHoP+1Frqzs/HZauRqLoDZ6uFqLiCZ2WxXHVF0Kgyc2bxi8cE8snEsOlW4zEq3HITOXQ+9dlH5DeVnzoL+eGG4anln/4hvjzXbOLiaC2C2eriaC0hmNttVFytbPdozEK5K/qvnoZfcV96hX7w3XMV80/5RL1V19WfI1VwAs9XD1VxAMrPZrjqi6DTy5slcHrq/B/r4lvBTjc8PO0v37Yehs1+F7u6OPwsRNZTtqotVI3s0r9A3D0Gnv1i+bsfg4qs3Pgdd3dGwhQOJqHFsVx1RdBoxcPZnoS/ugt60HPrlYWfpLr43nPrxjYNO3VBORNGyXXWxakCP6pFe6L0boD98vPwy1c/dDU0thi7ZBu0diO3fJyL7bFcdUXQqDJzHcopL1w/gWL2zQ6hCdxyBznhp9LN0v3w+nJ0lV/tZunFni4mruQBmq4eruYBkZrNddbGKqUd1IAdd9hbUWwI9e9hlqt9/DPrgprrX7XD1Z8jVXACz1cPVXEAys9muOqLoRHzzpHb3Qx/YBL3iicpn6fqy4/rFdPXGMVdzAcxWD1dzAcnMZrvqYhVhj2peoev2hCdpzh92merXH4TOfAna0Xn8F6rzONnmai6A2erhai4gmdlsVx1RdCIYODWbhz63PVwkcPiUj997DHr/xkhX13W1NFzNBTBbPVzNBSQzm+2qi1UUPfrW4fAT46/cX96hF80PbzJ/dW+kl6m6+jPkai6A2erhai4gmdlsVx1RdCoMnJm84q5dOWQqzA6hqtCN+6G3rIBeOK98wPzqA9A71kB3HInlF/N42WxxNRfAbPVwNReQzGy2qy5W9fbo/h7o/A3QqY8Mu0x1DvQfl0IXj/8T41qPk22u5gKYrR6u5gKSmc121RFFp8abJ3VnJzR4JbwUoHTAvGBeOPvKml3QPGdfIaJytqsuVjX0qHZlwpkAr1008jLVqxeGCwju7Q4XFSQiKmG76oiKWsyZ4gULxDe7J/kBxDcX1/T9VQyceqQP+tCmcAXd0j86zpkDbVkMfWILtCfTwF9BIkqamBowGjH3qGZy0Ge3Q3/29Mibyb/7aPiJ8cb9wDHOYkVElcXUgER1aGk/X3zzC2lJXxLlwNnXM4C5c7ci6y2BTr67OFieNSv8Q2TWOug7nUAds1iNV19O4W3Jos+xmStczQUwWz1czQUkM1tMDRiNGHpU84r+l3bjhZ88j/wF80beTH7LSujzO4C93cBArtGHydmfIVdzAcxWD1dzAcnMFlMDEo1PZAPnS7uRP29u+YD5rYfDVXVf2QN09Yer8Fri6o1jruYCmK0eruYCkpktptqLXGQ9uq9n2Mrk86H/+ix04VboloPA4V6rl1m5+jPkai6A2erhai4gmdliqj2i8alq4Gxqe680tZ0y9Jix8vSTl2XwencOHX157OvP4+g7XThy3j149asPo+OmFdi15G3s2d6Fzp4BdGYVhzJ5dPSFjz39eXRmFZ1ZxeGB4vZdfcXtR0u2d5Rs78xq2fYjA8Wv7S7ZfihT3L6nP4/Xu3M4eVkGbx/LDW3f2198/v6S5+8vybqvJOuBCu9hPO9tMNfge6znvQ1uP1iyPYr31tGXR+lxtnHcKr23wf22reR4NvK4VXpvw4+njeNW6b0NP542jlul9za4394sOZ4HMnnIwkOniMikxrRh/aLq0c5jWRxoXozpLSuw7f7X0fHyXuzZdhSdRzPoHMizR9mj7FH26AnbozTBVDVw+unWSX6AocdP5+HkZRk++OCDj9gfhcHTaexRPvjgw+VHEnqUJpi6ztw1zT1Ffj5/qyw8dErZY8bK0yddPxsyY+XpI75m+xFnthtmb254rmr/zeM9b6yvj5VtPO/Z1vGMM/Pga8d9PMdz/CtlG+u16v1alMczAWfu2KMRPJLco2M953jZbHYpe5Q9SmRLXdcui4j4ZtOIbU1tp0zyA0hTm3t/aceZbbR9Ua16c1X7bx7veWN9faxs43nPUahnv8WZefC14z6etT6/9HmVso31WvV+rVYud0cV2KMRSHKPjvWc42Wz2aXsUfYokS11D5xe+uoR21z+4Y8z22j7olr15qr23zze88b6+ljZxvOeo1DPfosz8+Brx308a31+6fMqZRvrter9Wq1ncZmlAAAKhklEQVRc7o4qsEcjkOQeHes5x8tms0vZo+xRooa6avofitd+hnjtZ0zyA4hnmsVrP0Ounfln43pdl3/4Xc3mai4RZquHq7lEmC1q7FF3uJpLhNnq4WouEWYjGpdUenLZzZCFh/hm1rhet6ntveKnW6Wp7b3RBI2Qq9lczSXCbPVwNZcIs0WNPeoOV3OJMFs9XM0lwmxERERERERERERERERERERERERERERERERERERERERERO7y0leLZ7aLZ/rFN6ul2fy17UgiItJizhQvWCC+2V33XP1xSJnrxTNrxDfd4gf7xTOPiB983HYsERHx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\" width=\"800\">"
+ ],
+ "text/plain": [
+ "<IPython.core.display.HTML object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
"name": "stdout",
"output_type": "stream",
"text": [
- "Channel 28 offset: 2.643lsb\n",
- "Channel 29 offset: 2.616lsb\n",
- "Channel 30 offset: 2.633lsb\n",
"Channel 31 offset: 2.681lsb\n",
+ "Channel 30 offset: 2.633lsb\n",
+ "Channel 29 offset: 2.616lsb\n",
+ "Channel 28 offset: 2.643lsb\n",
"Offset statistics: mean=2.6432lsb, stdev=0.0276lsb\n"
]
+ }
+ ],
+ "source": [
+ "plot_run('All channels, blue runs', *fetch_runs('green1', 'green2', 'green3', 'green4'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.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 backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\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 * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.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.\n",
+ "mpl.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\n",
+ "mpl.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",
+ " */\n",
+ "function 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",
+ "\n",
+ "mpl.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 * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.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",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\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 + '\" width=\"' + width + '\">');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.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.\n",
+ "if (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": {
- "image/png": "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\n",
+ "text/html": [
+ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQVR4nO3deZQc5Z3m+1d2X5uZtrnT9wwzPs1MXxu77TPd9hjOdM89d+Z2id1sZrNlEBiDdzbZSJURDYwX9YBXvNAyQqgyApdKu5CE2IQkJBCgXYAW0IL2pbSUqkq1L5mR8XvuH1FVkSWVKqMqlzcy3+dzTp3Tjq7Kiq+ipPdH1puRShEREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREcXKGLW0+Xyl1BjdJ0JERERUGZY2n3/eqhTaPMFwen3BY/s99PrDf14lMrkdYD/72W9qv8ntQPR+3cs4xY2VfEDZzk71aN3uKANWmyeI8nmVyOR2gP3sZ7+p/Sa3A9H7dS/nFFcRn8Fq8wQXrDbzL5rJ7QD72c9+U/tNbgei9+teximuIg5YREREdDbdyzjFFQcsIiKiUdO9jFNcccAiIiIaNd3LOMXVCPZgmTqImdwOsJ/97De13+R2AGg73YOvPb2fe7BolDhg5WRyO8B+9rPf1H6T2+V4O7zxi+CNnYHOFQeG/VzdyzjFFQesnExuB9jPfvab2m9qu+w8BblxHqSqFsevm4eOd08M+/m6l3GKq4gDloigzROImPUXDTC7HWA/+9lvar+J7fL2YcjVsyBVtZDbFqJ9/+mc/bqXcYorbnInIiKCLNoJuXRGMFx9/yXI6e5IX6d7Gae44oBFREQGE9+HTN0cDFZVtRD7NUiPF/nrdS/jFFcRB6x2T3DRmhTaDRzETG4H2M9+9pvab0K7pDOQn78RDle/WwfJ+ACi9+teximuuMk9J5PbAfazn/2m9ld6u3SkIA8sDQarsbWQmduBrP1WfC9Cyg8HrJxMbgfYz372m9pfye1yvANy5+JguLpyJuS1/Wd9DgesSmYl71O2u11ZTruynHZlO+tVdc21SimlJjr/l7KdPynb+VBZbrey3CPKSk5RP5j+f47oe0QcsDIi2NHhI2PQq0n6mdwOsJ/97De1v1LbZXcj5KbgNgxy/RzIe0PfhiFqfzGWfyq2hPNVZSWvU5NqPq8m1XxeWclfKMtJq4k1f68SzheV7SwKPmf6Z1Uiebmy3D3KchaO6HtwkzsRERlC1h6BfKXvNgzjnoMcPJ33YxZpAqCSs53TKpH87pD/P8sZp2w3pS6d/BeRH48DFhERGUCW7IZc1ncbhu+8AGmKdhuGXAq1vJMu48Z9VCWc25XtplT1M3835OdYzveU5TSO6HEjDlidGUHV5jQ6M+YNYia3A+xnP/tN7a+UdvF9yDPvhK8UTKyIdBuGqP2FWOJJh4nTv6Qst1NZbkbZTquyktcN+XnV0/+9sp3Dykr+YtjHmzDl42rClPMHPqatu/C8VSnU9/ho8wQ9WT9IKT+4i2+bJzjR6w9s9vOyjmf/4GUkPJ79slbJOn7mIJd93M/6PXdH1nHPD493ZsLj6azj3VnHe7OO92ad67naurKOD9XWv9Gx/8+oktqA3Netvsc/a6NnpbRFuW791/94r19xbVGuW//1b0r5FdcW5br1X/9TKb/i2nJdt8aUP/BvX9m2pTz0Tn4zHK5+sxaS8SNdt+NZ695wbcVY+qkUxk3+mJrofE7Z7j8oy/2VspzGs57BmjDlfGU7G5XlvKp+MP3/GPbx7OTkMbaLgY9H6nDeqtTAh7UnnOqfPZYZOD5uW3rgB21Fkz9wvGpzeuDzd3SExy9akxr0Fyj7e2S7YHV4/GhP+EN7yYb0wPH1reE/7DdsCY8vbAiP37vTGzj+5OHMwPHH9ns528ZvDxuGajvz/CupDYh+3bL/Yay0tmxntvV/7pfXpyqubSTXbebxsKHS2oa7bv3f8yd7K68t13WbeqS826QzhT0/XAapqkWmqhbPT9k28PlRrtv/3BSue8O1FXMEoFKynJXKcqcP/G/b/aSynHXKclaqeyafl/PrR/kMVlvax4omH55v3jNYni94tTGD5pSZz2A1p3wsacgMOtdKaYty3Tw/+I+KlpSZz2D1X/9uz8xnsPqvf6dn3jNYXV5w7ZtT5fcMlpzshNz1PKSqFv4VdehaunfE1601a93jM1gmsJzXle3UKqX6n7laryx3tfrB9H87qsfjJnciIqogsqcJcsv84FeC182BvHO8qN+vgCs8lYzt/FJZyX9SD037dN9erF8pyxVVnbwqeObK3RDcJ2v6Z5U19VMDH+PGfTTy9+CARUREFUI2HIVcMzsYrr6+ALI//9sw5FLEKYCKxnJcZTmHlO2mlO2eUpazUlUnr1JKKZVIXjpoL1XWh3po2qcjf4+IA1ZXRjB+e3rQU6mmMLkdYD/72W9qf7m1y4sfQi7vuw3DPS9AGrvyeryo/UWaAKhsWckHlO3sVI/W7Y4yYLV5lfuWCbmY3A6wn/3sN7W/XNrF9yHJd8NXCk5cDulK5/7CHKL2617OKa74XoQ5mdwOsJ/97De1vxzaxctAHnsrHK5++TbEy+T+wgg4YFF+Ig5YKV/w7LEMUn58/6IVi8ntAPvZz35T++PeLl1pyI+D2zDI2FrIs1sK+vhR+3Uv4xRX3ORORERlRho6IXcvCYary+sgr+zRdi66l3GKKw5YRERURmRvM+TWBcFwde1syMZjWs9H9zJOcRVxwOrJCKw93qAbtZnC5HaA/exnv6n9cWyXTfXBUFVVGwxZ+5qL9r2i9uteximuuMk9J5PbAfazn/2m9setXV7ZA7miLhiu7l4COdVZ1O/HTe6UHw5YOZncDrCf/ew3tT827SKQZ7cEG9mraoON7Z2p3F+XJw5YlJ+IA1avL3hsvzfo/atMYXI7wH72s9/U/ji0i5cJbr3QfxuGx94q2G0Yconar3sZp7jiJnciIooh6U5DJi0Ph6vkexCJ31qlexmnuOKARUREMSONnZBvv9B3G4YZkBc/1H1K56R7Gae4GsGvCJ88nDH2aXJT2wH2s5/9pvbrapd9p4M3aq6qhXxlFmRDfUm/f7+o/bqXcYorbnLPyeR2gP3sZ7+p/Tra5Z1jkOvmBMPVLfMhe5pK9r3PxE3ulB8OWDmZ3A6wn/3sN7W/1O2ybF94G4a7noc0FPc2DLlwwKL8RBywujOCe3d66I7RDedKxeR2gP3sZ7+p/SVrF4HM2BrehmHCqyW5DUMuUft1L+MUV9zkTkREmkjGh/xmbfhKwcmrIenS3IahUHQv4xRXHLCIiEgD6U5DEivC4eqZd2J5G4ZcdC/jFFcRB6y0L1jY4CNt4CtpTG4H2M9+9pvaX8x2aeqCfPfFYLC6bAbk+d0F/x75itqvexmnuOIm95xMbgfYz372m9pfrHY52AIZ91x4G4Z1Rwv6+IXCTe6UHw5YOZncDrCf/ew3tb8Y7fLeccj1fbdhuGkeZFdjwR670DhgUX4iDlidGcENW9LoNPCVNCa3A+xnP/tN7S90u6zYD7lyZjBcfXMx5ERHQR63WKL2617GKa64yZ2IiIpJBDJre3gbhgeWQjr034ahUHQv4xRXHLCIiKhIJONDfrcufKXgz94ou9sw5KJ7Gae4ijhgeb5gfasPz8BX0pjcDrCf/ew3tT/fdulOQ/55ZThcTd1cVrdhiNqvexmnuOIm95xMbgfYz372m9qfT7s0d0G+91IwWF06A7JoVxHOsLi4yZ3ywwErJ5PbAfazn/2m9o+2XQ61QG5bGAxXV8+CvH24SGdYXBywKD8RB6wOT3DJhjQ6DPxHxuR2gP3sZ7+p/aNply0nIDfMDYarG+dBdp4q4hkWV9R+3cs4xRU3uRMRUQHIqgPhbRjuWAQ53q77lEpC9zJOccUBi4iI8iECmfN+sNeqqhZy7yuQtl7dZ1UyupdxiquIA5YvgqM9Ar+MXgFSKCa3A+xnP/tN7Y/SLr4P+eP68JWCP3kdkvJKeJbFE/Xa617GKa64yT0nk9sB9rOf/ab252qXnjTk4azbMEzZWFa3YciFm9wpPxywcjK5HWA/+9lvav9w7XK6G/LDl8PbMCzYoeEMi4sDFuVnBAPWBavN/UfG1HaA/exnv6n952qXw62Q2xcFw9VVMyFvHtJ0hsUV9drrXsYprrjJnYiIIpJtJ4PbL1TVBrdj2FG+t2EoFN3LOMWNlXxA2c5O9Wjdbg5YRESUi7x+EHJ1320Ybl8EqW/TfUqxoHs5p7jiM1hERDQcEci8D8LbMPzwZUhrj+6zig3dyzjFFTe552RyO8B+9rPf1P42T3Deyl70PLkxfKXgI6sgvZVxG4ZcuMmd8sMBKyeT2wH2s5/9pva3dabx5x+9FQ5XT26A+Ob8OXDAovxwwMrJ5HaA/exnv4n90tyNdN9tGPyxtZB5H+g+pZLjgEX5iThgiQjaPKmom8hFZXI7wH72s9+0ftl/GvKNhcFwddVMyKoDuk9Ji6jXXvcyTnHFTe5ERNRHNhyFXDcn+JXgjfN4G4YIdC/jFFccsIiISASyeBfk8rpguLrreciJDt1nVRZ0L+MUVxEHrHZPcNGaFNoNHMRMbgfYz372V3q/ZPzgfQT7N7NPXA7pShnRPpyo/bqXcYorbnLPyeR2gP3sZ38l90vXGW/Y/MQ6SMYHUPntuXCTO+WHA1ZOJrcD7Gc/+yu1X051Qr77YviGzfMHv1Kwktuj4IBF+Yk4YGVEsKPDR8agV9L0M7kdYD/72V+J/bK7EfK1BcFwdfUsyJojZ31OpbZHFbVf9zJOccVN7kRERpE3D0GumR0MV7fOh+xt1n1KZU33Mk5xxQGLiMgMIpA570Mu63tPwe+8AGns0n1WZU/3Mk6jUe1UKct9SdnO8TG2C2U7N5/1OQ8l/4uynBeV5bYp2+lSlrNZ/Xj630T+HhEHrM6MoGpzGp0Z8wYxk9sB9rOf/ZXQL54PeWJtuJn9n1dCetLDfk2ltI9W1P5CLvtUKtU11yrbeVxVJ28dcsCypn9WWU6zSiR/qyY5lyhr+meV7d6oEtP+Q+TvwU3uOZncDrCf/ewv937p6IVMWh4OV09tivSegpXQng9ucjfE0AOWM09Zzsy8HpgDVk4mtwPsZz/7y7lfjrVB7l4SDFaXzYAs2R35a8u9PV8csAxx9oA1+SPKdjpUIvlTZTnLle2eUrazcchfI2abMOXjasKU8wc+pq278LxVKdT3+GjzBD1ZT4Wm/OB9mNo8QVvax4omH54v8LKOZz91mpHwePaN2STr+Jk/qNnH/axXanRkHfey/kurMxMeT2cd78463pt1vDfrXM/V1pV1fKg2zxe82phBc8qvuDYg93VrTvlY0pAZdK6V0hblunm+YEWTj5a+619JbVGuW//17/b8imuLct36r3+n55ddW8eWk/Bvnh8MV9fORs+G+hFdty4vuPbNKT92baX4+9aate4N11bk5Z+K7awBy5r6qb5jXcpyJiqr5mJlJR9WlivKqhl7zgeyk5PH2C4GPh6pw3mrUgMf1h5v4Afn2WOZgePjt4e/q1/R5A8cr9ocHt/RER6/aE1q0F+g7O+R7YLV4fGjPeEP7SUb0gPH17eG/7DfsCU8vrAhPH7vTm/g+JOHMwPHH9vvsY1tbGObWW3vpXHD9ENouarvlYLjnoMcaqmMthhet1LMAFREZw1YtvvXY2wXynLnDPpEy3lR2c7ccz7QKJ/BMvG/XtjGNraxrezaRND77Fb4lwavFPR/8DKkpbsy2mJ63Yq28FNpnDVgjZv8MWU7nrKcnwz6RMv5jbLdtZEfOOIerK6MYPz29KAfRFOY3A6wn/3sL5d+SXmQx98KN7P/7A1Ir5f7C8+hnNqLIWp/wRZ60uMcm9zXnbXJ3XKeP+tZreFwk3tOJrcD7Gc/+8uhX1q6IRNeDYermnched6BvVzaiyVqf0EWeSqx+6d+IthbVXNx8OvAvr1W/fe5StTcoiwnrRLu99VE53Mq4TyoLDejqqf/f5G/BwesnExuB9jPfvbHvV8OtUDuWBwMVpfXQZbtK8jjlkN7MXHAqmSJ5KWDNqT3fSjbqR34HMv5jrKdvcp2e5TtblWJ5E0j+h4RB6yUL3j2WAapCPdOqTQmtwPsZz/749wv7xyDfHVuMFxdPwey9UTBHjvu7cUWtb/AKz9VDL5VDhFR+RGBvPQh5MqZwXA1fhGkvk33WRlJ9zJOccUBi4iorEjGhzzzDmRs336rB5dC2nt1n5axdC/jFFcRB6yejMDa4w16maspTG4H2M9+9sepX3rSwasD+zez/+ItSNZNYAspbu2lFrVf9zJOccVN7jmZ3A6wn/3sj0u/NHZC7n05GKzG1kLqtuX9SsHhxKldB25yp/xwwMrJ5HaA/exnfxz6ZU8T5LaFwXB15UzI6weK/j3j0q4LByzKT8QBq9cXPLbfG3SHXFOY3A6wn/3s19ovAll7JHiFYFUt5MZ5kJ2nSvKttbdrFrVf9zJOccVN7kRE8SQCWbgTckVdMFzd9TzkZIfus6Iz6F7GKa44YBERxY54Gci/bgg3s09aDulM5f5CKjndyzjF1Qh+Rfjk4YyRTxWb3A6wn/3sL3W/dKYg/7wyHK5+tw6SKc4rBYfDax+tX/cyTnHFTe45mdwOsJ/97C9lv5xoh3z3xWCwunQGZMGOknzfofDac5M75YMDVk4mtwPsZz/7S9UvH5yCfH1BMFxdPQuy5kjRv+dweO05YFE+Ig5Y3RnBvTs9dBt4wzmT2wH2s5/9Re8Xgbx+AHLN7GC4umU+ZF9z8b5fRLz20fp1L+MUV9zkTkSkjy+Q2dshl80IhqtvvwBp7NJ9VjQCupdxiisOWEREWkhvBvLbteFm9odXQno93adFI6R7Gae4ijhgpX3BwgYfaQNfTWJyO8B+9rO/GP3S1hvceqF/uHpqEyRmf8a89tH6dS/jFFfc5J6Tye0A+9nP/kL3y5FWyN1LgsHqshmQF3YX7LELideem9wpHxywcjK5HWA/+9lfyH7ZciLYxF5VC7l2NmTzsYI8bjHw2nPAonxEHLA6M4IbtqTRaeCrSUxuB9jPfvYXpF8E8ure4PYLVbWQcc9BDrYU5ByLhdc+Wr/uZZziipvciYiKK+NDnt0S3Di0qhbyw5chp7t1nxUViO5lnOKKAxYRUdFIdxry+FvhZvafvQFJZXSfFhWQ7mWc4irigOX5gvWtPjwDX01icjvAfvazf7T90twNmfBqOFwl34VI+fw58tpH69e9jFNccZN7Tia3A+xnP/tH0y/7TkPuXBwMVpfXQV7dW6QzLB5ee25yp3xwwMrJ5HaA/exn/4j6RSAb6iE3zg2Gq+vnQLaeKO5JFgmvPQcsykfEAavDE1yyIY0OA/+imdwOsJ/97I/c7wvkhd2QK2cGw9X4RZD6tuKfZJHw2kfr172MU1xxkzsRUd4knYFMewcytm+/1YNLIe0p3adFJaB7Gae44oBFRJQX6UwFrw7s38z+i7chnq/7tKhEdC/jFFcRByxfBEd7BH4ZvQKmUExuB9jPfvYP1y8NnZB7XwkGq7G1kLptZfVKweHw2kfr172MU1xxk3tOJrcD7Gc/+8/VLzsbIbctDIarK2dC3jhY+hMsIl57bnKnfHDAysnkdoD97Gf/Wf0ikDcPBa8QrKqF3DgPsrNR30kWCa89ByzKxwgGrAtWm/kXzeR2gP3sZ/+g/owPWbADckVdMFzd9TzkZIfekywSXvto/bqXcYorbnInIopEej3IkxvCzeyTlkO60rpPizTTvYxTXHHAIiLKSVp7IA+vDIer36+DZPhKQeKARefCAYuIaFhytBXy3RfDVwrO36H7lChGdC/jFFfc5J6Tye0A+9lvcL8I2t87id23LAqGq6tnQtYe0X1WJWP0tQc3uVO+OGDlZHI7wH72G9rvC2T5fmSunQ2pqkXmlvmQvc26z6qkjL32fThgUX44YOVkcjvAfvab1y8pD/LMO5BLZ0CqarH59hfR3tCl+7RKzsRrn40DFuUn4oAlImjzpGLuUDwSJrcD7Ge/Wf3ScsZm9p+9gbaOtDH92Uy79meK2q97Gae44iZ3IiIAgOxthnzr+XAz+6ztxg4XFJ3uZZziigMWEZlOBPLGIcgNc4Ph6trZkA1HdZ8VlQndyzjFVcQBq90TXLQmhXYDBzGT2wH2s7/C+zM+5M9bIZcF+63kzsWQo20D/++K7x+Gye1A9H7dyzjFFTe552RyO8B+9lduv3T0Qn72Rrjf6p9XnnVn9kruz8XkdoCb3ClfHLByMrkdYD/7K7NfDrdCvvNCuN/KfW/I/VaV2h+Fye0ABywaLSv5gLKdnerRut1RfoAyItjR4SNj4IZPk9sB9rO/wvpFIOvrITfOC4arr8yCvHXonJ9ecf0jYHI7EL1f93JOccVN7kRkCl8gc96HXFEXDFe3LYQcbNF9VlTmdC/jFFccsIjIANKThjz+VrjfauJySHuv7tOiCqB7Gae4ijhgdWYEVZvT6MyYN4iZ3A6wn/3l3y8nOiA/eCkcrqZugvjReiqhf7RMbgei9+teximuuMk9J5PbAfazv7z7ZcsJyC3zg8HqqpmQFftH9PXl3p8Pk9sBbnKnfHHAysnkdoD97C/TfhHI4l2QK2cGw9XXFkD2NI34Ycq2vwBMbgc4YJlt3LiPKst5TNnuQWW7Pcp296tE8qdKqTGRHyPigOX5ghVNPryIT6tXEpPbAfazv/z6JeVBnlgb/krwwaWQ1p5RPVY59heKye1A9P7iLfKkj+U+qmy3SSWc69VD0z6tqpNfV7bToRLJH0V+DG5yJ6IKIk1dkAeWhsPV79dDPF/3aVEFK+IqT9rYzsvKctwzji1SVnJW5MfggEVEFUJ2nIJ8/blgsLqiDvLSh7pPiQxQ6KWd4sByH1WWc0hNqvm8UkqpSc98WVlug7LdO8/5NROmfFxNmHL+wMe0dReetyqF+h4fbZ6gJ+vVEilf0OYFH40pH+O3p9GVEXhZx7NfXZGR8Hj2ezdJ1vEzB7ns437Wzdw6so5nPz3bmQmPp7OOd2cd78063pt1rudq68o6PlRbV0Zw+7YUTvT6FdcG5L5uJ3p9fH1ratBjVUpblOvWlRGM355GQ8qvuLYo163/+remw2eBYtcmgs6X98K/Kthv5d88D/JBQ862KNet//qfTvt62kZ53QrxM9mSDq79iV6/4tqiXLdTWevecG2lWvKppCZ/RCWcXyvLFWU7nrJcUQnnkWG/xE5OHmO7GPh4pA7nrUoNfFh7vIEfnGePZQaOj9uWHtjst6LJHzhetTl8364dHeHxi9akBv0Fyv4e2S5YHR4/2hP+0F6yIT1wfH1r+A/7DVvC4wsbwuP37vQGjj95ODNw/LH9Xs628dvDhqHazjz/SmoDol+37H8YK60t25lt/Z/75fWpimsbyXWbeTxsiFObeD5kysaBXwm+edcrOHasc0Rtw123/u/5k73led3y+ZmceqRy26Jct/+5KVz3hmsr0YJPJZVwble2c1QlnNvVxOlfUrZzl7KcZlXt3H3OrxnlM1gnev2BHzRT/uulv63/H4f+P6NKagNyX7f6nvDaV1pblOvWf/2P95r5DFb/9W9Kxe8ZLGntDW4Y2jdc9f7ibbR1ewX9mey//qdS5j2D1ZjyB/7tq7S2KNfteNa6x2ewTGM7R5WVfGDQMcv5ibKc3ZEfI+IerJQvePZYBikDX01icjvAfvbHs1/2NUNuXxgMV5fXQRbuKMr3iWt/KZjcDkTvL/TSTnFgOc3KSt436FjCeURZ7p7Ij8FN7kRUZmTVgeBNmqtqIV+dC3nvuO5TIoMVemmnOLCdWmW59QO3aUjU3KIsp1FZzm8iPwYHLCIqE+L7kOnvQMb23YLhnhcgJzt0nxYZroirPGlju59UlvOksp3DAzcatZ3H1bjJH4v8GBEHrJ6MwNrjDfodtilMbgfYz/549EtnCmK/Ft7f6merIb1e7i/MU1z6dTC5HYjeX8RVnsoa3yonJ5PbAfazX3+/HG6BfHNxMFhdOgMyaxtESnM+cejXxeR2gG+VQ/nigJWTye0A+9mvt1/WHoFcNycYrq6fA1l/tKTfX3e/Tia3AxywKF8RB6xeX/DYfm/Qy19NYXI7wH726+kX34fM2BY8Y1VVGzyDdbStpOcAmH39TW4HovfrXsYprrjJnYhiRno8yE9fD/dbPbwS0pXO/YVEGuheximuOGARUYzI8Y7g1YFVtcGrBZ33ID7frJniS/cyTnFjJR9QtrNTPVq3O+qvCJ88nDHyqWKT2wH2s790/fLOMcgNc4Ph6prZkDcOFv175mLy9Te5HYjer3s5p7jiJvecTG4H2M/+0vTLgg8gl/Xtt7p9EWT/6aJ+v6hMvv4mtwPc5E754oCVk8ntAPvZX9x+SXmQx98K91tNXA7p6C3K9xoNk6+/ye0AByzKV8QBqzsjuHenh24DbzhncjvAfvYXr19OdUK+/1K432rqptjttzL5+pvcDkTv172MU1xxkzsRaSDvN0BumhcMV1fPhCzbp/uUiEZF9zJOccUBi4hKTF7YDbmiLhiuxj0H2d2o+5SIRk33Mk5xFXHASvuChQ0+0ga+msTkdoD97C9cv3g+5Il14X6rB5dCTncX4CyLx+Trb3I7EL1f9zJOccVN7jmZ3A6wn/2F6ZfT3ZD7XgmHq9+tg3jx2m81FJOvv8ntADe5U744YOVkcjvAfvbn3y+7myBfWxAMVlfOhLywGyjRmzXny+Trb3I7wAGL8hVxwOrMCG7Ykkanga8mMbkdYD/78+uX5fuDoaqqFnLLfMi2k3qXzJEAACAASURBVAU+w+Iy+fqb3A5E79e9jFNccZM7ERWBZHzInzaGvxL84cuQhk7dp0VUcLqXcYorDlhEVGDS1gt5aFk4XP3ybUivp/u0iIpC9zJOcRVxwPJ8wfpWH56BryYxuR1gP/tH1i/7T0O+sTAYrK6og8z7oGz2Ww3F5OtvcjsQvV/3Mk5xM8I3ezZ5s6PJ7QD72R+9X1Yfglw9KxiubpoH2VRfgjMsLpOvv8ntADe5U774KsKcTG4H2M/+3P3iC6Tm3fBXgt95EVLfXsKzLB6Tr7/J7QAHLMpXxAGrwxNcsiGNDgP/opncDrCf/cP3S1caYr8WDlc/Xw3pTJX4LIvH5OtvcjsQvV/3Mk5xxU3uRDRKcrQNcsfiYLC6bAZkxlbA0P06ZC7dyzjFFQcsIhoFWX8Ucs3sYLi6YS7krcNlvZmdaLR0L+MUVxEHLF8ER3sEvoH/gJrcDrCf/YP7RQRStw0ytu9Xgt9aAjnQovksi8fk629yOxC9X/cyTnHFTe45mdwOsJ/9Yb/0eJCfvB7ut3pkJaStV/cpFpXJ19/kdoCb3ClfHLByMrkdYD/7g/72o22Qu5cEg9WlM4JXDaYzuk+v6Ey+/ia3AxywKF8jGLAuWG3mXzST2wH2s19w05+PIHP9nGC4um425LX9xuy3Mvn6m9wORO/XvYxTXHGTOxGdg4hA5n8QPGNVVQu5czFkV6Pu0yKKFd3LOMUVBywiGoK090IeXhnut5q0HNLUpfu0iGJH9zJOccUBi4jOIFtPQm6dH+63emoT36yZ6Bx0L+MUV9zknpPJ7QD7TeqXjA9JvhfeguHWBeh445Ax/UMx6fqfyeR2gJvcKV8csHIyuR1gvyn90tAJue+V8FeCiRWQkx3G9J+Lyf0mtwMcsChfHLByMrkdYL8J/bL6IOTavruyXzkTMnPbwC0YTOgfjsn9JrcDHLBotKzkA8p2dqpH63ZH+QESkeBGg4a8NDubye0A+yu5X3ozkN+uDZ+1unMxZPvJQbdgqOT+KEzuN7kdiN6vezmnuOImdyIjycEWyF3Ph8PVY29V/F3ZiYpB9zJOccUBi8goIgJZvCv4VWBVLeS6OZBX9gA+/w0gGg3dyzjFVcQBq90TXLQmhXYDBzGT2wH2V1J/cG+rVeGzVj94CXKoddivqaT+0TC53+R2IHq/7mWc4oqb3HMyuR1gf6X0y9YTkFsXhPe2+tNGSCr3ewlWSv9omdxvcjvATe6ULw5YOZncDrC/3PvFF4jzXvh2N7fMh6w7Gvm9BMu9P18m95vcDnDAonxFHLAyItjR4SNj4KtJTG4H2F/O/XLqjHtbVa+ANI/s7W7Kub8QTO43uR2I3q97Gae44iZ3oookqw8GG9j77201+31Ixtd9WkQVR/cyTnHFAYuookivN/jeVncshuw4pfu0iCqW7mWc4irigNWZEVRtTqMzY94gZnI7wP5y6pcDp8++t1VXOq/HLKf+YjC53+R2IHq/7mWc4oqb3HMyuR1gf7n0y+KdkKv67m117WzIsn2RN7IPp1z6i8XkfpPbAW5yp3xxwMrJ5HaA/XHvl7YeyCNZ97b6/kuQ+raCPX7c+4vN5H6T2wEOWJSviAOW5wtWNPnwDLzbs8ntAPvj3C/vnYB8LeveVk9tgni57201EnHuLwWT+01uB6L3617GKa64yZ2o7EjGhyTfDe9tdfN8yMZ63adFZCTdyziVQsJ5ZIztQlnOk5G/hgMWUVmRkx2Q+8+4t1VLt+7TIjJWEVd1ioXqmn9UtntQWc62YgxYXRnB+O1pdBn4ahKT2wH2x6lfXj8IuaHv3lZX1EHmvg/xi3tvqzj162Byv8ntQPT+Iq7spN39Uz+hLHePStRcqSx3dTEGLJM3O5rcDrA/Dv3Sk4b8JuveVuMXQXY3luR7x6FfJ5P7TW4HuMmdlFLKcmco2/1j3//NAavATG4H2K+7X/Y2Q76VdW+rx9+C9OR3b6uR0N2vm8n9JrcDHLAo4dyuLOd9dc/k85RSuQesCVM+riZMOX/gY9q6C89blUJ9j482T9CT9VRoyhe0ecFHS9rHs8cySPkCL+t49g3YMhIeb8/6gZSs42f+oGYf97Pu2dORdTz7FRydmfB4Out4d9bx3qzjvVnneq627Kd/h2pL+QKn3kNjyq+4NiD3dWtM+Zh6xEMq63tXSluU65byBc8ey6C57/qXrE0EsnAn/KuDe1v518xGz7J9BW2Lct36r3+nF/4qshyuW5S2KNet//q3e37FteW6bh1ecO0bU37FtUW5bqez1r3h2kq13FMpTZr6n5XlNqhJz3x54FiuActOTh5juxj4eKQO561KDXxYe7yBH5xnj2UGjo/fHv4X84omf+B41ebw+I6O8PhFa1KD/gJlf49sF6wOjx/tCX9oL9mQHji+vjX8h/2GLeHxhQ3h8Xt3egPHnzwcvkz9sf0e29hWdm33bOwcdG+rt7/5Cj63+HRFtFXydWObmW2lWO6p1Gzn5uBVg26m/6Pvf4uy3IwaN+6jZ33NKJ/BMvG/XtjGNh1tHRuPI/P154LhamwtMlM3o603UxFtlXzd2GZum4bVn4rOdj+pEs4XB31YzmZlOTNVwvlipMeIuAerJyOw9niDfkBNYXI7wP5S9YuXgdS8A7m8795WN82DbDpW1O8ZBa+/uf0mtwPR+4u80lNscJN7wZncDrC/FP1yrA3ywNJwI/uk+Nzbitff3H6T2wFucqczccAqOJPbAfYXtV8EsnI/5Ia5wWB1eR1k3geQArxJc6Hw+pvbb3I7wAGL8hVxwOr1BY/t9wb9btsUJrcD7C9Wv3SlIb9eAxnb96zV7YsgHzYV9HsUAq+/uf0mtwPR+3Uv4xRXfKscotISgexqhNy9ZPC9rbpLd28rIioc3cs4xRUHLKLSyfiQBTsgX5kVDFZfmQVZsV/3WRFRHnQv4xRXI/gV4ZOHM0Y+VWxyO8D+QvVLUxfk0fDeVvK9FyHH2gt0lsXD629uv8ntQPR+3cs4xRU3uedkcjvA/rz7RSAb6iHjwntbydObIV5x36S5UHj9ze03uR3gJnfKFwesnExuB9ifT7/0pCHT3wleHVhVC7lxHmRTfRHOsnh4/c3tN7kd4IBF+Yo4YHVnBPfu9NBt4A3nTG4H2D+qfhHIwRbIg6+GvxKsXgFp6SnaeRYLr7+5/Sa3A9H7dS/jFFfc5E5UWJ4PWbYPcmN8721FRIWjexmnuOKARVQw0toD+c3a8N5Wty2EfNio+7SIqIh0L+MUVxEHrLQvWNjgD3pzTVOY3A6wP1K/L5D3GyDffiH8leBjb0G6yv/eVrz+5vab3A5E79e9jFNccZN7Tia3A+zP2d/rBb8CvGZ2MFhdPQuyfF9pT7KIeP3N7Te5HeAmd8oXB6ycTG4H2H/OfhHI8fayvLfVSPD6m9tvcjvAAYvyFXHA6swIbtiSRqeBryYxuR1g/5D9ng9ZcyTYY9U/XE0tn3tbjQSvv7n9JrcD0ft1L+MUV9zkTjQi0t4LeeYdyBX997aaW3b3tiKiwtG9jFNcccAiisYXyJ5myI+y7m01aTnkdLfuMyMijXQv4xRXEQcszxesb/XhGfhqEpPbAfZ7vmD9qTS8l/dAbpoXDFaXzYDM/QBiwJ8Jr7+5/Sa3A9H7dS/jFFfc5J6Tye2A4f0iaDveick/exd+9r2tdplzbyujrz/M7je5HeAmd8oXB6ycTG4HDO7v9SBvHkL6nqx7W/3vNyvi3lYjYez172Nyv8ntAAcsylfEAavDE1yyIY0OA/+imdwOGNjvC+RwK+SxNyGXzoBU1aLjylnoeWWv7jPTwrjrfwaT+01uB6L3617GKW6s5APKdnaqR+t2m/xfKETZpDMV3DS0f69VVS3kkVWQEx26T42IYkr3ck5xxVcREgEZH7LlBOT+V8LB6uvPQdYc0X1mRBRzupdxiquIA5YvgqM9Al/MG8RMbgcqv1+auyC/Xx/e1+qyGcF9rno8AJXfnwv7ze03uR2I3q97Gae44ib3nExuByq43/Mhr+6FjHsufNbqwaWQgy2DPq1i+yNiv7n9JrcD3ORO+eKAlZPJ7UAF9otA9p+GJFaEg9VX50KW7YUM8V+qFdc/Quw3t9/kdoADFuVrBAPWBavN/ItmcjtQWf3SnYbUvAv5yqxgsBpbC3liLaQ9dc6vqaT+0WC/uf0mtwPR+3Uv4xRX3OROJhCBrD8K+ebi8Fmrb78A2XlK95kRUZnTvYxTXHHAogonp7ogP18dPFtVVRs8e7VgByTj6z41IqoAupdxiisOWFShJOMHg9T1c8JnrX76BqSpS/epEVEF0b2MU1xxk3tOJrcD5dkvO05BvvdSOFjdvgiyqX5Uj1WO/YXEfnP7TW4HuMmd8sUBKyeT24Hy6pfOFOR364J7WVXVBve2Sr4LSWdG/Zjl1F8M7De33+R2gAMW5YsDVk4mtwPl0y8r9kNunh8+a/XQMkh9W96PWy79xcJ+c/tNbgc4YFG+Ig5YIoI2T4a8T1ClM7kdiH+/HG2F/HhZOFjdPB+ycn/hHj/m/cXGfnP7TW4HovfrXsYprrjJncqUpLzgnlb9b3Fz6YzgLW86z31PKyKiQtO9jFNcccCiMiSb6oON6/3PWn3/JciuJt2nRUQG0r2MU1xFHLDaPcFFa1JoN3AQM7kdiFe/NHVBfvJ6OFhdNwfy3E6IX7x7WsWpXwf2m9tvcjsQvV/3Mk5xxU3uOZncDsSjXzI+ZP4OyDWzw7e4+fnqktzTKg79OrHf3H6T2wFucqd8ccDKyeR2QH+/7GwM3tam/1mrOxdDNtQDJdp4q7tfN/ab229yO8ABi/IVccDKiGBHh4+Mga8mMbkd0NcvHSnIb9eGb3Fz9SyI8x6k1yvpefD6s9/UfpPbgej9updxiitucqeYERHIsn2Qr84Nn7VKrIAcbtF9akREZ9G9jFNcccCiGJGDLZAHl4aD1bjnIMv3AXxjZiKKKd3LOMVVxAGrMyOo2pxGZ8a8QczkdqA0/dLjQZ55Z/Bb3PxhPaSlp2jfMypef/ab2m9yOxC9X/cyTnHFTe45mdwOFL9f1h6BfH1B+KzVfa9Atp8E/Hj8efP6s9/UfpPbAW5yp3xxwMrJ5HageP1ysgPy8MpwsLpxXnArhu50Qb9Pvnj92W9qv8ntAAcsylfEAcvzBSuafHgxeVahlExuBwrfL54Pmb0dctXM8C1u/vdbkKNtJbv1wkjw+rPf1H6T24Ho/bqXcYorbnKnEpKtJyF3PR8+a/XtFyBrDgPpjO5TIyIaFd3LOMUVBywqAWnpgfziray3uJkd3NOqpTuWz1oREUWlexmnuIo4YHVlBOO3p9Fl4KtJTG4H8usXXyAv7A7eM7D/LW4eWQXZ1Vg2t17g9We/qf0mtwPR+3Uv4xRX3OSek8ntwOj75cMmyA9eDp+1umMRZOleoCNVpDMtDl5/9pvab3I7wE3ulHAeUZazWdlOh7LdU8pylijb/ULkr+eAlZPJ7cDI+6UzBfnXDcHm9apayNUzIVM2QurbYnPrhZHg9We/qf0mtwMcsMh2lynLvUdNrPl7NemZLyvLeUXZzmGVeOIvI319xAEr5QuePZZBqgwXyHyZ3A5E7xcRyMoDkJvnh89aPbQcsukYELNbL4wErz/7Te03uR2I3l/kVZ5iY8KUC8bYLlS1UxXp87nJnQpAjrRCJi4PB6uvLYAs2AGc6uImdiKqaEVe1Sk2JjqfG2O7UAnni0P+/ydM+biaMOX8gY9p6y48b1UK9T0+2jxBT9ZmvpQvaPOCj+xNfl7W8ey3EMhIeLw9a2CTrONnDnLZx/2shbgj63j2PUg6M+HxdNbx7qzjvVnHe7POlW1FaOtMw3feg1xeB6mqhX95HXp+vRZtuxrh9Xrl3VbJ141tbGNbwdpKvMqTHpM/omznZWU5a875KXZy8hjbxcDHI3U4b1Vq4MPaEy6Kzx7LDBy/bVsa1h4PPZngxmv9x6s2h7/62dERHr9oTbiRuc2TQd8j2wWrw+NHe8If2ks2pAeOr28NX212w5bw+MKG8Pi9O72B408eDu+p9Nh+L2fb+O1hw1BtPRnBd3akK7INiH7dsv9xumB1Cjc+cxD7bloYPmt178v46vOnyrJtuOvWkxFYezxcvD5VcW39ovxMzj0RNlRa23DXrf/6/3xf5bXlum7Tj1ZuW5Tr9k+bwnVvuLYSLvKkjZWcpiznkJqQ/E/n/JxRPoN1ojf44er/rwmT/uul/x+H/j+jSmoDcl+3+p7w2gOANHQi9b9eHxis/BvnQmZsgxxqQUdvpqzaoly3/ut/vNevuLZ+w/1M9l//plS4mFVKW5Tr1n/9T6X8imvLdd0aU/7Av32V1hbluh3PWvf4DJbJLPcpZTtHVSL5mRF9HV9FmJPJ7UBWf08GMu8DyNWzwre4mfwmZMsJoK1X92kWDa8/+03tN7kd4KsISakxynKfUpZzTFnP/O2IvzrigNXrCx7b7w36LwNTmNwOBP1/XnYMmXuWhL8OvGcJ5NW9wLH2srlh6Gjx+rPf1H6T24Ho/UVY1ykWLOdpZTutyqoZq6ypnxr4mPiHfxPp6/kqQhqG7GqEPLQsHKyunQ2Z/k5wJ/au8r31AhFRoRR5lSddBm1Yz/pQlntPpAfggEVnEBHI5mODb7tQVQt5eCVk/VHgZGdZ3jCUiKgYirvKU/kawa8InzycMfKpYlPaxfMhqw5AvvdiOFRdOgPepBWY+fxh9O5tBnq83A9UYUy5/ufCfnP7TW4HovfrXsYprrjJPadKb5deD/L8LsjtWbdcuHIm5GdvQN44iLatDUF/byb3g1WgSr/+ubDf3H6T2wFucqd8ccDKqVLbpa0XMmMr5Ma5g/dY/XpN8KvAI61AV7pi+6NiP/tN7Te5HeCARfmKOGB1ZwT37vTQnTHvL1qltUtDJ+RPm8LbLVTVQm6ZHxzbciLYY5UOn62qtP6RYj/7Te03uR2I3q97Gae44iZ3Y8iB05DH34JcNiMcrMYvgrhbILsbgZYebl4nIhoh3cs4xRUHrIomIpCtJyH2a4NfEfi9FyHzP4AcbuHtFoiI8qB7Gae4ijhgpX3BwgZ/0FsTmKIc28UXyNuHIT98ORyqxtZCfrwMsnTvWb8GHE459hcS+9lvar/J7UD0ft3LOMUVN7nnVE7tkspAXvoQcseicLC6vA7yyCrImsOj+jVgOfUXA/vZb2q/ye0AN7lTvjhg5VQO7dKZgszcDrlpXjhYfWVWsOdq+8m8fg1YDv3FxH72m9pvcjvAAYvyFXHA6swIbtiSHvTO6aaIc7s0dUGe2gS5JusVgTfOhfzrRsiBlsi/BhxOnPtLgf3sN7Xf5HYger/uZZziipvcy5Icag2enbq8Lhysxj0H+fMWyCm+lQ0RUanoXsYprjhglRXZfhJivRZsWO8frO5ZAnl+N6Qjpfv0iIiMo3sZp7iKOGB5vmB9qw/PwGdGdLeLCOTNQ4NfEVhVC3lwKWT1ISDtF/X76+7Xjf3sN7Xf5HYger/uZZziipvcc9LVLulM8B6Bdywe9ObL8shKyLaTJfs1oMnXHmA/+83tN7kd4CZ3yhcHrJxK3S5tvZA/b4XcPD8crK6aCfnVGsihlpKcQzaTrz3Afvab229yO8ABi/IVccDq8ASXbEijw8C/aKVql+PtkD+uD95wuX+wun4O5OnNkObuon7v4Zh87QH2s9/cfpPbgej9updxiituctfLF8iuJsi/vAm5IusVgV9fAJnzPqSbb2NDRBRnupdxiisOWHqkM5ANRyHVK4J9Vf2D1beWQF7dC8kUd+M6EREVhu5lnOIq4oDli+Boj8AX8waxQrZLZwqybO/QrwjcWA+J4Z+vydceYD/7ze03uR2I3q97Gae44ib3nPJu9wXS2AWZ+z7krucHv/ny/3odsruxsCdcYCZfe4D97De33+R2gJvcKV8csHIadXs6AznSCpn+LuRrC8LB6oo6yG/XQo61F+eEC8zkaw+wn/3m9pvcDnDAonyNYMC6YLWZf9FG3N6Vhuw8BfnduuBVgP2D1bWzITXvQlp6invCBWbytQfYz35z+01uB6L3617GKa64yb0wfAFO90A21QevCLx6ZjhY3boAMv8DSBdfEUhEVGl0L+MUVxyw8pPOACc7IKsOQOzXIJdlvyLweciyfRCPrwgkIqpUupdxiisOWCMnAnSlgcOtkCW7IQ8sPfsVgeuOxvIVgUREVFi6l3GKK25yz2mgPeUDp7shHzZBZr8P+fYLg18R+OgqyAendJ9uwZl87QH2s9/cfpPbAW5yp3xxwMqprcsL2reeDDap37YwHKwur4P8Zi3kUKvu0ywak689wH72m9tvcjvAAYvyxQFraL4ALT3AgRa0v30Eice3IXPjvHCwumZ28B6BjV26z7TojLv2Z2A/+03tN7kd4IBF+Yo4YIkI2jyp7H1FIkB3Gqhvh6w+BHlyQ/BrwLFZ+6tung+ZvR3SkdJ9tiVjxLUfBvvZb2q/ye1A9H7dyzjFFTe5A54POdUJWXkA8qs1kPGLBm9ar6qFfO9FyIsfQnozus+WiIhiRPcyTnFl6oAlAmnpDt5Y+edvBM9MZQ9Ul86A/HgZ5LmdkBMdus+WiIhiSvcyTnEVccBq9wQXrUmhvcwHMWntgby4G2KvDPZRZQ9VV84MXgn46j5Ia3i39UppHy32s5/9Zvab3A5E79e9jFNcGbDJXZq7IQt3Bs9IXVE3eKi6bg7ksbcgbx+G9HhDfn05txcC+9nPfjP7TW4HuMmd8lWhA5Ycbw82o//w5eDXfdlD1a3zIU+shbx7PNJd1sutvdDYz372m9lvcjvAAYvyFXHAyohgR4ePTExfTSIikH3NEPc9yN1Lzt6kfsdiyJ82Bm/CPMKGuLcXG/vZz34z+01uB6L3617GKa7KeJO7ZHzI1pOQP22CfOO5wQPV2FrId14Mbgy6tzm4BQMREVGB6V7GKa7KbMCSXg+y9gjk12sgX507eKi6vA5y/1LIn7dCDpwGMnyTZSIiKi7dyzjFVcQBqzMjqNqcRmem9IOYtPdClu+D/PQNyNWzBg9V18yGJFYE+60OtgC9Q29Uz4fO9jhgP/vZb2a/ye1A9H7dyzjFVUw3uUtDJ2TxLsjE5ZDLztikfuM8yE/eCF4ZuO800NZb1F8BcqMn+9nPfhP7TW4HuMmd8hWTAUtEIAdOQ+q2Qb7/0tmb1G9bCPnl25CX90B2NwKNXUCEVwAWAv+RYT/72W9iv8ntAAcsylfEAcvzBSuafHh+4f6iiS+Q9xuCN02+Y/HZm9TveQHyh/WQlQeAD04B9e1AV7rkG9aL0V5O2M9+9pvZb3I7EL1f9zJOcVXiTe6SykDWH4X8di3k5nlnb1K/7xXItHcga44A2xuAA6eBlh7A0L/gREQUb7qXcYqrEgxY0pGCvLYf8vPVkK+cY5N67VbIpmPBULWrETjZCaT4xspERBRvupdxiquIA1ZXRjB+expdEV9NIo1dkCW7IdUrgmemsoeqm+dDJr8Jmb8D8t6JYKh6vwE40gp0pGJ3z6qRtlca9rOf/Wb2m9wORO/XvYxTXBVwk7scboXM2g659+WzN6nfuRjy+/WQV/ZCtp4MhqrtDcDeZqCpO9b3rOJGT/azn/0m9pvcDnCTO+UrjwFLfIHsOAWZ/g7km8+fPVTd+zIk+S7k7UPhQLW9AdhxCjjeDpzjzZXjhv/IsJ/97Dex3+R2gAMW5SvigJXyBc8eyyDV60E21QfPRt06/+xN6tUrIAt2QLadDH7tlz1YHWwBWnvLbsP6QHuZnXehsJ/97Dez3+R2IHq/7mWc4irCgCVdaciqg5B/eRNy7eyzN6lPXh3caf1AC7C7afBQ9WETcKoTSHPDOhERVR7dyzgVS7VTpSz3JWU7x8fYLpTt3Dyir48yYM1+/4xN6vMgT6yDrDsKOdUJHGgZPFR9cAo42gZ0lv6eVURERKVUpNWdtKuuuVbZzuOqOnlr0Qaso23I3LEIr/9yE3q3NUA6U8Cx9mAvVfZgtf80cLq77H4FmEtPRmDt8dBj6Ctp2M9+9pvZb3I7EL2/SKs7xUmxBiwAaOv2gs1+u5sHD1U7G4ETHUV5k+W44EZP9rOf/Sb2m9wOcJM7ZYk0YE2Y8nE1Ycr5Ax/T1l143qoUdnVkUN/jo6HXR5snaPMEjSkf9T0+6o93Y897DThvVQr17zWgeWsD6ve3or6pFyd6MgOffzrd9/k9Po71hI/TmnW8Put4myeDjrekw//f8azjzanw+Ine8HhT1vGTWcdPZR0/lQqPD9nW4+NE1vHmIY7X9/jI/jOqpLYo121XRya49ln/v0ppi3Ld+q//h52ZimuLct36r//BrkzFtUW5bv3Xf39XpuLacl23A12ZgX/7Kq0tynX7sDP8t2+4NrW0+Xyl1JjSrPSkRaQBy05OHmO7GPj4yRyctyrFD37wgx/84Ac/RvnRN2RRpRrVM1gTZp2vfjZ3r1rafP6wH9PWXTjmkTqoaesuzPm5lfYR5/ZH63aXbX8hzn20jzGSrxtpfymuSSk/inH94/pnNNR5lUt/vo+ZT/tIv/dIPl/nz8pIrj2fwapso9qDpZRStrMz5+dMmHL+GNuFmjDFvCk9zu1Rrl2+itVfiHMf7WOM5OtG2l+Ka1JKxbj+cf0zGuq8yqU/38fMp32k33skn6/zZyXO//ZTaY16wLKSD+T8HJN/0OLcHuXa5atY/YU499E+xki+bqT9pbgmpVSM6x/XP6Ohzqtc+vN9zHzaR/q9R/L5On9W4vxvP5XA/VM/oayai5VVc/EY24WynInKqrlY/Xj63xT0+5j8g2Zyu1LsZz/7Te03uV0p9hsvkbx00Kb1vg9lO7UF/T4Tpnxc2cnJasKUjxf0ccuBye1KsZ/97De13+R2pdhPRERERERERERERERERERE04PgZwAACKhJREFUREREREREREQmsZIPKMs5pCynV9nORjXR+e+6T6lkqp0qZbkvKds5Pur7jJWrhPOIspzNynY6lO2eUpazRNnuF3SfVslYyfuU7W5XltOuLKdd2c56VV1zre7T0iLhPNJ3G5gndZ9KSZz5lmJB+27dp1VSE6ddqKzkLGU5zcp2e5TlvK9s9x90n1ZJWM6hIV+dn3Cm6j41qiRW8jZluymVSH5bVT/zd8p2apTltqjEtP+g+9RKorrmWmU7j6vq5K3GDVi2u0xZ7j1qYs3fq0nPfFlZzivKdg6rxBN/qfvUSiLhfFVZyevUpJrPq0k1n1dW8hfKctJqYs3f6z61kqqu+UdluweV5WwzacBStvOBsqZ+auCjevq/131aJXPf03/V9x/Vf1YTnf+uEsnPKMu9WlnTP6v71EpiwpQLBl37RM2VwYCVvFT3qVElsZ2NynKfCg9M/oiynGPKSj6s76T0MG7AOtOEKReMsV2oaqdK96loYzunVSL5Xd2nUTL3T/2Estw9KlFzpbLc1WYNWO5W3aehTcL5tbLdt3WfRmxYzpPKcvYpvt8gFcy4yR9Tlps5a6iw3BnKcl7QdFbaGD9gTXQ+1/c0+Rd1n0rJjRv3UZVwble2m1LVz/yd7tMpGcudoWz3j33/t2EDltOlbOe4spwDynJmF/zdMeLMdnYq2/2jst3n+rYHbFEJ9/u6T0uLcZM/pmy3SVnuo7pPhSqJ7f51sKC6/++g44nkb5XtbNR0VtqYPWBN/oiynZeV5azRfSYlNXH6l5Tldvb9h0arspLX6T6lkkk4tyvLeV/dM/k8pZRZA1Z1zbXKcsapRPK/quqaryjLWads57Cy3U/qPrWSsJzevj23v1STnEtUwvlhsA8r+S3dp1ZyiZpvBH//3b/WfSpUSc41YFnOE8pyN2g6K22MHrCs5DRlOYfUhOR/0n0qJTVu8sfUROdzynb/QVnur5TlNBrxDNakqf9ZWW6DmvTMlweOmTRgnemhP/47Zbltxvx62HLSynLWDT6WnKJsZ72mM9LHcpYry31J92lQpeGvCAcxdsCy3KeU7RxVieRndJ+KdpazUlnudN2nUXS2c3Pwyjk30//R979FWW5GjRv3Ud2nWHKWs1lZ7q90n0ZJBM/WOYOOWcn7lOUc03RGelQ7/7eyHV8lkjfpPhWqRLazUdnOn8IDkz+iLLeem9yNMEZZ7lPBixqe+VvdJxMLlvN6wd9IPY5s95Mq4Xxx0IflbFaWM9PIPXj3T/1E3wscfqT7VErCcuectcnddv941rNalc5OTlaWe0JdOvkvdJ8KVaL+2zRUO3erh5L/RVnudGW5LerHyf+o+9RK4v6pn1BWzcXKqrm47144E5VVc7ERG14t5+lg31HN2EEvWZ74h3+j+9RKwnZ+qazkP6mHpn26by/Wr5TliqpOXqX71LQw6VeElvs7ZdWMVQ9N+7SaVPM/lOW+piynUU2YcoHuUyuJ6pp/VLbjKct9VE10PqcSzh3Bpn/3Tt2nVjqTPxLclsb5te4zoUqWcB7se8o4pWxno0pM/390n1LJJJKXDnnDOQOexRiqu+/XRPfoPreSsBxXWc6h4OfePaUsZ6Wxw5VShg1YzjxlO8eV7aaCZ+ydecbcA6qfVXODspz3gw3v7i7jXkVouVePsV2oSTWf130qREREREREREREREREREREREREREREREREREREREREREREREREREREVAxRbrZpOYdUIvnQiB73oWmfDm7iWnNxPqen7ORkZbtb83oMIiIiopKKMmBNmHKB+sH0f9v/PyO9h+W4cR9V1tRP5f2eZxywiIiIqOyM4u1iSvom4RywiIiIqOxY7mpluU/1fbQp221SlvOYUmpM+DlZvyK0nEOD38fROTTk4575K8K+98BUtnOFsp13lOV2K8tZp2z3C4PPJ/mwstwGZTsdynJclXB+fdaAZTnfU5a7K3hPOWe3sp37s77+W8pyO5X1zN9mHZumLGe3MW/qTURERJpZ7uq+YeZJZbtfULZ7p7KdrkFvhJs9YE2YcsHAG2RbUz+lJky5YMjHPdeAZbkblFUzVlU/83fKct5Strt24GsSNd9QltOrEsnvBufiPK4sp33QgBWc33FVnbxVJZKfUdXJW5XlNKtq5+6s812gLHeTunTyX6iEc72y3ZSqTv63gv65EREREZ1TMGDtVNnPWCWcX/cd6/ucwZvcI/2KcLhnsAYeN3ndGNuFumfyeX3fZ51KOFPPOL8NgwYsy9mnrOT4wZ/j/ERZzrqB/33f03+lbOeospynle2cVJb7aM4/ByIiIqKCsdzVynafHXQskbxJ2Y6nxo37aPA5BRywsp/xmuRcMsZ2oX48/W/6zqVFWclvDXoc2/3jwICVeOIv+54F6w5+Ddj/4fQqy204o+vq4DzdtUpN/siI/kyIiIiI8lLqAeuhP/678HvXXBwcm/bpvnNpUbZz16DHyR6wfpz8j31D051qovO5QR+J5GcGf53zuLLcjLLdg2rClPNH8kdCRERElJ/wV4TZx3413K8IleWkleV+bdjHHdWANcSvCG1n/eBfEbr1KpH86bDfe1LN/1CWk1bVNdcq292uLHfGsJ9PREREVFDhJvc/KNv9grKS45XldqqE88Pwc84csNw9ynKeVtbUT6n7nv6rIR93VANW8jZluz0qkfy2mlTzeWU5/3LWJvfgFYTdKpH8kZpU83k1cfqXVCL5bZVwJymllLLdTyrb3a9s5/dKKaUmTv9S36sNxxXmD4yIiIgoF8tdrRLO1OBWBm6bsp3Tykr+Qp3rNg1KKZVwvqpsZ6+yHW/Et2kYbsAKzudRZTmNynY6lO3UKsv5zVm3aUg4dyjL2aJsN6Vs57SynTdVouYWpZRStvusst3tasKUj4ef705SltOsJk67cLR/TEREREREREREREREREREREREREREdLb/H0ekbhYuc8NxAAAAAElFTkSuQmCC\" width=\"600\">"
+ ],
"text/plain": [
- "<matplotlib.figure.Figure at 0x72df4ceec940>"
+ "<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Channel 31 offset: 2.681lsb\n"
+ ]
}
],
"source": [
- "plot_run('All channels, blue runs', *fetch_runs('green1', 'green2', 'green3', 'green4'))"
+ "plot_run(None, *fetch_runs('green1'), figsize=(6, 4), svgfile='/tmp/driver_linearity_raw.svg')"
]
},
{
"cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 15,
+ "metadata": {},
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAF2CAYAAAB0yCWXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeYVdXVgPF3Ayoae4+oECsaa4wKIjrGglhCRKNo7L3E\nRuyfykBsscUu9kqxF+yiXmNHFKyAFQVRjCIWRKSc7481hD4M3Dtz5s68v+eZZ+6ccu+SEPass/de\nK2VZhiRJkiRJdaVJ3gFIkiRJkhoXE1FJkiRJUp0yEZUkSZIk1SkTUUmSJElSnTIRlSRJkiTVKRNR\nSZIkSVKdMhGVJEmSJNUpE1FJkiRJUp2aayKaUloopfRaSmlQSumdlFK3quOtUkqvppSGpZT6pJSa\nVR1fMKXUN6X0YUrplZTSqrX9HyFJkqqXUmqdUro2pXR3SunIvOORJDVuc01EsyybAGyTZdnGwEZA\nx5TS5sC/gEuyLFsbGAscUnXLIcCYLMvWBC4DLqyVyCVJUo1lWTY0y7KjgL2ATfKOR5LUuNVoaW6W\nZT9XvVwIaAZkwDbAfVXHbwP+UvW6U9XPAPcC25YkUkmS9D8ppZtSSqNTSm/PdHzHlNLQlNIHKaVT\nZzq3K/AC8ExdxipJ0sxqlIimlJqklAYBXwFPAx8DY7Msm1J1yUigRdXrFsAIgCzLJgNjU0pLlzRq\nSZJ0C9Bh+gMppSbAVVXHfw/snVJqPfV8lmX9sizbEti3LgOVJGlmzWpyUVXCuXFKaXHgAWCd2V1W\n9T3NdDxNd06SJJVAlmUvppRaznR4M+DDLMs+A0gp9SVWKg1NKW0NdCZWNz1ap8FKkjSTGiWiU2VZ\n9kNK6XmgDbBkSqlJVZK6MjCq6rKRwCrAqJRSU2DxLMu+m/m9Ukomp5KkksqybOaHoY3N/1YlVRlJ\nJKdkWfY88Hx1Nzs2S5JKbU5jc02q5i6bUlqi6vXCwHbA+8BzwF+rLjsAeKjq9cNVP1N1/tlqgvJr\nPr66deuWewzl/OWfn392/tmV31dN/vwEzLoqCeZxVVLe/1vX5d+ZcvncYt9zfu6f13tqcn0prmko\n/5b697P4++flvppeW+zfv4by97OU/y3VqcmM6G+B26r2nTQB7sqy7LGU0hCgb0rpn8Ag4Kaq628C\n7kgpfQh8C3SZlwFQkiTNt5HA9G3Tpl+x1KhUVFQ0mM8t9j3n5/55vacm15fqmobAv5/F3z8v99X0\n2rld11j+fkLd/LfONRHNsuwd4A+zOf4psPlsjk8A9ixJdJIkqTqJGWdBXwfWqNo7+iXxMHjvPALL\nm7/oF3e/iWjt8u9n8febiNauuvhvrVHVXNUvjen/BLXBP7/555/d/PPPrjj++c0qpdQbeBlYK6X0\neUrpoCyq1R8LPAW8B/TNsmxInnFKpeS/BarP/Ps5b9Lc1u7W2genlOX12ZKkhielRGaxoqKklLJu\n3bpRUVHhL1SSpPlWKBQoFAp07959jmOziagkqUEwES2eY7MkqZSqG5tdmitJkiRJqlMmopIkSZKk\nOmUiKkmSJEmqUyaikiTpfyorKykUCnmHIUkqY4VCgcrKymqvsViRJKlBsFhR8RybJUmlZLEiSZIk\nSVK9YSIqSZIkSapTJqKSJEmSpDplIipJkiRJqlMmopIkSZKkOmUiKkmS/sf2LZKkYtm+RZLUaNi+\npXiOzZKkUrJ9iyRJkiSp3jARlSRJkiTVKRNRSZIkSVKdMhGVJEmSJNUpE1FJkiRJUp0yEZUkSf9j\n+xZJUrFs3yJJajRs31I8x2ZJUinZvkWS1GBNnpx3BJIkaV6ZiEqSytaoUbDuuiajkiSVGxNRSVLZ\nuvlmqKiApk3zjkSSJM0L94hKksrS5Mnwu9/BQw/Bxhu7R7QUHJslSaXkHlFJUoPz+OPw299GEipJ\nksqLiagkqewMHAgnnADHHZd3JJIkaX40yzsASZLmxWuvwS67wFVXwV575R2NJEmaH86ISpLKyhVX\nwJlnmoTWlsrKSgqFQt5hSJLKWKFQoLKystprLFYkSar3Xn0V3n4bdtsN1loLPvkEllpqxmssVlQ8\nx2ZJUilVNzabiEqS6r0OHeCll2CjjWDNNeGWW2a9xkS0eI7NkqRSsmquJKlsffwxDBoUBYq++QaO\nOSbviCRJUrGcEZUk1WunngpTpsBFF1V/nTOixXNsliSVUnVjs1VzJUn1xtixsMQSkKqGrDffhJtv\nhpdfzjcuSZJUWi7NlSTVC1OmwCabQN++8XOvXrDjjnDllbEvVJIkNRwmopKkeuGpp+CLL+COO2Dy\nZPi//4N+/aBLl7wjkyRJpWYiKkmqF3r2hAsuiGW4d9wByy8Pm2+ed1SSJKk2uEdUkpS7zz+H//wH\n7rwTXn89KuNecUXeUUmSpNrijKgkKVeFArRvD6ecAosuCn/7GzRr5pJcSZIaMmdEJUm5GTMGdtsN\neveGjh3jWMeOMHQo/OY3+cbWWFVWVlJRUUFFRUXeoUiSylShUKBQKFR7jX1EJUm5+fe/o0XLHXcU\n/172ES2eY7MkqZSqG5tdmitJqlOffQYbbQTDhkWBoiOPzDsiSZJU10xEJUm14uef4dtvZz1+/fXQ\npAm0bQsLLghbbFH3sUmSpHy5R1SSVCtOOgl+/HHGZbcTJ8LNN8Ozz8Irr8Cyy0JyMa0kSY2Oiagk\nqeR+/DFasSy//IzHH3oI1l4b1lknviRJUuPk0lxJUsn16QPbbAPffAP//W8ce+EF6NoVjjsu39gk\nSVL+5pqIppRWTik9m1J6P6X0Tkrp2Krj3VJKI1NKb1Z97TjdPaenlD5MKQ1JKe1Qm/8BkqT6ZdIk\nuPZaOPpo2GwzeO216BX617/CNddA5855RyhJkvI21/YtKaUVgRWzLBucUloUeAPoBOwF/Jhl2aUz\nXb8O0BvYFFgZ6A+sOXM9eEvES1LD8+mnsPfesMwy0K8fVFZClsF770GHDnDEEbX32bZvKZ5jsySp\nlIpq35Jl2VdZlg2uev0TMARoMfW9Z3NLJ6BvlmWTsiwbDnwIbDY/gUuSysvBB8NOO0US2qQJtGkD\nDz4Izz0H++yTd3SSJKm+mKc9oimlVsBGwGtVh45JKQ1OKd2YUlqi6lgLYMR0t33BtMRVktTATJ1A\nGzo0vk47LZJQgM03h3ffhS5dYLHF8otRkiTVLzWumlu1LPde4Pgsy35KKV0D9MiyLEspnQNcAhzK\n7GdJZ7vOp7Ky8n+vKyoqqKioqHnkkqTcZRm0awd77gmffRYzogsuOO38MsvAjjvCMceU/rMLhQKF\nQqH0byxJkmrdXPeIAqSUmgGPAI9nWXb5bM63BPplWbZBSuk0IMuy7F9V554AumVZ9tpM97gPRZLK\n3EsvwX77wZQpUR33vfegVat8YnGPaPEcmyVJpVTUHtEqNwPvT5+EVhUxmqoz8G7V64eBLimlBVNK\nvwPWAAbMe9iSpPquZ0/4+9/h6afh3HPzS0IlSVJ5mevS3JRSO+BvwDsppUHEMtszgH1SShsBU4Dh\nwBEAWZa9n1K6G3gfmAgc7eNVSWp4vv02ihJddlkswT3hhLwjUilUVla6XUaSVJSabJ+p0dLc2uDy\nH0kqH+PHw733xjJciDYt++4LG24YvUHrA5fmFs+xWZJUSqVYmitJasT69oX994+CRD/9BG3bwh57\nwFVX5R2ZJEkqR86ISpLmavPN4ccfY0Z0ueXgkUeiP2h94oxo8RybJUml8sYb8Mc/znlsrnH7FklS\n4/Tmm/DVV3D77dGGpXlzOOecvKOSJEn11aefRvu26rg0V5I0R7/8Aj16wOGHQ/v2MSv67bewww55\nRyZJkuqbyZPhgQdgtdWilkR1TEQlSbP1xRew6aawwAJw7LHQpAl07QpnnBGvJUmSppoyBf75T+jc\nOVq7XXxx9de7R1SSGqFCAdq0iWW2c3LyyVEt98orIZXBzkv3iBbPsVmSND+6do0tPN9+C717R0HD\nBRaofmw2EZWkRub776FFC7jvPujQYcZzY8bEctyll4ZVV4VXXoHVV88nznllIlo8x2ZJ0rw67rh4\naA3wzjuw3nrTzlU3NlusSJIamV69YNw4GDp01kT0H/+Ap56Co46CjTcunyRUkiTVrbFjYaml4vWd\nd0Zv8emT0LkxEZWkRiTLoGdP2G03GDJkxnPffRcFBk46Cc46C+6/P58YJUlS/XX++dCyZfQXh+g1\nvtde8/4+JqKS1Ig88QRMmABHHz1rC5bbb4eddoIzz4TttotCRZIkSVNVVkL37vF6oYXghx9gkUXm\n772seyhJjcT558OBB8Y+jnXWmXFGdMIEuO46OPLI+LlNG2jaNJcwJUlSPTNyJBx8cCShnTvHsWKS\nUHBGVJIahXfeiQT0zTejUFGWRUXcMWPg669jSc1660WvUEmSpKnGjIEdd4T33oNHHoGdd45+ocU+\nsDYRlaQG7IcfYPHFY7bzsMMiCYVox9K6NQwbBieeGPs8unYtjzYtkiSp9n39NWywAYweHT8PHx57\nQ6E0q6ZcmitJDdQLL8CKK8Jjj0VPr0MPnfF869bQpw+MGgUnnGASKkmSwkcfRfX80aPjIfa4cdOS\n0FIxEZWkBuraa6M67h57xJLbVVaZ8fw668Q1hx3mflBJkhRuuAF22CEeVD/8MLz2WnF7QefEpbmS\n1AB9/TU8/jh8+mlUyF1mmVmvad069ooeckjdxydJkuqHCRNgk01gwIBIPA8/HFZYAX79FRZYoPY+\n10RUkhqgW26J2dAll4R27WZ/Tfv2cMUVsNJKdRubJEmqH775JhLP996DAw6Ae++Ndm477FC7SShA\nyrKsdj9hTh+cUpbXZ0tSQ/L00/E0c5ddoordv/4Fl18O/fvD+uvnHV3dSSmRZZk7XYvg2CxJjUOW\nwdtvR9u2V1+NB9djx0YSut9+pfuc6sZmZ0QlqYxlGZx6arzeZRe48UZ44AF44w1YeeV8Y1N5qqys\npKKigoqKirxDkSTVknvvhT33hN/+Fn78Ec46C5o3L10SWigUKBQK1V7jjKgklbEBA6BLl5gR7d8f\n9t4bLr4Yttsu78jqnjOixXNslqSG6+efo4bEHXfA2WdHNf2uXaN4YW2pbmw2EZWkMnbwwbD22jGw\nvPNOFCcaNgyaNMKa6CaixXNslqSGKctgq63gxRfj53/+E848s/Y/16W5ktQAPfNMLMMdNgxGjoyK\ndxde2DiTUEmSNHsTJkCbNvGwGqKHeJcu+cYEJqKSVJYuuyyW4N59Nyy/PCy3HJxwAhx0UN6RSZKk\n+qJPH3j+eRg8OLbwLL88rLde3lEFl+ZKUpkZPx5WWSUaTK++et7R1B8uzS2eY7Mklb8pU2J11IAB\nsPnmceyzz2DVVes+lurGZhdwSVKZePpp+P77mAXdfHOTUEmSNKOuXWGjjaKK/uabx5adZ57JJwmd\nG2dEJakMfPNNtGPZdFP45ZeodrfrrnlHVb84I1o8x2ZJKk9ZBg89BLvtNu3YvvtGX9CU48jojKgk\nlYkvvoDTT5/1+G23wR57wGqrwejRsNNOdR+bJEmqf6ZMgVtvjST0iivi2IUXRpuWPJPQuXFGVJLq\nkTPPhAsuiCW4v/lNHMuyaNFy662xzObbb6PYgGbkjGjxHJslqby8+iq0bQuLLx6/J3TqBI8+Ch06\nwIIL5h2dM6KSVBYmToSbboIVVoA33ph2/L77YKGFYqBp2tQkVJIkwX//CwccEK8POSRmRJs0ia07\n9SEJnRvbt0hSPfHQQ7DWWrDxxvGEc6utYob05puhb9/6vbxGkiTVvh9+gF69oi/oH/4Af/1rtGZp\n3jzvyOadiagk1QMffBAFiM4+O5bi3nsvDBwY+zveeiv6hEqSpMYry6B7d7j0UmjRAg49FM47DxZe\nOO/I5o9LcyUpZ6+8Au3awTHHwF57xVPOV16Ba6+FI480CZUkqbH77jvo3BkeeCB+btoUrr++vH9H\nsFiRJOVs991h++0j6YR44rniijBuHHz8cewZ1dxZrKh4js2SlK8pU2Kf51STJ8PYsVEF98ILY8XU\nWmtFArriivnFWVPVjc0uzZWkHAwaFP1AW7aE556LSndTpRSzos2bm4RKktRYTJwYRYbefDPqRUAs\nvb3kElhqKfj0U2jVKtcQS8pEVJJycOKJURm3QwfYc09YbLEZz//zn7DkkvnEJkmS6laWxRYdgE8+\niUT06afhsstg0UWjP2hDSkLBpbmSVOeGDIE//QluvBH22CP2g260Ud5RlT+X5hbPsVmS6t6nn8K6\n60Z7toqK+J3g3Xejav7998POO5dHO5bZcWmuJNUj110X/b523jl6gC26aN4RSZKkuvbBB7DAAnDS\nSbDIItFL/K23omL+sGGxLLdTpxn3jDYkJqKSVItmLjrw8cdw552xLBdMQiVJaoyyLHqAfvwxtG0b\ns6KLLx4PqAcNit7if/5z3lHWrgaaX0tS/iZNgvXWi6IDAPfdF0WIevSIIkWSJKlx2m+/6P+59NLR\nrm3xxeP4euvFMt2GnoSCe0QlqdY8+GD0/Dr2WLj44kg+77svnnyq9NwjWjzHZkmqHYMHx+8BY8bE\nPtCmTWNpbrNmDXfpLbhHVJJy0bMnnHlmNJxu1w7WWMMkVJKkxuaXX6IuxCGHxB7QzTeHo44q3wJE\npeKMqCTV0P33R5uV7bef+7WffBIDzeefw9Zbx/dLL4V99qn9OBsrZ0SL59gsSaU1aVIkoUOGwMiR\n0LEj9O07a9u2hqq6sbkBTwRLUulkGZx2GvTrN/dr33or9nYce2zs//jb32DyZNh999qPU5Ik1Q9P\nPBErocaPj3oRiy8OV17ZeJLQuXFpriTVwHPPRWW74cOrv270aNhmG7j8cth33zh22GHQvj0stFCt\nhylJknI2ZkyM+aefDqusEt+XXRa++gqaN887uvrDpbmSVAN77hlPMl9/PWY85+T88yNhvfHGuotN\nwaW5xXNslqTiPP44dOkC66wTtSFuv71hFyOaG5fmSlIRHn0U+vePwkOzmxH95JNYfvv991GY6Mgj\n6zxESZKUs+HD4dRT4Te/iVnR225r3Eno3PhHI0nVOOccOOaYaCzdsmXsFR07dsZrrr4aCgXYZBNY\nZhn44x9zCVWqVkqpU0rp+pTSAymlGpTckiTNyTffwN57x+8FWQZPPQUHHAC77AL/+Q/ceWe0aNGc\nzXVpbkppZeB2YEVgMnBDlmVXpJSWAu4CWgLDgT2zLPu+6p4rgI7AOODALMsGz+Z9Xf4jqV4bOxZa\ntYL334eVVopj668Pd9wBG20UP48fD6uuCi+/HFVxt9vOokR5cWluzaSUlgQuyrLssNmcc2yWpBo4\n9VS48EL47DMYOhQ6dIjfGT78MHqDKhS7NHcS0DXLsnWBtsAxKaXWwGlA/yzL1gaeBU6v+rCOwOpZ\nlq0JHAH0LMF/gyTVmccfh3Hj4mlmhw7TklCIQWb65bn33hszoWuuCddeaxKqupNSuimlNDql9PZM\nx3dMKQ1NKX2QUjp1NreeCVxdN1FKUsPTrRvcfTdsuCHcdx907QrXXRczoSahNTfXRDTLsq+mzmhm\nWfYTMARYGegE3FZ12W1VP1P1/faq618DlkgprVDiuCWpVowcCbvuCn/5SySWRxwx4/lWreLpJ8A7\n70D37tGUWsrBLUCH6Q+klJoAV1Ud/z2wd9XD46nnLwAem91KJUlS9QYNisr4V14Jr7wCO+4YSeie\ne0aF/FVWyTvC8jJPe0RTSq2AjYBXgRWyLBsNkawCy1dd1gIYMd1tX1Qdk6R676ab4NBDYamlogn1\nNtvMeL5ly5gRfe45+NOf4P/+L3qGSnUty7IXge9mOrwZ8GGWZZ9lWTYR6EvVg+KU0rHAtsAeKaXD\n6zRYSSpzWQaVldGW5bTTYMUVYeONp7VnSW4MmWc1njxOKS0K3Ascn2XZTymlOW0imd3/DLO9trKy\n8n+vKyoqqKioqGk4klRykybBDTfAY4/BuuvGHtGZB5ZWrWI/6EUXxdeBB+YRqQAKhQKFQiHvMOqb\nmR8GjySSU7IsuxK4cm5v4NgsSdOccw5MngwffACffgqvvQYLLxzn9tgD2rWDBRbIN8b6ZF7G5hr1\nEU0pNQMeAR7PsuzyqmNDgIosy0anlFYEnsuybJ2UUs+q13dVXTcU2Hrq7Ol072lBBEn1yi23RCL6\n8stzvub116FTJ/j1VxgxYtpgpPw1xmJFKaWWQL8syzao+nkPYIcsyw6v+nlfYNMsy46v4fs5NktS\nlW++gbXXhl9+gRVWiKJECy6Yd1TlpRR9RG8G3p+ahFZ5GDiw6vWBwEPTHd+/6oPbAGNnTkIlKW+v\nvhoVbiGW25xwQhQfuOyy6u9r1Qq+/BL2288kVPXSSGDV6X5eGRiVUyySVLaGD4c//CFauO22W/yO\nYBJaWjVp39IO+A/wDrHENgPOAAYAdwOrAJ8Df82ybGzVPVcBOxLtWw7KsuzN2byvT10l5WaffaBP\nH3jrrWg6feSRUXhgqaWqvy/LYPnl4YUXoHXr6q9V3WqkM6KtiBnR9at+bgoMI/aCfkmM1XtnWTak\nhu/n2CypUZsyJQoQDR8e23TOOy/GfveAzp/qxuYaLc2tDQ52kvLy3/9Gu5W99oIll4wquFtuCX//\ne83u//lnWGSR2o1R866xJaIppd5ABbAMMBrolmXZLVVt1C4jVj3dlGXZBfPwno7Nkhqdc86JYoT7\n7RftWI47LvqEDxsGyy2Xd3TlzURUkqZz0UXw/vvxxHP77WHChHjyucQSeUemYjS2RLQ2pJSybt26\nWaRIUqPx5Zew2mpRCb9793hI/e9/w0472RO0GFOLFnXv3t1EVJIgluMedxw88QRssglssAFsthnc\neGPekalYJqLFc2yW1Jh88AF06QIbbhgzoUssEbOj++/vUtxScUZUkoBbb429Hn37RgECgIEDYaWV\n4kvlzUS0eI7NkhqD77+HkSPhlFNg883hrLOiJ+hyy8HTT+cdXcNiIiqp0cuyGGQuuiiW46rhMREt\nnmOzpMbg2GPh+uth2WXh44+heXN44IFYorvhhnlH17BUNza78llSg9a7N0yaFH3AfvoJtt0274gk\nSVJdm1r59osvoFcvePTR2APavHmc3223fONrjExEJTUIU6ZAk5k6I0+eDKefHlVuV1wRjjhi1msk\nSVLDdtNNUCjA8cfDzjvDaadN6yWu/PgrmaSy98svMeM5fPiMx594IhLQQiGeeB54YA7BSWWmsrKS\nQqGQdxiSVGM//TTnc7/+GtVwH3wQjjoqXp9ySt3F1lgVCgUqKyurvcY9opLK3p13Ru+vO++Ev/1t\n2vFdd4XOneGgg/KLTXXHPaLFc2yWVG6efhoOOABGjZr13NixUSn/66/jgfU998Cnn8JCC9V9nI2V\nxYokNWhbbhlLbjfcEK68Mo7dfTccfTR8/jksski+8alumIgWz7FZUjnJMth0U3jjDfjmG1hmmRnP\nH3RQ9Aq/5prYrvPJJ3G96o7FiiQ1WO+8E083+/SBf/wjjp12WlS/e/xxk1BJkhqir76Crl2jANEm\nm0RP0LZt49zf/w7jxsFDD0VV3CWXjOMzJ6rKl3tEJZWt116LpbcnnRRPON9/H0aMgJ494eWXfeop\nSVJDdeSRsPji8Oyz0Lp1JKIw7eH0iBFxzVJL5Run5swZUUllafhw2GknuO462GOPOLbuurEX5C9/\n8amnJEkNzU8/wRZbRA2IgQPho4+iGOFaa8GwYTELesopcPjhcP75sXRX9ZczopLK0g03wP77T0tC\nAdq0iap4RxyRX1ySJKl2XHUVLLcc9O0LZ589rQfo2mvD0KHQvj0ssEBs0YFYtqv6yxlRSWVjyJB4\nwnnlldN6gk2vfXt48cVISCXNn8rKSioqKqioqMg7FEmN3I8/wmKLxeuhQ+HSS+E//4kZ0On7gq+1\nFjz6KKy3HvTqZQJaHxQKhbm2ArNqrqSyceSR0K8fLLwwrLzyrIlolsWynamDlhoXq+YWz7FZUn3x\n+uuw9dbw4YeRfB57LJx77uxXPU0d+/v0gS5d6j5WzZntWySVvR9/hFVXhbfegspK+OtfoWPHvKNS\nfWIiWjzHZkn1RYcOUYBo992j/2efPrE/dE5694Y994RmrvesV0xEJZW9nj2hf3+49968I1F9ZSJa\nPMdmSXnLMrjtNujRI5bbrr8+bLstPPlk3pFpfthHVFJZGTECFl10Wsn1gQPhvPPg1ltzDUuSJNWy\nPfeM5bh9+8I668AZZ8Buu+UdlWqDM6KS6p2KimjFcs018TT0oIOiQNFee+UdmeozZ0SL59gsKQ9f\nfw0LLgjvvAMHHBCtWBZYIO+oVAouzZVUNoYMgXbtoGlTGDUqluMcf3zsEZGqYyJaPMdmSbVp6j8v\n01e1zTLYckv46itYemk46ig4+OB84lPpVTc220dUUr1y3XUxCK29dpRp/+gj+POf845KajwqKyvn\nWnJfkubHwQfDv/8947GnnoIxY2IJ7kILwX775RObSqtQKFBZWVntNc6ISqo3xoyJXmADB8Jjj8Fx\nx8XA1KNH3pGpHDgjWjzHZkm15c03o893mzbRjgXg559jO84//uH2m4bKGVFJ9d5//gMbbhi9Qlu1\nimIFSy4Jhx6ad2SSJKlYp58O558PgwbBDz/ACy9A69aw5prRkk2NjzOikmrVlCnw3//CCivM+ZqJ\nEyP57NkTdt112vFff43iBVJNOCNaPMdmSaX23nsx4/nVV/D667DTTnD00XD22bHqae+9845QtckZ\nUUm5ueMO6NRp9ucmTozvjzwCv/vdjEkomIRKklTOxo+HDh1gxx1hwICohNuhA5x2WuwH7dIl7wiV\nJxNRSbXq2mvh/fenVcqb6qefoEULuOWWmAk98sh84pMkSaUzeTLccw9MmhTj+6abwgknTHu4vMMO\n8MEHcOaZM1bPVePTLO8AJDVcgwZFC5bmzeN7ixbTzvXpA2usEctyJk2Chx7KL05JklQavXvDIYfA\nn/4EgwfD00/PeH799eMhtBXx5R5RSbXm8MNhlVXgmWfgrLOiJyjE7Ogmm0TRghYt4MMPYbfd8o1V\n5c89osURAwTPAAAgAElEQVRzbJZUjIkTowDR9ddDv34wYUKsjFLjVd3Y7IyopJIbNw66do2noK+8\nAl98AUOGTEtEBw6EsWNh++2hSRNYb71845UkScW7+WZYffUY76eO+dKcuEdUUsn16AFffglvvQUr\nrgjrrANDh8a5QgH22ANOPTWSUEn1S2VlJYVCIe8wJNVjX3wBV1wx7ecffohx/YwzYrWTVCgUqKys\nrPYal+ZKKqkJE2I57ksvRW8wgCefhAsvhGuugXbtopJux475xqmGx6W5xXNsllQTBx8Mt94Kw4bF\nWN+5c1TE/fe/YaWV8o5O9Ul1Y7OJqKSS+Mc/YhDaYIMoQjB9cYLPP4e2bWGvvaJw0Xnn5RenGi4T\n0eI5NkuamyFDYOutY0yfPBmOOCLas3zyCSy8cN7Rqb4xEZVUq8aOhVatYiZ0xAi46SbYffdp56dM\ngcUWi55hb7wRPUOlUjMRLZ5js6S52X13aNMG9tsvtt5ssgnsvDOceGLekak+qm5sdoeWpKLdcUc8\nDX3mGdh331lLsjdpAmuvDZtvbhIqSVI5+uyzGOMHD4a//z1qQOy2G7z7bsyKSvPKGVFJRcmyqHp7\n9dVQUTHn6845B7bYIvqKSbXBGdHiOTZLmp1PPoFNN40E9KSTYpUTRGHCTz+N8V2aHZfmSiqZBx+E\nXXeFpk3h559jb+grr8CgQZBMAZQjE9HiOTZLDd/XX8OBB8JDD0Vth5o4+GBYeeWoii/NC5fmSiqJ\nd96JZTjPPBM/77orfP99tGQxCZUkqf474wx4/HF47705X/Pll5Gsjh4NH30EDz/sHlCVXrO8A5BU\nPq67LooS9eoFK6wAH3wQrVma+S+JJEn13uuvw2OPQadO8XqjjWZ/3fnnw5tvRlGitdeGY4+FpZaq\n21jV8Lk0V1KN/PQTrLoqPPUUbL99DGKrrQZnn513ZFJwaW7xHJulhmvKlGildtRR8OOPscrp+utn\nvW7ECNhww2jT0r9/LMcdMACWWKLuY1b5c4+opKJkWfT+HDAg9pR06BDLcz/7DFq0yDs6KZiIFs+x\nWWqYRoyAbt3g/ffh5ZdjPD/qqKjvMLOjjoLFF4d//avu41TDU93Y7II6SdWaOBH23x/eegvuvz+O\nHXVU9Aw1CZUansrKSioqKqiorgy2pLKQZXDKKdHf+7DD4JFHoqXaRhvBsGEwfjwsvPC0659/Hu6+\nO85JxSgUChQKhWqvcUZUUrXuuQcuuQSee27GwUqqb5wRLZ5js9SwPPpotFt54QVYdtkZz/3hD9F6\nrW3bKEp0/PExW3r11VGMUCoFq+ZKmieTJ0fFPICePaNSnkmoJEn12/TPkSZOjCT0kktmTUIh+oIO\nHBivu3aN5bhDh5qEqu6YiEqaxfXXQ+vW0Ls3vPtutGyRJEn116uvRkX7++6Ln6+7LrbRdOw4++s3\n3TQq5370URQivPhiWGSRuotXcmmu1Ig9+2y0Y1lttWnHsiyq5W23HVxxBZx8cpRxl+o7l+YWz7FZ\nKk9TpkSrlW23hbvugh13jIS0f39Yf/3Z3/PWW9ClC7RrFzUfunev25jVOFg1V9IsJk+GNdaAffaB\nc8+ddvyVV+CAA2J5zksvwe9/D0svnV+cUk2ZiBbPsVkqT3fcAVddFWP4Dz9EYaIWLeCyy+Z8z6RJ\nsOSSsNBC0Rd8mWXqLl41HlbNlTSLp56Cr7+OpTzTu/pqOOKIqKrXvn0+sUmSpJr56Sc4/fQoLtik\nSSSX99wz9/uaNYsVUFtsYRKqfMx1j2hK6aaU0uiU0tvTHeuWUhqZUnqz6mvH6c6dnlL6MKU0JKW0\nQ20FLqk4PXtCZWXsD5k8OZ6g7rtvFC446KC8o5MkSTVxwQWw9dZR/XZe3X57/C4g5aEmxYpuATrM\n5vilWZb9oerrCYCU0jrAnsA6QEfgmpSSy6Skeuall+DFF+Hoo+G3v40G12eeGRX23nzTpbiSJNUH\nDz4IP/88+3MDB8JOO8Gdd0YyOj9WXx1+85v5j08qxlwT0SzLXgS+m82p2SWYnYC+WZZNyrJsOPAh\nsFlREUoqqUsvhd13h9tui8GnTRt45hno1QsuusiKeZIk1QcvvhhV66+5ZtZzxxwDnTrBzjvDsGFR\nHVcqN8W0bzkmpTQ4pXRjSmmJqmMtgBHTXfNF1TFJ9cA330CPHrEcd5dd4libNnDOObFHZNVV841P\nkiRFIaFjjoH/+79oqzL9rOhLL0G/flFg6JhjotiQVI7mt1jRNUCPLMuylNI5wCXAocx+lnSO5fcq\np1uUXlFRQUVFxXyGI6k6774b1W9vuy2eoE7/5LRNG/j2WzjyyPzik+ZHoVCgUCjkHYYkldy118Ky\ny8I//xlV7Hv2hK5do8XaqafGcZfUqtzVqH1LSqkl0C/Lsg2qO5dSOg3Isiz7V9W5J4BuWZa9Npv7\nLBEv1YFPPok2LaecAvffH8no9AUNJk2KAe3ss6Fp0/zilIpl+5biOTZL+Rs9GtZbD55/HtZdF95+\nGzp0gI8/hqefhrPOgkGDHLNVHoruI5pSakUkm+tX/bxilmVfVb0+Edg0y7J9UkrrAr2AzYkluU8D\na85uVHOwk+rG6afDl19GUYOmTWHwYLCEmBoiE9HiOTZL+TvwQFhuuajbMFXnzrGF5qab4JJLokiR\nVA6K6iOaUuoNVADLpJQ+B7oB26SUNgKmAMOBIwCyLHs/pXQ38D4wETjaEU3Kz6+/wi23xFPVZZaB\nMWNMQiVVr7Ky0u0yUg4GDYqaDYMHx9f0zj4bNt0UttwSOnbMJz5pXtRk+0yNZkRrg09dpdp3xx2R\niD77bN6RSLXPGdHiOTZLde+DD+Ckk2Ll0imnwOGHz76C/VlnRdX7jTaq+xil+VX00tza4GAnVW/Y\nMFh77Zpf/+qr8NBDcP75Uczg3HPhyivhvvviCarU0JmIFs+xWapbU6bAZptFJftTT4WFF847Iqm0\nTESlMvPRR5GEfvcdLL54ze7p3BkefRS++gpeew1OOAH694eVV67dWKX6wkS0eI7NUt264w64+mp4\n5RW3zqhhKmqPqKS6d/318ZT0yy9rloh+8QU89xxss03MgD7yCPzjHyahkiTVVz//DGecAXfdZRKq\nxqlJ3gFImtGECXDrrdCqFYwaVbN7broJunSBI46Ayy+H//wH9t67NqOUJEk1MWkS7LYb3HnnjMcv\nuSQq4W6xRT5xSXlzRlSqZ/r0gQ03hOWXr1ki+vTTsRe0f39o3RoOPhj22QcWXbT2Y5UkSdW78cZY\nuXTOOVHF/oorYuvNZZdFgSKpsTIRleqJqQWGrrgCHngAHnxw7onorbdGFb2+fSN5Bbj2WmjbttbD\nlSSpUciy+V86+9130K0bPPkkrL46HHkkbL45/O53cOih8V1qrFyaK9UTjz0GvXvDm29Cu3aw0krV\nJ6JZBhdcEPdsu+204126QMuWtR+vJEkN3VNPwfrrR92G+dGjB/zlL9FyZbHFYnnuscfCxx/H/lCp\nMXNGVMrZ1CetPXvCySdPKzC00krRkmVm/frFuZ9+gqZNbc0iSVJt+O47OOQQ+OWXGI/ndS/n0KGR\neL7//rRjKcFhh8WX1NiZiEo56ts3ZjVvvhlefjkq5001uxnRiROjINHkybDWWrHEx0p7kiSV3jHH\nRJGhpZaKivTzmoh27RqznsstVzvxSeXOpblSji6/HJZZJpbi7rsvLLLItHOzS0T79YM11oCrroIh\nQ2C//eo2XkmSGoO77oqtMhdcALvvHonovLTYfeyxWH57zDG1F6NU7pwRlXIyeDCMHAmffhoFinbf\nfcbzv/1tJKLTF0no2TNmQf/613hK28z/B0uSVFJffAHHHRc9uRdZJPaILrBAJKabbFL9vb/8EmP1\neefBbbfBggvWTcxSOXJGVMrJddfFHpFmzWL5zswFhhZZBBZaCMaOjZ+feiqS16kJq0moJEmllWWx\nL/Too2HTTeNYStNmRefk11+jav0aa0ChEK3VOnask5ClsuWvslIdeOwx+P3vI9mcPBkuuigGtMGD\nq79v6vLcq66KxLVv30hOJUlS6V17LYwZM2tF286dYzvMuefOWpvhp59ipvR3v4P774fNNqu7eKVy\nZiIq1bJff4WDDoI994Qrr4TKSnj22WhivdJK1d+70kpx3aWXwrBhsPzydRKyJEmNyg8/xFLa7t3h\nxRdjKe70Nt0Uxo+H996D9dab8dxll0Ui2rt33cUrNQQuzZVq2YMPRkGiu++GcePg+uvhlltg1VXn\nfu9KK8U+k732MgmVJKnUhg2Lvp6tWsELL8QKptatZ70upZgVnXl57rffRiLao0edhCs1KCaiUi3r\n2TNmQVdbDY46KooerLVWze5daSX44INo2SJJkkrj9ddhxx1hq61giSXg7bfjgXF1y2p33z2W3k7v\ngguigOAaa9RuvFJD5NJcqRY99VQ0sv7LX+Drr+Op6z331Pz+Fi1iUNx449qLUZKkxmTMGOjUCbp1\ni1VLzZvX7L4ttoDRo+GjjyLx/OKL6AP+zju1G6/UUDkjKtWSHj1ib2ivXlG+fa+9ooJep041f499\n94U+fWovRkmaWWVlJYVCIe8wpFpz0kkxu3nEETVPQgGaNo3WaVOX5/boAYceOvd6D1JjVCgUqKys\nrPaalM1Ld94SSilleX22VNtGjoQNNoChQ93bKdWVlBJZlqW5X6k5cWxWQ9e/f7RnefddWGyx+bv/\njDPiIfMWW8Qe06WXLn2cUkNR3djsjKhUQu+8Ez3IbrwR9t7bJFSSpPpi3Dg4/PCo3TA/SSjA1lvD\nxx9HH/ATTzQJlYphIiqVyLvvxixo9+6RiFpgSJKkuvHYY1GLoTpnnQXt2sU2mfm1wALw5z/Hiqfj\nj5//95Hk0lxpng0bFknn7rvPePzYY2HiRHjmmZgJfemlfOKTGiuX5hbPsVnlqFCIvZsLLggXXxz1\nFdJM/xK89lrUaHj3XVh22eI+b9gwGDUKttmmuPeRGoPqxmYTUWke/e1vUQl30KBpx8aNi76ggwfH\nQDhuXLRrkVR3TESL59iscvPDD7DhhnD11fEQ+JBD4Le/heuug5Yt45pff4VNNom9nXvvnW+8UmPj\nHlGpRL75Bh59NHp7jhs37fhtt8GWW8Iqq8AKK5iESpJUF048EbbfHnbaCf74Rxg4MHqDbrIJXHEF\nTJ4cvT5btoQuXfKOVtL0nBGV5sHFF8eynmHDYmDbcks488xIRB9+OAZBSflwRrR4js0qJw8/DCec\nAG+9NWvxoWHDoqDQ+PEwfDi8+WY8LJZUt1yaK5XARx/BtttC375w992w4oqw+upw7rnw5JNWyJXy\nZiJaPMdmlYv//jeW5N51F7RvP/trpkyBm26CZZaBzp3rNj5JwURUKtITT8B++8HZZ0dRorvuioT0\nxx+jmbXLfaT8mYgWz7FZ5SDLYI89YhvMRRflHY2k6piISkXIsthr0r077LprHPvsM1hvPVhkEfj8\nc1hooXxjlGQiWgqOzSoHd94Z22MGDoTmzfOORlJ1qhubm9V1MFK5ePttaNECPvkExo6FnXeedm7V\nVWHRReGAA0xCJUmqKyNGQNeusSXGJFQqbyai0mxMnhz9xpZYAtZcE444AppMV2M6Jfj3v6GiIrcQ\nJUlqVKZMgYMPhuOPh403zjsaScWyfYs0G089BUsvDX/6Ezz0EBx00KzXdOkSBYskSVLtyjK47LKo\nzXDqqXlHI6kU3CMqzUanTrEf9JBDolrummvmHZGkuXGPaPEcm1Xf/PJLFAe8/HL4+Wfo1w/WWivv\nqCTVVHVjszOi0kyGDIEXXogZz5RMQiVJmpOJE6OY3/ffl/Z9v/wyKtW3ahWJ6LnnxvhsEio1HCai\natTGjIFttomG1wC9e8NWW0U5+EUXzTc2SZLqsyyDo4+GSy+FM88szXu+/jrsuy+su270Cn3uuWih\nttNOM9ZqkFT+/L+0GrXbb4dCIZb6fPttDKj9+8eSXEmSNGf//je89lpUmb/3XhgwoLj3O/XU6A+6\n4YZRsf7aa2GddUoTq6T6xz2iarSyLAa4LbeMp65bbQVvvRXJqaTy4x7R4jk2q6b69YuK8q+8Ai1b\nQq9esZpo4EBoNh89Gd54I2Y933sPll229PFKyod7RKXZeP75GCwvvTRmRa+8Eo48Mu+oJEmq3956\nK9qo3H9/JKEA++wDyy0XRYXm1eTJMf5ecIFJqNSYmIiqUXr77ViGe+yxsPjisOOO8b1t27wjkySp\n/vrqK/jzn+PhbZs2046nFEtpzz8fPvts3t6zZ09YZBE48MCShiqpnnNprhqdt9+GbbeFSy6B/faL\nwXPYsChcZCIqlS+X5hbPsVnVGT8+Cvx17Ajdus3+mnPPjeW6/frF+Do3o0bFntDnn48CRZIalurG\nZhNRNSjdukWhg/XXn/M1hx8eS4n+7//qLi5Jtc9EtHiOzZqTLIO9947ksnfvOSeZv/4KG20E//wn\n7L773N+3SxdYbTU477zSxiupfqhubJ6P7eRS/TR6dAxkyy47ayI6eDC8+CLsvz/ccw+8/34+MUqS\nVI66d4fhw6OdSnUznQsuCNddF0nrdtvBEkvM+donn4xKuzffXPJwJZUB94iqwbjlFmjeHIYOnfXc\nOedEWfidd46B8be/rfv4JEkqR336wK23woMPwsILz/369u1j+W51vUXHj4djjoGrror9oZIaHxNR\nNQhTpsQT2NNPnzURHTUKnn02SsN/910UKJIkSXP36qtw/PHw8MOw4oo1v+9f/6q+t+h558HGG0fL\nFkmNk3tEVfYmTYq9oU89BffdF1X8Ro2adv6cc2DkyKjKJ6nhco9o8RybNb3PPosiftdfD7vsMu/3\nz6m36NCh0cP7rbegRYvSxSup/rGPqBqsLIunqQMGxJKhlVeGH36A77+P8+++C9dcE023JUlSzfz4\nI+y6K5x88vwloTD73qJZBkcdBWefbRIqNXYWK1JZe/VV+PTTaL/SpOqxytprx9PWUaOiQu6FF8by\nH0mSNHfjxkUS2bYtnHDC/L/P1N6ibdpERfuWLeHOO+OB8dFHly5eSeXJGVGVncmT4YYbYOLEWG57\n5JHTklCA1q1hyJBoz9K3Lxx0UH6xSlJ9kVL6XUrpxpTS3XnHovpnwoTYB7r33jFTudhiUUioJr1A\nq7PGGnDiiVGYaMwYOOWUGLubORUiNXpz3SOaUroJ2AUYnWXZBlXHlgLuAloCw4E9syz7vurcFUBH\nYBxwYJZlg+fwvu5D0Xzp1w86dYLOnaF/f/joo2jZMtU558Bjj8HYsfDee8UPopLKg3tEayaldHeW\nZXvO4ZxjcyMyeXK0Y+nTJ7a3rLde9PXcY49YUlsqU3uLNm8O7drBlVeW7r0l1W/F7hG9Begw07HT\ngP5Zlq0NPAucXvVBHYHVsyxbEzgCsDyMSq5nz9j3+c03kZBOn4RCzIi+8krMlJqESmqoUko3pZRG\np5Tenun4jimloSmlD1JKp+YVn+qnKVPg5ZejgnyLFnDaabDuulE46PnnY/9mKZNQiN6i118fLVvO\nOae07y2pfNWoam5KqSXQb7oZ0aHA1lmWjU4prQg8l2XZOimlnlWv76q6bghQkWXZ6Nm8p09dNc+G\nD4c//hFGjIAFFoinuQstNOM1Q4bAJpvAF1/AUkvlEqakHDS2GdGU0pbAT8Dt043PTYAPgG2BUcDr\nQJcsy4ZOd989WZb9dQ7v6djcAGVZJJp9+sSWld/8JpbgdukCa65Zt3H4gFhqXGqjau7yU5PLLMu+\nApavOt4CGDHddV9UHZPmy5Qp015Pngz//Cfst1801G7WbNYkFGJG9L33TEIlNWxZlr0IfDfT4c2A\nD7Ms+yzLsolAX6ATQEpp6ZTStcBGzpQ2Hg88EDOeu+0W9RT69Ysx8qyz6jYJBZNQSTMq9Vbx2f0T\nM8dHq5WVlf97XVFRQUVFRYnDUTm76qpoy3L77fDdd1FGfsEF42ludVKC3/2ubmKUlJ9CoUChUMg7\njPpm5gfCI4nklCzLxgBHze0NHJsbjjffjOrxd98NFRUmgpJq37yMzfO7NPd/S27nsjT3f0t4Z/Oe\nLv/RHE2ZEm1YRo2Kr5494Y03IgltYq1nSbPR2JbmwmzH5z2AHbIsO7zq532BTbMsO76G7+fY3EB8\n+21sZbnwQvjrbBdiS1LtK8XS3MSMs50PAwdWvT4QeGi64/tXfWgbYOzsklBpbp59NvawbL893Htv\nFDk46SSTUEmai5HAqtP9vDKxV1SNyOTJ8Le/we67m4RKqr/mujQ3pdQbqACWSSl9DnQDLgDuSSkd\nDHwO/BUgy7LHUko7pZQ+Itq32MFR82Vqf9Bll43eYy1awKab5h2VJNU7Mz8ofh1Yo2qm9EugC7B3\nHoEpPz16wC+/wAUX5B2JJM1ZjZbm1soHu/xHszFhApxxBtxzD7z7buwJXWEFuOii2OciSXPS2Jbm\nTv+gGBgNdMuy7JaqVmqXEauebsqyrMbpiGNz+XvkkWjBMnBgjJ+SlKfqxuZSFyuSinLssfDllzBo\nECy+eBx79tlosi1JmibLsn3mcPxx4PH5fd/KykqLFJWpjz6Cgw+GBx80CZWUr5oULXJGVPXGd99F\ntdsPPoDll5/79ZI0vcY2I1obHJvL188/Q9u2sXromGPyjkaSgjOiqtdOPRXat4dPPoGOHU1CJUma\nF1kGRxwBG2wARx+ddzSSVDPOiKrOTJgACy0047GRI2H99WGBBeKrV6/odSZJ88oZ0eI5Npenq6+O\n6vKvvAKLLJJ3NJI0TSnat0hFee89WHVVmDhxxuM33gj77gv33RdLirbeOp/4JEkqRy+/DN27xzhq\nEiqpnJiIqk5cdx18/XVUwp1q0qRIRI84Ipbm3nsvJOcyJEllaMQI2G03uOKK2K9ZF0aPhr32gptv\nhjXWqJvPlKRSMRFVrRs3LpbcbrcdvPpqHJswAU46CVZbzYq4klSfVFZWzrXSoWb04YfxQHXtteG5\n52JsO/98+P772vvMSZMiCT3oINhll9r7HEmaH4VCgcrKymqvcY+oat3NN8MDD8Cf/wwvvgi33BID\n9nLLwQ03xHdJKpZ7RIvn2Dzv3nkHdtwRKivhsMPi2HvvwQUXwOOPw5FHwvHHl36sO+mkWGX06KPQ\ntGlp31uSSsU9ospFlkXxhFNOgZNPhjZtYkb0uefghx8iOTUJlSSVq1dfjdU+l1wyLQkF+P3v4Y47\nYMAA+OabmCk98cQo0FcK99wTe0J79TIJlVS+TERVax58EC6+GF54AbbaCtZdF778Es47D446yv2g\nkqTy9eyzsOuuseqnS5fZX7PaatCzZ8xcNmkS7VUOPxw++mj+P3fIkGjRct99sMwy8/8+kpQ3E1HV\nmmuuiUp+66wTPzdtCptuCq+9FpVyJUkqRw8/HMnnPffAzjvP/fqVVopZ0w8+gBVXjBVC++wTy3rn\nxQ8/REGkCy+EP/xh/mKXpPrCRFQlddddcOihMHQovPUWdO484/lttoEDDoDFF88nPkmSitGrV8xq\nPvrovPe9XnZZ6NEDPvkENtoIdtgBOnWKB7Rzk2VRmGjrreO7JJU7ixWpZLIMNt4Yxo+Pp7b77w//\n+teM10yeHN/d0yKp1CxWVLyUUtatWzcqKiqomNcsqxG49lo491x48snYB1qs8eNjae+FF8Kaa8IZ\nZ8QD29ltXbnoopiBfeEFWGih4j9bkmpToVCgUCjQvXv3OY7NJqIqmddeg7/9DQYNgr//PZ76tmyZ\nd1SSGgsT0eI5Ns/ZBRdEAb7+/WPvZylNnAi9e0fLl6WWioR0l12mJaTPPhtLeQcMgFVXLe1nS1Jt\nqm5sNhFVyRx0UBQkOvnkvCOR1BiZiBbPsXlWWQannw79+sFTT0GLFrX3WZMnR0X5886LPqFnnBH7\nSdu2hTvvhG23rb3PlqTaYCKqkhswIJYl/eY3MUjffHO0aRk61JYskvJhIlo8x+YZTZkSK3wGDIAn\nnog9nnUhy+Lzzj03PrtHDzjttLr5bEkqJRNRldT48fFEuLISjjsOzjorKgj27l2aPTOSND9MRIvn\n2DzNxImx0mfEiJgNzavI3pAh0Lq1Lc8klScTUZXU7bfDqafGPpXnnoNVVoE333Q/qKR8mYgWz7E5\n/PIL7LVXJKP33guLLJJ3RJJUnqobm23fIqZMia+a6tkTrr4ahg+PZUNt25qESpIahp9+it6gzZvD\ngw+ahEpSbWmWdwDK33nnwXffRbPtuXnhhVim9Oc/Q6EQ9/brV+shSpJU68aMgZ12gvXXj4euthqT\npNrjjGgjN3EiXHMNDBs292svvxw6d4arroJmzeDAA2GDDaBjx1oPU5JURyorKykUCnmHUee++goq\nKmDLLaNNi0moJM2/QqFAZWVltde4R7SRe+ABOOqoqAT47rtzvu6TT2DzzeH116FVq2nHs8wCCpLq\nB/eIFq+xjs2ffQbbbQf77w9nnum4Jkml4h5RzVHPnlH1dvjwSCpn9v338f2GG2KAnj4JBQdrSVJ5\nGzoU2reHY4+N8dBxTZLqholoIzVuXMyEfvwxHHIILLBA7I2Z3htvwPLLw0MPRZ/Qww/PJ1ZJkmrD\noEGwzTbRp/O44/KORpIaFxPRRuqww+DbbyPZbN48ZjqHD5/xmp494S9/gX33hfXWg7XXziNSSZJK\n76WXYMcdowr8gQfmHY0kNT5WzW2EvvoKHn88Es8llohjLVvGHplNNomfv/8+eqcNGQL/+Eckq5Ik\nNQRPPhkPWXv1gh12yDsaSWqcTEQbkeOOg112gYEDYY89piWhMOuM6B13wPbbw4orxpckSQ3BfffB\n0UdHj9B27fKORpIaLxPRRmLYsHjy26cPNGkCjz024/lWraIy7pQpcNllcP758OijuYQqSVKtuPVW\nOOMMeOIJ2HjjvKORpMbNRLSRuP76KDb0pz/B7bdPW4I7VcuW8Nxzkajecgu89hqstlo+sUqS8lNZ\nWcJQVtoAABRxSURBVElFRQUVFRV5h1JSV1wBF18Mzz4LrVvnHY0kNWyFQmGuPantI9oIjB8Pq65a\nfXI5aFAUa1hsMTjppChSJEnlxD6ixWuIY3OWwTnnxEPY/v3jwaskqW5UNzabiDYwU6bAu+/CBhvE\nzz//DMcfD6NGVb/U9rvvolXLCivEXtFmzpVLKjMmosVraGNzlsHJJ8NTT8WXNQ8kqW5VNzbbvqWB\neewx+OMfoyfopEmwxRbRM7RXr+rvW3JJWHhhOPRQk1BJUvmbPDm2pLz0EhQKJqGSVN+YcjQwPXvG\n8tp7743ZzYUXht69535fSjFgH3547ccoSVJt+vVX2G8/+OYbePppWHTRvCOSJM3MpbkNyNQ+oFde\nGQnpIovA3nvD/vvnHZkk1T6X5havnMfmzz6D//wHXngBnnkG1lsP7rrLPtiSlCf3iDYSXbvGHtF/\n/QtWWilmOUeMiFlRSWroTESLVy5jc5bBkCGRdE5NPidMgK22gvbt4/sGG0S7MklSfqobm12a2wCM\nGweHHRaVb598EhZaCPbZJ2ZETUIlSeVu0iQYPHha4vnii7ENpX37aEvWrRusuWY8gJUklQdnRBuA\nCy+MQgz33hvJJ8Sg3aSJT4MlNR7OiBavvozNv/wCAwZMSzxffRVWWWXabGf79rDyynlHKUmaG5fm\nNkCTJ8f3lOIpcO/esPnm+cYkSXkyES1eXmPzDz/Ayy9PSzwHDYJ1152WeLZrB8suW+dhSZKK5NLc\nBujss6MYwymnwOKLw2ab5R2RJEk18/XXsbx26v7OYcOi9dhWW8X41ratlW4lqaEzEa3nXn0VNt44\n9n1ONWEC3HBDPCHec0+4+mr3xUiSSqOyspKK/2/vzoPsrqoEjn8PAQQjgyBLSgKMIEKUgiBmIVMw\nPeWAAYulGEIhICSUEDREkbKKpSRkqijFBRVHIQgBMhJkEcKiIAGxUQfDIjshLAUxMAMJEEQWgyQ5\n88fvhe5OujtJv+X3Xr/vp6or3b/3e/1Obm769nn33Hs7Oujo6KjZ9/zLX3puLPTSS8U51/vtBz/+\ncZGEdh/nJEmtrbOzk87Ozn7vsTS3ib3xBmy3HcyeDYce2nX9F7+AmTOLjYkuuggmTYKhQ8uLU5Ka\ngaW51avF2JwJCxb0TDyXLeu5vnOPPWDIkBoFLUlqWpbmtqjZs4vBe968nonojBkwdWoxiJ9ySnnx\nSZK0fDk88kjPHW2HDi0Szo4OOPts+MQnrNyRJPXkjGiTyoQ994QDDyx2Dvzd74oZ0qlT4cEHi40c\nNtqo7CglqXk4I1q9dRmbly2D++/vmu3805+KHWxXzXbuu2+xw60kSc6ItqDbbivWgp5+Ouy4Y/GO\n8/HHw4c/DPfeaxIqSWqMN98sdrRdlXg++CCMGFEkniefDFde6Y62kqT1ZyLahL71LbjgAvj5z2HL\nLYt3mm+7rfgFYNEi14NKkurnlVd67mi7YAHsvXeReH7zm8WOtpttVnaUkqRWZ2luk3nsMRg/vih7\n+uhHi2sTJ8Ldd8PBBxe7C0qS1mRpbvUiIv/pn/L9HW333RdGjXJHW0nSwNStNDciFgJvACuB9zJz\ndERsAVwD7AgsBI7MzDeqeZ128MYbsPnmcPHFcOKJXUkowNixMGsWTJ5cXnySpPawdKk72kqS6m+D\nKp+/EujIzL0yc3Tl2hnAnZm5K3AXcGaVrzHo/f73MGwY/OpXcNVV8KUv9Xx8/Phik6JPfaqc+CRJ\n7cMkVJLUCFWV5kbE88BnMvO1btcWAP+amYsjYhjQmZm79fJcS3MrvvCFYuC/4QbYf3+46aayI5Kk\n1mNpbvUcmyVJtdTf2FxtIvocsBRI4OLMvDQiXs/MLbrd81pmfqSX5zrYAUuWwK67wvPPw/z5xeZE\nu62RtkuS1sZEtHqOzZKkWqrn8S3jMvPliNgamBsRT1EkpVpHl10Ghx9eHMsyblzZ0UiSJElS/VWV\niGbmy5U/X4mIG4HRwOKI2LZbae6Svp4/ffr09z/v6Oigo6OjmnCa3ty5xdmgBx8MK1bAeecVu+De\neWfZkUlS6+ns7KSzs7PsMCRJ0gAMuDQ3Ij4IbJCZb0XEUGAu8J/AZ4GlmfmdiDgd2CIzz+jl+W1V\n/pNZnMOWCQ89BDNmwMyZMGdOcU6oJKk6luZWr93GZklSfdWrNHdbYE5EZOX7zM7MuRHxAHBtRJwA\nLAImVPEag8b99xdHtCxbVqwFvfBC+MEPTEIlSc1l+vTpbVGlJEmqn3WpWqpqs6JqtNu7riecUGxK\ntGQJPPooLFwITz0FG1R7gI4kCXBGtBbabWyWJNVXPTcr0jq4886iBPepp+DFF4uZ0O99zyRUkiRJ\nUnsyEa2zH/4Qzj8frrsOttkGtt4avv51mDSp7MgkSZIkqRyW5g7Q3/4Gv/xlUXLbl7//HbbfHu67\nD3baqXGxSVI7sjS3eq0+NkuSmkt/Y7PFoQN0xRVw2mnFLriru+OOYmOia6+FMWNMQiVJkiSpO0tz\nByCzOH7lzTdh8WIYNqzrsVdfLc4JHTWq2CF32rTy4pQkSZKkZuSM6AD84Q/Fn+PGwZNP9nxs1iw4\n4gjYeeciST3ooMbHJ0mSJEnNzDWi6+ntt+Gww4pZz8cfh732gi9/uXhs5UrYbbeibHfMGFi6tNic\nSJJUf64RrV6rjs2SpObkGtEaee65IvEcPhxOPLFIOrvPiF5/PWyyCeyzDwwZYhIqSZIkSb0xEV0P\n3/1uUXZ7+eWw6aZFIrpgQfHYWWfBqafCT34C4fvxkiRJktQnNytaiyVLipLboUPhmmvgiSe6Hhsx\nokhEH3gArroKHn7YWVBJkiRJWhvXiK7FhAnFOaDHHlsknddf3/XYihWw2WZwyCEwciSccUZ5cUpS\nu3ONaPVaZWyWJLWG/sZmE9F+vPQSfPKTxXmh06bB3Lmw//497xk5slgnumgRbLttOXFKkkxEa6EV\nxmZJUuvob2y2NLcfl10GRx4JZ58NBxwAo0evec9uuxUfJqGSJEmStG6cEe3DO+8Ua0BvvLHYKbcv\nDz4Im29enBsqSSqPM6LVa/axWZLUWjy+ZS0y4YtfhIULi68feQQ+/eliFrS/JBSK+0xCJUmSJGnd\nmYgC99wDV14Js2YVSenRR8M3vgGXXFJ2ZJIkSZI0+FiaCxx3HCxbVhy/cumlMHkyzJ/veaCS1Eos\nza1eM43NkqTW5665/XjttaK09tlnYezY4rzQSZPg1FPLjkyStD5MRKvXLGOzJGlwcI1oH15/HU48\nEQ47DLbaqijJffrpYoZUkqR2NH36dDo7O8sOQ5LUwjo7O5k+fXq/97TtjOjbb8Puu8Mhh8B558Gm\nmxbnhv72t3DssaWFJUkaIGdEq1f22CxJGlwsze3FzJlw881w002lhSBJqiET0eqVPTZLkgYXS3Mr\nli6FH/0IVq6EGTPg5JPLjkiSJEmS2s+GZQfQSJdcAmefXZTfvvpqcU6oJEmSJKmxBuWM6PnnwxVX\n9Ly2ciVcfDH8+tfw8sswZQoMGVJKeJIkSZLU1gbdGtF334Xtt4d99um5/vP22+HMM+HPf4bM4oxQ\nzwmVpMHDNaLVc42oJKmW+hubB11p7pw5sM02MG9eV8L517/CuefC5MkmoJIkSZJUtkFXmjtjBpxz\nDmy4ISxcCAsWwMiRsMceMHFi2dFJkiRJkgZNae577xWznldcAc8+C0cdBUccUZTk7rxzsUmRJGnw\nsjS3epbmSpJqqS1Kc487rjieZd482GgjGDMGbrsNbrkFnnmm7OgkSZIkSasMikR00SKYO7f4c+jQ\n4trYsXD66XDMMbDVVuXGJ0mSJEnq0tJrRM89F55/Hi69FI4+uisJBdh77+J4lpNPLi8+SZIkSdKa\nWnaN6KOPFke0DBsG77wDd9wBu+/e856nn4ZddnGXXElqB64RrZ5rRCVJtdTf2NyyieiUKcUxLZts\nAnffDbfeWsPgJEktx0S0eiaikqRaGnSJ6FtvwQ47wGOPwXbb1TgwSVJLMhGtnomoJKmW+hubm36N\naCa8/nrX18uXF0ex7LefSagkSZIktaKmT0RvuAH22ANWrIB//AM6OuDxx+HCC8uOTJIkSZI0EE1/\nfMtFF8ErrxTrQF99tdgJ9/bbYYOmT6ElSZIkSb1p6kT06aeLdaDTpsHs2cVRLVOmmIRKkiRJUitr\n6s2KTjsNNtoIpk6FESOKc0IXLYKNN25QkJKkluFmRdVzsyJJUi31NzY35YzosmVwxhlw/fXwxz/C\n8OEwahSMHWsSKkmSJEmtrikT0e9/H554Ah55BLbcsrh23XWw2WblxiVJkiRJql7TleYuXw477QS3\n3AJ77llCYJKklmRpbvUszZUk1VJLlOZOm1acF7r//sX5oCahkiRJkjQ4NcWM6DvvwPbbFx8LF8IF\nF8Dxx5cSliSpRTkjWj1nRCVJtdTf2NwUB6Fccw2MGwd33QXHHAMTJpQdkSRJkiSpXppiRnTMmKI0\n9/OfLyUUSdIg4Ixo9ZwRlSTVUtOuEX33XTjrrGJt6PjxZUYiSdLgFhEfBC4E3gXuzsyrSg5JktTG\n6laaGxHjI2JBRDwdEaf3ds+ECfDcc3DPPTBkSL0iGXw6OzvLDqGl2X4DZ9sNnG1XHduvJg4HrsvM\nycAhZQcjDYQ/C9TM7J/rpy6JaERsAPwE+BzwKeALEbHb6vfNmwdXXw1bbVWPKAYvO3l1bL+Bs+0G\nzrarju23poiYGRGLI+LR1a739UbwcOCFyucrGhaoVEP+LFAzs3+un3rNiI4GnsnMv2Tme8DVwKGr\n3zRxInzgA3WKQJKkwe1yijd837eWN4JfoEhGAQb9WtqyfiGsx+tW+z0H8vz1fc663F+rewYD+2f1\nz1+f563rvWu7r136JzTm71qvRHQ7ut51BXixcq2Hk06q06tLkjTIZeYfgddXu9zfG8FzgCMi4qfA\nLY2LtBz+ol/d801E68v+Wf3zTUTrqxF/17rsmhsRRwAHZOZJla+PBUZl5te63eO2fJKkmmq3XXMj\nYkfglszco/L1fwCfW238HZ2ZX13H7+fYLEmqqUbvmvsisEO3r4cD/7cuAUmSpAHrbWxd5+TSsVmS\n1Cj1Ks29H/h4ROwYERsDRwE31+m1JElSYa1vBEuS1Azqkohm5grgFGAu8ARwdWY+WY/XkiSpjQU9\nZ0F9I1iS1BLqskZUkiTVV0RcBXQAHwEWA+dk5uURcSDwI4o3m2dm5nnlRSlJUu/qVZrbr37OOFMv\nImJhRDwSEQ9FxH2Va1tExNyIeCoibo+IzcuOsxn0dq5ef20VET+OiGci4uGIGFlO1M2jj/Y7JyJe\njIgHKx/juz12ZqX9noyIA8qJujlExPCIuCsi5kfEYxHx1cp1+99a9NJ2UyvX7Xv9yMyjM/OjmfmB\nzNwhMy+vXL8tM3fNzF1MQiVJzarhiehazjhT71YCHZm5V2aOrlw7A7gzM3cF7gLOLC265rLGuXr0\n0VaVWYOdM3MXYDIwo5GBNqne2g/gB5n56crHbwAiYgRwJDACOBC4MCLaeaOT5cBpmflJYB9gSuVn\nm/1v7VZvu1O6jQv2vZJFxAcj4oqIuDgiji47Hqm7iPhYRFwaEdeWHYvUm4g4NCJ+FhFzImL/suNp\nJmXMiPZ3xpl6F6z5b3UoMKvy+SzgsIZG1KT6OFdv9bY6tNv1/648715g84jYthFxNqs+2g9634nz\nUIr138szcyHwDMX/77aUmS9n5sOVz98CnqTYKMb+txZ9tN2qs6fte+U7HLguMycDh5QdjNRdZj6f\nmV8qOw6pL5l5U+VIrUkUb6KqooxEdDvghW5fv0jXLxzqXQK3R8T9EbHqh+22mbkYil/igK1Li675\nbbNaW21Tub56X/xf7It9mVIpH720W2mp7deHiPhnYCQwjzX/r9r/+tGt7e6tXLLv1VhvJfiV630t\nmxlOV3uvaFigaksD6J9SQ1XRR78J/LQxUbaGMhLRqs44a1PjMvMzwEEUv5Tti21WC/bFdXMhRQnp\nSOBl4PzKdduvFxHxIeCXwNcqs3t9tYntt5pe2s6+Vx9rlOCvZdnMCxTJKPTe9lItrW//fP+2xoQn\nrX8fjYjzgFtXVf+oUEYi6hln66kyi0JmvgLcSFGCtnhVGV9EDAOWlBdh0+urrV4Etu92n32xF5n5\nSnZtr30JXSWQtt9qImJDikTq55l5U+Wy/W8d9NZ29r366KMEv79lM3OAIyLip8AtjYtU7Wh9+2dE\nbBkRFwEjnSlVIwygj04FPkvxc/Skhgbb5MpIRD3jbD1UNon4UOXzocABwGMUbTaxctvxwE29foP2\ntPq5et3baiJdbXUzcBxARIwF/rqqhLLN9Wi/SvK0yuHA45XPbwaOioiNI+JjwMeB+xoWZXO6DJif\nmRd0u2b/WzdrtJ19r6H6XDaTme9k5gmZOSUzf1FKdGp3/fXPpZn55cou0d8pJTqp/z76X5k5KjO/\nkpk/KyW6JrVho18wM1dExCnAXLrOOHuy0XG0kG2BORGRFP9eszNzbkQ8AFwbEScAi4AJZQbZLKLb\nuXoRsQg4BzgPuG71tsrMWyPioIh4FnibYhF5W+uj/f6tcrTISmAhxQ6vZOb8yi6F84H3gK90m71q\nOxHxL8AxwGMR8RBFqehZwHfo5f+q/a9LP213tH2vYSx3VjOzf6rZ2UcHoOGJKEBlC/5dy3jtVpOZ\nz1Ns3LH69aXAvzc+ouaWmX0dLdBrW2XmKXUMp+X00X6X93P/t4Fv1y+i1pGZ/wMM6eNh+18/+mm7\n3/TzHPtebblsRs3M/qlmZx8dgDJKcyVJUrlWX8Lgshk1E/unmp19tAZMRCVJaiOVEvx7gE9ExKKI\nmJSZK4CpFMtmnqA4p9VlM2o4+6eanX20dsJlNZIkSZKkRnJGVJIkSZLUUCaikiRJkqSGMhGVJEmS\nJDWUiagkSZIkqaFMRCVJkiRJDWUiKkmSJElqKBNRSZIkSVJDmYhKkiRJkhrKRFSSJEmS1FD/D0hH\nc2cixYPLAAAAAElFTkSuQmCC\n",
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.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 backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\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 * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.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.\n",
+ "mpl.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\n",
+ "mpl.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",
+ " */\n",
+ "function 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",
+ "\n",
+ "mpl.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 * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.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",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\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 + '\" width=\"' + width + '\">');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.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.\n",
+ "if (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/html": [
+ "<img src=\"data:image/png;base64,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\" width=\"800\">"
+ ],
"text/plain": [
- "<matplotlib.figure.Figure at 0x72df4c905710>"
+ "<IPython.core.display.HTML object>"
]
},
"metadata": {},
@@ -202,9 +2587,11 @@
" return [ sum((2**n + offx_lsb) if i&(2**n) else 0 for n in range(nbits)) for i in range(2**nbits) ]\n",
"\n",
"def plot_bitslide(data):\n",
- " fig, (axl, axr) = plt.subplots(1, 2, figsize=(16, 6))\n",
- " axl.plot(data)\n",
- " axr.plot(data)\n",
+ " fig, (axl, axr) = plt.subplots(1, 2, figsize=(8, 3))\n",
+ " apply_style(axl)\n",
+ " apply_style(axr)\n",
+ " axl.plot(data, color=color_dark)\n",
+ " axr.plot(data, color=color_dark)\n",
" axr.set_yscale('log')\n",
" axr.set_xscale('log')\n",
" axl.set_xlim((0, len(data)))\n",
@@ -215,10 +2602,817 @@
},
{
"cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.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 backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\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 * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.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.\n",
+ "mpl.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\n",
+ "mpl.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",
+ " */\n",
+ "function 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",
+ "\n",
+ "mpl.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 * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.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",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\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 + '\" width=\"' + width + '\">');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.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.\n",
+ "if (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/html": [
+ "<img src=\"data:image/png;base64,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\" width=\"600\">"
+ ],
+ "text/plain": [
+ "<IPython.core.display.HTML object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "def frob_export_for_blog(data, svgfile=None):\n",
+ " fig, ax = plt.subplots(1, 1, figsize=(6, 4))\n",
+ " apply_style(ax)\n",
+ " ax.plot(data, color=color_dark)\n",
+ " ax.set_yscale('log')\n",
+ " ax.set_xscale('log')\n",
+ " ax.set_xlim((0, len(data)))\n",
+ " if svgfile:\n",
+ " fig.savefig(svgfile)\n",
+ "\n",
+ "frob_export_for_blog(bitslide(8, 2.5), svgfile='/tmp/uncorrected_brightness_sim.svg')"
+ ]
+ },
+ {
+ "cell_type": "code",
"execution_count": 8,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -242,9 +3436,7 @@
{
"cell_type": "code",
"execution_count": 9,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -269,9 +3461,7 @@
{
"cell_type": "code",
"execution_count": 10,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -296,9 +3486,7 @@
{
"cell_type": "code",
"execution_count": 28,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
@@ -324,16 +3512,793 @@
},
{
"cell_type": "code",
- "execution_count": 52,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 19,
+ "metadata": {},
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5UAAAF2CAYAAAD+57zWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeYlNXZx/HvsWBLNMZo7L4m0RgrICCxrt3YsPeGhVhi\nTeyF0Ri72LDGEgELgqhYEEEYkd4RUWxBBXuMQZEO5/3jkEQI7M6ys/vM7Hw/17WXyzLM/oLEw/2c\n+9wnxBiRJEmSJGlpLJN1AEmSJElS+bKolCRJkiQtNYtKSZIkSdJSs6iUJEmSJC01i0pJkiRJ0lKz\nqJQkSZIkLTWLSkmSJEnSUrOolCRJkiQttYKKyhDCuSGE8Qs+zqnvUJIkaclCCBuHEB4MITyVdRZJ\nkmosKkMIWwCnAC2ApsABIYRf1ncwSZK0eDHGSTHGU7POIUkSFLZT+RtgaIxxVoxxHvAacHD9xpIk\nqXKEEB4KIXwRQnhjka/vE0KYGEJ4N4RwcVb5JEmqTiFF5ZvAziGE1UMIKwP7AhvUbyxJkirKI8De\nP/xCCGEZoOOCr28BHB1C2GyRXxcaJp4kSUtWY1EZY5wI3Aj0BV4CxgJz6zmXJEkVI8Y4EPhmkS+3\nAt6LMX4UY5wDPAm0AQgh/DSEcC/Q1B1MSVLWlivkRTHGR0hPUQkh/AWYvOhrQgixuNEkSZUsxljp\nu3DrsfB6O4VUaBJj/CdwRk1v4NosSSqmJa3NhU5/XXPBPzcknad8YgnfxI+l+Gjfvn3mGcr1w987\nf+/8/Su/j0J+7wQsvrW11r85Wf/7ro8/H6X2fZb2vWr76wp9fSGvq+41S/tzpfrRkJn9c7Xk1/jn\nKvvvVZf3ad++fbVrTaH3VD4dQngTeA44M8Y4tbaLmiRJqpUpwIY/+PH6wKcZZWkwVVVVZfd9lva9\navvrCn19Ia+r7jUN9e+goTTk/x7/XC35Nf65yv571eV9avq1hba/7rzUCSRJUiECC+9OjgB+FULY\nCPgMOAo4OotgDcmisu6v9y//CyvHv/zX5b38c9UwyvHPVX0WlYXuVKoeNbb/kzUkf++Wnr93dePv\n39Lz9+5/hRAeBwYDm4YQPg4htI3pGq+zgVeACcCTMca3s8wp+f9f1Qf/XJW/EGNxzq6EEGKx3kuS\nVNlCCEQH9dRZCCG2b9+eqqoq/9ImSVoq+XyefD7P1VdfvcS12aJSklRyLCqLw7VZklQs1a3Ntr9K\nkiRJkpbonXeq/3mLSkmSJEnSYj3xBOy4Y/WvsaiUJEmSJC1k9mw491y44gro06f611pUSpLUiOVy\nOfL5fNYxJEll5KuvYJddYNIkuP32PM8+m6v29Q7qkSSVHAf1FIdrsySptoYNgyOPhOOOg2uugWUW\nbENWtzYv15ABJUmSJEmlJ0a47z5o3x4eeAAOOqjwX2tRKUmSJEkV7PvvoV07mDABBg2CTTap3a/3\nTKUkSZIkVah+/WDTTaFJExgypPYFJbhTKUmSJEkVZ/58uO46uOce6NQJ9thj6d/LolKSJEmSKsiX\nX8IJJ8C0aTByJKy7bt3ez/ZXSZIaMa8UkST90Jgx0KIFNG8O+XzNBWU+nyeXy1X7Gq8UkSSVHK8U\nKQ7XZknSD/XoAaefDh07whFH1O7XeqWIJEmSJFWouXPh0kuha1d46aW0U1lMFpWSpJIxaxbcf3/W\nKSRJajw+/zztSq60Ump9XWON4n8Pz1RKkkrC55/D9ttD375ZJ5Ekqfx98QUcfjhsuy3stlvaoayP\nghIsKiVJJeDll6FpUzj4YHjuuazTSJJU3gYOTIN4hg+Hhx6CXA6WXbb+vp/tr5KkzMybB1deCY88\nAt27w447Zp1IkqTyFSPceivccgs8/DDsu2/DfF+LSklSJj7/HE49Fb7/HsaNg7XWyjpR45TL5aiq\nqqKqqirrKJKkevT113DiifDVV2mHcsMNi/O++Xy+xqupvFJEktTgvvgC9tgD9tkHrr0WVlhh4Z/3\nSpHicG2WpMowcWLalTzkELj+elh++eJ/j+rWZs9USpIa1KBBsM02cNhhcNNN/1tQSpKkwvXqBVVV\ncPnlqe21PgrKmtj+KklqEDGmp6e33QadO6ddSkmStHTmzUvdPvffn/1cAotKSVK9+8c/4OST0znK\nsWNhvfWyTiRJUvn66qt0fnLGDBg5EtZdN9s8tr9KkurVyJGwww6w6abw+usWlJIk1cXQodCiBWy1\nFbzySvYFJbhTKUmqRwMGpLOTd9wBRx+ddRpJksrX9Olw1VXQpQvcc08aylMqLColSUUXI9x8M3To\nAI89BnvumXUiSZLK1zvvQJs20LQpjB8Pa66ZdaKFWVRKkorqX/9K5zw++ghGjbLdVZKkunj8cTj3\nXLjhBjjllKzTLF5BZypDCOeHEN4MIbwRQngshNCkvoNJksrPsGHQqlW6cHn4cAvKUpDL5Wq8tFqS\nVHpmzYKzz4YrroB+/bIrKPP5PLlcrtrXhJouRQ4hrAsMBDaLMc4OIXQFXowxdlrkdV6wLEkVKkZ4\n5BG45BK491449NC6vV91FyyrcK7NklSePvkkzSRYe214+GFYffWsE1W/Nhc6/XVZYJUQwnLAysCn\nxQonSSpvMaZ7sm69Ffr2rXtBKUlSJevXD5o3hwMOgKefLo2CsiY1nqmMMX4aQrgV+BiYDrwSY+xb\n78kkSSVv+nQ44QR4913o06c0xppLklSuOneG889P5yj32ivrNIWrsagMIfwEaANsBEwFuocQjokx\nPr7oa3/Ya1tVVUVVVVXRgkqSSsv48emakG23TXdRNqnDaft8Pu+5P0lSxZo9Gy6+GF58Me1Ubr11\n1olqp5AzlYcBe8cYT1vw4+OB7WKMf1jkdZ7bkKQK8be/wUUXwS23wPHHQyjy6UfPVBaHa7Mklb7P\nPkvXhayzTjo/ucYaWSdavLqeqfwYaB1CWDGEEIDdgbeLGVCSVB5mzPjvWPM+fVLra7ELSkmSKkXf\nvun8ZJs28OyzpVtQ1qSQM5XDQwjdgTHAnAX/fKC+g0mSSs8ZZ8A//wmDBpXvwidJUpbGj4cVVoDn\nnoMOHdL5yV13zTpV3dTY/lrwG9liI0mNVozQqRNceilMnAirrlq/38/21+JwbZak0hEj3HVX6viB\ndK9zt27pbudyUN3aXONOpSSpss2alc5P9umTBgjUd0EpSVJj8+23cOqp8P77abjd4MFw+umw/PJZ\nJysOi0pJ0hJNnpzOeWy0EQwcCD/9adaJJEkqL2++CYccArvtlorJFVdMk9Mbk0IG9UiSKtALL6Th\nAUcfDT16WFCWq1wu53UtkpSBGOGee6CqCq68Eu67LxWU5Safzy90deTieKZSkrSQGOGKK9JY82ef\nhe22a/gMnqksDtdmScrGtGlwyinw3nvwxBPw619nnaju6nqliCSpQsycCeefDy+/DG+8kU1BKUlS\nOXvjjTSEZ5VV0rT0xlBQ1sQzlZIkAD7/HA4/PLW5vvwyrLlm1okkSSov48bBHnvAzTfDiSdWzl3O\n7lRKksjnYZtt0j1ZzzxjQSlJUm3ECLffngrKu+6Ck06qnIIS3KmUpIoWI+RycP/98NhjaTGUJEmF\n+/77dD3IW2/B8OGw8cZZJ2p4FpWSVKG++QaOPx6++iqd/1hrrawTSZJUXt54Aw47DLbfHl5/HVZe\nOetE2bD9VZIq0OTJsN9+6f7J11+3oJQkqbaeeAJ23x3at4e//a1yC0pwp1KSKs7Agemp6llnweWX\nwzI+XpQkqWDTp6d21+HD4ZVXoFmzrBNlz79KSFKFiBH+8pc04fXhh9NFzBaUkiQV7u9/T62uAKNH\nW1D+mzuVklQBvvkGjjwSpk6FUaNg3XWzTiRJUvn47jvo1Amuvhquuip1+1TSdNea+Ixakhq5ESOg\nZUvYYot0CbMFpSRJhRs5Epo3hx49oFcv+MMfLCgX5U6lJDVigwfDIYekO7MOPzzrNJIklZfbboPr\nr4eOHeGII7JOU7osKiWpEYoR7r4brr0WHngADjww60SSJJWPqVPhjDNg3Li0U7nhhlknKm0WlZLU\nyEyblu6fnDQp7VT+4hdZJ1KWcrkcVVVVVFVVZR1FksrChAlw0EGwxx7pCEklXxUCkM/nyefz1b4m\nxBiL8s1CCLFY7yVJWjpjxqQ21113hXvugeWXzzrR0gkhEGP0xEoduTZLUu089BBcfDF06AAnnJB1\nmtJS3drsTqUklbkY0/CAsWPhvvtS26vnPiRJKtzUqWkAz6hRMGAAbL551onKi0WlJJWxWbPgtNPS\nmY8994T+/WHLLbNOJUlS+Xj3XTj00HT/5IgRsMoqWScqPxaVklSm3n8f2rRJV4UMGeKZD0mSaqtr\nVzj7bGjfHs4806tClpZFpSSVoccfh3PPTdNd27VzEZQkqbbOOgv69k13T267bdZpyptFpSSVkdmz\n4bLLoHv3tBBus03WiSRJKi+zZ6dhPH36wOjR8KMfZZ2o/FlUSlKZmDkTTjkF/vnPdOZjzTWzTiRJ\nUnmZNAmOPRbWWAOGDrWgLJZlsg4gSarZlCmw3XapsHz6aQtKSZJq69VX01p62GHw3HPw059mnajx\nsKiUpBL3/PPQvHl6stq9uwN5JEmqjfnz4Zpr4Pjj4ckn4YILYBmroKKy/VWSStTcuen8ZJcu0LMn\ntG6ddSJJksrLlClw4okwZw6MHAnrrpt1osbJGl2SStCnn8L++6f7J8eNs6CUJKm2hg2DHXaAXXaB\nfv0sKOtTjUVlCGHTEMKYEMLoBf+cGkI4pyHCSVIlmjw5LYAtWsALL3h+UpKk2ogR7roLDjgAbr0V\nrroKlrM/s17V+NsbY3wXaAYQQlgGmAI8U8+5JKki9e4Nxx0Hl16aznxIkqTCff01nHRS6vgZMgR+\n+cusE1WG2tbsewAfxBgn10cYSapU8+bB5ZfDo4/Cs8+mdh1JklS4t96Co46Cqqo0Kb1Jk6wTVY7a\nnqk8EniiPoJIUqX65BPYa690X9b48RaUkiQVIkYYNCgN4XnyyXR05A9/gDvusKBsaAXvVIYQlgcO\nBC5Z0mtyudx/Pq+qqqKqqqoO0SSp8Xv99TTivG3btFNZqWc+8vk8+Xw+6xiSpDIxdSqcdhp065au\n3fr2W3jlFWjWLOtklSnEGAt7YQgHAmfGGPdZws/HQt9LkpQWv+OPh7/+FQ48MOs0pSWEQIwxZJ2j\n3Lk2S2qMRo6Eo4+GPfdM5ye7dYP27eFHP8o6WeNW3dpcm2fiR2PrqyTVWYxw7bVwzz1pIdx556wT\nSZJUHjp0gBtugI4d4Ygj0tdatco2kwosKkMIK5GG9LSr3ziS1Lh9/TWccAJ8+SWMGQNrr511IkmS\nSt+//pXaXSdMgNGjYf31s06kHypoUE+McUaMcc0Y43f1HUiSGqtBg9LT1M02g8GDLSjVMHK5nOdV\nJZW1kSNh223h5z9PD2QtKBtWPp9faHbO4hR8prImntuQpMWLMZ2bvOKK9M82bbJOVPo8U1kcrs2S\nytn8+XDddXDnnXD33XD44VknqmzFOlMpSVoKnTrB7bdD//6wxRZZp5EkqfR98w20aweffpp2Kjfc\nMOtEqk5t76mUJNXC4MFwySXw8MMWlJIkFWLgQGjZMrW7vvKKBWU5sKiUpHoQIzz4IBx8cGrZad06\n60SSJJW2efPSUZEjjoBbbkkTXldZJetUKoTtr5JUZN9/nybUvfUW9OvnDqUkSTX59lvYd19YYQUY\nNw7WXDPrRKoNdyolqYjefReaNoXll4chQywoJUmqycCBsPXW0KIF9O1rQVmOLColqUieegp22AEu\nvRQefRRWWinrRJIkla558+DGG+HQQ9NRkdtvh+Dc77Jk+6sk1VGM8MgjqZjs2xe22SbrRJIklbZP\nPklnJ5dfHkaMcBhPuXOnUpLqYMYMOOMMuO026NPHglKSpJp89BE0awa/+12aPWBBWf4sKiVpKX34\nIbRqBV9/DYMGpfMgkiRpyT78EI48Es4+O016XcZqpFHwX6MkLYUePdIdWqeems5Srrpq1okkSSpt\nTz8Nv/1tum7r0kuzTqNi8kylJNXC/Plw8cXwxBPQuzc0b551IkmSStu0aXDhhfDKK9C9expqp8bF\nolKSCvT993DuuTBxYrpDa401sk4kSVJpGzcOTjghzRwYORJWXz3rRKoPtr9KUgE+/hh22ikN5nnh\nBQtKSZJqks/DnnvCeeelq7YsKBsvi0pJqsELL8C228Ixx0CXLvCTn2SdSJKk0jV3LrRvD8cdB507\nQ9u23j/Z2Nn+KklLMG8e/PGPabDA889D69ZZJ5IkqbRNngyHHQY//nFqd1177awTqSG4UylJi/HF\nF7DHHjB+fPqwoJQkqXpdu6b7Jw89NN3dbEFZOdyplKRFfPQRHHJIKiqvuw6WXTbrRJIkla7Zs+H0\n06F/f3j11TSUR5XFnUpJ+oF8Hlq1gsMPhxtusKCUJKk6U6bAgQfCP/6ROnssKCuTRaWkijV7Nnz7\nbfp8/vw0VODfw3guucShApIkVadfv/QgdrvtoFs3+NGPsk6krNj+KqkivfNOanFdbTXo2ROOOAJm\nzYKxY2GttbJOJ0lS6ZozBy6/HJ58Eh5+GPbZJ+tEypo7lZIqTteu6c7Jc86BL7+ErbZKT1oHDLCg\nlCSpOh98kK7ZmjABxoyxoFTiTqWkijFjBlxxBTzzDLz0ErRoAb/+Ncyc6aIoSVJNOnVKV21dfTWc\ncYbHRPRfFpWSKsInn8BRR8Gaa8KwYemfAFVVmcaSJKnkzZ8PHTvCrbemc5RbbZV1IpUa218lNXoT\nJ6ZWnT33hO7d/1tQSpKk6n37Ley3Xxpi17evBaUWz6JSUqP27LOwyy5w441w1VWwjP/VkySpIP8u\nIn/5Sxg8GDbZJOtEKlW2v0pqlObMSWc+HnkEXngBWrbMOpEkSeVh5ky4/np44AHo3Bn22CPrRCp1\nFpWSGp1PPoGTToJll4WRI2GddbJOJBVXCGFl4B5gFvBajPHxjCNJaiQ++yxdubXmmjBiBKy/ftaJ\nVA4KagQLIawWQugWQng7hDAhhLBdfQeTpKUxdGi6HmT77dMOpQWlGqlDgG4xxt8DB2YdRlJ5++47\nuPBC2HFH2Hpr2HdfeO45C0oVrtDTRXcAL8UYfwNsA7xdf5Ekaen87W9w0EFwzz2p9XU5ezFUJkII\nD4UQvgghvLHI1/cJIUwMIbwbQrj4Bz+1PjB5wefzGiyopEbnvfdgu+3Svc3XXgtDhsCVV3pdiGqn\nxqIyhPBjYKcY4yMAMca5McZv6z2ZJBVo3jy4+GK4/HJ47TVo0ybrRFKtPQLs/cMvhBCWATou+PoW\nwNEhhM0W/PRkUmEJ4F/9JNVajGmI3W9/C+ecA48+mq7Z+tWvsk6mclTIc/xfAP8IITxC2qUcCZwb\nY5xRr8kkqQCffgqnnAKzZ8O4cfCzn2WdSKq9GOPAEMJGi3y5FfBejPEjgBDCk0AbYCLwDNAxhLAf\n8HyDhpVU9j78EM4+G776CkaPhg03zDqRyl0hReVyQHPgrBjjyBDC7cAlQPtFX5jL5f7zeVVVFVXe\nKi6pHr3+Ohx7bBrKc8UV0KRJ1om0tPL5PPl8PusYpWY9/tviCjCFVGgSY5wOnFzIm7g2S/qhXr3g\nxBPT7uSFF8IKK2SdSKWqNmtziDFW/4IQfg4MiTH+YsGPdwQujjEesMjrYk3vJUnFECPcddd/x50f\ncEDNv0blJYRAjLGi2joX7FQ+H2PcesGPDwP2ijG2W/Dj44CWMcZza/Gers2SAJg+Hc46C/r0gaee\nSgPtpNqobm2ucacyxvhFCGFyCGHTGOO7wO7AW8UOKUmFmD8/7U6++y4MGgS/+EXWiaR6MwX4YVPa\n+sCnGWWRVMZmzEjXhKy+Orz9Nvz4x1knUmNT6PTXc4DHQghjSecqr6u/SJK0eP/4B+y/P3z+OQwe\nbEGpRiew8NCdEcCvQggbhRCaAEcBPTNJJqls9e8PW2wBP/85dO5sQan6UVBRGWMcF2NsGWNsGmM8\nJMY4tb6DSdIPDRuWWnW23BJ69/YMiBqXEMLjwGBg0xDCxyGEtjHGecDZwCvABODJGKNXekkqyLx5\ncPvtcNRRcPfdabqrV22pvvhHS1JJizGdm7zySujYEY44IutEUvHFGI9Zwtd7Ab3q8t65XM4BPVKF\nmTQJDj8cVlkFBg6ETTbJOpHKWSEDe2oc1FMohwFIKrYZM+DUU+Gdd6BTJ9h886wTqaFU4qCe+uDa\nLFWWGKFLlzTV9bLL0rUhwf+SqkjqNKhHkrIwYwa0aAHNmqWrQ1ZaKetEkiSVru++S4PsPv0UevaE\nVq2yTqRKUuigHklqMDHCNdfAb36TnrhaUEqStGR9+0LLlrD22jBkiAWlGp47lZJKysyZ6VLmd95J\nT1olSdKS3XEH3HJLur+5TRvbXZUNi0pJJePtt+Hgg2HbbWHoUFhxxawTSZJUmqZPh2uvhSeeSMN4\nNtoo60SqZLa/SioJjz4KO+8MF18Mjz1mQSkVSy6Xq3Fqn6Ty8uabsPXW8MEHFpSqf/l8nlwuV+1r\nnP4qKVMzZ8Ill8Dzz8Nzz6V7KCWnvxaHa7PUuMyfn6ahX3QRdOgAxx2XdSJVEqe/SipJM2fCMcek\nC5qHDYOf/SzrRJIklabPPoOjjkrT0Xv1SkdFpFJh+6ukTHz0UVoQl18ennrKglKSpCV5+eU03XX3\n3dPMAQtKlRp3KiU1uKefhjPOgMsvh3PPzTqNJEml6dtv4eSTYdw4ePhh2GuvrBNJi2dRKanBzJ6d\nzk9262brjiRJ1Zk4EQ47DHbcMQ3mWWGFrBNJS2b7q6QGMXky/O538N57MHasBaUkSYszbx5cemkq\nJs8+G+6914JSpc+dSkn17sMPoaoK2rZNLa/L+V8eqcHkcjmqqqqoqqrKOoqkGsyfD+3awaRJaXdy\n7bWzTiSlK0VquprKK0Uk1avnn0/F5NVXw1lnZZ1G5cIrRYrDtVkqH199Beedlx7E9u4NP/pR1omk\nhVW3Ntv+KqlezJ0Lf/oT/P738NJLFpSSJC1J9+6w+ebw85+nSa8WlCo3NqFJKrqPP4YTT0zXhYwf\nD2uskXUiSZJKz7x58Je/wIMPpt3J5s2zTiQtHXcqJRVVPg877JDGnvfqZUEpSdLiDBmS7p7s1w+G\nDbOgVHlzp1JS0fTsmQYMPPQQ7Ldf1mkkSSo9MUKHDnDzzXDbbXDUURA8Qa4yZ1Epqc5ihKuuSu07\nzz0H222XdSJJkkrP5Mlw7rnw0Udpd3KjjbJOJBWH7a+S6uTLL2HffaFv33R+0oJSKi25XK7GUfCS\n6leM0LEjNGsGW20FAwdaUKp85PN5crlcta/xShFJS23AgDSQ56ij4Jpr0mAeqRi8UqQ4XJul7M2e\nnSagDx8OPXrAL3+ZdSJp6VS3Ntv+KqlWYoS334b+/VMh+dBDsP/+WaeSJKn0vPYanHMO/OIXMGiQ\nV4Wo8bKolFSwb7+FY46B0aPhN79Ji+Vmm2WdSpKk0nPTTXD33XDLLXDYYQ7jUeNm+6ukgowaBccd\nB1VVcOedtrqqftn+WhyuzVI23nsPfvtbGDMGNtgg6zRScVS3NjuoR1K1YoS//hX22QdyObjnHgtK\nSZKWJMZ0hvLSSy0oVTlsf5W0RNOnw/nnw9Ch6QzllltmnUiSpNIVI9x/P3z+eTpLKVUKi0pJizVt\nGuy2WxouMGAArLZa1okkSSpdf/87/OEPMGkSdO1qV48qS0HtryGED0MI40IIY0IIw+s7lKRsTZgA\nLVtC8+bwxBMWlJIkVefVV9MZyp13hnHjYOuts04kNaxCdyrnA1Uxxm/qM4yk7HXpAhdckKbVnXBC\n1mkk1VUul6Oqqoqqqqqso0iNzr/nDlx5JTz1FOyyS9aJpOLL5/Pk8/lqX1PQ9NcQwiSgRYzx62pe\n44Q5qYxNnw6XXAK9eqWFsVmzrBOpkjn9tThcm6X68847qd31iy+gWzf49a+zTiTVr2JMf41A7xDC\niBDCacWLJqkUTJ4Mu+6aFsahQy0oJUmqzr33wg47wL77prubLShV6Qptf90+xvh5CGFNoE8I4e0Y\n48BFX5TL5f7zua02UnkYMwb23hvOOy+NP/dyZmWhkNYaScranDlpqutrr6WHsL/6VdaJpNJQUPvr\nQr8ghPbAdzHGDot83RYbqcx06ZKuDLnvPjj00KzTSP9l+2txuDZLxTNiBJxxBqyzDjz2GKy6ataJ\npIZV3dpc405lCGFlYJkY47QQwirAXsDVRc4oqQHNnJl2JZ95xvsnJUmqzowZaYDdc8/BjTfCccfZ\n1SMtqpD2158Dz4QQ4oLXPxZjfKV+Y0mqL3//Oxx/PKy9NowcCT/7WdaJJEkqTV98AW3awMYbw1tv\nwU9+knUiqTTVOKgnxjgpxtg0xtgsxrhVjPGGhggmqfj+fY/WQQelSXUWlJIkLd64cdC6NeyzDzz+\nuAWlVJ1CB/VIKnN33ZXadh57DPbYI+s0kiSVpu++g6uvhk6d4Pbb4Zhjsk4klT6LSqmRmzsXLroI\nuneHgQPh//4v60SSJJWmUaNSu+uee8Kbb8Jaa2WdSCoPFpVSIzZlCrRtC8sum64OWWONrBNJklSa\n3n4b9t8f7rkHDj446zRSeanxTKWk8pTPp7MgO+0Ezz9vQSlVqlwu5x2gUg0+/DDd2XzjjRaU0qLy\n+Ty5XK7a19T6nsolvpF3YUklIUa49Va47TZ48EH43e+yTiTVnvdUFodrs1Sz11+Hk06C886Ds8/O\nOo1Uuup0T6Wk8nLyyTBhAgwZAhtumHUaSZJK05dfppkDr76aBvIcemjWiaTyZVEpNSIvvpgWx4kT\nYeWVs04jSVJpGjw4FZHHHpvun/zxj7NOJJU3i0qpEYgRbr45PWl97DELSkmSlqRr19Tm2qlTuoNS\nUt1ZVEpl7l//gqOPhq++ghEjYL31sk4kSVLpmTsXbrgBHngA+vSBbbbJOpHUeDj9VSpjQ4ZA8+aw\n6aYwdKgFpSRJizN0KLRsCf36pc8tKKXicqdSKlP33w9XXJEmvLZpk3UaSZJKz/ffw/nnwwsvwC23\npM6e4FyLTWB4AAAgAElEQVRpqegsKqUyE2O6R6tTJ3jtNdh886wTSZJUej76KD103WYbePttWG21\nrBNJjZdFpVRGpk9Pk+o+/hheftkrQyRJWpzXX4cjjkhXhpx3nruTUn3zTKVUJt54A5o2TU9avYNS\nkqT/NWcO3HRTui7kb39Lra8WlFL9s6iUysCDD8Luu0P79mmRbNIk60SSJJWW115LD1/7908PX/fe\nO+tEUuWw/VUqYd9/n1p3+vWDAQPgN7/JOpEkSaXl++/hzDMhn4fbboODD3Z3UmpoFpVSiZo2LbXv\n/PjHMGgQ/PSnWSeSJKm0fPopHHggbLEFvPUWrLJK1omkymT7q1SC3nknTavbYAN48kkLSklLL5fL\nkc/ns44hFd0bb8Bvf5t2Jv/2NwtKqb7k83lyuVy1rwkxxqJ8sxBCLNZ7SZXs0Ufhj3+Em2+Gtm2z\nTiNlI4RAjNEGtjpybVZj9eyz0K4d3HUXHHlk1mmkylDd2mz7q1QiZsyAc8+FV19N5ye9f1KSpIV9\n9FG6IuTNN+G559JOpaTs2f4qlYD334fddoPvvoPRoy0oJUn6oVmz4LrroHnz9DF+vAWlVErcqZQy\n9t57sMsu8Kc/paevy/ioR5Kk/5g2DfbZJ93TPHIkbLxx1okkLcq/vkoNZPhwmDdv4a91756etP75\nz3DBBRaUkiT90IwZabrrZpvB889bUEqlyr/CSvVs9mw46STYbjvo3Tt9bc6ctCt53nnQpw+cckqm\nESVJKjmzZsEhh8A668D99/vgVSplTn+V6tH776epdBtuCL/+NcyfD2ecASeemO6f7NIFVl8965RS\n6XH6a3G4NqtczZkDRxyRCsmuXWE5D2xJmatubfaZj1RPunWDHXaAk0+GHj1g331Tu+sOO6RWnp49\nLSglSVrUl1/C4YenTp8nnrCglMqBRaVUZLNnw+WXw4UXpvMfZ50FIUCrVrDJJvDII2koz7LLZp1U\nkqTSMX9+anPdckv45S/h6aehSZOsU0kqhM9+pCKaMweOPRa+/RaGDEnnQP5txRX/e6ZSkiT915gx\n6XjIMstA376w9dZZJ5JUGwXvVIYQlgkhjA4h9KzPQFK5+uSTNMl15szU2vrDglKSJP2vGOGWW2Dv\nveG002DgQAtKqRzVpv31XOCt+goilbOXXkrtrYcdlgrKFVbIOpEkSaVt7tx0RKRTJxg1Kk1Cd8Kr\nVJ4Kan8NIawP7Av8BbigXhNJZWTuXLjmGnjwwTSdbqedsk4kSVLp++47OOqotI4OHAirrpp1Ikl1\nUejzoNuACwHnkksLfPkltGmTzk6OGGFBKUlSIT75BHbeGdZdF154wYJSagxqLCpDCPsBX8QYxwJh\nwYdU0aZMge22g803T62v662XdSJJkkrfyy+n+QNHHgkPPADLL591IknFUEj76w7AgSGEfYGVgB+H\nEDrFGE9Y9IW5XO4/n1dVVVFVVVWkmFLpeOUVOP54uPhiuMBmcKko8vk8+Xw+6xiS6smUKXDeeWnK\n61//mgbzSGo8QoyFd7SGEHYB/hhjPHAxPxdr815SuZk/H/78Z7jnHuje3XZXqT6FEIgx2hlTR67N\nytrcuXDnnXDddXDmmXDppbDSSlmnkrQ0qlubvadSKsBnn8Gpp8K0aekp67rrZp1IkqTS9sYbqbNn\nzTVh8GDYdNOsE0mqL7Ua3BxjfG1xu5RSYzZiRDr/0bQp9OljQSmpvORyOVuL1eCefRZ23z0dE+nT\nx4JSKmf5fH6hY46LU6v212rfyBYbNUIvvQQnnQQdO8IRR2SdRqoctr8Wh2uzGlqMqdX1vvugRw9o\n2TLrRJKKxfZXqZZihOuvh9tvh549oXXrrBNJklTaZsyAk0+GDz6AYcPs7JEqiUWltIh//hPatYNJ\nk2DsWBdFSZJq8skncNBBqc31tdccxiNVmlqdqZQau3+fn1x/fRg40IJSkqTqxAhPPQWtWsEhh0CX\nLhaUUiVyp1IiLYqdO8Of/gR33AFHH511IkmSStu778JZZ8EXX0DXrrDjjlknkpQVdyoloEMHuOGG\nNKHOglKSpCWbMQOuvBK23x723RdGjbKglCqdO5WqeKNHp6E8Q4bAJptknUaSpNL14otw9tlpquu4\ncbDeelknklQKLCpVsX7Y8nr33RaUkiQtybx5cNFF6f7J+++HPffMOpGkUmJRqYo0cyacdhqMHAn9\n+sGWW2adSJKk0vT993DssTB1ahpo99OfZp1IUqnxTKUqzjvvQPPmMGdOan21oJQkafE++wx22QV+\n8hPo3duCUtLiWVSqonTvDjvtBOefD0884dhzSZKWZPx4aN063T/5yCPQpEnWiSSVKttfVRFiTHdn\nXXRRGjLQsmXWiSRJKl29e8Pxx3vNlqTCWFSq0ZszB849F/r3h169oGnTrBNJklSaYkyDeHI56NHD\nq0IkFcaiUo3a5MnQpk0aeT5sGKy6ataJJEkqTe+9l64L+eQTGDgQfvWrrBNJKheeqVSj9eyz0KJF\nmljXs6cFpSRJizNjBrRvD7/9LeyxRxpiZ0EpqTbcqVSjM29eWhwffhiefx5atco6kSRJpenFF+Gc\nc9JU9LFjYf31s04kqRxZVKpRmTkTzjoL3n8fRo2CddbJOpEkSaXno4/SvIG33oJ774W99so6kaRy\nZvurGo1PP02tO998k3YoLSglSfpf994L226bjoiMH29BKanuLCrVKPx7quvhh8PTT3t+UpKkxXnw\nQbj55jS87oorYIUVsk4kqTGw/VVlbd48uOwy6Nw5DebZfvusE0mSVJp69ICrroLXXoNf/jLrNJIa\nE4tKla3PP4e2bWHWLHjjDfjZz7JOJElSaerfH04/HXr3hk02yTqNpMbG9leVpc8+S2dAttkGXn7Z\nglKSpCUZPRqOPBKeegqaNcs6jaTGyKJSZef11/97fvL666FJk6wTSZJUmt57D/bbD+6/H6qqsk4j\nqbGy/VVlI0a49lq46y7o0sVpdZIkVefTT9Na+ec/w8EHZ51GUmNmUamy8NVXcOKJ8PXXMG6c14VI\nklSdb76BvfeG3/8eTj016zSSGjvbX1XSJkxIk1233x623DK1vlpQSpK0ZNOnw/77p13Kiy/OOo2k\nShBijMV5oxBisd5LArjzztTuuuOOcNRRcMQRWSeS1FBCCMQYQ9Y5yp1rc+WZMwcOOgjWWAP+9jdY\nxu0DSUVS3dps+6tKznffwcknw1tvwYgRsNFGWSeSJKn0jR0L7drBuuvCQw9ZUEpqOP7nRiVl9GjY\nbjv4yU9g1CgLSklanBDCxiGEB0MIT2WdRdn7/nu46KLU7nr66fDMM7D88lmnklRJaiwqQwgrhBCG\nhRDGhBDGhxDaN0QwVZ7HHoN99oErroAHHoAVV8w6kSSVphjjpBij41fEyy/DVlvBJ5/Am2+mTp9g\n47ikBlZj+2uMcVYIYdcY4/QQwrLAoBBCrxjj8AbIpwoQI3TokO7Q6tULtt0260SS1DBCCA8B+wNf\nxBi3/sHX9wFuJz38fSjGeGNGEVWivvgCzj8fhg6Fe+9Nk14lKSsFtb/GGKcv+HQFUiHqqX8VxaxZ\ncOyx8OCD0KePBaWkivMIsFA5EEJYBui44OtbAEeHEDZb8HPHhxA6hBD+PQfbPakKE2M6L7nVVrDB\nBml30oJSUtYKKipDCMuEEMYAnwN9Yowj6jeWKsHEien85Ny5MGaM5yclVZ4Y40Dgm0W+3Ap4L8b4\nUYxxDvAk0GbB6zvHGC8AZoUQ7gWahhC8NKJCTJwIVVXpiEifPnDjjbDyylmnkqQCp7/GGOcDzUII\nqwLPhhA2jzG+tejrcrncfz6vqqqiqqqqSDHV2DzxBJx7broy5LTTPP8hVbp8Pk8+n886RqlYD5j8\ngx9PIRWa/xFj/CdwRiFv5trcONx3H1x5JVx1FZx5Jiy7bNaJJDV2tVmba31PZQjhKmBajLHDIl/3\nLizVaNastCA+/TR07Wq7q6TFq6R7KkMIGwHP//tMZQjhMGCvGGO7BT8+DmgZYzx3Kd7btbnMxZgG\n2HXrloby/OIXWSeSVKnqdE9lCOFnwJwY49QQwkrAHsANRc6oCjBrVrqQedllYfBgWGutrBNJUkma\nAmz4gx+vD3yaURZlaM4c+P3vYcIEGDQI1lwz60SStHiFnKlcB+gfQhgLDAN6xxhfqt9Yamw++ACa\nNYPVV4dnn7WglKQfCCw8cGcE8KsQwkYhhCbAUUDPTJIpM99/D23apCmv/fpZUEoqbTUWlTHG8THG\n5jHGpjHGrWOMf2mIYGo8unWD3/4Wzj473UW5XEEneSWp8QshPA4MBjYNIXwcQmgbY5wHnA28AkwA\nnowxvp1lTjWsr76CXXeFddaB556DVVbJOpEkVc+/3qvezJoFl10G3bvDSy9BixZZJ5Kk0hJjPGYJ\nX+8F9CrG98jlcg7oKSMffAD77ANHHQXXXOMgO0nZK2RgT60H9SzxjRwGoB+YMgWOPx5WWw3++lfb\ndiTVTiUN6qlPrs3lZdQoOOCANNDu9NOzTiNJC6tubS7onkqpNiZNSvdPVlWlKa8WlJIkVa9377RD\nec89FpSSyo9FpYrqhRegdes0/rx9e+/RkiSpJp07wwknpEF2Bx2UdRpJqj3PVKoo5s6FXA4eegh6\n9kw7lZIkaclihJtuSruT/fvD5ptnnUiSlo5FpepsyhQ45RSYNw/GjIG11846kSRJpW3ePLjgglRM\nDh4M662XdSJJWnq2v6pOhg5N7a6tW0OvXhaUklRqcrlcjVP71LDGj4cddoAJE2DAAAtKSaUtn8+T\ny+WqfY3TX7XUhg2D/feHBx6Agw/OOo2kxsTpr8Xh2lxaZs6EP/85rZvXXgunnQbL+HhfUpmobm22\n/VVL5dNP4cwz4eabLSglSapJPg/t2sHWW8O4cbDuulknkqTi8fmYam34cGjZEvbdN02rkyRJi/fN\nN3Dqqenu5ptvhu7dLSglNT4WlSpYjNChQ7qYuWPH1MJj244kSf8rRnjqKdhiC1hxxXR+sk2brFNJ\nUv2w/VUF+fZbOOaY1PY6YgRsuGHWiSRJKk0ffwxnnQV//3vamdx++6wTSVL9cp9JNRo7Flq1SoXk\nsGEWlJJUTpz+2nDmzYM774TmzdO6OWaMBaWk8uf0V9XZiBGpXefGG+G44yA4i1FSA3D6a3G4Njec\n8ePTNNcmTdJ01802yzqRJBVXdWuzO5VarBjhwQfTlSF33pkGDFhQSpK0sJkz4fLLYbfd4OST05RX\nC0pJlcYzlfofM2ZA27bpqeuAAfDrX2edSJKk0vPhh+nh62abwRtvwDrrZJ1IkrLhTqUWMmECNGuW\n2ndGjbKglCRpcYYPT+cl27VLw3gsKCVVMotK/cfjj8Ouu8Jll0GnTmkEuiRJWtizz8J++8F998E5\n52SdRpKyZ/uriBHuvRduuAF69047lZIkaWExwh13wM03Q69e0KJF1okkqTRYVFa4mTPh1FPhrbfg\nlVccLiBJ0uLMmwfnnQf9+8PgwbDRRlknkqTSYftrBXvvPWjaNC2UgwZZUEpSY+Q9lXU3bRocdBC8\n/TYMHGhBKamyeE+llqhzZ7jgArjuunSvliSVEu+pLA7X5rr77LM04XWbbdIZyiZNsk4kSdmobm22\n/bXCzJ4NF12Uhgz07w9bbpl1IkmSStObb6aC8rTT0hA772uWpMWzqKwgM2ak85PffJOuC1ljjawT\nSZJUmvr2hWOOgdtvT/+UJC2ZZyorxOTJ0KoVzJ2b7tOyoJQkafEefhiOPTatlxaUklQzi8pG6odH\naJ59FrbdFk46CZ58ElZeObNYkiSVrBjhiivSvIEBA2DnnbNOJEnlwfbXRubbb+GUU+Djj9OEuosv\nhq5d4cUXoWXLrNNJklSaZs2Ctm1h0iQYMgTWXDPrRJJUPtypbETGjYMdd0ytrdOmpSLy7bfhjTcs\nKCVJWpKvv4Y994Q5c6BfPwtKSaqtGovKEML6IYR+IYS3QgjjQwjnNEQwFS5G6NIF9tgDzj8f7r0X\nOnRI50F69vT8pCRVMu+prN7778P220Pr1qmzZ6WVsk4kSaWlKPdUhhDWBtaOMY4NIfwIGAW0iTFO\nXOR13oWVgVmz4Lzz0tmPzp2hefOsE0lS3XlPZXG4Nldv8GA45BDI5eD007NOI0mlrU73VMYYPwc+\nX/D5tBDC28B6wMRqf6Hq3dSpsNtusMEG6fzHqqtmnUiSpPLQrRuceSZ06gS/+13WaSSpvNXqTGUI\n4f+ApsCw+gijwk2YkKbSbb89PPOMBaUkSYWYORMuvxwuuAD69LGglKRiKHj664LW1+7AuTHGaYt7\nzQ97bauqqqiqqqpjPC3O00+np6t/+Uua9BpsEJNU5vL5vOf+VO8GDIDTToMtt4Thw2GddbJOJEmN\nQ41nKgFCCMsBLwC9Yox3LOE1ntuoZ7Nmpfuznnkmtetsv33WiSSpfnimsjhcm5N//Qsuugheegk6\ndoSDDso6kSSVn+rW5kLbXx8G3lpSQan698UXqd313XfT+UkLSkmSqhdj6u7ZYgtYbrl0dMSCUpKK\nr5DprzsAA4DxQFzwcVmM8eVFXufT0HoyfDgccACccQa0b2+7q6TGz53K4qjktfmTT+Css+Cdd+Cv\nf033OEuSll5dp78OApYteioV5Mkn4Zxz4KGHUmEpSZKWbP58uO++9BD2rLPS3ZMrrJB1Kklq3Aoe\n1KOGNWtWWhC7doVevWDbbbNOJElSaXvrrTSIB+C112DzzbPNI0mVolZXiqhhTJkCe+yRzn4MGWJB\nKUlSdWbNglwOdtkFjj0WXn/dglKSGpJFZYkZMCAVkXvuCc89B2uvnXUiSVI5y+Vyjfq6loEDoVkz\nGDsWxoxJV24t499uJKlo8vn8QldHLk5BV4oUopKHARRLhw5w003pupC99so6jSRlx0E9xdGY1+ap\nU+GSS6BnT7jzTjjkEAfZSVJ9KsaVIqpHc+fC5ZfDHXfAyJEWlJIkVeeZZ9I1IfPnp6Mihx5qQSlJ\nWXJQT8Y+/xxOPhnmzYOhQ2GddbJOJElSafr0U/jDH1Ih+fjj6f5mSVL23KnM0NCh0KIFbLMNvPCC\nBaUkSYszfz7cf39aL7fYAsaNs6CUpFLiTmUGYoTbboObb06L5IEHZp1IkqTSNHEitGsHc+ZA//6w\n5ZZZJ5IkLcqisoHFCEcfDW+/DcOHwwYbZJ1IkqTSM3s23HAD3HVXurf5jDNg2WWzTiVJWhyLygbW\nrVu6nHnkSGjSJOs0kiSVniFD4LTTYOONYfRoH8BKUqmzqGwgMcItt6SPHj0sKCVJWtS338Jll6V1\n8vbb4fDDneoqSeXAorIBTJ0KbdvCBx/AqFGw/vpZJ5IkqbS8/366Umu33dJ019VXzzqRJKlQTn+t\nZyNGwHbbpcmuw4dbUEqStKg334RddoFLL4UHH7SglKRy405lPYkROnWCCy+Ejh1t4ZEkaXFGjIAD\nDkjtrkcdlXUaSdLSsKisBzHCtdfCE09Anz7pXi1JkrSwAQPgsMPgoYdSYSlJKk8WlUU2fTqceGKa\n8Prqq6ntVZIkLezll+GEE9ID2N13zzqNJKkuPFNZRG++Ca1bw4orphHoFpSSpKzlcjny+XzWMRbS\nvXt6APvccxaUklTq8vk8uVyu2teEGGNRvlkIIRbrvcpR587wxz/CjTfCSSd5flKS6iKEQIzR/5LW\nUSmuzY8+mgbyvPQSNG2adRpJUqGqW5ttf62jmTP/uzj27g3NmmWdSJKk0tSxI9x0E/TrB5ttlnUa\nSVKxWFTWwYwZ8LvfpdHngwbBz36WdSJJkkrT9dengTwDBsD//V/WaSRJxeSZyqU0cWLaldx4Y3j6\naQtKSZIWJ8bU0dOliwWlJDVWFpVL4fHHYeed4aKL4JFHYBl/FyVJ+h/z58Mf/pCu13rtNVh33awT\nSZLqg+2vtTB9enra+sILnp+UJKk6c+fCKafA3/+erthabbWsE0mS6otFZYE+/hiOPjo9ZR0+HNZY\nI+tEkiSVplmz4JhjYNq09BB25ZWzTiRJqk82bhbgnXegVSvYd1/o2tWCUpKkJZk+Hdq0SZ/37GlB\nKUmVwKKyBj16wE47wQ03wOWXe35SkqQlmToV9tkH1lorPYRdYYWsE0mSGoLtr0swZw5ceSV07pzu\noGzRIutEkiSVrq+/hr33hu22g7vu8iGsJFUSi8rFmDwZTjoJmjSB0aPh5z/POpEkSaXrs89gzz3h\ngAPguusghKwTSZIaUo3PEUMID4UQvgghvNEQgbI0fToMHJieslZVwfPPW1BKklSdDz9Mx0SOPRau\nv96CUpIqUSHNKY8Ae9d3kCzNnw9XXZUG8Bx+ONx/f2p9Xc59XEmSlmjixHRv83nnpSu3JEmVqcay\nKcY4MISwUUOEycKXX0K7dvCPf8CkSWln0qeskiRVb+xY+N3v0u7kSSdlnUaSlKWKPkY/dCi0bg2b\nbgp9+8Laa1tQSpJUkyFD0lCeu+6yoJQkFXlQTy6X+8/nVVVVVFVVFfPtiyZGeOABaN8e7r4bDj00\n60SSVNny+Tz5fD7rGCrAq6/C0UfDo4+mnUpJkkKMseYXpfbX52OMW1fzmljIe2UtRjjlFBg1Cp56\nCn7966wTSZIWFUIgxmjvSB0Ve21+/vm0hnbrBrvsUrS3lSSVgerW5kJ3KsOCj7L2zTdw8snw+eep\ndWfllbNOJElSeXjyyTSQ58UXoWXLrNNIkkpJIVeKPA4MBjYNIXwcQmhb/7GKb/Ro2GEH2GADyOct\nKCVJKtSDD8If/wh9+lhQSpL+VyHTX49piCD1JcZ07uOii+DWW+G44xzGI0mqHLlcrk5zDm67De64\nIz2Q3WSTokaTJJWBQuYeFHSmshCleKZy5kw46ywYMQK6dIGtl3giVJJUSjxTWRx1WZtjhGuugcce\nSxPSN9ywyOEkSWWlGGcqy85XX8Huu6frQgYPhh/9KOtEkiSVhxjhwgvhlVfg9dfTHc6SJC1Jo7yn\nctQo2GknOOAA6N7dglKSpELNmwe//z0MHJhaXi0oJUk1aVQ7lTFC587wpz+lC5mPPDLrRJIklY85\nc+DEE+Gzz9JQnh//OOtEkqRy0GiKyu+/hwsugEGDUrtO06ZZJ5IkqXzMnAlHHAHz58NLL8FKK2Wd\nSJJULhpF++vHH0Pr1vDdd6motKCUJKlw06bB/vunQrJHDwtKSVLtlH1Rmc/DtttC27ZpQt1qq2Wd\nSJKk8vGvf8Fee8FGG8Hjj0OTJlknkiSVm7IuKrt0gcMPh65dU+ur909KklS4L7+EXXeFVq3gr3+F\nZZfNOpEkqRyV5ZnKmTPhiivg2WfT+clmzbJOJElSeZkyBfbYI52jvPpqH8xKkpZe2RWVkyen3cl1\n1oEhQ2DNNbNOJElSefngg1RQnnlmuo9SkqS6KKv211dfTecn27RJgwQsKCVJqp0JE2CXXeCSSywo\nJUnFUTY7lXfdBdddB926pcVQkiTVzqhRsN9+cOutcOyxWaeRJDUWIcZYnDcKIRbrvRY1aRK0aAEj\nR8LGG9fLt5AklZAQAjFGT/nV0Q/X5tdfh0MPhQcegIMOyjiYJKnsVLc2l3z7a+/esN128Oc/W1BK\nkrQ0eveGQw5JV29ZUEqSiq1k21/nz4crr4SHHkrnJ3fcMetEkiSVnx494PTT08T0HXbIOo0kqTEq\nyfbXTz+Ftm3T1SHdusFaaxXlbSVJZcL21+IIIcS11468+CI0b551GklSOSur9tfBg9OT1NatoW9f\nC0pJkuri1VctKCVJ9aukdipfeQWOPx7uuw8OPrgosSRJZcidyuKozyF6kqTKUt3aXBJnKmOEv/wF\nOnaE7t1hp52yTiRJkiRJKkTmReU//wknnQSffAJjx8Laa2edSJIkSZJUqEzPVA4Zkq4L+dWv0ucW\nlJIkSZJUXjLZqYwRHn4YLr0U7r03XcYsSZIkSSo/DV5UxggXXwwvvwz9+sGWWzZ0AkmSJElSsTRo\nUTl1Khx1FPzjH9C/P6yxRkN+d0mSJElSsTXYmcoRI6BlS/jFL9L5SQtKSZIkSSp/9V5UxpjOTe67\nL1x3Hdx9NyyX+cxZSZIkSVIx1Gt5N20anHcejBoFAwbAb35Tn99NkiRJktTQ6m2ncto02HVXmDED\nXnvNglKSpGIJIbQJITwQQngmhLBn1nn+v727j7m6rOM4/v6g01UOS5uUEtqD0cPmpCFark3NNG2T\nlujKKJ8arkDZ3Frm3Pgj/8C2ih5c5SQCLEhtBG6U5Ai3HiRbWKhUVBZQk1rCWrm5gk9//C7g5uY+\nD/c59znnPud8Xv9wznVf55wv312/8zvX73c9RETEcGuqUynpfZJ+K+n3kj7dqP7TT8OsWTB7Njzw\nAEyd2n6gg2zLli29DqFvJXetS+7ak/y1Lrlrn+31thcANwLX9jqeGB45fqMT0q76X8NOpaQpwFeB\ny4G3Ax+W9JZa9VetgksugSVLqrmU0sQFO6hyILUuuWtdctee5K91yd0RkpZL2ivpN6PKm72Yexdw\nb2ejjDgix290QtpV/2vmTuUcYKftv9j+L7AWmDtWxYUL4e674bHHYP78iQwzIiJiIK2gumh7WL2L\nuZI+KukLkk6XtBTYaPupbgfdSd36cTmRn9Pqe433dc3Wb6ZevTqD9gO/m/+ftKvaddKuev9Z7bxP\no9c206k8A9g94vmeUnaMfftg61Y455xmw4uIiBhetn8C7BtVXPNiru3Vtm8HrgbeA8yTtKCbMXda\nOpXt18+P/6P144//dt4r7ao7+rFddbJTKdv1K0jzgMvK3A0kzQfOs714VL36bxQRETEOtodiAoWk\nM4FHbJ9Tnl8NXD7qvDvH9m0tvHfOzRERMWFqnZub2VJkDzBjxPPpwN+a/YCIiIgYl7HOpy11DnNu\njoiIbmhm+OuTwJsknSnpBOBDwIbOhhURETG0mrqYGxERMVk07FTaPgAsAjYBzwBrbe/odGARERFD\nQsWMtUkAAAWZSURBVBx9dzIXcyMioq80nFMZERERnSHpO8BFwKnAXmCJ7RWSrgCWUV38XW57ae+i\njIiIqK+Z4a91jWMvraE11j5kkl4laZOk30l6VNLJI/72ZUk7JT0l6dzeRN17kqZL2izpWUnbJd1W\nypO7Jkg6UdJWSdtK/paU8rMkPVHyt0bS8aX8BElrS/5+LmlG/U8YfJKmSPqVpA3leXLXBEl/lvTr\n0vZ+Ucpy3I7B9nW2T7d9ou0ZtleU8h/Ynmn77HQoIyJismurU1lvL604yjH7kAF3AI/ZnglsBj4D\nUK5Ov9H22cAtwNe7Gegk8z/gdttvA94JLCztK7lrgu2XgIttzwLOBa6QdD5wD/D5kr/9wM3lJTcD\nL5T8LQM+14OwJ5vFwLMjnid3zTkIXGR7lu05pSzH7SQg6eWSviXpG5Ku63U8MRgkvV7S/ZIe7HUs\nMTgkzZV0n6R1kt7b63iivnbvVNbcSyuOqLEP2VxgZXm8kiN5mwusKq/bCpwsaVo34pxsbD9/aFNv\n2/8GdlAtWJHcNcn2i+XhiVSrPRu4GPheKV8JfKA8HpnXh6n2wBtakqYDVwL3jyi+hOSuGeLY80uO\n28nhg8BDtm8Brup1MDEYbD9n++O9jiMGi+31ZWulG4Frex1P1Ndup/IMYPeI53tKWTR2mu29UHWe\ngNNK+eic/pXkFElnUd1tewKYltw1pwzf3AY8D/wI+COw3/bBUmXkMXs4f2WBrv2STulyyJPJF4FP\nUbZykHQqsC+5a4qBRyU9KenQD80ctx0w1vSKUl5rasp0juT7QNcCjb7SQruKaKiNdnUXcG93ooxW\ntdupnLC9tOKw5HQUSSdR3f1ZXO5Y1spHcjeK7YNl+Ot0qpEFbx2rWvl3dP7EkOZP0vuBveVO+aG8\njF6hE5K7Wt5lezbVnd6Fkt5NjttOOWZ6RYOpKbupvg9g7NxHwPjb1eFq3Qkv+tS425WkpcDGQyPX\nYvJqt1OZvbRat/fQEC9JrwH+Xsr3AK8bUW+oc1oWQnkYWG17fSlO7sbJ9r+Ax4ELgFeWL3E4OkeH\n8yfpOGCq7dHDtofFhcBVkv4ErKEa9rqMamhmctdAuROJ7X8A36e6oJHjtgNqTK+oNzVlHTBP0r3A\nI92LNPrJeNuVpFMkfQ04N3cwo5YW2tWtVNNJ5kla0NVgY9za7VRmL63mjb7LsQG4oTy+AVg/ovxj\nAJIuoBqquLc7IU5K3wSetf2lEWXJXRMkvfrQCpuSXgZcSrXozI+Ba0q16zk6f9eXx9dQLaYylGzf\nWVbifAPV99pm2/NJ7hoqC8GcVB6/ArgM2E6O226qOTXF9ou2b7K90PaankQX/apeu3rB9ifKasX3\n9CS66Ff12tVXbJ9n+5O27+tJdNG049t5se0DkhYBmziyl9aOCYlsgGjEPmSSdgFLgKXAQ5JuAnZR\nfqja3ijpSkl/AP5DNTl5KEm6EPgIsL3MCzRwJ9UKnA8mdw29FlhZ7qxNAb5bcrQDWCvps8A2YHmp\nvxxYLWkn8E+qzlQc7Q6Su0amAeskmeoc823bmyT9khy33ZIhxdEJaVfRCWlXA6KtTiWA7R8CMycg\nloFlu9ay7ZfWqL+og+H0Dds/BY6r8efkrgHb24F3jFH+HHD+GOUvkdXVjmH7caqhw8ldE0qOjtlr\n0vYL5LjtlkxNiU5Iu4pOSLsaEO0Of42IiIjeGj29IlNTYiKkXUUnpF0NqHQqIyIi+lSZXvEz4M2S\ndkm6sWxrcyvV1JRngLWZmhLjkXYVnZB2NdhkZ9hyREREREREtCZ3KiMiIiIiIqJl6VRGRERERERE\ny9KpjIiIiIiIiJalUxkREREREREtS6cyIiIiIiIiWpZOZURERERERLQsncqIiIiIiIhoWTqVERER\nERER0bJ0KiMiIiIiIqJl/wdm8iJ2wRysSwAAAABJRU5ErkJggg==\n",
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.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 backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\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 * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.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.\n",
+ "mpl.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\n",
+ "mpl.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",
+ " */\n",
+ "function 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",
+ "\n",
+ "mpl.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 * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.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",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\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 + '\" width=\"' + width + '\">');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.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.\n",
+ "if (IPython.notebook.kernel != null) {\n",
+ " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+ "}\n"
+ ],
"text/plain": [
- "<matplotlib.figure.Figure at 0x72df4c863080>"
+ "<IPython.core.display.Javascript object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<img src=\"data:image/png;base64,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\" width=\"800\">"
+ ],
+ "text/plain": [
+ "<IPython.core.display.HTML object>"
]
},
"metadata": {},
@@ -349,6 +4314,805 @@
"data = np.array(next(iter(data.values())))[:,1] - zero_cal\n",
"plot_bitslide(simulate_bitslide(data))"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " if (mpl.ratio != 1) {\n",
+ " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+ " }\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+ "\n",
+ "}\n",
+ "\n",
+ "mpl.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 backingStore = this.context.backingStorePixelRatio ||\n",
+ "\tthis.context.webkitBackingStorePixelRatio ||\n",
+ "\tthis.context.mozBackingStorePixelRatio ||\n",
+ "\tthis.context.msBackingStorePixelRatio ||\n",
+ "\tthis.context.oBackingStorePixelRatio ||\n",
+ "\tthis.context.backingStorePixelRatio || 1;\n",
+ "\n",
+ " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\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 * mpl.ratio);\n",
+ " canvas.attr('height', height * mpl.ratio);\n",
+ " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+ " var x0 = msg['x0'] / mpl.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+ " var x1 = msg['x1'] / mpl.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "}\n",
+ "\n",
+ "mpl.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.\n",
+ "mpl.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\n",
+ "mpl.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",
+ " */\n",
+ "function 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",
+ "\n",
+ "mpl.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 * mpl.ratio;\n",
+ " var y = canvas_pos.y * mpl.ratio;\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",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "mpl.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",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+ " var width = fig.canvas.width/mpl.ratio\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 + '\" width=\"' + width + '\">');\n",
+ " fig.close_ws(fig, msg);\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width/mpl.ratio\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function(el){\n",
+ " var fig = this\n",
+ " el.on(\"remove\", function(){\n",
+ "\tfig.close_ws(fig, {});\n",
+ " });\n",
+ "}\n",
+ "\n",
+ "mpl.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",
+ "\n",
+ "mpl.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",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "}\n",
+ "\n",
+ "\n",
+ "mpl.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.\n",
+ "if (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/html": [
+ "<img src=\"data:image/png;base64,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\" width=\"600\">"
+ ],
+ "text/plain": [
+ "<IPython.core.display.HTML object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "frob_export_for_blog(simulate_bitslide(data), svgfile='/tmp/corrected_brightness_sim.svg')"
+ ]
}
],
"metadata": {
@@ -367,9 +5131,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.5.4"
+ "version": "3.6.5"
}
},
"nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
}