diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0890144d..ceb3d027 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,16 @@ Release history =============== +`v0.18.3` - 2025-01-03 +---------------------- + +Changed +~~~~~~~ + +- Intel denoiser libs updated to 2.3.1. Accumulation frames, before the final one, are denoised using the fast model, the final frame is + denoised using the high quality / slower model. + + `v0.18.2` - 2024-12-13 ---------------------- @@ -652,6 +662,7 @@ Added - this changelog, markdown description content type tag for PyPI - use [Semantic Versioning](https://semver.org/spec/v2.0.0.html) +.. _`v0.18.3`: https://github.com/rnd-team-dev/plotoptix/releases/tag/v0.18.3 .. _`v0.18.2`: https://github.com/rnd-team-dev/plotoptix/releases/tag/v0.18.2 .. _`v0.18.1`: https://github.com/rnd-team-dev/plotoptix/releases/tag/v0.18.1 .. _`v0.17.1`: https://github.com/rnd-team-dev/plotoptix/releases/tag/v0.17.1 diff --git a/examples/1_basics/10_1_save_hdr_environment_map.ipynb b/examples/1_basics/10_1_save_hdr_environment_map.ipynb index 39304a27..4b51b8ef 100644 --- a/examples/1_basics/10_1_save_hdr_environment_map.ipynb +++ b/examples/1_basics/10_1_save_hdr_environment_map.ipynb @@ -292,7 +292,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -306,7 +306,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/examples/1_basics/10_2_read_hdr_360deg_env_map.ipynb b/examples/1_basics/10_2_read_hdr_360deg_env_map.ipynb index 56f41bba..1db51fd5 100644 --- a/examples/1_basics/10_2_read_hdr_360deg_env_map.ipynb +++ b/examples/1_basics/10_2_read_hdr_360deg_env_map.ipynb @@ -200,7 +200,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -214,7 +214,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/examples/1_basics/11_output_buffers.ipynb b/examples/1_basics/11_output_buffers.ipynb index 68fabea5..f129152b 100644 --- a/examples/1_basics/11_output_buffers.ipynb +++ b/examples/1_basics/11_output_buffers.ipynb @@ -17,7 +17,7 @@ "metadata": {}, "outputs": [], "source": [ - "%matplotlib notebook\n", + "%matplotlib widget\n", "import matplotlib.pyplot as plt\n", "\n", "import numpy as np\n", @@ -118,3987 +118,84 @@ "metadata": {}, "outputs": [ { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\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", - " fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\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", - " img.type = 'image/png';\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://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", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", - " * https://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", - " }\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", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\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", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '';\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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\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", - "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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Max color value in the raw image: 1.0538197\n" - ] - } - ], - "source": [ - "plt.figure(1)\n", - "raw = plt.imshow((1/np.amax(rt._raw_rgba[:,:,:3])) * rt._raw_rgba[:,:,:3]) # skip alpha in scaling (constant 1.0)\n", - "print(\"Max color value in the raw image:\", np.amax(rt._raw_rgba[:,:,:3]))\n", - "plt.tight_layout()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Hit info for each pixel is stored in `rt._hit_pos` buffer. First three values are the 3D hit coordinates, the 4-th value is the hit distance to the camera plane, displayed below:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\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", - " fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\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", - " img.type = 'image/png';\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://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", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", - " * https://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", - " }\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", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\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", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '';\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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\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", - "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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Distance range: 95.32415 115.87101\n" - ] - } - ], - "source": [ - "plt.figure(2)\n", - "d = rt._hit_pos[:,:,3] # make 2D array from the hit distance values\n", - "d0 = np.amin(d)\n", - "d1 = np.amax(d[d<1000]) # skip background pixels, where the distance to the camera plane is a very large value \n", - "dist = plt.imshow(d, vmin=d0, vmax=d1)\n", - "plt.tight_layout()\n", - "print(\"Distance range:\", d0, d1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Geometry info is stored in `rt._geo_id` buffer. There are two np.uint32 values encoding the mesh or data set handle, the face or primitive index and the vertex id in case of meshes. The object handle and vertex id (if present) are encoded in the fist value as `(vtx_id << 30) | handle`; `vtx_id` is the index of the triangular face vertex closest to the hit, values are 0, 1 or 2. Background areas are tagged with `0xFFFFFFFF` value in both fields." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\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", - " fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\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", - " img.type = 'image/png';\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://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", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", - " * https://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", - " }\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", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\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", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '';\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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\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", - "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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(3)\n", - "f = rt._geo_id[:,:,1] # select face index values\n", - "f1 = np.amax(f[f < 0xFFFFFFFF]) # skip background\n", - "f0 = np.amin(f)\n", - "faces = plt.imshow(f, vmin=f0, vmax=f1, cmap=plt.get_cmap(\"flag\"))\n", - "plt.tight_layout()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Albedo (surface color) and normal vectors (in camera space) are available only if denoiser is enabled in postprocessing and configured to `DenoiserKind.RgbAlbedoNormal` or `DenoiserKind.RgbAlbedo` (enables albedo buffer only) mode, or when `save_albedo` and/or `save_normal` parameters are set to `True`. When not available, `rt._albedo` and `rt._normals` are `None` values." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\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", - " fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\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", - " img.type = 'image/png';\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://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", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", - " * https://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", - " }\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", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\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", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '';\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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\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", - "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", + "name": "stdout", + "output_type": "stream", + "text": [ + "Max color value in the raw image: 0.950848\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "af3230a3b48e4504b8c6932ccafcd32c", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/Xm4ZddZ34l/17D3PsOdah6l0qxSabTmkmTZWEIylgFjk0BiwKTJrzs8gh/BeRLibh6CCYnTJB3oNJDQhNgEDMYGg41nW7blScayLBlZtmRrrJJqnu58hr3W6j/Wetda+9ySLclSlarO+3meqnvvOXtce9+7v+f7Dks45xwYhmEYhmGYsUGe7ANgGIZhGIZhTiwsABmGYRiGYcYMFoAMwzAMwzBjBgtAhmEYhmGYMYMFIMMwDMMwzJjBApBhGIZhGGbMYAHIMAzDMAwzZrAAZBiGYRiGGTNYADIMwzAMw4wZLAAZhmEYhmHGDBaADMMwDMMwYwYLQIZhGIZhmDGDBSDDMAzDMMyYwQKQYRiGYRhmzGAByDAMwzAMM2awAGQYhmEYhhkzWAAyDMMwDMOMGSwAGYZhGIZhxgwWgAzDMAzDMGMGC0CGYRiGYZgxgwUgwzAMwzDMmMECkGEYhmEYZsxgAcgwDMMwDDNmsABkGIZhGIYZM1gAMgzDMAzDjBksABmGYRiGYcYMFoAMwzAMwzBjBgtAhmEYhmGYMYMFIMMwDMMwzJjBApBhGIZhGGbMYAHIMAzDMAwzZrAAZBiGYRiGGTNYADIMwzAMw4wZLAAZhmEYhmHGDBaADMMwDMMwYwYLQIZhGIZhmDGDBSDDMAzDMMyYwQKQYRiGYRhmzGAByDAMwzAMM2awAGQYhmEYhhkzWAAyDMMwDMOMGSwAGYZhGIZhxgwWgAzDMAzDMGMGC0CGYRiGYZgxgwUgwzAMwzDMmMECkGEYhmEYZsxgAcgwDMMwDDNmsABkGIZhGIYZM1gAMgzDMAzDjBksABmGYRiGYcYMFoAMwzAMwzBjBgtAhmEYhmGYMYMFIMMwDMMwzJjBApBhGIZhGGbMYAHIMAzDMAwzZrAAZBiGYRiGGTNYADIMwzAMw4wZLAAZhmEYhmHGDBaADMMwDMMwYwYLQIZhGIZhmDGDBSDDMAzDMMyYwQKQYRiGYRhmzGAByDAMwzAMM2awAGQYhmEYhhkzWAAyDMMwDMOMGSwAGYZhGIZhxgwWgAzDMAzDMGMGC0CGYRiGYZgxgwUgwzAMwzDMmMECkGEYhmEYZsxgAcgwDMMwDDNmsABkGIZhGIYZM1gAMgzDMAzDjBksABmGYRiGYcYMFoAMwzAMwzBjxiknAH/v934PZ511FlqtFq677jp85StfOdmHxDAMwzAMc0pxSgnAv/iLv8Bb3/pW/Jt/82/wta99DZdffjluv/12HDhw4GQfGsMwDMMwzCmDcM65k30Qz5XrrrsO11xzDX73d38XAGCtxRlnnIFf/MVfxL/+1//6JB8dwzAMwzDMqcEp4wAOBgPcd999uPXWW+NrUkrceuutuOeee07ikTEMwzAMw5xa6JN9AM+VQ4cOwRiDDRs2NF7fsGEDHn744eOu0+/30e/348/WWhw5cgRr1qyBEOIlPV6GYRiGYZiXCucc5ufnsXnzZkj5/P28U0YAvhDe8Y534O1vf/vJPgyGYRiGYZiXhN27d2Pr1q3Pe71TJgS8du1aKKWwf//+xuv79+/Hxo0bj7vO2972NszOzsZ/u3btOhGHyjAMwzAMc0KYnJx8QeudMgKwLEtcddVVuOuuu+Jr1lrcdddd2Llz53HXqaoKU1NT8d/09PSJOlyGYRiGYZiXnBea0nZKhYDf+ta34i1veQuuvvpqXHvttfid3/kdLC4u4p/8k39ysg+NYRiGYRjmlOGUEoA/8RM/gYMHD+LXfu3XsG/fPlxxxRX42Mc+tqIwhGEYhmEYhnl2Tqk+gN8vc3NzHAZmGIZhGOa0YXZ2FlNTU897vVMmB5BhGIZhGIZ5cWAByDAMwzAMM2awAGQYhmEYhhkzWAAyDMMwDMOMGSwAGYZhGIZhxgwWgAzDMAzDMGMGC0CGYRiGYZgxgwUgwzAMwzDMmMECkGEYhmEYZsxgAcgwDMMwDDNmsABkGIZhGIYZM1gAMgzDMAzDjBksABmGYRiGYcYMFoAMwzAMwzBjBgtAhmEYhmGYMYMFIMMwDMMwzJjBApBhGIZhGGbMYAHIMAzDMAwzZrAAZBiGYRiGGTNYADIMwzAMw4wZLAAZhmEYhmHGDBaADMMwDMMwYwYLQIZhGIZhmDGDBSDDMAzDMMyYwQKQYRiGYRhmzGAByDAMwzAMM2awAGQYhmEYhhkzWAAyDMMwDMOMGSwAGYZhGIZhxgwWgAzDMAzDMGMGC0CGYRiGYZgxgwUgwzAMwzDMmMECkGEYhmEYZsxgAcgwDMMwDDNmsABkGIZhGIYZM1gAMgzDMAzDjBksABmGYRiGYcYMFoAMwzAMwzBjBgtAhmEYhmGYMYMFIMMwDMMwzJjBApBhGIZhGGbMYAHIMAzDMAwzZrAAZBiGYRiGGTNYADIMwzAMw4wZ+mQfAMMwzGmFkJBSwjkHZy0Ad7KPiGEYZgUsABmGYZ4rUkGVbZStCej2BFqTqzG9dhNk0UFZaJRaQxUVqu4UjBnC9hYgzBDWGpi6xuzB3Zg/sh+Lc0dQDwcY9pdhTH2yz4phmDGEBSDDMMyzIqBaXVQzmzCx6VxMbjgLq9duRqvdRasqUeoCpZbQUqIqJCqtIIWAkgJCCighIAQg4H1AKQBnDYaDPvq9JcwdPYS9Tz+BPU88jEN7n8Ti/DFYFoQMw5wAhHNubOITc3NzmJ6ePtmHwTDMyxxZdlCtPQPdMy7BzNaLMDOzBlOtEq1CoyokCim98FMChZIolIRWEoVWEAKQQkCS+BMCAv6rkgJKScA5WOfgnAOcg7EWiwtzeOap7+DhB+7BE99+EPOzR0/2MDAMcwowOzuLqamp573eCSkCecc73oFrrrkGk5OTWL9+Pd7whjfgkUceaSzT6/Vw5513Ys2aNZiYmMCb3vQm7N+/v7HMrl27cMcdd6DT6WD9+vX4l//yX6Ku+dMywzAvHnpyHTa85p9iyy3/P2y99GZs2bgZm2e6WD/VxsaZNtZMtLBqosJUp8Rku8REq0S3VaBTFehUOnwt0G0V6LbL+HWiXaLTKtAqNdqtApOdClPdFqYm2piZ6mLr5k3YeeOr8JZ/9i/x///f/yMuu+qGkz0UDMOcxpwQAXj33XfjzjvvxJe//GV88pOfxHA4xG233YbFxcW4zC//8i/jb//2b/G+970Pd999N/bs2YM3vvGN8X1jDO644w4MBgN86Utfwh//8R/jXe96F37t137tRJwCwzBjgCw7WHvdGzG54SxMtUrMVAVWtQvMdEpMtgq0tEKn1OiUGhMtL/LalUar9MKu0ApVoVEWClWpUWr/tVVqVKVCp1WiVRXotiu0qxKddomJIASnJ9qYnmhjzcwkLjj/PPyTf/bLOO/Ci0/2kDAMc5pyUkLABw8exPr163H33Xfj5ptvxuzsLNatW4c/+7M/w4//+I8DAB5++GFcdNFFuOeee3D99dfjox/9KF7/+tdjz5492LBhAwDgv/23/4Zf+ZVfwcGDB1GW5ffcL4eAGYb5bkxtvwnrrv5RTLVKrO2UWNUu0Ck1qkKh1AqF9mFerSSUFJCU5ycFlPRh4BgCln4Z/7N/XWsFKQUAWsaHhAulIKQAHCClDxkDDl+79x78p9/839Hv907msDAM8zLmZR0CHmV2dhYAsHr1agDAfffdh+FwiFtvvTUus337dpx55pm45557AAD33HMPLr300ij+AOD222/H3NwcHnrooRN49AzDnI6oqoM151+HQmtMlhqr2gW6lUa7VCG0q7Mwr45h3k6rRJfCwOHnDv3cLjHRaWGiW6HbrtBpFei2Su/2TXrHb7LTQrdd+ZDwRAtT3RYmOhUmOi1ce/1OXHrFVSd7aBiGOQ054VXA1lr883/+z3HjjTfikksuAQDs27cPZVliZmamseyGDRuwb9++uEwu/uh9eu949Pt99Pv9+PPc3NyLdRoMw5xmtNedhWJ6g6/UdQ6AQ6uQ6LY0qkLH0C45gL7gwzt4WpH7F1w9KcN7AlopAL4IRCvpl9cScEChFaxzYb3gGMLv3zqHdqvEjosvxVf/7osndWwYhjn9OOEC8M4778Q3vvENfOELX3jJ9/WOd7wDb3/721/y/TAMc+rjenMo3RBAgaF18MkxAoVS6FRFFH9VyPVTUqKqdAzlauVfQwgBaxKI0os7KUV6HYhhYykFhJAxNAwAzjrUxmC518PhQwdO0ogwDHM6c0JDwL/wC7+AD33oQ/jMZz6DrVu3xtc3btyIwWCAY8eONZbfv38/Nm7cGJcZrQqmn2mZUd72trdhdnY2/tu9e/eLeDYMw5xOLB3dj6VDu6GcgYSFCenRQgBKChRaoSw0WlXhCzsqX+TRqgq0Sv9aVWlMdCp02z4M7L+vMNltYbLbxkS3jW6nhU7bh3jbrRKtqkS7VaIq/XbKQkEpLyrnjh3D1+//6kkeGYZhTkdOiAB0zuEXfuEX8Nd//df49Kc/jbPPPrvx/lVXXYWiKHDXXXfF1x555BHs2rULO3fuBADs3LkTDz74IA4cSJ+GP/nJT2Jqago7duw47n6rqsLU1FTjH8MwzPFwZoilPQ9DexMPw9pgWBsYY2GsBWBj4YdWElVZoNDeFSwKjbIoUBYahdZotSp02hU67RYmuu0g9IqRr/TPi0cqIBEQgHOo6xoP3H8f9u7dc7KHhmGY05ATEgK+88478Wd/9mf4wAc+gMnJyZizNz09jXa7jenpafzcz/0c3vrWt2L16tWYmprCL/7iL2Lnzp24/vrrAQC33XYbduzYgZ/+6Z/Gb/3Wb2Hfvn341V/9Vdx5552oqupEnAbDMKc5c08/jK1X3AJZahhrsTwYYlBrDIcKplQAHAScz9OzFpB5mBdQIY/PVwnLlPOnJJwDlPLzBAM+xExRX2oK7QDUxqA/rLGwuIxPfOzDMNzrlGGYl4ATIgD/63/9rwCAV7/61Y3X3/nOd+Jnf/ZnAQC//du/DSkl3vSmN6Hf7+P222/H7//+78dllVL40Ic+hJ//+Z/Hzp070e128Za3vAW/8Ru/cSJOgWGYMWDp2AHMPfl1TO7YCWM1BrVBb1CjWxWoa4PBcAitQu6eFZBWwBoDK4BCSwAW1vm+pUIAqB0ALxzhHOAkbCgQsc5CCgnnLOC88LPWwRiDXm+AL3/pC/javV8+uQPCMMxpC08FxzAMk1FNzODyH/qnWLtpGzqlxnSnxHS3hZlu6Rs4hzYvvijEN3mWUqAofBhXSl8hLKVAoTUQqn+llBDwff4cEApB/GvDYQ1jfai5P6jx2KOP4d+87ZfxxOOPntzBYBjmZc8L7QN4wquAGYZhXs70F47hO198P7qv/V9QzqzG8sCg1DUqLaGVgoCI8/t6Y8+h1BLOORjll3HWQikFax2kFLDWh4qpSTR9Dwgv/IyFtRZ1bTA3P48/fdcfsvhjGOYlhQUgwzDMCEf3PoFH7/04Lr35x1CqDobGYFhbDGrj+/UNhiiUhIODEEDfWRjroLXP9bPOQjuHwdChKDSUddH9E175BQGIIP58DuBgOMQnP/5RfPauj528k2cYZixgAcgwDDOKc9jzrb/Dui3n4MztV2Opr1CoIYpCpSnc5BCV0z4f0Pkef8YAAgZw3hGUQmJYGzjroLWCcyLkB4bJ3kLDZxsqjR979Dv4k//xBxgMBid5ABiGOd05KVPBMQzDvNyxpsbDX/4I5o8dQh0cwN5giNpYDGuDwbBGbbzz55x38kjQOcCHh0Pxh3UuhnnjMmG2EYTvjxw5gj/8r/8PDh3c/z2OjGEY5vuHHUCGYU57fM6dhCoKaF2iLEsopVG2WpicnMHUzAyKokCrVWHDxi2YnlmNiYlJaK3h2qvw2GGL5WGNYiDQKjQKLVPrFufDuwghXWrt4gBoGXIC4/suzvjhxaBvLGOdw8LCIna+6nZc8oqdWFpaxNEjh7G4MIder4e5Y/77ejiEMTX6vR4Ggz5MPYR1SUQyDMM8V1gAMgxzeiAkpNJQZRtVZwLtVgeTq9dhy9azsGr9ZkxOdDE9NY1V0xOYmZpCq1WhqkpUpW/ILKUv0CgKDWNqOOdFY10PUX9zD57aP4d2YdEbGiglURYa1iEKLylkmtNXSUjhc/4gAC0FVJgT2C/rW8kY6/P/+v0BdNnCddfvhHXCC0NnIYQXmsPhEM75IhEpLBYXlzA/N4/5hQX0lpextLSAI4cO4PDB/di/92ksLMxhaWEeS4vzsMbAGO4lyDBMExaADMOcOggBWbQgdAXdmYburkI1MQ01uR5ldxqrZlahbHWwemoSE60Kk60CEy2NUgu0qxITrQKT7RKtVol2VUBLQEoHW/fC/L8OcL4q1wThZIzBlB5iUBssDRSq0qJtARvivKm4gyp8vdnn5/xNcwQL4ef/FUDMAYQQcM5gfn4Oy0uLEHCAUIAQMKYOgrSE9huHEgoOCtPTM5icnALgoLX2LWaEF5nGWCws9TA3N4+lxTkcPXIET+96Ant2P4H5uWOYnzuGuWNHMBj0Megtw1p7sq4mwzAnERaADMO8PBESsqig2pMoptajnNmIat1Z0BOrIcuOF1XKF2EICCgYaAVoBfQHA2g3BGoFNxDoVgpuWML2JfqLvk9fqypQaN+fzxoLOAMnJJwT3vUbDmAdMBgMsDSw6NcCy0OFTm1RGwNjTAjh+pk8lJJQWgVB5t1DrVQUhyp8D8CHbAGUhW8Svby0gF5vCdYCcBbO2Vgs4pyFVAWUEJBaQQgVwswWzgn04R1DQEAE91FAYXKyi+mpSWzafAZ2XHI5HLxAXe710ev1sLiwgEMH9+HAvqfxxKPfxt5nnsTc0UPoLy/BWnNSLjnDMCcOFoAMw7wskEWFqjuN7qoNqFZtRrVmK/TkOphyAlIXkMLPlmHq2oskM4QwAz+jhpQwQqAPC6kFpHTo1wKilhC1hhkA7VJhWGj0tReAs/OAc76tC1SF5aHFwDgYCwxqh6VawPgYL4wTWBo6aFVjWFsMjfVupPDtXJT0QtILPj8NXFno2Axaax/+pQpiCMAaXwxSG4evP3EUC8t9/74ACgVoYVFqASWAUg3RrhTssvF5ic75GUSEhhB+BhLjBAT89n1OogyC1redFkJCFwXggHarQqvVwuo1a3D+9kux81WvRb/fx9yxozh4YC/27n4Mux7/Dg4e2IP5Y4cx6Pc4x5BhTjNYADIMc1LQRYnJNRux8cwLsPmMczC5bivK7gyc1JgbWCz1ayz1+1geDDGsB6hNDWuGcKaGcBYSDtYMfZ4cQuhVOPSX+5CFwpIUWC4qtNsdlMJA9RUGrkYtK/SdwMApDK0KLt4QFgJwgAohXBmEnQCghIC1NWrrRZuf3UOhKAqURQGtFbRWcd5f/72CDs2jC60ACCjl17PWwWoHaxyc66NWHRwb2FA5DMA5SEFzDwOFEv41KSFgoCWgpUMpB6iUQyGd37ZwXpRKBWstpNKo6xrOGiAUwgipACFDzmQRr4cQEqtXr8KGjRtx8WVXwhiDhcVlLMwdw8H9z2Df00/giUe/hb27H0dvaYEFIcOc4rAAZBjmxCAEqnYXm7edj3MvvATbL74C6zduhVAay70+lns9LCz3Mb88APrLGCwPMej3MegPYc0QxhjA+KpXZ20Ij3pBJqSElBq2bGFQtNFTCkJpWFFA1JXPtatFWKd5TDQvm5+gjYp1XRBMgIRAIYFCCBjn96mlgFYizuqhlRd8VByi6fuQn+fFoO8h6JyDLiSsdaidQVVqXL19Cz791cdio+n8IIWAP0YJuHD8AwcMLbBsAQwdpHDQ0sGZGloJFNJCOAstlqElIEwfwvnCFqgiCEEdti/DuQpIqQCpoXUBB39+M6tWY8269dhx6ZUw1mJh7hieePRbePgb9+PpJx7B3NFDXGTCMKcgLAAZhnnJEFKhOzmNbeduxyVX3oDLLrsMmzZtRKkllvs15heXsbi4iOHyPPrLfSws9LDYG2BxYRm93gD1YADnJIa9ZcDWMHXtHTg7hGzPQLcmUZYtoOxA6gJWSAACvqwhNFvOjmeFaUWFHKEdixChqje4gM4BFhbWCUglUWiJSksUSsaCDykFhBQhfEvFGNK7f1oFYUUOpZ//14XWLRBAqypw9qbVuPDMY3hy71EMhsYLNSAWljiHuI84tiJ2nkmoEkJKDIMw9g0KLSRq2LoH5QaQ/WUgtK5RSnhHMLiLfp5iBSe1F9QOcJBeYCsFpTRU2cGFl12Hiy6/DkuLi9i/dzceefBePPmdhzB75CD6vaUX7f5hGOalgwUgwzAvOu2JaVxw2XW4ZufNuHTHRdi0cR20knDWoNfrY3FxEcu9Hur+AL3FeSzMz2NxuY+jR2cxv9TH0qBGfzBEb2jQHwxQ95egqy6KybUoWh2U7QmoogUlvcAyDqidC4IlE32h2CK+Rk2aM5KIcsH4E5Cg/n7OO3wCqJRAp1DoVEUoIPEun5Je+OVhYAjvrLlQHCJDoQpCmBkQkEpBWC+8up0Kl56zEWsm29h/ZB6zi330+kNYBxhrAQhoKaJIFcEWlELE8yGjUEmJYW2hg5h1TgEoIHULgJ+mbjjoY7i8gP7CLJSdgx32AGvQ7nRQFKWvRJYKkAWEKrxglApCKsjwT2kNqRQ2bj0HG7eei5tfazB37Ai+88378Z1v3IsDe3Zh0F9+Ce4uhmFeDIQbo0SOubk5TE9Pn+zDYJjTEyExtXYTLr/uNfiBH3gNLjr/HLSrwufODQdYWl7GYDBEr9fHwuIiFhcXsbi0jGMLPRyeW8Lc/AIOHjmMxYV51IMeaigUnWlUqzahmliDdncSZVH4il+Z3D0SPjb8JRMALIL5Ff68meCI1dbBBGPMBcGXtuEaDqH0nVdQCmCy0phpF1g/2cL66Q7WTLcx2WlhsluhXZVotwq0WyVKrVEUGmWhQi9AAa11/N4htYCpaxP7AC4t97C41MfCUh+Ly33Mzi/j2MIylnu+/UwdpoozoWMLbUMGMeiCg+ecgwl5iuRgOqRehSsuGQApgXrQx+LsQRza/zSOHdoLZ2q0O11UrQ46nQ6KqgOpNIQqohCknodOaEBIKF1A6QJFUUDB4tC+3fj6330Gjz/ydSzMHnmx7jKGYUaYnZ3F1NTU816PBSDDMN8XUhfYuO1CXHPTrbhh5404a6sP8Q4GPfR7y1hcWsZwMPCtR3p99JaXMLuwjOWlJczOzWLPvgPYt28Plnt9GN1GNbkGE+vORHvVJlStDgoloanPXahwlYL66cUobnTCmkLOu4LUs6+2QQxaBwf/1cILRr+cX1EJgZaWKKRAt1SYamlMdyqs6paY7rYw1a3QbVdoVwU6rQLtVoWy8A5gu1VCSRndQCFEqv4FAIg4C4gNzZ0HwxrD2njBNxhiWBvMLficyMGw9v9qi2HtexQmUefbxCglUdfWC96Rv+h+2SCMnXcTCQoj5yJ4MBhg/thhHDqwB3t2P47Fw09D6grTq9djemYVOp0J6KLwoWFVorYOUKXPGVReBJZlicluG2WhsTR/DA/e+zl882ufx9zRQ756mWGYFw0WgM8BFoAM8+KhyxbOOHcHbvrBH8UN11+HVZNtFNLPWtHrD7C8tIjl/hALC/PoLy9hWA9wbHYBR44dw9Ejh7F3/34cPnIEtppGMb0RMxvPQWtyNYqiRKlkaK0iYmsUKQQkgliJ066JGNoFmm5XdL/Ca0L4ti61dV6AhfMwzotAGSSQkgKFEGgVCt1KYaIq0Kk0Jtsluu0S7VJ70RdCwa2qQLsqobVCqSWKQseiDxVmAKE+gAJ+CjgTBKA/JgtTWwyG3u0bDr0gXO4NMKwNev0ataG5h12cl5gKYIyxsFHguSAsSQQHkRgU8vHcwNEnQMo7dOgPhlhemsfe3Y9j91OP4tD+Z2CtxdTkJKYmp9CdXgNRdkOoWMPAu4NloVGWLbSqEp1OF1prDHoLeOpb9+Ghr34WB/fthjXca5BhXgxYAD4HWAAyzIuBwOozLsRtP/pmvGrnNVgz04USviXL0tISFheXsLS8jOXw79jRw5ifn8PevXvxzN69ODY7h6EFqnVnY2LzdnRmNqDQRRB9IuTU+f53PtSb3D6ZzKsgbUSqkhVJ3JDYA0j8+a8mKEIHHyqlUKqg6dqkhJYCpRboVgVaWqJVav+vCqKv1KgKharUKLT/2ip9K5hCKxSFglYShfYp1lRcQcclgntJIpC+1rUJQs9gOKzRD86fMV7sLfeHcA4Y1gbWOgyN9WLSUF6jC30LEUPLURwLRGFIgyekgKO2NjSmDvFYpRBRYAoB1HWNxYV57H7qMXzzgS/hyMF9EEqjMzGF6VVroTurIHUJWbZRFiXKQqFsddFqtVGUFaqqhaIoADPA3sf+Hl/6+Pswd+zQi353Msy4wQLwOcACkGG+P1TVwWU33o4fecM/xI5ztqBUwGDQx9LSEnrLy1ju9zE7t4CFhQUcPHQQTz+9G3uffhJHjhxF3zi0p9agu+UilGvORKs7g0JplEqiUMLPdBFEn0BWNYusIhbJ1RNAzAWk9xsiJ7DyL5yLYU9yFrWSUXBWhUIZ3DwfzhWotEJZ+NlDSh0EXqFQFRpFoVDoJAZF2F5RaFjnUIRKYF9UIqIYo1gtiUDv5LnoAFrrQ751baJjWRsbRKEvUqmNgbEuhpOtSUUuxtggchGWSaFxBwcpJKQEhrUPyZLgS2Pjx9ZYGyqK/aA769DrLeOZXY/hoa9/Bbt3PwlraggpUba6aE+uRmdmPYqqjU67jVarA111kgBUBSbbLQznD+DvPvk+PPHI3/PMIwzzfcAC8DnAApBhXigCUxvPwqt++Kdx+6tvxIaZDuBqLC8tYmlxEXPzC1hcXMT8wgL2HzyEb33rm9izbx/6A9+/r5xcjektF2Jy03kQZQeFUiikF36FlJDBgcvz/CjUS0Ik1NDS4ST3D83vXUxoI4ePcuX8nzopBJRELJyQYZ9aegFYFtrnHYaGzqWWKIPIK4M49P3+/PdSSlSVn6pNaRlnBVGhPQw1gUZ2/OTMSSlRhynfBsMg9Jzz3zvv4lnrhZ5zXgD6aei8aKP36PwoNEzhYeccrA25fzEE7AUgIYUMlcZoiMR4EUCC0bej8du2/m1r8MzTu/DQ1+/FY499C8sL877yuWyju2o9Zlavhy5bKDuTaLU6aLdaKNsT0GUbrVYLHeXwnfs/i7/79Ae4fQzDvEBYAD4HWAAyzPNHlS2ce+UP4Id/7Cdx6blb0CoE6uEAg/4SZmfnsLCwgGOzc3j0se/gsccew6Fj81gaGNh6gHJ6PabOuBgzG7ahqNrQUoZ/AoWSUKGXngrVCFTcQd9L+BAqGoIlOYJh0UYol8QQ9elzLoV6ZRCEKhRl0LRpXrTBu3tSBOGnwlRufuo4JWV0+Xx1r0yVvirNAiKjkA3vSxGmifOFGg6+NYy1LubtkdDLRZ93+CyUlBgM61jhSwLQwQtAADFMTO5nKhRBEIi0rB9n/32ogg5uZFY3k/VCTMKaQsrxkeFSiHloDA7u34tvPfQAHv7G17C4tABnDKRS6K5aj4nVG9GdXIWyamNychplZxK6KKGLFqbaJRb3P4YvfeK92LPrMZ5hhGGeJywAnwMsABnm+aG7q3DFrT+JN97xWpy9cRpmOEA9WMLy0iKOzs7h2JEjeOyJJ/HNb34D+w8dxrA2gFQoWl1MbLkIU2deAl21UQYB1NIqhlqVCC6ZoKnXUsNkoFnpCyDmzuUuILlSUiCrsm2GjemrDA2anbVxX7HAJDh2mpo8B5GqM/GntURJjZ2DACwKndrSCMTlvH7y+1PKl5dIJUMY2DeDttZCQMA6L/Jqk7l3QQBSHqMvHHFB2Lko8KjVSx3yAaMgDFUhUVhmRS/k4sViGQRRFyzX3Cm1zsVx9SITDadVShH36x1HiwP7nsFXv/w5fPtbD6A/qEPvQIHO9DrMrN2EVWs3oGhPotPuomh14HQL3arEuq7Ag1/6GD7/qQ/4+Z4ZhnlOvFAByI2gGYY5LsXMRlxw28/h1dddjjPXT2PQX0ZvaRGLC/OYX5jHrl27cf/992HXM3sw7Pd8fz0IrNp8Ptaf9wqIibWwUCiV9Hl+JKqoyCMTYBT6Bbw4pLYl1PQ4df1DaKrsUSpNmyZlcv7IYYuzdQTVopSAc6IhAFVwAvOqYx0KUkqtQ1Pn0G8vHIajvLphDSkkXHD/hrWJzZgtLGAQ8+qESe1PpAwh3CC8amHhQr4eiSkpJARcbFvjz08E5zA0bXGIeX5SSjh4Maa1HxcfHPZNqQV8SHpY+1fJBfRCz4tMhGUi0ezzrmWeu0jvk3vqQ+4KW8/Yho0bfgJPXnYVPv2JD+LQwb1wRmD+6AEsLxzD8vwRrN50Nkw9RHvYQ9mZxhIc5soJ3PLD/xiTkxP46F+/GzWLQIZ5SWEByDDMCmTVxebr34RrL96OC7auhq0HWF5cwNzsMRw4eBAPfP3reOhb38LC4oKXImaIorsK6y+4FtNbLoARBYTQqJTvpaelDHl1vtjDi7/k+hVKAkAQPpkLKLN+fy7NgqGkbwBIU6sBmXAMjmJRqNgrrypUFGJ+cS/yQPujCmAtozAtCxW3K0LDQWMdlAx9BS28GJTBuYM/n7o2sNKh0N7V86XHKdwMAFKJGJJ1zreeseFYqZildjb2CyQ3j1rH+LnrvAj0hdLeUZQhD7E2Bs4m9y7MjQdnHVQQ0Fa4GPiVFhDhGgCI5ysprJzH20cmoMsLRijRsNAK23dcig2bNuPzn/0EHvjalwFjYQY9zB18Gv2lBazedBb602vQrWvoTo2hFZhoV7j5th/DoQN7cc/dn3hhNy/DMM8JFoAMwzQREusuvw0X77gcl521Fp1SYmn+GI4ePYzdu3fjvvvvx7cfexyDwdBXfzqHNZvPxYaLboDrrIFVOsv1k6G9iojunw//JufPhzG9WKm0gjEutnyhtikU55VIbhxC2FeG90UUhaHIA77AAfAZblWhYELYlbafWrT4XL+wMCAAY1wM5wJJFMWmyqGaGM4LyLo2ad5f66L4pH1Zm3LryJojJy/UccA572ramNPnD0hKGR0xCt+mUG6zeIMcQqlkFHh5KJzy9pQQcWYRPx1wc0YRSMBZQDjfR5DGLZqAYfwdTcEChOnvqNm0wJo1a/Ha170Ba9asxZfu/niYDaZGf3gIy8uLmJpehfXbLsSkKiCLFp4+Mo81ky3c8cafxlOPfxt7dj/5It3UDMOMwgKQYZgG3TMuwdZLb8IlW2ewqquxMD+LIwcP4sGHHsK9X70X+/fvD9OpeTG1+YIrsPaC62B0B0L4dipSSGghUFCxR/hKrh+5alQAEpsPW5fyAkMRiBd2KacvOYRe6ImQB6hDjl3utuVTptngfsX9h/w1yukDUjhYilQsQduyznnXkA4kyCtnLUw4XhvFUBBe8bu8eCUdv3O+x54NhSqU/0drmRDGHgyT+EO2TdqBiMeURKZ3FeGFHLwAjaXAQkTRTfmH5IzGTfuLE3+mcwuGY1zGxZBxKLZxqe+hdgJadrHzhlehOzmDuz/1IRw+cghCSNTDAQ7vfxq93jLOvBBYU2j0pMS+Ywu49KwN+Edv+Wf43f/46+j3e9/znmUY5vnDApBhmIieWofVr/ghdFotTLQKLC8t4NjhA3jg7x/A5+/+DJZ6A1hnYQZ9qKLCmZffjHVnXQyjKjgoaCGCABRxCjdy/6hQIwm+1MePnL74M5JQSoLJRbGWV/3Sur4oQTbWTYUlFC6VKLT0zY2BKAjTPlKbFCllyP8TUZwZS3PsmpgTKKWAMTY6iaTfHGwjWGoF5R5SIUYqzPDn7AWlcSY7FgfI5ELS8cGF2T5sCs+SUSqCALcub/IsIITLnLs0BgDlRtKSgCNnNoyZdS6KbeoFSONK+Yp5X0PShA4uXPsKF1y4A7o1gc987P04tP8ZCFXAOYul2UN4+tFvoN2dRLfsYGF5COscLrniWlz/ytfg7k995HnexQzDPBfk916EYZixQCqsuuKHUExvBOAF2/LiAh597DF8/gtfRG9Q+1krjIWUEuvOvgTrzr4MA1HCwuf6KYlQQRty/qRAobLCj0bxRxJ9yfVL1br0eqwapt56JO5kEJQUYqZ1QusVcvNIbGqlYqGICNuR2TJp/wg5gVQkQn8m/bLeQAvHQe5aVrELUGuXMN9vKOqwzqEO08Dls4BQ7z+TtX8BfFGGdS42gs6bRVM+Y3QiM4VIY0quYhovEULeMrp/OlYpNwty6NpQCF0KxHGldXzldOh7GN4vC98wuyj8WGspIZVEWRRYPT2Jc87ahouv/QGIogVTDwGpIIRCb+EY9j/9JHq9fgwtt6oSb/rJn8WmLWecgJufYcYPFoAMwwAAOpsvRPeMiwHhmzI7Bxw+chSfvfszWJg9imFdox70Ya1BZ9VGbLrwGhihoaXyrh78HxQtEGb2QBJ7Mgv7wm9fx9k/QuVtFBRhRhDlmyiTSKNwpVYkDGUUaPkUcjoITxIyUcBlIkllAifm7ZEgVTIcZ3IOY6GGSdW7lGtHzZZJ7FFPPkqWE3mYNhyGMRa1tcHJ8/mGtE3nXGy5kiK2waGM1qD/3uctNlvnAEBtXKOnogjZhlEQBzEIQcU4dK1kNtYiTmsns56GVEBDVdPUMDuJRn+uOjTMLpQXhFXp51M+88yzsP7si7O2NBb1cIiDux/B/OxhKOH7KhaFxpatZ+AN/+CnoZR6cW92hmFYADIMA4iiwsylPwipSggApfJVpX/3lS9j3zO7YIZ92HoQxJLClu3XQHemo9ukhYAWCNO6pUbPUaxlhSB5uxWlgoBQ6bVc7KmRr1EMZqKSQssk5IDcxUqOmJCZwxWESx5Cphpdas1C4VPvHMro9FFvPVrWBaXmXTwbp2YDgiAMDmBtfKsX7+L5MKpDVhgCxK8k+uJLlEzosuVGXEdqBJ0czTycjigeSahplZw+kY9t7p6G1Qotg1CXqEodxCBin0NyXr07qKILrLWCVDKOYVEUWD01gbN3XIP2zPpY6GKGfdTL85jb/1S8NoWWqMoCN9z8Gpx34Y4X6U5nGIZgAcgwDKbPfgU6685M88hai7nFZRw6eBACDlIXXgCZGqu3noc1m7ZBwtcI+N57LlT5NnP+lEjhX52JC3KQctcvuoJB7AmEIogYis3CskGAJDETppNTKUxMYUrvbslY6CHC1zhbCJJIyptJA96t6w9rn/cYXDnKD0zTrSX3z6/jlVqeg0chWppX12ZfY1Nml+bhFSLN5Uu5ftb5ti3WuugMulAk4hHxfHLHNRfU/mc/5jQxiHNohM5TTmQmGMO4UaV0Cv2SkCaBHgp+tIJSSZwDPjXAOoFWWWBqYgKrtu2AcA627vuiFGuhtcKmVRPotsso+KempvD6N/wEtOaUdYZ5MeHfKIZ5qQjhRWQJ8rETXLR18h+zKs6RZru+tYaDs6mZ8IuFrDqY2fEqxIQ2AEeXa+ybHeCyq1+JJ7/zEAbDoV9WSnQm10AVLcAJOHLXBLl0XhTm8/qmvL2VzlJqspzEHAmY2OePwp9ZqJMKHQREHEYSZV7kNKeMc0CYBcRl26NtiRVfo6QS6Wdf9BGaMIe+fy60rKH1qFGyIXUF6mXoizBEtmMXiieoVQuJy7zttRD0ur930py8Lm7bWBv3pbVvdeNCKLkhaGmDdEwOcb8kPqODCiruSK1faBo9OleqlKa2O9RSxxibxizkTBpYDHo1BnWNxd4Ay8bBCeXnKLY1rDGoZtbh8qtvwnlb12J6sg0dwr5SSFx17Q24YPsl+OY3HjjuPcwwzPOHBSDDvACEVJC6gipbUGULZWcKZasLXbbQWbURZdVC1e5CV10UZQUZXCMhNQAHrVQQh+GBDHJIXJzWizSiMTUWFxd9M+blBV8QUNfRTTLGYFgPMFyahxMS9dKsd1UAwBqY/hJgDWzdhxsOvOBwDgIO1hpMnXM19NR65NJyubbYN9/HRRvPweXXvgr33vMZSGfhIKFQe7EgBFzIL1Mi5PMBjVYqIrhvACBHXhdhHZ9z6Jeh131DYxF73CmZhBIJu5VtVZDcrTg7RppVBC6JMRKejYpiJIHupzjzuX0U6nTO98WD8DINLmhm64WOdS7rUxj6Dwb3TqokDsmVCymAsBa+QjfsX4jUEBsihYhJvOYfDvz5yYYw9OPh1bOvyPWhdmNcFN5CCliD1AonuHnUBxBwENaHv2NYOqs4jq1ywvjTeAsRZmcBVQb746+dn8N4uV9jbnmIxYEBTA1hDSAEhC5xyQ0/hJtecTHWr55AqyzCmHvHc2ZmGj/6D34K3/n2NzEcDJ7X7yrDMMeHBSDDfC+EgCo76Kw/C1MbzkJ71Ua0O5NoTaxCu91GVVYoihKtQmcFCs1cNSDNVEHOTEzrCm0znAPq4NxQ6JCqS4fWwRg/LVivthgai76xGBj/fu2c/975fwCic+isgXA2uC3kJBoIW8PUQxSdKVg0W40MncPRXo09sz1cdOWrsfupR3Fo326Y4PrB1pBKBpcTkIJatCDN8BF+pgIKFV/P8u5EaN1CojDs3zcYRqwITb36aByTmyaFiOZWvkzuzCmV9egT+bIiux7pAFIFbSqYqGsTj82LPRFDsXn4FuEaU2iZrnFsykxCME5p5/PgyGWMYWM4BB2XhZetF1aCQsrUey+J1nxMZFB81rrY6oWOjU5XZeOPzPlTKjmeUgg4agODUBEsaGYUCa0QxWPuTlpr0evXWOoPMbs0wJGFZTx1aA7zSz0MhjWU1rA1cNalO3HbzTdh64YZTHZbKIsCNOexEA6F1rjk8itx9jkX4NsPf+M5/NIyDPO9YAHIMMdBqALVzAZ0Vm/GmjMvwqqNZ2N61Vq0qzK6XEpKFEqg1Fn1qkyuFlWguqAS8nAciS1qS1KHnmwU/KVCgmFtMDAWwjgY6VBbBwtfOaqcgwiujKGCApCL5bw7J2SaKm3kHJ3z4VoSEPF1eAHUNxb75/volh3c+IM/jk9/8E9w5PABLM0dBRxtz8W8L6okjWcZ3EEqtqAjSyFRgdhhJbiiQBI7UoY5dV1yl3zVLTlQMoRIXXIkkfL5aJ8yOlTZsSGFhxFrZH0Ooe+PJ+L2nAVql8QfNZuGTIUiPhzunVwaSprFQymV9dOzcf/OOlhJ+/fbjOJJJCeQVqEKXAcX8/ZIKjYELlLYmsQ3EN4XyeWke5byGGPYNjqkIvTzSx9iaL+I25ZRWHohSeedCmB8PmkfR+eXsfvQHA7OLWEwHKIeLAFSY+u5F+B1r/sRXHT2JkxPtlEWRXRIpRCw8NP6zUxP4ZbX/gge/c63YI0B8+IjpIRSGlrrxu8swr1hXahcD+2LjDUh3eDFT01hXnpYADJMQKgC5erNmDzjEkxvuRBr1m/BVLuNbqXRDu0w4lRmVJmqQmuSWEEpYxPcRhUn0msxzys4ML5PHPV9S5WmQ2sBqODOWMDQrBESQ+sAGwogtMDAOtggDFzcq8v2nik8IDYMVuEBm79Law6tw3JtsX+uhw2T6/DqH/4ZfOXzH8XBA/swWDqGqVXrMbQOSjgoZKFZ6QVNoVQUhimPzu+THDsKeSaRlubelVJEwZKHjQXCdGnWu2Fx4rHMRUyuYBLjzdw+0RCIIaibhGJYUIf9IAhWCrUiLpsNGlKuXJoGTsSp0WwIsjvn/DRt1PNPCMjgvLkQTndAEpphn7TfLJUvhcuVBGCjgMxzDf1sJlTxjDgeUso0E0om3EWWP6lUygt1SDOhjB5LvDYCUE6gNga1qdHr15hb7GFuqY/9s0vYe2wJvdpisHAUbm4/Lr7qlfiR1/8Itp97BlZNdVEWGoVWEAIwwvqDMX7kCq1x3Q034QPv+xPseWY3mBeG0gUmJqex5YxtOPv8i7Fly0ZsWLMKrVaFTncCnW4X0zOrQ3/I8CFSAEopP/2jdZhfWMTc/Dzm5+ewuLiMpaVFDIdDzM/NYu/TT+HosWM4sPdpLC0tore8jH5/+SXJX2a+P1gAMmOP0CW6Z1yMVRfegMn1Z2Gy3cJUq8B0pdEuNSotY3WpVnJFeDe1I8mrLYObFFuCuCi6gBQCJQbDGtb5KbkA4afmMgJD4WeYEFKgLBSW+jUc/ENbS4m+SCFj51wm5Fz2NZeg/iUBxB58jTYktKYjEWixNLQ4ujTAdGctXnXHm/GdB7+MfY9/A9XF16OoulAiFQtIOP9P+KpOi2ZfPZ2FFUk4xHUFhWtltEhpHXIBfVWpDGFhGXPcSIDEaypFaHEQihhcCkvHEDn8/vPjkUJAKgFrXLNpNMhtE83rGIX86DE0C03y/DwVZiIJEWQI5+cVBpL4RtxXCnXbkCqQF8eQUKR5iEnckUvq8wvTOEeHVOb5fik/07upfjs0TCpzcKlyOtiLWTg6OEShYXVdG/T6NRaW+ji60MOuQ/P4zv5ZLPRrLPeWgWO7ccfr34Sbd16NjWtn0G2X0FqFvo9ZcwpnIZQXgYVW2LRpE151y+14z5/8UaP5NfPd0a0JrNp6Ac46/xLsvPoVuPm6y7F14xoUGoAzUFIB0jvwlLPrAEipw98WEe83//fJoN8f+vSU2t+9dW0gpMBgUGNpuY/l5SUsLfexZ+9+HNi/B48+/A088ejD2Pf0E1hanD85A8E0EG6Mfovm5uYwPT19sg+DeRlRTK3HhmvfgNVnbMdEVWKy0pisNCZaBVqFQhnEHwnA5jy2oiFIRvvTxehgJhgcUi4gheRs6B1XhzYjtbHxnwMwGBosDw1qY7E4qLE0MOjXFguDGgNjMTQOg5ATmKKA3/vXmgSRDcKRqkxF9r4SQEdLTJcaE5XCZFVgoqWxdHQPjs4tophYA+csCl2gLDSc85WoIGdKyiiKqV2IaIyhr/L004zJOE75LCGIYss/nJxzwQF0DdHl3UMZXTxyWGPeGoWTQU5dqJoN07iR+CGRlPcUFJkg8uJeRRGnsrw3Oi5aTkCkIvAYVhVRrNN55nlzcT/xvyQ082XidZIUgk2zf8T9AU1BhXQvovFecAmRPgDQ2Cop/XzMtH42NjakHsD5gqTh0GAwrNEf1phd6GHvkQU8fmAWTx2ax+ziMowDzltd4ZZXnIcLztqC6ck2qkL7foFSNo7NOgdrbGyHY6zBYFDjiccfx79+6/+GwwcPjN7SzAhldwZnXvFqbNt+NTZv3IRtG2Zw9qYZrJ+w0NKiKjWE8L0aldKQUoEKlZTSEFLFNBKfquLFIKWpGOP/bnkhWKM2Dv1BjWFt0B/U8e9YfzDEcr8GnMHikWfwt+99F77x919jEf8iMTs7i6mpqee9HjuAzFgidInJc6/B2ktfg3Vr1mNVq0C3VGiXGu1SoVXqIAAVtJYNMZPPL0sPw7xQIeWJeXKXKobvHNLUX1JAhWR6Y2zooyYxqC2GtYmicWiajYdTgYgNxSNxj82TzZ/oAZqWLWWkNddzSO1HBsahZyzQ90s6OHRnNuG8DQoLSz3MLy7B2RrWCgipGi1FKBzr9UJ4sEhy+1KeWRR7SHl2pDlIMJMDEYs/YqFHcu/yFjAiK4qg6tkoMJELPBoT72ZJpDl+V7q2ND6+sjd+L5MbRwYZRLonXKzyDfeDlCM5e3QeeZ5ic9/5xSFhK0bGTgf3NHlyaZwb40BiXyRhTJXY1rkQBpbpqwAKrYJDnZxKKVO/QmMslnoDLC73cXhuCfuPLeKRvUfxzNEl1MZgopR4xblb8KpLz8Km9TPotCpUpY4h7Dh+tG0AJmQlQvhEhaLQ2LBpC2545S342/f/OZhnZ3rTubjmtT+FrWecjeluhclWiYl2ibnFPnp9gUrWKFUPph7E30/A/4YrXWJyooNOuw0X2lkJqVEbf/dYB/QGNeraYljXMNZhuV9H8dcbGAxqg/7QYKk3QL+20FLijA3T2L7jEizd9kN4+FsPckX3SYYFIDN26Ml1WHXZD2LNeVdhbaeFtd0SEyHc2yoUqkKhXflcpMYMFSKFfCkXSiAUMoisgW7Yj4sP4gCJB0sFGgJW+j+6xloo6+C0RG9QwxqfbzWsDbSWGIQ5YMmxGxgv+qjZ8IregStohoG19H/EY9sQpKKF6ECFqk/rgH7ti1TU0KBUEkIYOAd02h1MdDro9Xvo9fuxgCLm6klET00KH3amsYlTldH7oSBCS4EQCW+EbyHSFG4Udg0jGvPYSCiS2tahfYsMUWUSTrlIl2TRZUJJYkQwZWLOv94cWxL15Ahba2PRht9H0+mLAjm6eqlER8qUixj3QGOVCV4SmUqKKCjpQ4YUAlWh/QeILIwsZJrfN/VMFFAxxI0shUGF80pyUodiE/pMYYzFYOhDfgu9AQ7NLuLw3BL2zS7j0YMLWOwPsGayjUu2rsErzt2EMzeuwlS3jarUMdxLuZVK+KrhmPkYi4H8/UDn0KpK3PraO3D3XR/F3OwxME2kKrBpx/W48Po7cOaWTVg90cJ0t4Vuq0C75Z36MkyxKAQg6xq9fg+DQR+9pXksLsxjYWERg+VFWCFgpRfpwhpUEzNYNbMa0zMzkEKhP/TRiMHQf1jt1dbfh1LCQMBAYu3aGWzbMIMt66ZQL8/hT971h3j/+/6Cxd/LABaAzFjR2nAu1t3wk5iYWYe17QLruhVWd0u0K412oVGVfjL7qtDxQdicHSErKIjOCyX8J3EBl7t1Hsrpdyma52dCIGEnEPv/CSFgQtsR6gvYGxr/r7bo1z7XahhcRIss/29UB+ZiJSb4ZUKv+WZ80TlfcQwBDC1QOGBoHHq1iS6blAaFEmi12pia6KKuh1juDWCChUgaSIr4WE/uFRyqUodWHwh97kKFc1YAQteAktKtSzl7gA8d0/jG5sSN9+lrcBvD9Yl5mOG6OYdmaDmsnDtp9JXy6Wj8qGddLrTQOAYRc++A5vq0DRK75BDm95pS0jd8dlHb0lGFfbjY+kZKFfNChfRzJgvhRaXWKoa6hfTjRIUgPq9UxPEpCr+sd6VTH0ZjnRd9/SGWe0MsLvdwdKGP/cfm8fShORxa6GMAhY0zHVx17jm44txN2LhmEoXWYdo4meVxpg8E/vzJwfQnStdDSQvnQvGVkth21rm46tob8ZlPfhhMQrcmcM6Nb8D5l96AtVMdrJloYWaihclOhW67QrsqUBQK7VYZpu1rpmbQh9xCa1AbHikEjDUYDoc+HCwEiqKIc0TThxAV5m8WAMpCoyoLWGswv7CMXbt346N/81789V++B088/iiHfl8msABkxoZy1Wasu/EfYXJ6LdZ2SmycrLC6W2GyXaIqvPArtJ+8nuY31d7Cis4PkD3MhYDWoXAj5vv5HBljbXS4KC/LOZ8w7af/omV9CNGE12xom1Ebi/6wxvKgxnxviH7txd/SoEavNr5hNIm/TMj5b/3D09eFgoJoAHyxgW+tIWI8ktaPEu04YUcLYGAsCikwNBZDIyGFhaoNrJOxirnQGpMTBeAc6rrGYNCPwitHBFfNGANyl1KINRUn+ONonkMs+ghnTOFXej8VnTTz9vLz8Y2ZqcE0kj3oXMxPBJJzOHrdqV9fFPKZq5hC/ukDA4QPuRuXHNLUtDnlicYPEYL6+NFVTcUXeWshZMdD50mtU2JInEQ4tX3J3DTvZutYjRzHWvp7OJwxhsbAWofl/hD9YY0jc0tYWOqh16/xzJF5PD3bw9GFHlqFwqXb1uMV523Gto2rMDPZQaddZeF50RB+AikfkkLKCKLUidQkW0oJFc7PWIWqqvCDP/SjuOfzn0avtwwGqLpTuOS2t2DdWRdjVbeFDTNdrJ1qY3qijaluhbLQ0FrGSmutdZiyTwY3lj7UyjjHM1WL03s6E3n0e5P//tjw4aA/GOLQkVk8/fTTeN97/wKf/viHsH/fHm4X8zKDBSAzHkiNmctuQ3dqLVa3C2yaamHtRIWJdolW6XP9Cq1QqPTHTwgfCiTHxWVCjugPhtG1AVJoDFGAJBewNr6Bswl5VGkeWReqhf3XQW1Q177wY3loMLc8jM7fICRVU6iF5oel/dP0XtFFAQCIhhAkgVQbOh86aDSElAshTXrDON8WplQ0S0bqXygBkOR0ygvnVqtCqyphjIExdRC+NroIPsxn0wMGNJAiqi4Rcy69aPTtTnLXlcSEFzokykg45WJDSRGmaEPm3obbY0WhRBJUXlSRw+fHU0oKE+fCy+cQJuGG+F64DFBCZtsnEYRG+JkcTBmdxqxCOeQ10ly8dfig4c8hfRUuuKAyKzoJrqdSIx9mRoSls76q2MGnJgwGNXr9IQa1wWJviCMLyzgyu4h9cz0cXhxgeWiwaVUXN160FRduWYstG2YykRHSKISv2qbq4/zzgIOvGHcAfJu59HsWPg9EUWzhBUpVFjj73PNwzvnb8c0H78e4U7QncPFrfhJrtl2MdRMtrJ9qY81kG9MTLXTbJcpSh7C7vy5VqSGljGF47waq+Hdv1KWl8acPbXR96AOrn43IoNcfYLk3wMFDR/GRD30AH/jLd2PvM7vZ8XuZwgKQGQvaG8/FzBkXYU27wJbpNjbOtNGtClSFRlWo8LCS0PGPHtIfOeeia0dujS/g8KGzwbCOjZjpoQs41LVtCDtyOmzI56M/nkPj+7eVWmFQG/SG/rWlgRd+A+Oi+Bsai9paGAfUNhxHMoNSnlgjvJvEHbmShvLFMvEXv1D4k9YJG5IIjaOBWDlsrPOzQCCEjK2FUyo4gl6AlWUBrSovGGsDBz8FXdZYxReOBKvKO3p+qjrfIS+JaWsttFKwLncBU1GJP79QhR3fy5xCl5ZDJjLyHDuquM1FnMycMxHcNDqm6GwFVzDvJUjHKIMIMoaC9UnUKWo+TUI19AjM8xRzl8/3y/brx1xU4QuH0mwnzYd23uqHtp0XhhjjMBz66QV7/SFq63O6lpYH6A9qLPaHOLLYx9HFAY4t9lBqiTXTE7jqghlsWz+FtdMT6HZ8UUdVaMjwIaM5y0gSvrmAEOGkrLVwEqhNypMU1KsQyM7HX4/JySm8+tbX4eGHvh56NY4nuurgktt+BmvOvhQz7RLrplpYN9PBVNeHfVulhlYKWimf/xecQBmcviKku+RuH0Qq4lL+01f6MBvs2iT+LAZDn/oxO7+IB+6/H+/50/+B+++9B3U9PNnDw3wXWAAypz1CV1h16a2Y7rSxearC+qkWpjsVCu2dv7KgNi+pDYUNtp4N4sxY58NgseWBwWBofF4WADiH5cEAg6HxsxwYg3o4xOLSEureQhA/NaRIIdd+bVE7cnQECumnYFvoG0BVKNsdaFVg6AAL4fPqhIATElIoFCJ6jr4IwNkg6FJRAqk6G1wUBz/dXHTgwhiFTWd5aemh7X8KIiMrXPDixwsQE84hpP4F4YxYUUv5dRRW8uvkswi4EEJOTpsAUCgZciT9+cWwb+bQAdmsGNGlSwUZ1FDZu2a+lQXlueVCiNw1aubtwjm7oLB1qFQlgel3J2LuXZyRJMvzozQBGz4A+P6ESXjRNukhSz3YoIIgbYhWKlbJZ0HxV4+KQCjMa+zIGMWLBjhBqQMhjzTcy4PQwmWxN8Bg6Ofs7Q+GmO8NMagtZiZauGDrWmxZM4n1qybQbXvBV4Y2LkpK3wIIKSROH4hIxMU0g3AsNOYkcKnFD4nDKLCFgLUmhrKF8H0Br77uRqzfuBn79jyNcUQVFc6/+U1Yd/ZlmGqV2DjdxrrpLqa6LUx0KlSFd/uK4MgWWqEoFKTweX46hH4pD5DmvI55zys6GvgraEOaynBYxyKgp3Y9jb/5q7/ARz/4PsweO3ryBoV5zrAAZE57umddjqmN52B1u8TayRamOhXKIoV9qzDLB+Ww+GmO/Kdb+tofGhhjsdzrY25hCXPz8zh29BCOHtqPuaMHsXhkDxbm5zAY9DFYWgghzxqmrmFrX+2W57+EgGdy7ETe/NZBKA2pyjCNmwCUghAKUmuosgOhS2it4YSEkwVUZwrKDiHb0xBlBwCgiwKqNQlbtFEUJVRRwrVnYo4Y+YLHD87kweDgPIWwaazddWmuYq1lzOOKuY2heSxtKj5YpBdjpVBRfJG7JwAMjQnKhtwvL3zKQsGYpltI2oaqoH3lqghC0CfwJSeP8vNCaJtcOoisOCLNjGFDPiCCcCaR2QjvhuW8LpMxX62Z45fy8OAQGkv7cXUIbWdUEEuZA0lCSQoaNxmbi9N948WTv3d0KJjwLqDL3EBfretzTC2W+0MYY0PfNov5pT6WBzV6gyGW+8PoLHcrjY2rJ3HZ6kmsnZnAZKeFVlWgKLTvjalVdI1ItEUBS+dK56+UF/DZzSaC00tVz/5ap3B1XI6EbLziXigXhcb69Wtx/Y2vwt+8793HvYtPZ6QucM4NP4otO27AVLvEpuk2NqzqBuevRFVqtNul/10rUr4ffUjwot0Xb1AKArm11NuS7kX6a2CdCykdBr3BEMOhwfzCIj5399141x/+Lh5/7Ns848cpBAtA5rRGtiYwc9Gr0CkKzLQLTLQKdFtFCItkTZ5DKM2a2k/DFgot+oMaS70BFhaXsGfXo/jWA1/Cvt1PYGHuKAa9JZh6CDyLhPpuuCi/6L/mH01nDeyw/32dOyB8X77QyHX9tT+K6fN3hndSGDcdEzl2WUg4uIyUkxYF18ierHOQwX20DihCcYWxvv8XuZyNoxMreyoKIdAO+6mNd1hlcByGtY3CgOQmzQgiBAk9F0XWaDGJs2EKNtec4iyzS2MTbxJ/5GKRmKOG4KGHt885zHLUSLiRkxKrW2VqUwNk1cqC/EB/HCIeg0RtjD/+EL6l8VNZgQaFoQGEAiP64BKaidcm5vFZAHVtsbjcD86fRd84wBroosDqqS4mOi2snu5iol2h0y7RaZUxROjdWxnF6IrelkiOH9mW0aUU6UMPwljGeZFdWj+1JUo5rNGZVRIOFsL67RZaotOq8JrbXodPf/zDmJs7dtzfgtMRoTTOuPb1OPfKH8B0p4VN022snWpj1WQbnVaJbrtEob07S03YyyJVYRdapmIpQbmhMjrmdE/RXNf0G1LXBoOBLwTqD4Y4dOgw3v0//wf+5i//HEuLCydvQJgXBAtA5rRm4pyr0Vq9GROlwlS7QKcqovNXFioTIP6Pm+9cb2L3+sGwxpOPfxuf++h7sefJh1EPT6XeVQ7O1gAA3VmD7paLfGWlc4ilvhn+jzz9wRcx7w9h8dTnMM+Xoz0ld0Yg5f+RIKDwczwycnnIXcseRBRCzat5SQRQHqUxNnO6LKh7HBV3CEdhcL+MUgoUuqJ8J5sdtRAUWqYwr/8nw5jECl9rfWNc+GMv6INDbKWSxpK+iWKP2s9kLqpSPsRsnYvuqDcUs+n0wkPYhAIiEkk0d3S8Z2ufX+jbtBj0+kM45/tFDo2fs7ksCrRbJVqlxuREB+2qQLdToVUWoWBDpfYg2ewc5PTleYXJ5UvOHYAV11pIfx6UIwmRKqhdfD+5pQhjAeuLUupwL1HeZ6EVnLPwUzQLnLntHFx25TX4wmc/+V1/G04XhJTYesUtuODqW7Cq28a6iQprJtuY7FQxpzl3/Aqt4zWlsK9SaYYeEcLqlNdKYh2gVA5/NWtjMRwM0RsMsbTcxxNPPoU/+H/+L3zxc3eNdQ7mqQwLQOb0RUi0N56PUkms6hSYbJdot3wfLJrdI58DlcKDAghVbTX279mFj733/8WhfbtO9tl8X0xvvQjVxIwvrXC+HUwu3vKveeA3hiBFSiMDUrEFOVMyfBXZVsk5841hKVQroiNE+xRR8CS3LopHkXriKZlNQRYrSUUoKglCMLgX1gLCOQzIRatNOH6f16mVd0XJ5ZPGOx9SUssaqp4NeX7Kt0r2OZ9JrFiSiA4Q8L3qHIJglgIS0ou8cNLGGsCK0NzYojYpP87Q1IDGhZldfNEMQEVECLl9AIKwGwyNz/20vmejF82+Vcf0ZMeLgbJAp+XdvFZVRCFAAoHcHwBRQIPGXoiQhkCZClmoOhNyKZSfCmPo58YFD46gCsUdCALDC9pUmOSyZeOMLUg5nUpKOOU/aHQ7bbz6ltfi7754N4an1Ae0F8bmC67CFTf/MKYnJrBmooVVExUmOiVmJtrQWqIqdSzuoA+6WqlY5UsuYOx0IPMPWskBzOcYtw4YDIbo9YdYWFzG1752H37/d/5PfPvhh072cDDfBydFAP6H//Af8La3vQ2/9Eu/hN/5nd8BAPR6PfyLf/Ev8J73vAf9fh+33347fv/3fx8bNmyI6+3atQs///M/j8985jOYmJjAW97yFrzjHe+A1qxjmZUIpVF0ZzBRKKzuUL8/jSLM7xtn9xDA0IRChPAHj+b8/ernP3bKiz9ZVJg871rUNs/4y5LMRkK+QCYCwzdaCmgRGgVnYlAEQamCGFAiX5sEZHIOKdxLzZzTzkRD9MH5Xn2jOUk6FIUoIRtCBGE/ND2bFCJOWwb4ULSzLk5ZZkLxSW0szNDAWQvhlajfvvJzoPocPYeyLHylrqQwKFAocqVIlHo5CElFH8CwNgjaCsY6VIWK4dPapspbX2VOTouDcYjtW6T0zZ2FEGhXBZSUaJUaQgDtVukb8AZXm3LztFJQWkIrFVrJuDSVoUwCgMad+g5GVw6I/RXznEd/T6Sfadv5LZVf/xT6dSvWkVLGliIk/ugIyGFVSsSc3FipHd6jULsyAhdf9gqcfe75p70gmVi9Adf84D9A1elgulNiqlOi2yrRLr2wr0rfgLlVFiiz6l+6J4rs/sudW/rdo5lYAKQPI7UvDur1Bzh85Bg+8P734c//9I9w9PChkzkUzIvACVdO9957L/7gD/4Al112WeP1X/7lX8aHP/xhvO9978P09DR+4Rd+AW984xvxxS9+EYB3ZO644w5s3LgRX/rSl7B37178zM/8DIqiwL//9//+RJ8Gcwqgqi5UexKtQmKyXaAqNbQSvtGz9E1NfaKzF3x1CBd60eFQD4c4sO+Zk30a3zcTmy9Aa80WmBASdfDz8Vrn27rULmow+C/Nx7iAF3/kBPpiEBl681EuXAgXxxWzcHDIk3OU4I/M4UPKK/SVxCn8TEIziVH/ghJUrdicok2IVNUrkF3fIFjyEC2QHE8ZwqlSiDj3MomRXJiRu+UfmDIeM4AwBR65J4j3UFUWoIIMTR88QtVlCQFBTZJlmk2B5j6WUsS8LSklCiVjexWE97VWMTeRzpHyBkUI8dGFUDIJvrzyOS+y8Ofp4nbS+OX+8EiRRrzWIjbYjk5gfksgVUsjuNAQAsIl8Wf8nG9+JZv3uAxj6tLMOS44V7U0mJqawk2vvg3feeSbjarV04mqM4nrf+jNmF61DkopdKsCnVaByY7P12xXRRCAGmVJ/f6K4PQqL5hlavicO6vxXke6x6ltE1X5PvHkU/jv/+2/4LOf+hi3dzlNOKECcGFhAW9+85vxh3/4h/jN3/zN+Prs7Cz+6I/+CH/2Z3+G17zmNQCAd77znbjooovw5S9/Gddffz0+8YlP4Jvf/CY+9alPYcOGDbjiiivwb//tv8Wv/Mqv4Nd//ddRluWJPBXmFECWHaiihVJJtKsizPSR2h6kVh8SgtqYOAk470rMHjuCwwf2nOzT+L4QUmHq/OvhBM01K0K4Mfzhl/6humK9TCgp4R1ACvt6feF79JGCIzdBCN8OWjSf/DEUGHvmUTuZ+H7ICXPe/6HwqxBpY4IWINeCnMVM/JHgiX36kNqIIApFcpayBtrCz27QbpXJAVMyionYTw+IAo0KPNK+SMyKGNImAUM98aigJlYUZw/h1Ag6zT2dh2b9KdD5+bYwo1PL0XD5c1SZs5ZtAyKulwft0zIiOkO5w5ocYl90Ey8wCWS6zvDiV4g0frH4I6zlRPrZ0ZiREAz7ceF7Eodev8oYMhZSwBk/vV1ZaFx3wyvxwb96Nw4dPIDTDakULrrx9Tjz/MsgpcRkq8RUp8J0t4VWpdEqNYrCCz4d3GAV3F9qvD76IYnmrAbgc1tjyNfntBrr0BsMMb+whC/f8yX8t9/9z3j0kW+e5JFgXkzk917kxePOO+/EHXfcgVtvvbXx+n333YfhcNh4ffv27TjzzDNxzz33AADuueceXHrppY2Q8O233465uTk89NDxbf9+v4+5ubnGP2Z8UN0ZSKVQaQmtRJzaTYdqRkH5f0jOX8wJEwKzRw+ht3xqV7ZVMxvR3nAOjEtODXUHsXCos5CPWCEH/PO+pbzrRnmAcsX3mUAL3+SuTXxPpBk1KM+LGgWv2CkQhVN6ORUiEHnTbhXmJaX9iaxalRrcUt4TrRsflNK7aypUSxaFCtWSqXluGZocV6VGqyrQqgpUZYmqLFAW2hdXVCWqqkCnXaEVfu62K0x0KrSqAp2W/77drtBplWhXJVplgary22lV3slpt0q0Wr7lSlUWqEL7FToOHZL5Y+hXKxRZqI+cQaWo/2FWvRsE62iD5iTi0/ikkGxmxWYFN7lAz+8BEsjxOonkNCK6tjIKkdzlpcVoNoo8TE3Hlc/PLaVEqyqwdetW3Hjza3D6IXD+Fa/EjqtfDQiJTlVgol1islOi0yoa96QO07pR5W+azQPRPXaUXhAKlxy8Sx+b0xuD2hgsLfdw4OBhvPc978Zv/tq/YvF3GnLCHMD3vOc9+NrXvoZ77713xXv79u1DWZaYmZlpvL5hwwbs27cvLpOLP3qf3jse73jHO/D2t7/9RTh65lREt6cAIUOFaXBUZJr8XEoBa6xv6yEt6POQDE5EWegVguhUY+LsK+F0K4ZibXC8Rgs+8u9kek5DCgEtJVT4XsWHcGroTMsmt4YKR0RzmRBmktQmJJ8zeVQEhm1aamgco4Kprx85To3CEJfWi8evVWwqQo2GoxupBGCzPEWBMNNIykOjYiF/3qlxcaPnXQg50zJ0vnmj7nwqtzz0OjrbR57rlgszamFD9zK5m7F6Nq/FDuduM+Ef50wWiFXgdAxKysY5N/sYUicakRl+/vqRo+kE7SfP5WuKwHQfZOH0cCWFFBB+Wujk/GYikmYyUdQWR8psGwLWClRViWtveBU+9qG/Qb/fW7HfU5WN2y7ANbe8CbpqoSoUupXGRAj5FlqhVfkPIFoplKExt1JU+EEpB817k5qSx8p6En/WYhgagj/9zF78/n/5v/DJj/4th3xPU06IA7h792780i/9Et797nej1WqdiF0CAN72trdhdnY2/tu9e/cJ2zdz8pGlv9fKbIo3pZPzJwSiIxSnQspCJKvWrEPVap/ks3jhqLKNmbMuiYKJxB8yWZsezy48zD30tZDk9mVOHxDDfuQRkaCm4hp6M+/vJ6WILWEgUlPp42g/aJ0qTyNBB5IzRe/RQy4vClGZ82FoGj/kuW/JDYnznmbCisKvhZbxoQkgir88iZ4cRiCJXnJe4kM4c6uo8jYtK+IxUI5g/i/la+WuWwp5U//DOMYiZVfmYT86PpCIDHmMQiC2oYnqkYY8+zCQi1MKc8d2MHHZELpH+gAhRi9ivr3sLqLXkF1dKUTzHsiuXWOe5zCX7QUX7sC5F1y08oY6RWlNzOD6238S7YlpdKsi/AvOX+ld56osGjOyNO4xcnwFGvddbEWUiT/nXJzW7cmnduO3/t2v42Mf+msWf6cxJ0QA3nfffThw4ACuvPLKELrQuPvuu/Ff/st/gdYaGzZswGAwwLFjxxrr7d+/Hxs3bgQAbNy4Efv371/xPr13PKqqwtTUVOMfMz44ayAAlDJzo8IDXykZH85UPekflL5BsBRAu91BqzNxsk/jBdNafzZUdw0AxAe9D3Yff/YP71glJPzUb9TmJc/1o3YpJOpyVy5/uFsbEv2Rkv9FENpRdFDwWaTQsaEKXlKYGTGvLYiPFT3IMsGTFEzajnMjDW6p7UW+fHw9jIWg3EGZijZiWw2V7i+Rlk899GQUvnSsojFeyaEmkUcP7hTulA1BSCKMqtZpDPMxSKJQNva5MvRLA0MiOX0fN5e7lWLlet66S/cZkO6n0f2K7Jo4b/OBXGkX74lEPGeR5uZu3r9+3LRSmJqaxKtvfd1xHeVTDSEVrnz1j2LjGeeiDDMWTXcrdNq+rU9VNtu8aJ2qu9PfOBk/XOQheACxwIlm4aFK3yd3PYP/9I634wt3f+q0LahhPCdEAN5yyy148MEH8cADD8R/V199Nd785jfH74uiwF133RXXeeSRR7Br1y7s3OlnLti5cycefPBBHDiQEnw/+clPYmpqCjt27DgRp8GcYpjeIgRscFXS/JbkmggR5neNbRCQPilLCVVUWL1u08k+jReGkFhz/jVQuoih0iS1EpJcIlpN5O6NdwAFgqChryIJIlouPm8doquV3m/m7kXBEgRMTv7wF9nX0ed5FEGgcGL2pvNNa132Rn6Oeb/CvIgk7YPETarGpbFJAjYdEIWZSbQBIuRTpWnl4iwlo5cpuHUiuG9CIs4tnHLwUjFLTnLaRGOM/DVsKueV4i85hclhpAEdWQdUve0a4x6vkUhfY+5n5s6l43XZiiLeK7mD2LweQfRlx5CuELnBaRYfKQWKQuPKq6/DmnXNdKFTkU3bzsf2K26Ak/4DaqfUKJREp/KNvNshX1SHHFD6F6d7U0n45R8y4oceIOT/+d+Xfn+Ip5/Zh//7P/47fOnzn2bxNwackBzAyclJXHLJJY3Xut0u1qxZE1//uZ/7Obz1rW/F6tWrMTU1hV/8xV/Ezp07cf311wMAbrvtNuzYsQM//dM/jd/6rd/Cvn378Ku/+qu48847UVXViTgN5hRjOHcA1hhYl8JJ+cOGcriUUqjrGkopOGPislorbD1nOx795v043sP75Uw1swETW7bDhHxG2+gBmJ7DsUo1C8VSsSeJv7iOoIbPMttOEkq0vs/FS2MdxQNEpklCFUhcLonClOwvkbcfyUOh6Xho2eSK5YKGvs/bwcSecsFRUlluHZHWScUoJHLoaCmP0DoHnZ1bnB9YpFy33HGLYydXngeNZy7mnEvCWWTrulj2m7ltYXv594CDlKrhlIq4bbfC7ctFYKzGbpyfhLP5daExyXII4ad6EyPLxLswrB7H3aV3GzOKZJXCcawAOIk4MwjCBzhj/T2zadMGXP6Kq3HXxz+EUxVdlLj8la+HbnWgpe//2KkKTHSqGPotipTnF6fpEyL0+9OpUCsrmAEyZ9t5p304rLHcH+KZZ57Bf/6tf4fPfeYTLP7GhBNaBfzd+O3f/m28/vWvx5ve9CbcfPPN2LhxI97//vfH95VS+NCHPgSlFHbu3Imf+qmfws/8zM/gN37jN07iUTMvZ8zSLIa9RfRqg9qm2RTIgYKgadFCXhHlW5FrJQTOPv9ilNWJy1t9sZjYdjmsrpI7Jr7XGikkCqTwLzl45JAplaZKS24gYmFN/qAnvZ3yzpJzkzs9iD+no0lCqekkRqnisgKITODlp5oeeGE7aD4Ic9EVzxMIgjkJFXotzZ2axCaQCanwGhVT5OOWznHleccoKI2cc40HMDl6ItuYcyOvj24/rOjCiJAbSWNKDhw5nY2LH7+nacCypAEHuExIpjIO19hGnFJQJvnmjy3l78WQNppQZXg+piRym8slp5DEjxACrarC7a/7EZTlqWsMnHnhFdh8zsWQUqJdaky0fM+/TlWgVWkUSqFVFo0CEJruLd2fyQkcDbv7ubVrDGuDpV4fe/buwW/9+7fjs3d9nKd1GyNO2hQan/3sZxs/t1ot/N7v/R5+7/d+71nX2bZtGz7ykY+8xEfGnC7YwTLq3gKW+rWfAcLStFNZI2LhQj+x3EHy/e0KrbFl65nYeMY52PXoqTPDgCw7mDjzUliknL5cUCTvpmH2RAQALcP8vMhCvgByJ00EZUQP60bOWuZukd5IxRJJLFCxBi2bGXxxHzG/MFQA03y5AE0J54UA5RTmAjX1skstY7w49UJWKRnvCUeqygE0Kx2FyYRDVrGc3gsGVPOYw39ULStl83M2PaCp8jaPqeZNpmnZFW4MPeBzVy4cSO6UUWpDDMuKXGiGhtwiXI94oyBcL3Lfsjsk21CsEEbznoiVu2EQ8jzKJvmLAmE+wCig4zkhhboR7g8/g1yWnxlnFPFjaoTEWedeiPMu3IFvPnj/8Xb+sqbVmcQrXvXDkEpDhQ8tsalzoULbIN8gHMHxo9Av9USM4d7wO+yE8/MtQ4Rq31DwMRhi1+5n8J//w2/gC5/jsO+48bJxABnmxcZZg3rxGJZqG+ZURZwOLGmQ4AbJlOCfkqgFdFHi7Asvx3Ow0F42dDedh/bMhuiIfbc/6Y1QYRb2K6SM7l6aMk8k1y84N9QWBkhiiMRJ7D0XXKYYDg3vCaT+Y/nxJGcnP0ZywJqFAs41282ooNycS8Uh5IL6eXzDDBegnmepKMO5NFokalTWNsMLQxEFksryHOncYpEHBT9Fmv0EQMPxMllBSPPuSrHdKK6i0mw6qHHsM/ePBi46nVJkgi7RyKsjLZkJUX8kJBRHtimSNFxRcBHeEGGDFIZG425sKuaYB5m5flKmfp1xDIDo+mX6N1a1SgkIKdFud3DdDa9aeWynANuvugmbtp6NSvvCjrLwhR40zRvN8kFN7fOij7wRugqiMI2biNMOegfQ4KndT+Mdv/GrLP7GFBaAzOmLsxjOH8LS0KA3NP6PX/gj5xPH/QOpmeyepv5SSqHTqnD2hZedOtXAQmJy22VwUoU8H69+mv346JmQQoK5i0XCL08aF+F1AaDQKrlcMbyH6PQRqUI1vZ7cMa8QGkUfwa2gHD0AyFtYxGPPXMXo3IX3bCYOEcQ84rGlqlmB/FhdFFppnILwGxk0EqKjzpZLiicK7+QCJpFqbeh5lxWi5AYcrUNOZT425LauCJ0jE2zhmidXTowcZ3beInsxC0PncpTC5pQ24cK+chmXF9skERovQRRsjXAznRPSmJLoi4flmvmC8dojyxXNziG2zBFAUShcff1NmJ5ZhVOJienVuPja12Bo/EmXSqIqFEqt0C61n+M3tHuJnQyoxVXWeigNTbqa1nnhZ2LBxx785//z3+LeL3+Bxd+YwgKQOa0ZHNuHpaHB8qDGYBhcQOfncPX5MSqKl8YfTwpXCmDz5i3YtO2Ck3siz5Ficg3Kjeen0GUw9lY0UA7f5VpAhq9KCKhMsCXB5V/0rV1ylyv7HogCRSC03MkqrIEsNw5JuOisOXNyC1Ooz+ew+Y04pOrtVOSRdpAXXZgsn0kGq87GMKuIgis5eFQd6b/PRaw/dwtnqXCk+eEhr4QhqRPFlktOWsO5yxzohrhzqd+dQHLgaDu5sER2XXO3ZzSXkGjmG4blYw/AkWUpizC6eJnjl7uC4UZzzn5Xyzn/gNCcZ5ha8QSBnI1VHBs5mmeahLUKv8vOpf6ImzdvwWWvuObZD+ZlhhAC17zqDqxetyWed7vSvgUMzfFbqDDbh0ahdZwrmtoRqdDwmZxAcqfhgLq2GAxqLC738fgTT+I3f/3/wN2f/iSLvzGGBSBzWjM4uge9fh/zvRqD2k9xZIwNPbD8MkJk4UqlUBZFnC1CCgmpNC668pVQ+uU/33R384VQrQkYl8/8MRLuy2g4T/APDC3I+aEKwlTwQSHR2GA4C1+SQEs/e8fNZI7RaHgSSBW3aDhbgFJNRULulhQCxqS8NNJdXnBmlcHZPlQ4lrwSkgqA/LKI4jIXH1HQggROENS2GSqO4xfGMhdi5F7GnmvGgvIWSWI56m0YVBy9RtfI2FBROzLe1pL7JtL5y9S2Jb/SUZiTYG8IwTwMH/IqM0UYRWA2ZvQLRC6dEOnY8/V9WkD6Obl9K++FuEwWXqdCn9yppesipc9/gwgfEsL+pJSoqhI33vwaKHXSUt2fF2vWb8YlV98MwOdmFsHda5V+rl/qWVponX43R0LA8YNrwNq84KPGcn+Axx57Am//1X+FL9x9F4u/MYcFIHNaM5zdj6XDz+DwYh+9vncBKfE+uVAI+TH+j2FtTPyjKqUvBjnrvIuw9bxLT+7JfA+E0lh97ivitE9A9qyO32fCS4iGSPLvpsbPEtmDVqQHt1bNnED/WhgvkbZDe6MwYu4MpueOFyLUtHb0wEdNKQpB5j+Ty0nOLl3HWCCCVAxD55A3pY4hW5f3NxwZl5FwI5DCmyuEVBrshquY52Tmm88Fsxh5I44drTcyFvlP3ilNoWmRH3B0Oek4yMVNizTPOQnIZGI2Z/5oHsOo3Ew/kYiLrYCQOVOZmo3Nr4X3olN4Oy0WZ+yJla0O1mW5lNEx9PvYfvHlWL/x5d/LU0iJG2/5YUxMzUBJGV37qtTotks/P7VWUeBTE/JUANJsRp43eKbp3Xq9IR599DG849/+Ku6/7ysn+5SZlwEsAJnTGlcPsLj7QRxeGmChN0Rv4Fsf1LX1n46RBIRWKlYHJ3fQV9q1O11cfN2t0OXLtyVMMbkW1arNQTDks3r4B2WSER4bBUHahhLeLfPVts0mzyI4gKOugcgeONHZiQ/25jEKUKPtZqGHsV4o+ff9+sY0RUUKPaafRVg3JYulHEB6WAIuOpbUq06E82scosAKgUM0GzHT/KlB8IXzJ4cuz79rVvH6r5QLmDvQwMprQaKJRFsUbtk6fvtNMTh6ffL3c5eRzsvlCzaONHu5qe6Os0DzuGkcpUjuJxr3ZFiWBtuldAS6RjFfV4Yp9ELxTn5+STQm8UdTEmqtMDU9g8tecS1e7mw952LsuPJGDI2FkALt0s/60W0VaJV+zl8K8VLLl/zvFf3O5QVFJoi/uvb5z0eOzeL3/u//hK/+3ZfY+WMAsABkxoDFJ+7H0dmjOLrYDwKwxmBY+9kiwlRlJGCU9A2gCy3DAwxxftYzzzoXW867/GSfzrMytfUiqLINkxVF0GPe///sHpIPe/rmz14EhlxAKUJOYDOEl2b7QHwAkVtDexECIT9LBPHonR1jKbyZ5qoFEJP+kzDKCk7C+1HckgDL9uVDralAwAZRCWQzjpBB5zLdItJYxcbDWR5hPLas0CG9mVrgxDHP+xLmeYLhuPKeeS7uS0S3kM4qhjtFs6DGIeQm2uyYsu3lxxyvb3YyLhuLmFM3KtSz651bnlE7jorkTPTlruKKKuN4DM0Q/YqcRZE5u9l6fho+GZ3R1Boon9NbRsFYlQVufNUtL+uegGWrgxtueyNk0YKDfyiXWqEVij9I0BZaRmGrtY4fpKjSXgoZP4zR/WGMr/ZdWFzGZ+/6OL74uU+f7NNlXkawAGROe+qlWSwc3I29cz0sLA/Q69f+U7GxMQ8sfoqGfyAa62JD2kL73lu6KLH9ypuhi5ffw0SoAtPbLvG9/4IbJmIANndeGp5acxvwApAKC0jckUAgB9C3yhEp3Buds2bxR8wBC/u01q4QDjSvay7yEEK3SknUJq0jhRgpyiDXjdYld82mfD8SEnSdpVcVUmYabiQmS3l7jRC5a77XrKTIxCtSaJnOLPUxTOfYcLJEJlBzMUz/6GWXXdPG2PsVBbJm2fHcU64hhV1zPzI/jWcLfY8WAdFhNj4+uMwFzc4xLpudXjzmkW1SH0lB4V+R2gXlripZkqMzXJC4JrdWK4my0Dj/gu3Yds55eLmy48obccY529Eb+rxkEnudVoEq5P/5ELAOH05VLIxRQo5cn3Sv0XSEtTF45pln8D//x/+LwWBwck+WeVnBApA5/XEW849/DfvnlzG7NAguoI3zxVIj4Lyys1AqfLr2Vaw6VNmt3bwNG7ZtP9lntIJqzVa0154BL4qCqwmaRoucoywUmP0L6WDQMgkLGcSf10bJqbOhWIGayjZEgUgChMY0V3x5eIpEQJSoxwm9Ul8+eZz36CxS/zcZw7F542jaY6H99XShDUvDxsqEiMjCs1SRqoJapNMxxkaBEoVMdkzIBCeCW0dzAdvsmPKCFLo+eXhWZuKHrp2jZL6wWBJzSSxSiDoK00a0ryH/Gi/FkDb9IEbWGA310tcoQpOzGos+SJzGDwm0jsgcSBHGPeTyyWT90T5Hm2nnZxCr0kMlsM+Vk9Da581NT0/hiiuvW7H+y4HuxBSuvfl2CKl8sZRzKLTCVKdCO8zyURTa9/4rwhRvMoR/hb//kwhO15T+rlnr0Ov18ed/+k48+cRjJ/VcmZcfLACZsaC3/zHMzR3Dofkelvo+D3BoTJgeLnkV5PxoLaMrqLWCEAJloTHZ7eLiG34Ire70ST6jHIHutstRC43ahsrf55DjQyE2eigXQsSwb6FkEHQIzhKgs35jcR7bsC3nUpuZaESMCDzKzaMKxrRwU6yRiEmVtoix3phfmDl7o3lho2FQ53wLjNhAOgvvxq/Z8mmnIoZZZRAyeRg4uXTJffRjtbJdCd1fVNEaBRAyUTxybay1We5eCrGnn0XjZIUQsXJ41M0jdyi6bLmAjcfY2NgKl5OOcfQ4Rw4jLpRfl/hBxKVx9O/buO84ppZEH13rdCwkJEUca3KjRZiOMHdabXDwNa6+7ga0Wm283Nhx1U3YsPnMIIARog0a3Vbpv6+8C0g5gJT/l8+4Q/MAUz4oRTWMsVjuD/C1+76KD3/wrznvj1kBC0BmLDBLxzD31Nexb76H+eUB+kNfCGKCC+icf+Cq4PzZ0Ost5hlJ4R0yKbBqwxnYdvnNEFJ97x2fAGTZwsSW7bCxkx9AIcHYx+0463nRkt6jWT1EJr7yqt4U4kuh11xoCKSZLkj4kVDLHba476xqOA8nUq5g3Ep2DGRykBii6kfah7V5o2cRRWwaEQBhOQHEiulmrl7T9SI9Hc9tRZgUyfUTIoia5LWuqK5tOHhJcOZi1pE7lh1HfhGdpWBncvjySHbKH0xiM1YkZ86ay24OgdHzykT+yHUSMlVO05vxngB9aMid3TS2sU2PlKBpF2nDsS8n0HBLHZo5gzHnMqxL1z66illTaKUktp19Ls45/+Xl3E+v2YArb3otiqLwf2+k8D3/gghslQWK4GgWWse5fv0HUsQQeQPhHdHaGAwGNebn5/En7/rvWJifOzknybysYQHIjA0LT34dB+cXcWi+h8Xlge8LWFsYmx6WAOIE6nGyepE67mulUFUVzrjkRqzZtuMkn5FnYtN5aE+tyYRLemg2XbWVDo4XNw46tH5R5BQJoAitWVReYZgJOaoWJlFkXeqPl8KYTadJjPxPyfsN6REPMpOFmeOW6biQ75f2m0KNaQo20igrxLDIGkULElAkOoPgzR6wyf3LDjUsT+IPMaVAgF5qnFpUaJlUD8dLrp4I5x57FY6MWy4cY77cChuuOX65k5iHCZ/VAXRpneP5RnFdMSobj+fANsPJ1LbFv2fjOdBrhEAzxDm63UYeARD74Onwwc2v73vnTU5M4NqdNx/nTE4OZXsCt7zx57Bm3UYMhn48Cu3vNWr23GmXqCqNMsz+UZVFJvhWtnByQHSsa2Ow3Ovjw3/7QXzlni+cwDNjTiVYADJjw+DwLhx96iHsPrqEY4s99HpDDI1BTY2hkURAwwEKDzup/LychZKY6E7i7Gteh6I9eRLPCAAE2lt2wEodH9oiCITRB3NmtMTIGok3HV20NA2cFyDJtYnP2/DQ94ZLaswr8/ezZ/OKtjSZw0Nz8ca3BJpOTnhdpoM9zgj4/1UWWo3keWYkhjP3K34feuKMhpOzw81CiyMOWiaovANGrVlSLzYBHMetyYS6SK5duveCCArL0phGhRz2nQs5cg7zY2ueT/p+xfSAmcA/vuwjt7P5MSLPMc1piO2RUHU8hpC72Winkzm6o9XXjaKUcA4U1o7bCIeYzxettMKOS69Aq33yw8BKF7julh/DudsvA4SAcV68VoVCpyrQqvx8v74JdIGq0D4lhc5bhLCvktmHFn8P29D2pa4Ndu16Cn/6x/+dCz+YZ4UFIDM2OFPj6N9/CnuOHMXeY8tYWO77RqmhIhgu9aIjV0IpX3kH0FRifltSKUys3YyNl73mpIaCVdXGxKbzfAgbDsXI7AqjzXyP91wXAAqJhpuXO3b0L87SepxtkNPn903iLzk3lEcnYhiV1mkKIwqzJnvMf8ln8SDhoiQ16/Y/m3DtmvMLJxFPWi3mTclc8GTOnMgFnosPWSmzYhN6LXON/fKI6zUcPiTna3Tsg1qMgqdpxNFxp1zDFRJYpJ55tG8693zpFdo5eyH/wHO8hVdUCDeOc2U+YXwnm3Iv3UtpQZvnLK48M1AawWjLmMaUeuGTW5zeLzte6gUpAGzeeia2nnH2yoM8gQghcPH1t+HKm26H0gWklDBZysJUt0K3XaIqdCwA8XNHp6r0OO9v/NnPa+6cb4I+rA0Wl3p4z7v/GE/vevKkni/z8oYFIDNWDI7uwYFvfA6PH17A4fkeFpYGMNahDv2yjDEY1iYTHC5zGvxUcdR8ttQKmy66DtNbLzxp59NatRmtiZng+gkMTcpZyzPRQN/H56iIjmEhKZybxIpA6v+Xu38x6V6K2BImiypmQkFERwdwUehFgRkdLDEiWOLRNX6ODg9IZIlY5Ujv05zAtiFijlPs4JLLGHVT2CGFbhsLZ+HY6BC7ZogW9BCnzYXt5fl5ef89b8eGEHPmatG6KwRV7n7l40MigJYf1WgjjlpDXObHQ9uM12fkWsR/gmzGFWNE0o5uh1wwNiqZcwEtm1OX0R7DqKfjFsgu1spPILkLHQuVMjFIYeArr71hxbonkvMuuQY33fZjKMoS1jkMjYu9MjtV4St/tQriz6edUFVzPu0b3QtSChhjYt7fcDjEsK7x0Df+Hh/78AdO6rkyL39YADJjhsPsw5/Hnj27sPvIIo7ML6M3GKI2NlQEI86fmz9ESFxoKUJFnn/IdDpdbLvqNujWxEk5m6mt22FEmOu0EcJsCpJc50hkUTwX8v6CWySAKAb9wzl3XOJuVpBvH0hh5PSgknF88/AcbS+fL5fCXEDaRq7pqDFumt0Dcd00U8aoU7bSX6JWNVGAxH03nbBUzCJAxRqjhSANEUfH5NJxuFBtkZ8fiZb0/ugmU0g75iRm7+VnlYd+83XzaxbbpWBETFKolK5glncY8ylpfPPjFGlf9KkjScGVy4+OWaqgbi7jnA2iSMYxovOjERONa5+HiGVo25OENOCLS6qqwBVXXYuyOjl9PFdvPAO3vfEtmJycisdORUvtqsBEu0Q7VP2WofJXawUlqfI3uakEDZ11vt/fsDY4cmQW7/qjP8D8HBd+MN8dFoDM2GH7izj80Gfx+OEFHJxdxuxCD/3BEMaQm+TFSl0bAAj5N6nrvlYC7ZAL6CBQzmzClqteC6lP7INF6Aqrzr40CBgRXZlc6hwvk4scQucAKVx0AHP3aoUDRAJxhe6hB3VjwYaL5MUHzdfq32sUN4iseMSRQAntVMKLSVj674y1XuxlB6RoWjDZDCe6cLIU9m04jiMCxGVTtKXxchiVj6O5crGfZFB/STCnXoo0ms4htjppbC87HRJslN+3QiSR4xb1Gu0/O+5cdCJdwyjcGsshvSiSIIwV1WkD+cCkL6I533LcYnad8/2QmMk7vaR/JGqD6xpuWCGourd5GCLMgBELevzIRNeMPsxoJXHmtnOwafOZONFMTM3gdf/gn2Jm9fooZK2xECLM+lH6/L+Kmj7HuX5ldElVqAKmGT+ANEbGWFhjMRjU+NxnP417vvi5E36OzKkHC0BmLFl88gHsf/Jb2HVkEUfne1jqDdP0cI6aD6eHtgwtGlzINXLwc9aWWgG6QOesV2Dm4lcDJzAfsOzOYFBMNqY5I3Ew6nb5s4iLRZSQUJngU1JAyzQNHuXnUbhJUTgRKV+PRIoY2ToN4UjLv6b4EfmyaUqvGH4nMZGJg0YRh/XXqtAqNFz2D38vDtNuHBBb/kCknoQNMZSJDzrntD6FjJPgy11M2sbofkXj/PyWyFlzQFYxTN5ZEnQNMvFEfd4cKAQdPLdoWuZXYtSBS65cnjc4smg8nzyHM1bzZuKePklE/T9yrPFUMscRJGgd4rVNq4y4k9m1ih8ayDmNLmDuAKb1SHpGISsEJie62HbOuTiRVO0Obn/Tz+Ls83dEQVtqhVJLtEv66it9fbVvaPqsNSSJviCYlUw/04cZY/ycv8ZYPLNnD/7nO/8Ag37/hJ4jc2rCApAZS1w9wOGvfwJPHTqG/bNLmF3oYak3QG8wRL8/hHNAbSyE8G4g4B8iWskggrz7VxUKhVJolRXWXHQTZrbfBIgT82vV3XQedNX2bVBiHLTxpREGRv5aECR6pGAC8OEkyitrtApxLhZx5MKtMX1XFpIMXl5Yzn+Nk9Zn60aRSccgqIo25erRnL5NFykJg2FtEPvcwWUiIQkGcj7T9tJ4AN5xpGPNw7MkrpKYG8kVjBtOy9KDvlmcgez7NFtHGp9m/mHuBkKkgpNk5KUKYSqoIbFDyzmKx4Ii3Mldy69ZXmEax4q21RCKUeamhta5KEe696j6O7eCyZmLQxXGiVIsGm5s2Hfe0zAbsLgPFcVRVrwkklsshIgNlMtS4xVXXQdxgn5HZ9Zuwi1v+l9x3iXXobYu/i2xzkXHulMVaLd8/l+axSQ1fSaHPX3gcEn4hX91bdHrD/BX7/1zPPadR07IuTGnPvpkHwDDnCx6h57C3kfuxROTP4Cpdomy0N7pKzTK8JtRZ42iAf9H2IQflBRY6lso4VvEFFULM5e8BoOFI1ja9eBLe/BCorv1IkghUAdXKz7waRH4QhCCtAC5MlIAmpy38E+JpmijYo/oBgV3lMK0udBSMj2Uye1yEPEhDXjhlR5kYaYN6WKvQWsdqlLFB2XcB7lGSMnv+QmR6EN2/HQOdOx+2BrvjriiuVvmXV6ZOZA0DR6QO4DpXOh1EkZpzBBFDvI1MpHdOF6B426XxFUubOg46Nhoe03RFPSSy1RsvDrBMXYiOXP5fZLdN8n1y8fdI6X07W5EdrzBMUxjnK4xbSddW0CI9HrujMbRcWnHLvtQJsIsGN4BlnDSxXSOstC+NQrSrCCXXnEV1qxbj0MH9uGlQhclzr34Glz/g2/C5OoNgFSwzjvVQvim8mWhoaWv/PXTvqmY96eVgtYyTEVJuZD5h6vQRskm9++JJ5/Ehz/4/uPmkzLM8WAByIwv1uDI1z+Bx9aegcnWdpRaQUpgspM9JDNnQwgBYy1q6yds1/GTuYSW1guqso31V96BA/0lLO1/6ebeLNqT6KzdipDX7x+UwSGR4WGYHtwCFisfClTlG50yJFcuzafrl82LDqSScbtayfhAJ1cjd66kSGKg0ElURTcn5DPF1yG8+HMuFmc0KoDDOZGQbLh8onnd8upXZ3NXMHNSgkCFSwUqQiRB5bJtAL6YwAsdAM6LQyVFzP8TdJA4fmiSBAvESiGXL5fOOVl4jeITB1hY71o2dd0Ifn8xlzA/pjz2OiIQM+NwJfHDRrqnmuHkcJzZNaN9+HvRIuUxUhTZRbdwNDRNYpSunwV87MpRH0FaTgCCxlFCCB8ipzZO1loIKTE1NYOzzjn/pRGAQmDdlnNw/S0/hrMuuARSF5BSgdIbHIBK+98frXzlb6v0/8pQ/EGhYJrvd/Re8efiYI2FtQ6mNlju9fCB978PB19CUcucfnAImBlrzNIx7P3Cn+ORXc/gqUMLODrfw3JvgP6g9onVzqE2zbypQnohSKFSHXPjpA8HT63G+mt+GHpizUt23K21ZwKtKYqZRldPiJVTaJH4SxLOf6clCR6En0PCPJIgpGrevAcZuUFC+MR7IWirSTTS+zbYZw4uuKlZeDqE7Wgd5xCm4bMNp4jCv7m4ojl94RBFZ14lm+bjDVOEieQ+xb6AJNRyYZXRqLQNy6bG1cnaiuIk/KNK7Hyb1toYzqZ9+nvINfbltxf6UZIgpF1lbiTt2Dm7Imx6vGrbeKCZl5eHa8NBhGsumvsb/T535cJ78V9w6VwmJvNDJhGYH1Mu4Ec/cEBQXuizC1M6Z0WNkYM7nTuatE0lBaqqxKVXXH3ca/79oHSBK3beitf91D/H2RddAV1UKLUOM3yEmXakQKvU6LR8r79uu0S3U8bp3ijHT2sViz4oVDx6/9rwb1gbPPbY4+z+Mc8bFoDM2DM4uge7v/w3+Pbeg9hzZBGzi30s94epsXB4rg1rC2u9SCm1gkRyuKy1KELFHoSEntmMjdf/GHRn+iU55tbmC2EhG7lsKagXRMjIOi4u4x/9WiQxp/KHtchm/mhIScoLW+m4NZ7K2feUm+af/MHdorCnowda0goUYs5fE9kmyTiM0cDMMRIIvQCRBF5q7I3mxqK+yN21dPCZ/kDeXgaZG2htdqxxbFwMbboguEbHafQhnW/fBQcXNM7x/XyFRrAaQFPQNs8L+YvhvFJlLVwmyFx2Dg1B6pel+yAvtMhzJeMazjXC3RSaR9w2Uo5p2EE4C4wyKtHyn6kJcnKT03Wg0GlykWWYZ1igVWmcf+EOFEW5Yn8vlJk1G3DLj/9vuOq2f4SJqdUoC1/Ri3CeqW2RCKFoFdq+lNBKoRXz/3yYOk2hmIX0w75IBFrrYIxBrz/ARz70ARw+dPBFOx9mPOAQMMMAWHzq63jivnWY7r4BrUJFx6YsdMzfosnYXW2B8EcdIrh/UsLW5HD5P/rtjedj/U1vxoF73ot6/tCLd7BCojW9Pvh+K10MKQCTiZK4GshBEbHyl8Qevd+ogo3/+QXVSMg1Vfcm0UQPdhJKzqbCEfoXw53HqaKFc7DIZhaJO0TcZpwWLkBhVama/QJJ6IgQehNhuOJ5OqTjy86BQteAf59ERFMsZsfnHOJnaZEVa4iU95eLHUeH75ByF+Ox5YUgQdDHaxLcNWQnQrsP7tKzOUC5BpVCHnc5BwcZ3eSmcxadRVKl+REJEqGILuLKjaf1SXvSZwLK7aQBirsRotE+COF+onFK2wUAma5L7sA6quj3FeIkwjZv2YqZ1WtwYN+e447Xc0FIifbEDLZtvxJXv/K1mFm70TeKF759C51DFXL9qJ1LqRU6rcK7gNTvT0koJdLMH8HRlPl9FkbcOh/+pb5/+/btxyc/+rfs/jHPGxaADAMAcDj2rc/h4VWbUOobYuhzqitQG+Nz7aSEnzGO8uy8kLLw31OGkgTgpIBzEu3127D+hp/AwXvei+Hci/MJXbe6aE2vD0ednwEA52Cy14/voLiGw+cfjCH3L1suz5kbFZNhVytaoaT9ZPYdEB9qjQbQQXwpKcJX2VjfwbepSfovuCECgBPx9byARCvhFRZtRaTCFdJM1gESScTRuFE+mZRovBZF44oxcPEhT+KJQo+0f3JuXDbeJJpSlbVobBO0HYyGdJsFIpTrKcNOo1MYHLgRrZa0Kvy4p7zKLIScHf7ohwcAabyy44zjm22J9pNcRwpfC4jM0aTxSA6eiOuSE5nOHqhjWZMvBCG3j1r8OPh7zYYiECEFnKFj9VtSUmFycgobt2x7XgJQSoX2xBS6M+uw6czzsensi7B63SZMTK9Gu1X5NlEAiti/T8b7UykJLUUo8PCze1RVgar0TqHSClr7vD8q+vCfK8LvDInn8KGlDrN/LC/38cmPfwT79j7znM+DYQgWgAwTcMM+Dt73ITy6Zgs65bkoQ8Veuyog4NAb1LDWQkuJBTMMbpeEFCY4Ri78kU6PSCkkWmvPxKZXvhmH7v0bLB148vs+zmp6PVSrkx62o+cRvsaKUKwUgkoACmi4IlHsiSRAAHL8wvcj28kNuub/iegKNo4tLegQxCBcowBFhcrS+ADMz6txECJumASR1w5JoKU5iGlMUrg4iZCReYTD9pQ7/vt+mSTinD+A5GzFdWTT/ROID3g6HhI6FH1tuG45WcyUnOaY65g5QDGHUMqQJ5gEcxpvpBdE5nCOXMPYDDqIvKDk4nICKbQb1G0IGacdxrswHCNVLsfL5/Jt0+VOy/vehyk8bpwXsT6NwE96KIK4hGgKf0eV39b37lRWoCwLbN12Lv7+vnvwrAiBompjetU6bD13B9ZuPQ+rN52FiYlJlGUJrTS0Eiiz3L3a2JjzJ+ALPbSSqEoNAZ//N9Gp0O1U6FQlikJ7QRhavmjtK4FTP8zwdyTcWtY5GOerfofDGrt27cL73vM/o1PKMM8HFoAMk1EvHMGee/4S7fbPolQCtXVYPelDwfSApWKGoXMw4SFDeYJJAjkoAFYICCVRrN6MTTf8Q+z5wnuwfGjX93WM7bVnQqgCxmXhM6D5QEZ6b0QuQWJlzh99FcENpER6ObKcT6RPlb6g8w1jMKr+ZBBfVLXrsoc4EQVUEA0k4oy10d2ikBqAWNQRxYCxUZg5C1iZOZBI60jhp5wzNgksetAiPFx9AUy4imFAqDCFBJrWKhaDUNsX6oWYRFsmxui1sAEHvz0SquSKebEW1nNp/OK1DMuQ2HNhHHwbFxePOYlHxNYs5Ew2Q+ThOkvqW5iFo2USU8iuTzq4pN7za0fOHbmT1Nkl3oVhe9YlFzKtJwDhxaa1QPODVGqcTecZBSQdER2SdaBQMlU70/RyVI1bFhpnnbcDUilY42f8kVJBaY325Cqs2XoBzjh3OzafeR5WrVoDVVYABErt70PfMSAUgMVwL6CVRrvUfuydg5bSN3OW3hXsdip025UXfFqhKHzLl7LQjdw/Chen4w9jYW0M/y73+rjrEx/Fvj3s/jEvDBaADDPC8t7v4Mkv/RW0/odwbh2EEOi0woTr1mFQe8dBh0RzJ0x0HSAQQlMutFhx8MWfAnpiDTbd9JM48Hfvx8Lex7DSu3sOCIHJdWf4h4QDDJLzkpk5QNx6ekjS+7H9C4XXQtiTZFPDARRpe4VWQcCkJsJU5LHSTaJnvc9Xijl9z+0U4zbpwR8LciifLzg++XzNjnbvEHpxN908QMT+gtHJC6YTTRuWC1VvtmU958LxpApdRBHnLGIaIPXmI4ePGA3Jxty9IKDyPno0TzGJ4DxkHM9HIISeKXROhSApwCplEn1UKOL1abhXkYRW41jJySThEVfMxpNMuyyUnN9/dDuQGEQm6NLx0PZp+SSeqbdgI28wOxcvcFM4mT4YCEHOLKLwVUrCwrfxMcai0AobNp+JbRdegao9gTXrN2PT1rMwM7MKrclVaHUngwPt0Co1hrVFVajo8gE+tFtqhWFtAOln0NFhdqA0e4c/tiLk/bUqX/FLPUepsj7O+CHS1G/ND0pexFrn74nBsMaePXvxt3/zl5z7x7xgWAAyzHFYeOJ+PK5LyJveBAdg7WQrtiwx1gIOGBrjHypSQkgJJS2ETYKI3IooEoSAnlqHLa/8x9hz30cw//jXgnJ47qiiglq1GYCAEM3wJZG7X6P5XYBv96JkHj4ksYUoCslJUjKJD2NsKARptm+Jz6kovPxR+OpHBessEB7I+UNtNNwqQj89iVQgYoOYIvcrOWx+eyaIpjx/MG4ze35G6eFIxNkYGqbiCSqozhs+0xjmTlwemm1cPdsM2Y7qXTrH/AW6T5qzrtCVas75mvw3cnbJWcsEXHYzkODLq6pJCDd947A1cowzpzC6yrlN7JLQzvTain17AZlCyI6cVb9APIvj5SLmIfBUDJJ/2AlOp/BXwBfq+A9pkALCevFrTLp2dK28MLNYtWYt/vH/+q9QKAEpFbxg9oUY1AJKSQnrHLotqrh3KKTyH4GEv4fbVQEqimqVBSAQhZ2SEkXhH7PtVolWWQbXT6LQefjXO4IN8Sey6xscamv9rB/9QY27P/spPL37+4smMOMNC0CGOS4Oc49+BY8KAdz4Rhi7Ct1Ko1X6UHC/NmmKuPgo9X/wjTUIWTu+Itd6z8xBQELAtqaw4do3oOhM4+i3Pg9XD57zURXdVZDtaVgXGhAbF6cdA3LRQWE7+glRMKjsWR77/AUHTABxSi2BJPDS8z8Jv1xzxVlAYhzYnzMJNBI7FJbLBaF/eKc2FxTqy6uT6fiiUMrGRCnZEB90fOTQUf5f7k6l5RyM8blhcP5rrJIdce/iCUQXzi+bcu9ENj5JHVEVMZlzuXsmZBbijeMqY8jXZRf12foV0ubopJvh2txxC8tm5xYFRjgoageTpKLffzrDEQfSrRzT4yGDkDquW5UL0+joZTOBNFIEklC0jiqERVxeCB8mJTEcq7URxLeh6QeBTktjzVQHJPxULPgJjmW41v4e9oUmJPr8dUqOcVmoeL/SbB8CAlr70G8RQrw6FIiQA6hp5o+wjqK5xLPfUTif82jDrB91bbB/3z588P3vhXueHyAZJocFIMM8G85i7jt/h+/UQ9ib3oSta1ejUxsUKuXm1KbG0FCYNzQ+ptAqfAK+ECImcftXAVG0sOGKH0Q5swmHvvZh1ItHn9MhdVdvQqtqYeAcapvCnkASbE6ksN2o8IlFHyDXL4i+TKBZB8jg5kWxkodTw0Ow0DL22SPBZq2LriGQHpYAhQj9Q1WF2USAlJ9H2xBxP4IMJ/9Atv7c8pYtIjiTcT5iUO7UaP5ieqI2cvzyY5CAMYCTNoXHEaYaC0LJVy7T+aRG2DGASW5vEMjHFWwihbZFdr4OSGJYNF2wKJzo2sUwtZ/GzT3L+R5v9/5+cIBLs3I0j2/lSvEYySUMG3pW8UfKJfxvrV0pSl3T9Yuvxz0mZ9M3B0+izsEm11KkfEAvytImomCzwakvCgyGQ0gp0S41MNFCXbtGigL9DtDxGeNQFArO+abL+QcSus5SpFmBZPiqlRdzJALLEEIuCu2rglUSfzRdIv1eROHtUpjeF374vn+f+sRH8cRj33m20WeY5wQLQIb5bjiL+cfvw6NmCPPKf4iNq1djqlWQnQYpJIZmiH7ICwSSgyAQEt2tF4j0sI9RQKEwve0StGY24OD9H8XiM99KNs2z0N54LmokR6bxUBX5YzPsglwUf7iNqd/yQpDR/K5YVNH4r+mI1caFwg8/GKMFIpSoH8VgbOki0o7oi0hOZBQOQWyQu6iV9OF3JHcvPx5/PVLhA6XGaTTFVhTFweER4RxIOPpcM5ctgzj1WBwUkTRObDYcxyGtm8YgCVrkm8qvt6CK1lz8jVxjcqZCjh7tE8idMr+HfP+0zUyXxZ2m0HFzqrlM9cXwLcV+qQKZwpPR0YyLNKWddxlFcjWzc0ofUuj4XLxn84Yxkj4M5BWvmUj2YVIbhVneIDx9cHDQSqIf3mlXJUyR8i+da14nOlT6uSwUnKV71b+ntUzHHsa5LHS85kqm6t5CK0gB3+4lhIFlaIMkG9eHfv/8+FrrYKx3Iw8cPIgPf/CvuPKX+b5hAcgw3xOHhae+jsedg3vVP4aZmUKhBAql4oPewTtyNikmH6aFz7mjv9X00PQ1ChJKAe2Z9dh84z/EsW9+Doe/9QXYZwsJCwk1tT5W/0YhRc9WNJ/tlAhPyzgRnL5MBIjwc3Qd8vWFiA8nAV+JG50pUONf2VivIRMbocbg8Ln0kAtmKcjIAZ3X8UwzKVAbmx6y8QGZnEs65tHpv2I1aigMcSLNUEIOi9cd6ehFLOJAcNmaRijtRwUV4OBzzLzA9yeYhF9y5PIik2a+YJZ7F/exchzoEIIOCy0PKSQeFVsYfhfvu6jfHBpL0nmLeCEQxW1D72bhZcTXXWOh0Y8uvvjDIuWpJiEaD2okpzKdk38vVUqn0DAEIIO7Hu8dOp7GCIWm18LF3FwpQ4WxtTEM6++rZojZGL+1QknUwdWO7mdYtq5NKN7wY0e9/2xwuKmRM4A0t6/0oo9avUTnL/SypPFxcN7xDheN8v/6/QE+8dEP4cnHHz3OncEwzw8WgAzzHFnc/SCeuuf9cNf9KCYnp1Apm5oHBwfAkjCC/0NuHAWrvMIxLk2zZkLunlYKquxg/RU/iNb6s3HggY+jf/jpFftXRYWiPenNKCFCbiHy5zaiGxT+z4WSQqj+hWjk+UXRJKjgA3FL8V8mHKnNRx6+jA4XsnUz8QckV1EIQMikD72bJxvnIcMbMTTnQiVnzLv04ibNtCGDMUaOXho3KaWvaiUh4bwI8O5dEicUZYxCDKmZskUWns6WoXmX42wiLnfm8m01299QuJruE5rNJIk53xaF1qFKWiWy/nsNV040hCVJoPweSBItuUsxR86FIpvM0VuhP8MFi0LP4fhbDi/aXFBHFzZ9UBH5ii45nSPpl9n+R8S6EL59jkgtfXyeXvodzCuNhfBVwN6Rd743n5DQyobrGIxVAYgybbOw/jfYWJubnVno1v8uapUaOGstQ3GYn/ZNUd6fEKHYw7uCsfo3hJTjwIfxoA9adW0wHNbYt28vPvBX72H3j3lRYAHIMM8V5zD/6L14oreILa/8R5icmPKVv0LEUK8QIgo+n9OWh6KQwlhxm4gOhIHGxJbtaM+sx/77PoLZpx5EXiWsyjZENenXd/mDNDhytEGgIQDoIasE9fgbPS//JYaos6bJOTT3LT3S1cj7qVJVxJ9Hp22jdZNrkwRQzE0UyWVJIgnh4Z5ED4lIKb3TJJG3S0mDQG1cCAoR+nF0sQWMf0+Gnn+iIeSaR0/CMCnN2Cw5PMSzlL1GWxkSPU6k6lSgmedHYUj/TpqeTSCrGKb1XDq+vLFy3hR65QXPxHdU3QLO2mzh7LoFUZuufLp2o65fdK8yleiQFnThAGOhC12jeEYuO4JU4dw4FSnhjI2tahDHLclQ+kBCYVqqBrZh9hlAoFWVPjcRqZqpNta3dsrC0FJ4p1+FqR/zwhT6cKSUF5d0v/v8PwelVBSAPvwrUZUFgNQgPX1QCh/ewsCS62eMw2A4xNz8Iv7sT96F3bueXHlBGeYFwAKQYZ4XDktPP4S9X/kAzJWvQ3tiJuaAWefzdKxfLIYfyfagB4oS/qFeh1BRXdfZ1gHZnsaGnT+O9vqzcOihz6UCkaIFI3V6nlMIbcVjuHG4ftHMgco1GTl+uWlGTg2QqnvjpsITjxzM2MdMJnlA7p2gr7R+ePiSqyHDuJCwBJLgIkfGwRdaNERaENzxXHIjDIgPeRdFogsOnV8utXkRUWTYrDk0CXprHSxcEkrwLl2aPSTNkBGNLAeQ59tw5ITItpOOI28g7QVnagZNOWv+rcwWCwOTH1M0H9OFTbHRuBJWLhfeiucTHToXHb7o1MkkUun1ZtVz8wMHjXC8b+gDAgkopDGPx0H9CV3W+29kudhiBs0iGUfKKROOdHxKydB8OuwD3okTkKiNA4lwCsu6EHaN5xB/z7IPN9kHJef8PoTwjaFprAvtcwF1aPWSF0flzZ5jUVD4O0EV08ZY9AdD9PsDfPObD+HDH3x/I8WBYb4fWAAyzAtg4bGvYnB0L9bt/AforD2j8bCmf4LCkQ6QcHAhxEfOkxQCdRA3/mHnAGfhhIAsWpi6YCfKTdtx9IGPYn7XN6Bak5BSBafHPzBkw/2LZk186EZPRIhYAEKQM0MuHEQSCNFAc2hW9WbbIPcjNRhOYxDnGhZZW5PvQhRnzovjoKCjq+ZFYxJxcaaJfBtIziE5hDG8SeOVP2zDKKQZKJKgyN1GCkHTNUrFIsFJzIUdXQD6NlNcWUQ0Xjc/LzHiwz8/oVgEguSEpmbQJNhorEIuohtx0TKBFsVmptCO14Mv3TTpx7gf0P2VxqtxHfPjcq65qeOJ0tH1ZSpaWQGJPhvGI+QFukaRS7iGTsRqeLovKMbvnINUEjLsuyx96LhutHlx0ZlMAhDBXQXgnM/pUwLWTy0TP5jQhxif8ydiRXAK9cr0oSlzvYE0I4sLH4yGtcGwNlhYWMC7/vvvY2722PHHhmFeACwAGeYF4TA48jT2ffqPsPrKOzB59pWQSicnIjzwhXOQIriC0Z0goRMeMiI9YI2TYfYF/1AvJ1djw/VvQmvtGaiXF6CkQB231QzBNcKq2ZtCeMFBga4YtgoiLZp8QTVG1ydTegJoTJMW3Q+Qi0hZbSITHbTRZl5eQ4ZmIiPfJaKYA2BTLz0gOW6j4o/OnIpX/DGk5sq0X5qaLa/2TCHXPH8vrwZtuj+5oxaUeCQP0YazTyIvjkiz72E+yweyfZLojc5ZPM2wNTLcrIv6Kh+XnOhOZiFHOqboPI6K0ObhNEY8fnFNh64hnOm40yeNTPQFkR9FaL75INxF2gm5Y3FkXRKczVUFlBJw9UiBSfZVKwVjDLSSXoRLiUpJ1LUNzcdl/L2w2X6FECiliNXoKjiG9CHHt3EJfQWDAAR8TqAMbV5o9proXo+4m9ZaX/VrfN+/5eU+/vaDf4Ov3POFZ7myDPPCYAHIMN8HZnkOh778lxgc24+Zy26FLFoA4iMLQApnUrjVBUXlJy2wsT+gcAJKpJ6C0YVQFaa3vxLO1LDJHxt57CGGdnM30H9DPemQCRpylPxDNJ8FJH+ftkluorU2zMvromvYWEVQAUcSQuSE0YMxjkVsGo1wLKKxHWodQuKYQsvWOajs5HPxRg9h2p4XVxS2TWLL7zu1M4nOlRPIZwLJcxFzpyaNcl44IWL+GJ3HqMhrXq8kwBrNjkeuUTxH1xQ0UWiSFsxjuyNuG4ngxr7DygIyNVU+nnwcOW46ZqoOt85G1y8WZ8SFSThl1yCOaRJW0VfMblq6Z6jReSr2EHChhyHSUMdjy8dfhqaNxpgV4WrK6RNIzr2UAojFReF+tbYhxIUQKLRO1wVIM9GE+54KQHLBRw5g45qOHLcXgA61sRgOa/SHNZ566in8xZ++q5EqwjAvBiwAGeb7xJkhZh/6DOrFo1h91Y9Adabigyn2S6PwLlLYxzjEqeSc8/lm3oQLoeKY0+S/yLIVHYXaJkGTY92K53UQH8gcuqixGgQzIrqC3hnKLLqwjRTi9VuJIW+BOHVWrFpVsrGD+Lh3FAanPXtGm1QDTYEHl1qDCJGETDxnQeFOGZ0+ID2g4+lY39suuTzU6gONfcbjymfs8CqmIbjzoo04mA03NIQQZRBmvnNzcmUF5RSKeL2aYfXcDUMcezSEYzM8T8ebxoi25Y/Uh1FDW6LjhOlFGLB4n4lgPNLPVIQRXnCxV06Qetn2Gvl7yLZB5z4igL0opeSGUFyVFankTmCeg+l3T3mTaVkSwJTjV2oJBxEdN6FE2IeDyj9dIDh5JP4g0n0Ye176MaR7jGb4iH0vRcr1i9eHXhci5quS82edgzE+9Ds/v4j3vudP8MzTPOUb8+LDApBhXhQcFp+8H8P5Q1hz7RtRrT0zvmPiw9dPSC+SyoCAhLEOwvl5do0LD5OwzSQumrmD/t2m4wf6eUQErjTqwlokIoQPgdEMF/GBKlLrEXpYBc0Aax0KnR5qQiD0PYvSwh9jrLqMw+S3IdMDWog0ly+JoDyMbK2ND0kpJaSSI8IntZEhMy4XGjSLiH/oegc1tX+Jo4zYikU0HTklVUNM5i4ZXZ+4POWjBbWUC0oSDqMiZnS7eS5iPpNKuopejdhYbx5G3Lk4X3IuSuOxjriLab3kPtHxRGHrXJrDlz7IZMs0d5B9n83YQm5fXITWzQVnvk/QfoIDHm3OcO9FEY54/skT9zeoEICw/kNEbWpIqeBcmI0kSwGgRuUyXmvh74F4bdN5UVEX9fCMIV9BrV9UHOMU5m3m+gGpdRFhrXf9EO71ujaoa4tef4gHHrgfH//wB1aIc4Z5MVg5gzrDMC+YweHdOPDZd2Lh8a/CWQMghUEdBCj86+j1IHacEDDZI9UEleQrZf2DiyaJsmTHBPyrgkwnAM1nq0RKTI8uH5JwoxWSAMn+rXjKp51GhybbBjDygAvf5kZifnz0YLQ2C/9lQkNK0TgI55x376KoDiIxvI7jbL+hP11oqhuEtP8nY3gPWNmvL+bG5eInLuKClk4iNp2vaGgiEn9pzDNhmI0XCVoXhVljI/CSlcRRJmNpHPKxiscj4jHRe/k+RwVGFLZ03M41j9dRsUJTbCbRSYU7Lm6PlksadESgIhPXIrltdOyjQiqmIAhapvk4E1HIp2lclJ+3LU6lR/34qHEzhWlJFCqZCjeimAuFHlWhoZTyM32EDyU6zO5Bx6yyY26IwexDnHf+LOrgADrnMKxrHD58BH/6zj/A4sI8GOalgB1AhnmRMctzOHTPezE4tBszV7wWsuykB6kQsFn4MLYyC86UCC/6ViKeGGoNdgRNK0fP7OBfPevxCOE/6TVS7rJnLz0ec3cxuozJVImr5dO15WLJOsCEeX1XuI7hIZjrOWox4+jYAnnrFJdNoyYl5T9ST7dU0JALwnheIY5KoV4SLzEKG1Vi7uoloUT7ilYrOW9hvyJsh6qNqTkvhVMpzzC/EG5ERDacRTquhqjO+gg2wrl0PiSywoDn3+eXWwAu9AyMVa7HgZzE/FgRxzgLM4vmh4w8xEvO4cptx1NqbC/80LC0c9eP3s7XSa5iVgSSuZi0P0vOYfzg5UJrTREdbAfAGl99T70FZUwZSG4sgstnnc89JCFIQpK+pvmcvSjNxSudoIjtflwM+9a18fP91jUWFnv4zF2fwANf+8pxrxPDvBiwAGSYlwJrMPfIF9E/ugerr7wD1bqzwkMV6SGXiQ2Eh4EglRRClnEuXXKg8gcmEDfWiL6lZziyaNkKiZiH+uiwotBrOIYiuS3wAojcrlw0Rg8nc2YiuYgK/1MfQUrCjwnyzldNRnFED+kgvGR8mCMKOwGMhJURHSs4xOpZcj8znePzvrK+gsYE0UlNnWkcQJWbSfzRIZP400qB+unRNGj5DCj5oMTrEZ26JELpupE716gSRpr5xC+XjseRwM7vFSTBS8tlN6HfY0hyI3Ht0Lx8FF4mMnncEHYiLZC2nXYajn2kf19jP/ndTL8flAO4chv+eOleIQ2cxDLd05STCucgpZ/Tl6Z7IzEH66ALHc+EDpu2raQKYWISb003TykZhSvlGoqRa0C/4z4cnZxvYwxqYzAcGiz3+njiqafwvj//Yxgu/GBeQjgEzDAvGQ79A49j/2f+CEfv/whMfzG8mmYCcW7ERbMu5rw1Qpzw4WNaProo38X5A+jhl/2MkQf7yM8kjqyzUez4YwiVzCOVu16v+nlQ41lnIUMKgWWByRXHQmUfyR3zTmLujKnMkaGtUDEIiQgb3JuokbPlBZJYi55QNi1KM5w5KoCT4EnnmH3NhI4N500CrimoQ/PfKOiTwG5exeQS0vbzmT1ojt14vWgNOk4aRzTJ7ydaJvaQDMIrP28XBr/h7o06fWh+gIj7TdqyEZamdRv5hNl5RylMGwGNp1txP9KJN1y/4yyTh8kBxHBuEaZmoz59Wqv4fnYm0Mq/33DChYzz+ZI7LUWq+E17o6rl/PzTrC2UjmCti9O9zS8s4b3vfid2P/UEGOalhAUgw7zE2P4SZh/6NPZ/5p3oHXjcT7nlvAh0AIY2PT69AAmtK0JJr4OAkFRRuNLJIxqiBEmESKwUA41p3JIOigImdy7igz28luf4kWDysymM9IKLjpdrOGFpW8k5ic4aOYhwjYd8dH9GQ4si70lIRRgiOX/Z8s6FQhVy5GiMaEzDC9EtA4WMU8uaFbsXQTiNjLGIwjd3Y12ari0LCaY2QU0BY0n9pQsQHS4AsRddDAOTkkO6R5JhnASUyJTpaM4drRslUwy1Nj9sNB1CBwq/rmiBI/I10nckYJviMZ1fLqwhMjEcz0vEr7mTTa/5dIGUexc1bzie/6+9c4+zsyrv/W+td89MbsyEEDJJMGBAQECkCJoTr/0c8hHU462eY6GpRUvh1CMf66l6kHM+YGtVKJxiS6sgPSK0qFRbgRYRhYQ7IUBIwHAJCQbCJZOQTGYmyczsvd93PeePtZ61nrVnIBFzIdnPtx1nZr+39a79kv2b33NZnP/Z0VGLIXG/Rq8JVbwWhZWreoScQLFub3zfTcpRtKL1i3cAfZNpnkuuOuZcVCA0fG76qt/RegOPLHsYd93+82zOFGV3oAJQUfYE5N3AvsX/D/2P3IyqMRw/NAF2BZPL58KScuxiGY5fIokdxuSXyV7nbZkL2OJuSbfGsJsnnMYkBpKIKUQjaC9qxKc1WHyaEOLyW7h4RTo0BL/Gr9B6UQC0iq04BqQPU/4gzycjhABlB5qwT1X5RHsDxJBgVAckRFc4Vy64vRjLHScTd5QVpvFclMaTzkLiewqhO0rukMneVPFzJqzTuVKOW9oGIAubRrc0E4ockhyvsETcY7imdO2kIMxCnWk6xdhb/gQhROFmWnaReYYm3dSY9AR/DcrGJPMDbRH+cEIK0VvjBVxHh1+ijZyv5PXLwqV2LXzN1uXa/PPLjrR3kWtFEXpNYswfHum9Tu4+j5afxWZZodEs0WiWeGn9Bvzw2n/E8PB2KMruRgWgouxBqDmKoSfuwoZFV2H4xacA6YQEgeRiSFB+PJr0gYf8w/cVryXOIAWWXBOYXRH5D4HPteMPMSkgCAiFBOxOxmGKYGCUgqEIIlY/hhGw8EyvIY4nOSqpUCZdA9FZ4iN5/eV0o+JeWUgJFyyeLuS8GZsqTaUL5uchVBw7GiOK5FwBYR9xnnx/0V8QLatu8AybfC5SvljKM4thakIMXY6ZfjGPsZVMFGfp9yi9WoR263MVT8v/MyZcnXY04jrye6uW5Ybe8dCwFKLhwYtx8Hf+QyKFdce5drwviuLbOReLpmLBhnAPo2tnbRTD3GqIizw4VGysQREEIedKWsPPeD4drePkZ8gRwYUVPsqyQqPRxGi9gdFGA5s2b8E1//htPP6rR8abYUXZ5ewxAfjiiy/iD//wD3HQQQdh4sSJOP744/Hwww/H7USECy+8ELNmzcLEiROxYMECrF69OjtHf38/Fi5ciO7ubkydOhVnnXUWtm3btqduQVF2EYT6pnV4+Z5/xuZHfobm8FByTKLQscEV9C1hnBEJbOFTRfYDfCXiB7hh8ZF/UtUKm/X3S97gOB/fBmhVKVIcyPAtQLFxL4e9pPPnxggqLgQRDZeRHFB2X4AUcuOQsQxTxqEaduWCEylC01xBDOQOWQpT58n74VYBpHBw0jCpGCHchT9364CQ3CnnnJirtG5ylmMXJBGRD5fKe0znyUWGnI84B0giivflvLOYI8AT3TJWk24yWaHhOBkiByEK4HS+XOAmx7BFTJvx3z/5fo95UihUWIuxc0g5nDQeJ8Pv8bkSYtmPzYTnwufxgdJqHtHZjdPgw7t+mzhHq4CHF5/kvNhz5Fu9+DWHvfBrNEuM1Buo15vYsHETvv23l+D2W2/yKSKKsgfYIwJwy5YteNe73oWOjg78/Oc/xxNPPIG/+Zu/wYEHHhj3ueSSS3D55ZfjyiuvxNKlSzF58mSceuqpGB0djfssXLgQjz/+OG677TbcfPPNuPvuu3HOOefsiVtQlF2Oa45i6Ik7sfHO72Nk/dMgcikMCIS2L6nlCjtnRnzIjpffl2CXzojP5fwDWBZbAH4N1TGhOCDlZIUfMvMvXo3HKYWD1A6pqrfgVRTEtYEgyIR7wk4Wke+xNl7bl+goCSEkW4zIXC2eAxPCd0bOTXCOovvJ7qjlHC8bV2tgtzbJG74Lk8KWcZqFI2bYcfSvcPuQmBuY2Z4k2odAuIS8r5j7+L62rIzRIpz5u3RGo4Mo4Dy1lIcp7cXsIfTjEnmYHI6Oc2IgngwT7yPOcUtIPYk/FpH5dpjgvLb8EZHEdboHPpZD69FBDreQ9Xw0iK41H8Pzz39IpGslkSr0JHxFr4vNnaWLXAUxWFYOjbJEvdHE6GgDz7/Yh3/41l9j0S/+A1VVQVH2FIZeKbaxC/nKV76C++67D/fcc8+424kIs2fPxhe/+EV86UtfAgAMDg6it7cX11xzDU4//XQ8+eSTOPbYY/HQQw/h5JNPBgDceuut+OAHP4gXXngBs2fP3uE4hoaG0NPTs+tuTFF2EaZjAqbMPRHdb34POnp65UeN/4zNlpJKVbWU75bOFz6VOixQMxaFBWrGoKMw6Cosumo+N6pmfbJ7zRp0FBYdhc8BrFmLIvxsAHQUnAfFK35wOMxEV6wIyfGFTUUdvA87SrxvR62Ac5TcNKT9UkuW9BqPg8UDhz/j9pqNuX2ctyW3sxaWbTtiRW6YLO4z6B1AsaaxtdnxPLaiEO1A/GHxfFHgZaIriCSbRBIvnRcOz5zH1qKZ2E7FpOtBHGNgsjGm43jnJFZ5zqMYFTqWW6aYdJI4tlb3DpnQFsezi9XijAHpD4H07FJ8Xeq9mJMY3VCZp5iEfRWKqvgWvNsmxkkpt7MIIp7/IOEUCHL5knok5jmKaTHXPA+xTRPS2ON/m+GPFC+mxSofofHz9uE6Nr68GVdcfinuWfzzNGeK8hsyODiI7u7u3/i4PeIA/vu//ztOPvlk/Lf/9t8wY8YMnHjiifjHf/zHuH3t2rXo6+vDggUL4ms9PT2YN28elixZAgBYsmQJpk6dGsUfACxYsADWWixdunTc69brdQwNDWVfivJ6hJqj2Pr0EvTd/l1sXf0AqsaIf10ovOiVGX4l/C5+jnvzB1sQGtFsI19skAwUGnO03BfsiPEYjGnZN4m7GBITgiaORV6CCGVVgcOB0ghsFQvJzfEfqxz6kyFAA8RKSyC5asaIZbZCiDndhxxOEBjR2RPiumXssqcfL9/l50cek5ZYS/l7QuDwG8LChMbeN4LWy/LzOJ7ZSrbPWJdX3hOP3b8ibk48RFGQhhBoNg2tDmCL+DN8vGnZZuTciT6DWajfppME0crVvKmvX8oPjf0Eo2wPolCIfMTX/M9VcDbjhcJ9y9U++L7kOtjpWebnkIs+xN3HuefRcNGRz6ktK+/+1RtNDA/X8fKmzfjelZfjnsW3qvhT9gp7RAD++te/xhVXXIEjjzwSv/jFL/DZz34Wn//853HttdcCAPr6+gAAvb292XG9vb1xW19fH2bMmJFtr9VqmDZtWtynlYsuugg9PT3xa86cObv61hRll1IND2Lz0n/Fy/f8M0b61vgXQ6iJA1qOQ5jIP3xb8UflTgi/ziLIwMQctLiLSWFP+cGenS18SNtCuE1AJgTHG8+Yn4SV1Vp1XNixDZHZ/akqr2Bl/h1/q5yLPQKNuEZR8GJ6ZoxQ6qilnK5M5AoHD5CODzKRJUUIFwnw/mNh0UOpUKXluq3vbLr3VNgSryldtjifaYz5OJOobBWYre+bDKObls1GfG/9Q4TnOMrGMHYX3DGZ38mi0o8riSDWurzc4Jjm0cRza6LoY3HNBRfpPU73mrWIMekPmHhf0WnlAhJ/fX7fCcHJq6ooyKuwH/c7dM6HgauqQuUqVI5QbzRRbzQxMtrA8Egd6154Cf/wrYux6Bc3wTkN+yp7hz0iAJ1zeNvb3oZvfvObOPHEE3HOOefg7LPPxpVXXrlbr3v++edjcHAwfj3//PO79XqKsksgwshLq7DhzquxZfnPUA4PZKGx9ONYV2csXD2cxJ38JPd5b/5njjhKYRANjlaHjt2icdqMsPMFISDzA9m1yQcjQ6HsgCXrha/n8vy17MaTEKyCCEiOjj82dw5NaP/h3RkphAEkwRgmobUSl88be+yFEXB/PnYG82pqUVUc3lTHIi17D5PTGF8xiOIkzc3YPwJSsYV4H5IOi9viGOX9sGuJHELu7Pqh05gxiqGHGU7PAcmLtoxazlD2sLM7K+ZPfmfxx9dszenLhmXCaiIc2vdLx6Q/fqRryvOHNM1lVfkl48Rz7h0+BMHnghNNIdwbij7KCqN1L/5GRut46aU+XHn5pbj3jl/Aac6fshfZIwJw1qxZOPbYY7PXjjnmGKxbtw4AMHPmTADAhg0bsn02bNgQt82cORMbN27Mtpdlif7+/rhPK11dXeju7s6+FGVfgZp1DD5+B9b/8ko0+lZHgcbuSqaPhALIwpvi9xTWlZouL/RgwcNibDz/yiCs8CEUXszz4x3C8fIDWVbYGnHR1g/quJpGy0VlVWp0oMLrFG6UgNi8N46fkmjhAg5jfOFCbNIr2rj4KlMb+hOyAEmOGI8r5vchz2czfD6hflNYMoWEeXzRhYqvUXZffFwUUZldm6QT58RJJSVDpEASewZjxTNfK4WqERprswgSOXFZbDp7m4RASjl7PDfhJrJ5eaWq5fHS07NimXi9NNdRfCM5hUmA86ocYWk58i1Z/Fq83rHjimvpUsY/JhCO4Zy+8DMXBvGxZZkcQhaAI6MNbB+p44UX1+OKv7sYD9y7aNz7U5Q9yR4RgO9617uwatWq7LWnn34ahx12GABg7ty5mDlzJhYtWhS3Dw0NYenSpZg/fz4AYP78+RgYGMCyZcviPosXL4ZzDvPmzdsDd6Eoe4dy68uo978IgD/GxsnFk6LvFT5XUghMukZJibSGUtPndHKj+Fh2reKHtROh2HSK3NVDEmIkXR4gikLpCUpXDUJU8Nh8Qn9qH8P7V5XLXB2S44gaMrlu0nmKS3SJXLE8b0yeN8joEEqUuXFGiLQxOXls4ZkkVOI55X6ZK5dfO84e5au3EE9ySx5cPs/cvoXFmRBTLYItjVUKwzQg+Yi0hs45Zy+/GXYx84dM3rsRTwuL8lxEZzc05tmIDwKHecVxsbrZpdZELhSRGGvhQpsWhLmI/fsqSqLOebFYllXM8auci5W+cU3fug/3bh0exfbhOp5b9wL+4bJv4sH771Lxp7wuqO2Ji/zP//k/8c53vhPf/OY38clPfhIPPvggrrrqKlx11VUA/H+gX/jCF/D1r38dRx55JObOnYsLLrgAs2fPxsc+9jEA3jE87bTTYui42Wzi3HPPxemnn75TFcCKsi9D5FcGYc0xfu+7VxB/QkDwuqNGrE86ViaE68S0OAKR/1B1RGMqW/m8RRBBBmmprSwZn69HCKt0iHAdbzdpbWH2bViYRKeN/EkySSVcPaFZMlp7IMa5AUJFbxrSmIpXJOdL3nfrPinkmkKTUozGiuTgoHJ+W7wtcBVtcqv4nscW4CQHUY6Fe9lF1zSOjceAKM5IzrLhc7S0NuH7BpA9NOGB4yN4jQspxLJqWvGmZFXA8X7CeAzADcczsS7uMeZC8j6UrjeeiHYtKQFxKTp2A2PT8HBPIeevcs63/yFKldHEfxSk6mK+TllWPifQecE4Wm+i3iix7vkX8b3v/F+seOg+MbOKsnfZIwLw7W9/O2644Qacf/75+NrXvoa5c+fib//2b7Fw4cK4z//6X/8L27dvxznnnIOBgQG8+93vxq233ooJEybEfX7wgx/g3HPPxSmnnAJrLT7xiU/g8ssv3xO3oCh7ldYCARKvZTlc8pjwnT/iIX8XascBKMZcr2W9YL6eEFaxutUQLGwKx4XwGgioyTXoQLH9i3ftgvBCEJbWt5mB8WE3dht9cQjFawY/yItOy9dFWqLOJOdHEotnohDworqI1Z+UBIAQMXw9Fm7xPSDAGBbHFN08DukSCEWobOXZDsZUMN/kMmxJoPI4Y/i5RfylUDRl5863w48LUgibKKgQ3rf03EiHLu6ducIUX483Hw9IQh3Za2FAySlEEoLxj5joaPL9tjyx6W0Jp06CmV08di6tMaiyEK44D18zrMTixH7OP0DxDyPv+rkYxo2Od1Dj/P65ilKxSBhns1mi0fTLu43Wm3jhxfW45ruX4dGHVfwpry/2SB/A1wvaB1DZV+k5fgGmnfhBH8JF/uH/SuKPRVzNGBQG6OB+f9zzzxp01vx3aw06bOoDWFj/3Yblr4rQLzD1/PPfa6FVCO9vgLiEFosxLqYoxKojgP+w7qgl6Sn7/pnwe1HYTJAUNriMBtFhtGFs7E4WomE0iyrZgoS/G4OwBBji9di1k+6lDW6d7MuXWs2k1/kcsRVJFFyG/z/2J5RjSKHS5JZleZJIP8vxA7kYZ5eQnazsniAdQIvx/tlPQ03vUbxfIfKiOyqcvXEdURPvKv0xQi2ijF8UApfb9sSijXiNJI7z1j4UHT4+HwsyRy5qLm61wm5vVVUhdy+4fVVyBWMOLLXmEZoQ8g2hYUeh2jcJwapyGBltYNv2YTzzzBr8yz9dhSd/9fAr2POK8tvzWvsA7hEHUFGU3476y8+BXAVT1FKobSeJzop8jSj0AyQ4Y2BlyFC6Z8KMkSFS/jx0ROiwNjpw1prsA927NBRaurCVw0LI50wZk/dcS4n67JolAdXqdgF+/xjCA48jbDQmujpWfAeEqAnKh2eJW+PE2yeK6oidOnaejAnX8+ouhciDwwYyMEZWPfuzRscR4l6FsGJRFV1WIbL4/UuFEOG+ogjzIyUh0BKZT5c5a3Jic4PPZJvlGNP7TDEMm07onzEDhFVtWjcHEWny5f/8CGUIXgyQKIVvW46Jr/GcgGCN9cUZ4T5ceO6rkgs+WORxTiuiA2zgRSGHe/ne02uEUlT/lpV3/YaGtuGZNWtw16JbsOKhe7BtaACK8npEBaCi7AM0B9ajGt0GO2lq/hneqoYCY0Jy/Dol15AQmkKz2EBykgBkgkOetzUHkI8nsODhNWyDOES6ZuUoE3heuOTn5z5+gHcTyVHmSsmQMP9emfxOpXsX768l3EoIE2CMD+HG+zV5iBJRCcGwOIjnQ9yH9+d8xbFzKHIVYeKcJFFE8Zjk7AY5Ixy23F3ko1i+JrEpxV+qKE69DFn4piHymVjtmKC5CMbalnPJvwqQHjSS1elBypn8j4+s0jju79fiJXJgeeffc8rG4auzK8TiDYNYqSwFYcptTK/zbbqqirmwnKrA+X3e2XOoqhQijkVA4SYaZQUE8dcsSzSbFeqNJgaHtmLFIw/j9lv+Dc+vfRqjI8NQlNczKgAVZR/ANUZRbt2MjslTYWHgDIeodnBg+PyMuwWxQayn2DXjMBmlogQn8vCSC+b3qXFoloLgMYCBF3tJLwlxSN6Riq1sjBBhAf6dw8wgxPYsbD+mMKZJ7lP4oK6F/EIWB8YYlJWLYemqojjmGOa1YV8kxw/k879gglMp45dxDnk8PqQanVF4zcLnDyosTQrkfbcIRaEVTctPWZSUIPo35AUb0S2VunMcIR/PCRIXE6JSvDExHzEI0jGOoRxXEMnyJPz+GGPArZ6luObCDycaQXOOJ+8LcRyQqro57B1zAccL3RJXfJsUtuU1nUPYFkiFIlzAASDm/1ViPd+yrGJFcL3RxMDAEB5+6AEsuuWnWPfrVSjL5rjzrSivN1QAKso+ALkSoxuewaSZR0Rrr1X8ZeE1pHCYjJsSASat8BVCwSk0xsImCUHvKVmbVlowmUD0VadGqgAyXqAIoWJYeXIYz/lt3OIDSE6kHH8VwqtW5PX5sQFwQFErfBgZeeUsr/PLDqIvGDExDMz3LluqWLC7aeSU+TxBEsKTBV4IPTs4FLaIDlWmF2lsn0PZZDgJR4JF6otnMrUnxCM7cSTqosNaxfE5gKjwjhqUYtidz8uuIKK45HGZbMwc3pXvVTQJxc+5DpSOqB+IsRbkXH4s3wW1FqTIezZRnI1xEjn0jOQExllgx5cQQsH8fhOq0oFAsdcjrydciTy+1N8v9PYL6/hyjt+mTRtx/92LsOSuX2LDS8+r8FP2OVQAKso+QrP/BZCrQNYXTowRfK1uYP45mh9DHBpLoi/sIcLHQcyB8/hCRSulkGwUKsF1ikUQBJAIO6Yx+nAiF29YqSc4LAzTEqYMbWaEOCpCvl1VudgD0O+X7sQRxdzGwuZuIzlCZUQDa8PCjAsz0jkQQ9J+AznvgLZijfECJ9ybo+QsyuINYabGuY7L4MUWPey+8nFp3BDzDGPTGyrOF79TCsOGKU7jofQ8yPfJv3/p/U3VumF/yHNQFHw8Dhac8X2N7713Y0lYltEdFrYi5+/xM5gtkyucPxZ/3JGRhTXYkTYGlQvnCAUeXFRSVmVMUyjLKjmDIuevCk2eiYCR0Yav6m00sb5vA5beuxhL7rgFmza+lDmUirIvoQJQUfYR6gMbgKoJMq1NW1pp/UAKH9SU2raAXSIOxWYukBceUZTwseDjKMvloygiRNUr/HkLI/LXeDRBbFXOAVbkHiJdl7EiB5BFoTUmun6cu8dFLTZcILZScT78m4RGmpIYTgZgbRGERHK7ZOVwXF/YmThfXjymOZGz7oQo4DnM3L2km+P+fM3U5gXCQeQ5FPmQTojuKOJaCkh4DCzU4u+hmCULr6bz8X3z++hYnLOJK5w3Ppjgw99ShCLfJY4l613YKgbFWFpPYq31Ak0I3hBBFtflUK+LwhUhTOxCw/LKUejZJ1zAIP6cc2iWFcqwSshovYntwyPo27ABjyy9F0vuvAWbNryowk/Z51EBqCj7COXwIOpDm9E57ZDsdf5gTp+XSSywNzS2bbQMBiZByE6Kz3tKFbN8QObYCWJ7E6EyYt4VUmWtN9QorrsbHbJwH1HcGd/yxa/qkQsnAmBb7ocgcwj9GVloGsoLS8Ks+f+zSSz4uQzXCGFqbg/Cc2xjWJFSTqG46VhME94YKbj8PCUnjnMEeV7Se4EopiCOl+KMcyMdEWw8MonpVue1FSJCMtZEyFkI5ChwonsYni4KbWui+hKucaYy5c/CbhTnZ8cunj8ewzl86edsDHwtSvPAs5COSc8/5wgCgKu82Ks3SpRVFQVgWfn1e5ulr+atN5rYPlLHr9c8jQfvW4Qnlj+AoYFNKvyU/QYVgIqyj0BlHaMbfz1GAIqoWAvJeSNAtI+xcPA5Z45zyQxiY2WwuyXOzyKx4mbL2QD8B6zPEwx5acbGfDsfzvQi1BoR7hRWEQsndprGFS+GP/i9eGEByc4gi0Rex1c6j0UUWUFACP0CcG+4JInZ1QM4BzA5nbLYoCiKmJ/G98DOHTtP3PJFunR8Da4GZleNe/TlWYjjKzkTruMvI/aJ18sFXKsuI6LsvWATVoaAAWSCJ4WEebtwV8VFsp+JsvfCiLn1mlDMh+XrSfvPO70ydA7pBJPPb2QRnxWC8HsBxD5/LD5H6w3UG2W8t2ZZYXi0gdHRBga2bsNza5/B/XfcgqceexD1ke3jvgeKsi+jAlBR9iG2PvMQphzxdtiOCTveGUn8cX4bt33x4eCQjyf2LyuHjqIAV+3G6OOYiB8LGhNXx2DbysCLyFjAEXLZ2LXhAhMOdyKIuI5abN6HTGISEBbbYE0VFIvNhU/QDWVZjQljVqFPoDU2N6LYday4r59ozsyOEbF/SlEosZBjUcHFGXGOoluZHCvp4IG8ILcGWb5ddKqC6DYiJMzzzko4C61LCziEvbNWLWnQQHjf472N0Zcmuqy+Mjd3a63h94nDtalvHiG1qUn3njuIMRwdhJjfN4nAVoONj2PBx3PDBR28jyyc4XGlJdz8+bn9Cy/RVm80Qw8/hy2DW7Fu3XN47JGleGLFA9jU9wIa9ZHWyVGU/QYVgIqyD9HY8hJG+lZj8pzjd/oYIr/cm2wHE7+TrwJmz4VduIqrdCkc2KKzIMSHFCX8WhI8aRCO8vV4uWq3KLwocaEnnwHn8wURZyEsquQWAtxoOIV72U2kcP5akfLgUmNldvZC9TOSA8gBXO8qplw6BGEIEn0ThevIjahlT8U01tQzUDaQ5veGlS3L5OQkUnLpRGxV5h0ivErGhMIbfy4S+ZKpejnILONbrrCQS7rQO5D8s2O3MurIkIsJWZXBoWyRe4gkfPnk0h2NBR4ibOvbvki3MYV9U46nUIaEOO/kKF6PHWcKFmQcM6W8Qecc6o0m+oe2Y/PmAbyw7td4/LFleOpXy/Dy+udV9CltgwpARdmXcBW2rroPkw45BsbuxH++QTcQuOkzwgctMmHEDl9Kz89PQS0vsHsYP74NkhMIiq07bCFairBOFO6aDx/7qtoga6JYKQqxskYQeDYTGmmkY8OMQZhJQUZAWVVxmbfKiebAHEZumQEikfcoRFp8Ic6hPz8vg8cOGpNcqEzLRjdOSD7Acc/EJByjoxnfrySsUk89iNBsEvMGAIkcOA47pzBsEtYsnpJADfuEPwKkY8jXSvpfOJL8nIR7TGPMn644hYbieFvf03gP4Tx8XhcaNMt7cSI3kkJfQe7j51u7VBitNzA4OIQf/dP/w8pHlmDThhdRNhtQlHZjbC8DRVFe14xuXIuy/4Wd2jeGf+FDjj7nj1DxhyJR7H3G7gmQaZsYumU3SgoMFlMssDgqV7n04c291EgIQ67GjB6QCCOyQCxDCw4emx9XCrPGVLrM/ZGjluNPS4jxeQApWhGFCgsHa23KFYyzKcSRGIcUVTG8GXbi1SZ4jP54Vowmc7BY3JjWcxG/k+FnFu2y910QsEScZyfOF3oZ8rjZoZXz0RpS9aNkUSf+YiApgpNTmddBJ2dPzh6HiMeGecO4xB8H0a0VO1tj4/X4dQpLurH446txrqEj7unnV/ioKoeHHrgHd/zsx+h7Ya2KP6VtUQGoKPsYVDYwuHopgPHyt8bZP/6P/1ZR+t4MYoy3toorXnaNr1OFCl5uDcKuGJDcIb5edGvIF1IYeNctHzfFY+WybbI9iN9NhEIpP4YLP4A0Ft/02aYG1iYGWPkOs7mTWjLm/vESY8J5GuMq+qFl4pJf43FGx8yk9YjBYjdcvFWAxfM40bqGXUKeW47Zx/crWm7g/EEWp1LwJTeNxypFfxJfSZindypMo5DuSZ9lPf3iMa1zxRXXlF1LFprIXEHe7sL7zn35OESd5RWGfSgU5XBLF34fK+fX6x0ZHcXiX9yMqkoFIIrSjqgAVJR9kOHnH0dza/8YJ2VcKH1QJ3EGlM7n+jWDE8gfqBV/6BteGzUdG93ElvBndJsoCQ05Nnb8kH3Q+++ci1Y5+cGfnEApyIxJxQvJHfQXl30Lq9DDLSmU1omSVbLifliMgYtGhCMl+gJKQ6z1XvkFatmWtCvFuWTlSayuwrmlSza27Uj+e6b9OBRLyMSS753XOkSKx/N9GcNzkzuQ8br8LFBaKzeKOyccP5OEdKugS1dMDh7/ngnB8D0tCSeEJzuiYjzpOU2OMo+xWVbBAXR4ZvXTeHrV41CUdkcFoKLsg1SjW7H92UcwVtiMRQo3GbJDeL0MYpCXgwOSqCNxPH/4c9+0ZPTwUnHpA57FTVH4PEEOg7Iei3ld8M5MrfArWhjjf2dBxxdl8cWOHxDEGZI4dDKEiTgUYe/lxwNpiTEWTX5sfqsTAgIQThdfgfL8OWuE8OLLhvtkccV5bVK4GCuEErUILqRxx9zHFtuX4rFpjmHEWsQtOYFj3DaTKrKT40fi7GkyuYCDt0kH089ZasXiXJrXMWH8KNrCExSftyTwYoNyIIa645wJcZmeRQ73CjHowvMacgBH63XcfNO/Yni7tnVRFBWAirKPsv3ZR1HVh7FTIjAImwqUCkGQPnxFFBjO+aa40d0RYoXPxaKDHMVmun7XJAKtMWiWVfwQBwsfBIcLiGHdZunCUnNJHJVVFRP4uUiDxSeQhGImUrN7puga+uIML844dCwdqRjmphSeLqwNoesk8GI1asy3k46VDKGHsGUIicd2JELcRecuFKPIIopKrn9mWsPR/uUkXkXGozDXkjBMYjSFZiHeqSRuSYhaCkpSilW+z1DbnM05/zGQRFkI2cYt4pby1MskTAlCwFEQdWkeWx3kmDsaboLEPPncVhedv0azxDOrn8a9dy2CoigqABVln6UxsB7D6341Rv+NlxcYXcCgAVx40VESEoDxRSGUWoBw8UYUWjL0Js4ZrxMcMKBFxIRRFH4pjeAOpX0oCL0xxwjXiKs++XcgCSN2A5O7lsQq54F5lzAXUZmDFO6ZQuiYiNCsqjBHfpmwWPsgKojzHEFA5hcSl1wjrfgRcy45tE0UXbtU4CBEWsv8ZqInvIYY/hb7ypAsRF4fcmOUc+Va5yN3GtOSdMltywVbfCLYpQv3JN9K3paJPKJ8xzAP3OKFr+HFezrGkUs/O/FsE/f78+87C8F6vYlf3noztg4NQlEUFYCKsu9CDlvXLIUr8ypGKQKy18EfkOEDNrzOGqWsqiQ+iNCsuLqS28ckoQT5MxDFTJ6Uj+iYsfApK85FY1Ek/gkSOXfSoYqbW5RtEVrHSHHIwozdOvklj5fhR56d6FSFkCw3HWY4xAvyIdlYeML3DiGyHIewEfLyWPglIdUqaF24Hos2bvciBW2aapEfmWsn4dSln2PPvLDPeBW2Y3P1+FqtkjF/xlLuoKzuFSuEOIrnMiZ/H41QsfFY8QxyfmZrqDj2/4tiMIXrWRDKr0azwvPPr8Pdi38JRVE8KgAVZR+mvvl51Dc9t3M7k3BHKA+98WtS6Mn1VWO4kpLTwv/LbguTHMUWISFy0fhoXmkC8I5VXJMX2eHxOuzwAGFpL5IjQXLRxDX4/DFHUNyH7Ecoe+1xmJNf4HBnJtikaEESlYW1cZzR9RIzJn/n4/KZgShG4bnLc/S8Q5bmil1FJ8Yn8/PkONkVax13LoiTU2dary1FIwjchiXdQdiXZ9+YTIy1CvP0pJD4IyOt2iHniCuIM4c3XJsFN+f7VS59jdYbuGvxL7F500YoiuJRAago+zKuwtCq+0A70dKC4EO/JQFlFFPpq5LiMLhY3IuPP+D9OZKjxpG/JCYBGOOLP6JQDNXELp0DyEOHLCqT5PROWb5Gr98huoR8DI+P9VrmyLW4TuI+kjgKcxHyA73oMFHExLw/OY+ZI+X34zWDyyqFU6NvxqKPhSYPAGnMUiTz/MrCjayqlu/dUWytE8dHQl6G/fwKJLwbpckRcIV1i+4e2w6HxyDnPghBF96IWClN+flaXdx4XpcEnw8vc6uYJGBjKF/80cJ36qLYoyj6nCNUVYWyrLBxw0bctejWMSJXUdoZFYCKso8z8tJTGH157ThbcmEABKEGQhnav/DvWcNm4fLxa1UIV8ZqXhJOn5Hixl+3qlLbkSQe8xBdPBFvpRQ2ZUHZLKuwncOiaUzcpoVfJ+EyyduPrpUUiZDH5olqhLD6h0n78XUJoZI4DNKlm0vr+CKFWVlIxvEAIHJJONI4DpvwLUlMogznxvNlxRT59igEhUtK4zwPaVk7L/ZNPFa6dOMLpzR1RvxvEmiyxx+vddzqosqxRHcvCOQkOpOLWVUuiUCXhHElBJ8v/KjQLCvU6008cP9deGHdeP+NKEr7ogJQUfZxqGxg25oHQdRadCEsJbl/EFd15zDqHErnncGKuDcgoZStNNgVDIIqhZEpEy5RRDqCtby2bhhJXk8Qz+2I28qkkCNXIOdunxSo6RzZGPiW4cVgUXA+YXCJXkEgsSCxVuYUJhHCcwb48XAxiQy3htuK53fB1aKk+mK+Ho/bC1ibxu/SXPqm2S4TXjIPjuE1iOU+4+UAyntiIUjOq72YGyhzJIHo2CY3b5zwrbAa4x8NQiu2FpfwXMa5d2kcLHjZGWbHL7qMJs25DCmXZYlm6YUfh37L0qGsHMqyQv+WLbjtlhvV/VOUFlQAKsp+wPbnV2J0/eqd3p8/qBuOMFw51IOrwsvDUfg55Qum/LsUkvOfypWTITl/bnbuqvDhHk0wAsZ8DAuR1iqm+LxW9soTzpQ/PC17huCgEbuQ4YIpjIlsnELBxHPLJsyp/x7PWxBuYc3fPDcyrT4hHbSs2tfJYhQT++bFcHog5lQKsctULCyDvk+h9HQffN9JgIc3IX6T8ykEIlKeXirsaHUNk3AeNzeQ0vsm38skBl16v4IT6ht3i7xEnjuWq0RwoZ8fj4+Xd+M/GKrwc1X5FT8azRLbR+q447afYe0zT0NRlBwVgIqyH0DNUWxa+hM0Btb/ZscFQdSofL6fF4GIQjDlZSGursGCkEN6QKoktsag4JAmUpSSqzatzXPdgLBsW0sYltPVqnBcKfr/hV1anD2WfcjcwfEaH0vHjXFBhCCMFUHkFYXNQrSykCGeH76Zs7U2VDWzIPOtabgxNADk4V4/O+x2ZROAXPSJAuS0VxRqKZTNblkSoMkJlLOXNbgOE5b2J+H45fM+dh5zJ9Zx7z1xfs6t9JXPSSwm0dniCEbBa+IxMkUhNf028TqpObl/RpvNCs1mieUPL8WPr7saVVWNuQdFaXdUACrKfkK5dTM2P3RjaA796hjxnYiXg4MXf+TFn0+oR+YMOko5eGWV+rJx3ljpHJql/8DnSl6ZK8jh4aRGSISAW1p+wItD7nQiizv89pQLFzUKjW33kgRSNMEyJUUkT5DOU1W+d1xy2FKPwXhPlNrDVFWFqqqysGgWJmZXrCX0C/g5kQ2Y4+3AC7I0n0GsUcqvY8eRK3tTZ5UUgma3k++FK52zUK5w8aIYFAIyVfCmOY9OHZG4cPpyYrwsBJO7h1jkEu+FxTz5QpDKiXw/IZxd5XP8uMkzO6+VIzSaJUbqDaxZswb/79t/g8HBASiKMhYVgIqyHzG6fjUGfnUbyL2648HOHBstDmlN4CrkAbKAYAHIuW3GIAo/drGqUC3squQklSGsl1be8NcuyyqKweTqOJEfh1jNyX0Dk9iAcKda3b1Whw2ZqOEQJ8n7DuMH99QLg4gpgEjunA9Dp2taY+M5opOFdBwFOzKumpFuJFXlsovpXHY/aVsK71LY4KuDueiipZIXEOcw2Tkz95CHwnOEdAzvKMPYUbghea157iHfg7yGuHb2nrG761JxkcgVjLmeLvxhIUK+8g8JEn9cOOcLhhqNEqP1JjZv7sfVV3wLLzz/LBRFGZ/a3h6Aoii7EsLWp+5F59RZOOBNb8d4RSBpT/EzEZqOUDMEawjWANYSTOUFTK0AytKhKAzKyi/bVvnYLkzl15I1QhwaACZcwLCABNBR82LRRlUTQqAAULnYDsWLhFR9Wyv8Ch0mrDlsY+g05QcaeFFR2Jbm0jF/MAkRG5Z4Y0FjouBLDplzqYWMIwcqvQjm87G7ZYwB2NQM/0NiAA4U29lE99IaP0+helmuFQwgijwvnvP3iS9jW16L903JqZTVxjxH7OillUGMf6+seCpYFJIQhWnChMlH+bYx7qPJ7hvi51bxPm5OoUnOJovsSjiecYUQ5ws+6o0mtg8P4yc//D4eW/EQFEV5ZVQAKsp+BrkS/Y/8B4pJ3Zg0+2i8mgj0B6T2KmUQgMYgiD8Haw2apUOtsEAQRZYIFIRG5RyMsUgrpRlYSwCZ6Nb489jYI6+quM9fEDkAHAws/HlZRDkCiuA8AimM6+CXlZNumwtumxSFzhHKcA8sZqLjFHq98Dn9eUSeYhiLtWF7iJcTIa4CQnxxSvNIwUXka7HIY5Hk2OZkJ88gCjXO45PVvewkEoWqaJvCpbFtDpJA4nli8SVD4lklNN805xcGkR5bt5iWyuBY0BNcyyDwTLYNca7TfIwv9nicMbSMNL/cINxVqf0Q51LKXM2yqmK/v3qjxLbtI/jFz27EL2/+NzjN+1OUV0VDwIqyH+JGt2HTvT/EyPqnsw/f8WChVZFvEF2GNjDNysWfy6z6EjFEzOHiVDEswq9GVA3Df+jHZP2WkCMhVNwid7lYkBhxfLZSiQgNxi/hwHH+YAwbIwmQlMeXgpsQ29ntc1EYpdAp95rjc3ID4yhIxX1Ya1O/O4NUFMLOXHAmUyg5NYFOffRM7EcYTyX7GLJjx+8/jb2f1ueAkLfR4Tnm8XGRTMrNE3OINA654gnI5+fJSuu8158v1OBrVi0Czz9HqYlzbAXDz1mo8m2WFZpliapyaDRLX/E7PIpbf3YTrrv6O2g28+URFUUZiwpARdlPqUa3YtP9P8Zo32rkAd+xxBVCHKHpnBCBhGboqcaCkFdcaFYOMgeLc7c43FmWqY9bvA6J/Ym8kAoiDFJkRMFifHPfygX3DHEfrk5mgzNVwaawIB8TnbAYFhXzFBL+Yl6ZcOIqbj0SrsciSea3MfLXKFyNiWssJ6EVcgKRwqgsBPloFtepOpgFkq+y5YNZdAMEcuL3MJ0xzCumOInONN95WFe4fBWvT5xcxlj0EW5anieNx2+TrXjIRUkv3qPUOkc+S/IZ4UKQtNoHt3rx7V54qbc7br8VP/z+tzE6suMiKEVRNASsKPs15fZ+vHzPdZjxu5/GhBlz8Wrh4AqEigxsEIIGQGEIlfUrhxhDMJUP1BpDMA5wxlcKewnpiyIazTLmxRlKoVgO2zoXQr+x3YrPtyuRcgBt+NvUhUQ8HyKm8KpJOXOO/JVtEjxef/jctopX57AWMWBMefFEiJamsCQZH2YMLpxISoQzKcTJRSnGUAoJRxWYCkaMMQjdYVj/+Os5EaoFwRobqn19TqK/R64W5rP6sVAIR6cIrQEMpe3hclQlFzIryOAETf4dBOMohqQBUSAT3UR/T1G8OocYQhchYL7v9HOYdH4/w0WzVWcozVVq6ZLvw8LPBSewWVWoygqj9QbuufN2/NM/Xo7h7dte8flWFCVHHUBF2c+pRrdi0wM/QX3T83g1J5DIt4ApieL3ZujB13S+xQs7g1VMyE+uD7tkZSWWZDMITo1L7o64pmztMqZ3XKhK9mNLgkCu+8rnkj3iWDDIymMZJs76yfH6sZUXMzFUHMKZwsyKzlg6l9jGY5dhURZi8ZrpOPK2ZHYu7+wFEYaUX5kZjeGcMhwcBRzPG1GSa3E8nDeX3gfZk49FWwxRh3FIYZZEnJxn0ftPnJvEPMZwLzfJzuY//+KWLrJCuAwh37L0hR5lVaFRlmg0SgyP1LHk/ntx1T/8XwwO9O/wvwVFURIqABWlDWgO9GHj3ddidOPaV92vIl4SDmhWQgQ63yy6yaHgyqFRJiHmXC7CeAURLvZoFV5lbCqdmiRba8Tx8O5gaDadViQR0WIh6OR3Fh2yuICE6ydzArMCCSGeUt6bqKAVblu+j4iIinO7GPZkQcjiKYibsG9sb0IshFNrFOKcOL4vcV2eAynqjRCxecHHKy35JlxB8iFvzjtMS9FJRy8JOoo/tyzfxmMXc1rxvbjW6t00fr+qRxWFIAs/DudHMdj07V5GRut48MEH8N2/u1jFn6K8BjQErChtQrmtH5vuvx4zfvcz6Jw6E+OFgwneBeQtzRDy9SFeA2t8KNXAhfBtEVq8OFhb+A906wBnYeBQGcAYC2uMLwo2Ji5lRsavvWtdhcJaEPlChyQsTKyGjSLMcpUvQCFEy4UaQB4mLqvKi5nKwRrfvsZag4pCaxXyrW1qNZuLomi5pYpbHg+Pj0PDhqKEivNJYlpj70SYGLbl18Ml4sTzcZxryErVcpmu4ZCzz4vkMDgotcthFw/k58bBgZyJDh6vMSwvDTGPUQSKpfcIgEVa9SX1F0z3GNc/FkLWjzcJTBPuX67+wSKZ103mpuBcCMK9BWW172i9iUazxCPLHsJ3/+6b6N+8ccxzrCjKjlEBqChtRHPoZbx8z3U4+D2fCiJwLEQE30DDsCKE8Gn8B74DbHDyjLFwxP0BQ4GDCS5elZooW2KhYWPY0n/3eWeVI5BN7egonK9WcH5dy5q+DjDWrzvM7VAsixN40QKkBtZWFn9QEpBV5WKOXBRVIb7qHTGgKCzY+TNI4ifm77G7aLzraS1iCBXh+LKqooBk99KvAOKn2lUuqTKf0gfia4r8Om5YzU6nF39I4eFwsHToTKzk8OrMWgNjLUhUMlM4BzdzTJIWqOSScGxFGgRBWYlqZUQBGNvKWAvnqjgWWTzDFcMAQtVvqqXm9YHLEBZuNv36vvVGE6ueeAxXfuvr2PzyhnGfYUVRdowKQEVpMxpbXsLGe/4J0+f9V0yYcfiY7QQTq23hCGwAcv1CYVOYNoYlCyBllPiOfNYUIYfPgciArHcFC4Tl04K+hAWapXfprAmNk7lSlLzAiw2YXVoJg4hAFVALvQRTv0ATZJl3H1mRkBR9jkIPQuf3dpUoDDFeLILC7Xtxa0LBA4s2f+/+dYfQrzAURhAZVJQcsxJVMgmDyErOop/12NOPY8PhIi7sb1hwVbyKSLIPKe7ui2I4vhx7CUJWJvv7twirb7Co5sKQ4ABHH5T73wTxyfmfhoLDGK7NLmR8jjhUHcbLKQD8R0DlHEpXxZzAPDcwtYQpS4dms0S9UaLRbOKJlY/iyr/9Bjap+FOU3woVgIrShjS3rMfGu67Fwe/+A0ycdRRaw8FBtvm4pGOVxwdXqHG+XsxF4+MMWAjWywqdtUIUa7Cz6EDWgIxBLTSQtja0oglh2lgRDC/aWpOVWcz4/DKgVrNwzqEobCZ6AL+d1+vl1UQAdv5MGrtJd8DNWlwQVHw9gJdxS2sUJ8cqhWWd8+sYs7sVu7m4tDIJgNjMmYhAxkQx1nq3NoTPiZ05DqkCUSgmY42EIydWGPH2ILhRtROOX2xPE8PtojhHhn65qjrcdQy987Ipwdnl7wa5KIx5maH9T8oD5AbP3lXmfn/s/JVVhZHROh5+8H7881V/i00v940zT4qi/CaoAFSUNqUaGcLGe67D9Hd8ApMOOyHLgwNCmNVQyCfzfeZY66UIKMFUlc/fIkIXWaAAiCwKAhqoUFiDIrSOsTBJEFrfbobdNm7XEowpWBPy7qwFr1VGhlAURXIFjYGzPuzqw62hjYoxKAoTl6BzxrdrgbUgl9q2cBGCtcH/IwOyqRjCWpGXGObAiFiyEeKJBSeHdtkp8xorhKIRQq3hmnCEypBfWs+5UN2b/DcKas/fWlCcLZXUPF8iqc+L1Pg+hr1ZQFIS19bya9K54/B8es2LYVlJnIRsFHicA2iCq2i43x/FcD8QQr3C6eM8T86V9IUepa8eL32fv5GRUdx75+344fe/jaHBLeM8zYqi/KaoAFSUNsaNbsOmB36CaVUDUw4/OYRMEywCSzIoQIBjcRCy3mLYMIgCw6LCJTcw5KCVQakUlp0uC6K0JJs1PqQYRWDIB4zLtoXvVFWw1sbegCaoKp9/F4SbAYwJFa1I4WsTnLAq7G/ge/SldX8Rl7vjPDZejJcdwRqHn+U8hnCrDQIT4OXcUh5iDO3yMdwHkFLhRXIXU04dO52urKLIy7Zz7mIIfMc1k0O+nRRqRWFFsYgX2PE8yBtt8/vPd9jqErMQNGwSh3xEQ6kBdiriSc4pVwLHyuBYOEJxlY96o0Tl/Cofg4Nb8cuf/RS33PADjAxvf/UHWlGUnUYFoKK0Oa4xjM1L/w3NoU3oOfZ9KLomZ9ulE+gFhldJBIvOkN/nt3FY0qBWePFH5ODIO2mGklvkU+FcyHsLQpGbJUfBZwAbapBDT0ECUASHjqxYHs1QWCc3BKCNrz8xSAKIhZ+11gvBoHUNbCbOHELIOCi0inwCJAWHtAw5bYYAUwtr9xKhZmwUoJVzoTrZhSII8g6oLWKzY3YFgSCcY+5lLvx8MQU3XEZ0Jo0xqMoKXN0SRSaRbwDNOYUVcawaEE4c50LG9zkUjkhlG2Vu67hcWgk4ikVx7qKwaRUQzud0qeCDnT2ZF8ih33qzRLNZotGs0N/fj3/74fdw7+JbUFXlKz/EiqL8xqgAVBQFVDYw+KvbMdq3GtNO+jC6Dp7b0hrFSz7WBq7iylADKtg19OFFIvhQMAW3j7wwqRUGhSV01Cxq1qByXHjgtxdBiJkQurU1X5lbsbgxBAsbRF/IYQuhXRMEERzBhTw2LwgN2FQkALXCBicKqHlPM1X68koc5J2xQrRCSSFe4aoZygUM5Y4fk2qHvfDJ1/ANuXQAqPQZkkVRxDBsmFZfrCKELLtviPl2CMUWqY1OwQIQiNae78toYh4ht4Dhml/OMeRxIYR6uXWMfB5krmEqAPaClZe/k70ZeQk7zv0rQx9J2Yy70SzRbFZolk08+eSTuPH6q7Fq5SPeKVYUZZdiSCZ67OcMDQ2hp6dnbw9DUV7X2K7J6Dnmfeg+5j2wHRPGbjdhJQoAhQE6rEVXYdBVWHQVFp2FQWfNoqPwX7XCwhovBgtrgxC0KIKDx79b60VXZ62IwoSdrsKamKfnCz24GhhxO7/G5+EcQYR9jIXvY2hSUYcN5/X3FfoSmtxlA4CCl3rj8hCTjosFInwcu3ohDBvHWKRWMwwfx7l/LC5j5a1J5h2fm8OusaWMoCWNM7a34WNAIXwsRGrrmPikjlIVcWy/w4KT5OBSyxmG27twGNoLbZ/7x8u5cSi4LL1YrDdLjNabGBraisW33ojbf/av2LZ1cLxHVFEUweDgILq7u3/j49QBVBQlw9W3Y8uKn2Nkw2oc+DsfQtf0OVluoMz3Anyj5YpMXDHEkejbFyqFOwvLVpQPFxdecFUxRAgUZGBg0ShdyKczKIiFlvGhZGN8EUPoD8hCrHLce49CE2pkoWFHoVefcUJI8dqz7DC6WKhh4EOnKR8v9fAzxkePqxCa5TB0TDZEWEc35hKGMVN+3ZhHSDxOHwOvKu9qFqFfIufQgby76Z03G8OpTHT1Apxv55wL5+JGzSyKZZ6frBxO+XrpPfev81xy42Zx5XgMr9jB+7ALyGv5+ureVADSLCs0ywrDI3U899yzuPkn1+BXjyyBc9Vv/vAqirLTqABUFGUcCKPrV2PD5qvQ/eb3oPvod6GYeIDYmoQDwcS+gKWr0HQ+bDvZAI4MXKgeLoxBBwxcEBHRXSKfK2htgWblYEP40vcONKiZAlSRz/1jUQeLEj6HsIrCI7h2lkJ1cRBvXJhChIpCzUnQsxSaM1tro3MXdY3J3bGYnxdyItm984LRxJYncXE7IwpLEJZFQwr9AqEoJThpFUJ42OQumzPBgTQI9+rDvWwNRkdPhKkzJzDMEbt0vim0iat7CN0KHg5fP1YDhzBzBVH5bNIScCH4C4rOH6EsZbVvEIFVauzMeYCNZoVNm/tx35234u5f3oT+TdrfT1H2BCoAFUV5RVxjGAOP/QLDL6zEQW//OLpmzB3jBsKQb1ESPCFXupi3VzMGnYV3AWuFQeV8CLgWikaKWK2aQqoFeZFYkEFB1rtv1nDw1fcQDPmHLoaHkzMJBMGH8Lvxis+f3ytAFnYu5CkCXjQamFApm3r9cSPjtHwb+XxFUOxPyLl9vB9HcInzD4UzV6vZmHdoRNWwEa1pOHwcXorL2rGrFx1HIIjlkCfI4Wf4FTpqBec5hrVdjCg0sSbmMPLcx36BQArfssCjNP4yVCTHnMEAO3zsAspefywAm2UVReDISB0rH1uOW376z3h2zZPq+inKHkRzABVF2Sls5yQccNR8TH3LKbCdE7NtJlSx2pAWZo3BpI4CXRboDHmBNWvQUVh0Fj7/ryN8t9agZn2uYK1Ivfes8b38OooCAFIeoBH7WIOOWhGLPmzIM/SmWtqPc+Zg0nEs1gqbmkf7tjAirAtE4eXP4RWZDaXGxiCIrNSKhefD74F4TQQnj8Oo/jxeHVrLy9XZ6I7KfEK/L4u0NOetbWzyf86TqEYIxbPXx/cvl9bjUK6s6uXWMi40A7eFiY4ekHr8xdeIwgoeYTWPyu/HFb5lEIBV5bC5fwsW33oD7rn93zG8beg3fRwVRQloDqCiKLsV1xjG4ON3oL5pHaad/BF0TTsELCiIgCrWknrRMNysUBXecXJkQuWvFwj8M4tAZ33Y2DnvwNng7FEIIftVNUJOoDFwzsT1hdkxsyb9ngpDfJ4hO2q8hAYRCz2Aewha61094/zqH4W1IecvhZNhw9JvsZmzRaMs4/aYJ4hUSEKOQLHli0NFqerWhrFXJecfJqfOmNAXERx2Ta5pXI4N8O5rrMKVEESkOIWdgwsocxHTusU8v6lli6zyrULItwprPFehGpkFHxGi48e9/jhMXJZVLPR4bu0a3PLTf8JTv3oY5LTCV1H2Bq0rLO0WqqrCBRdcgLlz52LixIk44ogj8Fd/9VfZX6tEhAsvvBCzZs3CxIkTsWDBAqxevTo7T39/PxYuXIju7m5MnToVZ511FrZt27YnbkFRFAAgh9G+1diw+HsYeWkVWiWHI6AiQhm+6hVhtHIYKR1GS4dGRRgNP4+WFUaaFerh53r4ud6s0Kxc/CrFVzOElzm8yK5SWabiAl5CrAquVNwehQnFbRyqrELrkrLyIqYKxQlyGTTnKJ6Hz1FxsQMhXouLLWLFK7m8CCI4Y7wPX1cuf+Z/rlBVFF/n8zWbYf1csYau3E4h/9Efz+euxDxW8Zw8b1yI0Qw9+JoV/16h0axQlhUaYT3eeqOM+5fhe6NRotEs0Wg0UW+WqDdLf0zDHz8y2sD2kTqGto1g+bKluPrv/wpPPvqgij9F2YvsEQfwr//6r3HFFVfg2muvxXHHHYeHH34Yn/nMZ9DT04PPf/7zAIBLLrkEl19+Oa699lrMnTsXF1xwAU499VQ88cQTmDDBt6JYuHAh1q9fj9tuuw3NZhOf+cxncM455+CHP/zhnrgNRVEC1fAANi35MQ6a918x6Q3HIJUReCgIQWcIjgyqwqByBhUBHZbdQIOOwgupwhpUhRc1tcKHQYtQ6escoQoh48qktimNZhXCxH6JOO8QBjcwFJYAwW2zFq4ModYQWqbKoKq4QCQ5gs2yiqFbdsnKsoQJIVx2wKw1cBwGFvfuK3S9cxireIMzyM2k/Rzx2rt+DCVRNovc5oZ/jk20w0or7OxxeJmafnuFUPTBVb9I+Ysp1BvGAKQcxHC/zqT8v0os42aA5OiBYv6fc6K1CyXHrxlWAqkqh9FGE82ywspHHsC//dM/YNvWgdfy2CmKsgvZIzmA/+W//Bf09vbie9/7XnztE5/4BCZOnIjrrrsORITZs2fji1/8Ir70pS8B8DHt3t5eXHPNNTj99NPx5JNP4thjj8VDDz2Ek08+GQBw66234oMf/CBeeOEFzJ49e4fj0BxARdm12K7JmD7/k5j0huNgbDFme+gUg1ooCKlZ3zewZg06wldnzfcJrFmLjsILvVrICywKE/sHck5gjXsGxpy/1Cuw8E38wv6IDaJrIc+vCGFeGbI11sRiFD6fH3zoO2jjkiFRlPmefrz0neXdU74g7x/y8LhZNO/L+7Nw7qj5tYPzEHI6HxGhFnIhuX2MDOHG98MKoSjeB1HYHKqbkc4VzmeFyOR+f4AP75alA+f8VSH/rwp5gY68I0qOw/h5e5dGswKRw7OrHsWPrv47DPRv2smnS1GUneF1nQP4zne+E1dddRWefvppHHXUUXj00Udx77334rLLLgMArF27Fn19fViwYEE8pqenB/PmzcOSJUtw+umnY8mSJZg6dWoUfwCwYMECWGuxdOlSfPzjH98Tt6IoisDVt+Pl+36EyYcej6knnIaOKdOy7Ww4lQghUfJLq9WcQdN6YVivXCgQIXQ6g7IidBQGNUsonEGHtbDWO4KFM6isyxpH10KzaVd5F5CXUOOcwFph0SxLWMsFFqE1jAkL2pHPKTSxbU0qEAHSMnSxwbMx4jy+2pbFXK3wzmOt5sfj8/y8EHUEVK7KCjtSixmfW1ghXYfAvQC9jcgtW7gQhdu0hDN5h64S+YWyVJjfL+KcwJT350PRyIpCOPTN916WLoabnRCN3GeQw89V5VA6Ci1efFHI8NYtuOPWG7D0nl9gVNfyVZTXDXtEAH7lK1/B0NAQ3vzmN6MoClRVhW984xtYuHAhAKCvrw8A0Nvbmx3X29sbt/X19WHGjBnZ9lqthmnTpsV9WqnX66jX6/H3oSGtNFOUXQ01R7HtmYdQ37QO3Ue/C1PeNA+21pnvQ76HHIuNyhIKMiiNF3k16xtJN0qDjsKhq7CoFYQOZ1Ba30KmMEnwWesLSUrjCyIazQodtQJlEGqySpjDlwjiK6sWBmB4fV1jxrh4xqYKYsdunPH9+3xRiIniiatwDWT7GR9StWE5PAChjQ1QFLwmsIHxDQIBIDqQXmBVKKxvS5MapKS8Oe5vKOM43kV0cMYEh47iKiR8PfAYkYo88pBvymtkkViFn43xS8pxmJlzIaMIDA5hs1HH44/cj0U/+zH6XnoBrWJUUZS9yx4RgD/+8Y/xgx/8AD/84Q9x3HHHYcWKFfjCF76A2bNn48wzz9xt173ooovwl3/5l7vt/IqiJJqDG7D5oRux/fmVOPCE09B18GFZz0AgrHlLBHKAM76xc2F8vmDlDEprUDqD0hFqlQvhYBeWlfOh3Cq4e2UQhGXlUCtCCDUIP24Z44sh/MohBYd9ozjkVUG86KsVaeUNv+ycgQnVyyV3IRR9/gprYw4hEPL0TOV7CcKv6kEgFMb6dZPDPjZUMjebXsgVYez+HN7Fg7gW5xsCITcvCCkfskV0Ox2FVi02/czh3sqldXhZoFprY9EKu3pOOnzcziVUCXunD7HtC4s9Pi50pUZhgRef+zV++e8/whOPPYSqLHf3o6coymtgjwjAL3/5y/jKV76C008/HQBw/PHH47nnnsNFF12EM888EzNnzgQAbNiwAbNmzYrHbdiwAb/zO78DAJg5cyY2btyYnbcsS/T398fjWzn//PPx53/+5/H3oaEhzJkzZ1femqIoEnIYXf80NvS/gO6j3oXuY96LYsKUfBcgtkJxZHyhSBCDteAOluQFWy2Eg7sIKCugZv3vNhSScA9BLiRpdf86ataHhR1QmiQOjZFC0QLwFbJWiER2ACvpBiK1d/FLwYW8wcLCVQ61WgHnqmyZNmdz58u4tCQcDFBWSQgiFFZIB5KIgBLRxYunHhvh9QSrMC41h7H5gvI8LOwARCePhCDkNi+p7x+SOAyOoTW+H2PZGMY9i2/FHbf+VHP9FOV1zh4RgMPDw1nyMwAURRHzTObOnYuZM2di0aJFUfANDQ1h6dKl+OxnPwsAmD9/PgYGBrBs2TKcdNJJAIDFixfDOYd58+aNe92uri50dXXtprtSFOWVcPVhDPzqdgy/9BQOfOupmDj7KJiiI9+HEDoGIqzz66uGjTMoLKFmvBvYdECjdKGJtEOHs14cBkewDOFgFna1gsWdjT0COYxbWAMqCvA6uF7wuejosRsoBaBBcgljk2gnqnSNgS0rv7ZxEIWV8Tl9XImRrRKClEcotyVxhphzaJ2v6AWSUEzFI16AcWELgkvHsMCz1qAsq0wrSiEoV1BJbWwQc/78e5XCwkQUQ882CGiqKqx56jHc/K/XYu2aJ7W9i6LsA+wRAfjhD38Y3/jGN3DooYfiuOOOw/Lly3HZZZfhj//4jwH4fwC/8IUv4Otf/zqOPPLI2AZm9uzZ+NjHPgYAOOaYY3Daaafh7LPPxpVXXolms4lzzz0Xp59++k5VACuKsqchNDY/j413X4OJhxyLA970DkzofRNsR5fYAyHsSmH9WePbpzhvZNWsL9IoDaHhCE1n0RkaSdecQYel6AayA1hzXvwVlkLYF1lIuAwirQhVxhREVBWaPPNqI4UJLWdsWpEjhobHe90QjF8sNzqFXM0Lzkd0aW1hEyqIiXxLl6ZxMcex2RTLuoVVR5xLy8FxYqNzBGdJiMkU8vVVymIlD+Qi01oTw7g+ZEwxnCwbPBsWm5Sqk30OZQEDwovPP4tf/vv1WLn8AdTro7vvcVIUZZeyR9rAbN26FRdccAFuuOEGbNy4EbNnz8YZZ5yBCy+8EJ2dPlmciPDVr34VV111FQYGBvDud78b3/nOd3DUUUfF8/T39+Pcc8/Ff/zHf8Bai0984hO4/PLLMWXKlFe6dIa2gVGUvYitoWv6HEw5/O2YNOc41CYeANmsJHZfyZaUC04YgogLLWU6bGoX49vB+DYyRXDyiiAKO2o2iD25BFwSizEcbIHC+FYxtVoBhJCpMSE0G87hVzlJK30UYaAsGJObl4SSPzas8xty8PhYribm0DNv5xYyAOLaxLGuBHlfP34trtzhUniXg8CFtSirKrqL3OUlhXkpjsUA+UojIT8SQUgX1mJ4eDt+vfpJPLL0bvzqkSXYNjSwK54QRVFeA6+1DYyuBawoyh7GoDZlGia94VhMfuOJ6Jp2SKwaDqZbKrgQr7EQtMagMAi9Ak0UgbUo8pAqhlkMFiLnTxSJRGEYRVhy9lgc+nHlhSXcRqWjo4DjSt4Y5k39//ieEEQtt8WxNuURxr6DIqnP3we3gImGX0SKUGNSuJbzB7ka2VFqRs1L5MXcwHASLuCI1wgisKOjiGPp6qyh0Wzi5b6X8PijD+HB+xbjpXW/Rlk2d/nToSjKb4YKwJ1ABaCivL4wtU50TjsEk+ccj8mHnYDa5KkorE2CL6bRyebKiK5eEdxAE5xBy+HJ4Mhx+xgWdPKL8/6KEIrlPD/elkRhEn5JlKY8QXYV5c/gfTj8K0QZi7Qk/BD3r5yL1+WiDwCxqtcI8cliNbZngYnFGuAG1KJ1C7uX7BTa8LPMT5Qtcnh8w9u3Yd2vn8LS++/CyuUPYPvWwd32PCiK8pujAnAnUAGoKK9fiondmPSGYzHljSdicu9cdNQ6owhMWskg1bYa1EwSigULxugGIoZlC5t+tgbRGeSwMovGJIKSAGTxV6vZ4KIlhy+JQSSxaExcWcNak8LJ4Wcb+vpFaWuS80ZE2aokMsTL503+X3IFucqXxV0Rml7LfYzQm7IPojUGtrDR4QQBVVViaKAfK5YtxX133IK+F55FVWk7F0V5PaICcCdQAago+wC2hokz3ogDDj8Zk3sPx4QpU9HR0RlCvykEy3YgO4IcGo4CzYjcP5NW2KjFIg8R2m1x/mpFciFlWBhA5hQCKQxrjSj+MEmwxeXjhOPHTmFcto1z/sQ4WURyWNgIBddRK2J1LxdqtOYH8nmB3NHk8DO7fNzexjnCyPA2rHn6STx47yI8/cRybBsaQBt9RCjKPsnreik4RVGUncaVGOlbg5G+Z2A7J6A2ZRomzz4KU2a+CZMPnIWJU3pQ6+hAh8j1SyUTolAC6Tv3RUbMwyOUFJaDI0ItOGZeJKXmx+wQGufDyQBQcoGHzPuDyNuDX9pOtmHhccTQsTOigiNvMs3CsbAGpUvVwMZQdB7Lyvkl7IQ242NrRbqX2E7G8goqad1iEDC0dRte3rQRz655CmuefBTPr12FgU0b1O1TlDZAHUBFUfYNjIXtnIiunhmYNH0ODph5BA6YcSgmTu7BlIkT0FWzvsDCJGcwHspOWPidw7dFJtSQuXxZYYgxmbMW+wKOIwRbX+f9CSl0zG6gLCjhY2TuX+o1KBy84E4CiD0AWfgR+SXmfIsbGbL2YeLt27fj5Zc34Lm1a7B29RN4dvUTGOh/Gc36CHSpNkXZN9EQ8E6gAlBR9iOMQdE5CZ0HHISeQ49DT+8b0XPwG9B9QA86O2oxp6+jSK1fuDKYRRcLRVkty5Wysq2LFUJMVvFy5WyqDs6rlmUhSBSf7AIKE5D3LQqLWpFCw0Vhw3gRBJ7PEWRxx/uwUJW5g0SE0fooNqx/Ec8/txZrVz+OtU+vxMDmDSibDQ3tKsp+goaAFUVpL4hQ1bdjpL4dI5vWoc9Y1CZMwYQDZ2LSQW/A5J7pmHjAgZjYPR0TJ01B9wEHoLOjA7WiQGfNooNbyAQBZQ2iqAILN0i3DjG+LMPNqY9fWn1Dvs75frHPoRCTtaJI5w5YX73iHcqCK4wNjAWs8c6eAVAZvx5vo1mi0SxRHx3FwMAWbN82hE0vb8SWjS/g16sew8aXnkOjPpIGpyiKAhWAiqLsL5BDOTKEbSND2PbS0/41Y2CKDhQdXeicfCC6Jh2AyQfNRtfEKeieNhM90w7GhCk96J48GQdMmuCXg7PcPNoGZ08WfaQGzq3rDhMRakUBIkLlXKyyjUvU1XyIFkTCKQwtbELzaa7v5d58CD83yxLNZhNl2cTw0BYMDA3h5fXrsLm/H1s2bcDg5j4MbxvC8NAWVFUTlfbnUxRlB6gAVBRl/4UIVDZQlg2UI1sxDGDLusf9NmNhixqKCZPR2TUJE7sPQvfU6eieMQcTJ3fD1jrQURTomnQAOrsmolarobNWoFYr0FEr0NHRiaIoUCsKIQQtOgoLYwxK47J+gaNNoKocnKsAcmg0GjAAmlWFRlnBUAWqKgxvH0LlCOXoMAYGB7Bl03r0b9qIwZdfQn1kG0a3D6Eqm6GVjLp6iqK8NlQAKorSnpCDKxtw2xpobtuC7ZtfxCa53XjHz9Y6YGwBE5aKMzAwRQ0dE6eg1tGFWq2GouiArdXQ0dmFzq4JACxqnV0wxmBk6xZUjVG/FJtzKMsGGqPDKOsjgCvDWrwulCoTqrIBwMC5UsO2iqLsNlQAKoqijEdYVcM16+Nurm/bsmfHoyiKsguxe3sAiqIoiqIoyp5FBaCiKIqiKEqboQJQURRFURSlzVABqCiKoiiK0maoAFQURVEURWkzVAAqiqIoiqK0GSoAFUVRFEVR2gwVgIqiKIqiKG2GCkBFURRFUZQ2QwWgoiiKoihKm6ECUFEURVEUpc1QAagoiqIoitJmqABUFEVRFEVpM1QAKoqiKIqitBkqABVFURRFUdoMFYCKoiiKoihthgpARVEURVGUNkMFoKIoiqIoSpuhAlBRFEVRFKXNUAGoKIqiKIrSZqgAVBRFURRFaTNUACqKoiiKorQZKgAVRVEURVHaDBWAiqIoiqIobYYKQEVRFEVRlDZDBaCiKIqiKEqboQJQURRFURSlzVABqCiKoiiK0maoAFQURVEURWkzVAAqiqIoiqK0GSoAFUVRFEVR2gwVgIqiKIqiKG2GCkBFURRFUZQ2QwWgoiiKoihKm6ECUFEURVEUpc1QAagoiqIoitJmqABUFEVRFEVpM3aJALz77rvx4Q9/GLNnz4YxBjfeeGO2nYhw4YUXYtasWZg4cSIWLFiA1atXZ/v09/dj4cKF6O7uxtSpU3HWWWdh27Zt2T6PPfYY3vOe92DChAmYM2cOLrnkkl0xfEVRFEVRlLZilwjA7du344QTTsC3v/3tcbdfcskluPzyy3HllVdi6dKlmDx5Mk499VSMjo7GfRYuXIjHH38ct912G26++WbcfffdOOecc+L2oaEhvP/978dhhx2GZcuW4dJLL8Vf/MVf4KqrrtoVt6AoiqIoitI+0C4GAN1www3xd+cczZw5ky699NL42sDAAHV1ddGPfvQjIiJ64oknCAA99NBDcZ+f//znZIyhF198kYiIvvOd79CBBx5I9Xo97nPeeefR0UcfvdNjGxwcJAD6pV/6pV/6pV/6pV/7xdfg4OBr0mu7PQdw7dq16Ovrw4IFC+JrPT09mDdvHpYsWQIAWLJkCaZOnYqTTz457rNgwQJYa7F06dK4z3vf+150dnbGfU499VSsWrUKW7Zs2d23oSiKoiiKst9Q290X6OvrAwD09vZmr/f29sZtfX19mDFjRj6wWg3Tpk3L9pk7d+6Yc/C2Aw88cMy16/U66vV6/H1oaOi3vBtFURRFUZR9n/26Cviiiy5CT09P/JozZ87eHpKiKIqiKMpeZ7cLwJkzZwIANmzYkL2+YcOGuG3mzJnYuHFjtr0sS/T392f7jHcOeY1Wzj//fAwODsav559//re/IUVRFEVRlH2c3S4A586di5kzZ2LRokXxtaGhISxduhTz588HAMyfPx8DAwNYtmxZ3Gfx4sVwzmHevHlxn7vvvhvNZjPuc9ttt+Hoo48eN/wLAF1dXeju7s6+FEVRFEVR2p7XVDrSwtatW2n58uW0fPlyAkCXXXYZLV++nJ577jkiIrr44otp6tSpdNNNN9Fjjz1GH/3oR2nu3Lk0MjISz3HaaafRiSeeSEuXLqV7772XjjzySDrjjDPi9oGBAert7aVPfepTtHLlSrr++utp0qRJ9N3vfnenx6lVwPqlX/qlX/qlX/q1P3291irgXSIA77jjjnEHdeaZZxKRbwVzwQUXUG9vL3V1ddEpp5xCq1atys6xefNmOuOMM2jKlCnU3d1Nn/nMZ2jr1q3ZPo8++ii9+93vpq6uLjrkkEPo4osv/o3GqQJQv/RLv/RLv/RLv/anr9cqAA0REdqEoaEh9PT07O1hKIqiKIqi7BIGBwdfU4rbfl0FrCiKoiiKooxFBaCiKIqiKEqboQJQURRFURSlzVABqCiKoiiK0maoAFQURVEURWkzVAAqiqIoiqK0GSoAFUVRFEVR2gwVgIqiKIqiKG2GCkBFURRFUZQ2QwWgoiiKoihKm6ECUFEURVEUpc1QAagoiqIoitJmqABUFEVRFEVpM1QAKoqiKIqitBkqABVFURRFUdoMFYCKoiiKoihthgpARVEURVGUNqOtBCAR7e0hKIqiKIqi7DJeq7ZpKwG4efPmvT0ERVEURVGUXcbWrVtf03G1XTyO1zXTpk0DAKxbtw49PT17eTSvT4aGhjBnzhw8//zz6O7u3tvDed2i87RjdI52Dp2nHaNztHPoPO2Y/WmOiAhbt27F7NmzX9PxbSUArfWGZ09Pzz7/xu9uuru7dY52Ap2nHaNztHPoPO0YnaOdQ+dpx+wvc/TbmFltFQJWFEVRFEVRVAAqiqIoiqK0HW0lALu6uvDVr34VXV1de3sor1t0jnYOnacdo3O0c+g87Rido51D52nH6BwlDGlvFEVRFEVRlLairRxARVEURVEURQWgoiiKoihK26ECUFEURVEUpc1QAagoiqIoitJmtI0A/Pa3v403vvGNmDBhAubNm4cHH3xwbw9pj3HRRRfh7W9/Ow444ADMmDEDH/vYx7Bq1apsn9/93d+FMSb7+tM//dNsn3Xr1uFDH/oQJk2ahBkzZuDLX/4yyrLck7eyW/mLv/iLMXPw5je/OW4fHR3F5z73ORx00EGYMmUKPvGJT2DDhg3ZOfb3OXrjG984Zo6MMfjc5z4HoH2fo7vvvhsf/vCHMXv2bBhjcOONN2bbiQgXXnghZs2ahYkTJ2LBggVYvXp1tk9/fz8WLlyI7u5uTJ06FWeddRa2bduW7fPYY4/hPe95DyZMmIA5c+bgkksu2d23tst4tTlqNps477zzcPzxx2Py5MmYPXs2/uiP/ggvvfRSdo7xnr+LL74422dfniNgx8/Spz/96TFzcNppp2X7tPOzBGDcf6OMMbj00kvjPu3wLO0QagOuv/566uzspKuvvpoef/xxOvvss2nq1Km0YcOGvT20PcKpp55K3//+92nlypW0YsUK+uAHP0iHHnoobdu2Le7zvve9j84++2xav359/BocHIzby7Kkt7zlLbRgwQJavnw53XLLLTR9+nQ6//zz98Yt7Ra++tWv0nHHHZfNwcsvvxy3/+mf/inNmTOHFi1aRA8//DD9p//0n+id73xn3N4Oc7Rx48Zsfm677TYCQHfccQcRte9zdMstt9D/+T//h376058SALrhhhuy7RdffDH19PTQjTfeSI8++ih95CMfoblz59LIyEjc57TTTqMTTjiBHnjgAbrnnnvoTW96E51xxhlx++DgIPX29tLChQtp5cqV9KMf/YgmTpxI3/3ud/fUbf5WvNocDQwM0IIFC+hf/uVf6KmnnqIlS5bQO97xDjrppJOycxx22GH0ta99LXu+5L9j+/ocEe34WTrzzDPptNNOy+agv78/26ednyUiyuZm/fr1dPXVV5Mxhp555pm4Tzs8SzuiLQTgO97xDvrc5z4Xf6+qimbPnk0XXXTRXhzV3mPjxo0EgO6666742vve9z76sz/7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", + "text/html": [ "\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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" + } + ], + "source": [ + "plt.figure(1)\n", + "raw = plt.imshow((1/np.amax(rt._raw_rgba[:,:,:3])) * rt._raw_rgba[:,:,:3]) # skip alpha in scaling (constant 1.0)\n", + "print(\"Max color value in the raw image:\", np.amax(rt._raw_rgba[:,:,:3]))\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hit info for each pixel is stored in `rt._hit_pos` buffer. First three values are the 3D hit coordinates, the 4-th value is the hit distance to the camera plane, displayed below:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Distance range: 95.32466 115.870026\n" + ] }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0f56cba0693b4d0bbd3d85a8cd9e4509", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -4106,988 +203,131 @@ } ], "source": [ - "plt.figure(4)\n", - "albedo = plt.imshow(rt._albedo[:,:,:3]) # skip the 4-th value (now constant, 0.0)\n", - "plt.tight_layout()" + "plt.figure(2)\n", + "d = rt._hit_pos[:,:,3] # make 2D array from the hit distance values\n", + "d0 = np.amin(d)\n", + "d1 = np.amax(d[d<1000]) # skip background pixels, where the distance to the camera plane is a very large value \n", + "dist = plt.imshow(d, vmin=d0, vmax=d1)\n", + "plt.tight_layout()\n", + "print(\"Distance range:\", d0, d1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Geometry info is stored in `rt._geo_id` buffer. There are two np.uint32 values encoding the mesh or data set handle, the face or primitive index and the vertex id in case of meshes. The object handle and vertex id (if present) are encoded in the fist value as `(vtx_id << 30) | handle`; `vtx_id` is the index of the triangular face vertex closest to the hit, values are 0, 1 or 2. Background areas are tagged with `0xFFFFFFFF` value in both fields." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\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", - " fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\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", - " img.type = 'image/png';\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://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", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", - " * https://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", - " }\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", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\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", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '';\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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\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", + "application/vnd.jupyter.widget-view+json": { + "model_id": "c540ac96959b474e91709fb0cd8ae8ca", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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//zzCYVCqWMuvvhiduzYQVNT02R/DBEREZE5IzDZb1BXVwdAaWlp2vOlpaWpfXV1dSxYsCD9wgIBiouL046prKwcdI7efUVFRYPeOxqNEo1GUz+3trYe5acRERERmf3m9CjgO+64g4KCgtS2ePHi6b4kERERkWk36QGwrKwMgMOHD6c9f/jw4dS+srIy6uvr0/bH43EaGxvTjsl0jv7vMdAtt9xCS0tLatu/f//RfyARERGRWW7SA2BlZSVlZWWsX78+9VxraytVVVWsWrUKgFWrVtHc3MzmzZtTx2zYsAHXdVm5cmXqmI0bNxKLxVLHrFu3jhUrVmRs/gUIh8Pk5+enbSIiIiKeN66hIwO0tbWZ6upqU11dbQBz9913m+rqarN3715jjDFr1641hYWF5qmnnjJbt241l19+uamsrDRdXV2pc1xyySXmjDPOMFVVVeall14yxx13nLnyyitT+5ubm01paan53Oc+Z7Zt22Yef/xxk52dbe6///5RX6dGAWvTpk2bNm3a5tI23lHAExIAX3jhhYwXddVVVxlj7FQwt956qyktLTXhcNhceOGFZseOHWnnaGhoMFdeeaXJzc01+fn55uqrrzZtbW1px7zxxhvmvPPOM+Fw2CxcuNCsXbt2TNepAKhNmzZt2rRpm0vbeAOgY4wxeERraysFBQXTfRkiIiIiE6KlpWVcXdzm9ChgERERERlMAVBERETEYxQARURERDxGAVBERETEYxQARURERDxGAVBERETEYxQARURERDxGAVBERETEYxQARURERDxGAVBERETEYxQARURERDxGAVBERETEYxQARURERDxGAVBERETEYxQARURERDxGAVBERETEYxQARURERDzGUwHQGDPdlyAiIiIyYcabbTwVABsaGqb7EkREREQmTFtb27heF5jg65jRiouLAdi3bx8FBQXTfDUzU2trK4sXL2b//v3k5+dP9+XMWCqnkamMRkflNDKV0eionEY2l8rIGENbWxsVFRXjer2nAqDPZys8CwoKZv3/+MmWn5+vMhoFldPIVEajo3IamcpodFROI5srZXQ0lVmeagIWEREREQVAEREREc/xVAAMh8PcfvvthMPh6b6UGUtlNDoqp5GpjEZH5TQyldHoqJxGpjLq4xjNjSIiIiLiKZ6qARQRERERBUARERERz1EAFBEREfEYBUARERERj/FMAPzxj3/MMcccQ1ZWFitXruTVV1+d7kuaMnfccQdnn302eXl5LFiwgE9+8pPs2LEj7ZiPfvSjOI6Ttn35y19OO2bfvn18/OMfJzs7mwULFnDTTTcRj8en8qNMqu985zuDyuCEE05I7e/u7ub6669n3rx55Obm8pnPfIbDhw+nnWOul9ExxxwzqIwcx+H6668HvHsfbdy4kcsuu4yKigocx+HJJ59M22+M4bbbbqO8vJxIJMLq1avZuXNn2jGNjY2sWbOG/Px8CgsLueaaa2hvb087ZuvWrXzkIx8hKyuLxYsXc+edd072R5sww5VRLBbj5ptv5tRTTyUnJ4eKigo+//nPc+jQobRzZLr/1q5dm3bMbC4jGPle+sIXvjCoDC655JK0Y7x8LwEZv6Mcx+Guu+5KHeOFe2lExgMef/xxEwqFzIMPPmjeeustc+2115rCwkJz+PDh6b60KXHxxRebhx56yGzbts1s2bLFfOxjHzNLliwx7e3tqWMuuOACc+2115ra2trU1tLSktofj8fNKaecYlavXm2qq6vNs88+a0pKSswtt9wyHR9pUtx+++3m5JNPTiuD999/P7X/y1/+slm8eLFZv369ef31182HPvQhc+6556b2e6GM6uvr08pn3bp1BjAvvPCCMca799Gzzz5r/uEf/sH85je/MYB54okn0vavXbvWFBQUmCeffNK88cYb5hOf+ISprKw0XV1dqWMuueQSc/rpp5tXXnnF/OlPfzLHHnusufLKK1P7W1paTGlpqVmzZo3Ztm2beeyxx0wkEjH333//VH3MozJcGTU3N5vVq1ebX/ziF+add94xmzZtMuecc44588wz086xdOlS873vfS/t/ur/PTbby8iYke+lq666ylxyySVpZdDY2Jh2jJfvJWNMWtnU1taaBx980DiOY3bv3p06xgv30kg8EQDPOeccc/3116d+TiQSpqKiwtxxxx3TeFXTp76+3gDmj3/8Y+q5Cy64wHzta18b8jXPPvus8fl8pq6uLvXcfffdZ/Lz8000Gp3My50yt99+uzn99NMz7mtubjbBYND86le/Sj23fft2A5hNmzYZY7xRRgN97WtfM8uXLzeu6xpjdB8ZYwb9QnJd15SVlZm77ror9Vxzc7MJh8PmscceM8YY8/bbbxvAvPbaa6ljnnvuOeM4jjl48KAxxph7773XFBUVpZXTzTffbFasWDHJn2jiZfqlPdCrr75qALN3797Uc0uXLjU/+tGPhnzNXCojYzKX01VXXWUuv/zyIV+je2mwyy+/3PzVX/1V2nNeu5cymfNNwD09PWzevJnVq1ennvP5fKxevZpNmzZN45VNn5aWFgCKi4vTnv/Zz35GSUkJp5xyCrfccgudnZ2pfZs2beLUU0+ltLQ09dzFF19Ma2srb7311tRc+BTYuXMnFRUVLFu2jDVr1rBv3z4ANm/eTCwWS7uPTjjhBJYsWZK6j7xSRr16enp49NFH+eIXv4jjOKnndR+lq6mpoa6uLu3eKSgoYOXKlWn3TmFhIWeddVbqmNWrV+Pz+aiqqkodc/755xMKhVLHXHzxxezYsYOmpqYp+jRTp6WlBcdxKCwsTHt+7dq1zJs3jzPOOIO77rorrfuAV8roxRdfZMGCBaxYsYKvfOUrNDQ0pPbpXkp3+PBhfvvb33LNNdcM2uf1eykw3Rcw2Y4cOUIikUj7hQNQWlrKO++8M01XNX1c1+XrX/86H/7whznllFNSz//t3/4tS5cupaKigq1bt3LzzTezY8cOfvOb3wBQV1eXsQx7980FK1eu5OGHH2bFihXU1tby3e9+l4985CNs27aNuro6QqHQoF9GpaWlqc/vhTLq78knn6S5uZkvfOELqed0Hw3W+7kyfe7+986CBQvS9gcCAYqLi9OOqaysHHSO3n1FRUWTcv3Tobu7m5tvvpkrr7yS/Pz81PNf/epX+eAHP0hxcTEvv/wyt9xyC7W1tdx9992AN8rokksu4dOf/jSVlZXs3r2bb3/721x66aVs2rQJv9+ve2mARx55hLy8PD796U+nPa97yQMBUNJdf/31bNu2jZdeeint+euuuy7151NPPZXy8nIuvPBCdu/ezfLly6f6MqfFpZdemvrzaaedxsqVK1m6dCm//OUviUQi03hlM9NPf/pTLr30UioqKlLP6T6SoxWLxfibv/kbjDHcd999afu+8Y1vpP582mmnEQqF+Lu/+zvuuOMOzyztdcUVV6T+fOqpp3LaaaexfPlyXnzxRS688MJpvLKZ6cEHH2TNmjVkZWWlPa97yQOjgEtKSvD7/YNGax4+fJiysrJpuqrpccMNN/DMM8/wwgsvsGjRomGPXblyJQC7du0CoKysLGMZ9u6biwoLCzn++OPZtWsXZWVl9PT00NzcnHZM//vIS2W0d+9enn/+eb70pS8Ne5zuo77PNdx3UFlZGfX19Wn74/E4jY2Nnrq/esPf3r17WbduXVrtXyYrV64kHo+zZ88ewBtlNNCyZcsoKSlJ+zume8n605/+xI4dO0b8ngJv3ktzPgCGQiHOPPNM1q9fn3rOdV3Wr1/PqlWrpvHKpo4xhhtuuIEnnniCDRs2DKrWzmTLli0AlJeXA7Bq1SrefPPNtC+W3i/ok046aVKue7q1t7eze/duysvLOfPMMwkGg2n30Y4dO9i3b1/qPvJSGT300EMsWLCAj3/848Mep/sIKisrKSsrS7t3WltbqaqqSrt3mpub2bx5c+qYDRs24LpuKkSvWrWKjRs3EovFUsesW7eOFStWzInmqN7wt3PnTp5//nnmzZs34mu2bNmCz+dLNXnO9TLK5MCBAzQ0NKT9HfP6vdTrpz/9KWeeeSann376iMd68l6a7lEoU+Hxxx834XDYPPzww+btt9821113nSksLEwbiTiXfeUrXzEFBQXmxRdfTBvy3tnZaYwxZteuXeZ73/ueef31101NTY156qmnzLJly8z555+fOkfv9B0XXXSR2bJli/nd735n5s+fP+un7+jvxhtvNC+++KKpqakxf/7zn83q1atNSUmJqa+vN8bYaWCWLFliNmzYYF5//XWzatUqs2rVqtTrvVBGxthR9EuWLDE333xz2vNevo/a2tpMdXW1qa6uNoC5++67TXV1dWoE69q1a01hYaF56qmnzNatW83ll1+ecRqYM844w1RVVZmXXnrJHHfccWlTdzQ3N5vS0lLzuc99zmzbts08/vjjJjs7e9ZMSzFcGfX09JhPfOITZtGiRWbLli1p31O9ozBffvll86Mf/chs2bLF7N692zz66KNm/vz55vOf/3zqPWZ7GRkzfDm1tbWZb37zm2bTpk2mpqbGPP/88+aDH/ygOe6440x3d3fqHF6+l3q1tLSY7Oxsc9999w16vVfupZF4IgAaY8y//uu/miVLlphQKGTOOecc88orr0z3JU0ZIOP20EMPGWOM2bdvnzn//PNNcXGxCYfD5thjjzU33XRT2vxtxhizZ88ec+mll5pIJGJKSkrMjTfeaGKx2DR8osnx2c9+1pSXl5tQKGQWLlxoPvvZz5pdu3al9nd1dZm///u/N0VFRSY7O9t86lOfMrW1tWnnmOtlZIwxv//97w1gduzYkfa8l++jF154IePfsauuusoYY6eCufXWW01paakJh8PmwgsvHFR+DQ0N5sorrzS5ubkmPz/fXH311aatrS3tmDfeeMOcd955JhwOm4ULF5q1a9dO1Uc8asOVUU1NzZDfU71zTG7evNmsXLnSFBQUmKysLHPiiSeaH/zgB2nBx5jZXUbGDF9OnZ2d5qKLLjLz5883wWDQLF261Fx77bWDKjO8fC/1uv/++00kEjHNzc2DXu+Ve2kkjjHGTGoVo4iIiIjMKHO+D6CIiIiIpFMAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj1EAFBEREfEYBUARERERj/n/AR/0Jtz/Onl8AAAAAElFTkSuQmCC", + "text/html": [ "\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", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(3)\n", + "f = rt._geo_id[:,:,1] # select face index values\n", + "f1 = np.amax(f[f < 0xFFFFFFFF]) # skip background\n", + "f0 = np.amin(f)\n", + "faces = plt.imshow(f, vmin=f0, vmax=f1, cmap=plt.get_cmap(\"flag\"))\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Albedo (surface color) and normal vectors (in camera space) are available only if denoiser is enabled in postprocessing and configured to `DenoiserKind.RgbAlbedoNormal` or `DenoiserKind.RgbAlbedo` (enables albedo buffer only) mode, or when `save_albedo` and/or `save_normal` parameters are set to `True`. When not available, `rt._albedo` and `rt._normals` are `None` values." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6a997f00a02f467c9cef2d7172052157", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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CgwMVHx8vC699FI9++yzWrBggfr16+fVfQKwN58EwK+++kpDhw7Vd999p4ULF6qyslI9e/ZUSUmJZ537779fH3/8sd577z199dVX2rNnj6655hrPcpfLpb59+6qiokLffvut3njjDb3++usaO3asLw4BgA3ExMRoypQp6ty5s2WNOAICAtSkSRM9+eST6tKliyU1AKj/LHkEvG/fPiUkJOirr77ShRdeqIKCAp1yyil6++239be//U2StHnzZrVp00aZmZk677zzNH/+fF1++eXas2ePEhMTJUkvvviiRo8erX379ik4OPiY++URMIC/cvvtt+uxxx47rvf6vGnevHm68847VVFRYXUpAOqoOv0I+I8KCgokSXFxcZKklStXqrKyUunp6Z51WrdurWbNmikzM1OSlJmZqfbt23vCnyT16tVLhYWF2rBhgw+rB1AfRUVFaeDAgXUm/ElSenq6UlNTrS4DQD3k8286t9ut++67TxdccIHatWsnScrOzlZwcLBiYmKqrZuYmKjs7GzPOr8Pf4eXH152NOXl5SosLKw2AcDRnHvuuTr99NOtLqOa0NBQnX/++VaXAaAe8nkAHDp0qNavX6/Zs2d7fV8TJ06s1mdX06ZNvb5PAP5p//79de5RqzGG1sAAvMKnAfCee+7RvHnztGTJEjVp0sQzPykpSRUVFcrPz6+2fk5OjpKSkjzr/LFV8OF/H17nj8aMGaOCggLPtHPnzlo8GgD1yaZNm7Ry5Uqry6hm3759Wrx4sdVlAKiHfBIAjTG65557NGfOHC1evFgpKSnVlnfu3FlBQUFatGiRZ96WLVu0Y8cOpaWlSZLS0tK0bt26an8NL1y4UFFRUWrbtu1R9xsSEqKoqKhqEwAcTXl5uRYvXqy61DVqVlaWdu3aZXUZAOohnwTAoUOHaubMmXr77bcVGRmp7OxsZWdnq7S0VJIUHR2t2267TcOHD9eSJUu0cuVK3XLLLUpLS9N5550nSerZs6fatm2rgQMH6ocfftBnn32mhx9+WEOHDlVISIgvDgNAPffll196GqlZzeVyae7cuXK5XFaXAqAe8kkAfOGFF1RQUKCLL75YjRo18kzvvPOOZ50pU6bo8ssvV//+/XXhhRcqKSlJH3zwgWd5QECA5s2bp4CAAKWlpemmm27SzTffrAkTJvjiEADYwJYtWzR37tw6cRfw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17POwoULFRUVpbZt2/riMOBn9u3bd1J9VEVERCglJaUWK/Idp9Op/v37Kzg42OpSAJ+68MIL//SmgD/p0qWLrr32Wp+G2eLiYj344IOaP38+4c8GfDISSGRkpNq1a1dtXkREhBo2bOiZf9ttt2n48OGKi4tTVFSU/v73vystLc0zhmvPnj3Vtm1bDRw4UJMnT1Z2drYefvhhDR061LIOMVG3/frrr6qqqjrh9wCDgoJ0/vnn66uvvvK7L8MzzjhDl156qdVlAD6XnJysiy66SLNnz7a6lBMWGhqqv//974qIiPDZPnNzc/XQQw/pk08+8bvvO5yYOvNy0JQpU3T55Zerf//+nr/gPvjgA8/ygIAAzZs3TwEBAUpLS9NNN92km2++WRMmTLCwatRle/bs0f79+09qGz169FBYWFgtVeQ7ffv2PaJRFWAHTqdTN998s1/fGLj44ot10UUX+Wx/h9/5++ijj44Ylxz1l8PYKOoXFhb69Uv9OD4hISGaP3/+EXefj0dZWZkyMjL09ddf12Jl3hUZGamPPvrIFiMjAEdTUlKigQMHatmyZVaXctxiYmL0zjvvqFOnTj7ZX25uroYPH66FCxdy589PFRQUnFAbhzpzBxCobVVVVdq+fftJbSM0NFS9evXyq5fKu3XrppYtW1pdBmCZiIgIXXbZZX71c3vY3/72tyNGyvKWnJwc3XXXXYQ/myIAot5yuVzatWvXSW+nR48efnPnOCAgQH379mXkD9heenq6z7tPOVkJCQkaNGjQSfVfWlOH+/n7+uuvCX82RQBEvbZ27dqT/nJr3ry534ym0ahRI5++OwTUVc2aNdMll1xidRk15nA4dPfdd/vk7v3evXs1fPhwffrpp17fF+ouAiDqtW3btqmsrOykthEYGKj/+7//84uXyrt37674+HirywAs53Q61a9fPwUG+qSzi5N22mmn+aTblz179mjIkCH08wcCIOq3jRs31soYluecc4569epVCxV5T3BwsK6++mpG/gD+n/POO88vhgANCAjQkCFDdMopp3h1P9u3b9ddd92l5cuXe3U/8A/8pkC9Vl5ergULFpz0X7qhoaEaMmSIz8fjPB7Nmzf32cvjgD+Ijo5W165drS7jmM455xz179/fq/soLS3VP/7xD2VmZnLnD5IIgLCBuXPnVhtB5kSdddZZdfou4CWXXOLXQ9cBtc3pdOq6666r069vREZG6t577/XqUKXGGM2dO1dfffWV1/YB/0MARL2XnZ2tNWvWnPR2goODNXjw4Dp5FzAkJESXX365X3Z7AXhT27Zt1aZNG6vL+FNXXnml1xtu5eTk6LnnnlNlZaVX9wP/QgBEvedyufTee++pqqrqpLfVqVMnnXvuubVQVe1q166dOnbsaHUZQJ0TGRmpbt26WV3GUcXExOjWW2/1akMVt9utF198UT/++KPX9gH/RACELaxatUoHDhw46e2EhoZqzJgxSkhIqIWqaofD4VDPnj39csg6wBcuu+yyOvnzcf3116t169Ze3UdmZqZmzpzp1X3APxEAYQu7d++uNrb0yejYsaMGDhxYZ7qXiIiIqNPvJgJWO/PMM+vcHfKUlBSv3/0rKyvT888/r8LCQq/tA/6LAAhbMMboww8/1KFDh056W06nU8OGDVOfPn1qobKT161bN7Vo0cLqMoA6KzQ0VP369bO6DI/Y2Fj9+9//VkpKilf388EHH9DwA3+KAAjbWL9+fa31fB8WFqaRI0eqYcOGtbK9E+VwONS9e3eGfgOO4dxzz60TDbhCQkI0atQonX/++V7dz65duzRt2jRVVFR4dT/wXwRA2EZFRYWmTp2q/fv318r2WrdurWHDhln6KLhBgwZ+M0wdYKWWLVv6ZJi1v+J0OnXLLbdo0KBBXu2w3e12a/r06fr555+9tg/4PwIgbGXLli2aMWNGrXSE6nA4dPPNN1s69m6rVq3UrFkzy/YP+IvQ0FBdfPHFltbQq1cvjRgxwut37NetW6dZs2Z5dR/wfwRA2IoxRq+99pq2bNlSK9uLiIjQAw88oJiYmFrZ3vHq3r27QkNDLdk34E8cDofS09Mt6xS6devWevzxxxUdHe3V/ZSVlWnKlCk0/MAxEQBhO3l5eXrhhRdqrVPUjh07auzYsT5/vyg8PFy9e/f26T4Bf3bmmWfq9NNP9/l+4+PjNXHiRJ+MS/z5559r0aJFXt8P/B8BELZUm8MiOZ1O3XDDDRo6dKhP3wdMSEhQcnKyz/YH+Lvw8HCdeeaZPt1nZGSkHn/8ca83+pCk3NxcTZ48WeXl5V7fF/wfARC2VFpaqqeeekoHDx6sle0FBARo2LBhuuOOOxQQEFAr2zyWrl27KjY21if7AuoDh8Ohiy++2GdDJrZs2VLPPPOMrrrqKq/v0+126+WXX9bWrVu9uh/UHwRA2NbatWv1/vvv10qDEOn/797BF/0DBgYGqk+fPoz9CxynCy64QElJSV7dR2hoqK655hrNmjVL/fr182qL38N2796t2bNn19r3Geo/AiBsy+Vy6T//+Y+WL19ea9sMDw/XY4895vXHPbGxsV4fQgqoj+Lj49WqVSuvbNvhcKhDhw567bXXNHXqVJ+88yf91rjt9ddfV05Ojk/2h/qBAAhby83N1QMPPKBff/211rbZuHFjPf7442rSpEmtbfOP2rdvr0aNGnlt+0B9FRwcrF69etX63fPg4GBlZGRo5syZ6tGjh4KDg2t1+39l+/btdPuC40YAhO1t2rRJDz30kAoKCmptm+3atdPTTz+thISEWtvm7/Xo0aPOjEUM+JvOnTvXancwzZs317PPPqtJkyZ5/fHyH7ndbr3zzju11sE97IMACEj64osv9PTTT6uqqqrWtnnRRRdpxowZat68ea1tU/qt1TFj/wInrnnz5kpMTDypbQQEBKhRo0YaOHCg/ve//+mqq67y6V2/w/bv36/33nvP5/uF/+MWAqDf3qF58803ddZZZ+nqq6+ulW06HA6lpqbqueee07333ltrwzLFxsZaPqQV4M8iIyN1xhlnHNerHwEBAYqJiVFKSoq6du2qrl27qmXLljrllFN81vL/j4wx+vDDD7Vnzx5L9g//RgAE/p+SkhI98cQTat26tdq0aVNr2z333HM1Y8YMjRo1St9///1Jby8lJUVxcXG1UBlgT4GBgTrrrLP+ssNkh8OhBg0aqHHjxurWrZtSU1PVuXNnxcXFKTQ0tE60wN++fbuef/55ud1uq0uBHyIAAr+zY8cOjRkzRjNmzFDDhg1rbbtt27bV888/rzvuuEOrVq06qW2dddZZDP8GnKSzzz5bAQEBcrlckn4LhUFBQUpISFBaWprOO+88nX322WrcuLEiIyMtrvboPvnkE+7+4YQRAIE/yMzM1KhRo/Tvf/+7Vjtabt68uV566SXdf//9WrZs2Qn11+VwOHT22WfXWk2AXbVv3149e/ZUdHS0WrZsqTZt2igxMVFJSUmKi4vzSd99JyMnJ0f//e9/6fcPJ4wACPyBMUaffPKJIiIian3w9mbNmmn69Ol69NFH9f7773vuPtRUZGSk2rdvX2v1AHaVmJioV199VU6ns048zj1en376aa12XwX7qdt/4gAWMcbovffe05gxY1RYWFir246Pj9fkyZM1dOhQhYeHH9dnExISfN7NBFAfORwOBQQE+GX4y83N1auvvsrdP5wUAiDwJ9xutz744AM98MADys/Pr9Vth4WF6cEHH9S0adOOa7SANm3a1Nn3kQB4nzFG77//vn788UerS4GfIwACf8HtdmvOnDkaPny48vLyanXbgYGB6tevn95991317t27Ru8cpaam1vl3kwB4T15ent566y3u/uGk8ZsEOAZjjObNm6cRI0aoqKio1rd/+umna9q0abrvvvv+snVvQECA18YwBeAf5syZU2t9isLeCIBADc2fP1+jRo3yypBL0dHRGjlypF5//XV17NjxqO8lBQcH12rXNAD8y65du/TKK6/Q7x9qBQEQqKHDj4Pvv/9+r4TAwMBAde/eXW+++aauuOKKI8b6bdiwoRo3blzr+wVQ97lcLr300kvavn271aWgniAAAsfBGKPPP/9c//jHP7zWBUOjRo00bdo0TZo0SY0bN/bcDQwPD1dQUJBX9gmgbtu4caNmz57Nu3+oNQRA4DgZYzR37lwNHDhQ33//vVe+kENDQzVw4EB9+OGHuuKKK+R0OhUbG0sABGyorKxM//znP2u9NwLYGwEQOAHGGG3evFm33HKLZs+ercrKylrfh8PhULNmzfTMM89owoQJ6tSpEwEQsKF33333L8ctBk6Ew9jofnJhYWGtjuoASFJISIgGDx6sBx98UBEREV7ZhzFG5eXljAEM2MyuXbvUv39/3v3DnyooKFBUVNRxf447gMBJKi8v18svv6z7779fO3bs8Mo+HA4H4Q+wmaqqKr344ov65ZdfrC4F9RABEKgFbrdbH374oW655RatXLmSbhoAnLQ1a9bo7bffpuEHvIIACNQSY4zWrVunm266SW+99ZYqKiqsLgmAnyouLtakSZNUXFxsdSmopwiAQC07cOCAHnzwQT3yyCO1PnwcgPrPGKOPP/5Y33zzjdWloB4jAAJeUFlZqTfeeEM33XSTvvvuOx4JA6ixPXv2aNq0aXK5XFaXgnqMAAh4idvt1ooVKzRo0CA99thjXhk9BED94nK5NHXqVP30009Wl4J6jgAIeNnBgwf1wgsv6KabbtI333yjqqoqq0sCUEdlZmbq3XfftboM2AABEPABt9utVatW6aabbtL48eN18OBBq0sCUMcUFhbqP//5j0pKSqwuBTZAAAR8qKSkRK+88ooGDBighQsXcjcQgKTfvhseffRRff3111aXApvwWQDcvXu3brrpJjVs2FBhYWFq3769VqxY4VlujNHYsWPVqFEjhYWFKT09XVu3bq22jby8PGVkZCgqKkoxMTG67bbbaCIPv+N2u7V69WrdcccdGjdunPbs2WN1SQAsdOjQIT300EN6++23aTAGn/FJADx48KAuuOACBQUFaf78+dq4caP+/e9/KzY21rPO5MmTNXXqVL344ovKyspSRESEevXqpbKyMs86GRkZ2rBhgxYuXKh58+Zp6dKlGjJkiC8OAah1xcXFevnllzVo0CB9/vnn3A0EbKioqEjDhw/Xu+++S6tf+JRPxgJ+8MEH9c033/zprW1jjJKTkzVixAiNHDlS0m9j2yUmJur111/XgAEDtGnTJrVt21bff/+9unTpIklasGCBLrvsMu3atUvJycnHrIOxgFFXRUREqH///rrjjjt0xhlnyOFwWF0SAC8rKCjQmDFj9MEHH3DnDyesTo8F/NFHH6lLly669tprlZCQoE6dOunll1/2LN++fbuys7OVnp7umRcdHa3U1FRlZmZK+q1lVExMjCf8SVJ6erqcTqeysrKOut/y8nIVFhZWm4C6qKSkRG+++ab69++vV199lQ6kgXquuLhYjz76KOEPlvFJANy2bZteeOEFtWjRQp999pnuuusuDRs2TG+88YYkKTs7W5KUmJhY7XOJiYmeZdnZ2UpISKi2PDAwUHFxcZ51/mjixImKjo72TE2bNq3tQwNqVXZ2th566CHdeuut+vLLL3kkBNRDeXl5uv/++zVr1izCHyzjkwDodrt19tln68knn1SnTp00ZMgQ3X777XrxxRe9ut8xY8aooKDAM+3cudOr+wNqgzFG3377rQYPHqzx48dr586dDAYP1BOHH/t+9NFH/IEHS/kkADZq1Eht27atNq9NmzbasWOHJCkpKUmSlJOTU22dnJwcz7KkpCTl5uZWW15VVaW8vDzPOn8UEhKiqKioahPgLw4dOqTp06fr2muv1cKFC60uB8BJOnznb+7cufxRB8v5JABecMEF2rJlS7V5P/74o5o3by5JSklJUVJSkhYtWuRZXlhYqKysLKWlpUmS0tLSlJ+fr5UrV3rWWbx4sdxut1JTU31w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+fnnnz3r2OFaOhZbBMBzzz3XDB061PNvl8tlkpOTzcSJEy2syjq5ublGkvnqq6888y666CJz7733/ulnPv30U+N0Ok12drZn3gsvvGCioqJMeXm5N8v1mXHjxpmOHTsedVl+fr4JCgoy7733nmfepk2bjCSTmZlpjLHHOfqje++915x++unG7XYbY7iOjDFH/EJyu90mKSnJPPXUU555+fn5JiQkxMyaNcsYY8zGjRuNJPP999971pk/f75xOBxm9+7dxhhjnn/+eRMbG1vtPI0ePdq0atXKy0dU+472S/uPli9fbiSZX3/91TOvefPmZsqUKX/6mfp0jow5+nkaNGiQufLKK//0M1xLR7ryyitN9+7dq82z27V0NPX+EXBFRYVWrlyp9PR0zzyn06n09HRlZmZaWJl1CgoKJElxcXHV5r/11luKj49Xu3btNGbMGB06dMizLDMzU+3bt1diYqJnXq9evVRYWKgNGzb4pnAf2Lp1q5KTk3XaaacpIyNDO3bskCStXLlSlZWV1a6j1q1bq1mzZp7ryC7n6LCKigrNnDlTt956qxwOh2c+11F127dvV3Z2drVrJzo6WqmpqdWunZiYGHXp0sWzTnp6upxOp7KysjzrXHjhhQoODvas06tXL23ZskUHDx700dH4TkFBgRwOh2JiYqrNnzRpkho2bKhOnTrpqaeeqvb6gF3O0ZdffqmEhAS1atVKd911lw4cOOBZxrVUXU5Ojj755BPddtttRyyz+7UUaHUB3rZ//365XK5qv3AkKTExUZs3b7aoKuu43W7dd999uuCCC9SuXTvP/BtvvFHNmzdXcnKy1q5dq9GjR2vLli364IMPJEnZ2dlHPYeHl9UHqampev3119WqVSvt3btXjz76qLp166b169crOztbwcHBR/wySkxM9By/Hc7R782dO1f5+fkaPHiwZx7X0ZEOH9fRjvv3105CQkK15YGBgYqLi6u2TkpKyhHbOLwsNjbWK/VboaysTKNHj9YNN9ygqKgoz/xhw4bp7LPPVlxcnL799luNGTNGe/fu1dNPPy3JHueod+/euuaaa5SSkqKff/5ZDz30kPr06aPMzEwFBARwLf3BG2+8ocjISF1zzTXV5nMt2SAAorqhQ4dq/fr1WrZsWbX5Q4YM8fx3+/bt1ahRI/Xo0UM///yzTj/9dF+XaYk+ffp4/rtD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", + "text/html": [ "\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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" - }, + } + ], + "source": [ + "plt.figure(4)\n", + "albedo = plt.imshow(rt._albedo[:,:,:3]) # skip the 4-th value (now constant, 0.0)\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5a7c93df60a843cfbc60e2dc2ef50700", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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MWPGkPeLVQSwoaEBALB3717U1dWN8tmcnPT392PmzJl44403UFtbO9qnc9LC+1Qe3qPK4H0qD+9RZfA+lWc83SMRwaFDh9Da2npM+8dKAA3D7vJYV1c35v/gTzS1tbW8RxXA+1Qe3qPK4H0qD+9RZfA+lWe83KPjCWZxEAghhBBCSMygABJCCCGExIxYCWA6ncbXv/51pNPp0T6Vkxbeo8rgfSoP71Fl8D6Vh/eoMnifysN7VCBWo4AJIYQQQkjMIoCEEEIIIYQCSAghhBASOyiAhBBCCCExgwJICCGEEBIzYiOAP/zhDzFnzhxUV1ejvb0dTz755Gif0oixfv16nHfeeZg8eTIaGxtx1VVXYefOnb4273nPe6CU8i2f//znfW327t2LD37wg5gwYQIaGxvxla98Bfl8fiQv5YTyjW98o+genHHGGV794OAgrr/+ekydOhWTJk3C1Vdfje7ubt8xxvs9mjNnTtE9Ukrh+uuvBxDf52jz5s340Ic+hNbWViil8MADD/jqRQS33XYbWlpaUFNTg46ODrzyyiu+Nj09PVi1ahVqa2tRX1+Pa665BocPH/a1ee6553DJJZeguroaM2fOxO23336iL23YKHWPcrkcbr75ZixatAgTJ05Ea2srPvWpT+Htt9/2HSPs+duwYYOvzVi+R0D5Z+nTn/500T1YsWKFr02cnyUAoX9HKaVwxx13eG3i8CyVRWLAr371K6mqqpKf/vSnsmPHDrn22mulvr5euru7R/vURoQrrrhCfvazn8n27dtl27Zt8oEPfEBmzZolhw8f9tpcdtllcu2118q+ffu8pa+vz6vP5/Ny1llnSUdHhzzzzDPy4IMPyrRp02TdunWjcUknhK9//euycOFC3z04cOCAV//5z39eZs6cKRs3bpSnn35aLrjgArnwwgu9+jjco/379/vuz8MPPywA5JFHHhGR+D5HDz74oHzta1+T3/72twJA7r//fl/9hg0bpK6uTh544AF59tln5cMf/rC0tbXJ0aNHvTYrVqyQxYsXy1//+ld57LHH5LTTTpNPfOITXn1fX580NTXJqlWrZPv27fLLX/5Sampq5Ec/+tFIXeZxUeoe9fb2SkdHh/z617+Wl156STo7O+X888+XpUuX+o4xe/Zs+da3vuV7vvS/x8b6PRIp/yytXr1aVqxY4bsHPT09vjZxfpZExHdv9u3bJz/96U9FKSW7du3y2sThWSpHLATw/PPPl+uvv97bNk1TWltbZf369aN4VqPH/v37BYD8+c9/9souu+wy+dKXvhS5z4MPPiiGYUhXV5dXdtddd0ltba1kMpkTebojxte//nVZvHhxaF1vb6+kUin5z//8T6/sxRdfFADS2dkpIvG4R0G+9KUvydy5c8WyLBHhcyQiRT9IlmVJc3Oz3HHHHV5Zb2+vpNNp+eUvfykiIi+88IIAkKeeespr8z//8z+ilJK33npLRET+/d//XaZMmeK7TzfffLPMnz//BF/R8BP2ox3kySefFACyZ88er2z27Nny/e9/P3Kf8XSPRMLv0+rVq+UjH/lI5D58lor5yEc+Iu973/t8ZXF7lsIY9yngbDaLrVu3oqOjwyszDAMdHR3o7OwcxTMbPfr6+gAADQ0NvvL77rsP06ZNw1lnnYV169ZhYGDAq+vs7MSiRYvQ1NTklV1xxRXo7+/Hjh07RubER4BXXnkFra2tOPXUU7Fq1Srs3bsXALB161bkcjnfc3TGGWdg1qxZ3nMUl3vkks1m8fOf/xyf/exnoZTyyvkc+dm9eze6urp8z05dXR3a29t9z059fT2WLVvmteno6IBhGNiyZYvX5tJLL0VVVZXX5oorrsDOnTvx7rvvjtDVjBx9fX1QSqG+vt5XvmHDBkydOhXnnHMO7rjjDl/3gbjco0cffRSNjY2YP38+rrvuOhw8eNCr47Pkp7u7G//93/+Na665pqgu7s9ScrRP4ETzzjvvwDRN3w8OADQ1NeGll14apbMaPSzLwg033ICLLroIZ511llf+yU9+ErNnz0Zrayuee+453Hzzzdi5cyd++9vfAgC6urpC76FbNx5ob2/HPffcg/nz52Pfvn345je/iUsuuQTbt29HV1cXqqqqin6MmpqavOuPwz3SeeCBB9Db24tPf/rTXhmfo2Lc6wq7bv3ZaWxs9NUnk0k0NDT42rS1tRUdw62bMmXKCTn/0WBwcBA333wzPvGJT6C2ttYr/+IXv4hzzz0XDQ0NeOKJJ7Bu3Trs27cP3/ve9wDE4x6tWLECH/3oR9HW1oZdu3bh//2//4crr7wSnZ2dSCQSfJYC3HvvvZg8eTI++tGP+sr5LMVAAImf66+/Htu3b8fjjz/uK1+zZo23vmjRIrS0tODyyy/Hrl27MHfu3JE+zVHhyiuv9NbPPvtstLe3Y/bs2fjNb36DmpqaUTyzk5Of/OQnuPLKK9Ha2uqV8Tkix0sul8PHPvYxiAjuuusuX92NN97orZ999tmoqqrC5z73Oaxfvz42r/ZauXKlt75o0SKcffbZmDt3Lh599FFcfvnlo3hmJyc//elPsWrVKlRXV/vK+SzFYBTwtGnTkEgkikZrdnd3o7m5eZTOanRYu3Yt/vCHP+CRRx7BjBkzSrZtb28HALz66qsAgObm5tB76NaNR+rr63H66afj1VdfRXNzM7LZLHp7e31t9OcoTvdoz549+NOf/oR//Md/LNmOz1Hhukr9HdTc3Iz9+/f76vP5PHp6emL1fLnyt2fPHjz88MO+6F8Y7e3tyOfzeP311wHE4x4FOfXUUzFt2jTff2N8lmwee+wx7Ny5s+zfU0A8n6VxL4BVVVVYunQpNm7c6JVZloWNGzdi+fLlo3hmI4eIYO3atbj//vuxadOmorB2GNu2bQMAtLS0AACWL1+O559/3vcXi/sX9JlnnnlCznu0OXz4MHbt2oWWlhYsXboUqVTK9xzt3LkTe/fu9Z6jON2jn/3sZ2hsbMQHP/jBku34HAFtbW1obm72PTv9/f3YsmWL79np7e3F1q1bvTabNm2CZVmeRC9fvhybN29GLpfz2jz88MOYP3/+uEhHufL3yiuv4E9/+hOmTp1adp9t27bBMAwv5Tne71EYb775Jg4ePOj7byzuz5LLT37yEyxduhSLFy8u2zaWz9Joj0IZCX71q19JOp2We+65R1544QVZs2aN1NfX+0Yijmeuu+46qaurk0cffdQ35H1gYEBERF599VX51re+JU8//bTs3r1bfve738mpp54ql156qXcMd/qO97///bJt2zZ56KGHZPr06WN++g6dm266SR599FHZvXu3/OUvf5GOjg6ZNm2a7N+/X0TsaWBmzZolmzZtkqefflqWL18uy5cv9/aPwz0SsUfRz5o1S26++WZfeZyfo0OHDskzzzwjzzzzjACQ733ve/LMM894I1g3bNgg9fX18rvf/U6ee+45+chHPhI6Dcw555wjW7Zskccff1zmzZvnm7qjt7dXmpqa5B/+4R9k+/bt8qtf/UomTJgwZqalKHWPstmsfPjDH5YZM2bItm3bfH9PuaMwn3jiCfn+978v27Ztk127dsnPf/5zmT59unzqU5/yvmOs3yOR0vfp0KFD8uUvf1k6Oztl9+7d8qc//UnOPfdcmTdvngwODnrHiPOz5NLX1ycTJkyQu+66q2j/uDxL5YiFAIqI/OAHP5BZs2ZJVVWVnH/++fLXv/51tE9pxAAQuvzsZz8TEZG9e/fKpZdeKg0NDZJOp+W0006Tr3zlK77520REXn/9dbnyyiulpqZGpk2bJjfddJPkcrlRuKITw8c//nFpaWmRqqoqOeWUU+TjH/+4vPrqq1790aNH5Qtf+IJMmTJFJkyYIH/3d38n+/bt8x1jvN8jEZE//vGPAkB27tzpK4/zc/TII4+E/je2evVqEbGngrn11lulqalJ0um0XH755UX37+DBg/KJT3xCJk2aJLW1tfKZz3xGDh065Gvz7LPPysUXXyzpdFpOOeUU2bBhw0hd4nFT6h7t3r078u8pd47JrVu3Snt7u9TV1Ul1dbUsWLBAvvvd7/rER2Rs3yOR0vdpYGBA3v/+98v06dMllUrJ7Nmz5dprry0KZsT5WXL50Y9+JDU1NdLb21u0f1yepXIoEZETGmIkhBBCCCEnFeO+DyAhhBBCCPFDASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCYQQEkhBBCCIkZFEBCCCGEkJhBASSEEEIIiRkUQEIIIYSQmEEBJIQQQgiJGRRAQgghhJCY8f8BvcuJ4WnOcQ4AAAAASUVORK5CYII=", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, diff --git a/examples/1_basics/12_camera_shaders.ipynb b/examples/1_basics/12_camera_shaders.ipynb index 265ac7b2..28a4227a 100644 --- a/examples/1_basics/12_camera_shaders.ipynb +++ b/examples/1_basics/12_camera_shaders.ipynb @@ -15,7 +15,7 @@ "metadata": {}, "outputs": [], "source": [ - "%matplotlib notebook\n", + "%matplotlib widget\n", "import matplotlib.pyplot as plt\n", "\n", "import numpy as np\n", @@ -159,791 +159,24 @@ "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 = $('
');\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", - " fig.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", - " '
');\n", - " var titletext = $(\n", - " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
');\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 = $('');\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 = $('');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = $('
');\n", - " var 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", - " event.shiftKey = false;\n", - " // Send a \"J\" for go to next cell\n", - " event.which = 74;\n", - " event.keyCode = 74;\n", - " manager.command_mode();\n", - " manager.handle_keydown(event);\n", - " }\n", - "}\n", - "\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= 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": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "width = 800; height = 600 # ray tracing output size in pixels\n", "\n", @@ -1099,7 +306,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1113,7 +320,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/examples/2_animations_and_callbacks/3_encode_animation.ipynb b/examples/2_animations_and_callbacks/3_encode_animation.ipynb index d52f50ff..eaf15e5e 100644 --- a/examples/2_animations_and_callbacks/3_encode_animation.ipynb +++ b/examples/2_animations_and_callbacks/3_encode_animation.ipynb @@ -15,7 +15,7 @@ "metadata": {}, "outputs": [], "source": [ - "%matplotlib notebook\n", + "%matplotlib widget\n", "import matplotlib.pyplot as plt\n", "\n", "import numpy as np\n", @@ -73,996 +73,24 @@ "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\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", - " fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute('tabindex', '0');\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;' +\n", - " 'z-index: 2;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box;' +\n", - " 'pointer-events: none;' +\n", - " 'position: relative;' +\n", - " 'z-index: 0;'\n", - " );\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box;' +\n", - " 'left: 0;' +\n", - " 'pointer-events: none;' +\n", - " 'position: absolute;' +\n", - " 'top: 0;' +\n", - " 'z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " /* This rescales the canvas back to display pixels, so that it\n", - " * appears correct on HiDPI screens. */\n", - " canvas.style.width = width + 'px';\n", - " canvas.style.height = height + 'px';\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " /* User Agent sniffing is bad, but WebKit is busted:\n", - " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", - " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", - " * The worst that happens here is that they get an extra browser\n", - " * selection when dragging, if this check fails to catch them.\n", - " */\n", - " var UA = navigator.userAgent;\n", - " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", - " if(isWebKit) {\n", - " return function (event) {\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We\n", - " * want to control all of the cursor setting manually through\n", - " * the 'cursor' event from matplotlib */\n", - " event.preventDefault()\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " } else {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " canvas_div.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " canvas_div.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " canvas_div.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " fig.canvas_div.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\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", - " img.type = 'image/png';\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "function getModifiers(event) {\n", - " var mods = [];\n", - " if (event.ctrlKey) {\n", - " mods.push('ctrl');\n", - " }\n", - " if (event.altKey) {\n", - " mods.push('alt');\n", - " }\n", - " if (event.shiftKey) {\n", - " mods.push('shift');\n", - " }\n", - " if (event.metaKey) {\n", - " mods.push('meta');\n", - " }\n", - " return mods;\n", - "}\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://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", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " // from https://stackoverflow.com/q/1114465\n", - " var boundingRect = this.canvas.getBoundingClientRect();\n", - " var x = (event.clientX - boundingRect.left) * this.ratio;\n", - " var y = (event.clientY - boundingRect.top) * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " modifiers: getModifiers(event),\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\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", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '';\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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\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", - "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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4b3dd11bc6b9477aac6a7c395c874739", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAImCAYAAABn6xZvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmjklEQVR4nO3dfZCdZWH//0+SzS554GxMILukJBhba4gExUSSLbadSpqVro6W2FEmxdQyZaQbCkQR02LwoRqM09qiPFjHIcwIosyUWtKCxlDDWJYQwtCGIBFb2o2G3SA0u4Bm87D3749Oztct8fvt/NynK7xeM2cm576vs+e6mAty3tznnJ1QVVUVAAAAKNTEsZ4AAAAA/CKELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7bj2I033phXv/rVOemkk7J06dI8/PDDYz0lAACAcUfYjlNf+9rXsnbt2lx33XV59NFH84Y3vCHt7e3Zv3//WE8NAABgXJlQVVU11pPg5ZYuXZo3v/nN+cIXvpAkGRwczNy5c3P55ZfnIx/5yBjPDgAAYPxoGOsJ8HKHDh3Kzp07s27duvqxiRMnZvny5enq6jruYwYGBjIwMFC/Pzg4mOeffz6zZs3KhAkTRnzOAADwSlZVVV544YXMmTMnEyd6Y+xoE7bj0I9//OMcPXo0LS0tQ463tLTkySefPO5jNmzYkI9//OOjMT0AAODn2Lt3b04//fSxnsYrjrA9Qaxbty5r166t3+/r68u8efOyd+/e1Gq1MZwZAACc+Pr7+zN37tycfPLJYz2VVyRhOw6dcsopmTRpUnp7e4cc7+3tTWtr63Ef09TUlKamppcdr9VqwhYAAEaJjwGODW/+HocaGxuzePHibN26tX5scHAwW7duTVtb2xjODAAAYPxxxXacWrt2bVavXp0lS5bk3HPPzV/91V/lpZdeyvvf//6xnhoAAMC4ImzHqfe85z159tlns379+vT09OSNb3xj7rvvvpd9oRQAAMArnd9je4Lq7+9Pc3Nz+vr6fMYWAABGmNffY8tnbAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAdZg888EDe8Y53ZM6cOZkwYUL+7u/+bsj5qqqyfv36nHbaaZkyZUqWL1+ep556asiY559/PqtWrUqtVsuMGTNyySWX5MUXXxzFVQAAAJRD2A6zl156KW94wxty4403Hvf8xo0bc8MNN+SWW27J9u3bM23atLS3t+fgwYP1MatWrcru3buzZcuWbN68OQ888EAuvfTS0VoCAABAUSZUVVWN9SROVBMmTMjdd9+dd73rXUn++2rtnDlz8sEPfjAf+tCHkiR9fX1paWnJpk2b8t73vjff+973snDhwuzYsSNLlixJktx33335nd/5nfzwhz/MnDlz/lfP3d/fn+bm5vT19aVWq43I+gAAgP/m9ffYcsV2FD399NPp6enJ8uXL68eam5uzdOnSdHV1JUm6uroyY8aMetQmyfLlyzNx4sRs37591OcMAAAw3jWM9QReSXp6epIkLS0tQ463tLTUz/X09GT27NlDzjc0NGTmzJn1McczMDCQgYGB+v3+/v7hmjYAAMC45ortCWLDhg1pbm6u3+bOnTvWUwIAABgVwnYUtba2Jkl6e3uHHO/t7a2fa21tzf79+4ecP3LkSJ5//vn6mONZt25d+vr66re9e/cO8+wBAADGJ2E7iubPn5/W1tZs3bq1fqy/vz/bt29PW1tbkqStrS0HDhzIzp0762Puv//+DA4OZunSpT/3Zzc1NaVWqw25AQAAvBL4jO0we/HFF/ODH/ygfv/pp5/OY489lpkzZ2bevHm58sor8+d//ud57Wtfm/nz5+ejH/1o5syZU//m5DPPPDNve9vb8kd/9Ee55ZZbcvjw4axZsybvfe97/9ffiAwAAPBKImyH2SOPPJLf+q3fqt9fu3ZtkmT16tXZtGlTPvzhD+ell17KpZdemgMHDuQtb3lL7rvvvpx00kn1x9x+++1Zs2ZNzj///EycODErV67MDTfcMOprAQAAKIHfY3uC8nu0AABg9Hj9PbZ8xhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsh9mGDRvy5je/OSeffHJmz56dd73rXdmzZ8+QMQcPHkxnZ2dmzZqV6dOnZ+XKlent7R0ypru7Ox0dHZk6dWpmz56dq6++OkeOHBnNpQAAABRB2A6zbdu2pbOzMw899FC2bNmSw4cPZ8WKFXnppZfqY6666qrcc889ueuuu7Jt27bs27cvF154Yf380aNH09HRkUOHDuXBBx/Mbbfdlk2bNmX9+vVjsSQAAIBxbUJVVdVYT+JE9uyzz2b27NnZtm1bfuM3fiN9fX059dRTc8cdd+Td7353kuTJJ5/MmWeema6urixbtiz33ntv3v72t2ffvn1paWlJktxyyy255ppr8uyzz6axsfH/+bz9/f1pbm5OX19farXaiK4RAABe6bz+Hluu2I6wvr6+JMnMmTOTJDt37szhw4ezfPny+pgFCxZk3rx56erqSpJ0dXVl0aJF9ahNkvb29vT392f37t3HfZ6BgYH09/cPuQEAALwSCNsRNDg4mCuvvDLnnXdezjrrrCRJT09PGhsbM2PGjCFjW1pa0tPTUx/zs1F77Pyxc8ezYcOGNDc3129z584d5tUAAACMT8J2BHV2dubxxx/PnXfeOeLPtW7duvT19dVve/fuHfHnBAAAGA8axnoCJ6o1a9Zk8+bNeeCBB3L66afXj7e2tubQoUM5cODAkKu2vb29aW1trY95+OGHh/y8Y9+afGzM/9TU1JSmpqZhXgUAAMD454rtMKuqKmvWrMndd9+d+++/P/Pnzx9yfvHixZk8eXK2bt1aP7Znz550d3enra0tSdLW1pZdu3Zl//799TFbtmxJrVbLwoULR2chAAAAhXDFdph1dnbmjjvuyDe+8Y2cfPLJ9c/ENjc3Z8qUKWlubs4ll1yStWvXZubMmanVarn88svT1taWZcuWJUlWrFiRhQsX5uKLL87GjRvT09OTa6+9Np2dna7KAgAA/A9+3c8wmzBhwnGP33rrrfmDP/iDJMnBgwfzwQ9+MF/96lczMDCQ9vb23HTTTUPeZvyf//mfueyyy/Kd73wn06ZNy+rVq3P99denoeF/9/8ifN04AACMHq+/x5awPUH5FwsAAEaP199jy2dsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBownaY3XzzzTn77LNTq9VSq9XS1taWe++9t37+4MGD6ezszKxZszJ9+vSsXLkyvb29Q35Gd3d3Ojo6MnXq1MyePTtXX311jhw5MtpLAQAAKIKwHWann356rr/++uzcuTOPPPJI3vrWt+ad73xndu/enSS56qqrcs899+Suu+7Ktm3bsm/fvlx44YX1xx89ejQdHR05dOhQHnzwwdx2223ZtGlT1q9fP1ZLAgAAGNcmVFVVjfUkTnQzZ87MZz/72bz73e/OqaeemjvuuCPvfve7kyRPPvlkzjzzzHR1dWXZsmW599578/a3vz379u1LS0tLkuSWW27JNddck2effTaNjY3/q+fs7+9Pc3Nz+vr6UqvVRmxtAACA199jzRXbEXT06NHceeedeemll9LW1padO3fm8OHDWb58eX3MggULMm/evHR1dSVJurq6smjRonrUJkl7e3v6+/vrV32PZ2BgIP39/UNuAAAArwTCdgTs2rUr06dPT1NTUz7wgQ/k7rvvzsKFC9PT05PGxsbMmDFjyPiWlpb09PQkSXp6eoZE7bHzx879PBs2bEhzc3P9Nnfu3OFdFAAAwDglbEfA6173ujz22GPZvn17LrvssqxevTpPPPHEiD7nunXr0tfXV7/t3bt3RJ8PAABgvGgY6wmciBobG/Mrv/IrSZLFixdnx44d+eu//uu85z3vyaFDh3LgwIEhV217e3vT2tqaJGltbc3DDz885Ocd+9bkY2OOp6mpKU1NTcO8EgAAgPHPFdtRMDg4mIGBgSxevDiTJ0/O1q1b6+f27NmT7u7utLW1JUna2tqya9eu7N+/vz5my5YtqdVqWbhw4ajPHQAAYLxzxXaYrVu3LhdccEHmzZuXF154IXfccUe+853v5Jvf/Gaam5tzySWXZO3atZk5c2ZqtVouv/zytLW1ZdmyZUmSFStWZOHChbn44ouzcePG9PT05Nprr01nZ6crsgAAAMchbIfZ/v378773vS/PPPNMmpubc/bZZ+eb3/xmfvu3fztJ8rnPfS4TJ07MypUrMzAwkPb29tx00031x0+aNCmbN2/OZZddlra2tkybNi2rV6/OJz7xibFaEgAAwLjm99ieoPweLQAAGD1ef48tn7EFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCdgRdf/31mTBhQq688sr6sYMHD6azszOzZs3K9OnTs3LlyvT29g55XHd3dzo6OjJ16tTMnj07V199dY4cOTLKswcAACiDsB0hO3bsyBe/+MWcffbZQ45fddVVueeee3LXXXdl27Zt2bdvXy688ML6+aNHj6ajoyOHDh3Kgw8+mNtuuy2bNm3K+vXrR3sJAAAARRC2I+DFF1/MqlWr8qUvfSmvetWr6sf7+vry5S9/OX/5l3+Zt771rVm8eHFuvfXWPPjgg3nooYeSJN/61rfyxBNP5Ctf+Ure+MY35oILLsgnP/nJ3HjjjTl06NBYLQkAAGDcErYjoLOzMx0dHVm+fPmQ4zt37szhw4eHHF+wYEHmzZuXrq6uJElXV1cWLVqUlpaW+pj29vb09/dn9+7do7MAAACAgjSM9QRONHfeeWceffTR7Nix42Xnenp60tjYmBkzZgw53tLSkp6envqYn43aY+ePnft5BgYGMjAwUL/f39///3cJAAAARXHFdhjt3bs3V1xxRW6//facdNJJo/rcGzZsSHNzc/02d+7cUX1+AACAsSJsh9HOnTuzf//+vOlNb0pDQ0MaGhqybdu23HDDDWloaEhLS0sOHTqUAwcODHlcb29vWltbkyStra0v+5bkY/ePjTmedevWpa+vr37bu3fv8C4OAABgnBK2w+j888/Prl278thjj9VvS5YsyapVq+p/njx5crZu3Vp/zJ49e9Ld3Z22trYkSVtbW3bt2pX9+/fXx2zZsiW1Wi0LFy78uc/d1NSUWq025AYAAPBK4DO2w+jkk0/OWWedNeTYtGnTMmvWrPrxSy65JGvXrs3MmTNTq9Vy+eWXp62tLcuWLUuSrFixIgsXLszFF1+cjRs3pqenJ9dee206OzvT1NQ06msCAAAY74TtKPvc5z6XiRMnZuXKlRkYGEh7e3tuuumm+vlJkyZl8+bNueyyy9LW1pZp06Zl9erV+cQnPjGGswYAABi/JlRVVY31JBh+/f39aW5uTl9fn7clAwDACPP6e2z5jC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YAgAAUDRhCwAAQNGELQAAAEUTtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YAAAAUTdgCAABQNGELAABA0YQtAAAARRO2AAAAFE3YDrOPfexjmTBhwpDbggUL6ucPHjyYzs7OzJo1K9OnT8/KlSvT29s75Gd0d3eno6MjU6dOzezZs3P11VfnyJEjo70UAACAIjSM9QRORK9//evz7W9/u36/oeH//GO+6qqr8g//8A+566670tzcnDVr1uTCCy/MP//zPydJjh49mo6OjrS2tubBBx/MM888k/e9732ZPHlyPv3pT4/6WgAAAMY7YTsCGhoa0tra+rLjfX19+fKXv5w77rgjb33rW5Mkt956a84888w89NBDWbZsWb71rW/liSeeyLe//e20tLTkjW98Yz75yU/mmmuuycc+9rE0NjaO9nIAAADGNW9FHgFPPfVU5syZk9e85jVZtWpVuru7kyQ7d+7M4cOHs3z58vrYBQsWZN68eenq6kqSdHV1ZdGiRWlpaamPaW9vT39/f3bv3j26CwEAACiAK7bDbOnSpdm0aVNe97rX5ZlnnsnHP/7x/Pqv/3oef/zx9PT0pLGxMTNmzBjymJaWlvT09CRJenp6hkTtsfPHzv08AwMDGRgYqN/v7+8fphUBAACMb8J2mF1wwQX1P5999tlZunRpzjjjjHz961/PlClTRux5N2zYkI9//OMj9vMBAADGK29FHmEzZszIr/7qr+YHP/hBWltbc+jQoRw4cGDImN7e3vpncltbW1/2LcnH7h/vc7vHrFu3Ln19ffXb3r17h3chAAAA45SwHWEvvvhi/u3f/i2nnXZaFi9enMmTJ2fr1q3183v27El3d3fa2tqSJG1tbdm1a1f2799fH7Nly5bUarUsXLjw5z5PU1NTarXakBsAAMArgbciD7MPfehDecc73pEzzjgj+/bty3XXXZdJkybloosuSnNzcy655JKsXbs2M2fOTK1Wy+WXX562trYsW7YsSbJixYosXLgwF198cTZu3Jienp5ce+216ezsTFNT0xivDgAAYPwRtsPshz/8YS666KI899xzOfXUU/OWt7wlDz30UE499dQkyec+97lMnDgxK1euzMDAQNrb23PTTTfVHz9p0qRs3rw5l112Wdra2jJt2rSsXr06n/jEJ8ZqSQAAAOPahKqqqrGeBMOvv78/zc3N6evr87ZkAAAYYV5/jy2fsQUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIrWMNYTYGRUVZUk6e/vH+OZAADAie/Y6+5jr8MZXcL2BPXcc88lSebOnTvGMwEAgFeOF154Ic3NzWM9jVccYXuCmjlzZpKku7vbv1iMmP7+/sydOzd79+5NrVYb6+lwArLHGGn2GKPBPntlqKoqL7zwQubMmTPWU3lFErYnqIkT//vj083Nzf4Dyoir1Wr2GSPKHmOk2WOMBvvsxOeC0tjx5VEAAAAUTdgCAABQNGF7gmpqasp1112XpqamsZ4KJzD7jJFmjzHS7DFGg30GI29C5fuoAQAAKJgrtgAAABRN2AIAAFA0YQsAAEDRhC0AAABFE7YnqBtvvDGvfvWrc9JJJ2Xp0qV5+OGHx3pKFGDDhg1585vfnJNPPjmzZ8/Ou971ruzZs2fImIMHD6azszOzZs3K9OnTs3LlyvT29g4Z093dnY6OjkydOjWzZ8/O1VdfnSNHjozmUijE9ddfnwkTJuTKK6+sH7PHGA4/+tGP8vu///uZNWtWpkyZkkWLFuWRRx6pn6+qKuvXr89pp52WKVOmZPny5XnqqaeG/Iznn38+q1atSq1Wy4wZM3LJJZfkxRdfHO2lMA4dPXo0H/3oRzN//vxMmTIlv/zLv5xPfvKT+dnvZLXHYHQJ2xPQ1772taxduzbXXXddHn300bzhDW9Ie3t79u/fP9ZTY5zbtm1bOjs789BDD2XLli05fPhwVqxYkZdeeqk+5qqrrso999yTu+66K9u2bcu+ffty4YUX1s8fPXo0HR0dOXToUB588MHcdttt2bRpU9avXz8WS2Ic27FjR774xS/m7LPPHnLcHuMX9V//9V8577zzMnny5Nx777154okn8hd/8Rd51ateVR+zcePG3HDDDbnllluyffv2TJs2Le3t7Tl48GB9zKpVq7J79+5s2bIlmzdvzgMPPJBLL710LJbEOPOZz3wmN998c77whS/ke9/7Xj7zmc9k48aN+fznP18fY4/BKKs44Zx77rlVZ2dn/f7Ro0erOXPmVBs2bBjDWVGi/fv3V0mqbdu2VVVVVQcOHKgmT55c3XXXXfUx3/ve96okVVdXV1VVVfWP//iP1cSJE6uenp76mJtvvrmq1WrVwMDA6C6AceuFF16oXvva11ZbtmypfvM3f7O64oorqqqyxxge11xzTfWWt7zl554fHBysWltbq89+9rP1YwcOHKiampqqr371q1VVVdUTTzxRJal27NhRH3PvvfdWEyZMqH70ox+N3OQpQkdHR/WHf/iHQ45deOGF1apVq6qqssdgLLhie4I5dOhQdu7cmeXLl9ePTZw4McuXL09XV9cYzowS9fX1JUlmzpyZJNm5c2cOHz48ZH8tWLAg8+bNq++vrq6uLFq0KC0tLfUx7e3t6e/vz+7du0dx9oxnnZ2d6ejoGLKXEnuM4fH3f//3WbJkSX7v934vs2fPzjnnnJMvfelL9fNPP/10enp6huyz5ubmLF26dMg+mzFjRpYsWVIfs3z58kycODHbt28fvcUwLv3ar/1atm7dmu9///tJkn/5l3/Jd7/73VxwwQVJ7DEYCw1jPQGG149//OMcPXp0yAu+JGlpacmTTz45RrOiRIODg7nyyitz3nnn5ayzzkqS9PT0pLGxMTNmzBgytqWlJT09PfUxx9t/x87BnXfemUcffTQ7dux42Tl7jOHw7//+77n55puzdu3a/Omf/ml27NiRP/mTP0ljY2NWr15d3yfH20c/u89mz5495HxDQ0Nmzpxpn5GPfOQj6e/vz4IFCzJp0qQcPXo0n/rUp7Jq1aokscdgDAhb4Lg6Ozvz+OOP57vf/e5YT4UTyN69e3PFFVdky5YtOemkk8Z6OpygBgcHs2TJknz6059Okpxzzjl5/PHHc8stt2T16tVjPDtOBF//+tdz++2354477sjrX//6PPbYY7nyyiszZ84cewzGiLcin2BOOeWUTJo06WXfINrb25vW1tYxmhWlWbNmTTZv3px/+qd/yumnn14/3tramkOHDuXAgQNDxv/s/mptbT3u/jt2jle2nTt3Zv/+/XnTm96UhoaGNDQ0ZNu2bbnhhhvS0NCQlpYWe4xf2GmnnZaFCxcOOXbmmWemu7s7yf/ZJ/+3vytbW1tf9qWLR44cyfPPP2+fkauvvjof+chH8t73vjeLFi3KxRdfnKuuuiobNmxIYo/BWBC2J5jGxsYsXrw4W7durR8bHBzM1q1b09bWNoYzowRVVWXNmjW5++67c//992f+/PlDzi9evDiTJ08esr/27NmT7u7u+v5qa2vLrl27hvxlvWXLltRqtZe90OSV5/zzz8+uXbvy2GOP1W9LlizJqlWr6n+2x/hFnXfeeS/7VWXf//73c8YZZyRJ5s+fn9bW1iH7rL+/P9u3bx+yzw4cOJCdO3fWx9x///0ZHBzM0qVLR2EVjGc/+clPMnHi0JfRkyZNyuDgYBJ7DMbEWH97FcPvzjvvrJqamqpNmzZVTzzxRHXppZdWM2bMGPINonA8l112WdXc3Fx95zvfqZ555pn67Sc/+Ul9zAc+8IFq3rx51f3331898sgjVVtbW9XW1lY/f+TIkeqss86qVqxYUT322GPVfffdV5166qnVunXrxmJJFOBnvxW5quwxfnEPP/xw1dDQUH3qU5+qnnrqqer222+vpk6dWn3lK1+pj7n++uurGTNmVN/4xjeqf/3Xf63e+c53VvPnz69++tOf1se87W1vq84555xq+/bt1Xe/+93qta99bXXRRReNxZIYZ1avXl390i/9UrV58+bq6aefrv72b/+2OuWUU6oPf/jD9TH2GIwuYXuC+vznP1/NmzevamxsrM4999zqoYceGuspUYAkx73deuut9TE//elPqz/+4z+uXvWqV1VTp06tfvd3f7d65plnhvyc//iP/6guuOCCasqUKdUpp5xSffCDH6wOHz48yquhFP8zbO0xhsM999xTnXXWWVVTU1O1YMGC6m/+5m+GnB8cHKw++tGPVi0tLVVTU1N1/vnnV3v27Bky5rnnnqsuuuiiavr06VWtVqve//73Vy+88MJoLoNxqr+/v7riiiuqefPmVSeddFL1mte8pvqzP/uzIb9yzB6D0TWhqqpqLK8YAwAAwC/CZ2wBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKIJWwAAAIombAEAACiasAUAAKBowhYAAICiCVsAAACKJmwBAAAomrAFAACgaMIWAACAoglbAAAAiiZsAQAAKJqwBQAAoGjCFgAAgKL9f1Pm1vqVH9VHAAAAAElFTkSuQmCC", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -1247,14 +275,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "500 72\n" + "500 14\n" ] } ], @@ -1271,7 +299,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -1287,19 +315,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "optix.close()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/examples/2_animations_and_callbacks/4_benchmarking.ipynb b/examples/2_animations_and_callbacks/4_benchmarking.ipynb index 6ec8888a..40b2180f 100644 --- a/examples/2_animations_and_callbacks/4_benchmarking.ipynb +++ b/examples/2_animations_and_callbacks/4_benchmarking.ipynb @@ -15,7 +15,7 @@ "metadata": {}, "outputs": [], "source": [ - "%matplotlib notebook\n", + "%matplotlib widget\n", "import matplotlib.pyplot as plt\n", "\n", "import time\n", @@ -1923,7 +1923,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/plotoptix/__init__.py b/plotoptix/__init__.py index c412bc40..d9da9be4 100644 --- a/plotoptix/__init__.py +++ b/plotoptix/__init__.py @@ -12,8 +12,8 @@ __author__ = "Robert Sulej, R&D Team " __status__ = "beta" -__version__ = "0.18.2" -__date__ = "26 May 2024" +__version__ = "0.18.3" +__date__ = "3 Jan 2025" import logging diff --git a/plotoptix/_load_lib.py b/plotoptix/_load_lib.py index 0ac2fe3c..42e8e381 100644 --- a/plotoptix/_load_lib.py +++ b/plotoptix/_load_lib.py @@ -11,7 +11,7 @@ BIN_PATH = "bin" -OIDN_VER = "2.2.1" +OIDN_VER = "2.3.1" PLATFORM = platform.system() if PLATFORM == "Linux": diff --git a/plotoptix/bin/OpenImageDenoise.dll b/plotoptix/bin/OpenImageDenoise.dll index d286dcf4..708f230a 100644 Binary files a/plotoptix/bin/OpenImageDenoise.dll and b/plotoptix/bin/OpenImageDenoise.dll differ diff --git a/plotoptix/bin/OpenImageDenoise_core.dll b/plotoptix/bin/OpenImageDenoise_core.dll index 5bc21e3c..261b23b2 100644 Binary files a/plotoptix/bin/OpenImageDenoise_core.dll and b/plotoptix/bin/OpenImageDenoise_core.dll differ diff --git a/plotoptix/bin/OpenImageDenoise_device_cuda.dll b/plotoptix/bin/OpenImageDenoise_device_cuda.dll index cc1af456..d4291064 100644 Binary files a/plotoptix/bin/OpenImageDenoise_device_cuda.dll and b/plotoptix/bin/OpenImageDenoise_device_cuda.dll differ diff --git a/plotoptix/bin/RnD.SharpEncoder.dll b/plotoptix/bin/RnD.SharpEncoder.dll index ee0d1ef8..096a299e 100644 Binary files a/plotoptix/bin/RnD.SharpEncoder.dll and b/plotoptix/bin/RnD.SharpEncoder.dll differ diff --git a/plotoptix/bin/RnD.SharpOptiX.dll b/plotoptix/bin/RnD.SharpOptiX.dll index a6d14381..e8e08793 100644 Binary files a/plotoptix/bin/RnD.SharpOptiX.dll and b/plotoptix/bin/RnD.SharpOptiX.dll differ diff --git a/plotoptix/bin/libOpenImageDenoise.so b/plotoptix/bin/libOpenImageDenoise.so index 7d9ddfd6..d03a0be4 100755 Binary files a/plotoptix/bin/libOpenImageDenoise.so and b/plotoptix/bin/libOpenImageDenoise.so differ diff --git a/plotoptix/bin/libOpenImageDenoise_core.so.2.2.1 b/plotoptix/bin/libOpenImageDenoise_core.so.2.2.1 deleted file mode 100755 index be994000..00000000 Binary files a/plotoptix/bin/libOpenImageDenoise_core.so.2.2.1 and /dev/null differ diff --git a/plotoptix/bin/libOpenImageDenoise_core.so.2.3.1 b/plotoptix/bin/libOpenImageDenoise_core.so.2.3.1 new file mode 100644 index 00000000..f35d741d Binary files /dev/null and b/plotoptix/bin/libOpenImageDenoise_core.so.2.3.1 differ diff --git a/plotoptix/bin/libOpenImageDenoise_device_cuda.so.2.2.1 b/plotoptix/bin/libOpenImageDenoise_device_cuda.so.2.3.1 old mode 100755 new mode 100644 similarity index 85% rename from plotoptix/bin/libOpenImageDenoise_device_cuda.so.2.2.1 rename to plotoptix/bin/libOpenImageDenoise_device_cuda.so.2.3.1 index 31805033..2909f61e Binary files a/plotoptix/bin/libOpenImageDenoise_device_cuda.so.2.2.1 and b/plotoptix/bin/libOpenImageDenoise_device_cuda.so.2.3.1 differ diff --git a/plotoptix/bin/librndSharpOptiX7.so b/plotoptix/bin/librndSharpOptiX7.so index 4e7de12a..3a24d213 100755 Binary files a/plotoptix/bin/librndSharpOptiX7.so and b/plotoptix/bin/librndSharpOptiX7.so differ diff --git a/plotoptix/bin/rndSharpEncoder.dll b/plotoptix/bin/rndSharpEncoder.dll index e28f8494..100ef60f 100644 Binary files a/plotoptix/bin/rndSharpEncoder.dll and b/plotoptix/bin/rndSharpEncoder.dll differ diff --git a/plotoptix/bin/rndSharpOptiX7.dll b/plotoptix/bin/rndSharpOptiX7.dll index aba9acf4..97d84125 100644 Binary files a/plotoptix/bin/rndSharpOptiX7.dll and b/plotoptix/bin/rndSharpOptiX7.dll differ diff --git a/plotoptix/npoptix.py b/plotoptix/npoptix.py index d51ef001..91fbdbfd 100644 --- a/plotoptix/npoptix.py +++ b/plotoptix/npoptix.py @@ -6081,7 +6081,7 @@ def load_merged_mesh_obj(self, file_name: str, mesh_name: str, if g_handle > 0: self._logger.info("...done, handle: %d", g_handle) - self.geometry_data[mesh_name] = GeometryMeta(mesh_name, g_handle, self._optix.get_geometry_size(mesh_name)) + self.geometry_data[mesh_name] = GeometryMeta(mesh_name, g_handle, self._optix.get_geometry_size(mesh_name), Geometry.Mesh) self.geometry_names[g_handle] = mesh_name else: msg = "Mesh loading failed." diff --git a/setup.py b/setup.py index 234341b5..8d93eb7e 100644 --- a/setup.py +++ b/setup.py @@ -148,9 +148,6 @@ def get_tag(self): windows_files = [ - "bin/avcodec-58.dll", - "bin/avformat-58.dll", - "bin/avutil-56.dll", "bin/OpenImageDenoise.dll", "bin/OpenImageDenoise_core.dll", "bin/OpenImageDenoise_device_cuda.dll", @@ -161,8 +158,8 @@ def get_tag(self): "bin/librndSharpOptiX7.so", "bin/librndSharpEncoder.so", "bin/libOpenImageDenoise.so", - "bin/libOpenImageDenoise_core.so.2.2.1", - "bin/libOpenImageDenoise_device_cuda.so.2.2.1" + "bin/libOpenImageDenoise_core.so.2.3.1", + "bin/libOpenImageDenoise_device_cuda.so.2.3.1" ] common_files = [ "bin/BitMiracle.LibTiff.NET.dll", @@ -178,7 +175,7 @@ def get_tag(self): setup(name='plotoptix', - version='0.18.2', + version='0.18.3', url='https://rnd.team/plotoptix', project_urls={ 'Documentation': 'https://plotoptix.rnd.team',