{ "cells": [ { "cell_type": "markdown", "id": "c790ce44-7a4e-4031-b46f-829f92764cbc", "metadata": {}, "source": [ "We studied the effect of changing the composition of the gas phase, namely\n", "partial pressures for $O_2$ and $CO$, in the $CO_2$ Turnover frequency (TOF),\n", "in some of the pyZacros tutorials for the Ziff-Gulari-Barshad model (see\n", "especially **Phase Transitions in the ZGB model** and\n", "**Ziff-Gulari-Barshad model: Steady State Conditions**). We used an evenly\n", "distributed grid on the $CO$ gas phase molar fraction in those tutorials.\n", "From the results, it is possible to see that, typically, the lower the $CO_2$\n", "production, the more difficult it is to achieve a steady state (except when\n", "$CO_2$ production is zero, likely because the surface got poisoned, which\n", "makes the calculation finish quickly). This means that most of the\n", "computational time is spent on points that, from a catalytic standpoint,\n", "are not as interesting as points with higher $CO_2$ production. Thus, to\n", "reduce the overall computational cost, it would be ideal to generate more\n", "points in the more interesting areas automatically. This is the main goal\n", "of the **Adaptive Design Procedure (ADP)**.\n", "\n", "The ADP was created to generate training data for Machine Learning (ML) algorithms,\n", "with a particular emphasis on approximating computationally-intensive\n", "first-principles kinetic models in catalysis. The procedure is based on\n", "function topology and behavior, with the discrete gradient and relative\n", "importance of the independent variables calculated. See more details in the\n", "original publication [Chem. Eng. J 400, (2020), 125469](https://doi.org/10.1016/j.cej.2020.125469).\n", "The authors demonstrate that the procedure could design a dataset (achieving\n", "the same accuracy) using only between 60 and 80% fewer data points as are\n", "needed in an evenly distributed grid. Furthermore, the ADP generates a\n", "**Surrogate Model** of the data based on ML techniques,\n", "allowing interpolation of points not included in the original data set,\n", "which is critical for multiscale simulations of complex chemical reactors.\n", "\n", "In this tutorial, we will likewise examine the effects of altering the gas\n", "phase's composition in the $CO_2$ Turnover frequency (TOF) in the ZGB model,\n", "but we will do so while utilizing the ADP to both suggest the values of the\n", "$CO$ molar fractions to evaluate and generate a surrogate model for this solution.\n", "In practice, the surrogate model is a [PKL file](https://docs.python.org/3/library/pickle.html)\n", "that contains all of the parameters of the ML model, allowing it to be regenerated\n", "and used subsequently. The main goal of this tutorial is to obtain this file." ] }, { "cell_type": "markdown", "id": "94de9689-d220-4d30-b9cc-3c7b40a4f503", "metadata": {}, "source": [ "First of all, we must install the package **adaptiveDesignProcedure**. You\n", "can either follow the procedure described in its GitHub repository\n", "[https://github.com/mbracconi/adaptiveDesignProcedure](https://github.com/mbracconi/adaptiveDesignProcedure),\n", "or if you are using AMS, you can do it as follows by typing in a terminal:\n", "```\n", "$ amspackages install adaptivedesignprocedure\n", "```" ] }, { "cell_type": "markdown", "id": "1c1a8b01-45c5-47c0-8a70-ea44c04650d4", "metadata": {}, "source": [ "Now, let's start with the script. Foremost, we import all packages we need:" ] }, { "cell_type": "code", "execution_count": 1, "id": "38e5c9be-5c6e-45a6-b971-9376b3a6d284", "metadata": {}, "outputs": [], "source": [ "import multiprocessing\n", "import numpy\n", "\n", "import scm.plams\n", "import scm.pyzacros as pz\n", "import scm.pyzacros.models\n", "\n", "import adaptiveDesignProcedure as adp\n", "import warnings\n", "\n", "warnings.simplefilter(\"ignore\", UserWarning)" ] }, { "cell_type": "markdown", "id": "b33e679b-f035-4d06-a705-f56363dceed3", "metadata": {}, "source": [ "The ``import warning`` line is just needed to get clean output messages further down." ] }, { "cell_type": "markdown", "id": "e2672265-f359-4bad-ad29-b68ca62c119b", "metadata": {}, "source": [ "The ADP method needs a function that generates the data for the model;\n", "we named it ``get_rate()``. This function accepts a single argument,\n", "a 2d-array containing the conditions to be computed with the shape\n", "``(number of conditions, number of input variables)``, and returns a\n", "2d-array containing the calculated values with the shape\n", "``(number of conditions, number of output variables)``. The number of\n", "conditions will be determined on the fly by the ADP. On the contrary,\n", "we must decide on the number of input and output variables. In our\n", "example, we have ``one input variable``, the molar fraction of CO, and\n", "``three output variables``, the average coverage for $O*$ and $CO*$\n", "and the $CO_2$ TOF.\n", "\n", "This ``get_rate()`` function performs a ``ZacrosParametersScanJob``\n", "calculation. To follow the details, please refer to the example\n", "**Phase Transitions in the ZGB model**. In a nutshell, it configures\n", "the ``ZacrosJob`` calculation with the ZGB predefined model. Then it\n", "configures and runs the ``ZacrosParametersScanJob``, using the\n", "``ZacrosJob`` defined before as the reference and setting the $CO$\n", "molar fraction equal to the conditions established by the ADP. Finally,\n", "it retrieves the results for each condition by calling the\n", "``turnover frequency()`` and ``average coverage()`` functions and\n", "storing them in the output array in the correct order." ] }, { "cell_type": "code", "execution_count": 2, "id": "3135a8c0-5937-4400-b747-bdf1da90f0e4", "metadata": {}, "outputs": [], "source": [ "def get_rate(conditions):\n", "\n", " print(\"\")\n", " print(\" Requesting:\")\n", " for cond in conditions:\n", " print(\" x_CO = \", cond[0])\n", " print(\"\")\n", "\n", " # ---------------------------------------\n", " # Zacros calculation\n", " # ---------------------------------------\n", " zgb = pz.models.ZiffGulariBarshad()\n", "\n", " z_sett = pz.Settings()\n", " z_sett.random_seed = 953129\n", " z_sett.temperature = 500.0\n", " z_sett.pressure = 1.0\n", " z_sett.species_numbers = (\"time\", 0.1)\n", " z_sett.max_time = 10.0\n", "\n", " z_job = pz.ZacrosJob(\n", " settings=z_sett, lattice=zgb.lattice, mechanism=zgb.mechanism, cluster_expansion=zgb.cluster_expansion\n", " )\n", "\n", " # ---------------------------------------\n", " # Parameters scan calculation\n", " # ---------------------------------------\n", " ps_params = pz.ZacrosParametersScanJob.Parameters()\n", " ps_params.add(\"x_CO\", \"molar_fraction.CO\", [cond[0] for cond in conditions])\n", " ps_params.add(\"x_O2\", \"molar_fraction.O2\", lambda params: 1.0 - params[\"x_CO\"])\n", "\n", " ps_job = pz.ZacrosParametersScanJob(reference=z_job, parameters=ps_params)\n", "\n", " # ---------------------------------------\n", " # Running the calculations\n", " # ---------------------------------------\n", " results = ps_job.run()\n", "\n", " if not results.job.ok():\n", " print(\"Something went wrong!\")\n", "\n", " # ---------------------------------------\n", " # Collecting the results\n", " # ---------------------------------------\n", " data = numpy.nan * numpy.empty((len(conditions), 3))\n", " if results.job.ok():\n", " results_dict = results.turnover_frequency()\n", " results_dict = results.average_coverage(last=20, update=results_dict)\n", "\n", " for i in range(len(results_dict)):\n", " data[i, 0] = results_dict[i][\"average_coverage\"][\"O*\"]\n", " data[i, 1] = results_dict[i][\"average_coverage\"][\"CO*\"]\n", " data[i, 2] = results_dict[i][\"turnover_frequency\"][\"CO2\"]\n", "\n", " return data" ] }, { "cell_type": "markdown", "id": "88d0122d-4d7a-4227-8e95-98a7b4ac2931", "metadata": {}, "source": [ "Now, let's look at the script's main part." ] }, { "cell_type": "markdown", "id": "e508740a-de77-441e-977f-c52c69abfd9c", "metadata": {}, "source": [ "As usual, we initialize the pyZacros environment:" ] }, { "cell_type": "code", "execution_count": 3, "id": "3d4a730f-5698-4da3-a954-7eaf3a0e280a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PLAMS working folder: /home/aguirre/Develop/pyzacros/examples/ZiffGulariBarshad/plams_workdir\n" ] } ], "source": [ "scm.pyzacros.init()" ] }, { "cell_type": "markdown", "id": "5ec1f321-d240-4b65-bb92-698cefdda32a", "metadata": {}, "source": [ "We'll use the ``plams.JobRunner`` class, which easily allows us to run as many parallel\n", "instances as we request. In this case, we choose to use the maximum number of\n", "simultaneous processes (``maxjobs``) equal to the number of processors in the\n", "machine. Additionally, by setting ``nproc = 1`` we establish that only one\n", "processor will be used for each zacros instance. " ] }, { "cell_type": "code", "execution_count": 4, "id": "0b4f6f8f-db58-475d-973a-18901ff9dd21", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running up to 8 jobs in parallel simultaneously\n" ] } ], "source": [ "maxjobs = multiprocessing.cpu_count()\n", "scm.plams.config.default_jobrunner = scm.plams.JobRunner(parallel=True, maxjobs=maxjobs)\n", "scm.plams.config.job.runscript.nproc = 1\n", "print(\"Running up to {} jobs in parallel simultaneously\".format(maxjobs))" ] }, { "cell_type": "markdown", "id": "ef19b23c-1040-41ad-93df-c091fc74aa3b", "metadata": {}, "source": [ "Firstly, we must define the input and output variables. As previously stated, for\n", "the input variables, we only have the molar fraction of CO (``x_CO``). In terms of\n", "ADP, we must provide a name as well as a range to cover during the execution,\n", "ranging from ``min`` to ``max`` and beginning with ``num`` evenly spaced samples.\n", "Regarding the output variables, we have three: the average coverage for $O*$ and\n", "$CO*$, as well as the $CO_2$ TOF. For them, in ADP, we only need to provide their\n", "names (``ac_O``, ``ac_CO``, ``TOF_CO2``). Notice these names are arbitrary, and\n", "they do not have any effect on the final results. However, the number of input\n", "and output variables should be in correspondence with the array sizes used in the\n", "``get_rate()`` function." ] }, { "cell_type": "code", "execution_count": 5, "id": "b97f1e1f-578d-4567-a53b-aa425177964e", "metadata": {}, "outputs": [], "source": [ "input_var = ({\"name\": \"x_CO\", \"min\": 0.2, \"max\": 0.8, \"num\": 5},)\n", "\n", "output_var = (\n", " {\"name\": \"ac_O\"},\n", " {\"name\": \"ac_CO\"},\n", " {\"name\": \"TOF_CO2\"},\n", ")" ] }, { "cell_type": "markdown", "id": "9a992759-2bfa-4bfb-8f7b-764f7190f123", "metadata": {}, "source": [ "Then, we create an ``adaptativeDesignProcedure`` object by calling its constructor,\n", "which needs the input and output variables, the function to calculate the rates\n", "``get_rates``. Additionally, for convenience, we set the output directory as a\n", "subdirectory of the pyZacros working directory and set the random seed\n", "(``randomState``) to get reproducible results. The last two parameters are optional.\n", "It is also possible to provide several parameters to control the algorithm using\n", "the keyword ``algorithmParams''. But we will get back to that later." ] }, { "cell_type": "code", "execution_count": 6, "id": "025ef748-9c45-42a0-956d-eabf2a5b7529", "metadata": { "scrolled": true, "tags": [ "cut_output=10_5" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "------ Adaptive generation of Training Data for Machine Learning ------\n", "\n", "Input parameters:\n", " * Forest file: /home/aguirre/Develop/pyzacros/examples/ZiffGulariBarshad/plams_workdir/adp.results/ml_ExtraTrees.pkl\n", " * Training file: /home/aguirre/Develop/pyzacros/examples/ZiffGulariBarshad/plams_workdir/adp.results/tmp/train.dat\n", " * Figure path: /home/aguirre/Develop/pyzacros/examples/ZiffGulariBarshad/plams_workdir/adp.results/figures\n", " * Plotting enabled: False\n", " * Boruta as feature selector: True\n", " * Use Weak Support Var in Boruta:True\n", "\n", " * Forest parameters:\n", " {\n", " Ntree: 200\n", " tps: 1\n", " fraction: 0.7\n", " }\n", "\n", " * Algorithm parameters:\n", " {\n", " dth: 0.1\n", " d2th: 0.9\n", " VIth: 0.15\n", " errTh: 1e-06\n", " OOBth: 0.05\n", " RADth: 10\n", " maxTDSize: 5000\n", " AbsOOBTh: 0.2\n", " }\n", "\n", "\n", " * Variables information:\n", " {\n", " name: x_CO\n", " min: 0.2\n", " max: 0.8\n", " num: 5\n", " }\n", "\n", "\n", " * Tabulation information:\n", " {\n", " name: ac_O\n", " }\n", " {\n", " name: ac_CO\n", " }\n", " {\n", " name: TOF_CO2\n", " }\n" ] } ], "source": [ "adpML = adp.adaptiveDesignProcedure(\n", " input_var, output_var, get_rate, outputDir=scm.pyzacros.workdir() + \"/adp.results\", randomState=10\n", ")" ] }, { "cell_type": "markdown", "id": "5830f7c8-6970-4518-8d07-ad3ee70f9151", "metadata": {}, "source": [ "Now, we begin the calculation by invoking the method ``createTrainingDataAndML()``,\n", "which, as the name implies, generates the training data as well as the surrogate model\n", "(or ML model). The program runs several cycles, and for each cycle,\n", "increases the number of points and calls the \"get rate()\" function to evaluate them.\n", "When the Relative Approximation Error and the Out-Of-Bag error are less than\n", "``algorithmParams['RADth']`` (default=10%) and ``algorithmParams['OOBth']`` (default=0.05),\n", "respectively, the calculation converges. See the original ADP documentation for\n", "more details." ] }, { "cell_type": "code", "execution_count": 7, "id": "e56e6b7a-0058-4701-b74c-4c14bb2a8ef9", "metadata": { "scrolled": true, "tags": [ "cut_output=20_20" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "------------------ Iterative Species Points Addition ------------------\n", "\n", " * Tabulation Variables: ac_O\n", "\n", " * Iteration: 0\n", " --------------------------- \n", " Points per species :5\n", " ---------------------------\n", " Total number of points: 5\n", "\n", " Requesting:\n", " x_CO = 0.2\n", " x_CO = 0.35000000000000003\n", " x_CO = 0.5\n", " x_CO = 0.6500000000000001\n", " x_CO = 0.8\n", "\n", "[02.02|22:51:12] JOB plamsjob STARTED\n", "[02.02|22:51:12] Waiting for job plamsjob to finish\n", "[02.02|22:51:12] JOB plamsjob RUNNING\n", "[02.02|22:51:12] JOB plamsjob/ps_cond000 STARTED\n", "[02.02|22:51:12] JOB plamsjob/ps_cond001 STARTED\n", "[02.02|22:51:12] JOB plamsjob/ps_cond002 STARTED\n", "[02.02|22:51:12] JOB plamsjob/ps_cond003 STARTED\n", "[02.02|22:51:12] JOB plamsjob/ps_cond004 STARTED\n", "[02.02|22:51:12] JOB plamsjob/ps_cond000 RUNNING\n", "[02.02|22:51:12] JOB plamsjob/ps_cond002 RUNNING\n", "[02.02|22:51:12] JOB plamsjob/ps_cond001 RUNNING\n", "[02.02|22:51:13] JOB plamsjob/ps_cond003 RUNNING\n", "[02.02|22:51:13] JOB plamsjob/ps_cond004 RUNNING\n", "[02.02|22:51:13] JOB plamsjob/ps_cond000 FINISHED\n", "[02.02|22:51:13] JOB plamsjob/ps_cond004 FINISHED\n", "[02.02|22:51:13] JOB plamsjob/ps_cond004 SUCCESSFUL\n", "[02.02|22:51:13] JOB plamsjob/ps_cond001 FINISHED\n", "[02.02|22:51:13] JOB plamsjob/ps_cond003 FINISHED\n", "[02.02|22:51:13] JOB plamsjob/ps_cond000 SUCCESSFUL\n", "[02.02|22:51:13] JOB plamsjob/ps_cond001 SUCCESSFUL\n", "[02.02|22:51:13] JOB plamsjob/ps_cond003 SUCCESSFUL\n", "[02.02|22:51:13] JOB plamsjob/ps_cond002 FINISHED\n", "[02.02|22:51:13] JOB plamsjob/ps_cond002 SUCCESSFUL\n", "[02.02|22:51:18] JOB plamsjob FINISHED\n", "[02.02|22:51:18] JOB plamsjob SUCCESSFUL\n", "\n", " Function solved in 5.908106088638306\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.0651373308715828\n", " Out-Of-Bag score : 0.6679651141798162\n", "\n", " * Iteration: 1\n", " Normalized variable importance: 1.0\n", "\n", " Using Boruta for feature selection.\n", " Boruta Support: \n", " Boruta Support Weak: \n", " Boruta did not select any feature for improvement in this iteration.\n", " Forcing feature selection with Variable Importance threshold in this iteration.\n", "\n", "\n", " --------------------------- \n", " Points per species :8\n", " ---------------------------\n", " Total number of points: 8\n", " New points : 3\n", "\n", "\n", " Requesting:\n", " x_CO = 0.2\n", " x_CO = 0.35000000000000003\n", " x_CO = 0.42500000000000004\n", " x_CO = 0.5\n", " x_CO = 0.5750000000000001\n", " x_CO = 0.6500000000000001\n", " x_CO = 0.7250000000000001\n", " x_CO = 0.8\n", "\n", "[02.02|22:51:26] JOB plamsjob STARTED\n", "[02.02|22:51:26] Renaming job plamsjob to plamsjob.002\n", "[02.02|22:51:26] Waiting for job plamsjob.002 to finish\n", "[02.02|22:51:26] JOB plamsjob.002 RUNNING\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond000 STARTED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond001 STARTED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond002 STARTED\n", "[02.02|22:51:26] Job ps_cond000 previously run as ps_cond000, using old results\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond003 STARTED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond004 STARTED\n", "[02.02|22:51:26] Job ps_cond001 previously run as ps_cond001, using old results\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond005 STARTED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond006 STARTED\n", "[02.02|22:51:26] Job ps_cond003 previously run as ps_cond002, using old results\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond007 STARTED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond002 RUNNING\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond000 COPIED\n", "[02.02|22:51:26] Job ps_cond005 previously run as ps_cond003, using old results\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond004 RUNNING\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond001 COPIED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond003 COPIED\n", "[02.02|22:51:26] Job ps_cond007 previously run as ps_cond004, using old results\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond006 RUNNING\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond005 COPIED\n", "[02.02|22:51:26] JOB plamsjob.002/ps_cond007 COPIED\n", "[02.02|22:51:27] JOB plamsjob.002/ps_cond006 FINISHED\n", "[02.02|22:51:27] JOB plamsjob.002/ps_cond006 SUCCESSFUL\n", "[02.02|22:51:27] JOB plamsjob.002/ps_cond004 FINISHED\n", "[02.02|22:51:27] JOB plamsjob.002/ps_cond002 FINISHED\n", "[02.02|22:51:27] JOB plamsjob.002/ps_cond004 SUCCESSFUL\n", "[02.02|22:51:27] JOB plamsjob.002/ps_cond002 SUCCESSFUL\n", "[02.02|22:51:31] JOB plamsjob.002 FINISHED\n", "[02.02|22:51:31] JOB plamsjob.002 SUCCESSFUL\n", " Function solved in 6.450076341629028\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.033360174179644105\n", " Out-Of-Bag score : 0.8245503853787796\n", " Iterative approx err : 49.889318130820484 %\n", "\n", " * Iteration: 2\n", " Normalized variable importance: 1.0\n", "\n", " Using Boruta for feature selection.\n", " Boruta Support: x_CO\n", " Boruta Support Weak: \n", "\n", "\n", " --------------------------- \n", " Points per species :12\n", " ---------------------------\n", " Total number of points: 12\n", " New points : 4\n", "\n", "\n", " Requesting:\n", " x_CO = 0.2\n", " x_CO = 0.35000000000000003\n", " x_CO = 0.38750000000000007\n", " x_CO = 0.42500000000000004\n", " x_CO = 0.4625\n", " x_CO = 0.5\n", " x_CO = 0.5375000000000001\n", " x_CO = 0.5750000000000001\n", " x_CO = 0.6125\n", " x_CO = 0.6500000000000001\n", " x_CO = 0.7250000000000001\n", " x_CO = 0.8\n", "\n", "[02.02|22:51:38] JOB plamsjob STARTED\n", "[02.02|22:51:38] Renaming job plamsjob to plamsjob.003\n", "[02.02|22:51:38] Waiting for job plamsjob.003 to finish\n", "[02.02|22:51:38] JOB plamsjob.003 RUNNING\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond000 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond001 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond002 STARTED\n", "[02.02|22:51:38] Job ps_cond000 previously run as ps_cond000, using old results\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond003 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond004 STARTED\n", "[02.02|22:51:38] Job ps_cond001 previously run as ps_cond001, using old results\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond005 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond006 STARTED\n", "[02.02|22:51:38] Job ps_cond003 previously run as ps_cond002, using old results\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond002 RUNNING\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond000 COPIED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond007 STARTED\n", "[02.02|22:51:38] Job ps_cond005 previously run as ps_cond002, using old results\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond001 COPIED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond008 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond004 RUNNING\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond009 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond003 COPIED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond010 STARTED\n", "[02.02|22:51:38] JOB plamsjob.003/ps_cond006 RUNNING\n", "[02.02|22:51:39] Job ps_cond007 previously run as ps_cond004, using old results\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond011 STARTED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond005 COPIED\n", "[02.02|22:51:39] Job ps_cond009 previously run as ps_cond003, using old results\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond008 RUNNING\n", "[02.02|22:51:39] Job ps_cond010 previously run as ps_cond006, using old results\n", "[02.02|22:51:39] Job ps_cond011 previously run as ps_cond004, using old results\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond007 COPIED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond009 COPIED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond011 COPIED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond002 FINISHED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond010 COPIED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond002 SUCCESSFUL\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond008 FINISHED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond008 SUCCESSFUL\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond004 FINISHED\n", "[02.02|22:51:39] JOB plamsjob.003/ps_cond004 SUCCESSFUL\n", "[02.02|22:51:40] JOB plamsjob.003/ps_cond006 FINISHED\n", "[02.02|22:51:40] JOB plamsjob.003/ps_cond006 SUCCESSFUL\n", "[02.02|22:51:44] JOB plamsjob.003 FINISHED\n", "[02.02|22:51:44] JOB plamsjob.003 SUCCESSFUL\n", " Function solved in 7.72233247756958\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.009267246668918525\n", " Out-Of-Bag score : 0.9470078413308478\n", " Iterative approx err : 22.17229556207913 %\n", "\n", " * Iteration: 3\n", " Normalized variable importance: 1.0\n", "\n", " Using Boruta for feature selection.\n", " Boruta Support: x_CO\n", " Boruta Support Weak: \n", "\n", "\n", " --------------------------- \n", " Points per species :19\n", " ---------------------------\n", " Total number of points: 19\n", " New points : 7\n", "\n", "\n", " Requesting:\n", " x_CO = 0.2\n", " x_CO = 0.35000000000000003\n", " x_CO = 0.36875\n", " x_CO = 0.38750000000000007\n", " x_CO = 0.40625000000000006\n", " x_CO = 0.42500000000000004\n", " x_CO = 0.44375000000000003\n", " x_CO = 0.4625\n", " x_CO = 0.48125\n", " x_CO = 0.5\n", " x_CO = 0.51875\n", " x_CO = 0.5375000000000001\n", " x_CO = 0.5562500000000001\n", " x_CO = 0.5750000000000001\n", " x_CO = 0.59375\n", " x_CO = 0.6125\n", " x_CO = 0.6500000000000001\n", " x_CO = 0.7250000000000001\n", " x_CO = 0.8\n", "\n", "[02.02|22:51:52] JOB plamsjob STARTED\n", "[02.02|22:51:52] Renaming job plamsjob to plamsjob.004\n", "[02.02|22:51:52] Waiting for job plamsjob.004 to finish\n", "[02.02|22:51:52] JOB plamsjob.004 RUNNING\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond000 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond001 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond002 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond003 STARTED\n", "[02.02|22:51:52] Job ps_cond000 previously run as ps_cond000, using old results\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond004 STARTED\n", "[02.02|22:51:52] Job ps_cond001 previously run as ps_cond001, using old results\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond005 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond006 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond007 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond002 RUNNING\n", "[02.02|22:51:52] Job ps_cond003 previously run as ps_cond002, using old results\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond000 COPIED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond008 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond001 COPIED\n", "[02.02|22:51:52] Job ps_cond005 previously run as ps_cond002, using old results\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond004 RUNNING\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond009 STARTED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond003 COPIED\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond010 STARTED\n", "[02.02|22:51:52] Job ps_cond007 previously run as ps_cond004, using old results\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond006 RUNNING\n", "[02.02|22:51:52] JOB plamsjob.004/ps_cond011 STARTED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond005 COPIED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond008 RUNNING\n", "[02.02|22:51:53] Job ps_cond009 previously run as ps_cond002, using old results\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond012 STARTED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond013 STARTED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond014 STARTED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond010 RUNNING\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond007 COPIED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond015 STARTED\n", "[02.02|22:51:53] Job ps_cond011 previously run as ps_cond006, using old results\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond016 STARTED\n", "[02.02|22:51:53] Job ps_cond013 previously run as ps_cond004, using old results\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond009 COPIED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond017 STARTED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond002 FINISHED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond012 RUNNING\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond018 STARTED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond014 RUNNING\n", "[02.02|22:51:53] Job ps_cond015 previously run as ps_cond008, using old results\n", "[02.02|22:51:53] Job ps_cond016 previously run as ps_cond003, using old results\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond013 COPIED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond011 COPIED\n", "[02.02|22:51:53] Job ps_cond017 previously run as ps_cond006, using old results\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond004 FINISHED\n", "[02.02|22:51:53] Job ps_cond018 previously run as ps_cond004, using old results\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond002 SUCCESSFUL\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond015 COPIED\n", "[02.02|22:51:53] JOB plamsjob.004/ps_cond006 FINISHED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond016 COPIED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond017 COPIED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond018 COPIED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond014 FINISHED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond012 FINISHED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond008 FINISHED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond004 SUCCESSFUL\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond006 SUCCESSFUL\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond008 SUCCESSFUL\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond012 SUCCESSFUL\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond014 SUCCESSFUL\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond010 FINISHED\n", "[02.02|22:51:54] JOB plamsjob.004/ps_cond010 SUCCESSFUL\n", "[02.02|22:51:58] JOB plamsjob.004 FINISHED\n", "[02.02|22:51:58] JOB plamsjob.004 SUCCESSFUL\n", " Function solved in 8.992042541503906\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.004455915871916955\n", " Out-Of-Bag score : 0.9724143597339753\n", " Iterative approx err : 23.660290785762786 %\n", "\n", " * Iteration: 4\n", " Normalized variable importance: 1.0\n", "\n", " Using Boruta for feature selection.\n", " Boruta Support: x_CO\n", " Boruta Support Weak: \n", "\n", "\n", " --------------------------- \n", " Points per species :29\n", " ---------------------------\n", " Total number of points: 29\n", " New points : 10\n", "\n", "\n", " Requesting:\n", " x_CO = 0.2\n", " x_CO = 0.35000000000000003\n", " x_CO = 0.359375\n", " x_CO = 0.36875\n", " x_CO = 0.38750000000000007\n", " x_CO = 0.3968750000000001\n", " x_CO = 0.40625000000000006\n", " x_CO = 0.415625\n", " x_CO = 0.42500000000000004\n", " x_CO = 0.43437500000000007\n", " x_CO = 0.44375000000000003\n", " x_CO = 0.453125\n", " x_CO = 0.4625\n", " x_CO = 0.47187500000000004\n", " x_CO = 0.48125\n", " x_CO = 0.490625\n", " x_CO = 0.5\n", " x_CO = 0.509375\n", " x_CO = 0.51875\n", " x_CO = 0.5281250000000001\n", " x_CO = 0.5375000000000001\n", " x_CO = 0.5468750000000001\n", " x_CO = 0.5562500000000001\n", " x_CO = 0.5750000000000001\n", " x_CO = 0.59375\n", " x_CO = 0.6125\n", " x_CO = 0.6500000000000001\n", " x_CO = 0.7250000000000001\n", " x_CO = 0.8\n", "\n", "[02.02|22:52:07] JOB plamsjob STARTED\n", "[02.02|22:52:07] Renaming job plamsjob to plamsjob.005\n", "[02.02|22:52:07] Waiting for job plamsjob.005 to finish\n", "[02.02|22:52:07] JOB plamsjob.005 RUNNING\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond000 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond001 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond002 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond003 STARTED\n", "[02.02|22:52:07] Job ps_cond000 previously run as ps_cond000, using old results\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond004 STARTED\n", "[02.02|22:52:07] Job ps_cond001 previously run as ps_cond001, using old results\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond005 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond006 STARTED\n", "[02.02|22:52:07] Job ps_cond003 previously run as ps_cond002, using old results\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond002 RUNNING\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond007 STARTED\n", "[02.02|22:52:07] Job ps_cond004 previously run as ps_cond002, using old results\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond000 COPIED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond001 COPIED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond008 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond003 COPIED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond005 RUNNING\n", "[02.02|22:52:07] Job ps_cond006 previously run as ps_cond004, using old results\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond009 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond004 COPIED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond010 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond011 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond012 STARTED\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond007 RUNNING\n", "[02.02|22:52:07] Job ps_cond010 previously run as ps_cond006, using old results\n", "[02.02|22:52:07] JOB plamsjob.005/ps_cond013 STARTED\n", "[02.02|22:52:07] Job ps_cond008 previously run as ps_cond002, using old results\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond006 COPIED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond014 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond009 RUNNING\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond015 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond010 COPIED\n", "[02.02|22:52:08] Job ps_cond012 previously run as ps_cond004, using old results\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond011 RUNNING\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond008 COPIED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond016 STARTED\n", "[02.02|22:52:08] Job ps_cond014 previously run as ps_cond008, using old results\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond002 FINISHED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond013 RUNNING\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond017 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond018 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond012 COPIED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond019 STARTED\n", "[02.02|22:52:08] Job ps_cond016 previously run as ps_cond002, using old results\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond015 RUNNING\n", "[02.02|22:52:08] Job ps_cond018 previously run as ps_cond010, using old results\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond014 COPIED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond005 FINISHED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond020 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond017 RUNNING\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond021 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond016 COPIED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond022 STARTED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond007 FINISHED\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond002 SUCCESSFUL\n", "[02.02|22:52:08] Job ps_cond020 previously run as ps_cond006, using old results\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond005 SUCCESSFUL\n", "[02.02|22:52:08] JOB plamsjob.005/ps_cond019 RUNNING\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond023 STARTED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond018 COPIED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond009 FINISHED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond024 STARTED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond021 RUNNING\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond025 STARTED\n", "[02.02|22:52:09] Job ps_cond022 previously run as ps_cond012, using old results\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond011 FINISHED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond026 STARTED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond020 COPIED\n", "[02.02|22:52:09] Job ps_cond023 previously run as ps_cond004, using old results\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond027 STARTED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond007 SUCCESSFUL\n", "[02.02|22:52:09] Job ps_cond024 previously run as ps_cond014, using old results\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond028 STARTED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond011 SUCCESSFUL\n", "[02.02|22:52:09] Job ps_cond025 previously run as ps_cond008, using old results\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond022 COPIED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond009 SUCCESSFUL\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond013 FINISHED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond023 COPIED\n", "[02.02|22:52:09] Job ps_cond026 previously run as ps_cond003, using old results\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond024 COPIED\n", "[02.02|22:52:09] JOB plamsjob.005/ps_cond015 FINISHED\n", "[02.02|22:52:09] Job ps_cond027 previously run as ps_cond006, using old results\n", "[02.02|22:52:09] Job ps_cond028 previously run as ps_cond004, using old results\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond025 COPIED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond026 COPIED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond027 COPIED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond013 SUCCESSFUL\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond017 FINISHED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond015 SUCCESSFUL\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond021 FINISHED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond028 COPIED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond017 SUCCESSFUL\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond021 SUCCESSFUL\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond019 FINISHED\n", "[02.02|22:52:10] JOB plamsjob.005/ps_cond019 SUCCESSFUL\n", "[02.02|22:52:14] JOB plamsjob.005 FINISHED\n", "[02.02|22:52:14] JOB plamsjob.005 SUCCESSFUL\n", " Function solved in 11.832599639892578\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.0023851430153185903\n", " Out-Of-Bag score : 0.9827730093168722\n", " Iterative approx err : 6.646253138854694 %\n", "\n", " Accuracy constraints reached in 5 iterations\n", "\n", " * Tabulation Variables: ac_CO\n", "\n", " * Iteration: 0\n", " --------------------------- \n", " Points per species :29\n", " ---------------------------\n", " Total number of points: 29\n", "\n", " Function loaded in 0.002531290054321289\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.013487687611614558\n", " Out-Of-Bag score : 0.9293505529637113\n", "\n", " Accuracy constraints reached in 1 iterations\n", "\n", " * Tabulation Variables: TOF_CO2\n", "\n", " * Iteration: 0\n", " --------------------------- \n", " Points per species :29\n", " ---------------------------\n", " Total number of points: 29\n", "\n", " Function loaded in 0.0016736984252929688\n", "\n", " Approximation quality:\n", " Out-Of-Bag error : 0.008866387919418402\n", " Out-Of-Bag score : 0.9057607114823224\n", "\n", " Accuracy constraints reached in 1 iterations\n", "\n", "-------------------- Generating Final ExtraTrees ----------------------\n", "\n", "----------------------- Model for CFD generated -----------------------\n", "\n", "\n", "--------------------------- Procedure stats ---------------------------\n", "\n", " * Training data size evolution: 5 8 12 19 29 29 29\n", "\n", "--------------------------------- end ---------------------------------\n" ] } ], "source": [ "adpML.createTrainingDataAndML()" ] }, { "cell_type": "markdown", "id": "0368bdc9-ddab-47f8-b273-404a245f094a", "metadata": {}, "source": [ "If the execution got up to this point, everything worked as expected. Hooray!\n", "\n", "The results are then collected by accessing the ``trainingData`` attribute of the\n", "``adpML`` object, and they are presented nicely in a table in the lines that follow." ] }, { "cell_type": "code", "execution_count": 8, "id": "594d4df7-71a7-4087-b197-ca3540ba7a92", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-------------------------------------------------\n", "cond x_CO ac_O ac_CO TOF_CO2\n", "-------------------------------------------------\n", " 0 0.200 0.998060 0.000000 0.049895\n", " 1 0.350 0.974020 0.000200 0.273811\n", " 2 0.359 0.960800 0.000200 0.310947\n", " 3 0.369 0.938580 0.000360 0.403137\n", " 4 0.388 0.925940 0.000260 0.462316\n", " 5 0.397 0.887160 0.001060 0.629684\n", " 6 0.406 0.879640 0.000560 0.664653\n", " 7 0.416 0.854660 0.001520 0.759789\n", " 8 0.425 0.802920 0.002940 0.902253\n", " 9 0.434 0.796640 0.002460 0.975221\n", " 10 0.444 0.770360 0.003760 1.129684\n", " 11 0.453 0.772080 0.003540 1.167158\n", " 12 0.463 0.734200 0.004960 1.336484\n", " 13 0.472 0.701580 0.009360 1.555474\n", " 14 0.481 0.643280 0.011700 1.741516\n", " 15 0.491 0.586160 0.016680 1.960968\n", " 16 0.500 0.568160 0.018740 2.108442\n", " 17 0.509 0.552720 0.022160 2.306632\n", " 18 0.519 0.512560 0.032800 2.432063\n", " 19 0.528 0.391280 0.101060 2.705432\n", " 20 0.538 0.204580 0.342040 2.731326\n", " 21 0.547 0.004320 0.958380 1.596042\n", " 22 0.556 0.000000 1.000000 1.006589\n", " 23 0.575 0.000000 1.000000 0.581137\n", " 24 0.594 0.000000 1.000000 0.243600\n", " 25 0.613 0.000000 1.000000 0.169137\n", " 26 0.650 0.000000 1.000000 0.042695\n", " 27 0.725 0.000000 1.000000 0.004505\n", " 28 0.800 0.000000 1.000000 0.000589\n" ] } ], "source": [ "x_CO, ac_O, ac_CO, TOF_CO2 = adpML.trainingData.T\n", "\n", "print(\"-------------------------------------------------\")\n", "print(\"%4s\" % \"cond\", \"%8s\" % \"x_CO\", \"%10s\" % \"ac_O\", \"%10s\" % \"ac_CO\", \"%12s\" % \"TOF_CO2\")\n", "print(\"-------------------------------------------------\")\n", "for i in range(len(x_CO)):\n", " print(\"%4d\" % i, \"%8.3f\" % x_CO[i], \"%10.6f\" % ac_O[i], \"%10.6f\" % ac_CO[i], \"%12.6f\" % TOF_CO2[i])" ] }, { "cell_type": "markdown", "id": "f0450901-3d3a-469b-922d-092c2b3af853", "metadata": {}, "source": [ "The above results are the final aim of the calculation. However, we\n", "can take advantage of python libraries to visualize them. Here, we\n", "use matplotlib. Please check the matplotlib documentation for more\n", "details at [matplotlib](https://matplotlib.org/). The following lines\n", "of code allow visualizing the effect of changing the $CO$ molar\n", "fraction on the average coverage of $O*$ and $CO*$ and the production\n", "rate of $CO_2$. In the Figure, we show the training data generated by\n", "the Zacros model as points and the Surrogate Model's prediction as lines." ] }, { "cell_type": "code", "execution_count": 14, "id": "f442856e-eb69-4918-8d24-f59f5e8ea9db", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAG1CAYAAABwNWlDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAACcEElEQVR4nO3dd3gUVRcG8HdTCAGS0EMg9N6r9CpNmoAoiIqgoGADRVQQlCKKBZTPQlGaSBGVLghEJHRQqkLoRRIIHUJoCUnu98dxMrupu5Otyft7nnl2dnbK3SXMnr3lXJNSSoGIiIiIPJaXqwtARERERFnDgI6IiIjIwzGgIyIiIvJwDOiIiIiIPBwDOiIiIiIPx4COiIiIyMMxoCMiIiLycD6uLoA7SEhIwP79+xEcHAwvL8a4REREniApKQmXLl1C3bp14eOTs0OanP3u/7N//340bNjQ1cUgIiIiA/7880889NBDri6GSzGgAxAcHAxA/iBCQkJcXBoiIiKyRnR0NBo2bJj8PZ6TMaADkptZQ0JCEBoa6uLSEBERkS3YXYqDIoiIiIg8HgM6IiIiIg/HgI6IiIjIwzGgIyIiIvJwDOiIiIiIPBwDOiIiIiIPx4COiIiIyMMxoCMiIiLycAzoiIiIiDwcAzoiIiIiD+d2Ad2WLVvQrVs3FC9eHCaTCStWrMj0mM2bN6N+/frInTs3ypUrhxkzZji+oERERERuwu0Cujt37qB27dr4+uuvrdr/zJkz6Ny5M1q0aIH9+/fj3XffxdChQ7F06VIHl5SIKA1RUUDFioDJJMvvvzvyMI85zihnX8/Zsvv7A3LGe3QHJqWUcnUh0mMymbB8+XL06NEj3X3eeecdrFq1CkeOHEneNmTIEBw8eBA7d+606jpRUVEoWbIkIiMjERoamtVim50XaNMGOHlSnoeFAe3a2e30RORuYmKA/PlTb1+/HujQwd6HueVxCQnAwoXAxYvpn8da9+8D48al3v7880ClSlk/v6tl9/cHpP8eM/tbs5ajvr89knJjANTy5csz3KdFixZq6NChFtuWLVumfHx8VHx8fJrH3L9/X8XExCQvERERCoCKjIy0V9HVzZtKAamX9evtdgkicjd9+sh/9MGDlUpKUmrbNv0/v/0Pc7vjkpKUevbZtO99XLgASn31lb5uD5GRkcre39+eyk4fqWNYE9BVrFhRffjhhxbbtm/frgCoCxcupHnM2LFjFYBUiz3/IIzeMInIA0RGKlWhgv6fOixMtmvPr1zR97XiP77Bw9zuuHHjXB8wcHHvJTxcX7cHBnQ6HxdVDNqVyWSyeK6USnO7ZtSoURg+fHjy8/Pnz6NatWp2LdOSJfI4caL0GWjWzK6nJyJXiYkBSpa03Na+vbQh9ekj//nHjAGmTwd27LDqlAYPc+pxSUlAkybAzp1AhQpA0aLAvXv66xUr6t1LTCZg8mSgXDnrypOeyZOB7dulaW7IEODoUeDdd+W15cuzdm53kN3fH5D6Pd6+7eoSZV8e34euZcuWqFu3Lv73v/8lb1u+fDl69+6Nu3fvwtfXN9PrOKIN/skn5YY5eLB+w2zeXF5z30+ciDKV0X/umzc9og/dzZtAgQKptz/xBFC2rKzfvy/7aV/Ax44Bhw+nf05zn30GjBhh3b4ZMfr+PEV2f3+A498j+9CZcXENYYaAzJtc3377bVW1alWLbUOGDFGNGze2+jqOqLJlHzqibEr7z5xeu2N6zbGZMHiYzcf9/rtSjRplrdnMy0tfDwhQqmBBWYoWVWr0aOlmYi9GPxdPkd3fn1KOfY9sctW5XZPr7du3cVKrt4ekJTlw4AAKFiyIUqVKYdSoUTh//jzmz58PQEa0fv311xg+fDheeOEF7Ny5E7Nnz8bixYtd9RYAAEFBQGSk5SjXl18Grl6V0a6FCwNFish+efMCXm6XQIaI0pRZe2VoKHDihM2nNXiY1cft2gWMHg388Yft19A0bCjdSNq1k2ZVZzD6uXiK7P7+gJzxHt2B2zW5hoeHo02bNqm29+/fH/PmzcOAAQNw9uxZhIeHJ7+2efNmvPHGGzh8+DCKFy+Od955B0OGDLH6mo6ssr13D8iTJ/P98ucHSpSQIM/HRwI8b29ZSpQAGjUCnnvO8phbtwBfX8DPjwEhkdN4WDvZnTvA8OHAt99abq9RQ/prlSiR9nG5ckmzbL58Erz5+sr9icidsMlV53YBnSs48g/i3DmgdOmsn6d1a2DTJsttpUpJLWBICHDhguVr77wj++fNK7WBRYvKUqSIfBf5+8uSO7cs2npgoP46MZcgpcMN/zASEoAvvwTMUnICAMLD9WICQPnywIQJUtHo7e3UIhLZHQM6nds1uWY3wcHA3r3S1HrliuVy9SoQGyudjq9cke+IuLi0z5PWINz79+Uxd+7Urx07Bvz1l/Fy+/nJr/M9eyx/wYeHAxs2yGs9e8poN829e/I+AgOBgADP/7LIaDCjG1bEkDO5WRuSUsCLLwJz56a/T548wCefyFgOK8aKEZGHYUDnYH5+QL161u2rFHD3rqQH0Jb4eOD06bRbeFq0AK5flxq6lJKSpJnEaP1rXJxkes+Xz3L71q3ApEmyXq2aZUC3cyfQtq3+PG9e6SMYGKgvAQESgPr6ypIrl77u7y8BcJMmQP36lu/l2DE5Nn/+1GVylMGD9UfzwYwdO3KkMrkPpWREaUbBXKNGwA8/SGoRIsqeGNC5EZNJgqCUgoPT3j+j6WpXrdIDxKtXgcuXpfbs0iWpFbx3T2r4tMf792XfW7ckVcGNG1JDFRBged6bN/X1wEDL127dsnx+544sKZuDMzNmjGVAFxOj11A+8gjw22+W+3foIO/Pzw8oVkxq1Ro1Alq2lHWj/QuZS5A8wbx5wOefy7qXF/DddzJ4QZM7tzSzOmsQAxG5BgO6bEwLEPPmtU8/PgB49VWgUycJ+FI2AxctKnmsbt3Sl5gYeYyNtb5WK2WNo3mgmDLABICICOD8ectt33wjj15eUksYFCS1e9qS8nloKPD445bnyGwwoxt2o6IcaOpUfX3GDJkHlIhyHgZ0ZJOyZfXEoyk1bSpLWpKSpLbu1i1pRo6PBx48sHy8c0eaeZs0sTw2Vy5gwAA5tnHj1OfWBnbExaUOGpOSJPi8cSPj91WzZuqALihIHmfOlEWzfj3715Ex9v4RcOgQ8Pffst6oEfDCC1kvIxF5JgZ05BReXlK7llYNW2ZCQjLuH6R9OT54IE2vx44BW7YAu3cD165JM7G2PHiQ9jnS6qO4Z0/qbdoX8JNPynP2ryNrOeJHwKJF+vrTTxsvGxF5PgZ0lG34+sqI3BIlgIcfTv26Uvp0Rjdvyhestq7Vxpm7fl0emzaVuQjNaf3rRo5k/zqyjr0H2SQl6QGdtzfQu7f9ykpEnocBHeUYJpOefy+tkcEpnTqVdq3e/fsyACMuDqhcGZg2DahSxSFFpmzE3oNsduwA/v1X1tu1S3/wFBHlDJxfgCgdXl5AwYKpvyj/+EPPFxgfDwwapM/Nvn69c8tInqNPH3kcM0Zq5FLW+toiPh746iv9OZtbiYgBHbm9+/dlUEK3bjI7hr+/NJFWrSrJVFPOoOFonTsD//wDdO9uub1uXaBMGeeWhTyHNrBm5kz5sWD0R8DGjTKI56ef5Lm/P9Cjh92KSXaQmCj/Ps8+C1SqJH10c+WSTADNmwOjRsmAloxs3izN81WryvG5c0sfzC5dpMn+3j1nvBPyKIpUZGSkAqAiIyNdXRRKYcMGpUJDlZI6DVkCA5Xy87Pc1qmTUlevOr98M2cq5eOjlyNXLqXefVep+/edXxZyf5GRSlWooP+9hIXZdvyvvyrl7a0fbzIp9dVXjikrGbNzp1KVKlnen3x9lSpYUCkvL8vtjz2mVFyc5fFXryrVubPlfn5+SgUFWW4rUULujzkdv791rKEjt/XTT1IbFhUlAx1mzZKBCjExUmt35Ajw+uuAj48kG27cWEa5OtOLL8pUaNroxfh44KOPgDp1JPefySTL7787t1zkYAaHMmszhmlfy7akLNm1S/I8JibK82bNZCT2q68aKgo5wOrVMu/28eNAoUIyq87x43JfuHZNHv/6SwZTBQYCy5ZJQnfNpUtyH1u7Vga6vPYacPiwPpjrxg0Z8V+ypOTe7NxZr6klYg2dYoTvjo4cUSpvXvnaq1lTqcuX0993zRqpGQOUatvWeWU0d/u21Mz5+lr+ijZf1q93TdnIzlauVCp/fqW6dlXq2jWHXy4hQalZs5QqUED/W+rdW7aT+zh+XFoPAKWqVZPa2Ixcu6ZU9+5K3bghz5OSlHr4Yb1Gb9Wq9I+9elWp2rVl37x55X6ZU/H7W8caOnJLo0dLomE/P+Dnn4EiRdLft3Nn6WgOSP+iNWucU0ZzefMCH34ov75TTolWvLg8duzo/HKRA7z/vlSX/PqrVJOdPeuwSx05In0zBw3Sk2M//DAwf77U4JD7GDNGkp/nzg0sXy61sRkpWBBYsUJPmfTrrzLgCpD7X7du6R9bqJDcF3Pnlvvke+/Z5S2Qh2NAR24nOlpudADQt6+kBsnMG2/oSYu1ab9coXZtfaoybQ5Z87lsX3xRgj7yUKdOAQcP6s+PHpWpTc6ds/ulLl2SuYv/+Uff9thjEiz4+dn9cpQFly4Bv/wi608/LQMhrKXNsTttmjwGBABvvpn5cRUryv0RkKbbixetvyZlTwzoyO2Eh0vSVADo1cu6Y/Ll07Ptb90KJCQ4pGhW0dJT9OoFtGxp+dp33wETJqR/bFSU3KjZ985NLV+ur+fKJY8XL8oEqtofrR3cvy/BmxYnVqsmox6XLk1dA0yut2mT/s/fs6ftxyckyH0LkPtYvnzWHffYY/KYlCR/H5SzMaAjt3P4sL5et671x9WpI4+3b+sJV11BS0/x888yBZkmd255HDTIcv8HD+QL4cYN6eysTWUGyNRQGzY4trxkg2XL9PXwcL1dbeNGu1UN374tU8vt2CHPS5SQKedS/jgg92H0nqU5e1aaTm09XrvnAZmnQaHsjwEduZ1r1/T1QoWsP65w4bTP4WxBQUBkJFChgr4tLAy4cgWYN0/6/Jlbs0b6RZUvL88HD5Zf3Nu2yXP2vXMTFy4AO3fKeo0a0tRqPsnwO+/IkMYsOHFCRjmuXCnP/f2BVav0fpjknszvNwULZu14T7znkXtgQEfZhsFMEg6RVnqKfPmA/v1lzllzs2bJo9bp3V5TQ5GdaR07Ab2tq1074JVXZP3ePckka7C9//59aW7TansCA6WFt14940Um57DnvUfrU0eOMWnSJDz00EMICAhA0aJF0aNHDxw7dizDY8LDw2EymVItR48edVKprcOAjtyO+S9UW351Gv2V62oDBkgzS/788tweU0ORA5g3t2oBHQB88oleHbt7N/Dpp4ZOf+CAPmC2UiUZPMPaWc9gXlN2/brtx5vfr65etf4483096Z7nSps3b8Yrr7yCXbt2ISwsDAkJCejQoQPuaG3eGTh27Biio6OTl4oVKzqhxNbzcXUBiFKqVk1f37dP+hBZY/9+ecyXT5L6eorHH5f44ORJGdE7c6beDw/g/LBuITpan2OuXDmgVi39tbx5JY9I8+bSVj5unMzPVLu2TZcw7zv54ou2jZQk16peXV/fv9/2JvLSpeXP6M4duedZS7vnpSxDThQbG4tbWooBAH5+fvBLYzj4unXrLJ7PnTsXRYsWxd69e9Eyk46qRYsWRX7tl7cbYg0duZ02bfSUH0uXWnfM7dvSTw0AWrSQ2SM8iZeXfIGn7Hv39tv66F1yoUWL9GGMTz2Vul2sSRP5xwJklMtbb9l8CfOAzvxvgNyf+T3LfCC0tXx95b4FyCCo2FjrjtMqjb28ZIaKnKxatWoICgpKXiZNmmTVcTExMQCAglZ0fqxbty5CQkLQtm1bbHL2JOJWYEBHbickRJ/4/scfgUy6NwAAvvhCvwm+/LLjyuZoWt+7zz+XDvGff87Ra25h/nx9vV+/tPcZNw4IDpZ1W6pZ/nPqlL7OgM6zBAfrKZYWLbJtbIzW/+6ll+Tx9m35f5+ZEyfk/ghIqpRixay/ZnYUERGBmJiY5GXUqFGZHqOUwvDhw9G8eXPUqFEj3f1CQkLw7bffYunSpVi2bBkqV66Mtm3bYot5GgN34OqpKtwBpw5xP4cOKeXvr0/9deVK+vuuXatP/dWmjUyh4+nGjdOneWreXKnERFeXKAc7cED/x2jcOON9W7TQ971926bLNG6sH3r3bhbKSy5x7JhS+fLJv1/16kpFRWW8//XrSj32mOXUX61b61N/rV6d/rHmU3/lyaNURIS93oXnycr398svv6xKly5t6NiuXbuqbt262XycI7GGjtxS9eoy+tPbWzLl160LzJkjMy5pjh8Hhg8HHn1UJr0uV05+HWeHUWLvvCMJhgFJX/Ltt64tT45mXjv37LMZ71uqlL5uYzJErYauRAmpnSXPUqkS8MMPkm/68GHJEffJJ5ZN6YmJ0u/t/fflfmU+zsZkAhYvlu0PHkit27BhMv2bJiYG+P57Gfl88KDcH2fNAqpWddrbzDZee+01rFq1Cps2bUJoZvO0paFx48Y4ceKEA0qWBa6OKN0Ba+jc12+/KVW8uOUk90FBSuXObbmtQwelLl92dWntKyxMf3+5cyu1f7+rS5QDPXigVHCwXm1y7VrG+7/7rv6P9ttvVl/m5k39sFatslZkcq1t25SqUMHy/pQrl1IFCyrl5aVvM5mU6ttXqfh4y+MvX1aqY0fL43PnVip/fsttISE2/YllW7Z+fyclJalXXnlFFS9eXB0/ftzwdXv16qXatGlj+HhH8LCu45TTPPKI/MKdNw9YvRr4+28Zqp8rl1SGtGgh8xm2bevqktpfu3bSH3DaNMlR9vjjwN69+mTe5ARbtshEnQDQtWvmWWPNh1fbUENn3n9OSzBNnqlZM5ni9+efgV9/lUw2ly9LH9+CBYEqVYBWraQrZlrzVBcpAqxbJ4OqFy2SKcGioyXNYYkSMsC6a1dJd5Qnj9Pfnsd75ZVXsGjRIqxcuRIBAQG4+N8kuEFBQfD/r2p81KhROH/+POb/Vzs/depUlClTBtWrV0d8fDwWLFiApUuXYqm1o/achAEduT1/f+kwrHUazkk+/xz4809gzx750n/6aclv62mjeD1OVJQMXTRvL+vdO/Pj7BDQcUCE5/P2lunbnnzS+DnatJGF7Gv69OkAgNYphgXPnTsXAwYMAABER0fjnDaRMoD4+HiMGDEC58+fh7+/P6pXr441a9agc8ppf1yMXwtEbszPT37p16snM0msWaPPNBEWJrV4ZGcxMTKpbkopp/hIi3kfOrMvhMyYx42soSNyHGXFtB7z5s2zeP7222/jbS0tkRvjoAgiN1emjHSETql9e8lZRXY2eLA89uljuf3xxzM/1uCgCNbQEVFWMaAj8gALF6a9XZsaKipKRsWaTLL8/rvzypbtLFkij0aGDubNq88DZUNAxxo6IsoqBnREHkCLMb74InValp9+khZC86CAtXdZoNXMmc+/Zgutlu78eSAhwapDtH+7woU56IWIjGFAR+QBtBjj6FHJXWU+RaH2Wvv2MjvVtm3ynBO7G6QFctHRltutnVRXGxiRlCRBXSbu3dN3Y3MrERnFgI7IA2gxxsyZknA0Li71Pps2ST/8Zs2cW7ZsJygI+N//LLeFhVk/qa6NI11Pn9bXGdARkVEM6Ig8QFAQEBlp+YW/bh2wcqU+fWjdutLat327a8qYrWzcqK+Hh9s2nNjGgRHMQUdE9sC0JUQeIjRUJuROqWVLoEAB4K+/AC+zn2jWthBSCjduAL/9JuvFiwPNm9t2vHkNnRWpS/bs0dcrVbLtUkREGtbQEXm4/PlT196FhQE1a8qckGSj5cv1D653b8kSawsbm1zNB6+0amXbpYiINAzoiLIBrfZOKZkA/NQpmWLo889dXTIP9OOP+rqRVP82NLlevy41qwBQvbpM7UREZAQDOqJsJiJC5oC9dQsYN84ynQll4vJlvf9c2bJAw4a2n6NwYZmvDsi0yXXjRhkMC3BUMhFlDQM6omymRg1g2DBZ79tX0mIw6bCVfvlFj7CefDJ10j9rmEx6s+u//0q1aTrMm1utHURLRJQWBnRE2dAHHwB//CGJiGvVYtJhq/3wg76elZnVtWbXe/eAa9fS3EUp/d/Bzw9o0cL45YiIGNARZUN58wJt2ujTkg4ezKTDmTp0CNi1S9Zr1ZJRJUaFhOjrly6lucvx43qLbIsWQJ48xi9HRMSAjigb06YMmzhRBkrUreva8riVlBPgvv++/toLLxhrbtUUKaKvX7mS5i7maWUYYBNRVjGgI8rGtGnBevcGatcG+vd3bXncRkxM6glwly+XRz8/4Omns3b+okX19XQCOvPcxe3bZ+1yREQM6IiyMW3KsE2bgLt3pc8/wKTDqdqix43TX3v8ccnUnBXmNXSXL6d6OSlJn9GjYMGste4SEQEM6IiyNW3KsIIF9W116rBGyKItGpDpvTSDBmX9/Jk0uR47po+VaNbMcoYPIiIjeBshyuZCQ4Hz5yWtGgAcOKC3LuZYWlv0mDES3JkHdPaYriGTgE4bnALYPrMYEVFaGNAR5QC5c1vOGjFiBBAf77ryuJzWFj1zpiTr04wenbXBEJpM+tAxoCMie2NAR5RDdO8OtG0r62fOALNmubY8LqW1RefNq29r2VJvgs0qK2vo/PyA+vXtc0kiytkY0BHlECYTMGmS/nziRBkokWNdvgzcuSPrhQsDP/9sv3PnzatP/5ViUMSFC8Dp07LesKEEdUREWcWAjigHeeghoGdPWY+OBr75xrXlcalff9XXx42zbCa1B62WLkUNnTa6FWBzKxHZDwM6ohzmgw/0bmIffwzcuOHa8rjM2rX6evfu9j+/FtBdu6bPDwv2nyMix2BAR5TDVK8OPPOMrF+/Dowd69ryuMTVq8Cff8p6jRoyFNjetBq/pCT5oP+jBXQmE9C0qf0vS0Q5EwM6ohzoww/1uUO/+Qb4+2/XlsfpNmwAlJL1Tp0cc410BkYcPy6PFSoA+fM75tJElPMwoCPKgUqWlAwdgFQgvfqqHt/kCObNrc4I6P4bGHH/PnD7tmwqVswxlyWinMnHyEF370rH3h07ZH7rq1fl136RIjKFTatW8uuTiNzXm28Cc+fKdKZbtwIvvQR89RXg6+vqkjlYUpI+91m+fDJVgyOkUUN39aq+qXBhx1yWiHImmwK6HTuAGTNkPsi4uPR/0ZtMQNWqwJAhwLPPAoGB9igqEdmTnx/w/vvyfxSQHLs7dsikCeZThWU7e/bokVX79kCuXI65ThrJhc0HvJrHe0REWWVVk+vhw9Iq0aIF8OOP8vjee8DKlcCuXdIn5OBBmQB8xgygf39pVhg6FChXDvjySyAhwfpCTZs2DWXLlkXu3LlRv359bN26NcP9Fy5ciNq1ayNPnjwICQnBc889h2vaRIlElKaYGD2Y0/zzj+UozGxp1Sp93VHNrUCaNXTmAR1r6IjInqwK6GrXlmaZL7+U3FXr10vapm7dJDFmhQp6U+uLLwJz5gBnz0qA17mzNO188ol1BVqyZAlef/11jB49Gvv370eLFi3QqVMnnDt3Ls39t23bhmeffRYDBw7E4cOH8fPPP+Ovv/7CIHtMsE2UjQ0erD/u2AEUKiTPtQweUVFAxYpS424yAb//7ppy2pVSMncrIG+qa1fHXSuTJlfW0BGRPVkV0M2aBRw9Crzyin7Tt0arVsD8+XKstfmWPv/8cwwcOBCDBg1C1apVMXXqVJQsWRLTp09Pc/9du3ahTJkyGDp0KMqWLYvmzZtj8ODB2LNnT7rXiIuLw61bt5KX2NhY698UUTahxTUTJwJNmsh0YJqYGBk4cfKkvq19exkc6tH279ffVOvWQEiI466VxqAINrkSkaNYFdANGAB4exu/SPnyEtxlJj4+Hnv37kWHDh0stnfo0AE7duxI85imTZsiKioKa9euhVIKly5dwi+//IIuXbqke51JkyYhKCgoealWrZpN74coO+jTRx7HjJGKK/PUJVrtXcmSQJUqwLJl8rxjR+eW0e60KBbQPwBHSaMPHQdFEJGjuFXakqtXryIxMRHBwcEW24ODg3Hx4sU0j2natCkWLlyIPn36IFeuXChWrBjy58+Pr776Kt3rjBo1CjExMclLRESEXd8HkSeYOVN/9PLSa9HXr9fjnshIqWHPFsmHlQJ++knWvb2BXr0ce728eYHcuWWdgyKIyMHsEtDduyfNsiNGAG+9JakQ7t83fj6TNi/Rf5RSqbZpIiIiMHToULz//vvYu3cv1q1bhzNnzmDIkCHpnt/Pzw+BgYHJS0BAgPHCEnmooCAJ2MxTDIWFAR066JVXgYEyCPSFF1xTRrv680/p3AsAbds6vorMZEo1nytr6IjIUQzloTO3fz/QpQtw6ZLcoO7fB2JjJR3CmjVArVrWn6tw4cLw9vZOVRt3+fLlVLV2mkmTJqFZs2Z46623AAC1atVC3rx50aJFC0ycOBEhjuwjQ+ThQkOBEydSb585U2rpbt2S50OHyqOWvs0jmTe3Pvmkc65ZpIhEzVevAklJuHLFy+IlIiJ7yXIN3UsvAZUryw/fS5ekM/WmTZKn7tVXbTtXrly5UL9+fYSFhVlsDwsLQ9N0Jj28e/cuvLws34b3fx3+VI5KfU9kPxnV3gHA6dOuKZdhDx4AixbJuq8v0KOHc66rRW2JicCNG8lNrnnzAv7+zikCEeUMVgd0v/6a9va9e6VTdcmS+rZWrYCnnwb++sv2Ag0fPhyzZs3CnDlzcOTIEbzxxhs4d+5cchPqqFGj8KxZ8qxu3bph2bJlmD59Ok6fPo3t27dj6NChaNiwIYoXL257AYgIgF57p5Qs7drJ4/jxQLVqwMaNri6hDdatk1+cgORlKVDAOddNMTBCa3JlcysR2ZvVAd2jj0orxX+j75MFB0sOK3NJScDu3Zb3Mmv16dMHU6dOxYQJE1CnTh1s2bIFa9euRenSpQEA0dHRFjnpBgwYgM8//xxff/01atSogSeeeAKVK1fGMm1YHhHZzY8/Sg7KuDiJi9IZfO5+5s7V1wcMcN51zdpVky5dgZbvnM2tRGRvJmVlu+Qff0jz6tWrwGefAc8/L9s//1wGQ7RrB9SrJzf6deuAY8eAqVP1vjfuLCoqCiVLlkRkZCRCQ0NdXRwit/XgAfDEEzJLjLn16/Xm2KgooE0bPd1bWJjcH1wiKgpo2VJPslewoNTU+WS5+7B1Pv4YGDUKABA79xcEPicjazt1AtaudU4RiLIzfn/rrK6he/hhyVM1eLAEdg8/LDfs4cPlV/vt28C33wLffy/3zJ9/9oxgjois5+urpzsx17Gj/Lhzq4TEWmHMMyZfvy6/Tp3FrG319rnraW0mIrILmwZF+PkBH30k/ebu3ZMRrJMmSTqnHTvkXnn9OrB9u+NTPBGRawwbJo8pR7C/+aY+iOKFF6TrhTYvrEsSEmvZkVNOb+PMwphdO+6CPr80m1yJyN4MjXKtUUMCuE8/lTla69WTFE9ElP1p2T82bpSatzJl9Ne0Tv+rV0vXi2bNnF48nVZQrePaQw85vwwFCyavxl9iDR0ROY7htCUmk6QlOXwYKFdObtzDhgF37tizeETkbsynDGvXDpg3L/U+Fy/KQKqPP3Zq0SylnNqrenXnl8EsoEu6ogd0rKEjInuzKaA7cAB4+WWga1d53L8fKFECWL5cZtRZtkzSGaSX4oSIPF/KKcNat5bnv/0GrFih75eQkDwewDUJiVN29tMiT2cWxiygM11nkysROY7VAd2aNdJi8eOP0qzy009Aw4ayHQB69gQiImTWiB490k5xQkSeL72kw488IqlMzpwB8uXTX/Pzk1p8pwsMBIoVs9xmnh3ZGcwCOu9bbHIlIsexOqAbM0Zq3/79F9i1Sx5r1JDtmoAAYNo0YOtWaYqtUsURRSYiV0sr6bCmTBng5k2gb195Hhcnqd8SE51cyBMnpO0XkCAuZUGdwd8/eUoIvztsciUix7E6oDt5UgaHafPY580r6QjM0xNomjSR5tgRI+xVTCLyJN7eksZIq5nbvh2YMsXJhTCfyqJtWydf3Mx/tXT+91hDR0SOY3VAV6GCjGjTBj3cvy/3S/NmF3M+PsC779qjiETkifLlk25rJpO0fDp9TIJ5vrmHH3byxc38l7okIP4aAAVvbyB/ftcVh4iyJ6vTpY8fL/3kSpUCKleW1ozr12UgBBFRWlq0ABYskNr9lOngHCopCdi0Sdbz5wfq1nXixVP4r4bOT8XBH/cQWDgPvAznFyAiSptNc7nu2gU8/rjMa92rlzzv3t2RxSMiT/fUU04O5gBJjKnln2vdWtqAXcVsYERBXGdzKxE5hE2/Ex96SDIBrFkDzJjhmjydROS5oqKAihWlGdZkAn7/3UEX+uorfb1bNwddxEpmAV0hXOOACCIXmjRpEh566CEEBASgaNGi6NGjB44dO5bpcZs3b0b9+vWRO3dulCtXDjNmzHBCaW3Din8icgqnzfN6/rzkVQKkalAbbusqZtWTrKEjcq3NmzfjlVdewa5duxAWFoaEhAR06NABdzKYFeHMmTPo3LkzWrRogf379+Pdd9/F0KFDsXTpUieWPHNW9aH75RdpajXq/Hng3DkZ/UpEOZM2taqmd2+Juzp2lIwidvPNN5LVGACGDElOG+IyKZpcnd78TETJ1q1bZ/F87ty5KFq0KPbu3YuWLVumecyMGTNQqlQpTJ06FQBQtWpV7NmzB5MnT0YvN5q43qoauj59gNq1gR9+sG1qrwMHgFdekZGw5hkEiCjn0aZWzZULKFpU+tbZ3d27+gwRvr5yA3K1FAGdlvqJiOwnNjYWt27dSl7i4uKsOi4mJgYAUNDs/2lKO3fuRIcUCck7duyIPXv24MGDB8YLbWdWBXS7d8tAsf79geBg4IkngMmTJSvA4cPAhQvAqVPAX38BixYBr78uSYfr1wcWLgTef5856YhyOm1q1YcfBv75x0G52BYskOH3gExXExLigIvYyKxKrhCuMaAjcoBq1aohKCgoeZk0aVKmxyilMHz4cDRv3hw1atRId7+LFy8iODjYYltwcDASEhJw9erVLJfdXqxqcm3QANi8WWbNmTEDWLkSWLpUOjWnRSlJKPrRR8CgQS4Y4UZEbmfmTKmlW7dOfhhq7Dq16nff6evDhtnxxFmQoobOlwEdkd1FRESgRIkSyc/9/PwyPebVV1/F33//jW3btmW6rylFwKP+6yeScrsrWZ2HDpAOzO3bAzduAFu2ADt2yKi1a9ekm0qRIkDNmkCrVkCtWo4qMhF5Im0O2DZt9IERYWF2mI0rKsrypIA0D9Svn8UT20mKgE7ly2BfIjIkICAAgYGBVu//2muvYdWqVdiyZQtCQ0Mz3LdYsWK4qE0j+J/Lly/Dx8cHhdyoxsqmgE5ToIDkn2MOOiKyhTYHrObsWeCFF+SHYu/eBk6oDZ1NyZ1GYKVIWxLHGjoil1FK4bXXXsPy5csRHh6OsmXLZnpMkyZNsHr1aottGzZsQIMGDeDr6+uootrMUEBHRJRVx49LX9sHD6TG/7HHZMpAm2hDZwcOlOH4/3VwxtdfW+aic6UUNXS3GdARucwrr7yCRYsWYeXKlQgICEiueQsKCoL/fyPiR40ahfPnz2P+/PkAgCFDhuDrr7/G8OHD8cILL2Dnzp2YPXs2Fi9ebP2FT52SgQda0+bVq0CePJZNmy1byqgxgxjQEZFLVKwoFWlbtkhwt3gx0K+fjSfRhs42aADMnm33MtqFvz/iffyRK+EeCuI6TAzoiFxm+vTpAIDWrVtbbJ87dy4GDBgAAIiOjsa5c+eSXytbtizWrl2LN954A9988w2KFy+OL7/8MvOUJUrJjW3GDGD7dn1bSqtWyaCDAgWAAQNkdL4VNYcpmZSyawYojxQVFYWSJUsiMjIy07Z0IrKfzZtlZi5A0hsdOWJjLd2TT0pQFxoqv3rNudGt7Ua+UBS4cx7nURyX95136dSyRNmJ235/r1sHvPWWpAIpUgTo0UN+wdavL6PCChYE7t2TUfnHjkk6kQ0bpAbP1xd4+WXgvfckyLMSZ4ogIpdp1UrSmAAypqFECRunBdNyzqUM5uw6dDbrYn2l2bUQriFfXvcJNInIQTp3ltxMq1dLbreZM6X2rWZNScTp4wMEBAClSwMdOkjwtnUrcOYM8PbbwNy5NncbYUBHRC41fry+fvmyvm7VtGBBQcB//VyShYXJDdKNxPjISLjciEOAzz0Xl4aIHO6PP4BNm4AuXQBvb+uPK1UKmDBBRozZOPKUAR0RuVTz5kCxYvrzsWMBLS1Ux45WnGDfPn39l1/skAfF/m6Y9IERgQnXXVgSInKKFH30bBYUJFN02YABHRG5nHmKpw8/hG2zKWjNq97eQNu2di2XvVxXekDnf/eaC0tCRNkVAzoicjltWjAASEiQ6QWtEhkpIykAoFEjmaPQDV1J0pOPmm6who4ox1q+XJJu1qolI8E0R48Cn34KnD9v+NSG05ZEREiqp7/+Am7eBBITU+9jMknqFSKijGjTgmmOH5fHTMc2mO9gVfusa1xOMJv4+zoDOqIcJykJ6NtXuoUAMr3WPbP+tAUKAKNHSzA1apShSxiqodu8WUbezpgBHDwI3L8vGQJSLklJhspERDmMNi2YedaBsmVlYESGPCSgu/iAAR1RjvbFF8DPP0sy9Bs3gBEjLF8PDgZatADWrDF8CUM1dCNHSrPIrFlA//62DeAgIkpLaKgEdU2aALt2yej9vXslZ3CaEhP13CYFC2awo2spBUTfNwvorrEPHVGOM2+e3KOmTZPnJlPqfSpUyFJAZ6iG7uBByef5/PMM5ojIvgYN0tdnzcpgx8OHpb8HICPK3PRmdO8ecEWZTeDNGjqinOfkSZnaKyOFCmXpB5+hgC4gQPLiERHZW+/eQN68sr5oEXDnTjo7arlNAMl94qZiY4HrMKuhu3rVdYUhItfw9wdu3cp4n3//zdLALkMBXZcuktCYiMjeAgKkBQCQYEjrQ5yKNjci4PYB3WWY/QK+csV1hSEi16hbV/r8xsWl/fr16zJdWOPGhi9hKKD79FMgJgYYOhS4e9fwtYmI0jRwoL4+d246O2kBXZ48QJ06ji6SYbGxwDUUQhL+6zNz6ZJrC0REzjd0qHQSfvzx1KlJTp0CevbUAyuDDA2K0JpEvvlG+vlVrCij1FIymYCNGw2XjYhyqMaNJUl6+fIy0j+VqChpngCAhg1lMms3dfs2kAgfXEVhFMUVy/nNiChn6N5dRpR+/LFM76X1KylaVPrNKSXzuWqTWxtgKKALD9fXb98G9u9Pe7+0BnEQEWXGZJIRrumOczBvbm3WzCllMio2Vh4vo6gEdJcuyc2bN0iinOWjj4A2bSSJ7+7dkvMtKQl45BGpmcti6iVDAR3zyxGRo2U4aNVD+s8BekB3CcGogcNyE79928b5zYgoW2jf3ooEm8Zw6i8i8jzaCFeTSRLXuTHzGrpk7EdHlLPMnw/8/XfG+xw6JPsZZJeA7s4dIDo6g/QCREQG3b8PrFgBrF7934bYWEmGCQA1aqTdgdeNmNfQJWM/OqKcZcAAuZFlZM0a4LnnDF/CcED34IE0B1eqBAQGSpb3wEAZIPHRR0B8vOEyEREBkJH8xYrJALD33pOuZ9iyRe/34eb95wBpXQVYQ0dEmUhMBLyM17MZOvLePenX9957wNmzEtS1bAlUrgycOyfbW7e2nHeWiMhWBQvKfQWQSrm9eyHzIWo6dXJJuWzBGjoissr+/XLTM8jQoIhPPwV27ACeekpG4JpPqH3hgozMXbBA9hs71nDZiIjw1lvAzJnAxIlAg5pxerNFYGCWR4U5Q5oBHWvoiLK/lClI5s2zTBOiSUyUVExnz0peOIMMBXQ//ihzzC5YkPq14sWlT9/Ro7IfAzoiyopevSQvXZs2QOWTYfgVMfJC9+6An59rC2eFNAdFsIaOKPszD95MJgnYzp5NvZ+Xl9TMPfEEMHWq4csZanI9exZo1y7jfdq2TbvcRES2uHULKFlS5rbujZ+St++rYPyXrDOxho4oh0pK0helgHHjLLdpS0KC/Mj78UcgODjT06bHUA1dnjyZT0d45YrsR0SUFYMHAyUQhX2BrVH01ikAwG3kQZOx7RH3vosLZwXW0BERNm0CypRx6CUM1dA1biyB5OHDab8eEQEsWeL26aGIyAP8tiQGUSiZHMwBQD7cRStsdmGprKeNco338ofSkgmzho4oZ2nVCihd2qGXMFRDN3o0EBYGPPSQTKLdqpXUEl66JE3Gc+dKWpNRo+xcWiLKcX4rORiIBK4ElEWR2DPJ2zegIwDluoJZSauhy5cPMBUpKhtYQ0eUvWkJgnv2lFlhbEkY/Oyzhi5pUkoZuiMuXQoMGgTExFhOSaiU5Pn87jvg8ccNlcnpoqKiULJkSURGRiLUfMguEbnefzeYB/CGLxJxEcEoBqnhuh2rkC+fKwuXudBQ4Px5oEQJIKp0M0kRAABxcUCuXK4tHJGHc9vvby8vuXcdOSK53bTnGdHmeE5MNHRJQzV0gIw869hRMgjs3y8dlwMDgbp1ZfAZpykkIrvo0wdYsgS+kJtcGNqhHxYCkB+Ob7zhysJlTquhCwgAUNSsH92VKxLlEVH2M2eOBGchIfJ87lyHX9JwDV124rYRPhEBN28CBQqk2twB63GtXgdJNuymlAJ8fGQgW4MGwF/1h0hSPUCyJNer59oCEnk4fn/r7DKXKxGRw6Qx+urlimEIQwfs2wccP+6CMlnp3j19lrJUNXTsR0dEdmRVk6sL+vYREYnZs/X1H34AnnkG5acAGCGbfvwReN9N05doza3AfwFdMHPREeVI588Dp05JVb2W0y0pCfjsM2DVKtn25pvAI48YvoRVAd2AAdIU3Lix3JS05xnR+vYxoCMiw5QC1q2T9bx5pfMupFvdiP8CusWLZf7ozO5JrpAqoGMNHVHO9N57MujA/Ifchx9aTqe1ebMMmmrQwNAlrAroXNC3j4hIftFGR8t68+aAvz8AGTnaogWwdatMM3jwIFCnjuuKmR7W0BERAGDnTpliy9dXniclAV99BVSpAmzYAFy8KK9PnizNDgZYXUNnrn9/Q9ciIrLNZrPkwa1aWbzUt68EdIDU0rl7QJcvH1hDR5RTRUcD3brpz/ftA65eBcaPl1+ooaFAjx6W9zwbGRoUsWULcO5cxvtERcl+RESGmd9EWra0eOnxxwFvb1n/4QdJZu5uWENHRAAkt5w2QgqQX6MmE/Dww/q2EiWkps4gQwFdmzbAvHkZ77NwoexnxLRp01C2bFnkzp0b9evXx1btZ3g64uLiMHr0aJQuXRp+fn4oX7485syZY+ziROQ+tF+ruXOn6ldSpIj+gzc6Gvj1VyeXzQratF/AfwFd/vx6kwtr6IhyjlKlgD//1J+vWCH92CpX1rddvCj3CIMMBXTWZK5LSjLWSXnJkiV4/fXXMXr0aOzfvx8tWrRAp06dcC6DKsHevXtj48aNmD17No4dO4bFixejSpUqtl+ciNzHv//KAsjE0H5+qXYZMkRf19K7uZNUNXQmE1CsmGyIinJJmYjIBXr1ArZvB554AujXD9i2DXjsMct9Dh0CypUzfAnDM0Vk5sQJmQLMVp9//jkGDhyIQYMGAQCmTp2K9evXY/r06Zg0aVKq/detW4fNmzfj9OnTKFiwIACgTJkyGV4jLi4OcXFxyc9jze+6ROQeMmhu1bRvD5QtC5w5A6xfD5w+naX7od2lCugAmaA7MlL6z9y5I6N3iSh7GzFCBj8sXSrPa9YExo3TXz9yBPjrL2DUKMOXsDqge/55y+crVgBnz6beLzFR7z9nazqV+Ph47N27FyNHjrTY3qFDB+zQ5j9MYdWqVWjQoAE+/fRT/PDDD8ibNy8effRRfPDBB/D/b0RcSpMmTcL48eNtKxyRvSUmyn/uX38Fdu2SJri7d6XKvVIlGcb59NNAjRrpn+P+feD77+UcBw/KdFK5cgHFi8vxffsa7/vgauYBXYoBERovL+DFF/V74HffAWn87nOZVIMiAKBMGfl1DkgNZLVqzi4WETlbYKDc5w8dkudVq+qdgAEZwb98ueGUJQAAZSWTSV+8vCyfp1y8vJRq1EipEyesPbs4f/68AqC2b99usf3DDz9UlSpVSvOYjh07Kj8/P9WlSxe1e/dutWbNGlW6dGn13HPPpXud+/fvq5iYmOQlIiJCAVCRkZG2FZjIqJ07lapUSSnpwSCLr69SBQvKfyDz7Y89plRcXOpzbNigVGio5b6BgUr5+Vlu69RJqatXnf8es6piRf1zuXMn3d0uXlTKx0d2LVAgw12dbsQI/Z9h8+b/No4Zo29cu9al5SPydJGRke77/f3++0rt2+e0y1ndh+7MGVlOn5Y70euv69vMl3PngFu3JBCtUMFYkGlK0flOKZVqmyYpKQkmkwkLFy5Ew4YN0blzZ3z++eeYN28e7t27l+Yxfn5+CAwMTF4CkttCiJxg9WqgdWuZs6pQIalSOn4ciI8Hrl2Tx7/+AkaOlF91y5ZJzZ25n34COneW6vASJYBZs4Dr14GYGKm1O3JE/pP6+AC//SZZwT2pE/65c9JvAwAaNtQzq6fhwYPk9HS4cUPycrqLVIMiAGly1aTVzEFE2cPEiVLjVqoU8NprQFgYkJDgsMtZHdCVLi1LmTKSWLh/f32b+RIaarxLSOHCheHt7Y2LKYbtXr58GcHmw/3NhISEoESJEggy67BXtWpVKKUQxU7H5G5OnACeeQaIi5OmtgMHJHCrWFHfx9tbbgKTJsmvpO7dLc9x9Kj0gUhIkH4Y+/cDAwdaTmBfpQrwxRfAypXSBHvyJPDUU055i3axdq2+3rFjurvFxAAlS1o2bbZvL11V3EGqPnRRUakzwxNR9nT+PDBtmnSbmTVL+qEVLiz34iVLpPbLjgyNcu3fH6hd267lAADkypUL9evXR1hYmMX2sLAwNG3aNM1jmjVrhgsXLuC22U/h48ePw8vLC6GhofYvJFFWjBkj/4lz55b+Epn9jRYsKB1WzUcYjR4tnen9/ICff5b8Henp3FmuCQAbNwJr1mT5LTiFeTm7dEl3t8GD9cekJL1rmhYDRkY6qHxWMg/oAtV/0eeFC/rGJUvcJ/okIvsqVkxuTmvXyiCoJUsk19KGDdK/uUgRoEMHCfrscbMy0k47ZYpShQopdf582q+fP69U4cJK/e9/tp/7xx9/VL6+vmr27NkqIiJCvf766ypv3rzq7NmzSimlRo4cqfr165e8f2xsrAoNDVWPP/64Onz4sNq8ebOqWLGiGjRokNXXdOs2eMo+Ll7U+8cNHGjsHBcu6OcYMMC6Y2JjlQoI0PvTubu7d5Xy95fyhoQolZSU7q5aV7QrV1JvmzJFqTx5lPrzTyeUOR1t2ujledCrj6wMGmTZx9HYbZiIlId+fyckKPXHH0oNG6ZUuXL64IN69ZSaMEGpAwcMndZQDd3PPwO1aslAurQULy7T8BiZjqxPnz6YOnUqJkyYgDp16mDLli1Yu3YtSv/X7yQ6OtoiJ12+fPkQFhaGmzdvokGDBnj66afRrVs3fPnllwbeGZEDbdqkZwrv2dPYOcLD9XP8N1F9pvLlk1+BgGQnd2AfDrvYvBnQ+r926pRhQss+feRxzBiJjLZv1197803pejhkiGWCdmfSaui8vACfpUvkyaRJ6d88iSj78/aW7ANTp8p81QcPSgoTLy95rFdP8jHZyFBAd/x4xpkUAKB6db1Ps61efvllnD17FnFxcdi7dy9amuWgmjdvHsLDwy32r1KlCsLCwnD37l1ERkZiypQp6aYsIXKZw4f19bp1nXsObaLT27f1ZL3uysrmVkBPJjxzptwLmzeX56tXy49Ok0m6h6QcU+IsWkCXLx8so89SpVxTICJyPzVrAu+9J4PhIiOBr76ynEHCSoYCurt3Mx/4kDu35Qgvohzv2jV9/b8k2Fk6R6FC1h9XuHDa53AnUVEyOOTrr+W5tzfQrl2GhwQFyf3PfER9WBjQtSswe7ak59u6VQYkmEzA7787sPxp0O6BAQGwjD537dJ3mjXLuYUiIvehlNR+aYM4ixcHXn4ZWLfO5lMZCuhKl848NcDOnZn39ybKUayZM8/Z1963Dxg+XKqxAgOlKqlxY5mM2Zm04aonT+rbEhMtA590hIbK/VDrkKbFgBUrSgWf+SmdPQJWq6ELCEDa0Scg75uIsreVKyU7wY0b+razZ6V2rkoVCayefjpL/UMMBXRdu8posjlz0n591ix5XZs4m4hgWUt2/bqxc5jXytlS05Zezd6nnwI//CBzpU6eDEyYICNon3kGcOZsKtpw1ZTNyBmkLLH2lNoI2K1bs3xKmyiVooYO0KPPGTP0HZmLjij7mzFDmlTN00u9/joQESH96WrVkoEHc+cavoShuVzfeUeu+8ILwIIF8qu3RAlJubJhg8zYU7x4lqYkI8p+qlfX1/fvN9Yx3nyaqH375D+eNfbvl8d8+SwT2w4dCsybJ30kNC+9JH3uPvxQXje/ATnKkv8GDGg5KL29pYbODqecOFGaW7WPAHDOnK937+o/tpOn/dKYzzft7n0aiSjrDh+WYEkTEyPpTPr0ARYvlgzpdetKX5GBAw1dwlANXZEiMmCvQQMZdDd6NPDcc/K4eTPw0EPyekbpsYhynDZtpOc+IDnosnoObZLnzNy+LR3LAJnf1cfsd1zTppbBHCDTLnTtKjeYY8eMldNW2oCB6Gh5bNTIbqccM0YGzX78sf5a69YS1DlSqqTC5swDOtbQEWV/V64AISH6823bJONA377y3NdXAj7zPiI2MhTQAdI/Zfdu4M8/pQ/zBx/I459/Zm3aL6JsKzhYTzWyaJEMF7eW1gcuJESfOeLHH60LuL74Qo8uXn7ZuutpyW+d9atMGzCg0Trprl+f5VPOnCkzh5nn842MlNi2XDmpvXPEgIk0p/3SmI9yZUBHlP0FBlp2fQkPlx/nLVro23x9pcuLQYYDOk2DBvId8e678tigQVbPSJSNTZwo7W/37gGPPSb9FDJy44YEgTEx+rYPPpBatLg44IknJAN5en77Ta4JSO1eJmlAAEifjmXLZHBE+fKZ728PJlPqmsKwMD1/ngFpjUH46Se91frCBZlZTWPvARMZ1tD5+0uAD7DJlcjJtmzZgm7duqF48eIwmUxYsWJFhvuHh4fDZDKlWo4ePWr9RatUkXxK2pzbP/4o+ebMu7T8+69+XzAgywEdEdmgUiUZhJArl/SpqFMH+OST1KM79+8H3n9fqpCWLbM8R/XqMvLI2xv45x/pdzFnDnDzpr7P8eMyevXRR4H4eDnPokUZJukFINOSPfGE/HJMWWvmSL/8Aty/L+uvvGI5XDULUo6AfeIJ6baifQy5cknMnHLKMHvIMKAD9GbXCxckOCcip7hz5w5q166Nr7UUSVY6duwYoqOjk5eK5nNwZ2boUPm/XqKEPgXgkCH664mJciPKwryqhgZFaHbulGaK9O5HJpP07yMiMz16AH/8AQwYIIHcyJGy5MoltXc3b+q96U0m6WORMvHjU09JLruBAyV/0cCBsgQFyX9GLTgCpJZrwYLMm0/v3ZOh6cePS4BVq5Yd33QmzJMJP/OMQy9VurTegh0fL4PPRo60/3XMA7pUgyK0guzeLYVJK50JEVktNjYWt8wmu/fz84Ofn1+a+3bq1AmdOnWy+RpFixZF/vz5jRWwVy/gm2/0oKh3b0ljotm4UUZSPfKIsfPDYECn9eNbtkzuRSaTZZor7TkDOqJ0NGsGHD0q8+j9+qt8sV++LFFAwYJSPd+qFdCvX/oZwx95RALCefOkKv/vv6X5NVcu6aPVooX8R23bNvPyxMfLdGTbtkkOOq2fnjMkJsooKkDe+0MPOfySnTtLTR0ATJnimEtaXUMHSFMLAzoiw6qZZwAAMHbsWIwbN86u16hbty7u37+PatWqYcyYMWjTpo1tJ3jpJVnS0qGDZY46AwwFdFOmyAC755/X+829/rqMKtuyRUaTtWsnLUlElA5vb+DJJ2Uxyt8/45uENRIS5Nfihg3yCywr5TFi/379RtamjXwuDrZoEaD90L56VW/dzcIYjFQyDejM08dwYARRlkRERKCEWRqn9GrnjAgJCcG3336L+vXrIy4uDj/88APatm2L8PBwi6lJUyldWlpkuneXH+gOvrcZCugWLpS5XM1nrMmfXzINNGokv34bNgQeflhP7klEbigpSZo4V64Epk2T/EPOtnGjvm5NbaIdBAXJzDrmrRthYXbptpcsw1GuAHPREdlRQEAAAgMDHXLuypUro7JZS0mTJk0QGRmJyZMnZxzQVa0qfZG//lpGuXbpIsHdI4+kc1PIGkODIk6elDxOGpNJUlZpqleXrjjTp2exdETkWCNGSAbeli3lBrNggeXi6GRtgEsCOkAGQJh3E7R3omGbmlxZQ0fkURo3bowTJ05kvNO6ddIEsHix3s+jTx/pz/zII9KBN7NMBzYwVEOXK5fkddLkyyfdf8yVLi3deojIje3bJ49btsiS0ty5jp1SIS5OH2IaGioJLp2ob1/peghIXGvP2W2sGhShYUBH5FH279+PEPNEwenJl0+6tPTuLf2Fw8OlRWT1aumz9sorkr6kRw/JSlCzpuEyGaqhK1lSBmVpqlSR7wLzgRG7dkn/ZiJyY+Hhek6PtJYBAxx7/Z07ZXQtIO2dmaVVsTNtNglAfkTbU6Y1dHnz6vP7ssmVyGlu376NAwcO4MCBAwCAM2fO4MCBAzh37hwAYNSoUXj22WeT9586dSpWrFiBEydO4PDhwxg1ahSWLl2KV1991bYLe3tLK8SXX0oSTC09VVIS8N57ksaqXDlJORUebvP7MhTQtWplGcD16SMJ67t2lVG5ffvKj+4sjL4lopzAfHoGJza3asqWlfzJgKT0O3zYfufONKAD9GbXqCjLfitE5DB79uxB3bp1UbduXQDA8OHDUbduXbz//vsAgOjo6OTgDgDi4+MxYsQI1KpVCy1atMC2bduwZs0aPPbYY1krSO3awNixwN69wLlzwP/+J6Pdv/nG0P3QpJR5vZp19u0DvvtOZocoWVLuQ716SfYFTcOGklqqUCGby+R0UVFRKFmyJCIjIxEaGurq4hDlHE2aSHU+IH1Jihd3ehG+/BIYNkzWx4yRiTjsoXt3YNUqWb94MZ0E8I8/rs/Je+aMZb86IspUtvz+vnVL+tvZmHHAUA1dvXoy4KFkSXnu6ys3rj//lGaLHTtk8YRgjohc5NYt4K+/ZL1qVZcEc4B0bfH67074/feSxcUebKqhA9iPjohEYKCh9FGGBkXMny+/NlNOk9OgAedyJSIrbd4snYQBlzS3aooVAzp1ku4sgwdLjmWfLM2hI7SAzstL0gWmiQMjiLIn81kgbJGFGRkM3bYGDgRee82+8x4SUQ5jnq7EngngDJg1S1oUfH3leVSU5DjWptg1kqNOC+jy5ctgrAdz0RFlT/PmGTvO2QFdSIj8iiUiMkwbEOHlJSOtXKhYMX09JkbvTqJp315mkejQwfpzagFdhvlD2eRKlD2dOeP0SxoK6Hr0kJtbXBxgx9k1iCinuHhRH1LaoIE+D5cb0Ga3GTxY+grv2AE0by4tErYMIbMqoGOTK1H2ZP5/20kMDYr44ANpRujZ077D/Ikoh/jjD33dhf3nUlJKEgwDwMiR0vrRrJmx82hTf2UY0AUGAgUKyDqbXIkoCwzV0NWtK7VzBw5ITV3u3EDRoqn7iZhMwKlTdiglEWUvbtR/zpz5TBEvvyypl3bssP08d+/qtXmZTtlYpgxw44Zka09MdPgE3kTkQjt2SP+6Awekf0dgoARVzz4rTQFZYCigS0qS6b9KlbLcnrI5wvYMd0SU7Sml95/LnRto2tS15TFTv76+/ttvejoTQH68WivTab/MlS4tQ2wTEoALF1J34COi7GHECOCLL/TgyMtLAqq9e2UgxLBhwOefGz69oYCOXT2IyLBDhyQrOiDtmblzu7Y8Zlq3lgEQ9eoBixbpUxzaOsrVqhx0mpQDIxjQEWU/8+dLsFaliswO0bq15H+7fFmm+Ro/XmaKqFNHausMsLoP3fPP61nPNfHxkhuUiMhqP/+sr/fs6bpypKFIEWDDBuDjjyXm1Ka0NZqyBLAioDPvPM1+dETZkzYbw+7dMl+qNnVM0aKS3XznTiA0FJg2zfAlrA7otCZfc5Mm6f15iYgyFRUl0ZImm04now2IAKwI6MynK7pwwSHlISIXO3RI5khN74YQGAg89liWRpoaGuVKRGQzLcGb+ST0fftKlVg2Y1MNXUiIvs6Ajij7ymxgQboZyK3DgI6InENL8KYZNkwe3XDKmcRE6adsNNm7TYMizOewjY42dkEicm81agBLl1pW35uLjZXXq1c3fAkGdETkHFqCN82IEa4phxXatJF8x88/D1y/bvvxrKEjIgtDhkiXkyZNJHC7elW2X70K/PKLjPaPigJeesnwJRjQEZFzdOqkrzdu7NYDALT0JUoB27bZfrxNAV3u3HpnZNbQEWVP/ftLq8ThwzIIIjhYJo8ODpZBEocPA6++KvsZZFPakkOHgJ9+snwOyKC19JqGe/c2WjQiylYqVZLkbgCwa5eeRNOWBG9O0qIFMHWqrO/aBTz6qG3H2xTQAVJLd+OG1NApleW+NETkhr74QgZGzJ0ro0xv3dITC/fvLzeeLLApoFu6VBaNFsQ9+WTqfbV7EgM6IkJ8PLB4certtiZ4c5LGjfX1XbtsP96mUa6A9KOLiADu3ZObfFCQ7RclIvfXvHmWZ4RIj9UB3dixDrk+EeUEq1dLAk0AeOIJy6p+N1S8uAzIjYwE/vzT9hm5DNXQaS5cYEBHRDZjQEdEjvfdd/r6Cy+4rhw2aNxYAro7d6R7S61a1h9r0yhXwHKk64ULQNWq1l+MiDzHlSvAkSPA+fOWKZzMGZwpwtDUX0REVjt7Vs81V7Ys0LatS4tjrcaN9Uktdu82HtDZXEPHgRFE2c+9e8DrrwPff59+IKf1VWNAR0Ruad48vcPtwIGWM967sUaN9PVdu2yrWIyJ0detaj1NWUNHRNnLsGHArFnyy/Dxx+VHnI99QzAGdETkOEoBP/wg6yYTMGCAS4tji3r15H6bkGD7wAhtjmtfX8DPz4oDWENHlL398oskt9y507YOuTbwjJ/KROSZdu4ETp+W9bZtgRIlXFseG/j7A3XqyHpEBHDzpvXHajV0QUFWZiBhDR1R9paYCLRu7bBgDmBAR0SOtGCBvv7MM64rh0Hm6Uv++sv647QausBAKw9gDR1R9taoEXDihEMvwYCOiBwjPl6f7svfH3jsMdeWxwAj+eiUsqyhs4q/v74za+iIsp8PPpDBYb/+6rBLsA8dETnGunX6RKg9elg53NO9NGyor+/bZ90x9+9LvzvAhho6QJpdY2Kkho6zRRBlL40aSSL1bt2kg27t2mnfIEwm4L33DF0iSwFdfDzw++/A0aOSq0krw/370uRQuLDHDGgjInubN09f98DmVgAoXx7Im1fubwcPWneM1twK2JgfOCRE8lPdvcvZIoiym2vXgJEjZYq/jRtlSYsrArpVq4AXX5QcedqPSa0Mf/8NNGkig9ueesroFYjIYx0+DKxYIevBwUD79i4tjlFeXkDNmtLceuaMPvViRsxTlthcQ6eJjmZAR5SdvPYasG0b0LmzzJfqLmlLtm/X06j8739yszOfprFhQ6BCBZn3lQEdUQ40fryee27ECMnf4aHq1NH7z/39d+bTMGaphk5z4QJQpYoNBxORW1u3Tka5ulsfuokTgfz5gT17gCJFpCYxpfr1ZQ5EIsph/vlHn2IhOBh4+WXXlieLatfW160J6OxWQ0dE2YdSkofOgQz1cNu1C+jeXYK59JQsCVy8aLRYROSx3n5bX790Cdixw3VlsYNOnaS14eRJYMiQzPc3r6GzKaBLWUNHRNlHs2bWd8Q1yFBAFxeXeVNCTAwHRBDlOF98IU0L5tq31+dy9UClS0vGlfLlrbun2Tztl4bJhYmyr8mTJZnl11877BKGmlzLlZPm1ozs3MkuIEQ5yoYNwJtv6s/nzZPOtM2bAx076n3qsjnDNXSlS+vr1uZIISLP8OmnMo/rsGEy+CCjtCWzZxu6hKGArlcv6Uc3fz7w7LOpX588GTh0SMpPRDnA6dPAE0/oQdtLLwH9+7u2TC5iuIauVCmgYkXJJr99u+TwK1jQ7uUjIhcwT+N06pQsaXF2QPfWW9Kn5LnnZGaf+/dl+9tvS83cjh0yMuzVVw2ViYg8SVIS8PzzllVTiYkS3Hl4/znN5cvAH38ABw4Ajzwig9XSY7iGDgC6dpVm68REYP16oG9fA6UlIrdz5ozDL2EooMuXD9i6VQK2n36Sew8gNXMmE9C7NzBtGuDnZ8+iEpHbiIoC2rSRkQLmSpYEIiOBb7+VRbN+vXPLZ2d//mkZW2UU0BmuoQP0gA6Q9AYM6IiyB/MuFQ5iOKtdgQLAwoXAl19KP7/r1+XX6EMPSaYCIsqmYmIkcEvLvHlApUqWwV5YGNCundOK5wjmqUsyG6iWpRq6Fi3koFu3gN9+kznE7Jx8lIiypyzfKQoVkiYIIsohBg/WHy9d0meEAICHH5bHEyecXixHCg0FPvkEqFYNqFs3432zVEPn6ys31J9+kimCdu6UII+IPMsvv8gMDEadPw+cOyfTblmJiUWIyDZLlshjr16WwVw2ZjJJH+GuXYESJTLe17yGLiDAwMW6dtXXV682cAIicrk+faRq/4cfZDJoax04ALzyimQISG++13QYqqHTfoRnxMtLWg4qVwZ69AAaNbL+/NOmTcNnn32G6OhoVK9eHVOnTkULK36lbt++Ha1atUKNGjVw4MAB6y9IRNbr00eCuueec3VJ3JIW0Pn7G5zxrFMnuYEmJQFr1zJdAJEn2r1b0jj17y+j/jt1kkCoXj3pl1agAHDvnvRXO3FCOur+/jtw5Ij8Enz/feCNN2y6pEkp25NDack1Taa0U0ul3G4yyb1/1qzMz71kyRL069cP06ZNQ7NmzTBz5kzMmjULERERKFWqVLrHxcTEoF69eqhQoQIuXbpkU0AXFRWFkiVLIjIyEqGhoVYfR5QjxcTI3H8prV8PdOjg9OK4m1KlZFxIsWJZmMGrXj1g/3652cbGAnny2LWMRNmF239/h4UBM2ZIbXtCggREaVFKkvy+8AIwaJD0Z7ORoYAuLk5Gsp4+DYwZAzRtKgHnpUuSPumjj6Rc33wjweaoUZIn8+uvJVDNSKNGjVCvXj1Mnz49eVvVqlXRo0cPTJo0Kd3jnnzySVSsWBHe3t5YsWIFAzoiR2rSRJ+xHsgWAx8yk5go09QePAh4ewPPPJP2fvnzS8xbqRJw7JjBiz3/PDB3rqzv3g00bGjwRETZm8d8f9+4AWzZIqmcoqKAa9ekGr9IEaBmTaBVK0k8nAWGmlzHjpXEwf/8Y/nDsWRJ4MkngW7dpHxffQV8/LHMR1ulityfMgro4uPjsXfvXowcOdJie4cOHbAjg3xWc+fOxalTp7BgwQJMnDgx0/LHxcUhLi4u+XlsbGymxxDRf/75Rw/mKlcGDh+WCCebS0iQUfwJCfK2x49PPZA3KUlvcrV5QIS5lMNqGdARebYCBYDu3WVxEEODIhYtAnr2TL8VIG9emftw8WJ5nj+/DNw6ciTj8169ehWJiYkITpH3JDg4GBcvXkzzmBMnTmDkyJFYuHAhfKwc3j9p0iQEBQUlL9WqVbPqOCICYFZ7jldfzRHBHCB5NatWlfVjxyxT8GnT1d65o3c3sTllibk6dfR19gcmIisYCuiuXJFfqRlJSJDs6pqQED0BcWZMKdqYlVKptgFAYmIinnrqKYwfPx6VKlWy7uQARo0ahZiYmOQlIiLC6mOJcrRbt2TUFiC/3NKa+y8bM4+zevWSGrlt2+R5x45ZTFlizrzpJbPEd0REMBjQlS8vKVZu3kz79evXgZ9/lv00Fy5kPi1h4cKF4e3tnao27vLly6lq7QBpKt2zZw9effVV+Pj4wMfHBxMmTMDBgwfh4+ODP/74I83r+Pn5ITAwMHkJMJRbgCgH+uEH4PZtWe/XL4vVUJ7HvCW0ZUvp39ysmb4tS0mFzRUooGeWP3hQIkciogwYCuhee00CtHr1ZODDvn0yqksb+NCgAXDxouwHyL3ojz+k/0lGcuXKhfr16yMsLMxie1hYGJo2bZpq/8DAQPzzzz84cOBA8jJkyBBUrlwZBw4cQCNbcqUQUcaUkjn9NC+/7LqyuIh5QPfdd/KRbN+ub7NbDZ35xW7fdso8kETk2QwNihg8WJIYT5oEDB1q+ZpSMtJ+1Cg9ofz168CIETIaNjPDhw9Hv3790KBBAzRp0gTffvstzp07hyFDhgCQ5tLz589j/vz58PLyQo0aNSyOL1q0KHLnzp1qOxFl0a+/Alr3hObNZeRTDmMe0B06pKdwAiRri91q6ABp3121StYPHLBs8iAiSsHw1F8TJkiLy6JFwN9/y40sMFBueE8+KUP2NYULA8OGWXfePn364Nq1a5gwYQKio6NRo0YNrF27FqX/a36Ijo7GuXPnjBabiIxQCvjgA/35W2+5riwuVKQIULy4tFBouX8BfZTrTz/p+2Y5oEs50rVXryyekIiyM0N56LIbj8ljQ+Qq69frkzbXri1Jb9NLkJnNde4M/PabrP/7ryQS1syaJXlBAeDbb/V1Q06dkul/AMkFpdXWEVEyfn/rOJcrEWUsZe3cmDE5NpgDMs4oYt6HzuYauqgooGJF+WxNJgnotAFbHOlKZDdbtmxBt27dULx4cZhMJqywYk7qzZs3o379+sidOzfKlSuHGTNmZH6h+fOlCdNJDDe5AsD9+8Bff0nzg1meXgs5LKsBUfazebPe879aNUkymYOlbAl99FH9uXkfOpsGRcTESGZ2cx07yucdEQGcOyeZ5Q1MB0RElu7cuYPatWvjueeeQy8rujKcOXMGnTt3xgsvvIAFCxZg+/btePnll1GkSJGMjx8wABg3zjIN0cyZsuzbl+X3kZLhgO6bb4D33rP8RWpOKfmRyYCOyMOZ186NHm05EiAHShnQmTNcQ6eNIBs8WBI379ghA0/Mc2T++qtM9E1EWdKpUyd06tTJ6v1nzJiBUqVKYerUqQBkOtI9e/Zg8uTJVgWEFi5edFiNu6E787JlkpKkZElg8mQJ3rp3lzlcH3lEnvfqBcyZY+/iEpFT7dghOYcA6c/Vu7dry+MGKlaUKRiB1E2uhmvoliyRx4kTUye305iPuCAiC7Gxsbh161byEpdes6EBO3fuRIcOHSy2dezYEXv27MGDBw/sdp2sMhTQTZ0KFC0K7NwJvPGGbKtTB3jnHWDNGmDBAmDFCj0vJhF5oKgomdNK0707YOX0etmZt7eeseXUKcB8KmjDaUv69JHHMWNSJ7crUUIew8Jkgm8iSqVatWoWU3pOmjTJbue+ePFimlOSJiQk4OrVq3a7TlYZCuj+/lv6jZjP5Wo+rddTTwFt20pqEyLyQFqfrrt39W1TpsiEpWTR7Gre59lwYuGZM/VHLy9pbgVkdPETT8j6gwfAypWGykuU3UVERFhM6Tlq1Ci7nj+tKUnT2u5KhgK6Bw8kH5PG3z/1NGC1ajmkzx8ROYPWp0szYoQ8duzo/LK4ofT60ZnX0OXLZ8MJg4Jkuh0tTQkgNXIdOlg2c//8s81lJcoJAgICLKb09PPzs9u5ixUrluaUpD4+PiiU2UClO3dkYntt0aZOvHLFcrv5YpCh9pPixYHoaP156dKSlsrcv/+ydYbIY2l9ugCgXDnp2zV5suvK42bMU5eYB3RaDV1AgIGxI6GhwIkTqbc3aiSvRUXpza4FCthaZCIyqEmTJli9erXFtg0bNqBBgwbw9fXN+ODJk1PfO5UCihVLe3+TCUhIMFROQyHXQw9Z1r498gjwv/8BH38s+S+3bZOBE+3aGSoTEbnS3bvSn0Jrbp0yBdizx7VlcjPmWQjMB6JqNXRZnsfVnJeXNLt+8YU0j6xZAzzzjB0vQJSz3L59GydPnkx+fubMGRw4cAAFCxZEqVKlLKYYBYAhQ4bg66+/xvDhw/HCCy9g586dmD17NhYvXpzxhVq2dG7OTmXAsmVKVami1Jkz8vzyZaVKlVLKy0sWk0mp/PmV+vtvI2d3vsjISAVARUZGurooRK73/vtKyW/I1Mv69a4undtYuVKpI0eUSkiQ50lJSvn5yceUK5f+kYWF2eFif/yhn3DgQDuckCh7MPL9vWnTJgUg1dK/f3+llFL9+/dXrVq1sjgmPDxc1a1bV+XKlUuVKVNGTZ8+3Y7vwj7sNvXXjRsy7c3p09IE26+fPjjL3XHqEKL/7NghvyoTE2U4Z4kSktQW0CcspTTdvJl+S+j69dIdzrB794D8+YH4eOlnl1bTLFEOxO9vnaEm13PngFy5LJuACxTIsfN1E2UP168DTz6pD1kfNcoyqTBl6NIlfb1CBeD4cT0/cMeOUr1mmL8/0LCh9Gc5eVKm5ylePMtlJiInO39eBiGYTBJE2bHmy9Ao17JlJWE8EWUTSgEDB8pISwBo0QIYO9a1ZfIw5oPg2rdPPz+wYS1b6utbttjxxETkULdvyxRgpUrJ0qiR/EDTno8fr49+zQJDNXQFC8pCRB4uKgpo00ZqfTSFCgGLFnGYeibu3QOWLweOHQOCg4HChfXX9u2TGHnHDjtesFUrmY4HkPl1n3zSjicnIoc4dQro3FnusUpJzXrJkrIeFSXLhAlyz123TmrMDDJ0x27RAti1y/A1icgdpDUhPAC8+KKkyaBMPfOM3JcbNrQceLp7t2XakvXr7XCxpk2lX2NiImvoiDxBXBzQpYv0eX3qKeC994DKlS33OXZM0kItXCiB34EDgMEceoaaXCdNAg4dklpCg+lSiMjVtOTBbdtabrfjlDnZmb+/tJYAck82z80ZEqKva/mBsyxfPqB+fVmPiJDEpETkvqZPl860Y8fKnKgpgzlAtv3wgwRUx44BM2YYvpyhUa7PPy8B544d0qevdm1pckiZbsVkAmbPNlw2p+EoGcqRtP+wZcoAZ89avmafwe/Z3k8/yY/pypWBzz4D5syR7QcOWM4mYTdvvy0XAoBffgF69XLARYg8h1t/f7doIaOljh3LPB+dUkCVKjIN17Zthi5nqMl13jx9PTra8pepOU8J6IhypD59ZEYILZirV4/z9dnIfFYu8xl7UszjbT+tWukB3ZYtDOiI3FlEBNC3r3XJhU0mqcpftMjw5QwFdGfOGL4eEbmLzz+3nOJLC+bs0uEr59HSlphMlgMk7KpZM7mAUjIwgojc1507tk0bExgoxxhkKKArXdrw9YjIXZhXtWuYPNgwLW1JkSIOHCCcP79MJLt/P/D335zXlcidFS1qmUEgM6dOyQ3EIEODIlK6fl1PX0VEHuDaNeCTT2Tdyws4ckRqfRjM2SQpCdi7VwaoaV1PHNbcqmnVSh6VMtzXhoicoEkT4LffLJNUpufiRZmnOQvJKw0HdDExwLBhcvMqUsQydcru3TL6du9ew+UiIkeaMkWfSf6556QzLhnSooWkLNFG/Ds8oDNPMMxmVyL3NWSIJAzu2RO4ejX9/a5dk33u3pW0UQYZahi4fl1SIh0/Lv2oixSRH/iaWrWA7dvlV6s2yp6I3MStW8C0abKeKxdnhMgCLy+gUiXg4EF9m/mUiA7RooW+zoCOyH21aQO88ALw3XdA1aqSKurhh/X8n5GRwMaN8vrVqzJbz8MPG76coRq6ceMkmFu8GNizB3jiCcvX/f2lVeCPPwyXi4gc5bvvpIodkKqltJILk9UqVbJ87vAausKFgRo1ZH3fPiA21sEXJCLDpk0D3nxT+rtOmiTzAlapIkv79rLt+nXgjTeylIMOMFhDt2oV0LWrZD1IT+nSdp72hoiyLj4emDpVfz5ihMuKkl2kzBXq8IAOkGbXQ4ekE9/27cAjjzjhokRkM29vSTU0eDAwdy6wc6fep65YMWnu7N8fqFgxy5cyFNBFR2c+jWDu3FkafUtEjvDjjzJ3IAB06ybNAJQlKQM6hze5AtIEojWbb97MgI7I3VWoAHz4oUMvYajJtVChzEe1Hj1qOf0NEblYUhLw6af687ffdl1ZshGnN7kCHBhB5Am8vYEPPnDa5QwFdC1bSrPr+fNpvx4RAaxbxwwIRG7ll1+Aw4dlvUmTLA2PJ12FCpbPnRLQFSsGlC8v6wcPSrBORO5FKadOo2gooBs9WoboN2sms1Roo3GPHJGpvh5+WOY3fOstexaViAxLTJTJnzXjxlk3HQ1lqkABy0TCTmlyBYBq1eTx7l29GZ2IcixDfehq1pQZg559FujXT7YpJQOvlAICAmTSajv08SMie/j5Z6k6B6QTbvv2ri1PNmIySfYXLQ+dLTP9ZEnlysDq1bJ+7BhQqpSTLkxE7sjwBDWPPgqcPg18/70kEr5+XaYha9RI8pQ6bC5DIrJNYiIwYYL+fPx41s7ZmXmryoULQLlyTrio+WiMY8cYpBO5Iyfea7M042DBgpI6hYjc2BdfWGb+dmKfjpxAKckGozl92kkBnfnsHkePOuGCRGSzL76QdCXWMplkTlcDDAV0CxfKLBV58hi6JhE5y4ULqTuzdugArF8vj5RlN29KJajm1CknDQhLWUNHRO7n5k1ZnMDQoIh+/aTj74ABwO+/8wc/kdsyz0/26KP6ZO4dO7qmPNnQpUuWz0+fdtKFCxeWERkAAzoidzVunIxCt2UxyFBA98EHMlvQ/PnyvRAaKimt/v7bcDmIyN4uXwb++UfWvbyATz5hqhIHuHDB8rnTAjqTSW92jYxkJneiHM5w2pLDh2Ue16FDJaCcPBmoWxeoVUvWU97kiMjJPv9cX69SRZrotm93XXmyqZT5OJ0W0AGWza7HjzvxwkTkbgwFdJp69aS/3/nzwNq1QN++wJkzUltXujQHXRG5zI0b+tRQgKQs8fICmjeX5+vXu6Zc2VDKgO7UKSd2Q2E/OiL6T5YCuuSTeElXnQULpD/Jhx/Ktj/+sMfZichm33wDxMbK+tNPW05nEBbGARF2lLI1IiZG4mmn4EhXIvpPltKWmLt1S2YWWrAA2LJFmmEDAux1diKy2p07wNSpsu7tLTnonJJHI2cyr6GbPh1o3NiJ9z7W0BG5LydPyZelgC4hAVizRoK4NWuAuDipmWvfXkbC9uxpr2ISkdW+/hq4dk3W+/ZlMOdg5gHd88/LrBFOU768BO2JiQzoiHI4QwHd9u0SxP38szQtKCUDIvr1k+8Pp0xOTUSpHTkCjB0r6yYTMHKka8uTA2gBXdGiTg7mALlguXLAiRMS0CUlya9qIspxDAV0LVrIY8mSwAsvSCCnzRNNRC7y4IFMsBwXJ8+HDQOqV3dtmbK5xEQgOlrWS5RwUSEqV5aA7u5dSV9SurSLCkJErmQooHvuOQniWre2c2mIyJioKKBmTT0jecmSwEcfubRIOcGVK/osEcWLA/v2SdqSBw+ktcIp6tQBfv1V1rdvZ0BHlEMZqpufPZvBHJHbuHlTAjjz6WUiI4GtW11VohzDvP9ciRJA27bAE08A777rxEK0aqWvb97sxAsTkTvJ8ijXHTuAAwdkqH5goPxYZDJ6Iie5dUs6sJobOhT48kuZxoXz8jlUyoCudGmJq6OipObO29sJhWjSBPDxkVFqDOiIcizDAd3u3UD//tJ1A5DvDZNJ1itWBObOlfsMETnIsmXAa69ZJkKbMQMYPFgCOnK4lAHd4MHy47ZUKRmf4JSALm9eoEEDYNcuGRhx6RJHphHlQIYCuiNHgHbtJN1Vx47S/FqsmNxHwsOBdetk+65dHCxB5BDffw8MGGC5rW1b4MUXOb2XE5nH0sWLA506uaggrVrJDReQRKBPPOGighCRqxjqQzd+PBAfL7MH/fYb8M47Ulv39tsyBdiGDTLQbsIEexeXKAeLipLqb5PJMpjTZn3YuJHTezlZyho6l2E/OqIcz1BAt2kT8Pjj6c/V2q4d0KuX7EdEdhATIwMfTp603N65s1SJR0Zyei8XcJuArlkzPf8cAzqiHMlQQBcTA5Qpk/E+ZcvKfkRkB4MHy2PFipbb166VGrvQUOnQqpQs7do5v4w5kBbQ+fkBBQvK+q1bwKFDwOHDTixIYCBQr56sHzoEXL3qxIsTkTswFNAVL65310jP7t2yHxHZwZIl8qiNQipQwHVloWRaQFe8uMTV588DQUGSEnDUKCcXxrzZdeNGJ1+ciFzNUEDXvbsMfnjvPeD+fcvX7t+XmYc2bZL9iMgOeve2fJ5yQAQ53d27euo/rbm1WDHJIAIA5845uUAdO+rrn33GlDVEOYyhgO6992T6wI8+kuH5XbsCAwfKY+nSwAcfSJPre+/Zu7hEOZQ2357miy/kkQMfXMZ8hKsW0Hl7S+s34MSAThssY95ncu9eaY4nohzDUEBXsKA0qQ4YIKlL1q6VvHNr1wKxsTI12K5dep8SIsqC+/eBSZNSb+fAB5dKb0BEqVLyeOOG3A8dKr3BMoCkI2AtHVGOYSigAyRYmz1bmhwOHpRZhg4elPvL7NlA4cJ2LCVRTjZnjl4d1KMHBz64CfOAzry/sBbQATL42KG0wTKDB0sm4y1b9Nf++kvyShFRjmA4oNP4+koH4GbN5NHX1x7FIiIAkvDx44/15++/77qykIWoKH3dvIYuf359vXp14PffHVgIbbDMxIkyKiNl0/yUKQ68OBG5E5sCug8/lEmnHzxIf5/4eNnH/DvIVtOmTUPZsmWRO3du1K9fH1szmGR82bJlaN++PYoUKYLAwEA0adIE69mviLKL+fP1ap4uXVLP20ou8++/+rqWxikmBvj6a8v92reXZOsO0aePPI4ZI7W2KWcJ+eMP4NQpB12ciNyJ1QHd779L5UChQhnXwuXKJc2to0fLvcRWS5Ysweuvv47Ro0dj//79aNGiBTp16oRz6fQw3rJlC9q3b4+1a9di7969aNOmDbp164b9+/fbfnEid5KQYNl3jqOM3MrZs/q6FtBpLaCaZ5+VR/MBqHY1c6b+aD5LyHPP6fvMnu2gixOROzEpZV2v2WeflUEP589LEs2MxMXJSK9HHgF++MG2AjVq1Aj16tXD9OnTk7dVrVoVPXr0wKS0OoanoXr16ujTpw/et7J5KioqCiVLlkRkZCRCtSFqRK72669At26y3q6dDIIgt1G9OhARIffDu3clnjKZLPfp10+/BzpsfEJUFNCmjT4wIiwMqFFDBkskJEgulchIPZ8KUTbC72+d1TV0O3bId0pmwRwg+7RrJ8fYIj4+Hnv37kWHFCP3OnTogB1WniwpKQmxsbEomMEQ27i4ONy6dSt5iXX4UDQiA2bN0tdff91lxaDUlNKbXEuX1mfd0lpANf/844TCpDVLSLFi+o+BixeBNWucUBAiciWrA7oLFyT3nLXKlgWio20rzNWrV5GYmIjg4GCL7cHBwbh48aJV55gyZQru3LmD3ikTsZqZNGkSgoKCkpdq1arZVlAiR4uOlho6QHrcO6zNjoy4dk1SNgGW0yBqLaCaAwfk0SXdel94QV//7jsXFICInMnqgM7LK+PBECk9eKD/arWVKUW7hVIq1ba0LF68GOPGjcOSJUtQtGjRdPcbNWoUYmJikpeIiAhjBSVylO+/BxITZX3AADaXuZm0+s8BMu1XZKT0JdasW+eidIEdOkizq1aIy5ddUAgicharQ67ixWXOZ2sdOmQ5lN8ahQsXhre3d6rauMuXL6eqtUtpyZIlGDhwIH766Se0yyQ/l5+fHwIDA5OXgIAA2wpK5EhKWXZkf/5515WF0pReQAdIC6h5hWqNGs4oURq8vYGnn5b1xEQ9xQkR2ZRNIzw8HCaTKdVy9OhRJ5Y4c1YHdC1ayKhV8xtZes6elX1btrStMLly5UL9+vURlqLzd1hYGJo2bZrucYsXL8aAAQOwaNEidOnSxbaLErmbDRv0Du5t29rW14GcIqOALuU2a+6ZDqMFdACwaJHrykHkRmzNpqE5duwYoqOjk5eKFSs6qcTWsTqge+UVaUZ9/HHg6tX097t2DXjiCRlc9dJLthdo+PDhmDVrFubMmYMjR47gjTfewLlz5zBkyBAA0lz6rJYLABLMPfvss5gyZQoaN26Mixcv4uLFi4iJibH94kSudu8e8Oqr+nPzflDkNjwmoKtRA6hVS9Z37WJOOsq2YmNjLQY7xsXFpbvv559/joEDB2LQoEGoWrUqpk6dipIlS1pk10hL0aJFUaxYseTF29vb3m8jS6wO6OrVk4F2+/YB1apJTrpNm2Rw1YkTQHi4pMmqVk3mhX7jDTnGVn369MHUqVMxYcIE1KlTB1u2bMHatWtRunRpAEB0dLRFFD1z5kwkJCTglVdeQUhISPIybNgw2y9O5Grjxum1c82aya8jcjseE9ABwFNP6euspaNsqlq1ahaDHdNLc5aVbBp169ZFSEgI2rZti02bNtmt7PZidR46QLr2jB4NfPaZTBuY1uve3sDbb+sz0XgC5rEht7BzpySGTUqSXvUHDwJVqri6VJSGmjWln7B5Djpz+/YB9evL+sCBlhlonO7cOcmtAgCVKwNHjnjOzZkoE9r3d0REBEqYddz38/ODXxp51i5cuIASJUpg+/btFl25PvroI3z//fc4duxYqmOOHTuGLVu2oH79+oiLi8MPP/yAGTNmIDw8HC1t7VvmQDYNnTOZgI8+khvU3LmSZ04bv1CsmFQoDBgAlC/vgJISZWerVklNivZLKT4eqFpVksRmMsiHnEspvdatVKm0R/OXKyeTNZQpAzRp4szSpaFUKenQvGULcOyYJMfTmmGJsomAgAAEBgZavb8t2TQqV66MypUrJz9v0qQJIiMjMXnyZM8N6DTly0sNHBFl0e3bMr3XpElpTyXQvr0kMXNJ3gtKy/Xr8s8GpN3cCgD58wNz5jirRFbo1UsCOkBSmDCgoxwqK9k0zDVu3BgLFiywd/GyxGCmOCLKkqQkYN48oFIlqfY2D+YGDZLXt22T50wq7FYy6z/nljp10td/+8115SByMaPZNFLav38/QkJC7F28LGG2UiJn27pVRg3t3atv8/XVM3dPmiT9G5o1c035KEMeGdBVqCDtwKdPyw+F2FiA+Tcphxo+fDj69euHBg0aoEmTJvj2229TZdM4f/485s+fDwCYOnUqypQpg+rVqyM+Ph4LFizA0qVLsXTpUle+jVRYQ0fkLA8eyIihli0tg7nu3YHDh/WJQMeMkRq77dtdU07KkC0B3b17wNGjwI0bjiyRFUwmvZYuIQHYuNG15SFyIVuzacTHx2PEiBGoVasWWrRogW3btmHNmjV47LHHXPUW0mTTKNfsiqNcyeHOnpUkr+bD4mvVAr74Anj4YXkeEyOdr1JiHzq38tprwNdfy/r27UB6rTTTpwMvvyzrCxZY5vh1iV9/Bbp1k/XBg4EZM1xbHiI74Pe3jjV0RI6UmAj8739A9ep6MOfrC0yZIrkttGAO0CcCrVBB3xYWxmDOzRw/rq9r2UDSUqyYvu7yXHQA0KaNPsnsb7+lPQiHiDwW+9AROUJUFNC6derM/GXKyJyaDRumfVxoqGTqJrf04IEelxcrJnNcp6diRam9K1NGEq67XN680tz/+++Sm+7oUUmNQ0TZAgM6InuLiQFKlky9vWtXYOFCwIZcSeRe9u3TU5a0bp1xft4aNdywG2SnThLQAdIEy4COKNtgkyuRvT3/vOXzPHnk8ddfGcx5uPBwfb11a1eVIgu6dtXXV650XTmIyO4Y0BHZ0717wLJl+vOCBfWEruTxNm/W1z0yoKtUSa+V27EDuHzZteUhIrthQEdkL/HxeuoRQCb63LQJuH/fdWUiu0lIkBSCABAcLLGRLccmJDimXDbr0UMelQJWr3ZpUYjIfhjQEdlDbKykhDD/goyLA2rXBpo3l+fr17umbGQXtvSf03z5pQyKyJ0b2LXLkaWzgRbQAcCKFa4qBRHZGQM6oqy6dEm+4TdskOe5c8tIVqYfyVaMNLcmJgL//iuPp087pFi2a9BAH54bFqZHqUTk0RjQEWXFvXvS0XzfPnleoICMIuzdW9KPKCVLu3auLSdlmZEBEeYx/cmT9ixNFnh5yewkgNQis+aYKFtgQEdklFLACy8Ae/bI89BQyVPBOVizncREmQIVkP5zlStbd1zFivq6W6UXNG92HT8euH7dZUUhIvtgQEdkxJ07wFtvSV45QJK2rlnDvF7Z1NGjwK1bst6smXX95wCgbFmpEAPcLKBr3VqvPvznH6BjR8mfSEQeiwEdkS0SE4Fp04Dy5WX6Ls3338vcrJQt7d6trzdqZP1xfn5AqVKyrrXAu4VcuYC1a/X5yfbska4DHJFN5LEY0BFZa+9e+TZ/5RUZCAFI9ctnnwG9erm2bORQ5iNUbQnoAL3Z9dYt4MoV+5UpyypWBDZuBAoXlufbtgHPPgskJbm2XERkCAM6ooxcvAjMmSNzYDZoIEGdpmtX6Tf31lvSBqdNqUTZjlZD5+UF1K9v27Fu248OkElm16+XLgMA8PPPwJtvulFVIhFZiwEdkbnYWJkSaehQmYwzJAQYOFDPKAvI9nXrZCqvc+f07e3b66lLKNu4fRs4dEjWa9YE8uWz7XjzgM5tRrqaq1cP+OknwNtbnk+dCjz2GPvUEXkYBnREgARmb74p+bl69AC++go4fNhyn6pV5ctu3z5g7lzZNniwNFFpQyA7dnRmqckJ9u7VWyFtbW4F3LyGTtO5MzB9uv58xQqpkb5wwWVFIiLb+Li6AEROlZQEREUBx4/Lt+vhw5JgLGXwBkj7WoMGwMMPS96uRo304Y1LlsjjxImyjalKsq2s9J8DPCSgAyQFT4kSwDPPADduSHXim28Cixe7umREZAXW0FH2lJQkHZ/mzAFGjZJBCzVrSl+h0qWlefTll4FvvrEM5vz8gEGDpNn1+nVg6VLgl1+AJk0kwNP6yWlzto4ZI/2Ntm93/nskpzAf4dq4sTxGRUmgZjJl3n2yTBk3TV2Sls6dpQZaGyjx449uNGcZEWXEpBR7v0ZFRaFkyZKIjIxEaGioq4tDWXXwIPDSS8DOndbtr9XEdekCDBkCFC0q22NigPz5U++/fr1U1aT3Gqf4ylZKlJCWx8BAqbiKjbX9n758eZn6K18+Ge1qbR47l5k2TUZzA/JjZvt2Dyg05UT8/taxho481927khR1926pRZg3T2rO6tdPO5jz9ZV+cI8+CowYAXz7LbBpk9TE7d4NvP++HswB0j9Oe0zZTy4oCIiM5Hyt2VxkpN6N7KGHJPbP6M8iPVqz6+3besYbt/bii3qS7J07gUmTgIQE15aJiDLEPnTk3pKSgMuXgWPHpObt8GG9/9v58xkfW7my1NRVrgxUqiQZXn1s+JPPrJ9caKgHtKFRVvz6q77evLk8Guk+WbGiPmXqiRN6Pl+35eMDTJ4stdYAMHq0zIoydy7QsKFry0ZEaWJAR86nlGSkv3EDuHlTfzx9GtiyRbLWx8fLfteuybot8ueXztxvvSV94ozq00e+vceMkRGAO3YYPxd5pKVL9fWePeXRyJ9FytQlLVrYt5yGREUBbdrouVTCwoB27fTXO3UCXn9dRnYDQESE9LE7fVran4nIrbAPHdgG7xBKyRfGvn3A/v1Ss/bvv9KGdf267UFaSoULy7dkhQpAwYKyrUAB+UJq1Mi2mrj0ZNSHjk2r2d61a0BwsMz2Vr681KyZTMb+LH77TWIhQMbofPSRw4ptHVvexM6d0p9u/355/uGHwLvvOryIRNbg97eONXSUNVeuSKB286Y0jR48KDf+ffvkG9GIgAD9yyZ/fqBkSZnlvHZtmS+1UiUJ3hxN6yeXUS0GZVsrV0owB8ggaW1MgJE/iypVJChs2FAfKetS5h0BtWrG5s2lI2DK3/hNmkiVZJUq0gViyhTg1VdZS0fkZlhDB0b4GUpIkNq1v/6SZf9+4M4duelfvmxb0GYyycwLRYpIQJY/v+Vj4cLybVerlp61nshFunSR+esBGTOTrbqOadHplSt6ihJtW3pfCf37A/Pny/rEidKvjsjF+P2tYw0d6ZSSKgctePvrL6lpu3fP9nMVLSpTCtWtK0udOpL/LVcuuxebyN5iYqTWDZCxLw895Nry2J2RjoBjxgALFui1dE8/LUn2iMgtMKDLSeLiZLTohQvSRHrunNS4RURIv7br1yUVSEZMJn0yy8BAaYapWFH6sRUoIM/r1ZOaOOatIg/166/Agwey/thj2fBPeeZMCehmzpRFow3FTUvFijKLxPz5MpCpTRtg82YZPU5ELseALruKi5PA7ehRuUlv3AgcOaJ3CrJW2bJSPaEt9epJHzeibOyXX/T1Xr3se+67d6W3gksrt4z2D508GfjzT7mvnD0LtG4NfPKJzH/s6+vgQhNRRhjQeZr794EzZ6SG7do1uameOSN9Ya5dAy5elNGlly9bf05fX+nXFhQkPbcfekg6DDVooPevIcohbt8G1q2T9aJF7TdN7717Mr7g0CGgaVPJ0ONSRvIoFikC/PGHBHLHj8u9p3dvmU6jVy+ga1egbVt9rjMichoGdJ4gOlqm4vn9d2DvXr0tyBZeXjKXac2aQLly+iCE2rWlmZS/rokASIqR+/dlvWdP+43P8feXvnmJifLfOCHBPtl1nC4kRIK6Rx+VPraAJPn+8ktZuncHli/Phu3URO7NE28n2VN8PLB1qzRlAHLXv3VLmkMWL7Y+b5uXF1C8uPz6Dg2VlB9Nm8qvZmek+iDycObJhO3d3NqkiXQ9bdhQagLTSgXn9lImJG7SRAZQaVODrVwp/fOefNJ1ZSTKgZi2BC4Y9hwTAxw4IDnbTp6UZds2mfU7M5Ur602h+fPLyNGyZeVXszYwwSN/9hO53v370qp4+7b8V7p0yb6V10p5eMVVegmJly2TQG/oUHleurT8OM2d26nFo5yHaUt0/OZ3tPv3JXD78099OX7ctnMEBAAvvyw3y+LFHVNOIsKGDRLMAdJyaO+eCB4dzAHpJyR+7DFJZ/Lrr/Ih/vsv8L//Ae+849ryEuUgDOgcacwY4NNPrevzVriwzA3UsqXMP2oyySCF/Pkl0S6zshM5VHy8pFfT2Lu5NVtYskQeJ06Ue5T5iBGTSUbB1qkjwd348VKj98YbUu1JRA7FgM6RChdOHczlyiU3vPr1JeFutWrSZFqsGEeGEblIUpJMhKCNPC1WDGjf3rHXXLJE0qMsWeJB//UzS0hcsyYwaBDw7bcyrHfSJPlRW6uW9OUdMgSoUcM1ZSfK5tiHDg5sg9+5Exg4UHpAa0utWpwtgcjNvPOOxB2AjEbduFH6+jvK+PHAuHGyPm4cMHas465lV+n1oVu/HujQQdbv3QPefBOYNSv1D1qTSZITjx8vP2SJsoh96HQM6MA/CKKc7NIlSaOWmCgpSlaskHRqjrRxo8Q/SUnyfP58oF8/x17TblKOck0vIXFUFDB1qvSpO3TIco5YX1/gxRdlPtiQEKcUm7Infn/rPKWin4jIIRYv1idQGT7c8cEcIFmEPvpIf/7cc8CaNY6/rl1oCYmVkiW92SVCQ6VP3d9/SyL0zz6TkfiA1Nx9842Mhu3bV1I2EVGWMKAjohzt++/19eefd951335bBq8DElA+8YRMtZwtBQYCI0YAp09L/7u8eWX7gwfAjz/KYLCePWV+aSIyhAEdEeVYf/8tKSEB6eJapYrzrm0yycQKffrI83v3pIUyWwsKAj74QAK7d96xnFpwxQqgalWJdM+fd1kRiTwVAzoiyrHmz9fX+/fX16OigIoVJegymWTWPUfw9pYBoVqF1YIF1uUX93hFiwIffywf9Ny5MqwYAO7elabZMmUk150tc1IT5XAM6IgoR0pIABYulHVfX72mLCZGZszT+vwDksJkwwbHlCMwEHj6aVm/fVsvU47g5wcMGCCzSgwdqmcASEiQSLdiReCttyTo++MPqVK9cAGIi3NpsYncEUe5gqNkiHKi776TgZaATHSgzeH65JOSai3lZAiA5UBNe9q/H6hXT9Zr15bnHj+rhBEXLwJffy1t0ZlVVQYEAOXKSTNt6dIy4CK9xd8/h36g2R+/v3UM6MA/CKKc5uZNoHx54Pp1fZuWfUP73r9yRe/ipW1z5N2ycWNg925ZnzNHBn/m2KlQL12SlCZz5tjnQ/fz04O7EiWA1q2Bhx+WRMh58mT9/OQy/P7WMaAD/yCIcpqXXgJmzEi9ff16iSGcXUMHyGjbAQP053nzAp06yeDPVq1kGuccV8kUFSXNrKdOyUCJa9eAq1dluXRJBldoOWeMKlVKqkebNZPZLOrVy8GRtOfh97eOAR0c+AdhbQJOIjIso/9mKV8bM0Za9WbPluDMx0dei4rSg7abNzOfDMER7t0DGjQAIiLSfn3PHpkxkMzEx8s/4KVLUt2a2XLtmnzQGcmVSz7opk2l2jQ4WDo6Fi8uVbY5Lqp2bwzodAzo4KA/CGumyCGiLEnvv9k770i3KW16rfS8844MtgQsm1Vd9VssLk4GXyxfDqxaJfGH5vZtfTQsAHz+ucwFO3684+eddSl7/mMoJbV6v/8uVa/HjgFHjgC3bll3fL58MgK3bFlZypSRpUABCfpKlwYKFTJWNjKEAZ3Ox9UFyLYGD9YfzdttOnZ0bLsNUTaU1nd6zZpAt27yvGBBCe601rdPPsn4fF5eMu3W1avy3zHlHPPaZAjO5ucn76lbNxnouX27zCBx8aJlMAdIjd3OnTKzxdatkkcv29GGHJtr3974D2OTSTpPli+v36OTkiSo27FDX44fT/v427dlGrNDh9K/RpEiMlCjalUZtOHnJ024wcFSy1e8uKz7+tpefqIMsIYODorwXdWzmshDpRW0tW0rGS2qVTN+Xh8fCf6qVgUWLZJtFy7I92pKnlSBXr8+sG8fUKmS1Ohl5TNyW64YcgzIfXvnTum/FxMD3Lghs1icPQv8+6809WaFySS5+LQALyREb9ItVEgCQC8vWby95Y84Xz4Z2Wv+mDt3jm8CZg2djgEdHPQH4aobEZEbS6/17NIlPbesudy5gfv3Mz+vl5cEbQUKAOHhsq1JE/lOHjhQUpSk/C/oimZVe17zwQOZdOHNN2UCBs2BA5bjBHx8ZAYMPz/DxXYdd/xhnJQkvwjOnJElMlKabG/ckH/YI0ekStUZvL1llK6fn14T6Ocn280DQvPHlOuBgVKrGBAg27VF28/bW/YpXFj2SXl8Ws9TXjdPHjk2IMDuQSgDOjPKDX3zzTeqTJkyys/PT9WrV09t2bIlw/3Dw8NVvXr1lJ+fnypbtqyaPn26TdeLjIxUAFRkZGRWim3p5k1t6mrLZf16+12DyAqRkUpVqKD/CYaFOfe1DRvkv8OePWn/lyheXCmTKe3XMlvefDP9/2bu9l/QWeUpVCj1NfLmVapnT6U+/1yptWuVOn1aqYQE+17XIfr0kTcweLBSSUlKbdumvyl3dv26Ujt2KPXzz0otWqTU7NlKffihUi+/rFSPHko1bKhUaKhS3t7G/vA9eVmzxq4ftdHvb2fHGc7gdv8rfvzxR+Xr66u+++47FRERoYYNG6by5s2r/v333zT3P336tMqTJ48aNmyYioiIUN99953y9fVVv/zyi9XXdEhAp5S68GekOuOrf7Pt/SQs84PIrTgi4HHm9dILImbOlH3Sem34cKW+/DLt1/r1U+qNN9J+rUEDpZo1s//9PyREHps3l+Dwl18sv9Md8e/gCJnFJvb6mwkIsO5zzZVLKV9f/XmpUkpVry7LSy+lvk737ko9+qj8faQs54oVSk2apNRnnym1b5/dPjL3i8rt7fr1tN/foEHygX74oVIffKDUe+/Jf7xBg5R68kmlunRRqlUrperVU6pKFaXKlpVfRoUKKZUvn1J58iiVO7f8A7th0GjP70Ij39+uiDOcwe2aXBs1aoR69eph+vTpyduqVq2KHj16YNKkSan2f+edd7Bq1SocOXIkeduQIUNw8OBB7Ny506prOqLKNr3Rd089Jf1kNeaffmbrtuzr6PWccP0HD/TZA8y1bCndXJYvT/1a8+bSQX/VqtSvNWsm3WbSu2Z8PPDbb6mPa9hQmtTCwlK/Vq2atGJoCWnNFS4sLUFZ7e7jDAUKSItVw4bAu+/KlJ5PPSWvuSqNiL1l1Hpo9D2md5/p1k3SqwHyuW7YIANArNWlC/Drr5bbKlVKf6BIq1bA5s2Wzzt2lBY3a+XJA7z2muW2H38ERvSNwia0QUVIO3U7hOHt9e1QqJB95tjt2hWoXl1/fvGi5AQEJCVdyhHEn30mra5ZERwsOQfjez2JXMuWYAYG4yVMR1PswHak7poTHp72/3GbKIW+vRNRKjRJ3kBiIk4eS8SGn2OQ584VPFTtDqpXSUx+7f6dRKxemQSvpATkiruFPHeuwjfuNkwqCSaVBC+VCPy3blJJ8EpKTF43ma0H+txF+e3zUxVn70frUX9U1v8DG/n+dkWc4RSujijNxcXFKW9vb7Vs2TKL7UOHDlUtW7ZM85gWLVqooUOHWmxbtmyZ8vHxUfHx8Wkec//+fRUTE5O8RERE2BzhZ0b7Nc6FS05c/PyUyp9fqWLF9G2lSsljo0ZKzZmj1JQp+muZVcS4U02bURnV0BltWbT2uIQEafKeN0+pkSOVKlFC9vH1lQodf3/9uHz5lOrVK/W1qlbV90nrelldihZNfU3tbwZQ6uRJy+t99ZV9rrtggeU1zbsGvPJK6jKZ12oaXerV++9k/20Y/uwV1aLFf/9uafwDvvOOfd5reLjle1m+XH9t0iTL1y5etM81V/jLH+nmqoNVUmKSOjjNvs3mWg1dRESExff6/fv309zfWXGGK9jw+8nxrl69isTERAQHB1tsDw4OxsV0OplevHgxzf0TEhJwNZ2fpJMmTUJQUFDyUs0Bw8OWLLH7KYmsYt75PV8+eQwOlhGj2qAAQOY9B6RWbMoU4PXX9dcaNJDHNm2ABQsk15mmdWt57NULOHwY+Okn/bVeveRxwADJ4/rLL/prf/8tj7t3A88/L535AamFCgqSvuUVKuj7h4XptVNaGhHtm8AT83PPnKk/ennp/xbr1+v3i4kTpdauWTPrzmntcd7eMiq2f39g0iSZdAGQvv2xsVIjqomNtfx305hn6kjreitWAF99BVSubF3ZrXHunL5uy+fiKX5EHwDARNMYmKDQFNtdXCL7635P/kirL58Ik5cJtV5yzD9itWrVLL7X06ppA5wXZ7iCW+ahM6UYAaOUSrUts/3T2q4ZNWoUhg8fnvz8/Pnzdg/q+vSRm23nzsDQoZL9Xbvkhg2Wg3xsWTd6nCPWs/v1hw6VZqenngI+/BDYuxd4/HF5rWtXee3pp4GPPpLXHntMXuvWDVi9GnjmGUlau2cP0KOHvHbhQvrXHDwYWLkSePZZ4NNPgb/+0vOs9ewpTbzPPy/zlv/5p0xFCQC9e0tQ9eKLwLRpwK5derAQFSVNcpcuyaJZvx5o1Ehe+/NPWdJ6bdMmWdJ6belSyyZp7bWlSyVo0QIY7TUtaEtvlKercr85S0bvX7tfjBmjD4q3hjOP8/LK+Lju3eXx5ZdldPGVK9aVRZPWKNz27fXAvmhRycun6dxZ/mayKuXsG+XL690pypZNvf/PP8uPiqzQRiWv7zkTTy5fAv/vZ2Iz9P8wHbAeG8z279dPJq3IKvOmZUD+v2rvNeVXYFBQ2t1KbLVpSB+0ubQEh3uOQYtD0/HPzB2olfXTphIREYESJUokP/fLZFi3o+MMl3BtBaElV1WFOmJQRHbvy5sTZPRvaPQ1V1zP1aNcPbF51Nkc8TfjTscZld3vozdvKlUCkeo49P8wbRGWbd6fUkrd/Dftf8Q9H9nnTdr6/Z2dm1zdKqBTSqmGDRuql1IMsapataoaOXJkmvu//fbbqmrVqhbbhgwZoho3bmz1NR01ypVfbJ7P00e5kudwxN+MOx1nVHb/287u708px2Z8MPL97Yo4wxncLqDThhPPnj1bRUREqNdff13lzZtXnT17Viml1MiRI1W/fv2S99eGE7/xxhsqIiJCzZ49223SlhAREZHjZCVtiTPjDGdwuz50ffr0wbVr1zBhwgRER0ejRo0aWLt2LUqXLg0AiI6OxjmznrJly5bF2rVr8cYbb+Cbb75B8eLF8eWXX6KX1jubiIiI6D/ZNc5wuzx0rsCpQ4iIiDwPv791bpW2hIiIiIhsx4COiIiIyMMxoCMiIiLycAzoiIiIiDwcAzoiIiIiD8eAjoiIiMjDMaAjIiIi8nAM6IiIiIg8HAM6IiIiIg/ndlN/uUJSUhIAme6DiIiIPIP2va19j+dkDOgAXLp0CQDQsGFDF5eEiIiIbHXp0iWUKlXK1cVwKc7lCiAhIQH79+9HcHAwvLzs2wodGxuLatWqISIiAgEBAXY9d3bDz8p6/Kysx8/KNvy8rMfPynqO+qySkpJw6dIl1K1bFz4+ObuOigGdg926dQtBQUGIiYlBYGCgq4vj1vhZWY+flfX4WdmGn5f1+FlZj5+V43FQBBEREZGHY0BHRERE5OEY0DmYn58fxo4dCz8/P1cXxe3xs7IePyvr8bOyDT8v6/Gzsh4/K8djHzoiIiIiD8caOiIiIiIPx4COiIiIyMMxoCMiIiLycAzoiIiIiDwcAzo7mDZtGsqWLYvcuXOjfv362Lp1a7r7Llu2DO3bt0eRIkUQGBiIJk2aYP369U4srWvZ8llt27YNzZo1Q6FCheDv748qVargiy++cGJpXcuWz8rc9u3b4ePjgzp16ji2gG7Els8qPDwcJpMp1XL06FEnlth1bP27iouLw+jRo1G6dGn4+fmhfPnymDNnjpNK63q2fF4DBgxI82+revXqTiyx69j6t7Vw4ULUrl0befLkQUhICJ577jlcu3bNSaXNhhRlyY8//qh8fX3Vd999pyIiItSwYcNU3rx51b///pvm/sOGDVOffPKJ+vPPP9Xx48fVqFGjlK+vr9q3b5+TS+58tn5W+/btU4sWLVKHDh1SZ86cUT/88IPKkyePmjlzppNL7ny2flaamzdvqnLlyqkOHTqo2rVrO6ewLmbrZ7Vp0yYFQB07dkxFR0cnLwkJCU4uufMZ+bt69NFHVaNGjVRYWJg6c+aM2r17t9q+fbsTS+06tn5eN2/etPibioyMVAULFlRjx451bsFdwNbPauvWrcrLy0v973//U6dPn1Zbt25V1atXVz169HByybMPBnRZ1LBhQzVkyBCLbVWqVFEjR460+hzVqlVT48ePt3fR3I49PquePXuqZ555xt5FcztGP6s+ffqoMWPGqLFjx+aYgM7Wz0oL6G7cuOGE0rkXWz+r3377TQUFBalr1645o3huJ6v3rOXLlyuTyaTOnj3riOK5FVs/q88++0yVK1fOYtuXX36pQkNDHVbG7I5NrlkQHx+PvXv3okOHDhbbO3TogB07dlh1jqSkJMTGxqJgwYKOKKLbsMdntX//fuzYsQOtWrVyRBHdhtHPau7cuTh16hTGjh3r6CK6jaz8XdWtWxchISFo27YtNm3a5MhiugUjn9WqVavQoEEDfPrppyhRogQqVaqEESNG4N69e84oskvZ4541e/ZstGvXDqVLl3ZEEd2Gkc+qadOmiIqKwtq1a6GUwqVLl/DLL7+gS5cuzihytuTj6gJ4sqtXryIxMRHBwcEW24ODg3Hx4kWrzjFlyhTcuXMHvXv3dkQR3UZWPqvQ0FBcuXIFCQkJGDduHAYNGuTIorqckc/qxIkTGDlyJLZu3Qofn5zz39rIZxUSEoJvv/0W9evXR1xcHH744Qe0bdsW4eHhaNmypTOK7RJGPqvTp09j27ZtyJ07N5YvX46rV6/i5ZdfxvXr17N9P7qs3t+jo6Px22+/YdGiRY4qotsw8lk1bdoUCxcuRJ8+fXD//n0kJCTg0UcfxVdffeWMImdLOefO70Amk8niuVIq1ba0LF68GOPGjcPKlStRtGhRRxXPrRj5rLZu3Yrbt29j165dGDlyJCpUqIC+ffs6sphuwdrPKjExEU899RTGjx+PSpUqOat4bsWWv6vKlSujcuXKyc+bNGmCyMhITJ48OVsHdBpbPqukpCSYTCYsXLgQQUFBAIDPP/8cjz/+OL755hv4+/s7vLyuZvT+Pm/ePOTPnx89evRwUMncjy2fVUREBIYOHYr3338fHTt2RHR0NN566y0MGTIEs2fPdkZxsx0GdFlQuHBheHt7p/oFcvny5VS/VFJasmQJBg4ciJ9//hnt2rVzZDHdQlY+q7JlywIAatasiUuXLmHcuHHZOqCz9bOKjY3Fnj17sH//frz66qsA5ItYKQUfHx9s2LABDz/8sFPK7mxZ+bsy17hxYyxYsMDexXMrRj6rkJAQlChRIjmYA4CqVatCKYWoqChUrFjRoWV2paz8bSmlMGfOHPTr1w+5cuVyZDHdgpHPatKkSWjWrBneeustAECtWrWQN29etGjRAhMnTkRISIjDy53dsA9dFuTKlQv169dHWFiYxfawsDA0bdo03eMWL16MAQMGYNGiRTmmv4DRzyolpRTi4uLsXTy3YutnFRgYiH/++QcHDhxIXoYMGYLKlSvjwIEDaNSokbOK7nT2+rvav39/tv8CMfJZNWvWDBcuXMDt27eTtx0/fhxeXl4IDQ11aHldLSt/W5s3b8bJkycxcOBARxbRbRj5rO7evQsvL8sQxNvbG4Dc58kAlwzFyEa0odqzZ89WERER6vXXX1d58+ZNHtU0cuRI1a9fv+T9Fy1apHx8fNQ333xjMbz95s2brnoLTmPrZ/X111+rVatWqePHj6vjx4+rOXPmqMDAQDV69GhXvQWnsfWzSiknjXK19bP64osv1PLly9Xx48fVoUOH1MiRIxUAtXTpUle9Baex9bOKjY1VoaGh6vHHH1eHDx9WmzdvVhUrVlSDBg1y1VtwKqP/D5955hnVqFEjZxfXpWz9rObOnat8fHzUtGnT1KlTp9S2bdtUgwYNVMOGDV31FjweAzo7+Oabb1Tp0qVVrly5VL169dTmzZuTX+vfv79q1apV8vNWrVopAKmW/v37O7/gLmDLZ/Xll1+q6tWrqzx58qjAwEBVt25dNW3aNJWYmOiCkjufLZ9VSjkpoFPKts/qk08+UeXLl1e5c+dWBQoUUM2bN1dr1qxxQaldw9a/qyNHjqh27dopf39/FRoaqoYPH67u3r3r5FK7jq2f182bN5W/v7/69ttvnVxS17P1s/ryyy9VtWrVlL+/vwoJCVFPP/20ioqKcnKpsw+TUqzbJCIiIvJk7ENHRERE5OEY0BERERF5OAZ0RERERB6OAR0RERGRh2NAR0REROThGNAREREReTgGdEREREQejgEdERERkYdjQEdEmDdvHkwmE+bNm+fqonikAQMGwGQy4ezZs64uChHlUAzoiNzM2bNnYTKZYDKZUKJECSQmJqa53z///JO8X5UqVZxcSvtq3bp18ntJa3F1oOmpAe+NGzcwceJENGnSBIUKFYKvry+KFCmCdu3a4auvvsLt27fTPG7Tpk3o06cPSpYsCT8/PxQsWBDNmzfHF198gfv37zv5XRCRNXxcXQAiSpuPjw8uXLiA9evXo3Pnzqlenz17Nnx8fJCQkOCC0jnGm2++iXz58qXaXqdOHecXxgaTJk3CyJEjUaJECVcXJdnGjRvRu3dvXL9+HVWrVsUTTzyBQoUK4dq1a9iyZQuGDh2KqVOn4tSpU8nHJCQk4JVXXsG3336LvHnzolOnTqhQoQJiYmKwYcMGDB8+HDNmzMCaNWtQoUIFF747IkqJAR2Rm2ratCkOHjyIOXPmpAro4uPjsXDhQnTu3BmrVq1yUQntb8SIEShWrJiri2GzkJAQhISEuLoYyQ4ePIhu3boBABYsWICnn3461T7h4eEYNWqUxbZRo0bh22+/xUMPPYTly5dbBKiJiYmYMGECJkyYgE6dOmHv3r0IDAx07BshIquxyZXITfn7+6NPnz5YvXo1rl69avHaqlWrcPXqVTz33HPpHn/37l2MGzcOVapUQe7cuVGwYEF06dIFO3bssLoMy5cvR9++fVGhQgXkyZMHQUFBaNGiBZYuXZpqX62peMCAATh69Cgee+wxFC5c2G59y6w5vy3l1fz999945plnEBoaCj8/P4SEhOCRRx7B6tWrAUj/OO1zfu655yyagjUZ9aH7/vvv0bhxY+TLlw/58uVD48aN8f3336faLzw8HCaTCePGjcO+ffvQsWNHBAQEICgoCD179rTpMxw6dCju3buHr776Ks1gDpBm7vDw8OTnJ06cwOeff46CBQti9erVqWobvb29MX78eDz11FM4efIkJk+ebHV5iMjxGNARubHnn38+uTbO3Jw5c1C0aFF07do1zePi4uLQtm1bjB8/Hnnz5sXrr7+OHj16IDw8HK1atcKyZcusuv6oUaNw+PBhNG/eHMOGDcMTTzyBY8eO4fHHH8dXX32V5jEnT55E48aNcenSJfTv3x8DBgxArly5bHvjGcjo/LaWd/ny5WjYsCF++uknNGrUCG+++Sa6dOmC8+fPY/bs2QCAHj16oHv37gCA7t27Y+zYsclLZt544w0MGDAAUVFRGDhwIAYNGoTz589jwIABGD58eJrH7NmzBy1atICPjw8GDx6MBg0aYMWKFWjXrp1V/ddOnjyJLVu2IDQ0NMOAHwD8/PyS1+fNm4ekpCS8+OKLCA4OTveY9957D4D8DRKRG1FE5FbOnDmjAKiOHTsqpZSqXr26qlWrVvLrUVFRytvbW7355ptKKaUAqMqVK1ucY8KECQqAevrpp1VSUlLy9oMHDyo/Pz9VoEABdevWreTtc+fOVQDU3LlzLc5z6tSpVOWLjY1VNWvWVEFBQerOnTupyg1Avffeeza951atWikA6s0331Rjx461WKZPn271+W0p76VLl1S+fPlU3rx51b59+1IdFxkZmbye3uej6d+/vwKgzpw5k7xty5YtCoCqWrWqunnzZvL2mzdvqipVqigAauvWrcnbN23alPz+fvzxR4vz9+vXTwFQixcvTvP65ubNm6cAqGeeeSbTfc21bt1aAVBhYWGZ7lu8eHEFQJ07d86maxCR47CGjsjNPffcc/j777+xd+9eAFKTkpiYiOeffz7dY+bNmwdfX198/PHHFk2DtWrVwoABA3Djxg2sXLky02uXK1cu1bZ8+fJhwIABiImJwV9//ZXq9WLFimHMmDHWvLVUpkyZgvHjx1ssM2bMsPr8tpT3+++/x+3bt/Hmm2+ibt26qY4LDQ019B402ojYcePGISgoKHl7UFBQcu1eWqNmW7ZsiT59+lhs0/6t0/q8U7p48SIA28uvHVeyZMlM99X2iY6OtukaROQ4DOiI3Fy/fv3g6+ub3MQ1b948NGrUCNWqVUtz/1u3buH06dOoUKFCml/qrVu3BgAcOHAg02tfvnwZw4cPR9WqVZEnT57kvmNvvvkmAODChQupjqldu7bhJtbo6GgopSyWlOXM6Py2lPfPP/8EAHTo0MFQWTOzf/9+APrnbS6jf4N69eql2qb9O968edNexcsSpRQAWPxYICLX4ihXIjdXtGhRdO7cGYsXL8ajjz6KkydPYsSIEenuf+vWLQBItx+UNoo0JiYmw+tev34dDz30EM6dO4dmzZqhXbt2yJ8/P7y9vXHgwAGsXLkScXFxqY7LqP+VPaR3flvLqwVHjko1cuvWLXh5eaFIkSJpvgcvL680/w3Ma/M0Pj5yq04vJ6E57d/3/PnzNpW3WLFiOHr0KCIjI1G5cuUM942KirK4FhG5HgM6Ig/w/PPPY+XKlRg4cCD8/f3Rt2/fdPfVUklcunQpzde17ZmlnJg9ezbOnTuHiRMnYvTo0Ravffzxx+k22Tq61ia989ta3vz58wOQwKdMmTJ2L2dgYCCSkpJw5coVFC1a1OK1y5cvIykpySFpP5o1awZARs0mJSXBy8u6hpimTZsiPDwcGzduRLt27dLd7+jRo7hw4QJKlChhVfMsETkHm1yJPEDnzp1RrFgxnD9/Hr169cowEAgMDES5cuVw8uTJNGtpNm/eDCDzZL1awtlHH3001Wtbt261ofTOYWt5GzZsCADYsGFDpuf29vYGYF0NmUbrl2eeGkRj7b+BERUqVEDLli0RGRmZZnoUc+Y1lv3794eXlxe+++47XLlyJd1jPvzwQwDIsA8nETkfAzoiD+Dj44NVq1Zh+fLlyV+oGenfvz8ePHiAUaNGJfd3AoBDhw5h7ty5CAoKQo8ePTI8R+nSpQEA27Zts9i+aNEirF271vY34WC2lrd///7Ily8fpkyZkmZfNvNguGDBggD0pkZr9O/fHwAwfvz45GZwQJpix48fb7GPvX355Zfw9/fHq6++iiVLlqS5z9atW/Hwww8nP69UqRKGDRuGa9euoVu3bqkGPCQlJeGDDz7AggULUL58+Qyb/YnI+djkSuQhHnroITz00ENW7fv2229jzZo1+OGHH3DkyBG0bdsWV65cwZIlS/DgwQPMnz8fAQEBGZ6jX79++OSTT/Daa69h06ZNKF26NP7++2/8/vvveOyxx6zOZecstpa3aNGimD9/Pp588kk0bNgQjz76KCpXroyrV69i9+7dKFOmDFasWAEAaNKkCfz9/TF16lTcunUruV/cyJEj0y1Py5Yt8dprr+Grr75CjRo10KtXLyilsGzZMkRGRmLo0KFo2bKlQz6L2rVrY/Xq1ejduzeefPJJTJgwAS1btkTBggVx/fp1bN++Hf/880+q6bs+/fRTxMTEYM6cOahYsSK6dOmC8uXL49atW9iwYQNOnDiBihUrYu3atZwlgsjNMKAjyoZy586NP/74A5988gmWLFmCL774Anny5EHLli3x7rvvonnz5pmeIzQ0FJs3b8bbb7+N33//HQkJCahXrx42bNiAyMhItwvojJS3Z8+e2L17NyZNmoTNmzdj1apVKFy4MOrUqYMXXngheb+CBQvil19+wbhx4zB9+nTcu3cPQMYBHSA1ZXXr1sX06dPx7bffAgCqV6+O8ePHZ5r0N6vatm2LEydOYNq0aVizZg2WLFmC2NhYBAUFoWbNmvjf//6HgQMHWhzj4+OD2bNno2/fvvj222+xbds2LF++HHnz5kXVqlUxZMgQvPTSS/D393do2YnIdiZl3h5DRERERB6HfeiIiIiIPBwDOiIiIiIPx4COiIiIyMMxoCMiIiLycAzoiIiIiDwcAzoiIiIiD8eAjoiIiMjDMaAjIiIi8nAM6IiIiIg8HAM6IiIiIg/HgI6IiIjIwzGgIyIiIvJw/wfFPrhA8SLvngAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig = plt.figure()\n", "\n", "x_CO_model = numpy.linspace(0.2, 0.8, 201)\n", "ac_O_model, ac_CO_model, TOF_CO2_model = adpML.predict(x_CO_model).T\n", "\n", "ax = plt.axes()\n", "ax.set_xlabel(\"Molar Fraction CO\", fontsize=14)\n", "\n", "ax.set_ylabel(\"Coverage Fraction (%)\", color=\"blue\", fontsize=14)\n", "ax.plot(x_CO_model, ac_O_model, color=\"blue\", linestyle=\"-.\", lw=2, zorder=1)\n", "ax.plot(x_CO, ac_O, marker=\"$\\u25EF$\", color=\"blue\", markersize=4, lw=0, zorder=1)\n", "ax.plot(x_CO_model, ac_CO_model, color=\"blue\", linestyle=\"-\", lw=2, zorder=2)\n", "ax.plot(x_CO, ac_CO, marker=\"$\\u25EF$\", color=\"blue\", markersize=4, lw=0, zorder=1)\n", "plt.text(0.3, 0.9, \"O\", fontsize=18, color=\"blue\")\n", "plt.text(0.7, 0.9, \"CO\", fontsize=18, color=\"blue\")\n", "\n", "ax2 = ax.twinx()\n", "ax2.set_ylabel(\"TOF (mol/s/site)\", color=\"red\", fontsize=14)\n", "ax2.plot(x_CO_model, TOF_CO2_model, color=\"red\", linestyle=\"-\", lw=2, zorder=0)\n", "ax2.plot(x_CO, TOF_CO2, marker=\"$\\u25EF$\", color=\"red\", markersize=4, lw=0, zorder=1)\n", "plt.text(0.37, 1.5, \"CO$_2$\", fontsize=18, color=\"red\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7b61035e-83a6-4e41-b30c-ab9d454cf4bb", "metadata": {}, "source": [ "We also found three regions involving the two phase transitions, as shown\n", "in the Figure, which are similar to the ones obtained in the example\n", "**Phase Transitions in the ZGB model**. However, as you can see, the\n", "points are not equidistant here. The ADP generated more points for\n", "$x_\\text{CO}$ between 0.35 and 0.55, which is likely to represent the\n", "small oscillations that occur there accurately. It is worth noting that\n", "the Surrogate Model has some difficulty reproducing the narrow peak at a\n", "maximum $CO_2$ TOF. Certainly, the model could perform better. Unfortunately,\n", "the only way to do so is by increasing the number of points in the training\n", "set by tuning the ADP parameters' (``algorithmParams``). However, now that\n", "we have the surrogate model, we can quickly obtain the average coverage for\n", "$O*$ and $CO*$ and the $CO_2$ TOF for any $CO$ molar fraction. " ] }, { "cell_type": "markdown", "id": "d908746d-9ae1-4152-b778-2edeb8f8899d", "metadata": {}, "source": [ "Now, we can close the pyZacros environment:" ] }, { "cell_type": "code", "execution_count": 10, "id": "69caaabe-f520-4996-b1ec-1d2a008acc0b", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[02.02|22:52:41] PLAMS run finished. Goodbye\n" ] } ], "source": [ "scm.pyzacros.finish()" ] }, { "cell_type": "markdown", "id": "66b8d691-98d3-4181-bbab-ace101bb01dc", "metadata": {}, "source": [ "As a final note, you don't have to recalculate any training points if you load the\n", "surrogate model directly from the disk. As a result, you can apply it to any other\n", "situation, such as e.g., a simulation of reactive computational fluid dynamics (rCFD).\n", "The following code creates the image above exactly, but it starts by reading the\n", "surrogate model from the directory ``plams_workdir/adp.results/``. It can be used\n", "in a separate script." ] }, { "cell_type": "code", "execution_count": 15, "id": "f6adb596-5196-4bcb-b52f-ec09a06367b4", "metadata": {}, "outputs": [ { "data": { "image/png": "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Tzz77LMm57KzFXPrW6xYMXz//fd44YUX0KhRI3Tv3h1VqlRBbGws/vrrL5QtWxa//PILACA0NBS+vr6YOXMm7t27lzYubsyYMVnWp2XLlhg2bBi+/vpr1KxZE71794aiKFi7di0iIiIwfPhwtGzZ0irvRe3atfHrr7+iT58+eOGFFzB58mS0bNkSgYGBuH37Nvbt24eTJ09mWL7r888/R1xcHBYvXoxKlSqha9euqFChAu7du4ctW7bg/PnzqFSpEjZt2sRVIogcDAM6Ihfk4+OD7du3Y+rUqVi9ejVmzJiBfPnyoWXLlvjggw/QvHnzHF8jJCQEu3btwujRo/Hnn38iOTkZ9erVw5YtWxAREeFwAZ2W+vbq1Qt//fUXpkyZgl27dmHDhg0oUqQI6tSpg9dffz3tuMDAQPz888+YOHEi5s2bh4cPHwLIPqADpKWsbt26mDdvHhYsWAAAqFGjBiZNmpRj0t/cateuHc6fP4+5c+di48aNWL16NeLj4xEQEIBatWrhq6++wqBBg4zO8fDwwKJFi9CvXz8sWLAAe/fuxbp165A/f35Uq1YNQ4YMwZtvvglfX1+r1p2IzKdTDPtjiIiIiMjpcAwdERERkZNjQEdERETk5BjQERERETk5BnRERERETo4BHREREZGTY0BHRERE5OQY0BERERE5OQZ0RERERE6OAR0RERGRk2NAR0REROTkGNAREREROTkGdERERERO7v8BMaAboWVk21wAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import adaptiveDesignProcedure as adp\n", "import matplotlib.pyplot as plt\n", "\n", "path = \"plams_workdir/adp.results/\"\n", "\n", "x_CO_model = np.linspace(0.2, 0.8, 201)\n", "ac_O_model, ac_CO_model, TOF_CO2_model = adp.predict(x_CO_model, path).T\n", "\n", "ax = plt.axes()\n", "ax.set_xlabel(\"Molar Fraction CO\", fontsize=14)\n", "\n", "ax.set_ylabel(\"Coverage Fraction (%)\", color=\"blue\", fontsize=14)\n", "ax.plot(x_CO_model, ac_O_model, color=\"blue\", linestyle=\"-.\", lw=2, zorder=1)\n", "ax.plot(x_CO_model, ac_CO_model, color=\"blue\", linestyle=\"-\", lw=2, zorder=2)\n", "plt.text(0.3, 0.9, \"O\", fontsize=18, color=\"blue\")\n", "plt.text(0.7, 0.9, \"CO\", fontsize=18, color=\"blue\")\n", "\n", "ax2 = ax.twinx()\n", "ax2.set_ylabel(\"TOF (mol/s/site)\", color=\"red\", fontsize=14)\n", "ax2.plot(x_CO_model, TOF_CO2_model, color=\"red\", linestyle=\"-\", lw=2, zorder=0)\n", "plt.text(0.37, 1.5, \"CO$_2$\", fontsize=18, color=\"red\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "a7c12cd5-27c7-4a52-9612-f076ef0ccb44", "metadata": {}, "source": [ "By default, the Surrogate Model's file is ``ml_ExtraTrees_forCFD.pkl``. The option\n", "``forestFile`` in the ADP constructor allows you to alter the prefix ``ml_ExtraTrees``.\n", "In the ``adp.predict()`` method, you can provide the complete path to this file, but if\n", "a directory is supplied instead, it will try to discover the proper file inside,\n", "as shown in the lines of code above. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }