{ "cells": [ { "cell_type": "markdown", "id": "c57e9685-eb1d-46bb-ab38-12ff55cefb1a", "metadata": {}, "source": [ "# Spatial Alignment\n", "\n", "Integrative analysis of spatially resolved transcriptomics datasets empowers a deeper understanding of complex biological systems. However, integrating multiple tissue sections presents challenges for batch effect removal, particularly when the sections are measured by various technologies or collected at different times. Here, we propose **Spatial Alignment**, an unsupervised contrastive learning model that employs the expression of all measured genes and the spatial location of cells, to integrate multiple tissue sections. It enables the joint downstream analysis of multiple datasets not only in low-dimensional embeddings but also in the reconstructed full expression space. In benchmarking analysis, spatiAlign outperforms state-of-the-art methods in learning joint and discriminative representations for tissue sections, each potentially characterized by complex batch effects or distinct biological characteristics\n", "\n", "After alignment, we will get a new expression matrix and a reduced dimensional matrix, we can use them to do others analysis such as Neighbors, UMAP, Cluster, etc." ] }, { "cell_type": "markdown", "id": "8cceaa02", "metadata": {}, "source": [ "
\n", "\n", "**Preparation**\n", "\n", "In order to use this function, you need to install **stereopy** with some necessary dependencies:\n", "\n", " CPU: pip install stereopy[spatialign] --extra-index-url https://download.pytorch.org/whl \n", "\n", " GPU(CUDA11): pip install stereopy[spatialign-cu11] --extra-index-url https://download.pytorch.org/whl \n", " \n", " GPU(CUDA12): pip install stereopy[spatialign-cu12] --extra-index-url https://download.pytorch.org/whl \n", "\n", "
" ] }, { "cell_type": "markdown", "id": "e1288b65", "metadata": {}, "source": [ "## Reading data" ] }, { "cell_type": "code", "execution_count": 1, "id": "6d6873d7-7f55-4295-b992-7b26af1bb4aa", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:31:54.481583Z", "iopub.status.busy": "2025-02-20T09:31:54.480979Z", "iopub.status.idle": "2025-02-20T09:32:01.108874Z", "shell.execute_reply": "2025-02-20T09:32:01.108358Z", "shell.execute_reply.started": "2025-02-20T09:31:54.481555Z" }, "tags": [] }, "outputs": [ { "data": { "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@4.2.5/dist/gridstack-h5', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'gridstack': {'exports': 'GridStack'}}});\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 2;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length;\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/0.14.4/dist/bundled/gridstack/gridstack@4.2.5/dist/gridstack-h5.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/0.14.4/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) >= 0) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) >= 0) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\", \"https://unpkg.com/@holoviz/panel@0.14.4/dist/panel.min.js\"];\n var js_modules = [];\n var css_urls = [\"https://cdn.holoviz.org/panel/0.14.4/dist/css/markdown.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/dataframe.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/debugger.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/widgets.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/loading.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/card.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/alerts.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/json.css\"];\n var inline_js = [ function(Bokeh) {\n inject_raw_css(\"\\n .bk.pn-loading.arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n }\\n \");\n }, function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, js_modules, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", "application/vnd.holoviews_load.v0+json": "" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", "application/vnd.holoviews_load.v0+json": "" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import stereo as st\n", "from stereo.core.ms_pipeline import slice_generator\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "id": "31fb52df", "metadata": {}, "source": [ "Please download our [example data](http://upload.dcs.cloud:8090/share/bb6fab82-2c16-46b2-a95e-6931338f31bf)." ] }, { "cell_type": "code", "execution_count": 2, "id": "5e6b4ebd-e706-407e-878d-4e8acdd52162", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:01.110154Z", "iopub.status.busy": "2025-02-20T09:32:01.109628Z", "iopub.status.idle": "2025-02-20T09:32:01.528522Z", "shell.execute_reply": "2025-02-20T09:32:01.528027Z", "shell.execute_reply.started": "2025-02-20T09:32:01.110137Z" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "ms_data: {'0': (1123, 27825), '1': (1184, 32285)}\n", "num_slice: 2\n", "names: ['0', '1']\n", "merged_data: None\n", "obs: []\n", "var: []\n", "relationship: other\n", "var_type: intersect to 0\n", "current_mode: integrate\n", "current_scope: scope_[0,1]\n", "scopes_data: []\n", "mss: []" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1 = st.io.read_h5ad('../../data/BatchEval_spatiAlign_stereoAlign_demo_datasets/stereo_olfactory_bulb_ann.h5ad')\n", "data2 = st.io.read_h5ad('../../data/BatchEval_spatiAlign_stereoAlign_demo_datasets/visium_olfactory_bulb_ann.h5ad')\n", "\n", "ms_data = data1 + data2\n", "ms_data" ] }, { "cell_type": "markdown", "id": "861b824c-ee22-4c3b-9742-034edbc09c63", "metadata": {}, "source": [ "## Merging Data\n", "\n", "If there are no z-coordinate in the input data, you can specify the distance between each sample by parameter `space_between` to calculate the z-coordinate." ] }, { "cell_type": "code", "execution_count": 3, "id": "bbafb491-5864-4e88-811c-3c7a3c3596d8", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:01.529156Z", "iopub.status.busy": "2025-02-20T09:32:01.529034Z", "iopub.status.idle": "2025-02-20T09:32:01.675416Z", "shell.execute_reply": "2025-02-20T09:32:01.674955Z", "shell.execute_reply.started": "2025-02-20T09:32:01.529145Z" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "AnnBasedStereoExpData object with n_cells X n_genes = 2307 X 26760\n", "adata: id(140717206027232)\n", "bin_type: bins\n", "bin_size: 1\n", "offset_x = None\n", "offset_y = None\n", "cells: ['cell_name', 'batch']\n", "genes: ['gene_name']\n", "cells_matrix = ['spatial']\n", "Layers with keys: \n", "tl.result: []" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ms_data.integrate(space_between='1um')\n", "ms_data.merged_data" ] }, { "cell_type": "code", "execution_count": 4, "id": "2edaec35-a856-4d24-a2e7-1e37cde70b23", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:01.676449Z", "iopub.status.busy": "2025-02-20T09:32:01.676194Z", "iopub.status.idle": "2025-02-20T09:32:01.678673Z", "shell.execute_reply": "2025-02-20T09:32:01.678240Z", "shell.execute_reply.started": "2025-02-20T09:32:01.676438Z" } }, "outputs": [], "source": [ "ms_data.tl.set_scope_and_mode(scope=slice_generator[:], mode='integrate')" ] }, { "cell_type": "markdown", "id": "8a834b3c-6649-4e66-a668-23b3c9eecaf1", "metadata": {}, "source": [ "## Preprocessing" ] }, { "cell_type": "code", "execution_count": 5, "id": "50ecef8d-c400-4ce9-82fa-dde59cd170f8", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:01.679450Z", "iopub.status.busy": "2025-02-20T09:32:01.679329Z", "iopub.status.idle": "2025-02-20T09:32:01.817930Z", "shell.execute_reply": "2025-02-20T09:32:01.817387Z", "shell.execute_reply.started": "2025-02-20T09:32:01.679440Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:01][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run cal_qc\n", "[2025-02-20 17:32:01][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run cal_qc...\n", "[2025-02-20 17:32:01][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: cal_qc end, consume time 0.1102s.\n", "[2025-02-20 17:32:01][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run raw_checkpoint\n" ] } ], "source": [ "ms_data.tl.cal_qc()\n", "ms_data.tl.raw_checkpoint()" ] }, { "cell_type": "code", "execution_count": 6, "id": "104322e9-496d-4e51-af48-e7c2cbcc8cc7", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:01.818662Z", "iopub.status.busy": "2025-02-20T09:32:01.818517Z", "iopub.status.idle": "2025-02-20T09:32:02.362854Z", "shell.execute_reply": "2025-02-20T09:32:02.361969Z", "shell.execute_reply.started": "2025-02-20T09:32:01.818651Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:01][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run spatial_scatter\n" ] }, { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ "Column\n", " [0] Markdown(str)\n", " [1] Row\n", " [0] TextInput(name='file name', placeholder='Enter a file name...', width=200)\n", " [1] Select(name='file format', options=['png', 'pdf'], value='png', width=60)\n", " [2] IntInput(name='dpi', placeholder='Enter the dip...', start=0, value=100, width=200)\n", " [2] Row\n", " [0] Button(button_type='primary', name='export', width=100)\n", " [1] StaticText(width=800)" ] }, "execution_count": 6, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "1002" } }, "output_type": "execute_result" }, { "data": { "image/png": "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evTAmjVrJGV79uxp8jqNHDlSuM/8/HwEBASYlF28eHGZ6nfx4kW89dZb6Ny5M4KCguDq6gp/f380atQIzzzzDH744QfZbXfs2IFnn30WjRo1gq+vL1xdXREUFIRu3brh/fffx40bN4TbGedrxT/G8/4W6969u2wObm4/qampmDJlCho3bgwPDw/4+fmhZ8+e2LBhg+QYxduVHP7t3XffFX5ui12/fh1vv/02OnbsqM+3vb29ERkZic6dO+Oll17C//73P9y6dUv29SMisgtaIqIKMmzYMC0ART9Lly412XbBggVaNze3Urd78skntenp6frtli5dqviYw4YN02/32WefKdpGpVJpJ06cqOj5duvWrUyvW0ZGhnbkyJGl1qVFixaSba9evart1KlTqdsGBgZqN2zYINl+27ZtkrJxcXGSchERESZlpk2bVup+vvnmG62Pj4+wPq6urtqNGzfqt4+Li1P8PkZEROi3++WXX7Surq6KtouNjS3T+0NEREREVVfJ8+CXX35Z26VLF0U5h6X+/fdfbfXq1WXPn1evXl1qXqXVarXx8fHa7t27l3p+3KVLF21CQoJke1GO9f3338ued/v4+GiPHDkifE6nT5/WNm/evNS6PProo9q0tDTJ9vPmzdOqVCpF5/ui51Kakvv47LPPtG3btpU9xssvv2yy/Zo1a0zWV6tWTZuamio5zrp16xSVMyc/P187efJkrVqtNvs6+Pr6Sra9ffu2tl+/fqW+hp6entrly5dLthfla9u2bZOU69atm9m/B9F+5s6dqw0LCxPWR6VSab/99luTfSjNGwHDJdDdu3fL5qYlf1auXGnR+0JEVNnwDiAiqnQWLFiAsWPHIjc3t9SyK1euxGOPPQaNRmOFmgFarRZz5szBt99+WyH7LygowIABA7BkyRKLt719+zZ69uyJPXv2lFr25s2b6Nu3r7CXVkUZNWqU7J1HeXl5GD169F29j3l5eRg1ahTy8vLKvA8iIiIiIkvMnz8fu3btkl2/fPlybNmyxeL93rx5E/369cOdO3eE6/Py8vDUU0+Vup/U1FT07NlT0Xn/rl27EBMTo+hO+WeeeUb2vDstLQ3jxo2TxK9cuYLu3bvjv//+K3X/v/32GwYNGmSSHyQmJuLVV1+VvVOpIrz99ts4cOCA7Pp58+Zh0aJF+sd9+/ZFZGSk/nFWVhZW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sWQbUezee+/VL4sSsJLjfy9YsEBYn4pScjxqufdRo9FIhgGsVasWunXrhueff17SA/D27dtITk4u38oSEREREd2liIgISYPC999/LxmK6ptvvjG7n3bt2pnkSADw+++/o06dOrI/KpUKp06dEg7pdjdK5nlarRZ//fWX2bpkZmbiypUr+nwgKytLP6cnoOu4FxkZiV69euGll16SvB6lzWOkxMqVKyX5x5IlSyTlOnToIIk99NBDJvndgQMHTHKSoKAgPPzwwxbXSa1Wm+RwAPDrr7/K5qzGeWOtWrUkw6kvXboU+fn5JrGffvpJ0shlad64fPlyq3YctOS6Q8nh7IKDg9G5c2eMGDECP//8M3x9ffXrNBoNzp49W76VJSKyIjYAEVGFq1Gjhsnj5ORkfPXVVzh79iwuXbpk0pttxIgRcHd3Nyn/2GOP4euvv8axY8fw119/oXv37pIhyF588UWzxwSAuXPn4sSJE/pjFs/xU7LsyZMnMXfuXJw8eRL79u3DW2+9hbfeesvi510WxmNaA7pGio4dO2LBggX477//cPbsWWzevBmvvPIK+vTpoy/n5uYm6T22a9cuDBgwANu2bcPhw4cxc+ZMvPPOOyZl6tWrh969e+sf33PPPZLXf8KECfjzzz9x8uRJzJo1Cx999FF5PV1FSr4///vf/7B//379+1ic0GRnZ6NWrVp48MEH8emnn2Lz5s04ceIEzp8/j927d0teWwCc0JOIiIiIKqVnnnnG5PHJkyfRr18/bN++HSdOnMD06dOxaNEis/twc3PDs88+axJbvHgxBg0ahPXr1+PkyZM4efIkNm/ejI8//hjdunVD3bp1sWrVqnJ/PuHh4ejbt69JbMqUKRg1ahT+/vtvnDlzBsePH8f69esxY8YMtGvXDk2bNjW5g//ixYsIDQ3FgAED8MUXX2Dbtm04deoUzp07h23btuHNN9802b9oiDhLJSUloWfPnti4cSOOHj2K2bNnS45TvXp1k9ysmEqlwrhx40xixg0tQ4cOlXR2U6pkbpOfn4/77rsPH374IQ4dOoTz589jx44dePvttyXzA40ZM8bkcVxcnP45/vfff1iwYAGee+45kzJ+fn546qmn9I+9vLwk8yPNnDkTK1aswKlTp7Bo0SJMmDChTM+trErmjb/99ht27tyJuLg4XLp0yWQ4upYtW6Jbt2744IMPsH79ehw7dgwXLlzA/v37MXHiRJOGRqB8PktERDajJSKqYMeOHdMCMPtjbN68eaWWN/6JiYnRFhQUmOxDo9Foa9SoYXa7bdu2abVarXb//v2lHiM0NFR2+2LDhg0zWd+tWzeLX6u8vDxtz549FT3vFi1amGx769YtbYMGDRS/bi4uLpLnoNVqtUOGDCl1W5VKZfJ42rRpJvvYtm2bZJu4uDjJsSIiIszuR6vVagcOHGi2LsXbpKenW/S5Kcv7Q0RERERVm5Lz12nTppmUiYiIsPg4N2/e1AYHB5s9n/Xw8JDEli5darKf27dva6Oioiw6Tx42bJjJPpYuXWo2fytWWl3i4uJKfU5y5/parbK80tzzUKLkPpydnUs9zoIFC2T3l5aWpvX29hZud/LkSYvrZ2zo0KGKXgdfX1+T7XJycrSdOnWy6LX8/vvvJcd/++23S92uZN5Y8j2Ji4uTbCPKUbt161bqe/vqq68q/jwEBAQofu6RkZFajUZThneIiKhy4B1ARFThmjZtin79+iku/9JLL+GLL76Am5tbqWUHDx6Mn3/+WTIppFqtlvTMktO2bVtMmjRJdn3t2rUlQ85VFBcXF6xZswZDhw61eFt/f39s2bIF0dHRpZYNDAzEH3/8oZ8rx9iHH34oOxGpSqXC+++/j9q1a1tcv7J64403ytwzTk5ERAS+/vrrct0nEREREVF5CQgIwB9//CE7R46Hhwd+/PFHSbxkDlW9enVs3boVPXr0UHRclUqFWrVqWVxfJerUqYMdO3agZcuWiso7OTmZzDtjiRYtWmD27Nll2tbYu+++i6ioKNn1L774ouSOGmPe3t4YMWKEJB4dHY1GjRrdVd2+/fZbvPbaaxbPaerm5oa1a9dK7sgSqVatGpYvX44hQ4ZI1k2ePBlNmjSR3faFF15Aly5dLKrb3Rg3bhx8fHzKdZ/+/v744YcfOG8sEdk1foMRkVX89NNPePfdd9GsWTPJONQiY8eOxYULFzB16lR06tQJAQEBcHZ2hre3Nxo1aoTnnnsOu3fvxsqVK2Vvx54wYQK+//57dO3aFb6+vlCpVLLH+/DDD7F69Wrce++98Pb2hru7Oxo0aIDXX38dR44ckdzeXpG8vLywfPlyHD58GC+//DJat26N6tWrw9nZGQEBAWjatClGjRqFDz74QLJteHg4du3ahTVr1mDw4MGIjIxEtWrV4OLiguDgYPTq1Qtz5szBhQsX8MADDwiPX6tWLezbtw+jR49GrVq19NsOHDgQe/bswdtvv13RL4GJ9u3b459//kH//v0RHBwsaewr5unpiX379uGzzz7DoEGD0Lx5c4SGhsLFxQVubm6oWbMmevfujc8//xwnTpyQzLdERERERFSZtG/fHsePH8fzzz+P8PBwuLq6IiwsDE8//TQOHz4sbJgICgqSxEJDQ7FlyxZs3rwZI0aMQKNGjeDj4wMnJyf4+PigUaNGeOyxxzB//nzExcXh/fffr7Dn1LBhQxw4cAC//vornnrqKdSvXx9eXl5wcnKCn58fmjdvjqeffhrffPMN4uPj8fzzz+u3jYqKws6dO/Hhhx+iX79+aNq0KYKCguDs7AwPDw9ERESgX79+WLJkCfbv3y8cFtxSYWFhOHjwIGbMmIGmTZuiWrVq8PHxQffu3fHLL79gwYIFZvNMQNfBsWSZkkPzlYWzszNmz56NM2fOYNKkSYiOjkZAQABcXFzg5+eHqKgoPP3001i4cKFk2+rVq+OPP/7A1q1bMWLECDRs2BDe3t5wdnZGYGAgunbtihkzZiAuLk62c6KXlxd27dqF1157DXXr1oWrqysCAgLw4IMPYv369fjyyy+t2nBSp04d7N27F0899RRq1qxpthPhjh078OWXX2LIkCFo3bo1atWqBTc3N7i6uiI4OBjdunXDzJkzcfbsWXTs2NFqz4GIqCKotFqt1taVICIiIiIiIiIi5d5//32TOT6dnZ1x8+ZNkwnsyfays7MRFBSEjIwMALqOa4mJiZxXhoiIrMLZ1hUgIiIiIiIiIiJT77//PtLS0jBw4EC0atUKrq6uAIDbt2/jf//7H9577z2T8gMHDmTjTyVTUFCAqVOn6ht/AODpp59m4w8REVkN7wAiIiIiIiIiIqpkxo8fj88//xyA7u4ef39/aDQa3Lp1S1I2LCwMe/fuRXh4uLWrSQJDhgzB3r17kZycbNL44+bmhlOnTll1iHEiIqraeAcQEREREREREVElVlBQgOTkZOG6du3a4fvvv2fjTyVy/fp1XLx4URKfN28eG3+IiMiq2ABERERERERERFTJjBkzBiEhIfjnn39w/vx53LhxAxkZGfDy8kJ4eDjatm2Lxx57DDExMVCr1bauLskIDg5GixYtMHnyZNx33322rg4REVUxHAKOiIiIiIiIiIiIiIjIwbCLCBERERERERERERERkYPhEHAWKCwsRHx8PLy9vaFSqWxdHSIiIiKr0Wq1SE9PR1hYWKUZZiYnJwd5eXmKy7u6usLd3b0Ca0REFYW5GBEREVVVzMXobrAByALx8fGcVJGIiIiqtKtXr6JWrVq2rgZycnJQ29MTNwoLFW8TEhKCuLg4Jh5Edoi5GBEREVV1zMWoLNgAZAFvb28Auj82Hx8fG9eGiIiIyHrS0tIQHh6uPx+ytby8PNwoLMSOWmHwUtALLqOwEN2uxSMvL49JB5EdYi5GREREVRVzMbobbACyQPFQAz4+Pkw6iIiIqEqqbEMveTs7KUo6VIWVq95EZBnmYkRERFTVMRejsmADEBERERHZL1XRj5JyREREREREVD6Yi9kFNgARERERkf1SqaBSK8gotMw6iIiIiIiIyg1zMbtQ+j1aRERERESVldqCHyIiIiIiIiofFZSLaTQavPPOO4iMjISHhwfq1auH9957D1qtVl9Gq9Vi6tSpCA0NhYeHB3r16oVz586Z7Of27dsYMmQIfHx84Ofnh2effRYZGRkmZf777z907doV7u7uCA8Px8cff2zhi1D58Q4gIiozz/c3WL6RplBRscxpD1m+b6K75N32fUlMW0NmngEnwRmMm8J/q7UDpbGEO5KQKiFF0e7Sd7yu7LiVkOg1h6ebso09XKWx7Lwy18WeX8cqTWlCoS29CBERkT1J/z1avOIuO1p794u9ux0QlZEwH+vSUBoT5AsqH2UTy3/VerUk9vqxvpJYWmyiov0BQMbq0YrLVibC17t+sLKNa/pLY9du3VV9MlbZ5+tYpVVQLvbRRx/hyy+/xPLly9GkSRMcOHAAI0aMgK+vL15++WUAwMcff4x58+Zh+fLliIyMxDvvvIOYmBicPHkS7u6674MhQ4YgISEBmzdvRn5+PkaMGIHRo0fjhx9+AACkpaWhd+/e6NWrFxYtWoRjx45h5MiR8PPzw+jRjvN5ZAMQEZXKa+xK8YrQ6uV2DNXxa6bHfGyxsJy9nlgREVHFUKlUiiZDrWwTphIRESkRd6iX7DpBl6IyGZP6mGngf3OE5b5/ZmI5HZGIiBxBReVie/bswSOPPII+ffoAAOrUqYOVK1di3759AHR3/8ydOxdTpkzBI488AgD47rvvEBwcjDVr1mDw4ME4deoUNmzYgP3796Nt27YAgPnz5+Ohhx7CJ598grCwMKxYsQJ5eXlYsmQJXF1d0aRJExw5cgRz5sxhAxAROS7vXoKT/Yah1q8IAFVcsiQm6qGSfmCKNapDRESVEe8AIiIiB+E1XnpnwrGhNqgIgN8X5Epi3gtmSWLpe9+0RnWIiKgysjAXS0tLMwm7ubnBzU16R1+nTp2wePFinD17Fvfccw+OHj2KXbt2Yc4c3TXLuLg4JCYmolcvQycJX19fdOjQAbGxsRg8eDBiY2Ph5+enb/wBgF69ekGtVuPff//Fo48+itjYWNx7771wdTWMLhITE4OPPvoId+7cQfXq5dfx3ZbYAEREREREdkulVjbxqIoTjxIREREREZUbS3Ox8PBwk/i0adMwffp0SfnJkycjLS0NUVFRcHJygkajwcyZMzFkyBAAQGKibojG4GDTIQuDg4P16xITExEUFGSy3tnZGf7+/iZlIiMjJfsoXscGICIiIiIiW3Mq+iEiIiIiIiLrsTAXu3r1Knx8DPMsi+7+AYCffvoJK1aswA8//KAflm38+PEICwvDsGHD7rLSVQ8bgIiIyGF5d5QOUyGklY4NpY1uYH6buBsW1UXbOtJ8gUBv6TbNahse5BdIt8nIAQB4vvaL2V2rUrOlMcEQi+l/39247t7tZkpi2lqCyUGNhQfoyjU39ARSbz+l6Hj1+taQXXfhp+uK9gEAr46/DQCY/pv5IUw++UH6HnJeMtvjHUBERERElY9390+UFdQUSkIfvGuca0nzrsl7elpcnwM9xHNbAcDWrgulwa6GxUyNq2T1nluG3GD+uldk930ktaYktmqHNJbx1RDZfSghyn0LH2xhfqO+rQEAn7Vfpw9NXB4sV9pEwhPm39/QT0co28/jS/XL6b8slS0Xev5dSSxjUm9Fx6CKY2ku5uPjY9IAJOf111/H5MmTMXjwYABAs2bNcPnyZcyaNQvDhg1DSEgIACApKQmhoYZpK5KSktCyZUsAQEhICJKTTa97FBQU4Pbt2/rtQ0JCkJSUZFKm+HFxGUfABiCiKspr0FeS2OSnL2LSOGnZpj5HhfuIy5K/sPtc6F5h/HB2LWF8Sb0Oktgvc3W/e43zkz0OADy67AsAwG/DBZUnIiLHxjmAiIjIzjz07SJJ7JuNX+CsoGz+q/nCfbjXc0eWzP4zYtPF29R3F8a/aPejJPY7HgUAXOu/RuYoOqkf6tb7Tv7XbDkiInJAFZSLZWVlQa023bGTkxMKC3UNxpGRkQgJCcGWLVv0DT5paWn4999/MWbMGABAdHQ0UlJScPDgQbRp0wYAsHXrVhQWFqJDhw76Mm+//Tby8/Ph4uICANi8eTMaNmzoMMO/AWwAIjvi9eQ3isplrHyugmtClcHRlDBJrO7cXyWxi+MHWKM6RERkKyoVoKDXGQp5BxARUVm9vnqaonKzH5P20CbHpA4zvTCX/l20sJz30FhrVIeIiGyhgnKxvn37YubMmahduzaaNGmCw4cPY86cORg5cmTRYVUYP3483n//fTRo0ACRkZF45513EBYWhv79+wMAGjVqhAceeACjRo3CokWLkJ+fj3HjxmHw4MEIC9NdU3zqqafw7rvv4tlnn8WkSZNw/PhxfP755/jss88sqm9lxwYgshnv+z4VxrUBXuINXKSDSqri70j32222JJa+43XLKkd26cbK05KY98oPJLH0f9+yRnWIiMgKVGrdj5JyRERk4PX8Ckns/mhpfgUA9T2lsS/XSodG/XLtMkksY/lwS6tGdihs6SDxiqWmeX/6tletUBsiIrKGisrF5s+fj3feeQcvvvgikpOTERYWhueffx5Tp07Vl3njjTeQmZmJ0aNHIyUlBV26dMGGDRvg7m6423XFihUYN24cevbsCbVajYEDB2LevHn69b6+vti0aRPGjh2LNm3aIDAwEFOnTsXo0Y411DsbgIiIiIjIfqmg63mmpBwRERERERGVjwrKxby9vTF37lzMnTtXfpcqFWbMmIEZM2bIlvH398cPP/xg9ljNmzfHzp07LaugnWEDEBER2QXvdjMVldPWrWF4EBEAAAiKDlS07X1B5/XLq0obrSJSd5wWTbP1oSMJNeRKA/kF5vfnovuX/GHL9WaLTf6neykVk9LWNIxdq/LQjWurrR9kWJ+tG1vec7ph8k917DnpjnJLeQ6ebrr9BZc+qSNg+r4kGXU4LuzeSHabBkFpivZd73HpxKrGoryTza4X0daXTojq+ebv+mX1tpOS9el737T4OGQZ3gFEREREVLG8O3+oqJy2X2vDgwebAwASeikbQhJG+cCy3PZmi37YaQsAYLjfPn3s18zmknL+LoaZss5lyOdqDbxu6Jdr3kyVLXe2eg38mdAEABDgKjcLl6n+ocf0y90DdPnm3KaG9SkaDwDA1cPf6mONvhkl3VFqtjRmrChX0Yb6waVGNQCAdBwdU1d76YbtXJlkeN/mDDsiW97fNQsx3tKRV0QSpiyVX1lotHxetpSJPzp9K4lt3WmIPTJd+plJ38I7DisaczH7wAYgIiIiIrJfSiceZdJBRERERERUfpiL2QU2AJHNFHa5RxhXnYq3ck2o2NFUcY95f5meLSMj/pXdV6HM/Z0+BeJeK6kF7pJYr3G6WBu/q5J1R1PCMDRiv0nsU3jL1oeIiByUWuHEo0rKEBFVEekbo5EwQBofmjDE+pUhPa820smWss/I9/rPOSde5xLqKt7ASfy/0ClQep9A/PA/AAD5l8R3gOddLxTGiYioCmEuZhfYAEQVymvU9/IrQ3yF4dB7A4TxzALpSWz673dQ+ID0Nt+SPGdtROabMaWWcyTePT+VXaf1cLNiTazvg6lJZtfPX/cKAOClPp9bozpERFSBVCqFw04z5yCiKmbPbkELT5FmMvHvtCvEKwRtAF/ieSQM/KrUeqT/8RW8+5U2tq5j8Rq7Unadc0R1AHWsVhdrO1PDzLBPAOIf160P++m4NapDREQViLmYfWADEDks1ZHLJo+9nlgsLJexarQ1qkNEZWCuIVOJ0M7+RUvmeygGuWUAAE6nB5ktJzIk/KDRsnT96/sesGh/wz33CePLMs2Pg61YQtGY1qGGRnhfHw0AIG2H4W47rbuLZFNVaXMAiQ73hvQiwMjjTxYtXTMEq0uKYf3FuhYfT6mvW6zSL396sbuibZ5t+Z/5Ai11v5Z+Zji9Gv79JwCAZU+/Zkn1yBLsdUZEVOkMvV3iTqJlXwjL/TZ8nBVqQ0RlYdyhtyxnUQkPKZz7p/hGNuNpRG+ICgrcNCwOgPRcfbtLfYU7MiKa4ibK8t2IvHbiEQDAJ00M84j6OOcAANIK3BH1ywRd0Dg30moBAKrS5gAqkthrNsKP6l77q67vSgt0MFrO1f160u+QpNjKlNaS2H1//Qc8LnOHoSWMB5MR9wGXaJd9xez6+Em69WEfDdLH0tdF65e9+1StjghWw1zMLrABiMqVd4cPTB7L/Xlrm9eu+MpUMd4dZ5kGPMvhn7KDeGtuHZn4ZyaP0zdPsEJtyF741zV/p9ytlPL9F5rYebrl2wzRNS6E/D6lXOtSabhIX+OdfvMlsSbJk/TLckNWmnM1W9r6pCmUDlLs46Is6SLr4sSjREQ63r3mlIh0EZbb+O6uiq9MFSN57RuG2qYilVSD2oKL0K/9IgllfjLQCrUhe9DC1/zUAOcyAnULlvdPE6q5K1VRuXuO3ACCdcvDrxo67m1vWIaGpkrOxyVHGM/7KU8SuzRIN53APZ5KW+6MRAhidwQxreW7porHXMw+8OUnIiIiIvultuCHiIiokmrc9hPLNijk1VAiIrIx5mJ2gXcAEZFdGlnnXxRo+R+EiKjKUykcdoADTxMREREREZUf5mJ2gQ1AZBvOTlCdTxKvq+GneDfejzREam75VImA+Byf0gsZGX7wKWF8WZsfyqM6eh/uFM998lqXAyaPX52cXq7HJSKiyo8TjxIRWaaGWwaQAXyQ0Uuy7i38rXg/CQ98VZ7VqvKu+r0LS7pIV2vviWrtPYXr7vwsGj+p7Fyekg4vrvnadHioi01188Xky6T5RETkeJiL2Qc2AFG58Hp+hW6hpWjwTgPVkcvmd9SyNhIsnmJB/tZ3beNapW7t+e56ZE57yNKDVhperxaNndz5HtMVWdJxWfWqyc0PJG5A0ZThTpueO18UxsOrpQjjmw8Eyu9MZiqWJZc6COOjI8WT+zV8tIb8MQC0XahLWg68+LTZclTxvJ5ZCqD0yUYL+0knpjQWXzSUc5hvpqLjNvVJFC6X9Inqd4SkvK1on+UtMfpjmxwXALTBljUS363EdoLx4o0F6X6daPyR2WJd97xUTjWy3C/L1EW/S87LYCr974nWqI5DUjmroHIuPaNQaZl1EJFjOri3HwBg+/vmy3Wf0r30ncn9q88DUE0QNzMK2XdBK0o9XPr6FfB+yH4n5k7fp5tgPN50KlxchnR+wWIRTjKNMwfFYSdfyy/bVH9O5vgy/eUuNJefhb32pQRh3L2zuzCe/2s+XGuJ883EeuaHuUv/Urfee4z9fiYcQe9vFhctif7oDf6bL2owNsRu5usaKANdlOViAICidsVWuGa22DmYuX5QwV45VPQca1r3kqpnqyCrHu+BvcekQT8n/aJTgGH5nsNm5v4RT0dnFaHrXzY8WL9StlzGgietUBvHxFzMPrABiKocVVyyJOY1fJkklrFseMVXhoiU8xEnmbaS2GgmAOB/aGu23Oz2GwAAHfwNDeD3aI1OkBXexTg8u2iSUcF/7sRHzF/xCV0ubVyQm9SzPPw2dluF7bssdnaab9Xj1RpST7987XfzySuVA6VjSnPUUCIim1upEnTe+WusJDT6wQVWqA0RKaWkc6019f+7KDfqKte5Vad72nndQopR8Lblx8v/Jx8A4BLhIj7OmfOy277m+4gkVii4HeJWnvkGN0tcrVnUkc5Mu4zV7BLEnASxchL/8c/65dAlL5spSeWCuZhdYAMQEREREdkvjjtARERERERkfczF7AIbgMhi3u1mSoOt61i9HuVJdVzaQ9u7rbRHffqBKdaojizv6FnSYKd7pDEbk5sbqDI688N1Scz7B+lwUum7JlmjOkREZCGVWvejpBwRkSMomRNs/8xGFSknr74TKohVvlzMq+8XkljCOzaoiJVdeTQU9XCrQvYdunWEeMXWxSYPM1aPrpDjExHR3WEuZh/48hMRERGR/VKrlP8QEREAIDHA27INzI+yRKTnPcDCzxYREdkv5mJ2gXcAkcPStowA8jS2rgYRKeT14DxJTOsqHWNZ27G+4n0GeOkm2MnVmP9391K9nYr21yf7pCT2TNoBAMDesDrwd9VNcHpPmnSw5etOvoZlGJZL/ieu6ZwqPvhN3a/EWoakOuSyzEy+AJBkWNSG+EpWp+ZJN1HVDZbfHwDEKxswu4aboV4XCqSTCh9PC9EvX0mT1i2x7XRFx7krBwyLc/GbZPWn/t0V7eZ8Rg1JrFPAJcODkYbFVb/7ye7H6wlDT9eMVezlagn2OiMiqny+q77C1lUgIgt4TjI+Hy46v/WXluvc4AZerLtb0T59nXVzjuZrzU/44nJV2XUbzbEC/bKTl+7ELm+nIalxbWZoqS68XijZXh1SdDIoTT9MZZtZ5w4419MlcAUXCswUBPJv6OYNGvTUUcm6fXciJLHMAlcs7vaH7P4m/iedS0gozmhZNI2uUWzLHemIMt33nFJ2nLuQe8poIlzB4dwedFO2o1AAd0rEMgEUTXeb8IjhGkOLk6/L7qbu3F/1yxfHD1B2bALAXMxesAGIrErbOtLWVaAqaNLYRADAmnjphVoiIrJzqqIfJeWIiKqwQx9usHUVqIq6XFg8jLzCi7pERGQfmIvZBTYAkWJeH23SLQxqJ1n3RPgRi/e3an9dYXxYxH5h/FaepzDewf+y7DE6VJeu6/11P4x+yDT+9XFdjxTXwa1l9wUAAZ+s19XltYfMlitvnrM26hb6SevXO/SccJv6ntI7EACgd/BZ2eOEuovvPDidLn9XwLI2Pwjj6jNa8QbitxF4RvYQWHlb/L74uOSID+EkuLUBwJr4Zljf2XQ86Xo/9EHDp2rKH7xI24Xf48CLT5dajoiIrEzpkAJ3MezAhx9+iDfffBOvvPIK5s6dCwDIycnBq6++ih9//BG5ubmIiYnBwoULERxs+J955coVjBkzBtu2bYOXlxeGDRuGWbNmwdnZcAq+fft2TJw4ESdOnEB4eDimTJmC4cOHmxx/wYIFmD17NhITE9GiRQvMnz8f7du3L/PzISL7lL4qGgAQP940rtlgvhd6scJ80/Pz15/YJimj3SxzDg9AVU36PZp7Wnw+DgC5VwXn5KOAAZtiTUKvQtfbOv71dbL7AoD0Vbr13k/Emi1XEdJ/i0bCSGlcu1P8eoUmJAnjAJBxLVcY12RK71gAAI+GHvL12iq+Gzz7VJYw7uQtvhMjwKtkF/oSdeviI4nlJ+XLli/MFt/RcfvHDNNAkO5XQs+lZo+fvki33vsF67/3RERkhhVyMbp7bAAiqmREk4uiUwPrV4SIiMgOqFQKhx0oY86xf/9+fPXVV2jevLlJfMKECVi3bh1Wr14NX19fjBs3DgMGDMDu3bphUTQaDfr06YOQkBDs2bMHCQkJGDp0KFxcXPDBBx8AAOLi4tCnTx+88MILWLFiBbZs2YLnnnsOoaGhiImJAQCsWrUKEydOxKJFi9ChQwfMnTsXMTExOHPmDIKCgsr2pIiISCj407XC+Hlx30UiIqIqraJzMSofbAAiWd73fWoaeKCZbSpSCeTujDN57LVzgbBcxu9jrVGdSmNI+EFbV6HCnFkqvXvMe+lMSSx9/9vWqA4REcmpwF5nGRkZGDJkCL7++mu8//77+nhqaiq+/fZb/PDDD+jRowcAYOnSpWjUqBH27t2Ljh07YtOmTTh58iT+/vtvBAcHo2XLlnjvvfcwadIkTJ8+Ha6urli0aBEiIyPx6ae6c65GjRph165d+Oyzz/QNQHPmzMGoUaMwYsQIAMCiRYuwbt06LFmyBJMnT7b4ORGRffB6QXqXfcJ9NqhIJdAkfpJp4LM1wnJXJvSv8LpUJnnnxaMeOIKwFY+KV6z42ORh+s43rFAbIiKSxTuA7AIbgKhySUwDpHPhVTqq6+Jb5L3bvi+JpR+YUtHVIYWmNdpo6ypQCcI73ixRKD9MSYUoHrFD8BXQMf6S4YFgwlTFjEfTcDEsJtbxlpYtfvqiXqnGU679pezQ97dI1C9vPhoiLRCme2JaVyd9F57dj36jbOcyavvohp7c1/kzfaxwg3gIlJLUEUVdjYxHUhENLZ8hiInUMVo2GjnlVZ/tspuMyXhM4c6V83zzdwBA5iyFE71WcZZOPJqWlmYSd3Nzg5ubeE6CsWPHok+fPujVq5dJA9DBgweRn5+PXr166WNRUVGoXbs2YmNj0bFjR8TGxqJZs2YmQ8LFxMRgzJgxOHHiBFq1aoXY2FiTfRSXGT9+PAAgLy8PBw8exJtvvqlfr1ar0atXL8TGchgcIqq67qySzhruLYil731TEiMiA893/rSo/C+tl2JLyj0AgKMp5odSvzfwQpnrJaI1Glmw4LZ06Mu8E7pGUdcGrnd3oOLjGI2Y6NLQRVrO6PzTuY708qpzXcsuufZ0NwzX/0dmU8n6Oc1/l8T6XThu0TEkx6xedMw9hljWBfmhPY053TY8P21uUWIqOCfXFijP2d3ruku3P2wmNzwMqKIVJAIWWLF5FABgyP1fl+t+HZWluRjZBl9+qnI2jfrD1lUgIiKi8qKy4AdAeHg4fH199T+zZs0S7vbHH3/EoUOHhOsTExPh6uoKPz8/k3hwcDASExP1ZYwbf4rXF68zVyYtLQ3Z2dm4efMmNBqNsEzxPoiI7Emfr7fbugpERERUXizMxcg2eAcQEREREdkvC4cduHr1Knx8DJNZi+7+uXr1Kl555RVs3rwZ7u7SnohERERERERVHoeAswtsAKK7Nixiv6JyOYWCW2bLQWq+/IWZZt4JwvjPaGHyeNQbunt8l18pv3pVBTFpp4G00suZEI+yYzMXFqzDQ7tH27oaRERURpYOO+Dj42PSACRy8OBBJCcno3Xr1vqYRqPBP//8gy+++AIbN25EXl4eUlJSTO4CSkpKQkiIbvjEkJAQ7Nu3z2S/SUlJ+nXFv4tjxmV8fHzg4eEBJycnODk5CcsU74OICM4KL6rkV8zQuc4B4jwv60S2ou3juv5atFTJEgU7kHtJ2VBNxZy8nEovZEUnkj8pWgqwaT2IiKhsOAScfWADEEl4TlurW7i3oUl8cevVwvJ7btVRvO+EbMMFF//a4o9flHeyMH7wTrji45TG01k8YeboSPF4+vN3hsC/u2F82zsrDBOAFPaSjs0KANDoxin1fP1X6TpXM396DUOF4WZ+ScJ4lLc47ussTgba+F0Vxv9KaoTkXC/huvuDzgjjZht/xLuSZ6aDtY+L+Ln0KTgpjH+Q2ksYB4BLWeLJWb5q/ZPJ4+5LO6CwR2P5ShXxnPQbMj+SmaSUZHk9ssDWVajcik+OjMa5DkG6TaoCACg0HXdZlVMIrUfZx9Z+OOSEJDbjQm/Dgwa6X1PObZCUO98jWBITuefCDcCyayImJp7dql82e7ksrOzHoHJSAb3OevbsiWPHjpnERowYgaioKEyaNAnh4eFwcXHBli1bMHDgQADAmTNncOXKFURHRwMAoqOjMXPmTCQnJyMoKAgAsHnzZvj4+KBx48b6MuvXrzc5zubNm/X7cHV1RZs2bbBlyxb0798fAFBYWIgtW7Zg3Lhxip8PEdmX9L+jkTBIGs9cLp7Uzr2hh6L9utQxaqgJBHBBIylTkCaNAYBzgLPpPIV3Q+brOP+wOEdDMHAi8COTUBj6AQDiZ5sZ3tsNSN8nWG9mOonz3WVW7BOH866J66xJF7+OAJB/Uzp3CQBUayJ+H/Ou5wrj5qgs7GmtcpO/MufR0AMaweci679MYXnfGD+YTGRpxDlQHE/5VTrBZvyHv8nWqVj67t/g3Zlz4lnK833pObZSr515BA8GS+fbciiidlLxx90qbudVk8T8XbMEJRW6KYjdY1isdo8nACDrB/GTrtbVU9Fhcg6WPRnLXKHsBa/WWNn/P6pAvAPILrABiIiIKgdnM11CvAwthKrkVOmmEdX1y/nZhqz+VpqZRgpXw5n9s/sfBwAkNpiuoKJix8INjbfNbhjdfVjUSb/mPqN6tyvzYUz5KSuW+OA0AMBLxwaaLZdaYHidtU6GEzSV4EKJKlvmIo2MzUkNSy9kh74MM3SO+CBF1/j85YXOwrLObXS/8+8ou5Dj/cDnZtenb3hF0X4cncpJBZVT6QmFkjLFvL290bSpaQcPT09PBAQE6OPPPvssJk6cCH9/f/j4+OCll15CdHQ0OnbsCADo3bs3GjdujGeeeQYff/wxEhMTMWXKFIwdO1Y/7NwLL7yAL774Am+88QZGjhyJrVu34qeffsK6dev0x504cSKGDRuGtm3bon379pg7dy4yMzMxYsQIxc+HiIiIyCxznVQBtKx1S7/8V1Ijk3WfNPxdv3w4q5Z++XiauHMrADirTHq6AQCi1l6BSukdjQKuLXS5n+acoZHVyd/wvLJ26RoVqrUspQFD4Y1yzn7KLql2vHDJ8CDKTEGjXmc+Rh16RQ1AolipapZexB5pY3XJqqqD4XrCMU/pZ+/7dt8DAOKylN1x6PXqL2bXZ3xqPreuKioiF6PyxwYggnfHEpMbxzSzTUWIiIiILKWG4a650sqVo88++wxqtRoDBw5Ebm4uYmJisHDhQv16JycnrF27FmPGjEF0dDQ8PT0xbNgwzJgxQ18mMjIS69atw4QJE/D555+jVq1a+OabbxATE6Mv88QTT+DGjRuYOnUqEhMT0bJlS2zYsAHBwcruhiOiys271xxJLH6yDSpCREREZCkb5WJkGTYAkdUYD/9GFrqVobinP1lO6TxWRERU+ahUCsedvstOZ9u3bzd57O7ujgULFmDBAvkhLSMiIiRDvJXUvXt3HD582GyZcePGccg3IqqU3Oq5Q5MiP9wZEREROS5r5WJ0d9gARERERET2i+NOExERERERWR9zMbvABiAiBV4amogVVxx0wFQS2j7/X9z7W2NbV8OheHf92PDAX9nEkca0TWrJrsu3bDoaAEBi6+nSYLrl+zHWLL9o7h8/o2Dx8M1N7m7f1qbSll7GEi9E7tEvzzjdu3x3XknMP99VUblu9RNKLwSgfftESeyTJYb/RV59vwAAZPxZxe8MUUF2QnFJOSIisjtHkt4DAs3M60gO56THEgDVSy1HlvEa9JVuoWWExdvOa/Gr7LqzeTUs3l/TvfHSYKDzXd1RqL2mmwtG7WG4HUFrND+sR0OPMu/b2tKM5mYtN8Uved3y33VlcNLVMDyyEwST2Bbp535c0f76PSQtF7Jzin7Zc7phzs7M6X0U7dMhMRezC2wAIomno8Rfhk6iWcCLxGUqm0TN2LdtVgnjHZ0uCePDg/YJ459e6y57jPHHHxXG7w28IIwfTw0Rxq9mV0enAKN6veylX9xzS1oeADI14n/YOfmlzCiYmy8JdWh4R7a4p5P4yneb6teEcXMTMcrxuC2tEwDA28xGMh+JdJWbML42Xv7qeHi1FPEKmZdyWID8kG7TTz0gjN8fdEYY79vksuy+ig3+bi5+HDq+1HIkYNwLpJr4s2GxgrsYhkT0mRblCUFlP4TsPo2v9SvNd08V/fa/u+oU+/d2baNHMn/3JdSDzJdgOVDXNCRvu+roMpUgpa10tQGc1S1m7c9StEm1MMsnU81clmF40NTizakcqNQqqBT0KFNShojI1q52WQnNLmk890ouVC7i7zGnYIUzlhvJixXnEFlHMoVxtaf8+C6erbyE8eqPiE9osk9ki4/h6gSVi/g42njTXPT6o2t0C/FlmFTA3LVquVHLZU6LCrPFObImpUAYd/J2glu4ZY1ZefHyPZ1UzuLPhHOgizjuI/6suASLy5tTmC/uLZR7IUcYB4BqzcWdwDIPiT93mi2ln9enbGkPv6niawWkgJvuvW9ZQ9rxqCxS8++u4cLJz/QzmrY1Fb69/STlnAOllzO1OfLXrEwI0s6CeMPfrHOQskulORcNn3W1m7LvItcoM3//xqmI+E9CouC6+LumJOdall/+dTL6vnBra/S+KksT9cx9JxjzivaGJsOyXD79X6NcTFlfPCpnzMXsAxuAqjivMSuBVnVKREu/4F1Wq1ou1y/vzSx53LLxdZH/Z3JVnFuQjMhqMhdyy3B3BRERkVVw4lEislNxh3rhv49LBP+ouOOlb0zTL7vVLZ/e5d5dOM9reZFrTCIiIqq0mIvZBTYAERFZYN1ycY8U7+WfmjxO3/KqNapDRERqZROPMukgIiKyf7WSJkiDY1dKQhkLnrRCbYiIqjjmYnaBLz/dta6BF21dBSIiIqqqVCrlP0RERERERFQ+mIvZBd4BREQAgHCPFFtXodI5OOgr2TmD6O6obgsGNS6KFfZpqQ95uRjGH8xQOqRj0TjW0AiG0ZCZHyjnD2XjEru3lR8upRkSDA8iFe0OiblGkw6VMu9PyB3d3DeZ3xnGOXZvUDSZ0E1DufS+4nH4AeA9rNcv/5XYSLK+U0Cc4UHR6gl7zP8NhKx9S7+c2PkD+YJGU5lNjdoEADgmmJOs2aUEoHgoa6PXsQuKOhsIhqTcpTXMZNrFr6icB4C2RcFY+WoZy/rdMFdQtT7K5gPybGb0eh9Tdpy7oW1hmLRXdfwqAMCr/0J9LGPNixVficqGww4QETmEghQNXGrwy5p07ky7A597OcRgRVAdkQ77f9RoOeGtZboFo+l4zmYbJs8qKJT/Ow1yM8zXqdFKy93Kk84Dlf5PmiSmr6uzCmlbUwEArrWVzRnrVsuCebaKUkfnCPOXRwsu6xKUrGOGfEHtJr2g7fWIuYmSYZhxwRtAhnyxfjDMzX02Qn7isot9DPlUvQ0JsuU0CYa5gpyMLwX7Scvm7jHkxm6RRflvadO+Fs8BbZTmuzfTbZtzTlkin/Gv4bPj2UY+pzWWfSob3tGlvOblaPP93+qX7//nef2y56yNAIDMN2OsVpdKg7mYXWADEBERERHZLU48SkREREREZH3MxewDG4CIiIiIyH6x1xkREREREZH1MRezC3z5q7DOXy2zdRUq1NGUmrauguVumbkHmIiIiCQ47DQR2aP0RdG2rkKl4+znVHohMmBvaiIisjHmYvaBdwAREVUAr+HLkLFsuK2rUaloveTnzyEiKjOVStlFMGYdREREVcbiv8Zi9IMLbF2NSkUbKT+XDBFRmTAXswtsAKoivPp+IYm1eFjZpGpERNakij0HbVQYgJLzYuZLC3t7yO7HXTq/KExmMs0SrS8nxvNvivKs4nkwLbkPt2huVM/+0u9uzQmNBTuSmrDjfvmVLne1a6GUAt379ujekZJ150NmAs2LHqRLVgt18buoX75/zxhpgTbS0ObIL6VB+Y+TqdvicEKzabKbhBycql/eER8hWT+43jFJ7Gp2dUlMvVlazph3hw8AAOn/vmW2nEPhsANEVMnVnfurJHaU/WKIqJL69Wbz0gsBiPJKMrs+vFqKbKwws9DSaimWF5+nX3bykV72dHYzOilUmOsUX7v2bF5Nsi77TLYkViqjKlyOlJ7zmyjvl8ooJRYdOyL1juGB0pw5s+h3S+kqv5bSY6RMvwOvdt7SqnkpO2EvSNPlv641XfWxRrsTzW6zqXUjAMBVSOsToz4t3UCmKjGTOxatPipZ573eEEvf+YbZ+jgM5mJ2gQ1AJJGrEX8s3jn5oOw2C1v+YvFxPJ1yxSsKZDbwsfgQ0BSKv2GSc8SNXwGuZbkiXMeiY5el1Vujlf+mjPQUX4mM8hafjC282Fl2X31DTohXyH1TuMnuCtlq8ZlUZr6rMH40NUx2X25OMh+KAHH4aqb8CVRavjjbrumaKoyHuZeMs+GUiKgy4cSjRORI1N7iYdA8mlSDKlT8PZb7b47Fx9HmylxRlEk7nLzKb3g21zBxPlCYpYE2X1wvjUya5ixXYXMXdWXSUADyF6hk8h5NijhPyb8ljldrLuyhBADIuyauWGGuVhhXe6igchNXWC7lLMwWv765l3LhFS29GAsAmnRxRyO1h/jYTtXNXGaSefpyn8dCuc8pERFVCszF7AMbgKq4Fi3Nnf2Wv+uFvuW+z+fUe4XxlzCw3I8lItegYI+aqRJKL0RERFSJqJx0P0rKERFVJoH7MiUx8aX+8uFco/xv6806konca3nCdf4D/Mv9eBJyHdLssN0gL0FwtzsREVElxlzMPrABiIjIAqOez8Di9dLhm4iIyEbUUDbuNIcdICIisntzHt5l6yoQEVEx5mJ2gQ1ARERUoby7fAQAKO2UoLBLQ8MD7d33f825Zb4XZcityfrlS5he5uMUtlV2K7M60eg5FY8sWMpwz0rlXjG+m9N+hilc1nalfnn4gSfLvJ9pZx7QL3cKiDNaviS7zUZE6ZdjXIvGfLaD3sLa+sFm16vOmx+L3SFx3GkiIiIiIa/+C/XL5rKWTa//rV8+lymaxNRyfyY0kV/Z1rD4yMEtZT6GezNlI7IUXC2Ayk33CmgyDMMaOvnc/W0JhVmWJxHak1qoatl+SKyIJN18P5eD7zIxrV3023iGAvEo+wAAv2GG42mvGeXJhZZdB1DLDINZUV4/3g/Nn5Zf/9/3ydarTGXBXMwusAGoCmj2xY+IjAmUxN3UGYLSQHKu/MXDpj7SSdW+q7tCUT32og5q5hj+A+zOjBSWiwoTf2HmyMxN5B0uHsZuWsgG2bq8c+IhYXxK1CZh/NtLHdCm+jXhuvOZ54XxTVfriQ+uMnNy4CudUFAnFeEeKcI1x9NChPHIareE8dPp8hcP0+uJx1DwTpAZKtDMOcLtPPFz+eem+HVp739Fdl/Ocq+ZzCgW317qILuvUI808QqZcy/xHEsRaN9ZbrIqgx5ff4Oto54rtRyVXWLUu5JYnUvvAABypKOqyHqpwzBJ7OuoVdKCxX9W5TTyY8iddGnQF8CNomXLh/SHX9EkpDOceiPITfc9/0LNPZJyTwYd0i9PwP3yO8w3Gve9lDnMvinQTYg5qKZ0QkylCk4XwLlx0fe9eCh6vf0Ztc0XsIbrgpjRV1ZI8lSrVaWq4rjTRFSZpS+OxlHRabHMnOEqTzPfVYLTBsCCCciNvgc9W4knYxFNmA7Iz/dScLsALgHSbdQeamTuE+ebntHifLPwiga5l8R5h9xcN86CYwMAGorDuo3MrJO5dqdNE1+UdAkVz2cEJ/n30SlQfMFZJXNxrDBTPAePuQulzjLz8LjVkZ/ENe+6eCg/lYv4uajdxHE3mZwSALTpcvMZiZ+8JkX83J88d0gYl5CfxpjKQeT/LkliuaMNQz8eTFG2H59XBFMFnJOGtClGJ9nldF6niZf5+wKAAss7JeYfM3RCdOmiu2ChPSnej77hQ3xpTM9Nrbv2kFkg831TxKm50d+9eKpoy8ldogJk5/SyhuKGH02uBvlJph0/jecO29G/pTWrVSUxF7MPbAAiIiIiIvulQum3GBaXIyIiIiIiovLBXMwusAHIwXh3/lASq/NkHetXhIiIiMgamHQQUSXiNXCRyeOEGBtVhIiIiKiiMRezCxyBjxRr4HnzrrbvqLpUPhWxgWfr/GvT4x9ICrXp8YmIiCotlQU/RERUabnUNj+8kSNQPFwfERGRPWAuZhd4BxARkYVmPXYYv8U3s3U17I42WDC2sxHVOd0cY9oG4nmtlPJ3zQIAxMtNEnU3ROPCS6dYE7tgtCwzRRgA4DSAAMU1stjb56VzoD3b6pgk9u3hiv+M/3y9hX754dCTAIrG8hdNIdRCGmp3TTd32FqnxvrYtEYbFR17c7K5yQHKSDB+d2K9GZJYSCznBSp3TCiIiIiqhEfX7gEaltOEnFWMc6e6suse2j1av/x5y9/KfIzi+WoqQl5iviTm5is/55TJtgmGOa7MzYVV0VSR0pPWiGt3JLHLtcxMuFyeinLZCI2hDvkXpfOBudSVNtBn7zI0aHv09dAtxCk8rr9M3FnhSX2udF4llxrSS9y9D5yUxDa1bSyJ0V1iLlbpsQGIiCqFV448KrtuQatfrFgTqhRU8mcQL7c7qF/+AL2sURvbMcpts37LUrRJepQuoZmAHfAuEE+krITqRhoAQBtkvuHO2HNX9uoWrkjXjfeT/xtXouBXXTLp3NgBTl1cpJM//3ilJQCggbfhbtvkXMMk2WkHbyjbt5+5mVodlBrK7mnnfe9ERERCbvfJXxDP3Vb280myTw085c87m6UmGB4UX/Q34lD3uBk1RmTuz1C0iUtdo06IShtDBD48Y8hzX6r3j6JtMn/PNLve8wXPMtcnY2s6AMAlzP7v1BQ1Um5Hff1yd4/z+uWThcEAgInH+ivat7aNoEego6vAXOz69euYNGkS/vrrL2RlZaF+/fpYunQp2rZtCwDQarWYNm0avv76a6SkpKBz58748ssv0aBBA/0+bt++jZdeegl//vkn1Go1Bg4ciM8//xxeXoZc+7///sPYsWOxf/9+1KhRAy+99BLeeOMNyytciTnAVRQqbwVa+b/KSPdUK9bE1MT/+gvjX7daZd2KUKVxOUfcK+Z0epDsNm2qX7PoGMYXYImIqBLiuNNE5EjM3cBsw+vwHi3EHQzSt6VZuSZUWTgHyHxYfcxslGPZMVRu/OdNRFSpVVAudufOHXTu3Bn33Xcf/vrrL9SoUQPnzp1D9eqG64Aff/wx5s2bh+XLlyMyMhLvvPMOYmJicPLkSbi763rTDhkyBAkJCdi8eTPy8/MxYsQIjB49Gj/88AMAIC0tDb1790avXr2waNEiHDt2DCNHjoSfnx9Gjx4trJs9YgOQA/F65SegrfSW3jrVpHP3RHrekt3P6fRgi45700t5L4LbeYbEQe4i/fG08pvvJlBjvgdESbPP9ZBd18bvqjBePNxUSc0Cxb1mjt2sIV+BXPHt0r3rX0amRtzToqlPojBex/O2MJ5ZIN9jwztXJquUdlbXkekotj+jNiC9OxsAEJcld6+vvCA3Zb1tlLia5SdeYWEyAiir1+Dv5uLHoeMt3zkRESnDBiAiqgTSj0QDABLeMY1r1mqE5bX50uFrAMDZy/IU3a22suGM1B6Gjn7OfuLjOAeU4RKBWvwFq8ksFJc3833s2UqcW+bFS4ckAgBNmvj1dYKT8I5kAID8KFiAnzis1YjfL02qOH8ruCGTDJlRmC3zepnhHChuhFG7il9ktZvlXbALM8SvcVmovMT1KstzL8wqfZvUDzvAd7Jt5/MlInJoFZSLffTRRwgPD8fSpUv1schIwx1WWq0Wc+fOxZQpU/DII48AAL777jsEBwdjzZo1GDx4ME6dOoUNGzZg//79+ruG5s+fj4ceegiffPIJwsLCsGLFCuTl5WHJkiVwdXVFkyZNcOTIEcyZM4cNQEREJLV2q58w7rV1mSSWsWx4hdaFiKjKYAMQERERAVjRvL00uP4lSejFh+ZboTZERFVABeVif/zxB2JiYvDYY49hx44dqFmzJl588UWMGjUKABAXF4fExET06mUYLtHX1xcdOnRAbGwsBg8ejNjYWPj5+ekbfwCgV69eUKvV+Pfff/Hoo48iNjYW9957L1xdDZ3lY2Ji8NFHH+HOnTsmdxzZMzYAERFRhdJGFM0smaOsJ6TqunQSTLi74KUHzgAA0vKVTfoaFmr+ePHxhn+BX2cJhpK8WPS7lOFWjqbW1C+3Oi4/xGBhZ2VnPOoELVB8k6ZRp9JqnYruoBR0gP2mVkf98qrYVvrlze2+1C2IO60qokqWDv2pjQxCYr93FW2/7GpRIn6XI4ieeiBcdt27VzbolwtLObNcm9hEEvsjpykAoJ/rcWWVMe5oXVO2lCJh1UyHzsnUuMLTSfcmG99lGNRJOsb6+T0ONcp62bEBiIiIiEgospdhBI6ryqYUxfRTD0hiv4QV9cKXGx1EYFDNo7LrVl0z5CxZP0gr5hJsuLvN7N1eRiO2Z201/wSrdVA2V2buyaIEsNCQRLnV0SUAorvVPB4z2q/xgC97dL9UHpafhBqPnvOu4P1YVbhculEXwR2U9Sw+tJDXA95m12f/qctLPJpKcxYTgoGAVHUMr4/2irLEVVV0l6Nz4N1d1u4ecF4aNKpCYyQBADZ0/EpS7IG9z9/VsR2GhblYWppp/uvm5gY3N+mdzBcvXsSXX36JiRMn4q233sL+/fvx8ssvw9XVFcOGDUNiom40pOBg01GsgoOD9esSExMRFGT6oXN2doa/v79JGeM7i4z3mZiYyAYgsi3vtu9Lg53vsX5FKrFAl0yg/O5WJzLROSAO5zLMDOdHRCQj8d5p+uXWB14t83582ui+g9I3XiylpINjAxARWZl3hw8ksXjptaEqwfs+H6TvSJfEC3PvovdJOdDs18Ap2IIr1XaoLMOmOYrcS7lwCTI3YRYRkVj3S0aNPgFl38+cZmv0yz1/GlL2Hdk7C3Ox8HDTjp3Tpk3D9OnTJcULCwvRtm1bfPCB7pyrVatWOH78OBYtWoRhw4bdXZ2rIDYAEREREZH9YgMQERERERGR9VmYi129ehU+Pj76sOjuHwAIDQ1F48aNTWKNGjXCL7/8AgAICQkBACQlJSE01DCXfFJSElq2bKkvk5ycbLKPgoIC3L59W799SEgIkpKSTMoUPy4u4wjYAERENvXFrOIv+wPyhTrKryIioipOXfSjpBwRERHpRWzur1vYLF/mQuvVVqkLERHZIQtzMR8fH5MGIDmdO3fGmTNnTGJnz55FREQEACAyMhIhISHYsmWLvsEnLS0N//77L8aMGQMAiI6ORkpKCg4ePIg2bdoAALZu3YrCwkJ06NBBX+btt99Gfn4+XFx0d5Zu3rwZDRs2dJjh3wA2ADmMwkGCyQ4BBLtn4ESatMUy0vMW1iZI50EAgPpeN4Xx3TcisPtGhCT+2j3bUFCo7KqKj3OOftndqUBYxnisU2M9apwTxven1JY9Xju3K5LYgoQuaOqTICy/9UYDYXxZ2x9kjxHmniaMJ2TLfKEVmhkOwUm+2dzX6LUz5u8qHufWWyWeuMRNLX7dAQByU6uInyKy1eLb7q9m+8ke4nZeyXFpzdSnFKfTg4Vxc3PEyK07lh8qjIfKvL8A4KQyHXZhLfwAAEEtS/9nVnfur7g4fkCp5eyVd+cP9cvFn2ptiJ9N6kJEDo53ABGRjcW/9SdwWbDiJuAUKjMMmdzpqrkpLGTmclCdUJaLGQ8ZptWIcxKVWvxlmX9VMAlhEZca4pwg94o4Hym8Iz90mTpI/FyyNopfGCc/8SUN72hvaFNknqPWzD8EmVRNmydeITfUncpN/Dx8H/KVPbTaS/xZUXvIv79qF/FzkXtdnP3KMCyeTI7q5GNmX3Kjs/mLw8Xzq4ho0sTjust9Vp9JNtOxsEj6smh4D48ttZy98uozXxh37uZn3YoQkeOroFxswoQJ6NSpEz744AM8/vjj2LdvHxYvXozFixfrdqdSYfz48Xj//ffRoEEDREZG4p133kFYWBj69+8PQHfH0AMPPIBRo0Zh0aJFyM/Px7hx4zB48GCEhYUBAJ566im8++67ePbZZzFp0iQcP34cn3/+OT777DPLKlzJsQHIDnk9/AXAC6lEZGdUSamKymkjAiWx1U//pV9em2C4Dfjh0JOSsqLYoH+elh7IqC0y5MZUAMBjkScMwaK2yfluv5RWZb3DTWvJrmuB68p2EmW0bPRf+pt43a1w8893lWxyb4phDpgob8Mtzi+dHmhSLjnXC+b8s8f8xKjrR/ypXz6cJv9cW/lck8ROpwtm/ASwwbvEpAmuZqtgoll2UWO+0XRct/PNP4dOAXEAgD23IiXr/shrql/u53ZcunGG0bLoOpQoJng+I68/abaO5pz/67bRo6Jllyp+OscGICKyMtfHWpaI/CkqRkRUqRTsUTZvZO5Dghbq4hGSwgQxIx5J+ZLY3jp1JDHjnOW/obr8riMuScrlb8yHupqyRu5qPeTzAM1Z5R1P3eoXNUganzsa9RVOrO5tUj4VQMidornQboi3MVRS/rgvxQ00m6+tcl4uv7Exufb6kn1xAeQuFTfUK1FwwfCaugQWtfqW9lYV9zeXpvwAAFVt3YuuvSJtXNfmG2IFt5W9ny7BgtboxtKQJUJ+fksa9JaGqowKysXatWuH3377DW+++SZmzJiByMhIzJ07F0OGGOZbeuONN5CZmYnRo0cjJSUFXbp0wYYNG+DubvgOW7FiBcaNG4eePXtCrVZj4MCBmDdvnn69r68vNm3ahLFjx6JNmzYIDAzE1KlTMXr0aMsqXMlV8SsGRERERGTX2ABERERERERkfRWYiz388MN4+OGH5XepUmHGjBmYMWOGbBl/f3/88IP8qE4A0Lx5c+zcudPyCtoRNgAREVWwG7+cF8a9f/nY5HH6zjesUR0iIsfCBiAiIqJKI3tPNjy6eZTLvgpu5MsOp6dU6F8jxCv+WmzyMGOVY/X2JiKyCuZidoHT4VZRcvP/lEXTja+X275IbFNcHVtXgYiIqHJSWfBDRERERERE5YO5mF3gHUBEROXktUfOAAC+u9zOxjVxPI8tvV+/POwBhXPpWGB4g0Oy6ybDcMvxh1grWd/KWTrfjUjhXZ7x5Gqk/7Lb+18BAOQUGtbNa/Grov0NP/CUonJDesUrKmfsQnaAfrlr4AWT3wAw9sggi/dZrNmJBMODupZv7/e7bi6qh3DEbLmQvCmSWGLUh8oOIhhfe+jtIdIglQ/2OiMiIiIAT2zdAzS1YEJJUuwp7TMAgB/wv3Lfd8fCS7LrXO43zOGSv1k6vxBSyr06Yk7SUEhaunT9UYX7ay8N3Rd0DquutpLEV4UUzf1zU7JKzDhtvCxYbqNwPzIyt+gmRnWrI5grqrRt92SUXgjA3hGtJbF7Nxvm61U5yZ/YazXS+YMAQNWdyUCFYC5mF9gAREREdmXZ0ab65YdDT1r34Kll31R93ehE1F/hRvuMlkPLfmyRHZdqSmIqn7JPAlrRmp1JKL2QHWrqkwgA2PyzIdb/CbmZW4Hz4EUNCRWU3dPOpIOIiIjorizK7aRffgF7rHpsTYpGEnOp6SIoKbP99QIAgFMNZZdCs49k6Zc9oqopPo4SZ51qCONPhB+WBgXtXtaWd1I+P7FrRa9tyMrX9KHEnp/YqDJ2irmYXWADkJ3xGrMSCA+Qxl3EX8b+rlnCOACEuqcJ472Dzwjju5MiZPe17UYD2XXGwqul6JcLtNJviIJCNXbfqiPctk11cS97jWA/eoJeGgBwX41zwvi3lzvI7upqlp8wnpzrJYwb98g3UVgoeww4y1QYQA23dGE8SCa+K0XcNd7TWf4f99ls8UnIPa43hPH4HB9h3E1dIHsMf9fMkqVlyxbblHSPMH46PVgYz9TIXyCV+9zXcBP3RInyTpbdl9xnr+Q2NwAUdir9b8Rz0m/I/OjRUssREZER9jojIis6d6A39nYvEZTrjyJ/SgyIT0mRf1n+XN2lrvgc1622ss4B+TcMFVJ7iM9jXYLFF1ML7sg/GW2+OL9RyaRDuZdyZPflUV98kVWuXipXmVzQ3MUoc9eLZfrCFNwSX4HVpEkvSAOAs79cLih/aLdw8fuYF2/mwqtML/jCbPGB5OLmuIWL8zW1n8yLHGRmZ+KXy+w8P4WZ4o00LuLnrr0h7v2f8PpSMxUD0g/o1nu3jTVbjoiIjDAXswtsACIiIiIi+8Wkg4iIiIiIyPqYi9kFNgARkW15ln4HUKW455mIiConJh1ERERlcvXh31Hr8jhbV4OIiOwVczG7wAYgqnLG1tqFk7niocPkdPtnHL5v+30F1YjIAYkmXnS+u//42tDqd7W9RKphiMxlB6Jkiw1ve7p8jmc0eoVmk8z4FyU4BUqHhWzhF18+9SmFVlHjrONKfOpDAEDID5Pvaj8Dk0coLOmg42pbA5MOIiIiIj1VrrgDpdZFfsj50jxb519pMKXMu8ORlDDDMsJky73gUz7zDBkPF5l1sOSw9DLbyOSvIRrxMPzlqYXvdcODmxV+uEqn55Wz+uUttcVTAiihuo8JQIVjLmYX2ABERETWUWAYc1zbpKYkVpYTgkEbHpfEXKpLGy68qhnGrQ/3SAEAnEr1sPyAVdyKq23Mrh9Td5ei/Wxw+srwoORUdcbjxhu3+RVPOSbIPY0Fqs0ndOamYygvQzOGWLxNi77G88ndli3X/wlDQ9GardI5AVXxdyw+tt2roKTjyy+/xJdffolLly4BAJo0aYKpU6fiwQcfBADk5OTg1VdfxY8//ojc3FzExMRg4cKFCA42dDK5cuUKxowZg23btsHLywvDhg3DrFmz4OxsOAXfvn07Jk6ciBMnTiA8PBxTpkzB8OHDTeqyYMECzJ49G4mJiWjRogXmz5+P9u3bW/aEiIiIqEpTZejm3+oz1NAYcinTH0DJOXHl5+kytqWW9MK8j4t02/qehjmFfZ11640bgEihwFLWy09fbCL/B0M+oXaTniA7V9edp2qN+nSqqxk+M/kJuu1Vgm3Nzr9mJa6Dlc2LZ+zq0M8MD67LlwOAxE4fAABG3XhCsm7t4VoWH9vusQHILlSCP83ydfr0abz33nsYM2YM3n33XRw+fNhs+W+//RYjR460Uu2IiIiIqFypLPixQK1atfDhhx/i4MGDOHDgAHr06IFHHnkEJ06cAABMmDABf/75J1avXo0dO3YgPj4eAwYM0G+v0WjQp08f5OXlYc+ePVi+fDmWLVuGqVOn6svExcWhT58+uO+++3DkyBGMHz8ezz33HDZu3Kgvs2rVKkycOBHTpk3DoUOH0KJFC8TExCA5WWGWT2RFzMWIiIiIqpAKysWofDlUA9C8efPQvHlzTJ8+HV999RVmzJiBtm3bYsiQIUhJSRFus2vXLixfvty6FSWiKqXrcJ/SCxERUdlUUNLRt29fPPTQQ2jQoAHuuecezJw5E15eXti7dy9SU1Px7bffYs6cOejRowfatGmDpUuXYs+ePdi7dy8AYNOmTTh58iS+//57tGzZEg8++CDee+89LFiwAHl5up6TixYtQmRkJD799FM0atQI48aNw6BBg/DZZ4ZeiHPmzMGoUaMwYsQING7cGIsWLUK1atWwZMmSu3zhiMoXczEiqozi2y5BfFv+zyQiqhBsALILDjME3K5duzBhwgRotVr07t0bLVq0wMWLF7F27Vr8+OOP2L9/PzZu3IjIyEhbV/WuaP2qCeMZeS7CuHO1QmEcAG7ni/cV6p4m3sBMc+G5jNLuRdXxdzWM9ZOQ7StZ7+OSLbvtmvhmwviDIadkt7np5SmMn8+sIYxrCuWf5J7b4s/OwyEnhPGDKeHC+L8IkT2GOZeypEP9AMDxtFBh/N7AC8J4ZoH87bCZBTJzfgimcwGAMJnPSlq+/NBat/NKfu50jSMfTboiu43cce4NvCiMn84IEsYB4Gq2nzA+/0JXYXxQzf9k95Wc6yWMuzmJB5mqG54ru69izb74EcfGDS61HBERFVFDWZemu+j2pNFosHr1amRmZiI6OhoHDx5Efn4+evXqpS8TFRWF2rVrIzY2Fh07dkRsbCyaNWtmMiRcTEwMxowZgxMnTqBVq1aIjY012UdxmfHjxwMA8vLycPDgQbz55puGp6FWo1evXoiNjS37EyIqZ1UlF0vfGS0+k5fr65MN2fNoue8kTbo4f3N/wF06bGoRlbeyLziV8SihMqf9ak/xvtwEQ+wWy7ssnscu/4Z4HhK1h5n6yqSvrjXFx888lCGMu4aJcx6X+11M5mWUkFnnWkt8/IIU8QZyz13u+QEAnMRXx0RDNAGAs5+zeN5NANpc8YE0WeL45RrzZKuVd128jSpJXN4twF12X5BJRas1EV+byDySaTJ3izHZz5Hcx+uIfLVMtFVYjoiIrJKL0d1zmAag4p6SX331FUaNGqWPX7hwAcOHD8fu3bvRpUsXbNiwAc2aiRsSKiPv6Fmmge6NbVMRIqoQl9bES2Lea+ZIYul/T7RGdSqEtrqgITY+Rfc7yOiKidwFEgDaWv5AoZkCFjh1w79oSb7B2djuW4aLVSmdpI2bfslG+ynvCWaMhtV+b9/9ijYJcpNOSrrkz5qSmAo3JDETnrqG8u9PNDFb7M+Y7/XLX17soqCGwCfNfpcGi9usja/jGF8/KH6Z6xjFiq9HWHAy6fxo0amPwjlwz555C28PGAEACDk/RdE2LUMNr62nk/iiWEk/tv8OADB431BlFQOArNIblasEC8edTksz7VTg5uYGNzfxhb1jx44hOjoaOTk58PLywm+//YbGjRvjyJEjcHV1hZ+fn0n54OBgJCYmAgASExNNGn+K1xevM1cmLS0N2dnZuHPnDjQajbDM6dOnFTxpIutw1FzMq898k8cJk21UESKqEKHHBTnW+NWSUMbcx6xQm4qhbVZbEltrNDpn03t0Lcs3ZDo3ljelnYf1/AyL7p2ljYva64YcUZtfPvliMY+mhobJ/S5Gr2Px6b2gH3a7KGnH1geuPC8teFQaMu6QvKj1T/rlC4HizsAAUO/4LcODurLFTLjkS1tic44Z5m7SZOqeoLOf4ZJxYaahIditju590OYaXm/hfEACnl10nzPNDQ2cailLyHq6nAUAbOyl7PwhptDoHFlhnuhywKgxX9zHWmLfbenflvlWfgfFOYDsgsO0v+3ZswdNmzY1STgAoF69eti+fTteeOEFJCQkoHv37vqhOYiIiIgqm7gsf9mf5Fwv/Q8VsXDYgfDwcPj6+up/Zs2aJdorAKBhw4Y4cuQI/v33X4wZMwbDhg3DyZMnK/TpENkj5mJERETkCPJrOsn+wA+GH9LhEHB2wWEagG7duoXGjcV3xzg5OWHhwoV47733cOfOHdx///3YsmWLlWtIRFVZ70bXbV0FIiLHZGHScfXqVaSmpup/jIdXK8nV1RX169dHmzZtMGvWLLRo0QKff/45QkJCkJeXJ5nXJCkpCSEhugGiQkJCkJSUJFlfvM5cGR8fH3h4eCAwMBBOTk7CMsX7IKoMmIvJCC69CBEREZHdYgOQXXCYBiBfX1/cvn3bbJm3334bCxcuRHZ2Nvr27Ys//vjDSrUjIiIiogphYdLh4+Nj8iM3/JtIYWEhcnNz0aZNG7i4uJhcxD5z5gyuXLmC6OhoAEB0dDSOHTuG5ORkfZnNmzfDx8dHf6E8OjpaciF88+bN+n24urqiTZs2JmUKCwuxZcsWfRmiyoC5GBEREVEVxAYgu+AwcwA1a9YMe/fuRV5eHlxd5Se5f+GFF+Dn54dhw4bhscceQ3h4uBVrSUQlfTRJOkYuERGRYhU07vSbb76JBx98ELVr10Z6ejp++OEHbN++HRs3boSvry+effZZTJw4Ef7+/vDx8cFLL72E6OhodOzYEQDQu3dvNG7cGM888ww+/vhjJCYmYsqUKRg7dqy+0emFF17AF198gTfeeAMjR47E1q1b8dNPP2HdunX6ekycOBHDhg1D27Zt0b59e8ydOxeZmZkYMWKEZU+IqAIxFyOyX5drzLN1FYiIyF5xDiC74DANQDExMdixYwd+/vlnPPXUU2bLDh48GD4+PnjssccQFxdnpRpWLpkaV0BTernydjzNfocrcVOX9+zuApm2ndB76436wnir6tesXBNTfyU1EsYfDjlh5ZqQUtpQP2UFFX7mVdduQ1s3SFHZ/DxBzPjfXdFck4tjNuhDs8/eBwDY2cR0smeJVN2vFF8PQyzM/CZh4waYL1AkfuKvispZi+rSDd1Cs1r6WMK908xu066OrkH3tUuPVFi9hIw/GikKtzHuqG5mOp1e900D7lhepWKZGt2F0B/bf6eofLhHin557SYfQQmjz3LRxLOqC0mCclWIGsruabfwvvfk5GQMHToUCQkJ8PX1RfPmzbFx40bcf//9AHST3qvVagwcOBC5ubmIiYnBwoUL9ds7OTlh7dq1GDNmDKKjo+Hp6Ylhw4ZhxowZ+jKRkZFYt24dJkyYgM8//xy1atXCN998g5iYGH2ZJ554Ajdu3MDUqVORmJiIli1bYsOGDQgO5thSVHkwFysDb+sf0iXEqHHOzi7EaDXlO7m7LBu8L8VcQ8WNp5lWrkdJ7vXdhfHcSznCONleYed7FJVTpeXgdLqyHKtTgLLv69Pp0vOTq1nVJbEXcvYYHhhXd2eJgpdlDhSg+6WqbvgyUwm+2EK3j5LERK5FLVJUzlpeOPS4fnlz5y91C1tL2eho0e8WFVIls5yqFyXZglxcjuaa7qKkk7eT2XLZPkVJz80yVKyweCcAzinbxCXLcLH0iRPDZMtFeRvu8v/nNytcL6ysKigXo/LlMA1A/fv3x/z587Fs2bJSkw4AeOihh7Bp0yY8/PDDSEtLs0INLefd81OgWomTQDeZt6xQHL6S7SeMB7hmyR5X7mJ75xpy/3mBNQnNZNcZGxJ+sNQyvi7iE8nbeZ7CuLmGmUCZ0+UHg08J4/PPdy2ldlLuTuLjR3nLXJBTKXutSvKReV1a+Irnltma3EAYTysQn8CbJdOR0yM7Xxj3dJa/qO8v89m7nVfN4mp1ljkJ7VHjvOw2m5PEJ8P7bkcI44Nq/ofcQvHf3RO1DgvjqXHi11j0Wb0EQNu09N6vXuNXI2PuY6WWIyKqciqo19m3335rdr27uzsWLFiABQsWyJaJiIjA+vXrze6ne/fuOHxY/P+k2Lhx4zBu3DizZYhsyRFzMQBAnUDTx3IplFzHOg0Af5l1MimMa02ZE29zF75qmFlnTMGUlIXZ4sTSyVl8gS73onwjgMpFfLUn+1S27DZuzS3LVbT54oahvHjxVUiXXBfzO5RJSeQaoPJviPMh12CZ48jfIAfIvJRyryMAaDLF71ehzOuilqmvi1x9zchPFu/LLcXMe+gnEw+Q30Qlc20475r4PZa7mOzs6wztLenrlTByjvzBi6T/NwfezWNLLUdEVOXwDiC74DANQA0bNsS1a5bdpdC5c2fcuXMX3XqJiIiIyLaYdBDZHHMxIiIioiqIuZhdcJgGICIiIiKqophQEBERERERWR9zsUqPDUBUqaTle8gOAUdkC28c64v3mvxl62rYDe/oWbqFED/zBXOKhozwdFO241T5YStt7f5dY8yubzJY91v0ORrwTmuz24YfMD/njj34pNHvisrtD6+tqNwbx/pKYv2zjumXX/H/R1nFjAlGBQ29+Ko06Gv5rskK2OuMiIiqILnh3xyJZ09PZG0vn1mQCq4WwKmaY09C4R0zV7fQUTy3r17RPKxaJwc4OWppfnVCy691C+JZABC6UX6OoJNtjeYzssEc2uXipLJi7h0VDr8pnmkAKJ4B4ZKy3RgTDSX66b0PGx4UjfDfxs+2c1OTDOZidsFhGoCMJ9S1lEqlwjvvvFOOtSEiUqbPUDXWHrJ1Lej1e7ZZVN4vLVt+TP8K4qKWJvn5RRNUNgoyDKGzZG0t6calnWzdKUqsvRQ2yJXi+8uGhi2lDUDWdjjQ8Dq1uqosmVClSucs0AoaMWc3/UO/vCm5IQDg9WP9FB3jzwuGhF2FZDMlSY9JB5HNMRcjInsUH/oJODN5JXBW9+twWC20gsKL/FbuH+jpJJ3nOLfQMHdWKzddvQeeGSHYVjpflfH8wFvP1QQA1K0pPz+aJW76GubPlpsX29acmhjm6irYLp5PrKSDKdI8N8pbkC9dMlo2niMvUlndtmeX0oBKppiL2QWHaQCaPn06VCoVtFrxZIfmMOmwjZ//DhTGJ/TjWOBERESkEJMOIptjLmZ/FoV2EsZH3dhp5ZoQERGR3WIuZhccpgFo6dKltq6CVajuiFvvtd4ewnhqtvgvLCAESM71Eq47kRoijJ9OD5KtV/5tZcO2zb7aTr+sQpqwzPLL7YTxILcMYdzXRb6XxA2Z5xiXKe66fyxZ3CgFAEu0HYTxE2ni1+uvxEbCuOqCfI9ubc3qUJ1PEq5bE9hUGP/nZl1hvH/oMWH8XIb8c7ya5SeM3xt4UVw+Q1z+4B3BHQhF9t2OEMbjsuRvp+gfdlwY77HzRWG8b+gJYXzO2W6yx0jKqCa77vlDjwnjnQIuCeO/XWsi3pHMKA0qbarssYmIqBRMOohsrqrkYhCf9gNy/dfM3VhwW36VuqZgQ/lUzLSHszlRRstx4iJOjZ3EK2Seo1s9+WGD3OooHFKomDjd0e3LWXyXspOXuL7O9cWXOj7N6W62CnuOi7uI/1JX/Bn3C/MTxgvjZU78zbxXqkDxPyqPhuJc38lb/gOmchGvc46QuQRk7s72y+Kw18Pe4hUZAKQ3POj4yMTNfFSqPewpXnFLZgO5vxUz5wHZWhf5lcVljt6LoBZlGGqYiMiRMRezCw7TADRs2DBbV6HcaT3KZygeIkewYpU0W6h/vw0qYgWqfy8I494dZ5k8Tt/7pjWqQ0RUuTHpILI5R8zFAj5ZD7dITv5GBADtnSdIYvvwmQ1qYh31XntUZo3pc07fLH1diIiqFOZidsFhGoCIiKiSc3WSLmssHyqmMjjsZMH41OVsaMR+s+s7Fc2XKZwLSI6mqJeqYI4bbD9tWL5X2e4Su09Tfmw792fM95JYjtF44LMPSofYqRsiPxZ33RqGu13jxG3BVBKTDiIiIqJS+foWnfP7Gs5VswpkCtvAuYxAm+VYlmicIRi1pWhOol9qG+4WHHhFOh+QiCpP9ybExYnvRAuNew0AkBD+ieI6Bu4uyjccfIqrAan/mV3/v8y2ktjgWofNbtO56BbZ3bcUThpU1TEXswtsAKqiLiZ6wqu6rWtBJamuc/4jkTXxTQFcsXU1yAKqxBRJTFs7QFrQSXAWkGY0pKSb4d+UKk5++EST49QLlsSGNzgkiY3e+rA0Bmnsrz7SC/wAcDjVggYWGfFP/KpfPhtsGBOk5z/i4Q3LlcyQoua8dukRReU+ifzd4n2Xl89v61qpXsn/B4dD7/49simNzPAxJbkZksX07a9VUGUqMTWUJbcOngATERFViAgA121dCbKEeu958YoY6fDx1Zyl4/WlxufrFvwMw++9cayfomOPrPOvJNYqQ9qo85NPS+H2PzUwjT+uOiI/zGY5uBQwHwDgVN8wDuHJ2tJ8srxtPVdTv6yCwla4hhVUmfJUx2i5EjUulpW5qQpMeOumuMhY+VwF1qaSYi5mFxy+AWjXrl34/fffce7cOaSnpwsnJlWpVNiyZYsNakdEREREd4W9zogqLeZillM3VgOcHpLsmRfMznFV6VyCrpGLiIgsx1zMLjhsA5BWq8Wzzz6L5cuX6xMNlUplknQUP1ap+CkkIiIisktMOogqHeZiRERERFUAczG74LA3YC1atAjLli1DmzZtsHnzZgwYMAAAcObMGfz1118YPnw41Go1Xn/9dVy8eNHGtSUiIiKiMlFZ8ENEVsFcjIiIiKgKYC5mFxz2DqBly5bB09MTf/31FwICAvD997o5HBo0aIAGDRogJiYGDz30EJ544gl06tQJERGV555fzzeL5k5oFi5daTyJupGWYTeF8cwCV9njJOT4CON1PMX3a8fLlAeAzED54xhb1malfvnJ5T2FZRa0/EUYT871EsbDPNJkj9fFX5xQJuZ6C+M/Xmslu6+HQ08I44NqHhXGnVTiuRu+rdNS9hgAgGzpGLwAMDJCOpYuAExtuEkYP5khHrf2arb85E/uavEgre3yxfPvtPMSxw/eqYXpjTaK16UIPtcw/1n9K6kR8IQ0PiXqZ9ltRN4I2Sq7rvWBV2XXNfVJFMaHRewXxkPdxeN2nEgLFcb/datt8jjvX0AbIP68G/PqMx8Z614qtZw1pce+KYl5R8+ybCde7qWXMaN4/qGmTfP1sYN3xJ+7Yuee+EzRvs9n1JDENtf7UhJLqeGhaH+IMizek3VDv3y17bsmxVbmtsaTPrp5jN6+9pCyfadlGZY10iF3rCbHzLp4w2K74nm+sgHU1y3ef2iMZBNnwXdreLUU6b5TgaY+CYqq+HaQ9DVNaPqpom33o7Yk1neH0YSvgo/zxRQ/AEBdvxTE7UpXdBywh7w8jjtNVOnYcy4GAOk7onGpnWDFDUEMAOTasKIAXJBZJ3dKLjftZTWZOADkm1lnRHPI6Fy/tbhM7q5cYbwwW5zbqJzl/z8V3BbnFmoP8RdytZryTzL/rPhJZh4Wz2noBZlz6dbAq97bZY/zarh4Xe4K8euStkN83l+tmacw7hkgjgMAZKZnTI8V57tqdzP/2GTOG9xqi3MuJ2/xdYZi+5pIz5Wzd2bLltekit/7wq3iz5HPEF/5g8vM/5JzRHyS6VpT/BzVTdW64d4EPHJNP1+FPRrL16cSS984XhLzvl9ZnmMsoGbx58HcibzYwRTDHJzP1dirWxB93xm9r4/fPqJs54KPfMGf0s+ac13llzrd6hadrCcZYo2TkiTltDlGn91Wyk4qdycU5aBZ4ms8FeV8Rg0EFn+hlDKlaH5i0WffKC9zqVE0v2i0YAO5tDJLEFM45azbk9KEafJW8XUuiQbi92JXkG6+q0jBeJT/3jGcc7x89FFFhxHloFSEuZhdcNgGoFOnTqFTp04ICNBNOl48tIBGo4GTk+6f2aBBg9CmTRt88skneOQRZRNbO5I2ftKJ+KxJGxlk0+MTERE5gvTtr9m6CrbFYQeIKh3mYgpIry9a3QtBeyQxcTMHERERyclY+Zytq2A7zMXsgsO2vxUWFuoTDgCoVk3Xm+jOHdPuIw0aNMCxY8esWjciIiIiKiccdoCo0mEuVvmNOvSPratARERE9o65mF1w2AagmjVrIj7ecA9j8bAChw8fNil39uxZODs77I1QRDYxM3y9ratARERVBZMOokqHuViR07auAJX0yqG/bV0FspHC4xzCiYio3DEXswsO2wDUunVrnDx5EhqNBgDQu3dvaLVavPHGGzh9+jTS09Mxe/ZsHDx4EK1ayc/7QkRkba6DWti6CkRE9oNJB1Glw1yMiIiIqApgLmYXHLa7Vb9+/bBq1SqsW7cO/fr1Q4sWLTB48GD8+OOPaNKkib6cs7MzZs6cacOaEhFVDaqbhsnutdXcpAXcxRO26mUWTZ4Z5G3xsY+lhkhiPRqct3g/bxzrK7tuc70vLd6fUntuRWLPrUjZ9atP3SOJqTySoLqhmzRY6yF4vY05FfUH8TOafDlQ+jqv+Fe6qVZQ7vsLLSWxv7p/K4lFRt6Cn1Z+AuGyyCzQfY7+59kWMDPV3eBahyWxDv5yM2/Le+7gExZvU6y4rkoU//1ofQ3vUcbPz5f52A6HCQVRpcJcjIio8kk7VZQbhPlJ1gX4FZjdduuN+gCACQ12WHzcs9oaktjjPkcMD24r3FFdaci5ruGyZsE688/hbqhayfef/6mwpXibK7cAiPMlY1pX3XN4tPEFxGX5AwAeDD4lKfd57r2SWAvfeEkMGmB70/omoe7J4tzXxcXFbN0s5iuzXJKg2gCAS5YdLjFS5rXNtGw/pbl6WtehxbOu4XhJrz5cvgexZ8zFKj2HbQB68sknMWDAAJMhBZYvX47mzZtjzZo1uHPnDu655x688cYbaN++vQ1rSkRERERlxolHiSod5mJEREREVQBzMbvgsA1AAODmZtrj2cXFBZMnT8bkyZNtVCOF3OTflrZhScJ4kFuGMN7G76o4Xl2+W/SKK22E8Vu3nGS3cfeTXWUiwNXQDD+4wXFlGxW5kesljPu65Fi0H3P78nTOk93mfIa01woAXM2uLoy7qWV6n6hL+dbzcpeEHqt/CjdyxT0bfopvKYynFUj3AwAn0qR3QhQT9h4BgBSZDcz06HBRaYRxT6dcYdzfVb6LRn3PG8K4X4HMnQNpMjvygOw/nXsDLwrjaxMaY8+tOsJ1oyNjhfGpYZuE8Zv1PIXxbjvGSWK5rg799UxEVH6YdBBVSnabiwGA3M2pl8VhbYZWdlf5CfnCuCZNnCt4tKomjCNc9hDALTPrjBSkGs7P3Rq7AcekZbS54ufi5CnOBQtzC6FyFn/Bqsoy4LxMaucSKO6l7uwrrpcmQ5yLAIBznpnz7HRxWO44Xm3FeaXaSyZ3FqcDOjLpY2GWeO4atbv8C6xJEe+sQOZ5qFzl9+XewB2adOnrmXtJPg+X+9y7BMvcbXBTdldAsDischV/7m6uEOeOrhHyd8T7PeknibUNuG6mUjrdFi/BjtEjSy1HROSwmIvZBV5hrAS8O39oGri/mW0qQkRERGRvmHQQ0V3yetR0GNcEjrBJREREVDrmYnaBDUBERGR1qnRBj0FBTFvDp8zHiM8xbBvglmXx9gfvSLvavh21WRLrHBAHAMiHUY9K+U6n5erntbrb8FQQ3x1a/PqpbonvEpWUL59qCT34+5P65b8eWVmBR7KuZOEdpeKeulRBmHQQERERKaa6JL3lSjQNj39Lv7s7UNFNV/dAcFdWaemZ6IYt0QA3RnftOUda9xLnfefHml0f1Ur3+/QJZbnomr2haNFcPGLK3frYpYd++Y38rRVyDFsQjXzj42z5KEF0F5iL2QWHaQCqW7cuVCoV/v77b0RGRqJuXcHscDJUKhUuXLhQgbUjokohG4DMqBpUcdJj3wQAePf81PKNM4pO3uoF6UP9O8jNGKnzZcvVAIAmf09SfJjnDz0uickN8aeE3065sWNMtcarisp19r9U5rpYQpWUql8ubbJSa9jcwdAj++NLuqTljfrmE5b/XWuraN/FE6zK+aOgqST2/KHHFO1bddr8Z7RYco5heBRVqrLEMONndkuXYNJBZHPMxaoutZsaWk35dCHJ2pSFavfyZF2pgtsFcPZ3mEs6lUpirel4OHuUratRLtI3T9Ave4363qJtb8UbOjXN66nrCPe49oj5jc4bLddSeKA6gliCwm0FsmOV5WKuYa5I7ysexrEkvxvK9nm3jv6na/l68H6rHM68w0bLdYyW48xsY2aaABPGX/WCNi91XemwlGfriKdlEHnjWF9F5W7k6N7/gst3FJVPevVhxXWoMpiL2QWHOVu4dOkSACA/P9/kMRERERE5MHXRj5JyRFQhmIsRERERVUHMxeyCwzQAFRYWmn1MRERERA6Ivc6IbI65GBEREVEVxFzMLjhMAxBZ5ttLHWTXuasLKuy4R1JrVti+y0NCtpn5Rqpbrx5V0e08T1tXwWKzz94njHfqKL4n+vTt4IqsDhFR1cSkg4jsjGu4KwBXqx/XubodpP9yOdctq9aiylE5lV6msnFrKpokBsAmwDVCus7Jyw6fJBFRZcdczC7YwRlg2cyYMQMtW7ZEv379zJb7888/cfjwYUydOtVKNRNwdTF97O4iLgfA0ylPGHeTabTxd7V84vPVFxqLV8hXCw8Gn7b4OLka8cfvYIp4oNggN/Ek5gVa8X2EfYJPyh57xdU2pdROqqmPeBBaf5dMYfx2vkyDRsn3u6QC8ezxovkqhtbeL7sb8cTkwK08+XG1T6cHiVeUod2i0Ev87Z58QzyviKez+LMNAFez/cQrZM75U/w9ZPflp5GO3Zvi5IHpjTYIy5/PCJTdV3lxcxL8/cp8DqoCbcsIs+vXHAzXLWSLPzPTGtl+7hoTLcysO2q1WiijrrxnZW+EFs39I/7KtU+5+aWXoVIVQoVCBRmFkjJEVD7sKhcDgBA/08cy/2u0GTJz3RTIz4GjybTwnO4eM+vk5ga/btkhAAAyN2k5B4pztILb8p0EVc4y368y5xXVmlk+z4/c8Qtzxa+92cYuc3Osy6RqTkEy+4sXn486+5hpbJBr+/OTObbcvtQqaGXeR5dQ8UHU7paPwSPXcCIXdw50gVsd6cTsAJB7RfziZx+Sv27h0V7m81Ke/9ZLvI5NbiubSzTS83Y5VqLyWDZ0h+y6jYjSL4uuH7zi/k+F1KmsPKLkrw2QBSy/5GczX17srLhs/i3d9SFmCWXHXMw+OGwD0PTp0zF8+PBSk44//vgDS5YssX3SQUTk4NK3vKpf9u7+iQ1ronM0NQwA4OuSY+OalC6n0Pr/rrV+yi7OvN7EkCDO3tNO0TZ/JekSx7fq/C0ukCiISdvAhZ6pdUC/j7M+yicKBYB3TjyoX75tprG8ImhFnT+qGS7eZKwabcXa2BeNVg2NTGeQkuWIyDqYixERVT4ZXz8NAPAatsy2FQEA655q3z1xm2aFuTfwoqJyrdKu6Zc/zumhbOfGKdJN6eqCZGmDu+I7SI0HQynLKDpF/dGztYLcSNqXt9xovaRvcHCooYPBxfEDKu7gdo65mH1w2AYgpTQaDdRqfgiJiIiI7JFGq5a9G7hkOSKqXJiLEREREdkv5mL2ocq/+idOnED16pzchSo32WH5iIiIqriCoqRDyQ8RVS7MxSzgSEOgVmGasxU33y7pBE203ryrO0aPtNqxiIgqI+Zi9sGh7gAaOdL0n++uXbsksWIFBQU4c+YMDhw4gP79+1uhdkTkCA59LZ4LykTHiq8HERHpcNgBosqBuRgRVbSw/ykbhumk55IKrgkREQHWy8U+/PBDvPnmm3jllVcwd+5cAEBOTg5effVV/Pjjj8jNzUVMTAwWLlyI4GBDR4ArV65gzJgx2LZtG7y8vDBs2DDMmjULzs6GJpHt27dj4sSJOHHiBMLDwzFlyhQMHz78rupb2ThUA9CyZcv0yyqVCufPn8f58+fNbtO8eXPMnj27gmtGRETG0re/BgDwjplb9p3E3zEsh0l7D2/putDs5q8cNSSQns7SCXy/u6Kbz2ZknX/N7kfUk6WgmzTmkZIviR1q8al+OfS7MQAAt0aB+tj9QWfNHvvhh3TdgdceqqmPqQ5fkpTT+iib/FSVZW5WZLFXQ7cblgfqlj+43ksfS8uXjqdcHJt87mF9rFPAJUOBoqlvnFSGGXn74KSi+ow//igAYG7d33APbpisa7jnTWQVSCdFvtrlXQDAzPD1ZvcduvNdRXUg61Lao4y9zogqFnMxIiL7kLF8uH7Za/zqMu9n1pF7AQBvtvxHXGC/mY2bGS1LUzHTeWrM9cHUSkMeHQS5T6p4c78duollurq8pI/NbvYnAKAjLpk5MLCt6QIAwLL09vrYm981kVYxMsjsfoqpkmQqaUbhEUO+9Bp086v+3Lo1Hnc9UnRwwUbGsaii30aHdg4tulSsMSp3XWGF6hstC04BLrQOkMTq/iOdiMhd9KHoqrAOZFXWyMX279+Pr776Cs2bNzeJT5gwAevWrcPq1avh6+uLcePGYcCAAdi9ezcA3VDDffr0QUhICPbs2YOEhAQMHToULi4u+OCDDwAAcXFx6NOnD1544QWsWLECW7ZswXPPPYfQ0FDExMSUuc6VjUM1AG3btg0AoNVq0aNHDzzwwAOYNGmSsKyrqyvCwsIQERFhzSoqUtfrtuy6ILcMYTw510sYX3G1jTAe6p6GP683Eq5TuauEcW2O+Hb1n7uvEMYldbliWpf4HB9hOdGFWEB+ovYw9zRFxy+2P6U2Btb8T7hu2SX5Cczl6itnW3J98Yo86UXgu+HuJH5fIquJP0cBrlmWH0TumrCZiRvV+aIzDcBH5n3cdkPm9QLQ1Ec0Izxws8BTGA80N0aGuFrwuyWeUbC8LxgOP/CkJOYveE9UeRwegqjSSU43vz6j6PvN0818OePGS3O7WzVaUbmqTlOoRkGhgl5nCsoQUdnZdS5WoDF9LHcqWSgOq7xlvl/cAI9AwYXIDAANZI5hLrXxF4dzTyvrwOESZDSptsyE5k7VxM8lP0nmJBqANlf8whRmaoTxvOvifM+1m7STRjFnf8suXThFOsmvFKcQRRtadBho0sTPMd9NfC7v3skdsDAdLMwUv74qZ3HeDgCQeR+hFb+PLsHyr31evPj9UnvI/1/NT7bsSeZeEn+G/UaW7xCR3o95i1eUuMxyK9nMa0tENvFngrRxzZhxx8P7g87IlvvqYHPZdcYujld2x2FVV9G5WEZGBoYMGYKvv/4a77//vj6empqKb7/9Fj/88AN69OgBAFi6dCkaNWqEvXv3omPHjti0aRNOnjyJv//+G8HBwWjZsiXee+89TJo0CdOnT4erqysWLVqEyMhIfPqprnNuo0aNsGvXLnz22WdsAKqsunXrpl8eNmwYunbtahKjuzex2W5bV6HS2Xen4hPXwQ2V9Xy/W/W9pD0viIiIKjMOAUdUOTAXs4Ijtq5A5eMWUUqni3KiTZdp/StPKRV/CCIiovJkaS6Wlmba08XNzQ1ubvL/y8eOHYs+ffqgV69eJg1ABw8eRH5+Pnr1Mow+EhUVhdq1ayM2NhYdO3ZEbGwsmjVrZjIkXExMDMaMGYMTJ06gVatWiI2NNdlHcZnx48eX+pzsiUM1ABlbunSpratARERERBWsQKtSOOwAe/MSWQtzMSIiIiLHZ2kuFh4ebhKfNm0apk+fLtzmxx9/xKFDh7B/v3Q8ycTERLi6usLPz88kHhwcjMTERH0Z48af4vXF68yVSUtLQ3Z2Njw8lA2nX9k5bAMQmZdg4XBmRKRcrZF9kL7/bUn8QQA4sNbq9SEicmQFUDjuNHgHEBFVEuLRu4monISvPyWMp6+OtnJNiIgcm6W52NWrV+HjY7gmLXf3z9WrV/HKK69g8+bNcHeXGbeWFHPoBqCsrCzMmTMHv//+O86dO4f0dPHY/SqVCgUFnG+jNCr3u/u4dAqIK6eaULE9tyPRo8Y5W1fD7vkViOf/oYqXvnG8ftn7/s8AAKoT1/QxrbvRWPWF8mPP45phzqsBe0dKVl+8bBjXvFtUMgBgx7kQS6uLJa1XSmLZhS6CklIhO6fpl1VxyZL1m0auUbSf3u93F0QNM6Nqq+lOoFSFhqFKzM4pZfy6qg0nbqpTymb6fKn+QP3y6qvNJOuHRx5QtJ9+t44bHshPhYfxfo8q2h+MhrJvvetVALo55rIKdCvy7xjGmg/5c7LsbhL7fqjseADgVXRieuWW2WKqfPF8AQCQvuEV5ccjABwCjqiyYi5GVDXJzf1ElVPG3McAAF7jftTHhv+mm/dCG2g0Z1KBaBhEXWzWgS76yCsP/iMp9c2djvrl5wL3AgB+SmmpqH6PVzsChBY9ELXryU9fZeKPJk31y7PP3idZv9NtvuHBWfn9LAttj8nb7pUvYHRzgypDl2+oUkqZhzm/6H+g2nC3+tP7h5jfpsiJ1h/pl39CS8Nynm75cZcjivZTcNjwf7ggxfz/ZPd+Ci/GF82pdqFFgHD1vtu66RT2NTU/rcLg4wcVHa54vukvL3Y2W06VY/79yPj8cUXHIx1LczEfHx+TBiA5Bw8eRHJyMlq3bm3Yh0aDf/75B1988QU2btyIvLw8pKSkmNwFlJSUhJAQ3bWekJAQ7Nu3z2S/SUlJ+nXFv4tjxmV8fHwc5u4fwIEbgFJTU9G1a1ecOHECTk5OcHV1hVarRWhoKBITE6Etmvyw0kw8SkREREQWq+iJR4nIcszFiIiIiBxfReViPXv2xLFjx0xiI0aMQFRUFCZNmoTw8HC4uLhgy5YtGDhQ1yn1zJkzuHLlCqKjdXd7RkdHY+bMmUhOTkZQUBAAYPPmzfDx8UHjxo31ZdavX29ynM2bN+v34SgcNhP+8MMPcfz4cYwePRppaWkYNGgQVCoVrl+/jszMTCxbtgwhISHo0KEDLl68aOvqEhEREVEZ5Ba6KP4hIutgLkZERETk+CoqF/P29kbTpk1Nfjw9PREQEICmTZvC19cXzz77LCZOnIht27bh4MGDGDFiBKKjo9Gxo+6uw969e6Nx48Z45plncPToUWzcuBFTpkzB2LFj9UPPvfDCC7h48SLeeOMNnD59GgsXLsRPP/2ECRMmlPtrZUsOewfQmjVrEBYWhnnz5sHFxQUqleFWSnd3dwwdOhRt27ZFq1at8Omnn+K1116zXWW1psMaXbzpLS6nUuHircbCVROb7RbG55/vKntYL9d8YTyzQHwP7aYui4Tx1AIPOKtEtwObauB10+Sx6BZBc8PEtfCNF8adVTK3mOfKhAvL9rFPyxff+jew5lFh/LNz3YTxRsEpssc4daeGMN7G76rsNlHeSZLYwTvhgpI6ybnyg45/EC5za63caEbmxi83M1qXiLk6+7uKb9GV62VwU+0pu6/AO5niFYK7nIcmD0GQW4bsvsoi3CNFEovyNh0O7PevxH+bEp7isVKJiKqSAq3Ccac5BByR1dhVLgYABYZ8IuFxcc4DAKoQlXjFeaAwTZoPqaPMfO/I5Cpysv+SH7JG5abs+y0/IU+/7BYqHsJHkyXO6zSp8kMCqT2dhHFtvkxCUHrqKCVz2pt9RjyUs1trM+fJl80cR2aE4OzT4uMUpIlzUbc6Zo5vZvQkzQ3p/gpzxS+Ys7f8xbTCHPE2KmfxZ9illvy+ChLF731htvwbqfYQfyY1MkNL5d+Q5j9BbwaX7bNijmAkSu0d6edUdV6aYxMRkZQtc7HPPvsMarUaAwcORG5uLmJiYrBw4UL9eicnJ6xduxZjxoxBdHQ0PD09MWzYMMyYMUNfJjIyEuvWrcOECRPw+eefo1atWvjmm28QExNT7vW1JYdtALp8+TJ69eoFFxfdiYy6aF6D/Px8faxx48bo1q0bli1bZvukoxL5LXqpravgECY33CKML45zrNsIq5peY30lseRcL+x+frj1K0NCbfx0cwjdyqumj9VpJC3X4x5do/LWs2GASuaCDoD1pw3D04ScfVOyPu7xT8paVSSM/1JRuWNpoej9xUNFj0oZQ/ouaF2NTgsyzFyZ8jJc1PB0NpRTOt+PLTmpdVcSFDazYsb13vrlMR3/k6z/cm/z8qgW3QXOAURU+TAXK7u82LzSC5Ei2TvF50we7aoJ41T5xT//qzSoBrwHx1q/MiSWarRc1If2Oc+9hlhRW+rjbkf0oS3ae2R3t6XAsO5qLT/J+uHJ+yQxS+wsnG9SLzkPuD6vW7hmvtzd0vrretneijff+hkQVnRea5S+PY4jFVSr8pMl0+HcHFUTXa7+KrZL1n2a2/0ua0R3y5q52Pbt200eu7u7Y8GCBViwYIHsNhEREZIh3krq3r07Dh8+fNf1q8wctgHI3d0d7u6GrjXFE0wlJiYiPNxwp4G/vz927xbfPUNERNaTvtn8LbZefeabXW8rHmpdU8IHZ3th3inzE04Wu69z+d5ZVpktu9BWdl1ivekW729uym+GBx3ly1lNcprFm2hdinpKG3U4zVg7rpwqVPVoFPY6szTpmDVrFn799VecPn0aHh4e6NSpEz766CM0bNhQXyYnJwevvvoqfvzxR5NeZ8HBwfoyV65cwZgxY7Bt2zZ4eXlh2LBhmDVrFpydDafh27dvx8SJE3HixAmEh4djypQpGD58uEl9FixYgNmzZyMxMREtWrTA/Pnz0b59e4ueE5G1MBcjIrIvGV8MNrvec8qfVqqJhYzazP+o21TRJjtbGuWVh8q5PpXMT/ktza4fsNvyDnw5f+QAANybmbmd0Uq23Whg8TZaP6NOAFm6D1Dm7AHlVaUqp6JyMSpfDvvqh4eH4+pVw7BZUVFRAIAdO3boYwUFBdi/fz8CAgKsXj9H4utcSlcJIgdnq7t/0jeOt8lxiYgqk4JCFQqKJh81/yN/p5/Ijh07MHbsWOzduxebN29Gfn4+evfujcxMw1CiEyZMwJ9//onVq1djx44diI+Px4ABhgRSo9GgT58+yMvLw549e7B8+XIsW7YMU6dO1ZeJi4tDnz59cN999+HIkSMYP348nnvuOWzcuFFfZtWqVZg4cSKmTZuGQ4cOoUWLFoiJiUFysukQokSVRZXLxerbugKOIW9b+d39lLIypdz2VZ7yj/IOr/LGu3+IiGynonIxKl8OewdQ165dsXTpUqSnp8Pb2xt9+/bFyy+/jJdffhkZGRmoWbMmvv32W1y6dAlPPfWUratLRJVM2OxBUDI4e69hnIeHiMiWKmrYgQ0bNpg8XrZsGYKCgnDw4EHce++9SE1NxbfffosffvgBPXr0AAAsXboUjRo1wt69e9GxY0ds2rQJJ0+exN9//43g4GC0bNkS7733HiZNmoTp06fD1dUVixYtQmRkJD799FMAQKNGjbBr1y589tln+rGn58yZg1GjRmHEiBEAgEWLFmHdunVYsmQJJk+ebNHzIrIG5mJEZRAC4IatK1E5tOj8PvBP6eUS7q2cIwQQEVUVHI7bPjjsqz948GA0b94ce/bsAQCEhYVh1qxZSElJwdixY9G/f3/88ccfCA4OxkcffWTj2hIRERFRWRRPPKrkBwDS0tJMfnJzlc3EnpqqG9Te398fAHDw4EHk5+ejV69e+jJRUVGoXbs2YmN1vZFjY2PRrFkzkyHhYmJikJaWhhMnTujLGO+juEzxPvLy8nDw4EGTMmq1Gr169dKXIapsmIsREREROT5LczGyDYe9A6hLly6SpHjixIno3LkzfvvtN9y5cwf33HMPRowYoU/kiahq2u5SH3Cx3vFOXfcxfewRaPJYjaPWqwxVOVpnJ0lMpTE/yailll9uZ3zEct13WQS4GCaBvp3HiZ8djdKEoriM8fwjADBt2jRMnz7d7LaFhYUYP348OnfujKZNdePLJyYmwtXVFX5+fiZlg4ODkZiYqC9j3PhTvL54nbkyaWlpyM7Oxp07d6DRaIRlTp8+XcqzJrIN5mJEZAm/B6ubBiyfYlG5hqYPVSmCYYn2VuDxqUrTeklHEFHllP+F8cs+RX9Tt8t91xarV+2WfvlYWqgNa0IVwdJcjGzDYRuA5HTo0AEdOnSwdTVMKbzwVttfftLwHI34rcwvlP8Da+J7UxgP97gjjJ9ODxbGAcDfNUt2nbFzGYYL3Z5O4vGPc2Wey9VsP2E83CNFfDAzn265eYt8XXNkt3FzKhDGMwtchfF7Ay8I4/MvdJWvWI74NTE3sV3/sGPC+D836wnjTXwSZffV3fW8eIWnzAbmRj+Tef2PpoYJ45ka8esIAKHu4gxA7hbSEOd0+XppBDErNv5Q2WWsewkA4H3fp5J1A58teyPD4OZn8eOxhqUXlBG6QFcvaLVQQXdyqw03zGfQOeSKZJvcQsv+/fb+sAfgVfTAz3wDhuqmmc9/OVGlZGHoiMzSC5YmRBz+n09bSewZd8EEpSmCjYu+xu7XjDF7aPcA83/4bfyumV1vlsx3eUkZa8eV/RikZ+mwA1evXtVPSA8Abm6lD+U5duxYHD9+HLt27Sp7RYmoUuZiXk8slgbl/k3Hy8RvA2o3wfeQufmxb4nDBbfFOYdKDai9pJ04AECbr+w8SF3NaHuZaVy1eeJ9OXmLj22OykU83r+20Ex95dLKfJljyEwpUJhdiJzz0tyu+mB/831TZPKeas3FK3LXiXNnJz8z53oyaX3az6nCuLPMvtQe8v/7VE7iF8a1tsz/PDOnRXKfSajl53PQpIi3Kcy1fccgKpvM9/sCALxGLBeuT3hskTWrozfUbYh+OfOy7prClKjN+lgr9V2c08to2UA+3zp6SPDHZO47r4xONCufu2edg6TfL86dBd85oj5Hgu/r3CuGO+vdRpg/x27qkyC7rpmb0ToLp7zM1TgjP1Pme6uEzNkDSi9EZnEIOPtQ5RqAiIjK0+YtnvDashQAoEpMKbV8w0drVHCNiIiqFo3CXmfFSYePj49JA1Bpxo0bh7Vr1+Kff/5BrVq19PGQkBDk5eUhJSXF5C6gpKQkhISE6Mvs27fPZH9JSUn6dcW/i2PGZXx8fODh4QEnJyc4OTkJyxTvg4iIqCr62L0H8OvbAIA5sW1KLZ/YqKJrRERUtViai5FtOPyrf+TIEYwePRqNGjWCr68vfH190ahRI4wePRqHDh2ydfWIiIiI6C4UFKoV/1hCq9Vi3Lhx+O2337B161ZERkaarG/Tpg1cXFywZcsWfezMmTO4cuUKoqOjAQDR0dE4duwYkpMNXRc3b94MHx8fNG7cWF/GeB/FZYr34erqijZt2piUKSwsxJYtW/RliCor5mJEREREjquicjEqXw59B9CMGTPw3nvvQaMxHfPpzJkzOHPmDJYsWYIpU6aUOu47Wc/RlJqI8k4qveBd6OJ7EccyHXvc0YdDT8gOAUe2dea3G0B78z3PCx9oIYxnTnmgIqpERGTXNP9v787jmyrT/o9/0710gyJLqwgomyDIgCgoMqAoKC4ozzyCGwiOyhQUUVwRGdGfy4gCiqKjA+gIjI6POoCiDJuigIKAIsugLDrQArJ1ge75/VFIG3KfNGnTpCf9vF+vvkiuc+ecK2lpc+U6577l47QDfp73lJGRoTlz5ujjjz9WUlKSa82elJQUxcfHKyUlRSNGjNDYsWOVmpqq5ORkjR49Wj169FD37t0lSVdccYXat2+vW2+9Vc8//7yysrI0fvx4ZWRkuKaeu/vuu/XKK6/owQcf1PDhw7V06VK99957WrhwoSuXsWPHaujQoTr//PN1wQUXaMqUKcrLy9Ptt9/u13MCgsmutVjarNuVecfMUKfhwRnY5fqAOqnplnHKavuXSsdlDvP8HZA0YJVhJADUbTVViyGwwrYB9M4772jixIlKTExURkaGhgwZohYtWkiSdu/erblz52r69OmaNGmSzj77bN16662hTRgA4JOcZfd73Z54y988YjdeZV7z7CTHf6znH66o1aWG5p1rWavyedBLnEdctzPzyx6z41fPOZCbbn/QM5e88nmTtbtC3rnWa5Q58i0mxj+FM8b7n32Hj2vSyeHQ27MS3ULOtPrld9pVGBpV9ro4s63zt5JuWP/rSIN4j1i7Tx7yaX8dU/dpXOtlPo1demLttddWdigP/myagNqwFlJc+dzfuf+8y6fjoepqauHR1157TZLUu3dvt/jMmTM1bNgwSdJLL72kiIgIDRo0SAUFBerXr59effVV19jIyEgtWLBAI0eOVI8ePZSQkKChQ4fqySefdI1p2bKlFi5cqPvuu09Tp07VGWecoTfffFP9+vVzjbnxxht14MABTZgwQVlZWercubMWLVqkJk2s12cEQolaDADC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M/TDDz9o+PDhql+/vu68805J0tdff60hQ4bomWee0dVXX605c+Zo4MCB+u6773Tuuea/gwBCwPArpviwVTEiRe6zeLPcUFK6eVPiBYnGePZyb2/Kyzljy+uWkj3m3IoyC43x0uMWb+IjrIsxh9WnDV5OQy3JLjHGI5MtXq9o632Zco49M9YwslzHwkyv208Vdbr5SeZ9Za7DJSmhm8X3cZn5+1h8xPrnKKLI/GJGRJvjpXnm76NVXJISeyTp+L89i7XE8xOM4wt+KVB8W886WJJyv8rxDF7i/XsCAKjF/KzFmjVr5hZ+4oknNHHiRK8PLS0t1ZgxY3TxxRe76p+srCzFxMSofv36bmObNGmirKws15iKzZ+T209u8zYmOztbx48fV3y8+e+Z3dAAAgAAgH3V0LQDV155pa688krjNqfTqSlTpmj8+PG67rrrJElvv/22mjRpoo8++kiDBw/Wli1btGjRIn377bc6//zzJUkvv/yyrrrqKr3wwgtKT0/Xu+++q8LCQv3tb39TTEyMOnTooA0bNujFF190NYCmTp2q/v37a9y4cZKkSZMmafHixXrllVc0Y8YMv54TAAAAAASMn7XYr7/+quTkZFc4NrbykwAyMjK0adMmrVy5sspp1nVMAQcAAAD7cvrxpapPO1DRzp07lZWV5TZdQEpKii688EK3KQfq16/vav5IUt++fRUREaE1a9a4xvTq1UsxMTGuMf369dO2bdt0+PBh15i6MC0BAAAAAJvxsxZLTk52+6qsATRq1CgtWLBAy5Yt0xlnnOGKN23aVIWFhTpy5Ijb+H379qlp06auMfv27fPYfnKbtzHJyclhc/WPxBVAtpP37EBJUlKPLUE/dtMPxuuejquDflwgVByZh93u504fEqJMAACWgjDtwKlOThlgmi6g4nQCjRs3dtseFRWl1NRUtzEtW7b02MfJbQ0aNLCcluDkPgAET9LvTzRen3/ZLZ624CZlDphTo8dOvCNR+r5GDwEERGXT7PkqJ919P+mdlwdkvwCAAKqh6bidTqdGjx6tDz/8UMuXL/eombp27aro6GgtWbJEgwYNkiRt27ZNv/zyi3r06CFJ6tGjh55++mnt37/fVZctXrxYycnJat++vWvMqeurLl682LWPcEEDCAAAAPYVhGkHAAAAAACnqKHpuDMyMjRnzhx9/PHHSkpKcp38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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ms_data.plt.spatial_scatter(show_plotting_scale=False, reorganize_coordinate=3, horizontal_offset_additional=1000)" ] }, { "cell_type": "code", "execution_count": 7, "id": "5bf6ce6a-78eb-4486-8c6e-e18aff7e4990", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:02.363857Z", "iopub.status.busy": "2025-02-20T09:32:02.363654Z", "iopub.status.idle": "2025-02-20T09:32:02.929010Z", "shell.execute_reply": "2025-02-20T09:32:02.928503Z", "shell.execute_reply.started": "2025-02-20T09:32:02.363842Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run normalize_total\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run normalize_total...\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: normalize_total end, consume time 0.0656s.\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run log1p\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run log1p...\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: log1p end, consume time 0.4918s.\n" ] } ], "source": [ "# ms_data.tl.filter_cells(min_genes=20)\n", "# ms_data.tl.filter_genes(min_cells=20)\n", "ms_data.tl.normalize_total()\n", "ms_data.tl.log1p()\n", "# ms_data.tl.scale(zero_center=False)" ] }, { "cell_type": "markdown", "id": "2b3649a3-199a-4222-bc2c-0a3337f969a9", "metadata": {}, "source": [ "## UMAP without alignment\n", "\n", "We can use UMAP to inspect the effect of Spatial Alignment Integration." ] }, { "cell_type": "code", "execution_count": 8, "id": "0ae1101e-0540-46aa-8ce6-84613710f553", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:02.929635Z", "iopub.status.busy": "2025-02-20T09:32:02.929502Z", "iopub.status.idle": "2025-02-20T09:32:38.679766Z", "shell.execute_reply": "2025-02-20T09:32:38.679181Z", "shell.execute_reply.started": "2025-02-20T09:32:02.929623Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run pca\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run pca...\n", "[2025-02-20 17:32:02][Stereo][3375092][MainThread][140719273752384][dim_reduce][78][WARNING]: svd_solver: auto can not be used with sparse input.\n", "Use \"arpack\" (the default) instead.\n", "[2025-02-20 17:32:29][Stereo][3375092][MainThread][140719273752384][dim_reduce][99][INFO]: x_pca dType is changed from float64 to float32\n", "[2025-02-20 17:32:29][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: pca end, consume time 26.7350s.\n", "[2025-02-20 17:32:29][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run neighbors\n", "[2025-02-20 17:32:29][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run neighbors...\n", "2025-02-20 17:32:32.533106: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n", "2025-02-20 17:32:32.709442: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n", "2025-02-20 17:32:32.711024: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2025-02-20 17:32:33.582253: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", "[2025-02-20 17:32:36][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: neighbors end, consume time 6.5504s.\n", "[2025-02-20 17:32:36][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run umap\n", "[2025-02-20 17:32:36][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run umap...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\tcompleted 0 / 500 epochs\n", "\tcompleted 50 / 500 epochs\n", "\tcompleted 100 / 500 epochs\n", "\tcompleted 150 / 500 epochs\n", "\tcompleted 200 / 500 epochs\n", "\tcompleted 250 / 500 epochs\n", "\tcompleted 300 / 500 epochs\n", "\tcompleted 350 / 500 epochs\n", "\tcompleted 400 / 500 epochs\n", "\tcompleted 450 / 500 epochs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:38][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: umap end, consume time 2.4514s.\n" ] } ], "source": [ "ms_data.tl.pca(use_highly_genes=False, n_pcs=50, res_key='pca')\n", "ms_data.tl.neighbors(pca_res_key='pca', res_key='neighbors')\n", "ms_data.tl.umap(pca_res_key='pca', neighbors_res_key='neighbors', res_key='umap')" ] }, { "cell_type": "code", "execution_count": 9, "id": "78313e52-616b-49f8-b56d-2ffda8837e0e", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:38.681010Z", "iopub.status.busy": "2025-02-20T09:32:38.680413Z", "iopub.status.idle": "2025-02-20T09:32:38.944777Z", "shell.execute_reply": "2025-02-20T09:32:38.943527Z", "shell.execute_reply.started": "2025-02-20T09:32:38.680994Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:38][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run batches_umap\n" ] }, { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ "Column\n", " [0] Markdown(str)\n", " [1] Row\n", " [0] Column\n", " [0] Bokeh(Figure)\n", " [1] Column\n", " [0] Row\n", " [0] Bokeh(Figure)\n", " [1] Bokeh(Figure)" ] }, "execution_count": 9, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "1129" } }, "output_type": "execute_result" } ], "source": [ "ms_data.plt.batches_umap(res_key='umap')" ] }, { "cell_type": "markdown", "id": "74ba2424-228e-4d2a-8e9a-d346280a2550", "metadata": {}, "source": [ "We can see, the distribution of these two batches of data on UMAP space is so different, they are separated from each other obviously." ] }, { "cell_type": "markdown", "id": "2c3859e3-60f4-4ac9-9788-b19f59f61bf4", "metadata": {}, "source": [ "## Spatial Alignment\n", "\n", "This function will ouput a corrected full expression matrix and a reduced dimensional matrix.\n", "\n", "By default, the corrected full expression matrix is saved in `data.layers`, if the parameter `inplace` is set to True, the original expression matrix will be replaced.\n", "\n", "The reduced dimensional matrix is stored by key **'aligned_reduction'**, you can specify the dimensions to reduction by parameter `latent_dims`.\n", "\n", "More details about other parameters in [API](../content/stereo.algorithm.spatial_alignment.SpatialAlignment.main.html)." ] }, { "cell_type": "markdown", "id": "804a960e", "metadata": {}, "source": [ "**Spatial Alignment** can be run with the data only containing highly variable genes, this usually can lead to better performance, in this case, the data will be filtered to only contain highly variable genes after running **Spatial Alignment**." ] }, { "cell_type": "code", "execution_count": 10, "id": "dacad033", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:38.947341Z", "iopub.status.busy": "2025-02-20T09:32:38.947124Z", "iopub.status.idle": "2025-02-20T09:32:38.951137Z", "shell.execute_reply": "2025-02-20T09:32:38.950207Z", "shell.execute_reply.started": "2025-02-20T09:32:38.947313Z" } }, "outputs": [], "source": [ "# ms_data.tl.highly_variable_genes(\n", "# min_mean=0.0125,\n", "# max_mean=3,\n", "# min_disp=0.5,\n", "# n_top_genes=2000,\n", "# res_key='highly_variable_genes'\n", "# )" ] }, { "cell_type": "markdown", "id": "cb2f4a9e", "metadata": {}, "source": [ "Here we run **Spatial Alignment** with entire data, if you want to only use highly variable genes, you need to uncomment the codes in the notebook cell above to run `ms_data.tl.highly_variable_genes` beforehand and set the parameter `use_hvg` to True." ] }, { "cell_type": "code", "execution_count": 11, "id": "5e2b69b3-227e-43d5-aa2c-6d138224706a", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:32:38.951917Z", "iopub.status.busy": "2025-02-20T09:32:38.951736Z", "iopub.status.idle": "2025-02-20T09:45:05.909546Z", "shell.execute_reply": "2025-02-20T09:45:05.908073Z", "shell.execute_reply.started": "2025-02-20T09:32:38.951901Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:32:40][Stereo][3375092][MainThread][140719273752384][ms_pipeline][115][INFO]: register algorithm spatial_alignment to -140717210444080\n", "[2025-02-20 17:32:40][Stereo][3375092][MainThread][140719273752384][dataset][144][INFO]: The spatial coordinates specified by spatial are used to calculate nearest neighbor graphs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2025-02-20 17:32:40 Method: 'init_bank' Running...\n", " Running time: 0.0 min 1.4996 s\n", "2025-02-20 17:32:42 Method: 'train' Running...\n", " 2025-02-20 17:45:02 Epoch: 139 Loss: 7.0915 Loss min: 7.0402 EarlyStopping counter: 15 out of 15\n", " 2025-02-20 17:45:02 Model Training Finished!\n", " Running time: 12.0 min 20.3509 s\n", "2025-02-20 17:45:02 Method: 'alignment' Running...\n", "2025-02-20 17:45:05 Batch Alignment Finished!\n", " Running time: 0.0 min 3.1240 s\n" ] } ], "source": [ "ms_data.tl.spatial_alignment(\n", " use_hvg=False,\n", " n_neighors=15,\n", " is_undirected=True,\n", " latent_dims=100,\n", " tau1=0.05,\n", " tau2=0.01,\n", " tau3=0.1,\n", " inplace=False,\n", " is_verbose=False\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "6eb8ab1f-9a82-4ece-8b7a-3c4058460abe", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:45:05.912299Z", "iopub.status.busy": "2025-02-20T09:45:05.911523Z", "iopub.status.idle": "2025-02-20T09:45:05.951866Z", "shell.execute_reply": "2025-02-20T09:45:05.950342Z", "shell.execute_reply.started": "2025-02-20T09:45:05.912253Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...90919293949596979899
00.009977-0.091885-0.1069400.1450980.089974-0.0083990.162432-0.3142200.239323-0.151989...-0.2566120.202301-0.1696250.0707270.058331-0.072663-0.2130560.276813-0.194957-0.036370
1-0.076175-0.239181-0.1713210.2284860.0245120.0172610.080949-0.2530910.1233810.017464...-0.2851860.214535-0.1962080.0829460.0634500.009587-0.2168280.179361-0.280448-0.104205
2-0.036215-0.233678-0.1633430.1843960.1145350.1012970.147587-0.2991500.153697-0.072609...-0.2967510.125169-0.1829260.2244160.107030-0.019341-0.2761760.260968-0.242852-0.041470
3-0.062999-0.305679-0.1796290.0987370.1403920.2546990.062434-0.3221860.101131-0.168877...-0.189232-0.007272-0.2693270.2336750.1389230.048628-0.3112990.243654-0.2762280.054752
40.081919-0.314154-0.1316690.0228880.0376660.142007-0.056440-0.3234570.072555-0.095923...-0.2214950.058406-0.2094000.0870030.0997480.104273-0.2975790.188548-0.2739730.052728
..................................................................
23020.3561440.0785170.435474-0.211080-0.091554-0.124335-0.0880070.018068-0.3674420.370240...-0.355697-0.0234870.2746310.198752-0.272967-0.418953-0.037732-0.2023960.363269-0.308682
2303-0.006577-0.2253980.1041670.171594-0.2650570.188282-0.1312740.209731-0.0666100.026982...-0.1158780.1068540.2995340.020559-0.024644-0.1579230.020815-0.281706-0.0184500.064131
23040.2357370.388830-0.197873-0.283984-0.0634940.065340-0.130950-0.2788780.273952-0.049268...0.479300-0.3186920.026394-0.2427040.4926870.289297-0.0695530.2868000.1561090.370372
23050.0302730.065268-0.096198-0.190912-0.1696390.747086-0.136572-0.2643830.152184-0.228118...0.198014-0.1319730.067535-0.2818410.290346-0.1563250.0068430.300321-0.121258-0.078710
23060.1759330.154506-0.121935-0.212189-0.2859670.216793-0.014016-0.147251-0.0181390.019123...0.0381610.0457210.067250-0.4661560.3593830.0226510.1341330.186027-0.064617-0.087383
\n", "

2307 rows × 100 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "0 0.009977 -0.091885 -0.106940 0.145098 0.089974 -0.008399 0.162432 \n", "1 -0.076175 -0.239181 -0.171321 0.228486 0.024512 0.017261 0.080949 \n", "2 -0.036215 -0.233678 -0.163343 0.184396 0.114535 0.101297 0.147587 \n", "3 -0.062999 -0.305679 -0.179629 0.098737 0.140392 0.254699 0.062434 \n", "4 0.081919 -0.314154 -0.131669 0.022888 0.037666 0.142007 -0.056440 \n", "... ... ... ... ... ... ... ... \n", "2302 0.356144 0.078517 0.435474 -0.211080 -0.091554 -0.124335 -0.088007 \n", "2303 -0.006577 -0.225398 0.104167 0.171594 -0.265057 0.188282 -0.131274 \n", "2304 0.235737 0.388830 -0.197873 -0.283984 -0.063494 0.065340 -0.130950 \n", "2305 0.030273 0.065268 -0.096198 -0.190912 -0.169639 0.747086 -0.136572 \n", "2306 0.175933 0.154506 -0.121935 -0.212189 -0.285967 0.216793 -0.014016 \n", "\n", " 7 8 9 ... 90 91 92 \\\n", "0 -0.314220 0.239323 -0.151989 ... -0.256612 0.202301 -0.169625 \n", "1 -0.253091 0.123381 0.017464 ... -0.285186 0.214535 -0.196208 \n", "2 -0.299150 0.153697 -0.072609 ... -0.296751 0.125169 -0.182926 \n", "3 -0.322186 0.101131 -0.168877 ... -0.189232 -0.007272 -0.269327 \n", "4 -0.323457 0.072555 -0.095923 ... -0.221495 0.058406 -0.209400 \n", "... ... ... ... ... ... ... ... \n", "2302 0.018068 -0.367442 0.370240 ... -0.355697 -0.023487 0.274631 \n", "2303 0.209731 -0.066610 0.026982 ... -0.115878 0.106854 0.299534 \n", "2304 -0.278878 0.273952 -0.049268 ... 0.479300 -0.318692 0.026394 \n", "2305 -0.264383 0.152184 -0.228118 ... 0.198014 -0.131973 0.067535 \n", "2306 -0.147251 -0.018139 0.019123 ... 0.038161 0.045721 0.067250 \n", "\n", " 93 94 95 96 97 98 99 \n", "0 0.070727 0.058331 -0.072663 -0.213056 0.276813 -0.194957 -0.036370 \n", "1 0.082946 0.063450 0.009587 -0.216828 0.179361 -0.280448 -0.104205 \n", "2 0.224416 0.107030 -0.019341 -0.276176 0.260968 -0.242852 -0.041470 \n", "3 0.233675 0.138923 0.048628 -0.311299 0.243654 -0.276228 0.054752 \n", "4 0.087003 0.099748 0.104273 -0.297579 0.188548 -0.273973 0.052728 \n", "... ... ... ... ... ... ... ... \n", "2302 0.198752 -0.272967 -0.418953 -0.037732 -0.202396 0.363269 -0.308682 \n", "2303 0.020559 -0.024644 -0.157923 0.020815 -0.281706 -0.018450 0.064131 \n", "2304 -0.242704 0.492687 0.289297 -0.069553 0.286800 0.156109 0.370372 \n", "2305 -0.281841 0.290346 -0.156325 0.006843 0.300321 -0.121258 -0.078710 \n", "2306 -0.466156 0.359383 0.022651 0.134133 0.186027 -0.064617 -0.087383 \n", "\n", "[2307 rows x 100 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ms_data.tl.result['aligned_reduction']" ] }, { "cell_type": "markdown", "id": "53766a58-1ef6-4daf-a256-ab12478c07d8", "metadata": {}, "source": [ "## UMAP based on aligned data\n", "\n", "Here you need to set the `pca_res_key` to **'aligned_reduction'**." ] }, { "cell_type": "code", "execution_count": 13, "id": "9e58bb77-9835-4621-b4dc-2a0f3661e592", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:45:05.953761Z", "iopub.status.busy": "2025-02-20T09:45:05.953400Z", "iopub.status.idle": "2025-02-20T09:45:09.270524Z", "shell.execute_reply": "2025-02-20T09:45:09.269895Z", "shell.execute_reply.started": "2025-02-20T09:45:05.953733Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:45:05][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run neighbors\n", "[2025-02-20 17:45:05][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run neighbors...\n", "[2025-02-20 17:45:06][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: neighbors end, consume time 0.2505s.\n", "[2025-02-20 17:45:06][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run umap\n", "[2025-02-20 17:45:06][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run umap...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\tcompleted 0 / 500 epochs\n", "\tcompleted 50 / 500 epochs\n", "\tcompleted 100 / 500 epochs\n", "\tcompleted 150 / 500 epochs\n", "\tcompleted 200 / 500 epochs\n", "\tcompleted 250 / 500 epochs\n", "\tcompleted 300 / 500 epochs\n", "\tcompleted 350 / 500 epochs\n", "\tcompleted 400 / 500 epochs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:45:09][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: umap end, consume time 3.0552s.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\tcompleted 450 / 500 epochs\n" ] } ], "source": [ "ms_data.tl.neighbors(pca_res_key='aligned_reduction', res_key='neighbors_aligned', n_jobs=-1)\n", "ms_data.tl.umap(pca_res_key='aligned_reduction', neighbors_res_key='neighbors_aligned', res_key='umap_aligned')" ] }, { "cell_type": "code", "execution_count": 14, "id": "6c17b1a8-1295-401a-91f6-eef85301295a", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:45:09.271382Z", "iopub.status.busy": "2025-02-20T09:45:09.271228Z", "iopub.status.idle": "2025-02-20T09:45:09.534852Z", "shell.execute_reply": "2025-02-20T09:45:09.533521Z", "shell.execute_reply.started": "2025-02-20T09:45:09.271368Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:45:09][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run batches_umap\n" ] }, { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ "Column\n", " [0] Markdown(str)\n", " [1] Row\n", " [0] Column\n", " [0] Bokeh(Figure)\n", " [1] Column\n", " [0] Row\n", " [0] Bokeh(Figure)\n", " [1] Bokeh(Figure)" ] }, "execution_count": 14, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "1522" } }, "output_type": "execute_result" } ], "source": [ "ms_data.plt.batches_umap(res_key='umap_aligned')" ] }, { "cell_type": "markdown", "id": "9875db6f-af5f-4173-9dc3-cbab3eee77da", "metadata": {}, "source": [ "The distribution on UMAP space which is created based on aligned data is almost overlap." ] }, { "cell_type": "markdown", "id": "650b06ed-cb46-465a-878c-8e98a163b8d9", "metadata": { "execution": { "iopub.execute_input": "2023-11-17T08:39:31.960887Z", "iopub.status.busy": "2023-11-17T08:39:31.960237Z", "iopub.status.idle": "2023-11-17T08:39:31.967495Z", "shell.execute_reply": "2023-11-17T08:39:31.965893Z", "shell.execute_reply.started": "2023-11-17T08:39:31.960832Z" } }, "source": [ "## Cluster based on aligned data" ] }, { "cell_type": "code", "execution_count": 15, "id": "eac16622-53ab-45e0-a7a8-ab1608839739", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:45:09.535969Z", "iopub.status.busy": "2025-02-20T09:45:09.535795Z", "iopub.status.idle": "2025-02-20T09:45:09.958263Z", "shell.execute_reply": "2025-02-20T09:45:09.957309Z", "shell.execute_reply.started": "2025-02-20T09:45:09.535953Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:45:09][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run leiden\n", "[2025-02-20 17:45:09][Stereo][3375092][MainThread][140719273752384][st_pipeline][41][INFO]: start to run leiden...\n", "[2025-02-20 17:45:09][Stereo][3375092][MainThread][140719273752384][st_pipeline][44][INFO]: leiden end, consume time 0.4079s.\n" ] } ], "source": [ "ms_data.tl.leiden(neighbors_res_key='neighbors_aligned', res_key='leiden')" ] }, { "cell_type": "code", "execution_count": 16, "id": "a1492b07-25a2-4ede-9281-bb8b9db4a7f9", "metadata": { "execution": { "iopub.execute_input": "2025-02-20T09:45:09.959461Z", "iopub.status.busy": "2025-02-20T09:45:09.959221Z", "iopub.status.idle": "2025-02-20T09:45:10.432312Z", "shell.execute_reply": "2025-02-20T09:45:10.431539Z", "shell.execute_reply.started": "2025-02-20T09:45:09.959443Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2025-02-20 17:45:09][Stereo][3375092][MainThread][140719273752384][ms_pipeline][125][INFO]: data_obj(idx=0) in ms_data start to run cluster_scatter\n" ] }, { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ "Column\n", " [0] Markdown(str)\n", " [1] Row\n", " [0] TextInput(name='file name', placeholder='Enter a file name...', width=200)\n", " [1] Select(name='file format', options=['png', 'pdf'], value='png', width=60)\n", " [2] IntInput(name='dpi', placeholder='Enter the dip...', start=0, value=100, width=200)\n", " [2] Row\n", " [0] Button(button_type='primary', name='export', width=100)\n", " [1] StaticText(width=800)" ] }, "execution_count": 16, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "1799" } }, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwAAAAFRCAYAAADDzMr1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKyklEQVR4nO3deXxU5dn/8e+ERfYgEUjCriK7KGIBoRqWQiNh0bqAGxZbrMUWy09UWtlFFFtqFUqJjwpu8FhljQsuiDyogARRAUFQBCXBgAoh7CTz+yPOMJM5Mzkzc2Y9n/frxUvmnJn73EkQ7uuc67puh9PpdAoAAACALaTEegIAAAAAoocAAAAAALARAgAAAADARggAAAAAABshAAAAAABshAAAAAAAsBECAAAAAMBGCAAAAAAAGyEAAAAAAGyEAAAAAACwEQIAAAAAwEYIAAAAAAAbIQAAAAAAbIQAAAAAALARAgAAAADARggAAAAAABshAAAAAABshAAAAAAAsBECAAAAAMBGCAAAAAAAGyEAAAAAAGyEAAAAAACwEQIAAAAAwEYIAAAAAAAbIQAAAAAAbIQAAAAAALARAgAAAADARggAAAAAABshAAAAAABshAAAAAAAsBECAAAAAMBGCAAAAAAAGyEAAAAAAGyEAAAAAACwEQIAAAAAwEYIAAAAAAAbIQAAAAAAbIQAAAAAALARAgAAAADARggAAAAAABshAAAAAABshAAAAAAAsBECAAAAAMBGCAAAAAAAGyEAAAAAAGyEAAAAAACwEQIAAAAAwEYIAAAAAAAbIQAAAAAAbIQAAEDEtGzZUg6Hw/1r8uTJlo6/evVqr/EdDoe++eaboMeZP3++zzgAACQrAgAAAADARggAAAAAABupGusJAECounfvrt27d3sda9q0aYxmAwBAYiAAAJCwatSooZYtW8Z6GgAAJBRSgADE3IcffqhRo0apQ4cOSk1NVfXq1ZWRkaHs7Gw9/fTTOn36tOHngikCfu2119S/f381aNBAtWvXVufOnfXYY4/p1KlTQc21uLhYjz/+uAYMGKCMjAydc845qlevnjp27Ki7775b27dv9/vZrKwsr7nefvvtkqSXX35Zffv2VYMGDVSjRg21b99e06ZN04kTJ4KaGwAApjgBIEJatGjhlOT+NWnSJK/zhw8fdl5//fVe7zH61b59e+eOHTt8xn/vvfd83rt7926f9913331+x+7atavzn//8p89xIytWrHCmpaUFnGtKSopz6tSphp+/6qqrvN47bNgw529+8xu/Y/Xp08d55syZoL/vAAAEQgoQgJg4ffq0Bg8erPfff7/S927btk19+vTRxx9/rIyMjKCuM3/+fM2cOdPv+Y0bN2rbtm2VjvPGG29o6NChKi0tDfi+srIyTZw4UZI0YcKEgO/93//9XzmdTr/nV61apfnz5+uOO+6odH4AAJhFChCAmJgzZ47X4r9atWqaNGmSNmzYoG3btunFF19U8+bN3ef37dun+++/P6hrnD59WuPHj/c6VrVqVT300EPatGmTVq5cqSuuuELHjh0LOM7x48d1xx13eC3+u3XrpiVLluiLL77QRx99pN/97nden5kyZYq+/PLLgOM6nU41atRIL7zwgrZu3ao5c+aoWrVqXu956aWXzHypAACYxhMAADExe/Zsr9cPP/yw7r33Xvfrdu3aqXHjxurXr5/72EsvvaQnnnhC9evXN3WNd955R/v37/c6NnHiRP3tb39zv/7lL3+pli1bqqioyO84r776qgoLC92vGzZsqFWrVqlWrVruY927d9f27du1du1aSVJpaalyc3P197//PeAcn3vuOQ0YMECS1L59e23btk1z5sxxn//ss89MfKUAAJjHEwAAUbdv3z599dVXXsfGjRvnU9DrufiXyhfVH374oenrrF+/3ufYyJEjvV7XrFlTN910U8BxKqYpHThwQLVr1/aZr2vx77JmzZqA47Zu3dq9+Hdp27at1+uffvop4BgAAASLAABA1O3bty/kz3reia/M999/7/X6nHPOUWZmps/7WrVqFXCcUOdb2VzbtGnjc6xmzZperyurOQAAIFgEAAASyvHjx02/N1CBbTRUNte0tDSfY1WqVInUdAAAkEQNAIAYMLoLP2/ePPXv37/Szxotmv1p3Lix1+uTJ0+qoKBATZo08TpecTfhiirOt127dnr99dcrvT6LeQBAPOIJAICoa9q0qc4//3yvY0uXLlXz5s3VsmVLw1+1atVSfn6+6tata/o63bp18zn2zDPPeL0+fvy4Fi5cGHCcrKwsr9fbt29XQUGB37m2aNFCO3fu9LuBGQAAsUQAACAmRo8e7fX6jTfe0K9+9SstXrxYW7Zs0fbt27V69Wr961//0tVXX61mzZrpySefDOoa/fr183kKMHXqVE2fPl2bN2/WW2+9pX79+vnUClR07bXXKj093f3a6XRq4MCBmjp1qj744APt3LlTn3zyiV5++WX95S9/0fnnn6/+/ftr7969Qc0XAIBoIAUIQEzcfffdWrZsmVennFWrVmnVqlWWXaN69eqaPn26V4/+M2fO6MEHH9SDDz7oPla1alWdOXPG7zi1atXSU0895bUR2KFDhzRp0iRNmjTJsvkCABANPAEAEBPVq1fXihUrdOONN5r+TLNmzYK+zh133KGxY8f6PX/RRRdpypQplY6Tk5OjpUuX6rzzzjN13bp165rerwAAgGgiAAAQM/Xq1dOiRYu0YcMG/fGPf1Tnzp1Vv359ValSRbVr19aFF16owYMH67HHHtO2bdv0/PPPh3Sdf/zjH1qxYoX69u2r1NRU1axZU+3atdOECRO0adMmw6JkIzk5Ofr66681e/ZsDRw4UE2aNFGNGjVUrVo1NWzYUN27d9fo0aO1ePFiff/997rkkktCmi8AAJHkcMa6Tx4AAACAqOEJAAAAAGAjBAAAAACAjRAAAAAAADZCAAAAAADYCAEAAAAAYCMEAAAAAICNJMVOwGVlZSooKFDdunXlcDhiPR0AAJDknE6njhw5oszMTKWkcD8ViSUpAoCCgoKQdggFAAAIx7fffqumTZvGehpAUJIiAKhbt66k8v8J69WrF+PZAACAZFdcXKxmzZq51yBAIkmKAMCV9lOvXj0CAAAAEDWkHiMRkbQGAAAA2AgBAAAAAGAjBAAAAACAjRAARNgjjzwih8Ohe+65x30sKytLDofD69cf/vAHr8/t3btXAwcOVK1atdSoUSONGzdOZ86cCXitH3/8UTfffLPq1aun+vXr64477lBJSUkkviwAAAAkKAKACPr44481b948XXzxxT7nfv/736uwsND9a+bMme5zpaWlGjhwoE6dOqUPP/xQCxYs0Pz58zVx4sSA17v55pu1detWvf3228rLy9OaNWs0atQoy78uAACQONasWaNBgwYpMzNTDodDS5cujfWUoqK0tFQTJkxQq1atVLNmTV1wwQWaNm2anE5nrKcWcwQAEVJSUqKbb75ZTz31lM4991yf87Vq1VJ6err7l2f3orfeekvbtm3TCy+8oEsuuUTZ2dmaNm2a5syZo1OnThle74svvtCbb76p//mf/1G3bt3Uq1cvPfnkk1q0aJEKCgokSZMnT9Yll1zi9bnHH39cLVu2dL++/fbbNXToUD388MNq3Lix6tevr6lTp+rMmTMaN26cGjRooKZNm+rZZ58N/5sEAADcnGVlOvbKqzrwm+u0v1sPHfjNdTr2yqtylpWFNe7Ro0fVuXNnzZkzx6KZWsvpdKr0s/06Of8TnfjXRzo5/xOVfrY/7IX6o48+qrlz52r27Nn64osv9Oijj2rmzJl68sknLZp54iIAiJDRo0dr4MCB6tevn+H5F198Ueedd546duyo8ePH69ixY+5zH330kTp16qTGjRu7jw0YMEDFxcXaunWr4XgfffSR6tevr65du7qP9evXTykpKVq/fn1Qc1+1apUKCgq0Zs0azZo1S5MmTVJOTo7OPfdcrV+/Xn/4wx9055136rvvvgtqXAAAYMxZVqYf//BH/TTmHp1at16l332nU+vW66cx9+inu0aHFQRkZ2froYce0jXXXGPhjK3hdDp1+pVtOr10u5x7D0uHT8q597BOL92u069uCysI+PDDDzVkyBANHDhQLVu21HXXXaf+/ftrw4YNFn4FiYkAIAIWLVqkTZs2acaMGYbnb7rpJr3wwgt67733NH78eD3//PO65ZZb3Of379/vtfiX5H69f/9+wzH379+vRo0aeR2rWrWqGjRo4Pcz/jRo0EBPPPGE2rRpo5EjR6pNmzY6duyY/vrXv6p169YaP368qlevrrVr1wY1LgAAMHZ88RKdeO0143N5eTq+eEmUZxQdZZ9/r7IvDhif23ZAZZ9/H/LYV1xxhd599119+eWXkqRPP/1Ua9euVXZ2dshjJouk2Agsnnz77bcaM2aM3n77bdWoUcPwPZ55+Z06dVJGRob69u2rr776ShdccEG0pupXhw4dlJJyNjZs3LixOnbs6H5dpUoVpaWlqaioKBbTAwAg6RxduLDS87Wu+02UZhM9ZzYVVnq+ysXpIY39wAMPqLi4WG3btlWVKlVUWlqq6dOn6+abbw5pvGTCEwCL5efnq6ioSF26dFHVqlVVtWpVvf/++3riiSdUtWpVlZaW+nymW7dukqRdu3ZJktLT0/X9994Rr+t1errx/wTp6ek+C/IzZ87oxx9/dH8mJSXF51Ha6dOnfcaqVq2a12uHw2F4rCzMnEQAAFCu9Lt9gc/vK4jSTKLLefhE4DcUnwx57JdfflkvvviiXnrpJW3atEkLFizQ3//+dy1YsCDkMZMFAYDF+vbtq88//1ybN292/+ratatuvvlmbd68WVWqVPH5zObNmyVJGRkZkqQePXro888/91rQv/3226pXr57at29veN0ePXro0KFDys/Pdx9btWqVysrK3AFGw4YNtX+/d1GN69oAACB2qjRtEvh8k8wozSS6HKnG2RJu9c4Jeexx48bpgQce0LBhw9SpUyfdeuut+stf/uI3RdtOCAAsVrduXXXs2NHrV+3atZWWlqaOHTvqq6++0rRp05Sfn69vvvlGy5cv12233aYrr7zS3S60f//+at++vW699VZ9+umnWrlypR588EGNHj1a55xT/j/Chg0b1LZtW+3bV37HoF27dvr1r3+t3//+99qwYYM++OAD3X333Ro2bJgyM8v/0sjKytKBAwc0c+ZMffXVV5ozZ47eeOON2HyjAACAW+3hw8M6n6iqdskI63wgx44d80pplsrTmMlgIACIuurVq+udd95R//791bZtW/2///f/9Jvf/EYrVqxwv6dKlSrKy8tTlSpV1KNHD91yyy267bbbNHXqVPd7jh07ph07dnil8Lz44otq27at+vbtq6uvvlq9evVSbm6u+3y7du3073//W3PmzFHnzp21YcMG3XvvvdH5wgEAgF81r71GNXNyjM/l5KjmtaF38CkpKXFnJUjS7t27tXnzZu3duzfkMa2S0qmxUto3ND7XvqFSOjU2PGfGoEGDNH36dL322mv65ptvtGTJEs2aNSsuuyFFm8OZBLshFBcXKzU1VYcPH/bqpw8AABAJkVh7OMvKdHzxEh1duFCl+wpUpUmmag8frprXXiNHSuj3bFevXq3evXv7HB8xYoTmz58fxoyt4XQ6Vfb59+UFwcUnpXrnqGqXDKV0aiyHwxHyuEeOHNGECRO0ZMkSFRUVKTMzU8OHD9fEiRNVvXp1C7+CxEMAAAAAECTWHkhktAE1qaCgQGvXrlVRUZFP7tif//znGM0KAAAACA4BgAnz58/XnXfeqerVqystLc3rcZTD4Qg5AJg1a5aKi4tVr149jR071qrphize5gMAAADrkQJkQrNmzfSHP/xB48eP96kmD0fTpk21b98+NWnSRN99951l4ybLfAAAiFekACGR8QTAhGPHjmnYsGGWLv49FRYWqmnTphEZO9h5AAAA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ms_data.plt.cluster_scatter(\n", " res_key='leiden',\n", " show_plotting_scale=True,\n", " reorganize_coordinate=3,\n", " horizontal_offset_additional=1000\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "stereopy", "language": "python", "name": "stereopy" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.19" } }, "nbformat": 4, "nbformat_minor": 5 }