pax_global_header00006660000000000000000000000064145555306650014530gustar00rootroot0000000000000052 comment=9a490316e1cbe408cbc5a29b81c40fe700263314 uqfoundation-mystic-9a49031/000077500000000000000000000000001455553066500160265ustar00rootroot00000000000000uqfoundation-mystic-9a49031/.codecov.yml000066400000000000000000000015001455553066500202450ustar00rootroot00000000000000comment: false coverage: status: project: default: # Commits pushed to master should not make the overall # project coverage decrease by more than 1%: target: auto threshold: 1% patch: default: # Be tolerant on slight code coverage diff on PRs to limit # noisy red coverage status on github PRs. # Note The coverage stats are still uploaded # to codecov so that PR reviewers can see uncovered lines # in the github diff if they install the codecov browser # extension: # https://github.com/codecov/browser-extension target: auto threshold: 1% fixes: # reduces pip-installed path to git root and # remove dist-name from setup-installed path - "*/site-packages/::" - "*/site-packages/mystic-*::" uqfoundation-mystic-9a49031/.coveragerc000066400000000000000000000024111455553066500201450ustar00rootroot00000000000000[run] # source = mystic include = */mystic/* */mystic/cache/* */mystic/models/* */mystic/math/* omit = */tests/* */info.py */_scipyoptimize.py */_scipy060optimize.py */_signal.py */scripts.py */support.py */munge.py # _signal: can't test the signal handler # scripts: can't test? ...unless return mpl object # support: can't test? ...unless return mpl object # munge: can't test? ...unless create dummy files branch = true # timid = true # parallel = true # and need to 'combine' data files # concurrency = multiprocessing # thread # data_file = $TRAVIS_BUILD_DIR/.coverage # debug = trace [paths] source = mystic mystic/cache mystic/models mystic/math */site-packages/mystic */site-packages/mystic/cache */site-packages/mystic/math */site-packages/mystic/models */site-packages/mystic-*/mystic */site-packages/mystic-*/mystic/cache */site-packages/mystic-*/mystic/math */site-packages/mystic-*/mystic/models [report] include = */mystic/* */mystic/cache/* */mystic/models/* */mystic/math/* exclude_lines = pragma: no cover raise NotImplementedError if __name__ == .__main__.: # show_missing = true ignore_errors = true # pragma: no branch # noqa uqfoundation-mystic-9a49031/.gitignore000066400000000000000000000000401455553066500200100ustar00rootroot00000000000000.tox/ .cache/ *.egg-info/ *.pyc uqfoundation-mystic-9a49031/.readthedocs.yml000066400000000000000000000005151455553066500211150ustar00rootroot00000000000000# readthedocs configuration file # see https://docs.readthedocs.io/en/stable/config-file/v2.html version: 2 # configure sphinx: configuration: docs/source/conf.py # build build: os: ubuntu-22.04 tools: python: "3.10" # install python: install: - method: pip path: . - requirements: docs/requirements.txt uqfoundation-mystic-9a49031/.travis.yml000066400000000000000000000037541455553066500201500ustar00rootroot00000000000000dist: jammy language: python matrix: include: - python: '3.8' env: - python: '3.9' env: - COVERAGE="true" - MATPLOTLIB="true" - SYMPY="true" - SCIPY="true" - python: '3.10' env: - python: '3.11' env: - python: '3.12' env: - python: '3.13-dev' env: - CYTHON="true" # numpy source build - DILL="master" - KLEPTO="master" - python: 'pypy3.8-7.3.9' # at 7.3.11 env: - python: 'pypy3.9-7.3.9' # at 7.3.15 env: - python: 'pypy3.10-7.3.15' env: allow_failures: - python: '3.13-dev' - python: 'pypy3.10-7.3.15' # CI missing fast_finish: true cache: pip: true before_install: - set -e # fail on any error - if [[ $COVERAGE == "true" ]]; then pip install coverage; fi - if [[ $MATPLOTLIB == "true" ]]; then pip install matplotlib; fi - if [[ $SYMPY == "true" ]]; then pip install sympy; fi - if [[ $SCIPY == "true" ]]; then pip install scipy; fi - if [[ $CYTHON == "true" ]]; then pip install "cython<0.29.25"; fi #FIXME - if [[ $DILL == "master" ]]; then pip install "https://github.com/uqfoundation/dill/archive/master.tar.gz"; fi - if [[ $KLEPTO == "master" ]]; then pip install "https://github.com/uqfoundation/klepto/archive/master.tar.gz"; fi install: - python -m pip install . script: - for test in mystic/tests/__init__.py; do echo $test ; if [[ $COVERAGE == "true" ]]; then coverage run -a $test > /dev/null; else python $test > /dev/null; fi ; done - for test in mystic/tests/test_*.py; do echo $test ; if [[ $COVERAGE == "true" ]]; then coverage run -a $test > /dev/null; else python $test > /dev/null; fi ; done after_success: - if [[ $COVERAGE == "true" ]]; then bash <(curl -s https://codecov.io/bash); else echo ''; fi - if [[ $COVERAGE == "true" ]]; then coverage report; fi uqfoundation-mystic-9a49031/LICENSE000066400000000000000000000033761455553066500170440ustar00rootroot00000000000000Copyright (c) 2004-2016 California Institute of Technology. Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. All rights reserved. This software is available subject to the conditions and terms laid out below. By downloading and using this software you are agreeing to the following conditions. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the names of the copyright holders nor the names of any of the contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. uqfoundation-mystic-9a49031/MANIFEST.in000066400000000000000000000005521455553066500175660ustar00rootroot00000000000000include LICENSE include README* include MANIFEST.in include pyproject.toml include tox.ini include version.py recursive-include docs * recursive-include examples * recursive-include examples2 * recursive-include examples3 * recursive-include examples4 * recursive-include examples5 * recursive-include scripts * include .* prune .git prune .coverage prune .eggs uqfoundation-mystic-9a49031/README.md000066400000000000000000000345771455553066500173250ustar00rootroot00000000000000mystic ====== constrained nonlinear optimization for scientific machine learning, UQ, and AI About Mystic ------------ The ``mystic`` framework provides a collection of optimization algorithms and tools that allows the user to more robustly (and easily) solve hard optimization problems. All optimization algorithms included in ``mystic`` provide workflow at the fitting layer, not just access to the algorithms as function calls. ``mystic`` gives the user fine-grained power to both monitor and steer optimizations as the fit processes are running. Optimizers can advance one iteration with ``Step``, or run to completion with ``Solve``. Users can customize optimizer stop conditions, where both compound and user-provided conditions may be used. Optimizers can save state, can be reconfigured dynamically, and can be restarted from a saved solver or from a results file. All solvers can also leverage parallel computing, either within each iteration or as an ensemble of solvers. Where possible, ``mystic`` optimizers share a common interface, and thus can be easily swapped without the user having to write any new code. ``mystic`` solvers all conform to a solver API, thus also have common method calls to configure and launch an optimization job. For more details, see ``mystic.abstract_solver``. The API also makes it easy to bind a favorite 3rd party solver into the ``mystic`` framework. Optimization algorithms in ``mystic`` can accept parameter constraints, as "soft constraints" (i.e. ``penalties``, which "penalize" regions of solution space that violate the constraints), or as "hard constraints" (i.e. ``constraints``, which constrain the solver to only search in regions of space where the constraints are respected), or both. ``mystic`` provides a large selection of constraints, including probabistic and dimensionally reducing constraints. By providing a robust interface designed to enable the user to easily configure and control solvers, ``mystic`` greatly reduces the barrier to solving hard optimization problems. Sampling, interpolation, and statistics in ``mystic`` are all designed to seamlessly couple with constrained optimization to facilitate scientific machine learning, uncertainty quantification, adaptive sampling, nonlinear interpolation, and artificial intelligence. ``mystic`` can convert systems of equalities and inequalities to hard or soft constraints using methods in ``mystic.symbolic``. With ``mystic.constraints.vectorize``, constraints can be converted to kernel transforms for use in machine learning. Similarly, ``mystic`` provides tools for accurately producing emulators on an irregular grid using ``mystic.math.interpolate``, which includes methods for solving for gradients and Hessians. ``mystic.samplers`` use optimizers to drive adaptive sampling toward the first and second order critical points of the response surface, yielding highly-informative training data sets and ensuring emulator accuracy. ``mystic.math.discrete`` defines constrained discrete probability measures, which can be used in constrained statistical optimization and learning. ``mystic`` is in active development, so any user feedback, bug reports, comments, or suggestions are highly appreciated. A list of issues is located at https://github.com/uqfoundation/mystic/issues, with a legacy list maintained at https://uqfoundation.github.io/project/mystic/query. Major Features -------------- ``mystic`` provides a stock set of configurable, controllable solvers with: * a common interface * a control handler with: pause, continue, exit, and callback * ease in selecting initial population conditions: guess, random, etc * ease in checkpointing and restarting from a log or saved state * the ability to leverage parallel & distributed computing * the ability to apply a selection of logging and/or verbose monitors * the ability to configure solver-independent termination conditions * the ability to impose custom and user-defined penalties and constraints To get up and running quickly, ``mystic`` also provides infrastructure to: * easily generate a model (several standard test models are included) * configure and auto-generate a cost function from a model * configure an ensemble of solvers to perform a specific task Current Release [![Downloads](https://static.pepy.tech/personalized-badge/mystic?period=total&units=international_system&left_color=grey&right_color=blue&left_text=pypi%20downloads)](https://pepy.tech/project/mystic) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/mystic?color=blue&label=conda%20downloads)](https://anaconda.org/conda-forge/mystic) [![Stack Overflow](https://img.shields.io/badge/stackoverflow-get%20help-black.svg)](https://stackoverflow.com/questions/tagged/mystic) --------------- The latest released version of ``mystic`` is available from: https://pypi.org/project/mystic ``mystic`` is distributed under a 3-clause BSD license. Development Version [![Support](https://img.shields.io/badge/support-the%20UQ%20Foundation-purple.svg?style=flat&colorA=grey&colorB=purple)](http://www.uqfoundation.org/pages/donate.html) [![Documentation Status](https://readthedocs.org/projects/mystic/badge/?version=latest)](https://mystic.readthedocs.io/en/latest/?badge=latest) [![Build Status](https://travis-ci.com/uqfoundation/mystic.svg?label=build&logo=travis&branch=master)](https://travis-ci.com/github/uqfoundation/mystic) [![codecov](https://codecov.io/gh/uqfoundation/mystic/branch/master/graph/badge.svg)](https://codecov.io/gh/uqfoundation/mystic) ------------------- You can get the latest development version with all the shiny new features at: https://github.com/uqfoundation If you have a new contribution, please submit a pull request. Installation ------------ ``mystic`` can be installed with ``pip``:: $ pip install mystic To include optional scientific Python support, with ``scipy``, install:: $ pip install mystic[math] To include optional plotting support with ``matplotlib``, install:: $ pip install mystic[plotting] To include optional parallel computing support, with ``pathos``, install:: $ pip install mystic[parallel] Requirements ------------ ``mystic`` requires: * ``python`` (or ``pypy``), **>=3.8** * ``setuptools``, **>=42** * ``cython``, **>=0.29.30** * ``numpy``, **>=1.0** * ``sympy``, **>=0.6.7** * ``mpmath``, **>=0.19** * ``dill``, **>=0.3.8** * ``klepto``, **>=0.2.5** Optional requirements: * ``matplotlib``, **>=0.91** * ``scipy``, **>=0.6.0** * ``pathos``, **>=0.3.2** * ``pyina``, **>=0.2.8** More Information ---------------- Probably the best way to get started is to look at the documentation at http://mystic.rtfd.io. Also see ``mystic.tests`` for a set of scripts that demonstrate several of the many features of the ``mystic`` framework. You can run the test suite with ``python -m mystic.tests``. There are several plotting scripts that are installed with ``mystic``, primary of which are ``mystic_log_reader`` (also available with ``python -m mystic``) and the ``mystic_model_plotter`` (also available with ``python -m mystic.models``). There are several other plotting scripts that come with ``mystic``, and they are detailed elsewhere in the documentation. See https://github.com/uqfoundation/mystic/tree/master/examples for examples that demonstrate the basic use cases for configuration and launching of optimization jobs using one of the sample models provided in ``mystic.models``. Many of the included examples are standard optimization test problems. The use of constraints and penalties are detailed in https://github.com/uqfoundation/mystic/tree/master/examples2 while more advanced features leveraging ensemble solvers, machine learning, uncertainty quantification, and dimensional collapse are found in https://github.com/uqfoundation/mystic/tree/master/examples3. The scripts in https://github.com/uqfoundation/mystic/tree/master/examples4 demonstrate leveraging ``pathos`` for parallel computing, as well as demonstrate some auto-partitioning schemes. ``mystic`` has the ability to work in product measure space, and the scripts in https://github.com/uqfoundation/mystic/tree/master/examples5 show how to work with product measures at a low level. The source code is generally well documented, so further questions may be resolved by inspecting the code itself. Please feel free to submit a ticket on github, or ask a question on stackoverflow (**@Mike McKerns**). If you would like to share how you use ``mystic`` in your work, please send an email (to **mmckerns at uqfoundation dot org**). Instructions on building a new model are in ``mystic.models.abstract_model``. ``mystic`` provides base classes for two types of models: * ``AbstractFunction`` [evaluates ``f(x)`` for given evaluation points ``x``] * ``AbstractModel`` [generates ``f(x,p)`` for given coefficients ``p``] ``mystic`` also provides some convienence functions to help you build a model instance and a cost function instance on-the-fly. For more information, see ``mystic.forward_model``. It is, however, not necessary to use base classes or the model builder in building your own model or cost function, as any standard Python function can be used as long as it meets the basic ``AbstractFunction`` interface of ``cost = f(x)``. All ``mystic`` solvers are highly configurable, and provide a robust set of methods to help customize the solver for your particular optimization problem. For each solver, a minimal (``scipy.optimize``) interface is also provided for users who prefer to configure and launch their solvers as a single function call. For more information, see ``mystic.abstract_solver`` for the solver API, and each of the individual solvers for their minimal functional interface. ``mystic`` enables solvers to use parallel computing whenever the user provides a replacement for the (serial) Python ``map`` function. ``mystic`` includes a sample ``map`` in ``mystic.python_map`` that mirrors the behavior of the built-in Python ``map``, and a ``pool`` in ``mystic.pools`` that provides ``map`` functions using the ``pathos`` (i.e. ``multiprocessing``) interface. ``mystic`` solvers are designed to utilize distributed and parallel tools provided by the ``pathos`` package. For more information, see ``mystic.abstract_map_solver``, ``mystic.abstract_ensemble_solver``, and the ``pathos`` documentation at http://pathos.rtfd.io. Important classes and functions are found here: * ``mystic.solvers`` [solver optimization algorithms] * ``mystic.termination`` [solver termination conditions] * ``mystic.strategy`` [solver population mutation strategies] * ``mystic.monitors`` [optimization monitors] * ``mystic.symbolic`` [symbolic math in constraints] * ``mystic.constraints`` [constraints functions] * ``mystic.penalty`` [penalty functions] * ``mystic.collapse`` [checks for dimensional collapse] * ``mystic.coupler`` [decorators for function coupling] * ``mystic.pools`` [parallel worker pool interface] * ``mystic.munge`` [file readers and writers] * ``mystic.scripts`` [model and convergence plotting] * ``mystic.samplers`` [optimizer-guided sampling] * ``mystic.support`` [hypercube measure support plotting] * ``mystic.forward_model`` [cost function generator] * ``mystic.tools`` [constraints, wrappers, and other tools] * ``mystic.cache`` [results caching and archiving] * ``mystic.models`` [models and test functions] * ``mystic.math`` [mathematical functions and tools] Important functions within ``mystic.math`` are found here: * ``mystic.math.Distribution`` [a sampling distribution object] * ``mystic.math.legacydata`` [classes for legacy data observations] * ``mystic.math.discrete`` [classes for discrete measures] * ``mystic.math.measures`` [tools to support discrete measures] * ``mystic.math.approx`` [tools for measuring equality] * ``mystic.math.grid`` [tools for generating points on a grid] * ``mystic.math.distance`` [tools for measuring distance and norms] * ``mystic.math.poly`` [tools for polynomial functions] * ``mystic.math.samples`` [tools related to sampling] * ``mystic.math.integrate`` [tools related to integration] * ``mystic.math.interpolate`` [tools related to interpolation] * ``mystic.math.stats`` [tools related to distributions] Solver, Sampler, and model API definitions are found here: * ``mystic.abstract_sampler`` [the sampler API definition] * ``mystic.abstract_solver`` [the solver API definition] * ``mystic.abstract_map_solver`` [the parallel solver API] * ``mystic.abstract_ensemble_solver`` [the ensemble solver API] * ``mystic.models.abstract_model`` [the model API definition] ``mystic`` also provides several convience scripts that are used to visualize models, convergence, and support on the hypercube. These scripts are installed to a directory on the user's ``$PATH``, and thus can be run from anywhere: * ``mystic_log_reader`` [parameter and cost convergence] * ``mystic_log_converter`` [logfile format converter] * ``mystic_collapse_plotter`` [convergence and dimensional collapse] * ``mystic_model_plotter`` [model surfaces and solver trajectory] * ``support_convergence`` [convergence plots for measures] * ``support_hypercube`` [parameter support on the hypercube] * ``support_hypercube_measures`` [measure support on the hypercube] * ``support_hypercube_scenario`` [scenario support on the hypercube] Typing ``--help`` as an argument to any of the above scripts will print out an instructive help message. Citation -------- If you use ``mystic`` to do research that leads to publication, we ask that you acknowledge use of ``mystic`` by citing the following in your publication:: M.M. McKerns, L. Strand, T. Sullivan, A. Fang, M.A.G. Aivazis, "Building a framework for predictive science", Proceedings of the 10th Python in Science Conference, 2011; http://arxiv.org/pdf/1202.1056 Michael McKerns, Patrick Hung, and Michael Aivazis, "mystic: highly-constrained non-convex optimization and UQ", 2009- ; https://uqfoundation.github.io/project/mystic Please see https://uqfoundation.github.io/project/mystic or http://arxiv.org/pdf/1202.1056 for further information. uqfoundation-mystic-9a49031/_examples/000077500000000000000000000000001455553066500200035ustar00rootroot00000000000000uqfoundation-mystic-9a49031/_examples/CubeSection.py000066400000000000000000000152541455553066500225670ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE # # This example is a derivative of vtk's ClipCow # It is a visualization of Prince Rupert's problem import tkinter import vtk from vtk.tk.vtkTkRenderWindowInteractor import \ vtkTkRenderWindowInteractor from numpy import array, cross from vtk.util.colors import peacock, tomato #cube = vtk.vtkBYUReader() #cube.SetGeometryFileName("./cube.g") cube = vtk.vtkCubeSource() cube.SetCenter(0.5,0.5,0.5) cubeNormals = vtk.vtkPolyDataNormals() cubeNormals.SetInputConnection(cube.GetOutputPort()) cube = cubeNormals def PlaneNormal(a, b, c): assert(a >= 0 and a <= 1) assert(b >= 0 and b <= 1) assert(c >= 0 and c <= 2) A = array([a, 0.0, 0.0]) B = array([0.0, b, 0.0]) if c < 1: C = array([c, 0.0, 1.0]) else: C = array([1.0, c-1.0, 1.0]) BA = B-A CA = C-A return cross(BA, CA) def CuttingPlane(a, b, c): N = PlaneNormal(a,b,c) plane = vtk.vtkPlane() plane.SetOrigin(a, 0, 0) plane.SetNormal(*N) return plane def getAxes(Origin, scale = 1): axes = vtk.vtkAxes() axes.SetOrigin(*Origin) axes.SetScaleFactor(scale) axesTubes = vtk.vtkTubeFilter() axesTubes.SetInputConnection(axes.GetOutputPort()) axesTubes.SetRadius(0.01) axesTubes.SetNumberOfSides(6) axesMapper = vtk.vtkPolyDataMapper() axesMapper.SetInputConnection(axesTubes.GetOutputPort()) axesActor = vtk.vtkActor() axesActor.SetMapper(axesMapper) XText = vtk.vtkVectorText() XText.SetText("x") XTextMapper = vtk.vtkPolyDataMapper() XTextMapper.SetInputConnection(XText.GetOutputPort()) XActor = vtk.vtkFollower() XActor.SetMapper(XTextMapper) XActor.SetScale(.1, .1, .1) XActor.SetPosition(1, Origin[1], Origin[2]) XActor.GetProperty().SetColor(0, 0, 0) YText = vtk.vtkVectorText() YText.SetText("y") YTextMapper = vtk.vtkPolyDataMapper() YTextMapper.SetInputConnection(YText.GetOutputPort()) YActor = vtk.vtkFollower() YActor.SetMapper(YTextMapper) YActor.SetScale(.1, .1, .1) YActor.SetPosition(Origin[0], 1, Origin[2]) YActor.GetProperty().SetColor(0, 0, 0) return axesActor, XActor, YActor axesActor, XActor, YActor = getAxes([-.1, -.1, -.1]) P = (0.75, 0.75, 1.25) # vtkClipPolyData requires an implicit function to define what it is to # clip with. Any implicit function, including complex boolean combinations # can be used. Notice that we can specify the value of the implicit function # with the SetValue method. clipper = vtk.vtkClipPolyData() clipper.SetInputConnection(cubeNormals.GetOutputPort()) clipper.SetClipFunction(CuttingPlane(*P)) clipper.GenerateClipScalarsOn() clipper.GenerateClippedOutputOn() clipper.SetValue(0) clipMapper = vtk.vtkPolyDataMapper() clipMapper.SetInputConnection(clipper.GetOutputPort()) clipMapper.ScalarVisibilityOff() backProp = vtk.vtkProperty() backProp.SetDiffuseColor(tomato) clipActor = vtk.vtkActor() clipActor.SetMapper(clipMapper) clipActor.GetProperty().SetColor(peacock) clipActor.SetBackfaceProperty(backProp) # Here we are cutting the cube. Cutting creates lines where the cut # function intersects the model. (Clipping removes a portion of the # model but the dimension of the data does not change.) # # The reason we are cutting is to generate a closed polygon at the # boundary of the clipping process. The cutter generates line # segments, the stripper then puts them together into polylines. We # then pull a trick and define polygons using the closed line # segements that the stripper created. cutEdges = vtk.vtkCutter() cutEdges.SetInputConnection(cubeNormals.GetOutputPort()) cutEdges.SetCutFunction(CuttingPlane(*P)) cutEdges.GenerateCutScalarsOn() cutEdges.SetValue(0, 0) cutStrips = vtk.vtkStripper() cutStrips.SetInputConnection(cutEdges.GetOutputPort()) cutStrips.Update() cutPoly = vtk.vtkPolyData() cutPoly.SetPoints(cutStrips.GetOutput().GetPoints()) cutPoly.SetPolys(cutStrips.GetOutput().GetLines()) # Triangle filter is robust enough to ignore the duplicate point at # the beginning and end of the polygons and triangulate them. cutTriangles = vtk.vtkTriangleFilter() cutTriangles.SetInput(cutPoly) cutMapper = vtk.vtkPolyDataMapper() cutMapper.SetInput(cutPoly) cutMapper.SetInputConnection(cutTriangles.GetOutputPort()) cutActor = vtk.vtkActor() cutActor.SetMapper(cutMapper) cutActor.GetProperty().SetColor(peacock) # The clipped part of the cube is rendered wireframe. restMapper = vtk.vtkPolyDataMapper() restMapper.SetInput(clipper.GetClippedOutput()) restMapper.ScalarVisibilityOff() restActor = vtk.vtkActor() restActor.SetMapper(restMapper) restActor.GetProperty().SetRepresentationToWireframe() # Create graphics stuff renWin = vtk.vtkRenderWindow() ren = vtk.vtkRenderer() ren.SetBackground(tomato) renWin.AddRenderer(ren) # Add the actors to the renderer, set the background and size ren.AddActor(clipActor) ren.AddActor(cutActor) ren.AddActor(restActor) ren.AddActor(axesActor) ren.AddActor(XActor) ren.AddActor(YActor) ren.SetBackground(1, 1, 1) ren.ResetCamera() camera = ren.GetActiveCamera() camera.SetFocalPoint(0.489125, 0.481143, 0.445) camera.SetPosition(-0.870854, -1.51779, 3.14336) camera.SetParallelScale(1.00818) camera.SetParallelProjection(1) camera.SetViewUp(-0.239476, 0.833984, 0.497114) ren.ResetCameraClippingRange() renWin.SetSize(400, 400) def Cut(v): Q = (P[0], P[1], v) cp = CuttingPlane(*Q) pn = PlaneNormal(*Q) clipper.SetClipFunction(cp) clipper.SetValue(0) cutEdges.SetCutFunction(cp) cutEdges.SetValue(0, 0) cutStrips.Update() cutPoly.SetPoints(cutStrips.GetOutput().GetPoints()) cutPoly.SetPolys(cutStrips.GetOutput().GetLines()) cutMapper.Update() renWin.Render() root = tkinter.Tk() vtkw = vtkTkRenderWindowInteractor(root, rw=renWin, width=800) def set_cut(sz): sz = float(sz) # print(ren.GetActiveCamera()) Cut(sz) # propagate this GUI setting to the corresponding VTK object. size_slider = tkinter.Scale(root, from_=0.0, to=2.0, res=0.01, orient='horizontal', label="Clipping Center", command=set_cut) size_slider.set(P[2]) vtkw.Initialize() size_slider.pack(side="top", fill="both") vtkw.pack(side="top", fill='both', expand=1) # Define a quit method that exits cleanly. def quit(obj=root): obj.quit() root.protocol("WM_DELETE_WINDOW", quit) renWin.Render() vtkw.Start() # start the Tkinter event loop. root.mainloop() # end of file uqfoundation-mystic-9a49031/_examples/chebyshevinputs.py000077500000000000000000000022151455553066500236030ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ chebyshevinputs.py -- cost function container module for NelderMeadSimplexSolver and PowellDirectionalSolver for testsolvers_pyre.py """ from mystic.models.poly import chebyshev8cost as cost from mystic.models.poly import chebyshev8coeffs from mystic.termination import * ND = 9 maxiter = 999 from numpy import inf import random from mystic.tools import random_seed random_seed(123) x0 = [random.uniform(-5,5) + chebyshev8coeffs[i] for i in range(ND)] # used with SetStrictRanges min_bounds = [ 0,-1,-300,-1, 0,-1,-100,-inf,-inf] max_bounds = [200, 1, 0, 1,200, 1, 0, inf, inf] termination = CandidateRelativeTolerance() #termination = VTR() #termination = ChangeOverGeneration() #termination = NormalizedChangeOverGeneration() # End of file uqfoundation-mystic-9a49031/_examples/chebyshevinputs_de.py000077500000000000000000000021661455553066500242600ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ chebychevinputs_de.py -- cost function container module for differential evolution and the chebyshev function for testsolvers_pyre.py """ from mystic.models.poly import chebyshev8cost as cost from mystic.termination import * from mystic.strategy import * ND = 9 NP = 80 maxiter = ND*NP # used with SetRandomInitialPoints min = [-100.0] * 9 max = [100.0] * 9 strategy = Best1Exp #strategy = Best1Bin #strategy = Rand1Exp probability = 1.0 scale = 0.9 solverkwds = {'strategy': strategy, 'CrossProbability': probability, 'ScalingFactor': scale} #termination = VTR() termination = CandidateRelativeTolerance() #termination = ChangeOverGeneration() #termination = NormalizedChangeOverGeneration() # End of file uqfoundation-mystic-9a49031/_examples/cube.g000066400000000000000000000010411455553066500210650ustar00rootroot00000000000000 1 8 6 24 1 6 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 4 3 2 -1 5 6 7 -8 1 5 8 -4 4 8 7 -3 3 7 6 -2 2 6 5 -1 uqfoundation-mystic-9a49031/_examples/derun.py000077500000000000000000000074311455553066500215020ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Runs differential evolution as a pyre application Based on DifferentialEvolutionSolver """ from pyre.applications.Script import Script from mystic.helputil import paginate from mystic.solvers import DifferentialEvolutionSolver import logging class DerunApp(Script): """Differential Evolution Solver wrapped into a Pyre Application.""" class Inventory(Script.Inventory): import pyre.inventory # the defaults scale = pyre.inventory.float('scale', default = 0.7) scale.meta['tip'] = 'Differential Evolution scale factor.' probability = pyre.inventory.float('probability', default = 0.5) probability.meta['tip'] = 'Differential Evolution crossover probability.' costfunc = pyre.inventory.str('costfunc', default = 'dummy') costfunc.meta['tip'] = 'The python module containing the cost-function and other data.' strategy = pyre.inventory.str('strategy', default = 'Best1Exp') strategy.meta['tip'] = 'The differential evolution strategy.' strategy.meta['known_alternatives'] = ['Best1Bin', 'Rand1Exp'] verbose = pyre.inventory.bool('verbose', default = False) verbose.meta['tip'] = 'Turns on logging.' def main(self, *args, **kwds): solver = DifferentialEvolutionSolver(self.mod.ND, self.mod.NP) costfunction = self.mod.cost termination = self.mod.termination MAX_GENERATIONS = self.mod.MAX_GENERATIONS solver.SetRandomInitialPoints(min = self.mod.min, max = self.mod.max) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(costfunction, termination, strategy=self.strategy,\ CrossProbability=self.probability, \ ScalingFactor=self.scale) self.solution = solver.Solution() return def __init__(self): Script.__init__(self, 'derunapp') self.scale = '' self.probability = '' self.mod = '' self.strategy = '' self.solution = None return def _defaults(self): Script._defaults(self) return def _configure(self): from mystic import strategy as detools Script._configure(self) mod = __import__(self.inventory.costfunc) self.mod = mod self.scale = self.inventory.scale self.probability = self.inventory.probability try: self.probability = self.mod.probability except: pass try: self.scale = self.mod.scale except: pass self.strategy = getattr(detools,self.inventory.strategy) if self.inventory.verbose: logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S') def _init(self): Script._init(self) return def help(self): doc = """ # this will solve the default "example" problem %(name)s """ % {'name' : __file__} paginate(doc) return # main if __name__ == '__main__': app = DerunApp() app.run() # Chebyshev8 polynomial (used with "dummy.py") from mystic.models.poly import chebyshev8coeffs as target_coeffs from mystic.math import poly1d print("target:\n%s" % poly1d(target_coeffs)) print("\nDE Solution:\n%s" % poly1d(app.solution)) # End of file uqfoundation-mystic-9a49031/_examples/dummy.py000066400000000000000000000013201455553066500215040ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ dummy.py -- cost function container module for derun.py """ from mystic.models.poly import chebyshev8cost as cost from mystic.termination import * from mystic.strategy import * ND = 9 NP = 80 MAX_GENERATIONS = ND*NP min = [-100.0] * 9 max = [100.0] * 9 termination = VTR(0.01) probability = 1.0 scale = 0.9 # End of file uqfoundation-mystic-9a49031/_examples/mystic.nb000077500000000000000000037705141455553066500216600ustar00rootroot00000000000000(************** Content-type: application/mathematica ************** CreatedBy='Mathematica 5.2' Mathematica-Compatible Notebook This notebook can be used with any Mathematica-compatible application, such as Mathematica, MathReader or Publicon. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. *******************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 1037949, 28519]*) (*NotebookOutlinePosition[ 1038638, 28543]*) (* CellTagsIndexPosition[ 1038594, 28539]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["Initialization", "Section"], Cell[BoxData[ \(Needs["\"]\)], "Input", InitializationCell->True] }, Open ]], Cell[CellGroupData[{ Cell["Solving Storn and Price's fitting problem", "Section"], Cell["\<\ The problem is to find a 8th (or 16th) degree polynomial that lies \ between -1 and 1 when the argument is between -1 and 1, but is bigger than \ ChebyshevT[8, x] (or Chebyshev[16,x]) when x is at -1.2 and 1.2. \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(ChebyshevT[8, x]\)], "Input"], Cell[BoxData[ \(1 - 32\ x\^2 + 160\ x\^4 - 256\ x\^6 + 128\ x\^8\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Plot[ChebyshevT[8, x], {x, \(-1.2\), 1.2}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.5 0.396825 0.133002 0.118287 [ [.10317 .1205 -6 -9 ] [.10317 .1205 6 0 ] [.30159 .1205 -12 -9 ] [.30159 .1205 12 0 ] [.69841 .1205 -9 -9 ] [.69841 .1205 9 0 ] [.89683 .1205 -3 -9 ] [.89683 .1205 3 0 ] [.4875 .01471 -12 -4.5 ] [.4875 .01471 0 4.5 ] [.4875 .25129 -6 -4.5 ] [.4875 .25129 0 4.5 ] [.4875 .36958 -6 -4.5 ] [.4875 .36958 0 4.5 ] [.4875 .48786 -6 -4.5 ] [.4875 .48786 0 4.5 ] [.4875 .60615 -6 -4.5 ] [.4875 .60615 0 4.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .10317 .133 m .10317 .13925 L s [(-1)] .10317 .1205 0 1 Mshowa .30159 .133 m .30159 .13925 L s [(-0.5)] .30159 .1205 0 1 Mshowa .69841 .133 m .69841 .13925 L s [(0.5)] .69841 .1205 0 1 Mshowa .89683 .133 m .89683 .13925 L s [(1)] .89683 .1205 0 1 Mshowa .125 Mabswid .14286 .133 m .14286 .13675 L s .18254 .133 m .18254 .13675 L s .22222 .133 m .22222 .13675 L s .2619 .133 m .2619 .13675 L s .34127 .133 m .34127 .13675 L s .38095 .133 m .38095 .13675 L s .42063 .133 m .42063 .13675 L s .46032 .133 m .46032 .13675 L s .53968 .133 m .53968 .13675 L s .57937 .133 m .57937 .13675 L s .61905 .133 m .61905 .13675 L s .65873 .133 m .65873 .13675 L s .7381 .133 m .7381 .13675 L s .77778 .133 m .77778 .13675 L s .81746 .133 m .81746 .13675 L s .85714 .133 m .85714 .13675 L s .06349 .133 m .06349 .13675 L s .02381 .133 m .02381 .13675 L s .93651 .133 m .93651 .13675 L s .97619 .133 m .97619 .13675 L s .25 Mabswid 0 .133 m 1 .133 L s .5 .01471 m .50625 .01471 L s [(-1)] .4875 .01471 1 0 Mshowa .5 .25129 m .50625 .25129 L s [(1)] .4875 .25129 1 0 Mshowa .5 .36958 m .50625 .36958 L s [(2)] .4875 .36958 1 0 Mshowa .5 .48786 m .50625 .48786 L s [(3)] .4875 .48786 1 0 Mshowa .5 .60615 m .50625 .60615 L s [(4)] .4875 .60615 1 0 Mshowa .125 Mabswid .5 .03837 m .50375 .03837 L s .5 .06203 m .50375 .06203 L s .5 .08569 m .50375 .08569 L s .5 .10934 m .50375 .10934 L s .5 .15666 m .50375 .15666 L s .5 .18032 m .50375 .18032 L s .5 .20397 m .50375 .20397 L s .5 .22763 m .50375 .22763 L s .5 .27495 m .50375 .27495 L s .5 .2986 m .50375 .2986 L s .5 .32226 m .50375 .32226 L s .5 .34592 m .50375 .34592 L s .5 .39323 m .50375 .39323 L s .5 .41689 m .50375 .41689 L s .5 .44055 m .50375 .44055 L s .5 .46421 m .50375 .46421 L s .5 .51152 m .50375 .51152 L s .5 .53518 m .50375 .53518 L s .5 .55884 m .50375 .55884 L s .5 .58249 m .50375 .58249 L s .25 Mabswid .5 0 m .5 .61803 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath .5 Mabswid .0897 .61803 m .094 .473 L .0995 .32847 L .10458 .22546 L .10924 .15308 L .11181 .12109 L .11425 .09539 L .11651 .07536 L .11898 .0573 L .12121 .04413 L .12331 .03422 L .12461 .0292 L .12602 .0247 L .12719 .02164 L .12848 .01897 L .12988 .01684 L .13064 .016 L .13136 .01541 L .13263 .01481 L .13335 .01472 L .134 .01478 L .13527 .01528 L .13644 .01618 L .13773 .01761 L .1391 .01961 L .1414 .02398 L .14393 .03011 L .15402 .06447 L .16328 .10353 L .17408 .15001 L .18413 .18856 L .19328 .21673 L .1984 .22903 L .20306 .23788 L .20554 .24169 L .20817 .24502 L .21105 .24785 L .21233 .24883 L .21371 .2497 L .215 .25034 L .21618 .25078 L .21737 .25109 L .21849 .25125 L .2198 .25128 L .22101 .25117 L .22171 .25104 L .22234 .25088 L .22376 .25039 L .22497 .24983 L .22609 .24919 L Mistroke .22865 .24733 L .23114 .24498 L .23381 .24191 L .24304 .22728 L .25395 .20346 L .26388 .17754 L .28461 .11855 L .30377 .06873 L .31339 .04851 L .3224 .03346 L .3273 .02703 L .3318 .0223 L .33678 .01838 L .3394 .01688 L .34072 .01627 L .34216 .01573 L .3435 .01532 L .34474 .01504 L .34592 .01485 L .34717 .01474 L .34829 .01472 L .34934 .01476 L .35049 .01487 L .35173 .01508 L .35304 .01539 L .35447 .01583 L .35707 .01693 L .35959 .01834 L .36194 .01996 L .37085 .02861 L .37535 .0344 L .38032 .04182 L .39964 .07894 L .42049 .12791 L .44011 .17454 L .45049 .19685 L .4616 .21747 L .47233 .23333 L .47741 .23922 L .4821 .24366 L .4868 .24713 L .48928 .24854 L .49191 .24972 L .49301 .25012 L .49419 .25048 L .49521 .25074 L .49633 .25097 L .49763 .25115 L .49887 .25126 L .50007 .25129 L Mistroke .50119 .25126 L .50247 .25114 L .50312 .25106 L .50383 .25094 L .50509 .25067 L .50627 .25035 L .50892 .24938 L .51176 .24798 L .51698 .24443 L .52172 .24011 L .53128 .22849 L .54034 .21417 L .57869 .12992 L .59809 .08398 L .60839 .06213 L .61949 .04213 L .62464 .03442 L .63006 .02755 L .63509 .02241 L .63753 .02036 L .63976 .01876 L .64186 .01749 L .64415 .01637 L .64541 .01588 L .64656 .0155 L .64766 .01521 L .64884 .01497 L .65003 .01481 L .65114 .01473 L .65246 .01473 L .65367 .01481 L .65492 .01498 L .65563 .01512 L .65629 .01527 L .65877 .01607 L .66007 .01663 L .66143 .01732 L .66387 .01881 L .66938 .02343 L .67414 .02879 L .67935 .03606 L .69798 .07282 L .71918 .12932 L .73847 .18393 L .74808 .20832 L .75314 .21964 L .75851 .23014 L .76319 .23781 L .76568 .24126 L .76836 .24445 L Mistroke .77081 .24686 L .77305 .24863 L .77413 .24933 L .77531 .24997 L .77635 .25044 L .77745 .25082 L .77809 .25099 L .77878 .25113 L .78 .25127 L .78069 .25129 L .78143 .25126 L .78213 .25118 L .78276 .25106 L .78399 .25073 L .78469 .25047 L .78533 .2502 L .78776 .24876 L .78992 .24699 L .7923 .24448 L .79712 .23759 L .80232 .22745 L .80793 .21344 L .81809 .18065 L .83773 .09916 L .84811 .05619 L .85382 .03654 L .85663 .02866 L .85921 .0227 L .86172 .01836 L .86298 .01676 L .86369 .01606 L .86437 .01552 L .8651 .01509 L .86576 .01483 L .86648 .01472 L .86726 .01478 L .86794 .01501 L .86866 .01542 L .86996 .01665 L .87123 .01847 L .8726 .02117 L .8739 .02446 L .87509 .02816 L .87735 .03705 L .87973 .04932 L .88201 .06405 L .88444 .08338 L .88884 .12863 L .89407 .20238 L .89883 .29152 L Mistroke .90364 .40653 L .90876 .56002 L Mfstroke .90876 .56002 m .91019 .61803 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 177.938}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooooo`00Soooool00ol0003oooooooooo`2>ooooo`00Q_ooool3o`0000Ko oooo00?o0000ooooooooool0S_ooool008Oooooo00?o0000ooooooooool01Oooool00ol0003ooooo ooooo`2>ooooo`009_ooool3o`0003Wooooo1Ol0000Hooooo`Go00000oooool00ol0003ooooooooo o`05ooooo`?o00009_ooool5o`0003Wooooo0ol0000Wooooo`009_ooool01?l0003oooooo`000?l0 000fooooo`?o00000oooool2o`0001oooooo00?o0000ooooooooool01Oooool00ol0003ooooooooo o`0Uooooo`;o00000oooool3o`0003Oooooo00?o0000ooooool000009oooool002Gooooo00Go0000 ooooooooooooooooo`00000eooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool07?oo ool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo02?ooooo0_l00007ooooo`03o`000?oo oooooooo03Cooooo00Go0000ooooooooooooooooo`00000Vooooo`009Oooool01Ol0003ooooooooo oooooooo000003Gooooo00?o0000ooooooooool01oooool00ol0003oooooooooo`0Jooooo`;o0000 1oooool00ol0003oooooooooo`0Sooooo`03o`000?oooooooooo00Oooooo00?o0000ooooooooool0 ooooo`03o`000?oooooooooo02oooooo00?o0000ooooooooool05Oooool00ol0 003oooooooooo`0Aooooo`03o`000?oooooooooo01oooooo000Pooooo`03o`000?oooooooooo017o oooo00?o0000ooooooooool05Oooool00ol0003oooooooooo`0_ooooo`03o`000?oooooooooo00ko oooo00?o0000ooooooooool03Oooool00ol0003oooooooooo`0`ooooo`03o`000?oooooooooo01Co oooo00?o0000ooooooooool04_ooool00ol0003oooooooooo`0Oooooo`008?ooool00ol0003ooooo ooooo`0Aooooo`03o`000?oooooooooo01Gooooo00?o0000ooooooooool0ooooo`03o`000?oooooooooo 01Kooooo00?o0000ooooooooool07_ooool001oooooo00?o0000ooooooooool05Oooool00ol0003o ooooooooo`0>ooooo`03o`000?oooooooooo03Sooooo00?o0000ooooooooool02Oooool00ol0003o ooooooooo`09ooooo`03o`000?oooooooooo03Oooooo00?o0000ooooooooool03_ooool00ol0003o ooooooooo`0Fooooo`03o`000?oooooooooo01kooooo000Oooooo`03o`000?oooooooooo01Kooooo 00?o0000ooooooooool03Oooool00ol0003oooooooooo`0hooooo`03o`000?oooooooooo00Wooooo 00?o0000ooooooooool02?ooool00ol0003oooooooooo`0iooooo`03o`000?oooooooooo00gooooo 00?o0000ooooooooool05_ooool00ol0003oooooooooo`0Nooooo`007oooool00ol0003ooooooooo o`0Fooooo`03o`000?oooooooooo00cooooo00?o0000ooooooooool0>_ooool00ol0003ooooooooo o`08ooooo`03o`000?oooooooooo00Sooooo00?o0000ooooooooool0>_ooool00ol0003ooooooooo o`0"], ImageRangeCache->{{{0, 287}, {176.938, 0}} -> {-1.27356, -1.13405, \ 0.008875, 0.0297735}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[TextData[StyleBox["Here is a helper function that converts a list of \ coefficient to a polynomial", "Text"]], "SmallText"], Cell[BoxData[ \(CoefficientToPoly[L_List, \ z_] := Expand[Fold[#1\ z + #2 &, \ 0, \ Reverse[L]]]\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(CoefficientToPoly[{a0, \ a1, \ a2, \ a3, \ a4, \ a5, \ a6, \ a7, \ a8}, \ z]\)], "Input"], Cell[BoxData[ \(a0 + a1\ z + a2\ z\^2 + a3\ z\^3 + a4\ z\^4 + a5\ z\^5 + a6\ z\^6 + a7\ z\^7 + a8\ z\^8\)], "Output"] }, Open ]], Cell["The list of evaluation points for the 8th degree problem.", "Text"], Cell[BoxData[ \(SquaredPenalty[ coeff_List]\ := \[IndentingNewLine]Module[{evalpts, \ xx\ = \ ChebyshevT[8, 1.2], \ core, \ penalty1, \ penalty2}, \[IndentingNewLine] (*\ The\ 60\ uniformly\ spaced\ evaluation\ points\ between\ [\(-1\), \ 1]\ *) \[IndentingNewLine]evalpts\ = \ N[Table[i, {i, \ \(-1\), 1, 2/59}]]; \[IndentingNewLine]core\ = \ CoefficientToPoly[coeff, \ evalpts]; \[IndentingNewLine] (*\ Compute\ the\ squared\ penalty\ of\ the\ core\ \ *) \[IndentingNewLine]penalty1\ = \ Total[Map[If[Abs[#] > 1, \((1 - #)\)^2, 0] &, core]]; \[IndentingNewLine] (*\ Compute\ the\ squared\ penalty\ at\ the\ boundaries\ \ *) \[IndentingNewLine]penalty2\ = \ Total[\[IndentingNewLine]Map[\ If[#1\ < \ xx, \ \((#1 - xx)\)^2, \ 0] &, \ \[IndentingNewLine]CoefficientToPoly[ coeff, \ {\(-1.2\), \ 1.2}]\[IndentingNewLine]]\[IndentingNewLine]]; \ \[IndentingNewLine]penalty1 + penalty2\[IndentingNewLine]]\)], "Input"], Cell[BoxData[ \(\(ListOfVars = \ {a0, \ a1, \ a2, \ a3, \ a4, \ a5, \ a6, \ a7, \ a8};\)\)], "Input"], Cell[BoxData[ \(\(SquaredPenaltyFunc\ = SquaredPenalty[ListOfVars];\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(SquaredPenalty[Table[Random[], {i, 1, 9}]]\)], "Input"], Cell[BoxData[ \(8933.571483850186`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(SquaredPenalty[CoefficientList[ChebyshevT[8, x], x]]\)], "Input"], Cell[BoxData[ \(0\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(sol1 = \ ListOfVars\ /. \ \ \(NMinimize[SquaredPenaltyFunc, \ ListOfVars, \ MaxIterations \[Rule] 200]\)[\([2]\)]\)], "Input"], Cell[BoxData[ \({1.0159931880440332`, 0.04029287361086938`, \(-30.868925806109452`\), \ \(-0.1300075061412712`\), 156.0158434341129`, 0.1446919137856554`, \(-251.69617784421808`\), \ \(-0.05135380013760603`\), 126.5498605129087`}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Plot[{ChebyshevT[8, x], Evaluate[CoefficientToPoly[sol1, x]]}, {x, \(-1.2\), 1.2}, PlotStyle \[Rule] {{Thickness[0.01], RGBColor[1, 0, 0]}, RGBColor[0, 0, 0]}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.5 0.396825 0.134526 0.117789 [ [.10317 .12203 -6 -9 ] [.10317 .12203 6 0 ] [.30159 .12203 -12 -9 ] [.30159 .12203 12 0 ] [.69841 .12203 -9 -9 ] [.69841 .12203 9 0 ] [.89683 .12203 -3 -9 ] [.89683 .12203 3 0 ] [.4875 .01674 -12 -4.5 ] [.4875 .01674 0 4.5 ] [.4875 .25232 -6 -4.5 ] [.4875 .25232 0 4.5 ] [.4875 .37011 -6 -4.5 ] [.4875 .37011 0 4.5 ] [.4875 .48789 -6 -4.5 ] [.4875 .48789 0 4.5 ] [.4875 .60568 -6 -4.5 ] [.4875 .60568 0 4.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .10317 .13453 m .10317 .14078 L s [(-1)] .10317 .12203 0 1 Mshowa .30159 .13453 m .30159 .14078 L s [(-0.5)] .30159 .12203 0 1 Mshowa .69841 .13453 m .69841 .14078 L s [(0.5)] .69841 .12203 0 1 Mshowa .89683 .13453 m .89683 .14078 L s [(1)] .89683 .12203 0 1 Mshowa .125 Mabswid .14286 .13453 m .14286 .13828 L s .18254 .13453 m .18254 .13828 L s .22222 .13453 m .22222 .13828 L s .2619 .13453 m .2619 .13828 L s .34127 .13453 m .34127 .13828 L s .38095 .13453 m .38095 .13828 L s .42063 .13453 m .42063 .13828 L s .46032 .13453 m .46032 .13828 L s .53968 .13453 m .53968 .13828 L s .57937 .13453 m .57937 .13828 L s .61905 .13453 m .61905 .13828 L s .65873 .13453 m .65873 .13828 L s .7381 .13453 m .7381 .13828 L s .77778 .13453 m .77778 .13828 L s .81746 .13453 m .81746 .13828 L s .85714 .13453 m .85714 .13828 L s .06349 .13453 m .06349 .13828 L s .02381 .13453 m .02381 .13828 L s .93651 .13453 m .93651 .13828 L s .97619 .13453 m .97619 .13828 L s .25 Mabswid 0 .13453 m 1 .13453 L s .5 .01674 m .50625 .01674 L s [(-1)] .4875 .01674 1 0 Mshowa .5 .25232 m .50625 .25232 L s [(1)] .4875 .25232 1 0 Mshowa .5 .37011 m .50625 .37011 L s [(2)] .4875 .37011 1 0 Mshowa .5 .48789 m .50625 .48789 L s [(3)] .4875 .48789 1 0 Mshowa .5 .60568 m .50625 .60568 L s [(4)] .4875 .60568 1 0 Mshowa .125 Mabswid .5 .04029 m .50375 .04029 L s .5 .06385 m .50375 .06385 L s .5 .08741 m .50375 .08741 L s .5 .11097 m .50375 .11097 L s .5 .15808 m .50375 .15808 L s .5 .18164 m .50375 .18164 L s .5 .2052 m .50375 .2052 L s .5 .22876 m .50375 .22876 L s .5 .27587 m .50375 .27587 L s .5 .29943 m .50375 .29943 L s .5 .32299 m .50375 .32299 L s .5 .34655 m .50375 .34655 L s .5 .39366 m .50375 .39366 L s .5 .41722 m .50375 .41722 L s .5 .44078 m .50375 .44078 L s .5 .46434 m .50375 .46434 L s .5 .51145 m .50375 .51145 L s .5 .53501 m .50375 .53501 L s .5 .55857 m .50375 .55857 L s .5 .58213 m .50375 .58213 L s .25 Mabswid .5 0 m .5 .61803 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath 1 0 0 r .01 w .08969 .61803 m .094 .47309 L .0995 .32917 L .10458 .2266 L .10924 .15452 L .11181 .12267 L .11425 .09708 L .11651 .07713 L .11898 .05914 L .12121 .04602 L .12331 .03616 L .12461 .03116 L .12602 .02668 L .12719 .02363 L .12848 .02097 L .12988 .01885 L .13064 .01802 L .13136 .01743 L .13263 .01683 L .13335 .01674 L .134 .0168 L .13527 .0173 L .13644 .0182 L .13773 .01962 L .1391 .02161 L .1414 .02596 L .14393 .03207 L .15402 .06629 L .16328 .10518 L .17408 .15146 L .18413 .18985 L .19328 .2179 L .1984 .23015 L .20306 .23897 L .20554 .24275 L .20817 .24607 L .21105 .24889 L .21233 .24987 L .21371 .25073 L .215 .25137 L .21618 .25181 L .21737 .25212 L .21849 .25228 L .2198 .25231 L .22101 .25219 L .22171 .25206 L .22234 .25191 L .22376 .25142 L .22497 .25087 L .22609 .25023 L Mistroke .22865 .24837 L .23114 .24603 L .23381 .24298 L .24304 .22841 L .25395 .20469 L .26388 .17888 L .28461 .12013 L .30377 .07053 L .31339 .05039 L .3224 .0354 L .3273 .029 L .3318 .02429 L .33678 .02038 L .3394 .01889 L .34072 .01829 L .34216 .01775 L .3435 .01734 L .34474 .01706 L .34592 .01688 L .34717 .01676 L .34829 .01674 L .34934 .01678 L .35049 .01689 L .35173 .0171 L .35304 .01741 L .35447 .01785 L .35707 .01894 L .35959 .02035 L .36194 .02196 L .37085 .03057 L .37535 .03634 L .38032 .04373 L .39964 .08069 L .42049 .12945 L .44011 .17589 L .45049 .1981 L .4616 .21864 L .47233 .23443 L .47741 .2403 L .4821 .24472 L .4868 .24817 L .48928 .24958 L .49191 .25075 L .49301 .25115 L .49419 .25151 L .49521 .25177 L .49633 .25199 L .49763 .25218 L .49887 .25228 L .50007 .25232 L Mistroke .50119 .25228 L .50247 .25217 L .50312 .25208 L .50383 .25196 L .50509 .2517 L .50627 .25138 L .50892 .25041 L .51176 .24902 L .51698 .24548 L .52172 .24119 L .53128 .22961 L .54034 .21535 L .57869 .13145 L .59809 .08571 L .60839 .06395 L .61949 .04404 L .62464 .03636 L .63006 .02952 L .63509 .0244 L .63753 .02236 L .63976 .02077 L .64186 .0195 L .64415 .01839 L .64541 .01789 L .64656 .01752 L .64766 .01723 L .64884 .01699 L .65003 .01683 L .65114 .01675 L .65246 .01675 L .65367 .01683 L .65492 .017 L .65563 .01714 L .65629 .01729 L .65877 .01809 L .66007 .01864 L .66143 .01933 L .66387 .02082 L .66938 .02542 L .67414 .03075 L .67935 .03799 L .69798 .0746 L .71918 .13086 L .73847 .18524 L .74808 .20953 L .75314 .2208 L .75851 .23125 L .76319 .2389 L .76568 .24233 L .76836 .2455 L Mistroke .77081 .24791 L .77305 .24967 L .77413 .25036 L .77531 .251 L .77635 .25147 L .77745 .25185 L .77809 .25202 L .77878 .25216 L .78 .2523 L .78069 .25232 L .78143 .25228 L .78213 .2522 L .78276 .25209 L .78399 .25176 L .78469 .2515 L .78533 .25123 L .78776 .2498 L .78992 .24804 L .7923 .24553 L .79712 .23867 L .80232 .22857 L .80793 .21462 L .81809 .18197 L .83773 .10083 L .84811 .05804 L .85382 .03847 L .85663 .03062 L .85921 .02469 L .86172 .02037 L .86298 .01878 L .86369 .01807 L .86437 .01753 L .8651 .01711 L .86576 .01686 L .86648 .01674 L .86726 .0168 L .86794 .01703 L .86866 .01744 L .86996 .01866 L .87123 .02048 L .8726 .02317 L .8739 .02645 L .87509 .03013 L .87735 .03898 L .87973 .0512 L .88201 .06586 L .88444 .08511 L .88884 .13018 L .89407 .20361 L .89883 .29237 L Mistroke .90364 .4069 L .90876 .55974 L Mfstroke .90876 .55974 m .9102 .61803 L s 0 0 0 r .5 Mabswid .0898 .61803 m .094 .47613 L .0995 .33129 L .10458 .22791 L .10924 .15512 L .11181 .12291 L .11425 .09699 L .11651 .07675 L .11898 .05846 L .12121 .04509 L .12331 .035 L .12461 .02987 L .12602 .02525 L .12719 .0221 L .12848 .01933 L .12988 .01709 L .13064 .01619 L .13136 .01555 L .13263 .01486 L .13335 .01472 L .134 .01473 L .13527 .01516 L .13644 .01598 L .13773 .01734 L .1391 .01926 L .1414 .02352 L .14393 .02954 L .15402 .06365 L .16328 .10277 L .17408 .14966 L .18413 .18889 L .19328 .21792 L .19797 .22979 L .20306 .24018 L .20596 .24493 L .20864 .24854 L .21119 .25131 L .2125 .25247 L .2139 .25352 L .21517 .2543 L .21633 .25487 L .21749 .25532 L .2186 .25562 L .21988 .25582 L .22107 .25587 L .22237 .25577 L .2231 .25564 L .22376 .25549 L .22497 .2551 L .22609 .25463 L Mistroke .22865 .25313 L .23114 .25115 L .23381 .24847 L .23864 .24224 L .24304 .23517 L .26388 .18821 L .28461 .13137 L .30377 .08277 L .31339 .06286 L .3224 .04791 L .3273 .04146 L .3318 .03666 L .33678 .03261 L .3394 .03103 L .34072 .03038 L .34216 .02978 L .3435 .02932 L .34474 .02898 L .34592 .02874 L .34717 .02857 L .34829 .02848 L .34934 .02847 L .35049 .02852 L .35173 .02865 L .35304 .02889 L .35447 .02925 L .35582 .02969 L .35707 .03018 L .36194 .03286 L .36617 .03616 L .37085 .04081 L .38032 .05316 L .39964 .08834 L .42049 .13513 L .44011 .17991 L .45049 .20139 L .4616 .22129 L .47233 .23663 L .47741 .24234 L .4821 .24666 L .4868 .25004 L .48928 .25143 L .49191 .2526 L .49301 .25299 L .49419 .25335 L .49521 .25361 L .49633 .25384 L .49763 .25404 L .49887 .25416 L .50007 .2542 L Mistroke .50119 .25418 L .50247 .25409 L .50312 .25401 L .50383 .25391 L .50509 .25366 L .50627 .25337 L .50892 .25247 L .51176 .25116 L .51698 .24781 L .52172 .24372 L .53128 .23267 L .54034 .21903 L .57869 .13871 L .59809 .09505 L .60839 .07438 L .61949 .05556 L .62464 .04836 L .63006 .04198 L .63469 .03759 L .63735 .03554 L .63976 .03397 L .64204 .03276 L .64452 .03175 L .64588 .03133 L .64714 .03104 L .64834 .03083 L .64961 .0307 L .6507 .03065 L .65187 .03067 L .65297 .03076 L .65398 .0309 L .65515 .03113 L .65644 .03147 L .65877 .03232 L .66134 .0336 L .66411 .03539 L .66913 .03969 L .67401 .04516 L .6785 .05129 L .68872 .06887 L .69949 .09222 L .73754 .1933 L .74759 .21762 L .7571 .23655 L .76235 .24472 L .76512 .24827 L .76806 .25139 L .77053 .25349 L .77183 .2544 L .77324 .25522 L Mistroke .77453 .25582 L .77572 .25623 L .7769 .25653 L .77803 .25668 L .77927 .25672 L .77997 .25668 L .78062 .2566 L .7818 .25635 L .78306 .25594 L .78418 .25544 L .78523 .25486 L .78761 .25314 L .79019 .25063 L .79254 .24776 L .79783 .23923 L .80235 .22968 L .80727 .21698 L .81621 .18821 L .83559 .10825 L .84588 .06454 L .85129 .04455 L .85424 .03519 L .85698 .02778 L .85942 .02243 L .86067 .02021 L .86202 .01823 L .8628 .01731 L .86351 .01661 L .86419 .01608 L .86491 .01566 L .86617 .01532 L .86688 .01535 L .86754 .01553 L .86879 .01629 L .86998 .01754 L .87105 .01913 L .87221 .02138 L .87347 .02446 L .87481 .02853 L .87723 .03802 L .8797 .05087 L .88237 .06866 L .8872 .11261 L .89191 .17207 L .89624 .24359 L .90095 .3426 L .90599 .47674 L Mfstroke .90599 .47674 m .90989 .61803 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 177.938}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooooo`00Soooool00ol0003oooooooooo`2>ooooo`00Q_ooool3o`0000Ko oooo00?o0000ooooooooool0S_ooool008Oooooo00?o0000ooooooooool01Oooool00ol0003ooooo ooooo`2>ooooo`009Oooool01?oo003o0000o`000?l0000hooooo`Goo`006Oooool5o`0000?ooooo 00?o0000ooooooooool01Oooool3o`0002Kooooo1?oo000jooooo`?o00009oooool002Gooooo00Co 0000ool00?oo003o0000=_ooool9ool001oooooo00?o0000ooooooooool01Oooool00ol0003ooooo ooooo`0Tooooo`Woo`00=_ooool00ooo003o0000ool00002o`0002Kooooo000Tooooo`03ool00?l0 003oo`0000;oo`0000?o0000ooooooooool0<_ooool5ool00003oooooooo003oo`0000?oo`007_oo ool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo02?ooooo1Ooo00000oooooooo`00ool0 0002ool003Kooooo00Go0000ool00?oo003oo`00o`00000Vooooo`009?ooool00ooo003o0000oooo o`02ool00003o`000?oooooooooo03;ooooo0_oo0007ooooo`?oo`007?ooool2o`0000Oooooo00?o 0000ooooooooool08_ooool3ool000Kooooo1?oo000cooooo`06ool00?l0003oo`00oooooooo003o 00009_ooool002?ooooo00?oo`00o`000?oo00000_ooool2ool00003o`000?oooooooooo033ooooo 0ooo00000ooooooo0000o`000005o`0000?oo`007?ooool00ol0003oooooooooo`05ooooo`03o`00 0?oooooooooo027ooooo0ooo0003ooooo`?o00000_ooool4ool003;ooooo00Coo`00o`000?oooooo oooo0_oo00000ol0003oooooooooo`0Sooooo`008oooool00ooo003o0000ooooo`02ooooo`;oo`00 00?o0000ooooooooool0;oooool3ool00003ooooool0003o000000Kooooo00Co0000ool00?oo003o o`008oooool00ol0003oooooooooo`0Pooooo`?oo`000_ooool2o`0000?ooooo0_l00002ooooo`;o o`00<_ooool00ol0003oo`00ooooo`02ooooo`03ool00?l0003ooooo02Cooooo000Sooooo`03ool0 0?l0003ooooo00?ooooo00?oo`00o`000?ooool0;oooool3ool00003ooooool0003ooooo00Sooooo 00Co0000ool00?oo003oo`008_ooool00ol0003oooooooooo`0Oooooo`?oo`0000?oooooo`000?l0 00001oooool00ol0003oooooool00002ool0033ooooo00?oo`00o`000?oo00000oooool00ooo003o 0000ooooo`0Tooooo`008oooool00ooo003o0000ooooo`03ooooo`;oo`0000?o0000ooooooooool0 ;Oooool2ool00003ooooool0003ooooo00[ooooo00?o0000ool00?oo00008_ooool2o`00023ooooo 0_oo0002ooooo`03o`000?oooooooooo00Oooooo0_l00002ool0033ooooo00?oo`00o`000?ooool0 0oooool00ooo003o0000ooooo`0Tooooo`008_ooool00ooo003o0000ool00005ooooo`03ool00?l0 003ooooo02gooooo0ooo00000ol0003oooooooooo`0:ooooo`04o`000?oo003oo`00ool0027ooooo 00?o0000ooooooooool07_ooool3ool000;o00003?ooool00ol0003oo`00ool0000_ooooo`03o`00 0?oo003ooooo00?ooooo00?oo`00o`000?ooool09?ooool002;ooooo00?oo`00o`000?ooool01Ooo ool00ooo003o0000ooooo`0]ooooo`;oo`0000?o0000ooooooooool03?ooool00ol0003oo`00ool0 000Qooooo`03o`000?oooooooooo01kooooo0_oo00000ol0003oooooooooo`0ooooo`03ool00?l0003ooooo023ooooo00000ooooooo0000 o`00000Lo`000003ool00?l0003o000000ko000000?oo`00o`000?l000007Ol00002ool002Go0000 00?oo`00o`000?oo0000:_l00002ool002Oo000000?oo`00o`000?l000007?l000000ooo003o0000 o`00000>o`000003ool00?l0003o000001ko00000_ooool000Oooooo00?o0000ooooooooool02Ooo ool00ol0003oooooooooo`08ooooo`03o`000?oo003o000000Sooooo00?o0000ooooooooool01?oo ool00ooo003o0000ooooo`02ooooo`03o`000?oooooooooo00Sooooo00?o0000ooooooooool02?oo ool01?l0003oooooooooooooool2ool00003o`000?oooooooooo00?ooooo00?o0000ooooooooool0 2?ooool00ol0003oooooooooo`08ooooo`03o`000?oooooooooo00Sooooo00?o0000ool00?ooool0 2Oooool00ol0003oooooooooo`08ooooo`03o`000?oooooooooo00Sooooo00?o0000ooooooooool0 1_ooool2ool000;o00002_ooool00ol0003oooooooooo`08ooooo`03o`000?oooooooooo00Sooooo 00?o0000ooooooooool00_ooool00ooo003o0000ool00004ooooo`03o`000?oooooooooo00Sooooo 00?o0000ooooooooool02?ooool01Ol0003ooooooooooooo003o000000Oooooo00?o0000oooooooo ool01Oooool01?oo003o0000ooooool0000:ooooo`03o`000?oooooooooo00Wooooo00?o0000oooo ooooool01_ooool001kooooo00?o0000ool00?l000003oooool00ooo003o0000ooooo`0Looooo`;o o`0000?o0000ooooooooool00oooool00ol0003oooooooooo`0Nooooo`03ool00?l0003oo`0001Co oooo00?o0000ooooooooool04Oooool2ool00003o`000?oooooooooo01oooooo00?o0000oooooooo ool00oooool00ol0003oo`00ooooo`0Kooooo`;oo`0000?o0000ooooooooool03Oooool01?oo003o 0000ooooool0000Oooooo`007oooool00ooo003o0000ooooo`0>ooooo`;oo`0000?o0000oooooooo ool06_ooool2ool00003o`000?oooooooooo02Gooooo00?o0000ool00?ooool04oooool00ol0003o ooooooooo`0@ooooo`;oo`0000?o0000ooooooooool09_ooool00ooo003o0000ooooo`0Kooooo`03 ool00?l0003ooooo00oooooo00?oo`00o`000?ooool08?ooool001oooooo00?oo`00o`000?ooool0 3_ooool2ool00003o`000?oooooooooo01Wooooo0_oo00000ol0003oooooooooo`0Vooooo`03ool0 0?l0003ooooo01?ooooo00?o0000ooooooooool04?ooool2ool00003o`000?oooooooooo02Kooooo 00?oo`00o`000?oo00006oooool00ooo003o0000ooooo`0?ooooo`03ool00?l0003ooooo023ooooo 000Oooooo`03ool00?l0003ooooo00oooooo00?oo`00o`000?ooool06_ooool2ool00003o`000?oo oooooooo02Kooooo00?oo`00o`000?oo00004oooool00ol0003oooooooooo`0?ooooo`;oo`0000?o 0000ooooooooool0:?ooool00ol0003oo`00ooooo`0Jooooo`03ool00?l0003ooooo00oooooo00?o o`00o`000?ooool08?ooool001oooooo00?oo`00o`000?ooool03oooool00ooo003o0000ooooo`0I ooooo`?oo`0000?o0000ooooooooool09oooool00ooo003o0000ooooo`0Booooo`03o`000?oooooo oooo00oooooo0_oo00000ol0003oooooooooo`0Xooooo`03ool00?l0003oo`0001[ooooo00?o0000 ool00?ooool03oooool00ooo003o0000ooooo`0Pooooo`007oooool00ooo003o0000ooooo`0?oooo o`;oo`0000?o0000ooooooooool05oooool2ool00003o`000?oooooooooo02Sooooo00?oo`00o`00 0?oo00004_ooool2o`00013ooooo00?oo`00o`000?ooool0:oooool00ol0003oo`00ooooo`0Hoooo o`03ool00?l0003oo`00013ooooo00?oo`00o`000?ooool08?ooool001oooooo00?oo`00o`000?oo ool03oooool2ool00003o`000?oooooooooo01Oooooo0_oo00000ol0003oooooooooo`0Yooooo`03 o`000?oo003ooooo017ooooo00?o0000ooooooooool03_ooool2ool00003o`000?oooooooooo02[o oooo00?o0000ool00?ooool06?ooool00ooo003o0000ooooo`0@ooooo`;oo`0000?o0000oooooooo ool07_ooool001oooooo00?oo`00o`000?ooool04?ooool00ooo003o0000ooooo`0Gooooo`;oo`00 00?o0000ooooooooool0:_ooool00ooo003o0000ool0000Aooooo`03o`000?oooooooooo00kooooo 00?oo`00o`000?ooool0;?ooool00ooo003o0000ool0000Hooooo`03ool00?l0003ooooo013ooooo 0_oo00000ol0003oooooooooo`0Nooooo`007oooool00ooo003o0000ooooo`0@ooooo`;oo`0000?o 0000ooooooooool05Oooool2ool00003o`000?oooooooooo02_ooooo00?o0000ool00?ooool04?oo ool00ol0003oooooooooo`0=ooooo`;oo`0000?o0000ooooooooool0;?ooool00ol0003oo`00oooo o`0Gooooo`03o`000?oo003ooooo013ooooo0_oo00000ol0003oooooooooo`0Nooooo`007oooool0 0ooo003o0000ooooo`0@ooooo`;oo`0000?o0000ooooooooool05Oooool2ool00003o`000?oooooo oooo02_ooooo00?oo`00o`000?ooool04?ooool00ol0003oooooooooo`0=ooooo`03ool00?l0003o oooo02kooooo00?oo`00o`000?oo00005oooool00ol0003oo`00ooooo`0Aooooo`03ool00?l0003o oooo01oooooo000Nooooo`03ool00?l0003oo`0001;ooooo00?oo`00o`000?ooool05Oooool2ool0 0003o`000?oooooooooo02cooooo00?oo`00o`000?oo00004?ooool00ol0003oooooooooo`0ooooo`;oo`0000?o0000ooooooooool0=?ooool00ooo003o0000ooooo`0; ooooo`03o`000?oooooooooo00Sooooo0_oo00000ol0003oooooooooo`0eooooo`03o`000?oo003o o`00013ooooo00?o0000ool00?ooool05?ooool00ooo003o0000ooooo`0Oooooo`007Oooool00ooo 003o0000ool0000Fooooo`03ool00?l0003ooooo00kooooo0_oo00000ol0003oooooooooo`0eoooo o`03ool00?l0003oo`0000_ooooo00?o0000ooooooooool02?ooool00ooo003o0000ooooo`0goooo o`03o`000?oo003oo`0000oooooo00?oo`00o`000?oo00005Oooool2ool00003o`000?oooooooooo 01gooooo000Mooooo`03ool00?l0003ooooo01Kooooo0_oo00000ol0003oooooooooo`0Oooool00ol0003oo`00 ool0000>ooooo`03o`000?oo003ooooo01Gooooo0_oo00000ol0003oooooooooo`0Mooooo`007Ooo ool00ooo003o0000ooooo`0Gooooo`03ool00?l0003ooooo00cooooo0_oo00000ol0003ooooooooo o`0hooooo`03ool00?l0003ooooo00Wooooo00?o0000ooooooooool01_ooool2ool00003o`000?oo oooooooo03Sooooo00?o0000ool00?oo00003Oooool00ooo003o0000ool0000Fooooo`;oo`0000?o 0000ooooooooool07Oooool001gooooo00?oo`00o`000?ooool05oooool2ool00003o`000?oooooo oooo00[ooooo00?oo`00o`000?ooool0>_ooool00ooo003o0000ool00009ooooo`03o`000?oooooo oooo00Kooooo00?oo`00o`000?ooool0>oooool00ol0003oo`00ool0000oooool00ol0003oo`00ool0000:oooo o`03ool00?l0003oo`0001Oooooo0_oo00000ol0003oooooooooo`0Mooooo`007Oooool00ooo003o 0000ooooo`0Hooooo`03ool00?l0003ooooo00[ooooo0_oo00000ol0003oooooooooo`0kooooo`03 ool00?l0003oo`0000Oooooo00?o0000ooooooooool01?ooool2ool00003o`000?oooooooooo03co oooo00?o0000ool00?oo00002_ooool00ooo003o0000ooooo`0Hooooo`03ool00?l0003ooooo01ko oooo000Mooooo`03ool00?l0003ooooo01Sooooo0_oo00000ol0003oooooooooo`07ooooo`;oo`00 00?o0000ooooooooool0?Oooool00ooo003o0000ool00006ooooo`03o`000?oooooooooo00?ooooo 0_oo00000ol0003oooooooooo`0nooooo`03o`000?oo003oo`0000Sooooo00?oo`00o`000?oo0000 6Oooool00ooo003o0000ooooo`0Nooooo`007Oooool00ooo003o0000ooooo`0Iooooo`03ool00?l0 003ooooo00Oooooo0ooo00000ol0003oooooooooo`0nooooo`03ool00?l0003oo`0000Gooooo00?o 0000ooooooooool00_ooool2ool00003o`000?oooooooooo043ooooo00?o0000ool00?ooool01_oo ool2ool00003o`000?oooooooooo01Sooooo00?oo`00o`000?ooool07_ooool001gooooo00?oo`00 o`000?ooool06Oooool2ool00003o`000?oooooooooo00Cooooo0_oo0002o`00043ooooo0_l00000 0ooo003o0000ool00004ooooo`03o`000?oooooooooo00?oo`0000?o0000ooooooooool0@Oooool0 0ooo003o0000ool00005ooooo`;oo`0000?o0000ool00?ooool06Oooool00ooo003o0000ooooo`0N ooooo`007Oooool00ooo003o0000ooooo`0Jooooo`;oo`0000?o0000ool00?ooool00_ooool2ool0 0003o`000?oooooooooo047ooooo00Go0000oooooooo003o0000ool00003ooooo`04o`000?oooooo o`00ool000;o0000AOooool00ol0003oo`00ool00004ooooo`03ool00?l0003ooooo01_ooooo00?o o`00o`000?ooool07_ooool001gooooo00?oo`00o`000?ooool06oooool2ool00003o`000?oo003o o`0000;oo`0000?o0000ooooooooool0@_ooool01?l0003ooooooooooooo0003o`0000Coo`0000?o 0000ooooooooool0A_ooool00ol0003oo`00ool00004ool00003o`000?oooooooooo01[ooooo00?o o`00o`000?ooool07_ooool001gooooo00?oo`00o`000?ooool07?ooool2ool000Go0000A?ooool0 1?l0003oooooooooooooool2ool000Go000000?oo`00ooooooooool0Aoooool2o`0000;oo`000_l0 000Mooooo`03ool00?l0003ooooo01kooooo000Mooooo`03ool00?l0003ooooo06Oooooo00?o0000 ooooooooool01Oooool00ol0003oooooooooo`1;ooooo`?o00007oooool00ooo003o0000ooooo`0N ooooo`007Oooool00ooo003o0000ooooo`1Vooooo`;o00001oooool00ol0003oooooooooo`1]oooo o`03ool00?l0003ooooo01kooooo000Mooooo`03ool00?l0003ooooo06Oooooo00?o0000oooooooo ool01Oooool00ol0003oooooooooo`1]ooooo`03ool00?l0003ooooo01kooooo000Mooooo`03ool0 0?l0003ooooo06oooooo00?o0000ooooooooool0KOooool00ooo003o0000ooooo`0Nooooo`007Ooo ool00ooo003o0000ooooo`1_ooooo`03o`000?oooooooooo06gooooo00?oo`00o`000?ooool07_oo ool001gooooo00?oo`00o`000?ooool0Koooool2o`0006kooooo00?oo`00o`000?oo00007_ooool0 01cooooo0_oo00000ol0003oooooooooo`1^ooooo`03o`000?oooooooooo06kooooo00?o0000ool0 0?ooool07Oooool001cooooo00?oo`00o`000?ooool0L?ooool00ol0003oooooooooo`1^ooooo`03 o`000?oo003ooooo01gooooo000Looooo`03ool00?l0003ooooo073ooooo00?o0000ooooooooool0 K_ooool00ol0003oo`00ooooo`0Mooooo`007?ooool00ooo003o0000ooooo`1`ooooo`03o`000?oo oooooooo06kooooo00?o0000ool00?ooool07Oooool001cooooo00?oo`00o`000?ooool0L?ooool0 0ol0003oooooooooo`1^ooooo`03o`000?oo003ooooo01gooooo000Looooo`03ool00?l0003ooooo 073ooooo00?o0000ooooooooool0K_ooool00ooo003o0000ooooo`0Mooooo`007?ooool00ooo003o 0000ooooo`1`ooooo`;o0000Koooool00ooo003o0000ooooo`0Mooooo`007?ooool00ooo003o0000 ooooo`1`ooooo`03o`000?oooooooooo06kooooo00?oo`00o`000?ooool07Oooool001cooooo00?o o`00o`000?ooool0L?ooool00ol0003oooooooooo`1^ooooo`03ool00?l0003ooooo01gooooo000L ooooo`03ool00?l0003ooooo073ooooo00?o0000ooooooooool0K_ooool00ooo003o0000ooooo`0M ooooo`007?ooool00ooo003o0000ooooo`1`ooooo`03o`000?oooooooooo06kooooo00?oo`00o`00 0?ooool07Oooool001cooooo00?oo`00o`000?ooool0L?ooool00ol0003oooooooooo`1^ooooo`03 ool00?l0003ooooo01gooooo000Looooo`03ool00?l0003ooooo073ooooo00?o0000ooooooooool0 K_ooool00ooo003o0000ooooo`0Mooooo`007?ooool00ooo003o0000ooooo`1`ooooo`;o0000Kooo ool00ooo003o0000ooooo`0Mooooo`007?ooool00ooo003o0000ooooo`1`ooooo`03o`000?oooooo oooo06kooooo00?oo`00o`000?ooool07Oooool001cooooo00?oo`00o`000?ooool0L?ooool00ol0 003oooooooooo`1^ooooo`03ool00?l0003ooooo01gooooo000Looooo`03ool00?l0003ooooo073o oooo00?o0000ooooooooool0K_ooool00ooo003o0000ooooo`0Mooooo`007?ooool00ooo003o0000 ooooo`1`ooooo`03o`000?oooooooooo06kooooo00?oo`00o`000?ooool07Oooool001cooooo00?o o`00o`000?ooool0L?ooool00ol0003oooooooooo`1^ooooo`03ool00?l0003ooooo01gooooo000L ooooo`03ool00?l0003ooooo073ooooo0_l0001_ooooo`03ool00?l0003ooooo01gooooo000Loooo o`03ool00?l0003ooooo073ooooo00?o0000ooooooooool0K_ooool00ooo003o0000ooooo`0Moooo o`007?ooool00ooo003o0000ooooo`1`ooooo`03o`000?oooooooooo06kooooo00?oo`00o`000?oo 00007Oooool001cooooo00?oo`00o`000?ooool0L?ooool00ol0003oooooooooo`1_ooooo`03o`00 0?oo003ooooo01cooooo000Looooo`03ool00?l0003ooooo06Kooooo1Ol00005ooooo`03o`000?oo oooooooo06oooooo00?o0000ool00?ooool07?ooool001cooooo00?oo`00o`000?ooool0Ioooool0 1?l0003oooooooooool00005ooooo`03o`000?oooooooooo06oooooo00?o0000ool00?ooool07?oo ool001_ooooo0_oo00000ol0003oooooooooo`1Wooooo`03o`000?oooooooooo00Gooooo00?o0000 ooooooooool0Koooool00ol0003oo`00ooooo`0Looooo`006oooool00ooo003o0000ooooo`1Zoooo o`03o`000?oooooooooo00Cooooo0ol0001_ooooo`03o`000?oo003ooooo01cooooo000Kooooo`03 ool00?l0003ooooo06Oooooo00Go0000ooooooooooooooooo`000005ooooo`03o`000?oooooooooo 06oooooo00?o0000ool00?ooool07?ooool001_ooooo00?oo`00o`000?ooool0Ioooool01Ol0003o oooooooooooooooo000000Gooooo00?o0000ooooooooool0Koooool00ooo003o0000ooooo`0Loooo o`006oooool00ooo003o0000ooooo`1Xooooo`?o00001_ooool00ol0003oooooooooo`1_ooooo`03 ool00?l0003ooooo01cooooo000Kooooo`03ool00?l0003ooooo077ooooo00?o0000ooooooooool0 Koooool00ooo003o0000ooooo`0Looooo`006oooool00ooo003o0000ooooo`1aooooo`03o`000?oo oooooooo06oooooo00?oo`00o`000?ooool07?ooool001_ooooo00?oo`00o`000?ooool0LOooool0 0ol0003oooooooooo`1_ooooo`03ool00?l0003ooooo01cooooo000Kooooo`03ool00?l0003ooooo 077ooooo0_l0001`ooooo`03ool00?l0003ooooo01cooooo000Kooooo`03ool00?l0003ooooo077o oooo00?o0000ooooooooool0Koooool00ooo003o0000ooooo`0Looooo`006oooool00ooo003o0000 ooooo`1aooooo`03o`000?oooooooooo06oooooo00?oo`00o`000?ooool07?ooool001_ooooo00?o o`00o`000?ooool0LOooool00ol0003oooooooooo`1_ooooo`03ool00?l0003ooooo01cooooo000K ooooo`03ool00?l0003ooooo077ooooo00?o0000ooooooooool0Koooool00ooo003o0000ooooo`0L ooooo`006oooool00ooo003o0000ooooo`1aooooo`03o`000?oooooooooo06oooooo00?oo`00o`00 0?ooool07?ooool001_ooooo00?oo`00o`000?ooool0LOooool2o`00073ooooo00?oo`00o`000?oo ool07?ooool001_ooooo00?oo`00o`000?ooool0LOooool00ol0003oooooooooo`1_ooooo`03ool0 0?l0003ooooo01cooooo000Kooooo`03ool00?l0003ooooo077ooooo00?o0000ooooooooool0Kooo ool00ooo003o0000ooooo`0Looooo`006oooool00ooo003o0000ooooo`1aooooo`03o`000?oooooo oooo06oooooo00?oo`00o`000?ooool07?ooool001_ooooo00?oo`00o`000?ooool0LOooool00ol0 003oooooooooo`1_ooooo`03ool00?l0003ooooo01cooooo000Kooooo`03ool00?l0003ooooo077o oooo00?o0000ooooooooool0Koooool00ooo003o0000ooooo`0Looooo`006oooool00ooo003o0000 ooooo`1aooooo`03o`000?oooooooooo06oooooo00?oo`00o`000?ooool07?ooool001[ooooo0_oo 00000ol0003oooooooooo`1`ooooo`;o0000L?ooool00ooo003o0000ooooo`0Looooo`006_ooool0 0ooo003o0000ooooo`1booooo`03o`000?oooooooooo06oooooo0_oo00000ol0003oooooooooo`0J ooooo`006_ooool00ooo003o0000ooooo`1booooo`03o`000?oooooooooo06oooooo0_oo00000ol0 003oooooooooo`0Jooooo`006_ooool00ooo003o0000ooooo`1booooo`03o`000?oooooooooo06oo oooo0_oo00000ol0003oooooooooo`0Jooooo`006_ooool00ooo003o0000ooooo`1booooo`03o`00 0?oooooooooo06oooooo0_oo00000ol0003oooooooooo`0Jooooo`006_ooool00ooo003o0000oooo o`1booooo`03o`000?oooooooooo06oooooo0_oo00000ol0003oooooooooo`0Jooooo`006_ooool0 0ooo003o0000ooooo`1booooo`03o`000?oooooooooo06oooooo0_oo00000ol0003oooooooooo`0J ooooo`006_ooool00ooo003o0000ooooo`1booooo`;o0000L?ooool2ool00003o`000?oooooooooo 01[ooooo000Jooooo`03ool00?l0003ooooo07;ooooo00?o0000ooooooooool0Koooool2ool00003 o`000?oooooooooo01[ooooo000Jooooo`03ool00?l0003ooooo07;ooooo00?o0000ooooooooool0 Koooool2ool00003o`000?oooooooooo01[ooooo000Jooooo`03ool00?l0003ooooo07;ooooo00?o 0000ooooooooool0Koooool2ool00003o`000?oooooooooo01[ooooo000Jooooo`03ool00?l0003o oooo06Wooooo0ol00006ooooo`03o`000?oooooooooo06oooooo0_oo00000ol0003oooooooooo`0J ooooo`006_ooool00ooo003o0000ooooo`1Xooooo`05o`000?ooooooooooooooool000001Oooool0 0ol0003oooooooooo`1_ooooo`;oo`0000?o0000ooooooooool06_ooool001[ooooo00?oo`00o`00 0?ooool0K?ooool00ol0003oooooooooo`03ooooo`?o0000Koooool2ool00003o`000?oooooooooo 01[ooooo000Jooooo`03ool00?l0003ooooo06[ooooo0_l00006ooooo`03o`000?oooooooooo073o oooo00?oo`00o`000?ooool06oooool001[ooooo00?oo`00o`000?ooool0K?ooool00ol0003ooooo ooooo`03ooooo`03o`000?oooooooooo073ooooo00?oo`00o`000?ooool06oooool001[ooooo00?o o`00o`000?ooool0J?ooool01Ol0003ooooooooooooooooo000000Gooooo00?o0000ooooooooool0 L?ooool00ooo003o0000ooooo`0Kooooo`006_ooool00ooo003o0000ooooo`1Yooooo`?o00001_oo ool00ol0003oooooooooo`1`ooooo`03ool00?l0003ooooo01_ooooo000Jooooo`03ool00?l0003o oooo07;ooooo00?o0000ooooooooool0L?ooool00ooo003o0000ooooo`0Kooooo`006_ooool00ooo 003o0000ooooo`1booooo`03o`000?oooooooooo073ooooo00?oo`00o`000?ooool06oooool001[o oooo00?oo`00o`000?ooool0L_ooool2o`00077ooooo00?oo`00o`000?ooool06oooool001[ooooo 00?oo`00o`000?ooool0L_ooool00ol0003oooooooooo`1`ooooo`03ool00?l0003ooooo01_ooooo 000Jooooo`03ool00?l0003ooooo07;ooooo00?o0000ooooooooool0L?ooool00ooo003o0000oooo o`0Kooooo`006_ooool00ooo003o0000ooooo`1booooo`03o`000?oooooooooo073ooooo00?oo`00 o`000?ooool06oooool001[ooooo00?oo`00o`000?ooool0L_ooool00ol0003oooooooooo`1`oooo o`03ool00?l0003ooooo01_ooooo000Jooooo`03ool00?l0003ooooo07;ooooo00?o0000oooooooo ool0L?ooool00ooo003o0000ooooo`0Kooooo`006_ooool00ooo003o0000ooooo`1booooo`03o`00 0?oooooooooo073ooooo00?oo`00o`000?ooool06oooool001[ooooo00?oo`00o`000?ooool0L_oo ool2o`00077ooooo00?oo`00o`000?ooool06oooool001[ooooo00?oo`00o`000?ooool0L_ooool0 0ol0003oooooooooo`1`ooooo`03ool00?l0003ooooo01_ooooo000Jooooo`03ool00?l0003ooooo 07;ooooo00?o0000ooooooooool0L?ooool00ooo003o0000ooooo`0Kooooo`006_ooool00ooo003o 0000ooooo`1booooo`03o`000?oooooooooo073ooooo00?oo`00o`000?ooool06oooool001Wooooo 00?oo`00o`000?oo0000Loooool00ol0003oooooooooo`1`ooooo`;oo`0000?o0000ooooooooool0 6Oooool001Wooooo00?oo`00o`000?ooool0Loooool00ol0003oooooooooo`1`ooooo`;oo`0000?o 0000ooooooooool06Oooool001Wooooo00?oo`00o`000?ooool0Loooool00ol0003oooooooooo`1` ooooo`;oo`0000?o0000ooooooooool06Oooool001Wooooo00?oo`00o`000?ooool0Loooool2o`00 077ooooo0_oo00000ol0003oooooooooo`0Iooooo`006Oooool00ooo003o0000ooooo`1cooooo`03 o`000?oooooooooo073ooooo0_oo00000ol0003oooooooooo`0Iooooo`006Oooool00ooo003o0000 ooooo`1cooooo`03o`000?oooooooooo073ooooo0_oo00000ol0003oooooooooo`0Iooooo`006Ooo ool00ooo003o0000ooooo`1cooooo`03o`000?oooooooooo073ooooo0_oo00000ol0003ooooooooo o`0Iooooo`006Oooool00ooo003o0000ooooo`1cooooo`03o`000?oooooooooo073ooooo0_oo0000 0ol0003oooooooooo`0Iooooo`006Oooool00ooo003o0000ooooo`1cooooo`03o`000?oooooooooo 073ooooo0_oo00000ol0003oooooooooo`0Iooooo`006Oooool00ooo003o0000ooooo`1cooooo`;o 0000LOooool2ool00003o`000?oooooooooo01Wooooo000Iooooo`03ool00?l0003ooooo07?ooooo 00?o0000ooooooooool0L?ooool2ool00003o`000?oooooooooo01Wooooo000Iooooo`03ool00?l0 003ooooo07?ooooo00?o0000ooooooooool0L?ooool2ool00003o`000?oooooooooo01Wooooo000I ooooo`03ool00?l0003ooooo07?ooooo00?o0000ooooooooool0L?ooool2ool00003o`000?oooooo oooo01Wooooo000Iooooo`03ool00?l0003ooooo06_ooooo0ol00005ooooo`03o`000?oooooooooo 077ooooo00?oo`00o`000?ooool06_ooool001Wooooo00?oo`00o`000?ooool0K?ooool00ol0003o ooooooooo`04ooooo`03o`000?oooooooooo077ooooo00?oo`00o`000?ooool06_ooool001Wooooo 00?oo`00o`000?ooool0JOooool5o`0000Gooooo00?o0000ooooooooool0LOooool00ooo003o0000 ooooo`0Jooooo`006Oooool00ooo003o0000ooooo`1Yooooo`04o`000?ooooooooooo`0000Kooooo 0ol0001aooooo`03ool00?l0003ooooo01[ooooo000Iooooo`03ool00?l0003ooooo06[ooooo00?o 0000ooooool000001_ooool00ol0003oooooooooo`1aooooo`03ool00?l0003ooooo01[ooooo000I ooooo`03ool00?l0003ooooo06_ooooo0_l00006ooooo`03o`000?oooooooooo077ooooo00?oo`00 o`000?ooool06_ooool001Wooooo00?oo`00o`000?ooool0K?ooool00ol0003oooooooooo`04oooo o`03o`000?oooooooooo077ooooo00?oo`00o`000?ooool06_ooool001Wooooo00?oo`00o`000?oo ool0Loooool00ol0003oooooooooo`1aooooo`03ool00?l0003ooooo01[ooooo0000\ \>"], ImageRangeCache->{{{0, 287}, {176.938, 0}} -> {-1.27019, -1.14212, \ 0.0088515, 0.0298202}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[BoxData[ \(\(sol\ = \ Reap[\[IndentingNewLine]NMinimize[SquaredPenaltyFunc, \ ListOfVars, \ \[IndentingNewLine]StepMonitor \[RuleDelayed] \ Sow[ListOfVars], \[IndentingNewLine]MaxIterations \[Rule] \ 12, \[IndentingNewLine]Method\ \[Rule] \ \ {"\", \ "\" \[Rule] \ 10}\[IndentingNewLine]]\[IndentingNewLine]];\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(\(sol[\([\(-1\)]\)]\)[\([1]\)] // Length\)], "Input"], Cell[BoxData[ \(115\)], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Griewangk's Function", "Section"], Cell[BoxData[ \(Griewangk[coeff_List]\ := \[IndentingNewLine]\ Total[coeff^2/4000]\ - \ Product[\ Cos[\ coeff[\([i + 1]\)]/Sqrt[i + 1]\ ], \ {i, 0, 9}\ ]\ \ + \ 1\)], "Input"], Cell[BoxData[ \(\(GrieVars\ = \ {a0, \ a1, \ a2, \ a3, \ a4, \ a5, \ a6, \ a7, \ a8, \ a9};\)\)], "Input"], Cell[BoxData[ \(\(GriewangkFunc\ = \ Griewangk[GrieVars];\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(Gsol = \ GrieVars\ /. \ \ \(NMinimize[GriewangkFunc, \ GrieVars, \ Method \[Rule] {"\"}]\)[\([2]\)]\)], \ "Input"], Cell[BoxData[ \({\(-4.737451510841616`*^-11\), 1.6630553661712954`*^-9, \(-1.074241117017706`*^-9\), 1.4289324874741152`*^-8, \(-3.0946840490673964`*^-9\), 2.6987479634586498`*^-9, 5.073908947246935`*^-9, 2.8390418371355704`*^-9, 1.0122970842678225`*^-8, 1.0751594983656322`*^-9}\)], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Corana's Parabola: Ingber (1993), Corana et alii (1987).", "Section"], Cell[BoxData[ \(\(\(f6[ coeff_List]\ := \ \[IndentingNewLine]Module[{dj, zj, cz, c1, c2}, \[IndentingNewLine]dj\ = {1. , \ 1000. , \ 10. , \ 100. }; \[IndentingNewLine]zj\ = \ \(Floor[\ Abs[#/0.2]\ + \ 0.49999\ ]\ Sign[#]\ 0.2\ &\)\ /@ \ coeff; \[IndentingNewLine]cz\ = \ \(# < 0.05\ &\)\ /@ \ Abs[coeff\ - \ zj]; \[IndentingNewLine]c1\ = \ 0.15\ \((\ zj\ - \ 0.05\ Sign[zj]\ )\)^2\ \ dj; \[IndentingNewLine]c2\ = \ dj\ coeff\ ^2; \[IndentingNewLine]Total[ Map[If[#[\([1]\)], \ #[\([2]\)], \ #[\([3]\)]] &, \ Thread[{cz, c1, c2}]]]\[IndentingNewLine]];\)\(\[IndentingNewLine]\) \)\)], "Input"], Cell[BoxData[ \(\(CVars\ = \ {x1, x2, x3, x4};\)\)], "Input"], Cell[BoxData[ \(\(CoranaFunc = f6[CVars];\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(NMinimize[CoranaFunc, \ CVars]\)], "Input"], Cell[BoxData[ \({0.45562500000000006`, {x1 \[Rule] \(-0.7719837907591419`\), x2 \[Rule] 0.019037319919359294`, x3 \[Rule] \(-0.23719177313118567`\), x4 \[Rule] 0.1719214612907332`}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(NMinimize[CoranaFunc, \ CVars, Method -> "\"]\)], "Input"], Cell[BoxData[ \({0.`, {x1 \[Rule] \(-0.005084574605747657`\), x2 \[Rule] \(-0.040864978722906856`\), x3 \[Rule] \(-0.020862596229034178`\), x4 \[Rule] \(-0.008088899577172962`\)}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell["Corana's parabola in 2D", "Subsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Plot3D[ Evaluate[CoranaFunc /. \ {\ x2 \[Rule] \ 0. , \ x4 \[Rule] \ 0. }], \ {x1, 0, 1}, {x3, 0, 1}, Mesh \[Rule] False]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .81114 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% SurfaceGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 3.1978e-17 1.04977 -0.0679587 1.04977 [ [.02757 .24618 -6 -8.70276 ] [.02757 .24618 0 .29724 ] [.14598 .19958 -17.886 -9 ] [.14598 .19958 .11404 0 ] [.27013 .15073 -17.1354 -9 ] [.27013 .15073 .86461 0 ] [.40046 .09948 -16.3848 -9 ] [.40046 .09948 1.61518 0 ] [.53743 .04564 -15.6342 -9 ] [.53743 .04564 2.36575 0 ] [.68156 -0.01098 -4.96123 -9 ] [.68156 -0.01098 1.03877 0 ] [.70096 -0.00478 0 -6.26206 ] [.70096 -0.00478 6 2.73794 ] [.76745 .09703 0 -6.16187 ] [.76745 .09703 18 2.83813 ] [.82812 .18993 0 -6.07246 ] [.82812 .18993 18 2.92754 ] [.88369 .27502 0 -5.99218 ] [.88369 .27502 18 3.00782 ] [.93478 .35327 0 -5.9197 ] [.93478 .35327 18 3.0803 ] [.98191 .42546 0 -5.85393 ] [.98191 .42546 6 3.14607 ] [.02411 .26511 -6 -2.74232 ] [.02411 .26511 0 6.25768 ] [.01683 .31074 -6 -2.78089 ] [.01683 .31074 0 6.21911 ] [.00933 .35774 -6 -2.82074 ] [.00933 .35774 0 6.17926 ] [.0016 .40618 -6 -2.86193 ] [.0016 .40618 0 6.13807 ] [-0.00636 .45612 -6 -2.90453 ] [-0.00636 .45612 0 6.09547 ] [ 0 0 0 0 ] [ 1 .81114 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .03716 .25514 m .68874 0 L s .03716 .25514 m .04196 .25962 L s [(0)] .02757 .24618 1 .93395 Mshowa .1552 .20892 m .15981 .21359 L s [(0.2)] .14598 .19958 .98733 1 Mshowa .27893 .16047 m .28333 .16533 L s [(0.4)] .27013 .15073 .90393 1 Mshowa .40878 .10962 m .41294 .11469 L s [(0.6)] .40046 .09948 .82054 1 Mshowa .54521 .0562 m .54911 .06148 L s [(0.8)] .53743 .04564 .73714 1 Mshowa .68874 0 m .69233 .00549 L s [(1)] .68156 -0.01098 .65374 1 Mshowa .125 Mabswid .06616 .24378 m .06901 .2465 L s .09549 .2323 m .09832 .23504 L s .12517 .22067 m .12797 .22345 L s .18558 .19702 m .18832 .19985 L s .21633 .18498 m .21903 .18784 L s .24744 .1728 m .25012 .17569 L s .3108 .14799 m .31341 .15094 L s .34306 .13535 m .34564 .13834 L s .37572 .12257 m .37826 .12558 L s .44225 .09652 m .44471 .09959 L s .47614 .08324 m .47856 .08635 L s .51046 .06981 m .51284 .07294 L s .58041 .04242 m .5827 .04562 L s .61605 .02846 m .6183 .03169 L s .65216 .01432 m .65436 .01759 L s .25 Mabswid .68874 0 m .96935 .42924 L s .68874 0 m .68263 .00239 L s [(0)] .70096 -0.00478 -1 .39157 Mshowa .75514 .10158 m .74899 .10385 L s [(0.2)] .76745 .09703 -1 .3693 Mshowa .81573 .19425 m .80953 .19642 L s [(0.4)] .82812 .18993 -1 .34944 Mshowa .87123 .27915 m .865 .28122 L s [(0.6)] .88369 .27502 -1 .3316 Mshowa .92227 .35722 m .91601 .35919 L s [(0.8)] .93478 .35327 -1 .31549 Mshowa .96935 .42924 m .96306 .43113 L s [(1)] .98191 .42546 -1 .30087 Mshowa .125 Mabswid .70593 .0263 m .70226 .02771 L s .72272 .05198 m .71904 .05338 L s .73912 .07706 m .73543 .07845 L s .7708 .12553 m .7671 .12688 L s .78611 .14895 m .78241 .15028 L s .80108 .17185 m .79737 .17317 L s .83006 .21617 m .82633 .21745 L s .84407 .23761 m .84035 .23888 L s .8578 .2586 m .85407 .25986 L s .88439 .29928 m .88065 .3005 L s .89727 .31899 m .89353 .3202 L s .9099 .3383 m .90615 .3395 L s .93439 .37576 m .93063 .37693 L s .94627 .39394 m .94251 .3951 L s .95792 .41176 m .95416 .41291 L s .25 Mabswid .03716 .25514 m 0 .48963 L s .03634 .26033 m .04245 .25795 L s [(0)] .02411 .26511 1 -0.3906 Mshowa .02909 .30606 m .03522 .30371 L s [(2)] .01683 .31074 1 -0.38202 Mshowa .02163 .35315 m .02777 .35086 L s [(4)] .00933 .35774 1 -0.37317 Mshowa .01394 .40169 m .0201 .39945 L s [(6)] .0016 .40618 1 -0.36402 Mshowa .006 .45174 m .01219 .44954 L s [(8)] -0.00636 .45612 1 -0.35455 Mshowa .125 Mabswid .03455 .27164 m .03821 .27021 L s .03274 .28303 m .03641 .28161 L s .03092 .2945 m .0346 .29309 L s .02725 .3177 m .03093 .3163 L s .02539 .32943 m .02907 .32804 L s .02351 .34125 m .0272 .33986 L s .01973 .36515 m .02342 .36378 L s .01781 .37724 m .0215 .37588 L s .01588 .38942 m .01958 .38806 L s .01198 .41406 m .01568 .41272 L s .01 .42652 m .01371 .42519 L s .00801 .43908 m .01172 .43776 L s .00398 .46449 m .0077 .46318 L s .00195 .47735 m .00566 .47605 L s .25 Mabswid .03716 .25514 m 0 .48963 L s 0 .48963 m .39787 .81114 L s .39787 .81114 m .40529 .59895 L s .40529 .59895 m .03716 .25514 L s .68874 0 m .96935 .42924 L s .96935 .42924 m 1 .6535 L s 1 .6535 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .03716 .25514 m 0 .48963 L s 0 .48963 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .68874 0 m .03716 .25514 L s .40529 .59895 m .96935 .42924 L s .96935 .42924 m 1 .6535 L s 1 .6535 m .39787 .81114 L s .39787 .81114 m .40529 .59895 L s 0 0 m 1 0 L 1 .81114 L 0 .81114 L closepath clip newpath .661 .744 .911 r .39126 .62012 .40414 .63189 .4257 .62553 .41293 .61366 Mtetra .659 .744 .912 r .41293 .61366 .4257 .62553 .44742 .61927 .43477 .60731 Mtetra .658 .743 .913 r .43477 .60731 .44742 .61927 .46933 .613 .45678 .60094 Mtetra .666 .745 .91 r .45678 .60094 .46933 .613 .49142 .60623 .47899 .59407 Mtetra .661 .744 .911 r .47899 .59407 .49142 .60623 .51369 .59966 .50137 .5874 Mtetra .639 .738 .92 r .50137 .5874 .51369 .59966 .53614 .5943 .52394 .58195 Mtetra .653 .742 .915 r .52394 .58195 .53614 .5943 .55878 .58812 .54671 .57566 Mtetra .652 .742 .915 r .54671 .57566 .55878 .58812 .58162 .58195 .56967 .56939 Mtetra .692 .753 .898 r .56967 .56939 .58162 .58195 .6046 .57319 .59278 .56052 Mtetra .661 .744 .911 r .59278 .56052 .6046 .57319 .6278 .56635 .61611 .55357 Mtetra .583 .717 .935 r .61611 .55357 .6278 .56635 .65135 .56358 .63978 .55071 Mtetra .647 .74 .917 r .63978 .55071 .65135 .56358 .67501 .55749 .66358 .54452 Mtetra .645 .739 .918 r .66358 .54452 .67501 .55749 .69889 .55143 .68759 .53835 Mtetra .734 .766 .879 r .68759 .53835 .69889 .55143 .7226 .539 .71146 .52579 Mtetra .661 .744 .912 r .71146 .52579 .7226 .539 .7468 .53187 .7358 .51854 Mtetra .483 .668 .945 r .7358 .51854 .7468 .53187 .77185 .53337 .76097 .51997 Mtetra .64 .738 .919 r .76097 .51997 .77185 .53337 .79663 .52739 .7859 .51388 Mtetra .639 .737 .92 r .7859 .51388 .79663 .52739 .82166 .52143 .81108 .5078 Mtetra .785 .783 .851 r .81108 .5078 .82166 .52143 .84578 .50358 .83538 .4898 Mtetra .661 .744 .912 r .83538 .4898 .84578 .50358 .87104 .49614 .8608 .48224 Mtetra .334 .579 .931 r .8608 .48224 .87104 .49614 .89821 .50367 .8881 .4897 Mtetra .634 .735 .921 r .8881 .4897 .89821 .50367 .92425 .49779 .9143 .4837 Mtetra .826 .798 .825 r .9143 .4837 .92425 .49779 .94831 .47456 .93857 .46028 Mtetra .661 .744 .912 r .93857 .46028 .94831 .47456 .97449 .46685 .96491 .45245 Mtetra .549 .311 .507 r .37153 .76404 .39126 .62012 .41293 .61366 .39427 .75786 Mtetra .55 .311 .507 r .39427 .75786 .41293 .61366 .43477 .60731 .4172 .75179 Mtetra .55 .312 .507 r .4172 .75179 .43477 .60731 .45678 .60094 .44033 .7457 Mtetra .549 .311 .507 r .44033 .7457 .45678 .60094 .47899 .59407 .46367 .73907 Mtetra .46367 .73907 .47899 .59407 .50137 .5874 .4872 .73267 Mtetra .552 .314 .508 r .4872 .73267 .50137 .5874 .52394 .58195 .51094 .72761 Mtetra .55 .312 .507 r .51094 .72761 .52394 .58195 .54671 .57566 .5349 .72163 Mtetra .551 .312 .507 r .5349 .72163 .54671 .57566 .56967 .56939 .55907 .71568 Mtetra .545 .307 .506 r .55907 .71568 .56967 .56939 .59278 .56052 .58342 .70687 Mtetra .549 .311 .507 r .58342 .70687 .59278 .56052 .61611 .55357 .60801 .70018 Mtetra .558 .319 .509 r .60801 .70018 .61611 .55357 .63978 .55071 .63296 .698 Mtetra .551 .313 .507 r .63296 .698 .63978 .55071 .66358 .54452 .65805 .69217 Mtetra .551 .313 .508 r .65805 .69217 .66358 .54452 .68759 .53835 .68339 .68636 Mtetra .537 .302 .505 r .68339 .68636 .68759 .53835 .71146 .52579 .70861 .6735 Mtetra .549 .311 .507 r .70861 .6735 .71146 .52579 .7358 .51854 .73432 .66651 Mtetra .567 .326 .509 r .73432 .66651 .7358 .51854 .76097 .51997 .76092 .6691 Mtetra .552 .314 .508 r .76092 .6691 .76097 .51997 .7859 .51388 .78729 .6634 Mtetra .78729 .6634 .7859 .51388 .81108 .5078 .81393 .65773 Mtetra .527 .294 .505 r .81393 .65773 .81108 .5078 .83538 .4898 .83964 .63886 Mtetra .549 .311 .507 r .83964 .63886 .83538 .4898 .8608 .48224 .86656 .63155 Mtetra .579 .334 .509 r .86656 .63155 .8608 .48224 .8881 .4897 .89553 .64088 Mtetra .553 .314 .508 r .89553 .64088 .8881 .4897 .9143 .4837 .92331 .63532 Mtetra .517 .288 .505 r .92331 .63532 .9143 .4837 .93857 .46028 .94901 .61046 Mtetra .549 .311 .507 r .94901 .61046 .93857 .46028 .96491 .45245 .97697 .60288 Mtetra .637 .582 .776 r .35841 .73533 .37153 .76404 .39427 .75786 .38116 .72901 Mtetra .636 .581 .776 r .38116 .72901 .39427 .75786 .4172 .75179 .40411 .72279 Mtetra .40411 .72279 .4172 .75179 .44033 .7457 .42725 .71656 Mtetra .64 .583 .775 r .42725 .71656 .44033 .7457 .46367 .73907 .45061 .70978 Mtetra .637 .582 .776 r .45061 .70978 .46367 .73907 .4872 .73267 .47416 .70324 Mtetra .625 .576 .779 r .47416 .70324 .4872 .73267 .51094 .72761 .4979 .69802 Mtetra .633 .58 .777 r .4979 .69802 .51094 .72761 .5349 .72163 .52187 .69189 Mtetra .632 .579 .777 r .52187 .69189 .5349 .72163 .55907 .71568 .54607 .68579 Mtetra .655 .591 .771 r .54607 .68579 .55907 .71568 .58342 .70687 .57044 .67683 Mtetra .637 .582 .776 r .57044 .67683 .58342 .70687 .60801 .70018 .59505 .66999 Mtetra .596 .56 .785 r .59505 .66999 .60801 .70018 .63296 .698 .62 .66763 Mtetra .629 .578 .778 r .62 .66763 .63296 .698 .65805 .69217 .64512 .66163 Mtetra .64512 .66163 .65805 .69217 .68339 .68636 .67048 .65566 Mtetra .682 .605 .763 r .67048 .65566 .68339 .68636 .70861 .6735 .69574 .64267 Mtetra .637 .582 .776 r .69574 .64267 .70861 .6735 .73432 .66651 .72148 .63552 Mtetra .547 .533 .791 r .72148 .63552 .73432 .66651 .76092 .6691 .74807 .63789 Mtetra .626 .576 .779 r .74807 .63789 .76092 .6691 .78729 .6634 .77446 .63201 Mtetra .625 .576 .779 r .77446 .63201 .78729 .6634 .81393 .65773 .80112 .62617 Mtetra .716 .622 .752 r .80112 .62617 .81393 .65773 .83964 .63886 .8269 .6072 Mtetra .637 .582 .776 r .8269 .6072 .83964 .63886 .86656 .63155 .85385 .59972 Mtetra .475 .491 .794 r .85385 .59972 .86656 .63155 .89553 .64088 .88279 .60877 Mtetra .622 .574 .779 r .88279 .60877 .89553 .64088 .92331 .63532 .9106 .60302 Mtetra .746 .638 .74 r .9106 .60302 .92331 .63532 .94901 .61046 .93639 .57809 Mtetra .637 .582 .776 r .93639 .57809 .94901 .61046 .97697 .60288 .96438 .57033 Mtetra .585 .403 .602 r .35201 .57288 .35841 .73533 .38116 .72901 .37394 .56611 Mtetra .584 .403 .602 r .37394 .56611 .38116 .72901 .40411 .72279 .39605 .55943 Mtetra .39605 .55943 .40411 .72279 .42725 .71656 .41834 .55273 Mtetra .585 .404 .602 r .41834 .55273 .42725 .71656 .45061 .70978 .44083 .54553 Mtetra .585 .403 .602 r .44083 .54553 .45061 .70978 .47416 .70324 .4635 .53853 Mtetra .582 .401 .602 r .4635 .53853 .47416 .70324 .4979 .69802 .48634 .53274 Mtetra .584 .403 .602 r .48634 .53274 .4979 .69802 .52187 .69189 .5094 .52611 Mtetra .5094 .52611 .52187 .69189 .54607 .68579 .53266 .5195 Mtetra .589 .406 .602 r .53266 .5195 .54607 .68579 .57044 .67683 .55611 .51026 Mtetra .585 .403 .602 r .55611 .51026 .57044 .67683 .59505 .66999 .57976 .50296 Mtetra .577 .398 .602 r .57976 .50296 .59505 .66999 .62 .66763 .60371 .49976 Mtetra .583 .402 .602 r .60371 .49976 .62 .66763 .64512 .66163 .62783 .49321 Mtetra .62783 .49321 .64512 .66163 .67048 .65566 .65217 .48668 Mtetra .594 .41 .602 r .65217 .48668 .67048 .65566 .69574 .64267 .67644 .47371 Mtetra .585 .403 .602 r .67644 .47371 .69574 .64267 .72148 .63552 .70114 .46609 Mtetra .569 .392 .602 r .70114 .46609 .72148 .63552 .74807 .63789 .72659 .46717 Mtetra .582 .402 .602 r .72659 .46717 .74807 .63789 .77446 .63201 .75188 .4607 Mtetra .75188 .4607 .77446 .63201 .80112 .62617 .77742 .45424 Mtetra .603 .416 .601 r .77742 .45424 .80112 .62617 .8269 .6072 .80219 .43578 Mtetra .585 .403 .602 r .80219 .43578 .8269 .6072 .85385 .59972 .82801 .42782 Mtetra .558 .385 .603 r .82801 .42782 .85385 .59972 .88279 .60877 .8556 .43495 Mtetra .582 .401 .602 r .8556 .43495 .88279 .60877 .9106 .60302 .8822 .42854 Mtetra .61 .421 .6 r .8822 .42854 .9106 .60302 .93639 .57809 .907 .40463 Mtetra .585 .403 .602 r .907 .40463 .93639 .57809 .96438 .57033 .93377 .39638 Mtetra .662 .743 .91 r .33838 .56034 .35201 .57288 .37394 .56611 .36042 .55346 Mtetra .66 .742 .911 r .36042 .55346 .37394 .56611 .39605 .55943 .38264 .54668 Mtetra .659 .742 .911 r .38264 .54668 .39605 .55943 .41834 .55273 .40505 .53987 Mtetra .667 .744 .908 r .40505 .53987 .41834 .55273 .44083 .54553 .42766 .53256 Mtetra .662 .743 .91 r .42766 .53256 .44083 .54553 .4635 .53853 .45045 .52545 Mtetra .64 .737 .919 r .45045 .52545 .4635 .53853 .48634 .53274 .47341 .51956 Mtetra .654 .741 .913 r .47341 .51956 .48634 .53274 .5094 .52611 .4966 .51282 Mtetra .653 .74 .914 r .4966 .51282 .5094 .52611 .53266 .5195 .51999 .50609 Mtetra .692 .752 .897 r .51999 .50609 .53266 .5195 .55611 .51026 .54357 .49673 Mtetra .662 .743 .91 r .54357 .49673 .55611 .51026 .57976 .50296 .56736 .48931 Mtetra .585 .716 .933 r .56736 .48931 .57976 .50296 .60371 .49976 .59143 .48601 Mtetra .648 .739 .916 r .59143 .48601 .60371 .49976 .62783 .49321 .61568 .47935 Mtetra .646 .738 .916 r .61568 .47935 .62783 .49321 .65217 .48668 .64016 .4727 Mtetra .734 .765 .878 r .64016 .4727 .65217 .48668 .67644 .47371 .6646 .45959 Mtetra .662 .743 .91 r .6646 .45959 .67644 .47371 .70114 .46609 .68945 .45184 Mtetra .486 .668 .944 r .68945 .45184 .70114 .46609 .72659 .46717 .71502 .45283 Mtetra .641 .736 .918 r .71502 .45283 .72659 .46717 .75188 .4607 .74047 .44623 Mtetra .64 .736 .918 r .74047 .44623 .75188 .4607 .77742 .45424 .76616 .43965 Mtetra .784 .782 .851 r .76616 .43965 .77742 .45424 .80219 .43578 .79113 .42103 Mtetra .662 .743 .91 r .79113 .42103 .80219 .43578 .82801 .42782 .81711 .41293 Mtetra .339 .58 .931 r .81711 .41293 .82801 .42782 .8556 .43495 .84483 .41998 Mtetra .635 .734 .92 r .84483 .41998 .8556 .43495 .8822 .42854 .8716 .41344 Mtetra .825 .797 .825 r .8716 .41344 .8822 .42854 .907 .40463 .89661 .38934 Mtetra .662 .743 .91 r .89661 .38934 .907 .40463 .93377 .39638 .92356 .38095 Mtetra .521 .259 .458 r .31829 .65287 .33838 .56034 .36042 .55346 .34111 .64612 Mtetra .522 .259 .458 r .34111 .64612 .36042 .55346 .38264 .54668 .36412 .63948 Mtetra .36412 .63948 .38264 .54668 .40505 .53987 .38734 .63281 Mtetra .52 .258 .457 r .38734 .63281 .40505 .53987 .42766 .53256 .41077 .62561 Mtetra .521 .259 .458 r .41077 .62561 .42766 .53256 .45045 .52545 .4344 .61862 Mtetra .526 .263 .459 r .4344 .61862 .45045 .52545 .47341 .51956 .45821 .61294 Mtetra .523 .26 .458 r .45821 .61294 .47341 .51956 .4966 .51282 .48226 .60635 Mtetra .523 .261 .458 r .48226 .60635 .4966 .51282 .51999 .50609 .50653 .59979 Mtetra .513 .252 .456 r .50653 .59979 .51999 .50609 .54357 .49673 .53103 .59041 Mtetra .521 .259 .458 r .53103 .59041 .54357 .49673 .56736 .48931 .55573 .5831 Mtetra .537 .272 .461 r .55573 .5831 .56736 .48931 .59143 .48601 .58073 .58021 Mtetra .525 .262 .459 r .58073 .58021 .59143 .48601 .61568 .47935 .60593 .57372 Mtetra .60593 .57372 .61568 .47935 .64016 .4727 .63138 .56726 Mtetra .5 .241 .454 r .63138 .56726 .64016 .4727 .6646 .45959 .65681 .55387 Mtetra .521 .259 .458 r .65681 .55387 .6646 .45959 .68945 .45184 .68266 .54623 Mtetra .552 .284 .463 r .68266 .54623 .68945 .45184 .71502 .45283 .70927 .54796 Mtetra .526 .263 .459 r .70927 .54796 .71502 .45283 .74047 .44623 .73576 .54157 Mtetra .73576 .54157 .74047 .44623 .76616 .43965 .76253 .53519 Mtetra .482 .228 .452 r .76253 .53519 .76616 .43965 .79113 .42103 .78855 .5159 Mtetra .521 .259 .458 r .78855 .5159 .79113 .42103 .81711 .41293 .81564 .5079 Mtetra .57 .298 .463 r .81564 .5079 .81711 .41293 .84483 .41998 .84454 .51617 Mtetra .527 .264 .459 r .84454 .51617 .84483 .41998 .8716 .41344 .87247 .50986 Mtetra .465 .216 .452 r .87247 .50986 .8716 .41344 .89661 .38934 .89857 .48467 Mtetra .521 .259 .458 r .89857 .48467 .89661 .38934 .92356 .38095 .92671 .47637 Mtetra .642 .603 .795 r .30463 .62657 .31829 .65287 .34111 .64612 .32748 .61968 Mtetra .64 .603 .796 r .32748 .61968 .34111 .64612 .36412 .63948 .35053 .61289 Mtetra .64 .602 .796 r .35053 .61289 .36412 .63948 .38734 .63281 .37377 .60608 Mtetra .645 .605 .794 r .37377 .60608 .38734 .63281 .41077 .62561 .39724 .59873 Mtetra .642 .603 .795 r .39724 .59873 .41077 .62561 .4344 .61862 .42091 .5916 Mtetra .628 .597 .799 r .42091 .5916 .4344 .61862 .45821 .61294 .44475 .58576 Mtetra .637 .601 .797 r .44475 .58576 .45821 .61294 .48226 .60635 .46884 .57903 Mtetra .636 .601 .797 r .46884 .57903 .48226 .60635 .50653 .59979 .49315 .57231 Mtetra .661 .613 .789 r .49315 .57231 .50653 .59979 .53103 .59041 .51769 .56278 Mtetra .642 .603 .795 r .51769 .56278 .53103 .59041 .55573 .5831 .54244 .55532 Mtetra .596 .581 .806 r .54244 .55532 .55573 .5831 .58073 .58021 .56746 .55226 Mtetra .633 .599 .798 r .56746 .55226 .58073 .58021 .60593 .57372 .59271 .54561 Mtetra .632 .599 .798 r .59271 .54561 .60593 .57372 .63138 .56726 .6182 .53897 Mtetra .69 .627 .78 r .6182 .53897 .63138 .56726 .65681 .55387 .6437 .52545 Mtetra .642 .603 .795 r .6437 .52545 .65681 .55387 .68266 .54623 .6696 .51765 Mtetra .541 .55 .814 r .6696 .51765 .68266 .54623 .70927 .54796 .69622 .51917 Mtetra .629 .597 .799 r .69622 .51917 .70927 .54796 .73576 .54157 .72276 .51261 Mtetra .628 .597 .799 r .72276 .51261 .73576 .54157 .76253 .53519 .74958 .50605 Mtetra .727 .645 .767 r .74958 .50605 .76253 .53519 .78855 .5159 .7757 .48664 Mtetra .642 .603 .795 r .7757 .48664 .78855 .5159 .81564 .5079 .80284 .47847 Mtetra .46 .503 .816 r .80284 .47847 .81564 .5079 .84454 .51617 .83175 .48649 Mtetra .625 .595 .8 r .83175 .48649 .84454 .51617 .87247 .50986 .85973 .47999 Mtetra .759 .661 .754 r .85973 .47999 .87247 .50986 .89857 .48467 .88596 .45471 Mtetra .642 .603 .795 r .88596 .45471 .89857 .48467 .92671 .47637 .91416 .44622 Mtetra .643 .609 .801 r .29081 .60084 .30463 .62657 .32748 .61968 .3137 .59381 Mtetra .641 .609 .801 r .3137 .59381 .32748 .61968 .35053 .61289 .33678 .58688 Mtetra .641 .608 .801 r .33678 .58688 .35053 .61289 .37377 .60608 .36006 .57992 Mtetra .646 .611 .8 r .36006 .57992 .37377 .60608 .39724 .59873 .38358 .57243 Mtetra .643 .609 .801 r .38358 .57243 .39724 .59873 .42091 .5916 .40728 .56515 Mtetra .629 .603 .805 r .40728 .56515 .42091 .5916 .44475 .58576 .43116 .55916 Mtetra .638 .607 .802 r .43116 .55916 .44475 .58576 .46884 .57903 .45529 .55227 Mtetra .637 .606 .802 r .45529 .55227 .46884 .57903 .49315 .57231 .47964 .5454 Mtetra .663 .619 .794 r .47964 .5454 .49315 .57231 .51769 .56278 .50424 .53572 Mtetra .643 .609 .801 r .50424 .53572 .51769 .56278 .54244 .55532 .52903 .52811 Mtetra .596 .586 .812 r .52903 .52811 .54244 .55532 .56746 .55226 .55409 .52487 Mtetra .634 .605 .803 r .55409 .52487 .56746 .55226 .59271 .54561 .57938 .51806 Mtetra .633 .605 .803 r .57938 .51806 .59271 .54561 .6182 .53897 .60493 .51126 Mtetra .692 .633 .785 r .60493 .51126 .6182 .53897 .6437 .52545 .63051 .4976 Mtetra .643 .609 .801 r .63051 .4976 .6437 .52545 .6696 .51765 .65646 .48963 Mtetra .539 .555 .82 r .65646 .48963 .6696 .51765 .69622 .51917 .6831 .49095 Mtetra .63 .603 .804 r .6831 .49095 .69622 .51917 .72276 .51261 .7097 .48421 Mtetra .629 .603 .804 r .7097 .48421 .72276 .51261 .74958 .50605 .73657 .47748 Mtetra .729 .651 .771 r .73657 .47748 .74958 .50605 .7757 .48664 .7628 .45794 Mtetra .643 .609 .801 r .7628 .45794 .7757 .48664 .80284 .47847 .79 .4496 Mtetra .455 .506 .822 r .79 .4496 .80284 .47847 .83175 .48649 .81892 .45737 Mtetra .626 .601 .805 r .81892 .45737 .83175 .48649 .85973 .47999 .84696 .45069 Mtetra .762 .667 .757 r .84696 .45069 .85973 .47999 .88596 .45471 .87331 .4253 Mtetra .643 .609 .801 r .87331 .4253 .88596 .45471 .91416 .44622 .90159 .41663 Mtetra .588 .422 .624 r .28235 .49978 .29081 .60084 .3137 .59381 .30479 .49245 Mtetra .587 .421 .624 r .30479 .49245 .3137 .59381 .33678 .58688 .32742 .4852 Mtetra .32742 .4852 .33678 .58688 .36006 .57992 .35024 .47793 Mtetra .588 .422 .624 r .35024 .47793 .36006 .57992 .38358 .57243 .37328 .47014 Mtetra .37328 .47014 .38358 .57243 .40728 .56515 .3965 .46255 Mtetra .583 .418 .624 r .3965 .46255 .40728 .56515 .43116 .55916 .41989 .45618 Mtetra .586 .42 .624 r .41989 .45618 .43116 .55916 .45529 .55227 .44352 .44895 Mtetra .44352 .44895 .45529 .55227 .47964 .5454 .46737 .44174 Mtetra .594 .426 .624 r .46737 .44174 .47964 .5454 .50424 .53572 .49146 .43185 Mtetra .588 .422 .624 r .49146 .43185 .50424 .53572 .52903 .52811 .51573 .42392 Mtetra .574 .412 .624 r .51573 .42392 .52903 .52811 .55409 .52487 .54024 .42014 Mtetra .585 .419 .624 r .54024 .42014 .55409 .52487 .57938 .51806 .56498 .41296 Mtetra .584 .419 .624 r .56498 .41296 .57938 .51806 .60493 .51126 .58997 .40579 Mtetra .604 .433 .623 r .58997 .40579 .60493 .51126 .63051 .4976 .61502 .39209 Mtetra .588 .421 .624 r .61502 .39209 .63051 .4976 .65646 .48963 .64041 .38379 Mtetra .56 .402 .624 r .64041 .38379 .65646 .48963 .6831 .49095 .66642 .38431 Mtetra .584 .419 .624 r .66642 .38431 .6831 .49095 .7097 .48421 .69241 .37717 Mtetra .583 .418 .624 r .69241 .37717 .7097 .48421 .73657 .47748 .71867 .37003 Mtetra .617 .442 .622 r .71867 .37003 .73657 .47748 .7628 .45794 .74436 .35073 Mtetra .588 .421 .624 r .74436 .35073 .7628 .45794 .79 .4496 .77094 .34206 Mtetra .54 .389 .625 r .77094 .34206 .79 .4496 .81892 .45737 .7991 .34865 Mtetra .582 .418 .624 r .7991 .34865 .81892 .45737 .84696 .45069 .82649 .34153 Mtetra .63 .449 .62 r .82649 .34153 .84696 .45069 .87331 .4253 .85232 .31668 Mtetra .587 .421 .624 r .85232 .31668 .87331 .4253 .90159 .41663 .87993 .30767 Mtetra .663 .742 .909 r .26767 .48619 .28235 .49978 .30479 .49245 .29022 .47874 Mtetra .66 .742 .91 r .29022 .47874 .30479 .49245 .32742 .4852 .31297 .47138 Mtetra .66 .741 .91 r .31297 .47138 .32742 .4852 .35024 .47793 .33591 .46399 Mtetra .667 .743 .907 r .33591 .46399 .35024 .47793 .37328 .47014 .35907 .45608 Mtetra .663 .742 .909 r .35907 .45608 .37328 .47014 .3965 .46255 .38242 .44836 Mtetra .641 .736 .918 r .38242 .44836 .3965 .46255 .41989 .45618 .40593 .44188 Mtetra .655 .74 .912 r .40593 .44188 .41989 .45618 .44352 .44895 .42969 .43452 Mtetra .653 .74 .913 r .42969 .43452 .44352 .44895 .46737 .44174 .45367 .42718 Mtetra .693 .751 .896 r .45367 .42718 .46737 .44174 .49146 .43185 .47791 .41716 Mtetra .663 .742 .909 r .47791 .41716 .49146 .43185 .51573 .42392 .50232 .4091 Mtetra .587 .715 .932 r .50232 .4091 .51573 .42392 .54024 .42014 .52695 .4052 Mtetra .648 .738 .915 r .52695 .4052 .54024 .42014 .56498 .41296 .55184 .39788 Mtetra .647 .738 .915 r .55184 .39788 .56498 .41296 .58997 .40579 .57698 .39058 Mtetra .734 .764 .877 r .57698 .39058 .58997 .40579 .61502 .39209 .6022 .37672 Mtetra .663 .742 .909 r .6022 .37672 .61502 .39209 .64041 .38379 .62774 .36829 Mtetra .488 .668 .943 r .62774 .36829 .64041 .38379 .66642 .38431 .65388 .3687 Mtetra .642 .736 .917 r .65388 .3687 .66642 .38431 .69241 .37717 .68003 .36141 Mtetra .641 .735 .917 r .68003 .36141 .69241 .37717 .71867 .37003 .70645 .35413 Mtetra .784 .781 .85 r .70645 .35413 .71867 .37003 .74436 .35073 .73235 .33465 Mtetra .663 .742 .909 r .73235 .33465 .74436 .35073 .77094 .34206 .75911 .32582 Mtetra .342 .581 .931 r .75911 .32582 .77094 .34206 .7991 .34865 .7874 .33232 Mtetra .636 .733 .919 r .7874 .33232 .7991 .34865 .82649 .34153 .81496 .32505 Mtetra .825 .796 .824 r .81496 .32505 .82649 .34153 .85232 .31668 .84103 .29998 Mtetra .663 .743 .909 r .84103 .29998 .85232 .31668 .87993 .30767 .86882 .29082 Mtetra .424 .084 .283 r .24824 .52698 .26767 .48619 .29022 .47874 .27127 .51953 Mtetra .426 .086 .284 r .27127 .51953 .29022 .47874 .31297 .47138 .2945 .51216 Mtetra .426 .087 .284 r .2945 .51216 .31297 .47138 .33591 .46399 .31793 .50477 Mtetra .421 .081 .282 r .31793 .50477 .33591 .46399 .35907 .45608 .34159 .49684 Mtetra .424 .084 .283 r .34159 .49684 .35907 .45608 .38242 .44836 .36546 .48912 Mtetra .439 .099 .29 r .36546 .48912 .38242 .44836 .40593 .44188 .38948 .48266 Mtetra .43 .09 .286 r .38948 .48266 .40593 .44188 .42969 .43452 .41377 .47532 Mtetra .431 .091 .287 r .41377 .47532 .42969 .43452 .45367 .42718 .43829 .46798 Mtetra .4 .062 .273 r .43829 .46798 .45367 .42718 .47791 .41716 .46308 .45786 Mtetra .424 .084 .283 r .46308 .45786 .47791 .41716 .50232 .4091 .48806 .44977 Mtetra .468 .126 .302 r .48806 .44977 .50232 .4091 .52695 .4052 .51324 .44602 Mtetra .434 .094 .288 r .51324 .44602 .52695 .4052 .55184 .39788 .53872 .43872 Mtetra .435 .095 .288 r .53872 .43872 .55184 .39788 .57698 .39058 .56444 .43142 Mtetra .362 .03 .261 r .56444 .43142 .57698 .39058 .6022 .37672 .59029 .41732 Mtetra .424 .085 .283 r .59029 .41732 .6022 .37672 .62774 .36829 .61645 .40885 Mtetra .507 .159 .312 r .61645 .40885 .62774 .36829 .65388 .3687 .6432 .40958 Mtetra .438 .098 .289 r .6432 .40958 .65388 .3687 .68003 .36141 .67 .40231 Mtetra .439 .098 .29 r .67 .40231 .68003 .36141 .70645 .35413 .69708 .39505 Mtetra .309 0 .248 r .69708 .39505 .70645 .35413 .73235 .33465 .72366 .3751 Mtetra .424 .085 .284 r .72366 .3751 .73235 .33465 .75911 .32582 .7511 .36622 Mtetra .55 .194 .317 r .7511 .36622 .75911 .32582 .7874 .33232 .78009 .3733 Mtetra .442 .101 .29 r .78009 .3733 .7874 .33232 .81496 .32505 .80837 .36605 Mtetra .261 0 .243 r .80837 .36605 .81496 .32505 .84103 .29998 .83515 .34029 Mtetra .424 .085 .284 r .83515 .34029 .84103 .29998 .86882 .29082 .86369 .33106 Mtetra .648 .635 .823 r .23365 .50345 .24824 .52698 .27127 .51953 .25674 .49585 Mtetra .646 .634 .824 r .25674 .49585 .27127 .51953 .2945 .51216 .28002 .48834 Mtetra .28002 .48834 .2945 .51216 .31793 .50477 .3035 .4808 Mtetra .651 .636 .822 r .3035 .4808 .31793 .50477 .34159 .49684 .32724 .47272 Mtetra .648 .635 .823 r .32724 .47272 .34159 .49684 .36546 .48912 .35116 .46485 Mtetra .633 .629 .828 r .35116 .46485 .36546 .48912 .38948 .48266 .37524 .45824 Mtetra .642 .633 .825 r .37524 .45824 .38948 .48266 .41377 .47532 .3996 .45073 Mtetra .641 .632 .826 r .3996 .45073 .41377 .47532 .43829 .46798 .42418 .44324 Mtetra .67 .645 .816 r .42418 .44324 .43829 .46798 .46308 .45786 .44906 .43297 Mtetra .648 .635 .823 r .44906 .43297 .46308 .45786 .48806 .44977 .4741 .42473 Mtetra .596 .611 .837 r .4741 .42473 .48806 .44977 .51324 .44602 .49934 .4208 Mtetra .638 .631 .827 r .49934 .4208 .51324 .44602 .53872 .43872 .52489 .41333 Mtetra .637 .63 .827 r .52489 .41333 .53872 .43872 .56444 .43142 .55069 .40587 Mtetra .702 .659 .805 r .55069 .40587 .56444 .43142 .59029 .41732 .57664 .39161 Mtetra .648 .635 .823 r .57664 .39161 .59029 .41732 .61645 .40885 .60288 .38298 Mtetra .531 .577 .846 r .60288 .38298 .61645 .40885 .6432 .40958 .62968 .38351 Mtetra .633 .629 .828 r .62968 .38351 .6432 .40958 .67 .40231 .65656 .37607 Mtetra .633 .628 .828 r .65656 .37607 .67 .40231 .69708 .39505 .68372 .36863 Mtetra .742 .677 .788 r .68372 .36863 .69708 .39505 .72366 .3751 .71044 .34852 Mtetra .648 .635 .824 r .71044 .34852 .72366 .3751 .7511 .36622 .73797 .33947 Mtetra .436 .521 .847 r .73797 .33947 .7511 .36622 .78009 .3733 .767 .34632 Mtetra .629 .627 .829 r .767 .34632 .78009 .3733 .80837 .36605 .79537 .33888 Mtetra .776 .694 .772 r .79537 .33888 .80837 .36605 .83515 .34029 .82231 .31298 Mtetra .648 .635 .824 r .82231 .31298 .83515 .34029 .86369 .33106 .85095 .30356 Mtetra .649 .642 .83 r .21883 .48044 .23365 .50345 .25674 .49585 .24198 .47269 Mtetra .648 .642 .83 r .24198 .47269 .25674 .49585 .28002 .48834 .26532 .46504 Mtetra .647 .641 .83 r .26532 .46504 .28002 .48834 .3035 .4808 .28887 .45735 Mtetra .653 .644 .828 r .28887 .45735 .3035 .4808 .32724 .47272 .31267 .44912 Mtetra .649 .642 .83 r .31267 .44912 .32724 .47272 .35116 .46485 .33667 .4411 Mtetra .634 .636 .835 r .33667 .4411 .35116 .46485 .37524 .45824 .36081 .43433 Mtetra .644 .64 .832 r .36081 .43433 .37524 .45824 .3996 .45073 .38523 .42667 Mtetra .643 .639 .832 r .38523 .42667 .3996 .45073 .42418 .44324 .40989 .41902 Mtetra .672 .652 .822 r .40989 .41902 .42418 .44324 .44906 .43297 .43485 .40859 Mtetra .649 .642 .83 r .43485 .40859 .44906 .43297 .4741 .42473 .45997 .40019 Mtetra .595 .618 .844 r .45997 .40019 .4741 .42473 .49934 .4208 .48528 .39609 Mtetra .639 .638 .833 r .48528 .39609 .49934 .4208 .52489 .41333 .5109 .38846 Mtetra .638 .637 .833 r .5109 .38846 .52489 .41333 .55069 .40587 .53678 .38083 Mtetra .704 .666 .81 r .53678 .38083 .55069 .40587 .57664 .39161 .56284 .36641 Mtetra .649 .642 .83 r .56284 .36641 .57664 .39161 .60288 .38298 .58918 .35761 Mtetra .529 .583 .853 r .58918 .35761 .60288 .38298 .62968 .38351 .61602 .35795 Mtetra .634 .636 .834 r .61602 .35795 .62968 .38351 .65656 .37607 .64299 .35033 Mtetra .633 .635 .834 r .64299 .35033 .65656 .37607 .68372 .36863 .67025 .34271 Mtetra .745 .684 .793 r .67025 .34271 .68372 .36863 .71044 .34852 .69711 .32245 Mtetra .649 .642 .83 r .69711 .32245 .71044 .34852 .73797 .33947 .72474 .31321 Mtetra .431 .525 .854 r .72474 .31321 .73797 .33947 .767 .34632 .75381 .31984 Mtetra .63 .634 .835 r .75381 .31984 .767 .34632 .79537 .33888 .78229 .31222 Mtetra .78 .701 .776 r .78229 .31222 .79537 .33888 .82231 .31298 .8094 .28616 Mtetra .649 .642 .83 r .8094 .28616 .82231 .31298 .85095 .30356 .83815 .27656 Mtetra .604 .478 .681 r .20712 .42372 .21883 .48044 .24198 .47269 .23011 .41576 Mtetra .603 .477 .681 r .23011 .41576 .24198 .47269 .26532 .46504 .25329 .40789 Mtetra .25329 .40789 .26532 .46504 .28887 .45735 .27667 .39998 Mtetra .606 .479 .681 r .27667 .39998 .28887 .45735 .31267 .44912 .3003 .39154 Mtetra .604 .478 .681 r .3003 .39154 .31267 .44912 .33667 .4411 .32412 .38329 Mtetra .596 .473 .682 r .32412 .38329 .33667 .4411 .36081 .43433 .34809 .37627 Mtetra .601 .476 .681 r .34809 .37627 .36081 .43433 .38523 .42667 .37233 .36838 Mtetra .601 .475 .681 r .37233 .36838 .38523 .42667 .40989 .41902 .3968 .36049 Mtetra .615 .485 .68 r .3968 .36049 .40989 .41902 .43485 .40859 .42159 .34988 Mtetra .604 .478 .681 r .42159 .34988 .43485 .40859 .45997 .40019 .44653 .34125 Mtetra .579 .461 .683 r .44653 .34125 .45997 .40019 .48528 .39609 .47162 .33681 Mtetra .599 .474 .682 r .47162 .33681 .48528 .39609 .5109 .38846 .49705 .32892 Mtetra .598 .474 .682 r .49705 .32892 .5109 .38846 .53678 .38083 .52274 .32103 Mtetra .633 .496 .678 r .52274 .32103 .53678 .38083 .56284 .36641 .54863 .30652 Mtetra .604 .478 .681 r .54863 .30652 .56284 .36641 .58918 .35761 .57476 .29747 Mtetra .551 .444 .685 r .57476 .29747 .58918 .35761 .61602 .35795 .60136 .29735 Mtetra .597 .473 .682 r .60136 .29735 .61602 .35795 .64299 .35033 .62811 .28945 Mtetra .596 .473 .682 r .62811 .28945 .64299 .35033 .67025 .34271 .65515 .28155 Mtetra .656 .51 .674 r .65515 .28155 .67025 .34271 .69711 .32245 .68185 .26132 Mtetra .604 .478 .681 r .68185 .26132 .69711 .32245 .72474 .31321 .70927 .25183 Mtetra .512 .419 .687 r .70927 .25183 .72474 .31321 .75381 .31984 .73803 .25781 Mtetra .595 .472 .682 r .73803 .25781 .75381 .31984 .78229 .31222 .76627 .24989 Mtetra .677 .523 .669 r .76627 .24989 .78229 .31222 .8094 .28616 .79324 .22399 Mtetra .604 .478 .681 r .79324 .22399 .8094 .28616 .83815 .27656 .82176 .21413 Mtetra .663 .742 .908 r .19125 .40898 .20712 .42372 .23011 .41576 .21435 .40089 Mtetra .661 .741 .909 r .21435 .40089 .23011 .41576 .25329 .40789 .23765 .39288 Mtetra .66 .741 .91 r .23765 .39288 .25329 .40789 .27667 .39998 .26116 .38483 Mtetra .668 .743 .907 r .26116 .38483 .27667 .39998 .3003 .39154 .28492 .37625 Mtetra .663 .742 .908 r .28492 .37625 .3003 .39154 .32412 .38329 .30887 .36787 Mtetra .642 .735 .917 r .30887 .36787 .32412 .38329 .34809 .37627 .33296 .36072 Mtetra .655 .739 .912 r .33296 .36072 .34809 .37627 .37233 .36838 .35734 .35268 Mtetra .654 .739 .912 r .35734 .35268 .37233 .36838 .3968 .36049 .38195 .34464 Mtetra .693 .75 .896 r .38195 .34464 .3968 .36049 .42159 .34988 .40689 .33388 Mtetra .663 .742 .908 r .40689 .33388 .42159 .34988 .44653 .34125 .43197 .3251 Mtetra .587 .715 .931 r .43197 .3251 .44653 .34125 .47162 .33681 .4572 .32053 Mtetra .649 .737 .914 r .4572 .32053 .47162 .33681 .49705 .32892 .48277 .31249 Mtetra .648 .737 .914 r .48277 .31249 .49705 .32892 .52274 .32103 .50861 .30445 Mtetra .734 .763 .876 r .50861 .30445 .52274 .32103 .54863 .30652 .53468 .28976 Mtetra .663 .742 .908 r .53468 .28976 .54863 .30652 .57476 .29747 .56098 .28055 Mtetra .49 .668 .942 r .56098 .28055 .57476 .29747 .60136 .29735 .58771 .2803 Mtetra .643 .735 .916 r .58771 .2803 .60136 .29735 .62811 .28945 .61463 .27224 Mtetra .641 .735 .916 r .61463 .27224 .62811 .28945 .65515 .28155 .64184 .26418 Mtetra .784 .78 .849 r .64184 .26418 .65515 .28155 .68185 .26132 .66876 .24374 Mtetra .663 .742 .909 r .66876 .24374 .68185 .26132 .70927 .25183 .69636 .23408 Mtetra .345 .582 .931 r .69636 .23408 .70927 .25183 .73803 .25781 .72526 .23994 Mtetra .636 .733 .918 r .72526 .23994 .73803 .25781 .76627 .24989 .75368 .23184 Mtetra .825 .795 .824 r .75368 .23184 .76627 .24989 .79324 .22399 .78091 .20571 Mtetra .663 .742 .909 r .78091 .20571 .79324 .22399 .82176 .21413 .80963 .19567 Mtetra .277 .772 .718 r .17288 .41449 .19125 .40898 .21435 .40089 .19624 .40631 Mtetra .268 .765 .713 r .19624 .40631 .21435 .40089 .23765 .39288 .2198 .39821 Mtetra .266 .764 .712 r .2198 .39821 .23765 .39288 .26116 .38483 .24358 .39007 Mtetra .293 .782 .725 r .24358 .39007 .26116 .38483 .28492 .37625 .26761 .38138 Mtetra .277 .772 .718 r .26761 .38138 .28492 .37625 .30887 .36787 .29185 .37289 Mtetra .203 .719 .679 r .29185 .37289 .30887 .36787 .33296 .36072 .31622 .36566 Mtetra .248 .751 .703 r .31622 .36566 .33296 .36072 .35734 .35268 .34088 .35752 Mtetra .244 .748 .701 r .34088 .35752 .35734 .35268 .38195 .34464 .36579 .34939 Mtetra .381 .838 .761 r .36579 .34939 .38195 .34464 .40689 .33388 .39105 .33848 Mtetra .277 .771 .717 r .39105 .33848 .40689 .33388 .43197 .3251 .41644 .32959 Mtetra 0 0 0 r .41644 .32959 .43197 .3251 .4572 .32053 .44196 .32498 Mtetra .228 .737 .693 r .44196 .32498 .4572 .32053 .48277 .31249 .46786 .31683 Mtetra .224 .734 .691 r .46786 .31683 .48277 .31249 .50861 .30445 .49402 .30869 Mtetra .516 .91 .793 r .49402 .30869 .50861 .30445 .53468 .28976 .52046 .29377 Mtetra .276 .771 .717 r .52046 .29377 .53468 .28976 .56098 .28055 .54711 .28445 Mtetra .137 0 0 r .54711 .28445 .56098 .28055 .58771 .2803 .57415 .28422 Mtetra .209 .724 .685 r .57415 .28422 .58771 .2803 .61463 .27224 .60143 .27605 Mtetra .205 .721 .683 r .60143 .27605 .61463 .27224 .64184 .26418 .62901 .26788 Mtetra .653 .964 .789 r .62901 .26788 .64184 .26418 .66876 .24374 .65634 .24712 Mtetra .276 .77 .716 r .65634 .24712 .66876 .24374 .69636 .23408 .68433 .23732 Mtetra .319 0 0 r .68433 .23732 .69636 .23408 .72526 .23994 .71358 .24331 Mtetra 0 0 0 r .71358 .24331 .72526 .23994 .75368 .23184 .7424 .2351 Mtetra .737 .981 .753 r .7424 .2351 .75368 .23184 .78091 .20571 .77008 .20854 Mtetra .274 .769 .715 r .77008 .20854 .78091 .20571 .80963 .19567 .79922 .19834 Mtetra .655 .673 .855 r .15701 .39352 .17288 .41449 .19624 .40631 .18045 .38519 Mtetra .653 .672 .856 r .18045 .38519 .19624 .40631 .2198 .39821 .2041 .37693 Mtetra .652 .672 .856 r .2041 .37693 .2198 .39821 .24358 .39007 .22796 .36864 Mtetra .658 .674 .854 r .22796 .36864 .24358 .39007 .26761 .38138 .25209 .3598 Mtetra .655 .673 .855 r .25209 .3598 .26761 .38138 .29185 .37289 .27641 .35115 Mtetra .637 .667 .862 r .27641 .35115 .29185 .37289 .31622 .36566 .30087 .34376 Mtetra .648 .671 .858 r .30087 .34376 .31622 .36566 .34088 .35752 .32563 .33546 Mtetra .647 .67 .858 r .32563 .33546 .34088 .35752 .36579 .34939 .35063 .32716 Mtetra .679 .682 .846 r .35063 .32716 .36579 .34939 .39105 .33848 .376 .31609 Mtetra .655 .673 .855 r .376 .31609 .39105 .33848 .41644 .32959 .4015 .30703 Mtetra .594 .648 .873 r .4015 .30703 .41644 .32959 .44196 .32498 .4271 .30224 Mtetra .643 .669 .86 r .4271 .30224 .44196 .32498 .46786 .31683 .45311 .29393 Mtetra .642 .668 .86 r .45311 .29393 .46786 .31683 .49402 .30869 .47938 .2856 Mtetra .714 .697 .832 r .47938 .2856 .49402 .30869 .52046 .29377 .50596 .27052 Mtetra .655 .673 .855 r .50596 .27052 .52046 .29377 .54711 .28445 .53272 .26101 Mtetra .519 .61 .883 r .53272 .26101 .54711 .28445 .57415 .28422 .55984 .2606 Mtetra .638 .667 .861 r .55984 .2606 .57415 .28422 .60143 .27605 .58724 .25224 Mtetra .637 .666 .861 r .58724 .25224 .60143 .27605 .62901 .26788 .61494 .24388 Mtetra .758 .715 .812 r .61494 .24388 .62901 .26788 .65634 .24712 .64246 .22294 Mtetra .655 .673 .856 r .64246 .22294 .65634 .24712 .68433 .23732 .67058 .21295 Mtetra .406 .544 .881 r .67058 .21295 .68433 .23732 .71358 .24331 .69989 .21873 Mtetra .633 .664 .862 r .69989 .21873 .71358 .24331 .7424 .2351 .72886 .21032 Mtetra .795 .731 .792 r .72886 .21032 .7424 .2351 .77008 .20854 .75674 .18357 Mtetra .655 .673 .856 r .75674 .18357 .77008 .20854 .79922 .19834 .78603 .17317 Mtetra .656 .682 .862 r .14084 .37304 .15701 .39352 .18045 .38519 .16437 .36456 Mtetra .654 .681 .863 r .16437 .36456 .18045 .38519 .2041 .37693 .1881 .35615 Mtetra .1881 .35615 .2041 .37693 .22796 .36864 .21206 .3477 Mtetra .66 .683 .861 r .21206 .3477 .22796 .36864 .25209 .3598 .23628 .3387 Mtetra .656 .682 .862 r .23628 .3387 .25209 .3598 .27641 .35115 .2607 .32989 Mtetra .638 .675 .869 r .2607 .32989 .27641 .35115 .30087 .34376 .28525 .32234 Mtetra .649 .679 .865 r .28525 .32234 .30087 .34376 .32563 .33546 .31011 .31388 Mtetra .648 .679 .865 r .31011 .31388 .32563 .33546 .35063 .32716 .33521 .30541 Mtetra .681 .691 .852 r .33521 .30541 .35063 .32716 .376 .31609 .3607 .29417 Mtetra .656 .682 .862 r .3607 .29417 .376 .31609 .4015 .30703 .38631 .28494 Mtetra .594 .656 .881 r .38631 .28494 .4015 .30703 .4271 .30224 .41201 .27998 Mtetra .644 .677 .867 r .41201 .27998 .4271 .30224 .45311 .29393 .43812 .27149 Mtetra .643 .677 .867 r .43812 .27149 .45311 .29393 .47938 .2856 .46451 .26299 Mtetra .717 .705 .837 r .46451 .26299 .47938 .2856 .50596 .27052 .49124 .24772 Mtetra .656 .682 .862 r .49124 .24772 .50596 .27052 .53272 .26101 .51812 .23803 Mtetra .516 .617 .891 r .51812 .23803 .53272 .26101 .55984 .2606 .54534 .23743 Mtetra .639 .675 .868 r .54534 .23743 .55984 .2606 .58724 .25224 .57286 .22889 Mtetra .638 .675 .868 r .57286 .22889 .58724 .25224 .61494 .24388 .60069 .22034 Mtetra .762 .723 .817 r .60069 .22034 .61494 .24388 .64246 .22294 .62839 .19921 Mtetra .656 .682 .862 r .62839 .19921 .64246 .22294 .67058 .21295 .65665 .18902 Mtetra .399 .549 .888 r .65665 .18902 .67058 .21295 .69989 .21873 .68605 .1946 Mtetra .634 .673 .87 r .68605 .1946 .69989 .21873 .72886 .21032 .71516 .18598 Mtetra .799 .739 .797 r .71516 .18598 .72886 .21032 .75674 .18357 .74327 .15904 Mtetra .656 .682 .862 r .74327 .15904 .75674 .18357 .78603 .17317 .77271 .14844 Mtetra .641 .607 .8 r .12546 .34416 .14084 .37304 .16437 .36456 .14903 .3355 Mtetra .639 .606 .8 r .14903 .3355 .16437 .36456 .1881 .35615 .17279 .32692 Mtetra .17279 .32692 .1881 .35615 .21206 .3477 .19678 .31829 Mtetra .643 .608 .799 r .19678 .31829 .21206 .3477 .23628 .3387 .22104 .30912 Mtetra .641 .607 .8 r .22104 .30912 .23628 .3387 .2607 .32989 .2455 .30014 Mtetra .626 .6 .804 r .2455 .30014 .2607 .32989 .28525 .32234 .27008 .29239 Mtetra .635 .604 .801 r .27008 .29239 .28525 .32234 .31011 .31388 .29498 .28375 Mtetra .634 .604 .802 r .29498 .28375 .31011 .31388 .33521 .30541 .32012 .27509 Mtetra .661 .616 .794 r .32012 .27509 .33521 .30541 .3607 .29417 .34566 .26367 Mtetra .641 .607 .8 r .34566 .26367 .3607 .29417 .38631 .28494 .37131 .25425 Mtetra .593 .583 .811 r .37131 .25425 .38631 .28494 .41201 .27998 .39703 .24908 Mtetra .631 .602 .802 r .39703 .24908 .41201 .27998 .43812 .27149 .42319 .24039 Mtetra .63 .602 .803 r .42319 .24039 .43812 .27149 .46451 .26299 .44962 .23169 Mtetra .69 .631 .784 r .44962 .23169 .46451 .26299 .49124 .24772 .47643 .21626 Mtetra .641 .607 .8 r .47643 .21626 .49124 .24772 .51812 .23803 .50337 .20637 Mtetra .534 .551 .819 r .50337 .20637 .51812 .23803 .54534 .23743 .53059 .20551 Mtetra .627 .6 .803 r .53059 .20551 .54534 .23743 .57286 .22889 .55817 .19676 Mtetra .626 .6 .804 r .55817 .19676 .57286 .22889 .60069 .22034 .58605 .18798 Mtetra .728 .649 .77 r .58605 .18798 .60069 .22034 .62839 .19921 .61386 .1667 Mtetra .641 .607 .8 r .61386 .1667 .62839 .19921 .65665 .18902 .64219 .15631 Mtetra .45 .501 .82 r .64219 .15631 .65665 .18902 .68605 .1946 .67158 .16157 Mtetra .623 .598 .804 r .67158 .16157 .68605 .1946 .71516 .18598 .70074 .15272 Mtetra .761 .666 .756 r .70074 .15272 .71516 .18598 .74327 .15904 .72899 .12566 Mtetra .64 .607 .8 r .72899 .12566 .74327 .15904 .77271 .14844 .75851 .11483 Mtetra .663 .741 .908 r .10823 .32811 .12546 .34416 .14903 .3355 .13191 .31931 Mtetra .661 .741 .909 r .13191 .31931 .14903 .3355 .17279 .32692 .1558 .31057 Mtetra .66 .741 .909 r .1558 .31057 .17279 .32692 .19678 .31829 .17992 .3018 Mtetra .668 .743 .906 r .17992 .3018 .19678 .31829 .22104 .30912 .20431 .29247 Mtetra .663 .741 .908 r .20431 .29247 .22104 .30912 .2455 .30014 .2289 .28333 Mtetra .642 .735 .916 r .2289 .28333 .2455 .30014 .27008 .29239 .25362 .27543 Mtetra .655 .739 .911 r .25362 .27543 .27008 .29239 .29498 .28375 .27865 .26662 Mtetra .654 .739 .912 r .27865 .26662 .29498 .28375 .32012 .27509 .30393 .2578 Mtetra .693 .75 .895 r .30393 .2578 .32012 .27509 .34566 .26367 .32964 .24621 Mtetra .663 .741 .908 r .32964 .24621 .34566 .26367 .37131 .25425 .35544 .23662 Mtetra .588 .715 .931 r .35544 .23662 .37131 .25425 .39703 .24908 .3813 .23129 Mtetra .649 .737 .914 r .3813 .23129 .39703 .24908 .42319 .24039 .40761 .22243 Mtetra .648 .737 .914 r .40761 .22243 .42319 .24039 .44962 .23169 .4342 .21355 Mtetra .734 .763 .876 r .4342 .21355 .44962 .23169 .47643 .21626 .46121 .19792 Mtetra .663 .741 .908 r .46121 .19792 .47643 .21626 .50337 .20637 .48832 .18785 Mtetra .491 .668 .942 r .48832 .18785 .50337 .20637 .53059 .20551 .51567 .18684 Mtetra .643 .735 .916 r .51567 .18684 .53059 .20551 .55817 .19676 .54342 .1779 Mtetra .642 .734 .916 r .54342 .1779 .55817 .19676 .58605 .18798 .57148 .16894 Mtetra .784 .78 .849 r .57148 .16894 .58605 .18798 .61386 .1667 .59954 .14743 Mtetra .663 .742 .908 r .59954 .14743 .61386 .1667 .64219 .15631 .62806 .13684 Mtetra .346 .582 .931 r .62806 .13684 .64219 .15631 .67158 .16157 .65757 .14194 Mtetra .637 .732 .917 r .65757 .14194 .67158 .16157 .70074 .15272 .68694 .1329 Mtetra .824 .794 .824 r .68694 .1329 .70074 .15272 .72899 .12566 .71547 .10559 Mtetra .663 .742 .908 r .71547 .10559 .72899 .12566 .75851 .11483 .7452 .09455 Mtetra .664 .778 .934 r .09031 .31453 .10823 .32811 .13191 .31931 .11414 .30557 Mtetra .661 .778 .935 r .11414 .30557 .13191 .31931 .1558 .31057 .13818 .29669 Mtetra .661 .778 .936 r .13818 .29669 .1558 .31057 .17992 .3018 .16244 .28776 Mtetra .669 .78 .932 r .16244 .28776 .17992 .3018 .20431 .29247 .18698 .27828 Mtetra .664 .778 .934 r .18698 .27828 .20431 .29247 .2289 .28333 .21173 .26898 Mtetra .64 .772 .943 r .21173 .26898 .2289 .28333 .25362 .27543 .2366 .26093 Mtetra .655 .776 .938 r .2366 .26093 .25362 .27543 .27865 .26662 .2618 .25196 Mtetra .654 .776 .938 r .2618 .25196 .27865 .26662 .30393 .2578 .28724 .24298 Mtetra .697 .787 .92 r .28724 .24298 .30393 .2578 .32964 .24621 .31313 .23121 Mtetra .664 .779 .934 r .31313 .23121 .32964 .24621 .35544 .23662 .33911 .22145 Mtetra .578 .75 .959 r .33911 .22145 .35544 .23662 .3813 .23129 .36512 .21597 Mtetra .648 .774 .94 r .36512 .21597 .3813 .23129 .40761 .22243 .39162 .20694 Mtetra .647 .774 .941 r .39162 .20694 .40761 .22243 .4342 .21355 .41839 .19789 Mtetra .742 .799 .898 r .41839 .19789 .4342 .21355 .46121 .19792 .44563 .18205 Mtetra .664 .779 .934 r .44563 .18205 .46121 .19792 .48832 .18785 .47293 .1718 Mtetra .467 .697 .968 r .47293 .1718 .48832 .18785 .51567 .18684 .50044 .17064 Mtetra .641 .772 .943 r .50044 .17064 .51567 .18684 .54342 .1779 .5284 .16152 Mtetra .639 .771 .943 r .5284 .16152 .54342 .1779 .57148 .16894 .55666 .15238 Mtetra .795 .815 .868 r .55666 .15238 .57148 .16894 .59954 .14743 .585 .13062 Mtetra .664 .779 .934 r .585 .13062 .59954 .14743 .62806 .13684 .61374 .11983 Mtetra .303 .597 .948 r .61374 .11983 .62806 .13684 .65757 .14194 .64342 .12481 Mtetra .634 .769 .945 r .64342 .12481 .65757 .14194 .68694 .1329 .67302 .11557 Mtetra .838 .828 .838 r .67302 .11557 .68694 .1329 .71547 .10559 .70185 .08797 Mtetra .664 .779 .935 r .70185 .08797 .71547 .10559 .7452 .09455 .73183 .07672 Mtetra .661 .717 .89 r .07273 .29599 .09031 .31453 .11414 .30557 .09667 .28687 Mtetra .659 .717 .891 r .09667 .28687 .11414 .30557 .13818 .29669 .12082 .27783 Mtetra .658 .716 .891 r .12082 .27783 .13818 .29669 .16244 .28776 .1452 .26873 Mtetra .665 .718 .889 r .1452 .26873 .16244 .28776 .18698 .27828 .16986 .25908 Mtetra .661 .717 .89 r .16986 .25908 .18698 .27828 .21173 .26898 .19474 .24961 Mtetra .641 .711 .898 r .19474 .24961 .21173 .26898 .2366 .26093 .21972 .24139 Mtetra .654 .715 .893 r .21972 .24139 .2366 .26093 .2618 .25196 .24504 .23225 Mtetra .652 .715 .894 r .24504 .23225 .2618 .25196 .28724 .24298 .27062 .2231 Mtetra .689 .726 .879 r .27062 .2231 .28724 .24298 .31313 .23121 .29666 .21114 Mtetra .661 .717 .89 r .29666 .21114 .31313 .23121 .33911 .22145 .32278 .2012 Mtetra .591 .691 .912 r .32278 .2012 .33911 .22145 .36512 .21597 .3489 .19554 Mtetra .648 .713 .895 r .3489 .19554 .36512 .21597 .39162 .20694 .37554 .18632 Mtetra .647 .713 .896 r .37554 .18632 .39162 .20694 .41839 .19789 .40245 .17709 Mtetra .728 .74 .861 r .40245 .17709 .41839 .19789 .44563 .18205 .42988 .16104 Mtetra .661 .717 .89 r .42988 .16104 .44563 .18205 .47293 .1718 .45734 .15059 Mtetra .502 .648 .922 r .45734 .15059 .47293 .1718 .50044 .17064 .48497 .14925 Mtetra .642 .711 .897 r .48497 .14925 .50044 .17064 .5284 .16152 .51308 .13993 Mtetra .641 .71 .898 r .51308 .13993 .5284 .16152 .55666 .15238 .54151 .13058 Mtetra .775 .757 .837 r .54151 .13058 .55666 .15238 .585 .13062 .57007 .1086 Mtetra .661 .717 .89 r .57007 .1086 .585 .13062 .61374 .11983 .59899 .0976 Mtetra .369 .569 .915 r .59899 .0976 .61374 .11983 .64342 .12481 .62878 .10239 Mtetra .636 .708 .899 r .62878 .10239 .64342 .12481 .67302 .11557 .65856 .09293 Mtetra .815 .772 .813 r .65856 .09293 .67302 .11557 .70185 .08797 .68767 .06509 Mtetra .661 .718 .89 r .68767 .06509 .70185 .08797 .73183 .07672 .71784 .05362 Mtetra .662 .722 .894 r .05481 .27753 .07273 .29599 .09667 .28687 .07886 .26825 Mtetra .659 .721 .895 r .07886 .26825 .09667 .28687 .12082 .27783 .10312 .25904 Mtetra .10312 .25904 .12082 .27783 .1452 .26873 .12762 .24978 Mtetra .666 .723 .892 r .12762 .24978 .1452 .26873 .16986 .25908 .15241 .23996 Mtetra .662 .722 .894 r .15241 .23996 .16986 .25908 .19474 .24961 .17741 .23031 Mtetra .641 .716 .902 r .17741 .23031 .19474 .24961 .21972 .24139 .20251 .22192 Mtetra .654 .72 .897 r .20251 .22192 .21972 .24139 .24504 .23225 .22797 .2126 Mtetra .653 .719 .897 r .22797 .2126 .24504 .23225 .27062 .2231 .25367 .20327 Mtetra .69 .731 .882 r .25367 .20327 .27062 .2231 .29666 .21114 .27986 .19112 Mtetra .662 .722 .894 r .27986 .19112 .29666 .21114 .32278 .2012 .30613 .181 Mtetra .591 .696 .915 r .30613 .181 .32278 .2012 .3489 .19554 .33237 .17516 Mtetra .648 .718 .899 r .33237 .17516 .3489 .19554 .37554 .18632 .35916 .16575 Mtetra .647 .717 .899 r .35916 .16575 .37554 .18632 .40245 .17709 .38622 .15632 Mtetra .729 .744 .864 r .38622 .15632 .40245 .17709 .42988 .16104 .41384 .14007 Mtetra .662 .722 .894 r .41384 .14007 .42988 .16104 .45734 .15059 .44147 .12942 Mtetra .5 .652 .926 r .44147 .12942 .45734 .15059 .48497 .14925 .46921 .12789 Mtetra .642 .716 .901 r .46921 .12789 .48497 .14925 .51308 .13993 .49748 .11836 Mtetra .641 .715 .901 r .49748 .11836 .51308 .13993 .54151 .13058 .52609 .1088 Mtetra .777 .762 .839 r .52609 .1088 .54151 .13058 .57007 .1086 .55488 .08659 Mtetra .662 .722 .894 r .55488 .08659 .57007 .1086 .59899 .0976 .58399 .07538 Mtetra .365 .572 .918 r .58399 .07538 .59899 .0976 .62878 .10239 .6139 .07996 Mtetra .636 .713 .903 r .6139 .07996 .62878 .10239 .65856 .09293 .64386 .07029 Mtetra .817 .777 .815 r .64386 .07029 .65856 .09293 .68767 .06509 .67324 .04219 Mtetra .661 .722 .894 r .67324 .04219 .68767 .06509 .71784 .05362 .70363 .03049 Mtetra .664 .741 .908 r .03634 .26033 .05481 .27753 .07886 .26825 .06052 .25089 Mtetra .661 .741 .909 r .06052 .25089 .07886 .26825 .10312 .25904 .08491 .24151 Mtetra .66 .741 .909 r .08491 .24151 .10312 .25904 .12762 .24978 .10953 .23208 Mtetra .668 .742 .906 r .10953 .23208 .12762 .24978 .15241 .23996 .13446 .22208 Mtetra .664 .741 .908 r .13446 .22208 .15241 .23996 .17741 .23031 .1596 .21226 Mtetra .642 .735 .916 r .1596 .21226 .17741 .23031 .20251 .22192 .18483 .20369 Mtetra .655 .739 .911 r .18483 .20369 .20251 .22192 .22797 .2126 .21043 .1942 Mtetra .654 .739 .912 r .21043 .1942 .22797 .2126 .25367 .20327 .23628 .18468 Mtetra .693 .75 .895 r .23628 .18468 .25367 .20327 .27986 .19112 .26264 .17235 Mtetra .664 .741 .908 r .26264 .17235 .27986 .19112 .30613 .181 .28906 .16203 Mtetra .588 .715 .931 r .28906 .16203 .30613 .181 .33237 .17516 .31544 .15601 Mtetra .649 .737 .914 r .31544 .15601 .33237 .17516 .35916 .16575 .34239 .14641 Mtetra .648 .737 .914 r .34239 .14641 .35916 .16575 .38622 .15632 .36962 .13678 Mtetra .734 .763 .876 r .36962 .13678 .38622 .15632 .41384 .14007 .39744 .12032 Mtetra .663 .741 .908 r .39744 .12032 .41384 .14007 .44147 .12942 .42525 .10946 Mtetra .491 .668 .942 r .42525 .10946 .44147 .12942 .46921 .12789 .45312 .10775 Mtetra .643 .735 .916 r .45312 .10775 .46921 .12789 .49748 .11836 .48158 .09801 Mtetra .642 .734 .916 r .48158 .09801 .49748 .11836 .52609 .1088 .51037 .08825 Mtetra .784 .78 .849 r .51037 .08825 .52609 .1088 .55488 .08659 .53943 .06579 Mtetra .663 .741 .908 r .53943 .06579 .55488 .08659 .58399 .07538 .56874 .05435 Mtetra .347 .582 .931 r .56874 .05435 .58399 .07538 .6139 .07996 .59877 .05876 Mtetra .637 .732 .917 r .59877 .05876 .6139 .07996 .64386 .07029 .62895 .04885 Mtetra .824 .794 .824 r .62895 .04885 .64386 .07029 .67324 .04219 .65863 .02049 Mtetra .663 .742 .908 r .65863 .02049 .67324 .04219 .70363 .03049 .68923 .00855 Mtetra 0 g .68874 0 m .96935 .42924 L s .96935 .42924 m 1 .6535 L s 1 .6535 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .03716 .25514 m 0 .48963 L s 0 .48963 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .68874 0 m .03716 .25514 L s .03716 .25514 m .68874 0 L s .03716 .25514 m .04196 .25962 L s [(0)] .02757 .24618 1 .93395 Mshowa .1552 .20892 m .15981 .21359 L s [(0.2)] .14598 .19958 .98733 1 Mshowa .27893 .16047 m .28333 .16533 L s [(0.4)] .27013 .15073 .90393 1 Mshowa .40878 .10962 m .41294 .11469 L s [(0.6)] .40046 .09948 .82054 1 Mshowa .54521 .0562 m .54911 .06148 L s [(0.8)] .53743 .04564 .73714 1 Mshowa .68874 0 m .69233 .00549 L s [(1)] .68156 -0.01098 .65374 1 Mshowa .125 Mabswid .06616 .24378 m .06901 .2465 L s .09549 .2323 m .09832 .23504 L s .12517 .22067 m .12797 .22345 L s .18558 .19702 m .18832 .19985 L s .21633 .18498 m .21903 .18784 L s .24744 .1728 m .25012 .17569 L s .3108 .14799 m .31341 .15094 L s .34306 .13535 m .34564 .13834 L s .37572 .12257 m .37826 .12558 L s .44225 .09652 m .44471 .09959 L s .47614 .08324 m .47856 .08635 L s .51046 .06981 m .51284 .07294 L s .58041 .04242 m .5827 .04562 L s .61605 .02846 m .6183 .03169 L s .65216 .01432 m .65436 .01759 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 233.562}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgoooo o`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`00000Jooooo`;o00000_oo ool00ol0003oooooooooo`07ojVmj004o`000?nY_NSoooooo`0005Kooooo002>ooooo`04o`000?oo ooooooooo`0000Oooooo00Go0000ooooooooooooooooo`00000Gooooo`?o00001Oooool9ojVmj005 o`000?nY_NSoooooooooool00000EOooool008kooooo00Co0000oooooooooooo00002?ooool3o`00 01Kooooo0_l00007ooooo`;od/_B2?nY_NP00ol0003oZKgXojVmj002o`0005Gooooo002>ooooo`04 o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`00000Booooo`?o00002?ooool4 om;;dPOoZKgX00Ko0000ojVmj?nY_NSoZKgXooooool0001Dooooo`00S_ooool01?l0003ooooooooo ool00007ooooo`05o`000?ooooooooooooooool000003oooool3o`0000;ooooo00?o0000oooooooo ool01Oooool5om;;dPSoZKgX00?o0000ojVmj?nY^>@00_ooool00ol0003oooooooooo`1Aooooo`00 Soooool2o`0000Wooooo0ol0000>ooooo`;o00003?ooool7om;;dPKoZKgX00?oZKSTo`000?nY^>@0 0_nY^>@00ooooooo0000ooooo`1Booooo`00Z?ooool3o`0000gooooo2OoBbm82ojVmj0CoZKST00Co 0000ojVhi?nY^>CoZKST0_ooool00ol0003oooooooooo`1@ooooo`00Y_ooool2o`000003ooooool0 003ooooo00cooooo2_oBbm86ojVhi003o`000?nY^>CoZKST00;oZKST00?oooooo`000?ooool0DOoo ool00:?ooooo0ol0000@ooooo`[od/_B0_oAa]05ojVhi003o`000?nY^>CoZKST00?oZKST00?ooooo o`000?ooool0D?ooool00:7ooooo0_l0000Aooooo`03oj>kj_oBbm;od/_B00Sod/_B0ooAa]05ojVh i003o`000?nY^>CoZKST00?oZKST00?oooooo`000?l00000D?ooool009kooooo0ol0000@ooooo`Go Xk_Z2?oBbm85om76d0CoZKST00?o0000ojVhi?nY^>@01?nY^>@00ooooooo0000ooooo`1?ooooo`00 Voooool3o`000003ooooool0003ooooo00?ooooo00?oZKgXoeRDk_mHU>h00omHU>h4ooooo`WoXk_Z 1_oBbm87om76d0?oZKST00?o0000ojVhi?nY^>@00onY^>@01?nY]n?oooooooooool0001?ooooo`00 VOooool2o`0000Gooooo00?o0000ojVmj?nY_NP00onY_NP7oeRDkP[oXk_Z1OoBbm88om76d0?oZKST 00?o0000ojVhi?nY^>@01OnY]n<2ooooo`03o`000?oooooooooo04cooooo002Fooooo`?o00001Ooo ool9ojVmj0OoF9C^2_nS^nX3om;;dP[odLK@0_nY^>@00ol0003oZKOSojVgh`05ojVgh`;ooooo00?o 0000ooooooooool0C?ooool006Wooooo0_l00004ooooo`03o`000?oooooooooo00;ooooo0ol0000M ooooo`;o00001_ooool00oo8amWoZKgXojVmj009ojVmj0OoF9C^2_nS^nX00ooBbm;odLK@om76d008 om76d004om35d?nY]n?oZKOSo`0000SoZKOS0_ooool00ol0003oooooooooo`1;ooooo`00J?ooool0 1?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool000006Oooool3o`0000;ooooo 00?o0000ooooooooool00_ooool3olS7f@_oZKgX1_mHU>h9oj>kjP03oj:fiooAa]3odLK@00SodLK@ 0oo@aM000onY]n?o0000ojVgh`07ojVgh`?ooooo00?o0000ooooooooool0B_ooool006Sooooo00Co 0000oooooooooooo00001oooool01Ol0003ooooooooooooooooo000001Oooooo0_l00009ooooo`Go bCoGI;[oefBjomMT^/4oeRDkPGoXk_Z1OnR]^L8om76d0GodkoXk_Zoj:fi`08oj:f i`KodLK@1_o@aM000ol0003oZKOSojVgh`06ojVgh`05ojW7koooooooooooooooool000002?ooool2 o`0000Cooooo00Co0000oooooooooooooooo1Ol0000dooooo`00J?ooool01?l0003oooooooooool0 0007ooooo`03o`000?oooooooooo01?ooooo1?l0000:ooooo`[ob@01onY ^>@6oefBj`[oX[KW1OoAa]07om35d003o`000?nY]n?oZKOS00?oZKOS1OnYanl3ooooo`03o`000?oo oooooooo00Cooooo00Co0000oooooooooooo00002?ooool01?l0003oooooooooool0000dooooo`00 J?ooool01?l0003oooooooooool00008ooooo`03o`000?oooooooooo013ooooo0_l0000=ooooo`[o b@02?nY^>@7oefBj`[oX[KW0ooAa]08om35d003o`000?o@aM3oZKOS00Wo ZLO_0_ooool00ol0003oooooooooo`04ooooo`04o`000?ooooooooooo`0000Wooooo00?o0000oooo ooooool0=?ooool006Wooooo0_l0000:ooooo`;o00003Oooool3o`0000gooooo00?oY;_ZolS7fOo8 amT02?o8amT3olK3eP[oZKST1omMT^/:oj:fi`03om76d?o@aM3od@6oefBj`Wo X[KW00?oX[GVom35d?o@aM002?o@aM000ooFdmKo0000omKCeP0;ojW7k`;ooooo00?o0000oooooooo ool00_ooool01?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool00000=?ooool0 07oooooo0ol000000ooooooo0000ooooo`09ooooo`WoY;_Z1_o8amT6olK3ePWoZKST00CoZKOSoejA j_mNTN[oGY7Z1?mMT^/5oj:fi`GoX[GV2?o@aM02omKCeP03o`000?oFdmKoe]?F00WoZLO_00CoZKgX oooooooooooo00001?ooool01?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool0 0000=?ooool007cooooo0ol0000@5ojVgh`KoGY7Z 00?oGI;[oj:fionR]NH02?nR]NH6om35d0?oe]?F00Co0000omKCe_oFdmKoe]?F1OnYanl5ojVmj0?o 00001?ooool2o`0000Wooooo0ol0000eooooo`00N_ooool2o`0000cooooo1onT_>X9ojBkjP?obCoZKOSojVgh`06ojVgh`OoGY7Z2_nR]NH5om35d0Coe]?F00?o0000omKCe_oFdmH0 0_oFdmH00onYanooZKgXojVmj007ojVmj0;ooooo00?o0000ooooooooool0A?ooool007Oooooo1?l0 0007ooooo`CoOJ_a2_nT_>X9ojBkjP03olS7fOo6`mKoa/?F00Soa/?F00?oa/7FojVghonY]n<02?nY ]n<7oejAjP[oX[GV0oo@aM05omKCeP05o`000?oFdmKoe]?FomKCe_oBbm802onY_NP00ooooooo0000 ooooo`15ooooo`00MOooool2o`0000Cooooo00?o0000oooooonY_NP02OmmZo4:ojBljPKoY;_Z0onT ]nH9olK3eP?oa/7F2_nY]n<7oejAjP[oX[GV00?odX;ojBg iPGoa/?F1_o6`MH:ojVgh`OoGY7Z1OnR]NH5oj;4l@Koe]?F00?o0000om;;d_oBbm801OoBbm85ojVm j0GoXi_<00?oooooo`000?ooool0@oooool004Cooooo00Co0000oooooooooooo00002_ooool00ol0 003oooooooooo`0Hooooo`?o000000?oooooo`000?ooool00_ooool2ok_3h0[oZKgX2?mmZo45ojBl jPooY;OV0oo6`mH8olK1ePOoZKOS0onYanl4odfHlP?oGY7Z00?oX[GVoj;4lOnRa?401onRa?45omKC eP03o`000?oBbm;od/_B00Kod/_B00?oZKgXoj>Kc?nSVl`01_nSVl`00ooooooo0000o`000013oooo o`00A?ooool01?l0003oooooooooool00007ooooo`Go00005_ooool3o`0000Kooooo1Onk`n0:ojVm j0SoOJ_a00?oY;cZojBgi_nT]nH04OnT]nH00oo6`mKoa/7FolK1eP08olK1eP;oZKOS2?nYanl6odfH lP_oX/Ca0ooFdmH00ooBbm;o0000om;;dP06om;;dP03ol:Z`OnSVlcoXi_<00OoXi_<0_ooool00ol0 003oooooooooo`11ooooo`00A?ooool01?l0003oooooooooool00007ooooo`04o`000?oooooooooo o`0001Gooooo0_l00008ooooo`Oo^l?P2?nY_NP00onY^>CoOjK]ognVk@06ognVkA?oY;OV00?oY;GU olK1e_o6`MH02?o6`MH00oo;d=koZLO_ojW7k`09ojW7k`KoCISb2onRa?401?oFdmKod/_Bom;;d_l0 0006om;;dP?o`Z[12OnSVl`2ooooo`03o`000?oooooooooo043ooooo0014ooooo`04o`000?oooooo ooooo`0000Sooooo00?o0000ooooool000004_ooool4o`0000Oooooo2_nk`n04ojVmj0GoZKST2?mo Y^d?ojBgiPGoY;GU2?o6`MH3ol_@gP_oZLO_1_m=V?89oj;4l@05oj>kj_oBbm;od/_Bom;;d_l00000 1OoBbm84ol:Z`@WoXi_<0oooool00ol0003oooooooooo`0oooooo`00A?ooool01?l0003ooooooooo ool00009ooooo`;o00004?ooool2o`0000?ooooo00?o0000ooooooooool00oooool00onU_>Wo^l?P ok_3h00:ok_3h003ojVmj?nY^>CoZKST00KoZKST2?moY^d;ojBgiPWoY;GU1_o6`MH5ol_@gPWoZLO_ 00CoZKgXoeRDk_mHU>koF9C^1?m=V?85oj;4l@GoXk_Z0_oBbm800ol0003od/_Bom;;dP02om;;dPGo `Z[12OnSVl`3ooooo`03o`000?oooooooooo03oooooo0015ooooo`;o00002oooool00ol0003ooooo ooooo`0;ooooo`?o00002?ooool5ojFlj@[o^l?P00?o^[kMojVhi?nY^>@02?nY^>@7ognVk@WoY;OV 00?oY;KUojBeiOnT]ND02?nT]ND5olK1ePOobm3N1OnYanl5ojVmj0KoF9C^00?oCISboj;4lOnS^nX0 2?nS^nX00ooBbm;o0000om;;dP02om;;dPOo`Z[12OnSVl`3ooooo`03o`000?oooooooooo03kooooo 001Nooooo`;o00002?ooool9ojFlj@Oo^l?P1?nj_]d:ojVhi0OoOjK]1OnT]nH5ojBfi@[oY;GU0oo6 `MH9ol_@gP03ojW7konY_NSoZKgX00OoZKgX1_mHU>h;oj>kjP03o`000?oBbm;od/_B00So`Z[12OnS Vl`4ooooo`03o`000?oooooooooo03gooooo001Kooooo`?o00000_ooool00ol0003oooooooooo`02 ooooo`?oY[cY2_nU_>T4ok_3h0Oo^[kM2_nY^>@7ognVk@03ojBgi_nT]^GoY;KU00OoY;KU2_nT]ND0 0oo6`MKobm3Nol_@gP07ol_@gP03olS7fOnY_NSoZKgX00WoZKgX1_mHU>h:oj>kjP03o`000?oBbm;o `Z[100So`Z[12?nSVl`01?nW[]coooooooooooooool2o`0003oooooo001Hooooo`?o00001oooool7 ojJlj@[oYKcY00?o^l?PokZngOnj_]d01onj_]d9ojVhi003ojVghon0YNcoP:G/00GoP:G/2_nT]^D9 ojBei@03oj?5lOo;d=kobm3N00Oobm3N0oo8amT;ojVmj0KoF9C^2OnS^nX00ol0003o`Z[1ol:Z`@09 ol:Z`@CoXi_<1OnW[]`4ooooo`03o`000?oooooooooo03cooooo001Fooooo`;o00001_ooool2oiJg kP[oY[cY2?nU_>T00onU]nKo^[kMokZng@09okZng@GoZKST1OnY]n<7oh2Uk0[oY;KU1OnT]ND5oj?5 l@Oobm3N1Oo8amT9ojVmj004ojBKc?mcP=7oLh3Aog>0d@CoF9C^1OnS^nX4oinIc@03o`000?o2Z/7o `Z[100So`Z[100?oXi_T5ojFgiP_o^[kM00?oZKSTojVghonY]n<01onY]n<7oh2U k0[oY;KU00?oY;GUoj?5lOnSaO401onSaO45ol_@gPOobk j_nOVLd01_nOVLd00ol0003o`Z[1ol:Z`@08ol:Z`@[oYjkL1?ooool00ol0003oooooooooo`0koooo o`00DOooool2o`0000Cooooo00?o0000ojVmj?nY_NP02?nF]nh:ojJlj@03ojFljOnU]nKoYKOV00Ko YKOV2Onj_]d2okZmg0WoZKOS2?n0YN`7ojBfi@?oY0d@SoWiW=00?o0000oinIcOo2Z/401oo2Z/42olbmc0[oYjkL1?ooool00ol0003o ooooooooo`0jooooo`008_ooool2o`0000Cooooo00Co0000oooooooooooooooo1Ol0000Mooooo`?o 00001?ooool6ojVmj0SoU[O^2?nV_>T;ojFgiPKo^[kM1Onj_M`9ojVgh`SoP:G/0_nT]^D8ojC5l@[o XlGa00?obm3NolS7fOo8amT01oo8amT00onjY/GoY9_0d@KoWiW=00?o0000oinIcOnOVLd00oo2Z/48olbmc0GoYjkL1OnW [=/5ooooo`03o`000?oooooooooo00Cooooo00Co0000oooooooooooo00001oooool5o`0002?ooooo 000Qooooo`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`00000Cooooo`;o 00001_ooool8ok6oi@WoZKgX00?oZKSToiNbj_nG/^X01_nG/^X>ojFgiPGoYKKU2_nj_M`00onmc>Go ZLO_ojW7k`08ojW7k`SoMk;g1?nTaO45ojBljP[oY;_Z0oo8amT7okZVa@WoY9_<1omcP=46oinIc@05 o`000?nOVLgoWiW=oinIcOo2Z/402_o<_L`00onW[]coYjcKojN/f`06ojN/f`Gooooo00?o0000oooo ooooool01?ooool01?l0003oooooooooool00007ooooo`04o`000?ooooooooooo`0002Cooooo000Q ooooo`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`00000@ooooo`?o0000 0_ooool01Ol0003oooooooooooooooooYkgY00[o/KoU1OnY_NP5ojVhi0SoUk;Z2_nU]nH9ojFfi@So ^[gL0onmc>D:ojW7k`SoMk;g00?oYX01_nT_>X:ojBkjP03olS7fOnjY/Go^ZK500Ko ^ZK52_nTVl`7og>0d@GoWiW=00Co0000oinIcOnOVLgoXZcN2oo<_L`:ojN/f`Gooooo00?o0000oooo ooooool00oooool01?l0003oooooooooool00008ooooo`03o`000?oooooo000002Cooooo000Roooo o`;o00002Oooool3o`0000oooooo0_l00006ooooo`GoYkgY2_na_nD00onY_NSoZKSTojVhi007ojVh i0SoUk;Z1_nU]nHD8ojW7k`03ojVmj?mmZo7oOJ_a00KoOJ_a2_nT_>X7ojBk jP;oX9W=2_njY/D8ojBKc004ojN^g?mVS>?oIXcSofJOooool3o`00 00;ooooo00Co0000oooooooooooooooo3?nW_NT4ok6oi@Ko/;_Q2OnY^>@6oiNbjP;oUk3Y4onU]^D0 0onj_Mco_LcUokgT@ojFfi@?oYLK`2_nmc>D00onk`n3oZKgXojVmj008 ojVmj0SoOJ_a1?nT_>X>oj2Ic@So^ZK500?o`kWAojN^g?nW[]`02?nW[]`7ofJ[oYkgYojNmj@0?ojNmj@03ojNhiOn`^n7o/;_Q00Wo/;_Q1_nY^>@3ojVg h`SoUk3Y3?nU]^D7ojG6l0Oo_LcU1?nk`n0:ojVmj0SoOJ_a00?oY;cZoj2IcOnPVLd03_nPVLd7okZV a@?o`kWA2_nW[]`7ofJD;ok2kh@;oZKST1onY]n<8oiN`j@SoYKKU2onUa_04okgid@[oYjkL1omVS><2oj:/gP03o`000?nR[=koXZcN00Go XZcN00?oc;g[oY;cZ00KoY;cZ2_nW_NT8ojNhi@Wo/;_Q 00?o/;WQojVghonY]n<02?nY]n<8oiN`j@CoYKKU3onUa_000onmc>Go^l?Pok_3h008ok_3h0CoZKgX 1OnTVl`8ohR=dA7oX9W=1?njY/D6ol>id@[oYjkL1omVS><00onR[=ko0000oj:/gP04oj:/gP;oXZWL 2_o;^lX2okck`0?odl_B2_nY_NP00ooooooo0000ooooo`0cooooo`003_ooool2o`0001gooooo0_l0 0005ooooo`?oZKgX2OnT_>X6ojNmj@coYkSU1_n`^n44ok2ih@[oZKOS2?nG/>T00onU]^GoYLK`ojG6 l00=ojG6l0?oYKcY2onk`n000onY_NSoY9_X2ojNmjA3oYkSU1?n`^n46ok2ih@[oZKOS1?nG/>T4oi>om@coYLK` 1onU_>T9ok_3h003ok2Qb?nTVlcoY9_<00OoY9_<2?n8SM4Aoj2Ic@03okZVaOo3^M7o`kWA00Oo`kWA 1OnW[]`5ojN/f`OoIh_Q00?oXZWLo`000?nRZM`01_nRZM`7ol^kbP;o_?_01_oCbm85ojVmj0CoVWZ^ 0oooool00ol0003oooooooooo`0`ooooo`003Oooool01?l0003oooooooooool0000Fooooo`?o0000 0oooool00ol0003oZkgWoj^mi`09ojVmj0OoY;cZ00?oY;OVojNhiOnW^>D04OnW^>D00on`^n7o/;WQ ok2ih@07ok2ih@SoZKOS0_nYanl8oi>om@SoYLK`00?oY[cYojFljOnU_>T02?nU_>T6ok_3h0Co/:78 2?nTVl`8ohR=d@ooX9W=0_nS[=h;ol>id@03ojN^g?nW[=_oYjcK00KoYjcK2?mWRn400ol0003oXZWL oj:Yg006oj:Yg0Gobk_:0_nlnl08om?;dP03ojVmj?nJNZkoVWZ^00KoVWZ^0_ooool00ol0003ooooo ooooo`0`ooooo`003Oooool01?l0003oooooooooool0000Dooooo`;o00001?ooool6oj^mi`WoZKgX 1?nT_>X4ojBgiQ3oYkSU0_nV]n@;ok2ih@CoZKOS1_nYanl8oi>om@CoYLK`1OnV_>T:ojFlj@Co^l?P 1On`XLP8ojBKc0WoR8gA2_nPVLd7oj>/gPWo`kWA00?o`[O?ojN/fonW[=/02?nW[=/7ofN;h@03o`00 0?nRZMcoXZWL00KoXZWL1?o;^lX2okck`0Wodl_B2OnJNZh3ooooo`03o`000?oooooooooo02oooooo 000=ooooo`04o`000?ooooooooooo`00017ooooo0ol00004ooooo`WoZkgW2OnY_NP00onT_>[oY;OV ojBgiP05ojBgiPcoYkSU1_nV]n@;ok2ih@03ojVghonYanooZLO_00OoZLO_2?nC_oD00onUa_3oY[cY ojJlj@06ojJlj@[oYKcY00?o^l?Pok2Qb?n`XLP01_n`XLP8ojBKc0SoR8gA1_nPVLd/gPOo`kWA 0oo2]ll9ojN/f`OoIh_Q00?o0000oj:Yg?nRZM`01_nRZM`3ol^kbP;o_?_02OoCbm800on]QJ_oVWZ^ oiYj[P07oiYj[PCooooo00?o0000ooooooooool0;_ooool000gooooo00Co0000oooooooooooo0000 3oooool2o`0000?ooooo00Co0000oooooonX_NSoZ;gX2_n[_NL6ojVmj0;oZKST2OnT]nH8ojNhi@;o YkOT2?nV]n@9ok2ih@;o//W[2_nYanl4oi>om@?oU[O^2_nV_>T7ojFlj@;oXI[=2On`XLP8ojBKc0Wo R8gA0_nPVLd?oj>/gPGo`kWA1_o2]ll9ojN/f`KoIh_Q00?o0000oj:Yg?nRZM`01onRZM`00oo;^l[o _?_0oj:kj`09om?;dP?o[HF[2?nJNZh4ooooo`03o`000?oooooooooo02kooooo000>ooooo`;o0000 3Oooool3o`0000Cooooo1_nX_NP:oj^mi`;oZKgX1_nY^>@9ojBgiPCoYkSU1_nW]n@8ojJgi0Go/;WQ 1_nbbN/8ojW7k`03ojVmj?nF]nkoU[O^00KoU[O^2_nV_>T2ojFlj@OoXI[=2On`XLP8ojBKc0CoR8gA 1?n4WN@Boj>/gP?o`kWA1oo2]ll8ojN/f`?oA/Fg00GoZKgXofN;hOmWRn7oIh_Qo`000007oj:Yg0Ko X[_[1ooCbm84ojf5Z`WoVWZ^0oooool2o`0002oooooo000Jooooo`?o00001Oooool9ojRmj0SoZkgW 0_nZ^N@8ojVhi0WoY;OV00?oYkSUojNgi?nW]n@01onW]n@8ojJgi003ok2ihOnbbN_o//W[00So//W[ 1?nYanl5ojVmj0SoU[O^2?nV_>T:oj6Jc@Wo/:781_nTVl`2ojN^g0WoQ9gT4_nS[=h00oo3^M7o`[O? ol:gc`07ol:gc`CoYjcK0_m6aKL7ojVmj003oeRDk_l0003oIh_Q00;oXZWL0_mHU>h9oj:kj`Godl_B 1On]QJ/9oiYj[PGooooo00?o0000ooooooooool0;?ooool001Sooooo0_l00003ooooo`03o`000?oo oooooooo00?oZKgX2OnX_NP4oj^mi`KoZ[WT2?nY^>@6ojBgiP?oY;KU2_nW]n@6ojJgi0?oYlK`2_nb bN/00onYanooZKgXojVmj006ojVmj0SoU[O^1?nV_>T>oj6Jc@Wo/:780_nTVl`6ojN^g0SoQ9gT4OnS [=h00onSZ]co`[O?ol:gc`09ol:gc`03ojN/fom6aKOob@2ojBgiPOoY;KU2_nW]n@2ojJgi0OoYlK`2?nbbN/0 0ona_nGoZKgXojVmj008ojVmj0SoU[O^00?oY[cYoj6JcOnQV/d03_nQV/d8ok2Qb003okNde_nW[]co YjkL00OoYjkL2?n4WN@=oj>/gPGoXj[L2Oo2]ll2ojOfb@?ob/ gPSoXj[L2?o2]ll2ojOfb@Gob@6ojVgh`WoY;KU1?nW]n@?ojO6l003ok;9jona_nGo /KoU00Ko/KoU2?nY_NP00onTVlcoUiG?oiNEc`06oiNEca7oXI[=1?n`XLP6okNdePSoYjkL2?n4WN@6 oj>/gPcoXj[L1_o2]ll2ojOfb@CobkoX[_[oj:kj`06oiQh[PWo[HF[2OnJNZh6ooooo`;o00002?ooool2o`0000Cooooo00?o0000 ooooooooool00_ooool3o`0001Gooooo000Dooooo`03o`000?nY_NSo000000koZKgX2onX^>D8ojZi i003ojZghonY]n?oZKOS00OoZKOS2OnT]^D00onW]nCoYlK`ojO6l00=ojO6l0;oYkgY2_na_nD4ojVm j0GoY9_<1onGULlBoj6Jc@03ok2Qb?ng]=Ko]kCF00Ko]kCF2OnW[]`8ohBMi0;oXjcN3onSZ]`4ol:g c`?oYoK90_o8amT3o`0000Cob ojRhi@CoZ[WT1OnZ]n<9ojVgh`KoY;KU0onSaO4D00onZ^NCoZ[OSojZgh`06ojZgh`WoZKOS0_nT]^D7oj?5l@So YlK`2_nW_NT8ok6oi@03ojVMbonTVlcoY9_<00OoY9_<1onGULl=oj6Jc@GoY:gM2_ng]=H2ojN^g0Ko YjcJ2?n4W>8Aoj>Zg003ol:gconWm/Wo000000;o00002?o8amT2ojN2[0SoVWZ^0_n3Jjl00ol0003o Pf^_oh=[[`03oh=[[`SoV7R^2On]QJ/8oiYj[PSooooo00?o0000ooooooooool01?ooool01?l0003o ooooooooool00007ooooo`Co00005Oooool000cooooo00Co0000oooooooooooo00000oooool2o`00 00?ooooo1_nY_NP3ojVhi0ooZ;SU0onX]n@8ojZgh`SoZKOS0onYanl8oj?5l@CoYlK`3_nW_NT4ok6o i@GoZIg;2?nTVl`8oiNEc`WoXI[=2?nT[Md9okNdeP03okJbe?nW[=[oYjcJ00OoYjcJ1on4W>8?oj>Z g004ojBlj_l0003o0000o`0000CoY;cZ1Oo8amT5ojN2[0OoVWZ^0on3Jjl00ol0003oPf^_oh=[[`02 oh=[[`SoV7R^2On]QJ/9oiYj[PSooooo00?o0000ooooooooool00oooool01?l0003oooooooooool0 0007ooooo`03o`000?oooooooooo01Kooooo000D7ojRgi0SoZ[OS1?nY]n<7ojW7k`SoXlGa00?o YlK`ojNmjOnW_NT03onW_NT00ona_nGoZIg;ojVMb`05ojVMb`WoY9_<1onGULl6oj6Jc@coY:gM1ong ]=H3okJbe0SoYjcJ2?n4W>8;oj>Zg004ojBlj_l0003o0000o`0000SoY;cZ0oo8amT6ojN2[0SoVWZ^ 0_n3Jjl00ol0003oPf^_oh=[[`02oh=[[`WoV7R^2?n]QJ/9oiYj[PSooooo00?o0000ooooooooool0 0oooool01?l0003oooooooooool00008ooooo`03o`000?oooooooooo01Gooooo000X00oo8amWo Yh:/ojN2[005ojN2[0SoVWZ^0on3Jjl01?l0003oPf^_oh=[[on3Jjl9oiQh[PSo[HF[2?nJNZh00onV Y=Coooooooooo`06ooooo`;o00001Oooool2o`0000[ooooo0_l0000Eooooo`003?ooool01?l0003o ooooooooool00003ooooo`;o00001_ooool9ojVhi0CoZ;SU3_nX]n@6ojZgh`?oZlO^2_nYanl2oj?5 l@OoY;cZ2onW_NT5oj:Jc@SoZIg;2OnTVl`4oiNEc`?oV:OQ4_nT[Md3okNdePOo][;D2OnW[=X7ohBL hP;oXj[L0_mmZo401?nT_>[o0000o`000?l0000>ojBljP03oiQi[_nWPZcoYh:/00KoYh:/2?nJNZh4 oh=[[`04o`000?n3JjooPf^_oh=[[`SoV7R^2On]QJ/4oiYj[PGoYZCD2Oooool00ol0003ooooooooo o`0Uooooo`003Oooool2o`0000Cooooo00?o0000ooooooooool01_ooool9ojVhi003ojRhiOnX]nCo Z;OT00ooZ;OT0_nZ]n<8oj_7kPKoZLO_0_nY_NP:ojBljPKoYkgY2_nRV/d8ojVMb`OoY9_<00?oYjkL oiRWhOnHYn401_nHYn4BojB]g@03okNde_nf/]Co][;D00Oo][;D1onW[=X00om6aKOoZKgXojVmj003 ojVmj0GoOJ_a0_l0000>ojBljPCoV7V^2OnWPZ`7oiYj[PGoPf^_00?o0000oh=[[on3Jjl02?nHN:h9 ojf5Z`03oiYj[_nVY=CoYZCD00KoYZCD2Oooool00ol0003oooooooooo`0Uooooo`004oooool00ol0 003oooooooooo`07ooooo`KoZKST0_nY]nX2ojNm j@goXY[=2?nYWL/4ojBKc0GoYjkL2?nHYn4?ojB]g@;oY:_L2_nf/]@4ojN/fP;oA/Fg2?nY_NP01?mm Zo7o0000o`000?l00003ogf[l@[oY;cZ2?nHNJh8ojN2[0OoVWZ^1On3Jjl00ol0003oPf^_oh=[[`08 oiQh[PWo[HF[2_nVY=@9ooooo`03o`000?oooooooooo02Cooooo000Booooo`?o00002Oooool2ojVh i0KoZKOS3OnX]n@6ojW7k`SoZlO^00?oZkkWojVmj?nY_NP01onY_NP8ojBljP03oj2IcOnRV/goXY[= 00koXY[=2?nYWL/00onTVlcoYjkLojN^g006ojN^g0SoV:OQ2onT[Md6ojB[g0[o][;D00?oYjcJodK5 ]on4jS;1Onk`n02ojVmj0?o00001?nY_NP7ogf[l@;oY;cZ3_nHNJh8ojN2[0SoVWZ^1_n3Jjl00ol0003o V7R^oiQh[P07oiQh[PKo[HF[0oo7/lH:ojJTe0KoK1E800?oZKkXooooooooool00_l0000Tooooo`00 4_ooool00ol0003oooooooooo`0;ooooo`SoZKOS1_nX]n@=ojW7k`03oj_7k_n[_^OoZkkW00KoZkkW 2OnY_NP00onT_>[oX9W=oj2Ic@05oj2IcA3oXY[=1?nYWL/4ojj`fP[oYjkL2?nHYn42ojB]g@koY:_L 1_nf/]@3ohCXb`Go^l?P0ol00005ojVmj0;oVWZ^1on=LJl@oiQi[PSoYh:/2?nJNZh6oh=[[`03o`00 0?n3JjooV7R^00OoV7R^1On]QJ/5olNcaP[oYZCD1Om/5DP2ojVnj003ooooool0003o000002Cooooo 000Booooo`?o00003?ooool8ojVgh`;oZ;OT3onYanl3ojRmj0SoZkkW1_nY_NP2ojBKc0WoX9W=4?nR V/d00onYWL_o[[3Jojj`fP05ojj`fP[oYjkL1?nHYn43oiRUga7oY:_L1?nf/]@2ohCXb`Co^l?P0ol0 0003ok_3h0;oZKgX1OnJNZh7ohea[a7oV7V^2?nWPZ`7oiYj[POoPf^_00?o0000oiQh[_nHN:h01_nH N:h4ojf5Z`Ooak?62?nVY=@00onUX];oK1E8of`EB003of`EB0;oZKkX0oooool00ol0003ooooooooo o`0Qooooo`002Oooool5o`0000Cooooo00?o0000ooooooooool03Oooool6ojVgh`ooZLO_1onX_NP8 oj^ni`;oZKgX1_nTVl`8oj2Ic@koXY[=0_nU[Md9ojj`fPSoYjkL00?oYjcJoiRUgonHYMl01_nHYMlA ojB[g003okJbe?n4j<_oYKcY00;oYKcY00Co^l?Po`000?l0003o00001Onk`n000onROZgoVWZ^oiYj [P06oiYj[POoSG6_4?nHNJh8ojN2[0SoVWZ^1on3Jjl00ol0003oV7R^oiQh[P06oiQh[P;o[HF[2?o7 /lH5ojJTe0GoYJ;B0om/5DP4ojVnj0;ooooo00?o0000ooooooooool08Oooool000[ooooo00Co0000 oooooooooooo00001?ooool00ol0003oooooooooo`0>ooooo`;oZKOS3onYanl00onY_NSoZ;gXojRm j008ojRmj0KoZkkW2OnTVl`8oj2Ic@_oXY[=1_nU[Md9ojj`fPCoYjkL1OnW[=X8oiRUg`koY:_L00?o >K^`ojFljOnU_>T00_nU_>T3o`0000Ko^l?P0onROZd8oiYj[POoSG6_4?nHNJh8ojN2[0SoVWZ^1on3 Jjl00onHN:ko0000oiQh[P06oiQh[P03ojf5Zoo7/lKoak?600Soak?600?oYZCDojFRd_nUX]801_nU X]83of`EB0;oZKkX0_nFJil3ooooo`03o`000?oooooooooo023ooooo000;ooooo`03o`000?oooooo oooo00?ooooo0ol0000Aooooo`coZLO_1OnY_NP:ojRmj0;oZkkW3OnTVl`8oj2Ic@OoXY[=00?oYZgM ojF]gOnU[Md01onU[Md9ojj`fP03ojN^g?nW[=[oYjcJ00GoYjcJ2?nHYMl;ojB[g0?oY[cY0_nU_>T3 o`0000CoYKcY1?nk`n04oj9n[@SoVWZ^1on=LJl@oiQi[PSoYh:/1onJNZh01?nVY=CoKXKJofj6f_m^ Q]X5oh=[[`03o`000?nHN:koV7R^00?oV7R^0_nQX]D;olNcaPWoYJ;B0om/5DP4oiI[W`Cooooo00?o 0000ooooooooool07oooool000cooooo00?o0000ooooooooool00_ooool00ol0003oooooooooo`0B ooooo`WoZLO_2?nY_NP8ojRmj003oj>Kc?nTVlcoY9_<00goY9_<2?nPVLd4oj:Jc@GoYZgM2?nU[Md8 ojj`fP03ojf^f?nW[=[oYjcJ00OoYjcJ2?nHYMl6ojB[g003ocZl/OnV_>WoY[cY00?oY[cY0ol00008 ojFlj@03ok_3h?nROZgoXWj]00GoXWj]1onJNZh7ohea[a3oV7V^2OnWPZ`3oiYj[PGoYZCD1_m^Q]X0 0on3JjooV7R^o`000007oj6Re@Woak?60_o6/LD9ojFRdP;oK1E81OnFJil2ooooo`;o00008Oooool0 00Wooooo00Go0000ooooooooooooooooo`000003ooooo`03o`000?oooooooooo01?ooooo1_nYanl; ojVmj0CoZ;gX1OnSVl`?ojBKc0SoX9W=00?oXY[=ojJ]gOnV[Md01_nV[Md8ojF]g@Co[[3J1On][]P9 ojN/fPSoV:GO0_nTZm`2oiJgkPCoY[cY0ol00003ojJlj@KoYKcY0_nINJh8oj9n[@SoVWZ^1on=LJl@ oiQi[PSoYh:/00?oVWZ^ojJTe?nVY=@01OnVY=@7ofj6fP;oXJ;E00?o0000oj6ReOnQX]D01?nQX]D8 olNcaP?oa[752OnUX]82of`EB0GoUV^O1?ooool00ol0003oooooooooo`0Nooooo`002Oooool01Ol0 003ooooooooooooooooo000000?ooooo0_l0000Eooooo`;oZLO_3onY_NP00onX_NSoXi_Kc005 oj>Kc0ooY9_<1_nPVLd2oj>/gPWoYZgM2OnU[Md00on^/=[o[JkHojf^f006ojf^f0SoYjcJ1_nHYMl7 oiJgkP03ojJljOl0003o000000OoY[cY0_nU_>T5oiUi[PSoXWj]2?nJNZh7ohea[a3oV7V^1onWPZ`0 0onn[l_oYZCDojJTe007ojJTe0OoKXKJ00?oXJ;Eo`000?nQX]D01_nQX]D6olNcaPGoa[752?nUX]80 0om/5DSoUV^OoiI[W`04oiI[W`Cooooo00?o0000ooooooooool07_ooool000[ooooo0ol00004oooo o`03o`000?oooooooooo01Cooooo4?nY_NP:oj>Kc0ooY9_<0_nPVLd6oj>/gPWoYZgM1_nU[Md2ojF[ f`Wo[JkH2OnW[=X2oiRUg`?oZKgX1OnF]nh3o`0000SoY[cY2?nINJh8oj9n[@SoVWZ^1on=LJl@oiQi [PKoYh:/0onn[l/9ojJTe0KoKXKJ0_nQX]D00ol0003oXJ;Eoj6Re@05oj6Re@Coak?61_o6/LD9ojFR dPKoUV^O1Oooool00ol0003oooooooooo`0Mooooo`004Oooool00ol0003oooooooooo`0Eooooo`co ZKgX3OnSVl`>ojBKc0;oYjkL2?nS[=h9ojJ]g@;oYJgM1_nUZm/9ojf^f0KoYjcJ2?nY_NP01?nF]nko 0000o`000?l00004oiJgkPCoY[cY3?nINJh7oj9n[@SoVWZ^1on=LJl@oiQi[PCoYh:/1Onn[l/9ojJT e0OoKXKJ0_nQX]D00ol0003oXJ;Eoj6Re@04oj6Re@?oak?61oo6/LD7ojFRdPSoUV^O1_ooool00ol0 003oooooooooo`0Looooo`004?ooool00ol0003oooooo`00000Gooooo`SoZKgX00?oY9_Kc?nS Vl`03_nSVl`:ojBKc0KoYjkL2?nS[=h6ojJ]g@_oYJ_K2On][]P2ojN/fP03of7F`_na_nGo/KoU00Ko ZKgX0ol00008oiJgkP03ojJljOnINJkoVGV^00coVGV^2?nROZd8oiYj[POoSG6_4?nHNJh2ojN2[0Oo _Zo;2OnVY=@7ofj6fP;oXJ;E00?o0000oj6ReOnQX]D01?nQX]D00oo7/lKoa[75olJaa@07olJaa@;o YJ;B1?nQLYh9oiI[W`Gooooo0_l00008ooooo`;o00001?ooool00ol0003oooooooooo`02ooooo`?o 00001oooool0013ooooo0_l0000Iooooo`CoZKgX1OnTVl`?oj>Kc0KoY9_<0_nX[]`9ojN^g0SoXjcN 0_nV[Md>ojF[f`So[JkH00?oHMK2ok6oiOna_nD01?na_nD2ojVmj0?o00001?nY_NP4oiJgkP?oU7J^ 3onINJh8oj9n[@SoVWZ^1on=LJl@oiQi[P03ojN2[?nn[l_o_Zo;00Oo_Zo;1onVY=@01?nUX];oKhGH ofn5f?m_QMP4ofj6fP;oXJ;E00?o0000oj6ReOnQX]D00_nQX]D2oj6Pe0[oa[751_nQLYh9oiI[W`Ko oooo00?o0000ooooooooool01Oooool01?l0003oooooooooool00007ooooo`05o`000?oooooooooo ooooool000001_ooool0013ooooo00?o0000ooooooooool06Oooool00onY_NSoY9_oiQi[P;oXZ;E2_nn[l/4ojJT e0GoYJ;B1_m_QMP01?m^Q][oXJ;Eoj6ReOl00006oj6Pe0Soa[752?nQLYh8oiI[W`Oooooo00?o0000 ooooooooool01?ooool01?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool00000 1_ooool0013ooooo0ol0000Iooooo`WoY9_<3_nSVl`00onW[]coZ:kLojR^g007ojR^g0WoYjkL0_nS [=h5oj>Zg17oYJ_K00?o[JkHof7F`_ln_k<00_nW_NT4ok6oi@?o00000ona_nD2ojVmj0GoVWZ^1onD MZh?oiUi[PSoXWj]2?nJNZh7ohea[`[oV7V^1onRX]D:okj_b`03ojJTe?nUX];oYJ;B00GoYJ;B1om_ QMP3oj6Pe003o`000?nQX=CoXJ3D00?oXJ3D1oo6/LD9oj5bWPSoUV^O1oooool00ol0003ooooooooo o`04ooooo`04o`000?ooooooooooo`0000Sooooo0ol00007ooooo`004?ooool00ol0003ooooooooo o`0Jooooo`SoY9_<3?nSVl`4ojN^g0SoZ:kL2?nW[]`00onW[=[oXj[Loj>Zg006oj>Zg0koYJ_K0_ln _k<6ojNmj@?o00001Ona_nD00onMO:koVWZ^oiYj[P05oiYj[PSoU7J^3onINJh7oj9n[@WoVWZ^1on= LJl5oiQi[P_oXZ;E2Onn[l/00onm[LWoYJ;BojFRdP07ojFRdPOoKhGH0onQX=@00ol0003oXJ3Doj6P e003oj6Pe0Goa[750_nDJil8oj5bWPSoUV^O2?ooool00ol0003oooooooooo`03ooooo`04o`000?oo ooooooooo`0000Oooooo00Go0000ooooooooooooooooo`000006ooooo`002Oooool3o`0000Cooooo 00?o0000ooooooooool06oooool8ojBKc0WoXi_<1onW[]`8ojR^g0CoYjkL1OnW[=X7oj>Zg0_oYJ_K 00?o?[ncojNmjOnW_NT01OnW_NT3o`000003ojNmjOna_nGo/KoU00;o/KoU1?nMO:h8oiYj[POoU7J^ 3onINJh7oj9n[@WoVWZ^1on=LJl2oiQi[PooXZ;E1onn[l/3okf]b@SoYJ;B1om_QMP3oj6Pe003o`00 0?nQX=CoXJ3D00?oXJ3D1?o6/LD3oiA[W`SoXG:N2OnFJil7ooooo`;o00001?ooool01?l0003ooooo ooooool00007ooooo`05o`000?ooooooooooooooool000001_ooool000[ooooo00?o0000oooooooo ool00oooool00ol0003oooooooooo`0Looooo`OoY9_<1_nSVl`:ojN^g0WoZ:kL00?oYjkLojN/f_nW [=X01_nW[=X7oj>Zg0KoYJ_K0_lo`;<7ojNmj@?o00001OnW_NT00ona_nGoWGb^oiel[P05oiel[POo VWZ^1onDMZh?oiUi[PSoXWj]1onJNZh00onVY=CoQiGJohNEfP05ohNEfQ7oXZ;E1Onn[l/5okf]b@Wo YJ;B1om_QMP3oj6Pe003o`000?nQX=CoXJ3D00;oXJ3D0oo6/LD4oiA[W`SoXG:N2OnFJil6ooooo`03 o`000?oooooo000000Gooooo0_l00009ooooo`?o00001oooool000Oooooo1Ol00003ooooo`?o0000 7Oooool8ojBKc0;oXi_<3_nW[]`6ojR^g0;oZ:cJ2OnW[=X8oj>Zg0;oYJ_K00Co?l2cojBlj_nT_>[o Y;cZ1OnW_NT3o`0000OoYkgY00?oVGV^oiel[_nMO:h01_nMO:h7oiYj[POoU7J^3onINJh8oj9n[@Co VWZ^1OnVY=@7ohNEfQ3oXZ;E0onn[l/8okf]b@SoYJ;B1om_QMP4oj6Pe003o`000?nQX=CoXJ3D00;o XJ3D00?oa[75oiA[WonDJil00onDJil9oj5bWPSoUV^O2Oooool00ol0003oooooooooo`0Gooooo`00 1oooool01?l0003oooooooooool00004ooooo`03o`000?oooooooooo01kooooo1_nTVl`BojN^g0;o Z:kL1_nX[=X9ojN/fPKoXj[L00?oX01OnT_>X2ojNmj@;o00001onW_NT4oiUi[PSo WGb^1onJNZh7oiAf[PooVGV^2?nROZd00onJNZkoYZCDojJTe006ojJTe0OoQiGJ4OnRX]D00onn[l_o _Jg9okf]b@07okf]b@WoYJ;B1_m_QMP4oj6Pe004o`000?nQX=CoXJ3DohYSW`OoU6^O2OnQLYh8oiI[ W`[ooooo00?o0000ooooooooool05_ooool000Sooooo00?o0000ooooool000001?ooool00ol0003o ooooooooo`0Oooooo`;oY9_<5?nW[]`00onV[=_oZ:cJojR/fP07ojR/fPWoYjcJ0_nSZ]`00om6aKOo ZKgXojVmj007ojBljP?o00001OnW_NT9oiUi[POoWGb^1onJNZh8oiAf[PooVGV^1_nROZd00ondZ/oo YZCDojJTe008ojJTe0OoQiGJ3_nRX]D2oj:Pd`[o_Jg91onUX]800onMLIooUV^OoiI[W`04oiI[W`;o KhGH0_nQX=@2ohYSW`03o`000?n:HiooRV>O00SoU6^O2?nQLYh8oiI[W`[ooooo00?o0000oooooooo ool05_ooool000Wooooo0_l00004ooooo`;o00008?oooolCojN^g0GoYZcK2?nX[=X8ojN/fP03odK5 ]onY_NSoZKgX00CoZKgX0onT_>X3o`0000?oY;cZ0_nW_NTX2oiQi[PkoVGV^2?nMO:h7oiYj[POoU7J^3onI NJh00onROZgo]:[?okBZc`06okBZc`SoYZCD2?n7UMX6oj:Re@;oXZ7C2?nRX=<9okf]b@SoWG6O2?nF Jil6ohYSW`03o`000?nDJiooU6^O00KoU6^O2?nQLYh9oiI[W`_ooooo00?o0000ooooooooool05?oo ool000oooooo00?o0000ooooooooool08Oooool;ojN^g0GoYjcK2?nV[=/8ojR/fP03ojN/f_n[_^So ZkkX00CoZkkX0onY_NP3o`0000;oZKgX0_nT_>X5oiQi[PkoVGV^2?nMO:h7oiYj[POoU7J^3_nINJh0 0onSXmGo]:[?okBZc`07okBZc`WoYZCD2?n7UMX2oj:Re@KoXZ7C2?nRX=<7okf]b@03oiE[WonMLIoo WG6O00KoWG6O2?nFJil6ohYSW`03o`000?nDJiooU6^O00KoU6^O2OnQLYh8oiI[W`_ooooo00?o0000 ooooooooool05?ooool000kooooo00?o0000ooooool000008_ooool9ojN^g0SoYjcK2?nV[=/6ojR/ fPSoZkkX0ol00004ojVmj003oiYj[_nHNJkoV7V^00GoV7V^3onINJh7oiel[POoVWZ^1onDMZh;oiUi [PGoXj?E2OndZ/l6ojJTe0;oYJ;B2?n7TmP8oj:Qd`WoXZ3C1?nm[LT4oiE[W`SoWG6O1onFJil7ohYS W`03o`000?nDJiooU6^O00GoU6^O2OnQLYh8oiI[W`Kooooo0_n5@WD4ooooo`03o`000?oooooooooo 01?ooooo000>ooooo`;o00009?ooool6ojN^g0;oYjcJ2?nW[=/9ojJ/f`;oZ:cJ00CoA<>fojRmj?nX _NSoZ;gX1?n[_^P3o`0000;oZkkX0_nY_NP4oiYj[PSoV7V^3_nINJh8oiel[PKoVWZ^2?nDMZh8oiUi [POoXj?E2_ndZ/l2ojJTe0KoYJ;B2?n7TmP8oj:Qd`SoXZ3C0onm[LT5oiE[W`SoWG6O1onFJil8ohYS W`03o`000?nDJiooU6^O00GoU6^O2?nQLYh8oiI[W`;ooooo1_n5@WD00onY_^Soooooooooo`02oooo o`03o`000?oooooooooo01;ooooo000>ooooo`03o`000?oooooooooo02Cooooo0_nW[]`6ojN/fPSo YjcK1_nV[=/2odC3]POoZ;gX0ol00004oj^nj003oi]j[_nJNZkoVWZ^00GoVWZ^1onHNJh>oiUi[PSo WGb^1onJNZh7oiAf[PGoVGV^2onSXmD8okBZc`03ok>Xc_nUX];oYJ;B00KoYJ;B2?n7TmP9oj:Qd`So XZ3C00?o_Jg9oiE[WonEJil01?nEJil8oieaW`OoUV^O2?n:Hil00ol0003oU6^OoiA[W`05oiA[W`So XG:N2OnFJil7ohE2M@03ojVnj?oooooooooo00;ooooo0_l0000Cooooo`003_ooool00ol0003ooooo ooooo`0Tooooo`WoYjcJ2?nW[=/2ojJ/f`;oA<>f0_nY_NP5ojRmj0?o000000?oZ;gXoj^nj?n[_^P0 0_n[_^P3oi]j[POoVWZ^1onHNJh>oiUi[PSoWGb^1onJNZh7oiAf[P;oVGV^3onSXmD5okBZc`Co/jS> 2?nUX]88ohNCf0SoXZ7C1_nRX=<9oiE[W`SoWG6O2?nFJil7ohYSW`03oiA[Wol0003oU6^O00GoU6^O 2?nQLYh9oiI[W`OoQD9e0_nY_^P4ooooo`03o`000?oooooooooo017ooooo000>ooooo`?o00009Ooo ool9ojN/fPKoYjcK0_m4`kH6ojVmj004ojRmj?l0003o0000o`0000GoZ;gX00?oZkkXoi]j[_nKNZh0 0onKNZh7oiYj[POoV7V^3onINJh7oiel[POoVWZ^1?nDMZh3oiRNf17oXj?E1?ndZ/l5ok>XcPWoYJ;B 1on7TmP9oj:Qd`;oXZ3C3?nEJil8oieaW`SoUV^O1on:Hil2oiA[W`03o`000?nDJiooU6^O00?oU6^O 2OnQLYh8oiI[W`OoQD9e0_nEIiX4ooooo`03o`000?oooooooooo017ooooo0006ooooo`?o00001Ooo ool00ol0003oooooooooo`0Vooooo`WoYjcJ0_nW[=/00om4`kKoZKgXojVmj006ojVmj0?o00001_nX _NP2oiYj[POoVgZ^1_nJNZh7oiQi[PooVGV^2?nMO:h5oiYj[P03ojJTe?nHW]SoV9kH00KoV9kH4OnS XmD00ondZ/oo/jS>ok>XcP06ok>XcPSoYJ;B1on7TmP7oj:Qd`;oSfJO3_nEJil9oieaW`OoUV^O2?n: Hil2oiA[W`03o`000?nDJiooU6^O00;oU6^O2OnQLYh8oiI[W`OoQD9e0_nEIiX5ooooo`03o`000?oo oooooooo013ooooo0005ooooo`05o`000?ooooooooooooooool000001?ooool00ol0003ooooooooo o`0Vooooo`SoYjcJ00?oA/FgojVmj?nY_NP01onY_NP2o`0000CoZKgX0_nX_NP5oiYj[POoVgZ^1onJ NZh7oiQi[PkoVGV^2?nMO:h2oiYj[PGoYZCD2?nHW]P>oj>Se@;oXj7C2_ncZO0_nDJil00ol0003oU6^OoiA[W`03oiA[W`SoXG:N2?nF Jil7ohE2M@;oUFNJ1_ooool00ol0003oooooooooo`05ooooo`?o00001oooool000Gooooo00Go0000 ooooooooooooooooo`000003ooooo`03o`000?oooooo000002Sooooo1?nW[=X01?m6aKOooooooooo ooooool6ojVmj0?o00001OnY_NP9oiYj[PKoVgZ^1onJNZh7oiQi[PkoVGV^1onMO:h00on/Y];oYZCD ojJTe006ojJTe0OoV9kH2onSXmD6oj>Qd`Wo/jS>1_nUX]83oiY^W`OoUV^O1on?IYl?oiE[W`SoWG6O 1onFJil8ohYSW`?oU6^O00?o0000oiA[WonDJil00_nDJil8oj5bWPWoUV^O1_n5@WD3oiEWVPGooooo 0_l00007ooooo`03o`000?oooooooooo00Kooooo0005ooooo`Co00001?ooool2o`0002[ooooo00?o YjcJooooooooool01Oooool2ojVmj0?o00001OnY_NPSe@[oXj7C2_ncZO1?nDJil01?l0003oU6^OoiA[WonDJil8oj5bWPWoUV^O1_n5@WD3oiEWVPKooooo 00?o0000ooooooooool01Oooool00ol0003oooooooooo`06ooooo`001Oooool00ol0003ooooooooo o`05ooooo`03o`000?oooooooooo033ooooo0ol00005ojVmj0ooVWZ^1_nKNZh7oiYj[POoV7V^3onI NJh00onMO:ko[:KBojbVdP05ojbVdPSoYZCD2?nHW]P2oj>Se@koXj7C2?ncZXcPCoUF^O1onJKYl7oiI[W`OoSfJO3onEJil8oieaW`SoUV^O1on:Hil5 oiA[W`03o`000?nDJiooU6^O00WoXG:N1?nFJil5ojBKc@GoQD9e0onEIiX7ooooo`03o`000?oooooo oooo00Cooooo00?o0000ooooooooool01_ooool000Oooooo0_l00004ooooo`;o0000:oooool3o`00 00Kooooo5?nJNZh7oi]j[POoVWZ^1onHNJh9oiUi[PKoY:?D2?n/Y]87ojJTe003ojFRd_nHW=KoV9cF 00KoV9cF4?nSXM<4ok>XcPGoUF^O1onJKYl8oiI[W`OoSfJO3onEJil8oieaW`OoUV^O2?n:Hil5oiA[ W`03o`000?nDJiooU6^O00SoXG:N00?oUV^OojBKcOnTVld01_nTVld5ohE2M@?oUFNJ2?ooool00ol0 003oooooooooo`02ooooo`;o00002?ooool000gooooo00?o0000ooooooooool09oooool3o`0000Wo oooo5OnJNZh6oi]j[POoVWZ^1onHNJh5oiUi[P_oY:?D1on/Y]84ojJTe0GoYJ;B1onHW=HAoj>Qd`03 ok>Xc_nEJiooUF^O00GoUF^O1onJKYl8oiI[W`OoSfJO3onEJil8oieaW`OoUV^O2?n:Hil6oiA[W`03 o`000?nDJiooXG:N00KoXG:N00?o`j[1ojBKcOnTVld01onTVld5ohE2M@CoUFNJ1_ooool3o`0000Co oooo00?o0000ooooooooool01_ooool000cooooo00?o0000ooooooooool09Oooool3o`0000cooooo 5OnJNZh6oi]j[POoVWZ^1onHNJh2oiUi[PkoY:?D2?n/Y]800onVY=CoYJ;BojFRdP05ojFRdPSoV9cF 3_nSXM<:oiE[W`SoVVjO1onFJil7ohmVW`ooUF^O2?nMLIl7oiI[W`SoRV>O1_nDJil00ol0003oU6^O oj5bWP05oj5bWP?o`j[12OnTVld4ohE2M@CoUFNJ0oooool3o`0000;ooooo00?o0000ooooooooool0 2oooool000cooooo0ol0000Rooooo`?o00004?oooolDoiYj[PKoVgZ^2?nJNZh5oiQi[P03oj:ReOnT XmCoY:?D00ooY:?D1_n/Y]800on[YM3oYJ;BojFRdP07ojFRdPSoV9cF2_nSXM<=oiE[W`SoVVjO1onF Jil7ohmVW`ooUF^O2?nMLIl7oiI[W`SoRV>O1onDJil00ol0003oXG:Noj5bWP03oj5bWPCo`j[12OnT Vld4ohE2M@CoUFNJ0ol00005ooooo`03o`000?oooooooooo00_ooooo000oiE[W`SoVVjO1onFJil7 ohmVW`ooUF^O2?nMLIl8oiI[W`OoRV>O2OnDJil00ol0003oXG:Nol>Z`@06ol>Z`@WoY9_=0on5@WD4 oiEWVPSooooo00?o0000ooooooooool02oooool000cooooo0ol0000Jooooo`;o00006OoooolEoiYj [PKoVgZ^0_nJNZh6ojJTe0OoXZ;E2onTXm@6ojBQd`OoZjG@2OnUX]84oiRLePGoUVbO1_nBJIl?oiE[ W`OoVVjO1onFJil7ohmVWa3oUF^O2?nMLIl7oiI[W`SoRV>O2?nDJil00ol0003o`j[1ol>Z`@06ol>Z `@SoY9_=00CoY9[;ohE2MOn5@WGoQD9e1OnEIiX8ooooo`03o`000?oooooooooo00[ooooo0004oooo o`?o00001Oooool00ol0003oooooooooo`0Gooooo`?o00006ooooolEoiYj[PGoVgZ^00?oYjCCojJT e?nVY=@01onVY=@7oj:Re@OoY:?D00?oY:;CojBQdonTXM<01_nTXM<8oj^Ud0KoYJ;B1?nHKIl7oiI/ W`KoTVVO3onEJil7oiY^W`SoUV^O1on?IYl?oiE[W`SoWG6O1OnFJil2ojBKc@?oM87B1On:Hil6oiA[ W`;oX9W>00?o`j[1o`000?o3Z/401_o3Z/45ojBKc@GoY9[;0_n5@WD5oiEWVPSooooo00?o0000oooo ooooool02_ooool000?ooooo00Go0000ooooooooooooooooo`000003ooooo`03o`000?oooooooooo 01Gooooo0ol0000OoooooaCoVWZ^0_nKNZh5ojNTd`SoYZCD1onRX]D4ojBSe0GoY:;C2?nTXM<8oj^U d0;oYJ;B1onHKIl7oiI/W`KoTVVO3onEJil7oiY^W`SoUV^O1on?IYl?oiE[W`SoWG6O0_nFJil6ojBK c@KoM87B00?oRV>OoiA[WonDJil01onPVLh00oo3Z/7o0000ol>Z`@06ol>Z`@03ojBKcOnTV/_oY9[; 00KoY9[;0_n5@WD5oiEWVPCooooo0_n00?o`j[1o`000?o3Z/401Oo3Z/400oo2ZL7oY9[;ojBJb`07ojBJ b`;oQD9e1OnEIiX00oooooooS4n1oha?P@03oha?P@03ojVnjOoooooo000000cooooo0004ooooo`?o 00001?ooool2o`00013ooooo0ol0000Uoooooa3oVWZ^1OnUY=@7ojNTd`WoYZCD0onRX]D3oj:Qd`Wo Y:;C2?nTXM<4oj^Ud0GoUV^O1onHKIl7oiI/W`OoTVVO3_nEJil8oiY^W`OoUV^O1on?IYl?oiE[W`Ko WG6O0onjY/D8ojBKc@OoM87B2?nPVLh2ol>Z`@03o`000?o3Z/7o`j[100;o`j[10oo2ZL49ojBJb`03 ohE2MOnEIi[oUFNJ00?oUFNJ1_nZ`@03 o`000?o3Z/7o`j[100Co`ZW12OnTV//00on5@WGoUFNJoiEWVP04oiEWVPGoS4n10_nY_^T00ol0003o ooooooooo`0:ooooo`000oooool01Ol0003ooooooooooooooooo000000?ooooo00?o0000oooooooo ool02Oooool3o`0002_ooooo2OnJNZh=ojFTe0SoYjCC0_nVY=@6ojFRdPOoXZ7C2?nTX]<6ojBQd`[o UV^O1onHKIl7oiI/W`OoTVVO3_nEJil8oiY^W`OoUV^O1on?IYl@oiE[W`?oWG6O1OnjY/D9ojBKc@Oo M87B2?nPVLh3ol>Z`@03o`000?o2ZL7o`ZW100Co`ZW12?nTV//00on5@WGoUFNJoiEWVP04oiEWVPGo S4n10_ooool00ol0003oooooooooo`0:ooooo`001?ooool3o`0000Cooooo0_l00007ooooo`?o0000 ;oooool5oiYj[P03ojJTe?nUY=CoYJCD00koYJCD1_nWY=<00onVX];oYJ;BojFRdP06ojFRdPOoXZ7C 2OnTX]<2ojBQd`goUV^O1onHKIl7oiI/W`OoTVVO3onEJil7oiY^W`OoUV^O1on?IYl@oiE[W`;oWG6O 1onjY/D8ojBKc@OoM87B2?nPVLh3ol>Z`@03o`000?o2ZL7o`ZW100Co`ZW12OnTV//6oiEWVPGoS4n1 0oooool00ol0003oooooooooo`09ooooo`002oooool00ol0003oooooooooo`03ooooo`?o0000<_oo ool3oiYj[PCoYZCD3onUY=@4ojNTd`CoYZ;B2?nUX]87oj:Qd`KoY:;C1OnEJilZ`Oo2ZL7o`ZW1o`0000Ko`ZW11onTV//7oiEWVPGoS4n10oooool00ol0003ooooo ooooo`09ooooo`002_ooool01?l0003oooooooooooooool3o`0003Gooooo00?oVWZ^ojJTe?nVY=@0 1?nVY=@@ojFTe003ojNTdonVX];oYZ;B00CoYZ;B2OnUX]87oj:Qd`;oY:;C2?nEJil=oiI[W`KoV6fO 2?nFK9l6oi9YW`ooUF^O1onJKYl8oiI[W`OoSfJO3OnEJil2oj6Jc@Wo^ZK51onTVld2ojBJb`?oMH3@ 1?mdPM86oj2IcP;oWiS<1?o2ZL400ol0003o`ZW1ol:Y`@03ol:Y`@CoY9[;0_nLJiT8oiEWVPKoS4n1 0_ooool00ol0003oooooooooo`09ooooo`002_ooool4o`0003Sooooo2?nVY=@>ojFTe003ojFRd_nV X];oYZ;B00KoYZ;B2?nUX]86oj:Qd`CoUVbO1onEJil=oiI[W`OoV6fO1onFK9l6oi9YW`ooUF^O2?nJ KYl7oiI[W`OoSfJO2OnEJil7oj6Jc@Wo^ZK50_nTVld7ojBJb`KoMH3@00?oM87Boj2Ic_nPVLh01_nO V<`3ol:Y`@03o`000?o2ZL7o`ZW100Co`ZW100?oY9[;oia[VOnLJiT00onLJiT8oiEWVPGoS4n10_oo ool00ol0003oooooooooo`09ooooo`002_ooool2o`0003_ooooo2?nVY=@:ojFTe0GoYJ;B2?nVX]88 ojFRdP;oXZ7C1onFK9l7oiE[W`goUV^O1onHKIl7oiI/W`OoTVVO3_nEJil8oiY^W`OoUV^O1on?IYl4 oiE[W`coXI[=2?njY/D00onjYLCoY9[;ojBJb`07ojBJb`OoMH3@2?nOV<`4ol:Y`@03o`000?o2ZL7o `ZW100?o`ZW11_nLJiT8oiEWVPGoS4n10_ooool00ol0003oooooooooo`09ooooo`003?ooool00ol0 003oooooooooo`0iooooo`OoYZCD1_nUY=@:ojFRdPOoYZ;B1_nUX]8;oiI/W`OoUF^O3OnFJil7oiQ] W`OoUVbO1onBJIl>oiE[W`SoVVjO1OnFJil2ojBKc@OoRHkA4?nQV/d7okZVa@?o^ZG42?nTV//8ogF0 d0SoWiS<1?o2ZL401?l0003o`ZW1ol:Y`Oo2ZL47oia[V@SoUFNJ1On?ooool6ojJTe17oYJ;B1_nVX]84oiI[W`goUVbO1onEJil=oiI[W`OoV6fO1onFK9l7oi9YW`oo UF^O1_nJKYl00onaX/SoY9_=ojBKc@06ojBKc@OoRHkA4?nQV/d4okZVa@Ko^ZG42?nTV//7ogF0d0So WiS<1Oo2ZL400ol0003oU6JJoia[V@07oia[V@SoUFNJ1OnOooool2ojJTe1GoYJ;B0_nVX]87oiI[W`goUVbO1onEJil=oiI[W`OoV6fO 1onFK9l7oi9YW`ooUF^O1?nJKYl4ok6Rb0OoY9_=2?n9S]4?oj6Jc@?o^ZK51onjYL@8ojBJb`SoMH3@ 2?nOV<`4ol:Y`@03oiAVV_l0003oW6^I00SoW6^I1onEIiX5oha?P@?ooooo00?o0000ooooooooool0 2?ooool0017ooooo00?o0000ooooooooool0=_oooolEojFRdPcoUV^O3?nFK9l7oiE[W`koUV^O1_nH KIl7oiI/W`OoTVVO3onEJil3oiY^W`Go/J;82?nTVld7ohV>dA3oXI[=00?o^ZK5okZUa?njYL@01onj YL@8ojBJb`OoMH3@2?nOV<`3ol:Y`@?oU6JJ00?o0000oia[VOnLJiT01_nLJiT8oiEWVPCoS4n10ooo ool00ol0003oooooooooo`08ooooo`004_ooool00ol0003oooooooooo`0foooooa7oYJ;B0_nFK9l= oiI[W`coUVbO2?nEJil=oiI[W`KoV6fO1onFK9l7oi9YW`ooUF^O00?oVVjOok6Rb?naX/P01OnaX/P8 ojBKc@SoRHkA3?nQV/d3oj2Hc0[o^ZG41_nTV//2oiYZV@?oUFNJ1?meP=09oinHc003ol:Y`OnDIY[o U6JJ00?oU6JJ00?o0000oia[VOnLJiT01OnLJiT8oiEWVPCoS4n10oooool00ol0003oooooooooo`08 ooooo`004oooool00ol0003oooooooooo`0fooooo`goYJ;B1OnFK9l=oiI[W`coUVbO2?nEJil=oiI[ W`KoV6fO2?nFK9l7oi9YW`coUF^O0_nRV/d9ok6Rb0OoY9_=2?n9S]46oj6Jc@;oXIS<2?nPV<`:okZU a0;oY9[;1OnJJYT7oiEWVP03ogF0d?nOVHYX8oiAVVP03o`000?nLJiWoW6^I 00GoW6^I2?nEIiX4oha?P@?ooooo00?o0000ooooooooool02?ooool001Cooooo0_l0000fooooo`[o YJ;B00?ooooooiI/WonFK9l01OnFK9l=oiI[W`goUVbO1onEJil=oiI[W`KoV6fO2?nFK9l7oi9YW`Wo UF^O1_nRV/d8ok6Rb0SoY9_=2?n9S]42oj6Jc@KoXIS<1onPV<`9okZUa0SoVVZI2?nEIiX6ohiRVPSo U6JJ00?oW6^Io`000?nLJiT01OnLJiT8oiEWVPCoS4n10oooool00ol0003oooooooooo`08ooooo`00 5_ooool00ol0003oooooooooo`0dooooo`KoYJ;B1?ooool7oiI/W`goUV^O3OnFK9l7oiE[W`goUV^O 1onHKIl7oiI/W`OoTVVO1OnEJil:oj:Jc@So/J;81_nTVld2ojBJb`SoRXc@2?nQV<`8oj2Hc0Oo^ZG4 00?oU6JJoiYZVOnJJYT01_nJJYT8oiEWVPOoSV:J1onDIYX2oia[V@03o`000?nLJiWoW6^I00?oW6^I 2?nEIiX4oha?P@?ooooo00?o0000ooooooooool02?ooool001Oooooo00?o0000ooooooooool0=?oo ool2ojFRdPOooooo1onFK9l=oiI[W`goUVbO1onEJil=oiI[W`OoV6fO1onFK9l7oi9YW`;oUF^O3_nR V/d8ok6Rb0;oY9_=1_nTV//8ohZHYX8oiAVVP?oW6^I00?o0000oia[ VOnLJiT00_nLJiT8oiEWVPCoS4n10oooool00ol0003oooooooooo`07ooooo`006oooool00ol0003o ooooooooo`0jooooo`KoUVbO3OnFJil=oiI/W`OoUF^O3_nFJil6oiQ]W`;oUVbO1_nTVld7oiRFca3o XY[=00?o/J;8ok2Paon`XoiI[W`Go V6fO00?oZIk;ojBKcOnTVld01_nTVld8oiRFc`koXY[=00?oXIWoiAVVPSoVVZI2?nEIiX6ohiRVPSoU6JJ1OnLJiT00ol0003o W6^Ioia[V@09oiEWVP?oS4n10oooool00ol0003oooooooooo`07ooooo`007_ooool2o`0003Sooooo 1onFK9loiAVVPSoVVZI2?nEIiX7ohiRVPOoU6JJ 1_nLJiT00ol0003oW6^Ioia[V@08oiEWVP?oS4n10oooool00ol0003oooooooooo`07ooooo`008?oo ool00ol0003oooooooooo`0eooooo`OoUVbO3?nFJil>oiI/W`OoUF^O2?nFJil6oj>Kc@OoZIk;2?nT Vld8oiRFc`;oXY[=1_nRVL`7oj6Ic0So/:371?nTV//5oiQXVPOoUFNJ1onAI9X>oiAVVPSoVVZI2?nE IiX7ohiRVPSoU6JJ1OnLJiT00ol0003oW6^Ioia[V@08oiEWVP?oS4n10oooool00ol0003ooooooooo o`07ooooo`008Oooool00ol0003oooooooooo`0dooooo`OoUVbO3?nFJil>oiI/W`OoUF^O1OnFJil9 oj>Kc@SoZIk;2?nTVld4oiRFc`?oV9C>2?nRVL`7oj6Ic0Wo/:3700?oY9[;oiQXV_nHJ9X01OnHJ9X7 oiEWVPOoTFBJ3onDIYX7oiYZV@SoUFNJ1on>HYX8oiAVVPKoW6^I00?o0000oia[VOnEIiX01onEIiX3 oha?P@?ooooo00?o0000ooooooooool01oooool002;ooooo00?o0000ooooooooool0HYX8oiAVVPOoW6^I00?o0000oiEW V_nEIiX01_nEIiX3oha?P@Cooooo00?o0000ooooooooool01_ooool002?ooooo0_l0000cooooo`Oo UVbO3OnFJil=oiI/W`GoUF^O0_nQV/h?oj>Kc@SoZIk;0_nTVld6ojBJb`OoV9C>2?nRVL`7oj6Ic0Co /:371OnEIYX7oiQXVPOoUFNJ1onAI9X?oiAVVPOoVVZI2?nEIiX7ohiRVPSoU6JJ2?nLJiT00ol0003o UFNJoiEWVP06oiEWVP;oS4n11?ooool00ol0003oooooooooo`06ooooo`009Oooool00ol0003ooooo ooooo`0`ooooo`OoUVbO3OnFJil=oiI/W`;oUF^O1_nQV/h>oj>Kc@OoZIk;00?oZIc9ojBJbonTV//0 1_nTV//7oiRDcPSoXYW<2?nQVL`00on`Xoj>Kc@CoZIk;1OnYW1onRVL`6oj6Ic0[oUFJJ1onH J9X8oiEWVPOoTFBJ3_nDIYX8oiYZV@SoUFNJ1_n>HYX8oiAVVPWoW6^I00?o0000oiEWV_nEIiX01OnE IiX2oha?P@Cooooo00?o0000ooooooooool01_ooool002Oooooo00?o0000ooooooooool0;_ooool7 oiI/W`goUV^O2OnFK9l5ojBKc@SoXI[>3_nSVld00onYW/_oZIc9ojVLb@05ojVLb@SoY9[;1onHUoiAVVPSoVVZI2?nEIiX7ohiRVPSoU6JJ2?nLJiT0 0onEIi[o0000oiEWVP03oiEWVP;oXiC60_nKc@?oXYW<2OnYW1_nRVL`4oi=UVPkoUFJJ1onHJ9X7oiEWVPOoTFBJ3_nDIYX8oiYZV@SoUFNJ1on>HYX8oiAV VPSoW6^I0_nEIiX00ol0003oXiC6oj>DaP04oj>DaP03oha?POoooooooooo00;ooooo00?o0000oooo ooooool01_ooool002[ooooo00?o0000ooooooooool0;?ooool7oiI/W`coUV^O0_nFK9l6ojFLc0Oo Y9_=1onQV/h6oj>Kc@;oXiW<1onRVL`9ojVLb@OoY9[;1onHUoiAVVPSoVVZI2?nEIiX7ohiRVPSoU6JJ2?nLJiT2oj>DaP03o`000?nSUoiEVVPOoV6RJ1onEIiX7oi5TVPooU6JJ1onJJYT8oiEWVPOoSV:J 2?nDIYX7oia[V@;o_Z>m0_nSUDaP03oj>DaP;oS4n10oooool00ol0003ooooo ooooo`06ooooo`00;?ooool00ol0003oooooooooo`0Zooooo`OoUVbO2?nFJil5ojBKc@SoYIc<1onT Vld6oj6JcP03oj2Hc?nSVLcoXiW<00KoXiW<1onRVL`9ojVLb@;oY9[;1_nFIiX7oiEWVPOoTfFJ3_nE IYX7oiQXVPOoUFNJ1onAI9X?oiAVVPOoVVZI2?nEIiX7ohiRVPSoU6JJ1_nLJiT3okjS_@?oXiC600?o 0000oj>Da_nSUDa_nSUoiEV VPOoV6RJ2?nEIiX7oi5TVPkoU6JJ2?nJJYT8oiEWVPKoSV:J2OnDIYX3oia[V@Ko_Z>m0onSUDaP02oj>DaP03oha?POoooooooooo00;ooooo00?o0000ooooooooool01Oooool0033o oooo00?o0000ooooooooool09_ooool2oiI/WaCoY9_=1onUW<`2ojBKc@KoY9[;1onPV<`8oj>Ic0Oo XYW<00?oZIc9oiEWV_nEIiX01_nEIiX7oiIWVPKoUFNJ1onCIIX>oiEVVPOoV6RJ2?nEIiX7oi5TVPko U6JJ2?nJJYT8oiEWVPOoSV:J2?nDIYX2oia[V@Oo_Z>m1?nSUDaP02oj>DaPCo oooo00?o0000ooooooooool01Oooool0037ooooo00?o0000ooooooooool09OoooolFojBKc@KoYIc< 00?oYI[;ojBJbonTV//01_nTV//7oj2Hc0SoXiW<1_nRVL`:oiEWVPOoUVNJ1_nEIiX7oi=UVPkoUFJJ 2?nHJ9X7oiEWVPOoTFBJ3_nDIYX8oiYZV@KoUFNJ0_nSUm okjS_@06okjS_@GoXiC600Co0000oj>Da_nSUDa_ooool01Oooool00ol0003ooooo ooooo`05ooooo`00=?ooool00ol0003oooooooooo`0SoooooaGoY9_=00?oXi[;ojFJbonUV//01OnU V//8ojBJb`OoX9S<1_nSVL`4oiAVVPgoUFNJ1onFIiX7oiEWVPOoTfFJ3_nEIYX7oiQXVPOoUFNJ1onA I9X>oiAVVPOoVVZI00?o]io0oj>Da_nSUDaP?ooooo00?o 0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`00=Oooool00ol0003oooooooooo`0S oooooa7oY9_=1OnSV//7ojFJb`OoY9[;2?nPV<`2oj>Ic0OoU6JJ3OnEIiX7oiIWVPOoUFNJ1onCIIX> oiEVVPOoV6RJ1onEIiX7oi5TVPooU6JJ1OnJJYT3okNO`0SoXiC61omiOL/8oinBa`Wo_Z>m1_ooool0 0ol0003oooooooooo`03ooooo`03o`000?oooooooooo00Gooooo000fooooo`03o`000?oooooooooo 02?ooooo2onTVld:oj>Jb`SoYI[;1onTV//4oj2Hc0GoUFNJ2?nDIYXJbonSV//03OnSV//7ojFJb`KoY9[;2onEIiX7oiAVVPcoUFNJ1onFIiX7oiEWVPOo TfFJ3_nEIYX7oiQXVPOoUFNJ1onAI9X?oiAVVP;oVVZI1ongWl08oj>DaPOoNGg;2?nOT/L6okjS_@Wo oooo00?o0000ooooooooool00oooool00ol0003oooooooooo`04ooooo`00>Oooool00ol0003ooooo ooooo`0Qooooo`;oY9_=1OnTV//?oj>Jb`OoYI[;0_nTV//>oiEWVPOoU6JJ3OnEIiX6oiIWVPOoUFNJ 1onCIIX>oiEVVPOoV6RJ2?nEIiX7oi5TVPkoU6JJ00?oVVZIokNO`?ngWl001_ngWl08oj>DaPOoNGg; 2?nOT/L5okjS_@_ooooo00?o0000ooooooooool00_ooool00ol0003oooooooooo`04ooooo`00>_oo ool00ol0003oooooooooo`0Pooooo`OoY9[;3onSV//6ojFJba7oUFNJ1onDIYX=oiEWVPKoUVNJ1onE IiX7oi=UVPkoUFJJ1onHJ9X8oiEWVPOoTFBJ3?nDIYX2oinCa`Wo]io02OnSUoiEVVPSoV6RJ1onE IiX7oi5TVPWoU6JJ1_nOTlL9okNO`0SoXiC61omiOL/8oinBa`;o_Z>m3_ooool01Ol0003ooooooooo oooooooo000000Kooooo000looooo`;o00008?ooool7ojBJb`goXi[;6?nEIiX7oiAVVPgoUFNJ1_nF IiX7oiEWVPOoTfFJ3_nEIYX8oiQXVPOoUFNJ1onAI9X4oiAVVP?oX9?72?nOTlL9okNO`0KoXiC61Ooo ool4ogUmb`SoWi;700?o_Z>mooooooooool03_ooool01?l0003oooooooooool00006ooooo`00?_oo ool00ol0003oooooooooo`0Nooooo`OoY9[;2OnSV//KoiEWVPOoU6JJ3OnEIiX6oiIWVPOoUFNJ1onC IIX?oiEVVPOoV6RJ1OnEIiX2oj>DaPOoS8S:2?nPTlL8oinCa`Wo]io00_nSUDaPOoS8S:1onPTlL8oinCa`So]io0:Oooool01?l0003oooooooooool00005ooooo`00@?ooool2 o`0001kooooo1onTV//2oj>Jb`;ooooo7onEIiX7oiAVVPgoUFNJ1_nFIiX7oiEWVPSoTfFJ3_nEIYX6 oiQXVP03ojjJ`onSUoiEVVP03oiQXV_n^V/?o[Y[300Go[Y[32?nSUDaPOoS8S:2?nPTlL4oinCabcooooo1?l0000oiEWVPKoUVNJ1onEIiX7oi=UVPCoUFJJ2onQTlL8 ojjJ``SoXiC61onoiEWVPKoUVNJ1onEIiX4oi=UVP?oV8o83onQTlL8ojjJ``KoXiC61oooool2ohb8 bP;oX9?7;_ooool3o`0001Cooooo0019ooooo`03o`000?oooooooooo01oooooo7onEIiX8oiAVVPgo UFNJ1_nFIiX5oiEWVP;oXiC62?nHSlP?oj6Ca`So[Y[30_nSUDaPOoV8o83onQTlL7ojjJ`cOooooo 1?l0000Kooooo`00C?ooool00ol0003oooooooooo`0Looooob3oUFNJ1onDIYX=oiEWVPGoUVNJ00?o YiO5oj>Da_nSU?ooool3o`0003Oooooo001Dooooo`;o00005_oooolNoiEWVP03oj>Da_nOTlOoWi?7 00KoWi?71onRU_ooool005Kooooo00?o0000oooooooo ool04ooooolKoiEWVPGoXiC61onOTlL7oj:DaPOoXIC61onWUlDfooooo`Co0000?_ooool005Oooooo 00?o0000ooooooooool04_oooolHoiEWVP03oj>Ea_nSUEaPOoXiC61onOTlL8oj:DaP?oXIC6DaPkoXYC61_nSULH6oj>DaSKooooo1?l0001Iooooo`00H?ooool00ol0003oooooooooo`09 ooooo`OoXiC63_nRUEaP;oXiC6=Oooool4o`0005gooooo001Qooooo`03o`000?oooooooooo 00Wooooo1onSUoj:DaP;oXiG6DaP[oXYC6 =?ooool4o`0006Wooooo001Uooooo`03o`000?oooooooooo00Kooooo1onSUDaP?ooooo00?o0000oooo ooooool0;_ooool3o`0007Gooooo001Xooooo`;o00001Oooool2oj>DaPKooooo00?o0000oooooooo ool0:_ooool4o`0007Sooooo001Zooooo`03o`000?oooooooooo00[ooooo00?o0000ooooooooool0 9_ooool4o`0007cooooo001[ooooo`03o`000?oooooooooo00Wooooo00?o0000ooooooooool08_oo ool4o`00083ooooo001/ooooo`03o`000?oooooooooo00Sooooo00?o0000ooooooooool07_ooool4 o`0008Cooooo001]ooooo`;o00002?ooool00ol0003oooooooooo`0Jooooo`Co0000R?ooool006oo oooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`0Fooooo`Co0000S?ooool0073ooooo 00?o0000ooooooooool01?ooool00ol0003oooooooooo`0Booooo`Co0000T?ooool0077ooooo00?o 0000ooooooooool00oooool00ol0003oooooooooo`0>ooooo`Co0000U?ooool007;ooooo0_l00003 ooooo`03o`000?oooooooooo00_ooooo0ol0002Hooooo`00M?ooool01?l0003oooooooooool00009 ooooo`Co0000Voooool007Gooooo00?o0000ooooool000001Oooool4o`0009oooooo001fooooo`;o 000000?oooooo`000?l000000_l0002Sooooo`00Moooool2o`000:Oooooo0000\ \>"], ImageRangeCache->{{{0, 287}, {232.562, 0}} -> {-0.0380384, 0.0227459, \ 0.00350305, 0.00350305}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] SurfaceGraphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(ContourPlot[ Evaluate[CoranaFunc /. \ {\ x2 \[Rule] \ 0.0, \ x4 \[Rule] \ 0.0}], \ {x1, 0, 2}, {x3, 0, 2}, ColorFunction \[Rule] \((Hue[0.7\ \((1 - #)\)] &)\), ContourLines \[Rule] False]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% ContourGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0192308 0.480769 0.0192308 0.480769 [ [.01923 -0.0125 -3 -9 ] [.01923 -0.0125 3 0 ] [.25962 -0.0125 -9 -9 ] [.25962 -0.0125 9 0 ] [.5 -0.0125 -3 -9 ] [.5 -0.0125 3 0 ] [.74038 -0.0125 -9 -9 ] [.74038 -0.0125 9 0 ] [.98077 -0.0125 -3 -9 ] [.98077 -0.0125 3 0 ] [ 0 0 -0.125 0 ] [-0.0125 .01923 -6 -4.5 ] [-0.0125 .01923 0 4.5 ] [-0.0125 .25962 -18 -4.5 ] [-0.0125 .25962 0 4.5 ] [-0.0125 .5 -6 -4.5 ] [-0.0125 .5 0 4.5 ] [-0.0125 .74038 -18 -4.5 ] [-0.0125 .74038 0 4.5 ] [-0.0125 .98077 -6 -4.5 ] [-0.0125 .98077 0 4.5 ] [ 0 0 -0.125 0 ] [ 0 1 .125 0 ] [ 1 0 .125 0 ] [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .01923 0 m .01923 .00625 L s [(0)] .01923 -0.0125 0 1 Mshowa .25962 0 m .25962 .00625 L s [(0.5)] .25962 -0.0125 0 1 Mshowa .5 0 m .5 .00625 L s [(1)] .5 -0.0125 0 1 Mshowa .74038 0 m .74038 .00625 L s [(1.5)] .74038 -0.0125 0 1 Mshowa .98077 0 m .98077 .00625 L s [(2)] .98077 -0.0125 0 1 Mshowa .125 Mabswid .06731 0 m .06731 .00375 L s .11538 0 m .11538 .00375 L s .16346 0 m .16346 .00375 L s .21154 0 m .21154 .00375 L s .30769 0 m .30769 .00375 L s .35577 0 m .35577 .00375 L s .40385 0 m .40385 .00375 L s .45192 0 m .45192 .00375 L s .54808 0 m .54808 .00375 L s .59615 0 m .59615 .00375 L s .64423 0 m .64423 .00375 L s .69231 0 m .69231 .00375 L s .78846 0 m .78846 .00375 L s .83654 0 m .83654 .00375 L s .88462 0 m .88462 .00375 L s .93269 0 m .93269 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .01923 m .00625 .01923 L s [(0)] -0.0125 .01923 1 0 Mshowa 0 .25962 m .00625 .25962 L s [(0.5)] -0.0125 .25962 1 0 Mshowa 0 .5 m .00625 .5 L s [(1)] -0.0125 .5 1 0 Mshowa 0 .74038 m .00625 .74038 L s [(1.5)] -0.0125 .74038 1 0 Mshowa 0 .98077 m .00625 .98077 L s [(2)] -0.0125 .98077 1 0 Mshowa .125 Mabswid 0 .06731 m .00375 .06731 L s 0 .11538 m .00375 .11538 L s 0 .16346 m .00375 .16346 L s 0 .21154 m .00375 .21154 L s 0 .30769 m .00375 .30769 L s 0 .35577 m .00375 .35577 L s 0 .40385 m .00375 .40385 L s 0 .45192 m .00375 .45192 L s 0 .54808 m .00375 .54808 L s 0 .59615 m .00375 .59615 L s 0 .64423 m .00375 .64423 L s 0 .69231 m .00375 .69231 L s 0 .78846 m .00375 .78846 L s 0 .83654 m .00375 .83654 L s 0 .88462 m .00375 .88462 L s 0 .93269 m .00375 .93269 L s .25 Mabswid 0 0 m 0 1 L s .01923 .99375 m .01923 1 L s .25962 .99375 m .25962 1 L s .5 .99375 m .5 1 L s .74038 .99375 m .74038 1 L s .98077 .99375 m .98077 1 L s .125 Mabswid .06731 .99625 m .06731 1 L s .11538 .99625 m .11538 1 L s .16346 .99625 m .16346 1 L s .21154 .99625 m .21154 1 L s .30769 .99625 m .30769 1 L s .35577 .99625 m .35577 1 L s .40385 .99625 m .40385 1 L s .45192 .99625 m .45192 1 L s .54808 .99625 m .54808 1 L s .59615 .99625 m .59615 1 L s .64423 .99625 m .64423 1 L s .69231 .99625 m .69231 1 L s .78846 .99625 m .78846 1 L s .83654 .99625 m .83654 1 L s .88462 .99625 m .88462 1 L s .93269 .99625 m .93269 1 L s .25 Mabswid 0 1 m 1 1 L s .99375 .01923 m 1 .01923 L s .99375 .25962 m 1 .25962 L s .99375 .5 m 1 .5 L s .99375 .74038 m 1 .74038 L s .99375 .98077 m 1 .98077 L s .125 Mabswid .99625 .06731 m 1 .06731 L s .99625 .11538 m 1 .11538 L s .99625 .16346 m 1 .16346 L s .99625 .21154 m 1 .21154 L s .99625 .30769 m 1 .30769 L s .99625 .35577 m 1 .35577 L s .99625 .40385 m 1 .40385 L s .99625 .45192 m 1 .45192 L s .99625 .54808 m 1 .54808 L s .99625 .59615 m 1 .59615 L s .99625 .64423 m 1 .64423 L s .99625 .69231 m 1 .69231 L s .99625 .78846 m 1 .78846 L s .99625 .83654 m 1 .83654 L s .99625 .88462 m 1 .88462 L s .99625 .93269 m 1 .93269 L s .25 Mabswid 1 0 m 1 1 L s 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath 0 .22 1 r .01923 .98077 m .98077 .98077 L .98077 .01923 L .01923 .01923 L F 0 .64 1 r .01923 .44926 m .05929 .44922 L .09936 .44924 L .13942 .44894 L .17949 .44868 L .21955 .44916 L .25962 .44798 L .29968 .44902 L .33974 .447 L .37981 .44642 L .41987 .44882 L .45994 .44506 L .5 .44856 L .54006 .44347 L .58013 .44824 L .62019 .44165 L .66026 .44065 L .70032 .44786 L .74038 .43847 L .78045 .44742 L .82051 .43604 L .86058 .43472 L .90064 .44693 L .94071 .43184 L .98077 .44638 L .98077 .98077 L .01923 .98077 L F 0 .22 1 r .01923 .47023 m .05929 .47027 L .09936 .47025 L .13942 .47055 L .17949 .4708 L .21955 .47033 L .25962 .4715 L .29968 .47046 L .33974 .47247 L .37981 .47306 L .41987 .47066 L .45994 .47441 L .5 .47092 L .54006 .47602 L .58013 .47124 L .62019 .47787 L .66026 .4789 L .70032 .47162 L .74038 .48115 L .78045 .47206 L .82051 .48372 L .86058 .48514 L .90064 .47255 L .94071 .48833 L .98077 .47309 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .52 m .05929 .51998 L .09936 .51999 L .13942 .51979 L .17949 .51963 L .21955 .51994 L .25962 .51916 L .29968 .51985 L .33974 .51851 L .37981 .51812 L .41987 .51972 L .45994 .51719 L .5 .51955 L .54006 .51607 L .58013 .51934 L .62019 .51475 L .66026 .51402 L .70032 .51908 L .74038 .51239 L .78045 .51879 L .82051 .51053 L .86058 .50951 L .90064 .51846 L .94071 .50723 L .98077 .51809 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .53413 m .05929 .5341 L .09936 .53412 L .13942 .53386 L .17949 .53365 L .21955 .53405 L .25962 .53306 L .29968 .53393 L .33974 .53225 L .37981 .53177 L .41987 .53376 L .45994 .53067 L .5 .53354 L .54006 .52939 L .58013 .53328 L .62019 .52795 L .66026 .52716 L .70032 .53296 L .74038 .52548 L .78045 .5326 L .82051 .52365 L .86058 .52268 L .90064 .53219 L .94071 .52062 L .98077 .53174 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .54578 m .05929 .54581 L .09936 .5458 L .13942 .54605 L .17949 .54625 L .21955 .54586 L .25962 .54683 L .29968 .54598 L .33974 .54762 L .37981 .54809 L .41987 .54614 L .45994 .54918 L .5 .54636 L .54006 .55045 L .58013 .54662 L .62019 .55188 L .66026 .55266 L .70032 .54693 L .74038 .55435 L .78045 .54728 L .82051 .55619 L .86058 .55718 L .90064 .54768 L .94071 .55929 L .98077 .54813 L .98077 .98077 L .01923 .98077 L F 0 .22 1 r .01923 .55993 m .05929 .55995 L .09936 .55994 L .13942 .56015 L .17949 .56031 L .21955 .55999 L .25962 .5608 L .29968 .56009 L .33974 .56147 L .37981 .56189 L .41987 .56022 L .45994 .56286 L .5 .5604 L .54006 .56405 L .58013 .56062 L .62019 .56545 L .66026 .56625 L .70032 .56088 L .74038 .56803 L .78045 .56118 L .82051 .57012 L .86058 .57131 L .90064 .56153 L .94071 .57406 L .98077 .56191 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .59648 m .05929 .59646 L .09936 .59647 L .13942 .59631 L .17949 .59617 L .21955 .59643 L .25962 .59578 L .29968 .59636 L .33974 .59523 L .37981 .5949 L .41987 .59625 L .45994 .5941 L .5 .59611 L .54006 .59312 L .58013 .59593 L .62019 .59195 L .66026 .59129 L .70032 .59572 L .74038 .58979 L .78045 .59547 L .82051 .58804 L .86058 .58704 L .90064 .59519 L .94071 .58477 L .98077 .59487 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .60666 m .05929 .60664 L .09936 .60665 L .13942 .6065 L .17949 .60637 L .21955 .60661 L .25962 .60602 L .29968 .60654 L .33974 .60552 L .37981 .60521 L .41987 .60644 L .45994 .6045 L .5 .60631 L .54006 .60363 L .58013 .60615 L .62019 .60263 L .66026 .60206 L .70032 .60596 L .74038 .60083 L .78045 .60573 L .82051 .59942 L .86058 .59866 L .90064 .60548 L .94071 .59699 L .98077 .60519 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .61678 m .05929 .61676 L .09936 .61677 L .13942 .61661 L .17949 .61647 L .21955 .61673 L .25962 .61609 L .29968 .61665 L .33974 .61557 L .37981 .61525 L .41987 .61655 L .45994 .6145 L .5 .61641 L .54006 .61362 L .58013 .61624 L .62019 .61259 L .66026 .61203 L .70032 .61603 L .74038 .6108 L .78045 .61579 L .82051 .60943 L .86058 .6087 L .90064 .61553 L .94071 .60713 L .98077 .61523 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .66841 m .05929 .66843 L .09936 .66842 L .13942 .66855 L .17949 .66866 L .21955 .66845 L .25962 .66898 L .29968 .66851 L .33974 .66942 L .37981 .66969 L .41987 .6686 L .45994 .67031 L .5 .66872 L .54006 .67106 L .58013 .66886 L .62019 .67193 L .66026 .67242 L .70032 .66903 L .74038 .67347 L .78045 .66923 L .82051 .67465 L .86058 .67528 L .90064 .66945 L .94071 .67666 L .98077 .66971 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .67707 m .05929 .67709 L .09936 .67708 L .13942 .67721 L .17949 .67732 L .21955 .67711 L .25962 .67763 L .29968 .67717 L .33974 .67808 L .37981 .67835 L .41987 .67726 L .45994 .67898 L .5 .67738 L .54006 .67975 L .58013 .67752 L .62019 .68065 L .66026 .68116 L .70032 .67769 L .74038 .68228 L .78045 .67789 L .82051 .68356 L .86058 .68426 L .90064 .67811 L .94071 .68581 L .98077 .67836 L .98077 .98077 L .01923 .98077 L F 0 .22 1 r .01923 .68629 m .05929 .68631 L .09936 .6863 L .13942 .68645 L .17949 .68658 L .21955 .68634 L .25962 .68695 L .29968 .68641 L .33974 .68747 L .37981 .68779 L .41987 .68651 L .45994 .68856 L .5 .68665 L .54006 .68952 L .58013 .68681 L .62019 .69067 L .66026 .69133 L .70032 .68701 L .74038 .69286 L .78045 .68725 L .82051 .69474 L .86058 .69585 L .90064 .68751 L .94071 .69863 L .98077 .68782 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .70922 m .05929 .70921 L .09936 .70922 L .13942 .7091 L .17949 .70901 L .21955 .70919 L .25962 .70873 L .29968 .70913 L .33974 .70835 L .37981 .70811 L .41987 .70906 L .45994 .70755 L .5 .70896 L .54006 .70686 L .58013 .70883 L .62019 .70605 L .66026 .70559 L .70032 .70869 L .74038 .70455 L .78045 .70851 L .82051 .70334 L .86058 .70266 L .90064 .70832 L .94071 .70112 L .98077 .70809 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .71632 m .05929 .71631 L .09936 .71631 L .13942 .71621 L .17949 .71612 L .21955 .71629 L .25962 .71588 L .29968 .71624 L .33974 .71553 L .37981 .71532 L .41987 .71617 L .45994 .71482 L .5 .71608 L .54006 .71423 L .58013 .71597 L .62019 .71352 L .66026 .71313 L .70032 .71583 L .74038 .71227 L .78045 .71568 L .82051 .71129 L .86058 .71075 L .90064 .7155 L .94071 .70958 L .98077 .71531 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .72311 m .05929 .7231 L .09936 .7231 L .13942 .723 L .17949 .72291 L .21955 .72308 L .25962 .72266 L .29968 .72303 L .33974 .72232 L .37981 .72211 L .41987 .72296 L .45994 .72162 L .5 .72287 L .54006 .72103 L .58013 .72276 L .62019 .72035 L .66026 .71997 L .70032 .72262 L .74038 .71914 L .78045 .72247 L .82051 .71822 L .86058 .71772 L .90064 .72229 L .94071 .71664 L .98077 .7221 L .98077 .98077 L .01923 .98077 L F 0 1 .1 r .01923 .7303 m .05929 .73028 L .09936 .73029 L .13942 .73017 L .17949 .73007 L .21955 .73026 L .25962 .7298 L .29968 .7302 L .33974 .72942 L .37981 .72919 L .41987 .73013 L .45994 .72865 L .5 .73003 L .54006 .72801 L .58013 .7299 L .62019 .72728 L .66026 .72688 L .70032 .72975 L .74038 .72601 L .78045 .72958 L .82051 .72505 L .86058 .72453 L .90064 .72939 L .94071 .72343 L .98077 .72917 L .98077 .98077 L .01923 .98077 L F .32 1 0 r .01923 .73927 m .05929 .73925 L .09936 .73926 L .13942 .73909 L .17949 .73895 L .21955 .73922 L .25962 .73856 L .29968 .73914 L .33974 .73803 L .37981 .73771 L .41987 .73903 L .45994 .73699 L .5 .73888 L .54006 .73615 L .58013 .7387 L .62019 .73522 L .66026 .73472 L .70032 .73849 L .74038 .73366 L .78045 .73825 L .82051 .73251 L .86058 .73191 L .90064 .73799 L .94071 .73066 L .98077 .73769 L .98077 .98077 L .01923 .98077 L F 0 1 .1 r .01923 .74146 m .05929 .74148 L .09936 .74147 L .13942 .74163 L .17949 .74177 L .21955 .74151 L .25962 .74215 L .29968 .74158 L .33974 .74267 L .37981 .74297 L .41987 .74169 L .45994 .74368 L .5 .74183 L .54006 .74449 L .58013 .74201 L .62019 .7454 L .66026 .7459 L .70032 .74221 L .74038 .74694 L .78045 .74244 L .82051 .74807 L .86058 .74866 L .90064 .7427 L .94071 .7499 L .98077 .74299 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .75027 m .05929 .75028 L .09936 .75027 L .13942 .75039 L .17949 .75048 L .21955 .7503 L .25962 .75076 L .29968 .75036 L .33974 .75114 L .37981 .75137 L .41987 .75043 L .45994 .7519 L .5 .75053 L .54006 .75254 L .58013 .75066 L .62019 .75327 L .66026 .75367 L .70032 .7508 L .74038 .75454 L .78045 .75097 L .82051 .75551 L .86058 .75603 L .90064 .75117 L .94071 .75714 L .98077 .75138 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .75747 m .05929 .75748 L .09936 .75747 L .13942 .75758 L .17949 .75767 L .21955 .7575 L .25962 .75792 L .29968 .75755 L .33974 .75827 L .37981 .75848 L .41987 .75762 L .45994 .75898 L .5 .75771 L .54006 .75957 L .58013 .75782 L .62019 .76027 L .66026 .76066 L .70032 .75796 L .74038 .76151 L .78045 .75812 L .82051 .76246 L .86058 .76298 L .90064 .75829 L .94071 .7641 L .98077 .75849 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .76444 m .05929 .76445 L .09936 .76445 L .13942 .76456 L .17949 .76465 L .21955 .76447 L .25962 .7649 L .29968 .76452 L .33974 .76527 L .37981 .76549 L .41987 .7646 L .45994 .76601 L .5 .76469 L .54006 .76664 L .58013 .76481 L .62019 .76739 L .66026 .76781 L .70032 .76495 L .74038 .76874 L .78045 .76511 L .82051 .76981 L .86058 .7704 L .90064 .76529 L .94071 .7717 L .98077 .7655 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .79463 m .05929 .79462 L .09936 .79463 L .13942 .79453 L .17949 .79445 L .21955 .7946 L .25962 .79423 L .29968 .79456 L .33974 .7939 L .37981 .79371 L .41987 .7945 L .45994 .79324 L .5 .79441 L .54006 .79268 L .58013 .79431 L .62019 .79201 L .66026 .79164 L .70032 .79419 L .74038 .7908 L .78045 .79404 L .82051 .78984 L .86058 .78931 L .90064 .79388 L .94071 .78814 L .98077 .7937 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .80061 m .05929 .8006 L .09936 .80061 L .13942 .80052 L .17949 .80044 L .21955 .80058 L .25962 .80024 L .29968 .80054 L .33974 .79995 L .37981 .79977 L .41987 .80048 L .45994 .79935 L .5 .80041 L .54006 .79885 L .58013 .80031 L .62019 .79825 L .66026 .79792 L .70032 .8002 L .74038 .79719 L .78045 .80007 L .82051 .79636 L .86058 .79591 L .90064 .79992 L .94071 .79493 L .98077 .79976 L .98077 .98077 L .01923 .98077 L F 0 1 .1 r .01923 .80624 m .05929 .80623 L .09936 .80624 L .13942 .80615 L .17949 .80608 L .21955 .80622 L .25962 .80588 L .29968 .80618 L .33974 .8056 L .37981 .80543 L .41987 .80612 L .45994 .80503 L .5 .80605 L .54006 .80455 L .58013 .80596 L .62019 .80398 L .66026 .80367 L .70032 .80585 L .74038 .80298 L .78045 .80572 L .82051 .80221 L .86058 .80179 L .90064 .80558 L .94071 .80088 L .98077 .80542 L .98077 .98077 L .01923 .98077 L F .32 1 0 r .01923 .81183 m .05929 .81182 L .09936 .81183 L .13942 .81174 L .17949 .81167 L .21955 .81181 L .25962 .81147 L .29968 .81177 L .33974 .81118 L .37981 .81101 L .41987 .81171 L .45994 .81061 L .5 .81163 L .54006 .81012 L .58013 .81154 L .62019 .80956 L .66026 .80925 L .70032 .81143 L .74038 .80856 L .78045 .81131 L .82051 .8078 L .86058 .80739 L .90064 .81116 L .94071 .80651 L .98077 .811 L .98077 .98077 L .01923 .98077 L F .74 1 0 r .01923 .81764 m .05929 .81763 L .09936 .81764 L .13942 .81755 L .17949 .81747 L .21955 .81761 L .25962 .81725 L .29968 .81757 L .33974 .81695 L .37981 .81677 L .41987 .81751 L .45994 .81634 L .5 .81743 L .54006 .81583 L .58013 .81733 L .62019 .81524 L .66026 .81492 L .70032 .81722 L .74038 .81421 L .78045 .81708 L .82051 .81342 L .86058 .813 L .90064 .81693 L .94071 .8121 L .98077 .81676 L .98077 .98077 L .01923 .98077 L F 1 .84 0 r .01923 .82687 m .05929 .82685 L .09936 .82686 L .13942 .82665 L .17949 .82648 L .21955 .82681 L .25962 .826 L .29968 .82671 L .33974 .82535 L .37981 .82496 L .41987 .82657 L .45994 .82408 L .5 .8264 L .54006 .82306 L .58013 .82618 L .62019 .82193 L .66026 .82132 L .70032 .82592 L .73553 .82051 L .74038 .82022 L .7451 .82051 L .78045 .82563 L .80975 .82051 L .82051 .81936 L .86058 .8189 L .87413 .82051 L .90064 .8253 L .92038 .82051 L .94071 .81793 L .97393 .82051 L .98077 .82494 L .98077 .98077 L .01923 .98077 L F .74 1 0 r .01923 .86175 m .05929 .86176 L .09936 .86176 L .13942 .86184 L .17949 .86192 L .21955 .86178 L .25962 .86212 L .29968 .86182 L .33974 .86241 L .37981 .86258 L .41987 .86188 L .45994 .86298 L .5 .86195 L .54006 .86346 L .58013 .86205 L .62019 .86402 L .66026 .86432 L .70032 .86216 L .74038 .86498 L .78045 .86228 L .82051 .86572 L .86058 .86611 L .90064 .86243 L .94071 .86694 L .98077 .86259 L .98077 .98077 L .01923 .98077 L F .32 1 0 r .01923 .86719 m .05929 .8672 L .09936 .86719 L .13942 .86727 L .17949 .86734 L .21955 .86721 L .25962 .86752 L .29968 .86725 L .33974 .86778 L .37981 .86794 L .41987 .8673 L .45994 .86831 L .5 .86737 L .54006 .86876 L .58013 .86745 L .62019 .86927 L .66026 .86956 L .70032 .86756 L .74038 .87018 L .78045 .86767 L .82051 .87087 L .86058 .87124 L .90064 .8678 L .94071 .87204 L .98077 .86795 L .98077 .98077 L .01923 .98077 L F 0 1 .1 r .01923 .87228 m .05929 .87228 L .09936 .87228 L .13942 .87236 L .17949 .87242 L .21955 .8723 L .25962 .8726 L .29968 .87233 L .33974 .87285 L .37981 .87301 L .41987 .87239 L .45994 .87337 L .5 .87245 L .54006 .8738 L .58013 .87253 L .62019 .8743 L .66026 .87458 L .70032 .87263 L .74038 .8752 L .78045 .87274 L .82051 .87588 L .86058 .87625 L .90064 .87287 L .94071 .87705 L .98077 .87302 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .87729 m .05929 .8773 L .09936 .8773 L .13942 .87737 L .17949 .87744 L .21955 .87732 L .25962 .87762 L .29968 .87735 L .33974 .87788 L .37981 .87803 L .41987 .8774 L .45994 .8784 L .5 .87747 L .54006 .87884 L .58013 .87755 L .62019 .87935 L .66026 .87964 L .70032 .87765 L .74038 .88027 L .78045 .87776 L .82051 .88099 L .86058 .88138 L .90064 .87789 L .94071 .88221 L .98077 .87804 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .88247 m .05929 .88248 L .09936 .88247 L .13942 .88256 L .17949 .88262 L .21955 .88249 L .25962 .88282 L .29968 .88253 L .33974 .88309 L .37981 .88325 L .41987 .88259 L .45994 .88365 L .5 .88266 L .54006 .88412 L .58013 .88274 L .62019 .88468 L .66026 .88499 L .70032 .88285 L .74038 .88568 L .78045 .88297 L .82051 .88647 L .86058 .8869 L .90064 .88311 L .94071 .88785 L .98077 .88327 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .88814 m .05929 .88815 L .09936 .88814 L .13942 .88823 L .17949 .88831 L .21955 .88816 L .25962 .88853 L .29968 .88821 L .33974 .88884 L .37981 .88904 L .41987 .88827 L .45994 .88949 L .5 .88835 L .54006 .89005 L .58013 .88845 L .62019 .89071 L .66026 .89108 L .70032 .88857 L .74038 .89193 L .78045 .88871 L .82051 .89291 L .86058 .89346 L .90064 .88887 L .94071 .89469 L .98077 .88905 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .90903 m .05929 .90903 L .09936 .90903 L .13942 .90896 L .17949 .9089 L .21955 .90901 L .25962 .90873 L .29968 .90898 L .33974 .90849 L .37981 .90834 L .41987 .90893 L .45994 .90799 L .5 .90887 L .54006 .90757 L .58013 .90879 L .62019 .90708 L .66026 .9068 L .70032 .9087 L .74038 .90618 L .78045 .90859 L .82051 .90547 L .86058 .90508 L .90064 .90847 L .94071 .90422 L .98077 .90833 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .91353 m .05929 .91352 L .09936 .91352 L .13942 .91346 L .17949 .9134 L .21955 .91351 L .25962 .91325 L .29968 .91348 L .33974 .91303 L .37981 .91289 L .41987 .91343 L .45994 .91258 L .5 .91338 L .54006 .9122 L .58013 .91331 L .62019 .91175 L .66026 .9115 L .70032 .91322 L .74038 .91095 L .78045 .91312 L .82051 .91033 L .86058 .90999 L .90064 .91301 L .94071 .90926 L .98077 .91289 L .98077 .98077 L .01923 .98077 L F 0 1 .1 r .01923 .91776 m .05929 .91775 L .09936 .91776 L .13942 .91769 L .17949 .91764 L .21955 .91774 L .25962 .91749 L .29968 .91771 L .33974 .91728 L .37981 .91715 L .41987 .91767 L .45994 .91685 L .5 .91762 L .54006 .91649 L .58013 .91755 L .62019 .91607 L .66026 .91583 L .70032 .91747 L .74038 .91531 L .78045 .91737 L .82051 .91473 L .86058 .91442 L .90064 .91727 L .94071 .91373 L .98077 .91714 L .98077 .98077 L .01923 .98077 L F .32 1 0 r .01923 .92192 m .05929 .92191 L .09936 .92192 L .13942 .92185 L .17949 .9218 L .21955 .9219 L .25962 .92165 L .29968 .92187 L .33974 .92144 L .37981 .92131 L .41987 .92183 L .45994 .92101 L .5 .92177 L .54006 .92065 L .58013 .92171 L .62019 .92024 L .66026 .92 L .70032 .92162 L .74038 .9195 L .78045 .92153 L .82051 .91893 L .86058 .91862 L .90064 .92142 L .94071 .91796 L .98077 .9213 L .98077 .98077 L .01923 .98077 L F .74 1 0 r .01923 .92615 m .05929 .92615 L .09936 .92615 L .13942 .92608 L .17949 .92603 L .21955 .92613 L .25962 .92587 L .29968 .9261 L .33974 .92566 L .37981 .92553 L .41987 .92606 L .45994 .92522 L .5 .926 L .54006 .92485 L .58013 .92593 L .62019 .92442 L .66026 .92418 L .70032 .92585 L .74038 .92367 L .78045 .92575 L .82051 .92309 L .86058 .92278 L .90064 .92564 L .94071 .92212 L .98077 .92552 L .98077 .98077 L .01923 .98077 L F 1 .84 0 r .01923 .93065 m .05929 .93064 L .09936 .93064 L .13942 .93057 L .17949 .93051 L .21955 .93062 L .25962 .93034 L .29968 .93059 L .33974 .93011 L .37981 .92997 L .41987 .93054 L .45994 .92963 L .5 .93048 L .54006 .92924 L .58013 .93041 L .62019 .92878 L .66026 .92853 L .70032 .93031 L .74038 .92798 L .78045 .93021 L .82051 .92737 L .86058 .92705 L .90064 .93009 L .94071 .92636 L .98077 .92996 L .98077 .98077 L .01923 .98077 L F 1 .42 0 r .01923 .93573 m .05929 .93572 L .09936 .93572 L .13942 .93564 L .17949 .93557 L .21955 .9357 L .25962 .93537 L .29968 .93566 L .33974 .93509 L .37981 .93493 L .41987 .93561 L .45994 .93454 L .5 .93553 L .54006 .93409 L .58013 .93544 L .62019 .93356 L .66026 .93328 L .70032 .93533 L .74038 .93266 L .78045 .93521 L .82051 .93199 L .86058 .93163 L .90064 .93507 L .94071 .93087 L .98077 .93492 L .98077 .98077 L .01923 .98077 L F 1 .84 0 r .01923 .96449 m .05929 .9645 L .09936 .9645 L .13942 .96456 L .17949 .96461 L .21955 .96451 L .25962 .96475 L .29968 .96454 L .33974 .96495 L .37981 .96507 L .41987 .96458 L .45994 .96534 L .5 .96463 L .54006 .96566 L .58013 .9647 L .62019 .96603 L .66026 .96623 L .70032 .96478 L .74038 .96665 L .78045 .96487 L .82051 .9671 L .86058 .96734 L .90064 .96497 L .94071 .96784 L .98077 .96508 L .98077 .98077 L .01923 .98077 L F .74 1 0 r .01923 .96799 m .05929 .968 L .09936 .96799 L .13942 .96804 L .17949 .96808 L .21955 .96801 L .25962 .96819 L .29968 .96803 L .33974 .96834 L .37981 .96843 L .41987 .96806 L .45994 .96864 L .5 .9681 L .54006 .96889 L .58013 .96815 L .62019 .96918 L .66026 .96934 L .70032 .96821 L .74038 .96968 L .78045 .96827 L .82051 .97004 L .86058 .97024 L .90064 .96835 L .94071 .97065 L .98077 .96844 L .98077 .98077 L .01923 .98077 L F .32 1 0 r .01923 .97077 m .05929 .97078 L .09936 .97078 L .13942 .97081 L .17949 .97085 L .21955 .97079 L .25962 .97094 L .29968 .9708 L .33974 .97106 L .37981 .97114 L .41987 .97083 L .45994 .97132 L .5 .97086 L .54006 .97153 L .58013 .9709 L .62019 .97177 L .66026 .9719 L .70032 .97095 L .74038 .97219 L .78045 .97101 L .82051 .97251 L .86058 .97267 L .90064 .97107 L .94071 .97303 L .98077 .97114 L .98077 .98077 L .01923 .98077 L F 0 1 .1 r .01923 .97314 m .05929 .97314 L .09936 .97314 L .13942 .97317 L .17949 .9732 L .21955 .97315 L .25962 .97328 L .29968 .97316 L .33974 .97339 L .37981 .97345 L .41987 .97318 L .45994 .97361 L .5 .97321 L .54006 .97379 L .58013 .97325 L .62019 .97401 L .66026 .97412 L .70032 .97329 L .74038 .97438 L .78045 .97334 L .82051 .97466 L .86058 .9748 L .90064 .9734 L .94071 .97512 L .98077 .97346 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .97521 m .05929 .97522 L .09936 .97522 L .13942 .97525 L .17949 .97527 L .21955 .97522 L .25962 .97534 L .29968 .97524 L .33974 .97544 L .37981 .9755 L .41987 .97526 L .45994 .97564 L .5 .97528 L .54006 .9758 L .58013 .97531 L .62019 .97599 L .66026 .9761 L .70032 .97535 L .74038 .97633 L .78045 .9754 L .82051 .97658 L .86058 .97671 L .90064 .97545 L .94071 .977 L .98077 .9755 L .98077 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .97708 m .05929 .97709 L .09936 .97709 L .13942 .97711 L .17949 .97714 L .21955 .97709 L .25962 .9772 L .29968 .97711 L .33974 .97729 L .37981 .97734 L .41987 .97712 L .45994 .97747 L .5 .97715 L .54006 .97762 L .58013 .97718 L .62019 .97779 L .66026 .97789 L .70032 .97721 L .74038 .9781 L .78045 .97725 L .82051 .97833 L .86058 .97845 L .90064 .9773 L .94071 .97872 L .98077 .97735 L .98077 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .97879 m .05929 .9788 L .09936 .9788 L .13942 .97882 L .17949 .97884 L .21955 .9788 L .25962 .9789 L .29968 .97881 L .33974 .97898 L .37981 .97903 L .41987 .97883 L .45994 .97915 L .5 .97885 L .54006 .97929 L .58013 .97888 L .62019 .97945 L .66026 .97954 L .70032 .97891 L .74038 .97973 L .78045 .97895 L .82051 .97995 L .86058 .98006 L .90064 .97899 L .94071 .9803 L .98077 .97904 L .98077 .98077 L .01923 .98077 L F 0 .22 1 r .01923 .78778 m .05929 .78776 L .09936 .78777 L .13942 .78765 L .17949 .78756 L .21955 .78774 L .25962 .78728 L .29968 .78769 L .33974 .78688 L .37981 .78663 L .41987 .78761 L .45994 .78605 L .5 .78751 L .54006 .78532 L .58013 .78738 L .62019 .78445 L .66026 .78394 L .70032 .78723 L .74038 .78278 L .78045 .78705 L .82051 .78138 L .86058 .78056 L .90064 .78685 L .93209 .78045 L .90064 .77313 L .86058 .78031 L .82051 .77933 L .78045 .77291 L .74038 .7777 L .70032 .77271 L .66026 .77638 L .62019 .77581 L .58013 .77254 L .54006 .77483 L .5 .7724 L .45994 .77402 L .41987 .77229 L .37981 .77337 L .33974 .7731 L .29968 .7722 L .25962 .77266 L .21955 .77214 L .17949 .77235 L .13942 .77224 L .09936 .77211 L .05929 .77212 L .01923 .7721 L F .2 0 1 r .01923 .32512 m .05929 .32506 L .09936 .32509 L .13942 .32456 L .17949 .32413 L .21955 .32496 L .25962 .32288 L .29968 .32472 L .33974 .32113 L .37981 .32005 L .41987 .32437 L .45994 .31747 L .5 .32391 L .54006 .31427 L .58013 .32335 L .62019 .31027 L .66026 .30789 L .70032 .32267 L .74038 .30188 L .78045 .32189 L .8145 .29968 L .78045 .25995 L .74038 .29455 L .70224 .25962 L .74038 .22701 L .78045 .25924 L .81866 .21955 L .80492 .17949 L .81196 .13942 L .82051 .10271 L .82149 .09936 L .82051 .05936 L .82051 .05929 L .82051 .02971 L .82246 .01923 L .01923 .01923 L F 0 .22 1 r .01923 .90395 m .05929 .90394 L .09936 .90395 L .13942 .90386 L .17949 .90379 L .21955 .90392 L .25962 .90359 L .29968 .90389 L .33974 .9033 L .37981 .90312 L .41987 .90383 L .45994 .9027 L .5 .90375 L .54006 .90218 L .58013 .90366 L .62019 .90156 L .66026 .9012 L .70032 .90355 L .73651 .90064 L .70032 .89568 L .66026 .89955 L .62019 .89891 L .58013 .89551 L .54006 .89784 L .5 .89537 L .45994 .897 L .41987 .89526 L .37981 .89634 L .33974 .89606 L .29968 .89518 L .25962 .89563 L .21955 .89512 L .17949 .89532 L .13942 .89522 L .09936 .89509 L .05929 .8951 L .01923 .89508 L F .2 0 1 r .01923 .43095 m .05929 .43092 L .09936 .43094 L .13942 .43065 L .17949 .43041 L .21955 .43086 L .25962 .42973 L .29968 .43073 L .33974 .42876 L .37981 .42816 L .41987 .43054 L .45994 .42672 L .5 .43029 L .54006 .42492 L .58013 .42998 L .62019 .42268 L .66026 .42135 L .70032 .42961 L .73399 .41987 L .70032 .40176 L .66026 .41586 L .62019 .41312 L .58013 .40121 L .54006 .40913 L .5 .40074 L .45994 .40621 L .41987 .40037 L .37981 .40397 L .33974 .40306 L .29968 .40009 L .25962 .40159 L .21955 .39989 L .17949 .40056 L .13942 .40021 L .09936 .39978 L .05929 .39981 L .01923 .39976 L F .01923 .50652 m .05929 .50649 L .09936 .5065 L .13942 .50627 L .17949 .50608 L .21955 .50645 L .25962 .50553 L .29968 .50634 L .33974 .50474 L .37981 .50425 L .41987 .50619 L .45994 .50306 L .5 .50599 L .54006 .50155 L .58013 .50573 L .61821 .5 L .58013 .49047 L .54006 .49702 L .5 .49011 L .45994 .49451 L .41987 .48982 L .37981 .49267 L .33974 .49194 L .29968 .4896 L .25962 .49077 L .21955 .48945 L .17949 .48997 L .13942 .48969 L .09936 .48936 L .05929 .48938 L .01923 .48934 L F 0 .22 1 r .01923 .98038 m .05929 .98038 L .09936 .98038 L .13942 .9804 L .17949 .98042 L .21955 .98038 L .25962 .98048 L .29968 .98039 L .33974 .98055 L .37981 .9806 L .41987 .98041 L .45994 .98071 L .5 .98043 L .5318 .98077 L .01923 .98077 L F .2 0 1 r .01923 .58404 m .05929 .58401 L .09936 .58403 L .13942 .58378 L .17949 .58358 L .21955 .58396 L .25962 .583 L .29968 .58385 L .33974 .58214 L .37981 .5816 L .41987 .58369 L .45994 .58025 L .5 .58348 L .52662 .58013 L .5 .57566 L .45994 .57996 L .41987 .57539 L .37981 .57808 L .33974 .57737 L .29968 .57519 L .25962 .57627 L .21955 .57506 L .17949 .57553 L .13942 .57528 L .09936 .57498 L .05929 .575 L .01923 .57496 L F .01923 .70063 m .05929 .70061 L .09936 .70062 L .13942 .70046 L .17949 .70033 L .21955 .70058 L .23537 .70032 L .21955 .69974 L .17949 .70031 L .13942 .7 L .09936 .69965 L .05929 .69967 L .01923 .69963 L F .29968 .6999 m .30861 .70032 L .29968 .70051 L .28361 .70032 L F 0 .22 1 r .33974 .25707 m .37981 .25443 L .39537 .25962 L .37981 .26433 L .33974 .26189 L .33067 .25962 L F 0 1 .1 r .37981 .63203 m .38477 .66026 L .37981 .66043 L .34741 .66026 L F .2 0 1 r .41987 .70014 m .42175 .70032 L .41987 .7004 L .41498 .70032 L F 0 .22 1 r .45994 .24914 m .48602 .25962 L .45994 .26937 L .43392 .25962 L F 0 1 .1 r .45994 .63002 m .47862 .66026 L .45994 .66115 L .44092 .66026 L F 1 0 0 r .45994 .94068 m .46098 .94071 L .45994 .9607 L .45882 .94071 L F 0 .22 1 r .54006 .24363 m .57205 .25962 L .54006 .27483 L .50888 .25962 L F 0 1 .1 r .54006 .62787 m .56603 .66026 L .54006 .662 L .51422 .66026 L F 1 0 0 r .54006 .94005 m .55451 .94071 L .54006 .96121 L .52532 .94071 L F 0 .64 1 r .54006 .35827 m .54477 .37981 L .54006 .38058 L .53517 .37981 L F 0 .22 1 r .60523 .98077 m .58013 .98046 L .54807 .98077 L F .2 0 1 r .58013 .57599 m .60167 .58013 L .58013 .58322 L .5532 .58013 L F 0 .22 1 r .62019 .23765 m .66026 .2344 L .69657 .25962 L .66026 .28471 L .62019 .28107 L .58643 .25962 L F 0 1 .1 r .62019 .62561 m .66026 .62445 L .69115 .66026 L .66026 .66351 L .62019 .66298 L .59147 .66026 L F 1 0 0 r .62019 .93935 m .66026 .93898 L .68239 .94071 L .66026 .96205 L .62019 .96176 L .6007 .94071 L F 0 .64 1 r .62019 .35003 m .66026 .3465 L .67655 .37981 L .66026 .38519 L .62019 .3836 L .60725 .37981 L F 0 .22 1 r .66026 .16925 m .66135 .17949 L .66026 .18112 L .6295 .17949 L F .2 0 1 r .70032 .49091 m .72403 .5 L .70032 .50543 L .66723 .5 L F 0 .22 1 r .71533 .98077 m .70032 .98048 L .67833 .98077 L F .2 0 1 r .70032 .5764 m .71286 .58013 L .70032 .5829 L .68151 .58013 L F 0 1 .1 r .74038 .62207 m .77623 .66026 L .74038 .66466 L .70571 .66026 L F 1 0 0 r .74038 .93819 m .76883 .94071 L .74038 .96266 L .71218 .94071 L F 0 .64 1 r .74038 .33987 m .76401 .37981 L .74038 .38856 L .71673 .37981 L F 0 .22 1 r .74038 .13773 m .74121 .13942 L .75205 .17949 L .74038 .19728 L .7285 .17949 L .73953 .13942 L F 0 1 .94 r .74038 .45919 m .74293 .45994 L .74038 .46064 L .73776 .45994 L F 0 .22 1 r .78045 .89587 m .81033 .90064 L .78045 .90342 L .74414 .90064 L F .2 0 1 r .78045 .40242 m .80878 .41987 L .78045 .42918 L .74662 .41987 L F .78045 .49143 m .80137 .5 L .78045 .50508 L .75654 .5 L F 0 .22 1 r .79372 .98077 m .78045 .98052 L .76547 .98077 L F .2 0 1 r .78045 .57688 m .79137 .58013 L .78045 .58252 L .76811 .58013 L F 0 1 .1 r .82051 .61982 m .86058 .619 L .86648 .62019 L .89937 .66026 L .86058 .66658 L .82051 .66591 L .78408 .66026 L .81846 .62019 L F 1 0 0 r .82051 .93735 m .86058 .93691 L .89201 .94071 L .86058 .96362 L .82051 .9633 L .79072 .94071 L F 0 .64 1 r .82051 .33482 m .86058 .33222 L .87167 .33974 L .88777 .37981 L .86058 .39418 L .82051 .39222 L .79501 .37981 L .81252 .33974 L F 0 1 .94 r .82051 .45544 m .86058 .45367 L .87298 .45994 L .86058 .46591 L .82051 .46421 L .81104 .45994 L F 0 1 .52 r .82051 .5395 m .86058 .53792 L .86605 .54006 L .86058 .54211 L .82051 .5406 L .81897 .54006 L F .2 0 1 r .929 .01923 m .92819 .05929 L .9286 .09936 L .92201 .13942 L .91677 .17949 L .92688 .21955 L .90064 .25672 L .86632 .21955 L .8785 .17949 L .87216 .13942 L .86423 .09936 L .86474 .05929 L .86376 .01923 L F .90064 .26221 m .92388 .29968 L .90064 .32099 L .86993 .29968 L F 0 .22 1 r .90064 .8961 m .92081 .90064 L .90064 .90328 L .87361 .90064 L F .2 0 1 r .90064 .40317 m .91966 .41987 L .90064 .42868 L .875 .41987 L F .90064 .49203 m .9141 .5 L .90064 .50468 L .88176 .5 L F 0 .22 1 r .90835 .98077 m .90064 .98056 L .88903 .98077 L F .2 0 1 r .90064 .57746 m .9066 .58013 L .90064 .58207 L .89135 .58013 L F 0 1 .1 r .98077 .66045 m .94071 .66799 L .9013 .66026 L .92674 .62019 L .94071 .61729 L .97043 .62019 L .98077 .63197 L F 1 0 0 r .94071 .93599 m .97975 .94071 L .94071 .9643 L .90611 .94071 L F 0 .64 1 r .94071 .32675 m .97287 .33974 L .9787 .37981 L .94071 .39844 L .90932 .37981 L .92242 .33974 L F 0 1 .94 r .94071 .45023 m .97344 .45994 L .94071 .46928 L .92133 .45994 L F 0 1 .52 r .94071 .53495 m .97021 .54006 L .94071 .54498 L .9271 .54006 L F 1 .42 0 r .94071 .82753 m .96721 .86058 L .94071 .86148 L .93183 .86058 L F .74 1 0 r .94071 .73982 m .96315 .74038 L .94071 .74093 L .93754 .74038 L F 0 .22 1 r .98077 .78662 m .96704 .78045 L .98077 .77339 L F .2 0 1 r .98077 .25426 m .97034 .21955 L .97567 .17949 L .97309 .13942 L .96929 .09936 L .96955 .05929 L .96905 .01923 L .98077 .01923 L F .98077 .31998 m .97207 .29968 L .98077 .26448 L F 0 .22 1 r .98077 .90311 m .97371 .90064 L .98077 .89636 L F .2 0 1 r .98077 .42812 m .9743 .41987 L .98077 .40403 L F .98077 .50421 m .97685 .5 L .98077 .49272 L F 0 .22 1 r .98077 .9806 m .97903 .98077 L .98077 .98077 L F .2 0 1 r .98077 .58156 m .9796 .58013 L .98077 .57813 L F % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 288}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHg?oo ool00ol0003oooooooooo`0fooooo`03o`000?oooooooooo00Oooooo1?l0000fooooo`05o`000?oo ooooooooooooool000001Oooool001Sooooo00Co0000oooooooooooo0000=_ooool01?l0003ooooo ooooool00007ooooo`03o`000?oooooooooo03Sooooo0_l0000gooooo`;o00002Oooool00ol0003o ooooooooo`0gooooo`05o`000?ooooooooooooooool000001Oooool001Wooooo0_l0000hooooo`;o 00002?ooool5o`0003Oooooo00?o0000ooooooooool0=_ooool00ol0003oooooooooo`07ooooo`Go 0000=_ooool3o`0000Kooooo003oooooob7ooooo003oooooob7ooooo003oooooob7ooooo003ooooo ob7ooooo000Eoooooooo00002ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00Wooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`09ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`02ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_ooool00ol0003oooooooooo`0mooooo`03o`000?oo oooooooo03gooooo00?o0000ooooooooool0??ooool00ol0003oooooooooo`0mooooo`03o`000?oo oooooooo00;ooooo0Ol00001ooooo`003_ooool2o`0000Gooooo00?o0000ooooooooool0ooooool7 ooooo`7o00000Oooool000gooooo00Co0000oooooooooooo00001?ooool00ol0003oooooooooo`3o ooooo`Oooooo0Ol00001ooooo`003Oooool01?l0003oooooooooool00004ooooo`;o0000ooooool7 ooooo`;o00000Oooool000gooooo00Co0000oooooooooooo00001?ooool00ol0003oooooooooo`02 ooooomGo<`3o2ol0>?lBoc<0o`[o03So0olc0?l5ooooo`7o00000Oooool000gooooo00Co0000oooo oooooooo00001?ooool00ol0003oooooooooo`02ooooomGo<`3o2ol0>?lBoc<0o`[o03So0olc0?l5 ooooo`7o00000Oooool000gooooo00Co0000oooooooooooo00001?ooool00ol0003oooooooooo`02 ooooomGo<`3o2ol0>?lBoc<0o`[o03So0olc0?l5ooooo`7o00000Oooool000kooooo0_l00005oooo o`03o`000?oooooooooo00;oooooeOlc0?l;o`0hoa;o<`3o2_l0>?l3oc<0o`Gooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02ooooomGo<`3o2ol0>?lBoc<0o`[o03So0olc0?l5ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_oooooEoc<0o`_o03So4_lc0?l:o`0ho`?o<`3o 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooeOlc0?l;o`0hoa7o<`3o2ol0 >?l3oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooomGo<`3o2ol0>?lA oc<0o`_o03So0olc0?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooooEoc<0 o`_o03So4Olc0?l;o`0ho`?o<`3o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o ooooeOlc0?l;o`0hoa7o<`3o2ol0>?l3oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooomGo<`3o2ol0>?lAoc<0o`_o03So0olc0?l5ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_oooooEoc<0o`_o03So4Olc0?l;o`0ho`?o<`3o1Oooool1o`00007ooooo000E ooooo`;o00000ooooooEoc<0o`_o03So4Olc0?l;o`0ho`?o<`3o1?ooool2o`00007ooooo000Eoooo o`03o`000?oooooooooo00;oooooeOlc0?l;o`0hoa7o<`3o2ol0>?l3oc<0o`Gooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02ooooomGo<`3o2ol0>?lAoc<0o`_o03So0olc0?l5ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_oooooEoc<0o`_o03So4Olc0?l;o`0ho`?o<`3o 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooeOlc0?l;o`0hoa7o<`3o2ol0 >?l3oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooomGo<`3o2ol0>?lA oc<0o`_o03So0olc0?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooooEoc<0 o`_o03So4Olc0?l;o`0ho`?o<`3o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o ooooeOlc0?l;o`0hoa7o<`3o2ol0>?l3oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooomGo<`3o2ol0>?lAoc<0o`_o03So0olc0?l5ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_oooooEoc<0o`_o03So4Olc0?l;o`0ho`?o<`3o1Oooool1o`00007ooooo000E ooooo`03o`000?oooooooooo00;oooooeOlc0?l;o`0hoa7o<`3o2ol0>?l3oc<0o`Gooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02ooooomGo<`3o2ol0>?lAoc<0o`_o03So0olc0?l5oooo o`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooooEoc<0o`co03So4?lc0?l;o`0ho`?o <`3o1Oooool1o`00007ooooo000Eooooo`;o00000ooooooDoc<0o`go03So4?lc0?l;o`0ho`?o<`3o 1?ooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooe?lc0?l=o`0hoa3o<`3o2ol0 >?l3oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooomCo<`3o3Ol0>?l@ oc<0o`co03So0_lc0?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooooCoc<0 o`ko03So3olc0?l=o`0ho`;o<`3o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o oooodolc0?l?o`0ho`ko<`3o3Ol0>?l2oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooom?o<`3o3ol0>?l>oc<0o`go03So0_lc0?l5ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_oooooBoc<0oa3o03So3_lc0?l=o`0ho`;o<`3o1Oooool1o`00007ooooo000E ooooo`03o`000?oooooooooo00;ooooo_olc0?l00ol0>?oo<`3ooc<0o`0@oc<0oa3o03So3_lc0?l= o`0ho`;o<`3o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo_olc0?l00ol0 >?oo<`3ooc<0o`0@oc<0oa3o03So3_lc0?l=o`0ho`;o<`3o1Oooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;ooooo_olc0?l2o`0hoa7o<`3o4?l0>?l>oc<0o`go03So0_lc0?l5ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_oooonnoc<0o`?o03So4Olc0?lAo`0ho`go<`3o 3Ol0>?l2oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooookko<`3o0ol0 >?lAoc<0oa7o03So3?lc0?l>o`0ho`;o<`3o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo__lc0?l4o`0hoa3o<`3o4Ol0>?l?l00olc 0?ooooooooooo`02ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_oooonmoc<0o`Go 03So3olc0?lBo`0ho`co<`3o3ol0>?l00olc0?ooooooooooo`03ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_oooonYoc<0o`03o`0hoolc0?oo<`3o017o<`3o1Ol0>?l?oc<0oa?o03So 2olc0?l?o`0ho`03oc<0oooooooooooo00?ooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02ooooojKo<`3o1?l0>?lCoc<0o`Ko03So3_lc0?lCo`0ho`[o<`3o4?l0>?l00olc0?oooooooooo o`03ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooonSoc<0o`Oo03So4_lc0?l7 o`0ho`ko<`3o4ol0>?l:oc<0oa3o03So00?o<`3oooooooooool00oooool1o`00007ooooo000Eoooo o`03o`000?oooooooooo00;ooooo_?lc0?l7o`0ho`ko<`3o4ol0>?l:oc<0oa3o03So00?o<`3ooooo ooooool00oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo_Olc0?l6o`0ho`ko <`3o4ol0>?l:oc<0oa3o03So00?o<`3oooooooooool00oooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo__lc0?l4o`0hoa3o<`3o4_l0>?l;oc<0o`oo03So00?o<`3oooooooooool0 0oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo__lc0?l3o`0hoa7o<`3o4Ol0 >?l?oo<`3ooc<0o`0@oc<0oa7o03So3?lc0?l>o`0ho`;o<`3o1Oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooodolc0?l@o`0ho`go<`3o3Ol0>?l2oc<0 o`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooom?o<`3o3ol0>?l>oc<0o`go 03So0_lc0?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooooCoc<0o`oo03So 3_lc0?l=o`0ho`;o<`3o1Oooool1o`00007ooooo000Eooooo`;o00000ooooooCoc<0o`oo03So3_lc 0?l=o`0ho`;o<`3o1?ooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooe?lc0?l> o`0ho`oo<`3o2ol0>?l3oc<0o`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooo omCo<`3o3Ol0>?l@oc<0o`_o03So0olc0?l5ooooo`7o00000Oooool001Gooooo00?o0000oooooooo ool00_oooooDoc<0o`go03So4?lc0?l;o`0ho`?o<`3o1Oooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooodolc0?l?o`0ho`oo<`3o3?l0>?l2oc<0o`Gooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02oooookko<`3o0ol0>?lAoc<0oa7o03So3Olc0?l=o`0ho`;o<`3o1Ooo ool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo_Olc0?l5o`0ho`oo<`3o4ol0>?l; oc<0o`ko03So0_lc0?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooonOoc<0 o`go03So4?lc0?l7o`0ho`go<`3o5Ol0>?l:oc<0o`oo03So00?o<`3oooooooooool00oooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;oooooW_lc0?l@o`0ho`go<`3o2_l0>?l:oc<0oaOo 03So2?lc0?l@o`0ho`03oc<0oooooooooooo00?ooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooohWo<`3o0ol0>?l@oc<0oa?o03So2_lc0?l=o`0ho`So<`3o6Ol0>?l6oc<0oa7o03So 00?o<`3oooooooooool00oooool1o`00007ooooo0002ooooo`;o00001?ooool00ol0003ooooooooo o`02ooooo`?o00001Oooool00ol0003oooooooooo`02ooooohOo<`3o1ol0>?l=oc<0oaKo03So1olc 0?l@o`0ho`Go<`3o6ol0>?l4oc<0oa?o03So1Oooool1o`00007ooooo00001Ooooooo0000oooooooo oooo000000Oooooo00Go0000ooooooooooooooooo`000004ooooo`03o`000?oooooooooo00;ooooo Lolc0?l5o`0ho`go<`3o3?l0>?l8oc<0oa[o03So1?lc0?lBo`0ho`?o<`3o7Ol0>?l3oc<0oa?o03So 1Oooool1o`00007ooooo00001Ooooooo0000oooooooooooo000000_ooooo00?o0000ooooooooool0 0_ooool2o`0000?oooooFolc0?l8o`0ho`go<`3o2ol0>?l8oc<0oa3o03So1Olc0?lLo`0ho`;o<`3o 5?l0>?l00olc0?oo03Soo`0ho`0Mo`0ho`03oc<0ool0>?oo03So01;o03So1?ooool2o`00007ooooo 00001Ooooooo0000oooooooooooo000000_ooooo00?o0000ooooooooool00_ooool00ol0003ooooo ooooo`02oooooeGo<`3o3_l0>?l=oc<0o`_o03So2Olc0?l>o`0ho`Oo<`3o6_l0>?l3oc<0oa?o03So 00?o<`3oo`0hool0>?l0?l5ooooo`7o00000Oooool00005ooooool0003oooooooooool00000 1oooool4o`0000Gooooo00?o0000ooooooooool00_oooomLoc<0o`Go03So4_lc0?l5o`0ho`ko<`3o 2_l0>?l:oc<0oaSo03So1Olc0?lAo`0ho`?o<`3o=?l0>?l5ooooo`7o00000Oooool00005ooooool0 003oooooooooool000001oooool00ol0003oooooooooo`06ooooo`03o`000?oooooooooo00;ooooo MOlc0?l00ol0>?oo<`3ooc<0o`0@oc<0o`Go03So3olc0?lDo`0ho`So<`3o3ol0>?l5oc<0oako03So 00?o<`3oo`0hool0>?l04_l0>?l5ooooo`7o00000Oooool000;ooooo0_l00008ooooo`Go00001?oo ool00ol0003oooooooooo`02oooooh[o<`3o00?o03Sooc<0oolc0?l04?lc0?lBo`0ho`[o<`3o3Ol0 >?l7oc<0oaco03So0olc0?lCo`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 oooooioo<`3o3ol0>?l?l5ooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_oooonPoc<0o`co03So3olc0?l9o`0ho`_o<`3o6?l0>?l6oc<0 oa7o03So00?o<`3oooooooooool00oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o ooooY_lc0?l5o`0hoa7o<`3o1ol0>?l?l>oc<0oaKo03So 2?lc0?l@o`0ho`03oc<0oooooooooooo00?ooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02oooookko<`3o0ol0>?l@oc<0oaCo03So2_lc0?l?o`0ho`03oc<0oooooooooooo00?ooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02oooookoo<`3o00?o03Sooc<0oolc0?l04?lc0?lB o`0ho`_o<`3o3ol0>?l00olc0?ooooooooooo`03ooooo`7o00000Oooool001Gooooo00?o0000oooo ooooool00_oooooCoc<0oa3o03So3Olc0?l=o`0ho`;o<`3o1Oooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;oooood_lc0?lBo`0ho`co<`3o3Ol0>?l2oc<0o`Gooooo0Ol00001ooooo`00 5Oooool2o`0000?ooooo__lc0?l3o`0hoa3o<`3o5?l0>?l:oc<0o`oo03So00?o<`3oooooooooool0 0_ooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooYOlc0?l7o`0hoa3o<`3o1ol0 >?l?l;oc<0o`co03So2?lc0?lJo`0ho`Go<`3o4Ol0>?l0 0olc0?ooooooooooo`03ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooon8oc<0 o`Ko03So3?lc0?lHo`0ho`Ko<`3o4?l0>?l4oc<0oago03So0olc0?lCo`0ho`Gooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02oooooe_o<`3o2Ol0>?l>oc<0o`[o03So1olc0?l@o`0ho`Co <`3o7_l0>?l00olc0?oo03Soo`0ho`0Bo`0ho`03oc<0ool0>?oo03So01go03So00?o<`3oo`0hool0 >?l04_l0>?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolUoc<0o`co03So 2_lc0?l;o`0ho`[o<`3o6Ol0>?l4oc<0oi;o03So1Oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooom?l0>?l3o`2So`So03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooolol0>?l6o`2So`Ko03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo 00;oooooeOl0>?l?l5ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_oooooCo`0ho`oo0:?o3_l0>?l=o`2So`;o03So1Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;oooooYOl0>?l5o`2SoaGo03So00?o0:?oo`0hool0>?l04Ol0 >?l@o`2So`go03So3Ol0Xol2o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 oooooj3o03So2ol0XolCo`0ho`?o0:?o4Ol0>?lAo`2So`co03So3ol0Xol00ol0>?ooooooooooo`03 ooooo`7o00000Oooool001Gooooo0_l00003oooooj3o03So2ol0XolBo`0ho`Co0:?o4Ol0>?lBo`2S o`_o03So3ol0Xol00ol0>?ooooooooooo`02ooooo`;o00000Oooool001Gooooo00?o0000oooooooo ool00_oooonOo`0ho`go0:?o4Ol0>?l5o`2So`oo03So4ol0Xol;o`0ho`oo0:?o00?o03Sooooooooo ool00oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooWol0>?l=o`2Soa3o03So 1ol0Xol>o`0hoaCo0:?o2Ol0>?l@o`2So`03o`0hoooooooooooo00?ooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02oooooiko03So3_l0Xol@o`0ho`So0:?o3?l0>?lEo`2So`Wo03So4?l0 Xol00ol0>?ooooooooooo`03ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooon: o`0ho`03o`2Sool0>?oo03So017o03So3ol0Xol>o`0ho`Wo0:?o3?l0>?lFo`2So`Oo03So4_l0Xol5 ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooon9o`0ho`;o0:?o4_l0>?l@o`2S o`go03So2ol0Xol:o`0hoaOo0:?o1ol0>?lBo`2So`Gooooo0Ol00001ooooo`005Oooool00ol0003o ooooooooo`02ooooohWo03So0_l0XolBo`0hoa7o0:?o3?l0>?l?l>o`2So`ko03So 2_l0Xol;o`0hoaKo0:?o2?l0>?l@o`2So`03o`0hoooooooooooo00?ooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02ooooojKo03So1Ol0XolBo`0ho`Go0:?o4?l0>?lBo`2So`co03So3?l0 Xol3o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooookoo03So00?o0:?o o`0hool0>?l04Ol0>?l?o`2Soa3o03So2?l0Xol5o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02ooooomGo03So2ol0XolCo`0ho`Go0:?o1ol0>?l5ooooo`7o00000Oooool001Go oooo00?o0000ooooooooool00_oooooeo`0ho`03o`2Sool0>?oo03So00Oo03So1Oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;oooooool0>?l5ooooo`7o00000Oooool001Gooooo0_l0 0003oooooeco<`3o2Ol0>?lo`0ho`Ko<`3o7?l0>?l3oc<0oa;o03So0olc 0?lMo`0ho`;o<`3o5?l0>?l4ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_oooon9 oc<0o`Co03So3olc0?lEo`0ho`So<`3o3_l0>?l6oc<0oa_o03So1?lc0?lCo`0ho`Gooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02oooooioo<`3o3ol0>?l=oc<0o`[o03So2_lc0?lGo`0h o`Oo<`3o4_l0>?l5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooonVoc<0o`Go 03So4Olc0?l8o`0ho`go<`3o5?l0>?l9oc<0oa7o03So1Oooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo__lc0?l4o`0hoa3o<`3o4_l0>?l;oc<0o`oo03So00?o<`3oooooooooool0 0oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooYOlc0?l9o`0ho`ko<`3o2?l0 >?l?l?oc<0oaKo03So1?lc0?lBo`0ho`?o<`3o7Ol0>?l2 oc<0oaCo03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo>olc0?l;o`0h o`[o<`3o5_l0>?l:oc<0o`co03So1olc0?l@o`0ho`Go<`3oIol0>?l5ooooo`7o00000Oooool001Go oooo00?o0000ooooooooool00_ooooodo`0ho`?o0:?o2?l0>?l5ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_oooooCo`0ho`oo0:?o3ol0>?l9o`2So`Go03So1Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;oooooYOl0>?l9o`2So`oo03So1_l0Xol?l>o`2So`?o03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooQOl0>?l< o`2So`[o03So6?l0Xol5o`0hoa3o0:?o1?l0>?lMo`2So`;o03So5?l0Xol5ooooo`7o00000Oooool0 01Gooooo0_l00003oooooc_o03So2ol0Xol:o`0hoaKo0:?o2_l0>?n?o`2So`Cooooo0_l00001oooo o`005Oooool00ol0003oooooooooo`02ooooooCo0:?o0ol0oo08o`2So`Gooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02ooooomCo0:?o3Ol0oo0Ao`2So`So0?o`1Ol0Xol5ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_oooonoo`2So`03o`3ol?l0Xooo0:?o017o0:?o4?l0 oo0=o`2So`go0?o`0_l0Xol5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooooE o`2So`co0?o`4Ol0Xol9o`3ol0Co0:?o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo 00;ooooomOl0Xol2o`3ol0So0:?o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o oooo??l0>?l9o`2So`co03So5?l0Xol?mko`2So`Gooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02ooooohWo03So1ol0Xol?l>o`2So`Ko03So 6ol0Xol4o`0hoa;o0:?o00?o03Soooooooooool00oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;oooooY_l0>?l7o`2Soa7o03So1?l0Xol?o`0hoa?o0:?o2ol0>?l?l=o`2Soa7o03So1ol0Xol6 o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooooGo03So00?o0:?oo`0h ool0>?l01ol0>?l5ooooo`7o00000Oooool000gooooo0ol00005ooooo`03o`000?oooooooooo00;o oooo??lc0?l9o`0ho`co<`3o5?l0>?l9oc<0oi7o03So1Oooool1o`00007ooooo000>ooooo`03o`00 0?oooooooooo00Cooooo00?o0000ooooooooool00_oooomcoc<0o`So03So2olc0?l:o`0ho`Wo<`3o 6_l0>?l5oc<0oa7o03So1?lc0?lLo`0ho`?o<`3o4ol0>?l5ooooo`7o00000Oooool000kooooo00?o 0000ooooooooool01?ooool2o`0000?oooooW_lc0?l@o`0ho`go<`3o2ol0>?l:oc<0oaKo03So2?lc 0?lAo`0ho`Cooooo0_l00001ooooo`003_ooool00ol0003oooooooooo`04ooooo`03o`000?oooooo oooo00;oooooWOlc0?lBo`0ho`_o<`3o3Ol0>?l8oc<0oa[o03So0olc0?lCo`0ho`Gooooo0Ol00001 ooooo`003_ooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00;oooooD?lc0?lFo`0h o`[o<`3o3?l0>?l9oc<0o`co03So1olc0?lLo`0ho`?o<`3o4ol0>?l2oc<0oc?o03So1Oooool1o`00 007ooooo000=ooooo`;o00001_ooool00ol0003oooooooooo`02oooooo?o03So1Ol0Xol7o`0ho`Go oooo0Ol00001ooooo`003_ooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00;ooooo _Ol0>?l6o`2So`oo03So4Ol0Xol?l5ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_oooon5o`0ho`co0:?o2_l0>?lFo`2So`Oo03So4?l0Xol5o`0hoa_o0:?o1?l0 >?lBo`2So`03o`0hoooooooooooo00?ooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 oooooooo0:?o1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooodol0Xol?o`3o l17o0:?o1Ol0oo07o`2So`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooojGo 0:?o2Ol0oo0?o`2So`Ko0?o`3?l0XolGo`3ol0Wo0:?o3?l0oo04o`2So`Gooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02ooooog3o0:?o3?l0oo09o`2So`co0?o`2_l0XolHo`3ol0Go0:?o 4?l0oo04o`2Soago0?o`0ol0XolBo`3ol003o`2Soooooooooooo00?ooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02ooooooCo0?o`1?l0ohD7o`3ol0Gooooo0Ol00001ooooo`005Oooool0 0ol0003oooooooooo`02ooooom[o0?o`1ol0ohDAo`3ol0Wo0?n51?l0oo05ooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_ooooodo`3ol0Go0?n51_l0oo05ooooo`7o00000Oooool001Go oooo0_l00003ooooocco0:?o2Ol0oo0?l:o`2So`_o03So2_l0Xol9o`0h oaWo0:?o1ol0>?l>o`2So`Ko03So6ol0Xol4o`0hoa?o0:?o1Oooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;oooooW_l0>?l?o`2Soa7o03So1?l0Xol?o`0hoa?o0:?o2ol0>?l>o`2So`;o 03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooe?l0>?l=o`2Soa7o03So 2?l0Xol5o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooooGo03So0_l0 Xol8o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooe7o<`3o5?l0>?l< oc<0o`[o03So2_lc0?l=o`0ho`Oo<`3o6_l0>?l5oc<0odOo03So1Oooool1o`00007ooooo000Eoooo o`03o`000?oooooooooo00;oooooL?lc0?l?l5oc<0oaco03So0olc0?lCo`0h o`;o<`3o7_l0>?l00olc0?oo03Soo`0ho`0Bo`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003o ooooooooo`02oooooooo03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo f_l0>?l9o`2So`oo03So1ol0Xol6o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02ooooojGo03So2Ol0Xol?o`0ho`Ko0:?o3ol0>?lFo`2So`Go03So4Ol0Xol00ol0>?oooooooooo o`03ooooo`7o00000Oooool001Gooooo0_l00003oooooe3o03So5_l0Xol:o`0ho`co0:?o2Ol0>?l< o`2So`[o03So6?l0Xol5o`0hoa3o0:?o1Ol0>?lbo`2So`Cooooo0_l00001ooooo`005Oooool00ol0 003oooooooooo`02ooooom[o0:?o2Ol0oo0?o`2So`Oo0?o`1_l0Xol5ooooo`7o00000Oooool001Go oooo00?o0000ooooooooool00_oooonKo`2SoaKo0?o`2Ol0Xolo`3o6@oo0?n53Ol0oaT00ol0ohGoooooooooo`03ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_oooonPo`3oQ@_o0?lI5?l0ohD2o`3o6A;o0?n54?l0 oaT=o`3oQ@oo0?lI1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooGol0ohD0 0ol0oaWo0?n5o`3oQ@0Xo`3oQ@03o`3o6Ol0ohGo0?n501?o0?n53?l0oaTBo`3oQ@Co0?lI4?l0ohDB o`3o6@_o0?n54?l0oaT5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooomNo`3o Q@;o0?lI5Ol0ohD00ol0oaWo0?n5o`3oQ@0Ao`3oQ@?o0?lI4ol0ohD>o`3o6A3o0?n51_l0oaT>o`3o QACo0?lI2_l0ohD@o`3o6@Gooooo0Ol00001ooooo`005Oooool2o`0000?oooooGOl0ohD3o`3o6ACo 0?n50ol0oaTAo`3oQ@Go0?lI4Ol0ohD@o`3o6@ko0?n52?l0oaTo`3oQA?o0?lI2ol0ohDo`3oQ@Wo0?lI3?l0ohDE o`3o6@Wo0?n53_l0oaT7o`3oQA[o0?lI1?l0ohDCo`3o6@Gooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02oooooeWo0?n52?l0oaTAo`3oQ@Oo0?lI3?l0ohD;o`3o6@[o0?n55ol0oaT7o`3o QA3o0?lI1Ol0ohDLo`3o6@?o0?n54ol0oaT5ooooo`7o00000Oooool001Gooooo00?o0000oooooooo ool00_oooomHo`3oQ@Wo0?lI4?l0ohD9o`3o6@[o0?n53Ol0oaT8o`3oQAWo0?lI1Ol0ohDBo`3o6@?o 0?n57_l0oaT00ol0ohGo0?lIo`3o6@0Bo`3o6@Gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooojKo0?n52?l0oaT>o`3oQ@So0?lI3Ol0ohDDo`3o6@Wo0?n53ol0oaT2o`3oQ@Gooooo 0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooo?o0?n51Ol0oaT7o`3oQ@Gooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02ooooohKo0?o`2_l0ohD?l:o`2So`Wo03So6Ol0Xol6o`0hoa3o0:?o0_l0>?l4 ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_oooooCo`0ho`oo0:?o3ol0>?l9o`2S o`Go03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooom?l0>?l3o`2So`So 03So1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooool0>?l5ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_oooonmo`0ho`Ko0:?o3ol0>?lDo`2So`[o03So2ol0 Xol4o`0ho`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooe3o03So5_l0Xol: o`0ho`co0:?o2Ol0>?l?lbo`2So`Gooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02ooooom3o0:?o5_l0oo0:o`2So`_o0?o`1?l0Xol5oooo o`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolko`2So`_o0?o`2_l0XolFo`3ol0[o 0:?o3?l0oo09o`2So`co0?o`2_l0XomTo`3ol0Gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02oooook[o0?o`3?l0ohD:o`3ol1Ko0?n52_l0oo0;o`3oQ@Co0?o`1Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;oooool_l0ohD7o`3o6@Ko0?n51Oooool1o`00007ooooo0000 1?oooooo0000o`000?l00004ooooo`03o`000?oooooooooo00;ooooo0ol00005ooooo`03o`000?oo oooooooo00;oooooYOl0ohD?l9o`2So`co03So5?l0Xol?mi o`2So`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooojKo03So2_l0Xol;o`0h o`[o0:?o3?l0>?lFo`2So`Ko03So4Ol0Xol00ol0>?ooooooooooo`03ooooo`7o00000Oooool001Go oooo00?o0000ooooooooool00_oooooKo`0ho`Oo0:?o3ol0>?l?l?lFo`2So`[o03So3?l0 Xol9o`0hog[o0:?o1?ooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo^_l0Xol< o`3ol0[o0:?o5_l0oo0:o`2So`_o0?o`1?l0Xol5ooooo`7o00000Oooool001Gooooo00?o0000oooo ooooool00_ooooobo`3ol0Oo0?n51_l0oo05ooooo`7o00000Oooool001Gooooo00?o0000oooooooo ool00_oooonKo`3ol1Ko0?n52Ol0oo0?l:o`2So`co03So5?l0Xol8o`0hoa3o0:?o1Ol0>?lKo`2So`Co03So4ol0Xol5ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_oooonmo`0ho`Ko0:?o3_l0>?lDo`2So`[o03So3ol0 Xol00ol0>?ooooooooooo`03ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooooob o`2So`Oo0?o`1_l0Xol5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooon5o`2S o`co0?o`2_l0XolFo`3ol0Wo0:?o3?l0oo0:o`2SoaKo0?o`1ol0XolAo`3ol003o`2Soooooooooooo 00?ooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooi_o0?o`5_l0ohD9o`3ol0co 0?n52_l0oo0Fo`3oQ@[o0?o`2ol0ohD4o`3ol0Gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02oooook[o0?n53?l0oaT:o`3oQAKo0?lI2_l0ohD;o`3o6@Co0?n51Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;oooood?l0oaTFoe7o00[o0?lI2omAo`04o`3o6@Gooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02ooooom[oDOl03?nmo`0:oe7o00_o_Ol01?mAo`05 ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooooo`okgo00_oomL01?nmo`05oooo o`7o00000Oooool001Gooooo0_l00003oooooa_o_Ol05_ooe`0:okgo00_oomL02_nmo`2_oooG00Co oooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02ooooohGoomL03?ooJ`0:oooG01Koof/0 2Oooe`0oom[00Soo`003OooJ`0Cool000coof/02ooo0004oom[00Gooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02ooooohSoof/01?oo000Boom[00ooo`004?ooJ`05ool0017oof/0 4?oo000?oom[00Ooo`001_ooJ`05ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oo oon9oom[00?oo`004oooJ`0=ool001;oof/00ooo000Coom[00goo`004oooJ`03ool000Soof/01Ooo ool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooR_ooJ`000ooo003oof/0oom[000C oom[00_oo`005?ooJ`000ooo003oof/0oom[000Coom[00_oo`005OooJ`000ooo003oof/0oom[0007 oom[00Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooooooof/01Oooool1o`00 007ooooo000"], ImageRangeCache->{{{0, 287}, {287, 0}} -> {-0.207, -0.172242, 0.00783272, \ 0.00783272}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] ContourGraphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[BoxData[ \(fgm[method_] := Reap[Timing@ NMinimize[{f6[{x, 0, y, 0}]}, {{x, 0, 2}, {y, 0, 2}}, MaxIterations \[Rule] 1000, PrecisionGoal \[Rule] 10, Method \[Rule] method, StepMonitor \[RuleDelayed] Sow[{x, y}]]]\)], "Input"], Cell[BoxData[ \(\(data = \({#, fgm[#]} &\) /@ {"\", "\", \ "\", "\", Automatic};\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(\({#1, #2[\([1]\)]} &\) @@@ data\)], "Input"], Cell[BoxData[ \({{"NelderMead", {2.129066999999999`\ Second, {1.9837500000000003`, {x \ \[Rule] \(-0.030884114539702474`\), y \[Rule] 1.2426101142599186`}}}}, {"DifferentialEvolution", \ {4.527048999999998`\ Second, {0.`, {x \[Rule] \(-0.01662196276380587`\), y \[Rule] 0.0010197598544767934`}}}}, {"SimulatedAnnealing", \ {0.13464999999999705`\ Second, {0.169125`, {x \[Rule] 1.014676120077943`, y \[Rule] 0.16705628352785373`}}}}, {"RandomSearch", \ {0.20575899999999692`\ Second, {0.018375000000000002`, {x \[Rule] 0.35099159450958517`, y \[Rule] \(-0.04938129454502283`\)}}}}, {Automatic, \ {2.0926759999999938`\ Second, {1.9837500000000003`, {x \[Rule] \ \(-0.030884114539702474`\), y \[Rule] 1.2426101142599186`}}}}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Module", "[", RowBox[{\({cp}\), ",", "\[IndentingNewLine]", StyleBox[\( (*\ contour\ plot\ of\ the\ objective\ function\ *) \), "CodeComment"], StyleBox["\[IndentingNewLine]", "CodeComment"], RowBox[{\(cp = Block[{$DisplayFunction = Identity}, \[IndentingNewLine]ContourPlot[ f6[{x, 0, y, 0}], {x, 0, 2}, {y, 0, 2}, \[IndentingNewLine]PlotPoints \[Rule] 360, PlotRange \[Rule] All, \[IndentingNewLine]ContourLines \[Rule] False, \[IndentingNewLine]ColorFunction \[Rule] \((Hue[ 0.7\ \((1 - #)\)] &)\)]]\), ";", "\n", RowBox[{"Show", "[", RowBox[{"GraphicsArray", "[", "\[IndentingNewLine]", StyleBox[\( (*\ show\ contour\ plot\ and\ search\ path\ *) \), "CodeComment"], \(\(Show[{cp, Graphics[{Hue[0], Thickness[0.005], Line[#[\([2, 2, 1]\)]]}]}, \[IndentingNewLine]PlotRange \ \[Rule] {{0, 2}, {0, 2}}, PlotLabel \[Rule] #[\([1]\)], \ \[IndentingNewLine]DisplayFunction \[Rule] Identity, Frame \[Rule] False] &\) /@ \[IndentingNewLine]Take[data, 4]\), "]"}], "]"}]}]}], "]"}]], "Input"], Cell[BoxData[ \($Aborted\)], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Corana's Parabola in 1D", "Subsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Plot[ Evaluate[CoranaFunc /. \ {x1 \[Rule] \ x, x2 \[Rule] 0. , \ x3 \[Rule] 0. , \ x4 \[Rule] 0. }], \ {x, \(-1\), 2.5}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.295918 0.272109 0.0147151 0.267293 [ [.02381 .00222 -6 -9 ] [.02381 .00222 6 0 ] [.15986 .00222 -12 -9 ] [.15986 .00222 12 0 ] [.43197 .00222 -9 -9 ] [.43197 .00222 9 0 ] [.56803 .00222 -3 -9 ] [.56803 .00222 3 0 ] [.70408 .00222 -9 -9 ] [.70408 .00222 9 0 ] [.84014 .00222 -3 -9 ] [.84014 .00222 3 0 ] [.97619 .00222 -9 -9 ] [.97619 .00222 9 0 ] [.28342 .14836 -18 -4.5 ] [.28342 .14836 0 4.5 ] [.28342 .28201 -6 -4.5 ] [.28342 .28201 0 4.5 ] [.28342 .41566 -18 -4.5 ] [.28342 .41566 0 4.5 ] [.28342 .5493 -6 -4.5 ] [.28342 .5493 0 4.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .02381 .01472 m .02381 .02097 L s [(-1)] .02381 .00222 0 1 Mshowa .15986 .01472 m .15986 .02097 L s [(-0.5)] .15986 .00222 0 1 Mshowa .43197 .01472 m .43197 .02097 L s [(0.5)] .43197 .00222 0 1 Mshowa .56803 .01472 m .56803 .02097 L s [(1)] .56803 .00222 0 1 Mshowa .70408 .01472 m .70408 .02097 L s [(1.5)] .70408 .00222 0 1 Mshowa .84014 .01472 m .84014 .02097 L s [(2)] .84014 .00222 0 1 Mshowa .97619 .01472 m .97619 .02097 L s [(2.5)] .97619 .00222 0 1 Mshowa .125 Mabswid .05102 .01472 m .05102 .01847 L s .07823 .01472 m .07823 .01847 L s .10544 .01472 m .10544 .01847 L s .13265 .01472 m .13265 .01847 L s .18707 .01472 m .18707 .01847 L s .21429 .01472 m .21429 .01847 L s .2415 .01472 m .2415 .01847 L s .26871 .01472 m .26871 .01847 L s .32313 .01472 m .32313 .01847 L s .35034 .01472 m .35034 .01847 L s .37755 .01472 m .37755 .01847 L s .40476 .01472 m .40476 .01847 L s .45918 .01472 m .45918 .01847 L s .48639 .01472 m .48639 .01847 L s .51361 .01472 m .51361 .01847 L s .54082 .01472 m .54082 .01847 L s .59524 .01472 m .59524 .01847 L s .62245 .01472 m .62245 .01847 L s .64966 .01472 m .64966 .01847 L s .67687 .01472 m .67687 .01847 L s .73129 .01472 m .73129 .01847 L s .7585 .01472 m .7585 .01847 L s .78571 .01472 m .78571 .01847 L s .81293 .01472 m .81293 .01847 L s .86735 .01472 m .86735 .01847 L s .89456 .01472 m .89456 .01847 L s .92177 .01472 m .92177 .01847 L s .94898 .01472 m .94898 .01847 L s .25 Mabswid 0 .01472 m 1 .01472 L s .29592 .14836 m .30217 .14836 L s [(0.5)] .28342 .14836 1 0 Mshowa .29592 .28201 m .30217 .28201 L s [(1)] .28342 .28201 1 0 Mshowa .29592 .41566 m .30217 .41566 L s [(1.5)] .28342 .41566 1 0 Mshowa .29592 .5493 m .30217 .5493 L s [(2)] .28342 .5493 1 0 Mshowa .125 Mabswid .29592 .04144 m .29967 .04144 L s .29592 .06817 m .29967 .06817 L s .29592 .0949 m .29967 .0949 L s .29592 .12163 m .29967 .12163 L s .29592 .17509 m .29967 .17509 L s .29592 .20182 m .29967 .20182 L s .29592 .22855 m .29967 .22855 L s .29592 .25528 m .29967 .25528 L s .29592 .30874 m .29967 .30874 L s .29592 .33547 m .29967 .33547 L s .29592 .3622 m .29967 .3622 L s .29592 .38893 m .29967 .38893 L s .29592 .44238 m .29967 .44238 L s .29592 .46911 m .29967 .46911 L s .29592 .49584 m .29967 .49584 L s .29592 .52257 m .29967 .52257 L s .29592 .57603 m .29967 .57603 L s .29592 .60276 m .29967 .60276 L s .25 Mabswid .29592 0 m .29592 .61803 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath .5 Mabswid .02381 .0509 m .02846 .0509 L .03279 .0509 L .03406 .0509 L .03527 .0509 L .03636 .0509 L .03754 .25572 L .03882 .25334 L .04018 .25082 L .04262 .24634 L .06244 .21149 L .06369 .2094 L .06438 .20824 L .06501 .03727 L .06576 .03727 L .06647 .03727 L .06782 .03727 L .07293 .03727 L .07881 .03727 L .0842 .03727 L .08668 .03727 L .0893 .03727 L .09038 .03727 L .09153 .03727 L .0928 .16365 L .09399 .16191 L .10458 .14688 L .10945 .14024 L .11202 .13681 L .11474 .13321 L .11712 .13012 L .11777 .12928 L .11847 .12838 L .11974 .02684 L .12092 .02684 L .12216 .02684 L .12437 .02684 L .13382 .02684 L .13795 .02684 L .14241 .02684 L .14366 .02684 L .14497 .02684 L .14609 .02684 L .14732 .09442 L .14848 .09319 L .14972 .09188 L .15196 .08953 L .16216 .07931 L .16708 .07464 L .16951 .0724 L Mistroke .17069 .07133 L .17175 .07037 L .1728 .06943 L .17379 .01963 L .17483 .01963 L .17595 .01963 L .18052 .01963 L .19086 .01963 L .19591 .01963 L .19811 .01963 L .19927 .01963 L .2005 .01963 L .2018 .04669 L .203 .04589 L .20536 .04432 L .21056 .04102 L .21631 .03759 L .22158 .03467 L .22395 .03341 L .22616 .03228 L .22727 .03173 L .22846 .01562 L .22978 .01562 L .23097 .01562 L .24109 .01562 L .24561 .01562 L .24799 .01562 L .2505 .01562 L .25271 .01562 L .25396 .01562 L .25513 .02072 L .2562 .02041 L .25718 .02013 L .25938 .01953 L .26862 .01741 L .27329 .01656 L .27844 .01582 L .27974 .01566 L .28112 .01551 L .28183 .01543 L .28262 .01472 L .28333 .01472 L .284 .01472 L .28532 .01472 L .28652 .01472 L .28719 .01472 L .28791 .01472 L .28922 .01472 L .29042 .01472 L .29174 .01472 L Mistroke .2924 .01472 L .29312 .01472 L .29441 .01472 L .29569 .01472 L .29691 .01472 L .298 .01472 L .29919 .01472 L .29984 .01472 L .30053 .01472 L .30175 .01472 L .30307 .01472 L .30382 .01472 L .30451 .01472 L .30578 .01472 L .30693 .01472 L .30757 .01472 L .30826 .01472 L .30952 .01472 L .31064 .0155 L .31188 .01563 L .31439 .01595 L .31888 .01662 L .32409 .01758 L .3297 .01884 L .33229 .01949 L .33369 .01987 L .335 .02023 L .33613 .02055 L .33732 .01562 L .33801 .01562 L .33865 .01562 L .33986 .01562 L .34959 .01562 L .35491 .01562 L .35751 .01562 L .35989 .01562 L .36093 .01562 L .36206 .01562 L .36314 .01562 L .36413 .03151 L .36529 .03209 L .36633 .03261 L .36868 .03383 L .37835 .03924 L .38362 .04248 L .38853 .04568 L .3898 .04653 L .39101 .04735 L .39167 .01963 L .39239 .01963 L Mistroke .39365 .01963 L .39927 .01963 L .40412 .01963 L .40926 .01963 L .41365 .01963 L .41485 .01963 L .41615 .01963 L .41737 .01963 L .41848 .06895 L .41973 .07005 L .42086 .07107 L .42339 .07338 L .42795 .07764 L .43291 .08246 L .43828 .08788 L .44074 .09042 L .44333 .09316 L .4444 .0943 L .44554 .09553 L .4468 .02684 L .44797 .02684 L .45711 .02684 L .46204 .02684 L .46727 .02684 L .47001 .02684 L .47075 .02684 L .47156 .02684 L .47232 .02684 L .47302 .12794 L .47426 .12953 L .47561 .13128 L .47834 .13484 L .49846 .1628 L .49977 .16473 L .501 .03727 L .50229 .03727 L .5037 .03727 L .50665 .03727 L .50938 .03727 L .51477 .03727 L .5197 .03727 L .52198 .03727 L .52447 .03727 L .52561 .03727 L .52682 .03727 L .52797 .2091 L .529 .21084 L .53901 .22803 L .54867 .24533 L .55132 .25019 L Mistroke .55276 .25286 L .55347 .25417 L .55411 .25537 L .55526 .0509 L .5565 .0509 L .55911 .0509 L .56829 .0509 L .57332 .0509 L .57804 .0509 L .58031 .0509 L .58159 .0509 L .58276 .31174 L .58398 .31426 L .5853 .31702 L .58797 .32263 L .59715 .34229 L .60236 .35371 L .60522 .36007 L .60662 .36321 L .60792 .36612 L .60914 .06774 L .61044 .06774 L .61316 .06774 L .61792 .06774 L .62738 .06774 L .6301 .06774 L .63268 .06774 L .63381 .06774 L .635 .06774 L .63631 .433 L .63753 .43599 L .65585 .48239 L .69356 .58551 L .70296 .61282 L Mfstroke .70296 .61282 m .70472 .61803 L s .71687 .61803 m .71806 .11104 L .71875 .11104 L .71947 .11104 L .72078 .11104 L .72374 .11104 L .73371 .11104 L .73854 .11104 L .74092 .11104 L .74313 .11104 L .74435 .11104 L s .74435 .11104 m .7454 .61803 L s .77188 .61803 m .77262 .1375 L .77374 .1375 L .77497 .1375 L .77611 .1375 L .78043 .1375 L .78541 .1375 L .78994 .1375 L .7949 .1375 L .79626 .1375 L .79773 .1375 L .7984 .1375 L .79911 .1375 L s .79911 .1375 m .79987 .61803 L s .82668 .61803 m .82704 .16717 L .82769 .16717 L .83006 .16717 L .84087 .16717 L .84619 .16717 L .84878 .16717 L .85113 .16717 L .85229 .16717 L .85355 .16717 L s .85355 .16717 m .8541 .61803 L s .88112 .61803 m .88157 .20005 L .88263 .20005 L .88498 .20005 L .88996 .20005 L .89939 .20005 L .90197 .20005 L .90475 .20005 L .90609 .20005 L .90737 .20005 L s .90737 .20005 m .90778 .61803 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 177.938}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooooo`03o`000?oooooooooo01_ooooo00Co0000oooooooo oooo00001oooool01Ol0003ooooooooooooooooo000003Oooooo00Co0000oooooooooooo00001ooo ool01Ol0003ooooooooooooooooo000001cooooo00?o0000ooooooooool07?ooool00ol0003ooooo ooooo`07ooooo`05o`000?ooooooooooooooool000007?ooool01?l0003oooooooooool0000Koooo o`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`000008ooooo`001_ooool5 o`0000?ooooo00?o0000ooooooooool05?ooool5o`0000;ooooo00Co0000oooooooooooo00002ooo ool00ol0003oooooooooo`0eooooo`04o`000?ooooooooooo`0000_ooooo00?o0000ooooooooool0 6_ooool00ol0003oooooooooo`0Looooo`03o`000?oooooooooo00_ooooo00?o0000ooooooooool0 6oooool00ol0003oooooooooo`0Looooo`03o`000?oooooooooo00_ooooo00?o0000ooooooooool0 1_ooool000kooooo00?o0000ooooooooool06oooool01?l0003oooooooooool0000;ooooo`03o`00 0?oooooooooo03Gooooo00Co0000oooooooooooo00002oooool00ol0003oooooooooo`0Jooooo`03 o`000?oooooooooo01cooooo00?o0000ooooooooool02oooool00ol0003oooooooooo`0Looooo`03 o`000?oooooooooo01cooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`06ooooo`00 3_ooool00ol0003oooooooooo`0Kooooo`04o`000?ooooooooooo`0000Oooooo1?l0000hooooo`04 o`000?ooooooooooo`0000Oooooo1?l0000Mooooo`03o`000?oooooooooo01cooooo00?o0000oooo ooooool01oooool4o`0001cooooo00Go0000ooooooooooooooooo`00000Jooooo`05o`000?oooooo ooooooooool000001oooool4o`0000Wooooo000=ooooo`;o00007Oooool01?l0003oooooooooool0 0007ooooo`03o`000?oooooooooo03Wooooo00Co0000oooooooooooo00001oooool00ol0003ooooo ooooo`0Mooooo`;o00007Oooool2o`0000Wooooo00?o0000ooooooooool07Oooool01Ol0003ooooo oooooooooooo000001[ooooo00Go0000ooooooooooooooooo`000007ooooo`03o`000?oooooooooo 00[ooooo000>ooooo`03o`000?oooooooooo01cooooo0_l00008ooooo`Go0000>?ooool2o`0000So oooo1Ol0000Looooo`03o`000?oooooooooo01cooooo00?o0000ooooooooool01oooool5o`0001co oooo0ol0000Looooo`?o00002?ooool5o`0000Sooooo001Fooooo`03o`000?oooooooooo0ooooo`?o00001Oooool0 0ol0003oooooooooo`1;ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool0 0ol0003oooooooooo`0Cooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool0 0ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool0 0ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool08?ooool0 04oooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`1;ooooo`03o`000?oooooooooo 00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`0Cooooo`03o`000?oooooooooo 00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo 00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo 00Cooooo00?o0000ooooooooool08?ooool004oooooo00?o0000ooooooooool01?ooool00ol0003o ooooooooo`1;ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003o ooooooooo`0Cooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003o ooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003o ooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool08?ooool004oooooo 00?o0000ooooooooool01?ooool3o`0004_ooooo00?o0000ooooooooool01?ooool00ol0003ooooo ooooo`05ooooo`03o`000?oooooooooo01?ooooo00?o0000ooooooooool01?ooool00ol0003ooooo ooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003ooooo ooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003ooooo ooooo`0Pooooo`00Coooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo04_ooooo00?o 0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo01?ooooo00?o 0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o 0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o 0000ooooooooool01?ooool00ol0003oooooooooo`0Pooooo`00C_ooool2o`0000Kooooo00?o0000 ooooooooool0Boooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000 ooooooooool04oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000 ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000 ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo023ooooo001?oooo o`03o`000?oooooooooo00Cooooo00?o0000ooooooooool0Boooool00ol0003oooooooooo`04oooo o`03o`000?oooooooooo00Gooooo00?o0000ooooooooool04oooool00ol0003oooooooooo`04oooo o`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05oooo o`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04oooo o`03o`000?oooooooooo023ooooo001Fooooo`03o`000?oooooooooo04_ooooo00?o0000oooooooo ool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo01?ooooo00?o0000oooooooo ool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000oooooooo ool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000oooooooo ool01?ooool00ol0003oooooooooo`0Pooooo`00E_ooool00ol0003oooooooooo`1;ooooo`03o`00 0?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`0Cooooo`03o`00 0?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`00 0?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`00 0?oooooooooo00Cooooo00?o0000ooooooooool08?ooool005Kooooo00?o0000ooooooooool0Booo ool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool04ooo ool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?oo ool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Ooo ool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo023ooooo001Fooooo`;o0000C?ooool0 0ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool04oooool0 0ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool0 0ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool0 0ol0003oooooooooo`04ooooo`03o`000?oooooooooo023ooooo001Fooooo`03o`000?oooooooooo 04_ooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo 01?ooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo 00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo 00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`0Pooooo`00E_ooool00ol0003o ooooooooo`1ooooo`?o00001Oooool00ol0003oooooooooo`1Wooooo`03o`000?oooooo oooo00Kooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooo oooo00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`04ooooo`03o`000?oooooo oooo00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`0Pooooo`00E_ooool00ol0 003oooooooooo`1Wooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01Oooool00ol0 003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0 003oooooooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0 003oooooooooo`0Pooooo`00E_ooool00ol0003oooooooooo`1Xooooo`03o`000?oooooooooo00Go oooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Go oooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Go oooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`0Pooooo`00E_ooool00ol0003ooooo ooooo`1Xooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01Oooool00ol0003ooooo ooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003ooooo ooooo`04ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003ooooo ooooo`0Pooooo`00E_ooool2o`0006[ooooo00?o0000ooooooooool01?ooool00ol0003ooooooooo o`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003ooooooooo o`04ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003ooooooooo o`04ooooo`03o`000?oooooooooo023ooooo001Fooooo`03o`000?oooooooooo06Wooooo00?o0000 ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000 ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Cooooo00?o0000 ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo023ooooo001Foooo o`03o`000?oooooooooo06Wooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05oooo o`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04oooo o`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04oooo o`03o`000?oooooooooo023ooooo001Fooooo`03o`000?oooooooooo06[ooooo00?o0000oooooooo ool00oooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000oooooooo ool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Cooooo00?o0000oooooooo ool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo023ooooo001Fooooo`03o`00 0?oooooooooo06[ooooo00?o0000ooooooooool00oooool00ol0003oooooooooo`05ooooo`03o`00 0?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`00 0?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`00 0?oooooooooo023ooooo001Fooooo`03o`000?oooooooooo06[ooooo00?o0000ooooooooool00ooo ool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Ooo ool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Ooo ool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo023ooooo001Fooooo`03o`000?oooooo oooo06_ooooo00?o0000ooooooooool00_ooool00ol0003oooooooooo`05ooooo`03o`000?oooooo oooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooo oooo00Cooooo00?o0000ooooooooool01Oooool00ol0003oooooooooo`04ooooo`03o`000?oooooo oooo023ooooo001Fooooo`;o0000K?ooool00ol0003oooooooooo`02ooooo`03o`000?oooooooooo 00Gooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo 00Cooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo 00Cooooo00?o0000ooooooooool08?ooool005Kooooo00?o0000ooooooooool0Joooool00ol0003o ooooooooo`02ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01?ooool00ol0003o ooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01?ooool00ol0003o ooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool08?ooool005Kooooo 00?o0000ooooooooool0K?ooool01Ol0003ooooooooooooooooo000000Oooooo00?o0000oooooooo ool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000oooooooo ool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Cooooo00?o0000oooooooo ool08?ooool005Kooooo00?o0000ooooooooool0K?ooool01Ol0003ooooooooooooooooo000000Oo oooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Co oooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00Co oooo00?o0000ooooooooool08?ooool005Kooooo00?o0000ooooooooool0KOooool01?l0003ooooo ooooool00007ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003o ooooooooo`04ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool01Oooool00ol0003o ooooooooo`04ooooo`03o`000?oooooooooo023ooooo0000\ \>"], ImageRangeCache->{{{0, 287}, {176.938, 0}} -> {-1.16691, -0.170227, \ 0.013476, 0.0137188}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(NMinimize[ CoranaFunc /. \ {x1 \[Rule] x - 0.73, \ x2 \[Rule] 0. , \ x3 \[Rule] 0. , \ x4 \[Rule] 0. }, x, Method -> "\"]\)], "Input"], Cell[BoxData[ \({0.`, {x \[Rule] 0.7747045018860196`}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(m = FindMinimumPlot[f6[{x, 0, 0, 0}], {x, 0.9}, Method -> "\", PlotRange \[Rule] {{0, 1}, {0, 1}}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0 1 0 0.618034 [ [.2 -0.0125 -9 -9 ] [.2 -0.0125 9 0 ] [.4 -0.0125 -9 -9 ] [.4 -0.0125 9 0 ] [.6 -0.0125 -9 -9 ] [.6 -0.0125 9 0 ] [.8 -0.0125 -9 -9 ] [.8 -0.0125 9 0 ] [1 -0.0125 -3 -9 ] [1 -0.0125 3 0 ] [-0.0125 .12361 -18 -4.5 ] [-0.0125 .12361 0 4.5 ] [-0.0125 .24721 -18 -4.5 ] [-0.0125 .24721 0 4.5 ] [-0.0125 .37082 -18 -4.5 ] [-0.0125 .37082 0 4.5 ] [-0.0125 .49443 -18 -4.5 ] [-0.0125 .49443 0 4.5 ] [-0.0125 .61803 -6 -4.5 ] [-0.0125 .61803 0 4.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .2 0 m .2 .00625 L s [(0.2)] .2 -0.0125 0 1 Mshowa .4 0 m .4 .00625 L s [(0.4)] .4 -0.0125 0 1 Mshowa .6 0 m .6 .00625 L s [(0.6)] .6 -0.0125 0 1 Mshowa .8 0 m .8 .00625 L s [(0.8)] .8 -0.0125 0 1 Mshowa 1 0 m 1 .00625 L s [(1)] 1 -0.0125 0 1 Mshowa .125 Mabswid .05 0 m .05 .00375 L s .1 0 m .1 .00375 L s .15 0 m .15 .00375 L s .25 0 m .25 .00375 L s .3 0 m .3 .00375 L s .35 0 m .35 .00375 L s .45 0 m .45 .00375 L s .5 0 m .5 .00375 L s .55 0 m .55 .00375 L s .65 0 m .65 .00375 L s .7 0 m .7 .00375 L s .75 0 m .75 .00375 L s .85 0 m .85 .00375 L s .9 0 m .9 .00375 L s .95 0 m .95 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .12361 m .00625 .12361 L s [(0.2)] -0.0125 .12361 1 0 Mshowa 0 .24721 m .00625 .24721 L s [(0.4)] -0.0125 .24721 1 0 Mshowa 0 .37082 m .00625 .37082 L s [(0.6)] -0.0125 .37082 1 0 Mshowa 0 .49443 m .00625 .49443 L s [(0.8)] -0.0125 .49443 1 0 Mshowa 0 .61803 m .00625 .61803 L s [(1)] -0.0125 .61803 1 0 Mshowa .125 Mabswid 0 .0309 m .00375 .0309 L s 0 .0618 m .00375 .0618 L s 0 .09271 m .00375 .09271 L s 0 .15451 m .00375 .15451 L s 0 .18541 m .00375 .18541 L s 0 .21631 m .00375 .21631 L s 0 .27812 m .00375 .27812 L s 0 .30902 m .00375 .30902 L s 0 .33992 m .00375 .33992 L s 0 .40172 m .00375 .40172 L s 0 .43262 m .00375 .43262 L s 0 .46353 m .00375 .46353 L s 0 .52533 m .00375 .52533 L s 0 .55623 m .00375 .55623 L s 0 .58713 m .00375 .58713 L s .25 Mabswid 0 0 m 0 .61803 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath .5 Mabswid .4 .01136 m .42028 .01136 L .43084 .01136 L .43643 .01136 L .4424 .01136 L .4453 .01136 L .44672 .01136 L .44804 .01136 L .44923 .01136 L .44983 .01136 L .45049 .12543 L .45116 .1258 L .45187 .12619 L .45316 .12692 L .46318 .13259 L .48482 .14527 L .50567 .15803 L .52572 .17081 L .53691 .17816 L .5422 .18169 L .54706 .18496 L .54834 .18583 L .54896 .18625 L .54953 .18664 L .55013 .02804 L .55078 .02804 L .55214 .02804 L .55764 .02804 L .5676 .02804 L .58852 .02804 L .60864 .02804 L .61882 .02804 L .63006 .02804 L .63517 .02804 L .64069 .02804 L .64322 .02804 L .6459 .02804 L .64818 .02804 L .6488 .02804 L .64947 .02804 L .6501 .2612 L .65067 .26166 L .67166 .27881 L .69186 .29583 L .71334 .31449 L .72403 .32398 L .73402 .33299 L .74361 .34175 L .74637 .34429 L .74774 .34555 L Mistroke .7484 .34616 L .749 .34671 L .74958 .34726 L .75014 .05215 L .75072 .05215 L .75135 .05215 L .75392 .05215 L .77547 .05215 L .79623 .05215 L .81619 .05215 L .82731 .05215 L .83744 .05215 L .84248 .05215 L .84513 .05215 L .84659 .05215 L .84795 .05215 L .84913 .05215 L .8498 .05215 L .85041 .44696 L .85104 .44762 L .85173 .44835 L .85312 .44981 L .85789 .45486 L .87922 .47775 L .89974 .50032 L .9 .50061 L Mfstroke 0 0 0 r .055 w .4 .01136 Mdot 1 0 0 r .0325 w .9 .50061 Mdot .4 .01136 Mdot 0 1 0 r .02 w .9 .50061 Mdot .9 .50061 Mdot .9 .50061 Mdot .4 .01136 Mdot .4 .01136 Mdot .4 .01136 Mdot 0 0 1 r .5 Mabswid .9 .50061 m .9 .50061 L .4 .01136 L s .015 w .9 .50061 Mdot .9 .50061 Mdot .4 .01136 Mdot % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 177.938}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooooo`03o`000?oooooooooo01Oooooo 00?o0000ooooooooool05oooool00ol0003oooooooooo`0Gooooo`03o`000?oooooooooo02[ooooo 000Gooooo`03o`000?oooooooooo077ooooo00?o0000ooooooooool01oooool00ol00?oooooooooo o`0=ooooo`03o`000?oooooooooo01Oooooo00?o0000ooooooooool05oooool00ol0003ooooooooo o`0Gooooo`03o`000?oooooooooo02[ooooo000Gooooo`03o`000?oooooooooo077ooooo00?o0000 ooooooooool02?ooool00ol00?ooooooooooo`0;ooooo00?o003oo`000?oo00000ooo000Nooooo`00 0_ooool01?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool000001Oooool00ol0 003oooooooooo`3Sooooo`03o`00oooo003oo`0000?oo`007Oooool000;ooooo00Co0000oooooooo oooo00002?ooool3o`0000Kooooo0_l0003Sooooo`;oo`0000Co003oo`3o0?l0o`3o0?l00_oo000L ooooo`000_ooool01?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool000001Ooo ool00ol0003oooooooooo`3Rooooo`;oo`000ol00?l2o`3o0003ool00?oooooooooo01[ooooo0002 ooooo`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`000005ooooo`03o`00 0?oooooooooo0>;ooooo0_oo0003o`00o`;o0?l000?oo`00ooooooooool06_ooool000?ooooo0_l0 0009ooooo`?o00001_ooool00ol0003oooooooooo`3Rooooo`;oo`000ol00?l2o`3o0003ool00?oo oooooooo01[ooooo000Gooooo`03o`000?oooooooooo0>?ooooo0_oo0003o`3o0003ool00?oooooo oooo01_ooooo000Gooooo`03o`000?oooooooooo0>Cooooo1?oo000Nooooo`005oooool00ol0003o ooooooooo`3oooooo`Oooooo000Gooooo`03o`000?oooooooooo0?oooooo1oooool001Oooooo00?o 0000ooooooooool0ooooool7ooooo`005oooool00ol0003oooooooooo`3oooooo`Oooooo000Goooo o`03o`000?oooooooooo0?oooooo1oooool001Oooooo00?o0000ooooooooool0ooooool7ooooo`00 5oooool00ol0003oooooooooo`3oooooo`Oooooo000Gooooo`03o`000?oooooooooo0?oooooo1ooo ool001Oooooo00?o0000ooooooooool0ooooool7ooooo`005oooool00ol0003oooooooooo`3ooooo o`Oooooo000Gooooo`03o`000?oooooooooo0?oooooo1oooool001Oooooo00?o0000ooooooooool0 ooooool7ooooo`005oooool00ol0003oooooooooo`3oooooo`Oooooo000Gooooo`03o`000?oooooo oooo0?oooooo1oooool001Oooooo00?o0000ooooooooool0ooooool7ooooo`005oooool00ol0003o ooooooooo`3oooooo`Oooooo000Gooooo`03o`000?oooooooooo0?oooooo1oooool001Oooooo00?o 0000ooooooooool0ooooool7ooooo`005oooool00ol0003oooooooooo`3oooooo`Oooooo000Goooo o`03o`000?oooooooooo0?oooooo1oooool001Oooooo00?o0000ooooooooool0ooooool7ooooo`00 5oooool00ol0003oooooooooo`3oooooo`Oooooo000Gooooo`03o`000?oooooooooo0?oooooo1ooo ool000kooooo0ol00006ooooo`03o`000?oooooooooo0?oooooo1oooool000oooooo00?o0000oooo ooooool01Oooool00ol0003oooooooooo`3oooooo`Oooooo000?ooooo`03o`000?oooooooooo00Go oooo00?o0000ooooooooool0ooooool7ooooo`003oooool00ol0003oooooooooo`05ooooo`;o0000 ooooool8ooooo`003oooool00ol0003oooooooooo`3oooooo`oooooo000>ooooo`;o0000oooooolA ooooo`003oooool00ol0003oooooooooo`3oooooo`oooooo003oooooob7ooooo0000\ \>"], ImageRangeCache->{{{0, 287}, {176.938, 0}} -> {-0.0888029, -0.0764114, \ 0.00385797, 0.00624232}}], Cell[BoxData[ RowBox[{"{", RowBox[{\({0.018375000000000002`, {x \[Rule] 0.4`}}\), ",", \({"Steps" \[Rule] 1, "Function" \[Rule] 6, "Gradient" \[Rule] 2}\), ",", TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]}], "}"}]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Plot[f6[{x, 0, 0, 0}], {x, 0.3, 0.5}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -1.40476 4.76191 0.0147151 2.35442 [ [.2619 .00222 -12 -9 ] [.2619 .00222 12 0 ] [.5 .00222 -9 -9 ] [.5 .00222 9 0 ] [.7381 .00222 -12 -9 ] [.7381 .00222 12 0 ] [.97619 .00222 -9 -9 ] [.97619 .00222 9 0 ] [.01131 .13244 -24 -4.5 ] [.01131 .13244 0 4.5 ] [.01131 .25016 -18 -4.5 ] [.01131 .25016 0 4.5 ] [.01131 .36788 -24 -4.5 ] [.01131 .36788 0 4.5 ] [.01131 .4856 -18 -4.5 ] [.01131 .4856 0 4.5 ] [.01131 .60332 -24 -4.5 ] [.01131 .60332 0 4.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .2619 .01472 m .2619 .02097 L s [(0.35)] .2619 .00222 0 1 Mshowa .5 .01472 m .5 .02097 L s [(0.4)] .5 .00222 0 1 Mshowa .7381 .01472 m .7381 .02097 L s [(0.45)] .7381 .00222 0 1 Mshowa .97619 .01472 m .97619 .02097 L s [(0.5)] .97619 .00222 0 1 Mshowa .125 Mabswid .07143 .01472 m .07143 .01847 L s .11905 .01472 m .11905 .01847 L s .16667 .01472 m .16667 .01847 L s .21429 .01472 m .21429 .01847 L s .30952 .01472 m .30952 .01847 L s .35714 .01472 m .35714 .01847 L s .40476 .01472 m .40476 .01847 L s .45238 .01472 m .45238 .01847 L s .54762 .01472 m .54762 .01847 L s .59524 .01472 m .59524 .01847 L s .64286 .01472 m .64286 .01847 L s .69048 .01472 m .69048 .01847 L s .78571 .01472 m .78571 .01847 L s .83333 .01472 m .83333 .01847 L s .88095 .01472 m .88095 .01847 L s .92857 .01472 m .92857 .01847 L s .25 Mabswid 0 .01472 m 1 .01472 L s .02381 .13244 m .03006 .13244 L s [(0.05)] .01131 .13244 1 0 Mshowa .02381 .25016 m .03006 .25016 L s [(0.1)] .01131 .25016 1 0 Mshowa .02381 .36788 m .03006 .36788 L s [(0.15)] .01131 .36788 1 0 Mshowa .02381 .4856 m .03006 .4856 L s [(0.2)] .01131 .4856 1 0 Mshowa .02381 .60332 m .03006 .60332 L s [(0.25)] .01131 .60332 1 0 Mshowa .125 Mabswid .02381 .03826 m .02756 .03826 L s .02381 .0618 m .02756 .0618 L s .02381 .08535 m .02756 .08535 L s .02381 .10889 m .02756 .10889 L s .02381 .15598 m .02756 .15598 L s .02381 .17952 m .02756 .17952 L s .02381 .20307 m .02756 .20307 L s .02381 .22661 m .02756 .22661 L s .02381 .2737 m .02756 .2737 L s .02381 .29724 m .02756 .29724 L s .02381 .32079 m .02756 .32079 L s .02381 .34433 m .02756 .34433 L s .02381 .39142 m .02756 .39142 L s .02381 .41497 m .02756 .41497 L s .02381 .43851 m .02756 .43851 L s .02381 .46205 m .02756 .46205 L s .02381 .50914 m .02756 .50914 L s .02381 .53269 m .02756 .53269 L s .02381 .55623 m .02756 .55623 L s .02381 .57977 m .02756 .57977 L s .25 Mabswid .02381 0 m .02381 .61803 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath .5 Mabswid .02381 .22661 m .06244 .23823 L .10458 .25125 L .14415 .26382 L .18221 .27621 L .22272 .28973 L .24141 .29608 L .25127 .29946 L .25666 .30132 L .2593 .30223 L .26045 .30263 L .26171 .30306 L .26301 .05798 L .26425 .05798 L .26698 .05798 L .27279 .05798 L .28302 .05798 L .30316 .05798 L .3438 .05798 L .38293 .05798 L .42451 .05798 L .46458 .05798 L .50313 .05798 L .54413 .05798 L .58362 .05798 L .62159 .05798 L .66202 .05798 L .70093 .05798 L .7111 .05798 L .72217 .05798 L .72723 .05798 L .73262 .05798 L .73483 .05798 L .73599 .05798 L .73721 .05798 L .73786 .05798 L .73858 .4917 L .73983 .49226 L .74229 .49335 L .78285 .51161 L .82189 .5295 L .86339 .54887 L .90337 .56787 L .94184 .58646 L .97619 .60332 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 177.938}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgoooool0 0ol0003oooooooooo`1kooooo`03o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooooooo 03_ooooo00?o0000ooooooooool0Noooool00ol0003oooooooooo`16ooooo`006oooool00ol0003o ooooooooo`0kooooo`03o`000?oooooooooo07_ooooo00?o0000ooooooooool0A_ooool001_ooooo 00?o0000ooooooooool0>oooool00ol0003oooooooooo`1kooooo`03o`000?oooooooooo04Kooooo 000Kooooo`;o0000??ooool00ol0003oooooooooo`1kooooo`03o`000?oooooooooo04Kooooo000K ooooo`03o`000?oooooooooo03_ooooo00?o0000ooooooooool0Noooool00ol0003oooooooooo`16 ooooo`006oooool00ol0003oooooooooo`0kooooo`03o`000?oooooooooo07_ooooo00?o0000oooo ooooool0A_ooool001_ooooo00?o0000ooooooooool0>oooool00ol0003oooooooooo`1kooooo`03 o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooooooo03_ooooo00?o0000ooooooooool0 Noooool00ol0003oooooooooo`16ooooo`006oooool00ol0003oooooooooo`0kooooo`03o`000?oo oooooooo07_ooooo00?o0000ooooooooool0A_ooool001_ooooo0ol0000kooooo`03o`000?oooooo oooo07_ooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000ooooooooool00ol0000hoooo o`03o`000?oooooooooo07_ooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000oooooooo ool00oooool3o`0003Gooooo00?o0000ooooooooool0Noooool00ol0003oooooooooo`16ooooo`00 6oooool00ol0003oooooooooo`06ooooo`?o0000<_ooool00ol0003oooooooooo`1kooooo`03o`00 0?oooooooooo04Kooooo0008ooooo`;o00001?ooool00ol0003oooooooooo`02ooooo`?o00001Ooo ool00ol0003oooooooooo`09ooooo`?o0000;oooool00ol0003oooooooooo`1kooooo`03o`000?oo oooooooo04Kooooo0007ooooo`04o`000?ooooooooooo`0000Wooooo00?o0000ooooooooool01?oo ool00ol0003oooooooooo`0_ooool2o`0007gooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000oooo ooooool0^Oooool00ol0003oooooooooo`16ooooo`006oooool00ol0003oooooooooo`2iooooo`03 o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0 A_ooool001_ooooo00?o0000ooooooooool0^Oooool00ol0003oooooooooo`16ooooo`006oooool2 o`000;[ooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000ooooooooool0^Oooool00ol0 003oooooooooo`16ooooo`006oooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Ko oooo000Kooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0A_ooool001_ooooo00?o 0000ooooooooool0^Oooool00ol0003oooooooooo`16ooooo`006oooool00ol0003oooooooooo`2i ooooo`03o`000?oooooooooo04Kooooo000Kooooo`;o0000^_ooool00ol0003oooooooooo`16oooo o`006oooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Kooooo000Kooooo`03o`00 0?oooooooooo0;Wooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000ooooooooool0^Ooo ool00ol0003oooooooooo`16ooooo`000_ooool2o`0000Cooooo00?o0000ooooooooool00_ooool3 o`0000?ooooo0ol00005ooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0A_ooool0 0005ooooool0003oooooooooool000002Oooool01Ol0003ooooooooooooooooo000000?ooooo00?o 0000ooooooooool00_ooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Kooooo0000 1Ooooooo0000oooooooooooo000000Wooooo00?o0000ooooooooool01Oooool00ol0003ooooooooo o`02ooooo`;o0000^_ooool00ol0003oooooooooo`16ooooo`0000Goooooo`000?ooooooooooo`00 0009ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool00_ooool00ol0003ooooooooo o`2iooooo`03o`000?oooooooooo04Kooooo00001Ooooooo0000oooooooooooo000000Wooooo00Co 0000oooooooooooooooo1?l00005ooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0 A_ooool00005ooooool0003oooooooooool000002?ooool2o`0000?ooooo00?o0000ooooooooool0 1_ooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Kooooo0002ooooo`;o00002_oo ool01?l0003oooooooooooooool5o`0000Cooooo00?o0000ooooooooool0^Oooool00ol0003ooooo ooooo`16ooooo`006oooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Kooooo000K ooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0A_ooool001_ooooo0_l0002joooo o`03o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooooooo0;Wooooo00?o0000oooooooo ool0A_ooool001_ooooo00?o0000ooooooooool0^Oooool00ol0003oooooooooo`16ooooo`006ooo ool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooo oooo0;Wooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000ooooooooool0^Oooool00ol0 003oooooooooo`16ooooo`006oooool2o`000;[ooooo00?o0000ooooooooool0A_ooool001_ooooo 00?o0000ooooooooool0^Oooool00ol0003oooooooooo`16ooooo`006oooool00ol0003ooooooooo o`2iooooo`03o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooooooo0;Wooooo00?o0000 ooooooooool0A_ooool001_ooooo00?o0000ooooooooool0^Oooool00ol0003oooooooooo`16oooo o`006oooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo04Kooooo000Kooooo`;o0000 ^_ooool00ol0003oooooooooo`16ooooo`006oooool00ol0003oooooooooo`2iooooo`03o`000?oo oooooooo04Kooooo000Kooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0A_ooool0 01_ooooo00?o0000ooooooooool0^Oooool00ol0003oooooooooo`16ooooo`006oooool00ol0003o ooooooooo`2iooooo`03o`000?oooooooooo04Kooooo000Kooooo`03o`000?oooooooooo0;Wooooo 00?o0000ooooooooool0A_ooool001_ooooo0_l0002jooooo`03o`000?oooooooooo04Kooooo000K ooooo`03o`000?oooooooooo0;Wooooo00?o0000ooooooooool0A_ooool001_ooooo00?o0000oooo ooooool0^Oooool00ol0003oooooooooo`16ooooo`006oooool00ol0003oooooooooo`2iooooo`03 o`000?oooooooooo04Kooooo0008ooooo`;o00001?ooool01?l0003oooooooooooooool5o`0000Co oooo00?o0000ooooooooool0^Oooool00ol0003oooooooooo`16ooooo`001oooool01?l0003ooooo ooooool00008ooooo`04o`000?ooooooooooo`0000Cooooo00?o0000ooooooooool0^Oooool00ol0 003oooooooooo`16ooooo`001oooool01?l0003oooooooooool00009ooooo`03o`000?oooooooooo 00Cooooo0_l0002jooooo`03o`000?oooooooooo04Kooooo0007ooooo`04o`000?ooooooooooo`00 00[ooooo00?o0000ooooooooool00oooool00ol0003oooooooooo`2iooooo`03o`000?oooooooooo 04Kooooo0007ooooo`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`000004 ooooo`03o`000?oooooooooo0;Wooooo0ol00016ooooo`001oooool01?l0003oooooooooool00007 ooooo`05o`000?ooooooooooooooool000001?ooool00ol0003oooooooooo`2looooo`;o0000A?oo ool000Sooooo0_l00009ooooo`?o00001Oooool00ol0003oooooooooo`2nooooo`?o0000@Oooool0 01_ooooo00?o0000ooooooooool0`Oooool2o`0003oooooo000Kooooo`03o`000?oooooooooo0Oooool001_ooooo00?o0000ooooooooool0bOooool2o`0003Oooooo000Koooo o`03o`000?oooooooooo0<_ooooo0_l0000eooooo`006oooool00ol0003oooooooooo`3=ooooo`;o 0000;ooooo0_l0000Nooooo`00 6oooool00ol0003oooooooooo`3Tooooo`;o00007?ooool001_ooooo00?o0000ooooooooool0i_oo ool2o`0001[ooooo000Kooooo`03o`000?oooooooooo0>Sooooo0_l0000Hooooo`006oooool2o`00 0>_ooooo0_l0000Fooooo`006oooool00ol0003oooooooooo`3/ooooo`;o00005?ooool001_ooooo 00?o0000ooooooooool0k_ooool2o`0001;ooooo000Kooooo`03o`000?oooooooooo0?3ooooo0ol0 000?ooooo`000_ooool2o`0000Cooooo00Co0000oooooooooooooooo1Ol00002ooooo`?o00001Ooo ool00ol0003oooooooooo`3cooooo`;o00003Oooool00005ooooool0003oooooooooool000002?oo ool01_l0003oooooooooool0003oooooo`0000?ooooo00?o0000ooooooooool00_ooool00ol0003o ooooooooo`3eooooo`?o00002_ooool00005ooooool0003oooooooooool000002Oooool00ol0003o ooooooooo`05ooooo`03o`000?oooooooooo00;ooooo0_l0003iooooo`03o`000?oooooooooo00Oo oooo00001Ooooooo0000oooooooooooo000000[ooooo00?o0000ooooooooool01?ooool00ol0003o ooooooooo`02ooooo`03o`000?oooooooooo0?oooooo0oooool00005ooooool0003oooooooooool0 00001oooool01_l0003ooooooooooooooooo0000ooooo`Co00001Oooool00ol0003oooooooooo`3o ooooo`?ooooo00001Ooooooo0000oooooooooooo000000Oooooo00Oo0000ooooooooooooooooo`00 0?oooooo000000Sooooo00?o0000ooooooooool0ooooool3ooooo`000_ooool2o`0000Wooooo0ol0 0002ooooo`Go00001?ooool00ol0003oooooooooo`3oooooo`?ooooo003oooooob7ooooo003ooooo ob7ooooo003oooooob7ooooo0000\ \>"], ImageRangeCache->{{{0, 287}, {176.938, 0}} -> {0.278228, -0.0240252, \ 0.000797743, 0.00161347}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Rosenbrock's Function", "Section"], Cell[BoxData[ \(Rosenbrock[coeff_List] := \ Total[\ 100\ \((Drop[coeff, 1] - Drop[coeff, \(-1\)]^2)\)^2\ + \ \((1 - Drop[coeff, \(-1\)])\)^2]\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]ContourPlot[ Rosenbrock[{x1, x2}], \ {x1, 0, 2}, {x2, 0, 2}, ColorFunction \[Rule] \((Hue[0.7\ \((1 - #)\)] &)\), ContourLines \[Rule] False, Contours \[Rule] \ 60], \[IndentingNewLine]Plot3D[ Rosenbrock[{x1, x2}], {x1, 0, 2}, {x2, 0, 2}]\[IndentingNewLine]]\[IndentingNewLine]]\)], "Input"], Cell[CellGroupData[{ Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% ContourGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0192308 0.480769 0.0192308 0.480769 [ [.01923 -0.0125 -3 -9 ] [.01923 -0.0125 3 0 ] [.25962 -0.0125 -9 -9 ] [.25962 -0.0125 9 0 ] [.5 -0.0125 -3 -9 ] [.5 -0.0125 3 0 ] [.74038 -0.0125 -9 -9 ] [.74038 -0.0125 9 0 ] [.98077 -0.0125 -3 -9 ] [.98077 -0.0125 3 0 ] [ 0 0 -0.125 0 ] [-0.0125 .01923 -6 -4.5 ] [-0.0125 .01923 0 4.5 ] [-0.0125 .25962 -18 -4.5 ] [-0.0125 .25962 0 4.5 ] [-0.0125 .5 -6 -4.5 ] [-0.0125 .5 0 4.5 ] [-0.0125 .74038 -18 -4.5 ] [-0.0125 .74038 0 4.5 ] [-0.0125 .98077 -6 -4.5 ] [-0.0125 .98077 0 4.5 ] [ 0 0 -0.125 0 ] [ 0 1 .125 0 ] [ 1 0 .125 0 ] [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .01923 0 m .01923 .00625 L s [(0)] .01923 -0.0125 0 1 Mshowa .25962 0 m .25962 .00625 L s [(0.5)] .25962 -0.0125 0 1 Mshowa .5 0 m .5 .00625 L s [(1)] .5 -0.0125 0 1 Mshowa .74038 0 m .74038 .00625 L s [(1.5)] .74038 -0.0125 0 1 Mshowa .98077 0 m .98077 .00625 L s [(2)] .98077 -0.0125 0 1 Mshowa .125 Mabswid .06731 0 m .06731 .00375 L s .11538 0 m .11538 .00375 L s .16346 0 m .16346 .00375 L s .21154 0 m .21154 .00375 L s .30769 0 m .30769 .00375 L s .35577 0 m .35577 .00375 L s .40385 0 m .40385 .00375 L s .45192 0 m .45192 .00375 L s .54808 0 m .54808 .00375 L s .59615 0 m .59615 .00375 L s .64423 0 m .64423 .00375 L s .69231 0 m .69231 .00375 L s .78846 0 m .78846 .00375 L s .83654 0 m .83654 .00375 L s .88462 0 m .88462 .00375 L s .93269 0 m .93269 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .01923 m .00625 .01923 L s [(0)] -0.0125 .01923 1 0 Mshowa 0 .25962 m .00625 .25962 L s [(0.5)] -0.0125 .25962 1 0 Mshowa 0 .5 m .00625 .5 L s [(1)] -0.0125 .5 1 0 Mshowa 0 .74038 m .00625 .74038 L s [(1.5)] -0.0125 .74038 1 0 Mshowa 0 .98077 m .00625 .98077 L s [(2)] -0.0125 .98077 1 0 Mshowa .125 Mabswid 0 .06731 m .00375 .06731 L s 0 .11538 m .00375 .11538 L s 0 .16346 m .00375 .16346 L s 0 .21154 m .00375 .21154 L s 0 .30769 m .00375 .30769 L s 0 .35577 m .00375 .35577 L s 0 .40385 m .00375 .40385 L s 0 .45192 m .00375 .45192 L s 0 .54808 m .00375 .54808 L s 0 .59615 m .00375 .59615 L s 0 .64423 m .00375 .64423 L s 0 .69231 m .00375 .69231 L s 0 .78846 m .00375 .78846 L s 0 .83654 m .00375 .83654 L s 0 .88462 m .00375 .88462 L s 0 .93269 m .00375 .93269 L s .25 Mabswid 0 0 m 0 1 L s .01923 .99375 m .01923 1 L s .25962 .99375 m .25962 1 L s .5 .99375 m .5 1 L s .74038 .99375 m .74038 1 L s .98077 .99375 m .98077 1 L s .125 Mabswid .06731 .99625 m .06731 1 L s .11538 .99625 m .11538 1 L s .16346 .99625 m .16346 1 L s .21154 .99625 m .21154 1 L s .30769 .99625 m .30769 1 L s .35577 .99625 m .35577 1 L s .40385 .99625 m .40385 1 L s .45192 .99625 m .45192 1 L s .54808 .99625 m .54808 1 L s .59615 .99625 m .59615 1 L s .64423 .99625 m .64423 1 L s .69231 .99625 m .69231 1 L s .78846 .99625 m .78846 1 L s .83654 .99625 m .83654 1 L s .88462 .99625 m .88462 1 L s .93269 .99625 m .93269 1 L s .25 Mabswid 0 1 m 1 1 L s .99375 .01923 m 1 .01923 L s .99375 .25962 m 1 .25962 L s .99375 .5 m 1 .5 L s .99375 .74038 m 1 .74038 L s .99375 .98077 m 1 .98077 L s .125 Mabswid .99625 .06731 m 1 .06731 L s .99625 .11538 m 1 .11538 L s .99625 .16346 m 1 .16346 L s .99625 .21154 m 1 .21154 L s .99625 .30769 m 1 .30769 L s .99625 .35577 m 1 .35577 L s .99625 .40385 m 1 .40385 L s .99625 .45192 m 1 .45192 L s .99625 .54808 m 1 .54808 L s .99625 .59615 m 1 .59615 L s .99625 .64423 m 1 .64423 L s .99625 .69231 m 1 .69231 L s .99625 .78846 m 1 .78846 L s .99625 .83654 m 1 .83654 L s .99625 .88462 m 1 .88462 L s .99625 .93269 m 1 .93269 L s .25 Mabswid 1 0 m 1 1 L s 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath .13 0 1 r .01923 .98077 m .98077 .98077 L .98077 .01923 L .01923 .01923 L F .06 0 1 r .01923 .15163 m .05929 .15645 L .09936 .16778 L .12863 .17949 L .13942 .18529 L .17949 .20992 L .19338 .21955 L .21955 .24085 L .24072 .25962 L .25962 .2783 L .27978 .29968 L .29968 .32237 L .31365 .33974 L .33974 .37288 L .34425 .37981 L .37288 .41987 L .37981 .42994 L .39771 .45994 L .41987 .49374 L .4216 .5 L .44543 .54006 L .45994 .56413 L .46363 .58013 L .48823 .62019 L .5 .64095 L .50973 .66026 L .52686 .70032 L .54006 .72438 L .54758 .74038 L .56126 .78045 L .58013 .81425 L .58293 .82051 L .5998 .86058 L .61523 .90064 L .62019 .91071 L .63219 .94071 L .64173 .98077 L .01923 .98077 L F 0 .01 1 r .01923 .25069 m .05929 .25481 L .08575 .25962 L .09936 .26554 L .13942 .28293 L .16882 .29968 L .17949 .30684 L .21955 .33739 L .22234 .33974 L .25962 .37458 L .26475 .37981 L .29968 .41833 L .30098 .41987 L .33309 .45994 L .33974 .46875 L .36217 .5 L .37981 .52577 L .38902 .54006 L .41426 .58013 L .41987 .58935 L .43761 .62019 L .45994 .65953 L .46031 .66026 L .4812 .70032 L .5 .73638 L .5018 .74038 L .52097 .78045 L .54006 .81978 L .54035 .82051 L .55769 .86058 L .57601 .90064 L .58013 .90986 L .59193 .94071 L .60922 .98077 L .01923 .98077 L F 0 .08 1 r .01923 .31867 m .05929 .32262 L .09936 .33318 L .11738 .33974 L .13942 .35039 L .17949 .37421 L .18764 .37981 L .21955 .40467 L .23693 .41987 L .25962 .44174 L .27707 .45994 L .29968 .48543 L .31183 .5 L .33974 .53573 L .34295 .54006 L .37134 .58013 L .37981 .59269 L .39758 .62019 L .41987 .65624 L .42224 .66026 L .44536 .70032 L .45994 .72645 L .46733 .74038 L .48834 .78045 L .5 .80327 L .50833 .82051 L .52768 .86058 L .54006 .88671 L .54621 .90064 L .56415 .94071 L .58013 .97668 L .58173 .98077 L .01923 .98077 L F 0 .15 1 r .01923 .37383 m .05929 .37768 L .07408 .37981 L .09936 .38818 L .13942 .40531 L .16553 .41987 L .17949 .42906 L .21955 .45943 L .22015 .45994 L .25962 .49646 L .26312 .5 L .29965 .54006 L .29968 .5401 L .33198 .58013 L .33974 .59039 L .36128 .62019 L .37981 .64731 L .38829 .66026 L .41349 .70032 L .41987 .71086 L .43712 .74038 L .45962 .78045 L .45994 .78102 L .48086 .82051 L .5 .85784 L .50134 .86058 L .5208 .90064 L .5398 .94071 L .54006 .94128 L .55779 .98077 L .01923 .98077 L F 0 .22 1 r .01923 .42151 m .05929 .42531 L .09936 .43575 L .13942 .45282 L .15294 .45994 L .17949 .47653 L .21128 .5 L .21955 .50687 L .25584 .54006 L .25962 .54385 L .29335 .58013 L .29968 .58748 L .32635 .62019 L .33974 .63774 L .35615 .66026 L .37981 .69463 L .38356 .70032 L .40905 .74038 L .41987 .75817 L .43297 .78045 L .45564 .82051 L .45994 .82834 L .47711 .86058 L .49773 .90064 L .5 .90514 L .51737 .94071 L .53642 .98077 L .01923 .98077 L F 0 .29 1 r .01923 .46412 m .05929 .46787 L .09936 .47827 L .13942 .4953 L .14854 .5 L .17949 .51898 L .20834 .54006 L .21955 .5493 L .25347 .58013 L .25962 .58625 L .29132 .62019 L .29968 .62986 L .32455 .66026 L .33974 .6801 L .35453 .70032 L .37981 .73698 L .38206 .74038 L .40765 .78045 L .41987 .80051 L .43166 .82051 L .45439 .86058 L .45994 .87067 L .47594 .90064 L .49659 .94071 L .5 .94746 L .5163 .98077 L .01923 .98077 L F 0 .36 1 r .01923 .50298 m .05929 .5067 L .09936 .51707 L .13942 .53408 L .15093 .54006 L .17949 .55773 L .21 .58013 L .21955 .58803 L .25484 .62019 L .25962 .62496 L .29252 .66026 L .29968 .66855 L .32563 .70032 L .33974 .71878 L .35552 .74038 L .37981 .77565 L .38298 .78045 L .40852 .82051 L .41987 .83917 L .43248 .86058 L .45517 .90064 L .45994 .90933 L .47669 .94071 L .4973 .98077 L .01923 .98077 L F 0 .43 1 r .01923 .53895 m .03332 .54006 L .05929 .54264 L .09936 .55299 L .13942 .56997 L .15833 .58013 L .17949 .59361 L .21515 .62019 L .21955 .62388 L .25907 .66026 L .25962 .66081 L .2962 .70032 L .29968 .70438 L .32893 .74038 L .33974 .7546 L .35854 .78045 L .37981 .81147 L .38578 .82051 L .41114 .86058 L .41987 .87498 L .43496 .90064 L .45751 .94071 L .45994 .94513 L .47893 .98077 L .01923 .98077 L F 0 .5 1 r .01923 .57259 m .05929 .57626 L .084 .58013 L .09936 .58658 L .13942 .60355 L .169 .62019 L .17949 .62717 L .21955 .65743 L .22291 .66026 L .25962 .69434 L .26551 .70032 L .29968 .7379 L .30179 .74038 L .33396 .78045 L .33974 .78812 L .36314 .82051 L .37981 .84498 L .39005 .86058 L .41514 .90064 L .41987 .90848 L .43873 .94071 L .45994 .97863 L .4611 .98077 L .01923 .98077 L F 0 .57 1 r .01923 .60429 m .05929 .60795 L .09936 .61825 L .10528 .62019 L .13942 .63521 L .17949 .65881 L .18165 .66026 L .21955 .68906 L .23262 .70032 L .25962 .72597 L .2736 .74038 L .29968 .76952 L .30888 .78045 L .33974 .81972 L .34034 .82051 L .369 .86058 L .37981 .87658 L .39549 .90064 L .41987 .94007 L .42025 .94071 L .44356 .98077 L .01923 .98077 L F 0 .64 1 r .01923 .63437 m .05929 .63801 L .09936 .64829 L .1299 .66026 L .13942 .66523 L .17949 .68883 L .1959 .70032 L .21955 .71907 L .24362 .74038 L .25962 .75597 L .28292 .78045 L .29968 .79951 L .31711 .82051 L .33974 .84971 L .34778 .86058 L .37585 .90064 L .37981 .90656 L .40187 .94071 L .41987 .97005 L .42624 .98077 L .01923 .98077 L F 0 .71 1 r .01923 .66303 m .05929 .66666 L .09936 .67694 L .13942 .69387 L .15183 .70032 L .17949 .71745 L .21073 .74038 L .21955 .74768 L .2555 .78045 L .25962 .78457 L .29312 .82051 L .29968 .82811 L .3262 .86058 L .33974 .8783 L .35606 .90064 L .37981 .93515 L .38349 .94071 L .40901 .98077 L .01923 .98077 L F 0 .78 1 r .01923 .69048 m .05929 .69409 L .09276 .70032 L .09936 .70436 L .13942 .72128 L .17286 .74038 L .17949 .74485 L .21955 .77508 L .22589 .78045 L .25962 .81196 L .26801 .82051 L .29968 .8555 L .304 .86058 L .33595 .90064 L .33974 .90568 L .36498 .94071 L .37981 .96252 L .39176 .98077 L .01923 .98077 L F 0 .85 1 r .01923 .71685 m .05929 .72045 L .09936 .73071 L .12508 .74038 L .13942 .74762 L .17949 .77119 L .19286 .78045 L .21955 .80141 L .24127 .82051 L .25962 .83828 L .28093 .86058 L .29968 .88181 L .31536 .90064 L .33974 .93199 L .34621 .94071 L .3744 .98077 L .01923 .98077 L F 0 .92 1 r .01923 .74225 m .05929 .74585 L .09936 .7561 L .13942 .773 L .15365 .78045 L .17949 .79656 L .21201 .82051 L .21955 .82677 L .25656 .86058 L .25962 .86364 L .29406 .90064 L .29968 .90717 L .32705 .94071 L .33974 .95734 L .35684 .98077 L .01923 .98077 L F 0 .99 1 r .01923 .7668 m .05929 .77038 L .09922 .78045 L .09936 .78062 L .13942 .79752 L .17867 .82051 L .17949 .82107 L .21955 .85128 L .23041 .86058 L .25962 .88815 L .27179 .90064 L .29968 .93167 L .30732 .94071 L .33894 .98077 L .01923 .98077 L F 0 1 .94 r .01923 .79056 m .05929 .79414 L .09936 .80437 L .13807 .82051 L .13942 .82126 L .17949 .84481 L .20162 .86058 L .21955 .87502 L .2482 .90064 L .25962 .91188 L .28686 .94071 L .29968 .95539 L .32063 .98077 L .01923 .98077 L F 0 1 .87 r .01923 .81361 m .05929 .81718 L .08196 .82051 L .09936 .82741 L .13942 .8443 L .16852 .86058 L .17949 .86784 L .21955 .89804 L .22266 .90064 L .25962 .93489 L .26536 .94071 L .29968 .97841 L .3017 .98077 L .01923 .98077 L F 0 1 .8 r .01923 .83601 m .05929 .83958 L .09936 .8498 L .12753 .86058 L .13942 .86668 L .17949 .89022 L .19447 .90064 L .21955 .92041 L .24256 .94071 L .25962 .95726 L .28205 .98077 L .01923 .98077 L F 0 1 .73 r .01923 .85782 m .05187 .86058 L .05929 .86138 L .09936 .87159 L .13942 .88847 L .16186 .90064 L .17949 .912 L .21779 .94071 L .21955 .94219 L .25962 .97904 L .26134 .98077 L .01923 .98077 L F 0 1 .66 r .01923 .87907 m .05929 .88262 L .09936 .89283 L .12087 .90064 L .13942 .90971 L .17949 .93323 L .19037 .94071 L .21955 .96342 L .23938 .98077 L .01923 .98077 L F 0 1 .59 r .01923 .89981 m .03034 .90064 L .05929 .90336 L .09936 .91356 L .13942 .93043 L .15865 .94071 L .17949 .95395 L .21553 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .92007 m .05929 .92361 L .09936 .93382 L .11868 .94071 L .13942 .95068 L .17949 .9742 L .1891 .98077 L .01923 .98077 L F 0 1 .45 r .01923 .93988 m .03021 .94071 L .05929 .94342 L .09936 .95362 L .13942 .97048 L .15868 .98077 L .01923 .98077 L F 0 1 .38 r .01923 .95928 m .05929 .96281 L .09936 .97301 L .12078 .98077 L .01923 .98077 L F 0 1 .31 r .01923 .97829 m .04929 .98077 L .01923 .98077 L F .06 0 1 r .74644 .98077 m .74038 .96269 L .73315 .94071 L .71961 .90064 L .70821 .86058 L .70032 .84464 L .69169 .82051 L .67728 .78045 L .66325 .74038 L .66026 .73413 L .64746 .70032 L .63676 .66026 L .62019 .63 L .61613 .62019 L .59983 .58013 L .58369 .54006 L .58013 .53311 L .56573 .5 L .54957 .45994 L .54006 .44261 L .52933 .41987 L .51202 .37981 L .5 .35905 L .49535 .33974 L .4705 .29968 L .45994 .28236 L .45067 .25962 L .42439 .21955 L .41987 .2126 L .40129 .17949 L .37981 .14923 L .37444 .13942 L .34467 .09936 L .33974 .09311 L .31372 .05929 L .29968 .04535 L .27841 .01923 L .98077 .01923 L .98077 .98077 L F 0 .01 1 r .7776 .98077 m .76855 .94071 L .75338 .90064 L .74038 .8658 L .73989 .86058 L .72818 .82051 L .71267 .78045 L .70032 .74856 L .69879 .74038 L .68538 .70032 L .66922 .66026 L .66026 .63806 L .65524 .62019 L .63966 .58013 L .62261 .54006 L .62019 .53437 L .60787 .5 L .59032 .45994 L .58013 .43733 L .57365 .41987 L .55574 .37981 L .54006 .34711 L .53712 .33974 L .51848 .29968 L .5 .26362 L .49821 .25962 L .47806 .21955 L .45994 .18685 L .45619 .17949 L .43361 .13942 L .41987 .11682 L .40965 .09936 L .38368 .05929 L .37981 .05368 L .35635 .01923 L .98077 .01923 L .98077 .98077 L F 0 .08 1 r .79994 .98077 m .78653 .94071 L .78045 .92252 L .7748 .90064 L .76197 .86058 L .74805 .82051 L .74038 .79865 L .73526 .78045 L .72183 .74038 L .70725 .70032 L .70032 .6815 L .69365 .66026 L .6792 .62019 L .66377 .58013 L .66026 .5711 L .64935 .54006 L .63358 .5 L .62019 .46741 L .61748 .45994 L .60153 .41987 L .58424 .37981 L .58013 .37046 L .56737 .33974 L .5492 .29968 L .54006 .28022 L .53087 .25962 L .51154 .21955 L .5 .19673 L .4916 .17949 L .47063 .13942 L .45994 .11997 L .44881 .09936 L .42554 .05929 L .41987 .05001 L .40121 .01923 L .98077 .01923 L .98077 .98077 L F 0 .15 1 r .81594 .98077 m .80405 .94071 L .79121 .90064 L .78045 .86775 L .77848 .86058 L .76626 .82051 L .75291 .78045 L .74038 .74393 L .73934 .74038 L .72644 .70032 L .7124 .66026 L .70032 .62682 L .69818 .62019 L .68426 .58013 L .6693 .54006 L .66026 .51644 L .65442 .5 L .63918 .45994 L .62308 .41987 L .62019 .41279 L .60728 .37981 L .59049 .33974 L .58013 .31585 L .57341 .29968 L .55578 .25962 L .54006 .22564 L .53734 .21955 L .51858 .17949 L .5 .14216 L .49867 .13942 L .47832 .09936 L .45994 .06539 L .45667 .05929 L .43413 .01923 L .98077 .01923 L .98077 .98077 L F 0 .22 1 r .82976 .98077 m .82051 .95084 L .81776 .94071 L .80601 .90064 L .79344 .86058 L .78051 .82051 L .78045 .82032 L .76834 .78045 L .75523 .74038 L .74168 .70032 L .74038 .69653 L .72868 .66026 L .71487 .62019 L .70056 .58013 L .70032 .57946 L .6867 .54006 L .67197 .5 L .66026 .4691 L .65696 .45994 L .64188 .41987 L .626 .37981 L .62019 .36546 L .61009 .33974 L .59351 .29968 L .58013 .26854 L .5764 .25962 L .55897 .21955 L .5406 .17949 L .54006 .17835 L .522 .13942 L .50227 .09936 L .5 .09486 L .48205 .05929 L .46057 .01923 L .98077 .01923 L .98077 .98077 L F 0 .29 1 r .84244 .98077 m .83041 .94071 L .82051 .90837 L .81835 .90064 L .80656 .86058 L .79409 .82051 L .78127 .78045 L .78045 .7779 L .76893 .74038 L .75591 .70032 L .74246 .66026 L .74038 .65413 L .72934 .62019 L .7156 .58013 L .70139 .54006 L .70032 .53708 L .68742 .5 L .67277 .45994 L .66026 .42674 L .65776 .41987 L .64269 .37981 L .6269 .33974 L .62019 .32311 L .61094 .29968 L .59443 .25962 L .58013 .2262 L .57733 .21955 L .55993 .17949 L .54165 .13942 L .54006 .13601 L .52303 .09936 L .50341 .05929 L .5 .05254 L .4832 .01923 L .98077 .01923 L .98077 .98077 L F 0 .36 1 r .85346 .98077 m .84194 .94071 L .82996 .90064 L .82051 .86962 L .81793 .86058 L .80605 .82051 L .79361 .78045 L .78084 .74038 L .78045 .73917 L .76842 .70032 L .7554 .66026 L .742 .62019 L .74038 .61542 L .72881 .58013 L .71507 .54006 L .7009 .5 L .70032 .49839 L .68687 .45994 L .67222 .41987 L .66026 .38806 L .65723 .37981 L .6421 .33974 L .62632 .29968 L .62019 .28444 L .61034 .25962 L .59381 .21955 L .58013 .18754 L .57673 .17949 L .55927 .13942 L .541 .09936 L .54006 .09735 L .52233 .05929 L .5027 .01923 L .98077 .01923 L .98077 .98077 L F 0 .43 1 r .86345 .98077 m .86058 .9709 L .85222 .94071 L .84063 .90064 L .82866 .86058 L .82051 .83374 L .81668 .82051 L .80469 .78045 L .79224 .74038 L .78045 .70331 L .77954 .70032 L .76701 .66026 L .75397 .62019 L .74057 .58013 L .74038 .57958 L .72733 .54006 L .71356 .5 L .70032 .46255 L .69942 .45994 L .6853 .41987 L .67062 .37981 L .66026 .35223 L .65565 .33974 L .64042 .29968 L .62461 .25962 L .62019 .24863 L .60859 .21955 L .59199 .17949 L .58013 .15173 L .5749 .13942 L .55735 .09936 L .54006 .06154 L .53904 .05929 L .52027 .01923 L .98077 .01923 L .98077 .98077 L F 0 .5 1 r .8731 .98077 m .86156 .94071 L .86058 .93732 L .85031 .90064 L .83866 .86058 L .82667 .82051 L .82051 .80018 L .81474 .78045 L .80265 .74038 L .79016 .70032 L .78045 .66976 L .77753 .66026 L .76488 .62019 L .75178 .58013 L .74038 .54604 L .73844 .54006 L .72508 .5 L .71125 .45994 L .70032 .42903 L .69715 .41987 L .68291 .37981 L .66816 .33974 L .66026 .31872 L .65318 .29968 L .63785 .25962 L .62198 .21955 L .62019 .21512 L .6059 .17949 L .5892 .13942 L .58013 .11822 L .57207 .09936 L .55438 .05929 L .54006 .02805 L .53602 .01923 L .98077 .01923 L .98077 .98077 L F 0 .57 1 r .882 .98077 m .87067 .94071 L .86058 .90566 L .85919 .90064 L .84786 .86058 L .83613 .82051 L .82412 .78045 L .82051 .76854 L .81221 .74038 L .80002 .70032 L .78748 .66026 L .78045 .63813 L .77488 .62019 L .76212 .58013 L .74896 .54006 L .74038 .51442 L .73565 .5 L .72218 .45994 L .70827 .41987 L .70032 .39741 L .69417 .37981 L .67981 .33974 L .66499 .29968 L .66026 .28712 L .64998 .25962 L .63452 .21955 L .62019 .18352 L .6186 .17949 L .60241 .13942 L .58559 .09936 L .58013 .08663 L .56838 .05929 L .55053 .01923 L .98077 .01923 L .98077 .98077 L F 0 .64 1 r .89027 .98077 m .87916 .94071 L .86778 .90064 L .86058 .87563 L .85638 .86058 L .84492 .82051 L .83312 .78045 L .82108 .74038 L .82051 .73853 L .80916 .70032 L .79688 .66026 L .78429 .62019 L .78045 .60812 L .7717 .58013 L .75883 .54006 L .7456 .5 L .74038 .48442 L .7323 .45994 L .7187 .41987 L .70471 .37981 L .70032 .36742 L .6906 .33974 L .67611 .29968 L .66119 .25962 L .66026 .25713 L .64613 .21955 L .63054 .17949 L .62019 .15354 L .61458 .13942 L .59822 .09936 L .58126 .05929 L .58013 .05666 L .56395 .01923 L .98077 .01923 L .98077 .98077 L F 0 .71 1 r .89798 .98077 m .8871 .94071 L .87591 .90064 L .86449 .86058 L .86058 .847 L .85313 .82051 L .84156 .78045 L .82969 .74038 L .82051 .7099 L .81769 .70032 L .80566 .66026 L .79329 .62019 L .78065 .58013 L .78045 .57951 L .76804 .54006 L .75506 .5 L .74177 .45994 L .74038 .45581 L .72844 .41987 L .71472 .37981 L .70065 .33974 L .70032 .33882 L .68649 .29968 L .67187 .25962 L .66026 .22853 L .65692 .21955 L .64171 .17949 L .62599 .13942 L .62019 .12495 L .60995 .09936 L .59342 .05929 L .58013 .02807 L .57636 .01923 L .98077 .01923 L .98077 .98077 L F 0 .78 1 r .90542 .98077 m .90064 .96338 L .89457 .94071 L .88358 .90064 L .87231 .86058 L .86084 .82051 L .86058 .81959 L .84949 .78045 L .83782 .74038 L .82589 .70032 L .82051 .68249 L .81392 .66026 L .80177 .62019 L .78931 .58013 L .78045 .55211 L .77669 .54006 L .76396 .5 L .75088 .45994 L .74038 .42842 L .73757 .41987 L .72413 .37981 L .7103 .33974 L .70032 .31144 L .69621 .29968 L .6819 .25962 L .66716 .21955 L .66026 .20115 L .65215 .17949 L .63677 .13942 L .62091 .09936 L .62019 .09757 L .60477 .05929 L .58805 .01923 L .98077 .01923 L .98077 .98077 L F 0 .85 1 r .9126 .98077 m .90165 .94071 L .90064 .93703 L .89082 .90064 L .87973 .86058 L .8684 .82051 L .86058 .79324 L .85698 .78045 L .84551 .74038 L .83374 .70032 L .82175 .66026 L .82051 .65616 L .80978 .62019 L .79752 .58013 L .78498 .54006 L .78045 .52578 L .77236 .5 L .7595 .45994 L .74632 .41987 L .74038 .4021 L .73299 .37981 L .71941 .33974 L .70547 .29968 L .70032 .28512 L .69134 .25962 L .67688 .21955 L .662 .17949 L .66026 .17484 L .64692 .13942 L .63137 .09936 L .62019 .07126 L .61542 .05929 L .59909 .01923 L .98077 .01923 L .98077 .98077 L F 0 .92 1 r .91943 .98077 m .9086 .94071 L .90064 .91164 L .89769 .90064 L .88677 .86058 L .87559 .82051 L .86419 .78045 L .86058 .76786 L .8528 .74038 L .84121 .70032 L .82936 .66026 L .82051 .63079 L .81737 .62019 L .80531 .58013 L .79294 .54006 L .78045 .50042 L .78032 .5 L .76767 .45994 L .75469 .41987 L .74141 .37981 L .74038 .37674 L .72805 .33974 L .71433 .29968 L .70032 .25977 L .70027 .25962 L .68607 .21955 L .67146 .17949 L .66026 .14949 L .6565 .13942 L .64126 .09936 L .62554 .05929 L .62019 .04592 L .60949 .01923 L .98077 .01923 L .98077 .98077 L F 0 .99 1 r .92594 .98077 m .91524 .94071 L .90435 .90064 L .90064 .88711 L .89348 .86058 L .88245 .82051 L .87118 .78045 L .86058 .74334 L .85974 .74038 L .84833 .70032 L .83663 .66026 L .8247 .62019 L .82051 .60628 L .81272 .58013 L .80053 .54006 L .78806 .5 L .78045 .47591 L .77544 .45994 L .76266 .41987 L .74956 .37981 L .74038 .35224 L .73625 .33974 L .72275 .29968 L .7089 .25962 L .70032 .23526 L .6948 .21955 L .68044 .17949 L .66567 .13942 L .66026 .12499 L .65063 .09936 L .63521 .05929 L .62019 .02142 L .61932 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .94 r .93217 .98077 m .9216 .94071 L .91082 .90064 L .90064 .86336 L .89989 .86058 L .88901 .82051 L .87788 .78045 L .86653 .74038 L .86058 .7196 L .85512 .70032 L .84358 .66026 L .83179 .62019 L .82051 .58254 L .8198 .58013 L .80778 .54006 L .79547 .5 L .78291 .45994 L .78045 .45218 L .77027 .41987 L .75735 .37981 L .74414 .33974 L .74038 .32851 L .73078 .29968 L .71714 .25962 L .70315 .21955 L .70032 .21154 L .68899 .17949 L .67445 .13942 L .66026 .10127 L .65954 .09936 L .64439 .05929 L .62877 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .87 r .93813 .98077 m .92769 .94071 L .91703 .90064 L .90618 .86058 L .90064 .84032 L .89529 .82051 L .8843 .78045 L .87307 .74038 L .86165 .70032 L .86058 .69657 L .85024 .66026 L .83859 .62019 L .82671 .58013 L .82051 .55951 L .81472 .54006 L .80257 .5 L .79015 .45994 L .78045 .42915 L .77754 .41987 L .7648 .37981 L .75176 .33974 L .74038 .30549 L .73846 .29968 L .72502 .25962 L .71122 .21955 L .70032 .18852 L .69715 .17949 L .68285 .13942 L .66815 .09936 L .66026 .07826 L .65315 .05929 L .6378 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .8 r .94387 .98077 m .94071 .96838 L .93355 .94071 L .92301 .90064 L .91226 .86058 L .90135 .82051 L .90064 .81793 L .89046 .78045 L .87936 .74038 L .86805 .70032 L .86058 .67418 L .85663 .66026 L .84512 .62019 L .83337 .58013 L .8214 .54006 L .82051 .53713 L .80938 .5 L .79711 .45994 L .78459 .41987 L .78045 .40678 L .77195 .37981 L .75907 .33974 L .74591 .29968 L .74038 .28312 L .73256 .25962 L .71896 .21955 L .70503 .17949 L .70032 .16616 L .69088 .13942 L .6764 .09936 L .66154 .05929 L .66026 .05589 L .64642 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .73 r .94941 .98077 m .94071 .94658 L .93919 .94071 L .92876 .90064 L .91812 .86058 L .9073 .82051 L .90064 .79614 L .8964 .78045 L .88542 .74038 L .87422 .70032 L .86283 .66026 L .86058 .6524 L .85141 .62019 L .83978 .58013 L .82793 .54006 L .82051 .51535 L .81594 .5 L .80381 .45994 L .79143 .41987 L .78045 .385 L .77882 .37981 L .76611 .33974 L .7531 .29968 L .74038 .26134 L .73981 .25962 L .72639 .21955 L .71264 .17949 L .70032 .14438 L .69858 .13942 L .68431 .09936 L .66966 .05929 L .66026 .03412 L .65468 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .66 r .95478 .98077 m .94464 .94071 L .94071 .92534 L .93432 .90064 L .92378 .86058 L .91305 .82051 L .90216 .78045 L .90064 .7749 L .89127 .74038 L .88018 .70032 L .86889 .66026 L .86058 .63116 L .85747 .62019 L .84597 .58013 L .83423 .54006 L .82228 .5 L .82051 .49412 L .81027 .45994 L .79802 .41987 L .78552 .37981 L .78045 .36377 L .77288 .33974 L .76002 .29968 L .74688 .25962 L .74038 .24012 L .73354 .21955 L .71996 .17949 L .70605 .13942 L .70032 .12316 L .69191 .09936 L .67746 .05929 L .66263 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .59 r .96001 .98077 m .94992 .94071 L .94071 .9046 L .93968 .90064 L .92925 .86058 L .91862 .82051 L .90781 .78045 L .90064 .75417 L .89691 .74038 L .88593 .70032 L .87475 .66026 L .86337 .62019 L .86058 .61044 L .85194 .58013 L .84033 .54006 L .82849 .5 L .82051 .47339 L .8165 .45994 L .80438 .41987 L .79201 .37981 L .78045 .34305 L .77941 .33974 L .7667 .29968 L .75371 .25962 L .74043 .21955 L .74038 .2194 L .72702 .17949 L .71328 .13942 L .70032 .10245 L .69924 .09936 L .68498 .05929 L .67034 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .52 r .96513 .98077 m .95505 .94071 L .94489 .90064 L .94071 .88435 L .93455 .86058 L .92401 .82051 L .91329 .78045 L .90241 .74038 L .90064 .73392 L .89151 .70032 L .88042 .66026 L .86914 .62019 L .86058 .59019 L .85772 .58013 L .84622 .54006 L .83449 .5 L .82255 .45994 L .82051 .45315 L .81053 .41987 L .79829 .37981 L .7858 .33974 L .78045 .32281 L .77316 .29968 L .7603 .25962 L .74717 .21955 L .74038 .19916 L .73384 .17949 L .72026 .13942 L .70636 .09936 L .70032 .08221 L .69223 .05929 L .67778 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .45 r .97017 .98077 m .96006 .94071 L .94994 .90064 L .94071 .86454 L .93968 .86058 L .92924 .82051 L .91861 .78045 L .90781 .74038 L .90064 .71411 L .89691 .70032 L .88592 .66026 L .87474 .62019 L .86337 .58013 L .86058 .57038 L .85193 .54006 L .84031 .5 L .82848 .45994 L .82051 .43335 L .81649 .41987 L .80437 .37981 L .79199 .33974 L .78045 .30301 L .7794 .29968 L .76669 .25962 L .75369 .21955 L .74042 .17949 L .74038 .17937 L .727 .13942 L .71327 .09936 L .70032 .06242 L .69922 .05929 L .68496 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .38 r .97515 .98077 m .96496 .94071 L .95486 .90064 L .94467 .86058 L .94071 .84514 L .93432 .82051 L .92377 .78045 L .91305 .74038 L .90217 .70032 L .90064 .69472 L .89126 .66026 L .88017 .62019 L .86889 .58013 L .86058 .551 L .85747 .54006 L .84596 .5 L .83423 .45994 L .82229 .41987 L .82051 .41397 L .81026 .37981 L .79801 .33974 L .78552 .29968 L .78045 .28363 L .77287 .25962 L .76001 .21955 L .74687 .17949 L .74038 .15999 L .73353 .13942 L .71995 .09936 L .70605 .05929 L .70032 .04304 L .6919 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .31 r .98011 .98077 m .96979 .94071 L .95968 .90064 L .94953 .86058 L .94071 .82614 L .93925 .82051 L .92879 .78045 L .91815 .74038 L .90735 .70032 L .90064 .67573 L .89645 .66026 L .88545 .62019 L .87426 .58013 L .86288 .54006 L .86058 .532 L .85144 .5 L .83981 .45994 L .82797 .41987 L .82051 .39498 L .81598 .37981 L .80384 .33974 L .79146 .29968 L .78045 .26464 L .77887 .25962 L .76614 .21955 L .75313 .17949 L .74038 .141 L .73986 .13942 L .72642 .09936 L .71267 .05929 L .70032 .02406 L .69862 .01923 L .98077 .01923 L .98077 .98077 L F 0 1 .24 r .98077 .96462 m .97456 .94071 L .96439 .90064 L .95427 .86058 L .94405 .82051 L .94071 .80751 L .93368 .78045 L .92312 .74038 L .91239 .70032 L .90151 .66026 L .90064 .6571 L .89059 .62019 L .87948 .58013 L .86819 .54006 L .86058 .51338 L .85677 .5 L .84524 .45994 L .8335 .41987 L .82155 .37981 L .82051 .37635 L .80951 .33974 L .79724 .29968 L .78474 .25962 L .78045 .24602 L .77209 .21955 L .75921 .17949 L .74606 .13942 L .74038 .12238 L .73271 .09936 L .7191 .05929 L .70518 .01923 L .98077 .01923 L F 0 1 .17 r .98077 .94633 m .9793 .94071 L .96903 .90064 L .95891 .86058 L .94874 .82051 L .94071 .78923 L .93843 .78045 L .92796 .74038 L .9173 .70032 L .90649 .66026 L .90064 .63882 L .89558 .62019 L .88457 .58013 L .87336 .54006 L .86198 .5 L .86058 .4951 L .85053 .45994 L .83888 .41987 L .82702 .37981 L .82051 .35808 L .81503 .33974 L .80287 .29968 L .79047 .25962 L .78045 .22775 L .77787 .21955 L .76511 .17949 L .75209 .13942 L .74038 .10411 L .73881 .09936 L .72534 .05929 L .71157 .01923 L .98077 .01923 L F 0 1 .1 r .98077 .92837 m .97361 .90064 L .96346 .86058 L .95332 .82051 L .94307 .78045 L .94071 .77127 L .93267 .74038 L .92209 .70032 L .91135 .66026 L .90064 .62086 L .90046 .62019 L .88953 .58013 L .8784 .54006 L .8671 .5 L .86058 .47715 L .85568 .45994 L .84412 .41987 L .83236 .37981 L .82051 .34013 L .8204 .33974 L .80834 .29968 L .79605 .25962 L .78353 .21955 L .78045 .2098 L .77086 .17949 L .75795 .13942 L .74478 .09936 L .74038 .08617 L .73141 .05929 L .71777 .01923 L .98077 .01923 L F 0 1 .03 r .98077 .91073 m .97815 .90064 L .96793 .86058 L .9578 .82051 L .94761 .78045 L .94071 .75363 L .93727 .74038 L .92677 .70032 L .9161 .66026 L .90527 .62019 L .90064 .60322 L .89436 .58013 L .88332 .54006 L .8721 .5 L .8607 .45994 L .86058 .45951 L .84923 .41987 L .83756 .37981 L .82568 .33974 L .82051 .3225 L .81367 .29968 L .80149 .25962 L .78907 .21955 L .78045 .19217 L .77645 .17949 L .76366 .13942 L .75061 .09936 L .74038 .06854 L .73731 .05929 L .72381 .01923 L .98077 .01923 L F .04 1 0 r .98077 .89338 m .97234 .86058 L .9622 .82051 L .95204 .78045 L .94177 .74038 L .94071 .73628 L .93133 .70032 L .92074 .66026 L .90998 .62019 L .90064 .58588 L .89908 .58013 L .88812 .54006 L .87697 .5 L .86565 .45994 L .86058 .44217 L .85422 .41987 L .84263 .37981 L .83085 .33974 L .82051 .30516 L .81888 .29968 L .80679 .25962 L .79447 .21955 L .78192 .17949 L .78045 .17484 L .76923 .13942 L .75629 .09936 L .74308 .05929 L .74038 .05121 L .72969 .01923 L .98077 .01923 L F .11 1 0 r .98077 .87631 m .97671 .86058 L .96653 .82051 L .95638 .78045 L .94616 .74038 L .94071 .71922 L .9358 .70032 L .92527 .66026 L .91458 .62019 L .90373 .58013 L .90064 .56882 L .89281 .54006 L .88174 .5 L .87049 .45994 L .86058 .42512 L .85909 .41987 L .84759 .37981 L .83589 .33974 L .82399 .29968 L .82051 .2881 L .81196 .25962 L .79974 .21955 L .78729 .17949 L .78045 .15778 L .77466 .13942 L .76183 .09936 L .74873 .05929 L .74038 .03415 L .73541 .01923 L .98077 .01923 L F .18 1 0 r .98077 .85951 m .97079 .82051 L .96065 .78045 L .95047 .74038 L .94071 .70243 L .94016 .70032 L .9297 .66026 L .91907 .62019 L .90829 .58013 L .90064 .55203 L .89739 .54006 L .8864 .5 L .87523 .45994 L .86388 .41987 L .86058 .40833 L .85243 .37981 L .84081 .33974 L .829 .29968 L .82051 .27131 L .81701 .25962 L .80489 .21955 L .79253 .17949 L .78045 .141 L .77995 .13942 L .76723 .09936 L .75425 .05929 L .74101 .01923 L .98077 .01923 L F .25 1 0 r .98077 .84297 m .97501 .82051 L .96484 .78045 L .95469 .74038 L .94443 .70032 L .94071 .68589 L .93404 .66026 L .92348 .62019 L .91276 .58013 L .90189 .54006 L .90064 .53549 L .89096 .5 L .87986 .45994 L .86858 .41987 L .86058 .39179 L .85716 .37981 L .84563 .33974 L .83389 .29968 L .82196 .25962 L .82051 .25478 L .80992 .21955 L .79765 .17949 L .78517 .13942 L .78045 .12447 L .77251 .09936 L .75964 .05929 L .7465 .01923 L .98077 .01923 L F .32 1 0 r .98077 .82668 m .97918 .82051 L .96898 .78045 L .95883 .74038 L .94862 .70032 L .94071 .6696 L .93828 .66026 L .92779 .62019 L .91713 .58013 L .90633 .54006 L .90064 .5192 L .89542 .5 L .88439 .45994 L .87318 .41987 L .86181 .37981 L .86058 .3755 L .85034 .33974 L .83869 .29968 L .82684 .25962 L .82051 .2385 L .81484 .21955 L .80267 .17949 L .79027 .13942 L .78045 .10818 L .77767 .09936 L .7649 .05929 L .75187 .01923 L .98077 .01923 L F .39 1 0 r .98077 .81062 m .97306 .78045 L .96291 .74038 L .95273 .70032 L .94244 .66026 L .94071 .65354 L .93201 .62019 L .92142 .58013 L .91067 .54006 L .90064 .50315 L .89979 .5 L .88883 .45994 L .87769 .41987 L .86639 .37981 L .86058 .35945 L .85495 .33974 L .84338 .29968 L .83161 .25962 L .82051 .22244 L .81965 .21955 L .80757 .17949 L .79526 .13942 L .78273 .09936 L .78045 .09213 L .77005 .05929 L .75712 .01923 L .98077 .01923 L F .46 1 0 r .98077 .79478 m .9771 .78045 L .96692 .74038 L .95677 .70032 L .94653 .66026 L .94071 .6377 L .93615 .62019 L .92562 .58013 L .91494 .54006 L .9041 .5 L .90064 .48732 L .89318 .45994 L .88211 .41987 L .87087 .37981 L .86058 .34362 L .85947 .33974 L .84798 .29968 L .83628 .25962 L .82439 .21955 L .82051 .20662 L .81237 .17949 L .80015 .13942 L .78771 .09936 L .78045 .0763 L .77508 .05929 L .76226 .01923 L .98077 .01923 L F .53 1 0 r .98077 .77916 m .97089 .74038 L .96074 .70032 L .95054 .66026 L .94071 .62209 L .94021 .62019 L .92975 .58013 L .91912 .54006 L .90834 .5 L .90064 .4717 L .89744 .45994 L .88645 .41987 L .87527 .37981 L .86393 .33974 L .86058 .32801 L .85248 .29968 L .84086 .25962 L .82905 .21955 L .82051 .191 L .81707 .17949 L .80493 .13942 L .79258 .09936 L .78045 .06069 L .78001 .05929 L .76728 .01923 L .98077 .01923 L F .6 1 0 r .98077 .76375 m .9748 .74038 L .96465 .70032 L .95448 .66026 L .9442 .62019 L .94071 .60667 L .93379 .58013 L .92322 .54006 L .9125 .5 L .90164 .45994 L .90064 .45629 L .89069 .41987 L .87959 .37981 L .86831 .33974 L .86058 .3126 L .85689 .29968 L .84535 .25962 L .83361 .21955 L .82168 .17949 L .82051 .1756 L .80962 .13942 L .79736 .09936 L .78487 .05929 L .78045 .04529 L .7722 .01923 L .98077 .01923 L F .67 1 0 r .98077 .74853 m .97868 .74038 L .96851 .70032 L .95835 .66026 L .94812 .62019 L .94071 .59146 L .93776 .58013 L .92725 .54006 L .91659 .5 L .90578 .45994 L .90064 .44108 L .89486 .41987 L .88382 .37981 L .87261 .33974 L .86123 .29968 L .86058 .29739 L .84975 .25962 L .83809 .21955 L .82623 .17949 L .82051 .16039 L .81422 .13942 L .80204 .09936 L .78963 .05929 L .78045 .03008 L .77703 .01923 L .98077 .01923 L F .74 1 0 r .98077 .73351 m .97232 .70032 L .96217 .66026 L .95197 .62019 L .94166 .58013 L .94071 .57644 L .93121 .54006 L .9206 .5 L .90985 .45994 L .90064 .42606 L .89896 .41987 L .88798 .37981 L .87683 .33974 L .86552 .29968 L .86058 .28237 L .85408 .25962 L .84248 .21955 L .8307 .17949 L .82051 .14537 L .81873 .13942 L .80663 .09936 L .79431 .05929 L .78176 .01923 L .98077 .01923 L F .81 1 0 r .98077 .71867 m .97609 .70032 L .96594 .66026 L .95576 .62019 L .9455 .58013 L .94071 .5616 L .9351 .54006 L .92455 .5 L .91385 .45994 L .903 .41987 L .90064 .41123 L .89207 .37981 L .88098 .33974 L .86973 .29968 L .86058 .26754 L .85832 .25962 L .8468 .21955 L .83508 .17949 L .82318 .13942 L .82051 .13054 L .81113 .09936 L .79889 .05929 L .78643 .01923 L .98077 .01923 L F .88 1 0 r .98077 .70401 m .97983 .70032 L .96965 .66026 L .9595 .62019 L .94927 .58013 L .94071 .54695 L .93892 .54006 L .92842 .5 L .91778 .45994 L .90699 .41987 L .90064 .39657 L .89608 .37981 L .88505 .33974 L .87386 .29968 L .8625 .25962 L .86058 .25288 L .85103 .21955 L .83939 .17949 L .82755 .13942 L .82051 .11589 L .81556 .09936 L .8034 .05929 L .79102 .01923 L .98077 .01923 L F .95 1 0 r .98077 .68952 m .97333 .66026 L .96318 .62019 L .95298 .58013 L .94268 .54006 L .94071 .53246 L .93223 .5 L .92164 .45994 L .9109 .41987 L .90064 .38208 L .90002 .37981 L .88906 .33974 L .87793 .29968 L .86663 .25962 L .86058 .2384 L .8552 .21955 L .84362 .17949 L .83185 .13942 L .82051 .1014 L .8199 .09936 L .80782 .05929 L .79552 .01923 L .98077 .01923 L F 1 .98 0 r .98077 .6752 m .97697 .66026 L .96681 .62019 L .95664 .58013 L .94638 .54006 L .94071 .51814 L .93598 .5 L .92545 .45994 L .91476 .41987 L .90393 .37981 L .90064 .36776 L .893 .33974 L .88192 .29968 L .87068 .25962 L .86058 .22408 L .85929 .21955 L .84778 .17949 L .83608 .13942 L .82419 .09936 L .82051 .08709 L .81216 .05929 L .79994 .01923 L .98077 .01923 L F 1 .91 0 r .98077 .66104 m .98057 .66026 L .9704 .62019 L .96025 .58013 L .95002 .54006 L .94071 .50398 L .93967 .5 L .92919 .45994 L .91855 .41987 L .90777 .37981 L .90064 .3536 L .89687 .33974 L .88586 .29968 L .87467 .25962 L .86333 .21955 L .86058 .20992 L .85187 .17949 L .84023 .13942 L .82841 .09936 L .82051 .07293 L .81643 .05929 L .80428 .01923 L .98077 .01923 L F 1 .84 0 r .98077 .64703 m .97395 .62019 L .96381 .58013 L .95361 .54006 L .9433 .5 L .94071 .48997 L .93287 .45994 L .92229 .41987 L .91156 .37981 L .90068 .33974 L .90064 .3396 L .88972 .29968 L .8786 .25962 L .86731 .21955 L .86058 .19592 L .85589 .17949 L .84432 .13942 L .83257 .09936 L .82062 .05929 L .82051 .05893 L .80855 .01923 L .98077 .01923 L F 1 .77 0 r .98077 .63317 m .97747 .62019 L .96732 .58013 L .95715 .54006 L .94688 .5 L .94071 .47611 L .93649 .45994 L .92596 .41987 L .91528 .37981 L .90446 .33974 L .90064 .32574 L .89353 .29968 L .88247 .25962 L .87123 .21955 L .86058 .18206 L .85984 .17949 L .84834 .13942 L .83665 .09936 L .82477 .05929 L .82051 .04507 L .81275 .01923 L .98077 .01923 L F 1 .7 0 r .98077 .61946 m .9708 .58013 L .96064 .54006 L .95041 .5 L .94071 .4624 L .94007 .45994 L .92958 .41987 L .91895 .37981 L .90818 .33974 L .90064 .31203 L .89728 .29968 L .88627 .25962 L .8751 .21955 L .86376 .17949 L .86058 .16835 L .8523 .13942 L .84067 .09936 L .82886 .05929 L .82051 .03137 L .81688 .01923 L .98077 .01923 L F 1 .63 0 r .98077 .60588 m .97424 .58013 L .96409 .54006 L .95389 .5 L .94358 .45994 L .94071 .44883 L .93315 .41987 L .92257 .37981 L .91184 .33974 L .90097 .29968 L .90064 .29846 L .89002 .25962 L .8789 .21955 L .86761 .17949 L .86058 .15478 L .85619 .13942 L .84463 .09936 L .83288 .05929 L .82094 .01923 L .98077 .01923 L F 1 .56 0 r .98077 .59245 m .97764 .58013 L .9675 .54006 L .95732 .5 L .94705 .45994 L .94071 .43539 L .93666 .41987 L .92613 .37981 L .91546 .33974 L .90463 .29968 L .90064 .28503 L .89371 .25962 L .88264 .21955 L .87142 .17949 L .86058 .14135 L .86003 .13942 L .84853 .09936 L .83684 .05929 L .82497 .01923 L .98077 .01923 L F 1 .49 0 r .98077 .57914 m .97087 .54006 L .96071 .5 L .95048 .45994 L .94071 .42209 L .94013 .41987 L .92964 .37981 L .91902 .33974 L .90824 .29968 L .90064 .27173 L .89734 .25962 L .88633 .21955 L .87516 .17949 L .86382 .13942 L .86058 .12805 L .85236 .09936 L .84074 .05929 L .82893 .01923 L .98077 .01923 L F 1 .42 0 r .98077 .56597 m .9742 .54006 L .96406 .5 L .95385 .45994 L .94355 .41987 L .94071 .40892 L .93311 .37981 L .92253 .33974 L .9118 .29968 L .90093 .25962 L .90064 .25855 L .88997 .21955 L .87885 .17949 L .86757 .13942 L .86058 .11488 L .85614 .09936 L .84458 .05929 L .83283 .01923 L .98077 .01923 L F 1 .35 0 r .98077 .55292 m .97751 .54006 L .96737 .5 L .95719 .45994 L .94692 .41987 L .94071 .39587 L .93652 .37981 L .92599 .33974 L .91531 .29968 L .90449 .25962 L .90064 .24551 L .89356 .21955 L .88249 .17949 L .87126 .13942 L .86058 .10183 L .85987 .09936 L .84837 .05929 L .83668 .01923 L .98077 .01923 L F 1 .28 0 r .98077 .53999 m .97065 .5 L .96048 .45994 L .95025 .41987 L .94071 .38294 L .93989 .37981 L .9294 .33974 L .91877 .29968 L .90799 .25962 L .90064 .23258 L .89709 .21955 L .88608 .17949 L .8749 .13942 L .86356 .09936 L .86058 .08891 L .8521 .05929 L .84047 .01923 L .98077 .01923 L F 1 .21 0 r .98077 .52718 m .97389 .5 L .96374 .45994 L .95353 .41987 L .94322 .37981 L .94071 .37013 L .93277 .33974 L .92218 .29968 L .91145 .25962 L .90064 .21977 L .90058 .21955 L .88962 .17949 L .87849 .13942 L .8672 .09936 L .86058 .0761 L .85578 .05929 L .8442 .01923 L .98077 .01923 L F 1 .14 0 r .98077 .51448 m .9771 .5 L .96696 .45994 L .95678 .41987 L .9465 .37981 L .94071 .35744 L .93609 .33974 L .92555 .29968 L .91487 .25962 L .90404 .21955 L .90064 .20708 L .89311 .17949 L .88203 .13942 L .8708 .09936 L .86058 .06341 L .8594 .05929 L .84789 .01923 L .98077 .01923 L F 1 .07 0 r .98077 .5019 m .98029 .5 L .97015 .45994 L .95999 .41987 L .94974 .37981 L .94071 .34485 L .93938 .33974 L .92888 .29968 L .91824 .25962 L .90746 .21955 L .90064 .1945 L .89655 .17949 L .88553 .13942 L .87434 .09936 L .863 .05929 L .86058 .05083 L .85152 .01923 L .98077 .01923 L F 1 0 0 r .98077 .48943 m .97331 .45994 L .96316 .41987 L .95294 .37981 L .94262 .33974 L .94071 .33238 L .93216 .29968 L .92157 .25962 L .91083 .21955 L .90064 .18202 L .89995 .17949 L .88898 .13942 L .87784 .09936 L .86654 .05929 L .86058 .03836 L .85511 .01923 L .98077 .01923 L F % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 288}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHg?oo ool00ol0003oooooooooo`0fooooo`03o`000?oooooooooo00Oooooo1?l0000fooooo`05o`000?oo ooooooooooooool000001Oooool001Sooooo00Co0000oooooooooooo0000=_ooool01?l0003ooooo ooooool00007ooooo`03o`000?oooooooooo03Sooooo0_l0000gooooo`;o00002Oooool00ol0003o ooooooooo`0gooooo`05o`000?ooooooooooooooool000001Oooool001Wooooo0_l0000hooooo`;o 00002?ooool5o`0003Oooooo00?o0000ooooooooool0=_ooool00ol0003oooooooooo`07ooooo`Go 0000=_ooool3o`0000Kooooo003oooooob7ooooo003oooooob7ooooo003oooooob7ooooo003ooooo ob7ooooo000Eoooooooo00002ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00Wooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`09ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0:ooooo`03o`00 0?oooooooooo00[ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`02ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_ooool00ol0003oooooooooo`0mooooo`03o`000?oo oooooooo03gooooo00?o0000ooooooooool0??ooool00ol0003oooooooooo`0mooooo`03o`000?oo oooooooo00;ooooo0Ol00001ooooo`003_ooool2o`0000Gooooo00?o0000ooooooooool0ooooool7 ooooo`7o00000Oooool000gooooo00Co0000oooooooooooo00001?ooool00ol0003oooooooooo`3o ooooo`Oooooo0Ol00001ooooo`003Oooool01?l0003oooooooooool00004ooooo`;o0000ooooool7 ooooo`;o00000Oooool000gooooo00Co0000oooooooooooo00001?ooool00ol0003oooooooooo`02 ooooodGo8@3o5?l?0?l_o0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX0_l0oiL2 o`3oQ@;o0?mc00?o0?mQo`3oCol0odl00_l0ocd00ol0ob_o0?lIo`3o6@02o`3o1`05o`[o0?lLo`3o 7?l0obko0?loo`000_mAo`001_mSo`3oMOl0ogGo0?n7o`3oVOl0oj_o00;o_Ol000Cocol0on7o0?oc o`3oooX00_ooj0003?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3ooeT0oom70?oo=@3oob<0oolA 027oo`001Oooool1o`00007ooooo000=ooooo`04o`000?ooooooooooo`0000Cooooo00?o0000oooo ooooool00_oooom6ob40oaCo3`3o3?l00_l9o`0Do`Oo02Ko1_l0>?l5o`1:o`Go05co1?l0K_l4o`1o o`Co097o0ol0Xol3o`2eo`?o0_o0ol0oOl2o`3ol0;o0?oN0_l0ol`3o`3o^P;o0?nX0_l0oiL2o`3oQ@03o`3oLol0of7o0?mQ 00;o0?m?00?o0?lmo`3o:ol0ob/00_l0oaT01?l0o`Oo2_l0oaco0?lLo`02obko0006ocoo0?mAo`3o Hol0of?o0?meo`3oQol00_nIo`001On[o`3o_Ol0oloo0?oQo`3olol000;oooX000goonP0oooG0?oo a@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa40023oo`001Oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;oooooBOlQ0?lDo`l0o`_o00;o2Ol05?l7o`0Vo`Ko03So 1Ol0B_l5o`1Lo`?o06ko1Ol0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol2o`3mo`;o0?o` 0_l0omh3o`3oc0;o0?nj0_l0ojP2o`3oU`;o0?n50_l0og<00ol0of7o0?m?o`3oC`02o`3o?@04o`3o :ol0oaWo0?lIo`3o1`;o2_l00_lLo`001Ol^o`3o?ol0oe7o0?mAo`3oHol000;oMOl000?oQol0oiWo 0?n[o`000_nmo`001?o?o`3ohOl0oo?o0?oonP02oooX000;oooG0?oo/`3ook<0oonQ0?ooS`3oogd0 oom[0?ooF@3oodL0oole0?oo4@008?oo0005ooooo`7o00000Oooool001Gooooo00?o0000oooooooo ool00_oooom:ob40oaCo3`3o2ol00_l9o`0Do`Oo02Ko1_l0>?l5o`1:o`Co05co1?l0K_l4o`1oo`Co 097o0_l0Xol3o`2eo`?o0_o0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX0_l0oiL2o`3oQ@03o`3oLol0of7o0?mQ 00;o0?m?00?o0?lmo`3o:ol0ob/00_l0oaT01?l0o`Oo2_l0o`[o0?lLo`02obko0006ocoo0?mAo`3o Hol0of?o0?meo`3oQol00_nIo`001On[o`3o_Ol0oloo0?oQo`3olol000;oooX000goonP0oooG0?oo a@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa4001ooo`001Oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;oooooC?lQ0?lCo`l0o`_o00;o2Ol05?l7o`0Vo`Ko03So 1Ol0B_l4o`1Lo`Co06ko1?l0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol2o`3mo`;o0?o` 0_l0omh3o`3oc0;o0?nj0_l0ojP2o`3oU`;o0?n500?o0?mco`3oHOl0of400_l0odl00ol0ocgo0?l[ o`3o:`02o`3o6@04o`3o1ol:o`3o2_l0oaco00;o;_l000Ko?ol0oe7o0?mSo`3oHol0ogGo0?n7o`02 oiWo0005oj_o0?nmo`3ocol0on7o0?oco`000_oonP003Oooj03oomL0ooo50?oo/`3ooj40oon?0?oo O@3oof/0oomI0?ooA`3oocD0oolS0?oo4@007ooo0005ooooo`7o00000Oooool001Gooooo00?o0000 ooooooooool00_oooom=ob40oa?o3`3o2ol00_l8o`0Do`Oo02Ko1_l0>?l5o`1:o`Co05co1?l0K_l4 o`1oo`Co097o0_l0Xol3o`2eo`?o0_o0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX0_l0oiL2o`3oQ@03o`3oLol0 of7o0?mQ00;o0?m?00?o0?lmo`3o:ol0ob/00_l0oaT01?l0o`Oo2_l0o`[o0?lLo`02obko0006ocoo 0?mAo`3oHol0of?o0?meo`3oQol00_nIo`001On[o`3o_Ol0oloo0?oQo`3olol000;oooX000goonP0 oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa4001koo`001Oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooC_lQ0?lCo`l0o`_o00;o2?l05?l7o`0V o`Ko03So1Ol0B_l4o`1Lo`Co06ko1?l0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol2o`3m o`;o0?o`0_l0omh3o`3oc0;o0?nj0_l0ojP2o`3oU`;o0?n500?o0?mco`3oHOl0of400_l0odl00ol0 ocgo0?l[o`3o:`02o`3o6@04o`3o1ol:o`3o2_l0oaco00;o;_l000Ko?ol0oe7o0?mSo`3oHol0ogGo 0?n7o`02oiWo0005oj_o0?nmo`3ocol0on7o0?oco`000_oonP003Oooj03oomL0ooo50?oo/`3ooj40 oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo4@007_oo0005ooooo`7o00000Oooool001Gooooo 0_l00003ooooodoo8@3o4ol?0?l;o`02o`So01Co1ol09_l6o`0ho`Go04[o0ol0G?l5o`1^o`Co07oo 0ol0TOl3o`2So`?o0;Go0ol0aol3o`3Io`?o0>_o0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX 0_l0oiL00ol0ohGo0?mco`3oL`02o`3oH@04o`3oCol0ocgo0?lmo`3o:`;o0?lI0_l0o`L01Ol:o`3o 7?l0oaco0?l^o`3o?ol000;oDOl000SoHol0ogGo0?n7o`3oQol0oiWo0?n[o`3o_Ol0oloo00;ohOl0 00oolol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo 4@007_oo0004ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_oooom@ob40oa?o3`3o 2_l00_l8o`0Do`Oo02Ko1_l0>?l5o`1:o`Co05co1?l0K_l4o`1oo`?o097o0ol0Xol3o`2eo`Co0_o0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX0_l0oiL00ol0 ohGo0?mco`3oL`02o`3oH@;o0?m?00Co0?lmo`3o:ol0ob_o0?lI0_l0o`L2o`[o0006oaco0?l^o`3o ;_l0ocoo0?mAo`3oHol00_meo`002On7o`3oVOl0oiWo0?n[o`3o_Ol0oloo0?oQo`3olol0oooj0002 oooX0009oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooA`3oocD000;oob<000?ooa40ool00?oo 00006_oo0005ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooomCob40oa;o3`3o 2ol00_l8o`0Do`Ko02Ko1_l0>?l5o`1:o`Co05co1?l0K_l4o`1oo`?o097o0ol0Xol3o`2eo`?o0_o 0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX00?o0?nGo`3oQOl0ohD00_l0og<2o`3oH@04o`3o Col0ocgo0?lmo`3o:`;o0?lI0_l0o`L01Ol:o`3o7?l0oaco0?l^o`3o?ol000;oDOl000SoHol0ogGo 0?n7o`3oQol0oiWo0?n[o`3o_Ol0oloo00;ohOl000oolol0oooj0?ooj03oomL0ooo50?oo/`3ooj40 oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo4@007?oo0005ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_oooomEob40oa7o3`3o2ol00_l8o`0Do`Ko02Ko1_l0>?l4o`1:o`Go05co 1?l0K_l3o`1oo`Co097o0ol0Xol3o`2eo`;o0?l5o`1:o`Co05co1?l0K_l4o`1oo`?o097o0ol0 Xol4o`2eo`;o0?l4o`1:o`Go05co1?l0K_l3o`1oo`Co097o0ol0Xol3o`2eo`;o0?l4o`1:o`Go05co1?l0K_l3o`1oo`Co097o0ol0Xol3o`2eo`;o0?l4o`1:o`Go05co1?l0K_l3 o`1oo`Co097o0ol0Xol3o`2eo`;o0?l4o`1:o`Go05co1?l0K_l3o`1oo`Co097o0ol0Xol3o`2eo`;o 0_o0_l0oOl2o`3ol0;o0?oN 0ol0ol`2o`3o^P;o0?nX00?o0?nGo`3oQOl0ohD00_l0og<2o`3oH@03o`3oCol0ocgo0?lm00;o0?l[ 00Co0?lIo`3o1ol0o`Oo2_l00_lLo`001_l^o`3o?ol0ocoo0?mAo`3oHol0ogGo00;oQol000?oVOl0 oj_o0?nmo`000_o?o`004?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0 oomI0?ooA`3oocD0oolS0?oo4@0Jool000Cooooo0_l00001ooooo`005Oooool00ol0003ooooooooo o`02oooooe[o8@3o4?l?0?l;o`02o`Oo01Co1_l09_l6o`0ho`Co04[o1Ol0G?l4o`1^o`?o07oo1?l0 TOl3o`2So`?o0;Go0_l0aol3o`3Io`;o0>_o0ol0oOl2o`3ol0;o0?oN0_l0ol`3o`3o^P03o`3oZ?l0 oiOo0?nG00;o0?n50_l0og<00ol0of7o0?m?o`3oC`02o`3o?@04o`3o:ol0oaWo0?lIo`3o1`;o2_l0 00Ko7?l0obko0?l^o`3o?ol0oe7o0?mSo`02ogGo0003ohOo0?nIo`3oZol000;o_Ol0017ocol0on7o 0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3ooeT0oom70?oo=@3oob<0oolA 000Jool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooe[o8@3o4Ol?0?l: o`02o`So01Co1_l09_l5o`0ho`Go04[o1?l0G?l4o`1^o`Co07oo0ol0TOl3o`2So`?o0;Go0ol0aol2 o`3Io`?o0>_o0_l0oOl2o`3ol0;o0?oN0ol0ol`2o`3o^P;o0?nX00?o0?nGo`3oQOl0ohD00_l0og<2 o`3oH@03o`3oCol0ocgo0?lm00;o0?l[00Co0?lIo`3o1ol0o`Oo2_l00_lLo`001_l^o`3o?ol0oe7o 0?mAo`3oHol0ogGo00;oQol000?oVOl0oj_o0?nmo`000_o?o`004?oQo`3olol0oooj0?ooj03oomL0 ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo4@0Iool000Gooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02oooooe_o8@3o4Ol?0?l:o`02o`Oo01Co1_l09_l6o`0h o`Co04[o1Ol0G?l4o`1^o`?o07oo1?l0TOl3o`2So`?o0;Go0_l0aol3o`3Io`;o0>_o0ol0oOl2o`3o l0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL2o`3oQ@;o0?mc00Co0?mQo`3oCol0ocgo0?lm0_l0ob/2 o`3o6@05o`3o1ol:o`3o2_l0oaco0?l^o`000_loo`002?mAo`3oHol0ogGo0?meo`3oQol0oiWo0?n[ o`3o_Ol00_o?o`004?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI 0?ooA`3oocD0oolS0?oo4@0Iool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 oooooeco8@3o4?l?0?l;o`02o`Oo01Co1_l09_l5o`0ho`Go04[o1?l0G?l4o`1^o`Co07oo0ol0TOl3 o`2So`?o0;Go0ol0aol2o`3Io`;o0>_o0ol0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL2 o`3oQ@;o0?mc00?o0?mQo`3oCol0odl00_l0ocd01?l0ob_o0?lIo`3o6Ol0o`L2o`[o0006oaco0?l^ o`3o?ol0ocoo0?mAo`3oHol00_meo`000on7o`3oVOl0oj_o0002okgo000Aoloo0?oQo`3olol0oooj 0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo4@006Ooo0005 ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooomMob40oa3o3`3o2_l00_l7o`0D o`Ko02Ko1_l0>?l4o`1:o`Co05co1?l0K_l4o`1oo`?o097o1?l0Xol2o`2eo`?o0?l4o`1:o`Co 05co1?l0K_l4o`1oo`?o097o0ol0Xol3o`2eo`?o0_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL2o`3oQ@;o 0?mc00?o0?mQo`3oCol0odl00_l0ocd01?l0ob_o0?lIo`3o6Ol0o`L2o`[o0006oaco0?l^o`3o?ol0 ocoo0?mAo`3oHol00_meo`001?n7o`3oVOl0oj_o0?nmo`02oloo000@on7o0?oco`3oooX0oooX0?oo e`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3ooeT0oom70?oo=@3oob<0oolA01Soo`001Oooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;oooooGolQ0?l@o`l0o`[o00;o1ol05?l6o`0Vo`Ko 03So1?l0B_l4o`1Lo`Co06ko1?l0Ool3o`2Ao`?o0:?o0ol0]Ol2o`37o`?o0=Wo0ol0jol2o`3mo`;o 0?o`0_l0omh2o`3oc0;o0?nj0_l0ojP2o`3oU`04o`3oQOl0og?o0?mco`3oH@;o0?m?0_l0ocd2o`3o :`05o`3o6Ol0o`Oo2_l0o`[o0?lLo`000_l^o`001_loo`3oDOl0of?o0?mSo`3oMOl0ohOo00;oVOl0 01?oZol0okgo0?o?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?oo F@3oodL0oole0?oo8`3ooa4001Soo`001Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo 00;oooooH?lQ0?l?o`l0o`[o00;o2?l05?l5o`0Vo`Ko03So1?l0B_l4o`1Lo`Co06ko1?l0Ool3o`2A o`?o0:?o0ol0]Ol3o`37o`;o0=Wo0ol0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj0_l0ojP2o`3o U`;o0?n500?o0?mco`3oHOl0of400_l0odl2o`3o?@04o`3o:ol0oaWo0?lIo`3o1`;o2_l00_l^o`02 ocoo0008oe7o0?mSo`3oMOl0ogGo0?n7o`3oVOl0oj_o0?nmo`02oloo0007on7o0?oco`3oooX0oooX 0?ooe`3oolD0oonc0002oon?0007oomm0?ooJ`3ooeT0oom70?oo=@3oob<0oolA000Gool000Gooooo 0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooof3o8@3o4?l?0?l:o`02o`Oo01Co1_l0 9_l6o`0ho`Co04[o1?l0G?l4o`1^o`?o07oo1?l0TOl2o`2So`?o0;Go0ol0aol2o`3Io`?o0>_o0_l0 oOl2o`3ol0;o0?oN0ol0ol`00ol0ok[o0?nXo`3oZ002o`3oU`;o0?n50_l0og<00ol0of7o0?m?o`3o C`02o`3o?@04o`3o:ol0oaWo0?lIo`3o1`;o2_l000Ko7?l0obko0?loo`3o?ol0oe7o0?mSo`02ogGo 0004ohOo0?nIo`3oZol0okgo00;ocol0013ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?oo S`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa405ooo0005ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_ooool7o`l0oe[o8@3o3ol?0?l:o`02o`So01Co1Ol09_l6o`0ho`Co04[o1?l0 G?l4o`1^o`Co07oo0ol0TOl3o`2So`?o0;Go0_l0aol3o`3Io`?o0>_o0_l0oOl2o`3ol0;o0?oN0_l0 ol`2o`3o^P;o0?nX0_l0oiL01?l0ohGo0?mco`3oLol0of42o`3oC`;o0?lm0_l0ob/01Ol0oaWo0?l7 o`[o0?l:o`3o7?l000;o;_l000Ko?ol0oe7o0?mSo`3oHol0ogGo0?n7o`02oiWo000Coj_o0?nmo`3o col0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3ooeT0oom70?oo=@3o ob<0oolA000Gool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`ko3`3o E?lQ0?l?o`l0o`[o00;o1ol05?l6o`0Vo`Ko03So1?l0B_l4o`1Lo`Co06ko0ol0Ool3o`2Ao`?o0:?o 0ol0]Ol3o`37o`;o0=Wo0ol0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj0_l0ojP2o`3oU`;o0?n5 00?o0?mco`3oHOl0of400_l0odl2o`3o?@06o`3o:ol0oaWo0?lIo`3o1ol:o`3o7?l00_l^o`02ocoo 0008oe7o0?mSo`3oMOl0ogGo0?n7o`3oVOl0oj_o0?nmo`02oloo0007on7o0?oco`3oooX0oooX0?oo e`3ook<0oonQ0002oon?0007oomm0?ooJ`3ooeT0oom70?oo=@3oob<0oolA000Fool000Gooooo0Ol0 0001ooooo`005Oooool2o`0000?ooooo4Ol?0?mAob40oa3o3`3o2Ol00_l8o`0Do`Go02Ko1_l0>?l4 o`1:o`Co05co1?l0K_l3o`1oo`Co097o0_l0Xol3o`2eo`?o0?l4o`1:o`Go05co0ol0K_l4 o`1oo`?o097o0ol0Xol3o`2eo`;o0?l4o`1:o`Co05co1?l0K_l3o`1oo`?o097o0ol0Xol3 o`2eo`?o0?l4o`1:o`Co05co1?l0K_l3o`1oo`Co097o0_l0Xol3o`2eo`?o0?l4 o`1:o`Co05co1?l0K_l3o`1oo`?o097o0ol0Xol3o`2eo`?o0?l4o`1:o`Co05co1?l0K_l4 o`1oo`;o097o0ol0Xol3o`2eo`?o0?l4o`1:o`Co05co1?l0K_l3o`1oo`?o097o0ol0Xol3 o`2eo`?o0_o0_l0 oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL00ol0ohGo0?mco`3oL`02o`3oH@03o`3oCol0 ocgo0?lm00;o0?l[00Go0?lIo`3o1ol:o`3o2_l0oaco0002obko0008ocoo0?mAo`3oHol0of?o0?me o`3oQol0oiWo0?n[o`02okgo0005oloo0?oQo`3olol0oooj0?ooj0000_ooa@002Ooo/`3ooj40oon? 0?ooO@3oof/0oomI0?ooA`3oocD0oolS000Eool000Gooooo0Ol00001ooooo`005Oooool00ol0003o ooooooooo`02ooooobCo3`3o@olQ0?l?o`l0o`Wo00;o2?l05?l5o`0Vo`Go03So1Ol0B_l3o`1Lo`Co 06ko1?l0Ool2o`2Ao`?o0:?o0ol0]Ol3o`37o`;o0=Wo0ol0jol2o`3mo`?o0?o`00?o0?oNo`3oc?l0 ol`00_l0okX2o`3oZ0;o0?nG00?o0?n5o`3oLol0og<00_l0of400ol0odoo0?lmo`3o?@02o`3o:`05 o`3o6Ol0o`Oo2_l0o`[o0?lLo`000_l^o`002?loo`3oDOl0of?o0?mSo`3oMOl0ohOo0?nIo`3oZol0 0_nmo`004Oo?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3o odL0oole0?oo8`3ooa4001Coo`001Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o oooo9Ol?0?m3ob40o`ko3`3o2_l00_l7o`0Do`Go02Ko1_l0>?l4o`1:o`Co05co1?l0K_l3o`1oo`?o 097o0ol0Xol3o`2eo`?o0?l5o`1:o`?o05co1?l0K_l3o`1oo`?o097o0ol0Xol3o`2eo`?o0?l5 o`1:o`?o05co1Ol0K_l3o`1oo`;o097o0ol0Xol3o`2eo`?o0_o0ol0oOl2o`3ol0;o0?oN0_l0ol`2 o`3o^P03o`3oZ?l0oiOo0?nG00;o0?n50_l0og<01?l0of7o0?m?o`3oCol0ocd2o`3o:`04o`3o6Ol0 o`Oo0?l7o`[o00;o7?l000?o;_l0ocoo0?mAo`000_mSo`000omeo`3oQol0oiWo0002oj_o000Bokgo 0?o?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole 0?oo8`3ooa404ooo0005ooooo`7o00000Oooool001Gooooo0_l00003ooooobco3`3o?_lQ0?l?o`l0 o`Wo00;o1ol05?l5o`0Vo`Go03So1Ol0B_l3o`1Lo`Co06ko0ol0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37 o`;o0=Wo0_l0jol3o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj00?o0?nXo`3oUol0oiL00_l0ohD2o`3o L`04o`3oHOl0odoo0?m?o`3o?@;o0?l[00Co0?lIo`3o1ol0o`Oo2_l00_lLo`000ol^o`3o?ol0oe7o 0002of?o0003ogGo0?n7o`3oVOl000;oZol001;o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0ooo5 0?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo4@0Cool000Cooooo0_l00001oooo o`005Oooool00ol0003oooooooooo`02ooooobgo3`3o?_lQ0?l>o`l0o`Wo00;o1ol05?l5o`0Vo`Go 03So1Ol0B_l3o`1Lo`Go06ko0ol0Ool2o`2Ao`?o0:?o0ol0]Ol3o`37o`;o0=Wo0ol0jol2o`3mo`?o 0?o`00?o0?oNo`3oc?l0ol`00_l0okX2o`3oZ0;o0?nG00?o0?n5o`3oLol0og<00_l0of400ol0odoo 0?lmo`3o?@02o`3o:`05o`3o6Ol0o`Oo2_l0o`[o0?lLo`000_l^o`002?loo`3oDOl0of?o0?mSo`3o MOl0ohOo0?nIo`3oZol00_nmo`004Oo?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?oo S`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa4001;oo`001Oooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;ooooo;_l?0?lnob40o`ko3`3o2Ol00_l7o`0Do`Go02Ko1Ol0>?l5o`1:o`?o 05co1?l0K_l3o`1oo`?o097o0ol0Xol3o`2eo`?o0?l4o`1:o`?o05co1?l0K_l3o`1oo`?o097o 0ol0Xol3o`2eo`?o0_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL00ol0ohGo0?mco`3oL`02o`3o H@04o`3oCol0ocgo0?lmo`3o:`;o0?lI00Co0?l7o`[o0?lLo`3o7?l00_l^o`001_loo`3oDOl0of?o 0?meo`3oQol0oiWo00;oZol000go_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40 oon?0?ooO@3oof/000;ooeT000?oocD0oolS0?oo4@004_oo0005ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_oooolco`l0oc_o8@3o3Ol?0?l9o`02o`Oo01Co1Ol09_l6o`0ho`Co04[o 0ol0G?l4o`1^o`?o07oo0ol0TOl3o`2So`?o0;Go0ol0aol2o`3Io`;o0>_o0ol0oOl2o`3ol0;o0?oN 0_l0ol`2o`3o^P03o`3oZ?l0oiOo0?nG00;o0?n50_l0og<01?l0of7o0?m?o`3oCol0ocd2o`3o:`04 o`3o6Ol0o`Oo0?l7o`[o00;o7?l000So;_l0ocoo0?mAo`3oDOl0of?o0?meo`3oQol0oiWo00;oZol0 01;o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?oo A`3oocD0oolS0?oo4@0Aool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooo ocCo3`3o>_lQ0?l>o`l0o`Wo00;o1_l05?l6o`0Vo`Go03So1?l0B_l4o`1Lo`?o06ko0ol0Ool3o`2A o`Co0:?o0_l0]Ol3o`37o`;o0=Wo0ol0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj00?o0?nXo`3o Uol0oiL00_l0ohD2o`3oL`03o`3oHOl0odoo0?m?00;o0?lm00Go0?l[o`3o6Ol0o`Oo0?l7o`[o0002 oaco0008obko0?loo`3oDOl0oe7o0?mSo`3oMOl0ohOo0?nIo`02oj_o000Bokgo0?o?o`3ohOl0oo?o 0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa404Ooo 0005ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooooleo`l0oc[o8@3o3Ol?0?l9 o`02o`Oo01Co1Ol09_l6o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3o`2So`?o0;Go0_l0aol3 o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL00ol0ohGo0?mco`3oL`02 o`3oH@04o`3oCol0ocgo0?lmo`3o:`;o0?lI00Co0?l7o`[o0?lLo`3o7?l00_l^o`001_loo`3oDOl0 of?o0?meo`3oQol0oiWo00;oZol001;o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3o oj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS0?oo4@0Aool000Gooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02ooooocOo3`3o>?lQ0?l>o`l0o`Wo00;o1_l05?l6o`0Vo`Go03So1?l0 B_l4o`1Lo`?o06ko0ol0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37o`;o0=Wo0ol0jol2o`3mo`;o0?o`0_l0 omh2o`3oc003o`3o^_l0ojSo0?nX00;o0?nG0_l0ohD2o`3oL`04o`3oHOl0odoo0?m?o`3o?@;o0?l[ 00Co0?lIo`3o1ol0o`Oo2_l00_lLo`002?l^o`3o?ol0oe7o0?mAo`3oHol0ogGo0?n7o`3oVOl00_n[ o`004_nmo`3ohOl0oo?o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3ooeT0 oom70?oo=@3oob<0oolA013oo`001Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o oooo>?l?0?lhob40o`go3`3o2Ol00_l6o`0Do`Ko02Ko1Ol0>?l5o`1:o`Co05co0ol0K_l3o`1oo`?o 097o0ol0Xol3o`2eo`;o0Ol?0?lhob40o`go3`3o2Ol00_l6o`0Do`Ko02Ko1Ol0>?l4o`1: o`Co05co0ol0K_l3o`1oo`?o097o0ol0Xol3o`2eo`;o0_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2 o`3o^P;o0?nX0_l0oiL00ol0ohGo0?mco`3oL`02o`3oH@04o`3oCol0ocgo0?lmo`3o:`;o0?lI00Ko 0?l7o`[o0?lLo`3o7?l0obko0?loo`02oe7o0004of?o0?meo`3oQol0oiWo00;oZol001;o_Ol0oloo 0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolS 0?oo4@0?ool000Cooooo0_l00001ooooo`0000Goooooo`000?ooooooooooo`00000;ooooo`03o`00 0?oooooooooo00;ooooo00?o0000ooooooooool00_oooolDo`02obSo3`3o=_lQ0?l>o`l0o`So00;o 1_l05?l6o`0Vo`Go03So1?l0B_l4o`1Lo`?o06ko0ol0Ool3o`2Ao`?o0:?o0ol0]Ol2o`37o`?o0=Wo 0_l0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj0_l0ojP2o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ 00Co0?m?o`3o?Ol0ocgo0?l[0_l0oaT01_l0o`Oo2_l0oaco0?lLo`3o;_l0ocoo00;oDOl000CoHol0 ogGo0?n7o`3oVOl00_n[o`004_nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3o ohl0oomm0?ooJ`3ooeT0oom70?oo=@3oob<0oolA00ooo`001Oooool1o`00007ooooo00001Ooooooo 0000oooooooooooo000000Oooooo1?l00005ooooo`03o`000?oooooooooo00;ooooo5Ol00_lXo`l0 ocKo8@3o3Ol?0?l9o`02o`Ko01Co1_l09_l5o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3o`2S o`?o0;Go0_l0aol3o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00?o0?nj00?o0?nXo`3o Uol0oiL00_l0ohD00ol0og?o0?mQo`3oH@02o`3oC`05o`3o?Ol0ob_o0?lIo`3o6Ol0o`L00_l:o`02 oaco00;o?ol000GoDOl0of?o0?meo`3oQol0oiWo0002oj_o000Bokgo0?o?o`3ohOl0oo?o0?oonP3o onP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo8`3ooa403ooo0005oooo o`7o00000Oooool00005ooooool0003oooooooooool000001oooool00ol0003oooooooooo`06oooo o`03o`000?oooooooooo00;ooooo5ol00_lWo`l0ocGo8@3o3_l?0?l8o`02o`Ko01Co1_l09_l5o`0h o`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3o`2So`?o0;Go0_l0aol3o`3Io`;o0>_o0_l0oOl2o`3o l0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL01?l0ohGo0?mco`3oLol0of42o`3oC`;o0?lm00Go0?l[ o`3o6Ol0oaWo0?l7o`[o0002oaco000:obko0?loo`3oDOl0oe7o0?mSo`3oMOl0ohOo0?nIo`3oZol0 okgo00;ocol000oohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3o odL0oole0?oo4@003ooo0005ooooo`7o00000Oooool000;ooooo0_l00008ooooo`Go00001?ooool0 0ol0003oooooooooo`02oooooaWo00;o9_l?0?leob40o`go3`3o2?l00_l7o`0Do`Go02Ko1Ol0>?l5 o`1:o`?o05co0ol0K_l3o`1oo`?o097o0ol0Xol3o`2eo`?o0o`l0o`So00;o1_l05?l6o`0Vo`Go03So1?l0B_l4o`1Lo`?o06ko0ol0 Ool3o`2Ao`?o0:?o0ol0]Ol2o`37o`?o0=Wo0_l0jol2o`3mo`;o0?o`00?o0?oNo`3oc?l0ol`00ol0 okX00ol0ojSo0?nGo`3oU`02o`3oQ@03o`3oLol0of7o0?mQ00;o0?m?00Go0?lmo`3o:ol0oaWo0?lI o`3o1`02o`[o0009oaco0?l^o`3o?ol0ocoo0?mAo`3oHol0ogGo0?n7o`3oVOl000;oZol001;o_Ol0 oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0 oolS0?oo4@0>ool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooako00;o 8_l?0?leob40o`go3`3o2?l00_l7o`0Do`Go02Ko1Ol0>?l4o`1:o`Co05co0ol0K_l3o`1oo`?o097o 0ol0Xol3o`2eo`;o0o`l0o`Oo00;o1ol0 5?l5o`0Vo`Go03So1Ol0B_l3o`1Lo`?o06ko0ol0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37o`;o0=Wo0_l0 jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj0_l0ojP2o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ00Co 0?m?o`3o?Ol0ocgo0?l[0_l0oaT01_l0o`Oo2_l0oaco0?lLo`3o;_l0ocoo00;oDOl000GoHol0ogGo 0?n7o`3oVOl0oj_o0002okgo000@oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon? 0?ooO@3oof/0oomI0?ooA`3oocD0oolA00koo`001Oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooo8_l00_lPo`l0ocCo8@3o3Ol?0?l8o`02o`Ko01Co1_l09_l5o`0ho`Co04[o1?l0 G?l3o`1^o`?o07oo0ol0TOl3o`2So`?o0;Go0_l0aol3o`3Io`;o0>_o0_l0oOl2o`3ol004o`3og_l0 olco0?o_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P03o`3oZ?l0oiOo0?nG00;o0?n500?o0?mco`3oHOl0 of400_l0odl01Ol0ocgo0?l[o`3o6Ol0oaWo0?l700;o2_l000So7?l0obko0?loo`3o?ol0oe7o0?mS o`3oMOl0ohOo00;oVOl001;oZol0okgo0?o?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ 0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo4@0=ool000Gooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02ooooobWo00;o7?l?0?lcob40o`go3`3o2?l00_l6o`0Do`Go02Ko1Ol0>?l4o`1: o`Co05co0ol0K_l3o`1oo`?o097o0ol0Xol3o`2eo`;o0_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX0_l0oiL01?l0ohGo 0?mco`3oLol0of42o`3oC`03o`3o?Ol0ob_o0?l[00;o0?lI00Co0?l7o`[o0?lLo`3o;_l00_loo`00 0omAo`3oHol0ogGo0002ohOo0009oiWo0?n[o`3o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL000;o olD000Oooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD000;ooa403?oo0004ooooo`;o00000Oooool0 01Gooooo00?o0000ooooooooool00_ooool/o`02oa_o3`3o<_lQ0?l=o`l0o`So00;o1_l05?l5o`0V o`Go03So1?l0B_l4o`1Lo`?o06ko0ol0Ool3o`2Ao`?o0:?o0ol0]Ol2o`37o`?o0=Wo0_l0jol2o`3m o`04o`3ol?l0omko0?oNo`3ogP;o0?o<0_l0okX01?l0ojSo0?nGo`3oUol0ohD2o`3oL`;o0?mQ0_l0 odl01Ol0ocgo0?l[o`3o6Ol0oaWo0?l700;o2_l000So7?l0obko0?loo`3o?ol0oe7o0?mSo`3oMOl0 ohOo00;oVOl001;oZol0okgo0?o?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3o ogd0oom[0?ooF@3oodL0oolS0?oo4@0?l3o`1:o`Co05co 0ol0K_l3o`1oo`?o097o0ol0Xol3o`2eo`;o0?l4o`1:o`Co05co0ol0K_l3o`1oo`?o097o0ol0 Xol2o`2eo`?o0?l3o`1:o`Co05co0ol0K_l3o`1oo`?o097o0ol0Xol3o`2eo`;o0_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o ^P;o0?nX00?o0?nGo`3oQOl0ohD00_l0og<01?l0of7o0?m?o`3oCol0ocd2o`3o:`06o`3o6Ol0o`Oo 2_l0o`[o0?lLo`3o;_l00_loo`001?mAo`3oHol0ogGo0?n7o`02oiWo000@oj_o0?nmo`3ocol0on7o 0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3ooeT0oom700;oob<02_oo0005 ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolPo`0DoaWo00;o5_l?0?l`ob40 o`_o3`3o2?l00_l7o`0Do`Go02Ko1?l0>?l4o`1:o`Co05co0ol0K_l3o`1oo`?o097o0ol0Xol2o`2e o`;o0_o0_l0oOl2 o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX00?o0?nGo`3oQOl0ohD00_l0og<01?l0of7o0?m?o`3oCol0 ocd2o`3o:`06o`3o6Ol0o`Oo2_l0o`[o0?lLo`3o;_l00_loo`001?mAo`3oHol0ogGo0?n7o`02oiWo 000Boj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooJ`3o oeT0oom70?oo8`3ooa402Ooo0005ooooo`7o00000Oooool001Gooooo0_l00003ooooob?o01Co6?l0 0_lFo`l0obko8@3o3?l?0?l8o`02o`Ko01Co1_l09_l3o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo1?l0 TOl2o`2So`;o0;Go0ol0aol2o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P;o0?nX00?o 0?nGo`3oQOl0ohD00_l0og<00ol0of7o0?m?o`3oC`02o`3o?@03o`3o:ol0oaWo0?l700;o2_l000So 7?l0obko0?loo`3o?ol0oe7o0?mSo`3oMOl0ohOo00;oVOl001;oZol0okgo0?o?o`3ohOl0oo?o0?oo nP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo8`09ool000Cooooo 0_l00001ooooo`005Oooool00ol0003oooooooooo`02ooooobGo01Co5ol00_lFo`l0obko8@3o2ol? 0?l8o`02o`Oo01Co1Ol09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3o`2So`;o0;Go0_l0 aol3o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P04o`3oZ?l0oiOo0?nGo`3oQ@;o0?mc 0_l0of42o`3oC`03o`3o?Ol0ob_o0?lI00;o0?l700?o2_l0oaco0?l^o`000_loo`001?mAo`3oHol0 ogGo0?n7o`02oiWo000Boj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3o ohl0oomm0?ooJ`3ooeT0oom70?oo=@3oob<02Ooo0005ooooo`7o00000Oooool001Gooooo00?o0000 ooooooooool00_oooolVo`0DoaOo00;o5_l?0?l]ob40o`co3`3o2?l00_l6o`0Do`Ko02Ko0ol0>?l4 o`1:o`Co05co0ol0K_l3o`1oo`?o097o0ol0Xol2o`2eo`?o0_o0_l0oOl2o`3ol0;o0?oN0_l0ol`00ol0ok[o 0?nXo`3oZ002o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ00Go0?m?o`3o?Ol0ob_o0?l[o`3o6@02o`3o 1`04o`[o0?lLo`3o;_l0ocoo00;oDOl000?oHol0ogGo0?n7o`000_nIo`003_n[o`3o_Ol0oloo0?oQ o`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/00_ooA`000ooo8`3ooa40ool0 0007ool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooobWo01Co5_l00_lF o`l0obgo8@3o2ol?0?l8o`02o`Ko01Co1Ol09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3 o`2So`;o0;Go0_l0aol3o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`00ol0ok[o0?nXo`3oZ002 o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ0_l0odl00ol0ocgo0?l[o`3o6@02o`3o1`03o`[o0?lLo`3o ;_l000;o?ol000CoDOl0of?o0?meo`3oQol00_nIo`004_n[o`3o_Ol0oloo0?oQo`3olol0oooj0?oo j03oomL0ooo50?oo/`3ooj40oon?0?ooO@3oof/0oomI0?ooA`3oocD0oolA00Soo`001Oooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;ooooo:_l05?lFo`02oaGo3`3o;OlQ0?l;o`l0o`So 00;o1_l05?l6o`0Vo`?o03So1?l0B_l4o`1Lo`?o06ko0ol0Ool4o`2Ao`;o0:?o0_l0]Ol3o`37o`;o 0=Wo0_l0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj0_l0ojP00ol0oiOo0?n5o`3oQ@02o`3oL`04 o`3oHOl0odoo0?m?o`3o?@;o0?l[00So0?lIo`3o1ol:o`3o2_l0oaco0?l^o`3o?ol0oe7o00;oHol0 01KoMOl0ohOo0?nIo`3oVOl0oj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?oo X@3oohl0oomm0?ooJ`3oodL0oole0?oo8`3ooa401ooo0005ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_ooool7o`0VobKo01Co5?l00_lEo`l0obgo8@3o2ol?0?l8o`02o`Ko01Co1Ol0 9_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3o`2So`;o0;Go0_l0aol3o`3Io`;o0>_o0_l0 oOl2o`3ol0;o0?oN0_l0ol`00ol0ok[o0?nXo`3oZ002o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ00Go 0?m?o`3o?Ol0ob_o0?l[o`3o6@02o`3o1`03o`[o0?lLo`3o;_l000;o?ol000CoDOl0of?o0?meo`3o Qol00_nIo`004_n[o`3o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?oo O@3oof/0oom70?oo=@3oob<0oolA00Ooo`001Oooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo4Ol09_lNo`0Doa;o00;o5Ol?0?l]ob40o`_o3`3o2?l00_l6o`0Do`Go02Ko1?l0>?l4 o`1:o`Co05co0ol0K_l3o`1oo`?o097o0ol0Xol2o`2eo`;o0_o0_l0oOl2o`3ol0;o0?oN00?o0?o_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P03o`3oZ?l0oiOo0?nG00;o0?n50_l0 og<01_l0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6@;o0?l700?o2_l0oaco0?l^o`000_loo`001?mAo`3o Hol0ogGo0?n7o`02oiWo000Boj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc0?oo X@3oohl0oomm0?ooJ`3ooeT0oole0?oo8`3ooa401_oo0005ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_oooolNo`0VoaKo01Co4_l00_lDo`l0ob_o8@3o3?l?0?l8o`02o`Go01Co1Ol0 9_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl3o`2So`;o0;Go0_l0aol3o`3Io`;o0>_o0_l0 oOl2o`3ol0;o0?oN00?o0?o_o0_l0oOl2o`3ol0;o0?oN0_l0ol`0 0ol0ok[o0?nXo`3oZ002o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ00Go0?m?o`3o?Ol0ob_o0?l[o`3o 6@02o`3o1`03o`[o0?lLo`3o;_l000;o?ol000GoDOl0of?o0?meo`3oQol0oiWo0002oj_o00;ocol0 00SohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ00;oogd000GooeT0oom70?oo=@3oob<0oolA 0005ool000Cooooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02ooooob;o02Ko5Ol05?lA o`02oa?o3`3o:olQ0?l;o`l0o`So00;o1_l05?l5o`0Vo`Co03So1?l0B_l4o`1Lo`?o06ko0ol0Ool3 o`2Ao`;o0:?o0ol0]Ol2o`37o`;o0=Wo0_l0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj00?o0?nX o`3oUol0oiL00_l0ohD2o`3oL`06o`3oHOl0odoo0?lmo`3o?Ol0ob_o0?lI0_l0o`L00ol:o`3o7?l0 obko0002ocoo0005oe7o0?mSo`3oMOl0ohOo0?nIo`000_n[o`002_nmo`3ocol0on7o0?oco`3oooX0 oooX0?ooe`3oolD0oonc0?ooX@02oomm0005oomI0?ooA`3oocD0oolS0?oo4@001Ooo0005ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_oooolTo`0VoaCo01Co4Ol00_lCo`l0ob[o8@3o 3?l?0?l8o`02o`Ko01Co1?l09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl2o`2So`?o0;Go 0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`2o`3o^P03o`3oZ?l0oiOo0?nG00;o0?n5 0_l0og<01_l0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6@;o0?l700?o2_l0oaco0?l^o`000_loo`001?mA o`3oHol0ogGo0?n7o`02oiWo000Boj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonc 0?ooX@3oohl0oomm0?ooJ`3ooeT0oole0?oo8`3ooa401Ooo0005ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_oooolUo`0VoaCo01Co4Ol00_lCo`l0obWo8@3o3?l?0?l8o`02o`Ko01Co 1?l09_l4o`0ho`Go04[o0ol0G?l3o`1^o`Co07oo0_l0TOl3o`2So`;o0;Go0_l0aol3o`3Io`;o0>_o 0_l0oOl2o`3ol0;o0?oN0_l0ol`00ol0ok[o0?nXo`3oZ002o`3oU`03o`3oQOl0og?o0?mc00;o0?mQ 00Go0?m?o`3o?Ol0ob_o0?l[o`3o6@02o`3o1`03o`[o0?lLo`3o;_l000;o?ol000GoDOl0of?o0?me o`3oQol0oiWo0002oj_o00;ocol000oohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooO@3o of/0oomI0?ooA`3oocD0oolS0?oo4@001?oo0005ooooo`7o00000Oooool001Gooooo00?o0000oooo ooooool00_oooolWo`0Voa?o01Co4Ol00_lCo`l0obWo8@3o3?l?0?l8o`02o`Go01Co1Ol09_l4o`0h o`Co04[o1?l0G?l3o`1^o`?o07oo0ol0TOl2o`2So`?o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3o l0;o0?oN0_l0ol`2o`3o^P03o`3oZ?l0oiOo0?nG00;o0?n500Co0?mco`3oHOl0of7o0?m?0_l0ocd0 1ol0ob_o0?lIo`3o1ol0o`Oo2_l0oaco0?l^o`000_loo`001OmAo`3oHol0ogGo0?n7o`3oVOl000;o Zol0017o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oomm0?ooJ`3ooeT0oom7 0?oo=@3oob<0oolA0004ool000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooo o`Oo03So8_l09_lBo`0Doa3o00;o4ol?0?lYob40o`co3`3o2?l00_l5o`0Do`Go02Ko1?l0>?l4o`1: o`Co05co0ol0K_l3o`1oo`?o097o0_l0Xol3o`2eo`;o0o`0h oaco02Ko4_l05?l@o`02oa?o3`3o:OlQ0?l?l4o`1:o`Co05co0ol0K_l3o`1oo`?o 097o0_l0Xol2o`2eo`?o0?lGo`0Voa7o01Co3ol00_lCo`l0obSo8@3o 3?l?0?l8o`02o`Go01Co1Ol09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0_l0TOl3o`2So`;o0;Go 0ol0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj0_l0ojP2o`3oU`05o`3o QOl0og?o0?mQo`3oHOl0odl00_l0ocd01ol0ob_o0?lIo`3o1ol0o`Oo2_l0oaco0?l^o`000_loo`00 1?mAo`3oHol0ogGo0?n7o`02oiWo000Boj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0 oonc0?ooX@3oohl0oom[0?ooF@3oodL0oole0?oo8`3ooa400ooo0005ooooo`7o00000Oooool001Go oooo00?o0000ooooooooool00_oooolIo`0hoaOo02Ko4?l05?l?o`02oa;o3`3o:OlQ0?l;o`l0o`So 00;o1_l05?l4o`0Vo`Co03So1?l0B_l4o`1Lo`?o06ko0ol0Ool3o`2Ao`;o0:?o0_l0]Ol3o`37o`;o 0=Wo0_l0jol2o`3mo`;o0?o`0_l0omh2o`3oc0;o0?nj00?o0?nXo`3oUol0oiL00_l0ohD01?l0og?o 0?mQo`3oHOl0odl2o`3o?@04o`3o:ol0oaWo0?l7o`[o00;o7?l000[o;_l0ocoo0?loo`3oDOl0of?o 0?meo`3oQol0oiWo0?n[o`3o_Ol00_o?o`003_oQo`3olol0oooj0?ooj03oomL0oonc0?ooX@3oohl0 oomm0?ooJ`3ooeT0oom70?oo=@3ooa400ooo0005ooooo`7o00000Oooool001Gooooo00?o0000oooo ooooool00_oooolLo`0hoaGo02Ko3ol05?l@o`02oa;o3`3o:?lQ0?l?lEo`0Vo`ko01Co3ol00_lBo`l0obWo8@3o2ol?0?l8o`02o`Go01Co1Ol09_l4o`0ho`Co04[o1?l0 G?l3o`1^o`?o07oo0_l0TOl3o`2So`;o0;Go0ol0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0 olco0?o<00;o0?nj0_l0ojP2o`3oU`05o`3oQOl0og?o0?mQo`3oHOl0odl00_l0ocd01ol0ob_o0?lI o`3o1ol0o`Oo2_l0oaco0?l^o`000_loo`001omAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`000_o? o`001OoQo`3olol0oooj0?ooj03oomL000;ook<000Oooj40oomm0?ooJ`3ooeT0oom70?oo=@3ooa40 00?oo`001?ooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo8?l0>?lDo`0Vo`ko 01Co3ol00_lBo`l0obWo8@3o2ol?0?l7o`02o`Ko01Co1?l09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o 07oo0_l0TOl3o`2So`;o0;Go0ol0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o 0?nj0_l0ojP2o`3oU`05o`3oQOl0og?o0?mQo`3oHOl0odl00_l0ocd01ol0ob_o0?lIo`3o6Ol0o`Oo 2_l0oaco0?l^o`000_loo`000omAo`3oHol0ogGo0002ohOo000CoiWo0?nmo`3o_Ol0oloo0?oQo`3o lol0oooj0?ooj03oomL0ooo50?oo/`3ooj40oon?0?ooJ`3ooeT0oom70?oo=@3oob<0oolA0002ool0 00Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooob;o03So4ol09_l>o`0Do`oo 00;o4Ol?0?lYob40o`_o3`3o1ol00_l6o`0Do`Co02Ko1Ol0>?l3o`1:o`Co05co1?l0K_l2o`1oo`?o 097o0_l0Xol3o`2eo`;o0?lBo`0Vo`ko01Co3ol00_l@o`l0obWo8@3o 2ol?0?l7o`02o`Ko01Co1?l09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0_l0TOl3o`2So`;o0;Go 0ol0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj0_l0ojP01?l0oiOo0?n5 o`3oQOl0og<2o`3oH@05o`3oCol0ocgo0?lmo`3o:ol0oaT00_l0o`L00ol:o`3o7?l0obko0002ocoo 0007oe7o0?mSo`3oMOl0ohOo0?nIo`3oZol0okgo0002oloo000>on7o0?oco`3oooX0oooX0?ooe`3o olD0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0oole0?oo4@02ool000Gooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02ooooo`Oo04[o8?l0>?lAo`0Vo`ko01Co3ol00_l@o`l0obWo8@3o2ol? 0?l7o`02o`Ko01Co1?l09_l4o`0ho`Co04[o0ol0G?l3o`1^o`?o07oo0ol0TOl2o`2So`?o0;Go0_l0 aol2o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN00Co0?oo`02oa7o3`3o:?lQ0?l;o`l0o`Oo00;o 1_l05?l4o`0Vo`Co03So1?l0B_l4o`1Lo`?o06ko0ol0Ool2o`2Ao`?o0:?o0_l0]Ol3o`37o`;o0=Wo 0_l0jol2o`3mo`;o0?o`00?o0?oNo`3oc?l0ol`00_l0okX2o`3oZ004o`3oUol0ohGo0?n5o`3oL`;o 0?mQ00Go0?m?o`3o?Ol0ocgo0?l[o`3o6@02o`3o1`03o`[o0?lLo`3o;_l000;o?ol000OoDOl0of?o 0?meo`3oQol0oiWo0?n[o`3o_Ol000;ocol000oohOl0oo?o0?oonP3oonP0oooG0?ooa@3ooj40oon? 0?ooO@3oof/0oomI0?ooA`3oocD0oolA0?oo00001Oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooo5?l0B_lFo`0hoa3o02Ko3_l05?l>o`02oa7o3`3o9olQ0?l;o`l0o`So00;o1Ol0 5?l5o`0Vo`?o03So1?l0B_l4o`1Lo`?o06ko0ol0Ool2o`2Ao`?o0:?o0_l0]Ol3o`37o`;o0=Wo0_l0 jol2o`3mo`;o0?o`00?o0?oNo`3oc?l0ol`00_l0okX2o`3oZ004o`3oUol0ohGo0?n5o`3oL`;o0?mQ 00Go0?m?o`3o?Ol0ocgo0?l[o`3o6@02o`3o1`03o`[o0?lLo`3o;_l000;o?ol000OoDOl0of?o0?me o`3oQol0oiWo0?n[o`3o_Ol000;ocol000oohOl0oo?o0?oonP3oonP0oooG0?ooa@3ooj40oon?0?oo O@3oof/0oomI0?ooA`3oocD0oolA0?oo00001Oooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo5ol0B_lEo`0hoa3o02Ko3Ol05?l>o`02oa3o3`3o:?lQ0?l;o`l0o`Oo00;o1_l05?l4 o`0Vo`Co03So1?l0B_l3o`1Lo`?o06ko0ol0Ool3o`2Ao`;o0:?o0ol0]Ol2o`37o`;o0=Wo0_l0jol2 o`3mo`;o0?o`0_l0omh01_l0olco0?njo`3o^_l0ok[o0?nXo`3oU`;o0?n500Co0?mco`3oHOl0of7o 0?m?0_l0ocd01ol0ob_o0?lIo`3o1ol0o`Oo2_l0oaco0?l^o`000_loo`001omAo`3oHol0ogGo0?n7 o`3oVOl0oj_o0?nmo`000_o?o`003ooQo`3olol0oooj0?ooj03oomL0ooo50?ooX@3oohl0oomm0?oo J`3ooeT0oom70?oo=@3ooa40ool00005ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool0 0_oooolIo`1:oaCo03So4?l09_l=o`0Do`ko00;o4?l?0?lWob40o`_o3`3o1ol00_l6o`0Do`Co02Ko 1?l0>?l4o`1:o`Co05co0ol0K_l3o`1oo`;o097o0ol0Xol2o`2eo`?o0?l4 o`1:o`?o05co0ol0K_l3o`1oo`?o097o0_l0Xol3o`2eo`;o0on7o0?oco`3oooX0oooX0?ooe`3oolD0oonQ0?ooS`3oogd0oom[0?ooF@3oodL0 oole0?oo4@05ooooo`7o00000Oooool000kooooo00?o0000ooooooooool01?ooool00ol0003ooooo ooooo`02ooooob3o04[o4_l0>?l>o`0Vo`go01Co3Ol00_l@o`l0obKo8@3o2ol?0?l7o`02o`Ko01Co 1?l09_l4o`0ho`Co04[o1?l0G?l3o`1^o`?o07oo0_l0TOl3o`2So`;o0;Go0ol0aol2o`3Io`;o0>_o 0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj0_l0ojP01?l0oiOo0?n5o`3oQOl0og<2o`3oH@05 o`3oCol0ocgo0?l[o`3o:ol0oaT00_l0o`L00ol:o`3o7?l0obko0002ocoo000Foe7o0?mSo`3oMOl0 ohOo0?nIo`3oZol0okgo0?o?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oonQ0?ooS`3oogd0 oom[0?ooF@3oocD0oolS00Gooooo0Ol00001ooooo`003_ooool00ol0003oooooooooo`04ooooo`;o 00000ooooolRo`1:oa7o03So3_l09_l=o`0Do`go00;o4?l?0?lVob40o`_o3`3o1ol00_l6o`0Do`Co 02Ko1?l0>?l4o`1:o`?o05co0ol0K_l3o`1oo`?o097o0_l0Xol3o`2eo`;o0?l=o`0Vo`go01Co3Ol00_l@o`l0obKo8@3o2ol?0?l7o`02 o`Ko01Co1?l09_l4o`0ho`Co04[o0ol0G?l3o`1^o`?o07oo0ol0TOl2o`2So`?o0;Go0_l0aol2o`3I o`;o0>_o0_l0oOl2o`3ol0;o0?oN00?o0?oooooo`03o`000?oooooooooo00Co oooo00?o0000ooooooooool00_ooool7o`1Loako04[o4?l0>?l=o`0Vo`go01Co3Ol00_l@o`l0obKo 8@3o2ol?0?l7o`02o`Go01Co1Ol09_l4o`0ho`Co04[o0ol0G?l3o`1^o`;o07oo0ol0TOl3o`2So`;o 0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`00ol0ok[o0?nXo`3oZ002o`3oU`05 o`3oQOl0og?o0?mco`3oHOl0odl00_l0ocd01ol0ob_o0?lIo`3o1ol0o`Oo2_l0oaco0?l^o`000_lo o`002?mAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol00_oQo`003?oco`3oooX0oooG0?ooa@3o ok<0oonQ0?ooS`3oogd0oom[0?ooF@3oocD0oolS00Gooooo0Ol00001ooooo`003Oooool2o`0000Ko oooo00?o0000ooooooooool00_ooool>o`1LoaWo04[o4?l0>?l_o0_l0oOl2o`3ol0;o0?oN00?o0?o?l4o`1:o`?o05co0ol0K_l3o`1oo`?o097o 0_l0Xol3o`2eo`;o0?l4o`1:o`?o05co0ol0K_l2o`1oo`?o097o0ol0Xol2o`2eo`;o0?l_o0_l0 oOl2o`3ol0;o0?oN00?o0?oo`0ho`_o 02Ko3Ol05?l=o`02o`oo3`3o9OlQ0?l;o`l0o`Ko00;o1_l05?l4o`0Vo`Go03So0ol0B_l3o`1Lo`?o 06ko0ol0Ool3o`2Ao`;o0:?o0ol0]Ol2o`37o`;o0=Wo0_l0jol2o`3mo`;o0?o`0_l0omh2o`3oc004 o`3o^_l0ojSo0?nXo`3oU`;o0?n500Co0?mco`3oHOl0odoo0?m?0_l0ocd01ol0ob_o0?lIo`3o1ol0 o`Oo2_l0oaco0?l^o`000_loo`005?mAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol0on7o0?oc o`3oooX0oooX0?ooe`3oolD0oonc0?ooX@3oohl0oomm0?ooF@3oodL01Oooool1o`00007ooooo000E ooooo`03o`000?oooooooooo00;ooooo7Ol0G?lAo`1:o`ko03So2ol09_l?l4o`1:o`?o05co0ol0K_l3o`1oo`;o097o0ol0Xol2 o`2eo`;o0?l4o`1:o`?o05co0ol0K_l3o`1oo`;o097o0ol0Xol2o`2eo`;o0?l4o`1:o`?o05co0ol0K_l3o`1oo`;o097o0ol0Xol2 o`2eo`;o0?l4o`1:o`?o05co0ol0K_l3o`1oo`;o097o0ol0Xol2o`2eo`;o0?l: o`0Vo`co01Co3?l00_l?o`l0obGo8@3o2_l?0?l7o`02o`Ko01Co1?l09_l4o`0ho`?o04[o0ol0G?l3 o`1^o`?o07oo0ol0TOl2o`2So`?o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol004o`3og_l0olco 0?o?l:o`0Vo`co01Co3?l00_l?o`l0obCo 8@3o2_l?0?l7o`02o`Ko01Co1?l09_l4o`0ho`Co04[o0ol0G?l3o`1^o`?o07oo0_l0TOl3o`2So`;o 0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol0;o0?oN0_l0ol`00ol0ok[o0?nXo`3oZ002o`3oU`05 o`3oQOl0og?o0?mQo`3oHOl0odl00_l0ocd01ol0ob_o0?lIo`3o1ol0o`Oo2_l0oaco0?l^o`000_lo o`004_mAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol0on7o0?oco`3oooX0oooX0?ooe`3oolD0 oonc0?ooX@3oohl0oom[00Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooaOo 06ko4ol0G?l>o`1:o`_o03So2_l09_l;o`0Do`co00;o3ol?0?lTob40o`_o3`3o1_l00_l6o`0Do`Co 02Ko1?l0>?l4o`1:o`?o05co0ol0K_l3o`1oo`;o097o0ol0Xol2o`2eo`;o0?l3o`1: o`?o05co0ol0K_l3o`1oo`?o097o0_l0Xol2o`2eo`?o0o`1Lo`_o04[o2ol0>?l:o`0V o`[o01Co3?l00_l=o`l0obCo8@3o2ol?0?l6o`02o`Ko01Co1?l09_l4o`0ho`?o04[o0ol0G?l3o`1^ o`?o07oo0ol0TOl2o`2So`;o0;Go0ol0aol2o`3Io`;o0>_o0_l0oOl00ol0oo3o0?oNo`3ogP02o`3o c003o`3o^_l0ojSo0?nX00;o0?nG00Go0?n5o`3oLol0og?o0?mQo`3oC`02o`3o?@08o`3o:ol0oaWo 0?l7o`3o1ol:o`3o7?l0obko0?loo`02oe7o000?of?o0?meo`3oQol0oiWo0?n[o`3o_Ol0oloo0?oQ o`3olol0oooj0?ooj03oomL0ooo50?oo/`3oohl000Gooooo0Ol00001ooooo`005Oooool00ol0003o ooooooooo`02oooooa?o07oo5?l0K_l?l:o`0Vo`[o01Co3?l00_l=o`l0obCo 8@3o2ol?0?l6o`02o`Ko01Co1?l09_l4o`0ho`?o04[o0ol0G?l3o`1^o`?o07oo0ol0TOl2o`2So`;o 0;Go0ol0aol2o`3Io`;o0>_o0_l0oOl00ol0oo3o0?oNo`3ogP02o`3oc003o`3o^_l0ojSo0?nX00;o 0?nG00Go0?n5o`3oLol0og?o0?mQo`3oC`02o`3o?@08o`3o:ol0oaWo0?l7o`3o1ol:o`3o7?l0obko 0?loo`02oe7o000?of?o0?meo`3oQol0oiWo0?n[o`3o_Ol0oloo0?oQo`3olol0oooj0?ooj03oomL0 ooo50?oo/`3oohl000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooaGo07oo 4ol0K_l?l:o`0Vo`[o01Co3?l00_l=o`l0obCo8@3o2ol?0?l6o`02o`Go01Co 1Ol09_l4o`0ho`;o04[o1?l0G?l3o`1^o`?o07oo0_l0TOl2o`2So`?o0;Go0_l0aol2o`3Io`;o0>_o 0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Co0?nXo`3oUol0oiOo0?n50_l0og<01_l0of7o 0?m?o`3o?Ol0ocgo0?l[o`3o6@;o0?l700Co2_l0oaco0?l^o`3o?ol00_mAo`000omSo`3oMOl0ohOo 0002oiWo000:okgo0?o?o`3ohOl0oo?o0?oonP3oonP0oooG0?ooa@3ook<0oon?00Gooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02oooooaOo07oo4_l0K_l?l;o`0V o`[o01Co2ol00_l=o`l0obCo8@3o2ol?0?l6o`02o`Ko01Co1?l09_l4o`0ho`?o04[o0ol0G?l3o`1^ o`?o07oo0ol0TOl2o`2So`;o0;Go0ol0aol2o`3Io`;o0>_o00?o0?goo`3ol?l0oo000_l0omh2o`3o c004o`3o^_l0ojSo0?nXo`3oU`;o0?n50_l0og<01ol0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6Ol0o`L0 0_l:o`001_lLo`3o;_l0ocoo0?mAo`3oHol0ogGo00;oQol000_oVOl0oj_o0?nmo`3ocol0on7o0?oc o`3oooX0oooG0?ooa@3ook<0oonQ0005ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool0 0_oooolIo`1ooa7o06ko3Ol0G?l:o`1:o`[o03So2_l09_l;o`0Do`[o00;o3_l?0?lSob40o`_o3`3o 1_l00_l6o`0Do`Co02Ko1?l0>?l3o`1:o`?o05co0ol0K_l3o`1oo`?o097o0_l0Xol2o`2eo`?o0?l2o`1:o`Co05co0ol0K_l3 o`1oo`;o097o0_l0Xol3o`2eo`;o0?l:o`0Vo`[o01Co2ol00_l=o`l0ob?o8@3o2ol?0?l6o`02 o`Ko01Co1?l09_l4o`0ho`?o04[o0ol0G?l3o`1^o`?o07oo0_l0TOl3o`2So`;o0;Go0ol0aol2o`3I o`;o0>_o00?o0?goo`3ol?l0oo000_l0omh2o`3oc004o`3o^_l0ojSo0?nGo`3oU`;o0?n50_l0og<0 1ol0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6Ol0o`L00_l:o`001_lLo`3o;_l0ocoo0?mAo`3oHol0ogGo 00;oQol000[oVOl0oj_o0?nmo`3ocol0on7o0?oco`3oooX0oooG0?ooa@3ook<01Oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;ooooo8?l0Ool?o`1^o`_o05co2_l0B_l:o`0ho`[o02Ko 2Ol05?l;o`02o`ko3`3o8_lQ0?l;o`l0o`Ko00;o1_l05?l4o`0Vo`Co03So0ol0B_l3o`1Lo`?o06ko 0ol0Ool3o`2Ao`;o0:?o0_l0]Ol3o`37o`;o0=Wo0_l0jol2o`3mo`03o`3ol?l0omko0?oN00;o0?o< 00Co0?njo`3oZ?l0ojSo0?nG0_l0ohD2o`3oL`07o`3oHOl0odoo0?lmo`3o?Ol0ob_o0?lIo`3o1`02 o`[o0006oaco0?l^o`3o?ol0oe7o0?mSo`3oMOl00_n7o`002_nIo`3oZol0okgo0?o?o`3ohOl0oo?o 0?oonP3oomL0ooo50?oo/`05ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool7 o`2Aoa_o07oo3_l0K_l;o`1Lo`[o04[o2Ol0>?l:o`0Vo`[o01Co2ol00_l=o`l0ob?o8@3o2ol?0?l6 o`02o`Go01Co1Ol09_l4o`0ho`;o04[o1?l0G?l3o`1^o`?o07oo0_l0TOl2o`2So`?o0;Go0_l0aol2 o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Co0?nXo`3oUol0oiOo0?n50_l0 og<01ol0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6Ol0o`L00_l:o`001_lLo`3o;_l0ocoo0?mAo`3oHol0 ogGo00;oQol000[oVOl0oj_o0?nmo`3ocol0on7o0?oco`3oooX0oooG0?ooa@3ook<01Oooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;ooooo3_l0TOlFo`1oo`go06ko2ol0G?l:o`1:o`Wo 03So2_l09_l:o`0Do`[o00;o3_l?0?lRob40o`_o3`3o1_l00_l5o`0Do`Go02Ko1?l0>?l3o`1:o`?o 05co0ol0K_l3o`1oo`;o097o0_l0Xol3o`2eo`;o0?l3o`1:o`?o05co0ol0K_l3o`1oo`?o097o0_l0Xol2 o`2eo`?o0?l:o`0Vo`Wo01Co2ol00_l=o`l0 ob;o8@3o2ol?0?l6o`02o`Go01Co1Ol09_l4o`0ho`?o04[o0ol0G?l3o`1^o`?o07oo0_l0TOl2o`2S o`?o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Co0?nXo`3o Uol0oiOo0?n50_l0og<01ol0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6Ol0o`L00_l:o`001OlLo`3o;_l0 ocoo0?mAo`3oHol000;oMOl000[oQol0oiWo0?n[o`3o_Ol0oloo0?oQo`3olol0oooj0?ooe`3oolD0 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo6ol0TOl?o`1oo`go06ko2Ol0 G?l9o`1:o`Wo03So2_l09_l9o`0Do`_o00;o3Ol?0?lRob40o`[o3`3o1ol00_l5o`0Do`Co02Ko1?l0 >?l3o`1:o`Co05co0_l0K_l3o`1oo`;o097o0ol0Xol2o`2eo`;o0o`1oo`co06ko2Ol0G?l9o`1:o`Wo03So2_l09_l9o`0Do`[o 00;o3_l?0?lRob40o`[o3`3o1_l00_l5o`0Do`Go02Ko1?l0>?l3o`1:o`?o05co0ol0K_l3o`1oo`;o 097o0_l0Xol3o`2eo`;o0?l3o`1:o`?o05co0ol0K_l3o`1oo`;o097o0_l0Xol3o`2eo`;o0?l3o`1:o`Co05co0_l0K_l3o`1oo`;o097o0ol0 Xol2o`2eo`;o0?l:o`0Vo`So01Co2ol00_l>o`l0ob7o8@3o2Ol?0?l7o`02o`Go01Co1Ol09_l3o`0ho`Co04[o 0ol0G?l3o`1^o`;o07oo0ol0TOl2o`2So`?o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol004o`3o g_l0olco0?njo`3o^P;o0?nX0_l0oiL01_l0ohGo0?mco`3oHOl0of7o0?m?o`3o?@;o0?l[01?o0?lI o`3o1ol:o`3o2_l0oaco0?l^o`3o?ol0oe7o0?mSo`3oMOl0ohOo0?nIo`3oZol0okgo0?o?o`3ohOl0 oo?o0?oonP3oonP000Cooooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02oooooa7o0:?o 5?l0TOl?l4o`1:o`?o05co0ol0K_l3o`1oo`;o097o0_l0Xol3o`2eo`;o0?l9o`0V o`Wo01Co2_l00_l>o`l0ob7o8@3o2Ol?0?l7o`02o`Go01Co1?l09_l4o`0ho`?o04[o1?l0G?l2o`1^ o`?o07oo0_l0TOl3o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o< 00;o0?nj00Go0?nXo`3oUol0oiOo0?n5o`3oL`02o`3oH@06o`3oCol0ocgo0?lmo`3o:ol0oaWo0?l7 0_l:o`000olLo`3o;_l0ocoo0002oe7o000:ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol0on7o0?oco`3o ooX0oooX00Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooaOo0:?o4_l0TOl; o`1oo`[o06ko2Ol0G?l8o`1:o`So03So2_l09_l8o`0Do`_o00;o3Ol?0?lRob40o`Wo3`3o1_l00_l5 o`0Do`Co02Ko1?l0>?l3o`1:o`Co05co0_l0K_l3o`1oo`;o097o0ol0Xol2o`2eo`?o0?l4o`1:o`?o05co0ol0 K_l3o`1oo`;o097o0_l0Xol3o`2eo`;o0?l3o`1:o`Co05co0_l0K_l3o`1oo`;o097o0ol0Xol2o`2eo`;o0?l9o`0Vo`Wo01Co2_l0 0_l=o`l0ob;o8@3o2Ol?0?l6o`02o`Go01Co1?l09_l4o`0ho`?o04[o1?l0G?l2o`1^o`?o07oo0_l0 TOl3o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Go 0?nXo`3oUol0oiOo0?n5o`3oL`02o`3oH@06o`3oCol0ocgo0?lmo`3o:ol0oaWo0?l70_l:o`003_lL o`3o;_l0ocoo0?mAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol0on7o0?oco`3oooX01Oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo3_l0]OlDo`2So`co097o2ol0Ool8o`1^ o`Wo05co2?l0B_l8o`0ho`Wo02Ko2Ol05?l:o`02o`go3`3o8OlQ0?l:o`l0o`Ko00;o1Ol05?l4o`0V o`Co03So0ol0B_l3o`1Lo`?o06ko0_l0Ool3o`2Ao`;o0:?o0ol0]Ol00ol0aooo0=Woo`3Io`02o`3[ o`;o0?go0_l0oo02o`3ogP04o`3oc?l0ok[o0?njo`3oZ0;o0?nG00Go0?n5o`3oLol0og?o0?mQo`3o C`02o`3o?@03o`3o:ol0oaWo0?l700;o2_l000ko7?l0obko0?loo`3o?ol0of?o0?meo`3oQol0oiWo 0?n[o`3o_Ol0oloo0?oQo`3olol0oooj00Gooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02oooooa7o0;Go4ol0Xol?l9o`0Vo`Wo01Co2_l0 0_l_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Go 0?nXo`3oUol0oiOo0?n5o`3oL`02o`3oH@06o`3oCol0ocgo0?lmo`3o:ol0oaWo0?l70_l:o`003OlL o`3o;_l0ocoo0?mAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol0on7o0?oco`001Oooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;ooooo5?l0]OlAo`2So`co097o2_l0Ool8o`1^o`So 05co2Ol0B_l8o`0ho`So02Ko2Ol05?l:o`02o`go3`3o8OlQ0?l9o`l0o`Ko00;o1Ol05?l4o`0Vo`Co 03So0ol0B_l4o`1Lo`?o06ko0_l0Ool2o`2Ao`?o0:?o0_l0]Ol2o`37o`;o0=Wo0_l0jol2o`3mo`;o 0?o`00?o0?oNo`3oc?l0ol`00_l0okX01Ol0ojSo0?nGo`3oUol0ohGo0?mc00;o0?mQ00Ko0?m?o`3o ?Ol0ocgo0?l[o`3o6Ol0o`L2o`[o000=oaco0?l^o`3o?ol0oe7o0?mSo`3oMOl0ohOo0?nIo`3oZol0 okgo0?o?o`3ohOl0oo?o0005ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolG o`2eoa3o0:?o2ol0TOl:o`1oo`So06ko2?l0G?l9o`1:o`So03So2?l09_l9o`0Do`[o00;o3?l?0?lQ ob40o`[o3`3o1_l00_l5o`0Do`Co02Ko1?l0>?l3o`1:o`?o05co0ol0K_l2o`1oo`?o097o0_l0Xol3 o`2eo`03o`37ool0fOoo0=Wo00;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Co0?nX o`3oUol0oiOo0?n50_l0og<01ol0of7o0?m?o`3o?Ol0ocgo0?l[o`3o6Ol0o`L00_l:o`003OlLo`3o ;_l0ocoo0?loo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3ocol0on7o0?oco`001Oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;ooooo6Ol0]Ol@o`2So`_o097o2Ol0Ool8o`1^o`So05co 2?l0B_l8o`0ho`Wo02Ko2?l05?l:o`02o`go3`3o8OlQ0?l9o`l0o`Ko00;o1Ol05?l4o`0Vo`Co03So 0ol0B_l4o`1Lo`;o06ko0ol0Ool2o`2Ao`?o0:?o0_l0]Ol2o`37o`;o0=Wo0_l0jol2o`3mo`03o`3o l?l0omko0?oN00;o0?o<0_l0okX01Ol0ojSo0?nGo`3oUol0ohGo0?mc00;o0?mQ00So0?m?o`3o?Ol0 ob_o0?l[o`3o6Ol0o`Oo2_l0oaco00;o;_l000[o?ol0oe7o0?mSo`3oMOl0ohOo0?nIo`3oZol0okgo 0?o?o`3ohOl01Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo7?l0]Ol>o`2S o`_o097o2Ol0Ool8o`1^o`So05co2?l0B_l8o`0ho`Wo02Ko2?l05?l:o`02o`co3`3o8OlQ0?l:o`l0 o`Ko00;o1Ol05?l3o`0Vo`Go03So0ol0B_l3o`1Lo`?o06ko0_l0Ool3o`2Ao`;o0:?o0_l0]Ol2o`37 o`;o0=Wo0_l0jol2o`3mo`03o`3ol?l0omko0?oN00;o0?o<0_l0okX01Ol0ojSo0?nGo`3oUol0ohGo 0?mc00;o0?mQ00So0?m?o`3o?Ol0ob_o0?l[o`3o6Ol0o`Oo2_l0oaco00;o;_l000[o?ol0oe7o0?mS o`3oMOl0ohOo0?nIo`3oZol0okgo0?o?o`3ohOl01Oooool1o`00007ooooo000Eooooo`;o00000ooo oolNo`2eo`ko0:?o2ol0TOl8o`1oo`So06ko2?l0G?l8o`1:o`So03So2?l09_l9o`0Do`[o00;o3?l? 0?lPob40o`[o3`3o1_l00_l5o`0Do`Co02Ko1?l0>?l3o`1:o`?o05co0ol0K_l2o`1oo`?o097o0_l0 Xol2o`2eo`;o0?l8o`0Vo`So01Co2_l00_l_o0_l0oOl00ol0oo3o 0?oNo`3ogP02o`3oc0;o0?nj00Go0?nXo`3oUol0oiOo0?n5o`3oL`02o`3oH@08o`3oCol0ocgo0?l[ o`3o:ol0oaWo0?l7o`[o0?lLo`02obko0009ocoo0?mAo`3oHol0ogGo0?n7o`3oVOl0oj_o0?nmo`3o col000Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa3o0?l3o`1:o`?o05co0ol0K_l2 o`1oo`?o097o0_l0Xol2o`2eo`;o0?l8o`0Vo`So01Co2_l00_l?l3o`1:o`;o05co1?l0K_l2o`1oo`?o097o 0_l0Xol2o`2eo`;o0?l3o`1:o`?o05co0ol0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0?l8o`0Vo`So01Co2_l0 0_l;o`l0ob3o8@3o2_l?0?l6o`02o`Go01Co1?l09_l4o`0ho`?o04[o0_l0G?l4o`1^o`;o07oo0ol0 TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o00Go0?goo`3ol?l0oo3o0?o`o`3ogP02o`3oc0;o0?nj 00?o0?nXo`3oUol0ohD00_l0og<2o`3oH@03o`3oCol0ocgo0?l[00;o0?lI00Go0?l7o`[o0?lLo`3o ;_l0ocoo0002oe7o0005of?o0?meo`3oQol0oiWo0?nmo`001Oooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;ooooo3ol0fOlCo`37o`_o0;Go2ol0Xol8o`2Ao`Oo07oo1ol0K_l8o`1Lo`So 04[o1ol0>?l7o`0Vo`Wo01Co2Ol00_l_o0_l0oOl2o`3ol003 o`3og_l0olco0?o<00;o0?nj00Go0?nXo`3oUol0ohGo0?n5o`3oL`02o`3oH@03o`3oCol0ocgo0?l[ 00;o0?lI00Go0?l7o`[o0?lLo`3o;_l0ocoo0002oe7o0005of?o0?meo`3oQol0oiWo0?nmo`001Ooo ool1o`00007ooooo00001?oooooo0000o`000?l00004ooooo`03o`000?oooooooooo00;ooooo0ol0 0005ooooo`03o`000?oooooooooo00;ooooo5?l0fOl@o`37o`_o0;Go2_l0Xol7o`2Ao`So07oo1ol0 K_l8o`1Lo`Oo04[o1ol0>?l8o`0Vo`So01Co2_l00_l;o`l0ob3o8@3o2Ol?0?l7o`02o`Co01Co1?l0 9_l4o`0ho`?o04[o0ol0G?l3o`1^o`?o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0 oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Go0?nXo`3oUol0oiOo0?n5o`3oL`02o`3oH@03o`3o Col0ocgo0?l[00;o0?lI00Go0?l7o`[o0?lLo`3o;_l0ocoo0002oe7o0005of?o0?meo`3oQol0oiWo 0?n[o`001Oooool1o`00007ooooo0002ooooo`03o`000?oooooooooo00Oooooo00Go0000oooooooo ooooooooo`000004ooooo`03o`000?oooooooooo00;ooooo5ol0fOl?o`37o`[o0;Go2_l0Xol7o`2A o`So07oo1ol0K_l7o`1Lo`So04[o1ol0>?l7o`0Vo`Wo01Co2Ol00_l_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Go0?nXo`3oUol0oiOo0?n5o`3oL`02 o`3oH@05o`3oCol0ocgo0?l[o`3o:ol0oaT00_l0o`L02_l:o`3o7?l0obko0?loo`3oDOl0of?o0?me o`3oQol0oiWo0?n[o`05ooooo`7o00000Oooool000;ooooo00?o0000ooooooooool02oooool00ol0 003oooooooooo`02ooooo`03o`000?oooooooooo00;ooooo6_l0fOl=o`37o`_o0;Go2Ol0Xol7o`2A o`So07oo1ol0K_l7o`1Lo`So04[o1_l0>?l8o`0Vo`So01Co2_l00_l;o`l0oaoo8@3o2_l?0?l6o`02 o`Go01Co1?l09_l4o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0ol0TOl2o`2So`;o0;Go0_l0aol2o`3I o`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Go0?nXo`3oUol0ohGo0?n5o`3oL`02 o`3oH@03o`3oCol0ocgo0?l[00;o0?lI00Go0?l7o`[o0?lLo`3o;_l0ocoo0002oe7o0004of?o0?me o`3oQol0oiWo00Gooooo0Ol00001ooooo`000_ooool00ol0003oooooooooo`0;ooooo`03o`000?oo oooooooo00;ooooo0_l00003oooooaco0=Wo3Ol0aol:o`2eo`Wo0:?o1ol0TOl8o`1oo`Oo06ko1ol0 G?l7o`1:o`Oo03So2?l09_l8o`0Do`Wo00;o3?l?0?lOob40o`Wo3`3o1ol00_l4o`0Do`Co02Ko1?l0 >?l3o`1:o`?o05co0ol0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0?l3o`1:o`?o 05co0ol0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0_o4_l0fOl?l8 o`0Vo`So01Co2Ol00_l_o0_l0oOl2o`3ol003o`3og_l0olco 0?o<00;o0?nj00Go0?nXo`3oUol0ohGo0?n5o`3oL`02o`3oH@0:o`3oCol0ocgo0?l[o`3o:ol0oaWo 0?l7o`[o0?lLo`3o;_l0ocoo00;oDOl000CoHol0ogGo0?n7o`3oVOl01Oooool1o`00007ooooo0002 ooooo`03o`000?oooooooooo00Oooooo1Ol00004ooooo`03o`000?oooooooooo00;ooooo4Ol0jolA o`3Io`_o0_oo`3mool0oOoo0?go0_l0oo000ol0omko0?oo`3Io`_o0?l3o`1:o`?o05co0ol0 K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0?l3o`1:o`?o05co0ol0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0_o3?l0fOl:o`37o`So0;Go1ol0 Xol7o`2Ao`Oo07oo1ol0K_l7o`1Lo`Ko04[o1ol0>?l7o`0Vo`So01Co2?l00_l_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Ko0?nXo`3oUol0ohGo0?n5 o`3oLol0of42o`3oC`0;o`3o?Ol0ob_o0?l[o`3o6Ol0o`Oo2_l0oaco0?l^o`3o?ol0oe7o0?mSo`00 0_meo`05ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool>o`3moa;o0>_o3?l0 fOl9o`37o`So0;Go1ol0Xol7o`2Ao`Oo07oo1_l0K_l8o`1Lo`Go04[o1ol0>?l8o`0Vo`So01Co2?l0 0_l;o`l0oaoo8@3o2Ol?0?l6o`02o`Go01Co1?l09_l4o`0ho`?o04[o0ol0G?l2o`1^o`?o07oo0_l0 TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol003o`3og_l0olco0?o<00;o0?nj00Go 0?nXo`3oUol0ohGo0?n5o`3oL`02o`3oH@0:o`3oCol0ocgo0?l[o`3o:ol0oaWo0?l7o`[o0?lLo`3o ;_l0ocoo00;oDOl000?oHol0ogGo0?ooool01?ooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo4Ol0oOlAo`3[o`_o0=Wo2Ol0aol8o`2eo`Oo0:?o1ol0TOl7o`1oo`Ko06ko1ol0G?l6 o`1:o`Oo03So1ol09_l8o`0Do`So00;o2ol?0?lOob40o`[o3`3o1_l00_l4o`0Do`Co02Ko1?l0>?l3 o`1:o`?o05co0ol0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0_o2_l0fOl9o`37o`So0;Go1ol0Xol7o`2Ao`Oo 07oo1_l0K_l7o`1Lo`Ko04[o1ol0>?l7o`0Vo`So01Co2?l00_l;o`l0oaoo8@3o2Ol?0?l6o`02o`Go 01Co1?l09_l3o`0ho`Co04[o0ol0G?l2o`1^o`?o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o 0>_o0_l0oOl2o`3ol004o`3og_l0olco0?o_o2_l0fOl9o`37 o`Oo0;Go1_l0Xol7o`2Ao`Oo07oo1_l0K_l7o`1Lo`Ko04[o1ol0>?l7o`0Vo`So01Co2?l00_l;o`l0 oaoo8@3o2Ol?0?l5o`02o`Go01Co1?l09_l4o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2S o`;o0;Go0ol0aol00ol0fOoo0>_oo`3[o`02o`3mo`;o0?o`00Co0?oNo`3oc?l0olco0?nj0_l0ojP0 1Ol0oiOo0?n5o`3oQOl0og?o0?mQ00;o0?m?0_l0ocd02?l0oaWo0?l7o`3o1ol:o`3o7?l0obko0?lo o`3oDOl00_mSo`04ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_ooool7o`3ol1Ko 0?go3?l0jol:o`3Io`So0?l4o`1:o`?o05co0_l0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0_o2Ol0fOl8o`37o`Oo0;Go1_l0Xol7o`2A o`Ko07oo1_l0K_l7o`1Lo`Ko04[o1ol0>?l7o`0Vo`Oo01Co2?l00_l_o0_l0oOl2o`3ol004o`3og_l0olco0?o_o2_l0fOl7o`37o`Oo 0;Go1_l0Xol6o`2Ao`Oo07oo1_l0K_l6o`1Lo`Ko04[o1ol0>?l7o`0Vo`So01Co2?l00_l;o`l0oako 8@3o2Ol?0?l6o`02o`Go01Co1?l09_l3o`0ho`Co04[o0ol0G?l2o`1^o`?o07oo0_l0TOl2o`2So`;o 0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol004o`3og_l0olco0?o?l3o`1:o`?o05co 0ol0K_l2o`1oo`;o097o0_l0Xol2o`2eo`;o0_o2?l0fOl7o`37o`Oo0;Go1_l0 Xol6o`2Ao`Ko07oo1_l0K_l6o`1Lo`Ko04[o1ol0>?l7o`0Vo`Oo01Co2?l00_l_o0_l0oOl2o`3ol004o`3og_l0olco0?o?l3o`1:o`?o05co0_l0K_l3o`1oo`;o 097o0_l0Xol2o`2eo`;o0 o`3ol0[o0?go2?l0jol8o`3Io`Ko0?l3o`1:o`?o05co0_l0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0_o1ol0fOl6o`37o`Ko0;Go1ol0Xol6 o`2Ao`Ko07oo1Ol0K_l6o`1Lo`Ko04[o1ol0>?l7o`0Vo`Oo01Co2?l00_l;o`l0oago8@3o2Ol?0?l5 o`02o`Go01Co1?l09_l4o`0ho`?o04[o0ol0G?l2o`1^o`?o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2 o`3Io`;o0>_o0_l0oOl2o`3ol004o`3og_l0olco0?oo`3oc13o0?oN2ol0oo0: o`3mo`Oo0>_o1_l0fOl6o`37o`Oo0;Go1_l0Xol6o`2Ao`Ko07oo1_l0K_l5o`1Lo`Ko04[o1ol0>?l7 o`0Vo`Oo01Co2?l00_l;o`l0oago8@3o2Ol?0?l5o`02o`Go01Co1?l09_l4o`0ho`?o04[o0_l0G?l3 o`1^o`?o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl00ol0oo3o0?oNo`3ogP02 o`3oc005o`3o^_l0ojSo0?nXo`3oUol0ohD00_l0og<00ol0of7o0?m?o`3o?@02o`3o:`05o`3o6Ol0 o`Oo2_l0oaco0?l^o`001Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo4Ol0 ol`?o`3ogP[o0?o`2_l0oOl7o`3[o`Ko0=Wo1_l0aol7o`2eo`Ko0:?o1_l0TOl6o`1oo`Go06ko1_l0 G?l6o`1:o`Oo03So1_l09_l7o`0Do`So00;o2ol?0?lMob40o`Wo3`3o1Ol00_l5o`0Do`Co02Ko1?l0 >?l3o`1:o`?o05co0_l0K_l3o`1oo`;o097o0_l0Xol2o`2eo`;o0_o1_l0fOl6o`37o`Ko 0;Go1_l0Xol6o`2Ao`Ko07oo1Ol0K_l6o`1Lo`Ko04[o1ol0>?l6o`0Vo`Oo01Co2?l00_l;o`l0oago 8@3o2?l?0?l6o`02o`Go01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o 0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl2o`3ol004o`3og_l0olco0?o_o1_l0fOl6 o`37o`Ko0;Go1_l0Xol6o`2Ao`Go07oo1_l0K_l6o`1Lo`Go04[o1ol0>?l7o`0Vo`Ko01Co2?l00_l; o`l0oago8@3o2Ol?0?l5o`02o`Go01Co1?l09_l4o`0ho`?o04[o0ol0G?l2o`1^o`?o07oo0_l0TOl2 o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl00ol0oo3o0?oNo`3ogP02o`3oc005o`3o^_l0ojSo 0?nXo`3oUol0ohD00_l0og<00ol0of7o0?m?o`3o?@02o`3o:`04o`3o6Ol0o`Oo2_l0oaco00Gooooo 0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`Ko0?nj5ol0ol`;o`3ogPSo0?o`2?l0 oOl7o`3[o`Ko0=Wo1ol0aol5o`2eo`Ko0:?o1_l0TOl5o`1oo`Ko06ko1_l0G?l5o`1:o`Oo03So1_l0 9_l7o`0Do`So00;o2ol?0?lMob40o`So3`3o1_l00_l5o`0Do`Co02Ko0ol0>?l3o`1:o`?o05co0ol0 K_l2o`1oo`;o097o0_l0Xol2o`2eo`;o0o`3o^Q7o0?o< 2_l0omh9o`3ol0So0?go1_l0jol5o`3Io`Oo0?l4o`1:o`;o05co0ol0K_l2o`1oo`;o097o0_l0Xol2o`2eo`;o0_o 1_l0fOl7o`37o`Go0;Go1_l0Xol6o`2Ao`Co07oo1_l0K_l6o`1Lo`Go04[o1ol0>?l6o`0Vo`Oo01Co 2?l00_l:o`l0oago8@3o2?l?0?l6o`02o`Go01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo 0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl00ol0oo3o0?oNo`3ogP02o`3oc004o`3o ^_l0ojSo0?nXo`3oU`;o0?n500Co0?mco`3oHOl0odoo0?lm0_l0ob/00ol0oaWo0?l7o`[o0005oooo o`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolJo`3o^P_o0?o<2Ol0omh9o`3ol0Oo 0?go1Ol0jol6o`3Io`Ko0?l3o`1:o`?o 05co0ol0K_l2o`1oo`04o`2Aool0Xooo0:?oo`2So`;o0;Go0_l0aol2o`3Io`;o0>_o00?o0?goo`3o l?l0oo000_l0omh01?l0olco0?njo`3o^_l0ojP2o`3oU`07o`3oQOl0og?o0?mQo`3oHOl0odoo0?lm o`3o:`02o`3o6@03o`[o0?oooooooooo00;ooooo0_l00001ooooo`005Oooool00ol0003ooooooooo o`02ooooo`oo0?nX4Ol0okX9o`3oc0So0?oN2?l0oo07o`3mo`Go0>_o1_l0fOl6o`37o`Go0;Go1_l0 Xol5o`2Ao`Go07oo1Ol0K_l7o`1Lo`Go04[o1_l0>?l6o`0Vo`Oo01Co2?l00_l:o`l0oago8@3o2?l? 0?l6o`02o`Go01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0_l0 aol2o`3Io`;o0>_o0_l0oOl01?l0oo3o0?oNo`3og_l0ol`2o`3o^P05o`3oZ?l0oiOo0?nGo`3oQOl0 og<00_l0of400ol0odoo0?lmo`3o:`02o`3o6@03o`[o0?oooooooooo00?ooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02oooooaCo0?nX3_l0okX8o`3oc0Wo0?oN1ol0oo06o`3mo`Ko0>_o 1_l0fOl5o`37o`Ko0;Go1Ol0Xol6o`2Ao`Go07oo1Ol0K_l6o`1Lo`Go04[o1_l0>?l6o`0Vo`Oo01Co 2?l00_l;o`l0oaco8@3o2Ol?0?l6o`02o`Co01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo 0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl01?l0oo3o0?oNo`3og_l0ol`2o`3o^P05 o`3oZ?l0oiOo0?nGo`3oQOl0og<00_l0of400ol0odoo0?lmo`3o:`02o`3o6@03o`3o1ooooooooooo 00?ooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooaOo0?nX3?l0okX9o`3oc0So 0?oN1ol0oo06o`3mo`Ko0>_o1_l0fOl5o`37o`Go0;Go1_l0Xol6o`2Ao`Co07oo1_l0K_l6o`1Lo`Go 04[o1_l0>?l6o`0Vo`Oo01Co2?l00_l:o`l0oaco8@3o2Ol?0?l6o`02o`Co01Co1?l09_l3o`0ho`?o 04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl00ol0oo3o 0?oNo`3ogP02o`3oc003o`3o^_l0ojSo0?nX00;o0?nG00Go0?n5o`3oLol0of7o0?m?o`3o?@02o`3o :`03o`3o6Ol0o`Oooooo00Cooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooaWo 0?nX3?l0okX8o`3oc0So0?oN1ol0oo06o`3mo`Ko0>_o1_l0fOl5o`37o`Go0;Go1_l0Xol5o`2Ao`Go 07oo1Ol0K_l6o`1Lo`Go04[o1_l0>?l6o`0Vo`Oo01Co2?l00_l:o`l0oago8@3o2?l?0?l6o`02o`Go 01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o 0>_o0_l0oOl01?l0oo3o0?oNo`3og_l0ol`2o`3o^P05o`3oZ?l0oiOo0?nGo`3oQOl0og<00_l0of40 0ol0odoo0?lmo`3o:`02o`3o6@Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooo o`?o0?nG6?l0ojP;o`3o^PSo0?o<2?l0omh7o`3ol0Ko0?go1_l0jol6o`3Io`Go0?l3o`1:o`?o05co0ol0K_l2o`1oo`;o097o0_l0Xol2 o`2eo`;o0_o1_l0fOl5 o`37o`Go0;Go1_l0Xol5o`2Ao`Go07oo1Ol0K_l6o`1Lo`Go04[o1_l0>?l6o`0Vo`Oo01Co2?l00_l; o`l0oa_o8@3o2Ol?0?l5o`02o`Co01Co1?l09_l4o`0ho`;o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2 o`2So`;o0;Go0ol0aol2o`3Io`04o`3[ool0oOoo0?goo`3ol0;o0?oN00So0?o_o1_l0fOl5o`37o`Go0;Go1_l0Xol5o`2Ao`Co07oo1_l0K_l5o`1Lo`Ko04[o1_l0>?l5o`0Vo`Oo 01Co2?l00_l;o`l0oa_o8@3o2Ol?0?l6o`02o`Co01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o 07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl01?l0oo3o0?oNo`3og_l0ol`2o`3o ^P05o`3oZ?l0oiOo0?nGo`3oQOl0og<00_l0of401?l0odoo0?lmo`3o:ol0oaT5ooooo`7o00000Ooo ool001Gooooo00?o0000ooooooooool00_oooolGo`3oU`go0?nX2?l0okX8o`3oc0Oo0?oN1_l0oo05 o`3mo`Ko0>_o1_l0fOl5o`37o`Go0;Go1_l0Xol4o`2Ao`Go07oo1Ol0K_l6o`1Lo`Go04[o1_l0>?l6 o`0Vo`Oo01Co2?l00_l;o`l0oa[o8@3o2Ol?0?l6o`02o`Co01Co1?l09_l3o`0ho`?o04[o0ol0G?l3 o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl01?l0oo3o0?oNo`3og_l0 ol`2o`3o^P;o0?nX00?o0?nGo`3oQOl0og<00_l0of401?l0odoo0?lmo`3o:ol0oaT5ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_oooolJo`3oU`_o0?nX2?l0okX8o`3oc0Oo0?oN1_l0 oo05o`3mo`Ko0>_o1Ol0fOl6o`37o`Go0;Go1Ol0Xol5o`2Ao`Go07oo1Ol0K_l5o`1Lo`Ko04[o1_l0 >?l5o`0Vo`Oo01Co2?l00_l;o`l0oa_o8@3o2Ol?0?l5o`02o`Co01Co1?l09_l4o`0ho`;o04[o0ol0 G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0ol0aol2o`3Io`04o`3[ool0oOoo0?goo`3ol0;o0?oN 00So0?o_o1Ol0fOl6o`37o`Co0;Go1_l0Xol4o`2Ao`Go07oo1Ol0K_l6 o`1Lo`Go04[o1_l0>?l6o`0Vo`Oo01Co1ol00_l;o`l0oa_o8@3o2Ol?0?l5o`02o`Go01Co1?l09_l3 o`0ho`?o04[o0ol0G?l2o`1^o`?o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl0 1?l0oo3o0?oNo`3og_l0ol`2o`3o^P06o`3oZ?l0oiOo0?n5o`3oQOl0og?o0?mQ0_l0odl00ol0ocgo 0?l[ooooo`04ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool?o`3oQA7o0?nG 2Ol0ojP8o`3o^POo0?o<1_l0omh6o`3ol0Go0?go1_l0jol5o`3Io`Go0o`3o U`So0?nX2?l0okX7o`3oc0Ko0?oN1_l0oo05o`3mo`Ko0>_o1Ol0fOl5o`37o`Go0;Go1Ol0Xol5o`2A o`Co07oo1_l0K_l5o`1Lo`Ko04[o1Ol0>?l6o`0Vo`Oo01Co1ol00_l;o`l0oa_o8@3o2Ol?0?l5o`02 o`Co01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0ol0aol00ol0 fOoo0>_oo`3[o`02o`3mo`04o`3ol?l0omko0?oNo`3oc0;o0?nj00Go0?nXo`3oUol0oiOo0?n5o`3o L`02o`3oH@03o`3oCol0ocgo0?l[00Cooooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02 oooooaOo0?n53Ol0oiL8o`3oZ0So0?nj1_l0ol`6o`3ogPKo0?o`1Ol0oOl6o`3[o`Go0=Wo1Ol0aol5 o`2eo`Go0:?o1?l0TOl5o`1oo`Go06ko1Ol0G?l6o`1:o`Go03So1_l09_l7o`0Do`Oo00;o2ol?0?lK ob40o`Wo3`3o1Ol00_l5o`0Do`Co02Ko0ol0>?l3o`1:o`?o05co0_l0K_l3o`1oo`;o097o0_l0Xol2 o`2eo`;o0_o 1Ol0fOl5o`37o`Go0;Go1Ol0Xol4o`2Ao`Go07oo1Ol0K_l5o`1Lo`Ko04[o1Ol0>?l6o`0Vo`Oo01Co 1ol00_l;o`l0oa_o8@3o2Ol?0?l5o`02o`Co01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo 0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o0_l0oOl01?l0oo3o0?oNo`3og_l0ol`2o`3o^P06 o`3oZ?l0oiOo0?n5o`3oQOl0og?o0?mQ0_l0odl00ol0ocgoooooooooo`03ooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_ooool8o`3oLaCo0?n52ol0oiL8o`3oZ0Ko0?nj1ol0ol`5o`3o gPKo0?o`1Ol0oOl6o`3[o`Go0=Wo1Ol0aol5o`2eo`Go0:?o1?l0TOl5o`1oo`Ko06ko1?l0G?l6o`1: o`Go03So1_l09_l7o`0Do`Oo00;o2ol?0?lKob40o`Wo3`3o1Ol00_l4o`0Do`Co02Ko0ol0>?l3o`1: o`?o05co0ol0K_l2o`1oo`;o097o0_l0Xol2o`2eo`;o0?l3o`1:o`?o05co0ol0K_l2o`1oo`;o097o 0_l0Xol2o`2eo`;o0o`3oH@oo0?mc2_l0ohD8o`3oU`Oo0?nX1ol0okX5 o`3oc0Go0?oN1Ol0oo05o`3mo`Go0>_o1Ol0fOl5o`37o`Go0;Go1?l0Xol5o`2Ao`Go07oo1Ol0K_l5 o`1Lo`Go04[o1Ol0>?l6o`0Vo`Oo01Co1ol00_l9o`l0oa_o8@3o2Ol?0?l6o`02o`Co01Co1?l09_l3 o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o00?o0?go o`3ol?l0oo000_l0omh01_l0olco0?njo`3oZ?l0ojSo0?nGo`3oQ@;o0?mc00?o0?mQo`3oCoooool0 1?ooool1o`00007ooooo000ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool00_oooolH o`3oH@co0?mc2?l0ohD7o`3oU`Ko0?nX1ol0okX5o`3oc0Go0?oN1Ol0oo05o`3mo`Go0>_o1?l0fOl5 o`37o`Co0;Go1Ol0Xol5o`2Ao`Go07oo1?l0K_l5o`1Lo`Go04[o1Ol0>?l6o`0Vo`Oo01Co1ol00_l9 o`l0oa_o8@3o2Ol?0?l6o`02o`Co01Co1?l09_l3o`0ho`?o04[o0ol0G?l3o`1^o`;o07oo0_l0TOl2 o`2So`;o0;Go0_l0aol2o`3Io`;o0>_o00Co0?goo`3ol?l0oo3o0?oN0_l0ol`01Ol0ok[o0?nXo`3o Z?l0oiOo0?n500;o0?mc00?o0?mQooooooooool00oooool1o`00007ooooo000?ooooo`03o`000?oo oooooooo00?ooooo0_l00003ooooo`Go0?m?5_l0of4:o`3oL`So0?n51ol0oiL6o`3oZ0Ko0?nj1_l0 ol`5o`3ogPGo0?o`1Ol0oOl5o`3[o`Co0=Wo1Ol0aol4o`2eo`Go0:?o1Ol0TOl4o`1oo`Go06ko1Ol0 G?l5o`1:o`Go03So1_l09_l6o`0Do`So00;o2?l?0?lLob40o`So3`3o1_l00_l4o`0Do`Co02Ko1?l0 >?l2o`1:o`?o05co0ol0K_l2o`1oo`;o097o0_l0Xol2o`2eo`;o0"], ImageRangeCache->{{{0, 287}, {287, 0}} -> {-0.207, -0.172242, 0.00783272, \ 0.00783272}}], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .81114 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% SurfaceGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 3.1978e-17 1.04977 -0.0679587 1.04977 [ [.02757 .24618 -6 -8.70276 ] [.02757 .24618 0 .29724 ] [.17646 .18758 -17.6983 -9 ] [.17646 .18758 .30168 0 ] [.3345 .12542 -5.5867 -9 ] [.3345 .12542 .4133 0 ] [.50253 .05935 -15.8219 -9 ] [.50253 .05935 2.17811 0 ] [.68156 -0.01098 -4.96123 -9 ] [.68156 -0.01098 1.03877 0 ] [.70096 -0.00478 0 -6.26206 ] [.70096 -0.00478 6 2.73794 ] [.78313 .12104 0 -6.13858 ] [.78313 .12104 18 2.86142 ] [.8565 .23339 0 -6.03127 ] [.8565 .23339 6 2.96873 ] [.9224 .33431 0 -5.93715 ] [.9224 .33431 18 3.06285 ] [.98191 .42546 0 -5.85393 ] [.98191 .42546 6 3.14607 ] [.02411 .26511 -6 -2.74232 ] [.02411 .26511 0 6.25768 ] [.01669 .31161 -18 -2.78163 ] [.01669 .31161 0 6.21837 ] [.00905 .35954 -18 -2.82227 ] [.00905 .35954 0 6.17773 ] [.00116 .40897 -18 -2.8643 ] [.00116 .40897 0 6.1357 ] [-0.00697 .45996 -18 -2.90781 ] [-0.00697 .45996 0 6.09219 ] [ 0 0 0 0 ] [ 1 .81114 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .03716 .25514 m .68874 0 L s .03716 .25514 m .04196 .25962 L s [(0)] .02757 .24618 1 .93395 Mshowa .18558 .19702 m .19014 .20174 L s [(0.5)] .17646 .18758 .96648 1 Mshowa .34306 .13535 m .34735 .14032 L s [(1)] .3345 .12542 .86223 1 Mshowa .51046 .06981 m .51442 .07504 L s [(1.5)] .50253 .05935 .75799 1 Mshowa .68874 0 m .69233 .00549 L s [(2)] .68156 -0.01098 .65374 1 Mshowa .125 Mabswid .06616 .24378 m .06901 .2465 L s .09549 .2323 m .09832 .23504 L s .12517 .22067 m .12797 .22345 L s .1552 .20892 m .15797 .21172 L s .21633 .18498 m .21903 .18784 L s .24744 .1728 m .25012 .17569 L s .27893 .16047 m .28157 .16339 L s .3108 .14799 m .31341 .15094 L s .37572 .12257 m .37826 .12558 L s .40878 .10962 m .41128 .11266 L s .44225 .09652 m .44471 .09959 L s .47614 .08324 m .47856 .08635 L s .54521 .0562 m .54755 .05937 L s .58041 .04242 m .5827 .04562 L s .61605 .02846 m .6183 .03169 L s .65216 .01432 m .65436 .01759 L s .25 Mabswid .68874 0 m .96935 .42924 L s .68874 0 m .68263 .00239 L s [(0)] .70096 -0.00478 -1 .39157 Mshowa .7708 .12553 m .76464 .12778 L s [(0.5)] .78313 .12104 -1 .36413 Mshowa .84407 .23761 m .83786 .23973 L s [(1)] .8565 .23339 -1 .34028 Mshowa .9099 .3383 m .90365 .34029 L s [(1.5)] .9224 .33431 -1 .31937 Mshowa .96935 .42924 m .96306 .43113 L s [(2)] .98191 .42546 -1 .30087 Mshowa .125 Mabswid .70593 .0263 m .70226 .02771 L s .72272 .05198 m .71904 .05338 L s .73912 .07706 m .73543 .07845 L s .75514 .10158 m .75145 .10294 L s .78611 .14895 m .78241 .15028 L s .80108 .17185 m .79737 .17317 L s .81573 .19425 m .81201 .19555 L s .83006 .21617 m .82633 .21745 L s .8578 .2586 m .85407 .25986 L s .87123 .27915 m .8675 .28039 L s .88439 .29928 m .88065 .3005 L s .89727 .31899 m .89353 .3202 L s .92227 .35722 m .91851 .3584 L s .93439 .37576 m .93063 .37693 L s .94627 .39394 m .94251 .3951 L s .95792 .41176 m .95416 .41291 L s .25 Mabswid .03716 .25514 m 0 .48963 L s .03634 .26033 m .04245 .25795 L s [(0)] .02411 .26511 1 -0.3906 Mshowa .02895 .30693 m .03508 .30459 L s [(200)] .01669 .31161 1 -0.38186 Mshowa .02134 .35496 m .02749 .35267 L s [(400)] .00905 .35954 1 -0.37283 Mshowa .01349 .40448 m .01966 .40224 L s [(600)] .00116 .40897 1 -0.36349 Mshowa .0054 .45558 m .01158 .45339 L s [(800)] -0.00697 .45996 1 -0.35382 Mshowa .125 Mabswid .03451 .27185 m .03818 .27043 L s .03267 .28346 m .03634 .28204 L s .03082 .29515 m .03449 .29374 L s .02707 .3188 m .03075 .3174 L s .02518 .33076 m .02886 .32937 L s .02327 .34281 m .02695 .34143 L s .0194 .3672 m .02309 .36583 L s .01745 .37953 m .02114 .37817 L s .01548 .39196 m .01917 .39061 L s .01149 .41711 m .0152 .41577 L s .00948 .42983 m .01318 .4285 L s .00744 .44265 m .01115 .44133 L s .00333 .46861 m .00705 .4673 L s .00125 .48174 m .00497 .48044 L s .25 Mabswid .03716 .25514 m 0 .48963 L s 0 .48963 m .39787 .81114 L s .39787 .81114 m .40529 .59895 L s .40529 .59895 m .03716 .25514 L s .68874 0 m .96935 .42924 L s .96935 .42924 m 1 .6535 L s 1 .6535 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .03716 .25514 m 0 .48963 L s 0 .48963 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .68874 0 m .03716 .25514 L s .40529 .59895 m .96935 .42924 L s .96935 .42924 m 1 .6535 L s 1 .6535 m .39787 .81114 L s .39787 .81114 m .40529 .59895 L s 0 0 m 1 0 L 1 .81114 L 0 .81114 L closepath clip newpath .5 Mabswid .662 .657 .835 r .38927 .67142 .4021 .69019 .42403 .68331 .41127 .66446 Metetra .675 .662 .83 r .41127 .66446 .42403 .68331 .44617 .67517 .43348 .65628 Metetra .687 .667 .826 r .43348 .65628 .44617 .67517 .46848 .66579 .45587 .64692 Metetra .697 .672 .822 r .45587 .64692 .46848 .66579 .49094 .65524 .47842 .63643 Metetra .707 .677 .819 r .47842 .63643 .49094 .65524 .51354 .6436 .50112 .62491 Metetra .715 .682 .817 r .50112 .62491 .51354 .6436 .53626 .631 .52393 .61247 Metetra .722 .687 .816 r .52393 .61247 .53626 .631 .55908 .61758 .54686 .59926 Metetra .728 .692 .816 r .54686 .59926 .55908 .61758 .58198 .6035 .56988 .58545 Metetra .732 .697 .817 r .56988 .58545 .58198 .6035 .60497 .58896 .593 .57122 Metetra .735 .702 .82 r .593 .57122 .60497 .58896 .62804 .57419 .6162 .55681 Metetra .736 .707 .824 r .6162 .55681 .62804 .57419 .6512 .55941 .6395 .54244 Metetra .735 .713 .83 r .6395 .54244 .6512 .55941 .67445 .54491 .66291 .52839 Metetra .731 .718 .838 r .66291 .52839 .67445 .54491 .69783 .53095 .68645 .51494 Metetra .724 .723 .849 r .68645 .51494 .69783 .53095 .72136 .51787 .71016 .5024 Metetra .713 .728 .862 r .71016 .5024 .72136 .51787 .74509 .50598 .73407 .49111 Metetra .694 .731 .879 r .73407 .49111 .74509 .50598 .76907 .49565 .75825 .48144 Metetra .667 .733 .899 r .75825 .48144 .76907 .49565 .79338 .48728 .78277 .47378 Metetra .626 .73 .922 r .78277 .47378 .79338 .48728 .81809 .48128 .8077 .46856 Metetra .563 .718 .945 r .8077 .46856 .81809 .48128 .84332 .47813 .83317 .46626 Metetra .469 .689 .963 r .83317 .46626 .84332 .47813 .86918 .47833 .85929 .46738 Metetra .327 .63 .961 r .85929 .46738 .86918 .47833 .89583 .48245 .88622 .47252 Metetra .13 .525 .916 r .88622 .47252 .89583 .48245 .92345 .49115 .91414 .48234 Metetra 0 .366 .805 r .91414 .48234 .92345 .49115 .95224 .50515 .94327 .49758 Metetra 0 .179 .639 r .94327 .49758 .95224 .50515 .98248 .52531 .97387 .51914 Metetra .662 .66 .838 r .37628 .65276 .38927 .67142 .41127 .66446 .39836 .64571 Metetra .675 .665 .833 r .39836 .64571 .41127 .66446 .43348 .65628 .42064 .63749 Metetra .686 .67 .829 r .42064 .63749 .43348 .65628 .45587 .64692 .44311 .62814 Metetra .696 .675 .825 r .44311 .62814 .45587 .64692 .47842 .63643 .46575 .61772 Metetra .706 .68 .822 r .46575 .61772 .47842 .63643 .50112 .62491 .48854 .60631 Metetra .714 .685 .82 r .48854 .60631 .50112 .62491 .52393 .61247 .51146 .59404 Metetra .72 .689 .82 r .51146 .59404 .52393 .61247 .54686 .59926 .5345 .58104 Metetra .726 .694 .82 r .5345 .58104 .54686 .59926 .56988 .58545 .55764 .56749 Metetra .73 .699 .821 r .55764 .56749 .56988 .58545 .593 .57122 .58088 .55357 Metetra .732 .704 .824 r .58088 .55357 .593 .57122 .6162 .55681 .60422 .53951 Metetra .733 .71 .829 r .60422 .53951 .6162 .55681 .6395 .54244 .62766 .52555 Metetra .731 .715 .835 r .62766 .52555 .6395 .54244 .66291 .52839 .65123 .51195 Metetra .727 .72 .844 r .65123 .51195 .66291 .52839 .68645 .51494 .67493 .499 Metetra .718 .725 .855 r .67493 .499 .68645 .51494 .71016 .5024 .69881 .48701 Metetra .705 .729 .869 r .69881 .48701 .71016 .5024 .73407 .49111 .72291 .47633 Metetra .685 .732 .886 r .72291 .47633 .73407 .49111 .75825 .48144 .74728 .46732 Metetra .654 .732 .907 r .74728 .46732 .75825 .48144 .78277 .47378 .77201 .46038 Metetra .609 .727 .93 r .77201 .46038 .78277 .47378 .8077 .46856 .79717 .45594 Metetra .539 .712 .952 r .79717 .45594 .8077 .46856 .83317 .46626 .82287 .45449 Metetra .435 .678 .966 r .82287 .45449 .83317 .46626 .85929 .46738 .84925 .45655 Metetra .282 .609 .955 r .84925 .45655 .85929 .46738 .88622 .47252 .87646 .46272 Metetra .074 .492 .896 r .87646 .46272 .88622 .47252 .91414 .48234 .90468 .47367 Metetra 0 .325 .771 r .90468 .47367 .91414 .48234 .94327 .49758 .93415 .49019 Metetra 0 .139 .598 r .93415 .49019 .94327 .49758 .97387 .51914 .96512 .51316 Metetra .662 .664 .841 r .36314 .63419 .37628 .65276 .39836 .64571 .38529 .62705 Metetra .674 .668 .836 r .38529 .62705 .39836 .64571 .42064 .63749 .40765 .6188 Metetra .685 .673 .832 r .40765 .6188 .42064 .63749 .44311 .62814 .4302 .60946 Metetra .696 .678 .828 r .4302 .60946 .44311 .62814 .46575 .61772 .45293 .5991 Metetra .704 .682 .826 r .45293 .5991 .46575 .61772 .48854 .60631 .47582 .5878 Metetra .712 .687 .824 r .47582 .5878 .48854 .60631 .51146 .59404 .49884 .57569 Metetra .719 .692 .824 r .49884 .57569 .51146 .59404 .5345 .58104 .52199 .5629 Metetra .724 .697 .824 r .52199 .5629 .5345 .58104 .55764 .56749 .54524 .54961 Metetra .727 .702 .826 r .54524 .54961 .55764 .56749 .58088 .55357 .56861 .536 Metetra .729 .707 .829 r .56861 .536 .58088 .55357 .60422 .53951 .59209 .52229 Metetra .729 .712 .834 r .59209 .52229 .60422 .53951 .62766 .52555 .61567 .50873 Metetra .727 .717 .841 r .61567 .50873 .62766 .52555 .65123 .51195 .63939 .49559 Metetra .721 .722 .85 r .63939 .49559 .65123 .51195 .67493 .499 .66326 .48314 Metetra .712 .727 .862 r .66326 .48314 .67493 .499 .69881 .48701 .68731 .47171 Metetra .697 .731 .876 r .68731 .47171 .69881 .48701 .72291 .47633 .71159 .46163 Metetra .674 .733 .894 r .71159 .46163 .72291 .47633 .74728 .46732 .73616 .45328 Metetra .64 .732 .915 r .73616 .45328 .74728 .46732 .77201 .46038 .7611 .44707 Metetra .59 .725 .937 r .7611 .44707 .77201 .46038 .79717 .45594 .78648 .44342 Metetra .513 .705 .958 r .78648 .44342 .79717 .45594 .82287 .45449 .81242 .44283 Metetra .399 .664 .967 r .81242 .44283 .82287 .45449 .84925 .45655 .83906 .44583 Metetra .234 .585 .946 r .83906 .44583 .84925 .45655 .87646 .46272 .86655 .45305 Metetra .017 .456 .872 r .86655 .45305 .87646 .46272 .90468 .47367 .89507 .46515 Metetra 0 .284 .734 r .89507 .46515 .90468 .47367 .93415 .49019 .92487 .48296 Metetra 0 .101 .558 r .92487 .48296 .93415 .49019 .96512 .51316 .95622 .50738 Metetra .662 .667 .844 r .34983 .61572 .36314 .63419 .38529 .62705 .37205 .60849 Metetra .674 .671 .839 r .37205 .60849 .38529 .62705 .40765 .6188 .39449 .60019 Metetra .685 .676 .835 r .39449 .60019 .40765 .6188 .4302 .60946 .41713 .59086 Metetra .695 .68 .832 r .41713 .59086 .4302 .60946 .45293 .5991 .43995 .58056 Metetra .703 .685 .829 r .43995 .58056 .45293 .5991 .47582 .5878 .46293 .56938 Metetra .711 .69 .828 r .46293 .56938 .47582 .5878 .49884 .57569 .48606 .55742 Metetra .717 .694 .828 r .48606 .55742 .49884 .57569 .52199 .5629 .50931 .54484 Metetra .721 .699 .828 r .50931 .54484 .52199 .5629 .54524 .54961 .53269 .5318 Metetra .725 .704 .83 r .53269 .5318 .54524 .54961 .56861 .536 .55619 .5185 Metetra .726 .709 .834 r .55619 .5185 .56861 .536 .59209 .52229 .57979 .50515 Metetra .725 .714 .839 r .57979 .50515 .59209 .52229 .61567 .50873 .60353 .49199 Metetra .722 .719 .847 r .60353 .49199 .61567 .50873 .63939 .49559 .62739 .4793 Metetra .716 .724 .856 r .62739 .4793 .63939 .49559 .66326 .48314 .65142 .46735 Metetra .705 .728 .869 r .65142 .46735 .66326 .48314 .68731 .47171 .67565 .45648 Metetra .688 .732 .884 r .67565 .45648 .68731 .47171 .71159 .46163 .70012 .44701 Metetra .663 .733 .902 r .70012 .44701 .71159 .46163 .73616 .45328 .72488 .43933 Metetra .625 .731 .923 r .72488 .43933 .73616 .45328 .7611 .44707 .75002 .43384 Metetra .569 .721 .945 r .75002 .43384 .7611 .44707 .78648 .44342 .77563 .43098 Metetra .485 .697 .962 r .77563 .43098 .78648 .44342 .81242 .44283 .80181 .43126 Metetra .36 .648 .965 r .80181 .43126 .81242 .44283 .83906 .44583 .8287 .43523 Metetra .183 .559 .933 r .8287 .43523 .83906 .44583 .86655 .45305 .85647 .4435 Metetra 0 .419 .844 r .85647 .4435 .86655 .45305 .89507 .46515 .8853 .45678 Metetra 0 .242 .695 r .8853 .45678 .89507 .46515 .92487 .48296 .91544 .4759 Metetra .474 0 0 r .91544 .4759 .92487 .48296 .95622 .50738 .94716 .50181 Metetra .662 .67 .847 r .33634 .59733 .34983 .61572 .37205 .60849 .35864 .59002 Metetra .674 .674 .842 r .35864 .59002 .37205 .60849 .39449 .60019 .38117 .58168 Metetra .684 .679 .839 r .38117 .58168 .39449 .60019 .41713 .59086 .40389 .57236 Metetra .694 .683 .835 r .40389 .57236 .41713 .59086 .43995 .58056 .4268 .56211 Metetra .702 .687 .833 r .4268 .56211 .43995 .58056 .46293 .56938 .44988 .55103 Metetra .709 .692 .832 r .44988 .55103 .46293 .56938 .48606 .55742 .47311 .53924 Metetra .715 .697 .832 r .47311 .53924 .48606 .55742 .50931 .54484 .49648 .52686 Metetra .719 .701 .833 r .49648 .52686 .50931 .54484 .53269 .5318 .51998 .51408 Metetra .722 .706 .835 r .51998 .51408 .53269 .5318 .55619 .5185 .5436 .50108 Metetra .723 .711 .839 r .5436 .50108 .55619 .5185 .57979 .50515 .56734 .48808 Metetra .721 .716 .845 r .56734 .48808 .57979 .50515 .60353 .49199 .59121 .47533 Metetra .717 .721 .852 r .59121 .47533 .60353 .49199 .62739 .4793 .61524 .46308 Metetra .71 .726 .863 r .61524 .46308 .62739 .4793 .65142 .46735 .63943 .45164 Metetra .697 .73 .875 r .63943 .45164 .65142 .46735 .67565 .45648 .66382 .44132 Metetra .679 .733 .891 r .66382 .44132 .67565 .45648 .70012 .44701 .68847 .43246 Metetra .651 .733 .91 r .68847 .43246 .70012 .44701 .72488 .43933 .71343 .42545 Metetra .609 .729 .931 r .71343 .42545 .72488 .43933 .75002 .43384 .73878 .42069 Metetra .547 .716 .951 r .73878 .42069 .75002 .43384 .77563 .43098 .76461 .41864 Metetra .454 .687 .966 r .76461 .41864 .77563 .43098 .80181 .43126 .79103 .4198 Metetra .318 .63 .962 r .79103 .4198 .80181 .43126 .8287 .43523 .81818 .42473 Metetra .13 .529 .917 r .81818 .42473 .8287 .43523 .85647 .4435 .84622 .43408 Metetra 0 .38 .813 r .84622 .43408 .85647 .4435 .8853 .45678 .87536 .44856 Metetra 0 .201 .656 r .87536 .44856 .8853 .45678 .91544 .4759 .90583 .46902 Metetra .51 0 0 r .90583 .46902 .91544 .4759 .94716 .50181 .93794 .49644 Metetra .663 .673 .85 r .32268 .57904 .33634 .59733 .35864 .59002 .34506 .57163 Metetra .674 .677 .846 r .34506 .57163 .35864 .59002 .38117 .58168 .36766 .56325 Metetra .684 .682 .842 r .36766 .56325 .38117 .58168 .40389 .57236 .39048 .55393 Metetra .693 .686 .839 r .39048 .55393 .40389 .57236 .4268 .56211 .41348 .54374 Metetra .701 .69 .837 r .41348 .54374 .4268 .56211 .44988 .55103 .43666 .53277 Metetra .707 .695 .836 r .43666 .53277 .44988 .55103 .47311 .53924 .45999 .52113 Metetra .713 .699 .836 r .45999 .52113 .47311 .53924 .49648 .52686 .48347 .50896 Metetra .716 .704 .837 r .48347 .50896 .49648 .52686 .51998 .51408 .50709 .49643 Metetra .719 .709 .84 r .50709 .49643 .51998 .51408 .5436 .50108 .53084 .48373 Metetra .719 .713 .844 r .53084 .48373 .5436 .50108 .56734 .48808 .55471 .47108 Metetra .717 .718 .85 r .55471 .47108 .56734 .48808 .59121 .47533 .57873 .45873 Metetra .712 .723 .858 r .57873 .45873 .59121 .47533 .61524 .46308 .60291 .44694 Metetra .703 .727 .869 r .60291 .44694 .61524 .46308 .63943 .45164 .62726 .436 Metetra .689 .731 .882 r .62726 .436 .63943 .45164 .66382 .44132 .65183 .42623 Metetra .668 .733 .899 r .65183 .42623 .66382 .44132 .68847 .43246 .67666 .41799 Metetra .637 .733 .917 r .67666 .41799 .68847 .43246 .71343 .42545 .70181 .41165 Metetra .591 .727 .938 r .70181 .41165 .71343 .42545 .73878 .42069 .72736 .40762 Metetra .522 .71 .957 r .72736 .40762 .73878 .42069 .76461 .41864 .75341 .40638 Metetra .42 .676 .968 r .75341 .40638 .76461 .41864 .79103 .4198 .78007 .40844 Metetra .273 .609 .955 r .78007 .40844 .79103 .4198 .81818 .42473 .80747 .41435 Metetra .076 .497 .897 r .80747 .41435 .81818 .42473 .84622 .43408 .83579 .42479 Metetra 0 .34 .78 r .83579 .42479 .84622 .43408 .87536 .44856 .86524 .44049 Metetra 0 .162 .616 r .86524 .44049 .87536 .44856 .90583 .46902 .89605 .46232 Metetra .543 .003 0 r .89605 .46232 .90583 .46902 .93794 .49644 .92853 .4913 Metetra .663 .677 .853 r .30883 .56083 .32268 .57904 .34506 .57163 .33129 .55332 Metetra .673 .681 .849 r .33129 .55332 .34506 .57163 .36766 .56325 .35398 .54489 Metetra .683 .685 .845 r .35398 .54489 .36766 .56325 .39048 .55393 .37688 .53558 Metetra .692 .689 .842 r .37688 .53558 .39048 .55393 .41348 .54374 .39998 .52545 Metetra .699 .693 .841 r .39998 .52545 .41348 .54374 .43666 .53277 .42326 .51458 Metetra .705 .697 .84 r .42326 .51458 .43666 .53277 .45999 .52113 .4467 .50309 Metetra .71 .702 .84 r .4467 .50309 .45999 .52113 .48347 .50896 .47029 .49112 Metetra .714 .706 .842 r .47029 .49112 .48347 .50896 .50709 .49643 .49402 .47884 Metetra .715 .711 .845 r .49402 .47884 .50709 .49643 .53084 .48373 .5179 .46645 Metetra .715 .716 .849 r .5179 .46645 .53084 .48373 .55471 .47108 .54191 .45415 Metetra .712 .72 .856 r .54191 .45415 .55471 .47108 .57873 .45873 .56607 .4422 Metetra .706 .725 .865 r .56607 .4422 .57873 .45873 .60291 .44694 .5904 .43086 Metetra .696 .729 .876 r .5904 .43086 .60291 .44694 .62726 .436 .61491 .42042 Metetra .681 .732 .889 r .61491 .42042 .62726 .436 .65183 .42623 .63965 .41121 Metetra .657 .734 .906 r .63965 .41121 .65183 .42623 .67666 .41799 .66466 .40358 Metetra .623 .732 .925 r .66466 .40358 .67666 .41799 .70181 .41165 .69001 .39792 Metetra .571 .724 .945 r .69001 .39792 .70181 .41165 .72736 .40762 .71576 .39464 Metetra .495 .703 .962 r .71576 .39464 .72736 .40762 .75341 .40638 .74203 .39422 Metetra .384 .662 .968 r .74203 .39422 .75341 .40638 .78007 .40844 .76892 .39717 Metetra .226 .586 .946 r .76892 .39717 .78007 .40844 .80747 .41435 .79658 .40409 Metetra .021 .463 .874 r .79658 .40409 .80747 .41435 .83579 .42479 .82518 .41563 Metetra 0 .3 .744 r .82518 .41563 .83579 .42479 .86524 .44049 .85493 .43257 Metetra 0 .124 .577 r .85493 .43257 .86524 .44049 .89605 .46232 .88608 .4558 Metetra .573 .033 0 r .88608 .4558 .89605 .46232 .92853 .4913 .91894 .48637 Metetra .663 .68 .856 r .29478 .5427 .30883 .56083 .33129 .55332 .31733 .53509 Metetra .673 .684 .852 r .31733 .53509 .33129 .55332 .35398 .54489 .3401 .52662 Metetra .682 .688 .849 r .3401 .52662 .35398 .54489 .37688 .53558 .3631 .51731 Metetra .69 .692 .846 r .3631 .51731 .37688 .53558 .39998 .52545 .38629 .50723 Metetra .697 .696 .844 r .38629 .50723 .39998 .52545 .42326 .51458 .40967 .49646 Metetra .703 .7 .844 r .40967 .49646 .42326 .51458 .4467 .50309 .43321 .48512 Metetra .708 .704 .844 r .43321 .48512 .4467 .50309 .47029 .49112 .45692 .47335 Metetra .711 .709 .846 r .45692 .47335 .47029 .49112 .49402 .47884 .48077 .46132 Metetra .712 .713 .85 r .48077 .46132 .49402 .47884 .5179 .46645 .50477 .44923 Metetra .711 .718 .855 r .50477 .44923 .5179 .46645 .54191 .45415 .52892 .43728 Metetra .707 .723 .862 r .52892 .43728 .54191 .45415 .56607 .4422 .55323 .42573 Metetra .7 .727 .871 r .55323 .42573 .56607 .4422 .5904 .43086 .5777 .41484 Metetra .689 .731 .882 r .5777 .41484 .5904 .43086 .61491 .42042 .60237 .40491 Metetra .671 .733 .897 r .60237 .40491 .61491 .42042 .63965 .41121 .62728 .39626 Metetra .645 .734 .914 r .62728 .39626 .63965 .41121 .66466 .40358 .65247 .38925 Metetra .607 .731 .933 r .65247 .38925 .66466 .40358 .69001 .39792 .67801 .38426 Metetra .55 .719 .952 r .67801 .38426 .69001 .39792 .71576 .39464 .70397 .38174 Metetra .467 .695 .966 r .70397 .38174 .71576 .39464 .74203 .39422 .73045 .38214 Metetra .345 .646 .966 r .73045 .38214 .74203 .39422 .76892 .39717 .75758 .386 Metetra .177 .56 .933 r .75758 .386 .76892 .39717 .79658 .40409 .78549 .39393 Metetra 0 .427 .847 r .78549 .39393 .79658 .40409 .82518 .41563 .81437 .4066 Metetra 0 .259 .707 r .81437 .4066 .82518 .41563 .85493 .43257 .84442 .42481 Metetra .454 0 0 r .84442 .42481 .85493 .43257 .88608 .4558 .87591 .44947 Metetra .6 .062 0 r .87591 .44947 .88608 .4558 .91894 .48637 .90916 .48168 Metetra .663 .684 .859 r .28053 .52465 .29478 .5427 .31733 .53509 .30316 .51694 Metetra .673 .687 .855 r .30316 .51694 .31733 .53509 .3401 .52662 .32603 .50842 Metetra .681 .691 .852 r .32603 .50842 .3401 .52662 .3631 .51731 .34911 .49911 Metetra .689 .694 .85 r .34911 .49911 .3631 .51731 .38629 .50723 .3724 .48908 Metetra .696 .698 .848 r .3724 .48908 .38629 .50723 .40967 .49646 .39588 .47841 Metetra .701 .703 .848 r .39588 .47841 .40967 .49646 .43321 .48512 .41954 .46722 Metetra .705 .707 .849 r .41954 .46722 .43321 .48512 .45692 .47335 .44336 .45565 Metetra .708 .711 .851 r .44336 .45565 .45692 .47335 .48077 .46132 .46733 .44387 Metetra .708 .716 .855 r .46733 .44387 .48077 .46132 .50477 .44923 .49146 .43207 Metetra .707 .72 .86 r .49146 .43207 .50477 .44923 .52892 .43728 .51574 .42047 Metetra .702 .725 .868 r .51574 .42047 .52892 .43728 .55323 .42573 .54018 .40932 Metetra .694 .729 .877 r .54018 .40932 .55323 .42573 .5777 .41484 .56481 .39888 Metetra .681 .732 .889 r .56481 .39888 .5777 .41484 .60237 .40491 .58964 .38945 Metetra .661 .734 .904 r .58964 .38945 .60237 .40491 .62728 .39626 .61472 .38137 Metetra .632 .734 .921 r .61472 .38137 .62728 .39626 .65247 .38925 .64009 .37498 Metetra .59 .728 .94 r .64009 .37498 .65247 .38925 .67801 .38426 .66581 .37068 Metetra .527 .714 .958 r .66581 .37068 .67801 .38426 .70397 .38174 .69198 .36891 Metetra .435 .684 .969 r .69198 .36891 .70397 .38174 .73045 .38214 .71868 .37015 Metetra .304 .627 .962 r .71868 .37015 .73045 .38214 .75758 .386 .74603 .37494 Metetra .125 .531 .917 r .74603 .37494 .75758 .386 .78549 .39393 .7742 .38389 Metetra 0 .39 .818 r .7742 .38389 .78549 .39393 .81437 .4066 .80335 .39771 Metetra 0 .22 .668 r .80335 .39771 .81437 .4066 .84442 .42481 .8337 .41721 Metetra .49 0 0 r .8337 .41721 .84442 .42481 .87591 .44947 .86553 .44334 Metetra .624 .088 0 r .86553 .44334 .87591 .44947 .90916 .48168 .89916 .47722 Metetra .663 .687 .862 r .26608 .50667 .28053 .52465 .30316 .51694 .28879 .49886 Metetra .672 .69 .859 r .28879 .49886 .30316 .51694 .32603 .50842 .31175 .49029 Metetra .681 .694 .856 r .31175 .49029 .32603 .50842 .34911 .49911 .33493 .48098 Metetra .688 .697 .854 r .33493 .48098 .34911 .49911 .3724 .48908 .35832 .47099 Metetra .694 .701 .852 r .35832 .47099 .3724 .48908 .39588 .47841 .3819 .46042 Metetra .699 .705 .852 r .3819 .46042 .39588 .47841 .41954 .46722 .40566 .44938 Metetra .703 .709 .853 r .40566 .44938 .41954 .46722 .44336 .45565 .42959 .438 Metetra .705 .714 .856 r .42959 .438 .44336 .45565 .46733 .44387 .45369 .42647 Metetra .704 .718 .86 r .45369 .42647 .46733 .44387 .49146 .43207 .47794 .41497 Metetra .702 .723 .866 r .47794 .41497 .49146 .43207 .51574 .42047 .50236 .40372 Metetra .696 .727 .874 r .50236 .40372 .51574 .42047 .54018 .40932 .52694 .39296 Metetra .687 .731 .884 r .52694 .39296 .54018 .40932 .56481 .39888 .55172 .38298 Metetra .672 .734 .896 r .55172 .38298 .56481 .39888 .58964 .38945 .57671 .37406 Metetra .65 .735 .911 r .57671 .37406 .58964 .38945 .61472 .38137 .60195 .36653 Metetra .618 .733 .928 r .60195 .36653 .61472 .38137 .64009 .37498 .6275 .36077 Metetra .571 .726 .947 r .6275 .36077 .64009 .37498 .66581 .37068 .65341 .35716 Metetra .502 .708 .963 r .65341 .35716 .66581 .37068 .69198 .36891 .67977 .35616 Metetra .402 .672 .97 r .67977 .35616 .69198 .36891 .71868 .37015 .70669 .35824 Metetra .26 .607 .954 r .70669 .35824 .71868 .37015 .74603 .37494 .73428 .36397 Metetra .073 .5 .897 r .73428 .36397 .74603 .37494 .7742 .38389 .76269 .37397 Metetra 0 .351 .785 r .76269 .37397 .7742 .38389 .80335 .39771 .79211 .38896 Metetra 0 .181 .63 r .79211 .38896 .80335 .39771 .8337 .41721 .82277 .40977 Metetra .524 0 0 r .82277 .40977 .8337 .41721 .86553 .44334 .85494 .4374 Metetra .647 .113 0 r .85494 .4374 .86553 .44334 .89916 .47722 .88895 .47301 Metetra .663 .691 .865 r .2514 .48876 .26608 .50667 .28879 .49886 .27421 .48085 Metetra .672 .694 .862 r .27421 .48085 .28879 .49886 .31175 .49029 .29726 .47222 Metetra .68 .697 .859 r .29726 .47222 .31175 .49029 .33493 .48098 .32053 .46291 Metetra .687 .7 .857 r .32053 .46291 .33493 .48098 .35832 .47099 .34402 .45297 Metetra .692 .704 .856 r .34402 .45297 .35832 .47099 .3819 .46042 .3677 .44249 Metetra .697 .708 .857 r .3677 .44249 .3819 .46042 .40566 .44938 .39157 .43159 Metetra .7 .712 .858 r .39157 .43159 .40566 .44938 .42959 .438 .41562 .42042 Metetra .701 .716 .861 r .41562 .42042 .42959 .438 .45369 .42647 .43983 .40913 Metetra .7 .721 .865 r .43983 .40913 .45369 .42647 .47794 .41497 .46421 .39792 Metetra .697 .725 .871 r .46421 .39792 .47794 .41497 .50236 .40372 .48876 .38702 Metetra .69 .729 .88 r .48876 .38702 .50236 .40372 .52694 .39296 .51349 .37666 Metetra .68 .732 .89 r .51349 .37666 .52694 .39296 .55172 .38298 .53841 .36713 Metetra .663 .735 .903 r .53841 .36713 .55172 .38298 .57671 .37406 .56356 .35872 Metetra .638 .735 .918 r .56356 .35872 .57671 .37406 .60195 .36653 .58897 .35176 Metetra .603 .732 .936 r .58897 .35176 .60195 .36653 .6275 .36077 .61469 .34662 Metetra .551 .722 .953 r .61469 .34662 .6275 .36077 .65341 .35716 .64079 .34371 Metetra .475 .7 .967 r .64079 .34371 .65341 .35716 .67977 .35616 .66735 .34348 Metetra .365 .658 .969 r .66735 .34348 .67977 .35616 .70669 .35824 .69448 .34642 Metetra .214 .584 .944 r .69448 .34642 .70669 .35824 .73428 .36397 .72229 .3531 Metetra .019 .467 .874 r .72229 .3531 .73428 .36397 .76269 .37397 .75095 .36416 Metetra 0 .312 .75 r .75095 .36416 .76269 .37397 .79211 .38896 .78065 .38034 Metetra 0 .143 .591 r .78065 .38034 .79211 .38896 .82277 .40977 .81161 .40251 Metetra .555 .011 0 r .81161 .40251 .82277 .40977 .85494 .4374 .84411 .43167 Metetra .667 .136 0 r .84411 .43167 .85494 .4374 .88895 .47301 .87851 .46905 Metetra .663 .694 .869 r .2365 .47091 .2514 .48876 .27421 .48085 .2594 .4629 Metetra .671 .697 .865 r .2594 .4629 .27421 .48085 .29726 .47222 .28254 .45422 Metetra .679 .7 .863 r .28254 .45422 .29726 .47222 .32053 .46291 .30591 .4449 Metetra .685 .703 .861 r .30591 .4449 .32053 .46291 .34402 .45297 .3295 .435 Metetra .69 .707 .86 r .3295 .435 .34402 .45297 .3677 .44249 .35329 .42462 Metetra .694 .711 .861 r .35329 .42462 .3677 .44249 .39157 .43159 .37727 .41386 Metetra .697 .715 .863 r .37727 .41386 .39157 .43159 .41562 .42042 .40143 .40288 Metetra .697 .719 .866 r .40143 .40288 .41562 .42042 .43983 .40913 .42576 .39184 Metetra .696 .723 .871 r .42576 .39184 .43983 .40913 .46421 .39792 .45027 .38093 Metetra .692 .727 .877 r .45027 .38093 .46421 .39792 .48876 .38702 .47495 .37037 Metetra .684 .731 .886 r .47495 .37037 .48876 .38702 .51349 .37666 .49982 .36041 Metetra .672 .734 .897 r .49982 .36041 .51349 .37666 .53841 .36713 .52489 .35133 Metetra .653 .736 .91 r .52489 .35133 .53841 .36713 .56356 .35872 .55019 .34343 Metetra .626 .735 .926 r .55019 .34343 .56356 .35872 .58897 .35176 .57576 .33704 Metetra .586 .73 .943 r .57576 .33704 .58897 .35176 .61469 .34662 .60166 .33254 Metetra .529 .718 .959 r .60166 .33254 .61469 .34662 .64079 .34371 .62794 .33033 Metetra .445 .691 .97 r .62794 .33033 .64079 .34371 .66735 .34348 .6547 .33087 Metetra .327 .642 .966 r .6547 .33087 .66735 .34348 .69448 .34642 .68203 .33468 Metetra .165 .558 .931 r .68203 .33468 .69448 .34642 .72229 .3531 .71007 .34232 Metetra 0 .432 .848 r .71007 .34232 .72229 .3531 .75095 .36416 .73898 .35446 Metetra 0 .272 .714 r .73898 .35446 .75095 .36416 .78065 .38034 .76895 .37186 Metetra .437 0 0 r .76895 .37186 .78065 .38034 .81161 .40251 .80021 .39541 Metetra .583 .04 0 r .80021 .39541 .81161 .40251 .84411 .43167 .83305 .42615 Metetra .685 .158 0 r .83305 .42615 .84411 .43167 .87851 .46905 .86783 .46535 Metetra .664 .698 .872 r .22136 .45313 .2365 .47091 .2594 .4629 .24435 .44502 Metetra .671 .7 .869 r .24435 .44502 .2594 .4629 .28254 .45422 .26759 .43627 Metetra .678 .703 .866 r .26759 .43627 .28254 .45422 .30591 .4449 .29106 .42694 Metetra .684 .706 .865 r .29106 .42694 .30591 .4449 .3295 .435 .31475 .41709 Metetra .688 .71 .865 r .31475 .41709 .3295 .435 .35329 .42462 .33864 .4068 Metetra .692 .714 .865 r .33864 .4068 .35329 .42462 .37727 .41386 .36273 .39618 Metetra .694 .717 .867 r .36273 .39618 .37727 .41386 .40143 .40288 .38701 .38539 Metetra .694 .721 .871 r .38701 .38539 .40143 .40288 .42576 .39184 .41146 .37459 Metetra .691 .725 .876 r .41146 .37459 .42576 .39184 .45027 .38093 .4361 .36397 Metetra .686 .729 .883 r .4361 .36397 .45027 .38093 .47495 .37037 .46091 .35376 Metetra .677 .733 .892 r .46091 .35376 .47495 .37037 .49982 .36041 .48591 .3442 Metetra .663 .735 .903 r .48591 .3442 .49982 .36041 .52489 .35133 .51113 .33558 Metetra .642 .736 .917 r .51113 .33558 .52489 .35133 .55019 .34343 .53659 .32819 Metetra .612 .734 .933 r .53659 .32819 .55019 .34343 .57576 .33704 .56232 .32237 Metetra .568 .728 .949 r .56232 .32237 .57576 .33704 .60166 .33254 .58839 .3185 Metetra .505 .712 .964 r .58839 .3185 .60166 .33254 .62794 .33033 .61485 .31701 Metetra .414 .68 .972 r .61485 .31701 .62794 .33033 .6547 .33087 .6418 .31834 Metetra .286 .624 .96 r .6418 .31834 .6547 .33087 .68203 .33468 .66935 .32302 Metetra .115 .53 .914 r .66935 .32302 .68203 .33468 .71007 .34232 .69761 .33164 Metetra 0 .395 .819 r .69761 .33164 .71007 .34232 .73898 .35446 .72676 .34489 Metetra 0 .234 .677 r .72676 .34489 .73898 .35446 .76895 .37186 .75699 .36353 Metetra .474 0 0 r .75699 .36353 .76895 .37186 .80021 .39541 .78855 .38848 Metetra .608 .067 0 r .78855 .38848 .80021 .39541 .83305 .42615 .82172 .42084 Metetra .649 .109 0 r .82172 .42084 .83305 .42615 .86783 .46535 .8563 .45607 Metetra .664 .701 .875 r .20598 .43541 .22136 .45313 .24435 .44502 .22907 .42719 Metetra .671 .704 .872 r .22907 .42719 .24435 .44502 .26759 .43627 .2524 .41838 Metetra .677 .707 .87 r .2524 .41838 .26759 .43627 .29106 .42694 .27597 .40904 Metetra .682 .71 .869 r .27597 .40904 .29106 .42694 .31475 .41709 .29976 .39923 Metetra .686 .713 .869 r .29976 .39923 .31475 .41709 .33864 .4068 .32376 .38902 Metetra .689 .716 .87 r .32376 .38902 .33864 .4068 .36273 .39618 .34796 .37855 Metetra .69 .72 .872 r .34796 .37855 .36273 .39618 .38701 .38539 .37235 .36795 Metetra .69 .724 .876 r .37235 .36795 .38701 .38539 .41146 .37459 .39693 .35739 Metetra .686 .728 .882 r .39693 .35739 .41146 .37459 .4361 .36397 .42169 .34706 Metetra .68 .731 .889 r .42169 .34706 .4361 .36397 .46091 .35376 .44663 .3372 Metetra .67 .734 .898 r .44663 .3372 .46091 .35376 .48591 .3442 .47177 .32804 Metetra .654 .736 .91 r .47177 .32804 .48591 .3442 .51113 .33558 .49713 .31987 Metetra .631 .737 .924 r .49713 .31987 .51113 .33558 .53659 .32819 .52274 .31299 Metetra .597 .733 .94 r .52274 .31299 .53659 .32819 .56232 .32237 .54863 .30775 Metetra .549 .724 .956 r .54863 .30775 .56232 .32237 .58839 .3185 .57487 .30453 Metetra .479 .705 .968 r .57487 .30453 .58839 .3185 .61485 .31701 .60151 .30374 Metetra .38 .668 .971 r .60151 .30374 .61485 .31701 .6418 .31834 .62866 .30587 Metetra .243 .603 .952 r .62866 .30587 .6418 .31834 .66935 .32302 .6564 .31144 Metetra .064 .5 .894 r .6564 .31144 .66935 .32302 .69761 .33164 .68489 .32106 Metetra 0 .358 .787 r .68489 .32106 .69761 .33164 .72676 .34489 .71428 .33543 Metetra 0 .196 .639 r .71428 .33543 .72676 .34489 .75699 .36353 .74478 .35533 Metetra .508 0 0 r .74478 .35533 .75699 .36353 .78855 .38848 .77662 .38174 Metetra .631 .093 0 r .77662 .38174 .78855 .38848 .82172 .42084 .81013 .41576 Metetra .482 0 0 r .81013 .41576 .82172 .42084 .8563 .45607 .84373 .4388 Metetra .664 .705 .878 r .19034 .41775 .20598 .43541 .22907 .42719 .21353 .40941 Metetra .67 .707 .876 r .21353 .40941 .22907 .42719 .2524 .41838 .23697 .40054 Metetra .676 .71 .874 r .23697 .40054 .2524 .41838 .27597 .40904 .26064 .39119 Metetra .68 .713 .873 r .26064 .39119 .27597 .40904 .29976 .39923 .28453 .38141 Metetra .684 .716 .873 r .28453 .38141 .29976 .39923 .32376 .38902 .30864 .37129 Metetra .686 .719 .874 r .30864 .37129 .32376 .38902 .34796 .37855 .33295 .36096 Metetra .687 .723 .877 r .33295 .36096 .34796 .37855 .37235 .36795 .35745 .35055 Metetra .685 .726 .881 r .35745 .35055 .37235 .36795 .39693 .35739 .38215 .34023 Metetra .681 .73 .887 r .38215 .34023 .39693 .35739 .42169 .34706 .40703 .33019 Metetra .674 .733 .895 r .40703 .33019 .42169 .34706 .44663 .3372 .4321 .32067 Metetra .662 .736 .905 r .4321 .32067 .44663 .3372 .47177 .32804 .45738 .31191 Metetra .644 .737 .917 r .45738 .31191 .47177 .32804 .49713 .31987 .48288 .30419 Metetra .618 .737 .931 r .48288 .30419 .49713 .31987 .52274 .31299 .50864 .29783 Metetra .581 .732 .946 r .50864 .29783 .52274 .31299 .54863 .30775 .53469 .29317 Metetra .528 .72 .961 r .53469 .29317 .54863 .30775 .57487 .30453 .5611 .2906 Metetra .452 .697 .972 r .5611 .2906 .57487 .30453 .60151 .30374 .58792 .29054 Metetra .344 .653 .969 r .58792 .29054 .60151 .30374 .62866 .30587 .61525 .29347 Metetra .197 .58 .941 r .61525 .29347 .62866 .30587 .6564 .31144 .64319 .29995 Metetra .013 .467 .872 r .64319 .29995 .6564 .31144 .68489 .32106 .6719 .31058 Metetra 0 .32 .753 r .6719 .31058 .68489 .32106 .71428 .33543 .70152 .32608 Metetra 0 .159 .601 r .70152 .32608 .71428 .33543 .74478 .35533 .73228 .34729 Metetra .539 0 0 r .73228 .34729 .74478 .35533 .77662 .38174 .76442 .37517 Metetra .652 .116 0 r .76442 .37517 .77662 .38174 .81013 .41576 .79826 .41091 Metetra 0 .405 .721 r .79826 .41091 .81013 .41576 .84373 .4388 .83091 .42119 Metetra .664 .709 .881 r .17444 .40013 .19034 .41775 .21353 .40941 .19773 .39168 Metetra .669 .711 .879 r .19773 .39168 .21353 .40941 .23697 .40054 .22127 .38275 Metetra .674 .713 .877 r .22127 .38275 .23697 .40054 .26064 .39119 .24504 .37338 Metetra .679 .716 .877 r .24504 .37338 .26064 .39119 .28453 .38141 .26904 .36363 Metetra .682 .719 .877 r .26904 .36363 .28453 .38141 .30864 .37129 .29325 .35361 Metetra .683 .722 .879 r .29325 .35361 .30864 .37129 .33295 .36096 .31767 .34341 Metetra .683 .725 .882 r .31767 .34341 .33295 .36096 .35745 .35055 .34229 .33318 Metetra .681 .729 .887 r .34229 .33318 .35745 .35055 .38215 .34023 .36711 .3231 Metetra .675 .732 .893 r .36711 .3231 .38215 .34023 .40703 .33019 .39211 .31336 Metetra .667 .735 .901 r .39211 .31336 .40703 .33019 .4321 .32067 .41732 .30418 Metetra .653 .737 .911 r .41732 .30418 .4321 .32067 .45738 .31191 .44273 .29582 Metetra .633 .738 .924 r .44273 .29582 .45738 .31191 .48288 .30419 .46837 .28856 Metetra .605 .736 .938 r .46837 .28856 .48288 .30419 .50864 .29783 .49428 .28271 Metetra .564 .73 .953 r .49428 .28271 .50864 .29783 .53469 .29317 .52049 .27864 Metetra .505 .715 .966 r .52049 .27864 .53469 .29317 .5611 .2906 .54705 .27671 Metetra .422 .687 .973 r .54705 .27671 .5611 .2906 .58792 .29054 .57404 .27739 Metetra .306 .637 .965 r .57404 .27739 .58792 .29054 .61525 .29347 .60156 .28114 Metetra .15 .554 .927 r .60156 .28114 .61525 .29347 .64319 .29995 .6297 .28853 Metetra 0 .434 .846 r .6297 .28853 .64319 .29995 .6719 .31058 .65862 .30019 Metetra 0 .282 .718 r .65862 .30019 .6719 .31058 .70152 .32608 .68848 .31686 Metetra .423 0 0 r .68848 .31686 .70152 .32608 .73228 .34729 .71949 .33939 Metetra .567 .021 0 r .71949 .33939 .73228 .34729 .76442 .37517 .75192 .3688 Metetra .671 .138 0 r .75192 .3688 .76442 .37517 .79826 .41091 .78608 .4063 Metetra .288 .766 .929 r .78608 .4063 .79826 .41091 .83091 .42119 .81783 .40322 Metetra .664 .713 .884 r .15826 .38257 .17444 .40013 .19773 .39168 .18166 .37399 Metetra .669 .714 .882 r .18166 .37399 .19773 .39168 .22127 .38275 .20529 .365 Metetra .673 .716 .881 r .20529 .365 .22127 .38275 .24504 .37338 .22917 .35561 Metetra .677 .719 .881 r .22917 .35561 .24504 .37338 .26904 .36363 .25328 .3459 Metetra .679 .722 .882 r .25328 .3459 .26904 .36363 .29325 .35361 .2776 .33595 Metetra .68 .725 .884 r .2776 .33595 .29325 .35361 .31767 .34341 .30213 .32589 Metetra .679 .728 .887 r .30213 .32589 .31767 .34341 .34229 .33318 .32687 .31584 Metetra .676 .731 .892 r .32687 .31584 .34229 .33318 .36711 .3231 .3518 .306 Metetra .669 .734 .899 r .3518 .306 .36711 .3231 .39211 .31336 .37693 .29655 Metetra .659 .737 .907 r .37693 .29655 .39211 .31336 .41732 .30418 .40226 .28771 Metetra .644 .739 .918 r .40226 .28771 .41732 .30418 .44273 .29582 .42781 .27976 Metetra .622 .738 .93 r .42781 .27976 .44273 .29582 .46837 .28856 .45359 .27295 Metetra .59 .735 .944 r .45359 .27295 .46837 .28856 .49428 .28271 .47964 .26763 Metetra .545 .727 .958 r .47964 .26763 .49428 .28271 .52049 .27864 .506 .26414 Metetra .481 .709 .97 r .506 .26414 .52049 .27864 .54705 .27671 .53272 .26288 Metetra .39 .676 .974 r .53272 .26288 .54705 .27671 .57404 .27739 .55989 .26429 Metetra .265 .618 .958 r .55989 .26429 .57404 .27739 .60156 .28114 .58758 .26887 Metetra .102 .527 .91 r .58758 .26887 .60156 .28114 .6297 .28853 .61592 .27719 Metetra 0 .398 .817 r .61592 .27719 .6297 .28853 .65862 .30019 .64504 .2899 Metetra 0 .244 .682 r .64504 .2899 .65862 .30019 .68848 .31686 .67513 .30776 Metetra .46 0 0 r .67513 .30776 .68848 .31686 .71949 .33939 .70639 .33165 Metetra .593 .048 0 r .70639 .33165 .71949 .33939 .75192 .3688 .7391 .36262 Metetra .616 .067 0 r .7391 .36262 .75192 .3688 .78608 .4063 .77304 .39487 Metetra .618 .85 .987 r .77304 .39487 .78608 .4063 .81783 .40322 .80449 .3849 Metetra .664 .716 .887 r .1418 .36504 .15826 .38257 .18166 .37399 .1653 .35635 Metetra .668 .718 .886 r .1653 .35635 .18166 .37399 .20529 .365 .18904 .34728 Metetra .672 .72 .885 r .18904 .34728 .20529 .365 .22917 .35561 .21302 .33787 Metetra .675 .722 .885 r .21302 .33787 .22917 .35561 .25328 .3459 .23724 .32819 Metetra .677 .725 .886 r .23724 .32819 .25328 .3459 .2776 .33595 .26167 .31833 Metetra .677 .728 .888 r .26167 .31833 .2776 .33595 .30213 .32589 .28631 .30839 Metetra .675 .731 .892 r .28631 .30839 .30213 .32589 .32687 .31584 .31116 .29854 Metetra .671 .734 .897 r .31116 .29854 .32687 .31584 .3518 .306 .33621 .28893 Metetra .663 .736 .904 r .33621 .28893 .3518 .306 .37693 .29655 .36146 .27976 Metetra .652 .739 .913 r .36146 .27976 .37693 .29655 .40226 .28771 .38692 .27128 Metetra .634 .74 .924 r .38692 .27128 .40226 .28771 .42781 .27976 .4126 .26372 Metetra .61 .739 .937 r .4126 .26372 .42781 .27976 .45359 .27295 .43852 .25738 Metetra .575 .734 .95 r .43852 .25738 .45359 .27295 .47964 .26763 .46471 .25258 Metetra .525 .723 .964 r .46471 .25258 .47964 .26763 .506 .26414 .49122 .24968 Metetra .455 .702 .973 r .49122 .24968 .506 .26414 .53272 .26288 .5181 .24908 Metetra .356 .663 .972 r .5181 .24908 .53272 .26288 .55989 .26429 .54543 .25124 Metetra .223 .598 .949 r .54543 .25124 .55989 .26429 .58758 .26887 .5733 .25666 Metetra .052 .497 .89 r .5733 .25666 .58758 .26887 .61592 .27719 .60182 .26593 Metetra 0 .362 .786 r .60182 .26593 .61592 .27719 .64504 .2899 .63115 .27971 Metetra 0 .207 .645 r .63115 .27971 .64504 .2899 .67513 .30776 .66146 .29879 Metetra .494 0 0 r .66146 .29879 .67513 .30776 .70639 .33165 .69297 .32407 Metetra .616 .074 0 r .69297 .32407 .70639 .33165 .7391 .36262 .72595 .35664 Metetra .41 0 0 r .72595 .35664 .7391 .36262 .77304 .39487 .75918 .37637 Metetra .645 .763 .934 r .75918 .37637 .77304 .39487 .80449 .3849 .79088 .36619 Metetra .664 .72 .891 r .12503 .34756 .1418 .36504 .1653 .35635 .14864 .33874 Metetra .668 .721 .889 r .14864 .33874 .1653 .35635 .18904 .34728 .17249 .3296 Metetra .671 .723 .889 r .17249 .3296 .18904 .34728 .21302 .33787 .19658 .32017 Metetra .673 .725 .889 r .19658 .32017 .21302 .33787 .23724 .32819 .2209 .31052 Metetra .674 .728 .89 r .2209 .31052 .23724 .32819 .26167 .31833 .24545 .30073 Metetra .673 .731 .893 r .24545 .30073 .26167 .31833 .28631 .30839 .2702 .29093 Metetra .67 .733 .897 r .2702 .29093 .28631 .30839 .31116 .29854 .29516 .28125 Metetra .665 .736 .903 r .29516 .28125 .31116 .29854 .33621 .28893 .32033 .27188 Metetra .656 .738 .91 r .32033 .27188 .33621 .28893 .36146 .27976 .3457 .263 Metetra .643 .74 .919 r .3457 .263 .36146 .27976 .38692 .27128 .37128 .25486 Metetra .624 .74 .93 r .37128 .25486 .38692 .27128 .4126 .26372 .39709 .2477 Metetra .597 .738 .943 r .39709 .2477 .4126 .26372 .43852 .25738 .42315 .24182 Metetra .558 .732 .956 r .42315 .24182 .43852 .25738 .46471 .25258 .44948 .23755 Metetra .503 .718 .968 r .44948 .23755 .46471 .25258 .49122 .24968 .47613 .23525 Metetra .427 .693 .975 r .47613 .23525 .49122 .24968 .5181 .24908 .50317 .23532 Metetra .32 .648 .969 r .50317 .23532 .5181 .24908 .54543 .25124 .53066 .23824 Metetra .178 .575 .937 r .53066 .23824 .54543 .25124 .5733 .25666 .55869 .24451 Metetra .003 .466 .867 r .55869 .24451 .5733 .25666 .60182 .26593 .5874 .25474 Metetra 0 .326 .753 r .5874 .25474 .60182 .26593 .63115 .27971 .61693 .26962 Metetra 0 .171 .608 r .61693 .26962 .63115 .27971 .66146 .29879 .64745 .28993 Metetra .525 0 0 r .64745 .28993 .66146 .29879 .69297 .32407 .6792 .31664 Metetra .638 .098 0 r .6792 .31664 .69297 .32407 .72595 .35664 .71245 .35087 Metetra 0 .516 .805 r .71245 .35087 .72595 .35664 .75918 .37637 .74504 .35749 Metetra .645 .763 .934 r .74504 .35749 .75918 .37637 .79088 .36619 .77698 .3471 Metetra .664 .724 .894 r .10796 .33011 .12503 .34756 .14864 .33874 .13168 .32117 Metetra .667 .725 .893 r .13168 .32117 .14864 .33874 .17249 .3296 .15564 .31195 Metetra .669 .727 .893 r .15564 .31195 .17249 .3296 .19658 .32017 .17984 .30249 Metetra .671 .729 .893 r .17984 .30249 .19658 .32017 .2209 .31052 .20427 .29286 Metetra .671 .731 .895 r .20427 .29286 .2209 .31052 .24545 .30073 .22892 .28315 Metetra .669 .733 .898 r .22892 .28315 .24545 .30073 .2702 .29093 .25379 .27348 Metetra .666 .736 .902 r .25379 .27348 .2702 .29093 .29516 .28125 .27886 .26398 Metetra .659 .738 .908 r .27886 .26398 .29516 .28125 .32033 .27188 .30414 .25484 Metetra .649 .74 .916 r .30414 .25484 .32033 .27188 .3457 .263 .32964 .24626 Metetra .634 .741 .925 r .32964 .24626 .3457 .263 .37128 .25486 .35534 .23846 Metetra .613 .741 .937 r .35534 .23846 .37128 .25486 .39709 .2477 .38128 .2317 Metetra .583 .738 .949 r .38128 .2317 .39709 .2477 .42315 .24182 .40746 .22629 Metetra .54 .729 .962 r .40746 .22629 .42315 .24182 .44948 .23755 .43393 .22255 Metetra .48 .713 .972 r .43393 .22255 .44948 .23755 .47613 .23525 .46073 .22084 Metetra .397 .683 .976 r .46073 .22084 .47613 .23525 .50317 .23532 .48791 .2216 Metetra .282 .631 .963 r .48791 .2216 .50317 .23532 .53066 .23824 .51555 .22528 Metetra .133 .55 .922 r .51555 .22528 .53066 .23824 .55869 .24451 .54376 .23242 Metetra 0 .433 .841 r .54376 .23242 .55869 .24451 .5874 .25474 .57264 .24363 Metetra 0 .289 .719 r .57264 .24363 .5874 .25474 .61693 .26962 .60236 .25962 Metetra .413 0 0 r .60236 .25962 .61693 .26962 .64745 .28993 .63309 .28121 Metetra .553 .003 0 r .63309 .28121 .64745 .28993 .6792 .31664 .66507 .30938 Metetra .657 .12 0 r .66507 .30938 .6792 .31664 .71245 .35087 .69859 .34531 Metetra .431 .845 .965 r .69859 .34531 .71245 .35087 .74504 .35749 .73061 .33822 Metetra .645 .763 .934 r .73061 .33822 .74504 .35749 .77698 .3471 .7628 .32762 Metetra .664 .728 .897 r .09057 .31269 .10796 .33011 .13168 .32117 .1144 .30362 Metetra .666 .729 .896 r .1144 .30362 .13168 .32117 .15564 .31195 .13847 .29432 Metetra .668 .73 .896 r .13847 .29432 .15564 .31195 .17984 .30249 .16278 .28484 Metetra .668 .732 .897 r .16278 .28484 .17984 .30249 .20427 .29286 .18732 .27523 Metetra .668 .734 .899 r .18732 .27523 .20427 .29286 .22892 .28315 .21208 .26559 Metetra .665 .736 .903 r .21208 .26559 .22892 .28315 .25379 .27348 .23706 .25604 Metetra .661 .739 .907 r .23706 .25604 .25379 .27348 .27886 .26398 .26224 .24673 Metetra .653 .741 .914 r .26224 .24673 .27886 .26398 .30414 .25484 .28764 .23782 Metetra .642 .742 .922 r .28764 .23782 .30414 .25484 .32964 .24626 .31325 .22952 Metetra .625 .743 .932 r .31325 .22952 .32964 .24626 .35534 .23846 .33908 .22207 Metetra .601 .741 .943 r .33908 .22207 .35534 .23846 .38128 .2317 .36514 .21572 Metetra .568 .736 .955 r .36514 .21572 .38128 .2317 .40746 .22629 .39145 .21077 Metetra .521 .726 .967 r .39145 .21077 .40746 .22629 .43393 .22255 .41805 .20756 Metetra .455 .706 .975 r .41805 .20756 .43393 .22255 .46073 .22084 .44498 .20647 Metetra .365 .671 .974 r .44498 .20647 .46073 .22084 .48791 .2216 .47231 .20791 Metetra .242 .612 .955 r .47231 .20791 .48791 .2216 .51555 .22528 .5001 .21236 Metetra .086 .523 .905 r .5001 .21236 .51555 .22528 .54376 .23242 .52847 .22038 Metetra 0 .399 .813 r .52847 .22038 .54376 .23242 .57264 .24363 .55752 .23259 Metetra 0 .253 .684 r .55752 .23259 .57264 .24363 .60236 .25962 .58742 .24972 Metetra .449 0 0 r .58742 .24972 .60236 .25962 .63309 .28121 .61835 .27261 Metetra .579 .031 0 r .61835 .27261 .63309 .28121 .66507 .30938 .65056 .30229 Metetra .542 0 0 r .65056 .30229 .66507 .30938 .69859 .34531 .68379 .32926 Metetra .639 .805 .963 r .68379 .32926 .69859 .34531 .73061 .33822 .71587 .31855 Metetra .645 .763 .934 r .71587 .31855 .73061 .33822 .7628 .32762 .74832 .30772 Metetra .664 .732 .9 r .07283 .29529 .09057 .31269 .1144 .30362 .09678 .28609 Metetra .665 .732 .9 r .09678 .28609 .1144 .30362 .13847 .29432 .12096 .27671 Metetra .666 .734 .9 r .12096 .27671 .13847 .29432 .16278 .28484 .14538 .2672 Metetra .666 .735 .901 r .14538 .2672 .16278 .28484 .18732 .27523 .17003 .25761 Metetra .665 .737 .904 r .17003 .25761 .18732 .27523 .21208 .26559 .19491 .24804 Metetra .661 .739 .908 r .19491 .24804 .21208 .26559 .23706 .25604 .21999 .23862 Metetra .656 .741 .913 r .21999 .23862 .23706 .25604 .26224 .24673 .2453 .22948 Metetra .647 .743 .919 r .2453 .22948 .26224 .24673 .28764 .23782 .27081 .2208 Metetra .634 .744 .928 r .27081 .2208 .28764 .23782 .31325 .22952 .29653 .21279 Metetra .615 .744 .938 r .29653 .21279 .31325 .22952 .33908 .22207 .32248 .20568 Metetra .588 .741 .949 r .32248 .20568 .33908 .22207 .36514 .21572 .34866 .19974 Metetra .551 .735 .961 r .34866 .19974 .36514 .21572 .39145 .21077 .37509 .19526 Metetra .5 .722 .971 r .37509 .19526 .39145 .21077 .41805 .20756 .40182 .19259 Metetra .429 .698 .977 r .40182 .19259 .41805 .20756 .44498 .20647 .42889 .19211 Metetra .331 .657 .972 r .42889 .19211 .44498 .20647 .47231 .20791 .45635 .19424 Metetra .201 .592 .945 r .45635 .19424 .47231 .20791 .5001 .21236 .48429 .19949 Metetra .038 .494 .884 r .48429 .19949 .5001 .21236 .52847 .22038 .51281 .2084 Metetra 0 .365 .783 r .51281 .2084 .52847 .22038 .55752 .23259 .54202 .22163 Metetra 0 .217 .648 r .54202 .22163 .55752 .23259 .58742 .24972 .5721 .23991 Metetra .482 0 0 r .5721 .23991 .58742 .24972 .61835 .27261 .60322 .26414 Metetra .603 .056 0 r .60322 .26414 .61835 .27261 .65056 .30229 .63564 .29537 Metetra 0 .314 .668 r .63564 .29537 .65056 .30229 .68379 .32926 .66849 .3094 Metetra .645 .763 .934 r .66849 .3094 .68379 .32926 .71587 .31855 .70082 .29846 Metetra .645 .763 .934 r .70082 .29846 .71587 .31855 .74832 .30772 .73353 .2874 Metetra .664 .736 .903 r .05475 .27792 .07283 .29529 .09678 .28609 .07881 .26858 Metetra .665 .736 .903 r .07881 .26858 .09678 .28609 .12096 .27671 .10311 .25912 Metetra .665 .737 .904 r .10311 .25912 .12096 .27671 .14538 .2672 .12765 .24957 Metetra .664 .738 .906 r .12765 .24957 .14538 .2672 .17003 .25761 .15241 .24 Metetra .661 .74 .908 r .15241 .24 .17003 .25761 .19491 .24804 .17739 .2305 Metetra .657 .742 .912 r .17739 .2305 .19491 .24804 .21999 .23862 .20259 .2212 Metetra .65 .743 .918 r .20259 .2212 .21999 .23862 .2453 .22948 .228 .21224 Metetra .64 .745 .925 r .228 .21224 .2453 .22948 .27081 .2208 .25363 .20379 Metetra .625 .745 .933 r .25363 .20379 .27081 .2208 .29653 .21279 .27946 .19606 Metetra .604 .744 .943 r .27946 .19606 .29653 .21279 .32248 .20568 .30552 .1893 Metetra .575 .74 .955 r .30552 .1893 .32248 .20568 .34866 .19974 .33182 .18376 Metetra .534 .732 .966 r .33182 .18376 .34866 .19974 .37509 .19526 .35838 .17975 Metetra .478 .717 .975 r .35838 .17975 .37509 .19526 .40182 .19259 .38523 .17763 Metetra .4 .689 .978 r .38523 .17763 .40182 .19259 .42889 .19211 .41242 .17776 Metetra .295 .642 .967 r .41242 .17776 .42889 .19211 .45635 .19424 .44002 .1806 Metetra .158 .569 .932 r .44002 .1806 .45635 .19424 .48429 .19949 .4681 .18665 Metetra 0 .463 .861 r .4681 .18665 .48429 .19949 .51281 .2084 .49676 .19647 Metetra 0 .329 .751 r .49676 .19647 .51281 .2084 .54202 .22163 .52613 .21073 Metetra 0 .182 .613 r .52613 .21073 .54202 .22163 .5721 .23991 .55637 .23021 Metetra .513 0 0 r .55637 .23021 .5721 .23991 .60322 .26414 .58767 .25581 Metetra .625 .08 0 r .58767 .25581 .60322 .26414 .63564 .29537 .62029 .28862 Metetra .185 .685 .913 r .62029 .28862 .63564 .29537 .66849 .3094 .65286 .28911 Metetra .645 .763 .934 r .65286 .28911 .66849 .3094 .70082 .29846 .68545 .27795 Metetra .645 .763 .934 r .68545 .27795 .70082 .29846 .73353 .2874 .71842 .26665 Metetra .664 .739 .906 r .0363 .26056 .05475 .27792 .07881 .26858 .06049 .25108 Metetra .664 .74 .907 r .06049 .25108 .07881 .26858 .10311 .25912 .0849 .24153 Metetra .663 .74 .908 r .0849 .24153 .10311 .25912 .12765 .24957 .10955 .23195 Metetra .661 .742 .91 r .10955 .23195 .12765 .24957 .15241 .24 .13442 .22239 Metetra .658 .743 .913 r .13442 .22239 .15241 .24 .17739 .2305 .15951 .21296 Metetra .652 .744 .917 r .15951 .21296 .17739 .2305 .20259 .2212 .18482 .20378 Metetra .644 .746 .923 r .18482 .20378 .20259 .2212 .228 .21224 .21035 .19499 Metetra .632 .747 .93 r .21035 .19499 .228 .21224 .25363 .20379 .23608 .18677 Metetra .616 .746 .939 r .23608 .18677 .25363 .20379 .27946 .19606 .26203 .17933 Metetra .593 .745 .949 r .26203 .17933 .27946 .19606 .30552 .1893 .2882 .17291 Metetra .56 .739 .96 r .2882 .17291 .30552 .1893 .33182 .18376 .31461 .16778 Metetra .516 .729 .97 r .31461 .16778 .33182 .18376 .35838 .17975 .34129 .16425 Metetra .454 .71 .978 r .34129 .16425 .35838 .17975 .38523 .17763 .36826 .16267 Metetra .37 .678 .977 r .36826 .16267 .38523 .17763 .41242 .17776 .39557 .16343 Metetra .258 .625 .96 r .39557 .16343 .41242 .17776 .44002 .1806 .42329 .16698 Metetra .113 .544 .916 r .42329 .16698 .44002 .1806 .4681 .18665 .4515 .17384 Metetra 0 .432 .836 r .4515 .17384 .4681 .18665 .49676 .19647 .4803 .18459 Metetra 0 .294 .718 r .4803 .18459 .49676 .19647 .52613 .21073 .50981 .19991 Metetra .404 0 0 r .50981 .19991 .52613 .21073 .55637 .23021 .54021 .2206 Metetra .541 0 0 r .54021 .2206 .55637 .23021 .58767 .25581 .57168 .24761 Metetra .616 .067 0 r .57168 .24761 .58767 .25581 .62029 .28862 .60444 .27967 Metetra .587 .889 .99 r .60444 .27967 .62029 .28862 .65286 .28911 .6369 .26839 Metetra .645 .763 .934 r .6369 .26839 .65286 .28911 .68545 .27795 .66975 .25698 Metetra .645 .763 .934 r .66975 .25698 .68545 .27795 .71842 .26665 .70298 .24544 Metetra 0 g .25 Mabswid .68874 0 m .96935 .42924 L s .96935 .42924 m 1 .6535 L s 1 .6535 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .03716 .25514 m 0 .48963 L s 0 .48963 m .70298 .24544 L s .70298 .24544 m .68874 0 L s .68874 0 m .03716 .25514 L s .03716 .25514 m .68874 0 L s .03716 .25514 m .04196 .25962 L s [(0)] .02757 .24618 1 .93395 Mshowa .18558 .19702 m .19014 .20174 L s [(0.5)] .17646 .18758 .96648 1 Mshowa .34306 .13535 m .34735 .14032 L s [(1)] .3345 .12542 .86223 1 Mshowa .51046 .06981 m .51442 .07504 L s [(1.5)] .50253 .05935 .75799 1 Mshowa .68874 0 m .69233 .00549 L s [(2)] .68156 -0.01098 .65374 1 Mshowa .125 Mabswid .06616 .24378 m .06901 .2465 L s .09549 .2323 m .09832 .23504 L s .12517 .22067 m .12797 .22345 L s .1552 .20892 m .15797 .21172 L s .21633 .18498 m .21903 .18784 L s .24744 .1728 m .25012 .17569 L s .27893 .16047 m .28157 .16339 L s .3108 .14799 m .31341 .15094 L s .37572 .12257 m .37826 .12558 L s .40878 .10962 m .41128 .11266 L s .44225 .09652 m .44471 .09959 L s .47614 .08324 m .47856 .08635 L s .54521 .0562 m .54755 .05937 L s .58041 .04242 m .5827 .04562 L s .61605 .02846 m .6183 .03169 L s .65216 .01432 m .65436 .01759 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 233.562}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHg_ooool0067ooooo0_l0001Zooooo`03o`000?oooooo oooo01Gooooo00?o0000ooooooooool0>?ooool003?ooooo0_l00004ooooo`03o`000?oooooooooo 00;ooooo0ol0000Mooooo`?o0000K?ooool00ol0003oooooooooo`0Fooooo`03o`000?oooooooooo 03Oooooo000booooo`04o`000?ooooooooooo`0000Oooooo00Go0000ooooooooooooooooo`00000J ooooo`?o0000K_ooool00ol0003oooooooooo`0Gooooo`03o`000?oooooooooo03Kooooo000boooo o`04o`000?ooooooooooo`0000_ooooo00?o0000ooooooooool05Oooool3o`0000;ooooo00?o0000 ooooooooool02_oooolGo`0004_ooooo00?o0000ooooooooool05oooool00ol0003oooooooooo`0f ooooo`00<_ooool01?l0003oooooooooool0000;ooooo`03o`000?oooooooooo01?ooooo0_l0000; ooooo`Oo00001On4^_P00ol0003oM;GjogBenP04ogBenP03o`000?mN[O[oGZgj00CoGZgj00Co0000 od:OmOm2WoGo@Yoe1Ol00016ooooo`03o`000?oooooooooo01Sooooo00?o0000ooooooooool0=Ooo ool003;ooooo00Co0000oooooooooooo00001oooool4o`0001?ooooo0ol00007ooooo`Ko00001On? _OD00ol0003oQ;[hohBjn005ohBjn003o`000?md]O[oM;Gj00CoM;Gj00?o0000oej]n_mN[OX01?mN [OX00ol0003o@Yoeod:Om@04od:Om@Co0000@oooool00ol0003oooooooooo`0Gooooo`?o0000=_oo ool003;ooooo00Co0000oooooooooooo00001oooool00ol0003oooooooooo`0Aooooo`?o00000_oo ool00ol0003oooooooooo`02ooooo`?o00000onG__800ol0003oSkgeohnmm@06ohnmm@03o`000?n4 ^_SoQ;[h00GoQ;[h00?o0000ogBen_md]OX01?md]OX00ol0003oGZgjoej]nP04oej]nP03o`000?m2 WoGo@Yoe00Co@Yoe00?o0000oab;j_lLRnX01?l0000oooooo`03o`000?oooooooooo01Wooooo00?o 0000ooooooooool0=?ooool003?ooooo0_l00008ooooo`Go00003Oooool2o`0000Kooooo1?l00007 oiNnlP03o`000?n?_OGoSkge00KoSkge00?o0000ohBjn?n4^_P00_n4^_PKo`0000;o78_Z1Ol0000k ooooo`03o`000?oooooooooo01[ooooo00?o0000ooooooooool0mm006oi>mm003o`000?n8^oOoR;_g00;oR;_g3_l00005offbnP03o`000?mDZ?SoE:Sh00So 000000?o:97^o`000?l0M]`00_l00002o`1;]`;o0000<_ooool00ol0003oooooooooo`0Kooooo`;o 0000Gl@Co000000?o07KLo`000?l000000_l0BkL2o`00033o oooo00?o0000ooooooooool07Oooool00ol0003oooooooooo`0`ooooo`00@?ooool2o`0000Cooooo 0_l00005ojBnk003o`000?nQ_nkoXKo^00KoXKo^00Co0000oifnl?l0003o00001OnO_^h00ol0003o V[kaoiZnl@06oiZnl@03o`000?nC_OCoTkgd00?o00000_nF_O800ol0003oSKcfohflmP06ohflmP03 o`000?mo^?SoOkSh00GoOkSh00?o0000offbn_m]/_X01Om]/_X00ol0003oE:ShoeBXn003oeBXn003 o`000?lcUo7o?oo ool2o`0000;ooooo1?l00007ojJnjP03o`000?nT_^coY;k/00CoY;k/1?l00007oj>nk003o`000?nO _^koWkk^00CoWkk^1?l00008oifnl003o`000?nF_O;oU[gb00CoU[gb00?o0000ohflm_n=_?H00ol0 0004oi6lm003o`000?n5^OOoQKWg00CoQKWg00?o0000ogBdnOmd]?T01Omd]?T00ol0003oGJ_ioef[ n@04oef[n@03o`000?lmW?Co?Icd00Go00000ol9O^85o`0002_ooooo00?o0000ooooooooool07ooo ool00ol0003oooooooooo`0]ooooo`005oooool2o`0001cooooo0ol000001?oooooo0000o`000?l0 0003ojRnj@03o`000?nV_^[oY[kZ00KoY[kZ00?o0000ojBnk?nT_^`00ol00004ojJnj`03o`000?nS _^coXkk/00GoXkk/00?o0000oinnk_nO_^h00ol00004oj:nk@03o`000?nM__3oWKk`00KoWKk`00Co 0000oiJml_nF_O;oU[gb1Ol00008oi6lm003o`000?n5^OOoQKWg00CoQKWg00?o0000ogBdnOmd]?T0 1Omd]?T00ol0003oGJ_ioef[n@04oef[n@03o`000?lmW?Co?Icd00?o?Icd1_l000001?l0GLSo0000 o`000?l0000Zooooo`03o`000?oooooooooo01kooooo0_l00007ooooo`?o00009Oooool001Kooooo 00Co0000oooooooooooo00006Oooool6o`0000OoZ;kY00?o0000ojJnj_nV_^X01OnV_^X3o`0000So Y[k[00?o0000oj>nk?nS_^`01?nS_^`3o`0000SoX[k]00?o0000oifnl?nM__001?nM__05o`0000Go VKga00?o0000oi6lm?nA_?@01_nA_?@00ol0003oQKWgohFim`04ohFim`03o`000?md]?WoM;Ci00;o M;Ci3ol000000olmW?Co0000oaJ5i`02oaJ5i`?o000000Co05g8o`000?l0003o0000:?ooool00ol0 003oooooooooo`0Pooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool09?ooool001Ko oooo00Co0000oooooooooooo00005_ooool6o`0000;oZKgX00?o0000ojRnjOnX_^T01_nX_^T00ol0 003oY[kZojJnjP02ojJnjP;o00000_nX_NT00ol0003oY[k[ojJnj`07ojJnj`03o`000?nS_^coXkk/ 00?o00000_nU_^/00ol0003oX[k]oj:nk@07oj:nk@03o`000?nM__3oWKk`00?o00000_nO_^h00ol0 003oVKgaoiVml@06oiVml@03o`000?nA_?CoTKcd00CoTKcd3Ol00004ogZfn003o`000?mU[_WoIJki 00CoIJki00Co0000odRQm_m8XOKoB:7f1Ol00003oaJ5i`Go00009oooool00ol0003oooooooooo`0Q ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool09?ooool001Kooooo00Co0000oooo oooooooo00005?ooool2o`000003ooooool0003o000000KoZKgX00?o0000ojRnjOnX_^T01_nX_^T0 1?l0003oY[kZo`000?l00005ojRmj@03o`000?nV_^_oY[k[00KoY[k[0ol00006ojFnj`03o`000?nR _^goX[k]00KoX[k]0ol00006oinnkP03o`000?nI_O7oVKga00KoVKga00?o0000oi6lm?nA_?@00ol0 0002oiFllP03o`000?n:^_KoR[[f00KoR[[f00?o0000ogZfn?mj]_P01?mj]_P00ol0003oIJkiofF^ n@04ofF^n@03o`000?m8XOKoB:7f00?oB:7f00?o0000ob:`00_lRS>`3o`000003o`1Vd?l0003o000000;o00008oooool00ol0003ooooooooo o`0Rooooo`03o`000?oooooooooo00?ooooo00?o0000ooooooooool09?ooool001Kooooo00Co0000 oooooooooooo00003oooool2o`0000;ooooo0_l00002ojVmj003o`000?nY_NSoZKgX00OoZKgX00?o 0000ojRnjOnX_^T00ol00003ojVmj003o`000?nX_NWoZ;gY00KoZ;gY00Co0000ojJnjol0003o0000 1OnW_NT00ol0003oYKk[ojFnj`06ojFnj`04o`000?nR_^go0000o`0000GoY;g/00?o0000oinnk_nO _^h01_nO_^h00ol0003oVKgaoiVml@03o`0000?oW;g_00?o0000oiFll_nE_?801OnE_?800ol0003o R[[fohZjmP04ohZjmQGo000000?oB:7fo`000?lRS>`01OlRS>`6o`0002;ooooo00?o0000oooooooo ool08oooool01?l0003oooooooooooooool2o`0002Kooooo000Gooooo`;o00003Oooool3o`0000;o oooo0_l00005ojVmj003o`000?nY_NSoZKgX00KoZKgX0ol00007ojVmj003o`000?nX_NWoZ;gY00Co Z;gY0ol00008ojNmj@03o`000?nU_^_oYKk[00CoYKk[0ol00008ojBmk003o`000?nO_^koWkk^00Co Wkk^1?l00007oibmk`03o`000?nE_?;oUKcb00GoUKcb00?o0000ohZjm_n:^_H00ol00003ohjkm003 o`000?n0]oOoP;Og00CoP;Og00?o0000offanOm]/OT01?m]/OT01?l0003oDJGhoe6Un?mAYOP7o`00 00;o8Xc/00?o0000o`1^eol000001?l0000Pooooo`03o`000?oooooooooo027ooooo0ol00004oooo o`03o`000?oooooooooo02Cooooo000Sooooo`?o00000_ooool4o`0000OoZKgX00?o0000ojVmj?nY _NP00_nY_NP3o`0000;oZKcW00?o0000ojVmj?nY_NP01_nY_NP00ol0003oZ;gYojRmj@03o`0000?o ZKgX00?o0000ojNmjOnW_NT01_nW_NT00ol0003oYKk[ojFnj`03o`0000?oYkgY00?o0000ojBmk?nT _N`01_nT_N`00ol0003oWkk^oinnkP03o`0000?oX[g/00?o0000oibmkonL_Nl01_nL_Nl00ol0003o UKcboiFllP02oiFllPGo00001on>^o@00ol0003oP;Ogoh2gm`04oh2gm`03o`000?m]/OWoKK7i00Co KK7i00?o0000oe6Un?mAYOP01?mAYOP00ol0003o;I?_obfCk`06o`000004ohX00?l0003oP`00o`00 01oooooo00?o0000ooooooooool09?ooool00ol0003oooooooooo`0Xooooo`008Oooool2o`0000;o oooo0ol00004ojVmj003o`000?nY_NSoZKgX00GoZKgX00Co0000ojVmj?l0003o00001_nY_>L00ol0 003oZKgXojVmj005ojVmj0?o00001onY_NP00ol0003oYkgYojNmj@04ojNmj@Co00001onW_NT00ol0 003oY;g/ojBmk004ojBmk0Co00001onR_N`00ol0003oW;g_oibmk`04oibmk`Ko00001?nH_?400ol0 003oS[_dohjkm006ohjkm003o`000?n0]oOoP;Og00CoP;Og00?o0000offanOm]/OT01?m]/OT00ol0 003oDJGhoe6Un004oe6Un003o`000?l]Tnoo;I?_00?o;I?_1ol0000Mooooo`;o00009oooool00ol0 003oooooooooo`0Wooooo`007_ooool3o`000004ooooool0003o0000o`0000SoZKgX00?o0000ojVm j?nY_NP01?nY_NP3o`0000SoZKcW00?o0000ojVmj?nY_NP00_nY_NP2o`0000;oZ[cW00?o0000ojVm j?nY_NP01_nY_NP00ol0003oYkgYojNmj@03o`0000?oZKgX00?o0000ojNmjOnW_NT01_nW_NT00ol0 003oY;g/ojBmk003o`0000?oY[gZ00?o0000oj:mk?nR_N`01_nR_N`00ol0003oW;g_oibmk`03o`00 00?oWkg^00?o0000oiRllOnH_?401OnH_?400ol0003oS[_dohjkm004ohjkm1[o00000ol]Tnl00ol0 003o07OMo`000005o`0001Sooooo0ol000000onU`noo0000ooooo`0Vooooo`03o`000?oooooooooo 02Oooooo000Mooooo`;o000000?oooooo`000?l000000_nY_NL00ol0003oZKgXojVmj007ojVmj003 o`000?nY_NSoZKgX00?o00000onZ_>L00ol0003oZKcWojVli`06ojVli`04o`000?nY_NSo0000o`00 00GoZ[cW00?o0000ojVmj?nY_NP01OnY_NP3o`0000OoZKgX00?o0000ojNmjOnW_NT01OnW_NT3o`00 00OoY[gZ00?o0000oj:mk?nR_N`01?nR_N`4o`0000OoWkg^00?o0000oiRllOnH_?401OnH_?400ol0 003oS[_dohjkm003o`0000?oTk_c00?o0000ohJim_n6^OH01?n6^OH00ol0003oM;?iogBcn@05ogBc n@03o`000?mKZOSoFjWh00?oFjWh00?o0000ocVIl_l000001?l000001?l0Mmgo0000oidA0?nM4@04 o`0001?ooooo0ol00005ojG3k`03o`000?oooooooooo02Gooooo00?o0000ooooooooool09_ooool0 01gooooo0ol00005ojVmi`03o`000?nY_NSoZKgX00KoZKgX0ol00007ojZli`03o`000?nY_>OoZKcW 00CoZKcW0ol00008ojZli`03o`000?nY_NSoZKgX00;oZKgX0_l00002ojZli`03o`000?nY_NSoZKgX 00KoZKgX00?o0000ojNmjOnW_NT00_nW_NT2o`0000;oZ;cX00?o0000ojJmj_nV_NX01_nV_NX00ol0 003oX[g/oj:mk003o`0000?oY;g[00?o0000oinmk_nO_Nh01_nO_Nh00ol0003oV;caoiRll@02oiRl l@Go00001onC^o<00ol0003oQ[WfohJimP04ohJimP03o`000?md/oWoM;?i00GoM;?i00?o0000oe^Y n?mKZOP00omKZOP00ol0003o>IWbocVIlP02ocVIlPCo000000?oWA40o`000?nO50001?l0000>oooo o`?o00002OnU`nl00ol0003oooooooooo`0Tooooo`03o`000?oooooooooo02Kooooo000Mooooo`;o 00001onY_NL00ol0003oZKgXojVmj002ojVmj0?o00000_nZ_>L00ol0003oZ[cWojZli`06ojZli`03 o`000?nY_>OoZKcW00?o00000_nZ_>H00ol0003oZ[cWojZli`07ojZli`04o`000?nY_NSo0000o`00 00GoZ[cW00?o0000ojVmj?nY_NP01_nY_NP01?l0003oYkgYo`000?l00005ojRlj003o`000?nV_N[o Y[gZ00GoY[gZ0ol00007ojBmj`03o`000?nO_NkoWkg^00CoWkg^1_l00004oibmk`03o`000?nC^o?o Tk_c00KoTk_c00?o0000ohJim_n6^OH01?n6^OH00ol0003oM;?iogBcn@02ogBcn@So000000?oFjWh o`000?liVO801OliVO82o`000003oidA0?l0003oWa@000Co00002_ooool3o`0000;oYL?_00?o0000 ojG3konU`nl02?nU`nl00ol0003oooooooooo`0Tooooo`03o`000?oooooooooo02Gooooo000Foooo o`;o00001Oooool00ol0003oooooo`000007ojVmi`04o`000?nY_NSo0000o`0000KoZ[cW00?o0000 ojZlionZ_>L01OnZ_>L3o`0000KoZ[cV00?o0000ojZlionZ_>L01_nZ_>L2o`0000SoZ[cW00?o0000 ojVmj?nY_NP01?nY_NP3o`0000SoZ;cX00?o0000ojJmj_nV_NX00_nV_NX2o`000003ojNlj?l0003o Y;g[00SoY;g[00?o0000oinmk_nO_Nh00ol00002oj:mk003o`000?nL_NooW;g_00KoW;g_00?o0000 oi>klonC^o<01?nC^o<=o`0000CoNkGh00Co0000of>]nOmS[OWoHjgi1ol00002ocVIlP;o000000?o WA40o`000?nO50001?l00006ooooo`?o00001_nU`nl00ol0003oYL?_ojG3k`07ojG3k`;o00009_oo ool00ol0003oooooooooo`0Tooooo`005Oooool01?l0003oooooooooool00003ooooo`05o`000?oo oooo0000ooooool000001_nY_NL3o`0000SoZ[cW00?o0000ojZlionZ_>L00_nZ_>L2o`0000;oZ[_V 00?o0000ojZli_nZ_>H01OnZ_>H00ol0003oZ[cWojZli`02ojZli`?o000000?oZk_Vo`000?nZ_>L0 2?nZ_>L00ol0003oZKgXojVmj003o`0000?oZ[cV00?o0000ojRlj?nX_>P01_nX_>P01?l0003oY[gZ o`000?l00004ojNlj003o`000?nT_N_oY;g[00KoY;g[0ol00006oj:mk003o`000?nL_NooW;g_00Ko W;g_00?o0000oi>klonC^o<00ol00002oiNll@03o`000?n;^_GoRk[e00KoRk[e00?o0000og^en?mk ]OP01?mk]OP00ol0003oHjgiof>]n@04of>]n@03o`000?m3W_Go@ike00Go000000?oWA40o`000?nO 50001Ol000001?oooooo0000o`000?l0000:ojG3k`03o`000?nU`nooYL?_00?oYL?_0ol000000onU `noo0000ooooo`0Uooooo`03o`000?oooooooooo02Cooooo000Eooooo`04o`000?ooooooooooo`00 00?ooooo0_l00003ooooo`03o`000?nY_NOoZKgW00?o00000onY_>L00ol0003oZ[cWojZli`06ojZl i`04o`000?nZ_>Oo0000o`0000GoZ[_V00?o0000ojZli_nZ_>H01OnZ_>H01?l0003oZ[cWo`000?l0 0005oj^kiP03o`000?nZ_>OoZ[cW00KoZ[cW0ol00007ojZliP03o`000?nX_>SoZ;cX00CoZ;cX0ol0 0007ojNlj003o`000?nT_N_oY;g[00;oY;g[0ol000000onV_NWo0000oj:mk007oj:mk003o`000?nL _NooW;g_00CoW;g_1?l00006oiNll@03o`000?n;^_GoRk[e00KoRk[e00?o0000og^en?mk]OP01?mk ]OP00ol0003oHjgiof>]n@04of>]n@03o`000?m3W_Go@ike00?o@ike0_l000001OnM4@3o0000oilD 0?l0003oVPh000Co000000?oU^?mo`000?nU`nl02_nU`nl00ol0003oYL?_o`000002o`0000GoYL?_ 00?o0000ooooooooool09?ooool00ol0003oooooooooo`0Sooooo`005Oooool01?l0003ooooooooo ool00003ooooo`03o`000?oooooooooo00?ooooo0_l00007ojVli`03o`000?nZ_>OoZ[cW00CoZ[cW 0ol00008ojZkiP03o`000?nZ_>KoZ[cV00CoZ[cV0ol00007oj^kiP03o`000?nZ_>OoZ[cW00;oZ[cW 0ol000000on[^nGo0000ojZliP08ojZliP03o`000?nX_>SoZ;cX00?o00000onZ_>L00ol0003oYkcX ojNlj005ojNlj004o`000?nT_N_o0000o`0000GoY[gY00?o0000oj:mk?nR_N`01_nR_N`00ol0003o W;g_oibmk`03o`0000?oWkc^00?o0000oiNllOnG_?401OnG_?400ol0003oRk[eoh^jm@04oh^jmAGo 000000Co@ikeo`000?l0003oWA401?l00005oiKSo@03o`000?nU`nooYL?_00SoYL?_0_l00008ojG3 k`;o00009_ooool00ol0003oooooooooo`0Rooooo`005Oooool01?l0003oooooooooool00003oooo o`;o00001Oooool00ol0003oZKcWojVli`06ojVli`03o`000?nZ_>OoZ[cW00?o00000_nZ^nH00ol0 003oZ[_VojZkiP07ojZkiP03o`000?nZ_>KoZ[cV00?o00000on[^nD00ol0003oZk_Voj^kiP05oj^k iP04o`000?nZ_>Oo0000o`0000GoZk_U00?o0000ojZli_nZ_>H01_nZ_>H3o`0000OoZ[cW00?o0000 ojNlj?nW_>P01?nW_>P3o`0000OoY[gY00?o0000oj:mk?nR_N`01?nR_N`4o`0000OoWkc^00?o0000 oiNllOnG_?401OnG_?400ol0003oRk[eoh^jm@03o`0000?oT;[c00?o0000oh6gmon1]oL01?n1]oL0 0ol0003oK:oiofb_n@04ofb_n@04o`000?m>XoOoCZ?godjSm`Go00002OnFhod00ol0003oYL?_ojG3 k`04ojG3k`?o000000?oYL?_o`000?nU`nl02?nU`nl00ol0003oooooooooo`0Sooooo`;o00009?oo ool001Gooooo00Co0000oooooooooooo00000oooool00ol0003oooooooooo`05ooooo`03o`000?nY _>OoZKcW00GoZKcW0ol00006ojZkiP03o`000?nZ^nKoZ[_V00KoZ[_V0ol00007oj^ki@03o`000?n[ ^nKoZk_V00CoZk_V0ol00007oj^ki@03o`000?nZ_>KoZ[cV00;oZ[cV0ol000000on[^nGo0000ojZl i`08ojZli`03o`000?nW_>SoYkcX00?o00000onY_>L00ol0003oY[gYojJmj@05ojJmj@03o`000?nR _NcoX[g/00?o00000onT_N/00ol0003oWkc^oinlkP06oinlkP03o`000?nG_?7oUkca00;oUkca1Ol0 0007oi2jl`03o`000?n1]oOoPKOg00CoPKOg00?o0000ofb_nOm/[oT01?m/[oT00ol0003oCZ?go`00 0002o`0000;oCZ?g0ol00008oiKSo@03o`000?nU`nooYL?_00?o00001OnU`nl00ol0003oYL?_ojG3 k`07ojG3k`03o`000?oooooooooo02Cooooo00?o0000ooooooooool08Oooool001Kooooo0_l00004 ooooo`03o`000?oooooooooo00Kooooo00?o0000ojVlionY_>L00_nY_>L2o`0000;oZK_V00?o0000 ojZki_nZ^nH01OnZ^nH00ol0003oZ[_VojZkiP02ojZkiP?o000000?oZk[Uo`000?n[^nD02?n[^nD0 0ol0003oZk_Voj^kiP03o`0000?oZk_U00?o0000oj^kiOn[^nD01On[^nD01?l0003oZ[cVo`000?l0 0005oj^ki@03o`000?nZ_>OoZ[cW00KoZ[cW0ol00007ojVli`03o`000?nV_NWoY[gY00CoY[gY0ol0 0007ojBmj`03o`000?nO_>koWkc^00CoWkc^1_l00004oiZll003o`000?n@^_?oT;[c00KoT;[c00?o 0000oh6gmon1]oL01?n1]oL00ol0003oK:oiofb_n@02ofb_n@?o00001_m>XoL00ol0003o9Xg]o`00 000:o`0000WoYL?_00?o0000ojG3konU`nl01_nU`nl2o`0002Kooooo00?o0000ooooooooool08?oo ool001_ooooo00?o0000ooooool000002?ooool01?l0003oZKcWo`000?l00005ojVkiP03o`000?nZ ^nKoZ[_V00GoZ[_V00Co0000ojZki_l0003o00001On[^^D00ol0003oZk_Uoj^ki@06oj^ki@?o0000 1on[^nD00ol0003oZk_Uoj^ki@04oj^ki@?o00001on[^nD00ol0003oZ[cWojZli`02ojZli`?o0000 00?oZk_Uo`000?nY_>L02?nY_>L00ol0003oY[gYojJmj@03o`0000;oZ;cX00?o0000ojBmjonT_N/0 1_nT_N/00ol0003oWkc^oinlkP03o`0000?oX[c/00?o0000oiZll?nJ_?001OnJ_?000ol0003oT;[c oi2jl`04oi2jlaco00001Ol_[nT00ol0003oYL?_ojG3k`08ojG3k`03o`000?nU`nooYL?_00?oYL?_ 0ol000000onU`noo0000ooooo`0Uooooo`03o`000?oooooooooo023ooooo000Kooooo`;o00002_oo ool00ol0003oZK_VojVkiP06ojVkiP03o`000?nZ^nKoZ[_V00CoZ[_V0ol00007oj^ji@03o`000?n[ ^nGoZk_U00;oZk_U0ol000000on[^^Co0000oj^ki@08oj^ki@03o`000?n[^nGoZk_U00?o00000on/ ^n@00ol0003oZk_Uoj^ki@05oj^ki@04o`000?nZ_>Oo0000o`0000GoZk_U00?o0000ojVlionY_>L0 1_nY_>L3o`0000KoZ;cX00?o0000ojBmjonT_N/01?nT_N/4o`0000OoX[c/00?o0000oiZll?nJ_?00 1OnJ_?000ol0003oT;[coi2jl`03o`0000;oU;_b00?o0000ohNhm_n7^?H00_n7^?H4o`0000KoLk;h 00?o0000oeRWn?mHYoP01?mHYoP00ol0003oP01onX_>P00ol0003oY;g[ ojBmj`03o`0000?oYkcY00?o0000oj:lk?nR_>`01_nR_>`00ol0003oV[c`oiZll002oiZll0Go0000 1_nD^o84o`0000CoQkSf00?o0000og>bn?mc/_P01?mc/_P00ol0003oF:OhoeRWn004oeRWn004o`00 0?lbU?3oOo0000o`0000GoZk_V00?o0000ojRlj?nX_>P01OnX_>P3o`0000Oo YkcY00?o0000oj:lk?nR_>`01?nR_>`6o`0000?oW[c^00?o0000oiBkl_nD^o800onD^o84o`0000Co QkSf3ol00002oeRWn003o`000?lbU?3oT02?nW_>T00ol0003o X[c/oj:lk003o`0000?oY;cZ00?o0000oijlk_nN_>h01?nN_>h00ol0003oU;_boiBklP02o`0000;o U;_b1_l00004ohbim003o`000?mj]?OoN[Cg00CoN[Cg00Co0000of6[n?mQZoSoHJ_h2?l000000olb U?3o0000o`000002o`0000;oYL?_0ol00005ojG3k`03o`000?nU`nooYL?_00OoYL?_0_l0000Uoooo o`03o`000?oooooooooo01gooooo0006ooooo`Go00000oooool2o`0000Cooooo0_l00005ooooo`03 o`000?oooooooooo00gooooo0_l00006ojVji@03o`000?nZ^^GoZ[[U00KoZ[[U0ol00007oj^ji003 o`000?n[^^CoZk[T00CoZk[T0_l00008ojbjh`03o`000?n/^nCo[;_T00;o[;_T0ol000000on]^^?o 0000ojbki007ojbki003o`000?n[^nGoZk_U00?o00000on]^n@00ol0003oZk_Voj^kiP06oj^kiP04 o`000?nX_>So0000o`0000CoZ[cV00?o0000ojNljOnW_>T01_nW_>T3o`0000OoY;cZ00?o0000oijl k_nN_>h00onN_>h3o`000004oiBkl_l0003o0000o`0000?oV;_`00?o0000ohbim?n<^O@01On<^O@0 0ol0003oN[CgogZdm`04ogZdm`03o`000?mQZoSoHJ_h00CoHJ_h00Co0000ocjJlolnV_?o?Y[c1?l0 00000ol0D:_o0000o`000009ojG3k`03o`000?nU`nooYL?_00?oYL?_0ol000000onU`noo0000oooo o`0Uooooo`03o`000?oooooooooo01cooooo0007ooooo`04o`000?ooooooooooo`0000;ooooo00Co 0000oooooooooooo00000_ooool01?l0003oooooooooool00004ooooo`03o`000?oooooooooo00ko oooo00?o0000ojVjiOnY^^D01OnY^^D00ol0003oZ[[UojZji@02ojZji@?o000000?oZ[WTo`000?n[ ^^@02?n[^^@00ol0003oZk[Toj^ji003o`000003ojbihol0003o[;[S00So[;[S00Co0000ojbki?l0 003o00001On]^^<00ol0003o[;_Tojbki005ojbki0?o00001on]^n@00ol0003oZk_Voj^kiP04oj^k iP?o00001onZ_>H00ol0003oYkcYojNlj@02ojNlj@?o000000?oZKcWo`000?nT_>X02?nT_>X00ol0 003oW[c^o`000006o`0000OoV;_`00?o0000ohbim?n<^O@01On<^O@00ol0003oN[CgogZdm`04ogZd m`03o`000?mQZoSoHJ_h00CoHJ_h00?o0000ocjJlolnV_<00olnV_<3o`0000_oYL?_00?o0000ojG3 kol000000_l00005ojG3k`03o`000?oooooooooo02?ooooo00?o0000ooooooooool07?ooool000So oooo00?o0000ooooooooool00_ooool01?l0003oooooooooool00002ooooo`04o`000?oooooooooo o`0000?ooooo0ol0000@ooooo`03o`000?nY^^GoZK[U00GoZK[U00Co0000ojZjiOl0003o00001OnZ ^N@00ol0003oZk[Toj^ji006oj^ji0?o00001On/^N<00ol0003o[;[Sojbjh`06ojbjh`;o00002?n] ^^<00ol0003o[;_Tojbki002ojbki0;o000000?o[K[So`000?n]^n@02?n]^n@00ol0003oZk_Voj^k iP03o`0000?o[;_T00?o0000ojZli_nZ_>H01OnZ_>H01?l0003oYkcYo`000?l00005ojVli`03o`00 0?nT_>[oY;cZ00GoY;cZ1Ol00004oj6lk003o`000?nH^o3oV;_`00KoV;_`00?o0000ohbim?n<^O@0 0_n<^O@Fo`000004ocjJlol0003o47oTo`0000[oYL?_0_l00009ojG3k`03o`000?oooooooooo02;o oooo0_l00007ooooo`?o00001?ooool00ol0003oooooooooo`02ooooo`?o00001oooool000Wooooo 00Go0000ooooooooooooooooo`000002ooooo`04o`000?ooooooooooo`0000;ooooo00Go0000oooo ooooooooooooo`00000Cooooo`03o`000?nY^^GoZK[U00CoZK[U0ol00007ojZii003o`000?n[^^Co Zk[T00;oZk[T0ol000000on[^N?o0000ojbih`06ojbih`03o`000?n/^^?o[;[S00;o[;[S0ol00000 0on]^N;o0000ojfjh`08ojfjh`04o`000?n/^nCo0000o`0000Co[K[S00?o0000ojfki?n]^n@01_n] ^n@3o`0000Oo[;_T00?o0000ojZli_nZ_>H01?nZ_>H2o`0000SoZKcW00Co0000ojBlj_nT_>[oY;cZ 1?l000000onW_>So0000oj6lk006oj6lk003o`000?nH^o3oV;_`00CoV;_`1_l00003oi6jlP03o`00 0?n1]_KoPKKf00GoPKKf00?o0000ofV^n?mY[_P01?mY[_P01?l0003oBIoeodVOmOm9WoD5o`0000Ko YL?_0ol000000onSc_Ko0000ojG3k`08ojG3k`;o00009Oooool00ol0003oooooooooo`05ooooo`03 o`000?oooooooooo00Oooooo00Go0000ooooooooooooooooo`000006ooooo`001_ooool01Ol0003o oooooooooooooooo000000;ooooo00Co0000oooooooooooo00000_ooool01?l0003oooooooooool0 0003ooooo`03o`000?oooooooooo01;ooooo00?o0000ojVjiOnY^^D00ol00003ojVii003o`000?nZ ^NCoZ[WT00GoZ[WT00Co0000oj^ji?l0003o00001On[^N<00ol0003o[;WSojbih`05ojbih`04o`00 0?n/^^?o0000o`0000Go[KWR00?o0000ojfjhon]^^<01_n]^^<2o`0000Oo[K[S00?o0000ojfki?n] ^n@00_n]^n@3o`000003ojjjhol0003o[;_T00So[;_T00?o0000ojZli_nZ_>H00ol00002ojbki@03 o`000?nY_>OoZKcW00KoZKcW1?l00005ojNlj003o`000?nQ_>coXKc/00GoXKc/00?o0000oiRkl?nH ^o000ol00002oibkkP03o`000?nA^_;oTK[b00GoTK[b00?o0000oh6fm_n1]_H01On1]_H00ol0003o JJkhofV^n004ofV^n003o`000?m9WoGoBIoe00CoBIoe0_l00002ojG3k`?o00001OnSc_H00ol0003o YL?_ojG3k`07ojG3k`;o00009?ooool00ol0003oooooooooo`05ooooo`03o`000?oooooooooo00_o oooo00?o0000ooooooooool01?ooool000Kooooo00Go0000ooooooooooooooooo`000002ooooo`04 o`000?ooooooooooo`0000;ooooo00Co0000oooooooooooo00000oooool2o`0001Cooooo0_l00007 ojVii003o`000?nZ^NCoZ[WT00CoZ[WT0_l00008oj^ih`03o`000?n/^N?o[;WS00Co[;WS0ol00007 ojfihP03o`000?n]^^?o[K[S00;o[K[S0ol000000on^^N;o0000ojfjh`07ojfjh`04o`000?n]^nCo 0000o`0000Go[[[S00?o0000ojbki?n/^n@01_n/^n@3o`0000Ko[;_U00?o0000ojVlionY_>L00_nY _>L5o`0000SoYkcX00?o0000oj6lk?nQ_>`00onQ_>`4o`0000KoW;_^00?o0000oi6jl_nA^_801OnA ^_800ol0003oPKKfoh6fmP02oh6fmPoo00000_m9WoD3o`0000WoXlkf00?o0000ojG3konU`nl00onU `nl3o`000003ojG3kol0003ooooo02Cooooo00?o0000ooooooooool01?ooool00ol0003ooooooooo o`0;ooooo`03o`000?oooooooooo00Cooooo0007ooooo`?o00001?ooool2o`0000Cooooo0_l00004 ooooo`03o`000?oooooooooo01Cooooo00?o0000ojVii?nY^N@01_nY^N@00ol0003oZ[WTojZii003 o`0000;oZkSS00?o0000oj^ihon[^N<01_n[^N<00ol0003o[;WSojbih`03o`0000?o[;SR00?o0000 ojfih_n]^N801On]^N801?l0003o[K[So`000?l00005ojjihP03o`000?n]^^?o[K[S00Go[K[S0_l0 0008ojjjh`03o`000?n/^nCo[;_T00;o[;_T0ol000000on^^^?o0000ojbki@07ojbki@Ko00000on[ ^nD00ol0003oYkcXojNlj005ojNlj003o`000?nQ_>coXKc/00?o00000onT_>X00ol0003oW;_^oibk kP05oibkkP03o`000?nA^_;oTK[b00;oTK[b1ol00004ohNgm@03o`000?ma/?SoLK3h00CoLK3h00Co 0000oe>TmomCY?OoDjCg1Ol0000:oj?>mP03o`000?nU`noo000000;o00001?nU`nl2o`0002Cooooo 00?o0000ooooooooool01?ooool00ol0003oooooooooo`07ooooo`Co00001oooool001[ooooo00?o 0000ooooooooool05Oooool00ol0003oZKWTojVii005ojVii0?o00001_n[^><00ol0003oZkWSoj^i h`05oj^ih`?o00001on/^>800ol0003o[KWRojfihP04ojfihP;o00002?n^^N800ol0003o[K[Sojfj h`02ojfjh`;o000000?o[[WQo`000?n^^^<02?n^^^<01?l0003o[;_To`000?l00005ojjjh`03o`00 0?n/^nGo[;_U00Co[;_U1?l00007oj^ki@03o`000?nW_>SoYkcX00CoYkcX0ol00007ojBljP03o`00 0?nL^nkoW;_^00CoW;_^1Ol00005oiJjl@03o`000?n7]oGoQkOe00CoQkOe00?o0000og6`n?ma/?P0 1?ma/?P00ol0003oDjCgoe>Tm`04oe>Tm`;o00002?nSc_H3o`0000SoYL?_0_l0000Tooooo`03o`00 0?oooooooooo00;ooooo0_l00009ooooo`03o`000?oooooooooo00Sooooo000Iooooo`?o00005ooo ool00ol0003oZKWTojVii002ojVii0;o000000?oZKSTo`000?n[^><01on[^><00ol0003oZkWSoj^i h`02oj^ih`;o000000?o[;SRo`000?n/^>802?n/^>800ol0003o[KWRojfihP03o`0000;o[KSQ00?o 0000ojjih_n^^N801_n^^N801?l0003o[K[So`000?l00004ojjih@03o`000?n^^^?o[[[S00Ko[[[S 0_l00008ojjjh`03o`000?n/^nGo[;_U00Co00000_n^^n<00ol0003oZk_Uoj^ki@06oj^ki@03o`00 0?nW_>SoYkcX00?o00000_nY_>L00ol0003oY;cZojBljP06ojBljP03o`000?nL^nkoW;_^00?o0000 0_nP_>d00ol0003oU[[aoiJjl@06oiJjl@03o`000?n7]oGoQkOe00CoQkOe00?o0000og6`n?ma/?P0 1?ma/?P00ol0003oDjCgoe>Tm`04oe>Tm`;o00000_nSc_H5o`0000;oK]Sg00?o0000ojG3konU`nl0 1onU`nl00ol0003oooooooooo`0Qooooo`03o`000?oooooo000000Cooooo00?o0000ooooooooool0 1oooool5o`0000Kooooo000Iooooo`03o`000?oooooooooo01Sooooo00Co0000ojVii?l0003o0000 1?nY^>@00ol0003oZkSSoj^hh`06oj^hh`04o`000?n[^N?o0000o`0000Co[;SR00?o0000ojbhh_n/ ^>801_n/^>83o`0000Ko[KSQ00?o0000ojjih_n^^N801?n^^N83o`0000Oo[[WQ00?o0000ojjjhon^ ^^<00_n^^^<3o`0000;o[kWQ00?o0000ojjjhon^^^<01On^^^<5o`0000Go[[_S00?o0000oj^kiOn[ ^nD01?n[^nD4o`0000KoZKcW00?o0000ojBlj_nT_>X01?nT_>X4o`0000KoX;c]00?o0000oiJjlOnF ^_401?nF^_4Jo`0000SoK]Sg00?o0000ojG3konU`nl01onU`nl00ol0003oooooooooo`0Rooooo`03 o`000?oooooooooo01Oooooo000Iooooo`03o`000?oooooooooo01Wooooo00?o0000ojVhi?nY^>@0 1OnY^>@00ol0003oZkSSoj^hh`04oj^hh`?o00001on/^>800ol0003o[;SRojbhhP02ojbhhP?o0000 00?o[KSQo`000?n]^>401on]^>400ol0003o[[WRojjihP03o`0000?o[[SQ00?o0000ojjihOn^^N40 1On^^N401?l0003o[[[So`000?l00006ojnih@04o`000?n^^^?o[[[Sojjjh`Ko00002?n^^n<00ol0 003oZk_Uoj^ki@03o`0000;o[K_T00?o0000ojVlionY_>L01_nY_>L00ol0003oY;cZojBljP03o`00 00;oYkcX00?o0000oj2lkOnP_>d01_nP_>d00ol0003oU[[aoiJjl@03o`0000;oV[__00?o0000ohfh lon=^?<01On=^?<00ol0003oNK?gogVcm`04ogVcm`03o`000?mMZ?SoGJSh00?oGJSh00?o0000ocJE lOlfUO400_l00007ofkHm`03o`000?nU`nooYL?_00GoYL?_0ol0000Tooooo`03o`000?oooooooooo 01Kooooo000Iooooo`?o00006_ooool00ol0003oZKSTojVhi005ojVhi003o`000?n[^>?oZkSS00?o 00000on[]n800ol0003o[;SRojbhhP05ojbhhP04o`000?n/^>;o0000o`0000Go[KSQ00?o0000ojfh hOn]^>401On]^>43o`0000Oo[[SQ00?o0000ojjihOn^^N401?n^^N42o`0000Wo[kWQ1_l00002ojnj h@03o`000?n^^n?o[[_S00Ko[[_S0ol00006ojfki003o`000?nY_>OoZKcW00CoZKcW1?l00006ojNl j003o`000?nP_>goX;c]00CoX;c]1?l00006oiZkk`03o`000?n=^??oSKSc00GoSKSc00?o0000ogVc momi/oL01?mi/oL00ol0003oGJShoefXn003oefXn004o`000?lfUO7o=YGaocJEl@Ko00000_m^f?L0 0ol0003oYL?_ojG3k`04o`0000;oYL?_00?o0000ooooooooool08oooool00ol0003oooooooooo`0E ooooo`001_ooool3o`0000?ooooo0_l00004ooooo`;o00001Oooool00ol0003oooooooooo`0Koooo o`03o`000?nY^>CoZKST00CoZKST0ol00007oj^ghP03o`000?n/^>;o[;SR00Co[;SR0_l00008ojfh h@03o`000?n]^>7o[KSQ00;o[KSQ0_l000000on^^>3o0000ojjhh@08ojjhh@03o`000?n^^N7o[[WQ 00?o00000_n_^N000ol0003o[kWQojnih@03ojnih@Ko00001_n_^^400ol0003o[[_Sojjkh`02ojjk h`?o000000?o[k[Ro`000?n]^n@01on]^n@00ol0003oZKcWojVli`03o`0000?o[;_U00?o0000ojNl j?nW_>P01OnW_>P00ol0003oX;c]oj2lk@03o`0000;oXkc[00?o0000oiZkkonJ^nl01_nJ^nl00ol0 003oSKScohfhl`02ohfhl`oo000000?oGJSho`000?lfUO401?lfUO42o`000003o`24c_l0003o0000 00?o00001onU`nl00ol0003oooooooooo`0Rooooo`;o00005_ooool000Oooooo00Go0000oooooooo ooooooooo`000002ooooo`04o`000?ooooooooooo`0000;ooooo00?o0000ooooooooool00_ooool0 0ol0003oooooooooo`0Looooo`03o`000?nY^>CoZKST00?o00000_nY]n<00ol0003oZkORoj^ghP06 oj^ghP03o`000?n/^>;o[;SR00?o00000_n/]n400ol0003o[KSQojfhh@06ojfhh@04o`000?n]^>7o 0000o`0000Co[[SP00?o0000ojjhhOn^^>401_n^^>43o`0000Ko[kWP00?o0000ojnihOl000001Ol0 00000on`^N3o0000ojnjh@07ojnjh@04o`000?n^^n?o0000o`0000Go[k[R00?o0000ojfki?n]^n@0 1On]^n@3o`0000Oo[;_U00?o0000ojNlj?nW_>P01?nW_>P3o`0000KoXkc[00?o0000oiZkkonJ^nl0 1?nJ^nl6o`0000?oT[Wb00?o0000oh2em_n0]OH01On0]OH01?l0003oIZchofJ/n?mV[?P7o`0000;o =YGa0_l00002o`24cP03o`000?nU`nooYL?_00OoYL?_00?o0000ooooooooool08Oooool2o`0001Ko oooo0004ooooo`Go00000_ooool01?l0003oooooooooool00002ooooo`04o`000?ooooooooooo`00 00?ooooo00?o0000ooooooooool07_ooool2o`0000KoZKOS00?o0000oj^gh_n[]n801On[]n83o`00 00Ko[;OQ00?o0000ojfhhOn]^>401On]^>42o`0000Oo[[SP00?o0000ojjhhOn^^>400_n^^>43o`00 0003ojnhgol0003o[kWP00Go[kWP0ol000000on_^N7o0000o`000005ok2ih003o`000?n_^^7o[k[Q 00Go[k[Q0_l00008ojnjhP03o`000?n]^nCo[K_T00;o[K_T0_l00002ojnkhP03o`000?n/^nGo[;_U 00Ko[;_U00?o0000ojNlj?nW_>P00ol00002ojVli`03o`000?nS_>_oXkc[00GoXkc[00?o0000oiZk konJ^nl00ol00003oijkk@03o`000?nB^O;oT[Wb00CoT[Wb00?o0000oh2em_n0]OH01On0]OH00ol0 003oIZchofJ/n003ofJ/n004o`000?m2VoCo@Y_dod:Km0Ko000000?o08C>o`000?nU`nl01onU`nl2 o`0002Cooooo00?o0000ooooooooool04oooool000Cooooo00Co0000oooooooooooo00000oooool0 1?l0003oooooooooool00002ooooo`04o`000?ooooooooooo`0000?ooooo0_l0000Oooooo`03o`00 0?nY]n?oZKOS00KoZKOS00?o0000oj^gh_n[]n800_n[]n82o`000003oj^fhOl0003o[;OQ00Oo[;OQ 00?o0000ojfhhOn]^>400_n]^>42o`000003ojfgh?l0003o[[SP00Oo[[SP00Co0000ojjhhOl0003o 00001On_^=l00ol0003o[kWPojnih003o`0000;o[kWP0_l00008ok2ih003o`000?n_^^7o[k[Q00;o [k[Q0_l000000on`^N3o0000ojnjhP08ojnjhP04o`000?n]^nCo0000o`0000Go[k_R00?o0000ojbk iOn/^nD01?n/^nD4o`0000KoZKcW00?o0000oj>ljonS_>/01?nS_>/3o`0000OoW[_]00?o0000oi:i l_nB^O801?nB^O800ol0003oP;Gfoh2emP02oh2emPSo000000?oIZcho`000?m2Vo@01Om2Vo@3o`00 0003o`24c_l0003oYL?_00KoYL?_0ol0000Sooooo`03o`000?oooooooooo01?ooooo0005ooooo`03 o`000?oooooo000000?ooooo00Co0000oooooooooooo00000_ooool01?l0003oooooooooool00003 ooooo`03o`000?oooooooooo01oooooo00?o0000ojVghonY]n<01_nY]n<01?l0003oZkORo`000?l0 0004oj^fh@03o`000?n/]n7o[;OQ00Ko[;OQ00Co0000ojfhhOl0003o00001?n]]n000ol0003o[[SP ojjhh005ojjhh0;o00002?n_^=l2o`0000?o[kWP0_l000000on`^=oo0000ok2ih008ok2ih004o`00 0?n_^^7o0000o`0000Co/;WP00?o0000ojnjh_n_^^801_n_^^82o`0000So[k_R00?o0000ojbkiOn/ ^nD00ol00002ojjkh`03o`000?nY_>OoZKcW00KoZKcW00?o0000oj>ljonS_>/00ol00002ojJlj@03 o`000?nN^ngoW[_]00KoW[_]00Co0000oi:il_nB^O;oT[Wb1ol00004ohJfm@04o`000?m_[oSoKjoh ofn_n0Oo00000_m2Vo@01?l0003o4WoUo`000?l00002ojG3k`Go00000_nU`nl00ol0003ooooooooo o`0Rooooo`03o`000?oooooooooo01;ooooo0006ooooo`;o00000oooool01?l0003oooooooooool0 0002ooooo`04o`000?ooooooooooo`0000?ooooo00?o0000ooooooooool08?ooool00ol0003oZKOS ojVgh`04ojVgh`?o00001on[]^400ol0003o[;OQojbgh@04ojbgh@?o00001on]]n000ol0003o[[SP ojjhh002ojjhh0;o000000?o[kOOo`000?n_^=l01?n_^=l3o`000003ojnhgol0003o[kWP00;o0000 1?n`^=l00ol0003o/;WPok2ih006ok2ih0;o00001on`^N000ol0003o[k[RojnjhP02ojnjhP?o0000 00?o/K[Po`000?n_^n801on_^n83o`0000Ko[[_S00?o0000ojVlionY_>L01?nY_>L4o`0000KoY[cY 00?o0000oijkkOnN^nd01?nN^nd5o`0000CoUk[`00?o0000ohJfmOn6]_D01On6]_D00ol0003oKjoh ofn_n004ofn_n003o`000?m=X?KoCJ3f00So00002?nU`nl00ol0003oooooooooo`0Rooooo`03o`00 0?oooooooooo017ooooo0007ooooo`03o`000?oooooooooo00;ooooo0_l00004ooooo`;o00001?oo ool2o`0002;ooooo00?o0000ojVghonY]n<00ol00003ojVfhP03o`000?n[]^7oZkKQ00GoZkKQ00?o 0000ojbghOn/]n400ol00003ojbfh003o`000?n]]n3o[KOP00Go[KOP00Co0000ojjhh?l0003o0000 1?n_]ml00ol0003o[kSOo`000002o`0000Co[kSO0_l00007ok2hg`03o`000?n`^N3o/;WP00;o/;WP 0ol000000ona^=ko0000ok2ih007ok2ih004o`000?n_^^;o0000o`0000Go/K[P00?o0000ojnkh_n_ ^n800_n_^n83o`000003ok2jhOl0003o[[_S00Oo[[_S00?o0000ojVlionY_>L00ol00002ojbki@03 o`000?nV_>WoY[cY00KoY[cY00?o0000oijkkOnN^nd00ol00002oj6kj`03o`000?nG^_3oUk[`00Go Uk[`00?o0000ohJfmOn6]_D01On6]_D00ol0003oKjohofn_n004ofn_n003o`000?m=X?KoCJ3f00?o CJ3f00?o0000oan7j_l000002OnU`nl2o`0002;ooooo0_l0000Cooooo`006?ooool00ol0003ooooo ooooo`0Rooooo`;o00001onY]^800ol0003oZkKQoj^fh@04oj^fh@?o00001on/]^000ol0003o[KOP ojfgh004ojfgh0;o00001On_]ml3o`0000Co[kSO0ol000000on`]mko0000ok2hg`07ok2hg`04o`00 0?n`^N3o0000o`0000Go/KSN00?o0000ok2ih?n`^N001On`^N02o`0000So/K[P00Co0000ojnkh_l0 003o00001On`^^400ol0003o[[_Sojjkh`05ojjkh`?o00001_n/^nD00ol0003oY[cYojJlj@04ojJl j@Co00001_nQ^n/00ol0003oUk[`oiNjl005oiNjl003o`000?n6]_GoQ[Ke00;oQ[Ke3ol000001?m= X?Ko0000oan7j_l00009ojG3k`03o`000?oooooooooo02;ooooo00?o0000ooooooooool04?ooool0 01Sooooo00?o0000ooooooooool08oooool00ol0003oZKKRojVfhP06ojVfhP03o`000?n[]^7oZkKQ 00?o000000?oZkKQo`000?n/]^002?n/]^000ol0003o[KOPojfgh003o`0000;o[[KO00?o0000ojng gol000000_l00003ojngg`04o`000?n_^=oo0000o`0000Go/;ON00?o0000ok2hgon`^=l01On`^=l2 o`0000So/KSN00?o0000ok2ih?n`^N000_n`^N02o`0000;o/[WN00?o0000ok6jh?na^^001Ona^^02 o`0000So/;[Q00Co0000ojjkhon^^n?o[[_S0ol00002ojnkhP03o`000?n/^nGo[;_U00Go[;_U00?o 0000ojJljOnV_>T00ol00002ojVki`03o`000?nQ^n_oXK_[00KoXK_[00?o0000oiNjl?nG^_000_nG ^_07o`0000CoS;Sc00?o0000ogNamomg/OL01?mg/OL01?l0003oF:GgoeRUmomHYOL5o`0000OoYL?_ 0ol0000Tooooo`03o`000?oooooooooo00oooooo000Gooooo`;o00009_ooool00ol0003oZKKRojVf hP05ojVfhP?o00001On[]^400ol0003o[;KPojbfh006ojbfh0?o00001?n^]]l3o`0000Ko[kOO0_l0 0008ok2ggP03o`000?n`^=oo/;SO00;o/;SO0_l00002ok6gg@03o`000?na^=ko/KSN00Ko/KSN00Co 0000ok2ih?l0003o00001Onb^Mh00ol0003o/K[Pok6jh002ok6jh0;o000000?o/[WNo`000?n`^^40 1on`^^401?l0003o[[_So`000?l00006ojnkhP03o`000?n/^nGo[;_U00Co[;_U0ol00006ojVki`03 o`000?nQ^n_oXK_[00CoXK_[1_l00004oi^kkP03o`000?n<^??oS;Sc00GoS;Sc00?o0000ogNamomg /OL01?mg/OL00ol0003oF:GgoeRUm`03oeRUm`03o`000?l]Snko000000;oYL?_1?l00002oikIo003 o`000?oooooooooo02;ooooo00?o0000ooooooooool03oooool001Oooooo00?o0000ooooooooool0 9_ooool00ol0003oZKKRojVfhP02ojVfhP;o000000?oZKGQo`000?n[]^401_n[]^400ol0003o[;KP ojbfh002ojbfh0?o000000Co[KGOo`000?n^]]oo[[KO0ol00003ojjfg`03o`000?n_]moo[kOO00?o 000000?o[kKNo`000?n`]mh02?n`]mh01?l0003o/;SOo`000?l00005ok6gg@03o`000?na^=ko/KSN 00Co/KSN0ol00008ok:igP04o`000?na^^3o0000o`0000Co/[WN00?o0000ok2jhOn`^^401On`^^42 o`0000Wo[k_R00?o0000ojbkiOn/^nD00ol00002ojjkh`03o`000?nY^nOoZK_W00GoZK_W00?o0000 oj6kjonQ^n/00ol00002ojFkj@03o`000?nK^nkoVk_^00KoVk_^00?o0000ohbhlon<^?<00_n<^?hg@03o`000?nb^Mko/[WN00Go/[WN0_l00008ok:j g`04o`000?n_^n;o0000o`0000Go/K[P00?o0000ojjkhon^^n<01On^^n<3o`0000GoZk_U00?o0000 ojFkjOnU^nT01?nU^nT4o`0000KoWk_/00?o0000oi:ilOnB^O401OnB^O400ol0003oO[?fogjcmP02 ogjcmPSo000000?oHZWgo`000?liU_802_l0000Sooooo`03o`000?oooooooooo00cooooo0003oooo o`?o00001?ooool2o`0000Cooooo0_l00005ooooo`03o`000?oooooooooo02[ooooo00?o0000ojVe hOnY]N401?nY]N43o`0000?oZkCP0ol00008ojfeg`;o00001on^]Mh00ol0003o[kKNojnfgP04ojnf gP;o00002Ona]]d01?l0003o/KOMo`000?l00004ok:gg003o`000?nb^=go/[SM00Go/[SM0_l00008 ok>hg@04o`000?nb^Mko/[WNok:igP?o00000_nc^Md00ol0003o/[[Ook:jg`05ok:jg`;o00002?na ^^001?l0003o[[_Sojjkhon^^n<3o`000003ok2khOl0003oZk_U00KoZk_U00?o0000ojFkjOnU^nT0 0ol00003ojRki`03o`000?nO^ncoWk_/00GoWk_/00?o0000oi:ilOnB^O400_nB^O47o`0000?oQKGd 00?o0000of^]mom[[OL00_m[[OL7o`0000GoBLC]0ol0000Qooooo`03o`000?oooooooooo00Gooooo 1Ol00002ooooo`000_ooool01Ol0003ooooooooooooooooo000000;ooooo00Co0000oooooooooooo 00000_ooool01?l0003oooooooooool00003ooooo`03o`000?oooooooooo02cooooo00?o0000ojVe hOnY]N400ol000000onY]>3o0000oj^dh003o`0000?oZkCP00?o0000ojfegon]]Ml00_n]]Ml3o`00 0003ojfdg_l0003o[[GN00Oo[[GN00?o0000ojnfg_n_]]h00ol00002ok2eg@03o`000?na]]go/KKM 00Ko/KKM0_l00007ok:gg003o`000?nb^=go/[SM00;o/[SM0_l000000onc]mco0000ok>hg@07ok>h g@04o`000?nb^Mko0000o`0000Ko/kWM00?o0000ok:jgonb^]l00_nb^]l2o`000003ok>ig_l0003o /K[P00Oo/K[P00Co0000ojjkhol0003o00001On`^n400ol0003oZk_Uoj^ki@04oj^ki@?o00001onX ^nL00ol0003oWk_/oinkk002oinkk0Oo00001?nG^_000ol0003oQKGdohFem004ohFem003o`000?m[ [OOoJjgg00CoJjgg00?o0000odFKm?l000001?l00003odW4k@?o00008?ooool2o`0000Oooooo00Co 0000oooooooooooo00000_ooool000;ooooo00Go0000ooooooooooooooooo`000002ooooo`04o`00 0?ooooooooooo`0000;ooooo00Co0000oooooooooooo00000oooool2o`0002kooooo0_l00003ojVd h0?o00001on[]>001?l0003o[KGOo`000?l00005ojfdgP03o`000?n^]Mko[[GN00Go[[GN0ol00006 ok2eg@03o`000?na]]go/KKM00;o/KKM0ol000000ona]]co0000ok:gg007ok:gg004o`000?nb^=go 0000o`0000Co/kOL00?o0000ok>hgOnc^=d01Onc^=d2o`0000Wo/kWM00Co0000ok:jgol0003o0000 1?nc^Mh00ol0003o/K[Pok6jh005ok6jh0;o00002?n`^n400ol0003oZk_Uoj^ki@03o`0000;o[[_S 00?o0000ojRkionX^nL01OnX^nL5o`0000CoXk_Z00?o0000oiNjl?nG^_001OnG^_000ol0003oQKGd ohFem004ohFem003o`000?m[[OOoJjgg00CoJjgg00Co0000odFKm?m5VoCoAI_d2_l0000Pooooo`03 o`000?oooooooooo00Gooooo00?o0000ooooooooool00_ooool000;ooooo1?l00003ooooo`04o`00 0?ooooooooooo`0000;ooooo00Co0000oooooooooooo00000oooool00ol0003oooooooooo`0]oooo o`03o`000?nY]>3o000000;o00000onY]>000ol0003oZkCPoj^dh004oj^dh0?o00001on]]=h00ol0 003o[[GNojjegP02ojjegP;o000000?o[kCMo`000?n`]Md01on`]Md01?l0003o/KKMo`000?l00005 ok6fg003o`000?nb]mco/[OL00Go/[OL0_l00007ok>gg003o`000?nc^=go/kSM00;o/kSM0_l00002 okBgg003o`000?nc^Mgo/kWM00Ko/kWM0_l00007ok>igP04o`000?na^^3o/K[Pok6jh0?o000000?o /k[No`000?n`^n401on`^n43o`0000Ko[[_S00?o0000ojRkionX^nL00_nX^nL2o`000003oj^ki_l0 003oXk_Z00OoXk_Z00?o0000oiNjl?nG^_000_nG^_0Fo`000004odFKm?l0003o0000o`1W^0Go0000 7oooool00ol0003oooooooooo`06ooooo`03o`000?oooooooooo007ooooo0002ooooo`03o`000?oo oooooooo00Cooooo00Co0000oooooooooooo00000_ooool01?l0003oooooooooool00003ooooo`03 o`000?oooooooooo02cooooo0ol00007ojVdh003o`000?n[]>3oZkCP00?o00000on[]=l00ol0003o [KCNojfdgP05ojfdgP04o`000?n^]Mko0000o`0000Co[kCM00?o0000ok2egOn`]Md01On`]Md2o`00 00So/KKL00Co0000ok:gg?nb]mco/[OL0ol000000onc]]_o0000ok>gg007ok>gg004o`000?nc^=go 0000o`0000Go];OL00?o0000ok>igOnc^Md00_nc^Md3o`000003okBhg?l0003o/kWN00Ko/kWN00Co 0000ok6jh?l0003o00001Onc^]h00ol0003o/;_Qok2kh@02ok2kh@?o000000?o/[[Po`000?n^^n<0 1on^^n<01?l0003oZ;_Wo`000?l00004oj^kiP03o`000?nS^n[oXk_Z00CoXk_Z1_l00003oi^jkP03 o`000?n<]o?oS;Oc00GoS;Oc00?o0000ogB_momd[oL01?md[oL01?l0003oDJ7foe6Qm_mAXOH6o`00 0003oiD:0?l0003o000000;o00007_ooool00ol0003oooooooooo`02ooooo`05o`000?oooooooooo ooooool000000_ooool000?ooooo00?o0000ooooooooool00oooool01?l0003oooooooooool00002 ooooo`04o`000?ooooooooooo`0000?ooooo0_l0000Zooooo`?o00000oooool00ol0003oZKCPojVd h004ojVdh0?o00001on[]=l00ol0003o[KCNojfdgP04ojfdgP;o00001on_]=d00ol0003o/;GMok2e g@02ok2eg@;o000000?o/;CLo`000?na]]`01ona]]`01?l0003o/[OLo`000?l00005ok>ff`03o`00 0?nc]mco/kOL00Go/kOL0_l00008okBgg004o`000?nc^Mgo0000o`0000Go];SL00?o0000ok>ig_nc ^Mh01?nc^Mh2o`0000So/k[N00Co0000ok2khOl0003o00001Onb^^000ol0003o[[_Sojjkh`04ojjk h`?o00001on[^nH00ol0003oXk_Zoj>kjP03o`0000;oY[_X00?o0000oi^jk_nK^^h01OnK^^h00ol0 003oS;Ocohbgl`05ohbgl`03o`000?md[oOoM:og00CoM:og00?o0000oe6Qm_mAXOH00omAXOH9o`00 01cooooo0ol00003ooooo`05o`000?ooooooooooooooool000000_ooool000Cooooo0_l00004oooo o`;o00001?ooool2o`0000Cooooo00?o0000ooooooooool09oooool2o`0000Oooooo00?o0000ojVd h?nY]>000ol000000onY/moo0000oj^dg`08oj^dg`03o`000?n]]=ko[KCN00?o000000?o[K?Mo`00 0?n_]=d01on_]=d01?l0003o/;GMo`000?l00004ok2dg003o`000?na]]co/KKL00Go/KKL0_l00008 ok>ff`03o`000?nc]mco/kOL00;o/kOL0_l00002okBff`03o`000?nd]mco];OL00Go];OL0_l00008 okBhg004o`000?nc^Mko/kWNok>igP;o00000_nd^M`00ol0003o/k[Nok>jgP05ok>jgP;o00002?nb ^^000ol0003o[[_Sojjkh`03o`0000;o/;_Q00?o0000oj^ki_n[^nH01On[^nH3o`0000KoY[_X00?o 0000oi^jk_nK^^h01OnK^^h00ol0003oS;Ocohbgl`02ohbgl`oo000000?oDJ7fo`000?l000000_l0 00001?n_:03o0000o`000?n60002o`0001Oooooo1?l000000ooooooo0000ooooo`03ooooo`?o0000 0oooool001Gooooo00?o0000ooooooooool09Oooool3o`0000[ooooo0_l00005ojVcg`03o`000?n[ ]=ooZkCO00KoZkCO0ol00005ojfcg@03o`000?n_]=go[kCM00Go[kCM0_l00007ok2dg003o`000?na ]]co/KKL00;o/KKL0_l000000onb]M_o0000ok>ff`08ok>ff`04o`000?nc]mco0000o`0000Go];KK 00?o0000okBgg?nd]m`00_nd]m`2o`000003okFgf_l0003o];SL00Oo];SL00Co0000ok>ig_l0003o 00001Ond^M`00ol0003o/k[Nok>jgP02ok>jgP;o00000_nd^Md00ol0003o/[[Pok:jh005ok:jh0?o 00001_n`^n400ol0003oZk_Voj^kiP02oj^kiP;o00000_n]^n@00ol0003oY[_XojJkj005ojJkj003 o`000?nK^^koVk[^00;oVk[^1ol00004oi6hl@03o`000?ml/_KoO;;f00?oO;;f00?o0000oebUmomL YOL00_mLYOL7o`000003ojXR0?l0003oQP0000;o00004oooool3o`0000Gooooo00?o0000oooooooo ool02?ooool001Gooooo00?o0000ooooooooool08_ooool3o`0000gooooo00?o0000ojVcgonY/ml0 1OnY/ml00ol0003oZkCOoj^dg`02oj^dg`?o000000?oZk?No`000?n]/md01_n]/md00ol0003o[kCM ojndg@02ojndg@;o000000?o[k?Lo`000?n`]=`01on`]=`01?l0003o/KKLo`000?l00004ok:ef`03 o`000?nc]]_o/kKK00Ko/kKK0_l00008okBff`04o`000?nd]mco0000o`0000Co]KOJ00?o0000okBh g?nd^=`01Ond^=`2o`0000So];WL00Co0000ok>jg_l0003o00001Ond^Md00ol0003o/[[Pok:jh002 ok:jh0;o000000?o/k[No`000?n`^n401on`^n401?l0003oZk_Vo`000?l00005ojfki003o`000?nV ^nSoY[_X00CoY[_X1Ol00004oinkk003o`000?nA^?7oTKSa00GoTKSa00?o0000ogbbm_ml/_H00oml /_H00ol0003oG:GgoebUm`04oebUm`Go000000?oZR80o`000?l000000_l0000?ooooo`?o00002?oo ool00ol0003oooooooooo`08ooooo`005Oooool2o`00023ooooo0ol0000Aooooo`03o`000?nY/moo ZK?O00GoZK?O00Co0000oj^dgol0003o00001On[/mh00ol0003o[K?Mojfcg@05ojfcg@04o`000?n_ ]=go0000o`0000Co[k?L00?o0000ok2dg?n`]=`01On`]=`2o`0000Oo/[GK00?o0000ok>ffonc]]/0 0_nc]]/3o`000003ok>ef_l0003o];KK00Oo];KK0_l00007okFgfP03o`000?nd^=co];SL00;o];SL 0_l000000onf]m[o0000okBig007okBig0;o00002?nd^Md01?l0003o/[[Po`000?l00004ok>jgP03 o`000?n`^n7o/;_Q00Co/;_Q0ol00008ojfki003o`000?nV^nSoY[_X00?o000000?oZK_Vo`000?nO ^n`01onO^n`00ol0003oTKSaoi6hl@02oi6hl@ko00000_mLYOL3o`000005ojlX0?l0003oZR80o`00 0?nU70000_l0000:ooooo`Co00002oooool00ol0003oooooooooo`08ooooo`005Oooool00ol0003o ooooooooo`0Looooo`?o00005Oooool00ol0003oZK?OojVcg`04ojVcg`;o00002?n[/mh00ol0003o [K?Mojfcg@03ojfcg@?o00001on_/m`00ol0003o/;CLok2dg002ok2dg0;o000000?o/KCKo`000?nb ]M/01onb]M/01?l0003o/kKKo`000?l00005ok>efP03o`000?nd]]_o];KK00;o];KK0ol000000one ]]Wo0000okFgfP07okFgfP04o`000?nd^=co0000o`0000Co][OJ00?o0000okBig?nd^M`00_nd^M`3 o`000003okJhfol0003o];WM00Oo];WM0_l00007ok>jgP03o`000?n`^n7o/;_Q00?o00000_nb^]l0 0ol0003o[K_Tojfki006ojfki0?o00001OnY^nH00ol0003oWk_/oinkk004oinkk0Ko00000onG^Nl0 0ol0003oPkCeoh>dm@04oh>dm@04o`000?mVZOOoIZWgofJYm`Ko000000?o[bP0o`000?nZ8P001Ol0 0005ooooo`?o00004?ooool00ol0003oooooooooo`07ooooo`005Oooool00ol0003oooooooooo`0I ooooo`?o00006Oooool00ol0003oZK?OojVcg`03o`0000;oZK;O00?o0000oj^cg_n[/mh01On[/mh0 0ol0003o[K?Mojfcg@03o`0000?o[K?L00?o0000ojncg?n_/m`01On_/m`01?l0003o/;CLo`000?l0 0004ok6df`03o`000?nb]M_o/[GK00Go/[GK0_l00008ok>efP04o`000?nd]]_o0000o`0000Go]KKI 00?o0000okFgf_ne]mX01One]mX2o`0000Oo][OJ00Co0000okBig?l0003o00001Onf^=/00ol0003o ];WMokBig@02okBig@?o000000?o][WKo`000?nc^]h01_nc^]h3o`0000Ko/[[O00?o0000ojfki?n] ^n@00_n]^n@3o`000003ok2kh_l0003oZK_V00KoZK_V00?o0000oinkk?nO^n`00ol00002oj>kjP03 o`000?nG^NooUkW_00GoUkW_00?o0000oh>dmOn3]?D01?n3]?D00ol0003oIZWgofJYm`03ofJYm`07 o`000?lkUO;o0000o`000?n_:03o0000ojXR0005o`000004ooooool0003o0000o`0001?ooooo00?o 0000ooooooooool01oooool001Gooooo0_l0000Gooooo`?o00007Oooool2o`0000KoZK;O00?o0000 oj^cg_n[/mh01?n[/mh3o`0000Oo[K?L00?o0000ojncg?n_/m`01?n_/m`2o`0000Oo/KCK00?o0000 ok:efonb]M/00_nb]M/2o`000003ok:df_l0003o/kGJ00Oo/kGJ0_l00008okFff@04o`000?ne]m[o ]KOJokFgfP?o000000?o][KIo`000?nf]mX01_nf]mX2o`0000So][SK00Co0000okBigOl0003o0000 1Onf^M/00ol0003o/k[Nok>jgP02ok>jgP;o000000?o]KWLo`000?nb^]l01onb^]l01?l0003o[K_T o`000?l00005ok2khP03o`000?nY^nKoZK_V00CoZK_V0ol00006oj>kjP03o`000?nG^NooUkW_00Co UkW_00?o0000oh>dmOn3]?D00_n3]?D8o`000003ofJYmol0003o>iGb00;o000000?o[bP0o`000?nZ 8P000_l000001?nO5P3o0000o`000?l0000Eooooo`03o`000?oooooooooo00Oooooo00001?oooooo 0000o`000?l00004ooooo`;o00001?ooool2o`0000Gooooo00?o0000ooooooooool04oooool3o`00 023ooooo00?o0000ojVbgonY/]l01_nY/]l00ol0003oZk?Noj^cgP03o`000003oj^bgOl0003o[K?L 00So[K?L00?o0000ojncg?n_/m`00ol000000on_/m_o0000ok6df`07ok6df`04o`000?nb]M_o0000 o`0000Co/[CJ00?o0000ok>ef_nc]MX01?nc]MX00ol0003o];CIo`000008okFff@04o`000?ne]m[o 0000o`0000Go][KI00?o0000okJgf_nf]mX00_nf]mX2o`000003okNgfOl0003o][SK00Oo][SK0_l0 0008okJif`04o`000?nc^]ko0000o`0000Co]KWL00?o0000ok:jgonb^]l01Onb^]l2o`0000So/;_R 00?o0000ojVki_nY^nH00ol000000on/^nCo0000oj>kjP07oj>kjP04o`000?nG^NooUkW_oiNik`Oo 00001?n9]_<01?l0003oKjggofn]mom_[OL6o`000003ojlX0?l0003oZR8000;o000000CoWaH0o`00 0?l0003o00005?ooool00ol0003oooooooooo`07ooooo`0000Go0000ooooooooooooooooo`000002 ooooo`04o`000?ooooooooooo`0000;ooooo00Co0000oooooooooooo00000oooool00ol0003ooooo ooooo`0Booooo`;o00009?ooool00ol0003oZK;OojVbg`05ojVbg`?o00001On[/]d00ol0003o[K?L ojfcg006ojfcg0?o00001On_/m/00ol0003o/KCKok6df`05ok6df`;o00001onb]=X01?l0003o/kGJ ok>ef_nc]MX2o`0000?o];CI00?o0000okFffOne]]T01One]]T2o`0000So][KI00Co0000okJgf_l0 003o00001?ng]mT00ol0003o][SKokJhf`04okJhf`03o`000?ng]mWo000000So][WK0_l00007okFi g003o`000?nb^]oo/[[O00;o/[[O0_l000000ond^]ko0000ok2khP07ok2khP?o00001On/^n@00ol0 003oXk_Zoj>kjP04oj>kjPGo00001?nK^^h00ol0003oRKKcohVfl`05ohVfl`03o`000?m_[OOoKjgg 00?oKjgg0_l000001Om8VoCo0000ojlX0?l0003oZR8000;o000000CoWaH0o`000?l0003o00004ooo ool00ol0003oooooooooo`07ooooo`0000Go0000ooooooooooooooooo`000002ooooo`04o`000?oo ooooooooo`0000;ooooo00Co0000oooooooooooo00000oooool00ol0003oooooooooo`0?ooooo`?o 00009oooool00ol0003oZK;OojVbg`02ojVbg`;o000000?oZK7No`000?n[/]d01_n[/]d00ol0003o [K?Lojfcg002ojfcg0?o000000?o[[;Ko`000?n_/m/01_n_/m/00ol0003o/KCKok6df`02ok6df`;o 000000?o/K?Jo`000?nb]=X01onb]=X00ol0003o/kGJo`000006okBdf@03o`000?ne]]Wo]KKI00;o ]KKI0_l000000onf]MSo0000okJff@07okJff@;o00001ong]mT01?l0003o][SKokJhfonf^=/2o`00 00?o]kOI00?o0000okJifonf^M/01?nf^M/00ol0003o]kSJo`000008okFig004o`000?nb^]oo0000 o`0000Co];[N00?o0000ok2kh_n`^n800_n`^n83o`000003ok:kh?l0003o[;_T00Ko[;_T00?o0000 oj>kj_nS^nX00ol00003ojNkj003o`000?nK^^koVk[^00CoVk[^00?o0000ohVflon9]_<00_n9]_<8 o`000004ofn]mol0003o0000odRKm0?o000000CoZR80o`000?l0003oWaH00ol0000Booooo`03o`00 0?oooooooooo00Oooooo00001?oooooo0000o`000?l00003ooooo`04o`000?ooooooooooo`0000;o oooo00Co0000oooooooooooo00000oooool2o`0000gooooo0ol0000[ooooo`04o`000?nY/]oo0000 o`0000CoZK7N00?o0000oj^bgOn[/]d01On[/]d01?l0003o[K?Lo`000?l00005ojjbf`03o`000?n_ /m_o[k?K00Go[k?K00Co0000ok6dfol0003o00001?na/mX00ol0003o/[CJok:dfP05ok:dfP;o0000 2?nd]=T01?l0003o]KKIo`000?l00004okJef003o`000?nf]]Wo][KI00Co][KI00?o0000okNff?l0 00002?ng]mT00ol0003o][SKo`000006okNgf@04o`000?nf^M_o][WKokJif`;o00000ong^=X00ol0 003o]KWLokFig005okFig0;o00001ond^]h01?l0003o/;_Ro`000?l00005ok:kh003o`000?n/^nCo [;_T00Co[;_T0ol00007ojNkj004o`000?nK^^koVk[^oi^jkPOo00001?n@]o401?l0003oN;3fogR` m_mh/?H;o`000003oilF0?l0003o000000;o00004?ooool00ol0003oooooooooo`07ooooo`0000Go 0000ooooooooooooooooo`000002ooooo`04o`000?ooooooooooo`0000;ooooo00Co0000oooooooo oooo00000oooool00ol0003oooooooooo`09ooooo`?o0000;oooool00ol0003oZK7NojVagP05ojVa gP03o`000?n[/]goZk;M00CoZk;M0_l00008ojjbf`03o`000?n_/m_o[k?K00?o[k?K0ol00007ok6c fP03o`000?nb]=[o/[CJ00;o/[CJ0_l00002ok>cf@03o`000?nd]=Wo];CI00Go];CI0_l00007okJe f004o`000?nf]]Wo][KIokJff@;o00000ong]]P00ol0003o]kOIokNgf@05okNgf@;o00002?ng]mT0 0ol0003o][WKo`000006okNhfP04o`000?ne^Mco]KWLokFig0?o000000?o]kWKo`000?nd^]h01_nd ^]h2o`0000So/[_P00?o0000ojbki?n/^n@00ol00002ojnkhP03o`000?nW^nSoYk_X00CoYk_X1Ol0 0004oj2jk003o`000?n@]o7oT;Oa00GoT;Oa00?o0000ogR`m_mh/?H00omh/?H2o`0000;oDj7f1Ol0 00000onO5P3o0000o`000002o`00013ooooo00?o0000ooooooooool01_ooool00005o`000?oooooo ooooooooool000000_ooool01?l0003oooooooooool00002ooooo`04o`000?ooooooooooo`0000?o oooo00?o0000ooooooooool01_ooool3o`0003?ooooo00?o0000ojVag_nY/Mh01OnY/Mh00ol0003o Zk;Moj^bg@03o`000003ojbag?l0003o[[;K00Oo[[;K00?o0000ojncfon_/m/00ol00002ok2bfP03 o`000?na/m[o/K?J00Ko/K?J00Co0000ok:df_l0003o00001Onc/mT00ol0003o];CIokBdf@02okBd f@;o000000?o]KCHo`000?nf]MP01onf]MP00ol0003o][KIo`000006okNff003o`000?ng]mWo]kOI 00;o]kOI0_l000000onh]]So0000okNgf@07okNgf@;o00001ong^=X01?l0003o]KWLo`000?l00005 okNif`03o`000?nd^]ko];[N00;o];[N0_l000000onf^]co0000ok:kh007ok:kh0?o00001_n_^n80 0ol0003oYk_XojNkj003o`0000;oZ[_V00?o0000oj2jk?nP^^`01OnP^^`00ol0003oT;Oaoi2gl@02 oi2gl@So000000?oN;3fo`000?mCXOH01?mCXOH9o`0000kooooo00?o0000ooooooooool01_ooool0 0004ooooool0003o0000o`0000Cooooo0_l00004ooooo`;o00001?ooool2o`0000Cooooo0ol0000g ooooo`03o`000?nY/MkoZK7N00CoZK7N0ol00005ojbag003o`000?n^/]_o[[;K00Go[[;K0ol00006 ok2bfP03o`000?na/m[o/K?J00Co/K?J0ol00008ok>cf@04o`000?nd]=Wo0000o`0000Co]KCH00?o 0000okJef?nf]MP01Onf]MP2o`0000So]kKH00Co0000okNgfOl0003o00001?nh]]P00ol0003o]kOI okNgf@02okNgf@?o000000?o^;OHo`000?ng^=X01_ng^=X2o`0000So]kWK00Co0000okBjg_l0003o 00001?nf^]`00ol0003o/[_Pok:kh002ok:kh0?o000000?o];[No`000?n_^n801_n_^n83o`0000Ko Z[_V00?o0000oj2jk?nP^^`00onP^^`6o`0000Sooooo1ol000001?mCXOKo0000ob66j_lQQ^X6o`00 00gooooo00?o0000ooooooooool01_ooool001?ooooo00Co0000oooooooooooooooo0ol0000koooo o`03o`000?nY/MkoZK7N00?o000000?oZK3Mo`000?n//M`01_n//M`00ol0003o[[;Kojjbf`02ojjb f`;o000000?o[[7Ko`000?n`/]X01on`/]X00ol0003o/K?Jok6cfP03o`0000;o/[;I00?o0000ok>c fOnc/mT01_nc/mT2o`0000Oo]KCH00Co0000okJef?nf]MSo][GH0ol000000onf]=Oo0000okNff007 okNff0;o00001onh]]P01?l0003o]kOIo`000?l00005okRgf003o`000?ng^=[o]kSJ00;o]kSJ0_l0 00000onh^=So0000okNif`07okNif`;o00001onf^]`01?l0003o/[_Po`000?l00005okBjgP03o`00 0?n_^n;o[k_R00;o[k_R0_l000000ona^n7o0000ojZkiP06ojZkiP03o`000?nP^^coX;[/00?o0000 4Oooool01?l0003oooooooooooooool5o`000006ob66j_l0003o0000o`000?n;003o00003?ooool0 0ol0003oooooooooo`06ooooo`004oooool4o`0003oooooo0_l00005ojV`g@03o`000?n//Mco[;7L 00Go[;7L00Co0000ojjbfol0003o00001?n^/M/00ol0003o/;;Jok2bfP05ok2bfP?o00001_nb/]T0 0ol0003o/k?Iok>cf@02ok>cf@?o000000?o/k?Ho`000?ne]=P01_ne]=P01?l0003o][GHo`000?l0 0005okJde`03o`000?ng]]So]kKH00;o]kKH0ol000000onh]MOo0000okRff006okRff0;o00002?nh ]mP01?l0003o]kSJo`000?l00004okRhf003o`000?ng^M_o]kWK00;o]kWK0ol000000onh^=Wo0000 okJjg006okJjg0;o00002?nd^]h01?l0003o[k_Ro`000?l00004ok6kh@03o`000?nZ^nKoZ[_V00Co Z[_V0ol0000Dooooo`03o`000?oooooooooo00Kooooo1Ol000000on;003o0000ooooo`0:ooooo`03 o`000?oooooooooo00Kooooo000Cooooo`;o0000@Oooool00ol0003oZK3MojV`g@05ojV`g@03o`00 0?n//Mco[;7L00Co[;7L0_l00007ojjaf`03o`000?n`/][o/;;J00;o/;;J0_l000000on`/MWo0000 ok:bf@07ok:bf@04o`000?nc/mWo0000o`0000Go/k?H00?o0000okFdf?ne]=P01?ne]=P2o`0000So ][CG00Co0000okNff?l0003o00001Onh]ML00ol0003o^;KHokRff003okRff003o`000?ni]]Ko0000 00So^;OH0_l00007okRhf004o`000?ng^M_o0000o`0000Go^;SI00?o0000okJjg?nf^]`00_nf^]`2 o`000003okNif_l0003o];[N00Oo];[N0_l00007ok6kh@03o`000?nZ^nKoZ[_V00?o00006?ooool0 0ol0003oooooooooo`08ooooo`Ko00002Oooool00ol0003oooooooooo`06ooooo`005Oooool00ol0 003oooooooooo`0oooooo`03o`000?nY/=goZK3M00GoZK3M00?o0000ojbag?n//M`00ol000000on/ /=_o0000ojjaf`07ojjaf`04o`000?n`/][o0000o`0000Co/;7I00?o0000ok:bfOnb/]T01Onb/]T2 o`0000So/k?H00Co0000okFdf?ne]=So]KCH0_l000000one/mOo0000okJde`07okJde`;o00002?nh ]ML00ol0003o^;KHokRff002o`0000?o^KKF00?o0000okRgf?nh]mP01?nh]mP00ol0003o^KKFo`00 0007okRhf0;o00002?nh^=T01?l0003o][[Lo`000?l00004okNifP03o`000?nd^]ko];[N00;o];[N 0ol000000onf^]co0000ok6kh@06ok6kh@?o00007?ooool00ol0003oooooooooo`0:ooooo`Co0000 2?ooool00ol0003oooooooooo`06ooooo`005_ooool00ol0003oooooooooo`0oooooo`03o`000?nY /=goZK3M00CoZK3M0ol00005ojb`f`03o`000?n^/M_o[[7K00Go[[7K0_l00007ok2af@03o`000?nb /]Wo/[;I00;o/[;I0_l000000onb/]So0000ok>cf007ok>cf004o`000?ne]=So0000o`0000Co]K?G 00?o0000okJdeonf]=L01?nf]=L00ol0003o]kCFo`000008okRee`03o`000?nh]]So000000Ko^KKF 00Co0000okRgf?nh]mSo^;OH0_l00003okVfeP03o`000?nh^=So^;SH00?o^;SH00Co0000okZgeonj ]mOo00001onh^=T2o`0000Oo]kWJ00Co0000okBjg_l0003o00001Onf^]`00ol0003o/K_Qok6kh@02 ok6kh@;o00008?ooool00ol0003oooooooooo`0;ooooo`Co00001_ooool00ol0003oooooooooo`06 ooooo`005oooool00ol0003oooooooooo`0oooooo`03o`000?nY/=goZK3M00?o000000?oZJoLo`00 0?n//=/01_n//=/00ol0003o[[7Kojjaf`02ojjaf`;o000000?o[[3Jo`000?n`/MT01on`/MT01?l0 003o/[;Io`000?l00004ok:bf003o`000?nc/mSo/k?H00Go/k?H0_l00007okFce`04o`000?nf]=Oo ][CGokJde`;o00000ong]=H00ol0003o^;GGokRee`05okRee`;o00002?ni]]H00ol0003o^;OHo`00 0006okVfeP03o`000?nh^=So^;SH00;o00001?nj]mL00ol0003o^;SIokRhf@02okRhf@;o000000?o ^[SHo`000?ng^MX01_ng^MX2o`0000So][[L00Co0000ok6khOl0003o00008_ooool00ol0003ooooo ooooo`0=ooooo`?o00001_ooool00ol0003oooooooooo`05ooooo`006?ooool2o`00043ooooo0_l0 0005ojV_g003o`000?n//=_o[;3K00Go[;3K00Co0000ojjafol0003o00001?n^/=X00ol0003o/;7I ok2af@05ok2af@;o00001onb/]P00ol0003o/k?Hok>cf002ok>cf0;o000000?o];;Go`000?ne/mL0 1one/mL00ol0003o][CGo`000006okNdeP03o`000?nh]MOo^;GG00;o^;GG0_l000000onh]=Go0000 okVfeP07okVfeP;o00001oni]]H00ol0003o^;SHo`000007okZge`04o`000?nh^=Wo0000o`0000Co ^[SH00?o0000okNif_ng^MX00_ng^MX2o`000003okVifOl0003o][[L00Oo][[L0_l0000Uooooo`03 o`000?oooooooooo00kooooo0_l00005ooooo`03o`000?oooooooooo00Gooooo000Jooooo`03o`00 0?oooooooooo03gooooo00?o0000ojV_g?nY[m`01OnY[m`00ol0003o[;3Kojb`f`04ojb`f`;o0000 1on^/=X00ol0003o/;7Iok2af@02ok2af@;o000000?o/;7Ho`000?nb/]P01onb/]P01?l0003o/k?H o`000?l00004okBbe`03o`000?ne/mOo]K?G00Go]K?G0_l00008okNdeP04o`000?nh]MOo0000o`00 00Co^;CE00?o0000okVfe_ni]]H00_ni]]H3o`000003okVeeOl0003o^KKF00Ko^KKF0_l00008okZg e`;o00001onj^=P01?l0003o]kWJo`000?l00004okVif@03o`000?nf^]co][[L00;o][[L0ol0000X ooooo`03o`000?oooooooooo00oooooo0_l00003ooooo`03o`000?oooooooooo00Gooooo000Koooo o`03o`000?oooooooooo03gooooo00?o0000ojV_g?nY[m`01OnY[m`00ol0003o[;3Kojb`f`03o`00 00;o[:oJ00?o0000ojj`f_n^/=X01On^/=X01?l0003o/;7Io`000?l00004ok2af003o`000?nb/]So /[;H00Go/[;H0_l00007okBbe`03o`000?ne/mOo]K?G00;o]K?G0_l000000onf/]Ko0000okNdeP07 okNdeP;o00001onh]=D01?l0003o^KKFo`000?l00005okVee@03o`000?ni]]Ko^KKF00;o^KKF0_l0 00000onj]]Go0000okZge`05okZge`;o000000?o^kOEo`000?nj^=P01_nj^=P2o`0000Oo^KWI00Co 0000okJjg?l0003o0000;?ooool00ol0003oooooooooo`0?ooooo`;o00000_ooool00ol0003ooooo ooooo`05ooooo`007?ooool00ol0003oooooooooo`0mooooo`03o`000?nY[mcoZJoL00CoZJoL0ol0 0006ojb_fP03o`000?n^/=[o[[3J00Co[[3J0_l00007ok2af003o`000?nb/]So/[;H00;o/[;H0_l0 00000onb/MOo0000okBbe`07okBbe`04o`000?ne/mOo0000o`0000Co][;F00?o0000okNde_ng]=H0 0_ng]=H3o`000003okRceOl0003o^;CE00Ko^;CE0_l00008okVee@04o`000?ni]]Ko0000o`0000Co ^[KE00?o0000okZgeonj]mL00_nj]mL00ol0003o^kOEok^ge@02ok^ge@03o`000?nj^=So^[SH00?o ^[SH00?o0000ok^ge_l000001oni^MT2o`0002kooooo00?o0000ooooooooool04Oooool3o`0000Oo oooo000Mooooo`;o0000?_ooool00ol0003oZJoLojV_g003o`000003ojV_fol0003o[:oJ00Oo[:oJ 00?o0000ojj`f_n^/=X00ol000000on^/=Wo0000ok2af007ok2af004o`000?nb/]So0000o`0000Co /[7G00?o0000okBbeond/]L01Ond/]L2o`0000Oo][;F00Co0000okNde_l0003o00001Onh/mD00ol0 003o^;CEokRde@03okRde@03o`000?ni]=Co000000So^KGE0_l00007okZfe@04o`000?nj]mOo0000 o`0000Ko^kOE00?o0000okZhf?nj^=P00_l00003ok^geP03o`000?ni^MWo^KWI00?o^KWI00?o0000 ooooooooool0;oooool00ol0003oooooooooo`0Booooo`03o`000?oooooooooo00Gooooo000Ooooo o`03o`000?oooooooooo03cooooo0_l00005ojV_f`03o`000?n/[m[o[:oJ00Go[:oJ0ol00005ojj` f@03o`000?n`/MSo/;7H00Go/;7H0_l00007ok:ae`04o`000?nd/]Oo];;GokBbe`?o000000?o];7F o`000?nf/]H01_nf/]H2o`0000So^;?E00?o0000okRdeOnh]=D00_l00003okVde003o`000?ni]MGo ^KGE00Co^KGE00?o0000okZde?l000001onj]]D2o`0000So^kOE00?o0000okZhf?l000001_nk]mH0 0ol0003o^KWIokVif@02o`0003?ooooo00?o0000ooooooooool04Oooool2o`0000Kooooo000Poooo o`03o`000?oooooooooo03_ooooo00?o0000ojV_fonY[m/01OnY[m/00ol0003o[:oJojb_fP02ojb_ fP;o000000?o[:oJo`000?n^/=T01_n^/=T00ol0003o/;7Hok2af002ok2af0;o000000?o/K3Go`00 0?nb/ML01_nb/ML01?l0003o];;Go`000?l00005okBaeP03o`000?nf/]Ko][;F00?o][;F00?o0000 okNbe?l000002?nh/mD00ol0003o^;CEo`000006okVde004o`000?ni]MGo^KGEokVee@;o00000onj ]=@00ol0003o^[KEokZfe@03okZfe@03o`000?nk]MCo000000So^kOE0_l00007ok^geP03o`000?ni ^MWo000003Gooooo00?o0000ooooooooool04_ooool00ol0003oooooooooo`04ooooo`008Oooool0 0ol0003oooooooooo`0kooooo`03o`000?nY[m_oZJoK00GoZJoK00Co0000ojb_f_l0003o00001?n/ [mX00ol0003o[[3Iojj`f@05ojj`f@04o`000?n`/MSo0000o`0000Co/K3G00?o0000ok:aeonb/ML0 1?nb/ML2o`0000So];7F00?o0000okJbe_nf/]H00_l00003okNbe003o`000?nh/mGo^;?E00Go^;?E 0_l00008okVde003o`000?ni]MGo000000Ko^[CD00?o0000okZfeOnj]]D00_l00003ok^ee003o`00 0?nk]mGo^kOE00?o^kOE0_l000000onl]]Co0000ok^geP06ok^geP;o0000=oooool00ol0003ooooo ooooo`0Aooooo`03o`000?oooooooooo00Cooooo000Rooooo`;o0000??ooool00ol0003oZJoKojV_ f`04ojV_f`;o00001on/[mX00ol0003o[[3Iojj`f@03ojj`f@?o00001ona/=L01?l0003o/[7Gok:a eonb/ML2o`000003ok>`e_l0003o];7F00Oo];7F00?o0000okJbe_l000001_ng/]@00ol0003o^;?E okRce@02okRce@;o000000?o^;;Co`000?ni]=@01oni]=@2o`0000Oo^[CD00?o0000okZfeOl00000 1_nk]M@01Ol0003o^kOEok^geOnk]mGo000000Co_;KD00?o0000ok^ge_nk]mH00_nk]mH2o`0003[o oooo00?o0000ooooooooool04?ooool00ol0003oooooooooo`04ooooo`009?ooool00ol0003ooooo ooooo`0jooooo`03o`000?nY[m_oZJoK00?o000000?oZJkKo`000?n/[mX01_n/[mX00ol0003o[[3I ojj`f@03o`0000;o[ZoH00?o0000ok6`eona/=L01Ona/=L01?l0003o/[7Go`000?l00004ok>`eP03 o`000?nd/MKo];7F00Go];7F0_l00008okNbe004o`000?nh/mGo0000o`0000Co^;;C00?o0000okVd e?ni]=@00_ni]=@3o`000003okZcdol0003o^[CD00Ko^[CD0_l00007ok^ee004o`000?nk]mGo0000 o`0000Ko_;KD00Co0000ok^ge_l0003o0000?Oooool00ol0003oooooooooo`0?ooooo`03o`000?oo oooooooo00Cooooo000Uooooo`03o`000?oooooooooo03[ooooo0_l00005ojV^f`03o`000?n/[m[o [:oJ00Co[:oJ0ol00006ojj_f003o`000?na/=Oo/K3G00Co/K3G0_l00007ok>`eP03o`000?nd/MKo ];7F00;o];7F0_l000000one/MCo0000okNbe007okNbe0;o00001onh/]<01?l0003o^KCDo`000?l0 0005okZcd`03o`000?nj]=Co^[CD00?o^[CD00?o0000ok^dd_l000001onk]M@2o`0000So_;KD0_l0 000oooooo`03o`000?oooooooooo00oooooo00?o0000ooooooooool01?ooool002Kooooo00?o0000 ooooooooool0>Oooool00ol0003oZJkKojV^f`05ojV^f`03o`000?n/[m[o[:oJ00?o000000?o[:kI o`000?n^[mP01on^[mP01?l0003o/K3Gok6`eona/=L2o`000003ok6_e_l0003o/k3F00Oo/k3F00Co 0000okBae_l0003o00001?ne/M@00ol0003o]k;DokNbe004okNbe003o`000?ng/M?o000000Oo^;;C 0_l00008okZcd`03o`000?nj]=Co^[CD00;o00000onk]=800ol0003o^kGDok^ee002ok^ee0;o0000 0_nl]=800ol0003o_;KDokbfe004okbfe003o`000?oooooooooo043ooooo00?o0000ooooooooool0 3_ooool00ol0003oooooooooo`04ooooo`009oooool2o`0003[ooooo00?o0000ojV^fonY[]/01?nY []/3o`0000Go[:kI00?o0000ojj_f?n^[mP01On^[mP01?l0003o/K3Go`000?l00004ok6_eP03o`00 0?nc/=Ko/k3F00Go/k3F0_l00007okFae004o`000?ng/]Co]k;DokNbe0;o00000ong/M<00ol0003o ^;;CokRbd`03okRbd`03o`000?ni/];o000000So^[?C00?o0000okZde?l000001_nk]=801?l0003o ^kGDo`000?l00005okbddP04o`000?nl]]Co_;KDokbfe0;o0000A?ooool00ol0003oooooooooo`0= ooooo`03o`000?oooooooooo00Cooooo000Yooooo`03o`000?oooooooooo03Sooooo00?o0000ojV^ fonY[]/00ol000000onY[M[o0000ojb^f@06ojb^f@03o`000?n^[mSo[ZoH00Co[ZoH0_l00007ok6_ eP03o`000?nc/=Ko/k3F00;o/k3F0_l000000onc[mGo0000okFae007okFae003o`000?ng/]Co0000 00Ko]k7C00?o0000okRbdonh/]<00_l00003okVbdP03o`000?nj/m?o^[?C00Go^[?C0_l00007ok^d dP;o00002?nl]=800ol0003o_;KDo`000017ooooo`03o`000?oooooooooo00cooooo00?o0000oooo ooooool01?ooool002[ooooo00?o0000ooooooooool0>?ooool2o`0000GoZJgJ00?o0000ojb^fOn/ []T01On/[]T00ol0003o[ZoHojj_f003o`000003ojn^eol0003o/JoF00Oo/JoF00Co0000ok>`e_l0 003o00001?nc[mD00ol0003o]K7DokFae005okFae0;o00001ong/M<00ol0003o^;;Co`000006okVb dP03o`000?nj/m?o^[?C00;o^[?C0_l000000onj/];o0000ok^ddP05ok^ddP03o`000?nl/m7o0000 00So_;CB0_l00018ooooo`03o`000?oooooooooo00gooooo00?o0000ooooooooool00oooool002_o oooo00?o0000ooooooooool0=oooool00ol0003oZJgJojV]fP05ojV]fP03o`000?n/[]Wo[:kI00Co [:kI0ol00005ojn^e`03o`000?na[mKo/JoF00Go/JoF0_l00007ok>_e@04o`000?ne/MCo]K7DokFa e0?o000000?o][3Co`000?ng/M<01_ng/M<2o`0000So^K;B00Co0000okZcdol0003o00001?nj/]80 1?l0003o^kCBok^dd_nk]=82o`0000?o_;?A00?o0000okbdd_nl]=800onl]=82o`0004_ooooo00?o 0000ooooooooool03?ooool00ol0003oooooooooo`03ooooo`00;?ooool2o`0003Sooooo00?o0000 ojV]f_nY[MX01OnY[MX00ol0003o[:kIojb^f@03o`000003ojb]f?l0003o[jkG00Ko[jkG00?o0000 ok6_e_na[mH00_na[mH2o`000003ok6^eOl0003o/joE00Ko/joE00Co0000okFae?l0003o00001Onf /=<00ol0003o]k7CokNad`02okNad`;o000000?o^;7Bo`000?ni/]801oni/]82o`0000Oo^[;B00?o 0000ok^dd_l000001_nl/m401Ol0003o_;CBokbdd_nl]=;o000004kooooo00?o0000ooooooooool0 2oooool00ol0003oooooooooo`03ooooo`00;_ooool00ol0003oooooooooo`0fooooo`03o`000?nY [M[oZJgJ00CoZJgJ0ol00005ojb]f003o`000?n_[]Oo[jkG00Go[jkG00Co0000ok6_e_l0003o0000 1?na[]D00ol0003o/joEok>_e@04ok>_e@;o00002?nf/=<01?l0003o]k7Co`000?l00004okRadP03 o`000?ni/];o^K;B00Co^K;B00?o0000okVadOl000001onj/]82o`0000Oo_;?A00Co0000okbdd_l0 003o0000D?ooool00ol0003oooooooooo`0:ooooo`03o`000?oooooooooo00?ooooo000_ooooo`03 o`000?oooooooooo03Kooooo00?o0000ojV]f_nY[MX00ol000000onY[=Wo0000ojb]f006ojb]f003 o`000?n_[]Oo[jkG00Co[jkG0_l00007ok6^e@04o`000?nc[mGo/joEok>_e@;o000000?o/joDo`00 0?nf/=<01onf/=<2o`0000Oo^;7B00Co0000okVbd_ni/];o^K;B0_l00003okVad@03o`000?nj/];o ^[;B00?o^[;B00?o0000ok^bdOl000001onl/m42o`0005;ooooo00?o0000ooooooooool02_ooool0 0ol0003oooooooooo`03ooooo`00_e003o`000?nf/=?o][3C00Co][3C00?o0000okJ_d_l000002?nh/M80 0ol0003o^K;Bo`000006okVad@03o`000?nj/];o^[;B00;o00000onk/]400ol0003o_;?Aokbcd@03 okbcd@03o`000?oooooooooo05?ooooo00?o0000ooooooooool02Oooool00ol0003oooooooooo`03 ooooo`00_ e?nc[m@01Onc[m@2o`0000Oo]ZoB00Co0000okRad_l0003o00001Onh/=400ol0003o^K7AokVad@03 okVad@03o`000?nj/M3o000000Oo^k;A0_l0001Kooooo`03o`000?oooooooooo00Sooooo00?o0000 ooooooooool00_ooool003Gooooo00?o0000ooooooooool0=?ooool00ol0003oZJcIojV/f@03o`00 0003ojV[f?l0003o[:cG00Ko[:cG00Co0000ojn]e_n_[MKo[jgF0_l000000on_[MGo0000ok6^e006 ok6^e003o`000?nc[mCo/joD00;o/joD0_l000000ond[]?o0000okJ_dP06okJ_dP;o00002?nh/=40 0ol0003o^K7AokVad@02o`0000?o^[7@00?o0000ok^bdOnk/]400onk/]400ol0003oooooooooo`1L ooooo`03o`000?oooooooooo00Oooooo00?o0000ooooooooool00_ooool003Kooooo0_l0000eoooo o`;o00001OnYZmP00ol0003o[:cGojb/e`04ojb/e`04o`000?n_[MKo0000o`0000Co[jgE00?o0000 ok6^e?na[]@01Ona[]@01?l0003o/joDo`000?l00004okB^d`03o`000?nf[m;o]ZoB00?o]ZoB00?o 0000okJ_dOl000002?nh/=400ol0003o^K7Ao`000006okZad003o`000?nk/]7o^k;A00;o0000H?oo ool00ol0003oooooooooo`06ooooo`03o`000?oooooooooo00;ooooo000hooooo`03o`000?oooooo oooo03;ooooo00?o0000ojV[f?nYZmP01OnYZmP00ol0003o[:cGojb/e`03ojb/e`;o00001on_[MD0 0ol0003o/JkDok6^e004ok6^e0;o00001ond[]<00ol0003o]ZoBokJ_dP02o`0000?o]ZoA00?o0000 okR`dOnh/=401Onh/=42o`0000Oo^[7@00?o0000ok^bdOl00000H_ooool00ol0003oooooooooo`06 ooooo`03o`000?oooooooooo00;ooooo000iooooo`03o`000?oooooooooo03;ooooo00?o0000ojV[ f?nYZmP01?nYZmP00ol0003o[:cGojb/e`03o`000003ojb[e_l0003o[jgE00Oo[jgE00?o0000ok6^ e?na[]@00ol000000onb[M?o0000okB^d`06okB^d`03o`000?nf[m;o000000Ko]ZoA00?o0000okR` dOnh/=400_nh/=42o`000003okR_d?l0003o^[7@00Ko^[7@0_l0001Tooooo`03o`000?oooooooooo 00Gooooo00?o0000ooooooooool00_ooool003[ooooo00?o0000ooooooooool0<_ooool00ol0003o ZJ_HojV[f003ojV[f0?o00001On/ZmH00ol0003o[jgEojn]e@05ojn]e@?o00001Onb[M<00ol0003o ]:kCokB^d`04okB^d`;o00002?nf[m401?l0003o^;3Ao`000?l00004okR_d003o`000?nj/M3o^[7@ 00?o^[7@00?o0000ooooooooool0IOooool00ol0003oooooooooo`04ooooo`03o`000?oooooooooo 00;ooooo000kooooo`;o0000<_ooool00ol0003oZJ_HojV[f003o`000003ojVZf?l0003o[:_F00Ko [:_F00?o0000ojn]eOn_[MD00_n_[MD2o`000003ojn/e?l0003o/ZgC00Ko/ZgC00Co0000okB^dond []?o]:kC0_l000000ond[];o0000okJ_d@07okJ_d@;o00001onh[m000ol0003o^[7@okZad002o`00 06Wooooo00?o0000ooooooooool00oooool00ol0003oooooooooo`02ooooo`00?Oooool00ol0003o ooooooooo`0`ooooo`;o00001OnYZ]P00ol0003o[:_Fojb[eP05ojb[eP04o`000?n_[MGo0000o`00 00Co[jcD00?o0000ok:]donb[M<01?nb[M<01?l0003o]:kCo`000?l00004okB^dP03o`000?nf[m7o ]ZoA00Co]ZoA00?o0000okN^dOl000001onh[m000ol0003o^[7@o`00001[ooooo`03o`000?oooooo oooo00Cooooo00?o0000ooooooooool00Oooool003kooooo00?o0000ooooooooool0;oooool00ol0 003oZJ[HojVZf005ojVZf003o`000?n/ZmKo[:_F00Co[:_F0_l00007ojn/e003o`000?nb[M?o/ZgC 00?o/ZgC0_l00007okB^dP04o`000?nf[m7o]ZoAokJ_d@;o00000ong[]400ol0003o^:o@okR_d004 okR_d0;o0000KOooool00ol0003oooooooooo`03ooooo`03o`000?oooooooooo007ooooo000ooooo o`03o`000?oooooooooo02oooooo00?o0000ojVZf?nYZ]P01OnYZ]P00ol0003o[:_Fojb[eP03o`00 0003ojb[e_l0003o[jcD00Ko[jcD00?o0000ok:]donb[M<00ol000000onb[=?o0000okB^dP07okB^ dP03o`000?nf[m7o000000Ko]jkA00Co0000okR_d?nh[m3o^:o@0_l0001`ooooo`03o`000?oooooo oooo00;ooooo00?o0000ooooooooool00Oooool0043ooooo0_l0000`ooooo`03o`000?nYZ]SoZJ[H 00CoZJ[H0ol00005ojb[eP03o`000?n_[=Co[jcD00Co[jcD0ol00005ok:/d`03o`000?nd[];o]:kB 00Go]:kB0_l00007okN^d@04o`000?nh[m3o0000o`0007?ooooo00Go0000ooooooooooooooooo`00 0003ooooo`00@_ooool00ol0003oooooooooo`0^ooooo`03o`000?nYZ]SoZJ[H00?o000000?oZJWG o`000?n/ZmH01_n/ZmH01?l0003o[jcDojn/e?n_[=@2o`000003ojn[e?l0003o/ZcC00Ko/ZcC00?o 0000okB^d_nd[]800_nd[]82o`000003okB]dOl0003o]jkA00Ko]jkA0_l0001eooooo`05o`000?oo ooooooooooooool000000oooool004?ooooo00?o0000ooooooooool0;_ooool2o`0000GoZJWG00?o 0000ojb[e_n/ZmH01?n/ZmH01?l0003o[jcDo`000?l00004ojn[e003o`000?nb[=?o/ZcC00Go/ZcC 00Co0000okB^d_l0003o00001?nd[M400ol0003o]jkAokN^d@02okN^d@;o0000N?ooool01?l0003o ooooooooool00003ooooo`00A?ooool00ol0003oooooooooo`0]ooooo`03o`000?nYZMOoZJWG00Go ZJWG00?o0000ojb[e_n/ZmH00on/ZmH2o`0000Oo[j_D00?o0000ok:/donb[=<01?nb[=<2o`0000Oo ]:gA00Co0000okN^dOl0003o0000Noooool00ol0003oooooo`000003ooooo`00AOooool2o`0002ko oooo00?o0000ojVYeonYZML01?nYZML00ol0003o[:_Fojb[eP03o`000003ojbZeOl0003o[j_D00Oo [j_D00?o0000ok:/donb[=<00ol000000onb[=;o0000okB]d@06okB]d@;o0000OOooool01?l0003o ooooooooool00002ooooo`00Aoooool00ol0003oooooooooo`0/ooooo`03o`000?nYZMOoZJWG00?o ZJWG0ol00005ojbZe@03o`000?n_ZmCo[j_D00Go[j_D0ol00005ok:/dP03o`000?nd[M7o]:gA00?o ]:gA00?o0000ooooooooool0O_ooool00ol0003oooooo`000002ooooo`00B?ooool00ol0003ooooo ooooo`0[ooooo`03o`000?nYZMOoZJWG00?o000000?oZJSFo`000?n/Z]D01_n/Z]D00ol0003o[j_D ojn[e002ojn[e0;o000000?o[j[Co`000?nb[=801_nb[=800ol0003o]:gAokB]d@02o`0008;ooooo 0_l00002ooooo`00BOooool00ol0003oooooooooo`0[ooooo`;o00001OnYZ=H00ol0003o[:[EojbZ e@05ojbZe@04o`000?n_ZmCo0000o`0000Co[j[C00?o0000ok:/d_nb[=801?nb[=800ol0003o]:gA o`000023ooooo`?o00000_ooool004[ooooo00?o0000ooooooooool0:_ooool00ol0003oZJSFojVX eP05ojVXeP03o`000?n/Z]Go[:[E00Co[:[E0_l00007ojnZd`03o`000?nb[=;o/ZcB00?o/ZcB0_l0 0020ooooo`Co00001Oooool004_ooooo0_l0000[ooooo`03o`000?nYZ=KoZJSF00GoZJSF00?o0000 ojbZeOn/Z]D00ol000000on/ZMCo0000ojnZd`06ojnZd`03o`000?nb[=;o/ZcB00?o0000O_ooool4 o`0000Wooooo001=ooooo`03o`000?oooooooooo02Wooooo00?o0000ojVXe_nYZ=H01?nYZ=H3o`00 00Go[:WD00?o0000ojnZdon_Z]<01?n_Z]<3o`0007kooooo0ol0000=ooooo`00C_ooool00ol0003o ooooooooo`0Yooooo`03o`000?nYZ=KoZJSF00?o000000?oZJSEo`000?n/ZM@01_n/ZM@01?l0003o [j[CojnZdon_Z]<2o`0007gooooo1?l0000@ooooo`00Coooool00ol0003oooooooooo`0Yooooo`;o 00001OnYZ=D00ol0003o[:WDojbYe004ojbYe004o`000?n_Z]?o0000o`0007_ooooo1?l0000Doooo o`00D?ooool2o`0002Wooooo00?o0000ojVXeOnYZ=D01OnYZ=D00ol0003o[:WDojbYe003ojbYe0;o 0000NOooool4o`0001Sooooo001Booooo`03o`000?oooooooooo02Oooooo00?o0000ojVXeOnYZ=D0 1?nYZ=D00ol0003o[:WDojbYe003o`0007Oooooo1?l0000Looooo`00Doooool00ol0003ooooooooo o`0Wooooo`03o`000?nYZ=GoZJSE00?oZJSE0ol0001gooooo`?o00008?ooool005Cooooo00?o0000 ooooooooool09_ooool00ol0003oZJSEojVXe@03o`0007Kooooo1?l0000Sooooo`00EOooool2o`00 02Oooooo0_l0001eooooo`Co00009oooool005Oooooo00?o0000ooooooooool09?ooool00ol0003o ooooooooo`1`ooooo`Co0000:oooool005Sooooo00?o0000ooooooooool08oooool00ol0003ooooo ooooo`1/ooooo`Co0000;oooool005Wooooo00?o0000ooooooooool08_ooool00ol0003ooooooooo o`1Yooooo`?o0000ooooo`Co0000 S_ooool007Sooooo0_l00003ooooo`03o`000?oooooooooo00[ooooo1?l0002Booooo`00N_ooool0 1?l0003oooooooooool00009ooooo`?o0000U_ooool007_ooooo00?o0000ooooool000001Oooool4 o`0009Wooooo001looooo`;o000000?oooooo`000?l000000_l0002Mooooo`00OOooool2o`000:7o oooo003oooooob7ooooo003oooooob7ooooo0000\ \>"], ImageRangeCache->{{{0, 287}, {232.562, 0}} -> {-0.0711162, 0.0132378, \ 0.00358177, 0.00358177}}] }, Open ]], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(NMinimize[Rosenbrock[{x1, x2, x3, x4, x5}], {x1, x2, x3, x4, x5}, Method -> "\"]\)], "Input"], Cell[BoxData[ \({1.2412233305586858`*^-27, {x1 \[Rule] 1.0000000000000038`, x2 \[Rule] 1.0000000000000075`, x3 \[Rule] 1.0000000000000153`, x4 \[Rule] 1.0000000000000304`, x5 \[Rule] 1.0000000000000608`}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(FindMinimumPlot[ Rosenbrock[{x1, x2}], {{x1, 0.2}, {x2, 0.2}}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% ContourGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.221154 1.20192 -0.147072 1.12784 [ [.01923 -0.0125 -9 -9 ] [.01923 -0.0125 9 0 ] [.25962 -0.0125 -9 -9 ] [.25962 -0.0125 9 0 ] [.5 -0.0125 -9 -9 ] [.5 -0.0125 9 0 ] [.74038 -0.0125 -9 -9 ] [.74038 -0.0125 9 0 ] [.98077 -0.0125 -3 -9 ] [.98077 -0.0125 3 0 ] [ 0 0 -0.125 0 ] [-0.0125 .0785 -18 -4.5 ] [-0.0125 .0785 0 4.5 ] [-0.0125 .30406 -18 -4.5 ] [-0.0125 .30406 0 4.5 ] [-0.0125 .52963 -18 -4.5 ] [-0.0125 .52963 0 4.5 ] [-0.0125 .7552 -18 -4.5 ] [-0.0125 .7552 0 4.5 ] [-0.0125 .98077 -6 -4.5 ] [-0.0125 .98077 0 4.5 ] [ 0 0 -0.125 0 ] [ 0 1 .125 0 ] [ 1 0 .125 0 ] [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .01923 0 m .01923 .00625 L s [(0.2)] .01923 -0.0125 0 1 Mshowa .25962 0 m .25962 .00625 L s [(0.4)] .25962 -0.0125 0 1 Mshowa .5 0 m .5 .00625 L s [(0.6)] .5 -0.0125 0 1 Mshowa .74038 0 m .74038 .00625 L s [(0.8)] .74038 -0.0125 0 1 Mshowa .98077 0 m .98077 .00625 L s [(1)] .98077 -0.0125 0 1 Mshowa .125 Mabswid .07933 0 m .07933 .00375 L s .13942 0 m .13942 .00375 L s .19952 0 m .19952 .00375 L s .31971 0 m .31971 .00375 L s .37981 0 m .37981 .00375 L s .4399 0 m .4399 .00375 L s .5601 0 m .5601 .00375 L s .62019 0 m .62019 .00375 L s .68029 0 m .68029 .00375 L s .80048 0 m .80048 .00375 L s .86058 0 m .86058 .00375 L s .92067 0 m .92067 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .0785 m .00625 .0785 L s [(0.2)] -0.0125 .0785 1 0 Mshowa 0 .30406 m .00625 .30406 L s [(0.4)] -0.0125 .30406 1 0 Mshowa 0 .52963 m .00625 .52963 L s [(0.6)] -0.0125 .52963 1 0 Mshowa 0 .7552 m .00625 .7552 L s [(0.8)] -0.0125 .7552 1 0 Mshowa 0 .98077 m .00625 .98077 L s [(1)] -0.0125 .98077 1 0 Mshowa .125 Mabswid 0 .13489 m .00375 .13489 L s 0 .19128 m .00375 .19128 L s 0 .24767 m .00375 .24767 L s 0 .36046 m .00375 .36046 L s 0 .41685 m .00375 .41685 L s 0 .47324 m .00375 .47324 L s 0 .58602 m .00375 .58602 L s 0 .64242 m .00375 .64242 L s 0 .69881 m .00375 .69881 L s 0 .81159 m .00375 .81159 L s 0 .86799 m .00375 .86799 L s 0 .92438 m .00375 .92438 L s 0 .0221 m .00375 .0221 L s .25 Mabswid 0 0 m 0 1 L s .01923 .99375 m .01923 1 L s .25962 .99375 m .25962 1 L s .5 .99375 m .5 1 L s .74038 .99375 m .74038 1 L s .98077 .99375 m .98077 1 L s .125 Mabswid .07933 .99625 m .07933 1 L s .13942 .99625 m .13942 1 L s .19952 .99625 m .19952 1 L s .31971 .99625 m .31971 1 L s .37981 .99625 m .37981 1 L s .4399 .99625 m .4399 1 L s .5601 .99625 m .5601 1 L s .62019 .99625 m .62019 1 L s .68029 .99625 m .68029 1 L s .80048 .99625 m .80048 1 L s .86058 .99625 m .86058 1 L s .92067 .99625 m .92067 1 L s .25 Mabswid 0 1 m 1 1 L s .99375 .0785 m 1 .0785 L s .99375 .30406 m 1 .30406 L s .99375 .52963 m 1 .52963 L s .99375 .7552 m 1 .7552 L s .99375 .98077 m 1 .98077 L s .125 Mabswid .99625 .13489 m 1 .13489 L s .99625 .19128 m 1 .19128 L s .99625 .24767 m 1 .24767 L s .99625 .36046 m 1 .36046 L s .99625 .41685 m 1 .41685 L s .99625 .47324 m 1 .47324 L s .99625 .58602 m 1 .58602 L s .99625 .64242 m 1 .64242 L s .99625 .69881 m 1 .69881 L s .99625 .81159 m 1 .81159 L s .99625 .86799 m 1 .86799 L s .99625 .92438 m 1 .92438 L s .99625 .0221 m 1 .0221 L s .25 Mabswid 1 0 m 1 1 L s 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath 1 g .01923 .98077 m .98077 .98077 L .98077 .01923 L .01923 .01923 L F 0 g .5 Mabswid .925 g .01923 .17195 m .02575 .17463 L .02894 .17597 L .03866 .18013 L .04816 .18434 L .04837 .18444 L .05808 .18889 L .06779 .19348 L .06899 .19406 L .07751 .19822 L .08722 .2031 L .08853 .20377 L .09693 .20812 L .10664 .21329 L .10699 .21348 L .11636 .21861 L .12454 .22319 L .12607 .22406 L .13578 .22967 L .14129 .23291 L .14549 .23541 L .15521 .2413 L .15735 .24262 L .16492 .24734 L .17279 .25233 L .17463 .25351 L .18434 .25984 L .18768 .26204 L .19406 .2663 L .20208 .27176 L .20377 .27291 L .21348 .27967 L .21604 .28147 L .22319 .28657 L .22958 .29118 L .23291 .29361 L .24262 .30079 L .24275 .30089 L .25233 .30813 L .25558 .31061 L .26204 .3156 L .26808 .32032 L .27176 .32322 L .28029 .33003 L .28147 .33098 L .29118 .33889 L .29222 .33974 L .30089 .34694 L .30389 .34946 L .31061 .35514 L .31532 .35917 L .32032 .36348 L .32652 .36888 L .33003 .37196 L .33751 .37859 L .33974 .38059 L .34829 .38831 L .34946 .38936 L .35889 .39802 L .35917 .39828 L .36888 .40734 L .36929 .40773 L .37859 .41655 L .37953 .41744 L .38831 .4259 L .3896 .42716 L .39802 .43539 L .39952 .43687 L .40773 .44503 L .40928 .44658 L .41744 .45481 L .4189 .45629 L .42716 .46474 L .42839 .46601 L .43687 .47481 L .43774 .47572 L .44658 .48502 L .44696 .48543 L .45607 .49514 L .45629 .49538 L .46506 .50486 L .46601 .50589 L .47393 .51457 L .47572 .51654 L .4827 .52428 L .48543 .52733 L .49137 .53399 L .49514 .53827 L .49993 .54371 L .50486 .54935 L .50839 .55342 L .51457 .56057 L .51677 .56313 L .52428 .57194 L .52505 .57284 L .53324 .58256 L .53399 .58346 L .54135 .59227 L .54371 .59511 L .54937 .60198 L .55342 .60692 L .55732 .61169 L .56313 .61886 L .56518 .62141 L .57284 .63095 L .57298 .63112 L .58069 .64083 L .58256 .64319 L .58834 .65054 L .59227 .65557 L .59592 .66026 L .60198 .66809 L .60343 .66997 L .61087 .67968 L .61169 .68076 L .61825 .68939 L .62141 .69358 L .62557 .69911 L .63112 .70653 L .63282 .70882 L .64002 .71853 L .64083 .71963 L .64716 .72824 L .65054 .73288 L .65424 .73796 L .66026 .74627 L .66126 .74767 L .66824 .75738 L .66997 .75981 L .67516 .76709 L .67968 .77348 L .68202 .77681 L .68884 .78652 L .68939 .78731 L .69561 .79623 L .69911 .80128 L .70233 .80594 L .70882 .81539 L .709 .81566 L .71563 .82537 L .71853 .82965 L .72221 .83508 L .72824 .84405 L .72875 .84479 L .73524 .85451 L .73796 .85859 L .74169 .86422 L .74767 .87328 L .7481 .87393 L .75446 .88364 L .75738 .88812 L .76079 .89336 L .76708 .90307 L .76709 .90309 L .77333 .91278 L .77681 .91822 L .77954 .92249 L .78571 .93221 L .78652 .93348 L .79185 .94192 L .79623 .9489 L .79795 .95163 L .80401 .96134 L .80594 .96445 L .81004 .97106 L .81566 .98015 L .81604 .98077 L .01923 .98077 L F 0 g .01923 .17195 m .02575 .17463 L .02894 .17597 L .03866 .18013 L .04816 .18434 L .04837 .18444 L .05808 .18889 L .06779 .19348 L .06899 .19406 L .07751 .19822 L .08722 .2031 L .08853 .20377 L .09693 .20812 L .10664 .21329 L .10699 .21348 L .11636 .21861 L .12454 .22319 L .12607 .22406 L .13578 .22967 L .14129 .23291 L .14549 .23541 L .15521 .2413 L .15735 .24262 L .16492 .24734 L .17279 .25233 L .17463 .25351 L .18434 .25984 L .18768 .26204 L .19406 .2663 L .20208 .27176 L .20377 .27291 L .21348 .27967 L .21604 .28147 L .22319 .28657 L .22958 .29118 L .23291 .29361 L .24262 .30079 L .24275 .30089 L .25233 .30813 L .25558 .31061 L .26204 .3156 L .26808 .32032 L .27176 .32322 L .28029 .33003 L .28147 .33098 L .29118 .33889 L .29222 .33974 L .30089 .34694 L .30389 .34946 L .31061 .35514 L Mistroke .31532 .35917 L .32032 .36348 L .32652 .36888 L .33003 .37196 L .33751 .37859 L .33974 .38059 L .34829 .38831 L .34946 .38936 L .35889 .39802 L .35917 .39828 L .36888 .40734 L .36929 .40773 L .37859 .41655 L .37953 .41744 L .38831 .4259 L .3896 .42716 L .39802 .43539 L .39952 .43687 L .40773 .44503 L .40928 .44658 L .41744 .45481 L .4189 .45629 L .42716 .46474 L .42839 .46601 L .43687 .47481 L .43774 .47572 L .44658 .48502 L .44696 .48543 L .45607 .49514 L .45629 .49538 L .46506 .50486 L .46601 .50589 L .47393 .51457 L .47572 .51654 L .4827 .52428 L .48543 .52733 L .49137 .53399 L .49514 .53827 L .49993 .54371 L .50486 .54935 L .50839 .55342 L .51457 .56057 L .51677 .56313 L .52428 .57194 L .52505 .57284 L .53324 .58256 L .53399 .58346 L .54135 .59227 L .54371 .59511 L .54937 .60198 L Mistroke .55342 .60692 L .55732 .61169 L .56313 .61886 L .56518 .62141 L .57284 .63095 L .57298 .63112 L .58069 .64083 L .58256 .64319 L .58834 .65054 L .59227 .65557 L .59592 .66026 L .60198 .66809 L .60343 .66997 L .61087 .67968 L .61169 .68076 L .61825 .68939 L .62141 .69358 L .62557 .69911 L .63112 .70653 L .63282 .70882 L .64002 .71853 L .64083 .71963 L .64716 .72824 L .65054 .73288 L .65424 .73796 L .66026 .74627 L .66126 .74767 L .66824 .75738 L .66997 .75981 L .67516 .76709 L .67968 .77348 L .68202 .77681 L .68884 .78652 L .68939 .78731 L .69561 .79623 L .69911 .80128 L .70233 .80594 L .70882 .81539 L .709 .81566 L .71563 .82537 L .71853 .82965 L .72221 .83508 L .72824 .84405 L .72875 .84479 L .73524 .85451 L .73796 .85859 L .74169 .86422 L .74767 .87328 L .7481 .87393 L .75446 .88364 L Mistroke .75738 .88812 L .76079 .89336 L .76708 .90307 L .76709 .90309 L .77333 .91278 L .77681 .91822 L .77954 .92249 L .78571 .93221 L .78652 .93348 L .79185 .94192 L .79623 .9489 L .79795 .95163 L .80401 .96134 L .80594 .96445 L .81004 .97106 L .81566 .98015 L .81604 .98077 L Mfstroke .85 g .01923 .33129 m .02894 .3352 L .03866 .33925 L .03981 .33974 L .04837 .34345 L .05808 .34779 L .06171 .34946 L .06779 .35228 L .07751 .35692 L .08212 .35917 L .08722 .3617 L .09693 .36662 L .10129 .36888 L .10664 .37169 L .11636 .37691 L .11944 .37859 L .12607 .38227 L .13578 .38778 L .1367 .38831 L .14549 .39343 L .1532 .39802 L .15521 .39923 L .16492 .40517 L .16904 .40773 L .17463 .41126 L .18427 .41744 L .18434 .41749 L .19406 .42387 L .19898 .42716 L .20377 .43039 L .21321 .43687 L .21348 .43706 L .22319 .44387 L .227 .44658 L .23291 .45083 L .24039 .45629 L .24262 .45794 L .25233 .46519 L .25341 .46601 L .26204 .47259 L .2661 .47572 L .27176 .48013 L .27848 .48543 L .28147 .48781 L .29057 .49514 L .29118 .49564 L .30089 .50362 L .30238 .50486 L .31061 .51174 L .31394 .51457 L .32032 .52001 L .32527 .52428 L .33003 .52843 L .33637 .53399 L .33974 .53698 L .34726 .54371 L .34946 .54569 L .35795 .55342 L .35917 .55454 L .36845 .56313 L .36888 .56353 L .37859 .57267 L .37877 .57284 L .38831 .58196 L .38893 .58256 L .39802 .59139 L .39892 .59227 L .40773 .60096 L .40875 .60198 L .41744 .61069 L .41844 .61169 L .42716 .62055 L .42799 .62141 L .43687 .63057 L .4374 .63112 L .44658 .64072 L .44668 .64083 L .45584 .65054 L .45629 .65103 L .46488 .66026 L .46601 .66148 L .4738 .66997 L .47572 .67207 L .48262 .67968 L .48543 .68281 L .49132 .68939 L .49514 .69369 L .49993 .69911 L .50486 .70472 L .50843 .70882 L .51457 .7159 L .51684 .71853 L .52428 .72722 L .52515 .72824 L .53338 .73796 L .53399 .73869 L .54152 .74767 L .54371 .7503 L .54957 .75738 L .55342 .76205 L .55755 .76709 L .56313 .77396 L .56544 .77681 L .57284 .786 L .57326 .78652 L .581 .79623 L .58256 .7982 L .58867 .80594 L .59227 .81054 L .59627 .81566 L .60198 .82302 L .6038 .82537 L .61126 .83508 L .61169 .83565 L .61866 .84479 L .62141 .84842 L .62599 .85451 L .63112 .86134 L .63327 .86422 L .64048 .87393 L .64083 .87441 L .64763 .88364 L .65054 .88762 L .65473 .89336 L .66026 .90098 L .66177 .90307 L .66875 .91278 L .66997 .91448 L .67569 .92249 L .67968 .92813 L .68257 .93221 L .68939 .94192 L .68939 .94192 L .69617 .95163 L .69911 .95586 L .7029 .96134 L .70882 .96994 L .70958 .97106 L .71622 .98077 L .01923 .98077 L F 0 g .01923 .33129 m .02894 .3352 L .03866 .33925 L .03981 .33974 L .04837 .34345 L .05808 .34779 L .06171 .34946 L .06779 .35228 L .07751 .35692 L .08212 .35917 L .08722 .3617 L .09693 .36662 L .10129 .36888 L .10664 .37169 L .11636 .37691 L .11944 .37859 L .12607 .38227 L .13578 .38778 L .1367 .38831 L .14549 .39343 L .1532 .39802 L .15521 .39923 L .16492 .40517 L .16904 .40773 L .17463 .41126 L .18427 .41744 L .18434 .41749 L .19406 .42387 L .19898 .42716 L .20377 .43039 L .21321 .43687 L .21348 .43706 L .22319 .44387 L .227 .44658 L .23291 .45083 L .24039 .45629 L .24262 .45794 L .25233 .46519 L .25341 .46601 L .26204 .47259 L .2661 .47572 L .27176 .48013 L .27848 .48543 L .28147 .48781 L .29057 .49514 L .29118 .49564 L .30089 .50362 L .30238 .50486 L .31061 .51174 L .31394 .51457 L Mistroke .32032 .52001 L .32527 .52428 L .33003 .52843 L .33637 .53399 L .33974 .53698 L .34726 .54371 L .34946 .54569 L .35795 .55342 L .35917 .55454 L .36845 .56313 L .36888 .56353 L .37859 .57267 L .37877 .57284 L .38831 .58196 L .38893 .58256 L .39802 .59139 L .39892 .59227 L .40773 .60096 L .40875 .60198 L .41744 .61069 L .41844 .61169 L .42716 .62055 L .42799 .62141 L .43687 .63057 L .4374 .63112 L .44658 .64072 L .44668 .64083 L .45584 .65054 L .45629 .65103 L .46488 .66026 L .46601 .66148 L .4738 .66997 L .47572 .67207 L .48262 .67968 L .48543 .68281 L .49132 .68939 L .49514 .69369 L .49993 .69911 L .50486 .70472 L .50843 .70882 L .51457 .7159 L .51684 .71853 L .52428 .72722 L .52515 .72824 L .53338 .73796 L .53399 .73869 L .54152 .74767 L .54371 .7503 L .54957 .75738 L .55342 .76205 L Mistroke .55755 .76709 L .56313 .77396 L .56544 .77681 L .57284 .786 L .57326 .78652 L .581 .79623 L .58256 .7982 L .58867 .80594 L .59227 .81054 L .59627 .81566 L .60198 .82302 L .6038 .82537 L .61126 .83508 L .61169 .83565 L .61866 .84479 L .62141 .84842 L .62599 .85451 L .63112 .86134 L .63327 .86422 L .64048 .87393 L .64083 .87441 L .64763 .88364 L .65054 .88762 L .65473 .89336 L .66026 .90098 L .66177 .90307 L .66875 .91278 L .66997 .91448 L .67569 .92249 L .67968 .92813 L .68257 .93221 L .68939 .94192 L .68939 .94192 L .69617 .95163 L .69911 .95586 L .7029 .96134 L .70882 .96994 L .70958 .97106 L .71622 .98077 L Mfstroke .775 g .01923 .44611 m .02042 .44658 L .02894 .44998 L .03866 .454 L .04406 .45629 L .04837 .45816 L .05808 .46246 L .06584 .46601 L .06779 .46691 L .07751 .47151 L .08614 .47572 L .08722 .47625 L .09693 .48114 L .10522 .48543 L .10664 .48618 L .11636 .49136 L .12329 .49514 L .12607 .49668 L .13578 .50215 L .14048 .50486 L .14549 .50777 L .15521 .51353 L .15692 .51457 L .16492 .51944 L .1727 .52428 L .17463 .5255 L .18434 .5317 L .18788 .53399 L .19406 .53805 L .20254 .54371 L .20377 .54454 L .21348 .55117 L .21672 .55342 L .22319 .55796 L .23046 .56313 L .23291 .56489 L .24262 .57196 L .24381 .57284 L .25233 .57918 L .2568 .58256 L .26204 .58655 L .26945 .59227 L .27176 .59406 L .28147 .60172 L .2818 .60198 L .29118 .60952 L .29385 .61169 L .30089 .61747 L .30563 .62141 L .31061 .62557 L .31717 .63112 L .32032 .63381 L .32846 .64083 L .33003 .6422 L .33953 .65054 L .33974 .65073 L .34946 .65941 L .3504 .66026 L .35917 .66823 L .36106 .66997 L .36888 .6772 L .37154 .67968 L .37859 .68632 L .38184 .68939 L .38831 .69558 L .39197 .69911 L .39802 .70499 L .40193 .70882 L .40773 .71454 L .41175 .71853 L .41744 .72424 L .42141 .72824 L .42716 .73408 L .43094 .73796 L .43687 .74407 L .44033 .74767 L .44658 .75421 L .44959 .75738 L .45629 .76449 L .45873 .76709 L .46601 .77492 L .46775 .77681 L .47572 .78549 L .47665 .78652 L .48543 .79621 L .48545 .79623 L .49414 .80594 L .49514 .80708 L .50272 .81566 L .50486 .81809 L .51121 .82537 L .51457 .82925 L .5196 .83508 L .52428 .84055 L .5279 .84479 L .53399 .852 L .53611 .85451 L .54371 .86359 L .54423 .86422 L .55227 .87393 L .55342 .87533 L .56023 .88364 L .56313 .88722 L .5681 .89336 L .57284 .89925 L .5759 .90307 L .58256 .91142 L .58363 .91278 L .59129 .92249 L .59227 .92375 L .59887 .93221 L .60198 .93622 L .60639 .94192 L .61169 .94883 L .61384 .95163 L .62122 .96134 L .62141 .96159 L .62854 .97106 L .63112 .9745 L .6358 .98077 L .01923 .98077 L F 0 g .01923 .44611 m .02042 .44658 L .02894 .44998 L .03866 .454 L .04406 .45629 L .04837 .45816 L .05808 .46246 L .06584 .46601 L .06779 .46691 L .07751 .47151 L .08614 .47572 L .08722 .47625 L .09693 .48114 L .10522 .48543 L .10664 .48618 L .11636 .49136 L .12329 .49514 L .12607 .49668 L .13578 .50215 L .14048 .50486 L .14549 .50777 L .15521 .51353 L .15692 .51457 L .16492 .51944 L .1727 .52428 L .17463 .5255 L .18434 .5317 L .18788 .53399 L .19406 .53805 L .20254 .54371 L .20377 .54454 L .21348 .55117 L .21672 .55342 L .22319 .55796 L .23046 .56313 L .23291 .56489 L .24262 .57196 L .24381 .57284 L .25233 .57918 L .2568 .58256 L .26204 .58655 L .26945 .59227 L .27176 .59406 L .28147 .60172 L .2818 .60198 L .29118 .60952 L .29385 .61169 L .30089 .61747 L .30563 .62141 L .31061 .62557 L Mistroke .31717 .63112 L .32032 .63381 L .32846 .64083 L .33003 .6422 L .33953 .65054 L .33974 .65073 L .34946 .65941 L .3504 .66026 L .35917 .66823 L .36106 .66997 L .36888 .6772 L .37154 .67968 L .37859 .68632 L .38184 .68939 L .38831 .69558 L .39197 .69911 L .39802 .70499 L .40193 .70882 L .40773 .71454 L .41175 .71853 L .41744 .72424 L .42141 .72824 L .42716 .73408 L .43094 .73796 L .43687 .74407 L .44033 .74767 L .44658 .75421 L .44959 .75738 L .45629 .76449 L .45873 .76709 L .46601 .77492 L .46775 .77681 L .47572 .78549 L .47665 .78652 L .48543 .79621 L .48545 .79623 L .49414 .80594 L .49514 .80708 L .50272 .81566 L .50486 .81809 L .51121 .82537 L .51457 .82925 L .5196 .83508 L .52428 .84055 L .5279 .84479 L .53399 .852 L .53611 .85451 L .54371 .86359 L .54423 .86422 L .55227 .87393 L Mistroke .55342 .87533 L .56023 .88364 L .56313 .88722 L .5681 .89336 L .57284 .89925 L .5759 .90307 L .58256 .91142 L .58363 .91278 L .59129 .92249 L .59227 .92375 L .59887 .93221 L .60198 .93622 L .60639 .94192 L .61169 .94883 L .61384 .95163 L .62122 .96134 L .62141 .96159 L .62854 .97106 L .63112 .9745 L .6358 .98077 L Mfstroke .7 g .01923 .54074 m .02675 .54371 L .02894 .54459 L .03866 .54858 L .04837 .55272 L .04998 .55342 L .05808 .557 L .06779 .56143 L .07144 .56313 L .07751 .56601 L .08722 .57073 L .09147 .57284 L .09693 .5756 L .10664 .58061 L .11033 .58256 L .11636 .58577 L .12607 .59108 L .12821 .59227 L .13578 .59653 L .14524 .60198 L .14549 .60213 L .15521 .60788 L .16153 .61169 L .16492 .61377 L .17463 .6198 L .17717 .62141 L .18434 .62598 L .19224 .63112 L .19406 .63231 L .20377 .63879 L .20679 .64083 L .21348 .64541 L .22087 .65054 L .22319 .65217 L .23291 .65908 L .23453 .66026 L .24262 .66614 L .2478 .66997 L .25233 .67335 L .26071 .67968 L .26204 .6807 L .27176 .68819 L .27329 .68939 L .28147 .69584 L .28557 .69911 L .29118 .70362 L .29756 .70882 L .30089 .71156 L .30929 .71853 L .31061 .71964 L .32032 .72786 L .32076 .72824 L .33003 .73624 L .33201 .73796 L .33974 .74475 L .34303 .74767 L .34946 .75342 L .35385 .75738 L .35917 .76223 L .36446 .76709 L .36888 .77118 L .3749 .77681 L .37859 .78029 L .38516 .78652 L .38831 .78953 L .39525 .79623 L .39802 .79893 L .40517 .80594 L .40773 .80847 L .41495 .81566 L .41744 .81816 L .42458 .82537 L .42716 .82799 L .43408 .83508 L .43687 .83797 L .44344 .84479 L .44658 .84809 L .45267 .85451 L .45629 .85836 L .46177 .86422 L .46601 .86878 L .47076 .87393 L .47572 .87934 L .47964 .88364 L .48543 .89005 L .48841 .89336 L .49514 .9009 L .49707 .90307 L .50486 .9119 L .50563 .91278 L .51409 .92249 L .51457 .92305 L .52246 .93221 L .52428 .93434 L .53073 .94192 L .53399 .94578 L .53892 .95163 L .54371 .95736 L .54702 .96134 L .55342 .96909 L .55503 .97106 L .56297 .98077 L .01923 .98077 L F 0 g .01923 .54074 m .02675 .54371 L .02894 .54459 L .03866 .54858 L .04837 .55272 L .04998 .55342 L .05808 .557 L .06779 .56143 L .07144 .56313 L .07751 .56601 L .08722 .57073 L .09147 .57284 L .09693 .5756 L .10664 .58061 L .11033 .58256 L .11636 .58577 L .12607 .59108 L .12821 .59227 L .13578 .59653 L .14524 .60198 L .14549 .60213 L .15521 .60788 L .16153 .61169 L .16492 .61377 L .17463 .6198 L .17717 .62141 L .18434 .62598 L .19224 .63112 L .19406 .63231 L .20377 .63879 L .20679 .64083 L .21348 .64541 L .22087 .65054 L .22319 .65217 L .23291 .65908 L .23453 .66026 L .24262 .66614 L .2478 .66997 L .25233 .67335 L .26071 .67968 L .26204 .6807 L .27176 .68819 L .27329 .68939 L .28147 .69584 L .28557 .69911 L .29118 .70362 L .29756 .70882 L .30089 .71156 L .30929 .71853 L .31061 .71964 L Mistroke .32032 .72786 L .32076 .72824 L .33003 .73624 L .33201 .73796 L .33974 .74475 L .34303 .74767 L .34946 .75342 L .35385 .75738 L .35917 .76223 L .36446 .76709 L .36888 .77118 L .3749 .77681 L .37859 .78029 L .38516 .78652 L .38831 .78953 L .39525 .79623 L .39802 .79893 L .40517 .80594 L .40773 .80847 L .41495 .81566 L .41744 .81816 L .42458 .82537 L .42716 .82799 L .43408 .83508 L .43687 .83797 L .44344 .84479 L .44658 .84809 L .45267 .85451 L .45629 .85836 L .46177 .86422 L .46601 .86878 L .47076 .87393 L .47572 .87934 L .47964 .88364 L .48543 .89005 L .48841 .89336 L .49514 .9009 L .49707 .90307 L .50486 .9119 L .50563 .91278 L .51409 .92249 L .51457 .92305 L .52246 .93221 L .52428 .93434 L .53073 .94192 L .53399 .94578 L .53892 .95163 L .54371 .95736 L .54702 .96134 L .55342 .96909 L Mistroke .55503 .97106 L .56297 .98077 L Mfstroke .625 g .01923 .62312 m .02894 .62695 L .03866 .63093 L .03911 .63112 L .04837 .63506 L .05808 .63933 L .06143 .64083 L .06779 .64374 L .07751 .6483 L .08216 .65054 L .08722 .65301 L .09693 .65787 L .1016 .66026 L .10664 .66287 L .11636 .66802 L .11997 .66997 L .12607 .67331 L .13578 .67875 L .13742 .67968 L .14549 .68434 L .15408 .68939 L .15521 .69007 L .16492 .69595 L .17004 .69911 L .17463 .70197 L .18434 .70814 L .1854 .70882 L .19406 .71446 L .20021 .71853 L .20377 .72092 L .21348 .72753 L .21452 .72824 L .22319 .73428 L .22839 .73796 L .23291 .74118 L .24185 .74767 L .24262 .74823 L .25233 .75542 L .25494 .75738 L .26204 .76276 L .26769 .76709 L .27176 .77025 L .28011 .77681 L .28147 .77788 L .29118 .78566 L .29225 .78652 L .30089 .79358 L .3041 .79623 L .31061 .80165 L .3157 .80594 L .32032 .80987 L .32706 .81566 L .33003 .81823 L .33819 .82537 L .33974 .82674 L .34911 .83508 L .34946 .83539 L .35917 .84419 L .35983 .84479 L .36888 .85314 L .37035 .85451 L .37859 .86223 L .38069 .86422 L .38831 .87147 L .39087 .87393 L .39802 .88086 L .40087 .88364 L .40773 .89039 L .41072 .89336 L .41744 .90007 L .42043 .90307 L .42716 .90989 L .42999 .91278 L .43687 .91986 L .43941 .92249 L .44658 .92998 L .4487 .93221 L .45629 .94024 L .45787 .94192 L .46601 .95065 L .46692 .95163 L .47572 .9612 L .47585 .96134 L .48467 .97106 L .48543 .9719 L .49338 .98077 L .01923 .98077 L F 0 g .01923 .62312 m .02894 .62695 L .03866 .63093 L .03911 .63112 L .04837 .63506 L .05808 .63933 L .06143 .64083 L .06779 .64374 L .07751 .6483 L .08216 .65054 L .08722 .65301 L .09693 .65787 L .1016 .66026 L .10664 .66287 L .11636 .66802 L .11997 .66997 L .12607 .67331 L .13578 .67875 L .13742 .67968 L .14549 .68434 L .15408 .68939 L .15521 .69007 L .16492 .69595 L .17004 .69911 L .17463 .70197 L .18434 .70814 L .1854 .70882 L .19406 .71446 L .20021 .71853 L .20377 .72092 L .21348 .72753 L .21452 .72824 L .22319 .73428 L .22839 .73796 L .23291 .74118 L .24185 .74767 L .24262 .74823 L .25233 .75542 L .25494 .75738 L .26204 .76276 L .26769 .76709 L .27176 .77025 L .28011 .77681 L .28147 .77788 L .29118 .78566 L .29225 .78652 L .30089 .79358 L .3041 .79623 L .31061 .80165 L .3157 .80594 L Mistroke .32032 .80987 L .32706 .81566 L .33003 .81823 L .33819 .82537 L .33974 .82674 L .34911 .83508 L .34946 .83539 L .35917 .84419 L .35983 .84479 L .36888 .85314 L .37035 .85451 L .37859 .86223 L .38069 .86422 L .38831 .87147 L .39087 .87393 L .39802 .88086 L .40087 .88364 L .40773 .89039 L .41072 .89336 L .41744 .90007 L .42043 .90307 L .42716 .90989 L .42999 .91278 L .43687 .91986 L .43941 .92249 L .44658 .92998 L .4487 .93221 L .45629 .94024 L .45787 .94192 L .46601 .95065 L .46692 .95163 L .47572 .9612 L .47585 .96134 L .48467 .97106 L .48543 .9719 L .49338 .98077 L Mfstroke .55 g .01923 .69705 m .0245 .69911 L .02894 .70087 L .03866 .70484 L .04805 .70882 L .04837 .70896 L .05808 .71322 L .06779 .71762 L .06976 .71853 L .07751 .72218 L .08722 .72687 L .08999 .72824 L .09693 .73172 L .10664 .73671 L .10902 .73796 L .11636 .74185 L .12607 .74713 L .12704 .74767 L .13578 .75256 L .14419 .75738 L .14549 .75814 L .15521 .76386 L .16058 .76709 L .16492 .76973 L .17463 .77575 L .17632 .77681 L .18434 .78191 L .19146 .78652 L .19406 .78822 L .20377 .79467 L .20609 .79623 L .21348 .80127 L .22023 .80594 L .22319 .80802 L .23291 .81491 L .23395 .81566 L .24262 .82195 L .24727 .82537 L .25233 .82913 L .26022 .83508 L .26204 .83647 L .27176 .84394 L .27285 .84479 L .28147 .85157 L .28516 .85451 L .29118 .85934 L .29719 .86422 L .30089 .86725 L .30895 .87393 L .31061 .87532 L .32032 .88353 L .32046 .88364 L .33003 .89188 L .33173 .89336 L .33974 .90038 L .34278 .90307 L .34946 .90903 L .35362 .91278 L .35917 .91782 L .36426 .92249 L .36888 .92676 L .37472 .93221 L .37859 .93585 L .38499 .94192 L .38831 .94508 L .3951 .95163 L .39802 .95446 L .40505 .96134 L .40773 .96399 L .41484 .97106 L .41744 .97366 L .42449 .98077 L .01923 .98077 L F 0 g .01923 .69705 m .0245 .69911 L .02894 .70087 L .03866 .70484 L .04805 .70882 L .04837 .70896 L .05808 .71322 L .06779 .71762 L .06976 .71853 L .07751 .72218 L .08722 .72687 L .08999 .72824 L .09693 .73172 L .10664 .73671 L .10902 .73796 L .11636 .74185 L .12607 .74713 L .12704 .74767 L .13578 .75256 L .14419 .75738 L .14549 .75814 L .15521 .76386 L .16058 .76709 L .16492 .76973 L .17463 .77575 L .17632 .77681 L .18434 .78191 L .19146 .78652 L .19406 .78822 L .20377 .79467 L .20609 .79623 L .21348 .80127 L .22023 .80594 L .22319 .80802 L .23291 .81491 L .23395 .81566 L .24262 .82195 L .24727 .82537 L .25233 .82913 L .26022 .83508 L .26204 .83647 L .27176 .84394 L .27285 .84479 L .28147 .85157 L .28516 .85451 L .29118 .85934 L .29719 .86422 L .30089 .86725 L .30895 .87393 L .31061 .87532 L Mistroke .32032 .88353 L .32046 .88364 L .33003 .89188 L .33173 .89336 L .33974 .90038 L .34278 .90307 L .34946 .90903 L .35362 .91278 L .35917 .91782 L .36426 .92249 L .36888 .92676 L .37472 .93221 L .37859 .93585 L .38499 .94192 L .38831 .94508 L .3951 .95163 L .39802 .95446 L .40505 .96134 L .40773 .96399 L .41484 .97106 L .41744 .97366 L .42449 .98077 L Mfstroke .475 g .01923 .7647 m .02537 .76709 L .02894 .76851 L .03866 .77247 L .04837 .77658 L .0489 .77681 L .05808 .78083 L .06779 .78523 L .07058 .78652 L .07751 .78978 L .08722 .79447 L .09079 .79623 L .09693 .79931 L .10664 .80429 L .10981 .80594 L .11636 .80942 L .12607 .8147 L .12781 .81566 L .13578 .82012 L .14494 .82537 L .14549 .82569 L .15521 .83141 L .16132 .83508 L .16492 .83727 L .17463 .84328 L .17705 .84479 L .18434 .84943 L .19218 .85451 L .19406 .85573 L .20377 .86218 L .20679 .86422 L .21348 .86877 L .22093 .87393 L .22319 .87551 L .23291 .8824 L .23464 .88364 L .24262 .88943 L .24795 .89336 L .25233 .89661 L .2609 .90307 L .26204 .90394 L .27176 .91141 L .27352 .91278 L .28147 .91903 L .28583 .92249 L .29118 .92679 L .29785 .93221 L .30089 .9347 L .3096 .94192 L .31061 .94276 L .32032 .95096 L .3211 .95163 L .33003 .95931 L .33237 .96134 L .33974 .96781 L .34341 .97106 L .34946 .97645 L .35425 .98077 L .01923 .98077 L F 0 g .01923 .7647 m .02537 .76709 L .02894 .76851 L .03866 .77247 L .04837 .77658 L .0489 .77681 L .05808 .78083 L .06779 .78523 L .07058 .78652 L .07751 .78978 L .08722 .79447 L .09079 .79623 L .09693 .79931 L .10664 .80429 L .10981 .80594 L .11636 .80942 L .12607 .8147 L .12781 .81566 L .13578 .82012 L .14494 .82537 L .14549 .82569 L .15521 .83141 L .16132 .83508 L .16492 .83727 L .17463 .84328 L .17705 .84479 L .18434 .84943 L .19218 .85451 L .19406 .85573 L .20377 .86218 L .20679 .86422 L .21348 .86877 L .22093 .87393 L .22319 .87551 L .23291 .8824 L .23464 .88364 L .24262 .88943 L .24795 .89336 L .25233 .89661 L .2609 .90307 L .26204 .90394 L .27176 .91141 L .27352 .91278 L .28147 .91903 L .28583 .92249 L .29118 .92679 L .29785 .93221 L .30089 .9347 L .3096 .94192 L .31061 .94276 L Mistroke .32032 .95096 L .3211 .95163 L .33003 .95931 L .33237 .96134 L .33974 .96781 L .34341 .97106 L .34946 .97645 L .35425 .98077 L Mfstroke .4 g .01923 .82744 m .02894 .83124 L .03838 .83508 L .03866 .8352 L .04837 .8393 L .05808 .84354 L .06088 .84479 L .06779 .84794 L .07751 .85248 L .08175 .85451 L .08722 .85716 L .09693 .86199 L .10131 .86422 L .10664 .86697 L .11636 .8721 L .11977 .87393 L .12607 .87737 L .13578 .88279 L .1373 .88364 L .14549 .88835 L .15402 .89336 L .15521 .89406 L .16492 .89992 L .17005 .90307 L .17463 .90592 L .18434 .91207 L .18545 .91278 L .19406 .91836 L .20031 .92249 L .20377 .92481 L .21348 .9314 L .21466 .93221 L .22319 .93813 L .22857 .94192 L .23291 .94501 L .24206 .95163 L .24262 .95204 L .25233 .95921 L .25518 .96134 L .26204 .96654 L .26795 .97106 L .27176 .974 L .2804 .98077 L .01923 .98077 L F 0 g .01923 .82744 m .02894 .83124 L .03838 .83508 L .03866 .8352 L .04837 .8393 L .05808 .84354 L .06088 .84479 L .06779 .84794 L .07751 .85248 L .08175 .85451 L .08722 .85716 L .09693 .86199 L .10131 .86422 L .10664 .86697 L .11636 .8721 L .11977 .87393 L .12607 .87737 L .13578 .88279 L .1373 .88364 L .14549 .88835 L .15402 .89336 L .15521 .89406 L .16492 .89992 L .17005 .90307 L .17463 .90592 L .18434 .91207 L .18545 .91278 L .19406 .91836 L .20031 .92249 L .20377 .92481 L .21348 .9314 L .21466 .93221 L .22319 .93813 L .22857 .94192 L .23291 .94501 L .24206 .95163 L .24262 .95204 L .25233 .95921 L .25518 .96134 L .26204 .96654 L .26795 .97106 L .27176 .974 L .2804 .98077 L s .325 g .01923 .8862 m .02894 .89 L .03722 .89336 L .03866 .89395 L .04837 .89804 L .05808 .90228 L .05984 .90307 L .06779 .90667 L .07751 .91121 L .08081 .91278 L .08722 .91589 L .09693 .92071 L .10044 .92249 L .10664 .92569 L .11636 .93081 L .11896 .93221 L .12607 .93607 L .13578 .94149 L .13654 .94192 L .14549 .94705 L .15332 .95163 L .15521 .95275 L .16492 .95861 L .16938 .96134 L .17463 .9646 L .18434 .97075 L .18482 .97106 L .19406 .97704 L .19971 .98077 L .01923 .98077 L F 0 g .01923 .8862 m .02894 .89 L .03722 .89336 L .03866 .89395 L .04837 .89804 L .05808 .90228 L .05984 .90307 L .06779 .90667 L .07751 .91121 L .08081 .91278 L .08722 .91589 L .09693 .92071 L .10044 .92249 L .10664 .92569 L .11636 .93081 L .11896 .93221 L .12607 .93607 L .13578 .94149 L .13654 .94192 L .14549 .94705 L .15332 .95163 L .15521 .95275 L .16492 .95861 L .16938 .96134 L .17463 .9646 L .18434 .97075 L .18482 .97106 L .19406 .97704 L .19971 .98077 L s .25 g .01923 .94166 m .01992 .94192 L .02894 .94545 L .03866 .9494 L .044 .95163 L .04837 .95349 L .05808 .95773 L .06612 .96134 L .06779 .96211 L .07751 .96664 L .08669 .97106 L .08722 .97132 L .09693 .97614 L .10599 .98077 L .01923 .98077 L F 0 g .01923 .94166 m .01992 .94192 L .02894 .94545 L .03866 .9494 L .044 .95163 L .04837 .95349 L .05808 .95773 L .06612 .96134 L .06779 .96211 L .07751 .96664 L .08669 .97106 L .08722 .97132 L .09693 .97614 L .10599 .98077 L s .925 g .98077 .69238 m .97917 .68939 L .97398 .67968 L .97106 .67423 L .96877 .66997 L .96353 .66026 L .96134 .65623 L .95826 .65054 L .95297 .64083 L .95163 .63837 L .94766 .63112 L .94232 .62141 L .94192 .62067 L .93696 .61169 L .93221 .60312 L .93157 .60198 L .92616 .59227 L .92249 .58572 L .92072 .58256 L .91525 .57284 L .91278 .56847 L .90976 .56313 L .90424 .55342 L .90307 .55137 L .89869 .54371 L .89336 .53441 L .89311 .53399 L .88751 .52428 L .88364 .51761 L .88188 .51457 L .87621 .50486 L .87393 .50096 L .87052 .49514 L .86479 .48543 L .86422 .48446 L .85904 .47572 L .85451 .46811 L .85325 .46601 L .84743 .45629 L .84479 .45191 L .84158 .44658 L .83569 .43687 L .83508 .43586 L .82978 .42716 L .82537 .41996 L .82382 .41744 L .81784 .40773 L .81566 .40421 L .81181 .39802 L .80594 .38861 L .80575 .38831 L .79966 .37859 L .79623 .37316 L .79352 .36888 L .78735 .35917 L .78652 .35786 L .78114 .34946 L .77681 .34271 L .77489 .33974 L .7686 .33003 L .76709 .32771 L .76227 .32032 L .75738 .31287 L .7559 .31061 L .74948 .30089 L .74767 .29817 L .74302 .29118 L .73796 .28362 L .73651 .28147 L .72996 .27176 L .72824 .26922 L .72336 .26204 L .71853 .25497 L .71672 .25233 L .71003 .24262 L .70882 .24088 L .70328 .23291 L .69911 .22693 L .69649 .22319 L .68964 .21348 L .68939 .21313 L .68274 .20377 L .67968 .19948 L .67579 .19406 L .66997 .18599 L .66878 .18434 L .66171 .17463 L .66026 .17264 L .65459 .16492 L .65054 .15944 L .6474 .15521 L .64083 .1464 L .64015 .14549 L .63284 .13578 L .63112 .1335 L .62547 .12607 L .62141 .12076 L .61803 .11636 L .61169 .10816 L .61052 .10664 L .60293 .09693 L .60198 .09572 L .59528 .08722 L .59227 .08342 L .58755 .07751 L .58256 .07128 L .57975 .06779 L .57284 .05928 L .57186 .05808 L .5639 .04837 L .56313 .04744 L .55585 .03866 L .55342 .03574 L .54771 .02894 L .54371 .0242 L .53949 .01923 L .98077 .01923 L F 0 g .98077 .69238 m .97917 .68939 L .97398 .67968 L .97106 .67423 L .96877 .66997 L .96353 .66026 L .96134 .65623 L .95826 .65054 L .95297 .64083 L .95163 .63837 L .94766 .63112 L .94232 .62141 L .94192 .62067 L .93696 .61169 L .93221 .60312 L .93157 .60198 L .92616 .59227 L .92249 .58572 L .92072 .58256 L .91525 .57284 L .91278 .56847 L .90976 .56313 L .90424 .55342 L .90307 .55137 L .89869 .54371 L .89336 .53441 L .89311 .53399 L .88751 .52428 L .88364 .51761 L .88188 .51457 L .87621 .50486 L .87393 .50096 L .87052 .49514 L .86479 .48543 L .86422 .48446 L .85904 .47572 L .85451 .46811 L .85325 .46601 L .84743 .45629 L .84479 .45191 L .84158 .44658 L .83569 .43687 L .83508 .43586 L .82978 .42716 L .82537 .41996 L .82382 .41744 L .81784 .40773 L .81566 .40421 L .81181 .39802 L .80594 .38861 L Mistroke .80575 .38831 L .79966 .37859 L .79623 .37316 L .79352 .36888 L .78735 .35917 L .78652 .35786 L .78114 .34946 L .77681 .34271 L .77489 .33974 L .7686 .33003 L .76709 .32771 L .76227 .32032 L .75738 .31287 L .7559 .31061 L .74948 .30089 L .74767 .29817 L .74302 .29118 L .73796 .28362 L .73651 .28147 L .72996 .27176 L .72824 .26922 L .72336 .26204 L .71853 .25497 L .71672 .25233 L .71003 .24262 L .70882 .24088 L .70328 .23291 L .69911 .22693 L .69649 .22319 L .68964 .21348 L .68939 .21313 L .68274 .20377 L .67968 .19948 L .67579 .19406 L .66997 .18599 L .66878 .18434 L .66171 .17463 L .66026 .17264 L .65459 .16492 L .65054 .15944 L .6474 .15521 L .64083 .1464 L .64015 .14549 L .63284 .13578 L .63112 .1335 L .62547 .12607 L .62141 .12076 L .61803 .11636 L .61169 .10816 L .61052 .10664 L Mistroke .60293 .09693 L .60198 .09572 L .59528 .08722 L .59227 .08342 L .58755 .07751 L .58256 .07128 L .57975 .06779 L .57284 .05928 L .57186 .05808 L .5639 .04837 L .56313 .04744 L .55585 .03866 L .55342 .03574 L .54771 .02894 L .54371 .0242 L .53949 .01923 L Mfstroke .85 g .98077 .53822 m .97851 .53399 L .97332 .52428 L .97106 .52007 L .9681 .51457 L .96285 .50486 L .96134 .50207 L .95759 .49514 L .9523 .48543 L .95163 .48421 L .94698 .47572 L .94192 .46651 L .94164 .46601 L .93628 .45629 L .93221 .44895 L .93089 .44658 L .92547 .43687 L .92249 .43154 L .92003 .42716 L .91457 .41744 L .91278 .41428 L .90907 .40773 L .90355 .39802 L .90307 .39718 L .898 .38831 L .89336 .38022 L .89242 .37859 L .88682 .36888 L .88364 .36341 L .88118 .35917 L .87552 .34946 L .87393 .34674 L .86982 .33974 L .86422 .33023 L .8641 .33003 L .85835 .32032 L .85451 .31387 L .85256 .31061 L .84674 .30089 L .84479 .29765 L .84089 .29118 L .83508 .28159 L .83501 .28147 L .82909 .27176 L .82537 .26567 L .82314 .26204 L .81716 .25233 L .81566 .24991 L .81113 .24262 L .80594 .23429 L .80508 .23291 L .79899 .22319 L .79623 .21882 L .79286 .21348 L .78669 .20377 L .78652 .2035 L .78048 .19406 L .77681 .18833 L .77424 .18434 L .76795 .17463 L .76709 .17331 L .76162 .16492 L .75738 .15844 L .75525 .15521 L .74884 .14549 L .74767 .14372 L .74239 .13578 L .73796 .12915 L .73589 .12607 L .72935 .11636 L .72824 .11472 L .72276 .10664 L .71853 .10045 L .71612 .09693 L .70944 .08722 L .70882 .08632 L .7027 .07751 L .69911 .07235 L .69592 .06779 L .68939 .05852 L .68908 .05808 L .6822 .04837 L .67968 .04484 L .67525 .03866 L .66997 .03131 L .66826 .02894 L .6612 .01923 L .98077 .01923 L F 0 g .98077 .53822 m .97851 .53399 L .97332 .52428 L .97106 .52007 L .9681 .51457 L .96285 .50486 L .96134 .50207 L .95759 .49514 L .9523 .48543 L .95163 .48421 L .94698 .47572 L .94192 .46651 L .94164 .46601 L .93628 .45629 L .93221 .44895 L .93089 .44658 L .92547 .43687 L .92249 .43154 L .92003 .42716 L .91457 .41744 L .91278 .41428 L .90907 .40773 L .90355 .39802 L .90307 .39718 L .898 .38831 L .89336 .38022 L .89242 .37859 L .88682 .36888 L .88364 .36341 L .88118 .35917 L .87552 .34946 L .87393 .34674 L .86982 .33974 L .86422 .33023 L .8641 .33003 L .85835 .32032 L .85451 .31387 L .85256 .31061 L .84674 .30089 L .84479 .29765 L .84089 .29118 L .83508 .28159 L .83501 .28147 L .82909 .27176 L .82537 .26567 L .82314 .26204 L .81716 .25233 L .81566 .24991 L .81113 .24262 L .80594 .23429 L Mistroke .80508 .23291 L .79899 .22319 L .79623 .21882 L .79286 .21348 L .78669 .20377 L .78652 .2035 L .78048 .19406 L .77681 .18833 L .77424 .18434 L .76795 .17463 L .76709 .17331 L .76162 .16492 L .75738 .15844 L .75525 .15521 L .74884 .14549 L .74767 .14372 L .74239 .13578 L .73796 .12915 L .73589 .12607 L .72935 .11636 L .72824 .11472 L .72276 .10664 L .71853 .10045 L .71612 .09693 L .70944 .08722 L .70882 .08632 L .7027 .07751 L .69911 .07235 L .69592 .06779 L .68939 .05852 L .68908 .05808 L .6822 .04837 L .67968 .04484 L .67525 .03866 L .66997 .03131 L .66826 .02894 L .6612 .01923 L Mfstroke .775 g .98077 .42532 m .97656 .41744 L .97136 .40773 L .97106 .40717 L .96613 .39802 L .96134 .38916 L .96088 .38831 L .95561 .37859 L .95163 .37131 L .95031 .36888 L .94498 .35917 L .94192 .3536 L .93964 .34946 L .93426 .33974 L .93221 .33604 L .92886 .33003 L .92344 .32032 L .92249 .31863 L .91799 .31061 L .91278 .30137 L .91251 .30089 L .90701 .29118 L .90307 .28426 L .90148 .28147 L .89592 .27176 L .89336 .2673 L .89033 .26204 L .88472 .25233 L .88364 .25048 L .87907 .24262 L .87393 .23382 L .8734 .23291 L .8677 .22319 L .86422 .2173 L .86196 .21348 L .8562 .20377 L .85451 .20093 L .8504 .19406 L .84479 .18471 L .84457 .18434 L .83871 .17463 L .83508 .16864 L .83282 .16492 L .82689 .15521 L .82537 .15272 L .82093 .14549 L .81566 .13695 L .81493 .13578 L .8089 .12607 L .80594 .12132 L .80284 .11636 L .79673 .10664 L .79623 .10585 L .79059 .09693 L .78652 .09052 L .78441 .08722 L .77819 .07751 L .77681 .07535 L .77194 .06779 L .76709 .06032 L .76564 .05808 L .7593 .04837 L .75738 .04544 L .75292 .03866 L .74767 .03071 L .7465 .02894 L .74003 .01923 L .98077 .01923 L F 0 g .98077 .42532 m .97656 .41744 L .97136 .40773 L .97106 .40717 L .96613 .39802 L .96134 .38916 L .96088 .38831 L .95561 .37859 L .95163 .37131 L .95031 .36888 L .94498 .35917 L .94192 .3536 L .93964 .34946 L .93426 .33974 L .93221 .33604 L .92886 .33003 L .92344 .32032 L .92249 .31863 L .91799 .31061 L .91278 .30137 L .91251 .30089 L .90701 .29118 L .90307 .28426 L .90148 .28147 L .89592 .27176 L .89336 .2673 L .89033 .26204 L .88472 .25233 L .88364 .25048 L .87907 .24262 L .87393 .23382 L .8734 .23291 L .8677 .22319 L .86422 .2173 L .86196 .21348 L .8562 .20377 L .85451 .20093 L .8504 .19406 L .84479 .18471 L .84457 .18434 L .83871 .17463 L .83508 .16864 L .83282 .16492 L .82689 .15521 L .82537 .15272 L .82093 .14549 L .81566 .13695 L .81493 .13578 L .8089 .12607 L .80594 .12132 L Mistroke .80284 .11636 L .79673 .10664 L .79623 .10585 L .79059 .09693 L .78652 .09052 L .78441 .08722 L .77819 .07751 L .77681 .07535 L .77194 .06779 L .76709 .06032 L .76564 .05808 L .7593 .04837 L .75738 .04544 L .75292 .03866 L .74767 .03071 L .7465 .02894 L .74003 .01923 L Mfstroke .7 g .98077 .33177 m .97984 .33003 L .97465 .32032 L .97106 .31361 L .96944 .31061 L .9642 .30089 L .96134 .29561 L .95894 .29118 L .95366 .28147 L .95163 .27775 L .94835 .27176 L .94302 .26204 L .94192 .26005 L .93766 .25233 L .93228 .24262 L .93221 .24249 L .92687 .23291 L .92249 .22508 L .92144 .22319 L .91598 .21348 L .91278 .20781 L .91049 .20377 L .90498 .19406 L .90307 .1907 L .89944 .18434 L .89387 .17463 L .89336 .17374 L .88827 .16492 L .88364 .15692 L .88265 .15521 L .877 .14549 L .87393 .14025 L .87131 .13578 L .8656 .12607 L .86422 .12373 L .85985 .11636 L .85451 .10736 L .85408 .10664 L .84827 .09693 L .84479 .09114 L .84243 .08722 L .83656 .07751 L .83508 .07507 L .83066 .06779 L .82537 .05914 L .82472 .05808 L .81875 .04837 L .81566 .04337 L .81274 .03866 L .8067 .02894 L .80594 .02774 L .80062 .01923 L .98077 .01923 L F 0 g .98077 .33177 m .97984 .33003 L .97465 .32032 L .97106 .31361 L .96944 .31061 L .9642 .30089 L .96134 .29561 L .95894 .29118 L .95366 .28147 L .95163 .27775 L .94835 .27176 L .94302 .26204 L .94192 .26005 L .93766 .25233 L .93228 .24262 L .93221 .24249 L .92687 .23291 L .92249 .22508 L .92144 .22319 L .91598 .21348 L .91278 .20781 L .91049 .20377 L .90498 .19406 L .90307 .1907 L .89944 .18434 L .89387 .17463 L .89336 .17374 L .88827 .16492 L .88364 .15692 L .88265 .15521 L .877 .14549 L .87393 .14025 L .87131 .13578 L .8656 .12607 L .86422 .12373 L .85985 .11636 L .85451 .10736 L .85408 .10664 L .84827 .09693 L .84479 .09114 L .84243 .08722 L .83656 .07751 L .83508 .07507 L .83066 .06779 L .82537 .05914 L .82472 .05808 L .81875 .04837 L .81566 .04337 L .81274 .03866 L .8067 .02894 L Mistroke .80594 .02774 L .80062 .01923 L Mfstroke .625 g .98077 .2501 m .97678 .24262 L .97157 .23291 L .97106 .23194 L .96635 .22319 L .96134 .21394 L .9611 .21348 L .95582 .20377 L .95163 .19608 L .95052 .19406 L .9452 .18434 L .94192 .17837 L .93986 .17463 L .93448 .16492 L .93221 .16081 L .92909 .15521 L .92366 .14549 L .92249 .1434 L .91822 .13578 L .91278 .12614 L .91274 .12607 L .90724 .11636 L .90307 .10903 L .90171 .10664 L .89615 .09693 L .89336 .09206 L .89057 .08722 L .88496 .07751 L .88364 .07524 L .87932 .06779 L .87393 .05857 L .87364 .05808 L .86794 .04837 L .86422 .04205 L .86221 .03866 L .85645 .02894 L .85451 .02568 L .85066 .01923 L .98077 .01923 L F 0 g .98077 .2501 m .97678 .24262 L .97157 .23291 L .97106 .23194 L .96635 .22319 L .96134 .21394 L .9611 .21348 L .95582 .20377 L .95163 .19608 L .95052 .19406 L .9452 .18434 L .94192 .17837 L .93986 .17463 L .93448 .16492 L .93221 .16081 L .92909 .15521 L .92366 .14549 L .92249 .1434 L .91822 .13578 L .91278 .12614 L .91274 .12607 L .90724 .11636 L .90307 .10903 L .90171 .10664 L .89615 .09693 L .89336 .09206 L .89057 .08722 L .88496 .07751 L .88364 .07524 L .87932 .06779 L .87393 .05857 L .87364 .05808 L .86794 .04837 L .86422 .04205 L .86221 .03866 L .85645 .02894 L .85451 .02568 L .85066 .01923 L s .55 g .98077 .17668 m .97968 .17463 L .97449 .16492 L .97106 .15853 L .96927 .15521 L .96403 .14549 L .96134 .14052 L .95877 .13578 L .95349 .12607 L .95163 .12266 L .94818 .11636 L .94285 .10664 L .94192 .10496 L .93749 .09693 L .93221 .0874 L .93211 .08722 L .9267 .07751 L .92249 .06998 L .92127 .06779 L .91581 .05808 L .91278 .05272 L .91032 .04837 L .90481 .03866 L .90307 .0356 L .89927 .02894 L .8937 .01923 L .98077 .01923 L F 0 g .98077 .17668 m .97968 .17463 L .97449 .16492 L .97106 .15853 L .96927 .15521 L .96403 .14549 L .96134 .14052 L .95877 .13578 L .95349 .12607 L .95163 .12266 L .94818 .11636 L .94285 .10664 L .94192 .10496 L .93749 .09693 L .93221 .0874 L .93211 .08722 L .9267 .07751 L .92249 .06998 L .92127 .06779 L .91581 .05808 L .91278 .05272 L .91032 .04837 L .90481 .03866 L .90307 .0356 L .89927 .02894 L .8937 .01923 L s .475 g .98077 .10943 m .97929 .10664 L .97409 .09693 L .97106 .09127 L .96888 .08722 L .96364 .07751 L .96134 .07327 L .95838 .06779 L .95309 .05808 L .95163 .05541 L .94778 .04837 L .94244 .03866 L .94192 .0377 L .93709 .02894 L .93221 .02014 L .9317 .01923 L .98077 .01923 L F 0 g .98077 .10943 m .97929 .10664 L .97409 .09693 L .97106 .09127 L .96888 .08722 L .96364 .07751 L .96134 .07327 L .95838 .06779 L .95309 .05808 L .95163 .05541 L .94778 .04837 L .94244 .03866 L .94192 .0377 L .93709 .02894 L .93221 .02014 L .9317 .01923 L s .4 g .98077 .047 m .97631 .03866 L .97111 .02894 L .97106 .02885 L .96588 .01923 L .98077 .01923 L F 0 g .98077 .047 m .97631 .03866 L .97111 .02894 L .97106 .02885 L .96588 .01923 L s 0 0 0 r .055 w .98077 .98077 Mdot .5 0 .5 r .04 w .01923 .0785 Mdot .09937 .05114 Mdot .25461 .01923 Mdot .41157 .1428 Mdot .52294 .2733 Mdot .72605 .52019 Mdot .79656 .65705 Mdot .8695 .77715 Mdot .98077 .9711 Mdot .98077 .98077 Mdot 1 1 0 r .025 w .01923 .0785 Mdot .98077 .25895 Mdot .09937 .05114 Mdot .25461 .01923 Mdot .41157 .1428 Mdot .52294 .2733 Mdot .72605 .52019 Mdot .79656 .65705 Mdot .94828 .90255 Mdot .8695 .77715 Mdot .98077 .9711 Mdot .98077 .98077 Mdot 0 0 1 r .5 Mabswid .01923 .0785 m .01923 .0785 L .09937 .05114 L .25461 .01923 L .41157 .1428 L .52294 .2733 L .72605 .52019 L .79656 .65705 L .8695 .77715 L .98077 .9711 L .98077 .98077 L s .015 w .01923 .0785 Mdot .01923 .0785 Mdot .09937 .05114 Mdot .25461 .01923 Mdot .41157 .1428 Mdot .52294 .2733 Mdot .72605 .52019 Mdot .79656 .65705 Mdot .8695 .77715 Mdot .98077 .9711 Mdot .98077 .98077 Mdot % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 288}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHg?ooool00ol0003oooooooooo`05 ooooo`004_ooool01?l0003oooooooooool00007ooooo`05o`000?ooooooooooooooool00000_ooool5o`00o`03oooo0?l00?oo003o00;o003o00?oool0ogl0Oomo07l0A_ooool00ol0003o k>c/onc/k00Monc/k003o`000?oIfMWofMWI01;ofMWI00?o0000olK6a_o6a/H03Oo6a/H00ol0003o /k>cok>c/`0;ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ohbcok>c/01gok>c/00?o0000omWIfOoIfMT04_oIfMT00ol0003oa/K6olK6aP0= olK6aP03o`000?nc/k?o/k>c00_o/k>c00?o0000oinOWonOWil02?nOWil00ol0003oS8bcok>c/01gok>c/00?o0000omWIfOoIfMT04_oIfMT00ol0003oa/K6olK6aP0=olK6 aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil02OnOWil00ol0003oS8bcok>c/01go k>c/00?o0000omWIfOoIfMT04OoIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc/k?o/k>c00[o /k>c00?o0000oinOWonOWil02OnOWil00ol0003oS8booooo`Co003o5?ooool4ogl0O`Cooooo00?o003oooooooooool0A_ooool00ol0003ok>c/ onc/k00Lonc/k003o`000?oIfMWofMWI01;ofMWI00?o0000olK6a_o6a/H03Oo6a/H00ol0003o/k>c ok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbc/onc/ k00Monc/k003o`000?oIfMWofMWI01;ofMWI00?o0000olK6a_o6a/H03Oo6a/H00ol0003o/k>cok>c /`0:ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ohbc/onc/k00M onc/k003o`000?oIfMWofMWI01;ofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>cok>c/`0: ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbc/00?o0000omWI fOoIfMT04OoIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinO WonOWil02OnOWil00ol0003oS8bcok>c/01co k>c/00?o0000omWIfOoIfMT04OoIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc/k?o/k>c00[o /k>c00?o0000oinOWonOWil02OnOWil00ol0003oS8b`0 7?o/k>`00ol0003ofMWIomWIf@0AomWIf@03o`000?o6a/Koa/K600goa/K600?o0000ok>c/onc/k<0 2_nc/k<00ol0003oWinOoinOW`08oinOW`03o`000?nc/onc/k00Lonc/k003o`000?oI fMWofMWI017ofMWI0_l0000>olK6aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil02?nO Wil00ol0003oS8bcok>c/01cok>c/00?o0000omWIfOoIfMT04OoIfMT0 0ol0003oa/K6olK6aP0c00[o/k>c00?o0000oinOWonOWil02?nOWil0 0ol0003oS8b`07?o/k>`00ol0003ofMWIomWIf@0AomWIf@03o`000?o6a/Koa/K6 00coa/K600?o0000ok>c/onc/k<02_nc/k<00ol0003oWinOoinOW`08oinOW`03o`000?nc/onc/k00K onc/k003o`000?oIfMWofMWI017ofMWI00?o0000olK6a_o6a/H03Oo6a/H00ol0003o/k>cok>c/`09 ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohb`06oo/ k>`00ol0003ofMWIomWIf@0BomWIf@03o`000?o6a/Koa/K600goa/K600?o0000ok>c/onc/k<02Onc /k<00ol0003oWinOoinOW`08oinOW`03o`000?nooooo`03o`00oooo oooooooo047ooooo00?o0000onc/k?o/k>`06oo/k>`00ol0003ofMWIomWIf@0AomWIf@03o`000?o6 a/Koa/K600goa/K600?o0000ok>c/onc/k<02_nc/k<00ol0003oWinOoinOW`08oinOW`03o`000?n< S8coS8b<00OoS8b<00Co0000ogUiNOmiNGWoNGUi1?ooool2o`00007ooooo00001Ooooooo0000oooo oooooooo000000[ooooo00?o0000ooooooooool00oooool2ogl0O`04oooo0?l00?oo003oo`00o`;o ool00_mo07m?ooooo`03o`00oooooooooooo043ooooo00?o0000onc/k?o/k>`07?o/k>`00ol0003o fMWIomWIf@0@omWIf@03o`000?o6a/Koa/K600goa/K600?o0000ok>c/onc/k<02_nc/k<00ol0003o WinOoinOW`08oinOW`03o`000?ncok>c/01cok>c/00?o0000omWIfOoIfMT04?oIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc /k?o/k>c00[o/k>c00?o0000oinOWonOWil02?nOWil00ol0003oS8bcok>c/01_ok>c/00?o0000omWIfOoIfMT04OoIfMT2o`0000koa/K6 00?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinOW`08oinOW`03o`000?n`06oo/ k>`00ol0003ofMWIomWIf@0AomWIf@03o`000?o6a/Koa/K600coa/K600?o0000ok>c/onc/k<02_nc /k<00ol0003oWinOoinOW`08oinOW`03o`000?ncok>c/01_ok>c/00?o0000omWIfOoIfMT04OoIfMT00ol0003oa/K6olK6aP0< olK6aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil02?nOWil00ol0003oS8bc/onc/k00Lonc/k003o`000?oIfMWofMWI013ofMWI00?o0000olK6 a_o6a/H03?o6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ohb< S?ncok>c/01_ok>c/00?o0000omWIfOoI fMT04OoIfMT00ol0003oa/K6olK6aP0c00[o/k>c00?o0000oinOWonO Wil02?nOWil00ol0003oS8b`0 6oo/k>`00ol0003ofMWIomWIf@0@omWIf@03o`000?o6a/Koa/K600goa/K600?o0000ok>c/onc/k<0 2Onc/k<2o`0000WoWinO00?o0000ohbcok>c/01[ok>c/00?o0000omWIfOoIfMT04OoIfMT00ol0003oa/K6olK6aP0c00[o/k>c00?o0000oinOWonOWil02?nOWil00ol0003oS8bc/onc/k00J onc/k0;o00004_oIfMT00ol0003oa/K6olK6aP0c00[o/k>c00?o0000 oinOWonOWil02?nOWil00ol0003oS8b`06_o/k>`00ol0 003ofMWIomWIf@0@omWIf@03o`000?o6a/Koa/K600coa/K600?o0000ok>c/onc/k<02_nc/k<00ol0 003oWinOoinOW`08oinOW`03o`000?noooool00ol0003ok>c/onc/k00Konc/k003 o`000?oIfMWofMWI013ofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>cok>c/`0:ok>c/`03 o`000?nOWiooWinO00SoWinO00?o0000ohbc/ onc/k00Jonc/k003o`000?oIfMWofMWI017ofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>c ok>c/`09ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ohb`06oo/k>`00ol0003ofMWIomWIf@0@omWIf@03o`000?o6a/Koa/K600coa/K600?o 0000ok>c/onc/k<02_nc/k<00ol0003oWinOoinOW`07oinOW`03o`000?nc/00?o0000omWIfOoIfMT04?oIfMT00ol0003oa/K6olK6aP0c00[o/k>c00?o0000oinOWonOWil01onOWil00ol0003oS8b`06_o/k>`00ol0003ofMWIomWIf@0@omWIf@03o`000?o6 a/Koa/K600coa/K600?o0000ok>c/onc/k<02_nc/k<00ol0003oWinOoinOW`07oinOW`03o`000?n< S8coS8b<00?oS8b<1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo06Gooooo0_mo07l2 oooo00?o003o00?oool0ogl0Oomo07l0=oooool00ol0003ok>c/onc/k00Jonc/k003o`000?oIfMWo fMWI013ofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWioo WinO00OoWinO00?o0000ohbcok>c/ 01Wok>c/0_l0000BomWIf@03o`000?o6a/Koa/K600coa/K600?o0000ok>c/onc/k<02Onc/k<00ol0 003oWinOoinOW`08oinOW`04o`000?n`06_o/k>`00ol0003ofMWIomWIf@0@omWIf@03o`000?o6a/Koa/K600coa/K600?o0000ok>c /onc/k<02Onc/k<00ol0003oWinOoinOW`08oinOW`04o`000?ncok>c/01[ok>c/00?o0000omWIfOoIfMT04?oIfMT00ol0003oa/K6olK6aP0c00Wo/k>c00?o0000oinOWonOWil02?nOWil00ol0003oS8b`06Oo/k>`2o`00017ofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o /k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00OoWinO0_l000000onOooool00ol0003ok>c/onc/k00Ionc/k003o`000?oIfMWofMWI013ofMWI00?o0000olK6a_o6a/H0 3?o6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ohbOoo ool00ol0003ok>c/onc/k00Ionc/k003o`000?oIfMWofMWI013ofMWI00?o0000olK6a_o6a/H03?o6 a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ooooooooool00ooo ool1o`00007ooooo000Eooooo`03o`000?oooooooooo073ooooo00?o003oooooooooool0>?ooool0 0ol0003ok>c/onc/k00Jonc/k003o`000?oIfMWofMWI013ofMWI00?o0000olK6a_o6a/H02oo6a/H0 0ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00SoWinO00?o0000ooooooooool00oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo0_l0001/ooooo`03o`00oooooooooooo 03Wooooo00?o0000onc/k?o/k>`06_o/k>`00ol0003ofMWIomWIf@0?omWIf@03o`000?o6a/Koa/K6 00coa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinOW`08oinOW`03o`000?oooooooooo 00;ooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`;ok>c/0ol0001Zooooo`03 o`00oooooooooooo03Wooooo00?o0000onc/k?o/k>`06Oo/k>`00ol0003ofMWIomWIf@0@omWIf@03 o`000?o6a/Koa/K600_oa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinOW`08oinOW`03 o`000?oooooooooo00;ooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`Gok>c/ 0ol0001Xooooo`03o`00oooooooooooo03Sooooo00?o0000onc/k?o/k>`06Oo/k>`00ol0003ofMWI omWIf@0@omWIf@03o`000?o6a/Koa/K600coa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinO oinOW`07oinOW`Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`Sok>c/00?o 0000ooooooooool0I_ooool00ol00?ooooooooooo`0hooooo`03o`000?o/k>cok>c/01Wok>c/00?o 0000omWIfOoIfMT04?oIfMT00ol0003oa/K6olK6aP0c00Wo/k>c00?o 0000oinOWonOWil01_nOWil5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool9 onc/k003o`000?oooooooooo06Kooooo00?o003oooooooooool0>?ooool00ol0003ok>c/onc/k00I onc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>cok>c/`09 ok>c/`03o`000?nOWiooWinO00KoWinO1Oooool1o`00007ooooo000Eooooo`;o00000oooool:onc/ k0?o0000I_ooool00ol00?ooooooooooo`0gooooo`03o`000?o/k>cok>c/01Wok>c/00?o0000omWI fOoIfMT04?oIfMT00ol0003oa/K6olK6aP0c00Wo/k>c00?o0000oinO WonOWil01OnOWil4ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_ooool=onc/k0;o 0000IOooool00ol00?ooooooooooo`0gooooo`03o`000?o/k>cok>c/01Wok>c/00?o0000omWIfOoI fMT04?oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00Wo/k>c0_l00006oinOW`Go oooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`ook>c/0ol0001Rooooo`03o`00 oooooooooooo03Sooooo00?o0000onc/k?o/k>`06Oo/k>`00ol0003ofMWIomWIf@0?omWIf@03o`00 0?o6a/Koa/K600coa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinOW`04oinOW`Gooooo 0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa;ok>c/0_l0001Qooooo`03o`00oooo oooooooo03Sooooo00?o0000onc/k?o/k>`06Oo/k>`00ol0003ofMWIomWIf@0?omWIf@03o`000?o6 a/Koa/K600coa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinOW`03oinOW`Gooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02oooooaCok>c/00?o0000ooooooooool0Goooool0 0ol00?ooooooooooo`0gooooo`03o`000?o/k>cok>c/01Wok>c/00?o0000omWIfOoIfMT03ooIfMT0 0ol0003oa/K6olK6aP0c00Wo/k>c00?o0000oinOWonOWil00onOWil5 ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolEonc/k0;o0000H?ooool00ol0 0?ooooooooooo`0gooooo`03o`000?o/k>cok>c/01Wok>c/00?o0000omWIfOoIfMT03ooIfMT00ol0 003oa/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil00_nOWil5oooo o`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolGonc/k0?o0000G_ooool00ol00?oo ooooooooo`0gooooo`03o`000?o/k>cok>c/01Sok>c/00?o0000omWIfOoIfMT04?oIfMT00ol0003o a/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00Wo/k>c00?o0000oinOWonOWil00_nOWil5ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_oooolJonc/k003o`000?oooooooooo05cooooo 00?o003oooooooooool0=_ooool00ol0003ok>c/onc/k00Ionc/k003o`000?oIfMWofMWI00oofMWI 00?o0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00;oWinO 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo6oo/k>`00ol0003ooooooooo o`1Looooo`03o`00oooooooooooo03Kooooo00?o0000onc/k?o/k>`06?o/k>`00ol0003ofMWIomWI f@0?omWIf@03o`000?o6a/Koa/K600coa/K600?o0000ok>c/onc/k<02Onc/k<01?l0003oWinOoinO WonOWil5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolLonc/k0?o0000Fooo ool00ol00?ooooooooooo`0gooooo`03o`000?o/k>cok>c/01Sok>c/00?o0000omWIfOoIfMT03ooI fMT00ol0003oa/K6olK6aP0c00So/k>c00Co0000oinOWonOWiooWinO 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo7oo/k>`00ol0003ooooooooo o`1Iooooo`03o`00oooooooooooo03Kooooo0_l0000Jonc/k003o`000?oIfMWofMWI00oofMWI00?o 0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00Gooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02ooooob3ok>c/00?o0000ooooooooool0FOooool0 0ol00?ooooooooooo`0gooooo`03o`000?o/k>cok>c/01Sok>c/00?o0000omWIfOoIfMT03ooIfMT0 0ol0003oa/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00Wo/k>c00?o0000oinOWoooool01?ooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo8Oo/k>`3o`0005Wooooo00?o003ooooo ooooool0=_ooool00ol0003ok>c/onc/k00Honc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6 a_o6a/H02oo6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWioooooo00Cooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02ooooobCok>c/00?o0000ooooooooool0Eoooool00ol00?oo ooooooooo`0fooooo`03o`000?o/k>cok>c/01Ook>c/00?o0000omWIfOoIfMT04?oIfMT00ol0003o a/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00Wo/k>c00?o0000ooooooooool00oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;ooooo9Oo/k>`2o`0005Sooooo00?o003oooooooooool0 =Oooool00ol0003ok>c/onc/k00Honc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6a_o6a/H0 2oo6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?oooooooooo00?ooooo0Ol00001ooooo`005Ooo ool2o`0000?ooooo9oo/k>`2o`0005Oooooo00?o003oooooooooool0=Oooool00ol0003ok>c/onc/ k00Gonc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>cok>c /`08ok>c/`03o`000?oooooooooo00;ooooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02 ooooobWok>c/00?o0000ooooooooool0E?ooool00ol00?ooooooooooo`0fooooo`03o`000?o/k>co k>c/01Ook>c/0_l0000@omWIf@;o00003Oo6a/H00ol0003o/k>cok>c/`06ok>c/`Coool00oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo:Oo/k>`3o`0005Gooooo00?o003ooooo ooooool0=_ooool00ol0003ok>c/onc/k00Gonc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6 a_o6a/H02oo6a/H00ol0003o/k>cok>c/`05ok>c/`Koool00_ooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;ooooo;?o/k>`00ol0003oooooooooo`1Cooooo`03o`00ooooooooO`1o00?o O`1o<_ooool00ol0003ok>c/onc/k00Honc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6a_o6 a/H02oo6a/H00ol0003o/k>cok>c/`04ok>c/`Koool00_ooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo;Oo/k>`00ol0003oooooooooo`1Booooo`03ogl0Ool00?ooO`1o00GoO`1o c/onc/k00Gonc/k003o`000?oIfMWofMWI00oofMWI00?o0000olK6a_o6a/H0 2oo6a/H00ol0003o/k>cok>c/`04ok>c/`Koool00_ooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooo;_o/k>`00ol0003oooooooooo`1Aooooo`;oO`1o00Co003ooooo0?ooo`3oool0 0_mo07laooooo`03o`000?o/k>cok>c/01Sok>c/00?o0000omWIfOoIfMT03ooIfMT00ol0003oa/K6 olK6aP0:olK6aP03o`000?nc/k?o/k>c00Co/k>c1_ooo`02ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_ooool_onc/k003o`000?oooooooooo04oooooo0_mo07l01?ooo`3o003oo`00 ool00?l2oooo00;oO`1oc/onc/k00Gonc/k003o`000?oIfMWofMWI00oofMWI 00?o0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`04ok>c/`Coool00oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;ooooo`3o`0004kooooo0_mo07l01?ooo`3o003oo`00 ool00?l2oooo00;oO`1o<_ooool00ol0003ok>c/onc/k00Gonc/k003o`000?oIfMWofMWI00oofMWI 00?o0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`05ok>c/`Gooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02oooooc?ok>c/00?o0000ooooooooool0Boooool2ogl0O`04oooo0?l0 0?oo003oo`00o`;oool00_mo07lbooooo`03o`000?o/k>cok>c/01Sok>c/00?o0000omWIfOoIfMT0 3_oIfMT00ol0003oa/K6olK6aP0c00Co/k>c1Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;ooooo=?o/k>`2o`0004_ooooo0_mo07l4oooo0004o`00oooo o`3oO`1oogl0Oc?ooooo00?o0000onc/k?o/k>`06?o/k>`00ol0003ofMWIomWIf@0>omWIf@03o`00 0?o6a/Koa/K600_oa/K600?o0000ok>c/onc/k<01?nc/k<5ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_oooolfonc/k003o`000?oooooooooo04Wooooo0_mo07l4oooo0003o`00oomo 07oooooo03Cooooo00?o0000onc/k?o/k>`05oo/k>`00ol0003ofMWIomWIf@0?omWIf@03o`000?o6 a/Koa/K600[oa/K600?o0000ok>c/onc/k<01?nc/k<5ooooo`7o00000Oooool001Gooooo00?o0000 ooooooooool00_oooolgonc/k003o`000?oooooooooo04Sooooo1omo07l00ol00?ooooooooooo`0c ooooo`03o`000?o/k>cok>c/01Sok>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6aP0; olK6aP03o`000?nc/k?o/k>c00?o/k>c1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo 00;ooooo>?o/k>`2o`0004[ooooo1?mo07l2ooooo`03o`00oooooooooooo03?ooooo00?o0000onc/ k?o/k>`05oo/k>`00ol0003ofMWIomWIf@0?omWIf@03o`000?o6a/Koa/K600[oa/K600?o0000ok>c /onc/k<00onc/k<5ooooo`7o00000Oooool000;ooooo0_l00004ooooo`03o`000?oooooooooo00?o oooo0ol00004ooooo`03o`000?oooooooooo00;ooooo>_o/k>`00ol0003oooooooooo`1>ooooo`03 o`00oooooooooooo03;ooooo00?o0000onc/k?o/k>`06?o/k>`00ol0003ofMWIomWIf@0>omWIf@03 o`000?o6a/Koa/K600_oa/K600?o0000ok>c/onc/k<00_nc/k<5ooooo`7o00000Oooool00005oooo ool0003oooooooooool000002_ooool00ol0003oooooooooo`03ooooo`03o`000?oooooooooo00;o oooo>oo/k>`2o`0004kooooo00?o003oooooooooool0c/00?o0000omWIfOoI fMT03_oIfMT00ol0003oa/K6olK6aP0;olK6aP04o`000?nc/k?o/k>cok>c/`Gooooo0Ol00001oooo o`0000Goooooo`000?ooooooooooo`000007ooooo`Go00001?ooool2o`0000?ooooo?Oo/k>`00ol0 003oooooooooo`1`05oo/k>`00ol0 003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600_oa/K600Co0000ok>c/onc/k?o/k>c1?ooool2 o`00007ooooo00001Ooooooo0000oooooooooooo000000Oooooo00Co0000oooooooooooo00001Ooo ool00ol0003oooooooooo`02ooooockok>c/00?o0000ooooooooool0C?ooool00ol00?oooooooooo o`0cooooo`03o`000?o/k>cok>c/01Ook>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6 aP0;olK6aP03o`000?nc/k?o/k>c00Gooooo0Ol00001ooooo`0000Goooooo`000?ooooooooooo`00 0008ooooo`03o`000?oooooo000000Gooooo00?o0000ooooooooool00_ooooloonc/k003o`000?oo oooooooo04cooooo00?o003oooooooooool0c/onc/k00Fonc/k003o`000?oI fMWofMWI00oofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`05ooooo`7o00000Ooo ool00005ooooool0003oooooooooool000002Oooool2o`0000Gooooo00?o0000ooooooooool00_oo oom0onc/k0;o0000COooool00ol00?ooooooooooo`0booooo`03o`000?o/k>cok>c/01Ook>c/00?o 0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?nc/k?ooooo00Cooooo0Ol0 0001ooooo`000_ooool2o`0000_ooooo00?o0000ooooooooool00oooool00ol0003oooooooooo`02 oooood;ok>c/00?o0000ooooooooool0B_ooool00ol00?ooooooooooo`0cooooo`03o`000?o/k>co k>c/01Ook>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?oooooo oooo00?ooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooood?ok>c/00?o0000oooo ooooool0B_ooool00ol00?ooooooooooo`0cooooo`03o`000?o/k>cok>c/01Kok>c/00?o0000omWI fOoIfMT03_oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?oooooooooo00?ooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02ooooodCok>c/00?o0000ooooooooool0B_ooool00ol00?oo ooooooooo`0cooooo`03o`000?o/k>cok>c/01Kok>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003o a/K6olK6aP0;olK6aP03o`000?oooooooooo00;ooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooo`?o0000@_o/k>`2o`0004_ooooo00?o003oooooooooool0<_ooool00ol0003ok>c/ onc/k00Fonc/k003o`000?oIfMWofMWI00kofMWI00?o0000olK6a_o6a/H02oo6a/H00ol0003ooooo ooooo`02ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool3omWIf@;o0000@_o/ k>`00ol0003oooooooooo`19ooooo`03o`00oooooooooooo037ooooo00?o0000onc/k?o/k>`05_o/ k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600_oa/K61Oooool1o`00007ooooo000E ooooo`03o`000?oooooooooo00;ooooo1OoIfMT00ol0003ok>c/onc/k010onc/k003o`000?oooooo oooo04Wooooo00?o003oooooooooool0c/onc/k00Fonc/k003o`000?oIfMWo fMWI00kofMWI00?o0000olK6a_o6a/H02_o6a/H5ooooo`7o00000Oooool001Gooooo00?o0000oooo ooooool00_ooool5omWIf@?o0000@?o/k>`2o`0004[ooooo00?o003oooooooooool0<_ooool00ol0 003ok>c/onc/k00Fonc/k003o`000?oIfMWofMWI00kofMWI00?o0000olK6a_o6a/H02Oo6a/H5oooo o`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool8omWIf@;o0000@?o/k>`00ol0003o ooooooooo`18ooooo`03o`00oooooooooooo037ooooo00?o0000onc/k?o/k>`05oo/k>`00ol0003o fMWIomWIf@0=omWIf@03o`000?o6a/Koa/K600Woa/K61Oooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo2_oIfMT3o`0003kok>c/0_l00019ooooo`03o`00oooooooooooo037ooooo 00?o0000onc/k?o/k>`05_o/k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600Soa/K6 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo3OoIfMT2o`0003gok>c/00?o 0000ooooooooool0B?ooool00ol00?ooooooooooo`0aooooo`03o`000?o/k>cok>c/01Gok>c/00?o 0000omWIfOoIfMT03ooIfMT00ol0003oa/K6olK6aP07olK6aPGooooo0Ol00001ooooo`005Oooool0 0ol0003oooooooooo`02ooooo`oofMWI0_l0000lonc/k0;o0000BOooool00ol00?ooooooooooo`0a ooooo`03o`000?o/k>cok>c/01Gok>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6aP07 olK6aPGooooo0Ol00001ooooo`005Oooool2o`0000?ooooo4OoIfMT3o`0003_ok>c/00?o0000oooo ooooool0A_ooool00ol00?ooooooooooo`0aooooo`03o`000?o/k>cok>c/01Kok>c/00?o0000omWI fOoIfMT03_oIfMT00ol0003oa/K6olK6aP06olK6aPCooooo0_l00001ooooo`005Oooool00ol0003o ooooooooo`02oooooaCofMWI00?o0000onc/k?o/k>`0>Oo/k>`2o`0004Oooooo00?o003ooooooooo ool0c/onc/k00Eonc/k003o`000?oIfMWofMWI00kofMWI00?o0000olK6a_o6 a/H01_o6a/H5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolEomWIf@;o0000 >oo/k>`00ol0003oooooooooo`15ooooo`03o`00oooooooooooo037ooooo00?o0000onc/k?o/k>`0 5Oo/k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600Goa/K61Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;ooooo5ooIfMT3o`0003Sok>c/00?o0000ooooooooool0A_oo ool00ol00?ooooooooooo`0`ooooo`03o`000?o/k>cok>c/01Gok>c/00?o0000omWIfOoIfMT03ooI fMT00ol0003oa/K6olK6aP04olK6aPGooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 oooooa[ofMWI00?o0000onc/k?o/k>`0=_o/k>`00ol0003oooooooooo`16ooooo`03o`00oooooooo oooo02oooooo00?o0000onc/k?o/k>`05_o/k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Ko a/K600Coa/K61Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo6ooIfMT00ol0 003ok>c/onc/k00fonc/k0;o0000Aoooool00ol00?ooooooooooo`0_ooooo`03o`000?o/k>cok>c/ 01Kok>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6aP03olK6aPGooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02oooooacofMWI0ol0000gonc/k003o`000?oooooooooo04Co oooo00?o003oooooooooool0c/onc/k00Eonc/k003o`000?oIfMWofMWI00ko fMWI00?o0000olK6a_o6a/H00oo6a/H5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool0 0_oooolOomWIf@03o`000?o/k>cok>c/03Gok>c/00?o0000ooooooooool0A?ooool00ol00?oooooo ooooo`0`ooooo`03o`000?o/k>cok>c/01Gok>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6 olK6aP02olK6aPGooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooob3ofMWI00?o 0000onc/k?o/k>`0=Oo/k>`00ol0003oooooooooo`14ooooo`03o`00oooooooooooo02oooooo00?o 0000onc/k?o/k>`05Oo/k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600;oa/K61Ooo ool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo8OoIfMT3o`0003Gok>c/00?o0000 ooooooooool0A?ooool00ol00?ooooooooooo`0^ooooo`03o`000?o/k>cok>c/01Kok>c/00?o0000 omWIfOoIfMT03OoIfMT00ol0003oa/K6olK6aP02olK6aPGooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02ooooobCofMWI0_l0000donc/k003o`000?oooooooooo04Cooooo00?o003ooooo ooooool0;_ooool00ol0003ok>c/onc/k00Fonc/k003o`000?oIfMWofMWI00gofMWI00Co0000olK6 a_o6a/Koa/K61Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo9_oIfMT00ol0 003ok>c/onc/k00bonc/k003o`000?oooooooooo04?ooooo00?o003oooooooooool0;_ooool00ol0 003ok>c/onc/k00Fonc/k003o`000?oIfMWofMWI00gofMWI00Co0000olK6a_o6a/Koa/K61Oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo9ooIfMT00ol0003ok>c/onc/k00bonc/ k003o`000?oooooooooo04?ooooo00?o003oooooooooool0;_ooool00ol0003ok>c/onc/k00Fonc/ k003o`000?oIfMWofMWI00gofMWI00?o0000olK6a_o6a/H01Oooool1o`00007ooooo000Eooooo`03 o`000?oooooooooo00;ooooo:?oIfMT00ol0003ok>c/onc/k00bonc/k003o`000?oooooooooo04?o oooo00?o003oooooooooool0;_ooool00ol0003ok>c/onc/k00Eonc/k003o`000?oIfMWofMWI00ko fMWI00?o0000olK6a_ooool01?ooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo :OoIfMT3o`0003;ok>c/00?o0000ooooooooool0@oooool00ol00?ooooooooooo`0^ooooo`03o`00 0?o/k>cok>c/01Gok>c/00?o0000omWIfOoIfMT03OoIfMT00ol0003oa/K6ooooo`04ooooo`7o0000 0Oooool001Gooooo0_l00003ooooobcofMWI00?o0000onc/k?o/k>`0`2o`0004Cooooo00?o 003oooooooooool0;_ooool00ol0003ok>c/onc/k00Eonc/k003o`000?oIfMWofMWI00gofMWI00?o 0000ooooooooool00_ooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo;OoIfMT0 0ol0003ok>c/onc/k00aonc/k003o`000?oooooooooo04;ooooo00?o003oooooooooool0;Oooool0 0ol0003ok>c/onc/k00Eonc/k003o`000?oIfMWofMWI00gofMWI00?o0000ooooooooool00oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo;_oIfMT2o`0003;ok>c/00?o0000oooo ooooool0@Oooool00ol00?ooooooooooo`0]ooooo`03o`000?o/k>cok>c/01Kok>c/00?o0000omWI fOoIfMT03OoIfMT00ol0003oooooooooo`02ooooo`7o00000Oooool001Gooooo00?o0000oooooooo ool00_ooool`omWIf@03o`000?o/k>cok>c/02ook>c/0_l00013ooooo`03o`00oooooooooooo02go oooo00?o0000onc/k?o/k>`05Oo/k>`00ol0003ofMWIomWIf@0=omWIf@Gooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02oooooc7ofMWI0_l0000aonc/k003o`000?oooooooooo047ooooo 00?o003oooooooooool0;Oooool00ol0003ok>c/onc/k00Eonc/k003o`000?oIfMWofMWI00cofMWI 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;oooooc/00?o 0000ooooooooool0@Oooool00ol00?ooooooooooo`0]ooooo`03o`000?o/k>cok>c/01Gok>c/00?o 0000omWIfOoIfMT02ooIfMT5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooole omWIf@03o`000?o/k>cok>c/02gok>c/00?o0000ooooooooool0@_ooool00ol00?ooooooooooo`0/ ooooo`03o`000?o/k>cok>c/01Gok>c/00?o0000omWIfOoIfMT02ooIfMT5ooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_oooolfomWIf@03o`000?o/k>cok>c/02gok>c/00?o0000oooo ooooool0@Oooool00ol00?ooooooooooo`0]ooooo`03o`000?o/k>cok>c/01Gok>c/00?o0000omWI fOoIfMT02_oIfMT5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool3o`0003Co fMWI0_l0000^onc/k0;o0000@_ooool00ol00?ooooooooooo`0/ooooo`03o`000?o/k>cok>c/01Go k>c/00?o0000omWIfOoIfMT02_oIfMT5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool0 0_ooool3olK6aP;o0000=?oIfMT00ol0003ok>c/onc/k00]onc/k003o`000?oooooooooo043ooooo 00?o003oooooooooool0;?ooool00ol0003ok>c/onc/k00Donc/k003o`000?oIfMWofMWI00[ofMWI 1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo1Oo6a/H2o`0003?ofMWI00?o 0000onc/k?o/k>`0;Oo/k>`00ol0003oooooooooo`10ooooo`03o`00oooooooooooo02_ooooo00?o 0000onc/k?o/k>`05?o/k>`00ol0003ofMWIomWIf@0:omWIf@Gooooo0Ol00001ooooo`005Oooool0 0ol0003oooooooooo`02ooooo`Ooa/K60ol0000aomWIf@;o0000;Oo/k>`00ol0003oooooooooo`11 ooooo`03o`00oooooooooooo02_ooooo00?o0000onc/k?o/k>`05?o/k>`00ol0003ofMWIomWIf@09 omWIf@Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`[oa/K60_l0000aomWI f@03o`000?o/k>cok>c/02_ok>c/00?o0000ooooooooool0@Oooool00ol00?ooooooooooo`0Zoooo o`03o`000?o/k>cok>c/01Gok>c/00?o0000omWIfOoIfMT02?oIfMT5ooooo`7o00000Oooool001Go oooo00?o0000ooooooooool00_oooolc/onc/k00[onc/k0;o 0000@Oooool00ol00?ooooooooooo`0[ooooo`03o`000?o/k>cok>c/01Gok>c/00?o0000omWIfOoI fMT01ooIfMT5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool>olK6aP03o`00 0?oIfMWofMWI02kofMWI00?o0000onc/k?o/k>`0;?o/k>`00ol0003oooooooooo`0oooooo`03o`00 oooooooooooo02_ooooo00?o0000onc/k?o/k>`05?o/k>`00ol0003ofMWIomWIf@07omWIf@Gooooo 0Ol00001ooooo`005Oooool2o`0000?ooooo3oo6a/H3o`0002kofMWI00?o0000onc/k?o/k>`0;?o/ k>`00ol0003oooooooooo`0oooooo`03o`00oooooooooooo02[ooooo00?o0000onc/k?o/k>`05Oo/ k>`00ol0003ofMWIomWIf@06omWIf@Cooooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02 oooooa;oa/K60ol0000/omWIf@;o0000;?o/k>`00ol0003oooooooooo`10ooooo`03o`00oooooooo oooo02[ooooo00?o0000onc/k?o/k>`05?o/k>`00ol0003ofMWIomWIf@06omWIf@Gooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02oooooaGoa/K60_l0000/omWIf@;o0000:oo/k>`00ol0 003oooooooooo`10ooooo`03o`00oooooooooooo02Wooooo00?o0000onc/k?o/k>`05Oo/k>`00ol0 003ofMWIomWIf@05omWIf@Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooaOo a/K60_l0000/omWIf@03o`000?o/k>cok>c/02Wok>c/0_l00010ooooo`03o`00oooooooooooo02[o oooo00?o0000onc/k?o/k>`05Oo/k>`00ol0003ofMWIomWIf@04omWIf@Gooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02oooooaWoa/K600?o0000omWIfOoIfMT0:_oIfMT00ol0003ok>c/ onc/k00Yonc/k003o`000?oooooooooo03oooooo00?o003oooooooooool0:Oooool00ol0003ok>c/ onc/k00Eonc/k003o`000?oIfMWofMWI00CofMWI1Oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooo6_o6a/H2o`0002_ofMWI00?o0000onc/k?o/k>`0:Oo/k>`00ol0003ooooooooo o`0oooooo`03o`00oooooooooooo02Wooooo00?o0000onc/k?o/k>`05Oo/k>`00ol0003ofMWIomWI f@03omWIf@Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooacoa/K60_l0000Z omWIf@;o0000:_o/k>`00ol0003oooooooooo`0oooooo`03o`00oooooooooooo02Wooooo00?o0000 onc/k?o/k>`05?o/k>`00ol0003ofMWIomWIf@03omWIf@Gooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02oooooakoa/K600?o0000omWIfOoIfMT0:OoIfMT00ol0003ok>c/onc/k00Xonc/ k003o`000?oooooooooo03oooooo00?o003oooooooooool0:Oooool00ol0003ok>c/onc/k00Conc/ k003o`000?oIfMWofMWI00?ofMWI1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o oooo7oo6a/H2o`0002[ofMWI00?o0000onc/k?o/k>`0:?o/k>`00ol0003oooooooooo`0oooooo`03 o`00ooooooooO`1o00?oO`1o9_ooool00ol0003ok>c/onc/k00Conc/k0;o00000ooIfMT5ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_oooolQolK6aP;o0000:OoIfMT00ol0003ok>c/ onc/k00Xonc/k003o`000?oooooooooo03kooooo00?o003oogl0Oomo07l01Omo07lTooooo`03o`00 0?o/k>cok>c/01Cok>c/00Co0000omWIfOoIfMWofMWI1Oooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo8oo6a/H00ol0003ofMWIomWIf@0WomWIf@03o`000?o/k>cok>c/02Sok>c/ 00?o0000ooooooooool0?Oooool00omo07oo003ooooo0003oooo00;oO`1o9Oooool00ol0003ok>c/ onc/k00Donc/k003o`000?oIfMWofMWI00Gooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02ooooobCoa/K60ol0000WomWIf@;o0000:Oo/k>`00ol0003oooooooooo`0kooooo`;oO`1o00?o ool0o`00ooooo`000oooo`02ogl0ObCooooo00?o0000onc/k?o/k>`05?o/k>`00ol0003ofMWIomWI f@05ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolWolK6aP03o`000?oIfMWo fMWI02KofMWI00?o0000onc/k?o/k>`09_o/k>`00ol0003oooooooooo`0kooooo`;oO`1o00Coool0 o`00ool00?oo003o0_ooo`02ogl0ObCooooo00?o0000onc/k?o/k>`05Oo/k>`00ol0003ofMWIoooo o`04ooooo`7o00000Oooool000;ooooo0_l00004ooooo`03o`000?oooooooooo00;ooooo0ol00005 ooooo`03o`000?oooooooooo00;ooooo:?o6a/H00ol0003ofMWIomWIf@0UomWIf@03o`000?o/k>co k>c/02Ook>c/00?o0000ooooooooool0>_ooool2ogl0O`04oooo0?l00?oo003oo`00o`;oool00_mo 07lUooooo`03o`000?o/k>cok>c/01Cok>c/00?o0000omWIfOooool01?ooool1o`00007ooooo0000 1Ooooooo0000oooooooooooo000000Oooooo00Go0000ooooooooooooooooo`000004ooooo`03o`00 0?oooooooooo00;ooooo:Oo6a/H2o`0002KofMWI00?o0000onc/k?o/k>`09oo/k>`2o`0003[ooooo 0_mo07l01?ooo`3o003oo`00ool00?l2oooo00;oO`1o9_ooool00ol0003ok>c/onc/k00Conc/k003 o`000?oIfMWooooo00Cooooo0Ol00001ooooo`0000Goooooo`000?ooooooooooo`000007ooooo`05 o`000?ooooooooooooooool000001?ooool2o`0000?ooooo:oo6a/H00ol0003ofMWIomWIf@0TomWI f@;o0000:?o/k>`00ol0003oooooooooo`0iooooo`;oO`1o0oooo`000ol00?ooO`1oogl0O`0Woooo o`03o`000?o/k>cok>c/01Cok>c/00?o0000ooooooooool00_ooool2o`00007ooooo00001Ooooooo 0000oooooooooooo000000Oooooo1?l00005ooooo`03o`000?oooooooooo00;ooooo;?o6a/H2o`00 02KofMWI00?o0000onc/k?o/k>`09_o/k>`00ol0003oooooooooo`0hooooo`GoO`1o00?o003oogl0 Oomo07l0:?ooool00ol0003ok>c/onc/k00Donc/k003o`000?oooooooooo00;ooooo0Ol00001oooo o`0000Goooooo`000?ooooooooooo`000007ooooo`03o`000?oooooooooo00Kooooo00?o0000oooo ooooool00_ooool^olK6aP;o00009OoIfMT00ol0003ok>c/onc/k00Vonc/k003o`000?oooooooooo 03Wooooo1?mo07l00ol00?ooooooooooo`0Wooooo`03o`000?o/k>cok>c/01Cok>c/00?o0000oooo ooooool00_ooool1o`00007ooooo00001Ooooooo0000oooooooooooo000000Sooooo00?o0000oooo ooooool01Oooool00ol0003oooooooooo`02ooooo`;o0000;_o6a/H00ol0003ofMWIomWIf@0SomWI f@03o`000?o/k>cok>c/02Kok>c/00?o0000ooooooooool0??ooool00ol00?ooooooooooo`0Xoooo o`03o`000?o/k>cok>c/01?ok>c/1Oooool1o`00007ooooo0002ooooo`;o00002_ooool2o`0000Go oooo00?o0000ooooooooool00_ooool2ok>c/`?o0000;?o6a/H2o`0002CofMWI0_l0000Wonc/k003 o`000?oooooooooo03cooooo00?o003oooooooooool09oooool00ol0003ok>c/onc/k00Conc/k0Go oooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`Go/k>c0ol0000[olK6aP03o`00 0?oIfMWofMWI02?ofMWI00?o0000onc/k?o/k>`09Oo/k>`00ol0003oooooooooo`0kooooo`03o`00 oooooooooooo02Sooooo00?o0000onc/k?o/k>`04_o/k>`5ooooo`7o00000Oooool001Gooooo00?o 0000ooooooooool00_ooool8ok>c/`;o0000:_o6a/H00ol0003ofMWIomWIf@0SomWIf@03o`000?o/ k>cok>c/02Gok>c/00?o0000ooooooooool0>oooool00ol00?ooooooooooo`0Xooooo`03o`000?o/ k>cok>c/017ok>c/1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo2_nc/k<3 o`0002Soa/K600?o0000omWIfOoIfMT08_oIfMT2o`0002Kok>c/00?o0000ooooooooool0>oooool0 0ol00?ooooooooooo`0Xooooo`03o`000?o/k>cok>c/017ok>c/1Oooool1o`00007ooooo000Eoooo o`03o`000?oooooooooo00;ooooo3Onc/k<00ol0003oa/K6olK6aP0VolK6aP;o00009?oIfMT00ol0 003ok>c/onc/k00Tonc/k003o`000?oooooooooo03_ooooo00?o003oooooooooool0:?ooool00ol0 003ok>c/onc/k00@onc/k0Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`ko /k>c00?o0000olK6a_o6a/H09oo6a/H2o`0002?ofMWI00?o0000onc/k?o/k>`09?o/k>`00ol0003o ooooooooo`0jooooo`03o`00oooooooooooo02Sooooo00?o0000onc/k?o/k>`04?o/k>`5ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_ooool?ok>c/`?o0000:?o6a/H00ol0003ofMWI omWIf@0QomWIf@03o`000?o/k>cok>c/02Cok>c/00?o0000ooooooooool0>_ooool00ol00?oooooo ooooo`0Xooooo`03o`000?o/k>cok>c/00ook>c/1Oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooo4_nc/k<00ol0003oa/K6olK6aP0VolK6aP03o`000?oIfMWofMWI027ofMWI00?o 0000onc/k?o/k>`09?o/k>`00ol0003oooooooooo`0iooooo`03o`00oooooooooooo02Sooooo00?o 0000onc/k?o/k>`03oo/k>`5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolC ok>c/`?o00009_o6a/H2o`00027ofMWI0_l0000Uonc/k003o`000?oooooooooo03[ooooo00?o003o ooooooooool0:?ooool00ol0003ok>c/onc/k00>onc/k0Gooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02oooooaKo/k>c00?o0000olK6a_o6a/H09Oo6a/H00ol0003ofMWIomWIf@0PomWI f@03o`000?o/k>cok>c/02?ok>c/00?o0000ooooooooool0>Oooool00ol00?ooooooooooo`0Xoooo o`03o`000?o/k>cok>c/00kok>c/1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;o oooo5onc/k<3o`0002Goa/K600?o0000omWIfOoIfMT08?oIfMT2o`0002Cok>c/0_l0000jooooo`03 o`00oooooooooooo02Sooooo00?o0000onc/k?o/k>`03Oo/k>`5ooooo`7o00000Oooool001Gooooo 0_l00003oooooa[o/k>c0_l0000TolK6aP03o`000?oIfMWofMWI027ofMWI00?o0000onc/k?o/k>`0 8_o/k>`00ol0003oooooooooo`0hooooo`03o`00oooooooooooo02Wooooo00?o0000onc/k?o/k>`0 3?o/k>`4ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_oooolLok>c/`03o`000?o6 a/Koa/K602;oa/K600?o0000omWIfOoIfMT08OoIfMT00ol0003ok>c/onc/k00Ronc/k003o`000?oo oooooooo03Sooooo00?o003oooooooooool0:?ooool00ol0003ok>c/onc/k00c0_l0000SolK6aP?o00008?oIfMT0 0ol0003ok>c/onc/k00Sonc/k003o`000?oooooooooo03Oooooo00?o003oooooooooool0:Oooool0 0ol0003ok>c/onc/k00;onc/k0Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooo oaoo/k>c0_l0000TolK6aP03o`000?oIfMWofMWI01kofMWI00?o0000onc/k?o/k>`08oo/k>`00ol0 003oooooooooo`0gooooo`03o`00oooooooooooo02Sooooo00?o0000onc/k?o/k>`02oo/k>`5oooo o`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolQok>c/`;o00008oo6a/H00ol0003o fMWIomWIf@0NomWIf@03o`000?o/k>cok>c/02?ok>c/00?o0000ooooooooool0=_ooool00ol00?oo ooooooooo`0Yooooo`03o`000?o/k>cok>c/00[ok>c/1Oooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo8onc/k<00ol0003oa/K6olK6aP0QolK6aP03o`000?oIfMWofMWI01kofMWI 00?o0000onc/k?o/k>`08_o/k>`00ol0003oooooooooo`0gooooo`03o`00oooooooooooo02Sooooo 00?o0000onc/k?o/k>`02_o/k>`5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oo oolTok>c/`;o00008_o6a/H00ol0003ofMWIomWIf@0NomWIf@03o`000?o/k>cok>c/02;ok>c/00?o 0000ooooooooool0=_ooool00ol00?ooooooooooo`0Yooooo`03o`000?o/k>cok>c/00Wok>c/1Ooo ool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo9_nc/k<2o`00027oa/K60_l0000O omWIf@03o`000?o/k>cok>c/02;ok>c/00?o0000ooooooooool0=_ooool00ol00?ooooooooooo`0Y ooooo`03o`000?o/k>cok>c/00Sok>c/1Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo 00;ooooo:?nc/k<00ol0003oa/K6olK6aP0PolK6aP03o`000?oIfMWofMWI01gofMWI00?o0000onc/ k?o/k>`08Oo/k>`00ol0003oooooooooo`0fooooo`03o`00oooooooooooo02Wooooo00?o0000onc/ k?o/k>`02?o/k>`5ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oooolYok>c/`;o 00008Oo6a/H00ol0003ofMWIomWIf@0MomWIf@03o`000?o/k>cok>c/027ok>c/0_l0000gooooo`03 o`00oooooooooooo02Wooooo00?o0000onc/k?o/k>`01oo/k>`5ooooo`7o00000Oooool001Gooooo 00?o0000ooooooooool00_ooool3o`0002So/k>c00?o0000olK6a_o6a/H07_o6a/H00ol0003ofMWI omWIf@0NomWIf@03o`000?o/k>cok>c/027ok>c/00?o0000ooooooooool0=Oooool00ol00?oooooo ooooo`0Yooooo`03o`000?o/k>cok>c/00Ook>c/1Oooool1o`00007ooooo000Eooooo`03o`000?oo oooooooo00;ooooo0onOWil2o`0002Oo/k>c0_l0000OolK6aP;o00007ooIfMT00ol0003ok>c/onc/ k00Qonc/k003o`000?oooooooooo03Gooooo00?o003oooooooooool0:Oooool00ol0003ok>c/onc/ k006onc/k0Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`GoWinO0ol0000V ok>c/`;o00007oo6a/H00ol0003ofMWIomWIf@0MomWIf@03o`000?o/k>cok>c/027ok>c/00?o0000 ooooooooool0=?ooool00ol00?ooooooooooo`0Yooooo`03o`000?o/k>cok>c/00Kok>c/1Oooool1 o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo2?nOWil2o`0002Ko/k>c00?o0000olK6 a_o6a/H07Oo6a/H00ol0003ofMWIomWIf@0LomWIf@03o`000?o/k>cok>c/027ok>c/00?o0000oooo ooooool0=Oooool00ol00?ooooooooooo`0Yooooo`03o`000?o/k>cok>c/00Gok>c/1Oooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;ooooo2_nOWil00ol0003o/k>cok>c/`0Tok>c/`03 o`000?o6a/Koa/K601goa/K600?o0000omWIfOoIfMT07?oIfMT00ol0003ok>c/onc/k00Qonc/k003 o`000?oooooooooo03Cooooo00?o003oooooooooool0:_ooool00ol0003ok>c/onc/k004onc/k0Go oooo0Ol00001ooooo`005Oooool2o`0000?ooooo2onOWil3o`0002Co/k>c0_l0000NolK6aP;o0000 7OoIfMT2o`0002;ok>c/0_l0000eooooo`03o`00oomo07ooO`1o00;oO`1o9oooool00ol0003ok>c/ onc/k004onc/k0Cooooo0_l00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`koWinO00?o 0000ok>c/onc/k<08onc/k<00ol0003oa/K6olK6aP0MolK6aP03o`000?oIfMWofMWI01cofMWI00?o 0000onc/k?o/k>`08?o/k>`00ol0003oooooooooo`0booooo`03ogl0Ool00?ooO`1o00GoO`1o9Ooo ool00ol0003ok>c/onc/k004onc/k0Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 ooooo`ooWinO0ol0000Sok>c/`03o`000?o6a/Koa/K601goa/K60_l0000MomWIf@03o`000?o/k>co k>c/023ok>c/00?o0000ooooooooool0c/onc/k003onc/k0Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02 oooooa;oWinO0ol0000Qok>c/`?o00007_o6a/H00ol0003ofMWIomWIf@0JomWIf@03o`000?o/k>co k>c/027ok>c/00?o0000ooooooooool0;oooool2ogl0O`04oooo0?l00?oo003oo`00o`;oool00_mo 07lUooooo`03o`000?o/k>cok>c/00?ok>c/1Oooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo5OnOWil00ol0003o/k>cok>c/`0Qok>c/`03o`000?o6a/Koa/K601coa/K600?o0000 omWIfOoIfMT06_oIfMT00ol0003ok>c/onc/k00Ponc/k003o`000?oooooooooo02oooooo0_mo07l0 1?ooo`3o003oo`00ool00?l2oooo00;oO`1o9_ooool00ol0003ok>c/onc/k002onc/k0Gooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02oooooaKoWinO0ol0000Pok>c/`;o00007Oo6a/H0 0ol0003ofMWIomWIf@0KomWIf@;o00008Oo/k>`00ol0003oooooooooo`0^ooooo`;oO`1o00Coool0 o`00ool00?oo003o0_ooo`02ogl0ObOooooo00Co0000onc/k?o/k>cok>c/1Oooool1o`00007ooooo 000Eooooo`03o`000?oooooooooo00;ooooo6OnOWil00ol0003o/k>cok>c/`0Ook>c/`;o00007?o6 a/H00ol0003ofMWIomWIf@0LomWIf@03o`000?o/k>cok>c/01ook>c/00?o0000ooooooooool0;Ooo ool2ogl0O`?oool000?o003ooooo0?ooo`000_mo07lWooooo`04o`000?o/k>cok>c/onc/k0Gooooo 0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa[oWinO0_l0000Qok>c/`03o`000?o6 a/Koa/K601[oa/K60_l0000MomWIf@03o`000?o/k>cok>c/01ook>c/00?o0000ooooooooool0;Ooo ool2ogl0O`?oool000?o003oogl0Oomo07l0:Oooool00ol0003ok>c/onc/k005ooooo`7o00000Ooo ool001Gooooo00?o0000ooooooooool00_oooolLoinOW`;o00008?nc/k<00ol0003oa/K6olK6aP0K olK6aP03o`000?oIfMWofMWI01[ofMWI00?o0000onc/k?o/k>`07oo/k>`00ol0003oooooooooo`0] ooooo`GoO`1o00?o003oogl0Oomo07l0:_ooool00ol0003ok>c/ooooo`04ooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_oooolNoinOW`03o`000?nc/k?o/k>c01ko/k>c00?o0000olK6 a_o6a/H06oo6a/H00ol0003ofMWIomWIf@0JomWIf@03o`000?o/k>cok>c/01ook>c/00?o0000oooo ooooool0;_ooool4ogl0O`03o`00oooooooooooo02Wooooo00?o0000onc/k?ooool01?ooool1o`00 007ooooo000Eooooo`03o`000?oooooooooo00;ooooo7onOWil2o`0001oo/k>c0_l0000KolK6aP03 o`000?oIfMWofMWI01_ofMWI00?o0000onc/k?o/k>`07oo/k>`00ol0003oooooooooo`0aooooo`03 o`00oooooooooooo02Wooooo00?o0000onc/k?ooool01?ooool1o`00007ooooo000Eooooo`03o`00 0?oooooooooo00;ooooo8OnOWil3o`0001ko/k>c00?o0000olK6a_o6a/H06Oo6a/H00ol0003ofMWI omWIf@0KomWIf@03o`000?o/k>cok>c/01ook>c/00?o0000ooooooooool0c/onc/k<07?nc/k<2o`0001[oa/K60_l0000LomWIf@03o`000?o/ k>cok>c/01ook>c/00?o0000ooooooooool0c/`03o`000?o6a/Koa/K601Woa/K600?o0000omWIfOoIfMT06OoIfMT00ol0003ok>c/onc/k00O onc/k003o`000?oooooooooo037ooooo00?o003oooooooooool0:Oooool00ol0003oooooooooo`02 ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool00ol0003oWinOoinOW`0ToinO W`03o`000?nc/k?o/k>c01co/k>c00?o0000olK6a_o6a/H06Oo6a/H00ol0003ofMWIomWIf@0IomWI f@;o00008?o/k>`00ol0003oooooooooo`0aooooo`03o`00oooooooooooo02gooooo0Ol00001oooo o`005Oooool2o`0000?ooooo00CoS8bcok>c/`0Lok>c /`03o`000?o6a/Koa/K601Woa/K600?o0000omWIfOoIfMT06_oIfMT00ol0003ok>c/onc/k00Nonc/ k003o`000?oooooooooo037ooooo00?o003oooooooooool0:oooool2o`00007ooooo000Eooooo`03 o`000?oooooooooo00;ooooo1?n`07_o/k>`00ol0003o ooooooooo`0aooooo`03o`00oooooooooooo02cooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooo`GoS8b<0ol0000ToinOW`03o`000?nc/k?o/k>c01[o/k>c00?o0000olK6a_o6a/H0 6Oo6a/H00ol0003ofMWIomWIf@0IomWIf@03o`000?o/k>cok>c/01kok>c/00?o0000ooooooooool0 c0_l0000JolK6aP03o`000?oIfMWofMWI01WofMWI00?o 0000onc/k?o/k>`07_o/k>`00ol0003oooooooooo`0`ooooo`03o`00oooooooooooo02_ooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02ooooo`[oS8b<0ol0000QoinOW`;o00007?nc/k<0 0ol0003oa/K6olK6aP0HolK6aP03o`000?oIfMWofMWI01WofMWI00?o0000onc/k?o/k>`07_o/k>`0 0ol0003oooooooooo`0`ooooo`03o`00oooooooooooo02[ooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02ooooo`goS8b<0_l0000QoinOW`03o`000?nc/k?o/k>c01[o/k>c00?o0000olK6 a_o6a/H06?o6a/H00ol0003ofMWIomWIf@0IomWIf@03o`000?o/k>cok>c/01kok>c/00?o0000oooo ooooool0c00?o0000olK6a_o6a/H06?o6a/H00ol0003o fMWIomWIf@0IomWIf@03o`000?o/k>cok>c/01gok>c/00?o0000ooooooooool0c/onc/k<06Onc/k<00ol0003oa/K6olK6aP0HolK6aP03o`00 0?oIfMWofMWI01WofMWI00?o0000onc/k?o/k>`07Oo/k>`00ol0003oooooooooo`0`ooooo`03o`00 oooooooooooo02Sooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa?oS8b<0_l0 000OoinOW`;o00006_nc/k<00ol0003oa/K6olK6aP0HolK6aP03o`000?oIfMWofMWI01SofMWI00?o 0000onc/k?o/k>`07_o/k>`00ol0003oooooooooo`0`ooooo`03o`00oooooooooooo02Oooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02oooooaGoS8b<0_l0000OoinOW`03o`000?nc/k?o /k>c01So/k>c00?o0000olK6a_o6a/H06?o6a/H00ol0003ofMWIomWIf@0HomWIf@03o`000?o/k>co k>c/01kok>c/00?o0000ooooooooool0;oooool00ol00?ooooooooooo`0Wooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_oooolGohbc0_l0000IolK6 aP03o`000?oIfMWofMWI01SofMWI00?o0000onc/k?o/k>`07_o/k>`00ol0003oooooooooo`0_oooo o`03o`00oooooooooooo02Kooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa[o S8b<00?o0000oinOWonOWil07?nOWil00ol0003o/k>cok>c/`0Hok>c/`03o`000?o6a/Koa/K601Oo a/K600?o0000omWIfOoIfMT06?oIfMT00ol0003ok>c/onc/k00Monc/k003o`000?oooooooooo02oo oooo00?o003oooooooooool09_ooool1o`00007ooooo0002ooooo`;o00001?ooool00ol0003ooooo ooooo`02ooooo`?o00001Oooool00ol0003oooooooooo`02oooooa_oS8b<00?o0000oinOWonOWil0 7?nOWil00ol0003o/k>cok>c/`0Hok>c/`03o`000?o6a/Koa/K601Ooa/K600?o0000omWIfOoIfMT0 6?oIfMT00ol0003ok>c/onc/k00Monc/k003o`000?oooooooooo02oooooo00?o003oooooooooool0 9Oooool1o`00007ooooo00001Ooooooo0000oooooooooooo000000Oooooo00Go0000oooooooooooo ooooo`000004ooooo`03o`000?oooooooooo00;ooooo7?nc/`;o 00006?o6a/H00ol0003ofMWIomWIf@0HomWIf@03o`000?o/k>cok>c/01cok>c/00?o0000oooooooo ool0c/onc/k<06?nc/k<00ol0003oa/K6olK6aP0EolK6 aP03o`000?oIfMWofMWI01SofMWI00?o0000onc/k?o/k>`07?o/k>`00ol0003oooooooooo`0`oooo o`03o`00oooooooooooo02Cooooo0Ol00001ooooo`0000Goooooo`000?ooooooooooo`000008oooo o`?o00001Oooool2o`0000?ooooo8?nc 01Oo/k>c00?o0000olK6a_o6a/H05_o6a/H00ol0003ofMWIomWIf@0HomWIf@03o`000?o/k>cok>c/ 01cok>c/00?o0000ooooooooool0cok>c/`0Gok>c/`03o`000?o6a/Ko a/K601Koa/K60_l0000IomWIf@03o`000?o/k>cok>c/01cok>c/0_l0000aooooo`03o`00oooooooo oooo02;ooooo0Ol00001ooooo`0000Goooooo`000?ooooooooooo`000007ooooo`05o`000?oooooo ooooooooool000001?ooool00ol0003oooooooooo`02ooooo`;o00008_nc/onc/ k00Lonc/k003o`000?oooooooooo02oooooo00?o003oogl0Oomo07l00_mo07lPooooo`7o00000Ooo ool000;ooooo0_l00009ooooo`?o00001Oooool00ol0003oooooooooo`02ooooo`;oNGUi0_l0000Q ohbcok>c/`0Gok>c/`03o`000?o6a/Koa/K601Koa/K600?o0000 omWIfOoIfMT05ooIfMT00ol0003ok>c/onc/k00Lonc/k003o`000?oooooooooo02gooooo0_mo07l0 0ol00?ooO`1oogl0O`03ogl0Oakooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooo o`CoNGUi00?o0000ohbc/onc/k<05onc/k<00ol0 003oa/K6olK6aP0FolK6aP03o`000?oIfMWofMWI01KofMWI00?o0000onc/k?o/k>`07?o/k>`00ol0 003oooooooooo`0]ooooo`;oO`1o00Co003ooooo0?ooo`3oool00_mo07lNooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_ooool5ogUiN@?o00008Onc01Ko/k>c00?o0000olK6a_o6a/H05oo6a/H00ol0003ofMWIomWIf@0FomWI f@03o`000?o/k>cok>c/01cok>c/00?o0000ooooooooool0:oooool2ogl0O`04oooo0?l00?oo003o o`00o`;oool00_mo07lMooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool8ogUi N@;o00008?nc/`03o`000?o6a/Koa/K601Koa/K600?o0000omWI fOoIfMT05ooIfMT00ol0003ok>c/onc/k00Lonc/k003o`000?oooooooooo02[ooooo0_mo07l01?oo o`3o003oo`00ool00?l2oooo00;oO`1o7Oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo 00;ooooo2_miNGT3o`0001ooS8b<0_l0000IoinOW`03o`000?nc/k?o/k>c01Go/k>c0_l0000GolK6 aP03o`000?oIfMWofMWI01OofMWI00?o0000onc/k?o/k>`07?o/k>`00ol0003oooooooooo`0Yoooo o`;oO`1o00Coool0o`00ool00?oo003o0_ooo`02ogl0Oagooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02ooooo`goNGUi0_l0000Oohbc /`03o`000?o6a/Koa/K601Goa/K600?o0000omWIfOoIfMT05ooIfMT00ol0003ok>c/onc/k00Lonc/ k003o`000?oooooooooo02Sooooo0_mo07l4oooo0004o`00ooooo`3oO`1oogl0Oagooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02ooooo`ooNGUi0ol0000Lohbcok>c/`0Eok>c/`03o`000?o6a/Koa/K601Goa/K600?o0000omWIfOoIfMT05_oIfMT00ol0 003ok>c/onc/k00Lonc/k003o`000?oooooooooo02Wooooo0_mo07l3oooo0003o`00oomo07ooO`1o 01kooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa;oNGUi00?o0000ohbc01Go/k>c00?o0000olK6a_o6 a/H05Oo6a/H00ol0003ofMWIomWIf@0FomWIf@03o`000?o/k>cok>c/01cok>c/00?o0000oooooooo ool0:?ooool6ogl0O`03o`00oomo07oooooo01gooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02oooooa?oNGUi0_l0000Mohbcok>c/`0Eok>c/`03o`00 0?o6a/Koa/K601Goa/K600?o0000omWIfOoIfMT05_oIfMT2o`0001gok>c/00?o0000ooooooooool0 :Oooool4ogl0O`03ooooool00?oooooo01gooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02oooooaGoNGUi0_l0000Mohbc/`03o`000?o6 a/Koa/K601Goa/K600?o0000omWIfOoIfMT05_oIfMT00ol0003ok>c/onc/k00Konc/k003o`000?oo oooooooo02kooooo00?o003oooooooooool07?ooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo5omiNGT3o`0001_oS8b<00?o0000oinOWonOWil05onOWil00ol0003o/k>cok>c/`0D ok>c/`03o`000?o6a/Koa/K601Goa/K600?o0000omWIfOoIfMT05_oIfMT00ol0003ok>c/onc/k00K onc/k003o`000?oooooooooo02kooooo00?o003oooooooooool06oooool1o`00007ooooo000Eoooo o`03o`000?oooooooooo00;ooooo6_miNGT00ol0003oS8bcok>c/`0Dok>c/`03o`000?o6a/Koa/K601Coa/K600?o0000omWIfOoIfMT05_oIfMT00ol0 003ok>c/onc/k00Konc/k003o`000?oooooooooo02kooooo00?o003oooooooooool06oooool1o`00 007ooooo000Eooooo`;o00000ooooolKogUiN@03o`000?ncok>c/`0Dok>c/`03o`000?o6a/Koa/K601Coa/K600?o0000omWIfOoI fMT05_oIfMT00ol0003ok>c/onc/k00Konc/k003o`000?oooooooooo02kooooo00?o003ooooooooo ool06Oooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo7?miNGT3o`0001[oS8b< 00?o0000oinOWonOWil05_nOWil00ol0003o/k>cok>c/`0Dok>c/`03o`000?o6a/Koa/K601Coa/K6 00?o0000omWIfOoIfMT05_oIfMT00ol0003ok>c/onc/k00Konc/k003o`000?oooooooooo02gooooo 00?o003oooooooooool06_ooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo7omi NGT00ol0003oS8bc/`03o`000?o6 a/Koa/K601Coa/K600?o0000omWIfOoIfMT05_oIfMT00ol0003ok>c/onc/k00Jonc/k003o`000?oo oooooooo02kooooo00?o003oooooooooool06Oooool1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo8?miNGT00ol0003oS8bc/onc/k<05?nc/k<00ol0003oa/K6olK6aP0DolK6aP03o`000?oIfMWofMWI01KofMWI00?o0000 onc/k?o/k>`06_o/k>`00ol0003oooooooooo`0^ooooo`03o`00oooooooooooo01Sooooo0Ol00001 ooooo`005Oooool00ol0003oooooooooo`02ooooo`?o00007_miNGT3o`0001SoS8b<0_l0000GoinO W`;o00005Onc/k<00ol0003oa/K6olK6aP0DolK6aP03o`000?oIfMWofMWI01GofMWI00?o0000onc/ k?o/k>`06oo/k>`00ol0003oooooooooo`0]ooooo`03o`00oooooooooooo01Sooooo0Ol00001oooo o`005Oooool00ol0003oooooooooo`02ooooo`?oIVIV0_l0000OogUiN@;o00006?nc/onc/k<04onc/k<00ol0003oa/K6olK6aP0ColK6aP;o00005ooIfMT00ol0003o k>c/onc/k00Konc/k003o`000?oooooooooo02gooooo00?o003oooooooooool05oooool1o`00007o oooo000Eooooo`03o`000?oooooooooo00;ooooo1OmVIVH3o`0001koNGUi00?o0000ohbc01?o/k>c00?o0000olK6a_o6a/H0 5?o6a/H00ol0003ofMWIomWIf@0EomWIf@03o`000?o/k>cok>c/01_ok>c/00?o0000ooooooooool0 ;?ooool00ol00?ooooooooooo`0Gooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_oo ool8ofIVIP;o00007OmiNGT2o`0001OoS8b<0ol0000EoinOW`03o`000?nc/k?o/k>c01Co/k>c00?o 0000olK6a_o6a/H04oo6a/H00ol0003ofMWIomWIf@0EomWIf@03o`000?o/k>cok>c/01_ok>c/00?o 0000ooooooooool0;Oooool00ol00?ooooooooooo`0Fooooo`7o00000Oooool001Gooooo00?o0000 ooooooooool00_ooool:ofIVIP03o`000?miNGWoNGUi01coNGUi00?o0000ohbc01Co/k>c00?o0000olK6a_o6a/H04oo6a/H0 0ol0003ofMWIomWIf@0EomWIf@03o`000?o/k>cok>c/01_ok>c/00?o0000ooooooooool0;?ooool0 0ol00?ooooooooooo`0Fooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool;ofIV IP;o00007OmiNGT2o`0001OoS8b<0_l0000EoinOW`;o00005Onc/k<00ol0003oa/K6olK6aP0ColK6 aP03o`000?oIfMWofMWI01GofMWI00?o0000onc/k?o/k>`06_o/k>`00ol0003oooooooooo`0]oooo o`03o`00oooooooooooo01Gooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`go IVIV0_l0000MogUiN@;o00005onc01;o /k>c0_l0000EolK6aP03o`000?oIfMWofMWI01GofMWI00?o0000onc/k?o/k>`06_o/k>`00ol0003o ooooooooo`0]ooooo`03o`00oooooooooooo01Cooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02ooooo`ooIVIV0ol0000LogUiN@03o`000?nc01?o/k>c00?o0000olK6a_o6a/H04oo6a/H00ol0003ofMWIomWIf@0EomWIf@03o`00 0?o/k>cok>c/01[ok>c/00?o0000ooooooooool0;?ooool00ol00?ooooooooooo`0Dooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_oooolBofIVIP?o00006OmiNGT3o`0001KoS8b<00?o 0000oinOWonOWil05?nOWil00ol0003o/k>cok>c/`0Cok>c/`03o`000?o6a/Koa/K601;oa/K600?o 0000omWIfOoIfMT05OoIfMT00ol0003ok>c/onc/k00Konc/k003o`000?oooooooooo02cooooo00?o 003oooooooooool04oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo5OmVIVH0 0ol0003oNGUiogUiN@0IogUiN@03o`000?nc01;o/k>c00?o0000olK6a_o6a/H04oo6a/H00ol0003ofMWIomWIf@0EomWIf@03o`000?o/k>co k>c/01[ok>c/00?o0000ooooooooool0;?ooool00ol00?ooooooooooo`0Cooooo`7o00000Oooool0 01Gooooo00?o0000ooooooooool00_oooolFofIVIP03o`000?miNGWoNGUi01WoNGUi0_l0000Fohb< S003o`000?nOWiooWinO01?oWinO00?o0000ok>c/onc/k<04_nc/k<2o`0001Coa/K600?o0000omWI fOoIfMT05OoIfMT00ol0003ok>c/onc/k00Jonc/k003o`000?oooooooooo02cooooo00?o003ooooo ooooool04_ooool1o`00007ooooo000Eooooo`;o00000ooooolGofIVIP?o00006_miNGT00ol0003o S8bcok>c/`0Cok>c/`03o`000?o6a/Koa/K601;o a/K600?o0000omWIfOoIfMT05OoIfMT00ol0003ok>c/onc/k00Ionc/k003o`000?oooooooooo02co oooo00?o003oooooooooool04Oooool2o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo 6_mVIVH2o`0001WoNGUi00?o0000ohb`0 6Oo/k>`00ol0003oooooooooo`0/ooooo`03o`00oooooooooooo017ooooo0Ol00001ooooo`005Ooo ool00ol0003oooooooooo`02oooooacoIVIV0_l0000HogUiN@;o00005Onc/onc/k<04Onc/k<00ol0003oa/K6olK6aP0ColK6aP03o`000?oIfMWofMWI01CofMWI00?o 0000onc/k?o/k>`06Oo/k>`00ol0003oooooooooo`0]ooooo`03o`00oooooooooooo013ooooo0Ol0 0001ooooo`005Oooool00ol0003oooooooooo`02oooooakoIVIV00?o0000ogUiNOmiNGT05omiNGT0 0ol0003oS8bc/onc/k<04Onc/k<0 0ol0003oa/K6olK6aP0ColK6aP03o`000?oIfMWofMWI01CofMWI00?o0000onc/k?o/k>`06Oo/k>`0 0ol0003oooooooooo`0/ooooo`03o`00oooooooooooo013ooooo0Ol00001ooooo`005Oooool00ol0 003oooooooooo`02oooooaooIVIV0_l0000HogUiN@03o`000?ncok>c/`0Bok>c/`03o`000?o6a/Koa/K601?oa/K600?o0000omWI fOoIfMT05?oIfMT00ol0003ok>c/onc/k00Ionc/k003o`000?oooooooooo02cooooo00?o003ooooo ooooool03oooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo0ol0000NofIVIP;o 00005omiNGT00ol0003oS8bc/onc /k<04_nc/k<00ol0003oa/K6olK6aP0BolK6aP03o`000?oIfMWofMWI01GofMWI00?o0000onc/k?o/ k>`06Oo/k>`00ol0003oooooooooo`0[ooooo`03o`00oooooooooooo00oooooo0Ol00001ooooo`00 5Oooool00ol0003oooooooooo`02ooooo`?oDe=C0_l0000NofIVIP03o`000?miNGWoNGUi01GoNGUi 0_l0000Eohbc/onc/k<04_nc/k<00ol0003oa/K6 olK6aP0BolK6aP03o`000?oIfMWofMWI01CofMWI00?o0000onc/k?o/k>`06Oo/k>`00ol0003ooooo ooooo`0/ooooo`03o`00oooooooooooo00kooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02ooooo`GoDe=C0ol0000LofIVIP?o00005_miNGT2o`0001CoS8b<0_l0000CoinOW`;o00004onc /k<00ol0003oa/K6olK6aP0BolK6aP03o`000?oIfMWofMWI01CofMWI00?o0000onc/k?o/k>`06Oo/ k>`00ol0003oooooooooo`0[ooooo`03o`00ooooooooool000?oool02oooool1o`00007ooooo000E ooooo`03o`000?oooooooooo00;ooooo2?mCDe<2o`0001goIVIV00?o0000ogUiNOmiNGT05OmiNGT0 0ol0003oS8bc/onc/k<04?nc/k<0 0ol0003oa/K6olK6aP0ColK6aP03o`000?oIfMWofMWI01?ofMWI00?o0000onc/k?o/k>`06_o/k>`0 0ol0003oooooooooo`0[ooooo`03o`00ooooo`3oool000?oool02_ooool1o`00007ooooo000Eoooo o`03o`000?oooooooooo00;ooooo2_mCDe<3o`0001_oIVIV00?o0000ogUiNOmiNGT05OmiNGT2o`00 01CoS8b<00?o0000oinOWonOWil04OnOWil00ol0003o/k>cok>c/`0Aok>c/`;o00005?o6a/H00ol0 003ofMWIomWIf@0ComWIf@;o00006oo/k>`00ol0003oooooooooo`0Zooooo`03o`00ooooo`3oool0 00?oool02_ooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo3OmCDe<2o`0001[o IVIV0_l0000GogUiN@03o`000?ncok>c/`0Aok>c/`03o`000?o6a/Koa/K601?oa/K600?o0000omWIfOoIfMT04ooIfMT00ol0003o k>c/onc/k00Ionc/k003o`000?oooooooooo02[ooooo00?oool0o`00ooooo`000oooo`0:ooooo`7o 00000Oooool001Gooooo00?o0000ooooooooool00_ooool?oe=CD`03o`000?mVIVKoIVIV01WoIVIV 00?o0000ogUiNOmiNGT05OmiNGT00ol0003oS8bc/onc/k<04Onc/k<00ol0003oa/K6olK6aP0ColK6aP03o`000?oIfMWofMWI01?ofMWI 00?o0000onc/k?o/k>`06Oo/k>`00ol0003oooooooooo`0Yooooo`;oool000Co003ooooo0?ooo`3o ool02_ooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo4?mCDe<2o`0001[oIVIV 0_l0000EogUiN@?o00004onc017o/k>c 00?o0000olK6a_o6a/H04_o6a/H00ol0003ofMWIomWIf@0ComWIf@;o00006_o/k>`00ol0003ooooo ooooo`0Zooooo`04oooo0?l00?ooool0oooo00_ooooo0Ol00001ooooo`005Oooool00ol0003ooooo ooooo`02oooooa;oDe=C0ol0000IofIVIP;o00005_miNGT00ol0003oS8bcok>c/`0Aok>c/`03o`000?o6a/Koa/K601;oa/K600?o0000omWIfOoIfMT0 4ooIfMT00ol0003ok>c/onc/k00Ionc/k003o`000?oooooooooo02_ooooo00?o003oooooooooool0 2_ooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo5OmCDe<2o`0001WoIVIV00?o 0000ogUiNOmiNGT05?miNGT00ol0003oS8bc/`03o`000?o6a/Koa/K601;oa/K600?o0000omWIfOoIfMT04ooIfMT00ol0003ok>c/onc/ k00Ionc/k003o`000?oooooooooo02[ooooo00?o003oooooooooool02_ooool1o`00007ooooo000E ooooo`;o00000ooooolGoe=CD`;o00006?mVIVH2o`0001GoNGUi00?o0000ohbc017o/k>c00?o0000olK6a_o6a/H04Oo6a/H0 0ol0003ofMWIomWIf@0ComWIf@03o`000?o/k>cok>c/01Wok>c/00?o0000ooooooooool0:oooool0 0ol00?ooooooooooo`08ooooo`;o00000Oooool001Gooooo00?o0000ooooooooool00_oooolIoe=C D`03o`000?mVIVKoIVIV01OoIVIV00?o0000ogUiNOmiNGT04omiNGT00ol0003oS8bc/onc/k<04Onc/k<00ol0003oa/K6olK6aP0AolK6 aP03o`000?oIfMWofMWI01?ofMWI00?o0000onc/k?o/k>`06Oo/k>`00ol0003oooooooooo`0Zoooo o`03o`00oooooooooooo00Wooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooa[o De=C0_l0000HofIVIP03o`000?miNGWoNGUi01?oNGUi00?o0000ohbc017o/k>c00?o0000olK6a_o6a/H04Oo6a/H00ol0003o fMWIomWIf@0ComWIf@03o`000?o/k>cok>c/01Sok>c/0_l0000/ooooo`03o`00oooooooooooo00So oooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02oooooacoDe=C0ol0000FofIVIP03o`00 0?miNGWoNGUi01?oNGUi00?o0000ohbc013o/k>c00?o0000olK6a_o6a/H04_o6a/H00ol0003ofMWIomWIf@0BomWIf@03o`00 0?o/k>cok>c/01Wok>c/00?o0000ooooooooool0:oooool00ol00?ooooooooooo`07ooooo`7o0000 0Oooool001Gooooo00?o0000ooooooooool00_ooool00ol0003oDe=Coe=CD`0Loe=CD`03o`000?mV IVKoIVIV01CoIVIV0_l0000DogUiN@03o`000?ncok>c/`0@ok>c/`03o`000?o6a/Koa/K6017oa/K600?o0000omWIfOoIfMT04ooI fMT2o`0001[ok>c/00?o0000ooooooooool0:_ooool00ol00?ooooooooooo`07ooooo`7o00000Ooo ool001Gooooo00?o0000ooooooooool00_ooool5o`0001[oDe=C0_l0000GofIVIP;o00004omiNGT2 o`0001;oS8b<0_l0000AoinOW`;o00004_nc/k<00ol0003oa/K6olK6aP0AolK6aP03o`000?oIfMWo fMWI01?ofMWI00?o0000onc/k?o/k>`06?o/k>`00ol0003oooooooooo`0[ooooo`03o`00oooooooo oooo00Kooooo0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`Go?clo0_l0000Joe=C D`?o00005_mVIVH00ol0003oNGUiogUiN@0BogUiN@03o`000?ncok>c/`0@ok>c/`03o`000?o6a/Koa/K6017oa/K600?o0000omWI fOoIfMT04ooIfMT00ol0003ok>c/onc/k00Honc/k003o`000?oooooooooo02[ooooo00?o003ooooo ooooool01_ooool1o`00007ooooo000Eooooo`03o`000?oooooooooo00;ooooo1olo?cl00ol0003o De=Coe=CD`0Joe=CD`;o00005OmVIVH2o`0001?oNGUi00?o0000ohbc013o/k>c00?o0000olK6a_o6a/H04Oo6a/H00ol0003o fMWIomWIf@0ComWIf@03o`000?o/k>cok>c/01Sok>c/00?o0000ooooooooool0:_ooool00ol00?oo ooooooooo`05ooooo`7o00000Oooool001Gooooo00?o0000ooooooooool00_ooool8oclo?`;o0000 7?mCDe<00ol0003oIVIVofIVIP0DofIVIP03o`000?miNGWoNGUi017oNGUi00?o0000ohbc013o/k>c00?o0000olK6a_o6a/H0 4Oo6a/H00ol0003ofMWIomWIf@0ComWIf@03o`000?o/k>cok>c/01Sok>c/00?o0000ooooooooool0 :_ooool00ol00?ooooooogl0O`03ogl0O`;ooooo0Ol00001ooooo`005Oooool00ol0003ooooooooo o`02ooooo`[o?clo0_l0000Koe=CD`03o`000?mVIVKoIVIV01CoIVIV00?o0000ogUiNOmiNGT04Omi NGT00ol0003oS8bc/`03o`000?o6 a/Koa/K6017oa/K600?o0000omWIfOoIfMT04_oIfMT00ol0003ok>c/onc/k00Ionc/k003o`000?oo oooooooo02Wooooo00?oO`1oo`00oomo07l01Omo07l1o`00007ooooo000Eooooo`03o`000?oooooo oooo00;ooooo3?lo?cl3o`0001WoDe=C00?o0000ofIVI_mVIVH05?mVIVH00ol0003oNGUiogUiN@0A ogUiN@;o00004Onc/`03o`000?o6a/Koa/K6017oa/K600?o0000 omWIfOoIfMT04_oIfMT00ol0003ok>c/onc/k00Honc/k0;o0000:_ooool00omo07ooool0o`00o`02 oooo00?oO`1o0Ol00001ooooo`005Oooool00ol0003oooooooooo`02ooooo`oo?clo0ol0000Goe=C D`?o00005?mVIVH2o`0001?oNGUi00?o0000ohbc00oo/k>c00?o0000olK6a_o6a/H04Oo6a/H00ol0003ofMWIomWIf@0BomWI f@03o`000?o/k>cok>c/01Sok>c/00?o0000ooooooooool09oooool01?mo07ooool0oooo0?l00?l3 oooo00?oO`1o0Oooool000gooooo0ol00005ooooo`03o`000?oooooooooo00;ooooo4_lo?cl2o`00 01SoDe=C00?o0000ofIVI_mVIVH04omVIVH00ol0003oNGUiogUiN@0AogUiN@03o`000?ncok>c/`0?ok>c/`03o`000?o6a/Koa/K6 017oa/K600?o0000omWIfOoIfMT04_oIfMT00ol0003ok>c/onc/k00Honc/k003o`000?oooooooooo 02Gooooo00Co0000ogl0Ooooo`3oool00ol00?l01?ooo`3oO`1oogl0Oomo07l1ooooo`003_ooool0 0ol0003oooooooooo`04ooooo`03o`000?oooooooooo00;ooooo5?lo?cl00ol0003oDe=Coe=CD`0F oe=CD`03o`000?mVIVKoIVIV01?oIVIV00?o0000ogUiNOmiNGT04OmiNGT00ol0003oS8bc/onc/k<03onc/k<00ol0003oa/K6olK6aP0A olK6aP03o`000?oIfMWofMWI01;ofMWI00?o0000onc/k?o/k>`06?o/k>`00ol0003oooooooooo`0T ooooo`;o000000?oO`1ooooo0?ooo`000ol00?l01?ooo`3oO`1oogl0Oomo07l1ooooo`003_ooool0 0ol0003oooooooooo`04ooooo`03o`000?oooooooooo00;ooooo5Olo?cl2o`0001OoDe=C0_l0000D ofIVIP03o`000?miNGWoNGUi017oNGUi00?o0000ohbc00oo/k>c00?o0000olK6a_o6a/H04Oo6a/H00ol0003ofMWIomWIf@0B omWIf@03o`000?o/k>cok>c/01Sok>c/00?o0000ooooooooool08oooool2o`000003ogl0Ooooo`3o ool000?o003o00Coool0ogl0Oomo07ooO`1o0Oooool000kooooo00?o0000ooooooooool01?ooool2 o`0000?ooooo5olo?cl00ol0003oDe=Coe=CD`0Foe=CD`03o`000?mVIVKoIVIV01;oIVIV00?o0000 ogUiNOmiNGT04OmiNGT00ol0003oS8bc/onc/k<03onc/k<00ol0003oa/K6olK6aP0AolK6aP03o`000?oIfMWofMWI01;ofMWI00?o0000 onc/k?o/k>`05oo/k>`2o`0002Cooooo0_l000000omo07ooool0oooo0003o`00o`04oooo0?mo07oo O`1oogl0O`7ooooo000>ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool0noooool2 o`000003ogl0Ooooo`3oool000?o003o00Coool0ogl0Oomo07ooO`1o0Oooool000gooooo0_l00006 ooooo`03o`000?oooooooooo0?_ooooo0_l000000omo07ooool0oooo0004oooo00?oO`1o0Oooool0 00kooooo00?o0000ooooooooool01?ooool00ol0003oooooooooo`02ooooo`03o`000?oooooooooo 03gooooo00?o0000ooooooooool0?Oooool00ol0003oooooooooo`0looooo`03o`000?oooooooooo 03Oooooo0ol000000omo07ooool0oooo0002oooo00?oO`1o0Ol00001ooooo`005Oooool00ol0003o ooooooooo`02ooooo`03o`000?oooooooooo00gooooo00?o0000ooooooooool03Oooool00ol0003o ooooooooo`0=ooooo`03o`000?oooooooooo00gooooo00?o0000ooooooooool03Oooool00ol0003o ooooooooo`0=ooooo`03o`000?oooooooooo00gooooo00?o0000ooooooooool03Oooool00ol0003o ooooooooo`0=ooooo`03o`000?oooooooooo00gooooo00?o0000ooooooooool03?ooool00ol0003o ooooooooo`0=ooooo`03o`000?oooooooooo00gooooo00?o0000ooooooooool03Oooool00ol0003o ooooooooo`0=ooooo`03o`000?oooooooooo00Sooooo0_l00008ogl0O`7o00000Oooool001Gooooo ool00004o`0000CoO`1o0ol00001ooooo`00oooooolQooooo`00oooooolQooooo`00oooooolQoooo o`00oooooolQooooo`00\ \>"], ImageRangeCache->{{{0, 287}, {287, 0}} -> {0.117201, 0.0740302, 0.00313309, \ 0.00333889}}], Cell[BoxData[ RowBox[{"{", RowBox[{\({0.`, {x1 \[Rule] 1.`, x2 \[Rule] 1.`}}\), ",", \({"Steps" \[Rule] 9, "Residual" \[Rule] 12, "Jacobian" \[Rule] 10}\), ",", TagBox[\(\[SkeletonIndicator] ContourGraphics \[SkeletonIndicator]\), False, Editable->False]}], "}"}]], "Output"] }, Open ]], Cell["Hessian", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(D[Rosenbrock[{x1, x2}], {{x1, x2}, 2}]\ // \ MatrixForm\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {\(2 + 800\ x1\^2 - 400\ \((\(-x1\^2\) + x2)\)\), \(\(-400\)\ x1\)}, {\(\(-400\)\ x1\), "200"} }, RowSpacings->1, ColumnSpacings->1, ColumnAlignments->{Left}], "\[NoBreak]", ")"}], Function[ BoxForm`e$, MatrixForm[ BoxForm`e$]]]], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Zimmermann's Corner", "Section"], Cell[BoxData[ \(\(\(Zimmermann[x_, \ y_]\ := \[IndentingNewLine]Module[{f8, c0, c1, c2, c3, xx}, \[IndentingNewLine]f8\ = \ 9 - x\ - \ y; \[IndentingNewLine]c0\ = \ If\ [x\ < \ 0, \ \(-100\)\ x, \ 0]; \[IndentingNewLine]c1\ = \ If\ [y\ < \ 0, \ \(-100\)\ y, \ 0]; \[IndentingNewLine]xx\ = \ \((x - 3)\)^2\ + \ \((y - 2)\)^2; \[IndentingNewLine]c2\ = \ If[xx\ > \ 16, \ 100\ *\ \((xx - 16)\), \ 0]; \[IndentingNewLine]c3\ = \ If[x\ y\ > \ 14, \ 100\ *\ \((x\ y\ - \ 14)\), \ 0]; \[IndentingNewLine]Max[f8, \ c0, \ c1, \ c2, \ c3]\[IndentingNewLine]]\)\(\[IndentingNewLine]\) \)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(ContourPlot[Zimmermann[x, y], {x, 0, 9}, {y, 0, 9}, \ ColorFunction \[Rule] \((Hue[0.7\ \((1 - #)\)] &)\), ContourLines \[Rule] False, Contours \[Rule] \ 60]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% ContourGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0192308 0.106838 0.0192308 0.106838 [ [.01923 -0.0125 -3 -9 ] [.01923 -0.0125 3 0 ] [.23291 -0.0125 -3 -9 ] [.23291 -0.0125 3 0 ] [.44658 -0.0125 -3 -9 ] [.44658 -0.0125 3 0 ] [.66026 -0.0125 -3 -9 ] [.66026 -0.0125 3 0 ] [.87393 -0.0125 -3 -9 ] [.87393 -0.0125 3 0 ] [ 0 0 -0.125 0 ] [-0.0125 .01923 -6 -4.5 ] [-0.0125 .01923 0 4.5 ] [-0.0125 .23291 -6 -4.5 ] [-0.0125 .23291 0 4.5 ] [-0.0125 .44658 -6 -4.5 ] [-0.0125 .44658 0 4.5 ] [-0.0125 .66026 -6 -4.5 ] [-0.0125 .66026 0 4.5 ] [-0.0125 .87393 -6 -4.5 ] [-0.0125 .87393 0 4.5 ] [ 0 0 -0.125 0 ] [ 0 1 .125 0 ] [ 1 0 .125 0 ] [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .01923 0 m .01923 .00625 L s [(0)] .01923 -0.0125 0 1 Mshowa .23291 0 m .23291 .00625 L s [(2)] .23291 -0.0125 0 1 Mshowa .44658 0 m .44658 .00625 L s [(4)] .44658 -0.0125 0 1 Mshowa .66026 0 m .66026 .00625 L s [(6)] .66026 -0.0125 0 1 Mshowa .87393 0 m .87393 .00625 L s [(8)] .87393 -0.0125 0 1 Mshowa .125 Mabswid .07265 0 m .07265 .00375 L s .12607 0 m .12607 .00375 L s .17949 0 m .17949 .00375 L s .28632 0 m .28632 .00375 L s .33974 0 m .33974 .00375 L s .39316 0 m .39316 .00375 L s .5 0 m .5 .00375 L s .55342 0 m .55342 .00375 L s .60684 0 m .60684 .00375 L s .71368 0 m .71368 .00375 L s .76709 0 m .76709 .00375 L s .82051 0 m .82051 .00375 L s .92735 0 m .92735 .00375 L s .98077 0 m .98077 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .01923 m .00625 .01923 L s [(0)] -0.0125 .01923 1 0 Mshowa 0 .23291 m .00625 .23291 L s [(2)] -0.0125 .23291 1 0 Mshowa 0 .44658 m .00625 .44658 L s [(4)] -0.0125 .44658 1 0 Mshowa 0 .66026 m .00625 .66026 L s [(6)] -0.0125 .66026 1 0 Mshowa 0 .87393 m .00625 .87393 L s [(8)] -0.0125 .87393 1 0 Mshowa .125 Mabswid 0 .07265 m .00375 .07265 L s 0 .12607 m .00375 .12607 L s 0 .17949 m .00375 .17949 L s 0 .28632 m .00375 .28632 L s 0 .33974 m .00375 .33974 L s 0 .39316 m .00375 .39316 L s 0 .5 m .00375 .5 L s 0 .55342 m .00375 .55342 L s 0 .60684 m .00375 .60684 L s 0 .71368 m .00375 .71368 L s 0 .76709 m .00375 .76709 L s 0 .82051 m .00375 .82051 L s 0 .92735 m .00375 .92735 L s 0 .98077 m .00375 .98077 L s .25 Mabswid 0 0 m 0 1 L s .01923 .99375 m .01923 1 L s .23291 .99375 m .23291 1 L s .44658 .99375 m .44658 1 L s .66026 .99375 m .66026 1 L s .87393 .99375 m .87393 1 L s .125 Mabswid .07265 .99625 m .07265 1 L s .12607 .99625 m .12607 1 L s .17949 .99625 m .17949 1 L s .28632 .99625 m .28632 1 L s .33974 .99625 m .33974 1 L s .39316 .99625 m .39316 1 L s .5 .99625 m .5 1 L s .55342 .99625 m .55342 1 L s .60684 .99625 m .60684 1 L s .71368 .99625 m .71368 1 L s .76709 .99625 m .76709 1 L s .82051 .99625 m .82051 1 L s .92735 .99625 m .92735 1 L s .98077 .99625 m .98077 1 L s .25 Mabswid 0 1 m 1 1 L s .99375 .01923 m 1 .01923 L s .99375 .23291 m 1 .23291 L s .99375 .44658 m 1 .44658 L s .99375 .66026 m 1 .66026 L s .99375 .87393 m 1 .87393 L s .125 Mabswid .99625 .07265 m 1 .07265 L s .99625 .12607 m 1 .12607 L s .99625 .17949 m 1 .17949 L s .99625 .28632 m 1 .28632 L s .99625 .33974 m 1 .33974 L s .99625 .39316 m 1 .39316 L s .99625 .5 m 1 .5 L s .99625 .55342 m 1 .55342 L s .99625 .60684 m 1 .60684 L s .99625 .71368 m 1 .71368 L s .99625 .76709 m 1 .76709 L s .99625 .82051 m 1 .82051 L s .99625 .92735 m 1 .92735 L s .99625 .98077 m 1 .98077 L s .25 Mabswid 1 0 m 1 1 L s 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath 0 1 .94 r .01923 .98077 m .98077 .98077 L .98077 .01923 L .01923 .01923 L F 0 1 .87 r .01923 .79664 m .05929 .8176 L .06543 .82051 L .09936 .83518 L .13942 .84967 L .17678 .86058 L .17949 .86127 L .21955 .87015 L .25962 .87641 L .29968 .88014 L .33974 .88138 L .37981 .88014 L .41987 .87641 L .45994 .87178 L .49193 .86058 L .5 .84942 L .51555 .82051 L .54006 .78279 L .54167 .78045 L .57069 .74038 L .58013 .72825 L .60313 .70032 L .62019 .68099 L .63963 .66026 L .66026 .63963 L .68099 .62019 L .70032 .60313 L .72825 .58013 L .74038 .57069 L .78045 .54167 L .78279 .54006 L .82051 .51555 L .84642 .5 L .86058 .49191 L .90064 .47043 L .92393 .45994 L .94071 .45415 L .96454 .41987 L .96144 .37981 L .97913 .33974 L .98077 .3322 L .98077 .98077 L .01923 .98077 L F 0 1 .8 r .01923 .80854 m .04185 .82051 L .05929 .82908 L .09936 .84633 L .13942 .86056 L .13948 .86058 L .17949 .87196 L .21955 .8807 L .25962 .88686 L .29968 .89053 L .33974 .89175 L .37981 .89053 L .41987 .88686 L .45994 .88265 L .5 .87045 L .51029 .86058 L .53247 .82051 L .54006 .80882 L .55948 .78045 L .58013 .75242 L .58949 .74038 L .62019 .70354 L .62304 .70032 L .66026 .66077 L .66077 .66026 L .70032 .62304 L .70354 .62019 L .74038 .58949 L .75242 .58013 L .78045 .55948 L .80882 .54006 L .82051 .53247 L .86058 .50803 L .87462 .5 L .90064 .48581 L .94071 .46573 L .94905 .45994 L .97386 .41987 L .98077 .38518 L .98077 .98077 L .01923 .98077 L F 0 1 .73 r .01923 .82019 m .01983 .82051 L .05929 .84035 L .09936 .85728 L .10804 .86058 L .13942 .87127 L .17949 .88249 L .21955 .89108 L .25962 .89714 L .29778 .90064 L .29968 .90076 L .33974 .90196 L .37981 .90076 L .38171 .90064 L .41987 .89714 L .45994 .89228 L .5 .88525 L .52677 .86058 L .54006 .83514 L .54938 .82051 L .57729 .78045 L .58013 .77659 L .60829 .74038 L .62019 .7261 L .64294 .70032 L .66026 .68192 L .68192 .66026 L .70032 .64294 L .7261 .62019 L .74038 .60829 L .77659 .58013 L .78045 .57729 L .82051 .54938 L .83485 .54006 L .86058 .52414 L .90064 .50119 L .90282 .5 L .94071 .48058 L .96643 .45994 L .98077 .42461 L .98077 .98077 L .01923 .98077 L F 0 1 .66 r .01923 .83162 m .05929 .8514 L .08043 .86058 L .09936 .86805 L .13942 .8818 L .17949 .89284 L .21588 .90064 L .21955 .90129 L .25962 .90727 L .29968 .91083 L .33974 .91202 L .37981 .91083 L .41987 .90727 L .45994 .90129 L .46361 .90064 L .5 .89512 L .54006 .86092 L .54025 .86058 L .5663 .82051 L .58013 .80076 L .5951 .78045 L .62019 .74866 L .62709 .74038 L .66026 .70307 L .66285 .70032 L .70032 .66285 L .70307 .66026 L .74038 .62709 L .74866 .62019 L .78045 .5951 L .80076 .58013 L .82051 .5663 L .86058 .54025 L .86088 .54006 L .90064 .51657 L .93102 .5 L .94071 .49506 L .97967 .45994 L .98077 .45722 L .98077 .98077 L .01923 .98077 L F 0 1 .59 r .01923 .84284 m .05555 .86058 L .05929 .86227 L .09936 .87863 L .13942 .89216 L .16971 .90064 L .17949 .90303 L .21955 .91136 L .25962 .91725 L .29968 .92076 L .33974 .92193 L .37981 .92076 L .41987 .91725 L .45994 .91136 L .5 .90319 L .50998 .90064 L .54006 .88599 L .55637 .86058 L .58013 .82493 L .58322 .82051 L .61291 .78045 L .62019 .77122 L .64589 .74038 L .66026 .72422 L .68275 .70032 L .70032 .68275 L .72422 .66026 L .74038 .64589 L .77122 .62019 L .78045 .61291 L .82051 .58322 L .82493 .58013 L .86058 .55637 L .88691 .54006 L .90064 .53195 L .94071 .50966 L .95922 .5 L .98077 .48355 L .98077 .98077 L .01923 .98077 L F 0 1 .52 r .01923 .85385 m .03271 .86058 L .05929 .87295 L .09936 .88905 L .13372 .90064 L .13942 .90236 L .17949 .91307 L .21955 .92128 L .25962 .92709 L .29968 .93054 L .33974 .93169 L .37981 .93054 L .41987 .92709 L .45994 .92128 L .5 .91361 L .54006 .90339 L .54477 .90064 L .57248 .86058 L .58013 .8491 L .60014 .82051 L .62019 .79378 L .63072 .78045 L .66026 .74537 L .66469 .74038 L .70032 .70265 L .70265 .70032 L .74038 .66469 L .74537 .66026 L .78045 .63072 L .79378 .62019 L .82051 .60014 L .8491 .58013 L .86058 .57248 L .90064 .54733 L .91294 .54006 L .94071 .52437 L .98077 .50432 L .98077 .98077 L .01923 .98077 L F 0 1 .45 r .01923 .86467 m .05929 .88345 L .09936 .89929 L .1031 .90064 L .13942 .91242 L .17949 .92296 L .21955 .93106 L .25962 .93678 L .29968 .94019 L .3101 .94071 L .33974 .94133 L .36939 .94071 L .37981 .94019 L .41987 .93678 L .45994 .93106 L .5 .92351 L .54006 .91705 L .5656 .90064 L .58013 .87375 L .58859 .86058 L .61706 .82051 L .62019 .81634 L .64852 .78045 L .66026 .76652 L .68349 .74038 L .70032 .72256 L .72256 .70032 L .74038 .68349 L .76652 .66026 L .78045 .64852 L .81634 .62019 L .82051 .61706 L .86058 .58859 L .87327 .58013 L .90064 .56271 L .93897 .54006 L .94071 .53908 L .98077 .52005 L .98077 .98077 L .01923 .98077 L F 0 1 .38 r .01923 .87532 m .05929 .89379 L .07598 .90064 L .09936 .90939 L .13942 .92232 L .17949 .93272 L .21955 .9407 L .21959 .94071 L .25962 .94634 L .29968 .94971 L .33974 .95083 L .37981 .94971 L .41987 .94634 L .4599 .94071 L .45994 .9407 L .5 .93302 L .54006 .92716 L .57868 .90064 L .58013 .89768 L .60471 .86058 L .62019 .8389 L .63398 .82051 L .66026 .78767 L .66633 .78045 L .70032 .74246 L .70228 .74038 L .74038 .70228 L .74246 .70032 L .78045 .66633 L .78767 .66026 L .82051 .63398 L .8389 .62019 L .86058 .60471 L .89744 .58013 L .90064 .57809 L .94071 .55379 L .965 .54006 L .98077 .53291 L .98077 .98077 L .01923 .98077 L F 0 1 .31 r .01923 .88578 m .05151 .90064 L .05929 .90397 L .09936 .91934 L .13942 .93208 L .17235 .94071 L .17949 .94233 L .21955 .95021 L .25962 .95578 L .29968 .9591 L .33974 .96021 L .37981 .9591 L .41987 .95578 L .45994 .95021 L .5 .94227 L .50714 .94071 L .54006 .93488 L .58013 .91548 L .59383 .90064 L .62019 .86147 L .62082 .86058 L .6509 .82051 L .66026 .80881 L .68414 .78045 L .70032 .76237 L .72108 .74038 L .74038 .72108 L .76237 .70032 L .78045 .68414 L .80881 .66026 L .82051 .6509 L .86058 .62082 L .86145 .62019 L .90064 .59347 L .92161 .58013 L .94071 .56851 L .98077 .54562 L .98077 .98077 L .01923 .98077 L F 0 1 .24 r .01923 .89608 m .02894 .90064 L .05929 .91399 L .09936 .92914 L .13588 .94071 L .13942 .94171 L .17949 .95182 L .21955 .95959 L .25962 .9651 L .29968 .96838 L .33974 .96947 L .37981 .96838 L .41987 .9651 L .45994 .95959 L .5 .9514 L .54006 .94136 L .5436 .94071 L .58013 .9287 L .60911 .90064 L .62019 .88427 L .63693 .86058 L .66026 .82996 L .66782 .82051 L .70032 .78227 L .70195 .78045 L .73988 .74038 L .74038 .73988 L .78045 .70195 L .78227 .70032 L .82051 .66782 L .82996 .66026 L .86058 .63693 L .88401 .62019 L .90064 .60885 L .94071 .58322 L .94578 .58013 L .98077 .55972 L .98077 .98077 L .01923 .98077 L F 0 1 .17 r .01923 .90623 m .05929 .92387 L .09936 .93881 L .10496 .94071 L .13942 .9512 L .17949 .96119 L .21955 .96886 L .25962 .9743 L .29968 .97754 L .33974 .97862 L .37981 .97754 L .41987 .9743 L .45994 .96886 L .5 .96056 L .54006 .94774 L .57453 .94071 L .58013 .93893 L .62019 .90735 L .62424 .90064 L .65304 .86058 L .66026 .85111 L .68474 .82051 L .70032 .80218 L .71976 .78045 L .74038 .75868 L .75868 .74038 L .78045 .71976 L .80218 .70032 L .82051 .68474 L .85111 .66026 L .86058 .65304 L .90064 .62424 L .90657 .62019 L .94071 .59793 L .96995 .58013 L .98077 .57382 L .98077 .98077 L .01923 .98077 L F 0 .99 1 r .01923 .78448 m .05929 .80589 L .09136 .82051 L .09936 .82382 L .13942 .83858 L .17949 .85039 L .21955 .85942 L .22518 .86058 L .25962 .86579 L .29968 .86958 L .33974 .87084 L .37981 .86958 L .41987 .86579 L .45462 .86058 L .45994 .85939 L .49872 .82051 L .5 .81823 L .52386 .78045 L .54006 .75677 L .55189 .74038 L .58013 .70408 L .58323 .70032 L .61848 .66026 L .62019 .65843 L .65843 .62019 L .66026 .61848 L .70032 .58323 L .70408 .58013 L .74038 .55189 L .75677 .54006 L .78045 .52386 L .81823 .5 L .82051 .49863 L .86058 .4758 L .89086 .45994 L .90064 .45505 L .94071 .43974 L .95291 .41987 L .94938 .37981 L .96752 .33974 L .97417 .29968 L .97712 .25962 L .97754 .21955 L .97543 .17949 L .97078 .13942 L .96353 .09936 L .95359 .05929 L .94083 .01923 L .01923 .01923 L F 0 .92 1 r .01923 .77205 m .0339 .78045 L .05929 .79394 L .09936 .81224 L .12029 .82051 L .13942 .82728 L .17949 .83931 L .21955 .84851 L .25962 .85499 L .29968 .85885 L .33974 .86013 L .37981 .85885 L .41987 .85653 L .45994 .84609 L .48268 .82051 L .5 .79003 L .50605 .78045 L .5331 .74038 L .54006 .73074 L .56332 .70032 L .58013 .67991 L .59733 .66026 L .62019 .63587 L .63587 .62019 L .66026 .59733 L .67991 .58013 L .70032 .56332 L .73074 .54006 L .74038 .5331 L .78045 .50605 L .79003 .5 L .82051 .48171 L .8601 .45994 L .86058 .45969 L .90064 .43967 L .93701 .41987 L .94071 .41291 L .94362 .37981 L .9567 .33974 L .96339 .29968 L .96639 .25962 L .96681 .21955 L .96468 .17949 L .95995 .13942 L .95258 .09936 L .94246 .05929 L .94071 .05349 L .92945 .01923 L .01923 .01923 L F 0 .85 1 r .01923 .75933 m .05683 .78045 L .05929 .78172 L .09936 .80042 L .13942 .81576 L .15367 .82051 L .17949 .82803 L .21955 .83739 L .25962 .844 L .29968 .84792 L .33974 .84923 L .37981 .84792 L .41987 .84775 L .45994 .82725 L .46533 .82051 L .48824 .78045 L .5 .76183 L .5143 .74038 L .54006 .70471 L .54342 .70032 L .57618 .66026 L .58013 .65574 L .61331 .62019 L .62019 .61331 L .65574 .58013 L .66026 .57618 L .70032 .54342 L .70471 .54006 L .74038 .5143 L .76183 .5 L .78045 .48824 L .82051 .46479 L .82934 .45994 L .86058 .44357 L .90064 .42428 L .91125 .41987 L .93985 .37981 L .94071 .37001 L .94628 .33974 L .95243 .29968 L .95548 .25962 L .95591 .21955 L .95374 .17949 L .94893 .13942 L .94142 .09936 L .94071 .09612 L .93111 .05929 L .91784 .01923 L .01923 .01923 L F 0 .78 1 r .01923 .74629 m .05929 .76923 L .08184 .78045 L .09936 .78834 L .13942 .80402 L .17949 .81652 L .19445 .82051 L .21955 .82607 L .25962 .8328 L .29968 .8368 L .33974 .83813 L .37981 .8368 L .41987 .83664 L .44638 .82051 L .45994 .79918 L .47043 .78045 L .4955 .74038 L .5 .73363 L .52351 .70032 L .54006 .67868 L .55503 .66026 L .58013 .63157 L .59075 .62019 L .62019 .59075 L .63157 .58013 L .66026 .55503 L .67868 .54006 L .70032 .52351 L .73363 .5 L .74038 .4955 L .78045 .47043 L .79858 .45994 L .82051 .44787 L .86058 .42746 L .87688 .41987 L .90064 .41311 L .93377 .37981 L .93584 .33974 L .94071 .30522 L .94127 .29968 L .94437 .25962 L .94481 .21955 L .9426 .17949 L .94071 .15794 L .9377 .13942 L .93005 .09936 L .91953 .05929 L .90599 .01923 L .01923 .01923 L F 0 .71 1 r .01923 .73292 m .0313 .74038 L .05929 .75644 L .09936 .776 L .10961 .78045 L .13942 .79202 L .17949 .8048 L .21955 .81453 L .25292 .82051 L .25962 .82139 L .29968 .82547 L .33974 .82682 L .37981 .82547 L .41987 .82183 L .4223 .82051 L .45283 .78045 L .45994 .76782 L .4767 .74038 L .5 .70543 L .50361 .70032 L .53388 .66026 L .54006 .65265 L .56819 .62019 L .58013 .6074 L .6074 .58013 L .62019 .56819 L .65265 .54006 L .66026 .53388 L .70032 .50361 L .70543 .5 L .74038 .4767 L .76782 .45994 L .78045 .45262 L .82051 .43095 L .84267 .41987 L .86058 .41135 L .90064 .39972 L .92106 .37981 L .92496 .33974 L .9299 .29968 L .93306 .25962 L .93351 .21955 L .93125 .17949 L .92626 .13942 L .91845 .09936 L .90772 .05929 L .90064 .03819 L .89389 .01923 L .01923 .01923 L F 0 .64 1 r .01923 .71917 m .05404 .74038 L .05929 .74332 L .09936 .76338 L .13942 .77976 L .14129 .78045 L .17949 .79282 L .21955 .80276 L .25962 .80976 L .29968 .81392 L .33974 .8153 L .37981 .81672 L .41987 .80205 L .43526 .78045 L .4579 .74038 L .45994 .73705 L .4837 .70032 L .5 .67724 L .51273 .66026 L .54006 .62662 L .54563 .62019 L .58013 .58323 L .58323 .58013 L .62019 .54563 L .62662 .54006 L .66026 .51273 L .67724 .5 L .70032 .4837 L .73705 .45994 L .74038 .4579 L .78045 .43481 L .80884 .41987 L .82051 .41403 L .86058 .39523 L .89806 .37981 L .90064 .37775 L .91323 .33974 L .9183 .29968 L .92152 .25962 L .92198 .21955 L .91968 .17949 L .91459 .13942 L .90662 .09936 L .90064 .07589 L .89566 .05929 L .88152 .01923 L .01923 .01923 L F 0 .57 1 r .01923 .70502 m .05929 .72987 L .07876 .74038 L .09936 .75044 L .13942 .76723 L .17906 .78045 L .17949 .78057 L .21955 .79074 L .25962 .79789 L .29968 .80213 L .33974 .80354 L .37981 .80828 L .41712 .78045 L .41987 .77533 L .4391 .74038 L .45994 .70629 L .4638 .70032 L .49159 .66026 L .5 .64904 L .52308 .62019 L .54006 .60059 L .55907 .58013 L .58013 .55907 L .60059 .54006 L .62019 .52308 L .64904 .5 L .66026 .49159 L .70032 .4638 L .70629 .45994 L .74038 .4391 L .775 .41987 L .78045 .417 L .82051 .39711 L .85897 .37981 L .86058 .37931 L .90047 .33974 L .90064 .33831 L .90646 .29968 L .90975 .25962 L .91022 .21955 L .90787 .17949 L .90267 .13942 L .90064 .12741 L .89453 .09936 L .88333 .05929 L .86886 .01923 L .01923 .01923 L F 0 .5 1 r .01923 .69044 m .03393 .70032 L .05929 .71604 L .09936 .73717 L .10618 .74038 L .13942 .75439 L .17949 .76806 L .21955 .77845 L .2282 .78045 L .25962 .78576 L .29968 .7901 L .33974 .79154 L .37981 .79539 L .39875 .78045 L .41987 .74119 L .4203 .74038 L .4439 .70032 L .45994 .67553 L .47044 .66026 L .5 .62084 L .50052 .62019 L .5349 .58013 L .54006 .57456 L .57456 .54006 L .58013 .5349 L .62019 .50052 L .62084 .5 L .66026 .47044 L .67553 .45994 L .70032 .4439 L .74038 .4203 L .74116 .41987 L .78045 .39919 L .82051 .3802 L .82138 .37981 L .86058 .36675 L .89175 .33974 L .89507 .29968 L .89773 .25962 L .89821 .21955 L .89581 .17949 L .8905 .13942 L .88218 .09936 L .87071 .05929 L .86058 .03148 L .85589 .01923 L .01923 .01923 L F 0 .43 1 r .01923 .67538 m .05686 .70032 L .05929 .70179 L .09936 .72355 L .13731 .74038 L .13942 .74122 L .17949 .75524 L .21955 .76588 L .25962 .77336 L .29968 .77779 L .33974 .77985 L .37981 .77611 L .40188 .74038 L .41987 .70732 L .42399 .70032 L .44929 .66026 L .45994 .64477 L .47796 .62019 L .5 .59264 L .51073 .58013 L .54006 .54853 L .54853 .54006 L .58013 .51073 L .59264 .5 L .62019 .47796 L .64477 .45994 L .66026 .44929 L .70032 .42399 L .70732 .41987 L .74038 .4015 L .78045 .38138 L .78378 .37981 L .82051 .36328 L .86058 .34979 L .87338 .33974 L .88363 .29968 L .88545 .25962 L .88594 .21955 L .88349 .17949 L .87805 .13942 L .86953 .09936 L .86058 .06768 L .85779 .05929 L .84259 .01923 L .01923 .01923 L F 0 .36 1 r .01923 .65978 m .01988 .66026 L .05929 .68712 L .08187 .70032 L .09936 .70953 L .13942 .72771 L .1741 .74038 L .17949 .74209 L .21955 .75301 L .25962 .76067 L .29968 .76521 L .33974 .77251 L .37981 .74677 L .38284 .74038 L .40409 .70032 L .41987 .67349 L .42814 .66026 L .4554 .62019 L .45994 .61401 L .48656 .58013 L .5 .56444 L .5225 .54006 L .54006 .5225 L .56444 .5 L .58013 .48656 L .61401 .45994 L .62019 .4554 L .66026 .42814 L .67349 .41987 L .70032 .40409 L .74038 .38271 L .74618 .37981 L .78045 .36358 L .82051 .34636 L .84112 .33974 L .86058 .32583 L .87067 .29968 L .87289 .25962 L .87339 .21955 L .87088 .17949 L .8653 .13942 L .86058 .11523 L .85658 .09936 L .84454 .05929 L .82892 .01923 L .01923 .01923 L F 0 .29 1 r .01923 .64361 m .0419 .66026 L .05929 .67194 L .09936 .69509 L .10964 .70032 L .13942 .71381 L .17949 .7286 L .21955 .73981 L .22176 .74038 L .25962 .74766 L .29968 .75232 L .33974 .76072 L .36436 .74038 L .37981 .70882 L .38418 .70032 L .40699 .66026 L .41987 .63965 L .43284 .62019 L .45994 .58325 L .46239 .58013 L .49647 .54006 L .5 .53624 L .53624 .5 L .54006 .49647 L .58013 .46239 L .58325 .45994 L .62019 .43284 L .63965 .41987 L .66026 .40699 L .70032 .38418 L .70858 .37981 L .74038 .36391 L .78045 .34577 L .79475 .33974 L .82051 .33215 L .85796 .29968 L .86008 .25962 L .86053 .21955 L .85795 .17949 L .85225 .13942 L .8433 .09936 L .83092 .05929 L .82051 .03284 L .81486 .01923 L .01923 .01923 L F 0 .22 1 r .01923 .62675 m .05929 .65621 L .06548 .66026 L .09936 .68019 L .13942 .6995 L .14132 .70032 L .17949 .71474 L .21955 .72626 L .25962 .73432 L .29968 .73956 L .30747 .74038 L .33974 .74094 L .3405 .74038 L .36507 .70032 L .37981 .67099 L .38584 .66026 L .41028 .62019 L .41987 .60581 L .43822 .58013 L .45994 .55248 L .47045 .54006 L .5 .50805 L .50805 .5 L .54006 .47045 L .55248 .45994 L .58013 .43822 L .60581 .41987 L .62019 .41028 L .66026 .38584 L .67099 .37981 L .70032 .36428 L .74038 .34511 L .75245 .33974 L .78045 .32796 L .82051 .31665 L .84288 .29968 L .84818 .25962 L .84735 .21955 L .84471 .17949 L .83885 .13942 L .82965 .09936 L .82051 .06931 L .81692 .05929 L .80038 .01923 L .01923 .01923 L F 0 .15 1 r .01923 .60915 m .03278 .62019 L .05929 .63989 L .09142 .66026 L .09936 .66476 L .13942 .68475 L .1791 .70032 L .17949 .70045 L .21955 .71232 L .25962 .72062 L .29968 .72994 L .33974 .71115 L .34484 .70032 L .36469 .66026 L .37981 .63339 L .38773 .62019 L .41405 .58013 L .41987 .57197 L .44442 .54006 L .45994 .52172 L .47985 .5 L .5 .47985 L .52172 .45994 L .54006 .44442 L .57197 .41987 L .58013 .41405 L .62019 .38773 L .63339 .37981 L .66026 .36469 L .70032 .34437 L .71016 .33974 L .74038 .32631 L .78045 .31015 L .8119 .29968 L .82051 .29386 L .83485 .25962 L .83382 .21955 L .8311 .17949 L .82507 .13942 L .82051 .11755 L .81579 .09936 L .8025 .05929 L .78542 .01923 L .01923 .01923 L F 0 .08 1 r .01923 .59068 m .05563 .62019 L .05929 .62287 L .09936 .64928 L .12035 .66026 L .13942 .66948 L .17949 .68665 L .21955 .69906 L .22826 .70032 L .25962 .70652 L .29968 .71616 L .32348 .70032 L .33974 .66807 L .34355 .66026 L .36517 .62019 L .37981 .59579 L .38988 .58013 L .41839 .54006 L .41987 .53813 L .45165 .5 L .45994 .49096 L .49096 .45994 L .5 .45165 L .53813 .41987 L .54006 .41839 L .58013 .38988 L .59579 .37981 L .62019 .36517 L .66026 .34355 L .66786 .33974 L .70032 .32447 L .74038 .30751 L .76052 .29968 L .78045 .29597 L .82 .25962 L .82036 .21955 L .81877 .17949 L .81274 .13942 L .80168 .09936 L .78761 .05929 L .78045 .04233 L .77077 .01923 L .01923 .01923 L F 0 .01 1 r .01923 .57306 m .02898 .58013 L .05929 .60761 L .08051 .62019 L .09936 .63278 L .13942 .6543 L .15375 .66026 L .17949 .67142 L .21955 .68942 L .25962 .69284 L .29968 .69517 L .32566 .66026 L .33974 .62556 L .34261 .62019 L .36601 .58013 L .37981 .55819 L .39236 .54006 L .41987 .5043 L .42345 .5 L .45994 .4602 L .4602 .45994 L .5 .42345 L .5043 .41987 L .54006 .39236 L .55819 .37981 L .58013 .36601 L .62019 .34261 L .62556 .33974 L .66026 .32323 L .70032 .30456 L .71218 .29968 L .74038 .2919 L .78045 .28234 L .80715 .25962 L .81474 .21955 L .8094 .17949 L .79927 .13942 L .78653 .09936 L .78045 .08117 L .77299 .05929 L .75508 .01923 L .01923 .01923 L F .06 0 1 r .01923 .55321 m .05139 .58013 L .05929 .58816 L .09936 .6148 L .10459 .62019 L .13942 .63898 L .17949 .65444 L .19455 .66026 L .21955 .67256 L .25962 .67885 L .29968 .66323 L .30193 .66026 L .32843 .62019 L .33974 .58327 L .34162 .58013 L .374 .54006 L .37981 .52081 L .39673 .5 L .41987 .47046 L .42958 .45994 L .45994 .42958 L .47046 .41987 L .5 .39673 L .52081 .37981 L .54006 .374 L .58013 .34162 L .58327 .33974 L .62019 .32843 L .66026 .30142 L .66384 .29968 L .70032 .28636 L .74038 .2741 L .77408 .25962 L .78045 .25497 L .79985 .21955 L .79268 .17949 L .78145 .13942 L .78045 .13582 L .77094 .09936 L .75798 .05929 L .74038 .02469 L .73698 .01923 L .01923 .01923 L F .13 0 1 r .01923 .52435 m .03243 .54006 L .05929 .56193 L .07822 .58013 L .09936 .59477 L .13942 .62003 L .13965 .62019 L .17949 .63494 L .21955 .64637 L .24742 .66026 L .25962 .6618 L .26623 .66026 L .29605 .62019 L .29968 .61529 L .31729 .58013 L .33974 .54135 L .341 .54006 L .36474 .5 L .37981 .48409 L .39998 .45994 L .41987 .43908 L .43908 .41987 L .45994 .39998 L .48409 .37981 L .5 .36474 L .54006 .341 L .54135 .33974 L .58013 .31729 L .61529 .29968 L .62019 .29605 L .66026 .27766 L .70032 .2662 L .72171 .25962 L .74038 .24624 L .77146 .21955 L .76679 .17949 L .75943 .13942 L .75327 .09936 L .74038 .06139 L .73899 .05929 L .71617 .01923 L .01923 .01923 L F 0 1 .1 r .01923 .91622 m .05929 .93362 L .07766 .94071 L .09936 .94835 L .13942 .96058 L .17949 .97044 L .21955 .97802 L .23694 .98077 L .01923 .98077 L F 0 1 .03 r .01923 .92607 m .05304 .94071 L .05929 .94322 L .09936 .95776 L .13942 .96983 L .17949 .97958 L .18497 .98077 L .01923 .98077 L F .04 1 0 r .01923 .93578 m .03036 .94071 L .05929 .9527 L .09936 .96705 L .13942 .97898 L .14612 .98077 L .01923 .98077 L F .11 1 0 r .01923 .94535 m .05929 .96205 L .09936 .97623 L .1138 .98077 L .01923 .98077 L F .18 1 0 r .01923 .9548 m .05929 .97129 L .08559 .98077 L .01923 .98077 L F .25 1 0 r .01923 .96413 m .05929 .98042 L .06023 .98077 L .01923 .98077 L F .32 1 0 r .01923 .97334 m .03705 .98077 L .01923 .98077 L F 0 1 .1 r .98077 .58792 m .94071 .61264 L .92913 .62019 L .90064 .63962 L .87226 .66026 L .86058 .66916 L .82208 .70032 L .82051 .70165 L .78045 .73757 L .77748 .74038 L .74038 .77748 L .73757 .78045 L .70165 .82051 L .70032 .82208 L .66916 .86058 L .66026 .87226 L .63962 .90064 L .62019 .92887 L .60219 .94071 L .58013 .9474 L .54006 .95516 L .5 .96987 L .45994 .97802 L .44254 .98077 L .98077 .98077 L F 0 1 .03 r .98077 .60202 m .95169 .62019 L .94071 .62735 L .90064 .655 L .89341 .66026 L .86058 .68527 L .84199 .70032 L .82051 .71857 L .79628 .74038 L .78045 .75538 L .75538 .78045 L .74038 .79628 L .71857 .82051 L .70032 .84199 L .68527 .86058 L .66026 .89341 L .655 .90064 L .62552 .94071 L .62019 .94433 L .58013 .95532 L .54006 .96477 L .5 .97948 L .49452 .98077 L .98077 .98077 L F .04 1 0 r .98077 .61612 m .97425 .62019 L .94071 .64207 L .91456 .66026 L .90064 .67038 L .86189 .70032 L .86058 .70138 L .82051 .73549 L .81508 .74038 L .78045 .77319 L .77319 .78045 L .74038 .81508 L .73549 .82051 L .70138 .86058 L .70032 .86189 L .67038 .90064 L .66026 .91654 L .64287 .94071 L .62019 .95606 L .58013 .96392 L .54006 .97772 L .53337 .98077 L .98077 .98077 L F .11 1 0 r .98077 .63021 m .94071 .65678 L .93571 .66026 L .90064 .68576 L .8818 .70032 L .86058 .7175 L .83388 .74038 L .82051 .75241 L .791 .78045 L .78045 .791 L .75241 .82051 L .74038 .83388 L .7175 .86058 L .70032 .8818 L .68576 .90064 L .66026 .93672 L .65712 .94071 L .62019 .96554 L .58013 .97443 L .56569 .98077 L .98077 .98077 L F .18 1 0 r .98077 .64431 m .95685 .66026 L .94071 .67149 L .9017 .70032 L .90064 .70114 L .86058 .73361 L .85267 .74038 L .82051 .76933 L .80881 .78045 L .78045 .80881 L .76933 .82051 L .74038 .85267 L .73361 .86058 L .70114 .90064 L .70032 .90174 L .67171 .94071 L .66026 .95197 L .62019 .97355 L .5939 .98077 L .98077 .98077 L F .25 1 0 r .98077 .65841 m .978 .66026 L .94071 .6862 L .92161 .70032 L .90064 .71652 L .87147 .74038 L .86058 .74972 L .82662 .78045 L .82051 .78625 L .78625 .82051 L .78045 .82662 L .74972 .86058 L .74038 .87147 L .71652 .90064 L .70032 .92215 L .6864 .94071 L .66026 .96396 L .62019 .98052 L .61926 .98077 L .98077 .98077 L F .32 1 0 r .98077 .67251 m .94151 .70032 L .94071 .70092 L .90064 .7319 L .89027 .74038 L .86058 .76584 L .84443 .78045 L .82051 .80317 L .80317 .82051 L .78045 .84443 L .76584 .86058 L .74038 .89027 L .7319 .90064 L .70092 .94071 L .70032 .94145 L .66026 .97382 L .64257 .98077 L .98077 .98077 L F .39 1 0 r .98077 .68661 m .96141 .70032 L .94071 .71563 L .90907 .74038 L .90064 .74728 L .86224 .78045 L .86058 .78195 L .82051 .82009 L .82009 .82051 L .78195 .86058 L .78045 .86224 L .74728 .90064 L .74038 .9092 L .71563 .94071 L .70032 .95858 L .66416 .98077 L .98077 .98077 L F .46 1 0 r .98077 .70071 m .94071 .73034 L .92787 .74038 L .90064 .76266 L .88005 .78045 L .86058 .79806 L .83701 .82051 L .82051 .83701 L .79806 .86058 L .78045 .88005 L .76266 .90064 L .74038 .92811 L .73034 .94071 L .70032 .97247 L .68444 .98077 L .98077 .98077 L F .53 1 0 r .98077 .71481 m .94667 .74038 L .94071 .74505 L .90064 .77804 L .89786 .78045 L .86058 .81418 L .85392 .82051 L .82051 .85392 L .81418 .86058 L .78045 .89786 L .77804 .90064 L .74505 .94071 L .74038 .94642 L .70357 .98077 L .98077 .98077 L F .6 1 0 r .98077 .72891 m .96547 .74038 L .94071 .75976 L .91566 .78045 L .90064 .79342 L .87084 .82051 L .86058 .83029 L .83029 .86058 L .82051 .87084 L .79342 .90064 L .78045 .91566 L .75976 .94071 L .74038 .96373 L .72181 .98077 L .98077 .98077 L F .67 1 0 r .98077 .74301 m .94071 .77448 L .93347 .78045 L .90064 .8088 L .88776 .82051 L .86058 .8464 L .8464 .86058 L .82051 .88776 L .8088 .90064 L .78045 .93347 L .77448 .94071 L .74038 .97961 L .73909 .98077 L .98077 .98077 L F .74 1 0 r .98077 .75711 m .95128 .78045 L .94071 .78919 L .90468 .82051 L .90064 .82419 L .86252 .86058 L .86058 .86252 L .82419 .90064 L .82051 .90468 L .78919 .94071 L .78045 .95128 L .75531 .98077 L .98077 .98077 L F .81 1 0 r .98077 .77121 m .96909 .78045 L .94071 .8039 L .9216 .82051 L .90064 .83957 L .87863 .86058 L .86058 .87863 L .83957 .90064 L .82051 .9216 L .8039 .94071 L .78045 .96909 L .77071 .98077 L .98077 .98077 L F .88 1 0 r .98077 .7853 m .94071 .81861 L .93852 .82051 L .90064 .85495 L .89474 .86058 L .86058 .89474 L .85495 .90064 L .82051 .93852 L .81861 .94071 L .78545 .98077 L .98077 .98077 L F .95 1 0 r .98077 .7994 m .95544 .82051 L .94071 .83332 L .91086 .86058 L .90064 .87033 L .87033 .90064 L .86058 .91086 L .83332 .94071 L .82051 .95544 L .79968 .98077 L .98077 .98077 L F 1 .98 0 r .98077 .8135 m .97236 .82051 L .94071 .84804 L .92697 .86058 L .90064 .88571 L .88571 .90064 L .86058 .92697 L .84804 .94071 L .82051 .97236 L .81363 .98077 L .98077 .98077 L F 1 .91 0 r .98077 .8276 m .94308 .86058 L .94071 .86275 L .90109 .90064 L .90064 .9011 L .86275 .94071 L .86058 .94308 L .82769 .98077 L .98077 .98077 L F 1 .84 0 r .98077 .8417 m .9592 .86058 L .94071 .87746 L .91647 .90064 L .90064 .91666 L .87746 .94071 L .86058 .9592 L .8419 .98077 L .98077 .98077 L F 1 .77 0 r .98077 .8558 m .97531 .86058 L .94071 .89217 L .93185 .90064 L .90064 .93202 L .89217 .94071 L .86058 .97531 L .8559 .98077 L .98077 .98077 L F 1 .7 0 r .98077 .87 m .94723 .90064 L .94071 .90707 L .90696 .94071 L .90064 .947 L .86943 .98077 L .98077 .98077 L F 1 .63 0 r .98077 .88417 m .96261 .90064 L .94071 .92207 L .92178 .94071 L .90064 .9614 L .88248 .98077 L .98077 .98077 L F 1 .56 0 r .98077 .89815 m .97799 .90064 L .94071 .93654 L .9364 .94071 L .90064 .97502 L .89515 .98077 L .98077 .98077 L F 1 .49 0 r .98077 .91189 m .95067 .94071 L .94071 .95011 L .90739 .98077 L .98077 .98077 L F 1 .42 0 r .98077 .92517 m .96447 .94071 L .94071 .96241 L .91924 .98077 L .98077 .98077 L F 1 .35 0 r .98077 .93774 m .97764 .94071 L .94071 .97306 L .93079 .98077 L .98077 .98077 L F 1 .28 0 r .98077 .94943 m .94208 .98077 L .98077 .98077 L F 0 1 .87 r .98077 .13466 m .97431 .09936 L .96454 .05929 L .952 .01923 L .98077 .01923 L F 1 .21 0 r .98077 .96003 m .95316 .98077 L .98077 .98077 L F 0 1 .8 r .98077 .08045 m .9753 .05929 L .96297 .01923 L .98077 .01923 L F 1 .14 0 r .98077 .96935 m .96408 .98077 L .98077 .98077 L F 0 1 .73 r .98077 .04178 m .97375 .01923 L .98077 .01923 L F 1 .07 0 r .98077 .97718 m .97488 .98077 L .98077 .98077 L F % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 288}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooooo`04o`000?ooooooooooo`0003Sooooo00?o0000ooooooooool0=Oooool01?l0 003oooooooooool0000gooooo`Co0000=oooool3o`0002Gooooo000>ooooo`04o`000?oooooooooo o`0003Gooooo00Go0000ooooooooooooooooo`00000gooooo`03o`000?oooooo000003Oooooo00?o 0000ooooooooool0=oooool01Ol0003ooooooooooooooooo000002Cooooo000>ooooo`04o`000?oo ooooooooo`0003Gooooo00Go0000ooooooooooooooooo`00000hooooo`;o0000>?ooool00ol0003o ooooooooo`0fooooo`05o`000?ooooooooooooooool000009?ooool000oooooo0_l0000gooooo`?o 0000>_ooool00ol0003oooooooooo`0gooooo`;o0000=oooool3o`0002Gooooo003oooooob7ooooo 003oooooob7ooooo003oooooob7ooooo003oooooob7ooooo003oooooob7ooooo000:oooooooo0000 5Ol00002ooooo`002_ooool00ol0003oooooooooo`03ooooo`03o`000?oooooooooo00_ooooo00?o 0000ooooooooool03?ooool00ol0003oooooooooo`0?l4o`1: o`Co05co1?l0K_l3o`1oo`Co097o0ol0Xol4o`2eo`?o0?l4o`1: o`Co05co1?l0K_l3o`1oo`Co097o0ol0Xol4o`2eo`?o0_o0ol0oOl3o`3ol0?o0?oN00?o0?o_o 0ol0oOl3o`3ol0?o0?oN00?o0?o_o0ol0oOl3 o`3ol0?o0?oN1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooooo8ob40 o`Co3`3o1Ol00_l4o`0Do`Co02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`Co097o0ol0Xol4o`2e o`?o0_o 0ol0oOl3o`3ol0?o0?oN1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooo ooo9ob40o`Co3`3o1Ol00_l4o`0Do`Co02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`Co097o0ol0 Xol4o`2eo`?o0_o0ol0oOl3o`3ol0;o0?oN1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooooooo ool00oooooo9ob40o`Go3`3o1Ol00_l4o`0Do`Co02Ko0ol0>?l4o`1:o`Co05co0ol0K_l4o`1oo`?o 097o0ol0Xol4o`2eo`?o0?l4o`1:o`Co05co0ol0K_l4o`1oo`?o097o0ol0 Xol4o`2eo`?o0_o0ol0oOl3 o`3ol003o`3og_oooooooooo00?ooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo 00?ooooob_lQ0?l6o`l0o`Co00;o1?l05?l4o`0Vo`Co03So0ol0B_l4o`1Lo`?o06ko1?l0Ool3o`2A o`?o0:?o1?l0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`?o0?o`00?o0?oNooooooooool00oooool1o`00 007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooooo:ob40o`Ko3`3o1?l00_l4o`0Do`Co 02Ko1?l0>?l3o`1:o`Co05co0ol0K_l4o`1oo`Co097o0_l0Xol4o`2eo`?o0?l3 o`1:o`Co05co0ol0K_l4o`1oo`?o097o0ol0Xol4o`2eo`?o0_o0ol0oOl3o`3ol0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?o oooobolQ0?l6o`l0o`Go00;o1?l05?l3o`0Vo`Co03So0ol0B_l4o`1Lo`?o06ko1?l0Ool3o`2Ao`?o 0:?o1?l0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`?o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo 00?o0000ooooooooool00oooooo;ob40o`Ko3`3o1Ol00_l4o`0Do`?o02Ko1?l0>?l3o`1:o`Co05co 0ol0K_l4o`1oo`?o097o0ol0Xol4o`2eo`?o0_o0ol0 oOl3o`3ol0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooc?lQ0?l6 o`l0o`Go00;o0ol05?l4o`0Vo`?o03So1?l0B_l3o`1Lo`Co06ko0ol0Ool4o`2Ao`?o0:?o0ol0]Ol4 o`37o`;o0=Wo0ol0jol3o`3mo`?o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooo ooooool00oooooo?l4o`1:o`?o05co1?l0K_l3o`1o o`Co097o0ol0Xol3o`2eo`Co0_o0ol0oOl2o`3ol0Go oooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooc?lQ0?l7o`l0o`Go00;o 0ol05?l3o`0Vo`Co03So0ol0B_l4o`1Lo`?o06ko1?l0Ool3o`2Ao`?o0:?o1?l0]Ol3o`37o`?o0=Wo 0ol0jol3o`3mo`;o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooo ooo?l3o`1:o`Co05co0ol0K_l4o`1oo`?o097o0ol0 Xol4o`2eo`?o0_o0ol0oOl2o`3ol0Gooooo0Ol00001 ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooocOlQ0?l7o`l0o`Go00;o0_l05?l4o`0V o`?o03So1?l0B_l3o`1Lo`Co06ko0ol0Ool4o`2Ao`?o0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3m o`;o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo0_l00004ooooolgo8@3o1ol?0?l5o`02o`;o 01Co1?l09_l3o`0ho`Co04[o0ol0G?l4o`1^o`?o07oo1?l0TOl3o`2So`?o0;Go0ol0aol3o`3Io`?o 0>_o0ol0oOl2o`3ol0Cooooo0_l00002ooooo`002_ooool00ol0003oooooooooo`03ooooolgo8@3o 1ol?0?l5o`02o`;o01Co1?l09_l3o`0ho`Co04[o0ol0G?l4o`1^o`?o07oo1?l0TOl3o`2So`?o0;Go 0ol0aol3o`3Io`?o0>_o0ol0oOl2o`3ol0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oo oooooooo00?ooooocOlQ0?l7o`l0o`Go00;o0_l05?l4o`0Vo`?o03So1?l0B_l3o`1Lo`Co06ko0ol0 Ool4o`2Ao`?o0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`;o0?o`1Oooool1o`00007ooooo0Ooo ool000[ooooo00?o0000ooooooooool00oooooo=ob40o`Oo3`3o1Ol00_l2o`0Do`Co02Ko0ol0>?l4 o`1:o`?o05co1?l0K_l3o`1oo`Co097o0ol0Xol3o`2eo`?o0_o0ol0oOl2o`3ol0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?o oooocOlQ0?l8o`l0o`Co00;o0_l05?l4o`0Vo`?o03So1?l0B_l3o`1Lo`Co06ko0ol0Ool4o`2Ao`?o 0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`;o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo 00?o0000ooooooooool00oooooo>ob40o`Oo3`3o1Ol00_l2o`0Do`?o02Ko1?l0>?l4o`1:o`?o05co 1?l0K_l3o`1oo`?o097o1?l0Xol3o`2eo`?o0ob40o`Oo3`3o1Ol0 0_l2o`0Do`?o02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`?o097o1?l0Xol3o`2eo`?o0ob40o`Oo3`3o1Ol00_l2o`0Do`?o02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3 o`1oo`?o097o1?l0Xol3o`2eo`?o0ob40o`So3`3o1?l00_l2o`0D o`?o02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`?o097o1?l0Xol3o`2eo`?o0ob40o`So3`3o1?l00_l2o`0Do`?o02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`?o 097o1?l0Xol3o`2eo`?o0ob40o`So3`3o1?l00_l2o`0Do`?o02Ko 1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`?o097o1?l0Xol3o`2eo`?o0_o0ol0oOl00ol0oo3ooooooooo o`03ooooo`7o00000Oooool1ooooo`000_ooool01?l0003oooooooooool00004ooooo`03o`000?oo oooooooo00?ooooocOlQ0?l9o`l0o`Co00;o0_l05?l3o`0Vo`Co03So1?l0B_l3o`1Lo`Co06ko0ol0 Ool3o`2Ao`Co0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`03o`3ol?oooooooooo00?ooooo0Ol0 0001ooooo`7ooooo0003ooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool00oooooo< ob40o`Wo3`3o1Ol00_l2o`0Do`?o02Ko1?l0>?l4o`1:o`?o05co1?l0K_l3o`1oo`?o097o1?l0Xol3 o`2eo`?o0_o0ol0oOl00ol0 oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`0000?oooooo`000?ooool00_ooool00ol0003o ooooooooo`02ooooo`03o`000?oooooooooo00?ooooobOlQ0?l;o`l0o`Go00;o0ol05?l4o`0Vo`?o 03So1?l0B_l3o`1Lo`Co06ko0ol0Ool3o`2Ao`Co0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`03 o`3ol?oooooooooo00?ooooo0Ol00001ooooo`7ooooo0002ooooo`?o00001Oooool00ol0003ooooo ooooo`03ooooolSo8@3o2ol?0?l6o`02o`?o01Co1?l09_l3o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo 0ol0TOl3o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl00ol0oo3oooooooooo`03ooooo`7o0000 0Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooolOo8@3o3?l?0?l6o`02o`?o01Co1?l0 9_l3o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o0ol0 oOl00ol0oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03 ooooolGo8@3o3Ol?0?l7o`02o`?o01Co1?l09_l3o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3 o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl00ol0oo3oooooooooo`03ooooo`7o00000Oooool1 ooooo`002_ooool00ol0003oooooooooo`03oooool?o8@3o3ol?0?l6o`02o`Co01Co1?l09_l3o`0h o`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl00ol0 oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03oooool;o 8@3o3_l?0?l8o`02o`Co01Co1?l09_l3o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co 0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl00ol0oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`00 2_ooool00ol0003oooooooooo`03oooool3o8@3o3_l?0?l9o`02o`Co01Co1Ol09_l3o`0ho`Co04[o 0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl00ol0oo3ooooo ooooo`03ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03oooookgo8@3o3ol? 0?l:o`02o`Co01Co1_l09_l3o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co0;Go0ol0 aol3o`3Io`?o0>_o0ol0oOl00ol0oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool0 0ol0003oooooooooo`03oooookWo8@3o4?l?0?l_o0ol0oOl00ol0oo3oooooooooo`03 ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03oooookGo8@3o4_l?0?l=o`02 o`Co01Co1ol09_l4o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co0;Go0ol0aol3o`3I o`?o0>_o0ol0oOl00ol0oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool00ol0003o ooooooooo`03oooook;o8@3o4ol?0?l>o`02o`Co01Co2?l09_l4o`0ho`Co04[o0ol0G?l3o`1^o`Co 07oo0ol0TOl3o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl00ol0oo3oooooooooo`03ooooo`7o 00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooojoo8@3o4ol?0?l@o`02o`Co01Co 2?l09_l5o`0ho`Co04[o0ol0G?l3o`1^o`Co07oo0ol0TOl3o`2So`Co0;Go0ol0aol3o`3Io`?o0>_o 0ol0oOl00ol0oo3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool00ol0003ooooooooo o`03ooooojgo8@3o4_l?0?l@o`02o`Ko01Co2Ol09_l4o`0ho`Co04[o0ol0G?l4o`1^o`?o07oo0ol0 TOl4o`2So`?o0;Go0ol0aol3o`3Io`?o0>_o0ol0oOl2o`3ol0Gooooo0Ol00001ooooo`7ooooo000: ooooo`;o00001?oooonZob40oa;o3`3o3ol00_l9o`0Do`Wo02Ko1Ol0>?l4o`1:o`?o05co1?l0K_l3 o`1oo`?o097o1?l0Xol3o`2eo`?o0?l4o`1: o`?o05co1?l0K_l3o`1oo`?o097o1?l0Xol3o`2eo`?o0o`02o`ko 01Co2ol09_l5o`0ho`Co04[o0ol0G?l4o`1^o`?o07oo0ol0TOl4o`2So`?o0;Go0ol0aol3o`3Io`?o 0>_o0ol0oOl2o`3ol0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo Y?lQ0?l?o`l0o`go00;o3_l05?l=o`0Vo`Oo03So1?l0B_l3o`1Lo`Co06ko0ol0Ool3o`2Ao`Co0:?o 0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`;o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo00?o 0000ooooooooool00ooooonRob40o`oo3`3o3?l00_l=o`0Do`ko02Ko2Ol0>?l4o`1:o`Co05co1?l0 K_l3o`1oo`?o097o1?l0Xol3o`2eo`?o0_o0ol0oOl2 o`3ol0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooW_lQ0?l@o`l0 o`co00;o2ol05?l=o`0Vo`go03So1?l0B_l6o`1Lo`Co06ko0ol0Ool3o`2Ao`Co0:?o0ol0]Ol3o`37 o`?o0=Wo0ol0jol3o`3mo`;o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooooooo ool00ooooonMob40o`oo3`3o3?l00_l;o`0Do`go02Ko3_l0>?l4o`1:o`Ko05co1?l0K_l4o`1oo`?o 097o1?l0Xol3o`2eo`?o0_o0ol0oOl3o`3ol0Gooooo 0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooVOlQ0?l@o`l0o`[o00;o2ol0 5?l=o`0Vo`oo03So1_l0B_l8o`1Lo`Co06ko1?l0Ool3o`2Ao`?o0:?o0ol0]Ol3o`37o`?o0=Wo0ol0 jol3o`3mo`?o0?o`1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooonG ob40oa3o3`3o2_l00_l;o`0Do`go02Ko3Ol0>?l9o`1:o`So05co1?l0K_l4o`1oo`?o097o1?l0Xol3 o`2eo`?o0_o0ol0oOl3o`3ol0Gooooo0Ol00001oooo o`7ooooo000:ooooo`03o`000?oooooooooo00?oooooU?lQ0?l?o`l0o`Wo00;o3?l05?l=o`0Vo`_o 03So3Ol0B_l8o`1Lo`Ko06ko1?l0Ool3o`2Ao`Co0:?o0ol0]Ol3o`37o`?o0=Wo0ol0jol3o`3mo`?o 0?o`1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooonBob40o`ko3`3o 2_l00_l;o`0Do`go02Ko2ol0>?l=o`1:o`Wo05co2?l0K_l4o`1oo`?o097o0ol0Xol3o`2eo`Co0ob40o`_o3`3o2ol00_l;o`0D o`_o02Ko3Ol0>?l;o`1:o`_o05co3?l0K_l5o`1oo`?o097o1?l0Xol3o`2eo`?o0_o0ol0oOl3o`3ol0;o0?oN1Oooool1o`00007o oooo0Oooool000[ooooo00?o0000ooooooooool00ooooon:ob40o`go3`3o2Ol00_l;o`0Do`_o02Ko 3Ol0>?l;o`1:o`_o05co3Ol0K_l6o`1oo`?o097o1Ol0Xol4o`2eo`?o0_o0ol0oOl3o`3ol0?o0?oN1Oooool1 o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooon5ob40o`ko3`3o2?l00_l;o`0D o`_o02Ko2ol0>?l;o`1:o`_o05co2ol0K_l_oo`3mool0oOl3o`3ol0Ko0?oN1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000 ooooooooool00ooooomnob40o`[o3`3o2_l00_l:o`0Do`[o02Ko2ol0>?l9o`1:o`_o05co2ol0K_l9 o`1oo`[o097o2_l0Xol:o`2eo`?o0?l:o`1:o`[o05co2ol0K_l9o`1oo`[o097o2_l0Xol;o`2eo`?o0?l9o`1:o`[o05co2_l0K_l;o`1oo`Wo097o2Ol0Xol=o`2eo`?o 0_o0_l0oOl3o`3ol0Ko0?oN1Oooool1o`00007ooooo 0Oooool000[ooooo00?o0000ooooooooool00ooooomjob40o`Wo3`3o2_l00_l:o`0Do`Wo02Ko2_l0 >?l:o`1:o`[o05co2Ol0K_l;o`1oo`Wo097o2Ol0Xol?o`2eo`?o0_o0ol0oOl3o`3ol0Co0?oN00?o0?o?l9o`1:o`Wo 05co2Ol0K_l:o`1oo`Wo097o2ol0Xol:o`2eo`[o0_o0ol0 oOl3o`3ol0?o0?oN0_l0ol`5ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03 ooooog?o8@3o2Ol?0?l9o`02o`So01Co2Ol09_l:o`0ho`Wo04[o2Ol0G?l:o`1^o`Wo07oo2Ol0TOl9 o`2So`[o0;Go2Ol0aol:o`3Io`Oo0>_o1Ol0oOl3o`3ol0?o0?oN0_l0ol`5ooooo`7o00000Oooool1 ooooo`002_ooool00ol0003oooooooooo`03ooooog;o8@3o2Ol?0?l8o`02o`Wo01Co2Ol09_l:o`0h o`Wo04[o2Ol0G?l9o`1^o`[o07oo2?l0TOl9o`2So`[o0;Go2Ol0aol9o`3Io`So0>_o1ol0oOl3o`3o l0?o0?oN0_l0ol`5ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooog7o 8@3o2Ol?0?l8o`02o`Wo01Co2Ol09_l9o`0ho`[o04[o2?l0G?l:o`1^o`Wo07oo2?l0TOl:o`2So`Wo 0;Go2Ol0aol9o`3Io`Wo0>_o1ol0oOl3o`3ol0?o0?oN0ol0ol`5ooooo`7o00000Oooool1ooooo`00 2_ooool00ol0003oooooooooo`03ooooog3o8@3o2?l?0?l9o`02o`Wo01Co2Ol09_l9o`0ho`[o04[o 2?l0G?l9o`1^o`Wo07oo2Ol0TOl9o`2So`Wo0;Go2Ol0aol9o`3Io`Wo0>_o2Ol0oOl2o`3ol0?o0?oN 1?l0ol`5ooooo`7o00000Oooool1ooooo`000oooool3o`0000Cooooo00?o0000ooooooooool00ooo oom_ob40o`So3`3o2Ol00_l9o`0Do`Wo02Ko2Ol0>?l9o`1:o`Wo05co2?l0K_l:o`1oo`So097o2Ol0 Xol9o`2eo`Wo0_o2ol0oOl2o`3ol0?o0?oN1?l0ol`00ol0ok[oooooooooo`03 ooooo`7o00000Oooool1ooooo`0000?oooooo`000?l000000ol00004ooooo`03o`000?oooooooooo 00?oooooKOlQ0?l8o`l0o`Wo00;o2Ol05?l9o`0Vo`So03So2Ol0B_l9o`1Lo`So06ko2_l0Ool7o`2A o`[o0:?o2Ol0]Ol9o`37o`Wo0=Wo2Ol0jol;o`3mo`Co0?o`0_l0omh4o`3oc0;o0?nj1Oooool1o`00 007ooooo0Oooool00005ooooool0003oooooooooool000001Oooool3o`0000?oooooK?lQ0?l8o`l0 o`Wo00;o2Ol05?l8o`0Vo`Wo03So2Ol0B_l8o`1Lo`Wo06ko2Ol0Ool8o`2Ao`Wo0:?o2Ol0]Ol9o`37 o`Wo0=Wo2Ol0jol:o`3mo`Ko0?o`0ol0omh4o`3oc0;o0?nj0oooool3o`0000;ooooo0002ooooo`03 o`000?oooooo000000Gooooo00?o0000ooooooooool00ooooom[ob40o`So3`3o2Ol00_l9o`0Do`So 02Ko2?l0>?l:o`1:o`So05co2?l0K_l9o`1oo`So097o2_l0Xol8o`2eo`Wo0?l9o`1:o`Wo05co 1ol0K_l:o`1oo`Oo097o2_l0Xol8o`2eo`Wo0?l9o`1:o`Oo05co2?l0K_l9o`1oo`Wo097o2?l0Xol8o`2eo`Wo0_o2Ol0oOl8o`3o l0Wo0?oN1?l0ol`4o`3o^P;o0?nX1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooooooo ool00ooooomWob40o`So3`3o2Ol00_l8o`0Do`So02Ko2?l0>?l8o`1:o`So05co2?l0K_l9o`1oo`So 097o2?l0Xol8o`2eo`Wo0_o2Ol0oOl7o`3ol0So0?oN2?l0 ol`4o`3o^PGo0?nX1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooomU ob40o`So3`3o2?l00_l8o`0Do`So02Ko1ol0>?l8o`1:o`Wo05co1ol0K_l9o`1oo`So097o2?l0Xol8 o`2eo`So0_o2Ol0oOl8o`3ol0Oo0?oN2Ol0ol`6o`3o^POo 0?nX00?o0?nGooooooooool00oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool0 0ooooomRob40o`So3`3o2?l00_l8o`0Do`Oo02Ko2?l0>?l8o`1:o`So05co1ol0K_l8o`1oo`Wo097o 1ol0Xol8o`2eo`So0?l8o`1:o`Oo05co2?l0K_l8o`1oo`So097o2?l0Xol7o`2eo`Wo0_o2Ol0oOl7o`3ol0So0?oN1ol0ol`9 o`3o^POo0?nX1Ol0oiL4ooooo`;o00000_ooool000[ooooo00?o0000ooooooooool00ooooomOob40 o`So3`3o2?l00_l7o`0Do`So02Ko2?l0>?l8o`1:o`Oo05co2?l0K_l7o`1oo`So097o2?l0Xol8o`2e o`Oo0?l8o`1:o`Oo05co2?l0K_l7o`1oo`So097o2?l0Xol7o`2eo`So0?l8o`1:o`Oo05co2?l0K_l7o`1oo`So097o2?l0Xol7o`2eo`So0_o1ol0oOl7o`3ol0So0?oN2?l0 ol`7o`3o^PSo0?nX1ol0oiL5o`3oQ@Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooo oooo00?oooooGOlQ0?l8o`l0o`Oo00;o1ol05?l8o`0Vo`So03So1ol0B_l7o`1Lo`Oo06ko2?l0Ool8 o`2Ao`Oo0:?o2?l0]Ol7o`37o`Oo0=Wo2?l0jol8o`3mo`Ko0?o`2?l0omh9o`3oc0Oo0?nj1ol0ojP8 o`3oU`Ko0?n51Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooomLob40 o`So3`3o1ol00_l8o`0Do`Oo02Ko2?l0>?l7o`1:o`Oo05co1ol0K_l8o`1oo`So097o1ol0Xol7o`2e o`So0_o2?l0oOl6o`3ol0So0?oN2?l0ol`7o`3o^PSo0?nX1ol0oiL9o`3oQ@03o`3oLooooooooooo00?o oooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooFolQ0?l8o`l0o`Oo00;o 1ol05?l7o`0Vo`So03So1ol0B_l7o`1Lo`Oo06ko2?l0Ool7o`2Ao`Oo0:?o2?l0]Ol7o`37o`Oo0=Wo 1ol0jol8o`3mo`Ko0?o`2?l0omh8o`3oc0Oo0?nj2?l0ojP7o`3oU`Wo0?n50ol0og<5ooooo`7o0000 0Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooo`03o`l0oolQ0?oo8@3o05Oo8@3o2?l? 0?l7o`02o`So01Co1_l09_l8o`0ho`Oo04[o1ol0G?l7o`1^o`So07oo1ol0TOl7o`2So`So0;Go1ol0 aol7o`3Io`Oo0>_o1ol0oOl7o`3ol0So0?oN1ol0ol`8o`3o^POo0?nX1ol0oiL8o`3oQ@Ko0?mc1Ooo ool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool2o`l0oeSo8@3o2?l?0?l6 o`02o`So01Co1_l09_l8o`0ho`Oo04[o1ol0G?l7o`1^o`So07oo1_l0TOl7o`2So`Wo0;Go1_l0aol7 o`3Io`Oo0>_o2?l0oOl6o`3ol0So0?oN2?l0ol`7o`3o^POo0?nX1ol0oiL8o`3oQ@Oo0?mc00?o0?mQ ooooooooool00oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool3o`l0 oeKo8@3o2Ol?0?l5o`02o`So01Co1_l09_l8o`0ho`Oo04[o1ol0G?l7o`1^o`Oo07oo1ol0TOl7o`2S o`So0;Go1ol0aol7o`3Io`Oo0>_o1ol0oOl7o`3ol0Oo0?oN2?l0ol`7o`3o^POo0?nX1ol0oiL8o`3o Q@Ko0?mc1?l0of45ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooo`Go 3`3oDolQ0?l9o`l0o`Go00;o1ol05?l7o`0Vo`So03So1ol0B_l7o`1Lo`Oo06ko1ol0Ool7o`2Ao`Oo 0:?o1ol0]Ol7o`37o`So0=Wo1_l0jol7o`3mo`So0?o`1_l0omh8o`3oc0Oo0?nj1ol0ojP7o`3oU`Oo 0?n51ol0og<6o`3oH@Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo 1_l?0?mBob40o`Wo3`3o1Ol00_l7o`0Do`Oo02Ko2?l0>?l7o`1:o`Oo05co1ol0K_l7o`1oo`Ko097o 2?l0Xol6o`2eo`Oo0_o1ol0oOl8o`3ol0Ko0?oN2?l0ol`6o`3o^POo0?nX1ol0 oiL7o`3oQ@Oo0?mc2?l0of400ol0odooooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool2 o`0000Cooooo2Ol?0?m>ob40o`So3`3o1Ol00_l7o`0Do`Oo02Ko2?l0>?l7o`1:o`Oo05co1ol0K_l7 o`1oo`Ko097o1ol0Xol7o`2eo`Oo0?l6 o`1:o`Oo05co1ol0K_l7o`1oo`Ko097o1ol0Xol6o`2eo`Oo0_o1ol0oOl7o`3ol0Ko0?oN1ol0ol`6o`3o^POo0?nX1ol0oiL6o`3o Q@So0?mc1_l0of47o`3oC`Ko0?lm00?o0?l[ooooooooool00oooool1o`00007ooooo0Oooool000[o oooo00?o0000ooooooooool00oooool2o`0Do`Ko00;o2?l?0?m2ob40o`Oo3`3o1ol00_l6o`0Do`Oo 02Ko1ol0>?l6o`1:o`Oo05co1ol0K_l6o`1oo`Oo097o1ol0Xol6o`2eo`Oo0?l6o`1:o`Oo05co1ol0K_l6o`1oo`Oo097o 1ol0Xol6o`2eo`Oo0?l6o`1:o`Oo05co1ol0K_l6o`1oo`Oo097o1_l0Xol7o`2eo`Ko0?l7o`1:o`Ko05co1ol0K_l6o`1oo`Oo097o1_l0Xol7 o`2eo`Ko0_o1_l0oOl7o`3ol0Ko0?oN1ol0ol`6o`3o^POo0?nX1_l0oiL7o`3oQ@Ko0?mc1ol0of46o`3o C`Ko0?lm1ol0ob/2o`3o6@Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?o oooo0ol09_l5o`0Do`Oo00;o2Ol?0?lhob40o`Oo3`3o1_l00_l7o`0Do`Ko02Ko1_l0>?l7o`1:o`Oo 05co1_l0K_l6o`1oo`Oo097o1_l0Xol7o`2eo`Ko0_o1ol0 oOl7o`3ol0Ko0?oN1_l0ol`6o`3o^PKo0?nX1ol0oiL6o`3oQ@Oo0?mc1_l0of46o`3oC`Ko0?lm1ol0 ob/6o`3o6@03o`3o1ooooooooooo00?ooooo0Ol00001ooooo`7ooooo000:ooooo`;o00001?ooool7 o`0Vo`Co01Co2Ol00_l9o`l0oc7o8@3o2?l?0?l5o`02o`Oo01Co1_l09_l6o`0ho`Oo04[o1_l0G?l7 o`1^o`Ko07oo1_l0TOl6o`2So`Oo0;Go1_l0aol6o`3Io`Ko0>_o1ol0oOl6o`3ol0Ko0?oN1ol0ol`5 o`3o^POo0?nX1ol0oiL6o`3oQ@Ko0?mc1_l0of47o`3oC`Ko0?lm1_l0ob/7o`3o6@;o0?l71?ooool2 o`0000;ooooo000:ooooo`03o`000?oooooooooo00?ooooo00?o03Soo`0Vool09_l01Ol09_l5o`0D o`So00;o2Ol?0?l`ob40o`So3`3o1?l00_l7o`0Do`Ko02Ko1ol0>?l6o`1:o`Oo05co1_l0K_l6o`1o o`Ko097o1_l0Xol6o`2eo`Oo0?l7o`0Vo`Ko01Co1ol00_l:o`l0obko 8@3o2?l?0?l4o`02o`Oo01Co1_l09_l6o`0ho`Ko04[o1ol0G?l6o`1^o`Ko07oo1_l0TOl6o`2So`Ko 0;Go1ol0aol6o`3Io`Ko0>_o1ol0oOl5o`3ol0Oo0?oN1_l0ol`6o`3o^PKo0?nX1_l0oiL7o`3oQ@Ko 0?mc1_l0of46o`3oC`Ko0?lm1ol0ob/6o`3o6@Ko0?l71Oooool1o`00007ooooo0Oooool000[ooooo 00?o0000ooooooooool00oooool3o`0ho`Oo02Ko1_l05?l7o`02o`[o3`3o;?lQ0?l8o`l0o`Co00;o 1ol05?l6o`0Vo`Ko03So1_l0B_l6o`1Lo`Oo06ko1_l0Ool6o`2Ao`Ko0:?o1_l0]Ol7o`37o`Ko0=Wo 1_l0jol7o`3mo`Go0?o`1ol0omh6o`3oc0Ko0?nj1_l0ojP6o`3oU`Oo0?n51_l0og<6o`3oH@Ko0?m? 1_l0ocd6o`3o:`Oo0?lI1_l0o`L00ol:o`3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_oo ool00ol0003oooooooooo`03ooooo`Go03So1_l09_l7o`0Do`Oo00;o2_l?0?lYob40o`Wo3`3o0ol0 0_l7o`0Do`Ko02Ko1_l0>?l6o`1:o`Ko05co1ol0K_l6o`1oo`Ko097o1_l0Xol6o`2eo`Oo0?l7o`1:o`Go05co1ol0K_l6o`1oo`Ko097o1_l0Xol5o`2eo`Oo0?l8o`0Vo`Oo01Co2Ol00_lAo`l0oa7o8@3o2_l?0?l5 o`02o`Ko01Co1_l09_l5o`0ho`Oo04[o1Ol0G?l7o`1^o`Ko07oo1_l0TOl6o`2So`Ko0;Go1_l0aol6 o`3Io`Go0>_o1ol0oOl5o`3ol0Ko0?oN1_l0ol`5o`3o^POo0?nX1_l0oiL6o`3oQ@Ko0?mc1_l0of46 o`3oC`Go0?lm1ol0ob/6o`3o6@Go0?l71_l:o`06oaco00Gooooo0Ol00001ooooo`7ooooo000:oooo o`03o`000?oooooooooo00?ooooo0_l0G?l7o`1:o`Go03So2?l09_l7o`0Do`_o00;o4Ol?0?l>ob40 o`Wo3`3o1_l00_l5o`0Do`Oo02Ko1Ol0>?l7o`1:o`Go05co1_l0K_l6o`1oo`Ko097o1_l0Xol6o`2e o`Ko0?l8o`0Vo`Oo01Co2ol00_lAo`l0o`_o8@3o2_l?0?l6o`02o`Go01Co1_l09_l5o`0ho`Oo 04[o1Ol0G?l7o`1^o`Ko07oo1Ol0TOl6o`2So`Ko0;Go1_l0aol6o`3Io`Go0>_o1ol0oOl5o`3ol0Ko 0?oN1_l0ol`5o`3o^PKo0?nX1_l0oiL6o`3oQ@Ko0?mc1ol0of45o`3oC`Ko0?lm1_l0ob/6o`3o6@Go 0?l71_l:o`06oaco00?o;_l01Oooool1o`00007ooooo0Oooool00003ooooool0003ooooo00;ooooo 00?o0000ooooooooool00_ooool00ol0003oooooooooo`03ooooo`Go05co1_l0B_l7o`0ho`So02Ko 1ol05?l;o`02oa3o3`3o2OlQ0?l:o`l0o`Ko00;o1Ol05?l6o`0Vo`Ko03So1_l0B_l6o`1Lo`Ko06ko 1_l0Ool5o`2Ao`Ko0:?o1_l0]Ol6o`37o`Ko0=Wo1Ol0jol7o`3mo`Go0?o`1_l0omh6o`3oc0Go0?nj 1_l0ojP6o`3oU`Ko0?n51_l0og<6o`3oH@Go0?m?1_l0ocd6o`3o:`Oo0?lI1?l0o`L7o`[o00Ko7?l0 1?l^o`05ooooo`7o00000Oooool1ooooo`0000?oooooo`000?ooool00_ooool00ol0003ooooooooo o`02ooooo`?o00000oooool6o`1Lo`Ko04[o1ol0>?l8o`0Vo`Wo01Co2ol00_l?o`l0o`Ko8@3o2_l? 0?l7o`02o`Go01Co1_l09_l5o`0ho`Ko04[o1_l0G?l6o`1^o`Ko07oo1Ol0TOl6o`2So`Ko0;Go1_l0 aol6o`3Io`Go0>_o1ol0oOl5o`3ol0Ko0?oN1_l0ol`5o`3o^PKo0?nX1_l0oiL6o`3oQ@Ko0?mc1Ol0 of46o`3oC`Ko0?lm1_l0ob/6o`3o6@Go0?l71_l:o`06oaco00Ko;_l00oooool3o`0000;ooooo0000 0ooooooo0000o`000002o`0000Gooooo00?o0000ooooooooool00oooool2o`1^o`Ko05co1_l0B_l8 o`0ho`Oo02Ko2_l05?l;o`02o`oo3`3o0_lQ0?l:o`l0o`Oo00;o1Ol05?l6o`0Vo`Go03So1_l0B_l6 o`1Lo`Ko06ko1_l0Ool5o`2Ao`Ko0:?o1_l0]Ol6o`37o`Ko0=Wo1Ol0jol6o`3mo`Ko0?o`1_l0omh6 o`3oc0Go0?nj1_l0ojP6o`3oU`Ko0?n51_l0og<5o`3oH@Ko0?m?1Ol0ocd7o`3o:`Go0?lI1_l0o`L5 o`[o00Ko7?l01_l^o`02ocoo00Gooooo0Ol00001ooooo`7ooooo00000ooooooo0000ooooo`07oooo o`03o`000?oooooooooo00?ooooo0ol0K_l7o`1Lo`Ko04[o2?l0>?l7o`0Vo`_o01Co2_l00_lHo`l0 o`So00;o1Ol05?l6o`0Vo`Go03So1_l0B_l6o`1Lo`Ko06ko1_l0Ool5o`2Ao`Ko0:?o1_l0]Ol6o`37 o`Ko0=Wo1Ol0jol6o`3mo`Ko0?o`1Ol0omh6o`3oc0Go0?nj1_l0ojP5o`3oU`Oo0?n51_l0og<5o`3o H@Ko0?m?1Ol0ocd7o`3o:`Go0?lI1_l0o`L5o`[o00Ko7?l01_l^o`03ocoo00Gooooo0Ol00001oooo o`7ooooo0002ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool00oooool4o`1^o`Oo 05co1_l0B_l9o`0ho`Oo02Ko2ol05?l9o`02oaCo3`3o2_l00_l5o`0Do`Ko02Ko1Ol0>?l6o`1:o`Ko 05co1_l0K_l6o`1oo`Go097o1_l0Xol6o`2eo`Ko0?l7o`0Vo`_o01Co2Ol00_l?o`l0o`co00;o 1_l05?l6o`0Vo`Go03So1_l0B_l6o`1Lo`Go06ko1_l0Ool5o`2Ao`Ko0:?o1_l0]Ol6o`37o`Ko0=Wo 1Ol0jol6o`3mo`Ko0?o`1Ol0omh6o`3oc0Go0?nj1_l0ojP5o`3oU`Oo0?n51Ol0og<6o`3oH@Go0?m? 1_l0ocd6o`3o:`Go0?lI1_l0o`L5o`[o00Ko7?l01_l^o`06ocoo00Gooooo0Ol00001ooooo`7ooooo 000:ooooo`03o`000?oooooooooo00?ooooo0_l0Ool5o`1^o`Oo05co1ol0B_l8o`0ho`Wo02Ko2_l0 5?l>o`02o`Go3`3o3ol00_l5o`0Do`Ko02Ko1_l0>?l5o`1:o`Ko05co1_l0K_l5o`1oo`Ko097o1_l0 Xol5o`2eo`Ko0_o1_l0 oOl5o`3ol0Go0?oN1_l0ol`5o`3o^PKo0?nX1Ol0oiL6o`3oQ@Go0?mc1_l0of45o`3oC`Ko0?lm1Ol0 ob/6o`3o6@Go0?l71Ol:o`06oaco00Go;_l01_loo`05oe7o00CoHol01Oooool1o`00007ooooo0Ooo ool000[ooooo00?o0000ooooooooool00oooool4o`2Ao`Ko07oo1ol0K_l7o`1Lo`Wo04[o2ol0>?l; o`0Voago01Co1_l09_l6o`0ho`Go04[o1Ol0G?l6o`1^o`Go07oo1_l0TOl5o`2So`Ko0;Go1Ol0aol6 o`3Io`Go0>_o1_l0oOl5o`3ol0Go0?oN1_l0ol`5o`3o^PKo0?nX1Ol0oiL6o`3oQ@Go0?mc1_l0of45 o`3oC`Ko0?lm1Ol0ob/6o`3o6@Go0?l71Ol:o`06oaco00Go;_l01_loo`05oe7o00GoHol01Oooool1 o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool6o`2Ao`Go07oo2?l0K_l7o`1L o`Wo04[o2ol0>?l>o`0VoaKo01Co1ol09_l6o`0ho`Go04[o1Ol0G?l6o`1^o`Go07oo1_l0TOl5o`2S o`Ko0;Go1Ol0aol6o`3Io`Go0>_o1_l0oOl5o`3ol0Go0?oN1_l0ol`5o`3o^PKo0?nX1Ol0oiL6o`3o Q@Go0?mc1_l0of45o`3oC`Ko0?lm1Ol0ob/5o`3o6@Ko0?l71Ol:o`05oaco00Ko;_l01Oloo`05oe7o 00KoHol000?oMOl0ooooooooool00oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooooooo ool00oooool7o`2Ao`Ko07oo2?l0K_l7o`1Lo`[o04[o2ol0>?l@o`0Voa3o01Co2?l09_l6o`0ho`Go 04[o1Ol0G?l6o`1^o`Go07oo1_l0TOl5o`2So`Ko0;Go1Ol0aol5o`3Io`Ko0>_o1Ol0oOl6o`3ol0Go 0?oN1_l0ol`5o`3o^PKo0?nX1Ol0oiL5o`3oQ@Go0?mc1_l0of45o`3oC`Ko0?lm1Ol0ob/5o`3o6@Ko 0?l71Ol:o`05oaco00Ko;_l01Oloo`05oe7o00KoHol00_meo`05ooooo`7o00000Oooool1ooooo`00 2_ooool00ol0003oooooooooo`03ooooo`;o0:?o1ol0TOl6o`1oo`Oo06ko2Ol0G?l:o`1:o`_o03So 4Ol09_l;o`0Do`So02Ko1_l0>?l5o`1:o`Go05co1_l0K_l5o`1oo`Ko097o1Ol0Xol6o`2eo`Go0?l6o`1:o`Go05co1_l0K_l5o`1oo`Ko097o1?l0 Xol7o`2eo`Co0?lAo`0Vo`;o01Co1ol09_l8o`0ho`Ko04[o1?l0G?l6 o`1^o`Go07oo1_l0TOl5o`2So`Ko0;Go1Ol0aol5o`3Io`Ko0>_o1Ol0oOl5o`3ol0Ko0?oN1Ol0ol`6 o`3o^PGo0?nX1Ol0oiL5o`3oQ@Go0?mc1_l0of45o`3oC`Ko0?lm1Ol0ob/5o`3o6@Ko0?l71Ol:o`04 oaco00Oo;_l01?loo`05oe7o00KoHol01Omeo`000on7o`3oooooooooo`03ooooo`7o00000Oooool1 ooooo`002_ooool00ol0003oooooooooo`03ooooo`;o0;Go1Ol0Xol6o`2Ao`Oo07oo2Ol0K_l9o`1L o`go04[o3Ol0>?lBo`0Vo`[o03So1_l0B_l5o`1Lo`Ko06ko1Ol0Ool5o`2Ao`Go0:?o1_l0]Ol5o`37 o`Ko0=Wo1Ol0jol5o`3mo`Ko0?o`1Ol0omh5o`3oc0Ko0?nj1Ol0ojP5o`3oU`Go0?n51Ol0og<6o`3o H@Go0?m?1_l0ocd4o`3o:`Go0?lI1_l0o`L5o`[o00Go7?l01_l^o`05ocoo00GoDOl01OmSo`06ogGo 00;oQol01Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool3o`2eo`Ko 0:?o1_l0TOl7o`1oo`Wo06ko2_l0G?l=o`1:oa3o03So2_l09_l;o`0ho`Ko04[o1Ol0G?l6o`1^o`Go 07oo1_l0TOl5o`2So`Go0;Go1Ol0aol6o`3Io`Go0>_o1Ol0oOl6o`3ol0Go0?oN1Ol0ol`6o`3o^PGo 0?nX1Ol0oiL5o`3oQ@Go0?mc1Ol0of46o`3oC`Go0?lm1Ol0ob/5o`3o6@Ko0?l71Ol:o`05oaco00Ko ;_l01Oloo`05oe7o00GoHol01Omeo`04ohOo00Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`00 0?oooooooooo00?ooooo1Ol0]Ol6o`2So`Oo097o1_l0Ool9o`1^o`_o05co3_l0B_lAo`0ho`?o02Ko 3Ol0>?l6o`1:o`Co05co1_l0K_l5o`1oo`Ko097o1Ol0Xol5o`2eo`Ko0?l6o`1:o`Go05co1_l0K_l5o`1oo`Go097o1Ol0Xol6o`2eo`Go0_o1Ol0oOl5o`3ol0Go0?oN1Ol0ol`6 o`3o^PGo0?nX1Ol0oiL5o`3oQ@Go0?mc1Ol0of46o`3oC`Go0?lm1Ol0ob/5o`3o6@Ko0?l71?l:o`05 oaco00Ko;_l01Oloo`05oe7o00GoHol01Omeo`05ohOo00?oVOl01Oooool1o`00007ooooo0Oooool0 00[ooooo00?o0000ooooooooool00oooool3o`37o`Ko0;Go1ol0Xol8o`2Ao`So07oo2_l0K_l?l6o`1:o`Go05co1_l0K_l5o`1oo`Go097o1Ol0Xol5o`2eo`Go0_o1Ol0 oOl5o`3ol0Go0?oN1Ol0ol`5o`3o^PKo0?nX1Ol0oiL5o`3oQ@Go0?mc1Ol0of45o`3oC`Go0?lm1Ol0 ob/5o`3o6@Go0?l71_l:o`04oaco00Ko;_l01?loo`05oe7o00GoHol01Omeo`06ohOo00GoVOl00_n[ o`05ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooo`Co0=Wo1_l0aol7 o`2eo`Oo0:?o2Ol0TOl;o`1oo`[o06ko6_l0G?l;o`1:o`Ko05co1_l0K_l6o`1oo`Go097o1Ol0Xol5 o`2eo`Go0_o1Ol0oOl5o`3ol0Go0?oN1Ol0ol`5o`3o^PGo0?nX1Ol0oiL4o`3oQ@Go0?mc1Ol0of45 o`3oC`Go0?lm1Ol0ob/5o`3o6@Go0?l71Ol:o`04oaco00Go;_l01Oloo`05oe7o00GoHol01_meo`04 ohOo00KoVOl01?n[o`05okgo00Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo 00?ooooo0_l0oOl7o`3[o`Ko0=Wo1ol0aol8o`2eo`[o0:?o2ol0TOlFo`1ooa_o06ko1Ol0Ool6o`2A o`Co0:?o1_l0]Ol4o`37o`Go0=Wo1Ol0jol5o`3mo`Go0?o`1Ol0omh5o`3oc0Go0?nj1Ol0ojP5o`3o U`Co0?n51Ol0og<5o`3oH@Go0?m?1Ol0ocd5o`3o:`Go0?lI1Ol0o`L5o`[o00Co7?l01Ol^o`05ocoo 00GoDOl01OmSo`06ogGo00CoQol01_nIo`04oj_o00Go_Ol000?ocol0ooooooooool00oooool1o`00 007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool4o`3mo`Ko0>_o1ol0fOl7o`37o`Wo 0;Go2_l0Xol;o`2Aoako07oo2_l0K_l;o`1oo`Go097o1Ol0Xol5o`2eo`Go0_o2Ol0fOl8o`37o`So0;Go3Ol0Xol>o`2AobGo07oo1Ol0 TOl7o`2So`Go0;Go1Ol0aol4o`3Io`Go0>_o1Ol0oOl5o`3ol0Go0?oN1Ol0ol`5o`3o^PGo0?nX1Ol0 oiL4o`3oQ@Go0?mc1Ol0of45o`3oC`Go0?lm1Ol0ob/5o`3o6@Go0?l71?l:o`05oaco00Go;_l01?lo o`05oe7o00GoHol01?meo`06ohOo00CoVOl01_n[o`04okgo00Gocol01Oooool1o`00007ooooo0Ooo ool000[ooooo00?o0000ooooooooool00oooool4o`3ol0Go0?go1_l0jol9o`3Io`Wo0_o1Ol0oOl5o`3ol0Co0?oN 1Ol0ol`5o`3o^PGo0?nX1Ol0oiL4o`3oQ@Go0?mc1Ol0of45o`3oC`Co0?lm1Ol0ob/5o`3o6@Go0?l7 1?l:o`05oaco00Co;_l01Oloo`05oe7o00CoHol01Omeo`05ohOo00GoVOl01On[o`05okgo00Gocol0 0ooQo`000ooco`3oooooooooo`03ooooo`7o00000Oooool1ooooo`002_ooool00ol0003ooooooooo o`03ooooo`Co0?oN1ol0oo07o`3mo`Ko0>_o2Ol0fOl;o`37o`oo0;Go6Ol0XolAo`2Ao`So0:?o1Ol0 ]Ol7o`37o`Co0=Wo1Ol0jol5o`3mo`Go0?o`1Ol0omh4o`3oc0Go0?nj1Ol0ojP5o`3oU`Co0?n51Ol0 og<5o`3oH@Go0?m?1?l0ocd5o`3o:`Go0?lI1Ol0o`L4o`[o00Go7?l01?l^o`05ocoo00GoDOl01?mS o`05ogGo00GoQol01OnIo`05oj_o00Go_Ol01?o?o`04on7o00;olol01Oooool1o`00007ooooo0Ooo ool000[ooooo00?o0000ooooooooool00oooool7o`3ogPKo0?o`1ol0oOl7o`3[o`Wo0=Wo2ol0aolA o`2eoaoo0:?o1Ol0TOl6o`2So`So0;Go1_l0aol4o`3Io`Ko0>_o1?l0oOl5o`3ol0Go0?oN1?l0ol`6 o`3o^PCo0?nX1Ol0oiL4o`3oQ@Go0?mc1Ol0of45o`3oC`Co0?lm1Ol0ob/5o`3o6@Go0?l71?l:o`05 oaco00Co;_l01Oloo`05oe7o00CoHol01Omeo`04ohOo00KoVOl01?n[o`05okgo00Gocol01?oQo`03 oo?o00Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo0_l0ol`7o`3o gPKo0?o`1ol0oOl8o`3[o`[o0=Wo2ol0aolFo`2eoako0:?o2_l0]Ol6o`37o`Go0=Wo1Ol0jol5o`3m o`Co0?o`1Ol0omh5o`3oc0Go0?nj1Ol0ojP4o`3oU`Go0?n51?l0og<5o`3oH@Go0?m?1?l0ocd5o`3o :`Go0?lI1Ol0o`L4o`[o00Go7?l01?l^o`05ocoo00GoDOl01?mSo`05ogGo00CoQol01OnIo`05oj_o 00Go_Ol01Oo?o`04on7o00Colol01Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooooooo ool00oooool4o`3oc0Oo0?oN1_l0oo07o`3mo`Wo0>_o2_l0fOl;o`37oako0;Go4?l0Xol_o2ol0fOlEo`37oako0;Go2_l0aol7o`3Io`Go0>_o1?l0oOl5 o`3ol0Go0?oN1?l0ol`5o`3o^PCo0?nX1Ol0oiL5o`3oQ@Co0?mc1Ol0of45o`3oC`Co0?lm1Ol0ob/5 o`3o6@Co0?l71Ol:o`05oaco00Co;_l01Oloo`04oe7o00GoHol01?meo`05ohOo00CoVOl01?n[o`05 okgo00Gocol01OoQo`04oo?o00CoooX01Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooo ooooool00oooool6o`3o^PGo0?o<2?l0omh8o`3ol0Wo0?go2ol0jol_o1?l0oOl6o`3ol0Go0?oN 1?l0ol`5o`3o^PCo0?nX1Ol0oiL4o`3oQ@Go0?mc1?l0of46o`3oC`Co0?lm1Ol0ob/4o`3o6@Co0?l7 1Ol:o`05oaco00Co;_l01Oloo`04oe7o00GoHol01?meo`04ohOo00GoVOl01?n[o`05okgo00Gocol0 1?oQo`05oo?o00CoooX00oooj005ooooo`7o00000Oooool1ooooo`002_ooool00ol0003ooooooooo o`03ooooo`Ko0?nX1Ol0okX8o`3oc0So0?oN2Ol0oo0;o`3mo`co0>_o>?l0fOl8o`3[o`Co0?go1ol0 oo04o`3ogPGo0?o<1?l0okX5o`3oZ0Co0?nG1Ol0ohD4o`3oL`Go0?mQ1Ol0odl4o`3o?@Go0?l[1?l0 oaT4o`3o1`Go2_l01OlLo`04obko00Go?ol01?mAo`04of?o00GoMOl01?n7o`05oiWo00CoZol01Onm o`05oloo00CohOl01Ooco`04oooj00CoonP01Oooool1o`00007ooooo0Oooool000[ooooo00?o0000 ooooooooool00oooool2o`3oU`Go0?nX1_l0okX9o`3oc0So0?oN2_l0oo0;o`3mo`go0>_o_o9_l0fOl8o`3[o`Ko0?go2?l0oo04o`3ogPGo0?o<1?l0okX4o`3o Z0Go0?nG1?l0ohD5o`3oL`Co0?mQ1Ol0odl5o`3o?@Co0?l[1Ol0oaT4o`3o1`Co2_l01OlLo`04obko 00Go?ol01?mAo`04of?o00GoMOl01?n7o`05oiWo00CoZol01Onmo`05oloo00?ohOl01_oco`03oooj 00GoonP00_ooe`05ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03ooooo`Ko 0?nG1Ol0ojP8o`3o^PSo0?o<2Ol0omh;o`3ol0co0?go>?l0jol9o`3mo`So0?o`1?l0omh5o`3oc0Co 0?nj1?l0ojP5o`3oU`Go0?n51?l0og<5o`3oH@Co0?m?1Ol0ocd4o`3o:`Go0?lI1?l0o`L4o`[o00Go 7?l01?l^o`05ocoo00CoDOl01?mSo`05ogGo00CoQol01OnIo`04oj_o00Go_Ol01Oo?o`03on7o00Go lol01?oonP05oooX00?oomL01Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool0 0oooool2o`3oQ@Ko0?nG1Ol0ojP9o`3o^PSo0?o<2Ol0omho`3ol2oo0?go3Ol0oo09o`3ogPCo0?o<0ol0okX6o`3oZ0Go0?nG1?l0ohD4o`3o L`Go0?mQ1?l0odl5o`3o?@Co0?l[1Ol0oaT4o`3o1`Co2_l01OlLo`04obko00Go?ol01?mAo`04of?o 00GoMOl01?n7o`05oiWo00CoZol01?nmo`05oloo00CohOl01?oco`04oooj00GoonP01?ooe`03ooo5 00Gooooo0Ol00001ooooo`7ooooo00000ooooooo0000ooooo`02ooooo`03o`000?oooooooooo00;o oooo00?o0000ooooooooool00oooool4o`3oL`Go0?n51ol0oiL8o`3oZ0Wo0?nj2_l0ol`;o`3ogQ?o 0?o`8?l0oOlAo`3ol0_o0?oN1?l0ol`3o`3o^PKo0?nX1Ol0oiL4o`3oQ@Co0?mc1Ol0of44o`3oC`Go 0?lm1?l0ob/5o`3o6@Go0?l70ol:o`05oaco00Co;_l01Oloo`05oe7o00?oHol01Omeo`04ohOo00Go VOl01?n[o`04okgo00Gocol01?oQo`04oo?o00CoooX01Oooj004oooG00CoolD01Oooool1o`00007o oooo0Oooool000;ooooo0ol00005ooooo`?o00000oooool7o`3oL`Co0?n52?l0oiL8o`3oZ0Wo0?nj 2ol0ol`o`3o^SKo0?o<4Ol0okX4o`3oZ0Wo0?nG 1Ol0ohD4o`3oL`Co0?mQ1Ol0odl4o`3o?@Co0?l[1?l0oaT4o`3o1`Go2_l01?lLo`04obko00Co?ol0 1OmAo`04of?o00CoMOl01?n7o`04oiWo00GoZol01?nmo`05oloo00?ohOl01Ooco`04oooj00CoonP0 1?ooe`04ooo500Gook<00oooX@05ooooo`7o00000Oooool1ooooo`002_ooool00ol0003ooooooooo o`03ooooo`;o0?lm1ol0odl6o`3oH@Oo0?mc2Ol0ohD9o`3oU`go0?nX4ol0okXQo`3oc1Ko0?nj2?l0 ojP:o`3oU`Ko0?n50ol0og<4o`3oH@Go0?m?1?l0ocd4o`3o:`Co0?lI1?l0o`L5o`[o00Co7?l01?l^ o`04ocoo00GoDOl01?mSo`04ogGo00CoQol01?nIo`05oj_o00Co_Ol01?o?o`04on7o00Golol01?oo nP04oooX00CoomL01?ooa@05oonc00Cooj401Oooool1o`00007ooooo0Oooool000[ooooo00?o0000 ooooooooool00oooool4o`3o?@Oo0?m?1_l0of49o`3oL`Oo0?n52ol0oiL?o`3oZ1Wo0?nj2_l0ol`H o`3o^Poo0?nX2ol0oiL5o`3oQ@?o0?mc1Ol0of45o`3oC`Co0?lm1?l0ob/4o`3o6@Co0?l71Ol:o`04 oaco00Co;_l01?loo`05oe7o00CoHol01?meo`04ohOo00CoVOl01On[o`04okgo00Cocol01?oQo`05 oo?o00CoooX01?ooj004oooG00CoolD01Ooo/`04oonQ0003oon?0?oooooooooo00?ooooo0Ol00001 ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo1_l0ocd7o`3oC`Oo0?mQ2Ol0og<7o`3o Q@co0?nG4?l0ojPao`3o^Q3o0?nX3?l0oiL7o`3oQ@?o0?mc1_l0of44o`3oC`Go0?lm1?l0ob/4o`3o 6@Co0?l71Ol:o`04oaco00Co;_l01?loo`05oe7o00CoHol01?meo`04ohOo00CoVOl01?n[o`05okgo 00Cocol01?oQo`04oo?o00CoooX01Oooj004oooG00CoolD01?oo/`04oonQ00;oohl01Oooool1o`00 007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool2o`3o:`Oo0?lm1ol0odl6o`3oH@[o 0?mc2?l0ohD=o`3oUaCo0?nX8?l0okXCo`3oZ0go0?nG2Ol0ohD3o`3oL`Oo0?mQ1?l0odl4o`3o?@Go 0?l[1?l0oaT4o`3o1`Go2_l01OlLo`03obko00Co?ol01OmAo`04of?o00CoMOl01?n7o`04oiWo00Go Zol01?nmo`04oloo00CohOl01?oco`04oooj00GoonP01?ooe`03ooo500Gook<01?ooX@03oon?00Go oooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo1?l0ob/7o`3o?@So0?m? 1_l0of4;o`3oL`Oo0?n54?l0oiLko`3oZ13o0?nG2ol0ohD3o`3oL`Oo0?mQ1?l0odl4o`3o?@Go0?l[ 1?l0oaT5o`3o1`Co2_l01OlLo`03obko00Co?ol01OmAo`04of?o00CoMOl01?n7o`04oiWo00GoZol0 1?nmo`04oloo00CohOl01?oco`04oooj00GoonP01?ooe`03ooo500Gook<01?ooX@03oon?0003oomm 0?oooooooooo00?ooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo0_l0 oaT5o`3o:`Ko0?lm2Ol0odl7o`3oH@_o0?mc2?l0ohD@o`3oUc7o0?nX4?l0oiL?o`3oQ@?o0?mc1_l0 of45o`3oC`Co0?lm1_l0ob/3o`3o6@Ko0?l71?l:o`04oaco00Co;_l00oloo`06oe7o00?oHol01?me o`04ohOo00CoVOl01On[o`04okgo00Cocol01?oQo`04oo?o00CoooX01Oooj004oooG00?oolD01Ooo /`04oonQ00?oohl00_ooO@05ooooo`7o00000Oooool1ooooo`002_ooool00ol0003oooooooooo`03 ooooo`Co0?lI1Ol0ob/7o`3o?@So0?m?2?l0of4;o`3oL`[o0?n55?l0oiLPo`3oZ1?o0?nG3_l0ohD7 o`3oL`Ko0?mQ1_l0odl4o`3o?@Ko0?l[1?l0oaT5o`3o1`Co2_l01?lLo`04obko00Co?ol01OmAo`04 of?o00?oMOl01On7o`03oiWo00GoZol01?nmo`04oloo00CohOl01?oco`04oooj00CoonP01Oooe`03 ooo500Gook<01?ooX@03oon?00?oogd01Oooool1o`00007ooooo0Oooool000[ooooo00?o0000oooo ooooool00oooool7o`3o6@Co0?l[2?l0ocd8o`3oC`Wo0?mQ2ol0ogo`3o L`Go0?mQ1ol0odl3o`3o?@So0?l[0ol0oaT6o`3o1`?o2_l01?lLo`04obko00Co?ol01OmAo`04of?o 00?oMOl01On7o`04oiWo00CoZol01?nmo`04oloo00CohOl01?oco`04oooj00CoonP01Oooe`03ooo5 00Cook<01OooX@03oon?00Coogd01Oooool1o`00007ooooo0Oooool000[ooooo0_l00004ooooo`;o 0?l71ol0oaT4o`3o:`Wo0?lm2?l0odl:o`3oH@_o0?mc5_l0ohDPo`3oUaGo0?n53_l0og<8o`3oH@Oo 0?m?0ol0ocd8o`3o:`?o0?lI1_l0o`L3o`[o00Go7?l01?l^o`03ocoo00GoDOl01?mSo`04ogGo00Co Qol01?nIo`04oj_o00Co_Ol01Oo?o`03on7o00Colol01?oonP04oooX00GoomL00oooa@04oonc00Go oj400oooS`04oomm0003oom[0?oooooooooo00;ooooo0_l00002ooooo`002_ooool00ol0003ooooo ooooo`03ooooo`Co0?l71ol0oaT5o`3o:`Wo0?lm2?l0odl:o`3oH@_o0?mc7_l0ohD:o`3oUago0?n5 3?l0og<;o`3oH@Ko0?m?1Ol0ocd7o`3o:`Go0?lI1Ol0o`L4o`[o00Co7?l01?l^o`04ocoo00CoDOl0 1?mSo`04ogGo00CoQol01?nIo`04oj_o00Co_Ol01Oo?o`03on7o00Colol01?oonP04oooX00GoomL0 0oooa@04oonc00Gooj400oooS`04oomm00;oof/01Oooool1o`00007ooooo0Oooool000[ooooo00?o 0000ooooooooool00oooool7o`3o1`Ko0?lI1_l0ob/9o`3o?@So0?m?3?l0of4>o`3oLcKo0?n53Ol0 ogol0ogo`3oCcKo0?mQ3Ol0 odl:o`3o?@Oo0?l[2_l0oaT:o`3o1`Co2_l01OlLo`05obko00?o?ol01_mAo`04of?o00?oMOl01On7 o`04oiWo00CoZol01?nmo`04oloo00CohOl01?oco`05oooj00?oonP01?ooe`04ooo500Cook<01?oo X@03oon?00Coogd00oooJ`04oomI0003oom70?oooooooooo00?ooooo0Ol00001ooooo`7ooooo000: ooooo`03o`000?oooooooooo00?ooooo0_l^o`07oaco00Go2_l02?l0o`L8o`3o6@[o0?l[3Ol0ocdD o`3oCb3o0?mQ4ol0odlo`3o6@Wo0?l72Ol:o`08oaco00Oo;_l01_loo`06oe7o 00GoHol01_meo`05ohOo00GoVOl01?n[o`04okgo00Cocol01?oQo`04oo?o00CoooX01?ooj003oooG 00CoolD01?oo/`03oonQ00Coohl00oooO@03oom[00?ooeT00oooA`03oole00?oob<000?ooa40oooo ooooool00_ooool2o`0000;ooooo000:ooooo`03o`000?oooooooooo0?oooooo4Oooool1o`00007o oooo0Oooool000[ooooo00?o0000ooooooooool0oooooolAooooo`7o00000Oooool1ooooo`002_oo ool00ol0003oooooooooo`3ooooooa7ooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooo oooo00?ooooo00?o0000ooooooooool02oooool00ol0003oooooooooo`0"], ImageRangeCache->{{{0, 287}, {287, 0}} -> {-0.550592, -0.603858, 0.0340901, \ 0.0340901}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] ContourGraphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(FindMinimumPlot[Zimmermann[x1, x2], {{x1, 2}, {x2, \ 1. }}]\)], "Input"], Cell[BoxData[ RowBox[{\(FindMinimum::"lstol"\), \(\(:\)\(\ \)\), "\<\"The line search \ decreased the step size to within tolerance specified by AccuracyGoal and \ PrecisionGoal but was unable to find a sufficient decrease in the function. \ You may need more than \\!\\(MachinePrecision\\) digits of working precision \ to meet these tolerances. \\!\\(\\*ButtonBox[\\\"More\[Ellipsis]\\\", \ ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \ ButtonData:>\\\"FindMinimum::lstol\\\"]\\)\"\>"}]], "Message"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% ContourGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.467273 0.243252 -0.224021 0.243252 [ [.01923 -0.0125 -3 -9 ] [.01923 -0.0125 3 0 ] [.26248 -0.0125 -3 -9 ] [.26248 -0.0125 3 0 ] [.50574 -0.0125 -3 -9 ] [.50574 -0.0125 3 0 ] [.74899 -0.0125 -3 -9 ] [.74899 -0.0125 3 0 ] [.99224 -0.0125 -3 -9 ] [.99224 -0.0125 3 0 ] [ 0 0 -0.125 0 ] [-0.0125 .01923 -6 -4.5 ] [-0.0125 .01923 0 4.5 ] [-0.0125 .26248 -6 -4.5 ] [-0.0125 .26248 0 4.5 ] [-0.0125 .50574 -6 -4.5 ] [-0.0125 .50574 0 4.5 ] [-0.0125 .74899 -6 -4.5 ] [-0.0125 .74899 0 4.5 ] [-0.0125 .99224 -6 -4.5 ] [-0.0125 .99224 0 4.5 ] [ 0 0 -0.125 0 ] [ 0 1 .125 0 ] [ 1 0 .125 0 ] [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .01923 0 m .01923 .00625 L s [(2)] .01923 -0.0125 0 1 Mshowa .26248 0 m .26248 .00625 L s [(3)] .26248 -0.0125 0 1 Mshowa .50574 0 m .50574 .00625 L s [(4)] .50574 -0.0125 0 1 Mshowa .74899 0 m .74899 .00625 L s [(5)] .74899 -0.0125 0 1 Mshowa .99224 0 m .99224 .00625 L s [(6)] .99224 -0.0125 0 1 Mshowa .125 Mabswid .06788 0 m .06788 .00375 L s .11653 0 m .11653 .00375 L s .16518 0 m .16518 .00375 L s .21383 0 m .21383 .00375 L s .31113 0 m .31113 .00375 L s .35978 0 m .35978 .00375 L s .40843 0 m .40843 .00375 L s .45708 0 m .45708 .00375 L s .55439 0 m .55439 .00375 L s .60304 0 m .60304 .00375 L s .65169 0 m .65169 .00375 L s .70034 0 m .70034 .00375 L s .79764 0 m .79764 .00375 L s .84629 0 m .84629 .00375 L s .89494 0 m .89494 .00375 L s .94359 0 m .94359 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .01923 m .00625 .01923 L s [(1)] -0.0125 .01923 1 0 Mshowa 0 .26248 m .00625 .26248 L s [(2)] -0.0125 .26248 1 0 Mshowa 0 .50574 m .00625 .50574 L s [(3)] -0.0125 .50574 1 0 Mshowa 0 .74899 m .00625 .74899 L s [(4)] -0.0125 .74899 1 0 Mshowa 0 .99224 m .00625 .99224 L s [(5)] -0.0125 .99224 1 0 Mshowa .125 Mabswid 0 .06788 m .00375 .06788 L s 0 .11653 m .00375 .11653 L s 0 .16518 m .00375 .16518 L s 0 .21383 m .00375 .21383 L s 0 .31113 m .00375 .31113 L s 0 .35978 m .00375 .35978 L s 0 .40843 m .00375 .40843 L s 0 .45708 m .00375 .45708 L s 0 .55439 m .00375 .55439 L s 0 .60304 m .00375 .60304 L s 0 .65169 m .00375 .65169 L s 0 .70034 m .00375 .70034 L s 0 .79764 m .00375 .79764 L s 0 .84629 m .00375 .84629 L s 0 .89494 m .00375 .89494 L s 0 .94359 m .00375 .94359 L s .25 Mabswid 0 0 m 0 1 L s .01923 .99375 m .01923 1 L s .26248 .99375 m .26248 1 L s .50574 .99375 m .50574 1 L s .74899 .99375 m .74899 1 L s .99224 .99375 m .99224 1 L s .125 Mabswid .06788 .99625 m .06788 1 L s .11653 .99625 m .11653 1 L s .16518 .99625 m .16518 1 L s .21383 .99625 m .21383 1 L s .31113 .99625 m .31113 1 L s .35978 .99625 m .35978 1 L s .40843 .99625 m .40843 1 L s .45708 .99625 m .45708 1 L s .55439 .99625 m .55439 1 L s .60304 .99625 m .60304 1 L s .65169 .99625 m .65169 1 L s .70034 .99625 m .70034 1 L s .79764 .99625 m .79764 1 L s .84629 .99625 m .84629 1 L s .89494 .99625 m .89494 1 L s .94359 .99625 m .94359 1 L s .25 Mabswid 0 1 m 1 1 L s .99375 .01923 m 1 .01923 L s .99375 .26248 m 1 .26248 L s .99375 .50574 m 1 .50574 L s .99375 .74899 m 1 .74899 L s .99375 .99224 m 1 .99224 L s .125 Mabswid .99625 .06788 m 1 .06788 L s .99625 .11653 m 1 .11653 L s .99625 .16518 m 1 .16518 L s .99625 .21383 m 1 .21383 L s .99625 .31113 m 1 .31113 L s .99625 .35978 m 1 .35978 L s .99625 .40843 m 1 .40843 L s .99625 .45708 m 1 .45708 L s .99625 .55439 m 1 .55439 L s .99625 .60304 m 1 .60304 L s .99625 .65169 m 1 .65169 L s .99625 .70034 m 1 .70034 L s .99625 .79764 m 1 .79764 L s .99625 .84629 m 1 .84629 L s .99625 .89494 m 1 .89494 L s .99625 .94359 m 1 .94359 L s .25 Mabswid 1 0 m 1 1 L s 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath 1 g .01923 .98077 m .98077 .98077 L .98077 .01923 L .01923 .01923 L F 0 g .5 Mabswid .925 g .98077 .37518 m .97256 .37859 L .97106 .37922 L .96134 .38333 L .95163 .38748 L .94972 .38831 L .94192 .3917 L .93221 .39597 L .9276 .39802 L .92249 .4003 L .91278 .4047 L .90615 .40773 L .90307 .40915 L .89336 .41367 L .88536 .41744 L .88364 .41826 L .87393 .42291 L .86518 .42716 L .86422 .42763 L .85451 .43242 L .8456 .43687 L .84479 .43728 L .83508 .44221 L .82659 .44658 L .82537 .44721 L .81566 .4523 L .80812 .45629 L .80594 .45745 L .79623 .46269 L .79016 .46601 L .78652 .46801 L .77681 .47342 L .77271 .47572 L .76709 .4789 L .75738 .48448 L .75574 .48543 L .74767 .49014 L .73922 .49514 L .73796 .4959 L .72824 .50175 L .72314 .50486 L .71853 .50769 L .70882 .51373 L .70749 .51457 L .69911 .51988 L .69224 .52428 L .68939 .52612 L .67968 .53247 L .67738 .53399 L .66997 .53894 L .6629 .54371 L .66026 .54551 L .65054 .55219 L .64878 .55342 L .64083 .559 L .63501 .56313 L .63112 .56592 L .62158 .57284 L .62141 .57297 L .61169 .58014 L .60847 .58256 L .60198 .58745 L .59567 .59227 L .59227 .59489 L .58317 .60198 L .58256 .60246 L .57284 .61018 L .57096 .61169 L .56313 .61804 L .55903 .62141 L .55342 .62606 L .54738 .63112 L .54371 .63422 L .53598 .64083 L .53399 .64255 L .52484 .65054 L .52428 .65104 L .51457 .65969 L .51394 .66026 L .50486 .66852 L .50328 .66997 L .49514 .67753 L .49285 .67968 L .48543 .68672 L .48264 .68939 L .47572 .6961 L .47265 .69911 L .46601 .70568 L .46286 .70882 L .45629 .71545 L .45328 .71853 L .44658 .72544 L .44389 .72824 L .43687 .73564 L .43469 .73796 L .42716 .74606 L .42567 .74767 L .41744 .75671 L .41684 .75738 L .40817 .76709 L .40773 .76759 L .39968 .77681 L .39802 .77872 L .39134 .78652 L .38831 .79011 L .38317 .79623 L .37859 .80175 L .37515 .80594 L .36888 .81367 L .36728 .81566 L .35956 .82537 L .35917 .82586 L .35197 .83508 L .34946 .83835 L .34453 .84479 L .33974 .85113 L .33722 .85451 L .33004 .86422 L .33003 .86423 L .32299 .87393 L .32032 .87765 L .31606 .88364 L .31061 .8914 L .30925 .89336 L .30256 .90307 L .30089 .90551 L .29598 .91278 L .29118 .91997 L .28951 .92249 L .28316 .93221 L .28147 .93481 L .2769 .94192 L .27176 .95004 L .27076 .95163 L .26471 .96134 L .26204 .96568 L .25876 .97106 L .25291 .98077 L .98077 .98077 L F 0 g .98077 .37518 m .97256 .37859 L .97106 .37922 L .96134 .38333 L .95163 .38748 L .94972 .38831 L .94192 .3917 L .93221 .39597 L .9276 .39802 L .92249 .4003 L .91278 .4047 L .90615 .40773 L .90307 .40915 L .89336 .41367 L .88536 .41744 L .88364 .41826 L .87393 .42291 L .86518 .42716 L .86422 .42763 L .85451 .43242 L .8456 .43687 L .84479 .43728 L .83508 .44221 L .82659 .44658 L .82537 .44721 L .81566 .4523 L .80812 .45629 L .80594 .45745 L .79623 .46269 L .79016 .46601 L .78652 .46801 L .77681 .47342 L .77271 .47572 L .76709 .4789 L .75738 .48448 L .75574 .48543 L .74767 .49014 L .73922 .49514 L .73796 .4959 L .72824 .50175 L .72314 .50486 L .71853 .50769 L .70882 .51373 L .70749 .51457 L .69911 .51988 L .69224 .52428 L .68939 .52612 L .67968 .53247 L .67738 .53399 L .66997 .53894 L Mistroke .6629 .54371 L .66026 .54551 L .65054 .55219 L .64878 .55342 L .64083 .559 L .63501 .56313 L .63112 .56592 L .62158 .57284 L .62141 .57297 L .61169 .58014 L .60847 .58256 L .60198 .58745 L .59567 .59227 L .59227 .59489 L .58317 .60198 L .58256 .60246 L .57284 .61018 L .57096 .61169 L .56313 .61804 L .55903 .62141 L .55342 .62606 L .54738 .63112 L .54371 .63422 L .53598 .64083 L .53399 .64255 L .52484 .65054 L .52428 .65104 L .51457 .65969 L .51394 .66026 L .50486 .66852 L .50328 .66997 L .49514 .67753 L .49285 .67968 L .48543 .68672 L .48264 .68939 L .47572 .6961 L .47265 .69911 L .46601 .70568 L .46286 .70882 L .45629 .71545 L .45328 .71853 L .44658 .72544 L .44389 .72824 L .43687 .73564 L .43469 .73796 L .42716 .74606 L .42567 .74767 L .41744 .75671 L .41684 .75738 L .40817 .76709 L Mistroke .40773 .76759 L .39968 .77681 L .39802 .77872 L .39134 .78652 L .38831 .79011 L .38317 .79623 L .37859 .80175 L .37515 .80594 L .36888 .81367 L .36728 .81566 L .35956 .82537 L .35917 .82586 L .35197 .83508 L .34946 .83835 L .34453 .84479 L .33974 .85113 L .33722 .85451 L .33004 .86422 L .33003 .86423 L .32299 .87393 L .32032 .87765 L .31606 .88364 L .31061 .8914 L .30925 .89336 L .30256 .90307 L .30089 .90551 L .29598 .91278 L .29118 .91997 L .28951 .92249 L .28316 .93221 L .28147 .93481 L .2769 .94192 L .27176 .95004 L .27076 .95163 L .26471 .96134 L .26204 .96568 L .25876 .97106 L .25291 .98077 L Mfstroke .85 g .98077 .41192 m .97106 .41621 L .96829 .41744 L .96134 .42056 L .95163 .42497 L .94688 .42716 L .94192 .42945 L .93221 .43398 L .9261 .43687 L .92249 .43858 L .91278 .44324 L .90592 .44658 L .90307 .44797 L .89336 .45277 L .88631 .45629 L .88364 .45764 L .87393 .46257 L .86726 .46601 L .86422 .46758 L .85451 .47266 L .84873 .47572 L .84479 .47782 L .83508 .48305 L .83072 .48543 L .82537 .48837 L .81566 .49376 L .81319 .49514 L .80594 .49924 L .79623 .5048 L .79613 .50486 L .78652 .51044 L .77951 .51457 L .77681 .51618 L .76709 .522 L .76333 .52428 L .75738 .52792 L .74767 .53393 L .74756 .53399 L .73796 .54004 L .73219 .54371 L .72824 .54624 L .71853 .55255 L .71721 .55342 L .70882 .55896 L .70259 .56313 L .69911 .56548 L .68939 .57211 L .68833 .57284 L .67968 .57886 L .67442 .58256 L .66997 .58571 L .66083 .59227 L .66026 .59269 L .65054 .59978 L .64757 .60198 L .64083 .607 L .63461 .61169 L .63112 .61435 L .62195 .62141 L .62141 .62183 L .61169 .62945 L .60958 .63112 L .60198 .6372 L .59749 .64083 L .59227 .64509 L .58567 .65054 L .58256 .65313 L .5741 .66026 L .57284 .66132 L .56313 .66967 L .56279 .66997 L .55342 .67817 L .55172 .67968 L .54371 .68684 L .54088 .68939 L .53399 .69568 L .53027 .69911 L .52428 .70469 L .51989 .70882 L .51457 .71387 L .50972 .71853 L .50486 .72324 L .49975 .72824 L .49514 .7328 L .48999 .73796 L .48543 .74256 L .48042 .74767 L .47572 .75251 L .47104 .75738 L .46601 .76268 L .46185 .76709 L .45629 .77305 L .45283 .77681 L .44658 .78365 L .44399 .78652 L .43687 .79447 L .43531 .79623 L .42716 .80553 L .4268 .80594 L .41845 .81566 L .41744 .81684 L .41025 .82537 L .40773 .82839 L .4022 .83508 L .39802 .8402 L .3943 .84479 L .38831 .85228 L .38654 .85451 L .37892 .86422 L .37859 .86464 L .37144 .87393 L .36888 .87729 L .36408 .88364 L .35917 .89023 L .35686 .89336 L .34975 .90307 L .34946 .90348 L .34277 .91278 L .33974 .91705 L .33591 .92249 L .33003 .93095 L .32916 .93221 L .32253 .94192 L .32032 .94519 L .31601 .95163 L .31061 .95979 L .30959 .96134 L .30327 .97106 L .30089 .97476 L .29706 .98077 L .98077 .98077 L F 0 g .98077 .41192 m .97106 .41621 L .96829 .41744 L .96134 .42056 L .95163 .42497 L .94688 .42716 L .94192 .42945 L .93221 .43398 L .9261 .43687 L .92249 .43858 L .91278 .44324 L .90592 .44658 L .90307 .44797 L .89336 .45277 L .88631 .45629 L .88364 .45764 L .87393 .46257 L .86726 .46601 L .86422 .46758 L .85451 .47266 L .84873 .47572 L .84479 .47782 L .83508 .48305 L .83072 .48543 L .82537 .48837 L .81566 .49376 L .81319 .49514 L .80594 .49924 L .79623 .5048 L .79613 .50486 L .78652 .51044 L .77951 .51457 L .77681 .51618 L .76709 .522 L .76333 .52428 L .75738 .52792 L .74767 .53393 L .74756 .53399 L .73796 .54004 L .73219 .54371 L .72824 .54624 L .71853 .55255 L .71721 .55342 L .70882 .55896 L .70259 .56313 L .69911 .56548 L .68939 .57211 L .68833 .57284 L .67968 .57886 L .67442 .58256 L Mistroke .66997 .58571 L .66083 .59227 L .66026 .59269 L .65054 .59978 L .64757 .60198 L .64083 .607 L .63461 .61169 L .63112 .61435 L .62195 .62141 L .62141 .62183 L .61169 .62945 L .60958 .63112 L .60198 .6372 L .59749 .64083 L .59227 .64509 L .58567 .65054 L .58256 .65313 L .5741 .66026 L .57284 .66132 L .56313 .66967 L .56279 .66997 L .55342 .67817 L .55172 .67968 L .54371 .68684 L .54088 .68939 L .53399 .69568 L .53027 .69911 L .52428 .70469 L .51989 .70882 L .51457 .71387 L .50972 .71853 L .50486 .72324 L .49975 .72824 L .49514 .7328 L .48999 .73796 L .48543 .74256 L .48042 .74767 L .47572 .75251 L .47104 .75738 L .46601 .76268 L .46185 .76709 L .45629 .77305 L .45283 .77681 L .44658 .78365 L .44399 .78652 L .43687 .79447 L .43531 .79623 L .42716 .80553 L .4268 .80594 L .41845 .81566 L Mistroke .41744 .81684 L .41025 .82537 L .40773 .82839 L .4022 .83508 L .39802 .8402 L .3943 .84479 L .38831 .85228 L .38654 .85451 L .37892 .86422 L .37859 .86464 L .37144 .87393 L .36888 .87729 L .36408 .88364 L .35917 .89023 L .35686 .89336 L .34975 .90307 L .34946 .90348 L .34277 .91278 L .33974 .91705 L .33591 .92249 L .33003 .93095 L .32916 .93221 L .32253 .94192 L .32032 .94519 L .31601 .95163 L .31061 .95979 L .30959 .96134 L .30327 .97106 L .30089 .97476 L .29706 .98077 L Mfstroke .775 g .98077 .44865 m .97106 .4532 L .96451 .45629 L .96134 .4578 L .95163 .46247 L .94435 .46601 L .94192 .4672 L .93221 .47199 L .92476 .47572 L .92249 .47686 L .91278 .48179 L .9057 .48543 L .90307 .48679 L .89336 .49187 L .88716 .49514 L .88364 .49702 L .87393 .50224 L .86911 .50486 L .86422 .50753 L .85451 .51291 L .85154 .51457 L .84479 .51836 L .83508 .5239 L .83442 .52428 L .82537 .52952 L .81774 .53399 L .81566 .53523 L .80594 .54102 L .80148 .54371 L .79623 .5469 L .78652 .55287 L .78563 .55342 L .77681 .55894 L .77017 .56313 L .76709 .5651 L .75738 .57135 L .75509 .57284 L .74767 .57771 L .74037 .58256 L .73796 .58417 L .72824 .59074 L .726 .59227 L .71853 .59741 L .71197 .60198 L .70882 .6042 L .69911 .61109 L .69827 .61169 L .68939 .61811 L .68488 .62141 L .67968 .62524 L .67179 .63112 L .66997 .63249 L .66026 .63987 L .659 .64083 L .65054 .64737 L .64649 .65054 L .64083 .65501 L .63426 .66026 L .63112 .66278 L .62229 .66997 L .62141 .6707 L .61169 .67875 L .61058 .67968 L .60198 .68695 L .59912 .68939 L .59227 .6953 L .5879 .69911 L .58256 .70381 L .57691 .70882 L .57284 .71247 L .56615 .71853 L .56313 .7213 L .55561 .72824 L .55342 .73029 L .54529 .73796 L .54371 .73946 L .53517 .74767 L .53399 .74881 L .52525 .75738 L .52428 .75834 L .51552 .76709 L .51457 .76805 L .50598 .77681 L .50486 .77797 L .49663 .78652 L .49514 .78808 L .48745 .79623 L .48543 .79839 L .47845 .80594 L .47572 .80893 L .46961 .81566 L .46601 .81968 L .46094 .82537 L .45629 .83065 L .45243 .83508 L .44658 .84186 L .44407 .84479 L .43687 .85331 L .43587 .85451 L .42781 .86422 L .42716 .86501 L .41989 .87393 L .41744 .87696 L .41211 .88364 L .40773 .88919 L .40446 .89336 L .39802 .90168 L .39695 .90307 L .38957 .91278 L .38831 .91446 L .38231 .92249 L .37859 .92753 L .37517 .93221 L .36888 .94091 L .36816 .94192 L .36125 .95163 L .35917 .9546 L .35447 .96134 L .34946 .96861 L .34779 .97106 L .34122 .98077 L .98077 .98077 L F 0 g .98077 .44865 m .97106 .4532 L .96451 .45629 L .96134 .4578 L .95163 .46247 L .94435 .46601 L .94192 .4672 L .93221 .47199 L .92476 .47572 L .92249 .47686 L .91278 .48179 L .9057 .48543 L .90307 .48679 L .89336 .49187 L .88716 .49514 L .88364 .49702 L .87393 .50224 L .86911 .50486 L .86422 .50753 L .85451 .51291 L .85154 .51457 L .84479 .51836 L .83508 .5239 L .83442 .52428 L .82537 .52952 L .81774 .53399 L .81566 .53523 L .80594 .54102 L .80148 .54371 L .79623 .5469 L .78652 .55287 L .78563 .55342 L .77681 .55894 L .77017 .56313 L .76709 .5651 L .75738 .57135 L .75509 .57284 L .74767 .57771 L .74037 .58256 L .73796 .58417 L .72824 .59074 L .726 .59227 L .71853 .59741 L .71197 .60198 L .70882 .6042 L .69911 .61109 L .69827 .61169 L .68939 .61811 L .68488 .62141 L .67968 .62524 L Mistroke .67179 .63112 L .66997 .63249 L .66026 .63987 L .659 .64083 L .65054 .64737 L .64649 .65054 L .64083 .65501 L .63426 .66026 L .63112 .66278 L .62229 .66997 L .62141 .6707 L .61169 .67875 L .61058 .67968 L .60198 .68695 L .59912 .68939 L .59227 .6953 L .5879 .69911 L .58256 .70381 L .57691 .70882 L .57284 .71247 L .56615 .71853 L .56313 .7213 L .55561 .72824 L .55342 .73029 L .54529 .73796 L .54371 .73946 L .53517 .74767 L .53399 .74881 L .52525 .75738 L .52428 .75834 L .51552 .76709 L .51457 .76805 L .50598 .77681 L .50486 .77797 L .49663 .78652 L .49514 .78808 L .48745 .79623 L .48543 .79839 L .47845 .80594 L .47572 .80893 L .46961 .81566 L .46601 .81968 L .46094 .82537 L .45629 .83065 L .45243 .83508 L .44658 .84186 L .44407 .84479 L .43687 .85331 L .43587 .85451 L .42781 .86422 L Mistroke .42716 .86501 L .41989 .87393 L .41744 .87696 L .41211 .88364 L .40773 .88919 L .40446 .89336 L .39802 .90168 L .39695 .90307 L .38957 .91278 L .38831 .91446 L .38231 .92249 L .37859 .92753 L .37517 .93221 L .36888 .94091 L .36816 .94192 L .36125 .95163 L .35917 .9546 L .35447 .96134 L .34946 .96861 L .34779 .97106 L .34122 .98077 L Mfstroke .7 g .98077 .48539 m .98068 .48543 L .97106 .49018 L .96134 .49504 L .96113 .49514 L .95163 .49996 L .9421 .50486 L .94192 .50495 L .93221 .51001 L .92356 .51457 L .92249 .51514 L .91278 .52034 L .90551 .52428 L .90307 .52561 L .89336 .53097 L .88792 .53399 L .88364 .53639 L .87393 .5419 L .87078 .54371 L .86422 .54749 L .85451 .55316 L .85406 .55342 L .84479 .55891 L .83776 .56313 L .83508 .56475 L .82537 .57067 L .82185 .57284 L .81566 .57669 L .80633 .58256 L .80594 .5828 L .79623 .589 L .79117 .59227 L .78652 .5953 L .77681 .6017 L .77638 .60198 L .76709 .60819 L .76192 .61169 L .75738 .61479 L .7478 .62141 L .74767 .6215 L .73796 .62831 L .734 .63112 L .72824 .63524 L .72051 .64083 L .71853 .64227 L .70882 .64943 L .70732 .65054 L .69911 .6567 L .69442 .66026 L .68939 .6641 L .6818 .66997 L .67968 .67162 L .66997 .67927 L .66945 .67968 L .66026 .68705 L .65736 .68939 L .65054 .69496 L .64553 .69911 L .64083 .70302 L .63394 .70882 L .63112 .71122 L .62259 .71853 L .62141 .71956 L .61169 .72805 L .61148 .72824 L .60198 .7367 L .60059 .73796 L .59227 .74551 L .58991 .74767 L .58256 .75448 L .57945 .75738 L .57284 .76362 L .56919 .76709 L .56313 .77292 L .55913 .77681 L .55342 .78241 L .54927 .78652 L .54371 .79208 L .53959 .79623 L .53399 .80194 L .5301 .80594 L .52428 .81199 L .52078 .81566 L .51457 .82223 L .51164 .82537 L .50486 .83269 L .50266 .83508 L .49514 .84335 L .49384 .84479 L .48543 .85423 L .48519 .85451 L .47669 .86422 L .47572 .86534 L .46834 .87393 L .46601 .87668 L .46013 .88364 L .45629 .88825 L .45207 .89336 L .44658 .90007 L .44415 .90307 L .43687 .91215 L .43636 .91278 L .42871 .92249 L .42716 .92448 L .42118 .93221 L .41744 .93709 L .41378 .94192 L .40773 .94998 L .4065 .95163 L .39934 .96134 L .39802 .96316 L .3923 .97106 L .38831 .97664 L .38537 .98077 L .98077 .98077 L F 0 g .98077 .48539 m .98068 .48543 L .97106 .49018 L .96134 .49504 L .96113 .49514 L .95163 .49996 L .9421 .50486 L .94192 .50495 L .93221 .51001 L .92356 .51457 L .92249 .51514 L .91278 .52034 L .90551 .52428 L .90307 .52561 L .89336 .53097 L .88792 .53399 L .88364 .53639 L .87393 .5419 L .87078 .54371 L .86422 .54749 L .85451 .55316 L .85406 .55342 L .84479 .55891 L .83776 .56313 L .83508 .56475 L .82537 .57067 L .82185 .57284 L .81566 .57669 L .80633 .58256 L .80594 .5828 L .79623 .589 L .79117 .59227 L .78652 .5953 L .77681 .6017 L .77638 .60198 L .76709 .60819 L .76192 .61169 L .75738 .61479 L .7478 .62141 L .74767 .6215 L .73796 .62831 L .734 .63112 L .72824 .63524 L .72051 .64083 L .71853 .64227 L .70882 .64943 L .70732 .65054 L .69911 .6567 L .69442 .66026 L .68939 .6641 L Mistroke .6818 .66997 L .67968 .67162 L .66997 .67927 L .66945 .67968 L .66026 .68705 L .65736 .68939 L .65054 .69496 L .64553 .69911 L .64083 .70302 L .63394 .70882 L .63112 .71122 L .62259 .71853 L .62141 .71956 L .61169 .72805 L .61148 .72824 L .60198 .7367 L .60059 .73796 L .59227 .74551 L .58991 .74767 L .58256 .75448 L .57945 .75738 L .57284 .76362 L .56919 .76709 L .56313 .77292 L .55913 .77681 L .55342 .78241 L .54927 .78652 L .54371 .79208 L .53959 .79623 L .53399 .80194 L .5301 .80594 L .52428 .81199 L .52078 .81566 L .51457 .82223 L .51164 .82537 L .50486 .83269 L .50266 .83508 L .49514 .84335 L .49384 .84479 L .48543 .85423 L .48519 .85451 L .47669 .86422 L .47572 .86534 L .46834 .87393 L .46601 .87668 L .46013 .88364 L .45629 .88825 L .45207 .89336 L .44658 .90007 L .44415 .90307 L Mistroke .43687 .91215 L .43636 .91278 L .42871 .92249 L .42716 .92448 L .42118 .93221 L .41744 .93709 L .41378 .94192 L .40773 .94998 L .4065 .95163 L .39934 .96134 L .39802 .96316 L .3923 .97106 L .38831 .97664 L .38537 .98077 L Mfstroke .625 g .98077 .52213 m .9766 .52428 L .97106 .52717 L .96134 .53227 L .9581 .53399 L .95163 .53745 L .94192 .5427 L .94007 .54371 L .93221 .54802 L .92249 .55341 L .92249 .55342 L .91278 .55889 L .90534 .56313 L .90307 .56443 L .89336 .57006 L .88861 .57284 L .88364 .57577 L .87393 .58156 L .87228 .58256 L .86422 .58744 L .85634 .59227 L .85451 .5934 L .84479 .59945 L .84078 .60198 L .83508 .60559 L .82558 .61169 L .82537 .61183 L .81566 .61816 L .81072 .62141 L .80594 .62458 L .79623 .6311 L .79621 .63112 L .78652 .63773 L .78202 .64083 L .77681 .64446 L .76815 .65054 L .76709 .65129 L .75738 .65823 L .75458 .66026 L .74767 .66528 L .7413 .66997 L .73796 .67245 L .72831 .67968 L .72824 .67973 L .71853 .68714 L .7156 .68939 L .70882 .69466 L .70315 .69911 L .69911 .70231 L .69097 .70882 L .68939 .71009 L .67968 .718 L .67903 .71853 L .66997 .72604 L .66734 .72824 L .66026 .73423 L .65589 .73796 L .65054 .74255 L .64466 .74767 L .64083 .75103 L .63366 .75738 L .63112 .75965 L .62287 .76709 L .62141 .76842 L .61229 .77681 L .61169 .77736 L .60198 .78645 L .60191 .78652 L .59227 .79572 L .59173 .79623 L .58256 .80515 L .58175 .80594 L .57284 .81476 L .57195 .81566 L .56313 .82455 L .56233 .82537 L .55342 .83453 L .55289 .83508 L .54371 .8447 L .54362 .84479 L .53451 .85451 L .53399 .85507 L .52557 .86422 L .52428 .86564 L .51679 .87393 L .51457 .87641 L .50816 .88364 L .50486 .88741 L .49968 .89336 L .49514 .89863 L .49135 .90307 L .48543 .91007 L .48316 .91278 L .47572 .92175 L .47511 .92249 L .46719 .93221 L .46601 .93368 L .45941 .94192 L .45629 .94585 L .45175 .95163 L .44658 .95828 L .44422 .96134 L .43687 .97098 L .43681 .97106 L .42953 .98077 L .98077 .98077 L F 0 g .98077 .52213 m .9766 .52428 L .97106 .52717 L .96134 .53227 L .9581 .53399 L .95163 .53745 L .94192 .5427 L .94007 .54371 L .93221 .54802 L .92249 .55341 L .92249 .55342 L .91278 .55889 L .90534 .56313 L .90307 .56443 L .89336 .57006 L .88861 .57284 L .88364 .57577 L .87393 .58156 L .87228 .58256 L .86422 .58744 L .85634 .59227 L .85451 .5934 L .84479 .59945 L .84078 .60198 L .83508 .60559 L .82558 .61169 L .82537 .61183 L .81566 .61816 L .81072 .62141 L .80594 .62458 L .79623 .6311 L .79621 .63112 L .78652 .63773 L .78202 .64083 L .77681 .64446 L .76815 .65054 L .76709 .65129 L .75738 .65823 L .75458 .66026 L .74767 .66528 L .7413 .66997 L .73796 .67245 L .72831 .67968 L .72824 .67973 L .71853 .68714 L .7156 .68939 L .70882 .69466 L .70315 .69911 L .69911 .70231 L .69097 .70882 L Mistroke .68939 .71009 L .67968 .718 L .67903 .71853 L .66997 .72604 L .66734 .72824 L .66026 .73423 L .65589 .73796 L .65054 .74255 L .64466 .74767 L .64083 .75103 L .63366 .75738 L .63112 .75965 L .62287 .76709 L .62141 .76842 L .61229 .77681 L .61169 .77736 L .60198 .78645 L .60191 .78652 L .59227 .79572 L .59173 .79623 L .58256 .80515 L .58175 .80594 L .57284 .81476 L .57195 .81566 L .56313 .82455 L .56233 .82537 L .55342 .83453 L .55289 .83508 L .54371 .8447 L .54362 .84479 L .53451 .85451 L .53399 .85507 L .52557 .86422 L .52428 .86564 L .51679 .87393 L .51457 .87641 L .50816 .88364 L .50486 .88741 L .49968 .89336 L .49514 .89863 L .49135 .90307 L .48543 .91007 L .48316 .91278 L .47572 .92175 L .47511 .92249 L .46719 .93221 L .46601 .93368 L .45941 .94192 L .45629 .94585 L .45175 .95163 L Mistroke .44658 .95828 L .44422 .96134 L .43687 .97098 L .43681 .97106 L .42953 .98077 L Mfstroke .55 g .98077 .55886 m .97292 .56313 L .97106 .56415 L .96134 .56951 L .95537 .57284 L .95163 .57494 L .94192 .58045 L .93824 .58256 L .93221 .58603 L .92249 .59169 L .92151 .59227 L .91278 .59743 L .90518 .60198 L .90307 .60325 L .89336 .60916 L .88923 .61169 L .88364 .61515 L .87393 .62123 L .87365 .62141 L .86422 .62739 L .85842 .63112 L .85451 .63365 L .84479 .64 L .84353 .64083 L .83508 .64644 L .82897 .65054 L .82537 .65298 L .81566 .65962 L .81474 .66026 L .80594 .66636 L .80081 .66997 L .79623 .67321 L .78718 .67968 L .78652 .68016 L .77681 .68722 L .77384 .68939 L .76709 .69439 L .76078 .69911 L .75738 .70167 L .748 .70882 L .74767 .70907 L .73796 .71659 L .73547 .71853 L .72824 .72423 L .72321 .72824 L .71853 .732 L .71119 .73796 L .70882 .73989 L .69941 .74767 L .69911 .74792 L .68939 .75608 L .68786 .75738 L .67968 .76438 L .67654 .76709 L .66997 .77282 L .66544 .77681 L .66026 .78141 L .65455 .78652 L .65054 .79014 L .64387 .79623 L .64083 .79903 L .6334 .80594 L .63112 .80808 L .62311 .81566 L .62141 .81729 L .61302 .82537 L .61169 .82666 L .60312 .83508 L .60198 .8362 L .59339 .84479 L .59227 .84592 L .58384 .85451 L .58256 .85582 L .57446 .86422 L .57284 .86591 L .56524 .87393 L .56313 .87618 L .55619 .88364 L .55342 .88665 L .54729 .89336 L .54371 .89732 L .53855 .90307 L .53399 .9082 L .52995 .91278 L .52428 .91929 L .52151 .92249 L .51457 .9306 L .5132 .93221 L .50503 .94192 L .50486 .94213 L .497 .95163 L .49514 .9539 L .4891 .96134 L .48543 .96591 L .48133 .97106 L .47572 .97816 L .47368 .98077 L .98077 .98077 L F 0 g .98077 .55886 m .97292 .56313 L .97106 .56415 L .96134 .56951 L .95537 .57284 L .95163 .57494 L .94192 .58045 L .93824 .58256 L .93221 .58603 L .92249 .59169 L .92151 .59227 L .91278 .59743 L .90518 .60198 L .90307 .60325 L .89336 .60916 L .88923 .61169 L .88364 .61515 L .87393 .62123 L .87365 .62141 L .86422 .62739 L .85842 .63112 L .85451 .63365 L .84479 .64 L .84353 .64083 L .83508 .64644 L .82897 .65054 L .82537 .65298 L .81566 .65962 L .81474 .66026 L .80594 .66636 L .80081 .66997 L .79623 .67321 L .78718 .67968 L .78652 .68016 L .77681 .68722 L .77384 .68939 L .76709 .69439 L .76078 .69911 L .75738 .70167 L .748 .70882 L .74767 .70907 L .73796 .71659 L .73547 .71853 L .72824 .72423 L .72321 .72824 L .71853 .732 L .71119 .73796 L .70882 .73989 L .69941 .74767 L .69911 .74792 L Mistroke .68939 .75608 L .68786 .75738 L .67968 .76438 L .67654 .76709 L .66997 .77282 L .66544 .77681 L .66026 .78141 L .65455 .78652 L .65054 .79014 L .64387 .79623 L .64083 .79903 L .6334 .80594 L .63112 .80808 L .62311 .81566 L .62141 .81729 L .61302 .82537 L .61169 .82666 L .60312 .83508 L .60198 .8362 L .59339 .84479 L .59227 .84592 L .58384 .85451 L .58256 .85582 L .57446 .86422 L .57284 .86591 L .56524 .87393 L .56313 .87618 L .55619 .88364 L .55342 .88665 L .54729 .89336 L .54371 .89732 L .53855 .90307 L .53399 .9082 L .52995 .91278 L .52428 .91929 L .52151 .92249 L .51457 .9306 L .5132 .93221 L .50503 .94192 L .50486 .94213 L .497 .95163 L .49514 .9539 L .4891 .96134 L .48543 .96591 L .48133 .97106 L .47572 .97816 L .47368 .98077 L Mfstroke .475 g .98077 .5956 m .97106 .60114 L .96958 .60198 L .96134 .60675 L .95289 .61169 L .95163 .61243 L .94192 .6182 L .93657 .62141 L .93221 .62404 L .92249 .62997 L .92063 .63112 L .91278 .63598 L .90504 .64083 L .90307 .64208 L .89336 .64826 L .8898 .65054 L .88364 .65453 L .87489 .66026 L .87393 .66089 L .86422 .66735 L .86031 .66997 L .85451 .6739 L .84604 .67968 L .84479 .68054 L .83508 .68729 L .83208 .68939 L .82537 .69414 L .81841 .69911 L .81566 .70109 L .80594 .70814 L .80502 .70882 L .79623 .71531 L .79191 .71853 L .78652 .72259 L .77907 .72824 L .77681 .72998 L .76709 .73748 L .76649 .73796 L .75738 .74511 L .75415 .74767 L .74767 .75286 L .74207 .75738 L .73796 .76073 L .73021 .76709 L .72824 .76873 L .71859 .77681 L .71853 .77686 L .70882 .78512 L .7072 .78652 L .69911 .79353 L .69602 .79623 L .68939 .80207 L .68505 .80594 L .67968 .81076 L .67428 .81566 L .66997 .8196 L .66372 .82537 L .66026 .82859 L .65334 .83508 L .65054 .83773 L .64316 .84479 L .64083 .84704 L .63316 .85451 L .63112 .85651 L .62334 .86422 L .62141 .86615 L .61369 .87393 L .61169 .87596 L .60421 .88364 L .60198 .88596 L .5949 .89336 L .59227 .89613 L .58575 .90307 L .58256 .90649 L .57675 .91278 L .57284 .91705 L .56791 .92249 L .56313 .92781 L .55921 .93221 L .55342 .93877 L .55066 .94192 L .54371 .94994 L .54225 .95163 L .53399 .96133 L .53398 .96134 L .52584 .97106 L .52428 .97294 L .51783 .98077 L .98077 .98077 L F 0 g .98077 .5956 m .97106 .60114 L .96958 .60198 L .96134 .60675 L .95289 .61169 L .95163 .61243 L .94192 .6182 L .93657 .62141 L .93221 .62404 L .92249 .62997 L .92063 .63112 L .91278 .63598 L .90504 .64083 L .90307 .64208 L .89336 .64826 L .8898 .65054 L .88364 .65453 L .87489 .66026 L .87393 .66089 L .86422 .66735 L .86031 .66997 L .85451 .6739 L .84604 .67968 L .84479 .68054 L .83508 .68729 L .83208 .68939 L .82537 .69414 L .81841 .69911 L .81566 .70109 L .80594 .70814 L .80502 .70882 L .79623 .71531 L .79191 .71853 L .78652 .72259 L .77907 .72824 L .77681 .72998 L .76709 .73748 L .76649 .73796 L .75738 .74511 L .75415 .74767 L .74767 .75286 L .74207 .75738 L .73796 .76073 L .73021 .76709 L .72824 .76873 L .71859 .77681 L .71853 .77686 L .70882 .78512 L .7072 .78652 L .69911 .79353 L Mistroke .69602 .79623 L .68939 .80207 L .68505 .80594 L .67968 .81076 L .67428 .81566 L .66997 .8196 L .66372 .82537 L .66026 .82859 L .65334 .83508 L .65054 .83773 L .64316 .84479 L .64083 .84704 L .63316 .85451 L .63112 .85651 L .62334 .86422 L .62141 .86615 L .61369 .87393 L .61169 .87596 L .60421 .88364 L .60198 .88596 L .5949 .89336 L .59227 .89613 L .58575 .90307 L .58256 .90649 L .57675 .91278 L .57284 .91705 L .56791 .92249 L .56313 .92781 L .55921 .93221 L .55342 .93877 L .55066 .94192 L .54371 .94994 L .54225 .95163 L .53399 .96133 L .53398 .96134 L .52584 .97106 L .52428 .97294 L .51783 .98077 L Mfstroke .4 g .98077 .63234 m .97106 .63812 L .96655 .64083 L .96134 .64398 L .95163 .64992 L .95063 .65054 L .94192 .65595 L .93505 .66026 L .93221 .66205 L .92249 .66825 L .91982 .66997 L .91278 .67453 L .90491 .67968 L .90307 .6809 L .89336 .68735 L .89032 .68939 L .88364 .69391 L .87604 .69911 L .87393 .70055 L .86422 .7073 L .86205 .70882 L .85451 .71414 L .84835 .71853 L .84479 .72109 L .83508 .72814 L .83493 .72824 L .82537 .73529 L .82179 .73796 L .81566 .74255 L .8089 .74767 L .80594 .74993 L .79627 .75738 L .79623 .75741 L .78652 .76501 L .78389 .76709 L .77681 .77274 L .77175 .77681 L .76709 .78058 L .75984 .78652 L .75738 .78855 L .74816 .79623 L .74767 .79664 L .73796 .80487 L .73669 .80594 L .72824 .81322 L .72545 .81566 L .71853 .82172 L .71441 .82537 L .70882 .83036 L .70357 .83508 L .69911 .83914 L .69293 .84479 L .68939 .84806 L .68248 .85451 L .67968 .85714 L .67222 .86422 L .66997 .86638 L .66214 .87393 L .66026 .87577 L .65224 .88364 L .65054 .88532 L .64251 .89336 L .64083 .89505 L .63295 .90307 L .63112 .90494 L .62355 .91278 L .62141 .91501 L .6143 .92249 L .61169 .92527 L .60522 .93221 L .60198 .93571 L .59628 .94192 L .59227 .94634 L .5875 .95163 L .58256 .95717 L .57886 .96134 L .57284 .9682 L .57035 .97106 L .56313 .97943 L .56199 .98077 L .98077 .98077 L F 0 g .98077 .63234 m .97106 .63812 L .96655 .64083 L .96134 .64398 L .95163 .64992 L .95063 .65054 L .94192 .65595 L .93505 .66026 L .93221 .66205 L .92249 .66825 L .91982 .66997 L .91278 .67453 L .90491 .67968 L .90307 .6809 L .89336 .68735 L .89032 .68939 L .88364 .69391 L .87604 .69911 L .87393 .70055 L .86422 .7073 L .86205 .70882 L .85451 .71414 L .84835 .71853 L .84479 .72109 L .83508 .72814 L .83493 .72824 L .82537 .73529 L .82179 .73796 L .81566 .74255 L .8089 .74767 L .80594 .74993 L .79627 .75738 L .79623 .75741 L .78652 .76501 L .78389 .76709 L .77681 .77274 L .77175 .77681 L .76709 .78058 L .75984 .78652 L .75738 .78855 L .74816 .79623 L .74767 .79664 L .73796 .80487 L .73669 .80594 L .72824 .81322 L .72545 .81566 L .71853 .82172 L .71441 .82537 L .70882 .83036 L .70357 .83508 L Mistroke .69911 .83914 L .69293 .84479 L .68939 .84806 L .68248 .85451 L .67968 .85714 L .67222 .86422 L .66997 .86638 L .66214 .87393 L .66026 .87577 L .65224 .88364 L .65054 .88532 L .64251 .89336 L .64083 .89505 L .63295 .90307 L .63112 .90494 L .62355 .91278 L .62141 .91501 L .6143 .92249 L .61169 .92527 L .60522 .93221 L .60198 .93571 L .59628 .94192 L .59227 .94634 L .5875 .95163 L .58256 .95717 L .57886 .96134 L .57284 .9682 L .57035 .97106 L .56313 .97943 L .56199 .98077 L Mfstroke .325 g .98077 .66908 m .97932 .66997 L .97106 .67511 L .96378 .67968 L .96134 .68122 L .95163 .68742 L .94856 .68939 L .94192 .6937 L .93366 .69911 L .93221 .70007 L .92249 .70652 L .91908 .70882 L .91278 .71307 L .90479 .71853 L .90307 .71972 L .89336 .72645 L .8908 .72824 L .88364 .73329 L .87708 .73796 L .87393 .74022 L .86422 .74725 L .86365 .74767 L .85451 .75439 L .85048 .75738 L .84479 .76163 L .83756 .76709 L .83508 .76898 L .82537 .77644 L .8249 .77681 L .81566 .78402 L .81248 .78652 L .80594 .79171 L .8003 .79623 L .79623 .79951 L .78834 .80594 L .78652 .80744 L .77681 .8155 L .77661 .81566 L .76709 .82368 L .7651 .82537 L .75738 .83198 L .7538 .83508 L .74767 .84043 L .7427 .84479 L .73796 .849 L .73181 .85451 L .72824 .85772 L .72111 .86422 L .71853 .86658 L .71059 .87393 L .70882 .87559 L .70027 .88364 L .69911 .88475 L .69012 .89336 L .68939 .89406 L .68014 .90307 L .67968 .90352 L .67034 .91278 L .66997 .91315 L .6607 .92249 L .66026 .92295 L .65123 .93221 L .65054 .93291 L .64191 .94192 L .64083 .94305 L .63275 .95163 L .63112 .95337 L .62373 .96134 L .62141 .96388 L .61487 .97106 L .61169 .97457 L .60614 .98077 L .98077 .98077 L F 0 g .98077 .66908 m .97932 .66997 L .97106 .67511 L .96378 .67968 L .96134 .68122 L .95163 .68742 L .94856 .68939 L .94192 .6937 L .93366 .69911 L .93221 .70007 L .92249 .70652 L .91908 .70882 L .91278 .71307 L .90479 .71853 L .90307 .71972 L .89336 .72645 L .8908 .72824 L .88364 .73329 L .87708 .73796 L .87393 .74022 L .86422 .74725 L .86365 .74767 L .85451 .75439 L .85048 .75738 L .84479 .76163 L .83756 .76709 L .83508 .76898 L .82537 .77644 L .8249 .77681 L .81566 .78402 L .81248 .78652 L .80594 .79171 L .8003 .79623 L .79623 .79951 L .78834 .80594 L .78652 .80744 L .77681 .8155 L .77661 .81566 L .76709 .82368 L .7651 .82537 L .75738 .83198 L .7538 .83508 L .74767 .84043 L .7427 .84479 L .73796 .849 L .73181 .85451 L .72824 .85772 L .72111 .86422 L .71853 .86658 L .71059 .87393 L Mistroke .70882 .87559 L .70027 .88364 L .69911 .88475 L .69012 .89336 L .68939 .89406 L .68014 .90307 L .67968 .90352 L .67034 .91278 L .66997 .91315 L .6607 .92249 L .66026 .92295 L .65123 .93221 L .65054 .93291 L .64191 .94192 L .64083 .94305 L .63275 .95163 L .63112 .95337 L .62373 .96134 L .62141 .96388 L .61487 .97106 L .61169 .97457 L .60614 .98077 L Mfstroke .25 g .98077 .70581 m .9761 .70882 L .97106 .71209 L .96134 .71846 L .96123 .71853 L .95163 .72491 L .94666 .72824 L .94192 .73145 L .93238 .73796 L .93221 .73808 L .92249 .7448 L .91839 .74767 L .91278 .75162 L .90468 .75738 L .90307 .75854 L .89336 .76555 L .89124 .76709 L .88364 .77266 L .87805 .77681 L .87393 .77988 L .86512 .78652 L .86422 .7872 L .85451 .79464 L .85244 .79623 L .84479 .80218 L .83999 .80594 L .83508 .80983 L .82778 .81566 L .82537 .8176 L .8158 .82537 L .81566 .82548 L .80594 .83349 L .80403 .83508 L .79623 .84162 L .79248 .84479 L .78652 .84987 L .78113 .85451 L .77681 .85826 L .76999 .86422 L .76709 .86677 L .75904 .87393 L .75738 .87542 L .74829 .88364 L .74767 .88421 L .73796 .89314 L .73773 .89336 L .72824 .90222 L .72734 .90307 L .71853 .91144 L .71714 .91278 L .70882 .92082 L .7071 .92249 L .69911 .93035 L .69724 .93221 L .68939 .94005 L .68754 .94192 L .67968 .9499 L .678 .95163 L .66997 .95993 L .66861 .96134 L .66026 .97013 L .65938 .97106 L .65054 .9805 L .6503 .98077 L .98077 .98077 L F 0 g .98077 .70581 m .9761 .70882 L .97106 .71209 L .96134 .71846 L .96123 .71853 L .95163 .72491 L .94666 .72824 L .94192 .73145 L .93238 .73796 L .93221 .73808 L .92249 .7448 L .91839 .74767 L .91278 .75162 L .90468 .75738 L .90307 .75854 L .89336 .76555 L .89124 .76709 L .88364 .77266 L .87805 .77681 L .87393 .77988 L .86512 .78652 L .86422 .7872 L .85451 .79464 L .85244 .79623 L .84479 .80218 L .83999 .80594 L .83508 .80983 L .82778 .81566 L .82537 .8176 L .8158 .82537 L .81566 .82548 L .80594 .83349 L .80403 .83508 L .79623 .84162 L .79248 .84479 L .78652 .84987 L .78113 .85451 L .77681 .85826 L .76999 .86422 L .76709 .86677 L .75904 .87393 L .75738 .87542 L .74829 .88364 L .74767 .88421 L .73796 .89314 L .73773 .89336 L .72824 .90222 L .72734 .90307 L .71853 .91144 L .71714 .91278 L Mistroke .70882 .92082 L .7071 .92249 L .69911 .93035 L .69724 .93221 L .68939 .94005 L .68754 .94192 L .67968 .9499 L .678 .95163 L .66997 .95993 L .66861 .96134 L .66026 .97013 L .65938 .97106 L .65054 .9805 L .6503 .98077 L Mfstroke 0 0 0 r .055 w .57308 .57308 Mdot 1 0 0 r .0325 w .01923 .01923 Mdot .21154 .21154 Mdot .98077 .98077 Mdot .21334 .21334 Mdot .21535 .21535 Mdot .59806 .59806 Mdot .33761 .33761 Mdot .51124 .51124 Mdot .53181 .53181 Mdot .53251 .53251 Mdot .56529 .56529 Mdot .58713 .58713 Mdot .56532 .56532 Mdot .56535 .56535 Mdot .57624 .57624 Mdot .56655 .56655 Mdot .56728 .56728 Mdot .57176 .57176 Mdot .57475 .57475 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57326 .57326 Mdot .5722 .5722 Mdot .5729 .5729 Mdot .57291 .57291 Mdot .57314 .57314 Mdot .57294 .57294 Mdot .57295 .57295 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57309 .57309 Mdot .57305 .57305 Mdot .57308 .57308 Mdot .57306 .57306 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57308 .57308 Mdot .57307 .57307 Mdot .57308 .57308 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot 0 1 0 r .02 w .01923 .01923 Mdot .01923 .01923 Mdot .01923 .01923 Mdot .01923 .01923 Mdot .21154 .21154 Mdot .21154 .21154 Mdot .21154 .21154 Mdot .21154 .21154 Mdot .98077 .98077 Mdot .98077 .98077 Mdot .98077 .98077 Mdot .98077 .98077 Mdot .21334 .21334 Mdot .21334 .21334 Mdot .21334 .21334 Mdot .21334 .21334 Mdot .21535 .21535 Mdot .21535 .21535 Mdot .21535 .21535 Mdot .21535 .21535 Mdot .59806 .59806 Mdot .59806 .59806 Mdot .59806 .59806 Mdot .59806 .59806 Mdot .33761 .33761 Mdot .33761 .33761 Mdot .33761 .33761 Mdot .33761 .33761 Mdot .51124 .51124 Mdot .51124 .51124 Mdot .51124 .51124 Mdot .51124 .51124 Mdot .53181 .53181 Mdot .53181 .53181 Mdot .53181 .53181 Mdot .53181 .53181 Mdot .53251 .53251 Mdot .53251 .53251 Mdot .53251 .53251 Mdot .53251 .53251 Mdot .56529 .56529 Mdot .56529 .56529 Mdot .56529 .56529 Mdot .56529 .56529 Mdot .58713 .58713 Mdot .58713 .58713 Mdot .58713 .58713 Mdot .58713 .58713 Mdot .56532 .56532 Mdot .56532 .56532 Mdot .56532 .56532 Mdot .56532 .56532 Mdot .56535 .56535 Mdot .56535 .56535 Mdot .56535 .56535 Mdot .56535 .56535 Mdot .57624 .57624 Mdot .57624 .57624 Mdot .57624 .57624 Mdot .57624 .57624 Mdot .56655 .56655 Mdot .56655 .56655 Mdot .56655 .56655 Mdot .56655 .56655 Mdot .56728 .56728 Mdot .56728 .56728 Mdot .56728 .56728 Mdot .56728 .56728 Mdot .57176 .57176 Mdot .57176 .57176 Mdot .57176 .57176 Mdot .57176 .57176 Mdot .57475 .57475 Mdot .57475 .57475 Mdot .57475 .57475 Mdot .57475 .57475 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57177 .57177 Mdot .57326 .57326 Mdot .57326 .57326 Mdot .57326 .57326 Mdot .57326 .57326 Mdot .5722 .5722 Mdot .5722 .5722 Mdot .5722 .5722 Mdot .5722 .5722 Mdot .5729 .5729 Mdot .5729 .5729 Mdot .5729 .5729 Mdot .5729 .5729 Mdot .57291 .57291 Mdot .57291 .57291 Mdot .57291 .57291 Mdot .57291 .57291 Mdot .57314 .57314 Mdot .57314 .57314 Mdot .57314 .57314 Mdot .57314 .57314 Mdot .57294 .57294 Mdot .57294 .57294 Mdot .57294 .57294 Mdot .57294 .57294 Mdot .57295 .57295 Mdot .57295 .57295 Mdot .57295 .57295 Mdot .57295 .57295 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57309 .57309 Mdot .57309 .57309 Mdot .57309 .57309 Mdot .57309 .57309 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57305 .57305 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57306 .57306 Mdot .57306 .57306 Mdot .57306 .57306 Mdot .57306 .57306 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57307 .57307 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot .57308 .57308 Mdot 0 0 1 r .5 Mabswid .01923 .01923 m .01923 .01923 L s .015 w .01923 .01923 Mdot .01923 .01923 Mdot % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 288}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooo ool5o`00047ooooo00?o0000ooooooooool0>oooool01Ol0003ooooooooooooooooo000000Gooooo 000@ooooo`03o`000?oooooooooo03oooooo0_l0000nooooo`04o`000?ooooooooooo`0004;ooooo 00?o0000ooooooooool0>oooool4o`0000Kooooo000=ooooo`05o`000?ooooooooooooooool00000 @_ooool00ol0003oooooooooo`0looooo`03o`000?oooooo000003kooooo1?l0000nooooo`03o`00 0?oooooooooo00Oooooo000=ooooo`05o`000?ooooooooooooooool00000?_ooool01Ol0003ooooo oooooooooooo000003oooooo0_l0000nooooo`03o`000?oooooooooo043ooooo00?o0000oooooooo ool01_ooool000kooooo0ol00010ooooo`?o0000@Oooool00ol0003oooooooooo`0looooo`Go0000 ?oooool2o`0000Kooooo003oooooob7ooooo003oooooob7ooooo003oooooob7ooooo003oooooob7o oooo003oooooob7ooooo000;oooooooo00004_l00004ooooo`002oooool00ol0003oooooooooo`02 ooooo`03o`000?oooooooooo00_ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0: ooooo`03o`000?oooooooooo00[ooooo00?o0000ooooooooool02oooool00ol0003oooooooooo`0: ooooo`03o`000?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0; ooooo`03o`000?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0: ooooo`03o`000?oooooooooo00_ooooo00?o0000ooooooooool02_ooool00ol0003oooooooooo`0: ooooo`03o`000?oooooooooo00[ooooo00?o0000ooooooooool02oooool00ol0003oooooooooo`0: ooooo`03o`000?oooooooooo00[ooooo00?o0000ooooooooool02_ooool00ol0003oooooo`000004 ooooo`002oooool01?l0003oooooooooooooool4ool0043ooooo00?o0000ooooooooool0?oooool0 0ol0003oooooooooo`0oooooo`03o`000?oooooooooo03oooooo00?o0000ooooool000001?ooool0 00?ooooo0ol00005ooooo`04o`000?ooooooooooool000?o0?l00_oo003oooooo`Sooooo00?o0000 ooooooooool00_ooool000Cooooo00?o0000ooooooooool01?ooool00ol0003oooooool00002o`3o 00;o003o00?o0?l0ool00?oo0000ooooool7ooooo`03o`000?oooooooooo00;ooooo0004ooooo`03 o`000?oooooooooo00Cooooo0_l000000ooo003o0?l0o`00o`03o`00o`;oo`00ooooool6ooooo`;o 00001?ooool000Cooooo00?o0000ooooooooool01?ooool01?l0003oooooool00?l0o`04o`00o`;o o`00ooooool7ooooo`03o`000?oooooooooo00;ooooo0004ooooo`03o`000?oooooooooo00Cooooo 00Go0000oooooooo003oo`00o`3o0002o`00o`?oo`00ooooool7ooooo`03o`000?oooooooooo00;o oooo0003ooooo`;o00001_ooool00ol0003oooooooooo`06ool00?oooooo2?ooool00ol0003ooooo ooooo`02ooooo`001?ooool00ol0003oooooooooo`04ooooo`04o`000?ooooooooooooooo`Coo`00 ooooool9ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_oo ool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000 ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo 00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`00 2oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o 0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooo oooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3ooooo o`kooooo00?o0000ooooooooool00_ooool000_ooooo0_l0003oooooo`kooooo0_l00004ooooo`00 2oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o 0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooo oooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3ooooo o`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03 o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003ooooo ooooo`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_oo ool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;oooo o`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003o ooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0 ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_oo ool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000 ooooooooool00_ooool000_ooooo0_l0003oooooo`kooooo0_l00004ooooo`002oooool00ol0003o ooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0 ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_oo ool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000 ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo 00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`00 2oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o 0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooo oooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3ooooo o`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03 o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003ooooo ooooo`02ooooo`002oooool2o`000?oooooo3_ooool2o`0000Cooooo000;ooooo`03o`000?oooooo oooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3ooooo o`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03 o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003ooooo ooooo`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_oo ool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;oooo o`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003o ooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0 =Oooool4ool00=Cooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0=?oo ool6ool00=?ooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooo`03o`00 0?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003ooooooooo o`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool0 00_ooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03 o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`000_ooool5o`0000Cooooo 00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo0003ooooo`04o`000?oo ooooooooo`0000Cooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo 0004ooooo`03o`000?oooooooooo00Cooooo0ol0003oooooo`gooooo0_l00004ooooo`001Oooool0 0ol0003oooooooooo`03ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02 ooooo`000_ooool01Ol0003ooooooooooooooooo000000Cooooo00?o0000ooooooooool0ooooool> ooooo`03o`000?oooooooooo00;ooooo0002ooooo`05o`000?ooooooooooooooool000001?ooool0 0ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000?ooooo0ol00005oooo o`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003o ooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0 ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_oo ool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000 ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo 00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`00 2oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o 0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooo oooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool2o`000?oooooo3_ooool2o`00 00Cooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`00 2oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_ooooo00?o 0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooo oooo05Oooooo1?oo002booooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo 05Kooooo0_oo0003o`3o0003ool00?oooooooooo0:oooooo00?o0000ooooooooool00_ooool000_o oooo00?o0000ooooooooool0EOooool2ool000Go0?l000?oo`00ooooooooool0[_ooool00ol0003o ooooooooo`02ooooo`002oooool00ol0003oooooooooo`1Eooooo`;oo`001Ol0o`000ooo003ooooo ooooo`2^ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo05Gooooo0_oo 0005o`3o0003ool00?oooooooooo0:kooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000 ooooooooool0EOooool3ool000?o0?l00_oo002`ooooo`03o`000?oooooooooo00;ooooo000;oooo o`03o`000?oooooooooo05Kooooo1_oo002aooooo`03o`000?oooooooooo00;ooooo000;ooooo`03 o`000?oooooooooo05Oooooo1?oo002booooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`00 0?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02ooooo`002oooool2o`000?oooooo3_oo ool2o`0000Cooooo000;ooooo`03o`000?oooooooooo0?oooooo3_ooool00ol0003oooooooooo`02 ooooo`002oooool00ol0003oooooooooo`3oooooo`kooooo00?o0000ooooooooool00_ooool000_o oooo00?o0000ooooooooool0ooooool>ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`00 0?oooooooooo0?oooooo2?ooool2o`0000Cooooo00?o0000ooooooooool00_ooool000_ooooo00?o 0000ooooooooool0ooooool5ooooo`?o000000?ok>c/ooooooooool00oooool00ol0003ooooooooo o`02ooooo`002oooool00ol0003oooooooooo`3oooooo`?ooooo0_l00004onc/k0Gooooo00?o0000 ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ooooool1ooooo`;o00001_o/k>`5oooo o`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?oooooo0_l00007onc/k0Go oooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0oOooool2o`0000Wok>c/ 1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3iooooo`Co00002oo/ k>`5ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0?Oooooo0_l0000? onc/k0Gooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0mOooool2o`00 017ok>c/1Oooool00ol0003oooooooooo`02ooooo`002oooool2o`000??ooooo0ol0000Conc/k0Co oooo0_l00004ooooo`002oooool00ol0003oooooooooo`3aooooo`03o`000?o/k>cok>c/01?ok>c/ 0_l00004ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0>oooooo0_l0 000Donc/k0;o000000?ofMWIooooooooool00oooool00ol0003oooooooooo`02ooooo`002oooool0 0ol0003oooooooooo`3]ooooo`;o00004oo/k>`4o`0000;ofMWI1Oooool00ol0003oooooooooo`02 ooooo`002oooool00ol0003oooooooooo`3Zooooo`?o00005?o/k>`00ol0003ofMWIomWIf@04omWI f@Gooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0j?ooool2o`0001Go k>c/0_l00007omWIf@Gooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0 ioooool00ol0003ok>c/onc/k00Conc/k0;o00002OoIfMT5ooooo`03o`000?oooooooooo00;ooooo 000;ooooo`03o`000?oooooooooo0>Gooooo0_l0000Conc/k0?o00002ooIfMT5ooooo`03o`000?oo oooooooo00;ooooo000;ooooo`03o`000?oooooooooo0>;ooooo0ol0000Conc/k0;o00003_oIfMT5 ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0=oooooo0ol0000Eonc/ k003o`000?oIfMWofMWI00kofMWI1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003o ooooooooo`3Nooooo`03o`000?o/k>cok>c/01?ok>c/0ol0000AomWIf@Gooooo00?o0000oooooooo ool00_ooool000_ooooo00?o0000ooooooooool0gOooool2o`0001?ok>c/0_l0000ComWIf@;o0000 1?ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`3Jooooo`?o00004_o/ k>`3o`0001?ofMWI0_l000000oo6a/Koooooooooo`03ooooo`03o`000?oooooooooo00;ooooo000; ooooo`;o0000fOooool2o`0001?ok>c/0_l0000EomWIf@04o`000?o6a/Koa/K6olK6aPCooooo0_l0 0004ooooo`002oooool00ol0003oooooooooo`3Gooooo`03o`000?o/k>cok>c/01;ok>c/00?o0000 omWIfOoIfMT04ooIfMT2o`0000Coa/K61Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0 003oooooooooo`3Eooooo`;o00004oo/k>`2o`0001?ofMWI0ol00006olK6aPGooooo00?o0000oooo ooooool00_ooool000_ooooo00?o0000ooooooooool0doooool2o`0001?ok>c/0_l0000ComWIf@;o 00002Oo6a/H5ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0=;ooooo 00?o0000onc/k?o/k>`04_o/k>`00ol0003ofMWIomWIf@0@omWIf@?o00002oo6a/H5ooooo`03o`00 0?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0c/0_l0000ComWIf@;o00003oo6a/H5ooooo`03o`000?oooooo oooo00;ooooo000;ooooo`03o`000?oooooooooo0`04Oo/k>`2o`00 01?ofMWI0_l0000AolK6aPGooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000oooooooo ool0b_ooool2o`0001?ok>c/00?o0000omWIfOoIfMT04?oIfMT3o`0001;oa/K60_l00004ooooo`03 o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo0cooooooooool00oooool00ol0003ooooo ooooo`02ooooo`002oooool00ol0003oooooooooo`37ooooo`03o`000?o/k>cok>c/017ok>c/0_l0 000ComWIf@03o`000?o6a/Koa/K6017oa/K600Co0000ok>c/onc/k?o/k>c1Oooool00ol0003ooooo ooooo`02ooooo`000oooool3o`0000Gooooo00?o0000ooooooooool0aOooool2o`0001?ok>c/0_l0 000AomWIf@?o00004_o6a/H2o`0000Co/k>c1Oooool00ol0003oooooooooo`02ooooo`000_ooool0 1Ol0003ooooooooooooooooo000000Cooooo00?o0000ooooooooool0Q_ooool4ool003Wooooo0_l0 000Conc/k0;o00004_oIfMT00ol0003oa/K6olK6aP0@olK6aP?o00001_nc/k<5ooooo`03o`000?oo oooooooo00;ooooo0006ooooo`03o`000?oooooooooo00;ooooo00?o0000ooooooooool0QOooool2 ool000?o0?l000?oo`00ooooooooool0=Oooool00ol0003ok>c/onc/k00@onc/k0?o00004OoIfMT3 o`00017oa/K60_l00009ok>c/`Gooooo00?o0000ooooooooool00_ooool000Cooooo0_l00005oooo o`?o0000Q?ooool2ool000Go0?l000?oo`00ooooooooool0<_ooool2o`0001;ok>c/00?o0000omWI fOoIfMT04OoIfMT00ol0003oa/K6olK6aP0AolK6aP03o`000?nc/k?o/k>c00Wo/k>c1?ooool2o`00 00Cooooo0006ooooo`03o`000?oooooooooo00;ooooo00?o0000ooooooooool0Q?ooool2ool000Go 0?l000?oo`00ooooooooool0c/onc/k00@onc/k0;o00004ooIfMT00ol0003o a/K6olK6aP0@olK6aP;o00003?nc/k<5ooooo`03o`000?oooooooooo00;ooooo0002ooooo`05o`00 0?ooooooooooooooool000001?ooool00ol0003oooooooooo`24ooooo`;oo`001Ol0o`000ooo003o ooooooooo`0_ooooo`;o00004Oo/k>`2o`0001;ofMWI0ol0000AolK6aP;o00003_nc/k<5ooooo`03 o`000?oooooooooo00;ooooo0003ooooo`?o00001Oooool00ol0003oooooooooo`24ooooo`?oo`00 0ol0o`02ool002oooooo0_l0000Bonc/k003o`000?oIfMWofMWI013ofMWI0_l0000ColK6aP03o`00 0?nc/k?o/k>c00ko/k>c1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003ooooooooo o`25ooooo`Koo`0000?oooooool00?oo00000_oo000[ooooo`03o`000?o/k>cok>c/013ok>c/00?o 0000omWIfOoIfMT04?oIfMT00ol0003oa/K6olK6aP0AolK6aP;o00004Onc/k<00ol0003ooooooooo o`02ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo08Kooooo1?oo0000 0oooooooo`00ool00003o`3o0003ool00?oooooooooo02Gooooo0ol0000Aonc/k0;o00004OoIfMT2 o`00017oa/K60ol0000@ok>c/`?o00001Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0 003oooooooooo`2:ooooo`;oo`001Ol0o`000ooo003oooooooooo`0Sooooo`03o`000?o/k>cok>c/ 013ok>c/0_l0000AomWIf@;o00004Oo6a/H2o`0001;o/k>c00Co0000oinOWonOWiooWinO1Oooool0 0ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`2:ooooo`;oo`001Ol0o`000ooo 003oooooooooo`0Rooooo`03o`000?o/k>cok>c/00ook>c/0_l0000BomWIf@03o`000?o6a/Koa/K6 013oa/K600?o0000ok>c/onc/k<03onc/k<3o`0000CoWinO1Oooool00ol0003oooooooooo`02oooo o`002oooool00ol0003oooooooooo`2:ooooo`;oo`001Ol0o`000ooo003oooooooooo`0Qooooo`03 o`000?o/k>cok>c/00ook>c/00?o0000omWIfOoIfMT04?oIfMT2o`00017oa/K60_l0000Aok>c/`03 o`000?nOWiooWinO00GoWinO1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003ooooo ooooo`2:ooooo`?oo`000ol0o`02ool0027ooooo0_l0000@onc/k0;o00004OoIfMT2o`00017oa/K6 0_l0000Bok>c/`03o`000?nOWiooWinO00KoWinO1Oooool00ol0003oooooooooo`02ooooo`002ooo ool00ol0003oooooooooo`2;ooooo`Koo`007oooool3o`00017ok>c/00?o0000omWIfOoIfMT04?oI fMT00ol0003oa/K6olK6aP0?olK6aP;o00004Onc/k<3o`0000WoWinO1Oooool00ol0003ooooooooo o`02ooooo`002oooool00ol0003oooooooooo`2c/onc/k00@ onc/k0;o00004OoIfMT2o`00013oa/K60_l0000Aok>c/`;o00003?nOWil5ooooo`03o`000?oooooo oooo00;ooooo000;ooooo`03o`000?oooooooooo09Kooooo1_l0000Booooo`03o`000?o/k>cok>c/ 013ok>c/00?o0000omWIfOoIfMT03ooIfMT2o`00017oa/K600?o0000ok>c/onc/k<04?nc/k<00ol0 003oWinOoinOW`0`2o`00017ofMWI0_l0000AolK6aP;o00004?nc/k<2o`0000oo WinO1?ooool2o`0000Cooooo000;ooooo`03o`000?oooooooooo09Cooooo0_oo0003o`3o00;oo`00 0ol0000=ooooo`;o00004?o/k>`2o`00017ofMWI0_l0000@olK6aP?o00004?nc/k<2o`00013oWinO 0_l00004ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo09?ooooo0_oo 0005o`3o00;oo`000ol0000;ooooo`03o`000?o/k>cok>c/00ook>c/00?o0000omWIfOoIfMT04?oI fMT00ol0003oa/K6olK6aP0?olK6aP03o`000?nc/k?o/k>c013o/k>c00?o0000oinOWonOWil03_nO Wil2o`000003ohb`0 0ol0003ofMWIomWIf@0?omWIf@;o00004?o6a/H2o`00017o/k>c0_l0000@oinOW`04o`000?ncok>c/013ok>c/00?o0000 omWIfOoIfMT03_oIfMT2o`00017oa/K600?o0000ok>c/onc/k<03onc/k<2o`00013oWinO0_l00004 ohb`03oo/k>`2o`00 013ofMWI0_l0000@olK6aP;o00004Onc/k<00ol0003oWinOoinOW`0>oinOW`;o00001_ncok>c/00kok>c/0_l0000@omWIf@;o 00004?o6a/H2o`00017o/k>c0_l0000@oinOW`03o`000?n`00ol0003ofMWIomWIf@0?omWIf@03o`000?o6a/Koa/K600oo a/K600?o0000ok>c/onc/k<03_nc/k<3o`0000ooWinO0ol00009ohbc/`03o`000?nOWiooWinO00koWinO 0_l0000c/00?o0000omWIfOoIfMT03ooIfMT00ol0003oa/K6olK6 aP0?olK6aP;o00003onc/k<2o`00013oWinO00?o0000ohb`02oo/k>`2o`00017ofMWI00?o0000olK6a_o6a/H03_o6a/H2o`0000oo/k>c0_l0000A oinOW`03o`000?ncok>c/00Wok>c/00?o0000omWI fOoIfMT04?oIfMT00ol0003oa/K6olK6aP0>olK6aP03o`000?nc/k?o/k>c00ko/k>c00?o0000oinO WonOWil04?nOWil00ol0003oS8bcok>c/00So k>c/00?o0000omWIfOoIfMT03ooIfMT2o`00013oa/K600?o0000ok>c/onc/k<03_nc/k<00ol0003o WinOoinOW`0?oinOW`;o00003on`01oo/k>`00ol0003ofMWI omWIf@0=omWIf@?o00003oo6a/H3o`0000oo/k>c0_l0000?oinOW`?o00003on`2o`0000oofMWI00?o0000olK6a_o6a/H03oo6a/H00ol0003o/k>cok>c /`0>ok>c/`;o00004?nOWil00ol0003oS8bohb`0 0ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600koa/K60_l0000?ok>c/`;o00004?nOWil2 o`00013oS8b<00?o0000ogUiNOmiNGT01?miNGT5ooooo`03o`000?oooooooooo00;ooooo000;oooo o`03o`000?oooooooooo09Oooooo00?o0000onc/k?o/k>`01?o/k>`4ool000Kok>c/0_l0000@omWI f@03o`000?o6a/Koa/K600koa/K600?o0000ok>c/onc/k<03_nc/k<00ol0003oWinOoinOW`0>oinO W`;o00004?ncok>c/00kok>c/00?o0000omWIfOoIfMT03ooIfMT00ol0003o a/K6olK6aP0>olK6aP03o`000?nc/k?o/k>c00ko/k>c00?o0000oinOWonOWil03_nOWil00ol0003o S8bohb`03_o/k>`00ol0003ofMWIomWIf@0>omWIf@;o0000 3oo6a/H2o`00013o/k>c00?o0000oinOWonOWil03OnOWil2o`00013oS8b<00?o0000ogUiNOmiNGT0 2OmiNGT5ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo09Cooooo00?o 0000onc/k?o/k>`03_o/k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600koa/K600?o 0000ok>c/onc/k<03_nc/k<2o`0000ooWinO00?o0000ohbco k>c/00kok>c/00?o0000omWIfOoIfMT03_oIfMT00ol0003oa/K6olK6aP0>olK6aP03o`000?nc/k?o /k>c00go/k>c0_l0000@oinOW`03o`000?nogUiN@Gooooo00?o0000 ooooooooool00_ooool000_ooooo00?o0000ooooooooool0T_ooool00ol0003ok>c/onc/k00=onc/ k0;o00003ooIfMT2o`0000ooa/K60_l0000?ok>c/`;o00003_nOWil3o`0000ooS8b<0_l0000>ogUi N@;o00001?ooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`2@ooooo`;o 00003oo/k>`00ol0003ofMWIomWIf@0>omWIf@03o`000?o6a/Koa/K600goa/K60_l0000?ok>c/`;o 00003onOWil00ol0003oS8bohb`0 3_o/k>`00ol0003ofMWIomWIf@0=omWIf@;o00003oo6a/H00ol0003o/k>cok>c/`0>ok>c/`03o`00 0?nOWiooWinO00goWinO0_l0000@ohbc/00?o 0000omWIfOoIfMT03OoIfMT00ol0003oa/K6olK6aP0>olK6aP;o00003_nc/k<2o`0000ooWinO00?o 0000ohbc/onc/k00>onc/k003o`000?oIfMWo fMWI00gofMWI00?o0000olK6a_o6a/H03_o6a/H00ol0003o/k>cok>c/`0=ok>c/`03o`000?nOWioo WinO00koWinO00?o0000ohbc/00?o0000omWI fOoIfMT03OoIfMT00ol0003oa/K6olK6aP0=olK6aP;o00003_nc/k<2o`00013oWinO00?o0000ohb< S?nc/onc/k00>onc/k0;o00003ooIfMT00ol0003o a/K6olK6aP0=olK6aP03o`000?nc/k?o/k>c00go/k>c00?o0000oinOWonOWil03_nOWil2o`0000ko S8b<0_l0000?ogUiN@03o`000?mVIVKoIVIV00OoIVIV1Oooool00ol0003oooooooooo`02ooooo`00 2oooool00ol0003oooooooooo`29ooooo`03o`000?o/k>cok>c/00kok>c/00?o0000omWIfOoIfMT0 3_oIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc/k?o/k>c00go/k>c00?o0000oinOWonOWil0 3OnOWil2o`0000ooS8b<00?o0000ogUiNOmiNGT03_miNGT00ol0003oIVIVofIVIP08ofIVIPGooooo 00?o0000ooooooooool00_ooool000_ooooo00?o0000ooooooooool0ROooool00ol0003ok>c/onc/ k00c/onc/k<03Onc/k<2o`0000koWinO0_l0 000>ohbcok>c/00cok>c/00?o0000omWIfOoIfMT03_oIfMT0 0ol0003oa/K6olK6aP0=olK6aP;o00003_nc/k<2o`0000koWinO0_l0000?ohbonc/k003o`000?oIfMWofMWI00gofMWI0_l0000?olK6 aP03o`000?nc/k?o/k>c00go/k>c00?o0000oinOWonOWil03OnOWil00ol0003oS8bcok>c/00kok>c/00?o0000omWIfOoI fMT03OoIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc/k?o/k>c00co/k>c0_l0000>oinOW`;o 00003_n`0 3_o/k>`00ol0003ofMWIomWIf@0=omWIf@03o`000?o6a/Koa/K600goa/K600?o0000ok>c/onc/k<0 3?nc/k<00ol0003oWinOoinOW`0=oinOW`03o`000?ncok>c/00gok>c/0_l0000>omWIf@;o00003_o6 a/H2o`0000ko/k>c0_l0000>oinOW`03o`000?nogUiN@?o00003OmV IVH3o`0000?oDe=C1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`22 ooooo`03o`000?o/k>cok>c/00gok>c/00?o0000omWIfOoIfMT03OoIfMT00ol0003oa/K6olK6aP0= olK6aP03o`000?nc/k?o/k>c00go/k>c00?o0000oinOWonOWil03OnOWil00ol0003oS8bc/onc/k00=onc/k003o`000?oIfMWofMWI00gofMWI00?o0000olK6a_o6a/H03Oo6a/H00ol0 003o/k>cok>c/`0=ok>c/`03o`000?nOWiooWinO00goWinO00?o0000ohbonc/k003 o`000?oIfMWofMWI00cofMWI0_l0000>olK6aP;o00003_nc/k<2o`0000koWinO0_l0000>ohb`03?o/k>`2o`0000kofMWI 00?o0000olK6a_o6a/H03Oo6a/H00ol0003o/k>cok>c/`0=ok>c/`03o`000?nOWiooWinO00coWinO 0_l0000>ohbc/onc/k00cok>c/`0c/`;o00003_nO Wil00ol0003oS8b`03Oo/k>`00ol0003ofMWIomWIf@0c/onc/k<03?nc/k<00ol0003oWinOoinOW`0=oinOW`03o`000?nc/onc/k00=onc/k003o`000?oIfMWofMWI 00cofMWI00?o0000olK6a_o6a/H03Oo6a/H00ol0003o/k>cok>c/`0c/`03o`000?nOWiooWinO 00goWinO00?o0000ohbc/onc/k00c00_o/k>c0_l0000>oinOW`;o00003_nofIVIP03o`000?mCDe?oDe=C00coDe=C0_l00005ooooo`03o`000?oooooooooo00;o oooo000;ooooo`03o`000?oooooooooo07[ooooo00?o0000onc/k?o/k>`03?o/k>`00ol0003ofMWI omWIf@0c00?o0000oinOWonOWil03OnOWil00ol0003oS8b< ohbofIVIP;o00003OmCDe<2o`0000;o?clo 1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003oooooooooo`1iooooo`03o`000?o/ k>cok>c/00cok>c/00?o0000omWIfOoIfMT03?oIfMT00ol0003oa/K6olK6aP0=olK6aP03o`000?nc /k?o/k>c00co/k>c00?o0000oinOWonOWil03?nOWil2o`0000koS8b<0_l0000=ogUiN@03o`000?mV IVKoIVIV00coIVIV0_l0000=oe=CD`;o00001?lo?cl5ooooo`03o`000?oooooooooo00;ooooo000; ooooo`03o`000?oooooooooo07Sooooo00?o0000onc/k?o/k>`03Oo/k>`00ol0003ofMWIomWIf@0; omWIf@03o`000?o6a/Koa/K600goa/K600?o0000ok>c/onc/k<03Onc/k<00ol0003oWinOoinOW`0; oinOW`03o`000?ncok>c/00cok>c/0_l0000=omWIf@03o`000?o6a/Koa/K6 00goa/K600?o0000ok>c/onc/k<03Onc/k<00ol0003oWinOoinOW`0;oinOW`03o`000?nc/onc/k00c0_l0000=oinOW`03o`000?n`03?o/k>`00ol0003ofMWIomWIf@0=omWIf@03o`000?o6a/Koa/K600_oa/K6 00?o0000ok>c/onc/k<03Onc/k<00ol0003oWinOoinOW`0cok>c/00gok>c/00?o0000omWIfOoIfMT03?oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?nc /k?o/k>c00go/k>c00?o0000oinOWonOWil03?nOWil00ol0003oS8bcok>c/00cok>c/0_l0000=omWIf@;o00003Oo6a/H2o`0000go/k>c0_l0000= oinOW`;o00003On`03?o/k>`00ol0003ofMWIomWIf@0c/onc/k<03?nc/k<00ol0003oWinOoinOW`0`03?o/k>`00ol0003ofMWIomWIf@0c/onc/k<03?nc/k<00ol0003oWinOoinOW`0;oinOW`;o 00003Oncok>c/00cok>c/00?o0000omWIfOoIfMT02ooIfMT2o`0000go a/K600?o0000ok>c/onc/k<03?nc/k<00ol0003oWinOoinOW`0c/onc/k00;onc/k0;o00003OoIfMT00ol0003oa/K6olK6aP0c00co/k>c00?o0000oinOWonOWil03?nOWil00ol0003oS8bcok>c/00_ok>c/00?o0000omWIfOoIfMT03?oIfMT00ol0003oa/K6olK6 aP0c00co/k>c00?o0000oinOWonOWil02onOWil2o`0000goS8b<00?o 0000ogUiNOmiNGT02omiNGT2o`0000goIVIV0_l0000c/onc/k00cok>c/`0c/`03o`000?nOWiooWinO00_oWinO00?o0000ohbc/onc/k00cok>c/`0c/`03o`000?nOWiooWinO00_oWinO00?o0000ohb< S?nc/onc/k00;onc/k0;o00003OoIfMT00ol0003o a/K6olK6aP0;olK6aP;o00003Onc/k<2o`0000goWinO00?o0000ohbcok>c/00_ok>c/00?o0000omWIfOoIfMT0 3?oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00co/k>c00?o0000oinOWonOWil0 2onOWil2o`0000goS8b<00?o0000ogUiNOmiNGT02omiNGT2o`0000goIVIV00?o0000oe=CDomCDe<0 2omCDe<2o`0001Wo?clo1Oooool00ol0003oooooooooo`02ooooo`002oooool00ol0003ooooooooo o`1Zooooo`03o`000?o/k>cok>c/00_ok>c/00?o0000omWIfOoIfMT03?oIfMT00ol0003oa/K6olK6 aP0;olK6aP03o`000?nc/k?o/k>c00co/k>c00?o0000oinOWonOWil02onOWil00ol0003oS8b`03?o/k>`00ol0003ofMWIomWIf@0;omWIf@;o00003Oo6a/H0 0ol0003o/k>cok>c/`0;ok>c/`;o00003OnOWil00ol0003oS8bcok>c/00_ok>c/00?o0000omWIfOoIfMT02ooIfMT00ol0003oa/K6olK6aP0c00_o/k>c00?o0000oinOWonOWil02onOWil2o`0000goS8b<00?o0000ogUi NOmiNGT02omiNGT00ol0003oIVIVofIVIP0;ofIVIP03o`000?mCDe?oDe=C00coDe=C00?o0000oclo ?olo?cl06olo?cl5ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo06So oooo00?o0000onc/k?o/k>`02oo/k>`00ol0003ofMWIomWIf@0;omWIf@03o`000?o6a/Koa/K600co a/K600?o0000ok>c/onc/k<02onc/k<00ol0003oWinOoinOW`0;oinOW`03o`000?ncok>c/00_ok>c/00?o0000omWIfOoIfMT03?oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`00 0?nc/k?o/k>c00_o/k>c00?o0000oinOWonOWil02onOWil00ol0003oS8bcok>c/00_ok>c/00?o0000omWIfOoIfMT03?oIfMT00ol0003oa/K6olK6 aP0;olK6aP03o`000?nc/k?o/k>c00_o/k>c00?o0000oinOWonOWil02onOWil00ol0003oS8b`02oo/k>`2o`0000cofMWI0_l0000=olK6aP03o`000?nc/k?o /k>c00_o/k>c00?o0000oinOWonOWil02onOWil00ol0003oS8b`02oo/k>`00ol0003ofMWIomWIf@0;omWI f@03o`000?o6a/Koa/K600_oa/K60_l0000=ok>c/`03o`000?nOWiooWinO00_oWinO00?o0000ohb< S?ncok>c/00_ok>c/00?o0000omWIfOoIfMT02ooIfMT00ol0003o a/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00co/k>c00?o0000oinOWonOWil02onOWil00ol0003o S8bc/onc/k00;onc/k003o`000?oIfMWofMWI00_ofMWI00?o0000olK6a_o6a/H0 2oo6a/H00ol0003o/k>cok>c/`0;ok>c/`03o`000?nOWiooWinO00_oWinO00?o0000ohbc/onc/k00;onc/k003o`000?oIfMWofMWI00_ofMWI00?o 0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`0;ok>c/`03o`000?nOWiooWinO00_oWinO00?o 0000ohbc/onc/k00;onc/k003o`000?oIfMWo fMWI00_ofMWI00?o0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`0:ok>c/`;o00003?nOWil2 o`0000goS8b<00?o0000ogUiNOmiNGT02omiNGT00ol0003oIVIVofIVIP0:ofIVIP;o00003?mCDe<0 0ol0003o?clooclo?`0Woclo?`Gooooo00?o0000ooooooooool00_ooool000_ooooo00?o0000oooo ooooool0HOooool00ol0003ok>c/onc/k00;onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6 a_o6a/H02oo6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00coWinO00?o0000ohb< S?nc/onc/k00;onc/k003o`000?oIfMWofMWI00_o fMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00co WinO00?o0000ohbc/onc/k00:onc/k0;o0000 3?oIfMT2o`0000coa/K600?o0000ok>c/onc/k<02onc/k<00ol0003oWinOoinOW`0:oinOW`;o0000 3?nc/onc/ k00;onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H03?o6a/H00ol0003o/k>cok>c /`0:ok>c/`03o`000?nOWiooWinO00[oWinO00?o0000ohbc/onc/k00;onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02oo6a/H2 o`0000co/k>c00?o0000oinOWonOWil02_nOWil00ol0003oS8bc/onc/k00;onc/ k003o`000?oIfMWofMWI00_ofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`0;ok>c /`03o`000?nOWiooWinO00_oWinO00?o0000ohbc/onc/k00:onc/k003o`000?oIfMWofMWI00_ofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o /k>cok>c/`0;ok>c/`03o`000?nOWiooWinO00_oWinO00?o0000ohb`0 2_o/k>`00ol0003ofMWIomWIf@0;omWIf@03o`000?o6a/Koa/K600[oa/K60_l0000c/`03o`00 0?nOWiooWinO00[oWinO0_l0000c/onc/k00:onc/k003o`000?oIfMWofMWI00[ofMWI00?o 0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`0c/`03o`000?nOWiooWinO00[oWinO00?o 0000ohbc/onc/k00:onc/k003o`000?oIfMWo fMWI00[ofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`0c/`03o`000?nOWioo WinO00[oWinO00?o0000ohbc/onc/k00:onc/ k003o`000?oIfMWofMWI00_ofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`0:ok>c /`;o00003?nOWil00ol0003oS8bcok>c/00[ok>c/00?o0000omWIfOoIfMT02ooIfMT00ol0003o a/K6olK6aP0:olK6aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil02onOWil00ol0003o S8b`02_o/k>`00ol0003ofMWIomWIf@0:omWIf@;o0000 3?o6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00_oWinO00?o0000ohbc/onc/k00:onc/k003o`000?oIfMWofMWI00[ofMWI00?o 0000olK6a_o6a/H02oo6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00[oWinO00?o 0000ohbcok>c/00[ok>c/00?o0000omWIfOoIfMT02_oIfMT0 0ol0003oa/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil02_nOWil0 0ol0003oS8bcok>c/00[ok>c/00?o0000omWI fOoIfMT02_oIfMT00ol0003oa/K6olK6aP0;olK6aP03o`000?nc/k?o/k>c00Wo/k>c0_l0000;oinO W`;o00003?nolo?cl5ooooo`03o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo05Co oooo00?o0000onc/k?o/k>`02_o/k>`2o`0000_ofMWI0_l0000;olK6aP;o00002onc/k<00ol0003o WinOoinOW`0;oinOW`03o`000?nolo?cl5ooooo`03 o`000?oooooooooo00;ooooo000;ooooo`03o`000?oooooooooo05?ooooo00?o0000onc/k?o/k>`0 2_o/k>`00ol0003ofMWIomWIf@0:omWIf@03o`000?o6a/Koa/K600[oa/K600?o0000ok>c/onc/k<0 2_nc/k<00ol0003oWinOoinOW`0;oinOW`03o`000?n`02_o/k>`00ol0003ofMWIomWIf@0:omWIf@03o`000?o6a/Koa/K600[oa/K600?o 0000ok>c/onc/k<02_nc/k<00ol0003oWinOoinOW`0:oinOW`03o`000?nc/onc/k00:onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02_o6a/H0 0ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00[oWinO00?o0000ohbc/00?o0000omWIfOoIfMT02_oIfMT00ol0003oa/K6olK6aP0:olK6 aP03o`000?nc/k?o/k>c00[o/k>c00?o0000oinOWonOWil02_nOWil00ol0003oS8bc/onc/k00:onc/k003o`000?oIfMWofMWI00WofMWI00?o0000olK6a_o6a/H02oo6a/H00ol0003o /k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohb`0 2_o/k>`00ol0003ofMWIomWIf@09omWIf@03o`000?o6a/Koa/K600_oa/K600?o0000ok>c/onc/k<0 2_nc/k<00ol0003oWinOoinOW`0:oinOW`03o`000?ncok>c /`0:ok>c/`03o`000?nOWiooWinO00[oWinO00?o0000ohbc/onc/k009onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02_o6a/H0 0ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO0_l0000;ohb`02Oo/k>`00ol0003ofMWIomWIf@0:omWIf@03o`000?o6a/Koa/K600[oa/K600?o0000ok>c /onc/k<02_nc/k<00ol0003oWinOoinOW`09oinOW`03o`000?nc/onc/k00:onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o /k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbc/onc/k00;onc/k003o`000?oIfMWofMWI00WofMWI00?o0000olK6a_o6a/H0 2_o6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbc/onc/k00:onc/k003o`000?oIfMWofMWI00WofMWI00?o 0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`09ok>c/`;o00002onOWil00ol0003oS8bc/onc/k009onc/k003o`000?oIfMWofMWI00WofMWI00?o0000olK6a_o6a/H02_o6a/H0 0ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbc/onc/k009onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6 a_o6a/H02_o6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohb< S?nc/onc/k00:onc/k003o`000?oIfMWofMWI00Wo fMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00[o WinO00?o0000ohbc/onc/k009onc/k003o`00 0?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02Oo6a/H00ol0003o/k>cok>c/`09ok>c/`03o`00 0?nOWiooWinO00[oWinO00?o0000ohbcok>c/00Wok>c/00?o 0000omWIfOoIfMT02OoIfMT2o`0000_oa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinO W`0:oinOW`03o`000?noclo?`Gooooo00?o0000ooooooooool00_oo ool000_ooooo0_l0001:ooooo`03o`000?o/k>cok>c/00Sok>c/00?o0000omWIfOoIfMT02_oIfMT0 0ol0003oa/K6olK6aP09olK6aP03o`000?nc/k?o/k>c00Wo/k>c00?o0000oinOWonOWil02_nOWil0 0ol0003oS8bc/onc/k009onc/k003o`000?oIfMWofMWI00WofMWI00?o0000olK6 a_o6a/H02Oo6a/H00ol0003o/k>cok>c/`0:ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohb< S?nc/onc/k009onc/k003o`000?oIfMWofMWI00Wo fMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`09ok>c/`03o`000?nOWiooWinO00Wo WinO00?o0000ohbc/onc/k009onc/k003o`00 0?oIfMWofMWI00WofMWI00?o0000olK6a_o6a/H02_o6a/H00ol0003o/k>cok>c/`09ok>c/`03o`00 0?nOWiooWinO00WoWinO00?o0000ohbc/onc/ k009onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02Oo6a/H00ol0003o/k>cok>c /`09ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbco k>c/00Wok>c/00?o0000omWIfOoIfMT02_oIfMT00ol0003oa/K6olK6aP08olK6aP;o00002onc/k<0 0ol0003oWinOoinOW`09oinOW`03o`000?n`02_o/k>`00ol0003ofMWIomWIf@09omWI f@03o`000?o6a/Koa/K600Woa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003oWinOoinOW`09oinO W`03o`000?n`02Oo/k>`00ol0003o fMWIomWIf@09omWIf@03o`000?o6a/Koa/K600Woa/K600?o0000ok>c/onc/k<02Onc/k<00ol0003o WinOoinOW`09oinOW`03o`000?nc/ onc/k008onc/k003o`000?oIfMWofMWI00[ofMWI00?o0000olK6a_o6a/H02Oo6a/H00ol0003o/k>c ok>c/`09ok>c/`03o`000?nOWiooWinO00WoWinO00?o0000ohbcok>c/00Wok>c/00?o0000omWIfOoIfMT02OoIfMT00ol0003oa/K6 olK6aP09olK6aP03o`000?nc/k?o/k>c00Wo/k>c00?o0000oinOWonOWil02OnOWil00ol0003oS8b< ohbcok>c/00Wok>c/00?o 0000omWIfOoIfMT02OoIfMT00ol0003oa/K6olK6aP09olK6aP03o`000?nc/k?o/k>c00Wo/k>c00?o 0000oinOWonOWil02OnOWil00ol0003oS8b"], ImageRangeCache->{{{0, 287}, {287, 0}} -> {1.74494, 0.733613, 0.0151023, \ 0.0151023}}], Cell[BoxData[ RowBox[{"{", RowBox[{\({1.4463351288035011`, {x1 \[Rule] 4.27683243559825`, x2 \[Rule] 3.276832435598249`}}\), ",", \({"Function" \[Rule] 244, "Gradient" \[Rule] 61}\), ",", TagBox[\(\[SkeletonIndicator] ContourGraphics \[SkeletonIndicator]\), False, Editable->False]}], "}"}]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(NMinimize[Zimmermann[x0, x1], {x0, x1}, Method -> "\", \ StepMonitor \[RuleDelayed] \ Sow[{x0, x1}]]\ // \ Reap\)], "Input"], Cell[BoxData[ \({{8.791238501615339`*^-7, {x0 \[Rule] 6.999998783604371`, x1 \[Rule] 2.0000003372717785`}}, {{{0.8623029168655965`, 0.2734682733530127`}, {3.838947373416694`, 0.09202210907595976`}, {6.154665374017035`, 0.22469887139250727`}, {6.154665374017035`, 0.22469887139250727`}, {6.154665374017035`, 0.22469887139250727`}, {6.278898510104389`, 0.3198141983304758`}, {6.278898510104389`, 0.3198141983304758`}, {6.278898510104389`, 0.3198141983304758`}, {6.278898510104389`, 0.3198141983304758`}, {6.498482121130294`, 0.28289642221743694`}, {6.622715257217648`, 0.3780117491554054`}, {6.622715257217648`, 0.3780117491554054`}, {6.622715257217648`, 0.3780117491554054`}, {6.672369110175747`, 0.4929159500693866`}, {6.672369110175747`, 0.4929159500693866`}, {6.672369110175747`, 0.4929159500693866`}, {6.675423224139575`, 0.5961700503000027`}, {6.8052884037246475`, 0.8165361692117725`}, {6.876329221444839`, 1.1332274291288895`}, {6.876329221444839`, 1.1332274291288895`}, {6.876329221444839`, 1.1332274291288895`}, {6.903110647928141`, 1.3870745981989128`}, {6.979977453899528`, 1.6400981653750533`}, {6.979977453899528`, 1.6400981653750533`}, {6.974151465648332`, 1.7037658581160298`}, {6.974151465648332`, 1.7037658581160298`}, {6.974151465648332`, 1.7037658581160298`}, {6.974151465648332`, 1.7037658581160298`}, {6.986308686254653`, 1.70753918843887`}, {6.980735320055423`, 1.8367612390822434`}, {6.992892540661743`, 1.8405345694050836`}, {6.987319174462512`, 1.9697566200484569`}, {6.999476395068832`, 1.9735299503712969`}, {6.999476395068832`, 1.9735299503712969`}, {6.999476395068832`, 1.9735299503712969`}, {6.999476395068832`, 1.9735299503712969`}, {6.9934609402786645`, 1.988031874685476`}, {6.9934609402786645`, 1.988031874685476`}, {6.9934609402786645`, 1.988031874685476`}, {6.9987560409765575`, 1.9835369856483687`}, {6.99274058618639`, 1.9980389099625477`}, {6.998035686884283`, 1.9935440209254405`}, {6.998035686884283`, 1.9935440209254405`}, {6.998035686884283`, 1.9935440209254405`}, {6.994546160425031`, 1.9988550853929006`}, {6.999841261122924`, 1.9943601963557933`}, {6.996351734663673`, 1.9996712608232534`}, {6.996351734663673`, 1.9996712608232534`}, {6.996351734663673`, 1.9996712608232534`}, {6.999018288452936`, 1.9985087249497262`}, {6.999018288452936`, 1.9985087249497262`}, {6.9974830690788705`, 2.0003441067639782`}, {6.9974830690788705`, 2.0003441067639782`}, {6.999200150817018`, 1.9993039933736516`}, {6.999200150817018`, 1.9993039933736516`}, {6.999200150817018`, 1.9993039933736516`}, {6.998757667140345`, 2.000307687946016`}, {6.999746258413564`, 1.9998220327169478`}, {6.999746258413564`, 1.9998220327169478`}, {6.999746258413564`, 1.9998220327169478`}, {6.999746258413564`, 1.9998220327169478`}, {6.9996323992469005`, 2.0000254021751744`}, {6.9996323992469005`, 2.0000254021751744`}, {6.999971417935195`, 1.9998465696439665`}, {6.999971417935195`, 1.9998465696439665`}, {6.999829733679789`, 1.9999929625058819`}, {6.999829733679789`, 1.9999929625058819`}, {6.999829733679789`, 1.9999929625058819`}, {6.999967619947641`, 1.9998933570498616`}, {6.999825935692233`, 2.0000397499117772`}, {6.999963821960085`, 1.9999401444557572`}, {6.999963821960085`, 1.9999401444557572`}, {6.999963821960085`, 1.9999401444557572`}, {6.99991333769062`, 2.000012398598554`}, {6.999990423967842`, 1.9999622189552797`}, {6.999990423967842`, 1.9999622189552797`}, {6.999945910263804`, 2.0000108909374967`}, {6.999945910263804`, 2.0000108909374967`}, {6.999995581828424`, 1.9999736331203053`}, {6.999995581828424`, 1.9999736331203053`}, {6.999995581828424`, 1.9999736331203053`}, {6.999982697989809`, 1.9999957145040486`}, {6.999982697989809`, 1.9999957145040486`}, {6.999982697989809`, 1.9999957145040486`}, {6.999982697989809`, 1.9999957145040486`}, {6.999990888371419`, 1.9999936455037917`}, {6.999990888371419`, 1.9999936455037917`}, {6.999985506547336`, 2.0000007978719108`}, {6.999999196398512`, 2.0000002360554565`}, {6.999999196398512`, 2.0000002360554565`}, {6.999999196398512`, 2.0000002360554565`}, {6.999999196398512`, 2.0000002360554565`}, {6.999999196398512`, 2.0000002360554565`}, {6.999999196398512`, 2.0000002360554565`}, {6.999999196398512`, 2.0000002360554565`}, {6.9999959591935905`, 1.9999995760821787`}, {6.99999636488015`, 1.9999997732928216`}, {6.9999976792176914`, 1.9999999553714782`}, {6.999998084904252`, 2.000000152582121`}, {6.999998084904252`, 2.000000152582121`}, {6.999998648973224`, 2.00000020264063`}, {6.999998783604371`, 2.0000003372717785`}, {6.999998783604371`, 2.0000003372717785`}}}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(ContourPlot[\ \((x1 - 3)\)^2\ + \ 30\ \((x2 - 2)\)^2, \ {x1, 0, 15}, {x2, 0, 5}]\)], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% ContourGraphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0192308 0.0641026 0.0192308 0.192308 [ [.01923 -0.0125 -3 -9 ] [.01923 -0.0125 3 0 ] [.14744 -0.0125 -3 -9 ] [.14744 -0.0125 3 0 ] [.27564 -0.0125 -3 -9 ] [.27564 -0.0125 3 0 ] [.40385 -0.0125 -3 -9 ] [.40385 -0.0125 3 0 ] [.53205 -0.0125 -3 -9 ] [.53205 -0.0125 3 0 ] [.66026 -0.0125 -6 -9 ] [.66026 -0.0125 6 0 ] [.78846 -0.0125 -6 -9 ] [.78846 -0.0125 6 0 ] [.91667 -0.0125 -6 -9 ] [.91667 -0.0125 6 0 ] [ 0 0 -0.125 0 ] [-0.0125 .01923 -6 -4.5 ] [-0.0125 .01923 0 4.5 ] [-0.0125 .21154 -6 -4.5 ] [-0.0125 .21154 0 4.5 ] [-0.0125 .40385 -6 -4.5 ] [-0.0125 .40385 0 4.5 ] [-0.0125 .59615 -6 -4.5 ] [-0.0125 .59615 0 4.5 ] [-0.0125 .78846 -6 -4.5 ] [-0.0125 .78846 0 4.5 ] [-0.0125 .98077 -6 -4.5 ] [-0.0125 .98077 0 4.5 ] [ 0 0 -0.125 0 ] [ 0 1 .125 0 ] [ 1 0 .125 0 ] [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .01923 0 m .01923 .00625 L s [(0)] .01923 -0.0125 0 1 Mshowa .14744 0 m .14744 .00625 L s [(2)] .14744 -0.0125 0 1 Mshowa .27564 0 m .27564 .00625 L s [(4)] .27564 -0.0125 0 1 Mshowa .40385 0 m .40385 .00625 L s [(6)] .40385 -0.0125 0 1 Mshowa .53205 0 m .53205 .00625 L s [(8)] .53205 -0.0125 0 1 Mshowa .66026 0 m .66026 .00625 L s [(10)] .66026 -0.0125 0 1 Mshowa .78846 0 m .78846 .00625 L s [(12)] .78846 -0.0125 0 1 Mshowa .91667 0 m .91667 .00625 L s [(14)] .91667 -0.0125 0 1 Mshowa .125 Mabswid .05128 0 m .05128 .00375 L s .08333 0 m .08333 .00375 L s .11538 0 m .11538 .00375 L s .17949 0 m .17949 .00375 L s .21154 0 m .21154 .00375 L s .24359 0 m .24359 .00375 L s .30769 0 m .30769 .00375 L s .33974 0 m .33974 .00375 L s .37179 0 m .37179 .00375 L s .4359 0 m .4359 .00375 L s .46795 0 m .46795 .00375 L s .5 0 m .5 .00375 L s .5641 0 m .5641 .00375 L s .59615 0 m .59615 .00375 L s .62821 0 m .62821 .00375 L s .69231 0 m .69231 .00375 L s .72436 0 m .72436 .00375 L s .75641 0 m .75641 .00375 L s .82051 0 m .82051 .00375 L s .85256 0 m .85256 .00375 L s .88462 0 m .88462 .00375 L s .94872 0 m .94872 .00375 L s .98077 0 m .98077 .00375 L s .25 Mabswid 0 0 m 1 0 L s 0 .01923 m .00625 .01923 L s [(0)] -0.0125 .01923 1 0 Mshowa 0 .21154 m .00625 .21154 L s [(1)] -0.0125 .21154 1 0 Mshowa 0 .40385 m .00625 .40385 L s [(2)] -0.0125 .40385 1 0 Mshowa 0 .59615 m .00625 .59615 L s [(3)] -0.0125 .59615 1 0 Mshowa 0 .78846 m .00625 .78846 L s [(4)] -0.0125 .78846 1 0 Mshowa 0 .98077 m .00625 .98077 L s [(5)] -0.0125 .98077 1 0 Mshowa .125 Mabswid 0 .05769 m .00375 .05769 L s 0 .09615 m .00375 .09615 L s 0 .13462 m .00375 .13462 L s 0 .17308 m .00375 .17308 L s 0 .25 m .00375 .25 L s 0 .28846 m .00375 .28846 L s 0 .32692 m .00375 .32692 L s 0 .36538 m .00375 .36538 L s 0 .44231 m .00375 .44231 L s 0 .48077 m .00375 .48077 L s 0 .51923 m .00375 .51923 L s 0 .55769 m .00375 .55769 L s 0 .63462 m .00375 .63462 L s 0 .67308 m .00375 .67308 L s 0 .71154 m .00375 .71154 L s 0 .75 m .00375 .75 L s 0 .82692 m .00375 .82692 L s 0 .86538 m .00375 .86538 L s 0 .90385 m .00375 .90385 L s 0 .94231 m .00375 .94231 L s .25 Mabswid 0 0 m 0 1 L s .01923 .99375 m .01923 1 L s .14744 .99375 m .14744 1 L s .27564 .99375 m .27564 1 L s .40385 .99375 m .40385 1 L s .53205 .99375 m .53205 1 L s .66026 .99375 m .66026 1 L s .78846 .99375 m .78846 1 L s .91667 .99375 m .91667 1 L s .125 Mabswid .05128 .99625 m .05128 1 L s .08333 .99625 m .08333 1 L s .11538 .99625 m .11538 1 L s .17949 .99625 m .17949 1 L s .21154 .99625 m .21154 1 L s .24359 .99625 m .24359 1 L s .30769 .99625 m .30769 1 L s .33974 .99625 m .33974 1 L s .37179 .99625 m .37179 1 L s .4359 .99625 m .4359 1 L s .46795 .99625 m .46795 1 L s .5 .99625 m .5 1 L s .5641 .99625 m .5641 1 L s .59615 .99625 m .59615 1 L s .62821 .99625 m .62821 1 L s .69231 .99625 m .69231 1 L s .72436 .99625 m .72436 1 L s .75641 .99625 m .75641 1 L s .82051 .99625 m .82051 1 L s .85256 .99625 m .85256 1 L s .88462 .99625 m .88462 1 L s .94872 .99625 m .94872 1 L s .98077 .99625 m .98077 1 L s .25 Mabswid 0 1 m 1 1 L s .99375 .01923 m 1 .01923 L s .99375 .21154 m 1 .21154 L s .99375 .40385 m 1 .40385 L s .99375 .59615 m 1 .59615 L s .99375 .78846 m 1 .78846 L s .99375 .98077 m 1 .98077 L s .125 Mabswid .99625 .05769 m 1 .05769 L s .99625 .09615 m 1 .09615 L s .99625 .13462 m 1 .13462 L s .99625 .17308 m 1 .17308 L s .99625 .25 m 1 .25 L s .99625 .28846 m 1 .28846 L s .99625 .32692 m 1 .32692 L s .99625 .36538 m 1 .36538 L s .99625 .44231 m 1 .44231 L s .99625 .48077 m 1 .48077 L s .99625 .51923 m 1 .51923 L s .99625 .55769 m 1 .55769 L s .99625 .63462 m 1 .63462 L s .99625 .67308 m 1 .67308 L s .99625 .71154 m 1 .71154 L s .99625 .75 m 1 .75 L s .99625 .82692 m 1 .82692 L s .99625 .86538 m 1 .86538 L s .99625 .90385 m 1 .90385 L s .99625 .94231 m 1 .94231 L s .25 Mabswid 1 0 m 1 1 L s 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath .3 g .01923 .98077 m .98077 .98077 L .98077 .01923 L .01923 .01923 L F 0 g .5 Mabswid .4 g .01923 .81738 m .04402 .82051 L .05929 .82236 L .09936 .82614 L .13942 .82876 L .17949 .83023 L .21955 .83057 L .25962 .82978 L .29968 .82785 L .33974 .82477 L .37979 .82051 L .37981 .82051 L .41987 .81505 L .45994 .80833 L .5 .80027 L .54006 .7908 L .57794 .78045 L .58013 .77981 L .62019 .76719 L .66026 .75272 L .69059 .74038 L .70032 .73617 L .74038 .71724 L .77192 .70032 L .78045 .69542 L .82051 .67005 L .83433 .66026 L .86058 .63999 L .8831 .62019 L .90064 .60308 L .92107 .58013 L .94071 .5544 L .94989 .54006 L .97061 .5 L .98077 .47381 L .98077 .98077 L .01923 .98077 L F 0 g .01923 .81738 m .04402 .82051 L .05929 .82236 L .09936 .82614 L .13942 .82876 L .17949 .83023 L .21955 .83057 L .25962 .82978 L .29968 .82785 L .33974 .82477 L .37979 .82051 L .37981 .82051 L .41987 .81505 L .45994 .80833 L .5 .80027 L .54006 .7908 L .57794 .78045 L .58013 .77981 L .62019 .76719 L .66026 .75272 L .69059 .74038 L .70032 .73617 L .74038 .71724 L .77192 .70032 L .78045 .69542 L .82051 .67005 L .83433 .66026 L .86058 .63999 L .8831 .62019 L .90064 .60308 L .92107 .58013 L .94071 .5544 L .94989 .54006 L .97061 .5 L .98077 .47381 L s .5 g .01923 .8726 m .05929 .877 L .09936 .88035 L .13942 .88266 L .17949 .88397 L .21955 .88427 L .25962 .88357 L .29968 .88186 L .33974 .87913 L .37981 .87537 L .41987 .87054 L .45994 .86462 L .48372 .86058 L .5 .85756 L .54006 .84932 L .58013 .83982 L .62019 .82897 L .64823 .82051 L .66026 .81666 L .70032 .80279 L .74038 .78715 L .75618 .78045 L .78045 .76954 L .82051 .74964 L .83754 .74038 L .86058 .72705 L .90064 .7011 L .90176 .70032 L .94071 .67093 L .95332 .66026 L .98077 .63479 L .98077 .98077 L .01923 .98077 L F 0 g .01923 .8726 m .05929 .877 L .09936 .88035 L .13942 .88266 L .17949 .88397 L .21955 .88427 L .25962 .88357 L .29968 .88186 L .33974 .87913 L .37981 .87537 L .41987 .87054 L .45994 .86462 L .48372 .86058 L .5 .85756 L .54006 .84932 L .58013 .83982 L .62019 .82897 L .64823 .82051 L .66026 .81666 L .70032 .80279 L .74038 .78715 L .75618 .78045 L .78045 .76954 L .82051 .74964 L .83754 .74038 L .86058 .72705 L .90064 .7011 L .90176 .70032 L .94071 .67093 L .95332 .66026 L .98077 .63479 L s .6 g .01923 .92197 m .05929 .92595 L .09936 .92898 L .13942 .93108 L .17949 .93227 L .21955 .93254 L .25962 .93191 L .29968 .93035 L .33974 .92788 L .37981 .92447 L .41987 .9201 L .45994 .91476 L .5 .9084 L .54006 .90099 L .54185 .90064 L .58013 .8925 L .62019 .88285 L .66026 .87197 L .69779 .86058 L .70032 .85977 L .74038 .84616 L .78045 .83098 L .80575 .82051 L .82051 .81407 L .86058 .79522 L .88905 .78045 L .90064 .7741 L .94071 .75031 L .95602 .74038 L .98077 .72328 L .98077 .98077 L .01923 .98077 L F 0 g .01923 .92197 m .05929 .92595 L .09936 .92898 L .13942 .93108 L .17949 .93227 L .21955 .93254 L .25962 .93191 L .29968 .93035 L .33974 .92788 L .37981 .92447 L .41987 .9201 L .45994 .91476 L .5 .9084 L .54006 .90099 L .54185 .90064 L .58013 .8925 L .62019 .88285 L .66026 .87197 L .69779 .86058 L .70032 .85977 L .74038 .84616 L .78045 .83098 L .80575 .82051 L .82051 .81407 L .86058 .79522 L .88905 .78045 L .90064 .7741 L .94071 .75031 L .95602 .74038 L .98077 .72328 L s .7 g .01923 .967 m .05929 .97067 L .09936 .97346 L .13942 .97541 L .17949 .9765 L .21955 .97676 L .25962 .97617 L .29968 .97473 L .33974 .97245 L .37981 .9693 L .41987 .96529 L .45994 .96038 L .5 .95455 L .54006 .94778 L .57685 .94071 L .58013 .94003 L .62019 .93125 L .66026 .92139 L .70032 .91039 L .73259 .90064 L .74038 .89816 L .78045 .88464 L .82051 .86968 L .84307 .86058 L .86058 .85316 L .90064 .83489 L .9295 .82051 L .94071 .81464 L .98077 .79211 L .98077 .98077 L .01923 .98077 L F 0 g .01923 .967 m .05929 .97067 L .09936 .97346 L .13942 .97541 L .17949 .9765 L .21955 .97676 L .25962 .97617 L .29968 .97473 L .33974 .97245 L .37981 .9693 L .41987 .96529 L .45994 .96038 L .5 .95455 L .54006 .94778 L .57685 .94071 L .58013 .94003 L .62019 .93125 L .66026 .92139 L .70032 .91039 L .73259 .90064 L .74038 .89816 L .78045 .88464 L .82051 .86968 L .84307 .86058 L .86058 .85316 L .90064 .83489 L .9295 .82051 L .94071 .81464 L .98077 .79211 L s .2 g .01923 .75357 m .05929 .75944 L .09936 .76388 L .13942 .76695 L .17949 .76866 L .21955 .76906 L .25962 .76814 L .29968 .76588 L .33974 .76228 L .37981 .75727 L .41987 .7508 L .45994 .74279 L .47061 .74038 L .5 .73314 L .54006 .7217 L .58013 .70822 L .60096 .70032 L .62019 .69247 L .66026 .67404 L .68639 .66026 L .70032 .65232 L .74038 .62633 L .74876 .62019 L .78045 .59446 L .79553 .58013 L .82051 .55283 L .83023 .54006 L .85482 .5 L .86058 .49023 L .87043 .45994 L .8777 .41987 L .8769 .37981 L .86799 .33974 L .86058 .31808 L .85065 .29968 L .82415 .25962 L .82051 .255 L .78722 .21955 L .78045 .21329 L .74038 .18138 L .73769 .17949 L .70032 .15536 L .6715 .13942 L .66026 .13367 L .62019 .11521 L .58013 .09949 L .57976 .09936 L .54006 .086 L .5 .07454 L .45994 .0649 L .43276 .05929 L .41987 .05691 L .37981 .05047 L .33974 .04547 L .29968 .04187 L .25962 .03962 L .21955 .0387 L .17949 .03909 L .13942 .04081 L .09936 .04387 L .05929 .0483 L .01923 .05415 L F 0 g .01923 .75357 m .05929 .75944 L .09936 .76388 L .13942 .76695 L .17949 .76866 L .21955 .76906 L .25962 .76814 L .29968 .76588 L .33974 .76228 L .37981 .75727 L .41987 .7508 L .45994 .74279 L .47061 .74038 L .5 .73314 L .54006 .7217 L .58013 .70822 L .60096 .70032 L .62019 .69247 L .66026 .67404 L .68639 .66026 L .70032 .65232 L .74038 .62633 L .74876 .62019 L .78045 .59446 L .79553 .58013 L .82051 .55283 L .83023 .54006 L .85482 .5 L .86058 .49023 L .87043 .45994 L .8777 .41987 L .8769 .37981 L .86799 .33974 L .86058 .31808 L .85065 .29968 L .82415 .25962 L .82051 .255 L .78722 .21955 L .78045 .21329 L .74038 .18138 L .73769 .17949 L .70032 .15536 L .6715 .13942 L .66026 .13367 L .62019 .11521 L .58013 .09949 L .57976 .09936 L .54006 .086 L .5 .07454 L .45994 .0649 L Mistroke .43276 .05929 L .41987 .05691 L .37981 .05047 L .33974 .04547 L .29968 .04187 L .25962 .03962 L .21955 .0387 L .17949 .03909 L .13942 .04081 L .09936 .04387 L .05929 .0483 L .01923 .05415 L Mfstroke .1 g .01923 .67514 m .05929 .68267 L .09936 .68831 L .13942 .69217 L .17949 .69432 L .21955 .69482 L .25962 .69366 L .29968 .69083 L .33974 .68627 L .37981 .67989 L .41987 .67156 L .45994 .66107 L .46272 .66026 L .5 .64826 L .54006 .63258 L .56684 .62019 L .58013 .61348 L .62019 .58987 L .63423 .58013 L .66026 .55988 L .68101 .54006 L .70032 .51851 L .71297 .5 L .73284 .45994 L .74038 .43158 L .742 .41987 L .74099 .37981 L .74038 .37611 L .72976 .33974 L .7076 .29968 L .70032 .28946 L .67296 .25962 L .66026 .24789 L .62267 .21955 L .62019 .21789 L .58013 .19418 L .54986 .17949 L .54006 .17515 L .5 .15943 L .45994 .14659 L .43336 .13942 L .41987 .13616 L .37981 .12781 L .33974 .12142 L .29968 .11685 L .25962 .11402 L .21955 .11286 L .17949 .11335 L .13942 .11552 L .09936 .11938 L .05929 .12503 L .01923 .13257 L F 0 g .01923 .67514 m .05929 .68267 L .09936 .68831 L .13942 .69217 L .17949 .69432 L .21955 .69482 L .25962 .69366 L .29968 .69083 L .33974 .68627 L .37981 .67989 L .41987 .67156 L .45994 .66107 L .46272 .66026 L .5 .64826 L .54006 .63258 L .56684 .62019 L .58013 .61348 L .62019 .58987 L .63423 .58013 L .66026 .55988 L .68101 .54006 L .70032 .51851 L .71297 .5 L .73284 .45994 L .74038 .43158 L .742 .41987 L .74099 .37981 L .74038 .37611 L .72976 .33974 L .7076 .29968 L .70032 .28946 L .67296 .25962 L .66026 .24789 L .62267 .21955 L .62019 .21789 L .58013 .19418 L .54986 .17949 L .54006 .17515 L .5 .15943 L .45994 .14659 L .43336 .13942 L .41987 .13616 L .37981 .12781 L .33974 .12142 L .29968 .11685 L .25962 .11402 L .21955 .11286 L .17949 .11335 L .13942 .11552 L .09936 .11938 L Mistroke .05929 .12503 L .01923 .13257 L Mfstroke .01923 .56178 m .05929 .57428 L .08358 .58013 L .09936 .58327 L .13942 .58939 L .17949 .59276 L .21955 .59353 L .25962 .59173 L .29968 .58729 L .33915 .58013 L .33974 .57999 L .37981 .56977 L .41987 .55553 L .45243 .54006 L .45994 .53618 L .5 .50911 L .50995 .5 L .54006 .46447 L .54225 .45994 L .55652 .41987 L .55497 .37981 L .54006 .34403 L .53737 .33974 L .50083 .29968 L .5 .29897 L .45994 .2713 L .43637 .25962 L .41987 .25228 L .37981 .23791 L .33974 .22756 L .29968 .22045 L .29575 .21955 L .25962 .21603 L .21955 .21423 L .17949 .215 L .13942 .21837 L .1291 .21955 L .09936 .22436 L .05929 .23334 L .01923 .24598 L F .01923 .56178 m .05929 .57428 L .08358 .58013 L .09936 .58327 L .13942 .58939 L .17949 .59276 L .21955 .59353 L .25962 .59173 L .29968 .58729 L .33915 .58013 L .33974 .57999 L .37981 .56977 L .41987 .55553 L .45243 .54006 L .45994 .53618 L .5 .50911 L .50995 .5 L .54006 .46447 L .54225 .45994 L .55652 .41987 L .55497 .37981 L .54006 .34403 L .53737 .33974 L .50083 .29968 L .5 .29897 L .45994 .2713 L .43637 .25962 L .41987 .25228 L .37981 .23791 L .33974 .22756 L .29968 .22045 L .29575 .21955 L .25962 .21603 L .21955 .21423 L .17949 .215 L .13942 .21837 L .1291 .21955 L .09936 .22436 L .05929 .23334 L .01923 .24598 L s .4 g .98077 .33556 m .96708 .29968 L .9448 .25962 L .94071 .25342 L .91425 .21955 L .90064 .20463 L .87428 .17949 L .86058 .16773 L .82305 .13942 L .82051 .13767 L .78045 .11225 L .75741 .09936 L .74038 .09046 L .70032 .07151 L .67121 .05929 L .66026 .055 L .62019 .04057 L .58013 .02793 L .54907 .01923 L .98077 .01923 L F 0 g .98077 .33556 m .96708 .29968 L .9448 .25962 L .94071 .25342 L .91425 .21955 L .90064 .20463 L .87428 .17949 L .86058 .16773 L .82305 .13942 L .82051 .13767 L .78045 .11225 L .75741 .09936 L .74038 .09046 L .70032 .07151 L .67121 .05929 L .66026 .055 L .62019 .04057 L .58013 .02793 L .54907 .01923 L s .8 g .98077 .85045 m .96068 .86058 L .94071 .87018 L .90064 .88811 L .87023 .90064 L .86058 .90444 L .82051 .91933 L .78045 .93288 L .75545 .94071 L .74038 .9452 L .70032 .95637 L .66026 .96647 L .62019 .97556 L .59507 .98077 L .98077 .98077 L F 0 g .98077 .85045 m .96068 .86058 L .94071 .87018 L .90064 .88811 L .87023 .90064 L .86058 .90444 L .82051 .91933 L .78045 .93288 L .75545 .94071 L .74038 .9452 L .70032 .95637 L .66026 .96647 L .62019 .97556 L .59507 .98077 L s .5 g .98077 .17294 m .94389 .13942 L .94071 .13679 L .90064 .10657 L .89004 .09936 L .86058 .08064 L .82283 .05929 L .82051 .05807 L .78045 .03822 L .74038 .02056 L .73718 .01923 L .98077 .01923 L F 0 g .98077 .17294 m .94389 .13942 L .94071 .13679 L .90064 .10657 L .89004 .09936 L .86058 .08064 L .82283 .05929 L .82051 .05807 L .78045 .03822 L .74038 .02056 L .73718 .01923 L s .9 g .98077 .90201 m .94071 .91978 L .90064 .93604 L .88846 .94071 L .86058 .95093 L .82051 .96457 L .78045 .97706 L .76785 .98077 L .98077 .98077 L F 0 g .98077 .90201 m .94071 .91978 L .90064 .93604 L .88846 .94071 L .86058 .95093 L .82051 .96457 L .78045 .97706 L .76785 .98077 L s .6 g .98077 .08441 m .9437 .05929 L .94071 .0574 L .90064 .03366 L .87388 .01923 L .98077 .01923 L F 0 g .98077 .08441 m .9437 .05929 L .94071 .0574 L .90064 .03366 L .87388 .01923 L s 1 g .98077 .94871 m .94071 .96499 L .90064 .97999 L .89846 .98077 L .98077 .98077 L F 0 g .98077 .94871 m .94071 .96499 L .90064 .97999 L .89846 .98077 L s % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{288, 288}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgooooo`04o`000?ooooooooooo`00027ooooo00?o0000ooooooooool07Oooool01?l0003o ooooooooool0000Oooooo`Co00008?ooool3o`0001oooooo00?o0000ooooooooool00_ooool01?l0 003oooooooooool0000Jooooo`03o`000?oooooooooo00Cooooo00?o0000ooooooooool06Oooool0 1Ol0003ooooooooooooooooo000000;ooooo00?o0000ooooooooool05?ooool000kooooo00Co0000 oooooooooooo00007_ooool01Ol0003ooooooooooooooooo000001oooooo00?o0000ooooool00000 7oooool00ol0003oooooooooo`0Pooooo`05o`000?ooooooooooooooool000007_ooool00ol0003o ooooooooo`02ooooo`04o`000?ooooooooooo`0001[ooooo00Go0000ooooooooooooooooo`000003 ooooo`03o`000?oooooooooo01Sooooo00?o0000ooooooooool00_ooool00ol0003oooooo`00000F ooooo`003_ooool01?l0003oooooooooool0000Nooooo`05o`000?ooooooooooooooool000008?oo ool2o`00023ooooo00?o0000ooooooooool07oooool01Ol0003ooooooooooooooooo000001gooooo 0_l00004ooooo`04o`000?ooooooooooo`0001Wooooo0_l00003ooooo`05o`000?oooooooooooooo ool000006Oooool2o`0000Gooooo0_l0000Fooooo`003oooool2o`00023ooooo0ol0000Rooooo`03 o`000?oooooooooo01oooooo0_l0000Pooooo`?o00007oooool00ol0003oooooooooo`03ooooo`;o 00006oooool00ol0003oooooooooo`02ooooo`?o00006oooool00ol0003oooooooooo`04ooooo`03 o`000?oooooooooo01Cooooo003oooooob7ooooo003oooooob7ooooo003oooooob7ooooo003ooooo ob7ooooo003oooooob7ooooo000:oooooooo00005Ol00002ooooo`002_ooool00ol0003ooooooooo o`03ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`05ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01Oooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Gooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`05ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01Oooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00Kooooo00?o0000ooooooooool01_ooool00ol0003ooooooooo o`06ooooo`03o`000?oooooooooo00;ooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooo oooo00?ooooo00?o0000ooooooooool08?ooool00ol0003oooooooooo`0Pooooo`03o`000?oooooo oooo023ooooo00?o0000ooooooooool08?ooool00ol0003oooooooooo`0Qooooo`03o`000?oooooo oooo023ooooo00?o0000ooooooooool08?ooool00ol0003oooooooooo`0Dooooo`7o00000Oooool1 ooooo`000oooool2o`0000Gooooo00?o0000ooooooooool0oooooolAooooo`7o00000Oooool1oooo o`000_ooool01?l0003oooooooooool00004ooooo`03o`000?oooooooooo0?oooooo4Oooool1o`00 007ooooo0Oooool000;ooooo00Co0000oooooooooooo00001?ooool3o`0009Cooooo0ol0000aoooo o`03o`000?oooooooooo02;ooooo0_l0000Oooooo`?o00000_ooool000;ooooo00Co0000oooooooo oooo00001?ooool00ol0003oooooooooo`03oooooiCoC4a<0ol0000_ofIVIP;o00009?moOgl2o`00 01[oVIVI1Oooool1o`00007ooooo0Oooool000;ooooo00Co0000oooooooooooo00001?ooool00ol0 003oooooooooo`03oooooiOoC4a<0ol0000^ofIVIP?o00008omoOgl2o`0001SoVIVI1Oooool1o`00 007ooooo0Oooool000;ooooo00Co0000oooooooooooo00001?ooool00ol0003oooooooooo`03oooo oi[oC4a<0ol0000^ofIVIP?o00008_moOgl2o`0001KoVIVI1Oooool1o`00007ooooo0Oooool000?o oooo0_l00005ooooo`03o`000?oooooooooo00?oooooWOm?lc_m?lI6AT8 o`0004_oolI 6AT00ol0003oolI6AT0 0ol0003oolI6AT00ol0 003o_lI6AT00ol0003o _lI6AT00ol0003o?lI6AT00ol0003o?lI6AT00ol0003o?lI6AT00ol0003oo`0003Co6ATI00?o0000 oco`0003Co6ATI00?o0000ocOlI6AT00ol0 003o_lI6AT00ol0003oolI6AT00ol0003oolI6AT00ol0003ooaTI6@;o0000:olcolcogmoO`Gooooo0Ol00001oooo o`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo3olc_mc/oooool01?ooool1o`00007ooooo0Oooool000?ooooo0_l00005oooo o`03o`000?oooooooooo00?oooooQ_mc1Oooool1o`00007ooooo0Oooool000Cooooo00?o0000ooooooooool00oooool00ol0003o ooooooooo`03oooooh7oC4a<1Ol0000dofIVIP;o00009OmoOgl3o`0001koVIVI0_l00004ok>c/`Go oooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooO?mcok>c/`04ok>c/`Gooooo0Ol00001ooooo`7ooooo 000:ooooo`03o`000?oooooooooo00?oooooM_mc1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooooma odaomVIVH3o`0002OoOgmo0_l0000QoiVIV@03o`000?nc/k?o/k>c00Oo/k>c1Oooool1 o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00oooool4o`0006GoC4a<2?l0000mofIV IP?o0000:?moOgl2o`00027oVIVI0_l0000:ok>c/`Gooooo0Ol00001ooooo`7ooooo000:ooooo`03 o`000?oooooooooo00?ooooo1?mVIVH6o`0005CoC4a<2ol00012ofIVIP?o0000:OmoOgl2o`00023o VIVI0ol0000c/`Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?ooooo 2_mVIVH8o`00047oC4a<2ol0001:ofIVIP?o0000:OmoOgl3o`00023oVIVI0_l0000?ok>c/`Gooooo 0Ol00001ooooo`7ooooo000:ooooo`;o00001?oooolBofIVIQKo00008?mc1?ooool2o`0000;ooooo000:ooooo`03o`000?oooooo oooo00?ooooo:?mVIVHPo`0005_oIVIV0ol0000ZogmoO`;o00008OnIVIT2o`0001?o/k>c1Oooool1 o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooonOofIVIPCo0000:_moOgl3o`00 027oVIVI0_l0000Eok>c/`Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?o ooooW?mVIVH3o`0002_oOgmo0ol0000RoiVIV@;o00005onc/k<5ooooo`7o00000Oooool1ooooo`00 2_ooool00ol0003oooooooooo`03oooooiOoIVIV1Ol0000[ogmoO`?o00008_nIVIT3o`0001Wo/k>c 1Oooool1o`00007ooooo0Oooool000[ooooo00?o0000ooooooooool00ooooonBofIVIPGo0000;_mo Ogl2o`0002?oVIVI0_l0000Lok>c/`Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooo oooo00?oooooS?mVIVH6o`00033oOgmo0ol0000SoiVIV@;o00007Onc/k<2o`0000Cooooo0Ol00001 ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooQomVIVH5o`0003?oOgmo0ol0000ToiVI V@;o00007Onc/k<2o`000003olcc/`;o00001Ooc0_l0 0007olcc/`03o`000?oc0_l0000c0ol0000>olcc0_l0 000Aolcc0_l0000Eolc< c0Gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?oooooUomoOgl5o`0002ko VIVI0ol0000Qok>c/`?o00005ooc0ol0 000Molcc0_l0000Oolcc/`?o00007_oc/`?o00007_oOnIVIT4o`0002Co/k>c0ol0000Nolcc0ol0000O olcc0ol0000Oolcc0ol0000Polcc0ol0000Qolcc/`Co00008Ooc/`?o00008_oc0ol0000Solcc0ol0000Tolcc0ol0 000Tolcc1?l0000Tolcc1Ol0000Uolc< c0?o00007_oVi^H2o`0000gooooo0Ol00001ooooo`7ooooo000:ooooo`03o`000?oooooooooo00?o oooo1ol0001RoiVIV@_o0000>_nc/k<5o`0002Oocc/`_o0000C?nIVIT;o`00047o/k>c 1?l0000Xolcc2ol0000foiVIV@_o0000BOnc/k<3o`0002Wocc=_l0001?ok>c/`Go0000:?oc/`Co0000:oo"], ImageRangeCache->{{{0, 287}, {287, 0}} -> {-0.917656, -0.335477, 0.0568171, \ 0.018939}}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] ContourGraphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(FindMinimum[\((x1 - 3)\)^2\ + \ 30\ \((x2 - 2)\)^2, \ {{x1, 12}, {x2, 4}}, Method -> "\", StepMonitor \[RuleDelayed] \ Sow[{x1, x2}]]\ // \ Reap\)], "Input"], Cell[BoxData[ \({{1.535088224805122`*^-19, {x1 \[Rule] 3.000000000033866`, x2 \[Rule] 1.9999999999287348`}}, {{{11.69351054209343`, 1.9567369472895328`}, {3.000049194629181`, 2.000327040371663`}, {3.0000475549323413`, 2.000000024756649`}, {3.0000003386574003`, 1.9999992873462293`}, {3.0000000047877498`, 2.0000000000029723`}, {3.000000000033866`, 1.9999999999287348`}}}}\)], "Output"] }, Open ]] }, Open ]] }, FrontEndVersion->"5.2 for Macintosh", ScreenRectangle->{{4, 1920}, {0, 1178}}, AutoGeneratedPackage->None, WindowSize->{1022, 917}, WindowMargins->{{366, Automatic}, {Automatic, 51}}, ShowSelection->True ] (******************************************************************* Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. *******************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1776, 53, 33, 0, 69, "Section"], Cell[1812, 55, 109, 2, 27, "Input", InitializationCell->True] }, Open ]], Cell[CellGroupData[{ Cell[1958, 62, 60, 0, 69, "Section"], Cell[2021, 64, 235, 4, 46, "Text"], Cell[CellGroupData[{ Cell[2281, 72, 49, 1, 27, "Input"], Cell[2333, 75, 82, 1, 29, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[2452, 81, 75, 1, 27, "Input"], Cell[2530, 84, 33794, 779, 186, 6184, 434, "GraphicsData", "PostScript", \ "Graphics"], Cell[36327, 865, 130, 3, 27, "Output"] }, Open ]], Cell[36472, 871, 128, 1, 26, "SmallText"], Cell[36603, 874, 120, 2, 27, "Input"], Cell[CellGroupData[{ Cell[36748, 880, 118, 2, 27, "Input"], Cell[36869, 884, 128, 2, 29, "Output"] }, Open ]], Cell[37012, 889, 73, 0, 30, "Text"], Cell[37088, 891, 1131, 20, 251, "Input"], Cell[38222, 913, 116, 2, 27, "Input"], Cell[38341, 917, 87, 1, 27, "Input"], Cell[CellGroupData[{ Cell[38453, 922, 75, 1, 27, "Input"], Cell[38531, 925, 52, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[38620, 931, 85, 1, 27, "Input"], Cell[38708, 934, 35, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[38780, 940, 167, 3, 27, "Input"], Cell[38950, 945, 261, 5, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[39248, 955, 219, 4, 43, "Input"], Cell[39470, 961, 38985, 1010, 186, 9434, 641, "GraphicsData", "PostScript", \ "Graphics"], Cell[78458, 1973, 130, 3, 27, "Output"] }, Open ]], Cell[78603, 1979, 445, 7, 123, "Input"], Cell[CellGroupData[{ Cell[79073, 1990, 73, 1, 27, "Input"], Cell[79149, 1993, 37, 1, 27, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[79235, 2000, 39, 0, 69, "Section"], Cell[79277, 2002, 218, 5, 43, "Input"], Cell[79498, 2009, 122, 2, 27, "Input"], Cell[79623, 2013, 77, 1, 27, "Input"], Cell[CellGroupData[{ Cell[79725, 2018, 179, 4, 27, "Input"], Cell[79907, 2024, 332, 6, 47, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[80288, 2036, 75, 0, 69, "Section"], Cell[80366, 2038, 815, 15, 171, "Input"], Cell[81184, 2055, 66, 1, 27, "Input"], Cell[81253, 2058, 60, 1, 27, "Input"], Cell[CellGroupData[{ Cell[81338, 2063, 63, 1, 27, "Input"], Cell[81404, 2066, 226, 4, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[81667, 2075, 109, 2, 27, "Input"], Cell[81779, 2079, 224, 4, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[82040, 2088, 45, 0, 38, "Subsection"], Cell[CellGroupData[{ Cell[82110, 2092, 180, 4, 27, "Input"], Cell[82293, 2098, 106516, 2255, 242, 51125, 1567, "GraphicsData", \ "PostScript", "Graphics"], Cell[188812, 4355, 137, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[188986, 4363, 253, 5, 43, "Input"], Cell[189242, 4370, 66016, 2759, 296, 33410, 2352, "GraphicsData", \ "PostScript", "Graphics"], Cell[255261, 7131, 137, 3, 27, "Output"] }, Open ]], Cell[255413, 7137, 289, 6, 59, "Input"], Cell[255705, 7145, 187, 3, 27, "Input"], Cell[CellGroupData[{ Cell[255917, 7152, 65, 1, 27, "Input"], Cell[255985, 7155, 868, 15, 91, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[256890, 7175, 1430, 28, 219, "Input"], Cell[258323, 7205, 42, 1, 27, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[258414, 7212, 45, 0, 38, "Subsection"], Cell[CellGroupData[{ Cell[258484, 7216, 182, 4, 27, "Input"], Cell[258669, 7222, 66006, 1275, 186, 8125, 556, "GraphicsData", "PostScript", \ "Graphics"], Cell[324678, 8499, 130, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[324845, 8507, 191, 4, 27, "Input"], Cell[325039, 8513, 72, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[325148, 8519, 170, 4, 27, "Input"], Cell[325321, 8525, 26159, 581, 186, 3973, 303, "GraphicsData", "PostScript", \ "Graphics"], Cell[351483, 9108, 330, 7, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[351850, 9120, 70, 1, 27, "Input"], Cell[351923, 9123, 20068, 465, 186, 3674, 258, "GraphicsData", "PostScript", \ "Graphics"], Cell[371994, 9590, 130, 3, 27, "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[372185, 9600, 40, 0, 69, "Section"], Cell[372228, 9602, 202, 4, 27, "Input"], Cell[CellGroupData[{ Cell[372455, 9610, 422, 8, 107, "Input"], Cell[CellGroupData[{ Cell[372902, 9622, 159760, 4205, 296, 39739, 2719, "GraphicsData", \ "PostScript", "Graphics"], Cell[532665, 13829, 125268, 2496, 242, 51514, 1581, "GraphicsData", \ "PostScript", "Graphics"] }, Open ]], Cell[657948, 16328, 135, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[658120, 16336, 144, 2, 27, "Input"], Cell[658267, 16340, 249, 4, 29, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[658553, 16349, 101, 2, 27, "Input"], Cell[658657, 16353, 113460, 3801, 296, 44677, 2947, "GraphicsData", \ "PostScript", "Graphics"], Cell[772120, 20156, 350, 8, 27, "Output"] }, Open ]], Cell[772485, 20167, 23, 0, 30, "Text"], Cell[CellGroupData[{ Cell[772533, 20171, 89, 1, 27, "Input"], Cell[772625, 20174, 407, 11, 55, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[773081, 20191, 38, 0, 69, "Section"], Cell[773122, 20193, 755, 14, 187, "Input"], Cell[CellGroupData[{ Cell[773902, 20211, 204, 3, 43, "Input"], Cell[774109, 20216, 103160, 3002, 296, 30498, 2100, "GraphicsData", \ "PostScript", "Graphics"], Cell[877272, 23220, 137, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[877446, 23228, 92, 1, 27, "Input"], Cell[877541, 23231, 520, 7, 35, "Message"], Cell[878064, 23240, 94039, 3395, 296, 42643, 2756, "GraphicsData", \ "PostScript", "Graphics"], Cell[972106, 26637, 379, 8, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[972522, 26650, 167, 2, 27, "Input"], Cell[972692, 26654, 5911, 105, 285, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[978640, 26764, 123, 2, 27, "Input"], Cell[978766, 26768, 58269, 1723, 296, 16400, 1201, "GraphicsData", \ "PostScript", "Graphics"], Cell[1037038, 28493, 137, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[1037212, 28501, 228, 4, 43, "Input"], Cell[1037443, 28507, 478, 8, 29, "Output"] }, Open ]] }, Open ]] } ] *) (******************************************************************* End of Mathematica Notebook file. *******************************************************************) uqfoundation-mystic-9a49031/_examples/newoldsupport.py000066400000000000000000006532631455553066500233210ustar00rootroot00000000000000params = [[(0.98832086014278109,), (0.7632950032499235,), (0.7632950032499235,), (0.7632950032499235,), (0.7632950032499235,), (0.7632950032499235,), (0.7632950032499235,), (0.68199422617928163,), (0.68199422617928163,), (0.68199422617928163,), (0.68199422617928163,), (0.68199422617928163,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.74626559111722945,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.65185910434677441,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.63714453216452416,), (0.65880059617902842,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65553725968607157,), (0.65524355940170542,), (0.65524355940170542,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.65204222630211472,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63205909974052554,), (0.63216266754708028,), (0.63216266754708028,), (0.6121795409854911,), (0.6121795409854911,), (0.6121795409854911,), (0.6121795409854911,), (0.63013198933593262,), (0.63013198933593262,), (0.63013198933593262,), (0.6288592596421948,), (0.6288592596421948,), (0.6288592596421948,), (0.6288592596421948,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.638263699504792,), (0.63234782088706332,), (0.63234782088706332,), (0.63234782088706332,), (0.63110761906354518,), (0.63110761906354518,), (0.63110761906354518,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.63092288281508524,), (0.62825740069194114,), (0.62825740069194114,), (0.62825740069194114,), (0.62825740069194114,), (0.62855571697454582,), (0.62855571697454582,), (0.62855571697454582,), (0.62855571697454582,), (0.62855571697454582,), (0.62855571697454582,), (0.62855571697454582,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62829919732110151,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.62812571082005741,), (0.6278813234204631,), (0.62752085069498253,), (0.62752085069498253,), (0.62752085069498253,), (0.62721009053697463,), (0.62721009053697463,), (0.62721009053697463,), (0.62666198601034884,), (0.6266082467928763,), (0.6266082467928763,), (0.6266082467928763,), (0.6266082467928763,), (0.62649101046888522,), (0.62649101046888522,), (0.62649101046888522,), (0.62640860464340775,), (0.62661267310534574,), (0.62661267310534574,), (0.62661267310534574,), (0.62519010039868061,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62465395420500691,), (0.62376748259430159,), (0.62376748259430159,), (0.62376748259430159,), (0.62376748259430159,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62348314821824213,), (0.62330592091812353,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62221766288795599,), (0.62220478167994786,), (0.62220478167994786,), (0.62350047524848229,), (0.62350047524848229,), (0.62350047524848229,), (0.62350047524848229,), (0.62350047524848229,), (0.62350047524848229,), (0.62350047524848229,), (0.62350047524848229,), (0.62220478167994786,), (0.62200101857593693,), (0.62200101857593693,), (0.62200101857593693,), (0.62200101857593693,), (0.62200101857593693,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.6215617382216595,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62116638590280981,), (0.62109878065628643,), (0.62109878065628643,), (0.62109878065628643,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62168391720655047,), (0.62166288977736384,), (0.62166288977736384,), (0.62166288977736384,), (0.62166288977736384,), (0.62166288977736384,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.62173741168108132,), (0.6214771916422388,), (0.6214771916422388,), (0.62143538081307981,), (0.62143538081307981,), (0.62143538081307981,), (0.62143538081307981,), (0.62143538081307981,), (0.62143303529004978,), (0.62143303529004978,), (0.62143303529004978,), (0.62151142552226546,), (0.62151142552226546,), (0.62152733883849831,), (0.62153404580983296,), (0.62153404580983296,), (0.62153404580983296,), (0.62141881587722803,), (0.62150207713714112,), (0.62150207713714112,), (0.62150207713714112,), (0.62150207713714112,), (0.62150207713714112,), (0.62150207713714112,), (0.62138611756636331,), (0.62133048815345715,), (0.62133048815345715,), (0.62132370094675626,), (0.62132370094675626,), (0.62132370094675626,), (0.62132370094675626,), (0.62132370094675626,), (0.62125999328146464,), (0.62124729479383345,), (0.62124729479383345,), (0.62124729479383345,), (0.62124729479383345,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62119166538092729,), (0.62118047644937513,), (0.62113996987681908,), (0.62113996987681908,), (0.62113996987681908,), (0.62113996987681908,), (0.62113996987681908,), (0.62113971391067591,), (0.62113971391067591,), (0.62113971391067591,), (0.6211719824901436,), (0.6211719824901436,), (0.6211719824901436,), (0.6211719824901436,), (0.62115912340456947,), (0.62115912340456947,), (0.62115912340456947,), (0.62115912340456947,), (0.62112022487618357,), (0.62112022487618357,), (0.62112022487618357,), (0.62112022487618357,), (0.62112022487618357,), (0.62112022487618357,), (0.62112991416710672,), (0.62112991416710672,), (0.62112991416710672,), (0.62112991416710672,), (0.62112991416710672,), (0.62112991416710672,), (0.62112991416710672,), (0.62112991416710672,), (0.62111323555131703,), (0.62111323555131703,), (0.62111323555131703,), (0.62111323555131703,), (0.62111323555131703,), (0.62111323555131703,), (0.62111323555131703,), (0.62110642972760188,), (0.62109772636681171,), (0.62109772636681171,), (0.62108989334210052,), (0.62108989334210052,), (0.62108989334210052,), (0.62108989334210052,), (0.62108989334210052,), (0.62108989334210052,), (0.6210889046578979,), (0.6210889046578979,), (0.62108625486530611,), (0.62108625486530611,), (0.62108625486530611,), (0.62108625486530611,), (0.62108625486530611,), (0.62108625486530611,), (0.62107817423490175,), (0.62107817423490175,), (0.62107817423490175,), (0.62107817423490175,), (0.62107711951525379,), (0.62107711951525379,), (0.62107641454302975,), (0.62107641454302975,), (0.62107576224533401,), (0.62107576224533401,), (0.62107576224533401,), (0.62107576224533401,), (0.62107246516782821,), (0.62107246516782821,), (0.62106140006156751,), (0.62106140006156751,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106183789291203,), (0.62106140006156751,), (0.62106140006156751,), (0.62106140006156751,), (0.62105361576806917,), (0.62105087381361357,), (0.62105050352443958,), (0.62105050352443958,), (0.62105050352443958,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62105440520156385,), (0.62104388211978412,), (0.62104388211978412,), (0.62104371876483722,), (0.62104371876483722,), (0.62104371876483722,), (0.62104371876483722,), (0.62104371876483722,), (0.62104371876483722,), (0.62104371876483722,), (0.62104219911860115,), (0.62104219911860115,), (0.62104219911860115,), (0.62104219911860115,), (0.62104219911860115,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62104135326457122,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103846518311678,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103825228809284,), (0.62103782206474101,), (0.62103782206474101,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103727506470341,), (0.62103674854870461,), (0.62103642209642218,), (0.62103616473432932,), (0.62103616473432932,), (0.62103616473432932,), (0.62103616473432932,), (0.62103616473432932,), (0.62103616473432932,), (0.62103597823737522,), (0.62103567450996722,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103328948819381,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103488889512637,), (0.62103330604071749,), (0.62103286811415803,), (0.62103286811415803,), (0.62103286811415803,), (0.62103236808947093,), (0.62103219812696986,), (0.62103203920487715,), (0.62103203920487715,), (0.62103203920487715,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103085045606599,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103219238208007,), (0.62103084405464837,), (0.62103084405464837,), (0.62103084405464837,), (0.62103084405464837,), (0.6210306606396786,), (0.6210306606396786,), (0.6210306606396786,), (0.6210306606396786,), (0.6210306606396786,)], [(0.011679139857218884,), (0.23670499675007653,), (0.23670499675007653,), (0.23670499675007653,), (0.23670499675007653,), (0.23670499675007653,), (0.23670499675007653,), (0.31800577382071837,), (0.31800577382071837,), (0.31800577382071837,), (0.31800577382071837,), (0.31800577382071837,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.25373440888277066,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.3481408956532257,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.36285546783547584,), (0.34119940382097158,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34446274031392843,), (0.34475644059829452,), (0.34475644059829452,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.34795777369788516,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.3679409002594744,), (0.36783733245291944,), (0.36783733245291944,), (0.38782045901450868,), (0.38782045901450868,), (0.38782045901450868,), (0.38782045901450868,), (0.36986801066406727,), (0.36986801066406727,), (0.36986801066406727,), (0.37114074035780503,), (0.37114074035780503,), (0.37114074035780503,), (0.37114074035780503,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36173630049520772,), (0.36765217911293679,), (0.36765217911293679,), (0.36765217911293679,), (0.36889238093645471,), (0.36889238093645471,), (0.36889238093645471,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.3690771171849147,), (0.37174259930805847,), (0.37174259930805847,), (0.37174259930805847,), (0.37174259930805847,), (0.37144428302545418,), (0.37144428302545418,), (0.37144428302545418,), (0.37144428302545418,), (0.37144428302545418,), (0.37144428302545418,), (0.37144428302545418,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37170080267889855,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37187428917994259,), (0.37211867657953701,), (0.37247914930501769,), (0.37247914930501769,), (0.37247914930501769,), (0.37278990946302554,), (0.37278990946302554,), (0.37278990946302554,), (0.37333801398965144,), (0.37339175320712376,), (0.37339175320712376,), (0.37339175320712376,), (0.37339175320712376,), (0.37350898953111478,), (0.37350898953111478,), (0.37350898953111478,), (0.37359139535659225,), (0.37338732689465426,), (0.37338732689465426,), (0.37338732689465426,), (0.37480989960131939,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37534604579499309,), (0.37623251740569841,), (0.37623251740569841,), (0.37623251740569841,), (0.37623251740569841,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37651685178175798,), (0.37669407908187641,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.3777823371120439,), (0.37779521832005203,), (0.37779521832005203,), (0.37649952475151777,), (0.37649952475151777,), (0.37649952475151777,), (0.37649952475151777,), (0.37649952475151777,), (0.37649952475151777,), (0.37649952475151777,), (0.37649952475151777,), (0.37779521832005203,), (0.37799898142406307,), (0.37799898142406307,), (0.37799898142406307,), (0.37799898142406307,), (0.37799898142406307,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37843826177834045,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37883361409719007,), (0.37890121934371335,), (0.37890121934371335,), (0.37890121934371335,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37831608279344953,), (0.37833711022263616,), (0.37833711022263616,), (0.37833711022263616,), (0.37833711022263616,), (0.37833711022263616,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37826258831891862,), (0.37852280835776109,), (0.37852280835776109,), (0.37856461918692014,), (0.37856461918692014,), (0.37856461918692014,), (0.37856461918692014,), (0.37856461918692014,), (0.37856696470995022,), (0.37856696470995022,), (0.37856696470995022,), (0.37848857447773454,), (0.37848857447773454,), (0.37847266116150158,), (0.37846595419016704,), (0.37846595419016704,), (0.37846595419016704,), (0.37858118412277197,), (0.37849792286285905,), (0.37849792286285905,), (0.37849792286285905,), (0.37849792286285905,), (0.37849792286285905,), (0.37849792286285905,), (0.37861388243363686,), (0.37866951184654324,), (0.37866951184654324,), (0.37867629905324435,), (0.37867629905324435,), (0.37867629905324435,), (0.37867629905324435,), (0.37867629905324435,), (0.37874000671853603,), (0.37875270520616727,), (0.37875270520616727,), (0.37875270520616727,), (0.37875270520616727,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37880833461907365,), (0.37881952355062587,), (0.37886003012318187,), (0.37886003012318187,), (0.37886003012318187,), (0.37886003012318187,), (0.37886003012318187,), (0.37886028608932404,), (0.37886028608932404,), (0.37886028608932404,), (0.3788280175098564,), (0.3788280175098564,), (0.3788280175098564,), (0.3788280175098564,), (0.37884087659543086,), (0.37884087659543086,), (0.37884087659543086,), (0.37884087659543086,), (0.37887977512381671,), (0.37887977512381671,), (0.37887977512381671,), (0.37887977512381671,), (0.37887977512381671,), (0.37887977512381671,), (0.37887008583289333,), (0.37887008583289333,), (0.37887008583289333,), (0.37887008583289333,), (0.37887008583289333,), (0.37887008583289333,), (0.37887008583289333,), (0.37887008583289333,), (0.37888676444868236,), (0.37888676444868236,), (0.37888676444868236,), (0.37888676444868236,), (0.37888676444868236,), (0.37888676444868236,), (0.37888676444868236,), (0.37889357027239806,), (0.37890227363318763,), (0.37890227363318763,), (0.37891010665789826,), (0.37891010665789826,), (0.37891010665789826,), (0.37891010665789826,), (0.37891010665789826,), (0.37891010665789826,), (0.37891109534210093,), (0.37891109534210093,), (0.37891374513469395,), (0.37891374513469395,), (0.37891374513469395,), (0.37891374513469395,), (0.37891374513469395,), (0.37891374513469395,), (0.37892182576509903,), (0.37892182576509903,), (0.37892182576509903,), (0.37892182576509903,), (0.37892288048474709,), (0.37892288048474709,), (0.37892358545697102,), (0.37892358545697102,), (0.37892423775466544,), (0.37892423775466544,), (0.37892423775466544,), (0.37892423775466544,), (0.37892753483217345,), (0.37892753483217345,), (0.37893859993843332,), (0.37893859993843332,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893816210708792,), (0.37893859993843332,), (0.37893859993843332,), (0.37893859993843332,), (0.37894638423193205,), (0.37894912618638632,), (0.37894949647556042,), (0.37894949647556042,), (0.37894949647556042,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37894559479843737,), (0.37895611788021721,), (0.37895611788021721,), (0.37895628123516473,), (0.37895628123516473,), (0.37895628123516473,), (0.37895628123516473,), (0.37895628123516473,), (0.37895628123516473,), (0.37895628123516473,), (0.37895780088140002,), (0.37895780088140002,), (0.37895780088140002,), (0.37895780088140002,), (0.37895780088140002,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37895864673542995,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896153481688311,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896174771190694,), (0.37896217793525871,), (0.37896217793525871,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.3789627249352977,), (0.37896325145129628,), (0.37896357000346415,), (0.37896374836441221,), (0.37896374836441221,), (0.37896374836441221,), (0.37896374836441221,), (0.37896374836441221,), (0.37896374836441221,), (0.37896402176262473,), (0.37896432549003178,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896663151065924,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896510320475885,), (0.37896669395928251,), (0.37896713188584202,), (0.37896713188584202,), (0.37896713188584202,), (0.37896756080949662,), (0.37896773077199791,), (0.37896789680419507,), (0.37896789680419507,), (0.37896789680419507,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896914954393396,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.37896780761791993,), (0.3789691549605303,), (0.3789691549605303,), (0.3789691549605303,), (0.3789691549605303,), (0.37896941605139378,), (0.37896941605139378,), (0.37896941605139378,), (0.37896941605139378,), (0.37896941605139378,)], [(85.154128264241166,), (81.236704750347769,), (81.236704750347769,), (81.236704750347769,), (81.236704750347769,), (81.236704750347769,), (81.236704750347769,), (79.726048799591638,), (79.726048799591638,), (79.726048799591638,), (79.726048799591638,), (79.726048799591638,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.338911631307624,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.446520004425736,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (65.44652000442575,), (60.937801142140863,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.790281322935613,), (60.777004539207141,), (60.777004539207141,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.63228759656679,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.334622105374422,), (60.993522676413932,), (60.993522676413932,), (60.695857185221563,), (60.695857185221563,), (60.102846671286002,), (60.102846671286002,), (60.370745613359119,), (60.370745613359119,), (60.370745613359119,), (60.370745613359105,), (60.370745613359105,), (60.370745613359105,), (60.370745613359105,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (62.176656200864926,), (63.148506893722768,), (63.148506893722768,), (63.148506893722768,), (61.128860257683286,), (61.128860257683286,), (61.128860257683286,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.886533365933531,), (60.749148549199809,), (60.749148549199809,), (60.749148549199809,), (60.749148549199809,), (60.886533365933545,), (60.886533365933545,), (60.886533365933545,), (60.886533365933545,), (60.886533365933545,), (60.886533365933545,), (60.886533365933545,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.852359312170037,), (60.997946676853132,), (60.997946676853132,), (60.997946676853132,), (60.997946676853132,), (60.997946676853132,), (60.997946676853132,), (60.997946676853132,), (61.007266385937115,), (61.007266385937115,), (61.007266385937115,), (61.007266385937115,), (61.007266385937115,), (61.007266385937115,), (61.007266385937115,), (61.007266385937115,), (60.850389871944053,), (60.827126774743604,), (60.827126774743604,), (60.827126774743604,), (60.734140450492539,), (60.734140450492539,), (60.734140450492539,), (60.016512291477852,), (62.019306171252737,), (62.019306171252737,), (62.019306171252737,), (62.019306171252737,), (62.004588089064768,), (62.004588089064768,), (62.004588089064768,), (61.980845528692321,), (60.928820859314506,), (60.928820859314506,), (60.928820859314506,), (60.87047647406024,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.449157818926984,), (60.059556363381951,), (60.059556363381951,), (60.059556363381951,), (60.059556363381951,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.020192564151358,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.05807831687472,), (60.565422101233239,), (60.565422101233239,), (60.744098802888644,), (60.744098802888644,), (60.744098802888644,), (60.744098802888644,), (60.744098802888644,), (60.744098802888644,), (60.744098802888644,), (60.744098802888644,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.565422101233239,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.498059429333296,), (60.491996788862302,), (60.491996788862302,), (60.491996788862302,), (60.491996788862302,), (60.491996788862302,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.459565220500629,), (60.39547433699574,), (60.39547433699574,), (60.415171855885994,), (60.415171855885994,), (60.415171855885994,), (60.415171855885994,), (60.415171855885994,), (60.402602045731342,), (60.402602045731342,), (60.402602045731342,), (60.390352800893929,), (60.390352800893929,), (60.396532569695729,), (60.393613728543173,), (60.393613728543173,), (60.393613728543173,), (60.407657399977722,), (60.37147029073747,), (60.37147029073747,), (60.37147029073747,), (60.37147029073747,), (60.37147029073747,), (60.37147029073747,), (60.28292553645025,), (60.280501997001288,), (60.280501997001288,), (60.147926937622799,), (60.147926937622799,), (60.147926937622799,), (60.147926937622799,), (60.147926937622799,), (60.19211563470175,), (60.012935443954731,), (60.012935443954731,), (60.012935443954731,), (60.012935443954731,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.003158198718111,), (60.015901941403548,), (60.013505534467377,), (60.013505534467377,), (60.013505534467377,), (60.013505534467377,), (60.015901941403548,), (60.015901941403548,), (60.015901941403548,), (60.017865610293427,), (60.017865610293427,), (60.017865610293427,), (60.017865610293427,), (60.029301150664729,), (60.029301150664729,), (60.029301150664729,), (60.029301150664729,), (60.017089978078005,), (60.017089978078005,), (60.017089978078005,), (60.017089978078005,), (60.017089978078005,), (60.017089978078005,), (60.017089978078019,), (60.017089978078019,), (60.017089978078019,), (60.017089978078019,), (60.017089978078019,), (60.017089978078019,), (60.017089978078019,), (60.017089978078019,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.010511904505769,), (60.014954753074377,), (60.010511904505769,), (60.010511904505769,), (60.006513340794022,), (60.006513340794022,), (60.006513340794022,), (60.006513340794022,), (60.006513340794022,), (60.006513340794022,), (60.00683450525689,), (60.00683450525689,), (60.006834505256876,), (60.006834505256876,), (60.006834505256876,), (60.006834505256876,), (60.006834505256876,), (60.006834505256876,), (60.005970715365123,), (60.005970715365123,), (60.005970715365123,), (60.005970715365123,), (60.005921879076524,), (60.005921879076524,), (60.005562008342466,), (60.005562008342466,), (60.006083370161704,), (60.006083370161704,), (60.006083370161704,), (60.006083370161704,), (60.006331993224983,), (60.006331993224983,), (60.003016688951341,), (60.003016688951341,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.0033765596854,), (60.003016688951341,), (60.003016688951341,), (60.003016688951341,), (60.000225375696758,), (60.000225375696743,), (60.000225375696743,), (60.000225375696743,), (60.000225375696743,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.00125503972103,), (60.002032629184157,), (60.002032629184157,), (60.004326394544314,), (60.004326394544314,), (60.004326394544314,), (60.004326394544314,), (60.004326394544314,), (60.004326394544314,), (60.004326394544314,), (60.000269148534414,), (60.000269148534414,), (60.000269148534414,), (60.000269148534414,), (60.000269148534414,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003206087555135,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.003105259926109,), (60.002166492333792,), (60.002166492333792,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.002622660672657,), (60.001642751425337,), (60.001783800209694,), (60.002421418283426,), (60.002421418283426,), (60.002421418283426,), (60.002421418283426,), (60.002421418283426,), (60.002421418283426,), (60.001576527450325,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002191984928757,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002194465230737,), (60.002214928264209,), (60.001435961676108,), (60.001435961676108,), (60.001435961676108,), (60.000692275043349,), (60.00067597440983,), (60.001418764051316,), (60.001418764051316,), (60.001418764051316,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962473,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000356257962459,), (60.000499362966792,), (60.000499362966792,), (60.000499362966792,), (60.000499362966792,), (60.000515907844338,), (60.000515907844338,), (60.000515907844338,), (60.000515907844338,), (60.000515907844338,)], [(101.90460612399957,), (104.51802858077912,), (104.51802858077912,), (104.51802858077912,), (104.51802858077912,), (104.51802858077912,), (104.51802858077912,), (102.43951669354573,), (102.43951669354573,), (102.43951669354573,), (102.43951669354573,), (102.43951669354573,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (102.21023850755793,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532654,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (100.91996910532656,), (104.65876500510907,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65198294467712,), (104.65137255923824,), (104.65137255923824,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.64471935795449,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (104.63103451641487,), (102.31875730808399,), (102.31875730808399,), (102.30507246654437,), (102.30507246654437,), (102.61860650966398,), (102.61860650966398,), (104.39843831142781,), (104.39843831142781,), (104.39843831142781,), (104.3984383114278,), (104.3984383114278,), (104.3984383114278,), (104.3984383114278,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.82145108232797,), (104.97743784740854,), (104.97743784740854,), (104.97743784740854,), (104.97743784740852,), (104.97743784740852,), (104.97743784740852,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598898,), (104.91264735598899,), (104.91264735598899,), (104.91264735598899,), (104.91264735598899,), (104.91264735598899,), (104.91264735598899,), (104.91264735598899,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.90681621176122,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.97776258201034,), (104.702123760679,), (104.51151538138258,), (104.51151538138258,), (104.51151538138258,), (104.5616158396884,), (104.5616158396884,), (104.5616158396884,), (104.90629140878073,), (104.8849311025255,), (104.8849311025255,), (104.8849311025255,), (104.8849311025255,), (104.85275222902425,), (104.85275222902425,), (104.85275222902425,), (104.81529902221527,), (104.65077241455342,), (104.65077241455342,), (104.65077241455342,), (104.44416218153161,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.41996731880894,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.83906337135465,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.88340457470086,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.99592728746522,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.9725458668571,), (104.96427177833024,), (104.96427177833024,), (104.96427177833024,), (104.96427177833024,), (104.96427177833024,), (104.96427177833024,), (104.96427177833024,), (104.96163321529359,), (104.96163321529359,), (104.96163321529359,), (104.95952888743886,), (104.95952888743886,), (104.97468004799292,), (104.9725757201382,), (104.9725757201382,), (104.9725757201382,), (104.99421038872397,), (104.97732668191918,), (104.97732668191918,), (104.97732668191918,), (104.97732668191918,), (104.97732668191918,), (104.97732668191918,), (104.99228744746259,), (104.9895096276167,), (104.9895096276167,), (104.96435905748578,), (104.96435905748578,), (104.96435905748578,), (104.96435905748578,), (104.96435905748578,), (104.99406976642356,), (104.9926509675324,), (104.9926509675324,), (104.9926509675324,), (104.9926509675324,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.99241163971774,), (104.99244222272134,), (104.99244222272134,), (104.99244222272134,), (104.99244222272134,), (104.99244222272134,), (104.99244222272134,), (104.99244222272134,), (104.99244222272134,), (104.98726885418466,), (104.98726885418466,), (104.98025208058665,), (104.98025208058665,), (104.98294682658313,), (104.98294682658313,), (104.98294682658313,), (104.98294682658313,), (104.97729851670218,), (104.97729851670218,), (104.97729851670218,), (104.97729851670218,), (104.97729851670218,), (104.97729851670218,), (104.97729851670219,), (104.97729851670219,), (104.97729851670219,), (104.97729851670219,), (104.97729851670219,), (104.97729851670219,), (104.97729851670219,), (104.97729851670219,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98987314768651,), (104.98884079243327,), (104.98987314768651,), (104.98987314768651,), (104.99080226741442,), (104.99080226741442,), (104.99080226741442,), (104.99080226741442,), (104.99080226741442,), (104.99080226741442,), (104.99108648704085,), (104.99108648704085,), (104.99108648704083,), (104.99108648704083,), (104.99108648704083,), (104.99108648704083,), (104.99108648704083,), (104.99108648704083,), (104.99491254935963,), (104.99491254935963,), (104.99491254935963,), (104.99491254935963,), (104.99528247473469,), (104.99528247473469,), (104.99536609551021,), (104.99536609551021,), (104.99515067004457,), (104.99515067004457,), (104.99515067004457,), (104.99515067004457,), (104.99840516869932,), (104.99840516869932,), (104.99907074404321,), (104.99907074404321,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.9989871232677,), (104.99907074404321,), (104.99907074404321,), (104.99907074404321,), (104.99869500958368,), (104.99869500958367,), (104.99869500958367,), (104.99869500958367,), (104.99869500958367,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99806237270396,), (104.99791444611603,), (104.99791444611603,), (104.99791444611603,), (104.99791444611603,), (104.99791444611603,), (104.99910252305959,), (104.99910252305959,), (104.99982087274785,), (104.99982087274785,), (104.99982087274785,), (104.99982087274785,), (104.99982087274785,), (104.99982087274785,), (104.99982087274785,), (104.99951222705296,), (104.99951222705296,), (104.99951222705296,), (104.99951222705296,), (104.99951222705296,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99959768649327,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99957759973037,), (104.99999251491673,), (104.99999251491673,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99927986813954,), (104.99968440515227,), (104.99968092368992,), (104.9994432515728,), (104.9994432515728,), (104.9994432515728,), (104.9994432515728,), (104.9994432515728,), (104.9994432515728,), (104.99944325157279,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99993758858233,), (104.99988815488135,), (104.9998527825126,), (104.9998527825126,), (104.9998527825126,), (104.99983164193202,), (104.99984487599012,), (104.99988529775953,), (104.99988529775953,), (104.99988529775953,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.99992052133781,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.9999205213378,), (104.99993005317508,), (104.99993005317508,), (104.99993005317508,), (104.99993005317508,), (104.99992878127195,), (104.99992878127195,), (104.99992878127195,), (104.99992878127195,), (104.99992878127195,)], [(0.042551957254653557,), (0.36792740750669412,), (0.36792740750669412,), (0.36792740750669412,), (0.36792740750669412,), (0.36792740750669412,), (0.36792740750669412,), (0.054018666841130096,), (0.054018666841130096,), (0.054018666841130096,), (0.054018666841130096,), (0.054018666841130096,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.24472019111122323,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.4416364076349017,), (0.82117665318923083,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.85427087875710683,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.88405568176819527,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.9737593662555396,), (0.79507297483055694,), (0.79507297483055694,), (0.946842783231298,), (0.946842783231298,), (0.946842783231298,), (0.946842783231298,), (0.97106770795311548,), (0.89389329597881939,), (0.89389329597881939,), (0.89389329597881939,), (0.89389329597881939,), (0.89389329597881939,), (0.89389329597881939,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.89628812239501532,), (0.88710968963265546,), (0.88710968963265546,), (0.88710968963265546,), (0.88710968963265546,), (0.88710968963265546,), (0.88710968963265546,), (0.87751976830890932,), (0.87751976830890932,), (0.87751976830890932,), (0.87751976830890932,), (0.87751976830890932,), (0.87751976830890932,), (0.87751976830890932,), (0.87751976830890932,), (0.88599322198073305,), (0.88599322198073305,), (0.85373924715027971,), (0.85373924715027971,), (0.85373924715027971,), (0.85373924715027971,), (0.88599322198073305,), (0.88599322198073305,), (0.88599322198073305,), (0.88599322198073305,), (0.88599322198073305,), (0.88599322198073305,), (0.88599322198073305,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.88298988215731922,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.72062558099295138,), (0.91473059059878814,), (0.9841171762687726,), (0.9841171762687726,), (0.9841171762687726,), (0.97019691840725497,), (0.97019691840725497,), (0.97019691840725497,), (0.99896668887466333,), (0.89096713272856165,), (0.89096713272856165,), (0.90553616465993725,), (0.90553616465993725,), (0.91606718685495347,), (0.91606718685495347,), (0.91606718685495347,), (0.85283801754684074,), (0.87422512963004462,), (0.87422512963004462,), (0.87422512963004462,), (0.85299153487874069,), (0.91418039951137819,), (0.91418039951137819,), (0.91418039951137819,), (0.91418039951137819,), (0.91418039951137819,), (0.91418039951137819,), (0.91418039951137819,), (0.91418039951137819,), (0.91802067681634969,), (0.91802067681634969,), (0.91802067681634969,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.83068499024855758,), (0.83068499024855758,), (0.83068499024855758,), (0.87221054804856346,), (0.87221054804856346,), (0.87221054804856346,), (0.87221054804856346,), (0.87221054804856346,), (0.87221054804856346,), (0.87221054804856346,), (0.87221054804856346,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.87260058629799175,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.80138516393280879,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.83210259027974798,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.99423695795259137,), (0.97526382406877987,), (0.97526382406877987,), (0.97526382406877987,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84831602704703235,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.84837529079805907,), (0.9326731602076701,), (0.9326731602076701,), (0.9326731602076701,), (0.94297526196703607,), (0.94297526196703607,), (0.94297526196703607,), (0.94297526196703607,), (0.94297526196703607,), (0.94297526196703607,), (0.94297526196703607,), (0.94546336961488364,), (0.94546336961488364,), (0.94546336961488364,), (0.93355221399616384,), (0.93355221399616384,), (0.92747060782577229,), (0.93506274981022963,), (0.93506274981022963,), (0.93506274981022963,), (0.86471087601371444,), (0.97628432393448084,), (0.97628432393448084,), (0.97628432393448084,), (0.97628432393448084,), (0.97628432393448084,), (0.97628432393448084,), (0.95420584924083274,), (0.96676679154063816,), (0.96676679154063816,), (0.91215705513350043,), (0.91215705513350043,), (0.91215705513350043,), (0.91215705513350043,), (0.91215705513350043,), (0.98405637880452757,), (0.97951704293240538,), (0.97951704293240538,), (0.97951704293240538,), (0.97951704293240538,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.9920779852322108,), (0.98995432206723322,), (0.99794274356184953,), (0.99794274356184953,), (0.99794274356184953,), (0.99794274356184953,), (0.99794274356184953,), (0.99794274356184953,), (0.99794274356184953,), (0.99794274356184953,), (0.99552732188597781,), (0.99552732188597781,), (0.99541681090553802,), (0.99541681090553802,), (0.97114661490440801,), (0.97114661490440801,), (0.97114661490440801,), (0.97114661490440801,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98123930508834689,), (0.98490008671348495,), (0.98490008671348495,), (0.98490008671348495,), (0.98490008671348495,), (0.98490008671348495,), (0.98490008671348495,), (0.98490008671348495,), (0.97488568991726077,), (0.98490008671348495,), (0.98490008671348495,), (0.99391304383008672,), (0.99391304383008672,), (0.99391304383008672,), (0.99391304383008672,), (0.99391304383008672,), (0.99391304383008672,), (0.99293332799946532,), (0.99293332799946532,), (0.99293332799946532,), (0.99293332799946532,), (0.99293332799946532,), (0.99293332799946532,), (0.99293332799946532,), (0.99293332799946532,), (0.99396882189353386,), (0.99396882189353386,), (0.99396882189353386,), (0.99396882189353386,), (0.99397384191924409,), (0.99397384191924409,), (0.99478500805973824,), (0.99478500805973824,), (0.98584847482982763,), (0.98584847482982763,), (0.98584847482982763,), (0.98584847482982763,), (0.98767145000202472,), (0.98767145000202472,), (0.984822715336794,), (0.984822715336794,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.97445325561148533,), (0.96778764404492201,), (0.96778764404492201,), (0.96778764404492201,), (0.96778764404492201,), (0.96778764404492201,), (0.96778764404492201,), (0.984822715336794,), (0.984822715336794,), (0.984822715336794,), (0.99573301253515067,), (0.99573301253515067,), (0.99573301253515067,), (0.99573301253515067,), (0.99573301253515067,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99642112421515949,), (0.99644420860641569,), (0.99644420860641569,), (0.99644420860641569,), (0.99644420860641569,), (0.99644420860641569,), (0.99406251992199146,), (0.99406251992199146,), (0.99788360932478726,), (0.99788360932478726,), (0.99788360932478726,), (0.99788360932478726,), (0.99788360932478726,), (0.99788360932478726,), (0.99788360932478726,), (0.99791195258769583,), (0.99791195258769583,), (0.99791195258769583,), (0.99791195258769583,), (0.99791195258769583,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99760544289376263,), (0.99758040791497038,), (0.99758040791497038,), (0.99758040791497038,), (0.99758040791497038,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99844637659998203,), (0.99914930199548591,), (0.99914930199548591,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.9990350775708845,), (0.99914930199548591,), (0.99920101008194706,), (0.99998167513672409,), (0.99998167513672409,), (0.99998167513672409,), (0.99998167513672409,), (0.99998167513672409,), (0.99998167513672409,), (0.99998167513672409,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.99923253930960976,), (0.9983737349884737,), (0.99799250559310415,), (0.99799250559310415,), (0.99799250559310415,), (0.99794239242584037,), (0.99801906682867336,), (0.99990668927388071,), (0.99990668927388071,), (0.99990668927388071,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.99833856523472131,), (0.9995383387042388,), (0.9995383387042388,), (0.9995383387042388,), (0.9995383387042388,), (0.99841749642653499,), (0.99841749642653499,), (0.99841749642653499,), (0.99841749642653499,), (0.99841749642653499,)], [(0.95744804274534645,), (0.63207259249330572,), (0.63207259249330572,), (0.63207259249330572,), (0.63207259249330572,), (0.63207259249330572,), (0.63207259249330572,), (0.9459813331588699,), (0.9459813331588699,), (0.9459813331588699,), (0.9459813331588699,), (0.9459813331588699,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.75527980888877666,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.55836359236509836,), (0.17882334681076939,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.14572912124289344,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.11594431823180509,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.026240633744460881,), (0.20492702516944339,), (0.20492702516944339,), (0.053157216768702498,), (0.053157216768702498,), (0.053157216768702498,), (0.053157216768702498,), (0.028932292046885043,), (0.10610670402118064,), (0.10610670402118064,), (0.10610670402118064,), (0.10610670402118064,), (0.10610670402118064,), (0.10610670402118064,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.10371187760498476,), (0.11289031036734409,), (0.11289031036734409,), (0.11289031036734409,), (0.11289031036734409,), (0.11289031036734409,), (0.11289031036734409,), (0.12248023169109028,), (0.12248023169109028,), (0.12248023169109028,), (0.12248023169109028,), (0.12248023169109028,), (0.12248023169109028,), (0.12248023169109028,), (0.12248023169109028,), (0.11400677801926702,), (0.11400677801926702,), (0.14626075284972034,), (0.14626075284972034,), (0.14626075284972034,), (0.14626075284972034,), (0.11400677801926702,), (0.11400677801926702,), (0.11400677801926702,), (0.11400677801926702,), (0.11400677801926702,), (0.11400677801926702,), (0.11400677801926702,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.11701011784268088,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.27937441900704924,), (0.08526940940121247,), (0.015882823731228485,), (0.015882823731228485,), (0.015882823731228485,), (0.029803081592746153,), (0.029803081592746153,), (0.029803081592746153,), (0.0010333111253381828,), (0.10903286727143852,), (0.10903286727143852,), (0.094463835340063182,), (0.094463835340063182,), (0.083932813145046956,), (0.083932813145046956,), (0.083932813145046956,), (0.14716198245316034,), (0.12577487036995691,), (0.12577487036995691,), (0.12577487036995691,), (0.1470084651212622,), (0.085819600488625802,), (0.085819600488625802,), (0.085819600488625802,), (0.085819600488625802,), (0.085819600488625802,), (0.085819600488625802,), (0.085819600488625802,), (0.085819600488625802,), (0.081979323183650407,), (0.081979323183650407,), (0.081979323183650407,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.16931500975144545,), (0.16931500975144545,), (0.16931500975144545,), (0.12778945195143662,), (0.12778945195143662,), (0.12778945195143662,), (0.12778945195143662,), (0.12778945195143662,), (0.12778945195143662,), (0.12778945195143662,), (0.12778945195143662,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.1273994137020083,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.19861483606719113,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.16789740972025202,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.0057630420474094335,), (0.02473617593122,), (0.02473617593122,), (0.02473617593122,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15168397295296776,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.15162470920194099,), (0.06732683979233009,), (0.06732683979233009,), (0.06732683979233009,), (0.057024738032964359,), (0.057024738032964359,), (0.057024738032964359,), (0.057024738032964359,), (0.057024738032964359,), (0.057024738032964359,), (0.057024738032964359,), (0.054536630385116441,), (0.054536630385116441,), (0.054536630385116441,), (0.066447786003836232,), (0.066447786003836232,), (0.072529392174227741,), (0.064937250189770354,), (0.064937250189770354,), (0.064937250189770354,), (0.13528912398628862,), (0.023715676065515251,), (0.023715676065515251,), (0.023715676065515251,), (0.023715676065515251,), (0.023715676065515251,), (0.023715676065515251,), (0.045794150759172134,), (0.033233208459366739,), (0.033233208459366739,), (0.087842944866504846,), (0.087842944866504846,), (0.087842944866504846,), (0.087842944866504846,), (0.087842944866504846,), (0.0159436211954819,), (0.020482957067600976,), (0.020482957067600976,), (0.020482957067600976,), (0.020482957067600976,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.0079220147677955804,), (0.010045677932768117,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0020572564381643125,), (0.0044726781140342273,), (0.0044726781140342273,), (0.0045831890944619917,), (0.0045831890944619917,), (0.028853385095586742,), (0.028853385095586742,), (0.028853385095586742,), (0.028853385095586742,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.018760694911651818,), (0.015099913286515103,), (0.015099913286515103,), (0.015099913286515103,), (0.015099913286515103,), (0.015099913286515103,), (0.015099913286515103,), (0.015099913286515103,), (0.025114310082738039,), (0.015099913286515103,), (0.015099913286515103,), (0.0060869561699144602,), (0.0060869561699144602,), (0.0060869561699144602,), (0.0060869561699144602,), (0.0060869561699144602,), (0.0060869561699144602,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0070666720005348946,), (0.0060311781064665065,), (0.0060311781064665065,), (0.0060311781064665065,), (0.0060311781064665065,), (0.0060261580807561901,), (0.0060261580807561901,), (0.0052149919402621325,), (0.0052149919402621325,), (0.01415152517017235,), (0.01415152517017235,), (0.01415152517017235,), (0.01415152517017235,), (0.012328549997975101,), (0.012328549997975101,), (0.015177284663207974,), (0.015177284663207974,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.025546744388507306,), (0.032212355955078091,), (0.032212355955078091,), (0.032212355955078091,), (0.032212355955078091,), (0.032212355955078091,), (0.032212355955078091,), (0.015177284663207974,), (0.015177284663207974,), (0.015177284663207974,), (0.004266987464850009,), (0.004266987464850009,), (0.004266987464850009,), (0.004266987464850009,), (0.004266987464850009,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035788757848310851,), (0.0035557913935842195,), (0.0035557913935842195,), (0.0035557913935842195,), (0.0035557913935842195,), (0.0035557913935842195,), (0.0059374800780083673,), (0.0059374800780083673,), (0.0021163906752191121,), (0.0021163906752191121,), (0.0021163906752191121,), (0.0021163906752191121,), (0.0021163906752191121,), (0.0021163906752191121,), (0.0021163906752191121,), (0.0020880474123155281,), (0.0020880474123155281,), (0.0020880474123155281,), (0.0020880474123155281,), (0.0020880474123155281,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0023945571062434258,), (0.0024195920850356143,), (0.0024195920850356143,), (0.0024195920850356143,), (0.0024195920850356143,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.0015536234000270563,), (0.00085069800452289605,), (0.00085069800452289605,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00096492242911559375,), (0.00085069800452289605,), (0.00079898991806037095,), (1.8324863279892568e-05,), (1.8324863279892568e-05,), (1.8324863279892568e-05,), (1.8324863279892568e-05,), (1.8324863279892568e-05,), (1.8324863279892568e-05,), (1.8324863279892568e-05,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.00076746069039859569,), (0.0016262650115497035,), (0.0020074944069224873,), (0.0020074944069224873,), (0.0020074944069224873,), (0.0020576075741815789,), (0.0019809331713488872,), (9.3310726119335814e-05,), (9.3310726119335814e-05,), (9.3310726119335814e-05,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.0016614347653064326,), (0.00046166129576402106,), (0.00046166129576402106,), (0.00046166129576402106,), (0.00046166129576402106,), (0.0015825035734792017,), (0.0015825035734792017,), (0.0015825035734792017,), (0.0015825035734792017,), (0.0015825035734792017,)], [(21.401848234897418,), (4.2465527338924351,), (0.56461808212696729,), (0.56461808212696729,), (0.56461808212696729,), (0.56461808212696729,), (0.56461808212696729,), (27.482520256761511,), (27.482520256761511,), (27.482520256761511,), (27.482520256761511,), (27.482520256761511,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (12.102757141573333,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (16.571165133759663,), (12.548546441483323,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (8.4037462216403434,), (3.443004107883282,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (3.080779477759549,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (2.7547773106481892,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (1.7140497806427553,), (4.7298882088277283,), (4.7298882088277283,), (2.1637183162367881,), (2.1637183162367881,), (2.1637183162367881,), (2.1637183162367881,), (1.7590166342021585,), (1.7590166342021585,), (1.7590166342021585,), (1.7590166342021585,), (1.7590166342021585,), (1.7590166342021585,), (1.7590166342021585,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (3.4543768464049647,), (5.8551245981311073,), (5.8551245981311073,), (5.8551245981311073,), (5.8551245981311073,), (5.8551245981311073,), (5.8551245981311073,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (2.6328474382153839,), (2.6328474382153839,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (7.3170913006645737,), (2.6328474382153839,), (2.6328474382153839,), (2.6328474382153839,), (2.6328474382153839,), (2.6328474382153839,), (2.6328474382153839,), (2.6328474382153839,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (2.7644244414433961,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (5.4543199635918054,), (2.331556411171694,), (1.6998845869338053,), (1.6998845869338053,), (1.6998845869338053,), (1.8785711581075903,), (1.8785711581075903,), (1.8785711581075903,), (4.1757386880197673,), (2.8702996809996328,), (2.8702996809996328,), (1.5951067013220082,), (1.5951067013220082,), (1.5018285833839189,), (1.5018285833839189,), (1.5018285833839189,), (1.1800111908903397,), (0.69514224804519475,), (0.69514224804519475,), (0.69514224804519475,), (2.7566463430282457,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256399,), (1.4621697799256401,), (1.4621697799256401,), (1.4621697799256401,), (1.6773560914331698,), (1.6773560914331698,), (1.6773560914331698,), (1.6773560914331698,), (0.28459704181290579,), (0.28459704181290579,), (0.28459704181290579,), (0.70549008169916483,), (0.70549008169916483,), (1.1263831215854241,), (1.1263831215854241,), (1.1263831215854241,), (1.1263831215854241,), (1.1263831215854241,), (1.1263831215854241,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (1.8456884175631161,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101578,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.025316164619101689,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.91769622868440437,), (0.03654925040875464,), (0.03654925040875464,), (0.03654925040875464,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (0.11455417102563192,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (1.0470542515369909,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.19420698380151274,), (0.3929884716678067,), (0.3929884716678067,), (0.5690559744239545,), (0.65298098166997687,), (0.65298098166997687,), (0.65298098166997687,), (0.79830858770440871,), (0.48350187547345203,), (0.48350187547345203,), (0.48350187547345203,), (0.48350187547345203,), (0.48350187547345203,), (0.48350187547345203,), (0.13607920251988231,), (0.13741317751305526,), (0.13741317751305526,), (0.41663249007126646,), (0.41663249007126646,), (0.41663249007126646,), (0.41663249007126646,), (0.41663249007126646,), (0.29000990910931601,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.19705453854419208,), (0.13574021475855308,), (0.18104183590202505,), (0.18104183590202505,), (0.18104183590202505,), (0.18104183590202505,), (0.18104183590202505,), (0.18104183590202505,), (0.18104183590202505,), (0.18104183590202505,), (0.38194921004747046,), (0.38194921004747046,), (0.38194921004747051,), (0.38194921004747051,), (0.16547868077171915,), (0.16547868077171915,), (0.16547868077171915,), (0.16547868077171915,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11708981975355354,), (0.11302594912113029,), (0.11302594912113029,), (0.11302594912113029,), (0.11302594912113029,), (0.11302594912113029,), (0.11302594912113029,), (0.11302594912113029,), (0.17440400529654032,), (0.11302594912113029,), (0.11302594912113029,), (0.057785698563261254,), (0.057785698563261254,), (0.057785698563261254,), (0.057785698563261254,), (0.057785698563261254,), (0.057785698563261254,), (0.026215529057582572,), (0.026215529057582572,), (0.026215529057582572,), (0.026215529057582572,), (0.026215529057582572,), (0.026215529057582572,), (0.026215529057582572,), (0.026215529057582572,), (0.018073417730637014,), (0.018073417730637014,), (0.018073417730637014,), (0.018073417730637014,), (0.014499312455700838,), (0.014499312455700838,), (0.0095276899054926242,), (0.0095276899054926242,), (0.10353069598208096,), (0.10353069598208096,), (0.10353069598208096,), (0.10353069598208096,), (0.020356617034897023,), (0.020356617034897023,), (0.11028067886377664,), (0.11028067886377664,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301373,), (0.16067202510301376,), (0.16067202510301376,), (0.16067202510301376,), (0.16067202510301376,), (0.16067202510301376,), (0.16067202510301376,), (0.11028067886377664,), (0.11028067886377664,), (0.11028067886377664,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784038,), (0.089224248745784024,), (0.089224248745784024,), (0.089224248745784024,), (0.089224248745784024,), (0.089224248745784024,), (0.18427830166885756,), (0.18427830166885756,), (0.063341835021364479,), (0.063341835021364479,), (0.063341835021364479,), (0.063341835021364479,), (0.063341835021364479,), (0.063341835021364479,), (0.063341835021364479,), (0.14800534334822174,), (0.14800534334822174,), (0.14800534334822174,), (0.14800534334822174,), (0.14800534334822174,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.18095631654842775,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.19154161988586343,), (0.046263998826873681,), (0.068346663398069357,), (0.0072648608521352978,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.16663148178683376,), (0.068346663398069357,), (0.068163374948418523,), (0.068710025102731637,), (0.068710025102731637,), (0.068710025102731637,), (0.068710025102731637,), (0.068710025102731637,), (0.068710025102731637,), (0.068710025102731637,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.06838299956853558,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.075298049915843865,), (0.091674840783800574,), (0.087599121282794692,), (0.087599121282794692,), (0.087599121282794692,), (0.091448775977744826,), (0.083517137986332549,), (0.068677322549312039,), (0.068677322549312039,), (0.068677322549312039,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.041082096851196757,), (0.029389062824596926,), (0.029389062824596926,), (0.029389062824596926,), (0.029389062824596926,), (0.021676784086601467,), (0.021676784086601467,), (0.021676784086601467,), (0.021676784086601467,), (0.021676784086601467,)], [(5.2229762131929469,), (4.6713357695934157,), (4.6713357695934157,), (4.6713357695934157,), (4.6713357695934157,), (4.6713357695934157,), (4.6713357695934157,), (8.2084028065084897,), (8.2084028065084897,), (8.2084028065084897,), (8.2084028065084897,), (8.2084028065084897,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.5212327059724355,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (8.7726686157419174,), (5.5964125860456591,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (11.222135248473585,), (20.621060023998481,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (20.20894448564734,), (19.838040501131314,), (19.838040501131314,), (19.838040501131314,), (19.838040501131314,), (19.838040501131314,), (19.838040501131314,), (19.838040501131314,), (15.728092922249877,), (15.728092922249877,), (15.728092922249877,), (15.728092922249877,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (17.389136294277659,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (14.927842202376269,), (9.0609572912495917,), (9.0609572912495917,), (16.554836858178817,), (16.554836858178817,), (16.554836858178817,), (16.554836858178817,), (15.090541667956524,), (15.090541667956524,), (15.090541667956524,), (15.090541667956524,), (15.090541667956524,), (15.090541667956524,), (15.090541667956524,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (14.766514343573604,), (12.995243773092128,), (11.160837695539872,), (11.160837695539872,), (11.160837695539872,), (11.160837695539872,), (11.160837695539872,), (11.160837695539872,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (2.8585059195256588,), (2.8585059195256588,), (2.8585059195256588,), (2.8585059195256588,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (1.2643624060923297,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.51715254625105056,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (0.67645003508170454,), (9.6498143617604359,), (17.854873221724123,), (17.854873221724123,), (17.854873221724123,), (16.632294759208381,), (16.632294759208381,), (16.632294759208381,), (6.800773898796745,), (1.8366069590560503,), (1.8366069590560503,), (2.2813472374655444,), (2.2813472374655444,), (3.6697523605850839,), (3.6697523605850839,), (3.6697523605850839,), (5.1057783857564845,), (4.7370438844206122,), (4.7370438844206122,), (4.7370438844206122,), (3.0342950287706696,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (4.6077334768689555,), (3.8117042346404366,), (3.8117042346404366,), (3.8117042346404366,), (3.8117042346404366,), (5.4253698954147032,), (5.4253698954147032,), (5.4253698954147032,), (5.0460497658972248,), (5.0460497658972248,), (4.6667296363797464,), (4.6667296363797464,), (4.6667296363797464,), (6.275872988613294,), (6.275872988613294,), (6.275872988613294,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (4.5596958197962039,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (3.6902298974943424,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.5788447653176743,), (5.7318225696113645,), (5.7318225696113645,), (5.7318225696113645,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8790913842766752,), (3.8342284821854218,), (3.8342284821854218,), (3.8342284821854218,), (3.8342284821854218,), (3.8342284821854218,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.1191882112940026,), (3.9559564389137742,), (3.9559564389137742,), (3.9559564389137742,), (3.9559564389137742,), (3.9559564389137742,), (3.9559564389137742,), (3.9559564389137742,), (3.9963330507959025,), (3.9963330507959025,), (3.9963330507959025,), (3.2746052739686959,), (3.2746052739686959,), (3.847386348307805,), (3.7830327239275769,), (3.7830327239275769,), (3.7830327239275769,), (1.8718504892178147,), (5.515768373896309,), (5.515768373896309,), (5.515768373896309,), (5.515768373896309,), (5.515768373896309,), (5.515768373896309,), (3.9319712824452502,), (3.8557755785548773,), (3.8557755785548773,), (1.8841350740086782,), (1.8841350740086782,), (1.8841350740086782,), (1.8841350740086782,), (1.8841350740086782,), (3.4063067077985787,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.6438640929451109,), (4.7749357828201973,), (3.8971706467580436,), (3.8971706467580436,), (3.8971706467580436,), (3.8971706467580436,), (3.8971706467580436,), (3.8971706467580436,), (3.8971706467580436,), (3.8971706467580436,), (3.0760362431659845,), (3.0760362431659845,), (3.0760362431659845,), (3.0760362431659845,), (2.8890363197824618,), (2.8890363197824618,), (2.8890363197824618,), (2.8890363197824618,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (0.35751723651750345,), (2.1287745511576355,), (2.1287745511576355,), (2.1287745511576355,), (2.1287745511576355,), (2.1287745511576355,), (2.1287745511576355,), (2.1287745511576355,), (1.6585022271002576,), (1.4903949070537081,), (1.4903949070537081,), (1.3390983190118135,), (1.3390983190118135,), (1.3390983190118135,), (4.1482272521809707,), (4.1482272521809707,), (4.1482272521809707,), (4.0404918440738395,), (4.0404918440738395,), (4.0404918440738395,), (4.0404918440738395,), (4.0404918440738395,), (4.0404918440738395,), (4.0404918440738395,), (4.0404918440738395,), (4.3043094917497307,), (4.3043094917497307,), (4.3043094917497307,), (4.3043094917497307,), (4.5711784972961427,), (4.5711784972961427,), (4.557561804372372,), (4.557561804372372,), (1.7717863655233099,), (1.7717863655233099,), (1.7717863655233099,), (1.7717863655233099,), (3.0776182508781105,), (3.0776182508781105,), (2.1364354562285741,), (2.1364354562285741,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (1.5054208640755473,), (2.3869768004935743,), (2.3869768004935743,), (2.3869768004935743,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (4.8141535298027698,), (1.7623632019153277,), (1.3844120365916466,), (4.4657660294472681,), (4.4657660294472681,), (4.4657660294472681,), (4.4657660294472681,), (4.4657660294472681,), (4.4657660294472681,), (4.4657660294472681,), (1.6082451586682269,), (1.6082451586682269,), (1.6082451586682269,), (1.6082451586682269,), (1.6082451586682269,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.9222534683600876,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (1.6933373378622414,), (2.6941455649209867,), (3.4938999252603229,), (1.7777863595519623,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (2.9289030502804452,), (3.4938999252603229,), (3.550267144069676,), (3.643234025076076,), (3.643234025076076,), (3.643234025076076,), (3.643234025076076,), (3.643234025076076,), (3.643234025076076,), (3.643234025076076,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.5767013713815903,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (2.7281034981752237,), (1.4301942205915115,), (0.75915009530802136,), (0.75915009530802136,), (0.75915009530802136,), (1.3645940572542712,), (0.66742797548586741,), (3.5365807597066277,), (3.5365807597066277,), (3.5365807597066277,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (0.80045192590796643,), (1.5952273628991334,), (1.5952273628991334,), (1.5952273628991334,), (1.5952273628991334,), (0.27807247135181723,), (0.27807247135181723,), (0.27807247135181723,), (0.27807247135181723,), (0.27807247135181723,)], [(0.59922375629862823,), (0.63945062830193955,), (0.63945062830193955,), (0.63945062830193955,), (0.63945062830193955,), (0.63945062830193955,), (0.63945062830193955,), (0.58732572683999007,), (0.58732572683999007,), (0.58732572683999007,), (0.58732572683999007,), (0.58732572683999007,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.82412148731239276,), (0.87239345335882934,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.87748519671953185,), (0.88145991125681467,), (0.88145991125681467,), (0.88145991125681467,), (0.98748474176247769,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99145945629976051,), (0.99503669938331507,), (0.99503669938331507,), (0.99503669938331507,), (0.99503669938331507,), (0.99503669938331507,), (0.99503669938331507,), (0.99503669938331507,), (0.99521043474574755,), (0.99521043474574755,), (0.99521043474574755,), (0.99521043474574755,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.99584566273314457,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95266843628151265,), (0.95673308221040776,), (0.95673308221040776,), (0.91355585575877585,), (0.91355585575877585,), (0.91355585575877585,), (0.91355585575877585,), (0.96625502320841927,), (0.96625502320841927,), (0.96625502320841927,), (0.96625502320841927,), (0.96625502320841927,), (0.96625502320841927,), (0.96625502320841927,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99952233393673973,), (0.99956619567867544,), (0.98628656605246356,), (0.98628656605246356,), (0.98628656605246356,), (0.98628656605246356,), (0.98628656605246356,), (0.98628656605246356,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.99595334417301151,), (0.99595334417301151,), (0.99595334417301151,), (0.99595334417301151,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.9982643334591027,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.999134343489952,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99913453336178681,), (0.99848300220002328,), (0.99789677795062226,), (0.99789677795062226,), (0.99789677795062226,), (0.99799328378696384,), (0.99799328378696384,), (0.99799328378696384,), (0.99752585111592773,), (0.99794814032102686,), (0.99794814032102686,), (0.99794814032102686,), (0.99794814032102686,), (0.99791591405141022,), (0.99791591405141022,), (0.99791591405141022,), (0.99781320158967612,), (0.99860544123754991,), (0.99828224508217633,), (0.99828224508217633,), (0.99619488712699744,), (0.99786618552155382,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99953581880536224,), (0.99851466225391772,), (0.99851466225391772,), (0.99882665163840145,), (0.99882665163840145,), (0.99873978848038036,), (0.99873978848038036,), (0.99873978848038036,), (0.99901319915321729,), (0.99901319915321729,), (0.99901346888135389,), (0.99901346888135389,), (0.99901346888135389,), (0.99908565784156589,), (0.99908565784156589,), (0.99908565784156589,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.9997700224688415,), (0.99987478429907239,), (0.99987478429907239,), (0.9997317604008803,), (0.9997317604008803,), (0.9997317604008803,), (0.9997317604008803,), (0.9997317604008803,), (0.9997317604008803,), (0.9997317604008803,), (0.9997317604008803,), (0.99987478429907239,), (0.99987478429907239,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99859350064071928,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99815085348391264,), (0.99801121508788471,), (0.99801121508788471,), (0.99801121508788471,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99970239121755644,), (0.99967784153193739,), (0.99967784153193739,), (0.99967784153193739,), (0.99967784153193739,), (0.99967784153193739,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99999272446893117,), (0.99947641500564532,), (0.99947641500564532,), (0.99947641500564532,), (0.99947641500564532,), (0.99947641500564532,), (0.99947641500564532,), (0.99947641500564532,), (0.99949863695309482,), (0.99949863695309482,), (0.99949863695309482,), (0.99974328693948666,), (0.99974328693948666,), (0.99980321714568188,), (0.99983155661001133,), (0.99983155661001133,), (0.99983153073037934,), (0.99969009047977342,), (0.99992573804467411,), (0.99992573804467411,), (0.99992573804467411,), (0.99992573804467411,), (0.99992573804467411,), (0.99992573804467411,), (0.9998018518211248,), (0.99967796559757549,), (0.99967796559757549,), (0.99987356313508979,), (0.99987356313508979,), (0.99987356313508979,), (0.99987356313508979,), (0.99987356313508979,), (0.99979057612443356,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.9998492029395224,), (0.99983763108146106,), (0.9998546857430789,), (0.9998546857430789,), (0.9998546857430789,), (0.9998546857430789,), (0.9998546857430789,), (0.9998546857430789,), (0.9998546857430789,), (0.9998546857430789,), (0.9999509239877552,), (0.9999509239877552,), (0.9999509239877552,), (0.9999509239877552,), (0.99998827359440823,), (0.99998827359440823,), (0.99998827359440823,), (0.99998827359440823,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99995184961709938,), (0.99994338235428293,), (0.99994338235428293,), (0.99994338235428293,), (0.99994338235428293,), (0.99994338235428293,), (0.99994338235428293,), (0.99994338235428293,), (0.99988033998347525,), (0.99983597819949577,), (0.99983597819949577,), (0.99979605259391424,), (0.99979605259391424,), (0.99979605259391424,), (0.99979607774696089,), (0.99979607774696089,), (0.99979607774696089,), (0.99979557952311815,), (0.99979557952311815,), (0.99979557952311815,), (0.99979557952311815,), (0.99979557952311815,), (0.99979557952311815,), (0.99979557952311815,), (0.99979557952311815,), (0.99978755695445853,), (0.99978755695445853,), (0.99978755695445853,), (0.99978755695445853,), (0.99978679234690759,), (0.99978679234690759,), (0.9997831990424052,), (0.9997831990424052,), (0.99978675464925548,), (0.99978675464925548,), (0.99978675464925548,), (0.99978675464925548,), (0.99974397983064922,), (0.99974402595916301,), (0.99996040202783254,), (0.99996040202783254,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996400899536586,), (0.99996040442746581,), (0.99996040442746581,), (0.99996040442746581,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99996432478146735,), (0.99997911988863619,), (0.99997911774975445,), (0.99989182930525944,), (0.99989182930525944,), (0.99989182930525944,), (0.99997508139992974,), (0.99997508139992974,), (0.99997508139992974,), (0.99997508139992974,), (0.99997343645209091,), (0.99997343645209091,), (0.99997343645209091,), (0.99997343645209091,), (0.99997343645209091,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99998552104323979,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99993733669396312,), (0.99998492051000509,), (0.99999892693518277,), (0.99999892687427272,), (0.99999608214586666,), (0.99999608214586666,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99999608216948954,), (0.99997424081882591,), (0.99998158160800821,), (0.99999339623349348,), (0.99999339623349348,), (0.99999339623349348,), (0.99999339623349348,), (0.99999339623349348,), (0.99999339623349348,), (0.99999339623349348,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99999837383469381,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99997974509359666,), (0.99999651096058406,), (0.99997454821783038,), (0.99997454821783038,), (0.99997454821783038,), (0.99998348752288568,), (0.99998326993751074,), (0.99998173557746806,), (0.99998173557746806,), (0.99998173557746806,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99998922765127152,), (0.99999841784154198,), (0.99999841784154198,), (0.99999841784154198,), (0.99999841784154198,), (0.99999300534498192,), (0.99999300534498192,), (0.99999300534498192,), (0.99999608748887692,), (0.9999834486179271,)], [(0.40077624370137183,), (0.36054937169806045,), (0.36054937169806045,), (0.36054937169806045,), (0.36054937169806045,), (0.36054937169806045,), (0.36054937169806045,), (0.41267427316000999,), (0.41267427316000999,), (0.41267427316000999,), (0.41267427316000999,), (0.41267427316000999,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.17587851268760721,), (0.12760654664117058,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.12251480328046815,), (0.11854008874318536,), (0.11854008874318536,), (0.11854008874318536,), (0.012515258237522434,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0085405437002396348,), (0.0049633006166851157,), (0.0049633006166851157,), (0.0049633006166851157,), (0.0049633006166851157,), (0.0049633006166851157,), (0.0049633006166851157,), (0.0049633006166851157,), (0.0047895652542523995,), (0.0047895652542523995,), (0.0047895652542523995,), (0.0047895652542523995,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.0041543372668553557,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.047331563718487138,), (0.043266917789592234,), (0.043266917789592234,), (0.086444144241224014,), (0.086444144241224014,), (0.086444144241224014,), (0.086444144241224014,), (0.033744976791580665,), (0.033744976791580665,), (0.033744976791580665,), (0.033744976791580665,), (0.033744976791580665,), (0.033744976791580665,), (0.033744976791580665,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00047766606326025946,), (0.00043380432132464293,), (0.013713433947536293,), (0.013713433947536293,), (0.013713433947536293,), (0.013713433947536293,), (0.013713433947536293,), (0.013713433947536293,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0040466558269884332,), (0.0040466558269884332,), (0.0040466558269884332,), (0.0040466558269884332,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.0017356665408968814,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086565651004757418,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.00086546663821306232,), (0.0015169977999762,), (0.0021032220493770694,), (0.0021032220493770694,), (0.0021032220493770694,), (0.0020067162130355909,), (0.0020067162130355909,), (0.0020067162130355909,), (0.0024741488840717418,), (0.002051859678972734,), (0.002051859678972734,), (0.002051859678972734,), (0.002051859678972734,), (0.0020840859485893723,), (0.0020840859485893723,), (0.0020840859485893723,), (0.0021867984103233996,), (0.0013945587624498211,), (0.0017177549178235914,), (0.0017177549178235914,), (0.0038051128730021448,), (0.0021338144784461962,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0004641811946378412,), (0.0014853377460818339,), (0.0014853377460818339,), (0.0011733483615985597,), (0.0011733483615985597,), (0.0012602115196197368,), (0.0012602115196197368,), (0.0012602115196197368,), (0.00098680084678309191,), (0.00098680084678309191,), (0.00098653111864616789,), (0.00098653111864616789,), (0.00098653111864616789,), (0.00091434215843433765,), (0.00091434215843433765,), (0.00091434215843433765,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00022997753115891484,), (0.00012521570092757735,), (0.00012521570092757735,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00026823959911969237,), (0.00012521570092757735,), (0.00012521570092757735,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.0014064993592806337,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.001849146516087278,), (0.0019887849121152136,), (0.0019887849121152136,), (0.0019887849121152136,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00029760878244354744,), (0.00032215846806261814,), (0.00032215846806261814,), (0.00032215846806261814,), (0.00032215846806261814,), (0.00032215846806261814,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (7.2755310686634924e-06,), (0.0005235849943545618,), (0.0005235849943545618,), (0.0005235849943545618,), (0.0005235849943545618,), (0.0005235849943545618,), (0.0005235849943545618,), (0.0005235849943545618,), (0.00050136304690506697,), (0.00050136304690506697,), (0.00050136304690506697,), (0.00025671306051341616,), (0.00025671306051341616,), (0.00019678285431815875,), (0.00016844338998870284,), (0.00016844338998870284,), (0.00016846926962074124,), (0.00030990952022668002,), (7.4261955326005057e-05,), (7.4261955326005057e-05,), (7.4261955326005057e-05,), (7.4261955326005057e-05,), (7.4261955326005057e-05,), (7.4261955326005057e-05,), (0.00019814817887536882,), (0.00032203440242473255,), (0.00032203440242473255,), (0.00012643686491053166,), (0.00012643686491053166,), (0.00012643686491053166,), (0.00012643686491053166,), (0.00012643686491053166,), (0.00020942387556671194,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00015079706047793433,), (0.00016236891853960999,), (0.00014531425692143978,), (0.00014531425692143978,), (0.00014531425692143978,), (0.00014531425692143978,), (0.00014531425692143978,), (0.00014531425692143978,), (0.00014531425692143978,), (0.00014531425692143978,), (4.9076012244884376e-05,), (4.9076012244884376e-05,), (4.9076012244884376e-05,), (4.9076012244884376e-05,), (1.1726405591839813e-05,), (1.1726405591839813e-05,), (1.1726405591839813e-05,), (1.1726405591839813e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (4.8150382900795473e-05,), (5.6617645717166413e-05,), (5.6617645717166413e-05,), (5.6617645717166413e-05,), (5.6617645717166413e-05,), (5.6617645717166413e-05,), (5.6617645717166413e-05,), (5.6617645717166413e-05,), (0.00011966001652493176,), (0.00016402180050415554,), (0.00016402180050415554,), (0.00020394740608545693,), (0.00020394740608545693,), (0.00020394740608545693,), (0.00020392225303910078,), (0.00020392225303910078,), (0.00020392225303910078,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00020442047688179975,), (0.00021244304554127178,), (0.00021244304554127178,), (0.00021244304554127178,), (0.00021244304554127178,), (0.00021320765309229512,), (0.00021320765309229512,), (0.00021680095759461223,), (0.00021680095759461223,), (0.00021324535074461281,), (0.00021324535074461281,), (0.00021324535074461281,), (0.00021324535074461281,), (0.0002560201693506511,), (0.00025597404083712541,), (3.9597972167466355e-05,), (3.9597972167466355e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.5991004634024191e-05,), (3.9595572534234963e-05,), (3.9595572534234963e-05,), (3.9595572534234963e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (3.567521853281523e-05,), (2.0880111363673007e-05,), (2.0882250245520975e-05,), (0.000108170694740761,), (0.000108170694740761,), (0.000108170694740761,), (2.4918600070812343e-05,), (2.4918600070812343e-05,), (2.4918600070812343e-05,), (2.4918600070812343e-05,), (2.65635479088978e-05,), (2.65635479088978e-05,), (2.65635479088978e-05,), (2.65635479088978e-05,), (2.65635479088978e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (1.4478956759915869e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (6.2663306036164028e-05,), (1.5079489994326339e-05,), (1.0730648164483983e-06,), (1.0731257273035857e-06,), (3.9178541326607139e-06,), (3.9178541326607139e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (3.9178305104739165e-06,), (2.5759181174082344e-05,), (1.8418391991804039e-05,), (6.6037665065261257e-06,), (6.6037665065261257e-06,), (6.6037665065261257e-06,), (6.6037665065261257e-06,), (6.6037665065261257e-06,), (6.6037665065261257e-06,), (6.6037665065261257e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (1.6261653062329162e-06,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (2.0254906403342542e-05,), (3.4890394159438771e-06,), (2.5451782169499058e-05,), (2.5451782169499058e-05,), (2.5451782169499058e-05,), (1.6512477113679006e-05,), (1.6730062489188399e-05,), (1.8264422531405914e-05,), (1.8264422531405914e-05,), (1.8264422531405914e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.0772348728826752e-05,), (1.5821584585447995e-06,), (1.5821584585447995e-06,), (1.5821584585447995e-06,), (1.5821584585447995e-06,), (6.9946550190767333e-06,), (6.9946550190767333e-06,), (6.9946550190767333e-06,), (3.9125111230176895e-06,), (1.6551382072905064e-05,)], [(2.2296106208308539,), (2.1438836695148384,), (2.1438836695148384,), (2.1438836695148384,), (2.1438836695148384,), (2.1438836695148384,), (2.1438836695148384,), (2.1275405702108277,), (2.1275405702108277,), (2.1275405702108277,), (2.1275405702108277,), (2.1275405702108277,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1053789288403051,), (2.1040570622197765,), (2.1040570622197765,), (2.1040570622197765,), (2.1063174541408807,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1049955875203521,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618762,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.1038059075618758,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.134751032121859,), (2.1483527639115403,), (2.1483527639115403,), (2.1792978884715235,), (2.1792978884715235,), (2.1792978884715235,), (2.1792978884715235,), (2.1792080563413632,), (2.1792080563413632,), (2.1792080563413632,), (2.1792080563413632,), (2.1792080563413632,), (2.1792080563413632,), (2.1792080563413632,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2244742948597951,), (2.2771394643161038,), (2.2771394643161038,), (2.2771394643161038,), (2.2771394643161038,), (2.2771394643161038,), (2.2771394643161038,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2782937348711814,), (2.2782937348711814,), (2.2782937348711814,), (2.2782937348711814,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2608043902149633,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2609082745649198,), (2.2558884891120479,), (2.2513706822044632,), (2.2513706822044632,), (2.2513706822044632,), (2.2509867531191268,), (2.2509867531191268,), (2.2509867531191268,), (2.2588856358515423,), (2.2641820011463016,), (2.2641820011463016,), (2.2641820011463016,), (2.2641820011463016,), (2.2632974788485267,), (2.2632974788485267,), (2.2632974788485267,), (2.2624045419184053,), (2.2590324850106067,), (2.2618395422394442,), (2.2618395422394442,), (2.2609841471457504,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2639305010689941,), (2.2731859418944294,), (2.2731859418944294,), (2.2727102933165169,), (2.2727102933165169,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2721008131705558,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2836651596828994,), (2.2879372250468664,), (2.2879372250468664,), (2.2829670752335014,), (2.2829670752335014,), (2.2829670752335014,), (2.2829670752335014,), (2.2829670752335014,), (2.2829670752335014,), (2.2829670752335014,), (2.2829670752335014,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2879372250468664,), (2.2873752328720749,), (2.2873752328720749,), (2.2873752328720749,), (2.2873752328720749,), (2.2873752328720749,), (2.2873752328720749,), (2.2873752328720749,), (2.2873752328720753,), (2.2873752328720753,), (2.2873752328720753,), (2.2873752328720762,), (2.2873752328720762,), (2.2878899288496708,), (2.2878899288496708,), (2.2878899288496708,), (2.2878899288496708,), (2.2883957218069826,), (2.2878899288496712,), (2.2878899288496712,), (2.2878899288496712,), (2.2878899288496712,), (2.2878899288496712,), (2.2878899288496712,), (2.2878444074835129,), (2.2877988861173546,), (2.2877988861173546,), (2.287331221952118,), (2.287331221952118,), (2.287331221952118,), (2.287331221952118,), (2.287331221952118,), (2.2877640934018819,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877640934018824,), (2.2877984093147501,), (2.2877965635598878,), (2.2877965635598878,), (2.2877965635598878,), (2.2877965635598878,), (2.2877965635598878,), (2.2877965635598878,), (2.2877965635598878,), (2.2877965635598878,), (2.2878008548220619,), (2.2878008548220619,), (2.2878008548220619,), (2.2878008548220619,), (2.288124772074176,), (2.288124772074176,), (2.288124772074176,), (2.288124772074176,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2878676318154358,), (2.2880332457757646,), (2.2880332457757646,), (2.2880332457757646,), (2.2880332457757646,), (2.2880332457757646,), (2.2880332457757646,), (2.2880332457757646,), (2.2882345559560222,), (2.2882902892513348,), (2.2882902892513348,), (2.2883404492171162,), (2.2883404492171162,), (2.2883404492171162,), (2.2883404492171162,), (2.2883404492171162,), (2.2883404492171162,), (2.2883261072219034,), (2.2883261072219034,), (2.2883580247586566,), (2.2883580247586566,), (2.2883580247586566,), (2.2883580247586566,), (2.2883580247586566,), (2.2883580247586566,), (2.2884876690462619,), (2.2884876690462619,), (2.2884876690462619,), (2.2884876690462619,), (2.2885009188308851,), (2.2885009188308851,), (2.2885054332278054,), (2.2885054332278054,), (2.2883883016881716,), (2.2883883016881716,), (2.2883883016881716,), (2.2883883016881716,), (2.2885344243157175,), (2.288534424315718,), (2.2886049483479152,), (2.2886049483479152,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886004339509953,), (2.2886049483479152,), (2.2886049483479152,), (2.2886049483479152,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2885901079211735,), (2.2886129348282003,), (2.2886129348282003,), (2.2886147063096458,), (2.2886147063096458,), (2.2886147063096458,), (2.2886147063096458,), (2.2886147063096458,), (2.2886147063096458,), (2.2886147063096458,), (2.2885772766886023,), (2.2885772766886023,), (2.2885772766886023,), (2.2885772766886023,), (2.2885772766886023,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.288650688460582,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886539268541659,), (2.2886441913498983,), (2.2886544145097556,), (2.2886544145097556,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886419077130951,), (2.2886277493283504,), (2.2886290055891969,), (2.288617185187996,), (2.288617185187996,), (2.288617185187996,), (2.288617185187996,), (2.288617185187996,), (2.288617185187996,), (2.288617185187996,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886506915775793,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886513867517575,), (2.2886507610949973,), (2.2886532928687444,), (2.2886532928687444,), (2.2886532928687444,), (2.2886551910482837,), (2.2886531885237504,), (2.2886531126382188,), (2.2886531126382188,), (2.2886531126382188,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886533505474822,), (2.2886548386677434,), (2.2886548386677434,), (2.2886548386677434,), (2.2886548386677434,), (2.2886525806926628,), (2.2886525806926628,), (2.2886525806926628,), (2.2886525806926628,), (2.2886551564448969,)], [(2.3564235051212128,), (2.4879732538608392,), (2.4879732538608392,), (2.4879732538608392,), (2.4879732538608392,), (2.4879732538608392,), (2.4879732538608392,), (2.2991923116527011,), (2.2991923116527011,), (2.2991923116527011,), (2.2991923116527011,), (2.2991923116527011,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.5788868896990875,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7668547501882594,), (2.7361481730018489,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7541052356839604,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978609,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7702665920978604,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7520020095483697,), (2.7193214417403158,), (2.7193214417403158,), (2.7010568591908251,), (2.7010568591908251,), (2.7010568591908251,), (2.7010568591908251,), (2.7286602943607243,), (2.7286602943607243,), (2.7286602943607243,), (2.7286602943607243,), (2.7286602943607243,), (2.7286602943607243,), (2.7286602943607243,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.7247340645810052,), (2.768843372741546,), (2.768843372741546,), (2.768843372741546,), (2.768843372741546,), (2.768843372741546,), (2.768843372741546,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.753226983175364,), (2.7796079748491298,), (2.7796079748491298,), (2.7796079748491298,), (2.7796079748491298,), (2.7904241342866922,), (2.7904241342866922,), (2.7904241342866922,), (2.7904241342866922,), (2.7904241342866922,), (2.7904241342866922,), (2.7904241342866922,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7913929484763749,), (2.7635460672807186,), (2.7384838742046278,), (2.7384838742046278,), (2.7384838742046278,), (2.7381623173481375,), (2.7381623173481375,), (2.7381623173481375,), (2.7797632912821073,), (2.7896427393245551,), (2.7896427393245551,), (2.7896427393245551,), (2.7896427393245551,), (2.7849304564723782,), (2.7849304564723782,), (2.7849304564723782,), (2.780139699670837,), (2.7780225800611307,), (2.7780225800611307,), (2.7780225800611307,), (2.7752893897155659,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7737142014789282,), (2.7750374751099449,), (2.7750374751099449,), (2.7437308598052086,), (2.7437308598052086,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7447423102229562,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7073929865970068,), (2.7223625980630235,), (2.7223625980630235,), (2.7806777004741359,), (2.7806777004741359,), (2.7806777004741359,), (2.7806777004741359,), (2.7806777004741359,), (2.7806777004741359,), (2.7806777004741359,), (2.7806777004741359,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7223625980630235,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7650075025725078,), (2.7339193671850937,), (2.7339193671850937,), (2.7339193671850937,), (2.7252673263336979,), (2.7252673263336979,), (2.7889087513327513,), (2.7889087513327513,), (2.7889087513327513,), (2.7889087513327513,), (2.7889087513327513,), (2.7889087513327513,), (2.7889087513327513,), (2.7889087513327513,), (2.791059863721173,), (2.791059863721173,), (2.791059863721173,), (2.791059863721173,), (2.791059863721173,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7880195486416497,), (2.7867873935862448,), (2.7867873935862448,), (2.7867873935862448,), (2.7867873935862448,), (2.7867873935862448,), (2.7867873935862448,), (2.7867873935862448,), (2.7275741099375175,), (2.7275741099375175,), (2.7275741099375175,), (2.7267233739623968,), (2.7267233739623968,), (2.7344142310967325,), (2.7341406027395756,), (2.7341406027395756,), (2.7341406027395756,), (2.7315040913260962,), (2.7315547865004302,), (2.7315547865004302,), (2.6610130609738207,), (2.6610130609738207,), (2.6610130609738207,), (2.6610130609738207,), (2.6521217269396127,), (2.6432303929054046,), (2.6432303929054046,), (2.6168888849926906,), (2.6168888849926906,), (2.6168888849926906,), (2.6168888849926906,), (2.6168888849926906,), (2.5480793995635813,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5298818540092922,), (2.5197157739973295,), (2.4437431270566701,), (2.4437431270566701,), (2.4437431270566701,), (2.4437431270566701,), (2.4437431270566701,), (2.4437431270566701,), (2.4437431270566701,), (2.4437431270566701,), (2.5051412724201008,), (2.5051412724201008,), (2.5051412724201008,), (2.5051412724201008,), (2.5395347212371671,), (2.5395347212371671,), (2.5395347212371671,), (2.5395347212371671,), (2.4174503381507777,), (2.4174503381507777,), (2.4174503381507777,), (2.4174503381507777,), (2.4174503381507777,), (2.4174503381507777,), (2.1627019180984677,), (2.1627019180984677,), (2.1627019180984677,), (2.1627019180984677,), (2.1627019180984677,), (2.1627019180984677,), (2.1627019180984677,), (2.1627019180984677,), (2.2641477108005259,), (2.2641477108005259,), (2.2641477108005259,), (2.2641477108005259,), (2.2641477108005259,), (2.2641477108005259,), (2.2641477108005259,), (2.2793542639178717,), (2.2506948137297615,), (2.2506948137297615,), (2.2249013085604625,), (2.2249013085604625,), (2.2249013085604625,), (2.2249013085604625,), (2.2249013085604625,), (2.2249013085604625,), (2.1969631005103634,), (2.1969631005103634,), (2.1796773718887992,), (2.1796773718887992,), (2.1796773718887992,), (2.1796773718887992,), (2.1796773718887992,), (2.1796773718887992,), (2.1810902914711408,), (2.1810902914711408,), (2.1810902914711408,), (2.1810902914711408,), (2.1771472999331021,), (2.1771472999331021,), (2.174825884467865,), (2.174825884467865,), (2.1771029492279923,), (2.1771029492279923,), (2.1771029492279923,), (2.1771029492279923,), (2.2203460480050938,), (2.2203460480050943,), (2.1786423027499056,), (2.1786423027499056,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1809637182151431,), (2.1786423027499056,), (2.1786423027499056,), (2.1786423027499056,), (2.1839486139690827,), (2.1839486139690827,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1961508383621551,), (2.1665456421123808,), (2.1665456421123808,), (2.2338828210312514,), (2.2338828210312514,), (2.2338828210312514,), (2.2338828210312514,), (2.2338828210312514,), (2.2338828210312514,), (2.2338828210312514,), (2.2155577912102427,), (2.2155577912102427,), (2.2155577912102427,), (2.2155577912102427,), (2.2155577912102427,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1881473218219352,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1840311268930965,), (2.1131105803563495,), (2.1131105803563495,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.228658361576108,), (2.1575303947394815,), (2.2651364041547994,), (2.1600223236809524,), (2.1600223236809524,), (2.1600223236809524,), (2.1600223236809524,), (2.1600223236809524,), (2.1600223236809524,), (2.1600223236809524,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1178017546888093,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1339380620607526,), (2.1194153854260036,), (2.152494732953421,), (2.152494732953421,), (2.152494732953421,), (2.1388641471759193,), (2.1360873637069782,), (2.1470529804284695,), (2.1470529804284695,), (2.1470529804284695,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1240737286889066,), (2.1385574401170619,), (2.1385574401170619,), (2.1385574401170619,), (2.1385574401170619,), (2.1557575008071432,), (2.1557575008071432,), (2.1557575008071432,), (2.1557575008071432,), (2.1557575008071432,)]] cost = [(-0.00029779638595122407,), (-0.15136115889404497,), (-0.15136115889404497,), (-0.15136115889404497,), (-0.15136115889404497,), (-0.15136115889404497,), (-0.15136115889404497,), (-0.19386199323532108,), (-0.19386199323532108,), (-0.19386199323532108,), (-0.19386199323532108,), (-0.19386199323532108,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.20910797843079976,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.2869103927200049,), (-0.30371583821435344,), (-0.30548848230838477,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31840030157437027,), (-0.31984254847730853,), (-0.31984254847730853,), (-0.31984254847730853,), (-0.33692920517166353,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34152084122717319,), (-0.34181203315142583,), (-0.34181203315142583,), (-0.34623075466511033,), (-0.34623075466511033,), (-0.34623075466511033,), (-0.34623075466511033,), (-0.34623075466511033,), (-0.34623075466511033,), (-0.34623075466511033,), (-0.34629120723503487,), (-0.34629120723503487,), (-0.34629120723503487,), (-0.34629120723503487,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.34651223975132012,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35052568209420565,), (-0.35192214482973616,), (-0.35192214482973616,), (-0.35429565131576091,), (-0.35429565131576091,), (-0.35429565131576091,), (-0.35429565131576091,), (-0.35738682322826038,), (-0.35738682322826038,), (-0.35738682322826038,), (-0.35861660468802081,), (-0.35861660468802081,), (-0.35861660468802081,), (-0.35861660468802081,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36156351134061182,), (-0.36157937772487297,), (-0.36261040523900356,), (-0.36261040523900356,), (-0.36261040523900356,), (-0.36383359963673301,), (-0.36383359963673301,), (-0.36383359963673301,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.3684365223816059,), (-0.36843652238160607,), (-0.36843652238160607,), (-0.37023828495242872,), (-0.37023828495242872,), (-0.37023828495242872,), (-0.37023828495242872,), (-0.37079957961159932,), (-0.37079957961159932,), (-0.37079957961159932,), (-0.37079957961159932,), (-0.37079957961159932,), (-0.37079957961159932,), (-0.37079957961159932,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37137903745926948,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155244438904833,), (-0.37155417336583585,), (-0.37169574294526631,), (-0.37169574294526631,), (-0.37169574294526631,), (-0.37204182590765017,), (-0.37204182590765017,), (-0.37204182590765017,), (-0.37241432015895776,), (-0.37262560572425701,), (-0.37262560572425701,), (-0.37262560572425713,), (-0.37262560572425713,), (-0.37273056469436117,), (-0.37273056469436117,), (-0.37273056469436117,), (-0.37277442628711616,), (-0.37286661632614604,), (-0.37286661632614604,), (-0.37286661632614604,), (-0.37338370562741868,), (-0.3745451269680497,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.3751718172190549,), (-0.37567368504629217,), (-0.37567368504629217,), (-0.37579106559782033,), (-0.37579106559782033,), (-0.37604236090781284,), (-0.37604236090781284,), (-0.37604236090781284,), (-0.3761453046335918,), (-0.3761453046335918,), (-0.37614540619078063,), (-0.37614540619078063,), (-0.37614540619078063,), (-0.37617258655081309,), (-0.37617258655081309,), (-0.37634965180453933,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37769545566283957,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698291,), (-0.37774791242698297,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37795165001665415,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.37813309523950578,), (-0.3781476663155004,), (-0.3781476663155004,), (-0.3781476663155004,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37820349260467057,), (-0.37821522571879562,), (-0.37821522571879562,), (-0.37821522571879562,), (-0.37821522571879562,), (-0.37821522571879562,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770515,), (-0.37825983625770521,), (-0.37825983625770521,), (-0.37825983625770521,), (-0.37832461949528412,), (-0.37832461949528412,), (-0.37836640843292041,), (-0.37836640843292041,), (-0.37836640843292041,), (-0.37836640843292041,), (-0.37836640843292041,), (-0.37837716522306558,), (-0.37837716522306558,), (-0.37837716522306558,), (-0.37839141151741101,), (-0.37839141151741101,), (-0.37839818423095684,), (-0.37840220410184788,), (-0.37840220410184788,), (-0.37840220410184788,), (-0.3784638582096348,), (-0.37846981486701897,), (-0.37846981486701897,), (-0.37846981486701897,), (-0.37846981486701897,), (-0.37846981486701897,), (-0.37846981486701897,), (-0.37853886078233756,), (-0.37854756723658123,), (-0.37854756723658123,), (-0.37862842040917827,), (-0.37862842040917827,), (-0.37862842040917827,), (-0.37862842040917827,), (-0.37862842040917827,), (-0.37866068951850052,), (-0.37869559041157663,), (-0.37869559041157663,), (-0.37869559041157663,), (-0.37869559041157663,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875121143573109,), (-0.37875801503426604,), (-0.37880497635943261,), (-0.37880497635943261,), (-0.37880497635943261,), (-0.37880497635943261,), (-0.37880497635943261,), (-0.37880523228837926,), (-0.37880523228837926,), (-0.37880523228837926,), (-0.37880942614143492,), (-0.37880942614143492,), (-0.37880942614143492,), (-0.37880942614143492,), (-0.3788364341536552,), (-0.3788364341536552,), (-0.3788364341536552,), (-0.3788364341536552,), (-0.37886153191757072,), (-0.37886153191757072,), (-0.37886153191757072,), (-0.37886153191757072,), (-0.37886153191757072,), (-0.37886153191757072,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37887008583289294,), (-0.37888676444868236,), (-0.37888676444868236,), (-0.37888676444868236,), (-0.37888676444868236,), (-0.37888676444868236,), (-0.37888676444868236,), (-0.37888676444868236,), (-0.37889357027239773,), (-0.37890227363318763,), (-0.37890227363318763,), (-0.37891010665789859,), (-0.37891010665789859,), (-0.37891010665789859,), (-0.37891010665789876,), (-0.37891010665789876,), (-0.37891010665789876,), (-0.37891109534210099,), (-0.37891109534210099,), (-0.37891374513469395,), (-0.37891374513469395,), (-0.37891374513469395,), (-0.37891374513469395,), (-0.37891374513469395,), (-0.37891374513469395,), (-0.37892182576509909,), (-0.37892182576509909,), (-0.37892182576509909,), (-0.37892182576509909,), (-0.37892288048474709,), (-0.37892288048474709,), (-0.37892358545697108,), (-0.37892358545697108,), (-0.37892423775466549,), (-0.37892423775466549,), (-0.37892423775466549,), (-0.37892423775466549,), (-0.37892753483217329,), (-0.37892753483217345,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.3789385999384341,), (-0.37893859993843415,), (-0.37893859993843415,), (-0.37893859993843415,), (-0.37894638423193239,), (-0.37894912618638665,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789494964755607,), (-0.3789561178802171,), (-0.3789561178802171,), (-0.37895628123516722,), (-0.37895628123516722,), (-0.37895628123516722,), (-0.37895628123516739,), (-0.37895628123516739,), (-0.37895628123516739,), (-0.37895628123516739,), (-0.37895780088140424,), (-0.37895780088140424,), (-0.37895780088140424,), (-0.37895780088140424,), (-0.37895780088140424,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37895864673543211,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896153481688527,), (-0.37896174771190894,), (-0.37896174771190894,), (-0.37896174771190894,), (-0.37896174771190894,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.37896174771191005,), (-0.3789617477119101,), (-0.37896217793526177,), (-0.37896217793526205,), (-0.37896272493529742,), (-0.37896272493529742,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.3789627249352977,), (-0.37896325145129961,), (-0.37896357000346698,), (-0.37896374836441377,), (-0.37896374836441377,), (-0.37896374836441377,), (-0.37896374836441377,), (-0.37896374836441377,), (-0.37896374836441377,), (-0.37896402176262622,), (-0.37896432549003495,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.3789666315106624,), (-0.37896669395929139,), (-0.37896713188585207,), (-0.37896713188585207,), (-0.37896713188585207,), (-0.37896756080950467,), (-0.37896773077200629,), (-0.3789678968041949,), (-0.3789678968041949,), (-0.3789678968041949,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896914954394456,), (-0.37896915496053152,), (-0.37896915496053152,), (-0.37896915496053152,), (-0.37896915496053152,), (-0.37896941605139955,), (-0.37896941605139955,), (-0.37896941605139955,), (-0.37896941605139955,), (-0.37896941605139955,)] uqfoundation-mystic-9a49031/_examples/qld_circle_dual.py000077500000000000000000000037601455553066500234740ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Solve the dual form of test_circle.py. Currently, it uses a package called "qld" that I wrote but not in the repo. yet. It wraps IQP from bell-labs. (code not GPL and has export restrictions.) """ from numpy import * import matplotlib.pyplot as plt from test_circle import sparse_circle, sv, x0, y0, R0 getpoints = sparse_circle.forward import qld def getobjective(H,f, x): return 0.5 * dot(dot(x,H),x) + dot(f,x) def chop(x): if abs(x) > 1e-6: return x else: return 0 def round(x): return array([chop(y) for y in x]) def plot(xy, sv, x0, y0, R0, center, R): import matplotlib.pyplot as plt plt.plot(xy[:,0],xy[:,1],'k+') plt.plot(xy[sv,0],xy[sv,1],'ro') theta = arange(0, 2*pi, 0.02) plt.plot([center[0]],[center[1]],'bo') plt.plot([xy[sv0,0], center[0]],[xy[sv0,1], center[1]],'r--') plt.plot(R0 * cos(theta)+x0, R0*sin(theta)+y0, 'r-',linewidth=2) plt.plot(R * cos(theta)+center[0], R*sin(theta)+center[1], 'b-',linewidth=2) plt.axis('equal') plt.show() if __name__ == '__main__': npt = 20 from test_circle import xy npt1 = xy.shape[0] if npt is not npt1: xy = getpoints((x0,y0,R0),npt) else: pass Q = dot(xy, transpose(xy)) f = -diag(Q)+10 H = Q*2 A = ones((1,npt)) b = ones(1) x = qld.quadprog2(H, f, None, None, A, b, zeros(npt), ones(npt)) center = dot(x,xy) print("center: %s" % center) # find support vectors (find numpy way please) sv = [] for i,v in enumerate(x): if v > 0.001: sv.append(i) sv0 = sv[0] print(sv) R = linalg.norm(xy[sv0,:]-center) plot(xy, sv, x0, y0, R0, center, R) # $Id$ # uqfoundation-mystic-9a49031/_examples/qld_svc1.py000077500000000000000000000042051455553066500220750ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Classification. Example 1 """ from numpy import * import qld, quapro import matplotlib.pyplot as plt from mystic.svc import * def myshow(): import Image, tempfile name = tempfile.mktemp() plt.savefig(name,dpi=72) im = Image.open('%s.png' % name) im.show() c1 = array([[0., 0.],[1., 0.],[ 0.2, 0.2],[0.,1.]]) c2 = array([[0, 1.1], [1.1, 0.],[0, 1.5],[0.5,1.2],[0.8, 1.7]]) plt.plot(c1[:,0], c1[:,1], 'ko') plt.plot(c2[:,0], c2[:,1], 'ro') # the Kernel Matrix (with the linear kernel) # Q = multiply.outer(X,X) <--- unfortunately only works when X is a list of scalars... # In Mathematica, this would be implemented simply via Outer[K, X, X, 1] XX = concatenate([c1,-c2]) nx = XX.shape[0] # quadratic and linear terms of QP Q = KernelMatrix(XX) b = -1 * ones(nx) H = Q f = b Aeq = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) Beq = array([0]) lb = zeros(nx) ub = zeros(nx) + 99999 #alpha = qld.quadprog2(H, f, None, None, Aeq, Beq, lb, ub) alpha, xxx= quapro.quadprog(H, f, None, None, Aeq=Aeq, beq=Beq, LB=lb, UB=ub) print(alpha) #alpha = array([fil(x) for x in alpha]) print("cons:%s" % inner(Aeq,alpha)) print("obj min: 0.5 * x'Hx + %s" % 0.5*inner(alpha,inner(H,alpha))+inner(f,alpha)) # the labels and the points X = concatenate([c1,c2]) y = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) wv = WeightVector(alpha, X, y) sv1, sv2 = SupportVectors(alpha,y,eps=1e-6) bias = Bias(alpha, X, y) ym = (y.flatten()<0).nonzero()[0] yp = (y.flatten()>0).nonzero()[0] ii = inner(wv, X) bias2 = -0.5 *( max(ii[ym]) + min(ii[yp]) ) print(wv) print("%s %s" % (sv1, sv2)) print(bias) print(bias2) # Eqn of hyperplane: # wv[0] x + wv[1] y + bias = 0 hx = array([0, 1.2]) hy = -wv[0]/wv[1] * hx - bias/wv[1] plt.plot(hx, hy, 'k-') myshow() # $Id$ # # end of file uqfoundation-mystic-9a49031/_examples/qld_svc2.py000077500000000000000000000046201455553066500220770ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Classification. Example 2. meristem data. """ from numpy import * from scipy.io import read_array import qld, quapro import matplotlib.pyplot as plt from mystic.svc import * import os.path, time def myshow(): import Image, tempfile name = tempfile.mktemp() plt.savefig(name,dpi=150) im = Image.open('%s.png' % name) im.show() c1 = read_array(os.path.join('DATA','g1x.pts')) c2 = read_array(os.path.join('DATA','g2.pts')) c1[:,0] += 5 # to make the two sets overlap a little # interchange ? #c1, c2 = c2, c1 # the Kernel Matrix (with the linear kernel) # Q = multiply.outer(X,X) <--- unfortunately only works when X is a list of scalars... # In Mathematica, this would be implemented simply via Outer[K, X, X, 1] XX = concatenate([c1,-c2]) nx = XX.shape[0] # quadratic and linear terms of QP Q = KernelMatrix(XX) b = -1 * ones(nx) H = Q f = b Aeq = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) Beq = array([0]) lb = zeros(nx) ub = zeros(nx) + 100000 #alpha = qld.quadprog2(H, f, None, None, Aeq, Beq, lb, ub) alpha,xxx = quapro.quadprog(H, f, None, None, Aeq, Beq, lb, ub) #t1 = time.time() #for i in range(1000): # alpha,xxx = quapro.quadprog(H, f, None, None, Aeq, Beq, lb, ub) # #alpha = qld.quadprog2(H, f, None, None, Aeq, Beq, lb, ub) #t2 = time.time() #print("1000 calls to QP took %0.3f s" % (t2-t1)) print(alpha) # the labels and the points X = concatenate([c1,c2]) y = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) wv = WeightVector(alpha, X, y) sv1, sv2 = SupportVectors(alpha,y, eps=1e-6) bias = Bias(alpha, X, y) print(wv) print("%s %s" % (sv1,sv2)) print(bias) # Eqn of hyperplane: # wv[0] x + wv[1] y + bias = 0 plt.plot(c1[:,0], c1[:,1], 'ko',markersize=2) plt.plot(c2[:,0], c2[:,1], 'ro',markersize=2) xmin,xmax,ymin,ymax = plt.axis() hx = array([xmin, xmax]) hy = -wv[0]/wv[1] * hx - bias/wv[1] plt.plot(hx, hy, 'k-') plt.axis([xmin,xmax,ymin,ymax]) plt.plot(XX[sv1,0], XX[sv1,1], 'ko',markersize=5) plt.plot(-XX[sv2,0], -XX[sv2,1], 'ro',markersize=5) plt.axis('equal') myshow() # $Id$ # # end of file uqfoundation-mystic-9a49031/_examples/qld_svr1.py000077500000000000000000000026321455553066500221160ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Regression. Example 1 """ from numpy import * import qld import matplotlib.pyplot as plt from mystic.svr import * from mystic.tools import random_seed #random_seed(123) x = arange(-5, 5.001) y = x + random.rand(x.size)*7 #y = array([9.99, 10.93, 9.11, 6.50, 12.69, 14.09, 13.83, 15.86, 17.49, 14.20, 19.98]) l = x.size N = 2*l plt.plot(x, y, 'k+') #plt.show() # the Kernel Matrix (with the linear kernel) X = concatenate([x,-x]) Q = multiply.outer(X,X)+1 # the linear term for the QP Y = concatenate([y,-y]) svr_epsilon = 3; b = Y + svr_epsilon * ones(Y.size) H = Q f = b Aeq = concatenate([ones(l), -ones(l)]).reshape(1,N) Beq = array([0]) lb = zeros(N) ub = zeros(N) + 0.5 alpha = qld.quadprog2(H, f, None, None, Aeq, Beq, lb, ub) #alpha = 2*alpha sv1 = SupportVectors(alpha[:l]) sv2 = SupportVectors(alpha[l:]) R = RegressionFunction(x, y, alpha, svr_epsilon, LinearKernel) plt.plot(x,R(x)) plt.plot(x,R(x)+svr_epsilon, 'k--') plt.plot(x,R(x)-svr_epsilon, 'k--') plt.plot(x[sv1],y[sv1],'ro') plt.plot(x[sv2],y[sv2],'go') print(alpha) plt.show() # $Id$ # # end of file uqfoundation-mystic-9a49031/_examples/qld_svr2.py000077500000000000000000000026061455553066500221200ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Regression. Example 1 """ from numpy import * import qld import matplotlib.pyplot as plt from mystic.svr import * x = arange(-5, 5.001) y = x*x + random.rand(x.size)*8 #y = array([9.99, 10.93, 9.11, 6.50, 12.69, 14.09, 13.83, 15.86, 17.49, 14.20, 19.98]) l = x.size N = 2*l plt.plot(x, y, 'k+') # the Kernel Matrix X = concatenate([x,-x]) def pk(a1,a2): return (1+a1*a2)*(1+a1*a2) Q = KernelMatrix(X, pk) # the linear term for the QP Y = concatenate([y,-y]) svr_epsilon = 4; b = Y + svr_epsilon * ones(Y.size) H = Q f = b Aeq = concatenate([ones(l), -ones(l)]).reshape(1,N) Beq = array([0]) lb = zeros(N) ub = zeros(N) + 0.5 alpha = qld.quadprog2(H, f, None, None, Aeq, Beq, lb, ub) #alpha = 2*alpha sv1 = SupportVectors(alpha[:l]) sv2 = SupportVectors(alpha[l:]) R = RegressionFunction(x, y, alpha, svr_epsilon, pk) xx = arange(min(x),max(x),0.1) plt.plot(xx,R(xx)) plt.plot(xx,R(xx)+svr_epsilon, 'k--') plt.plot(xx,R(xx)-svr_epsilon, 'k--') plt.plot(x[sv1],y[sv1],'ro') plt.plot(x[sv2],y[sv2],'go') print(alpha) plt.show() # $Id$ # # end of file uqfoundation-mystic-9a49031/_examples/roseninputs.py000066400000000000000000000017471455553066500227570ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ roseninputs.py -- inputs for testing the rosenbrock function for testsolvers_pyre.py """ from mystic.models import rosen as cost from mystic.termination import * ND = 3 # for Differential Evolution: NP = 30 from numpy import inf from mystic.tools import random_seed random_seed(123) x0 = [0.8, 1.2, 0.5] # used with SetStrictRanges #min_bounds = [-0.999, -0.999, 0.999] #max_bounds = [200.001, 100.001, inf] termination = CandidateRelativeTolerance() #termination = VTR() #termination = ChangeOverGeneration() #termination = NormalizedChangeOverGeneration() # End of file uqfoundation-mystic-9a49031/_examples/sam_cg_rosenbrock.py000077500000000000000000000027671455553066500240540ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_rosenbrock.py. This one uses Scipy's CG (Polak-Ribiere) plus matlab viz. """ import sam from test_rosenbrock import * from scipy.optimize import fmin_cg import numpy from mystic.tools import getch def draw_contour(): import numpy x, y = numpy.mgrid[0:2.1:0.02,0:2.1:0.02] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = rosen([xx,yy]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.verbose() #sam.eval("[c,h]=contourf(X,Y,C,60);set(h,'EdgeColor','none')") sam.eval("[c,h]=contourf(X,Y,log(C*20+1)+2,60);set(h,'EdgeColor','none')") sam.eval("title('Rosenbrock''s function in 2D. Min at 1,1')") sam.eval('hold on') def run_once(x0,x1): sol = fmin_cg(rosen, [x0, x1], retall = True, full_output=1) xy = numpy.asarray(sol[-1]) sam.putarray('xy',xy) sam.eval("plot(xy(:,1),xy(:,2),'w-','LineWidth',2)") sam.eval("plot(xy(:,1),xy(:,2),'wo','MarkerSize',6)") return sol if __name__ == '__main__': draw_contour() run_once(0.3,0.3) run_once(0.5,1.3) getch("Press any key to quit") # end of file uqfoundation-mystic-9a49031/_examples/sam_cg_zimmermann.py000077500000000000000000000027571455553066500240610ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_zimmermann.py. This one uses Scipy's CG (Polak-Ribiere) plus matlab viz. """ import sam from test_zimmermann import * from scipy.optimize import fmin_cg import numpy from mystic.tools import getch def draw_contour(): import numpy x, y = numpy.mgrid[-.51:7.5:0.05,-.51:7.5:0.05] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = CostFunction([xx,yy]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.verbose() sam.eval("[c,h]=contourf(X,Y,log(C*20+1)+2,100);set(h,'EdgeColor','none')") sam.eval("title('Zimmermann''s Corner. Min at 7,2')") sam.eval('hold on') def run_once(x0,x1): sol = fmin_cg(CostFunction, [x0, x1], retall = True, full_output=1) xy = numpy.asarray(sol[-1]) sam.putarray('xy',xy) sam.eval("plot(xy(:,1),xy(:,2),'w-','LineWidth',2)") sam.eval("plot(xy(:,1),xy(:,2),'wo','MarkerSize',6)") return sol if __name__ == '__main__': draw_contour() run_once(1,3) run_once(4,2) run_once(7,0.1) run_once(6,4) run_once(0,7) getch("Press any key to quit") # end of file uqfoundation-mystic-9a49031/_examples/sam_circle_matlab.py000077500000000000000000000034631455553066500240070ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Solve the dual form of test_circle.py with matlab's quadprog (via sam) """ from numpy import * import matplotlib.pyplot as plt from test_circle import sv, xy, x0, y0, R0 import sam # The dual problem verification begins here. npt = xy.shape[0] Q = dot(xy, transpose(xy)) #Q = zeros((npt,npt)) #for i in range(npt): # for j in range(npt): ## Q[i,j] = dot(xy[i,:],xy[j,:]) #Q = array(Q) f = -diag(Q)+10 H = Q*2 A = ones((1,npt)) b = ones(1) sam.putarray('H',H); sam.putarray('f',f); sam.eval("npt = %d;" % npt); sam.eval("al = quadprog(H,f,[],[],ones(1,npt),1,zeros(npt,1),ones(npt,1));") alpha = sam.getarray('al').flatten() def getobj(H,f, x): return 0.5 * dot(dot(x,H),x) + dot(f,x) def chop(x): if abs(x) > 1e-6: return x else: return 0 x = array([chop(y) for y in alpha]) center = dot(alpha,xy) # find support vectors (find numpy way please) sv = [] for i,v in enumerate(x): if v > 0.001: sv.append(i) sv0 = sv[0] R = linalg.norm(xy[sv0,:]-center) def plot(): import matplotlib.pyplot as plt plt.plot(xy[:,0],xy[:,1],'k+') plt.plot(xy[sv,0],xy[sv,1],'ro') theta = arange(0, 2*pi, 0.02) plt.plot([center[0]],[center[1]],'bo') plt.plot([xy[sv0,0], center[0]],[xy[sv0,1], center[1]],'r--') plt.plot(R0 * cos(theta)+x0, R0*sin(theta)+y0, 'r-',linewidth=2) plt.plot(R * cos(theta)+center[0], R*sin(theta)+center[1], 'b-',linewidth=2) plt.axis('equal') plt.show() if __name__ == '__main__': plot() # $Id$ # # end of file uqfoundation-mystic-9a49031/_examples/sam_corana.py000077500000000000000000000020261455553066500224630ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing the Corana parabola in 1D. Requires sam. """ import sam, numpy, mystic #from test_corana import * from mystic.solvers import fmin from mystic.tools import getch from mystic.models.corana import corana1d as Corana1 x = numpy.arange(-2., 2., 0.01) y = [Corana1([c]) for c in x] sam.put('x', x) sam.put('y', y) sam.eval("plot(x,y,'LineWidth',1); hold on") for xinit in numpy.arange(0.1,2,0.1): sol = fmin(Corana1, [xinit], full_output=1, retall=1) xx = mystic.flatten_array(sol[-1]) yy = [Corana1([c]) for c in xx] sam.put('xx', xx) sam.put('yy', yy) sam.eval("plot(xx,yy,'r-',xx,yy,'ko','LineWidth',2)") sam.eval("axis([0 2 0 4])") getch('press any key to exit') # end of file uqfoundation-mystic-9a49031/_examples/sam_corana2.py000077500000000000000000000032611455553066500225470ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_corana.py. This one uses Nelder-Mead plus matlab viz. Corana's parabola in 2D. """ import sam #from test_corana import * from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT from mystic.monitors import Monitor from mystic.tools import getch from mystic.models.corana import corana2d as Corana2 def draw_contour(): import numpy x, y = numpy.mgrid[0:2.1:0.05,0:2.1:0.05] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = Corana2([xx,yy]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.verbose() sam.eval("[c,h]=contourf(X,Y,C,100);set(h,'EdgeColor','none')") #sam.eval("[c,h]=contourf(X,Y,log(C*20+1)+2,100);set(h,'EdgeColor','none')") sam.eval("title('Corana''s Parabola in 2D. Min at 0,0')") sam.eval('hold on') def run_once(): simplex = Monitor() solver = fmin(2) solver.SetRandomInitialPoints([0,0],[2,2]) solver.SetGenerationMonitor(simplex) solver.Solve(Corana2, termination=CRT()) sol = solver.Solution() for x in simplex.x: sam.putarray('x',x) sam.eval("plot(x([1,2,3,1],1),x([1,2,3,1],2),'w-')") draw_contour() for i in range(8): run_once() getch("Press any key to quit") # end of file uqfoundation-mystic-9a49031/_examples/sam_mogi.py000077500000000000000000000055751455553066500221670ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_mogi.py This uses Nelder-Mead and GenerationMonitor """ import sam from test_mogi import * from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT from mystic.monitors import Monitor from mystic.tools import getch x0,y0,z0,v0 = actual_params def draw_contour_xy(): import numpy x, y = mgrid[-40:40:0.5, -40:40:0.5] x = x0 + x y = y0 + y s,t = x.shape c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = cost_function([xx,yy, z0, v0]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.verbose() sam.eval("[c,h]=contourf(X,Y,C,100);set(h,'EdgeColor','none')") sam.eval("title('Mogi Fitting')") sam.eval('hold on') def draw_contour_xv(): import numpy x, y = mgrid[-40:40:0.5, -0.1:0.3:.01] x = x0 + x y = v0 + y s,t = x.shape c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = cost_function([xx, y0, z0, yy]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.eval("[c,h]=contourf(X,Y,C,100);set(h,'EdgeColor','none')") sam.eval('hold on') def run_once_xy(): simplex = Monitor() z1 = z0*random.uniform(0.5,1.5) v1 = v0*random.uniform(0.5,1.5) xinit = [random.uniform(x0-40,x0+40), random.uniform(y0-40,y0+40), z1, v1] solver = fmin(len(xinit)) solver.SetInitialPoints(xinit) solver.SetGenerationMonitor(simplex) solver.Solve(cost_function, termination=CRT()) sol = solver.Solution() print(sol) for x in simplex.x: sam.putarray('x',x) sam.eval("plot(x([1,2,3,1],1),x([1,2,3,1],4),'w-','LineWidth',2)") return sol def run_once_xv(): simplex = Monitor() y1 = y0*random.uniform(0.5,1.5) z1 = z0*random.uniform(0.5,1.5) xinit = [random.uniform(x0-40,x0+40), y1, z1, random.uniform(v0-0.1,v0+0.1)] solver = fmin(len(xinit)) solver.SetInitialPoints(xinit) solver.SetGenerationMonitor(simplex) solver.Solve(cost_function, termination=CRT()) sol = solver.Solution() print(sol) for x in simplex.x: sam.putarray('x',x) sam.eval("plot(x([1,2,3,1],1),x([1,2,3,1],2),'w-','LineWidth',2)") return sol draw_contour_xv() xysol = run_once_xy() sam.eval("figure(2)") draw_contour_xy() xvsol = run_once_xv() sam.eval("figure(3)") plot_noisy_data() sam.eval("hold on") plot_sol(xysol) plot_sol(xvsol) getch() # end of file uqfoundation-mystic-9a49031/_examples/sam_rosenbrock.py000077500000000000000000000035031455553066500233700ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_rosenbrock.py. This one uses Nelder-Mead plus matlab viz. It uses a GenerationMonitor to track all simplices generated during the search. """ import sam from test_rosenbrock import * from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT from mystic.monitors import Monitor from mystic.tools import getch def draw_contour(): import numpy x, y = numpy.mgrid[0:2.1:0.02,0:2.1:0.02] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = rosen([xx,yy]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.verbose() #sam.eval("[c,h]=contourf(X,Y,C,60);set(h,'EdgeColor','none')") sam.eval("[c,h]=contourf(X,Y,log(C*20+1)+2,60);set(h,'EdgeColor','none')") sam.eval("title('Rosenbrock''s function in 2D. Min at 1,1')") sam.eval('hold on') def run_once(x0,x1): simplex = Monitor() xinit = [x0, x1] solver = fmin(len(xinit)) solver.SetInitialPoints(xinit) solver.SetGenerationMonitor(simplex) solver.Solve(rosen, termination=CRT()) sol = solver.Solution() for x in simplex.x: sam.putarray('x',x) sam.eval("plot(x([1,2,3,1],1),x([1,2,3,1],2),'w-')") draw_contour() run_once(0.5,0.1) sam.eval("figure(2)") draw_contour() run_once(1.5,0.1) sam.eval("figure(3)") draw_contour() run_once(0.5,1.8) #run_once(1.5,1.8) getch("Press any key to quit") # end of file uqfoundation-mystic-9a49031/_examples/sam_zimmermann.py000077500000000000000000000031671455553066500234040ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_zimmermann.py. This one uses Nelder-Mead plus matlab viz. It uses a GenerationMonitor to track all simplices generated during the search. """ import sam from test_zimmermann import * from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT from mystic.monitors import Monitor from mystic.tools import getch def draw_contour(): import numpy x, y = numpy.mgrid[0:7.5:0.05,0:7.5:0.05] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = CostFunction([xx,yy]) sam.putarray('X',x) sam.putarray('Y',y) sam.putarray('C',c) sam.verbose() sam.eval("[c,h]=contourf(X,Y,log(C*20+1)+2,100);set(h,'EdgeColor','none')") sam.eval("title('Zimmermann''s Corner. Min at 7,2')") sam.eval('hold on') def run_once(): simplex = Monitor() solver = fmin(2) solver.SetRandomInitialPoints([0,0],[7,7]) solver.SetGenerationMonitor(simplex) solver.Solve(CostFunction, termination=CRT()) sol = solver.Solution() for x in simplex.x: sam.putarray('x',x) sam.eval("plot(x([1,2,3,1],1),x([1,2,3,1],2),'k-')") draw_contour() for i in range(8): run_once() getch("Press any key to quit") # end of file uqfoundation-mystic-9a49031/_examples/test_SOW2.py000066400000000000000000000036661455553066500221610ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from mystic.monitors import * a = Null() b = Monitor() c = VerboseMonitor(None) a([1,],1) a([2,],2) b([0,],0) b.extend(a) assert b.x == [[0]] assert len(b) == 1 a.extend(b) assert a.x == Null() #assert len(a) == None #XXX: len(Null()) throws a TypeError c([1,],1) c([2,],2) c.prepend(b) assert len(b) == 1 assert len(c) == 3 c([3,],3) assert c.x == [[0], [1], [2], [3]] assert len(c) == 4 c.prepend(c) assert c.x == [[0], [1], [2], [3], [0], [1], [2], [3]] assert len(c) == 8 from mystic.solvers import NelderMeadSimplexSolver from mystic.tools import random_seed random_seed(123) lb = [-100,-100,-100] ub = [1000,1000,1000] ndim = len(lb) maxiter = 10 maxfun = 1e+6 def cost(x): ax,bx,c = x return (ax)**2 - bx + c monitor = Monitor() solver = NelderMeadSimplexSolver(ndim) solver.SetRandomInitialPoints(min=lb,max=ub) solver.SetStrictRanges(min=lb,max=ub) solver.SetEvaluationLimits(maxiter,maxfun) solver.SetGenerationMonitor(monitor) solver.Solve(cost) solved = solver.bestSolution monitor.info("solved: %s" % solved) lmon = len(monitor) assert solver.bestEnergy == monitor.y[-1] for xs,x in zip(solved,monitor.x[-1]): assert xs == x solver.SetEvaluationLimits(maxiter*2,maxfun) solver.SetGenerationMonitor(monitor) solver.Solve(cost) assert len(monitor) > lmon assert solver.bestEnergy == monitor.y[-1] for xs,x in zip(solver.bestSolution,monitor.x[-1]): assert xs == x solver.SetEvaluationLimits(maxiter*3,maxfun) solver.SetGenerationMonitor(monitor, new=True) solver.Solve(cost) assert solver.bestEnergy == monitor.y[-1] for xs,x in zip(solver.bestSolution,monitor.x[-1]): assert xs == x # EOF uqfoundation-mystic-9a49031/_examples/test_argv.py000077500000000000000000000005621455553066500223610ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE import sys print(sys.argv) # end of file uqfoundation-mystic-9a49031/_examples/test_br8.py000077500000000000000000000113641455553066500221170ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Data from Chapter 8 of Bevington and Robinson Wants to fit y = a1 + a2 Exp[-t / a4] + a3 Exp[-t/a5] to data """ from numpy import * from scipy.integrate import romberg from mystic.solvers import DifferentialEvolutionSolver2 as DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.tools import getch, random_seed from mystic.monitors import VerboseMonitor as MyMonitor from mystic.models.br8 import decay; F = decay.ForwardFactory from mystic.models.br8 import cost as myCF from mystic.models.br8 import data # evalpts = data[:,0], observations = data[:,1] def myshow(): import matplotlib.pyplot as plt try: import Image plt.savefig('test_br8_out',dpi=72) im = Image.open('test_br8_out.png') im.show() except ImportError: pass plt.show() def plot_sol(solver=None, linestyle='k-'): import matplotlib.pyplot as plt def _(params): import mystic._signal as signal print("plotting params: %s" % params) # because of the log ordinate axis, will draw errorbars the dumb way plt.semilogy(data[:,0],data[:,1],'k.') for i, j in data: plt.semilogy([i, i], [j-sqrt(j), j+sqrt(j)],'k-') plt.grid() plt.xlabel('Time (s)') plt.ylabel('Number of counts') x = arange(15, 900, 5) f = F(params) plt.plot(x, f(x), linestyle) if solver is not None: signal.signal(signal.SIGINT, signal.Hander(solver)) return _ ND = 5 NP = 50 MAX_GENERATIONS = 2000 def de_solve(CF, a4=None, a5=None): """solve with DE for given cost funciton; fix a4 and/or a5 if provided""" minrange = [0, 100, 100, 1, 1] maxrange = [100, 2000, 200, 200, 200] interval = 10 if a5 != None: minrange[4] = maxrange[4] = a5 interval = 20 if a4 != None: minrange[3] = maxrange[3] = a4 if interval == 20: interval = 1000 solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = MyMonitor(interval) solver.SetRandomInitialPoints(min=minrange,max=maxrange) solver.SetStrictRanges(min=minrange, max=maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) solver.Solve(CF,termination=ChangeOverGeneration(generations=50)) solution = solver.Solution() return solution, stepmon def error2d(myCF, sol, cx, cy): from scipy.optimize import fmin # This is the center-point x0 = [sol[0], sol[1], sol[2]] def curry(x): return myCF([x[0], x[1], x[2], cx, cy]) sol = fmin(curry, x0) print(sol) if __name__ == '__main__': sol, steps = de_solve(myCF) a1, a2, a3, a4, a5 = sol minChiSq = steps.y[-1] # print(sol) plot_sol()(sol) # plot the "precomputed" confidence interval too s4, ss4 = de_solve(myCF, a4=29.5, a5=163) s5, ss5 = de_solve(myCF, a4=38.9, a5=290) plot_sol(linestyle='r-')(s4) plot_sol(linestyle='r-')(s5) myshow() # # compute the 'uncertainty' of the last parameter, and fit a parabola # disable for now ## print("redo a5 at several points") ## a5x = [a5-30, a5, a5+30] ## a5y = [] ## for a in a5x: ## sol2, steps2 = de_solve(myCF, a5=a) ## a5y.append(steps2.y[-1]) ## import matplotlib.pyplot as plt ## plt.clf() ## plt.plot(a5x, a5y, 'r+') ## # fitting a parabola ## x1,x2,x3=a5x ## y1,y2,y3=a5y ## a1 = -(-x2*y1 + x3*y1 + x1*y2-x3*y2-x1*y3+x2*y3)/(x2-x3)/(x1*x1-x1*x2-x1*x3+x2*x3) ## a2 = -(x2*x2*y1-x3*x3*y1-x1*x1*y2+x3*x3*y2+x1*x1*y3-x2*x2*y3)/(x1-x2)/(x1-x3)/(x2-x3) ## a3 = -(-x2*x2*x3*y1+x2*x3*x3*y1+x1*x1*x3*y2-x1*x3*x3*y2-x1*x1*x2*y3+x1*x2*x2*y3)/((x2-x3)*(x1*x1-x1*x2-x1*x3+x2*x3)) ## print("%s %s %s" % (a1, a2, a3)) ## x = arange(150,270) ## from mystic.math import polyeval ## plt.plot(x, polyeval([a1,a2,a3],x),'k-') ## myshow() # 2D (a fine mesh solution can be computed by test_br8_mpi.py) try: import matplotlib.pyplot as plt X = loadtxt('test_br8_mpi.out.X') Y = loadtxt('test_br8_mpi.out.Y') V = loadtxt('test_br8_mpi.out.V') plt.clf() plt.plot([[a4]],[[a5]],'k+') plt.xlabel('a4') plt.ylabel('a5') plt.grid() plt.contour(X,Y,V, minChiSq + array([1,2,3]),colors='black') myshow() except IOError: print("Run test_br8_mpi to create dataset.") # end of file uqfoundation-mystic-9a49031/_examples/test_br8_mpi.out.V000066400000000000000000000262101455553066500233400ustar00rootroot000000000000007.23777e+01 7.20185e+01 7.18074e+01 7.17384e+01 7.18060e+01 7.20045e+01 7.23286e+01 7.27730e+01 7.33327e+01 7.40027e+01 7.47783e+01 7.56547e+01 7.66275e+01 7.76923e+01 7.88450e+01 8.00814e+01 8.13976e+01 8.27898e+01 8.42544e+01 8.57878e+01 8.73865e+01 8.90473e+01 9.07669e+01 9.25424e+01 9.43707e+01 7.18440e+01 7.13538e+01 7.10175e+01 7.08292e+01 7.07829e+01 7.08731e+01 7.10942e+01 7.14409e+01 7.19079e+01 7.24901e+01 7.31827e+01 7.39809e+01 7.48800e+01 7.58756e+01 7.69633e+01 7.81389e+01 7.93985e+01 8.07380e+01 8.21536e+01 8.36418e+01 8.51990e+01 8.68217e+01 8.85067e+01 9.02507e+01 9.20509e+01 7.15260e+01 7.09052e+01 7.04440e+01 7.01363e+01 6.99761e+01 6.99578e+01 7.00755e+01 7.03238e+01 7.06974e+01 7.11910e+01 7.17997e+01 7.25185e+01 7.33426e+01 7.42676e+01 7.52889e+01 7.64022e+01 7.76034e+01 7.88883e+01 8.02532e+01 8.16943e+01 8.32078e+01 8.47903e+01 8.64384e+01 8.81489e+01 8.99184e+01 7.14019e+01 7.06513e+01 7.00658e+01 6.96392e+01 6.93654e+01 6.92385e+01 6.92528e+01 6.94025e+01 6.96823e+01 7.00868e+01 7.06109e+01 7.12496e+01 7.19980e+01 7.28513e+01 7.38050e+01 7.48548e+01 7.59962e+01 7.72253e+01 7.85378e+01 7.99301e+01 8.13984e+01 8.29389e+01 8.45483e+01 8.62231e+01 8.79602e+01 7.14520e+01 7.05727e+01 6.98638e+01 6.93191e+01 6.89322e+01 6.86972e+01 6.86082e+01 6.86595e+01 6.88454e+01 6.91606e+01 6.95998e+01 7.01578e+01 7.08298e+01 7.16108e+01 7.24962e+01 7.34814e+01 7.45622e+01 7.57341e+01 7.69932e+01 7.83354e+01 7.97570e+01 8.12541e+01 8.28232e+01 8.44608e+01 8.61637e+01 7.16585e+01 7.06518e+01 6.98206e+01 6.91586e+01 6.86595e+01 6.83170e+01 6.81253e+01 6.80784e+01 6.81707e+01 6.83966e+01 6.87508e+01 6.92280e+01 6.98232e+01 7.05315e+01 7.13480e+01 7.22681e+01 7.32874e+01 7.44014e+01 7.56060e+01 7.68972e+01 7.82709e+01 7.97234e+01 8.12509e+01 8.28500e+01 8.45172e+01 7.20048e+01 7.08722e+01 6.99201e+01 6.91421e+01 6.85317e+01 6.80826e+01 6.77888e+01 6.76443e+01 6.76434e+01 6.77803e+01 6.80497e+01 6.84462e+01 6.89646e+01 6.95999e+01 7.03472e+01 7.12017e+01 7.21590e+01 7.32145e+01 7.43640e+01 7.56033e+01 7.69283e+01 7.83352e+01 7.98202e+01 8.13796e+01 8.30100e+01 7.24760e+01 7.12192e+01 7.01478e+01 6.92550e+01 6.85345e+01 6.79799e+01 6.75849e+01 6.73436e+01 6.72501e+01 6.72986e+01 6.74835e+01 6.77995e+01 6.82412e+01 6.88035e+01 6.94815e+01 7.02703e+01 7.11653e+01 7.21619e+01 7.32557e+01 7.44425e+01 7.57182e+01 7.70789e+01 7.85204e+01 8.00393e+01 8.16319e+01 7.30586e+01 7.16794e+01 7.04902e+01 6.94843e+01 6.86551e+01 6.79961e+01 6.75010e+01 6.71638e+01 6.69784e+01 6.69391e+01 6.70401e+01 6.72759e+01 6.76412e+01 6.81308e+01 6.87396e+01 6.94626e+01 7.02952e+01 7.12327e+01 7.22706e+01 7.34046e+01 7.46304e+01 7.59441e+01 7.73417e+01 7.88193e+01 8.03734e+01 7.37401e+01 7.22405e+01 7.09353e+01 6.98179e+01 6.88813e+01 6.81193e+01 6.75254e+01 6.70933e+01 6.68170e+01 6.66907e+01 6.67084e+01 6.68647e+01 6.71541e+01 6.75713e+01 6.81111e+01 6.87685e+01 6.95387e+01 7.04170e+01 7.13988e+01 7.24797e+01 7.36554e+01 7.49219e+01 7.62749e+01 7.77108e+01 7.92257e+01 7.45094e+01 7.28913e+01 7.14721e+01 7.02447e+01 6.92026e+01 6.83389e+01 6.76474e+01 6.71216e+01 6.67555e+01 6.65430e+01 6.64784e+01 6.65558e+01 6.67699e+01 6.71151e+01 6.75863e+01 6.81783e+01 6.88864e+01 6.97056e+01 7.06313e+01 7.16591e+01 7.27845e+01 7.40034e+01 7.53117e+01 7.67054e+01 7.81807e+01 7.53561e+01 7.36218e+01 7.20904e+01 7.07550e+01 6.96088e+01 6.86451e+01 6.78573e+01 6.72392e+01 6.67844e+01 6.64868e+01 6.63406e+01 6.63400e+01 6.64794e+01 6.67533e+01 6.71564e+01 6.76835e+01 6.83296e+01 6.90900e+01 6.99598e+01 7.09344e+01 7.20096e+01 7.31809e+01 7.44442e+01 7.57955e+01 7.72308e+01 7.62712e+01 7.44227e+01 7.27811e+01 7.13396e+01 7.00911e+01 6.90289e+01 6.81464e+01 6.74371e+01 6.68948e+01 6.65133e+01 6.62866e+01 6.62089e+01 6.62744e+01 6.64776e+01 6.68132e+01 6.72759e+01 6.78606e+01 6.85623e+01 6.93764e+01 7.02982e+01 7.13231e+01 7.24468e+01 7.36650e+01 7.49738e+01 7.63690e+01 7.72462e+01 7.52857e+01 7.35360e+01 7.19902e+01 7.06411e+01 6.94821e+01 6.85064e+01 6.77075e+01 6.70790e+01 6.66148e+01 6.63086e+01 6.61547e+01 6.61472e+01 6.62805e+01 6.65493e+01 6.69481e+01 6.74718e+01 6.81155e+01 6.88742e+01 6.97432e+01 7.07181e+01 7.17943e+01 7.29675e+01 7.42337e+01 7.55887e+01 7.82735e+01 7.62032e+01 7.43475e+01 7.26993e+01 7.12515e+01 6.99974e+01 6.89300e+01 6.80429e+01 6.73296e+01 6.67838e+01 6.63993e+01 6.61703e+01 6.60907e+01 6.61550e+01 6.63577e+01 6.66933e+01 6.71566e+01 6.77427e+01 6.84464e+01 6.92632e+01 7.01882e+01 7.12171e+01 7.23455e+01 7.35691e+01 7.48839e+01 7.93463e+01 7.71683e+01 7.52087e+01 7.34601e+01 7.19155e+01 7.05679e+01 6.94105e+01 6.84367e+01 6.76400e+01 6.70139e+01 6.65523e+01 6.62492e+01 6.60986e+01 6.60947e+01 6.62321e+01 6.65052e+01 6.69089e+01 6.74378e+01 6.80871e+01 6.88519e+01 6.97275e+01 7.07094e+01 7.17931e+01 7.29743e+01 7.42490e+01 8.04583e+01 7.81749e+01 7.61134e+01 7.42664e+01 7.26268e+01 7.11875e+01 6.99418e+01 6.88828e+01 6.80040e+01 6.72990e+01 6.67615e+01 6.63854e+01 6.61648e+01 6.60938e+01 6.61667e+01 6.63782e+01 6.67228e+01 6.71953e+01 6.77906e+01 6.85040e+01 6.93306e+01 7.02657e+01 7.13050e+01 7.24441e+01 7.36787e+01 8.16039e+01 7.92174e+01 7.70561e+01 7.51126e+01 7.33798e+01 7.18507e+01 7.05181e+01 6.93755e+01 6.84162e+01 6.76336e+01 6.70214e+01 6.65736e+01 6.62840e+01 6.61468e+01 6.61562e+01 6.63068e+01 6.65931e+01 6.70098e+01 6.75518e+01 6.82143e+01 6.89922e+01 6.98811e+01 7.08763e+01 7.19735e+01 7.31683e+01 8.27780e+01 8.02905e+01 7.80315e+01 7.59936e+01 7.41695e+01 7.25522e+01 7.11346e+01 6.99099e+01 6.88714e+01 6.80126e+01 6.73271e+01 6.68086e+01 6.64512e+01 6.62488e+01 6.61957e+01 6.62862e+01 6.65150e+01 6.68766e+01 6.73660e+01 6.79780e+01 6.87079e+01 6.95509e+01 7.05024e+01 7.15580e+01 7.27133e+01 8.39761e+01 8.13898e+01 7.90352e+01 7.69047e+01 7.49912e+01 7.32875e+01 7.17864e+01 7.04812e+01 6.93650e+01 6.84314e+01 6.76738e+01 6.70860e+01 6.66618e+01 6.63952e+01 6.62805e+01 6.63119e+01 6.64840e+01 6.67913e+01 6.72287e+01 6.77910e+01 6.84733e+01 6.92709e+01 7.01792e+01 7.11935e+01 7.23096e+01 8.51940e+01 8.25111e+01 8.00628e+01 7.78418e+01 7.58407e+01 7.40523e+01 7.24695e+01 7.10853e+01 6.98929e+01 6.88858e+01 6.80574e+01 6.74014e+01 6.69116e+01 6.65820e+01 6.64067e+01 6.63799e+01 6.64961e+01 6.67498e+01 6.71359e+01 6.76491e+01 6.82845e+01 6.90372e+01 6.99026e+01 7.08761e+01 7.19533e+01 8.64280e+01 8.36505e+01 8.11107e+01 7.88011e+01 7.67142e+01 7.48429e+01 7.31799e+01 7.17183e+01 7.04512e+01 6.93720e+01 6.84741e+01 6.77512e+01 6.71970e+01 6.68053e+01 6.65703e+01 6.64862e+01 6.65474e+01 6.67484e+01 6.70839e+01 6.75486e+01 6.81376e+01 6.88461e+01 6.96691e+01 7.06022e+01 7.16410e+01 8.76748e+01 8.48049e+01 8.21755e+01 7.97791e+01 7.76082e+01 7.56556e+01 7.39141e+01 7.23767e+01 7.10363e+01 6.98865e+01 6.89204e+01 6.81317e+01 6.75142e+01 6.70616e+01 6.67679e+01 6.66275e+01 6.66346e+01 6.67836e+01 6.70692e+01 6.74862e+01 6.80295e+01 6.86942e+01 6.94754e+01 7.03686e+01 7.13692e+01 8.89313e+01 8.59709e+01 8.32539e+01 8.07727e+01 7.85196e+01 7.64875e+01 7.46691e+01 7.30573e+01 7.16452e+01 7.04259e+01 6.93930e+01 6.85399e+01 6.78601e+01 6.73476e+01 6.69964e+01 6.68005e+01 6.67543e+01 6.68522e+01 6.70888e+01 6.74587e+01 6.79569e+01 6.85784e+01 6.93184e+01 7.01721e+01 7.11351e+01 9.01947e+01 8.71460e+01 8.43433e+01 8.17790e+01 7.94456e+01 7.73356e+01 7.54419e+01 7.37572e+01 7.22747e+01 7.09875e+01 6.98890e+01 6.89725e+01 6.82318e+01 6.76605e+01 6.72527e+01 6.70024e+01 6.69038e+01 6.69514e+01 6.71396e+01 6.74632e+01 6.79170e+01 6.84959e+01 6.91951e+01 7.00099e+01 7.10044e+01 9.14628e+01 8.83277e+01 8.54412e+01 8.27957e+01 8.03835e+01 7.81974e+01 7.62299e+01 7.44739e+01 7.29224e+01 7.15686e+01 7.04057e+01 6.94271e+01 6.86265e+01 6.79976e+01 6.75341e+01 6.72303e+01 6.70803e+01 6.70784e+01 6.72190e+01 6.74970e+01 6.79070e+01 6.84440e+01 6.91031e+01 6.98794e+01 7.07685e+01 9.27332e+01 8.95137e+01 8.65452e+01 8.38203e+01 8.13311e+01 7.90704e+01 7.70307e+01 7.52048e+01 7.35858e+01 7.21667e+01 7.09407e+01 6.99013e+01 6.90419e+01 6.83563e+01 6.78383e+01 6.74819e+01 6.72813e+01 6.72307e+01 6.73246e+01 6.75577e+01 6.79246e+01 6.84203e+01 6.90398e+01 6.97782e+01 7.06387e+01 9.40041e+01 9.07020e+01 8.76534e+01 8.48507e+01 8.22862e+01 7.99525e+01 7.78421e+01 7.59479e+01 7.42627e+01 7.27795e+01 7.14917e+01 7.03926e+01 6.94756e+01 6.87344e+01 6.81628e+01 6.77548e+01 6.75045e+01 6.74061e+01 6.74541e+01 6.76430e+01 6.79675e+01 6.84225e+01 6.90029e+01 6.97076e+01 7.05858e+01 9.52736e+01 9.18908e+01 8.87639e+01 8.58852e+01 8.32470e+01 8.08418e+01 7.86623e+01 7.67010e+01 7.49510e+01 7.34052e+01 7.20568e+01 7.08991e+01 6.99256e+01 6.91299e+01 6.85057e+01 6.80470e+01 6.77479e+01 6.76025e+01 6.76053e+01 6.77507e+01 6.80335e+01 6.84484e+01 6.89912e+01 6.97042e+01 7.06100e+01 9.65402e+01 9.30785e+01 8.98751e+01 8.69220e+01 8.42117e+01 8.17366e+01 7.94893e+01 7.74625e+01 7.56490e+01 7.40418e+01 7.26340e+01 7.14189e+01 7.03900e+01 6.95408e+01 6.88650e+01 6.83565e+01 6.80095e+01 6.78179e+01 6.77763e+01 6.78790e+01 6.81207e+01 6.84963e+01 6.90346e+01 6.97729e+01 7.07044e+01 9.78026e+01 9.42638e+01 9.09854e+01 8.79596e+01 8.51788e+01 8.26353e+01 8.03217e+01 7.82307e+01 7.63550e+01 7.46876e+01 7.32216e+01 7.19503e+01 7.08670e+01 6.99653e+01 6.92389e+01 6.86816e+01 6.82875e+01 6.80506e+01 6.79653e+01 6.80261e+01 6.82274e+01 6.85843e+01 6.91455e+01 6.99072e+01 7.08627e+01 9.90594e+01 9.54452e+01 9.20936e+01 8.89967e+01 8.61469e+01 8.35365e+01 8.11580e+01 7.90041e+01 7.70675e+01 7.53411e+01 7.38181e+01 7.24917e+01 7.13551e+01 7.04020e+01 6.96259e+01 6.90207e+01 6.85803e+01 6.82989e+01 6.81707e+01 6.81902e+01 6.83607e+01 6.87352e+01 6.93177e+01 7.01011e+01 7.10790e+01 1.00310e+02 9.66217e+01 1.15758e+02 9.00321e+01 8.71147e+01 8.44388e+01 8.19968e+01 7.97813e+01 7.77851e+01 7.60010e+01 7.44221e+01 7.30416e+01 7.18528e+01 7.08492e+01 7.00244e+01 6.93722e+01 6.88864e+01 6.85613e+01 6.83910e+01 6.83716e+01 6.85497e+01 6.89433e+01 6.95454e+01 7.03490e+01 7.13474e+01 1.01552e+02 9.77923e+01 9.42990e+01 9.10646e+01 8.80812e+01 8.53411e+01 8.28370e+01 8.05612e+01 7.85066e+01 7.66659e+01 7.50323e+01 7.35989e+01 7.23588e+01 7.13057e+01 7.04331e+01 6.97347e+01 6.92045e+01 6.88364e+01 6.86251e+01 6.85969e+01 6.87920e+01 6.92031e+01 6.98232e+01 7.06454e+01 7.16629e+01 1.02786e+02 9.89560e+01 9.53942e+01 9.20932e+01 8.90452e+01 8.62424e+01 8.36774e+01 8.13426e+01 7.92308e+01 7.73348e+01 7.56475e+01 7.41621e+01 7.28719e+01 7.17703e+01 7.08508e+01 7.01071e+01 6.95332e+01 6.91230e+01 6.88850e+01 6.88717e+01 6.90823e+01 6.95094e+01 7.01461e+01 7.09853e+01 7.20204e+01 1.04013e+02 1.00112e+02 9.64833e+01 9.31172e+01 9.00059e+01 8.71418e+01 8.45172e+01 8.21246e+01 7.99568e+01 7.80065e+01 7.62667e+01 7.47304e+01 7.33910e+01 7.22417e+01 7.12762e+01 7.04882e+01 6.98714e+01 6.94226e+01 6.91910e+01 6.91912e+01 6.94158e+01 6.98575e+01 7.05093e+01 7.13642e+01 7.24154e+01 1.05226e+02 1.01260e+02 9.75654e+01 9.41357e+01 9.09625e+01 8.80383e+01 8.53554e+01 8.29062e+01 8.06836e+01 7.86801e+01 7.68888e+01 7.53027e+01 7.39150e+01 7.27191e+01 7.17085e+01 7.09258e+01 7.02179e+01 6.97584e+01 6.95384e+01 6.95507e+01 6.97880e+01 7.02429e+01 7.09084e+01 7.17775e+01 7.28434e+01 1.06431e+02 1.02398e+02 9.86401e+01 9.51480e+01 9.19144e+01 8.89313e+01 8.61912e+01 8.36867e+01 8.14103e+01 7.93547e+01 7.75130e+01 7.58780e+01 7.44430e+01 7.32014e+01 9.42132e+01 7.12721e+01 7.05830e+01 7.01327e+01 6.99229e+01 6.99460e+01 7.01945e+01 7.06613e+01 7.13392e+01 7.22212e+01 7.33005e+01 uqfoundation-mystic-9a49031/_examples/test_br8_mpi.out.X000066400000000000000000000262101455553066500233420ustar00rootroot000000000000002.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 2.80000e+01 2.85000e+01 2.90000e+01 2.95000e+01 3.00000e+01 3.05000e+01 3.10000e+01 3.15000e+01 3.20000e+01 3.25000e+01 3.30000e+01 3.35000e+01 3.40000e+01 3.45000e+01 3.50000e+01 3.55000e+01 3.60000e+01 3.65000e+01 3.70000e+01 3.75000e+01 3.80000e+01 3.85000e+01 3.90000e+01 3.95000e+01 4.00000e+01 uqfoundation-mystic-9a49031/_examples/test_br8_mpi.out.Y000066400000000000000000000262101455553066500233430ustar00rootroot000000000000001.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.50000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.54000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.58000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.62000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.66000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.70000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.74000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.78000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.82000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.86000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.90000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.94000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 1.98000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.02000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.06000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.10000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.14000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.18000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.22000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.26000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.30000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.34000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.38000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.42000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.46000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.50000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.54000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.58000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.62000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.66000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.70000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.74000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.78000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.82000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.86000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.90000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.94000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 2.98000e+02 uqfoundation-mystic-9a49031/_examples/test_circle.m000066400000000000000000000020631455553066500224620ustar00rootroot00000000000000% % see test_circle.py % solves the dual problem, matlab implementation % (a python version would be nice, but needs a quadprog solver) % % Patrick Hung randseed(123); x0 = 10; y0 = 20; R0 = 3; npt = 30; xy = []; % generate the points while 1 pt = rand(1,2) *2-1; if norm(pt) <= 1 xy = [xy;pt(1)*R0+x0 pt(2)*R0+y0]; end if size(xy,1) == npt break end end theta = [0:0.01:2*pi]; Q = zeros(npt,npt); for i = 1:npt for j = 1:npt % super dumb. don't do this at home Q(i,j) = dot(xy(i,:),xy(j,:)); end end p = -diag(Q); % sets up quadratic program parameters H = 2*Q; f = p; A = eye(npt); b = ones(npt,1); al = quadprog(H,f,[],[], ones(1,npt),1, zeros(npt,1),ones(npt,1)); center = al'*xy; sv = find(al>0.001); R = norm(xy(sv(1),:)-center); clf plot(xy(:,1),xy(:,2),'k.') hold on plot(xy(sv,1),xy(sv,2),'ro') axis equal plot(R0 *cos(theta)+x0, R0*sin(theta)+y0,'r-') plot(R *cos(theta)+center(1), R*sin(theta)+center(2),'g-') plot(center(1),center(2),'k+') plot([center(1) xy(sv(1),1)],[center(2) xy(sv(1),2)],'k--') % end of file uqfoundation-mystic-9a49031/_examples/test_gplot.py000077500000000000000000000012101455553066500225360ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from mystic.tools import getch import Gnuplot, numpy g = Gnuplot.Gnuplot(debug = 1) g.clear() x = numpy.arange(-4, 4, 0.01) y = numpy.cos(x) y2 = numpy.cos(2* x) kwds = {'with':'line'} g.plot(Gnuplot.Data(x, y, **kwds)) getch('next: any key') g.plot(Gnuplot.Data(x, y2, **kwds)) getch('any key to quit') # end of file uqfoundation-mystic-9a49031/_examples/test_smo1.py000077500000000000000000000133251455553066500223020ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Classification. SMO prototype. """ from numpy import * import matplotlib.pyplot as plt from mystic.svc import * # a common objective function for solving a QP problem # (see http://www.mathworks.com/help/optim/ug/quadprog.html) def objective(x, H, f): return 0.5 * dot(dot(x,H),x) + dot(f,x) c1 = array([[0., 0.],[1., 0.],[ 0.2, 0.2],[0.,1.]]) c2 = array([[0, 1.1], [1.1, 0.],[0, 1.5],[0.5,1.2],[0.8, 1.7]]) # the Kernel Matrix (with the linear kernel) XX = concatenate([c1,-c2]) nx = XX.shape[0] # quadratic and linear terms of QP Q = KernelMatrix(XX) b = -1 * ones(nx) H = Q f = b Aeq = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) Beq = array([0]) lb = zeros(nx) ub = 99999 * ones(nx) from mystic.symbolic import linear_symbolic, solve, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq,Beq) constrain = constraint(solvers(solve(constrain,target=['x0']))) from mystic import suppressed @suppressed(1e-5) def conserve(x): return constrain(x) #from mystic.monitors import VerboseMonitor #mon = VerboseMonitor(1) from mystic.solvers import diffev alpha = diffev(objective, list(zip(lb,ub)), args=(H,f), npop=nx*3, gtol=200, \ # itermon=mon, \ ftol=1e-8, bounds=list(zip(lb,ub)), constraints=conserve, disp=1) print('solved x: %s' % alpha) print("constraint A*x == 0: %s" % inner(Aeq, alpha)) print("minimum 0.5*x'Hx + f'*x: %s" % objective(alpha, H, f)) # let's play. We will need to bootstrap the SMO with an initial # state that belongs to the feasible set. Because of the special structure # of SVMs, the zero vector suffices. We will use that here. # More generally, an initial point can be obtained via solving an LP. def getIndexSets(alpha, a, b, y): """See Kerthi and Gilbert, and MathSVM.m""" # it is either one loop, or five smart ops. # will do former so it can be translated into C I0,I1,I2,I3,I4 = [],[],[],[],[] for i, ali, ai, bi, yi in zip(range(y.size), alpha, a, b, y): if ali > ai and ali < bi: I0.append(i) elif ali == ai: if yi > 0: I1.append(i) else: I4.append(i) else: if yi < 0: I2.append(i) else: I3.append(i) return I0,I1,I2,I3,I4 def getIub(I0, I1, I2, I3, I4): return I0+I1+I2 def getIlb(I0, I1, I2, I3, I4): return I0+I3+I4 def QPOptimalQ(Iub, Ilb, F, tau): return max(F[Ilb]) - min(F[Iub]) <= tau def ViolatingPairQ(Sub, Slb, i, j, F, tau): # Sub and Slb should now be sets if Sub.__contains__(i) and Slb.__contains__(j) and F[j] - F[i] > tau: return True elif Slb.__contains__(i) and Sub.__contains__(j) and F[i] - F[j] > tau: return True else: return False def getViolatingPair(Iint, Iub, Ilb, F, tau): # The heuristic is to focus attention to Iint FIint = F[Iint] if FIint and max(FIint) - min(FIint) > tau: # the first index set (is nonempty and) has offending elements. ihigh,ilow = FIint.argmax(), FIint.argmin() return Iint[ilow], Iint[ihigh] else: # nothing within the first index set, need to scan # MathSVM is dumber than usual Sub,Slb = set(Iub), set(Ilb) l = F.size for i in range(l): for j in range(i,l): if ViolatingPairQ(Sub, Slb, i, j, F, tau): return i,j # the fact that this function is called means that it # should never reach here return None def smo_sub2d(Q, y, alpha, X, i, j, ym, yp): # 2d subproblem for SMO, varying only indices i and j a1,a2 = alpha[i], alpha[j] y1,y2 = y[i], y[j] wv = WeightVector(alpha, X, y) ii = inner(wv, X) bias = -0.5 * (max(ii[ym]) + min(ii[yp])) ay = transpose(alpha * y) TT = dot(Q, transpose(alpha * y)) + b E1, E2 = TT[i] - y1, TT[j] - y2 k = Q[i,i] + Q[j,j] - 2. * Q[i,j] C = b[0] # note, i am now assuming that a=0, b=c if y1 != y2: U = max(0, a2-a1) V = min(C, C-a1 + a2) print("1 U/V: %s %s" % (U, V)) else: U = max(0., a1+a2-C) V = min(C, a1+a2) print("2 U/V: %s %s" % (U, V)) a2trial = a2 + y2*(E1-E2)/k if a2trial > V: a2new = V elif a2trial < U: a2new = U else: a2new = a2trial a1new = a1 + y1*y2*(a2-a2new) print("E1/E2: %s %s" % (E1,E2)) print("C: %s" % C) return a1new, a2new def QP_smo(Q, p, a, b, c, y, tau, a0, X): """\ Minimizes xQx + Px, subject to a_i <= x_i <= b_i for all i and y.x = c X are the array of input points (their labels should be in y) """ # initial alpha (must be feasible) alpha = a0 l = alpha.size ym,yp = (y<0).nonzero()[0], (y>0).nonzero()[0] while 1: Isets = getIndexSets(alpha, a, b, y) Iub = getIub(*Isets) Ilb = getIlb(*Isets) F = (dot(Q, alpha) + p)/y if QPOptimalQ(Iub, Ilb, F, tau): break B = getViolatingPair(Isets[0], Iub, Ilb, F, tau) # now solve the 2d subproblem aa = smo_sub2d(Q, y, alpha, X, B[0], B[1], ym,yp) print("aa: %s" % str(aa)) alpha[B[0]], alpha[B[1]] = aa print(alpha) break X = concatenate([c1,c2]) y = Aeq.flatten() p,a,b,c = f, lb, ub, 0 QP_smo(Q, p, a, b, c, y, 0.01, a, X) # end of file uqfoundation-mystic-9a49031/_examples/testsolvers_pyre.py000077500000000000000000000112721455553066500240170ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Runs mystic solvers as a pyre application Test solver/termination combinations by editing input files - chebyshevinputs -- for NelderMeadSimplex, PowellDirectional with chebyshev8 - chebyshevinputs_de -- for DifferentialEvolution, DifferentialEvolution2 with chebyshev8 - roseninputs -- for NelderMeadSimplex, PowellDirectional, DifferentialEvolution(2) with rosenbrock and running, for example: $python testsolvers_pyre.py --solver=NelderMeadSimplex --inputs=chebyshevinputs """ from pyre.applications.Script import Script from mystic.helputil import paginate from mystic.solvers import * from mystic.termination import * import logging class TestSolverApp(Script): """Solvers wrapped into a Pyre Application.""" class Inventory(Script.Inventory): import pyre.inventory # the defaults inputs = pyre.inventory.str('inputs', default = 'chebyshevinputs_de') inputs.meta['tip'] = 'The python module containing the cost-function and other data.' verbose = pyre.inventory.bool('verbose', default = False) verbose.meta['tip'] = 'Turns on logging.' solver = pyre.inventory.str('solver', default = 'DifferentialEvolution') solver.meta['tip'] = 'The solver to be used.' def main(self, *args, **kwds): # general solver # exception for DifferentialEvolutionSolver2 if self.inventory.solver == 'DifferentialEvolution2': solvername = DifferentialEvolutionSolver2 else: solvername = eval(self.inventory.solver + 'Solver') # create the solver try: NP = self.mod.NP solver = solvername(self.mod.ND, NP) except: solver = solvername(self.mod.ND) costfunction = self.mod.cost termination = self.mod.termination from mystic.tools import random_seed random_seed(123) # set initial points try: solver.SetInitialPoints(self.mod.x0) except: solver.SetRandomInitialPoints(self.mod.min, self.mod.max) # set maximum number of iterations try: maxiter = self.mod.maxiter solver.SetEvaluationLimits(generations=maxiter) except: pass # set bounds, if applicable try: min_bounds = self.mod.min_bounds max_bounds = self.mod.max_bounds solver.SetStrictRanges(min_bounds, max_bounds) except: pass # additional arguments/kwds to the Solve() call try: solverkwds = self.mod.solverkwds except: solverkwds = {} solver.Solve(costfunction, termination, **solverkwds) self.solution = solver.Solution() return def __init__(self): Script.__init__(self, 'testsolverapp') self.mod = '' self.solution = None return def _defaults(self): Script._defaults(self) return def _configure(self): from mystic import strategy as detools Script._configure(self) mod = __import__(self.inventory.inputs) self.mod = mod if self.inventory.verbose: logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S') def _init(self): Script._init(self) return def help(self): doc = """ # this will solve the default "example" problem %(name)s """ % {'name' : __file__} paginate(doc) return #----------------------------------- def output_chebyshev(): # Chebyshev8 polynomial from mystic.models.poly import chebyshev8coeffs as target_coeffs from mystic.models.poly import poly1d print("target:\n%s" % poly1d(target_coeffs)) print("\nSolver Solution:\n%s" % poly1d(app.solution)) def output_rosen(): # rosenbrock print("target: [1. 1. 1.]") print("solver solution: %s" % app.solution) # main if __name__ == '__main__': app = TestSolverApp() app.run() # select the correct output format # redirects to output_chebyshev or output_rosen inputs = app.inventory.inputs i = inputs.find('input') funcname = inputs[:i] eval('output_' + funcname + '()') # End of file uqfoundation-mystic-9a49031/docs/000077500000000000000000000000001455553066500167565ustar00rootroot00000000000000uqfoundation-mystic-9a49031/docs/Makefile000066400000000000000000000012361455553066500204200ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = mystic SOURCEDIR = source BUILDDIR = build # Internal variables ALLSPHINXOPTS = $(SPHINXOPTS) $(SOURCEDIR) # Put it first so that "make" without argument is like "make help". help: @echo "Please use \`make html' to generate standalone HTML files" .PHONY: help clean html Makefile clean: -rm -rf $(BUILDDIR) html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR) -rm -f $(BUILDDIR)/../../scripts/_*py -rm -f $(BUILDDIR)/../../scripts/_*pyc -rm -rf $(BUILDDIR)/../../scripts/__pycache__ uqfoundation-mystic-9a49031/docs/requirements.txt000066400000000000000000000015461455553066500222500ustar00rootroot00000000000000# Packages required to build docs # dependencies pinned as: # https://github.com/readthedocs/readthedocs.org/blob/4dd655eaa5a36aa2cb9eed3e98961419536f99e8/requirements/docs.txt alabaster==0.7.13 babel==2.12.1 certifi==2023.7.22 charset-normalizer==3.2.0 click==8.1.6 colorama==0.4.6 docutils==0.18.1 idna==3.4 imagesize==1.4.1 jinja2==3.1.3 livereload==2.6.3 markdown-it-py==3.0.0 markupsafe==2.1.3 mdit-py-plugins==0.4.0 mdurl==0.1.2 myst-parser==2.0.0 packaging==23.1 pygments==2.16.1 pyyaml==6.0.1 readthedocs-sphinx-search==0.3.2 requests==2.31.0 six==1.16.0 snowballstemmer==2.2.0 sphinx==6.2.1 sphinx-autobuild==2021.3.14 sphinx-copybutton==0.5.2 sphinx-design==0.5.0 sphinx-hoverxref==1.3.0 sphinx-intl==2.1.0 sphinx-multiproject==1.0.0rc1 sphinx-notfound-page==0.8.3 sphinx-prompt==1.6.0 sphinx-rtd-theme==1.2.2 sphinx-tabs==3.4.1 tornado==6.3.3 urllib3==2.0.7 uqfoundation-mystic-9a49031/docs/source/000077500000000000000000000000001455553066500202565ustar00rootroot00000000000000uqfoundation-mystic-9a49031/docs/source/_static/000077500000000000000000000000001455553066500217045ustar00rootroot00000000000000uqfoundation-mystic-9a49031/docs/source/_static/css/000077500000000000000000000000001455553066500224745ustar00rootroot00000000000000uqfoundation-mystic-9a49031/docs/source/_static/css/custom.css000066400000000000000000000001251455553066500245160ustar00rootroot00000000000000div.sphinxsidebar { height: 100%; /* 100vh */ overflow: auto; /* overflow-y */ } uqfoundation-mystic-9a49031/docs/source/cache.rst000066400000000000000000000004011455553066500220460ustar00rootroot00000000000000mystic.cache module documentation ================================= archive module -------------- .. automodule:: mystic.cache.archive .. :exclude-members: + function module --------------- .. automodule:: mystic.cache.function .. :exclude-members: + uqfoundation-mystic-9a49031/docs/source/conf.py000066400000000000000000000211371455553066500215610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # mystic documentation build configuration file, created by # sphinx-quickstart on Wed Aug 9 06:50:58 2017. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import os from datetime import datetime import sys scripts = os.path.abspath('../../scripts') sys.path.insert(0, scripts) try: os.symlink(scripts+os.sep+'mystic_collapse_plotter', scripts+os.sep+'_mystic_collapse_plotter.py') os.symlink(scripts+os.sep+'mystic_log_reader', scripts+os.sep+'_mystic_log_reader.py') os.symlink(scripts+os.sep+'mystic_log_converter', scripts+os.sep+'_mystic_log_converter.py') os.symlink(scripts+os.sep+'mystic_model_plotter', scripts+os.sep+'_mystic_model_plotter.py') os.symlink(scripts+os.sep+'support_convergence', scripts+os.sep+'_support_convergence.py') os.symlink(scripts+os.sep+'support_hypercube', scripts+os.sep+'_support_hypercube.py') os.symlink(scripts+os.sep+'support_hypercube_measures', scripts+os.sep+'_support_hypercube_measures.py') os.symlink(scripts+os.sep+'support_hypercube_scenario', scripts+os.sep+'_support_hypercube_scenario.py') except: pass # Import the project import mystic # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.imgmath', 'sphinx.ext.ifconfig', 'sphinx.ext.napoleon'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General information about the project. project = 'mystic' year = datetime.now().year copyright = '%d, The Uncertainty Quantification Foundation' % year author = 'Mike McKerns' # extension config github_project_url = "https://github.com/uqfoundation/mystic" autoclass_content = 'both' autodoc_default_options = { 'members': True, 'undoc-members': True, 'private-members': True, 'special-members': True, 'show-inheritance': True, 'imported-members': True, 'exclude-members': ( '__dict__,' '__slots__,' '__weakref__,' '__module__,' '_abc_impl,' '__init__,' '__annotations__,' '__dataclass_fields__,' ) } autodoc_typehints = 'description' autodoc_typehints_format = 'short' napoleon_include_private_with_doc = False napoleon_include_special_with_doc = True napoleon_use_ivar = True napoleon_use_param = True # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = mystic.__version__ # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # Configure how the modules, functions, etc names look add_module_names = False modindex_common_prefix = ['mystic.']#,'mystic.cache.','mystic.math.','mystic.models.'] # -- Options for HTML output ---------------------------------------------- # on_rtd is whether we are on readthedocs.io on_rtd = os.environ.get('READTHEDOCS', None) == 'True' # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # if not on_rtd: html_theme = 'alabaster' #'bizstyle' html_css_files = ['css/custom.css',] #import sphinx_rtd_theme #html_theme = 'sphinx_rtd_theme' #html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] else: html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = { 'github_user': 'uqfoundation', 'github_repo': 'mystic', 'github_button': False, 'github_banner': True, 'travis_button': True, 'codecov_button': True, 'donate_url': 'http://uqfoundation.org/pages/donate.html', 'gratipay_user': False, # username 'extra_nav_links': {'Module Index': 'py-modindex.html'}, # 'show_related': True, # 'globaltoc_collapse': True, 'globaltoc_maxdepth': 4, 'show_powered_by': False } # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # This is required for the alabaster theme # refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars if on_rtd: toc_style = 'localtoc.html', # display the toctree else: toc_style = 'globaltoc.html', # collapse the toctree html_sidebars = { '**': [ 'about.html', 'donate.html', 'searchbox.html', # 'navigation.html', toc_style, # defined above 'relations.html', # needs 'show_related':True option to display ] } # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. htmlhelp_basename = 'mysticdoc' # Logo for sidebar html_logo = 'mystic2.png' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'mystic.tex', 'mystic Documentation', 'Mike McKerns', 'manual'), ] # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'mystic', 'mystic Documentation', [author], 1) ] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'mystic', 'mystic Documentation', author, 'mystic', 'Constrained nonlinear optimization for scientific machine learning, UQ, and AI.', 'Miscellaneous'), ] # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'https://docs.python.org/3/': None} # {'python': {'https://docs.python.org/': None}, # 'mystic': {'https://mystic.readthedocs.io/en/latest/', None}, # 'pyina': {'https://pyina.readthedocs.io/en/latest/', None}, # 'pox': {'https://pox.readthedocs.io/en/latest/', None}, # 'dill': {'https://dill.readthedocs.io/en/latest/', None}, # 'multiprocess': {'https://multiprocess.readthedocs.io/en/latest/', None}, # 'ppft': {'https://ppft.readthedocs.io/en/latest/', None}, # 'klepto': {'https://klepto.readthedocs.io/en/latest/', None}, # } uqfoundation-mystic-9a49031/docs/source/index.rst000066400000000000000000000004701455553066500221200ustar00rootroot00000000000000.. mystic documentation master file mystic package documentation ============================ .. toctree:: :hidden: :maxdepth: 2 self mystic scripts .. automodule:: mystic .. :exclude-members: + Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` uqfoundation-mystic-9a49031/docs/source/math.rst000066400000000000000000000027451455553066500217510ustar00rootroot00000000000000mystic.math module documentation ================================ approx module ------------- .. automodule:: mystic.math.approx .. :exclude-members: + compressed module ----------------- .. automodule:: mystic.math.compressed .. :exclude-members: + discrete module --------------- .. automodule:: mystic.math.discrete :exclude-members: +point_mass, measure, product_measure, scenario .. autoclass:: point_mass .. :exclude-members: + .. autoclass:: measure :exclude-members: +coords, get_expect, mean .. autoclass:: product_measure :exclude-members: +coords, get_expect .. autoclass:: scenario :exclude-members: +coords, get_mean_value distance module --------------- .. automodule:: mystic.math.distance .. :exclude-members: + grid module ----------- .. automodule:: mystic.math.grid .. :exclude-members: + integrate module ---------------- .. automodule:: mystic.math.integrate .. :exclude-members: + interpolate module ------------------ .. automodule:: mystic.math.interpolate .. :exclude-members: + legacydata module ----------------- .. automodule:: mystic.math.legacydata .. :exclude-members: + measures module --------------- .. automodule:: mystic.math.measures .. :exclude-members: +_flat_split poly module ----------- .. automodule:: mystic.math.poly .. :exclude-members: + samples module -------------- .. automodule:: mystic.math.samples .. :exclude-members: + stats module ------------ .. automodule:: mystic.math.stats .. :exclude-members: + uqfoundation-mystic-9a49031/docs/source/models.rst000066400000000000000000000027311455553066500222760ustar00rootroot00000000000000mystic.models module documentation ================================== abstract_model module --------------------- .. automodule:: mystic.models.abstract_model .. :exclude-members: + br8 module ---------- .. automodule:: mystic.models.br8 .. :exclude-members: + circle module ------------- .. automodule:: mystic.models.circle .. :exclude-members: + dejong module ------------- .. automodule:: mystic.models.dejong .. :exclude-members: + functions module ---------------- .. automodule:: mystic.models.functions .. :exclude-members: + lorentzian module ----------------- .. automodule:: mystic.models.lorentzian .. :exclude-members: + mogi module ----------- .. automodule:: mystic.models.mogi .. :exclude-members: + nag module ---------- .. automodule:: mystic.models.nag .. :exclude-members: + pohlheim module --------------- .. automodule:: mystic.models.pohlheim .. :exclude-members: + poly module ----------- .. automodule:: mystic.models.poly .. :exclude-members: + schittkowski module ------------------- .. automodule:: mystic.models.schittkowski .. :exclude-members: + storn module ------------ .. automodule:: mystic.models.storn .. :exclude-members: + venkataraman module ------------------- .. automodule:: mystic.models.venkataraman .. :exclude-members: + wavy module ----------- .. automodule:: mystic.models.wavy .. :exclude-members: + wolfram module -------------- .. automodule:: mystic.models.wolfram .. :exclude-members: + uqfoundation-mystic-9a49031/docs/source/mystic.rst000066400000000000000000000076621455553066500223330ustar00rootroot00000000000000mystic module documentation =========================== abstract_ensemble_solver module ------------------------------- .. automodule:: mystic.abstract_ensemble_solver .. :exclude-members: + abstract_launcher module ------------------------ .. automodule:: mystic.abstract_launcher .. :exclude-members: + abstract_map_solver module -------------------------- .. automodule:: mystic.abstract_map_solver .. :exclude-members: + abstract_sampler module ----------------------- .. automodule:: mystic.abstract_sampler .. :exclude-members: + abstract_solver module ---------------------- .. automodule:: mystic.abstract_solver .. :exclude-members: + bounds module ------------- .. automodule:: mystic.bounds .. :exclude-members: + cache module ------------ .. toctree:: :titlesonly: :maxdepth: 2 cache .. automodule:: mystic.cache .. :exclude-members: +lru_cache, lfu_cache, mru_cache, rr_cache, inf_cache, no_cache collapse module --------------- .. automodule:: mystic.collapse .. :exclude-members: + constraints module ------------------ .. automodule:: mystic.constraints .. :exclude-members: + coupler module -------------- .. automodule:: mystic.coupler .. :exclude-members: + differential_evolution module ----------------------------- .. automodule:: mystic.differential_evolution .. :exclude-members: + ensemble module --------------- .. automodule:: mystic.ensemble .. :exclude-members: + filters module -------------- .. automodule:: mystic.filters .. :exclude-members: + forward_model module -------------------- .. automodule:: mystic.forward_model .. :exclude-members: + helputil module --------------- .. automodule:: mystic.helputil .. :exclude-members: + linesearch module ----------------- .. automodule:: mystic.linesearch .. :exclude-members: + mask module ----------- .. automodule:: mystic.mask .. :exclude-members: + math module ----------- .. toctree:: :titlesonly: :maxdepth: 2 math .. automodule:: mystic.math .. :exclude-members: +approx_equal, dirac_measure, paramtrans metropolis module ----------------- .. automodule:: mystic.metropolis .. :exclude-members: + models module ------------- .. toctree:: :titlesonly: :maxdepth: 2 models .. automodule:: mystic.models .. :exclude-members: + monitors module --------------- .. automodule:: mystic.monitors .. :exclude-members: + munge module ------------ .. automodule:: mystic.munge .. :exclude-members: + penalty module -------------- .. automodule:: mystic.penalty .. :exclude-members: + pools module ------------ .. automodule:: mystic.pools .. :exclude-members: + python_map module ----------------- .. automodule:: mystic.python_map :exclude-members: +carddealer_mapper samplers module --------------- .. automodule:: mystic.samplers .. :exclude-members: + scemtools module ---------------- .. automodule:: mystic.scemtools .. :exclude-members: + scipy_optimize module --------------------- .. automodule:: mystic.scipy_optimize .. :exclude-members: + .. scripts module -------------- .. automodule:: mystic.scripts .. :exclude-members: + search module ------------- .. automodule:: mystic.search .. :exclude-members: + solvers module -------------- .. automodule:: mystic.solvers .. :exclude-members: + strategy module --------------- .. automodule:: mystic.strategy .. :exclude-members: + support module -------------- .. automodule:: mystic.support .. :exclude-members: + svc module ---------- .. automodule:: mystic.svc .. :exclude-members: + svr module ---------- .. automodule:: mystic.svr .. :exclude-members: + symbolic module --------------- .. automodule:: mystic.symbolic .. :exclude-members: + termination module ------------------ .. automodule:: mystic.termination .. :exclude-members: + tools module ------------ .. automodule:: mystic.tools :exclude-members: +parse_from_history, src, Sow, VerboseSow, LoggingSow, CustomSow, Null, collections, reduce uqfoundation-mystic-9a49031/docs/source/mystic2.png000066400000000000000000002124471455553066500223700ustar00rootroot00000000000000‰PNG  IHDR‡ÝéÊ+CiCCPICC Profilex­Xy8”Ýß?³ÛØ÷¥LŠ-»0²ïk¶ìfˆÉ0ƒ±'¥EÙ—²D¶„EDòDH¶¥RŠHJ$û’ð»‡zžë÷¾×s½ÿ¼çºæ>Ÿó9ßí>ßsæœsÀ&èA&á?J µ6Æá¸#†ö€À¤—>ˆ¬eii ‰üKYy `Ô®)ª­ú7š9rLàôÞÅG©·‹m¨8”B¦@2>TŒ÷ñð„ð)KÚXë@¸ ÂÌÞ»øãvq;‡à½©ºC Øý= þÐÎ@ë鄇º©~==ƒð~NŽõó#AöY_B¼žé²®Aøu\ *¨i@6Ûÿá\îPIKó?ÜÁ 8hÊù‡[´Þ+woÐ y¹s0´64#ÛÛ‹¢Plil¦noomooÞñ€§D|p`ÈŽ,äÖ ÀÿÕÞ}çß(9P‚aü°.x<©I#‰’ 5¡‹¢Æ(‚Îgb©f³å çläãUç‡ 4í9-$‹™N? /òê ¿Ø–D²$·T† ·lº½ü…U%¼r—êá# j3ÆØBÍU-SílÏz’úþe†£Æ¬&š¦³ó*‹!+zkc¡6wlGì™ÔŸtÌvjqžreuSt·óÅeà«=û½f½‘>\á“2¾*Dm?cs’Ù:À<Ð8H‹¢,"ʺ6þ<"?’xJ%Š6jèô­èè3vgåbXbæÎ ž|¡èb|lØ%ïËvqÆñ Wû’S´SCÓŠÓ{¯¬fðgªfÙdû^‹ÊIÏÍ¿~/¯>¿½`¨ðKÑâ­›t%¥‚enIÞ–¿£zW­\ãžæý£G+±Ô«ŽT+=”«‘­•~$Y'þX¤~ß_üOX +_ž¾mzÞ\Ñ’û,¶•òܵM¿]ºƒ½ã[gcWÒ çn±îùžÚÞ°—Ê/—ú*û û†S_é¿Úx}ÿëÃPå[»·?ß]Vîïûù!gDn¤cÔ}tícú˜ÌXç8áçª ×Ï Ÿ«']¾ ¾Üýjõui*ýÛáo=Ó„øLöwéïͳv³S?bæöÎ5͸ÚÏ,a—‘Ëý+·WãÖ×=~ÚoØü²ßtÝòÙ6ÝÞ†ò‡Ã]|ˆÈzšÛ¨ Ú.º%uÆ+èEfË [+g ·.Ï(_¨«àõ½²B•ûä…Ë`DD—ÅlÅ+ÑKºKݓޒ5;œ"7¨À©h¡” Üªò눔š«z¢F ö½æ––€¶‚Ž®£AŸbpÊ0Ö¨Àø©ÉˆéOs. iK=+'kʱK6Ù¶·íÛ·;¼:>æøÝiÍîŠrCºm»¯{,à¦ñŸ<ßyõhõ®ó)'äŸLö=C òóð·"iWê#ƒ4(JGpRˆ}èþй°'áñN‘‡"7OõFÝ8mtæàY®æstçáç^˜¿8ûéÒð徸¶ø§ µ‰åIÅÉ9)©©ÓΤ‡] ¼JÌÀgºd9d[\ÓÏÑÈ•¿.ž'˜Ïœ¿]ð£p´èÅÚâ›7ÓKRKÓʲoåÞ.¹s÷nuù£{M÷»+^WŽ=˜©ZHSÃY+üHºNý±A½é_ÆOô´UžŠ5q7Û§Z:ŸÝj=ûÜ®M¢m£½³#£Ó½ëP×ê‹–îÄ»^ÁÞ/óûœûyúûâu½ªyM~#ñæËÐÍ·žïDßM W¼ù€AôŽæ|ô“‡÷~*˜ü¬7É7ùãKÓ×Ì)¿o:Ó|Ós3=ßkfoüȜ˜Ï_¨XìZZ^]Å­¯ÏmhÿÊܜۖÚÉ¿)\ Þ…G*"Ò´¡JhÓè.Ó§1”0>G/0‹°àXo°}áPãÌç†ñàyŸòcB»÷ ÄTïÛÜ=)RÍ q7‰ôC’£RË2(Y¾ÃbrJòš Š&JfÊÆ*úªjGäÕ0ê,ê_°½šµG µ´ÃuNèÓÓÓ—52D®M˜4˜–™¥š‡Y¸ZêX‰Ysƒûa3dÛhW`åàpüÐñMǧëÎ']]®/ÝòÜý<4q\¸ølOcÏm¯ÚAÞ Þë>̈́箾²Dñµß-ÿp’!™‹ü1 8Ð5ˆ;¨‡r!X-øGHq¨SKXs8%B,â]dÂ)쩹¨ÂÓÖÑtÑmgRϺÇHÇlë=ŸwxQ=;|©ì2%îh¿1cEimbãΖ5ÿ»{uO@)p“ »ÌïP@@4 v–Lبxp3€£_X ð{ÿ€ö&°È#€à (í`ü‚ñÀäa0_Ø%ØMX3ì#l.ÇÂÝàgàEðVø‚¡€pFœG”#Þ ÈÃH7d²¹@#JãH“JÓB °¨T-j…V™6Œ¶žv‹N.‘î ½0}}# ƒ;C5#=£;ã#4š„îa’aJcZgÆ1÷°h°ÜcfÍbcgKb§cf_æ q|ãôæœäòášæ&s/óœæeàÍâ;ÈWÇoÎ?!%È+X½ÇzÏÒÞ!¡eLÉ>'aVáŽý±ôEDD¯$‰éРНJ z"Y"U(}_¦Y¶ÿð„Ü¢L­Ä£¼WEDõ4Ç•ÕÕ5´±:šbš3Gi]жÕÓÙÒ}§÷H?Ëà´!ÁÈÎØÈDËk¦b®a¡eiheeíp gC²¶K·/uxrüã‚3«‹¬«[”{©Ç î©àå{¢Ð{˜À{ÒÖ7ØïÏA²'ç| R¥¤O…†•F0GFúvÚ1ºã¬vLÃyÕ ý±¡—ÅãFŠ’RÌÒ¯g`²®íÏ=œ§[à_TyQê}ëó]ÿûðÊ‚jšÞ:|ý÷›§Zö¶&·£;³»5zgû+^]òv‘û8þ)øóüWëo™3M³s= —2W|Öd ÿòMoêüÀö5`H ”€0 eŸ¦³ƒîÀª`ƒ°e8üÜ/…÷À—{F ¢Ñ‹ØFÊ"ñÈLd Šæ(M$MÍ:ê* ÕDKGkE{ö3Ýyº×ôôgé‡ä¦Mï¡ÙÑáèOLLÌrÌe,Â,y¬{X ØDÙî³Ë±?àPà¨ã<ÊÙÁeËõ‰;ˆÁ“É+ÃÛ·ç‡ó è |LÝ£ºgro–éÜ/l¶Ÿcÿð‘`Q½ƒ|çÅ:ÅoHœ;„—4’R‘6•!ɦ®”{-¿¦È«¤ªì¬­Z|¤CmVƒ«­érÔC ¯}BÇO7Lï‚~ŠAža¥Q›ñ°É‚“¹˜…ž¥—Õ%ëÒc6Óv¬öGÜ_v|ä4å"àjévɽ ‡Â›x¦x {KúDº|QD-¿ÿJÒdÀ¾@Ç Ê›¶P˰¤ðîHô)³¨ÄÓÝgØÏ:Ä䛾 {±äýerÜç\âx²*]ZÉû –ÌÞìÌÂuí|¾‚ù¢¾âÇ%wË*n7Þ}uo®’«Já¡CmhÝÕúò'ͽM£-ß[7Úi:Y_ôˆ¼”è—”­0„}§ýÞhÄú£ã¸Í„ò$û—‘©«ÓÚ3c³”ËóA K–Ë5«\käõŽ Ì¯Í®üÃà‡Ö¿9ð‰à>èËЙRæK€UÃÞÃiárPæcáUðКÇ"Ȉ"hÅ3!õÑÈzä: M8Íhµ£ÒQ#´’´‘´/è„èBééé¯Ño3ø0 0j3V¡ÅÐL‚L9Ìæ›,ò,ͬ¶¬Ólمٟr¸rlqré@k;G“g†÷:Ÿ?Š¿Zר=ð=í{ã…L1œ˜ûª„“÷“8ЉjTSW’P=¤!‰•Òv•É–})‡—V°Q Uºªü@¥_uAM@ÝP#[s”YËOû¥î½Û|†iÐ96ÙŒÛ<ßRÚªé˜Í=;f{ŠÃ+Gu§2×·ÜwO²×ºwÿd)Qίš¤L® ”ª– )ã‹øuŠ5mq¦=Fý\ñù¥‹º±—¦âTãÆ“T’“S~¤Ù¦?»ª˜ñ0K%»3—»—W [Øpæx¶$¾LæÖÛ;çË%ï V„>`«*{¨XSÿ[WW/ùWaƒDcW±…ùÙýçfm_;¢»ø^<èÑíî  ,{­õfüí¹áƒï[FìFÇÆ<ÇßL`?_Ÿüúõà”ã·Èé”™ëß³fãÍÙÎË,Ð,ô-æ.9/ .­\Y5^]]»¹nµþëgé†ÙÆâ¯¬MµÍ‘­jþwïK;w ‘ˆ1ÕÑÝiþÿ=üˆÁÐl§°CO´?Îܪ©ø+™biÕÜÐïgPÈ1=¨f…Nµ¬'úF¿1ÆÓCׂ/á£ca4„MOê[C²s8éal afŸôò·=ö›#wî¸T™82E›*Ï á\¯ ½?2Õ>6ö¿uŸ[ÛBø$3èK2¡ÊS}­yzéþŽ Žô'š›B<3œ“@1¢ÆÏ a  <@ ð^@ ˜ ûû‰x Ô&A½^ ’›Ø‘û#e·Ó&ü-)pbÇ^ÈŽŽ/˜„tüÜ1­]ëqÀÿ#{GvJöן֎GâŽ×?&Pë¿™]K»Ñíö€'$õ‡ÇÿÑ zö{p"$‹~ÄÎ)Š”ƒÎœÚH $© 0Hn$?B* UZHM¤Ô§Ú3S;ów,»cƒûûM 8¼@ðΈøÿÍþ/¯€}ÃØ¹»C£ PÐÜÈ-§¢Vbµú¯Bñ £P 9<àíCÁhA_.¼$1FþxiIŒœìayðja™BÁžà pHYs  šœ IDATxì€]Uµþ×-SÓC%!€H±áû[ž Šúì½aAQžH± °`¤)Eª4)¢€ˆ(]ŠôÞi“d23ÉL2}æ¶ÿï[ûž™›IfBydfö†›sÏ>»®sç[{•½vªD²˜"Æ Jy³T–‰ñ /pI§¸çK>³l*£œ18ë8¥H‡ñ¯ãÅ¡cle¤@*ÛïŒACK§Š|‡K¤áÅ*ål‚#ŽCŠØt(ÿB6wGò"S Pª–Ѐ¸àÿ[¡ÔË=¢„D ƒYÄ))0,"s–4ñÁh§@Úò–*–`’ Ò–I×9KÈ’SLj)R R`X Dæ0,iâƒQO  ˜BbÑ¡Ûàˆ}–ï™o=‹)R R`X Dæ0,iâƒÑNT6c¥L¯Š50…:Ë`wȪmÞ‚£­eéFûôâø#6*"sب俔ÀÂ])›Aµ„«’TImWXºõ [±äëé\àë~Ë1ÌϱE¨Ämtâ{)ß\ì{S @d›Â[ˆcØ(ƒ’´GR!K9ìЫlyãÙÖ_ÅϾÐgM N°B>oÕ†„Qƒ‰r¥ti£O\e£Œ)6)0Z(™ÃhySqœëMR‰¡È—å­ N·BþJ% ÓiëYu·u¯¸ÒÕâ™tTÖRi¹ºFo¦õ&x¬0¦(™Ã˜zq2•(Ê#Ij".ÅžÅÖÚr5‘"`Yö;¤`Ëœô°&¢sEÏ7I•"s¨¤eü>þ(™Ãø{çãgÆ©~˰ZÀß8ïX8D£4n¬i\[‹i— …•¶|þ‰e×Vþ¤‹Rò­Õákü7R`1E Œe Dæ0–ßîŸ[ Q¦JÀ®mm€¹pŸPù\·-YxªÕ¤òüÔJ2@ âUHãtŸ$1Š U hn8Ÿø| ¾B®°b)«¡Ex• ч’ÔŽ×H±IÈÆæ{³Jé¼A{Î7­ ¯sÀ|[ãeVè]h¹öIY¤ p?0îÉÃrä§¥UòOžÅ"ùø‹(Z¯5<óTKH…"Fk‘Sê%¾K a\I™1E ŒY Dæ0f_íØŸ˜L)TI’¤6*Ê&гÂV-=ßúqQ-²¼W~paå*îcÈbœ–=nàa¼‹eUSNQÒùi…Ö¸ÏÚ_‰#e'!e²06Òáî*FS¤ÀX¦@dcùíŽñ¹eØm)¤©”XÉgJYkZô+:-­ý $I á áFLAê%)ŠÒŠ¥ÄC1‘*„¼žò*„ EUÓâ³ðqm¡$rá4pRâ{H äS¤ÀX¦@dcùíŽù¹U3CœPAì<`ÞÑvôþíÞJÚET攓˜¡Ѳ7 V‚äpc•X!É£C;k ©¢šç}’.òíx/ýCÚú¨ž•dB>òDT+ùŸ×8Ÿ`dãü°)Oß÷/<j5_…‹jó¼SåFd%\M•r<Ðú>1>çab ðÏÓ)òRb¨dw„ YD¬ÄÚ[ÿeÝ­ÿFµ„,¤ H,1E Œq Dæ0Æ_ðhžžv0¯;uOë⋬«opNETuеŠôIRÒl’?ÜùÀ7È-›ʳ©ñ,ëGBð©,äú"Å®gíE`Á¿FÊ$’ûá®r{ͨ}ÔT4ê'Èé¨Ñ†gáûÖè fD Œ! Dæ0†^æØ›Šä€’àY» :J¡óoŸ÷[ëïos !'ã0Ï>6ö/à]„“Vù#%1„DŠPÑäèèDŠPÝ¢Bi ¦’ªJŒÂ]dû‹¶ª÷a+,½Ì:µKW+ißÓ¯ê´YÎ=©ÔJL‘£“‘9ŒÎ÷6.F­Ë>:§!h…‘Á/¶·s®-i¾r5h£[²Ùmµ#܈A$)ùž\•/§'}gM0îW)KÛ‚¦³¬¦·mÓ0"6Þ¹áƒgª¯(±–AÄ)0Š)™Ã(~yc}è)Bnû9 ¾ —žˆñ”šrÞs²ìDH¤„°Ú %ͺàÝB¥ðG‚T À|€¾Âk¤úVqîôñò˜Åu¶éàTÖ±A!Åð/àÕĪ›"sØ^BÂpa0J„η¸Ù¶²éfö<¬Hþ®æ:´J^-¬òÁuþ *%†ï’ZÊ2‹«Ä,0P‹cdé ³ífëj»¦ <è)Œ¸tM10ßpï&æ Dæ0:ÞÓ¸¥â)Àï+Ð/µØcËœÂê]–)y6nJ#¹€önÛÃÈÊk‰/²kô+<O–Í?Ú ùnÊ)`?L†O©ÆwQoÜÑÅÖ#6."sظô­¿ ó:{ÄÙ Š»ÚÒp;–—c<` ¤‡o|¤gI­D”H‰J)yž."%ÈMr¦@¤WEs-âÁ$¡"O'Åž&[±ätËòŒ¨šS蹕 0°˜"F3"sÍooŒ]G€rH4^Î]è^ _jÂë+è¤}”îàGä‹ù¡@0?k:Á{ÔH)…ŸGÅÖ¥—[®ý ÖoÙªZo"…=¦HÑLÈFóÛãcòư9,›Mœ#ÎéÔ™ ÉŠ>!À}(À'φ»JR*-¬VCC^ö·=†¡çiœUe”ÎyŸŒq5.:Ž:‚”¸¶ê{L‘£”‘9ŒÒ76†-$°Ô=|ØÃ²úå±·Ag¶iyÞÓzut܉רÂcÈH-Tgõ^^õËX,œۅ+$å'LcèÕ ÌÔQr)z‰$‘0 o“u Ÿ³Iû|où’-24Vèšk-‹Ïñ1ot@PyB>Ígµä dµœx)°IQ 2‡MêuŒ¯ÁÊ)]½ º ²0…Ž×#ÈmñÂSÝì Ã{ªÁQó”m¢XêC©—0¡ùIµåWæ­­ÝÊ6«à8ÚãP(Á °ƒ¬h¼ÀŠ]+üˆRgašP†#ƒµ‘r}X`~.]5ç˜"6] Dæ°é¾›1?²L*èç}ç3¬ 7R6ƒ®^«n’tþ­Ë.²|dzaå­u|0&>·«„Ö¦€+?‘tMVÿ•yëKàJÆàu‰å¤½~º×L±Ï=÷ —&d@7—ˆèY‚Žîa†$ Oñ//Ð!þ»ÉR þD7ÙW3>æ*%6Éð›MÕú9Rß÷ÖßlË—\À®dF>…ÔÀÏý ©¡DèŠ5ÀúE&Y¢^JšMî“«ŽuÅÆiÁ¿ÆÜÓ~¿µ5þ•ïØK´çƒ4üT†¦rØL<©jL‘›0"sØ„_θîª\U‹€fœ׃Š)gÍ‹NÃuu•¯Äµ÷L²D©BúþêÒšÞ@í$%ÒCå}%3QYÝ'åÀ¯ÌOêw-À pn%䌀¶ŠÜë` å‹OãXÑv˜{’ó¬ø é"žRÅP‡k>æG ¼¤ˆÌá%%ÿøî<1ÛÙÐÛ+f‘V×y¡&RAOÛc¶ªé:òSå!5èpdVœ£`Ì(+©­;©íµ}’~dÿÏ*bWÈ䈨”e.¨» ¹•¨—Ž+`Uˆù’˜‚vWKu¶œ ,^#^ Dæð"16±¡ Ú*¿Àlõ‹Ô-¬À3€k†°Û‹ÈB[«rtú › ˜*4·Ç‚XÃêý&Œ"ÉpõRJî]I nè•ñÊÙÖÕ]¸Ûæ´£Û ÔiÂjÜj½-÷»ÇmIA\B1˜$Y(Z<¦HM˜‘9lÂ/g¬Í÷+H Ð*šÕtùM—Z‰S×$1p@§‡ÓV»ö†,Æè¼ Ò^oB•Œam‹rå­-°…5¿­­Ne2nËì,9&ç›Þp¾¥.ƒªlÉ‚_Q i¢Ž0Âò~ $#DL‘›0"sØ„_ÎXšb'¥úXm§@Zf¡§…ÞÎ÷¶{I«÷B íXÅLüœòÖ2ñêš$1 ÕQ¾·Q¾¯ü^6 {•¯ü$í¾%i0D¿&ùº&}è{¿Ê Ë$yê'ÏM±¿ÅšæŸª¨K<ÓÖ91 ãÆ|¯T;¦HM“‘9lšïe\ŒÊ÷2 WªA•d¸ªJ³Ô„1·PìHÕ.•À=ÒwánåGe“û¤^åý‹Edµ¤Êïb­+þaù•À Òxc•Ãxgpiº).i ^#6 Dæ°‰¼ˆñ9Œ 9¤òpÔ2ýíÚª–kˤÀ@ ¸V‚­$ྶkR>¹¾X4­CåwA)¹V~㓬ߖ,:¾Ì 4_I>ÚÝ]®ì-Ä"6= Dæ°é½“q3¢ ðÔ‘k`å’†­†«VÜx}®•T'aÉu(è,»¡ßf 1%)ÉzÕóÊ<H$Doç³¶²á.=03ÊÈ 7”Ð3^7M Dæ°i¾—q1ª´\=Ïn¬­WÙô™ ¿ˆõ…&5!°ÖÇûr¿®öÅ’·U¶=$OëªożחKVëÒó-ß5Ÿ*á ÄwmÄ‘/"sx‰»´} %ò­Ö¸øt«Âc‰]n.`N€½òZI·ð“ke9}ÿ¿Hê[)Cò]×L¦&¸¬rHP®¿Çš¹U;¼ C. "¦HM™ñº)¿1?6–âè]–5œkÕì„V»,†i­ªµ½¬pR e•÷IùäšÔÙXWõ3\Ò3ÅJ§‘`E6Èõ¶=híÍÿdñ ܇k#æG ¼”ˆÌᥤþ¸ï;mÝýÏZÛ2b•nkàª]ÆîòY¦OöëºV2Šä{Rgm÷ë"¿ê&)©ŸÜëYeÞpß“y¤óœ >ª©á$ÜqÛ™dd -ãuÓ¤@d›æ{£RP½ ФY!)(újò¬åéßY–#6ÑZfZâë‘JVU_Ý x“”|×U{ÊTNûR´ëg<{=ÜF½3”7º×?ÄûNl2g ^ò€yj™ áΔÔ3^Rì|VÙj$]•Ä ôÇRðŽÃÞ Õ×ó*¢:^Fƒ"y_üã;¢©“FrP0|o‡-Ÿ{]²éºj>„ýV¸ó*©bó”S¤Àÿ!"sø?$ö¸ëŠÖ‰ñÀK„™È–ˆ¾ +èhºÞVu?È¢rè4€*`e¡½îx댶Чl2#ˆŸ’‘ìRç~‚£ª@' ‡8‰†”¯ÊXUð'jªð>VUØmÂþ)Ž™ýîQ”0!9á<¥m€_gIsU>?ºA½â¢ªMsJyÊk A…$e{:ðÌji»Á:—߯e©K˜AõõQCûÅÓš½ÑøO¤Àÿ"sø?"ôxìFH³™n÷FòpDZ- p±+¤òÝÖ´ädVìåŸ`ÙmîجD‚u¤´â0Q%”Uƒ¥Z¥kçs?X¹É ¸K„ÕÎÀ¥~§@l#1 5 h÷Š4/û‘Ÿâ´•Gå#5NxÓY y·˜ŠœQËÌ¥À¸Kª¤gÈѧúë…ódÊ߳ܫ=…ýPQ=ï/權} NdÀHV«}P :ˆw“R¿¸WL‘/1âòä%~cº{a\ÏÔ ˜Ñù`a ¯¤æ*£ÙCfä¤r"·¯ìÁk­ôóÚè°Ž”|ÅŸCB¨&èT<ÔÖf´Z§:˜ðà Péäúšb¯¯æ³0Œ’DÅs¢¯DCC=òp­-j4ÛlzÁ>ýQ‚åÁbο`²]{;ÞEL”Qèkø«Ùb3I’ T?oÛÏÊØ7¾Øaµ0µo‰g”/b|ÎÒwšù(W"tFŠA店ڲgO²­vüžÓ$…á: ×">­UÁ?5sQ ¦H—Š‘9¼T”ýº×¡ªS:”`y¼,+õîŽÖÖÊ!>b?jœËqE]-¼Z] xÑã ä•¥«RòݯÂ÷åq¾>h¥¯Ýs9q ’ÚíA}d$¡ÐŠ$klJÙÍ7×ÙCO¤misÞZWæ­§ºÖMcfïzÛ$Ju1 ö'¬L[ÓòÚ±ÈÇÐÐ(uUèC}¥Kœj§}m¹ðO“ìú;r0{Ùö%Ûq›>{åÎÛr–"ËŠj()ëhû›Mk}»ÕNƒåb²=§‚5•ª˜CT-‰´1½DˆÌá%"üxéô°ŽÇä´e˜:÷†3Ø6Œñ°Nˆ!z5ª$ž¡ 9¥X¬õ”ú¦uQךlÁúd¼Ú[,•SÁ ÜÃ%ú`>§ü~’]qC7Œ©Ï±^:&ñ2GçÞgMãDÑ¡ž5u0(«¡=˜’SàŠMCÀbœ0­šº¬}ûkTG"ÈeíªrÖ²’¨¬‹;íþG`tŒIŒoú´:Û}×Z{óëûí]{J0—·æÅ§Ú6SÏd°Hš»b.UC¶Ð r1E ¼Tù¯ï¥UìwlP@tcl u¿4èÓÕúoëZy«aŽp5’$Éໟ—FõRÄH,Ic]I»¨³UAÊèØeD gPíi;ëÓìkßž`]=Ø,>üÞ>«®Ñ¨b=ÿ+‰^T´:Ú,k\ê˜:Aò„Q1h˜™$þæH>û¾:›=Kí§í¢¿ÕÛŠ•0r)Ê«lí··ì–;;í׿ËÛû?“µŸ=Ùî¿w-o¸Ø»îC–GÊkð FS¤ÀKH~…1E l  à¡a~b„‹Rþ³*^ºèäà²*0ÝTª àZÌ£(õ¯˜Ë¨=âÐ`2ÞÄlÁi_ØùKªígGM¶ï_XwÙüE9»üЉVÄ>1g‡^{×›uVuh_§ÐÉëH«v7TÓÜÄz&¥ûúÉÁ°-°÷Ð\¤Ær÷XrfϪ±/}†#Aa LÓ®¹‘+m‡òâxÌ‘†dä.ªAúƒ¨±òvë}ÝvÀûÈ'.´³~÷<™PƒaÿPxÚt<ïaÄ7n| Dæ°ñiŒœ| L‰¾=·¨Ï~ö« l=>a¹øF?/0VÂH”ÂÈð—Bݤ ¶r×)R`cR 2‡IÝqÞvZ«r€Tê–\O»-o:¨Cñ£_€ÄÓghrH«eü¥†vLç´¡ }BYíЧ–ö–¶dí[?dÿ¸`O>Ù€T@L]1añж¼ýùê Øob}Áöÿ¼ö=¨-öÈÖÁ@RºVüuuꇧ¹ÕOœÕ€c1±Ÿ4ö"žG´ÿ¶××Ú+v’eFù¿\ƒ‹®÷K) 3K1Ù<µASRjÉ•YÉù…«ŸR}¶há2;𻿶÷íùe{êÉEeú„ ƒ¼Ä²|á4jW¯1E l< Dæ°ñh;î[NiÛ3kþ4ª’–ÔIEŒ¶­{&=p+ânªý²)kßCO¿¼ž4X©çY¯êÌØ1§O¶/höÀ£½^NÔô¿˜ƒ2-†$ÌþûMð¾ˆ!½÷íÝxi3j V÷8’0†‘M™ £IÅ8R6m*«gTO¶úg¿Æ´É;xÿ^ìÈ<‡SÜúïz[ØÀø¼žW…Ÿ0g&\…îþצ”¥µEQõÃö8˜Ì†úð“ÏÚûÞÿ ;ýÄ‹0¢“¯ŠTÀWî·rVÓ1E lL Dæ°1©;ÎÛvÕ (ÖÓö,ç®w•G’/ØÅDBJ&·>YC-Ú,j)ÖñáÄ8˜K0~fn½ís@Ï +€Éi8H}”+jô«–Ô¡?¿¦óôÚ£Ô¸ …ø·¿Þƒ 'ô^¼Õ‡<Ž&N(#/j£©“rÁ¾@ÛAš i$™Ï}¬Ê¦Lg·7cIá]uÁU‰„ 6èéÂmÊ€}ZÌ€}Ržù“¿:˜’th’Vd“md™×a@½Ýö‹£O·ã}3œ<ûEJÚ@¤£UÓòèŠ)R`#R ù™nÄ.bÓã•ET%³¦…Ç;J3$ý p û‚åb•åéÓVæ\Ÿ’2—ÔÑKf ¿Úvé¶ÃöOÛ6[×±âFã¨jEž‘ùæj ”À–ž´ƒÞÿ¼¿Ôˆo¸zh§móö½&ð\5jÔHr­$;ƒ О1­ ´UôvR¶ë˪í£nÇÅNÌî}h‚=óœ6ÍÁ(èÇÃvÈÍ•y±ä×hM*'ž1N°éIƒÐwž“b~P…¼ÉSjí#ïy—]õSíGG|Ÿû?ì Yá{Dä-Õ lÊÔ~L‘‡úmÇ)°Q(fGtGóUÖÛþ”ƒ½{ø8‚— z"! í<‘(Ø/ç;’µâ®@/ýÓdûоYû1. R»ïù–»è¤.ÛŸWó|‹%Vú¬ÂAbÚà øaÎþñí¸6,jÉd­?`ª˜"6*hõ'S¤ÀF @ß*{æáOY¡[;~ekȰڱ,Ý?= Å9ÇsžHASD³pq•óÛZ{jA+fà`=£ÖŽø^Þvx9op6Gc'Ÿ5Én¼«/%…»óÑJ OøN‹Øözó;ü{+]í“íÃËèöIvÔI° Äy!]ÿgöO 0 ƒ‘”óÁ/ÕZGG Þ¿g½}ïÀÜn‹Ì#móæÖØ×¿‡„¤½HEêç ¤D’$#;‚f"IA›e|\FãÙv›*{Ç›ÒöñvÙDÜfSaš·¨ÆÎ¹h+»û±eî•$2!0ØË¶ÛÊ®¾æ\›:}"^Á¨—²C)GÁ˜"^$ Dæð"26³&Ï=[Ã5¬ÂMVÖÒ¤H}$×Ô~î'©¦¼Ê$8U’«ë?®b'_Üg½=}Øt‰ÓðRU‹r«É¤í+Ÿ«²O¤K‹qßg°|E•wv­ÝwŸâ(ÉAI˜‡v]k‚:­G/õç3ò6O$±Pbþ×Ú#Oæ¬ýÎõɹ7’˜™ÆüɯÔÚr6°Í˜‘±‹ÎèfG¶ì aÐßýåd»ïa‚ 2hÔ§‘h0eçõè7˜žÅ`j°c˜½q·zûÌÇ;Mª-1;u¸`I•ýþ¼z»ïÑ.˜¨†/©Cj.ݼúU;ص7K’A˜"6"sØH„Í Ò~-ß謆,Þ4ÝmOÚ¢'÷wé @m9¿! IDATÖÊ]«è4ꮼXûºþ_ê™ á(JRÆ“§³àrlf;æ„IvËÝ¥zq€—ý€}© P—úˆ{$‘7í^cGÚmµõ î‡Û+Ìç‰'êì¤ó²6wn'­«3f_ÚÔj¥^c‡ìÛÉøbû†Æ*Û÷Û¨Ž`ÿ¸°ŸÚ­(¬)ûÜu¶hYÁ~òͬíýŽnÇ}…éhhHÙ—¿ÃxTÔƒ¤ q:ËûBz‘C“Ì"üÕ;VÙ‡÷ÌØÛöl·*æ“£”ØÆâ¦¬yÎD»óÁN¼UEQ’$}­¤SÛÌU^XŸøð{í”3Žð,/Ë?Ú÷ ±Ù‰—a>ò¨’dS¤À†R 2‡ ¥\¬-W9@œk(aÒ»?ûð­¿ûYVÙ¨†rb\°j܃úr\ Q!ãl7j”Z¹hêy\^Sèð/¬³ÃÏØ¢ÅÚ7ª‡ö<6SºfÀÆ:a%I6†LG{ fLOÛ᛽æ•}ÜË$!-ÙM·N¶?\’³¦fê¶Z‰Kµ3mz•]~ÞLÚ^èª&m\;åœévÝ­½öÏ z­ŸN¥"’ùüëßd“êÍNøe'•z 3®þ›évóݨºœùÁ<8Ÿ¤õ¬ ÛÎÉڻߵ|¸/(Z“AZÏ™ÓÒeUv6’±aµ˜öƒa” ¹¡ÓÄ,EKg æKŠ”I3âBýþ”ŸÛG>¶—0N˳UR]ѡۘ"^"sxAäß•ý´2¹l²Š/°J•î¿ï_öw[:ïX—tŽ"±Ju#ЮŸ__…éö•1 «UôU×O²S/쵞.˜‰VÍZx³bö“@vß@è 4%{虥:n©)Ûç#uöÅO¬dCàJ‹ÕyÆ·¸ð’Iö—ë ÖىߓVä ôwù }ä—°/¼s0±oÿ¬Þ~÷«vú¨aTEŒ#G9žóµ>›±eû+¤Ì) fª±Ï„r§—ú¬äá„TÂ8¦Nª²7¾¦Ö>ý¡ÛiúÖSJ®½²y¬hÉØYL°[P}ÉV≠a:b˜'0&I!ª§Êâ(JeF´ÙôÉvÇíÉÕÑUö‘îeœ¡¨ƒ‰)R`)™Ã.VcuŽ¢=+pF¯âÌ!Ëá5¹>{úáO[º¿°ƒ h¬ CBH¸?¸ò¢V«xÞÂ:Yrç/ªµŸœXm‹ÊŒÁÅÔGà £M‚U·ç‹o¨ ž…ýx qïÙ<™4Íìȃªíµ¯ëƈnà+Õ0 +ìÒÄ£íðÃÏ·»xÂÎ>ñ;¶Ý¶§±‰n•Û\ŠAM%&#–´#éDŒPãí%¯¿»dÿßëëÂ[j›{ÛÿËo£zÆÊ\å©T@]†7,§lULá"ß0%)È4qIF€>{3ÄȺ'R¥Èà#:pÕÞ ZÒ~ŒZ˜Á7^`Ûï¸ uƒm¦J½£B‹ÆjhÓ ¡@d/„zã¾.(%=¾À@ïëxÎ<ú%VøèÖ¸ €%`+²Š•Z'õû¦/EraÁ®¾v²&5R§ÀR+}QYÅóÍ÷ ¨gª}fÿz»òš.6ãa§+«˜ z­ ÙˆÙèÏÛ mºÍv=¤·:՘ŀteŽÉœ“€éŠqøÜy#íÇÞsÒ ÊúHBã¬ë|‘MyN@5S¤À†Q JF·qQ+Çž…ªRÚ@ïb¤¢òÇè‰">[eËî°¡Ë<ð9+䛂Ï?š“8 «tîq`Ýyýò¤;Ž7€ÕSXŠSN­…î¾é@)ôFÀD}«àªÿ©¯¶ƒÇ’ LDeøpçϧ2óªn–°ýàÛí·§þ”6*"WGIÅUîfNŽ[z…5Îÿ sÆHNÛÚè–B¿”ÇWI/u™Ô6êKÃV0¾<Gç\0Ñ®¾-‡Ñ[LŒÂHÂgþÀ¼®Æí’.XˆiðˆBº/S³è€géï£ fVpiÅ‹Ç"6˜úÆ)°V Ž4‚Ûpräå‰ïÈ[o×Bënú‹ƒšŸž˜ ÷Ã0B÷¨T0Çž2™Ëìv&–‘Ô!J<Õº7’zþ€k“?°K~²âHå6áÊ/‰À*2´!ïYO.¶wS6¡n’½fçíì“ÿó.ûòg?d3gnî})ö’ƒª¤\ª×fÍ9h°´ã ‡±©KIÉ¿Zh'µB‚ì<§ßÞúú ¶óεV7±©0ùN//ϸ$ ð¿{'ñ%£ Þ´øó¿X£ææùez$Œ!”¥ÿ¤]—,¸w ¶ÞA /¾:ô©qz¢ó˜"^¢ZéoÃZžK;0ß©Œ½cIQÓ‚÷A¿ðçYêÉȬ }sÿ“µ»ž`OÍe—ø‚>kY¡±£º¢’WçÎ'(ÇÜèϽ½¤R-˜˜ÏVØ®I*…i—i$‰ƒN¿ðXíì´Ãl»õŽK ãÐù×Ð"± •KÅK¤ÀzQ 2‡õ"×8, R/«]O…Xyí:Æø™n» 0<Ô¸¢L/+Øz45ÚEÌ~4#Vž}ïçí‘Ç[Iõe»@"ñÂïÉ"úw­œƒ‘– T6„çà ú§ ŒÎPhfÒÄŒm3»Ú^6;coxE¿½ý¿ÙÛ ð…IÌÜþg6mæ^ޝyú‘"J~ïGm#È=.à;ŒµJÏņb= |ÙOÄðÈG*ª%h@¹*Æ£!ÉÐ.¼ÖŒä²+¯,yA)ÆÒ²fwÝ[oý'cÏ.êµÆFΩÀ.à‰: ‡1$· 8ó£áfR9_5a.ÖÐÓ¨©ËÚã]k“8¡.Ð(º²ªÆ7”‘9l(åÆA=Ç €G>©€N¾þ ýs˜@ À·Äó†CyÊEúúR0†:{O¡€€Ä|Åë»Ò´²\pÎFj/ΉJ3ïš!y¹}@®š†6K¨ëŒ½rÇ”½éõÝ6gÀ^›TH‚wµ;aÊëmΫN‚Ye1.çä«Ü~BÛÔ³ε/Bš B©Qи•6ôuÜã;„q —PFLJ.éH#& ¾Â?üŸ"@ŸYSÑq¦ýE8$s”´ —WmXSZ¹Áj–>\gw>œµÿ<åš*â÷ÉNg?›ÙÛç±—ÿd£µ·ÓªMŸR 3¨³W¾šµŽ¾ÿ²å—_oM‹Ï·•=¶¤©)'o-ËZí•»î`_ö;Ú‘*I®¹Ò*…ØDjÐ7äÑ׳öµö·Òw«3"9Ã…WÂh8ót¤´Ýñ`Æn¸¹ÏU@° æ, — ŠrÜOŠp5´c埒mBA×-§W[5'Ìùf:æ!Æ&jí¾KÆöxÍ$›»°ŸCŽRÖÞÑEv`‚zîÉËjîjScR¿E›?¯h·¸ÞₜØ1ªÄ#Ö—‘9¬/ÅÆQy?ƒYà ¨iÅ߇q¶†¬ó~N¹=‹4+² hóZ ÀþÁO&Øãs{¸÷‘ô/JLŠ™àz ¬¡:ÚjËÛnV•½b‡"«é>{ö‚êt¯{)Šš+ªÂBÏ º¢©Ž³š3¶´µD,/ZgOÊ–5³OË[¨áËJ÷”ß”˜cЇ¹¼wï7ÛyãÌ ÈBˆ=–Q›¹ÐgFq•ªYã×δ/;ÀZžý’‚À©†2})¯0!‡ÒnÛÍœdg_®qã¢KL£t/üi­Z¥•½$(¾PB%Ã{K³OŽòç`¤ŒeµRþNÊ Cê'(+5Ú²&ö™0BgÔ«Uˆ7‘ëOÈÖŸf㦆V‚DA«VéÕbnå“ÖÚv#žH€ ¥«Võ9ôú¿8¯¤Çz(/™@õP‹D¹›\T°M­m7'm¯Ý5oÿý6NT“Táû%Š„±®²{%p—µ¤­¥Å¬ ¬oj*X/a!–/‡Ñf ¦ä«sí˜æ?–ÞôX‹¾:ŠS¾C ²`tì ß:ð öÿbýÚÓÇ~ j¸íAª$}WÊdèšìŠ¡1có½­Ørj¨›•ã¶Êk?…¦WÞŽ}>Óc›Ïª±ãÏJYO‡úôÎUš10J˜«Û(´çbÉÎᕽE¾“‚]aõ‡ah$b4ô ûóljie¼3…'É" ÉNS¤ÀR ¤7p㣚Vìèá‹D20Sqç?ü5ö6<ÎÊ9Ø ü(M ¸¿;k g1àÀ“§Ò6[×Ù¶³0ïT°·ÏYwo]zÆš[‹¶œUWwÁ–²zîK—/—7“VÈÒ± è¤+!‹Û s/«¦½€@Wo¡\–‹¾ªïö%I:Ägb}sÔ÷ícŸy7À 3ê0²ëÌ y1‰Ë‰ z =oŽ­{4ØÛ1Ïæ?úU,Ý6r]„ި殈A[ÒƒTmrŸ}ê?uöÓãÅȯ†À\Ä(uT¨Î³•úÌ…©džèz¤Jæ ùª#õRD¢Ó‰v‹–Üä9Âu¸h=ÚŽE#*)™C%5â÷Õ( Цܻ(mM—±údBMȨ¬¢xé—þ µ §­Mœ”²I²Æ94Ö(U+t­øuv³Óf€¨tò¸ÜŠÀVÖ®Wç+åóq®['O™ Ãð‡b"ò2"<÷’R¼e|/™~T'Kë-gnfgu”íñÿvñ2ZnKº$ñï[¶¿ÿýf;êøïHô±,†\Å(Ê() ë¬ mS€ÁÎfBkÌ;ÁWëÿ¸n’-^föÕ};¬žÒË8ëTãÇŠÖ”}çÈZ›ßÀä}X.w…¾ŸÔdbzE<˜Â¹:qB‘µý»C¨,0½ ‰>Œá–ÿ`;ì¶³eÑÉ¥äÚS¤ÀR@¿Ü˜"ÖJyhf9ÙMa&ÒÅ[²èVÉÚæıòÖ9 w>8‘³ rÖˉh--[ˆ‡ÒöÚ²Æ~6€±‹ wûE°Jáµu ¦BVä~ƒrI(ª•·’«Jü®J~ž’Gª|ˆnÔå¢U;ŒÊí®® jñ!m’Øååsìškδ7¾qgõv² š¼ôóGþðtÛgŸïÚí±ÃBr â^!OÀ:ÆTÊôdOåÃÞm…íž2óSV?ywKs2ÜÞïé°kîèµ/þoýƒ“못ö6ô§L&ÎÒ‰=• ¡íÃgÌôX³p¦Vö^Ò“‘ƒOd„2âŒjÃϸðÆìñÇϧ[Þ¢Æ)ð(üõ½€&bÕ±JŒNæÁg_ ¡qÑÙÄHêÆNZàÙÔ’µ£~Ç©fÚÜຫ§K+xQšû‚Ð^¿2 ¤º#4€é_=WIúðrY¹ªŠ(!¢ø¹Ñ^:ü\µ’v&ÁÊÞ÷¨ 8™b©=éÝ÷zëvà gÚÌY“]ý#ë¶@sé¢%ö¾½°ÓϽÔfΘfùô{¥ì"v¶În½ñ ïV »H5´÷ôC‹ÿ~Ûb»oÒÇè@—÷¾­ÛHÎŽ9­×¾~èD{z>Çu2tŸÿ}d§}tïZÆ.éF4áIÝ%¦È8ôUÉç¾®ù/ÕFJ‰ä!ÉÌuUn^t¿åÛ©Z|)ð¼(þÚžWÑXh¼Q@ºt¹ççºæY[ã_>PX@ŒXa1Žøu5§œuÂ>ÀO–¾ ñ¸R&|c«à^+~1ÿÅ‘è Ù•»Î…@2H ìê[ê'W9É…Hå½0ë*†s§é[àK»:’Tÿe°ì»ïÇí¿œ`Õ´¡.ŒË…g^aïÞ{_{ìɹ4P°w¼ó­€=›Õ¤6£TWW}ï{G!ñ`!«_N?ã»ó–ǬvÒ«mò_ÆS²}?ÓÅpæ>×cßøAƒükïÖ™ ïaFß޿˾ÿõjËÔkVLiÆ#ÏÊm)L¼<'ú)§„Y$×$_×$/¹Ü(O»"dx –£ßÆE¿eðz1E l8"sØpÚùšiVí d×üÜñ(Š0¦, Nù´ûÇi^DáßûÞvûÍᨛ¦„?5g>W¹ÝŸ’¹U–ð<¦œ<ós!DCD\{™^nÕÓ¸µþ©²jü)°ÞˆÌa½I6v*H½!P—áX`¬BTkլﲎÆË­·óQË)ðœrÁoæèË›;#¡\ò®Dò<å€ç‹ %£®G ž ÇôË ØÎEú( VZ Øԧؑþn›,çÉW[.X¨ ß§NŸhçŸóûÊ~ï§j’eô¾õ–»‘ö±ëo¼‹|&æ+Ùë_µ“Íyù6ÔÖ"Ù²åvÙß®gÓöÐ]ÓGù2]m‡ígYÃ’F;üÐ㑚jlóív!è+Ÿî°z ð´5R‡° ï‚+»ìóœ1}ÛmܶòêWôÙ)¿.°ÆÇ"±J,Q ’¤*þ—]Ä%-®‰šH•ôž\bmÊ …b¢’ÙD/Þ;Ás¨½V6œc¹Î…äÃÔ5o^*òžóó­+ÚáaL‘kP 2‡5H2~2DòFª®<|%Ï5鑲ý S\i g±ãu¾úÕ”]Ñ^ÍigÚü" ËM„Õ±ER5IJà½ÿA<Õ¯ébûYÛØßþ~²½}Ï7ö5d0˜ÿä°“lŸ}`K–´‚‘H40†¢×OÛg?÷aUÆ7lÌöýžh.UíÉg0ÿ>æ XÃwØååð·Œ]ú×ëíÑ{ŸðГ·ú˜Mbö¶=0gÒÑUc€dYsÞŽümŸòÃI¶¬¡ÆfoÙg§Ûe¯ÞU›äôšŽTgš„ß@ã<Ò™v–õùx{š3Ï+S9ß%+¾—üLÓ™#‘vŠl"lXp¼K4²¨”`v:ûAãK³—ãEy•cŠßÇ"ss¯tý&TBçÂÉ  ðØÑÎg*ZͶ.8XDí€I8ØF«û#¯å°;€ ö5°²ÌZí›À>Q‡¬ö |3ý^A€±H}#°Lc(.aŸÐ _˜ú–7¼ÊþuûmÇw @bæ=·ÄÞóÎýììóÿlýxQ¥´Ï€¶Ô„ì&36ŸjŸýü¼M¶<Ø#÷þÇnºùnoOý.@JйŸR•¸¾ò5»x`Øžî^;ôûG3ŒœMßòsŒeŠ}ã˽¨³äyv>« †-Ð#{â©~ûÒ¡%ûÕI“ÙŶ“~Þg{¿}¢´d/ý ×%=H9æLZßÃüøât[~šˆ'•ðÃfd£anõ¤æã!v›žö»mUóåÜ„1)blF"& » MÄ#†¡€~F1[ vZ‰èQ  uHgêA#TOÚŠeÿ°Z¾+|EÆðç+'Ù#OiÃ+e¿”0¨ dôe(ã÷R—èÛõë´©U²@UöO}t7»ôÊ3¬®.TWœ}¹½ÿÝûÙ#O>#sA— 6XГ‘¶w½}—ŒŠpy𳟟„j o&őٻ»»íöðZÒÉrØIêkóìßÀÈÀ³'žZd'{¡ÕÔÏÆ{é;Ø öÖ7ÖÒ0J²©0.ÑS¶glê—~n¼µ×>`†ò ö£ƒVÙ~Ÿ®Á®A€@UrÆ ‚ñј%ŠH*1»z’ºNs=õukÙq^¥¿j îUd´,:Çò½M0ˆ[ §Gh¸zCñ.R` Dæ°IÆO†¯Œ GQ´ÝiÔKÒ²—ŠýÖ¸à$V±9S0Œj>Ë–U?¨à€¡¶ˆq8­ÄÖ¦ƒm26º ª%©[€ T¿³ß–vÒi¿÷}:¡º}e·íûÙÃ퇇omÝ]”t¤Ò2>.03ð’ãM3vÀAŸ÷Õu–ûëMvÏ}:Žûñš*un¿ù>W¹iÇu*UkS'Or W[ò^jlh²úÍßIþÛíËŸêåÜfÆ M<( _ü¸Pî €±Vôò¼ên/Ø.é¶}®·í·ËØg­¶)Mª$h)æ„ufÕj”£½ÕQ9ñ, EÒ€Æ6qŒ}€§ $ßfÍ ð^’ˆ%áêå ˆ«µo"Ö @dkdüd8i…šaUTAþü IDAT)ví-w0 ¡¥æ"—Ò„qf¦3^¹Ë¶ã.ÛQ·ŸçÕvÜqgÖñ¹0Yê?úÄӸŢö¡om…Û|³i|ˆç¬—×ø™Ÿ(·ùöûsÐÙíV'Œ‡éHÅÄäʼn¨›.Õp¸åmå[ÜÐg?8¶Ý®º.c?<8e3¦3´Bo{YÍUØZ“Æ30/¾ë½©?1zØ|sÅT‚£‘äêªSæ:‰ Õ³üßê„Ýè0ÿ®û˜"†¡@dÃfkZr*@‡qdÌââyíÍì¡'YT«OáP¹l™$ "öPÈÿ]ç?ªëõ+ÚJÚ“!:’¥Ü5…Q·Ö~ÿË‚½{¯×[õÌ7£ò)ÙÏ|ªíóåZC3‘ú”\wÄø„Ôè屢×Á;3 éèSŸü ª³iûýɗسØ'´²CÄ@EÚ0{fá"ÐUÁù FúXŸ5“—Ô]÷=f9ïj¢·nk³_~°}ùsøÖ@O7ŽÐ”«n$ópwÚÁD}•¯!e Y{àñ.ûÅ 9{Ý+êlÎÖÚº¨Ëóˆ!Hm·F*“]ù Íœ/èL úÐû™>]>hRI…ÚÚiN>[¾ðDC+õPCñsÉit¡Xü7R` ¬å¸F™˜1F) w0ò<€†`¥¹éËw7èßWqpÏ9l\?¯Õ/ȨչRXé6u}OÒj £œ™ä%WáÚжü™¯†cµd¯}U­}\·ÍÞ.mÓç|Éší½ïÚÏÎøÃŸ¬Ãx$%¨19F†)ŠÀºDà@èfÓêí+ÿû1<”xvuŸ}ÆŸà%’2ÊS¢?·“רÜLHð6ë‡.UHV[ÎÚŠRLzÈà«©ÿúôùíÝV7óC¶ën»Úëv¬–ø(1j;†®Î³D;> ·£ôÃ;®¿£ËVupÄªŽø$‰ºzž¤ÕèDæ5^Êi×¹òªjK¨©`ùÀy=s/òL§×uõ4YËÂsL°r`¨F5S¤ÀHˆÌa$êŒùgŽ(‡´öSÕºÙò¦KHµÐÅeÞN;}’Ÿ› xHÒ›§K©L•ÍpUÐJyÉgÈ*ž'y~õ¥¸Ô)tÆGx'¿›PE ê•÷½³ÎNøe§Õh›où »øOsmï½¾bbtv– Uõ¤Q¿l •/ (Í^o³—(aHøÍOO±¥+V¢¡–Kbz’8¨/fxõ•·ðœÕ?ȾÕÖ3B 6³mmvð·~ Ã@²˜sí÷¤+-þ¡SP-QB&¼T*#× Îš¯QL¤s ¸ŸÂ}{ÿhå”Ðkp‚É]}’>¦)Ø/ä–ë§õÉøÌ§ŠùäUÌ|EÓÖ»â>Þ¡(ÌûŦÞŸ˜ õ<—ïylOƒÝû³øÏø£@dãïWÌ8ðj„il› *”>¸Z3vãÝœŸ ¶ðƒl_‘˜Z> ´€«¢Õ$mÏ*Šy›~0O‚äê0ÃÒà})¶ÓþŸš`G|³]HO¶ïþh‰ýðŒÎìI®ý|Æ«¸‚ÝÉÿÿ? –æmÅâvñå׬6”¡7jãþf$°˜Ã;mǘ‚”!&¦çbLÿ¼é»íºûð^ÚÕþûŸµÝvžÀcX’èE9±'gXiút±˜ÕÎÀxCɵÿ[nfµ‡Róé…ˆ™Ñßä©xWÁŒÔ®Æœ‡+i[ߊжtñIxOÉ}¹¼0€%Hà²S ]$gr¯Ö_¼WˆÌa\½îÕ'›4%1°ÂúÚ+nÁu6‘ PqòéõÖú¥T’Þ\?ŠÕ¯@¤}ö3{”®Ïžzb±]}ÃmÂе¦Ê9,lXfB­¦QCÍš½…ÕÖ |Ra²_ÕvÚæ/n¶ŸýäLìÁYûèâØÓZ±/>0ÅðP€—½ˆœiq?,Ó 5þižz&µ—Œï[΀eù_´˜·˜ã$F”ì(òBC)èÿ-_ôG3ìJÚ—Õ;1ðÜ’T¥Púh†1g øOi<`<Ï=K·Ü¾äbëì#`e©/gœ{I9´¶Vèn!8 ëj! #I•à5ð†Þ'utõbbÀ(.4*»ëεö‡£ûl‡rÖÖZe_?l‚ýñ¯€4ò<½CÀ8IekkùΘ3,›§Oj_ÚÿS J`¾ÃO`5-`^½üÚÆÙÞÕm÷ÜýH±Á±¢S&M Ì#³ðTÒ³ ö¢¿üÝž¸ûq«ùÛS)žÉ»K@]Z7Yê›:•t#ÇÓÚÆ‘<[ã*£qH4àÿm·N&Å É5N<ÐqI‰î^ˉqù<¡5æþ†="œ_¡øQņ7­J‹´ŸE ÈvZ ;"¹R}×¼µ ×~9–Vô@ßúÿ&ÙÉGwÛ$v_wýûÌ·RöÌ<:§Ÿi¨ ×Û4+ðuÅÈ ðäŽûŽ·íAý¼ÝpÍÝv×ѯž•›ä¢´¶q àÿuÓ=%…‹n> o$*“¶™ÎUú滇EKýöé/|˶݆ðZÑóvK"rF¿ž†‘Ü—¯kGRDsJ>ž'æäÜæëñ®;É– !–Õu|—í¡ 1J‚Ò;FZS˜óÞÔˆÿ@²É°“ZŒ#åè k‡–1o Dæ0¾ß¿-_ü[ôð]ÆV-l‚ˆ¢]ðg…T ¸þ È$AŠ %ÏF\H«•2„IÏך<[+k“ £Î~}X»•ºRöÎE8æô>"œÂ™J½Hê“þ5€Oz|\e:gl¨b|Àÿ~ ÀLÛ¯~y&#'9ØSŸ1 ;¾rã<Âf8I ë”)ì’–ª*9sQš¯ŒèÄVzrnƒûË ,Uµ…}íËïC…‹­˜‚6ÁÁe½ÅuMÀw¤þ‡>Óœ’O}¢X–˜;îì(š^ #³Q ÈøÝsUïŒp)n/¡ÌÒŧqÆi3å‚×’¤†¤ä+¿à$+^ÇVÿ wÓßîiØV6ÿËj‹<`"7ÈŸªµGþ£0¨•5-~ðp¬0ƒÀP¶AèQ°( èT&=Wºp[.ÂÙË­;ôëµvÀ;ìþ'ªlŸïVÛ¿îè̉!Ãc²v ËŽ ÛùSPé”›áR9õåòwÅËèU»¿ÂÎ:ã¯öŸ¹ Ê^DŸ¯äC=Ÿß`SßJöܼ…´Åj›ÿfn¾ý°²VšH³ ÷fôÝ@ÉN?çR¢¡6ØW8ĶÜr*µ`²HZ“'ÉϺHnÖv-Óh(íhHdŽÎèß´éUVƒ#Ab*H£ÌÃÁS0çPèì·„üOA9‰ÃÒ½¶xщHUlÕãÐ#1rÌ¢BL㙑9Œá·¯ÍNú¯}Õ¢¡ý(ÇÍ!>%€ÂÁ”ƒ?û§–•¹ ‚ä ’Ì–À´€ËqpƒeóÂ7õMÀKÿ¹fC Ò²41}zÚNùEÖö~o§yÁd;ìÈ"1œÂqžŒ,e]j½+ó´f£6ôáþÙô]eèIj*ÀM÷O|úÝÖÓ“·ßŸz!µõŸê­|;¾õŒ40:^ÚÔÊÞÖƒazëÙÓš´c ÐLý:Hû`( ]º±S|û`ÔK|ß÷ ¤1BeÃØD±•0uÑ2üé% ô\î[S)ÓHùI™äšäù½¿’Íڜ㘘–x±ªúØè"iF×>ÅÝ™¿×…™t.¿Ùz[ÿ ã@ æb"Ò¢³ŽdDñ:^)™Ã~ó€I+n²©è£%ôYvûêÌä•Kÿn]½Ïúì{q[”×ʼÿÔ`k „ƒ§À® L\GJ• µZ9<`´Ò–šCI÷îà 0n·]µybÎê&÷ÙAßh^Ùmù~uˆ”Èi¯€cnEƒêgµ¾hÛ÷¼Á@.F{¸ÒÓ´ÉSì û~ÒŽûÍ8á­ÉUd‡·¡ØGå´Z›ä Ü{»E»úª[­gžm¶™ã*$1!½Æ*u•f%0×NMõ¾±sÎþ»tð¶ÅLö=¨¬6h%¯¹©þ0)é;¹V«dtV&O˜Çv³%ˆY…²1 |yÊ©2OçakA°tþ±4ÖË\ÄÌ™¨ ÒòXŠi\S`ø_é¸&Ë™<Þ(ÄýD÷€D8&UC&Ï!>‹Îq¼Ò“ až%-\|y 0Ǫ˜3„°+j-¨²8A¢¡÷C©&€3(ú:péæ ¶Çîµvú1=öÀ]uöUÔHOÎí Úq©±dgeZ[ÿ4êŒ@Æì0°ØƒVΜõð_»[gg—]xÑ_‡Ví9ÃÙÔ•­ó½@õd ?Ú{àÞ'ÉÈÛN»lë탢^9ô˜‚檨®rW-ÂÝŽ;þ,koï´Ï}š£Ha"”G´e`*+æõ|S2–¡ #HúNÙë^‰}ƒ&y•ÉðÖÙ¼2, }ÍÖ<ï4ÿmhT)1² 5Ø:ŠÆ$"s“¯µ<)Ž´”v¨ —##bð`znYt^ËÉ^¤‚¡ÐŠî”ÝóX`![ƒò†¬Ò×B§°V–Á5àP¼à|¦$Q  œŸxÏ;â»ö›'ÙÑg¼ÆA’~Q˜à9t–úèOÔŸVä47®ZÅ{ÿdgèóàC>g?þÁ‰¶ª«‹²BgU$éW¯1U&5S‘¼?/W²§ç>SØ.¶§ 5Æ,¶’®HH”—áY"Rkk‡ø#íàï|/'"ºRÄeŒA’*WÝЋƫ}ê0¦7¾+÷™6ú ™Ý0½h/Dø·ªå2Ëu<åÒ] &Óx¦@üŒá·ïx‡I*#Á=js+²C¶­éo€€” b¬©Ê+®šdÝœš&6â £ÅcEªç„$W/ï… I¾VëBÌ4ÒBMm}û«5¶×[ûØ»Po7ÝÅÔJ®3×Àí–¾&öPµ•´§RIý‰10'År‰A·,Ÿ…Ï»¼lŽÕOœd×^{›Ïq\¢Ó0im}üUeÁ¢%^kÊ”)œ´¦ ~N¹rK aLâQ ³¢×›ÿ}·]ÿÏ[ì£yWyž4“,bôõ½ ÃŒehv%íWÆD™ó[ Öõ8)¥ÂªÂ5Idu>F…²ÀäU+óĤrL¥€ô WئçNäÀ'ÔŠ0[Å4Î)0ü_Ë8'ÌX™¾¯!µYA2À’¦…' ¶)¯|A ßÔÜp›vÅ&à†:HUFJ^¶\¨¢l%I©$™<)kÇý8kËV¤í[?ϳ¯BúíjúÐ8ÿŠ_¡›Ÿ%ˆ9©Vájshr0÷r’”ÑÅ`0´÷‰ïe‡v[Ù'Až7–LÊ‹‡:CÛ­¼—w”ºèÀÈ|ç±—¡È†ºÉ€myöÁ=},êYó^ßT9wU÷ñ–›yý®ÈÅô¾Å£B¾Ð‹O½Ü¡†¨¤<}e7ƒx$/0©½š—œk¥¾¥mÐõ6ÔˆÿŽ7 „_øx›õ8™¯ŸÓÀ‘Ÿ ½/tØò†SÃÌmv“ë£ úŸ7ÊÎ &޶˜:È ôHe 7áßµiåóäûk^YoŸü@Ê~ðËóØ» •}H¡¥ý imÔ¡RŽÀ7càÁê`fCûzï L W¶Hß/ãû[ßô&ûù‘'07úÓ*Ÿ65?¡aɽ”øÙ—A2ëЫ÷… ÈÏ®¦‰‡‚ÑPgÆ vI—5$Úb^*ïFfžyŸå2%ˆ|åU7Ûÿ¼çÍ6¡nb(/¶¬1 I zMŠ%ù~Oß>D¯w¼³ÇU‡Rvi,¢mÆ¥˜¤æÚ¯ª¯³Dw -¥ú¬áé£×0ɬ½…˜;–)™Ãh~»Ž/e—CI"zª²§_zGÂU`Që‚Ó,׿ŒU%y²ö:° çJl|ãePÞÏ>¦mxóðjðоo܇ò¼‹PMKP°>`°@ç=o­·ÍÀÑãÏêµvv:»êÇÃp¨XØoÀMÀD[òŽ¡~ÚWùŸ:(§¤mÝVd‡ñÐR†ÚÐF³4e·Ÿ³µ=ýÜbš(÷[þ•‹?•ÚOW^e£ƒ÷_2¡gbw`Ü3glI–'R z]ª‹18Cñ¦=ƒ"j—0v¹>;üÈ3íï~KhÏm¡ŸÊ¾½¾Z=IæúNÛšƒ‹€0!Gqž3Œ-·ª±É$9`ÄWàw 0Tnxá’$1†OÛ!gð5Ò04Ó8'¿•U½Yÿ‚ˬK…üÄ8Í—¹êÛ÷ɨ ýÞbÓ(ÿÙŒé9ŽÙÉ•8²¤½ š¡60᤿}­ÍåKŸ/Ÿ4Ÿë|ÆÚZ®ÂبU9 Bøö4xÈíwN°•«øÃw “AXÊ&­‚&¾*Gíã æÀ" ¾è—C;2þz‚é¨N–mÖŸ|÷{äé~û×=ŒMJ­ªµ¢æÔ9UJ“§ú÷GPžAùRn••/êÓÇ"P¤˜O–1¨ =â™ôþÂE=Ú~»Ùvŵ7§;©«¨À”¤²Þß5ž$%`<ôÞÆš+iê¡æe+mÛmgQ3ä©ÞкI~¥®KvÁB«««·ÚšZ§†y]õ]¡-ã<¿BÿÌÈvÞV”â¹Þ•lKòeUòö¹0M}ôšÄ[”Ô¤’/zP@]ÉÞ«z:—¶yË϶Bkè˜@¹èʪÈBCgŠ»ƒ²~o1i DÅâ(~½ú Úà´/¢æI,C¤6¼)œtäB…Å œœcu©Å?H!WQ•ËWm›m{í‡Ö®Á}´+_kÏ=§q5Å%¢RœTf¶²U>m˾ÈÈÔ°vN/ëè «ÿjåoÊÚ-÷ôÙŠ•BrÚ`ŒÚçà!$0ElÒx‡Q1ÀÈžv‹D F{žé’Åñ½ü(€¦ ²bpýV__es _áÀNû q!à“Ú$í4ÒþfÉqjxؤ°^ºPÝtý¶íË·"O ’a l¹V&Ñw€aHµ¤ùÓ£l¾ºòû¯ÝÍn¹ëÊ*Ã~ŒÇ$F©÷*F("À(5ö£¼éÕz'dé–«Tˆ.@¬¥UUI’h)7VjsÕi›ùè^aTú{WZóü“m«WüŒ¶«Xhô³FŒEï’òˆjºiìR 2‡Qün3a•Y±§õ*=G,­«ù£7ëj»Æº;6m|•‘AÇFæs@\Eª£m·1Ûn6ö€C Oþ·ô0€)kŲz]¹J]TV|Gþô²Tqf€´ª£Uæþ_äe$ÁH͓צ*p?K¹{ï©·®>€`Is~u±PkS6û˜=øø*Ê+Š*Rí(õôôÙ¢E‹È-s‚²½  ï¡ÖÖ•AÆñ¡)åúmá¢&zUyv‚¦.=qŠš³C¢$<Èm¼¿¡ÿ¸Ë*“Õ|uô]w É¡eñéH š/ÿæa x4¥Ò‘1 ¥éX»Ìa¿QÙ䀪/á]wT@ ¯«ÁÚš/¤&Á’?ýÑóÆ‹H‚÷jÔZå«ùs±¬T²+,ì÷ZANVK£šRsu¬ 3 S¯ºçmøí9@ ª®“«GX™¬ò±ÚrËÏZíä]è‡g´ã›·x&ãªRFÞM¨1ŠîsÏÀB  ÇH ‚Aæ“óºCµ4’Zê˜Î,ªì¤ϱ#ã,êj}ìÜl@áê ÿ/LKª:è¨s§ï¹ýq›>—TEÜ4ƒÓcá]Ј‘ƒJU¦úÉÇò?óª;Ÿ)% Ì3ƒJîè¢>YØŽ ÐÏùï“· ͘+ÏÄã“Oy¸½ˆI'IŽJ*›AêóÑ»—£B[ãeÖ·R‡$1^•ìM1} ðK‹i´R@@)À Þ$`†£R±’ž×ð{xÂ/£dH2€ko¡«>Iy²A¤iGSA5Š™ÚÛ–ŠJ^-G}´º”1RIv…"*ª:Ú9ô"m„ŠCÔ]²|HÁ“ÃXŒ¯‹U0z^S3ͦnùy "ë¾h³<I¨*2H ¸Â+$ ?™L;výž¾ H…E{´-V§)Ôb­†å•%ã6’È™'üÉŽ9îBÔ`‡Gj"¯iD7C’æ1˜øžÜ ›™ûm7Ýi›M#t7ùÃ1ÕOÚ‘ñ?‘CyÏ Ä y–|ûü6Ø>ÇcÌï%¹AïÍ·¨µí¶Öûe¼¹$ï#]Ëe›r†ê¯TÅùhZ’ðJ¼h- 4®dÌ*œa!¡w"ÓŒXÁR1^ j;½7"U´¿Ž= ð«‹iÔR@ÆNþx…ÛZÒiå\Ptµßký+nဧö+è{?À"þ!¦ pÅB>ñ¾ŠïZá£öwÀ‘æEk^©™ôQ=í^–‘WßuX Pr‚Ú×½˜ŠðY}j*5—ò¥ÒwÅòÑýfÛÛ²u›ÑY¦êIÒƒÏCÏé` é'* D…ºþ…<° Ê b!õ}Úãû¥Í©'^jG2ºu5Ãü€CfÇ7æ>4ilž¸P’®C¡ <íáGŸ³3§‡M¢‰ÚqÀÕ¤D+J{UôQqIïÀ«‹™häLBãá…ïþ ¤FžI Ó½óDúô:©Óü„;ÔWR!ùòfqÍ5ÿ¶ÃtC褈…#Ø?²4 ¶ªT€z2¢àæ™»Õ²:ÖUe—6-³ÍgÌHŠúUåê¬öä…ޘê$&1zè7urÆÞð:íj9ijÉô’«jTæÔ‚öÑÈ¡@f(9"Ôúmɼ£ƒ* JŠ€mzEïu”†|À#5ŸmâˆÌaA#OöŒÂ,Ÿùãesÿ*Ž´<ßUié…Ö‘´0.ôl¸:CóµBu‰ÁWŸ¬î™›Äj&í.ÓÇ ObR•Iå"½ ׇzÖ¾õ­£­«†Àc……ÈòŸ€NIjÓÃÙ TÑ ‡K<óPºúxÙ³YÛÚtƺÓÚORk¨´‘ä¯~•*¾5æò0eÊã®Õ®>\½ìšwI]“ïI©¡÷I~åUõ¢èŠŠ)­Å ºÚïãÁ+Ün’°ïȑ֞ -TÄx¡•N ŒitS 2‡ÑüþÜhˆž¿¼û¹uÁ)üUvdh„%ú—Aa]W_å')¯<}O®•ß•·®”’§ÐÆéÆZ¯[ªz²M›õygIØðuµ1ÒsØS¨’´¿Ac{ò‰¹ö¥/~‡ÝÜ^Mv•>žàråU† Wÿ+U‚øê M9•÷ÄwÐR.©KQ­”Õdå‡tl{°újýCd•Ñ'µ)‡íåC{c,Næ4XuÄoÉ;±Ð‡¸À\µ¿;,4Ô†$‰–E§¡Æ[€]ÈCÊk n"á‘؈üaügTR 2‡QùÚ µª­ÒªŽÍh½+µ¶å7àA¤U9ßHÓ+/¦×Zd¤gk­°¶L­YyæÊ®ª›Ïù_³Ú-è²Zõ¿Ð„ž[aC@{[¾|¹}ñs‡ÙŠÖv€IyR‘ô ÈÝPŠ–3Wg *ª”€1ÕÕD`.F‰1hŸ²çÂ7©¾ÎËôÊ—†{6п*&õÊÎ(Š6czÖ^ùšî²jg¸ÖC¾À¼29¸—ó†>«,—|—JPŒ]{, „Ðm:‹ý¡P\eKæ댶ÄoMI9p›•ë[L£ž‘9ŒâW˜Ê Öû²8úwîʘ庠Ã|äúÿ'€ýð¨fêN6iæû|“2œwübŒM¶ÔŠ€ôÙË–4µŠO„,yn€V?t–€±`Ë%…Š¼ä™Š¤2¾IÒN—É6>Ìa !g‡¤ÕVýCž­ï­‘É$&‡ÌTá¿ß´[ ãÏ[·ÚÆÇ\&ôpßG}bk}J átÐŽì¬u­¼Õº—ßïT®„ýCc*{”‰˵8¦ÑMÈFñû€äY¹­XúWÎb~ðȇ¤šU\Ýžçü´8öòó,ÿ|ŠÉH©!¥PÔo1û€»&Øäãê®Ï§•‘ÊÈk&e_ùü÷í±ÿ, ê[:rÙ®o¸…“BŠ-¾ðÜÌ.V¬Ùvår>Åuïê$oC \âd8ÎO(ÿåT–_mÕ¯aŒðôl¤çΰ|ê˜ÎX± ‰?ø~ãÉ@¶€u$u_ù©,>ÂЊéÝ)¼ûÁ˜4&¹¸j른ÖÒ†£°1°Ïê5¤ÁÄØÒÉŽÄÁÜøm”Q`Ý¿°Q6¡±5Ü€`2:˜H LRX í SÊæˆžÙp®US4ø¼Ëÿ¯‘2øÉ3µ# pÞÂ÷Ê|=K˜†òµÕU¬|]•t­‚ h£›0M÷Z;ªìŒYŸ°ºi¯áŽ|@[ -,ñ=k„dhγ ELi/¯äëþ˜_k×±1-€5 Ê8ŒKÎr?€pP éYQõC!o8<}8(óUy^F«fIg2I6ݬlïñ2Iy¸ÿ¨Þк•ãMé%jÕÎõÙìY){ùËØUÂØ¤âYWÒ»ªü¨¼î“kå³$?< ÿêÝ)N“6;J-~#áˬÐÓdÍsO.³yžû;¡N£`AóâËŸÚ«/VÙ4ª“oè’=®~&Y¥É`ؾÉm±M ÉlçøÊíßø‡¥ëÇ%ˆ Nƒ6ÒA@PSÓIw OÓÂðQ+±‚A™½]M§ïæ—™~ð9,v¥0:UWroèrÅgýçãúΚ9èÎ)¢ŠÌºè'•4젪램½z/o/eØ,'+™ù÷Š·}l`ÎЀ)Úí—ð%¶Jp°—›1a–ûw½V#Iq'ýÖ”žËØ|ÝFÅ0eéˆÐ™Üb«Nú¦r-bFÃb ðeâ8µ<ºZ‹Ðÿ…OjôoEWÝïzƒ‰áaí‚ú×$P'Ò­¦Wüê…§8ܦ1«eªxÔHÜϤñÂAù3㌆\dÊ“Úc©>±=!p’ꉺIÿ»ÇÑ-ÞËÔ-Þµ˜2|÷cFô¨‰^Éãåƒé÷,s÷ÄÛG$ß1ýó°ÍjЉ“zip÷ÂÈÜP #µa[‹Ösv·½}`ÎÐ`é/ŽŠ§¬„¼d&Ù Î;ŽíýÇpòèçt—×t‹$%8P¯ i¤Ù”ÛoÙ´„‹ü3€9”Ù¥"éAÊ·!غlnßæ¸i©¶>èwâ¤B·¤2ªäù þÛzà« r/2'!•›3 ²úõ_{qصç "Ù…“<šYpMGLcñtÉÀ™r/æm0äIÆÊØx®ˆ§#>Í[(eT¾'‚î?9“)j¢ºÎóî…·ÈÌ«ü© À]i´+Žo¤ÛÃþ{Þ¢û—vâ±dÅÙ[%®À×ápÆ}’¹55jd—ƒW¨bìýÍßQŸ¼÷ Ú1£š”ÏŒÑ Iôÿ qà-]ÆØ)¤ÄOØr˜–!çÏŒÒ$vÁ?F7³­BHÂÕl$)a§«4â „ÈDªÊДވæ(.Lòݰú™ý²$ê)å—31ظTk¹„(Až2ÕÔ]j³ ešGucþŽÇloWÙ>WÆUtd°E¼¹_mÆCAzÀ…á§žªmÀÔPÂbV«ÁÜ•~Ï2w!·{½ß¸]Ì£VU¿S¬Kð«#îÙþʘ‡¾{ææìnÁ<ƒ¿ŸÖweÄe·¹.UR€ç0÷ïzKhMŒ#eÛùîw±\ã Œ65ʵ´+[9ÔI¼­ u­¢‰;Rżêk†‹~Y ƒ›XU(Ô ÚaÅÃ5J! lÔ»€š%4Ú{%a'î¸ýëá¯ßt£˜®PhýÁ®Ì`*’1Yã–\ã`ü|Ž©÷Τ<Ö´Éð+ÓœÙkfÄîRãÙº- Ç•Â[X“Æy>\ñA?å'~8lºèWÂðªöÈïì 1K¤züRœUn«gP!žy,[X[R¯Ó“´_ÐÛ7 aÞ¥} 8Þ3·ÂáÌý6*Y$0{0F*ž$˜ØŽx¯1a-B‹åÞ9ÔÖê¢tv2Á8ÒÑ^ÊHà ,ƒä·®ú!7„iû•çå?'Ô7Ø¡{ߨõ§J<UßçL‡3ø ÙÔ5ÉYÑÈ[¶…Ýw½*Ôf´À ñJ­„n׃˜(† {ÐÅÚÌŸ´dwSt»æ€6ì¿1 òѯn:qÙÌÄF×^Ö]ö_3píZQÙí]ê,$nwTB›ÙÄíŽ<ó‰A‚›9ˆ1{Á `ð¿ðy/wm¿ÇàØ¹¥Á©"§Jcb‚¡Q49PŒ(cðÄ8£f~À?[Nf ±ŒY¾~‡Ï¼¹•ã/ä›P_„8£o¾‡}C•ÆÊÌ@ßþ»÷Èpñ¶‹,Éæm?Ö^ðÄØžÀËP}FîÜXÁ¡¬h“j75Ã~†°äãð(òä‡A@¨a¢a¦8y<ѻӴ¿ëO“—ï”ÀΫd°ñgéÖÙ%tF–ó¼,”ÑT0Ã\ª‘÷éýZ„>ùoº[_¦ýîËa ü¢ð!ÝîÇf­ƒ‡~ “ZœäÙÑ /}T`lµ,A\Ȉ³·Æ$¤7c‘fÊNHñÁp¡ N5„›ßwKøÀ?&&„0ÄÒ›3b<2)ÃîæŽ­ Y£¸»›í)-oU×lÌì4oò0ªÀܤcÂÎÔ16ÃW¿öÜŸ·×؆ô½I·ù’ß”ÜÂDéÙ€ðFG7á®-Ö¤Lé.ÒNûíí?G(qÆÕâ°ÔàD:}aïá[ÂÄÏ™8•hPýt— kfp½È6`?X¹È¢ ’Ý-0÷A#/5 ®åžmއ}zúsDŒq–Å]¸è2g²ETÝÂS8îÚQAl [W×nüÁ°jó÷°¤Ï5¤À]ÜQ( fÄಡ%Þ9s¯ÑÑýÇÂÿñÕš•HŒ°¢0»n[ùÂ,Ñ:zgÐnÞÍíiÊì"î4w»méyÒÑtÄy`Ѧ.V/N{:·[áòl ?ùÔÖÚ;‹ìÚ­Ôšu—…K%€y|‡m̤C˜r1¹íP› Þë+ÿby ~ú?³ãçá€#xk¼ÕŒw\Ñ/W©P»uµFMß±­ÎÀ•Þì¼Ó}cÕÑöãÁn¦BcŸÞp8?ŠÉFÕ:Ô…zéð=ׇ]WÀSžÜ”iÓy\¤ Ñc öŘ®½!†À3“ë·]!†Ž:aÚÖªp¢6a„Éß[Ђu aHZ‘ÿíßúS»iÕ˜o}¢.Q6ÊÎFÝÃòþ¥nÝ„Š‡×<œ’¸Ûí´tfíÏn™HˆúË71†<žüã?ff˜h——†#õUª¿„ðÖg†UkkB@bÃf\ŽÎku,Åð-Ø”°òFç[Pʈ:Ù6j:EžÞöì’z‰¡ƒ¤Ö4§Éy{÷A¾9³[` ÎäïƒY„՜܎ì}Þ˜‡iÆÃrо ˜”1*µE†›plw»€úˆqÿÅ—<;¬ÝôHùt^»ÍCô}\ð AÂ[ÏM=3¬ Ù…xÂeÛQÅHÞyãÍáÓŸû’B$&Qµ’íŠõ%ò¿%®­]æÏ^TPµW…ceÌŽÅÚßÒPÏ¡06Z/üý+´¶¤º7tmƒy¸JeU-<@NK[cª)è;ÐF¶{Múý>²§œ½ eòïí} í¤E^ËÁ­^šññ•ÊtìÀMaòèW% Úl£úÎÙlW¿E]æŒnÁ:ƒ?ѹʷ÷¯3ÕWqs…/ŸÁ@–jŒ!%Hœ$A=6Öî™áÆÖ°úŸ°š À—ú)3¢™fF$`ULMLƒCt§O΄W½ê1D%>Å@ÏM¤-1ý0gÁ—$ï;ÈFÌņTê~p³Ÿ%$ôI©£ áûþïýΰõ¢MªºG‹YƒìºÚjHþIP¬ÚôpÅ_¡œØÆs6{ÌH¡í’2)xÙ :qǧÅë*?Ù2› Ô%ô÷ìzµú®64§ôÎCd7Ô±¦º Ì™Ýápf¼>ÆJ;ƒÐ%C|0€È –«è>*ì°nPe45 ÜöÀ†Æê âhY£W½S&7{gz›¦^ «KuTgM…Q´8d½.ŠÄKþðaï¾CQ Hýà=)óOÝ.•`Îá…¢¤q©»ÖŸ—rõ0)þ·ÚÕ”…Yy©ž¶îJGÿ?þèùúÚbýÜ¥%}M³±–1b=2¤ îxXç‚^j«/• @­Ç3&j›<ô³! G‘-Êû ?ýy8kuf) WZRk™à&L‚ïÔ:ù-}x—àPŸI|ið@xhÅu&ËhðçŒlp8#?K,T3L†{w½ÞÔ-³b è’Gá“rG5ËòÞ l)ó'¿Ç{œ‡×ÅÖŒ<6¬Ùúd‘½Ø‘¶r0­®‹áú9ǧLacÒE›0aQ³¾ø_7ðãÊXBU‰8-¶"@â@™ª~~ÀQ3Ó« ½â<½3rlw7Ï䙯9ž4¯N·ªNÜ$k ³U^{̣ã¿óÁª¶âY›×¢n[‹õ¦¯×EŒ€ÕfGÂÌðHxà¥ËU§Ð_„†¾ öCbÔK5éwçÛûÏÃ9C}aövFžÄÀ¬êdB@‚bÿî·†‰É*³nçœî˜3»Âáþü>âs-éæùA^lÖafï5(dòîw†Ó3;4ª–ÎV£G®Æ˜#€µ;±v³»UÑ?ÒaÒô1$†Ùc9 @]ÀIäoÌ æCY¤p¾ðò_׃0Ư”¡S¢lÕÄÏLÁž–TmÄí”–4µð—/{c˜Ð¬‚âñö¼¶Ã9ƒ!¤YÙå²²`»qí?sÛaðÇ:yL´‰wFŽíî4l–JÏØ.Ei¡±kM”À¿mLÜé÷¸*ÛÓºíðäÁY3ÌäðŸÍpU{ó¯9ŽÞ­ÝK\Š(8kû¼]b8nv¬õµ^å öеÀ@8¬XÓöXô^ÓIa^nƒQÆ-‰!BDSûÂÎÃïÔ+j‚#€ rm¾G¾Í§l Âo,7¥ßgÈ}>\|A8§°/ºè™al쑦s¶!®<,޽íÕj—¡6iëÄ/†s·êážÏþÛÊ#2ç”Ù¦î^ur8lÿá &gP–yˆãè”§[xäØÐÆaü2¸Í½ñ/3†L@`ÓÆßñíß~ì©OT‚jµ§ÇëÚºåÏÖYÃMÚ©„.?[Îê¦&P™ç2-úçbî—ª•ÿ·‡sf~D}Épôäç±=ÜÛ0v ̰öw¹ A6`Zx™)–¯üË,Ʀ…µ{¾Ahñ±ÎÈ[£î=;®×vÀÓa:i!g D‘z\Ãìp-(OS$ £[bcÙº ¦fÛ#EêŒPkkußϯ†ö舼f>rÌx÷Aܲ* AA™úÜÊçÊ+ߤÙDœU"¨˜ÇŒ‹ð}”±˜¤«¿W© IÛ]ilm@BÊÝÏyŽ®8Gå’ÂuÉÔðkJ×Û.}àïê†^­÷X: ݬ<μEÑïá+a³íšŽ`»¨Ô‰î¹N]{ìÇQOh}+æ­Y'ý&3¼M20÷o „ÃýÙþ⾑˜õ$f¸÷B£ç‰c_Ö#>5µ·'¡&€9Ã1˜]DÎÑ÷XbÝ Ï¡Z¦#æ! ® 7ÈPxÀeºçgÍE*ÂM³Ô âHÆì”ŽÙC•±ÃnèÑÄÔ)¾÷ï>¾ôÕ»„¸²õKGòE!’Æ•ÕÁã‹éÊ`ç…©ºy:UÑp©öü»üÒK³~å©ê ´|Ò_¸šâö@\·õIaãÆ³oÔê-Ïc^–/AÃgòŸ ·œÔ¯¹VeD3ÐÖÔÉphÇëÌV[6-ø,‚º¦õå¬Ë@8,ß—Z¦pX\»-Oª¬õí`°FMÃz^‘E‡=;®Õ"å”È…?“Ô YÛ[íÖÕûàË‘E[º®‰æš®g1±±îaaTJQ/.Á "ŸPiG˨ÁP­VªK(ÌhDÉM³Œ¯¿á=Âe”ÖL8á2K0¥#÷ŸÇ»íQø‹a‡]ŸÂºÛÓP'ÜV7UÏîǃì_øÏ?žQ? ìªOÝÍ–ÎL/Ñ®±‹¬«5ì œÙÁƒ9Æíœ‘»Em †YÊb·öªîÇÞÆü‹:‹”¼h«%Þ™S±¢% ï£ü«ô:YöàÉGÍl$ÂaÜ}\‡ÝfÆ¿n¶ØÇšìpv—L…­¬<°Re\µP×-¾¥¼l ûnI@4µp¼í²†"Lm a Y'saSqÆ@dµikÚTG-¢´ŸÿÜáK_¹ËêÆ•`êÅ ]p¸]['D÷bðqtæ ¨ýŠÆÒÐPµ«Ãlݲ)üö Ÿ­6fý‰A@?¤‰0Ö7ÑyɇP½<\zù ”¾ 8Òìqý±‹ÿ‹ q¼Ø.x<œ{ãy¥¾Á®3ßw÷kâÙÖU”0^›’Ö·z½eñ¥¤ì·Ò/Òošܲµ€ô¬œ&Õh›±s½y2ì¿÷Íq'‘¦á,R3*¯5Dì¬=ˆ´÷ lgOuA–" xL‡õ€øô¨ò–{ã–§…Ñuße Ó¾(ÎⳂY=İÄ⮥Šò1ºc’€xÍ«Þ*õûwä7¡¸ò£ÈÈ@Õ¨2eŒÞã±Ýts{¼Û)œ‡å¶1R¾»„¾Úª­YÂÓŸö£:+£9”…üª¤)£4K«Õ(J¢5«õ?3¬Ùð„|Í<î/Ãgär>T¦ õcfÁ”sfz_Ø÷ëlP4c䮥Î%^ùïµËÙ’ï@8ܯ_JúX®á@@ûw^/ÿIa’Rå@ðb–& $(…ŰRí ~èÓ,^@(o˜—Š×Ò(XW€nÞö‹¦±Ò£xÐM‘*'¬N7í(L§¸£ž¬²t-I›!1´»ïÞ>ýÙ/n¢á 3{w»´wR…y“¶Wz/…–ná^–üî¥.å¡ Ìׯ^~ïÅ¿¥v „n±Ó‡‰åC* ¾Î†b ($¨·i=ˆåÝ´ qý}dÑFïx±ñû¿ {õÙ1«?¯ª¾ô%Ež8xS89y[. h‰h\(p`î×|•l~ïï¦WS}²3Â1s¥Wp7u’ôø¡i0Þ FYqû("¡@˜'ÛYÙÔ”š °^¿˜Ö4$6ãÄëþ*ÛßhI]¸íwCcíC)‡æ˜?ÁÚƒ/æ«»[÷›ªÛ ×¾;^0'7‚ÁæróŒ¯*fg|ÞîGgä\XŠ?u«†870äÜO½³º{|j³†o†º0í’Míl]ÈwÕ àiOþ~]…±ZBAÌ]‚•W±û3 ,À !§\ºZcìaaôA¿nƒ œ‡ÐØCX-Óèx™Œ÷)úbj¨>q“²õ¢ƒÖ—b,m0-]Ó‘o¾Få—Oº"͝¢X<0áïŸè·Þ?¥;Ûs5b Qˆ45ª†±aëÝ]DCj…Ýwýµ®dÖ‘!¥1M2*¥Äîć ÑU™npÝÂçáÓ0¯-!À$eõšGé-ÿ"‘ºò¶Fó,< ®¶ùø§ÿ-KHiŸx⣠[ΘË"KÂæî­ãŒ!޼ “ºS4eùå8«¾S—e!`ûnQ¸°¤ÀzÁº±ÕáO®ü¹%TÙŠúP³©¨fIK2ßMß'?ŽÄalýAáÒ­W„ÆØƒXŠ‘jRjJ68ðr£w|ôƒ^?KÚãOÚp—™náÀžš¸[J¾‹ñ€Tb* Û¡õígu <¾9^†qv_µ€wßû*¿ó*Ÿx‡µFþZdÔõ‘±h—g$ ÞSûn S§Q«0+`áW‡Í`ð“.D×OCöJßÞY^yåRÆ­—ýV˜ÔP¸VÙè¶^ŸÛ“ÞOYÊ`h“Û?ÿõ°s÷>Eóî¨pgÖΈ˘tÎ4¬4 Ù,ÐxHæ8Ýî…Šö7æ­6´ƒÝYnÎr0´úOýPØrÁ* Æ ÛX9Ìfܲr‹óÙ(»~Ôv¶þÐà !%î IDAT¢º–Äå/¶­ÒQK57ØPÔ,¥zM£2û€UOaô-ÜiÃíá‡Blÿ=o ÍÓû¬™Œl|0Õ©vç ÌýÛá°‚íoûÿ…ß Ñæ±ž6¯Ä+rFøÜ{½±Åšvwpuµ,1Dm“•¢rÂJ o¥ª`/}iMdË…?VmøÞ0ªUç¶„Z~•ÃR3V%ÞùΛtÑ^œ1dG(Ô.KÅ­ôÎÔSFžº“…ãtÛdZ ¢—t§ò°ž¢ºÙËibƒë5køó+OåÔüI[Pí|ƒf <žÓfR•‘€I¯guQÎå…œ6Ýò˜pÑÅ?kÌ–¶Õ¶+ 8°É!ëOÝìªìû‰wÜEXú/åÒ­û¶¿LeÉþQmíbje»óŠéþû®ÂaEÛZ;4ì²1˜:£µ‘û»EÂR!qÉÜ‘ÝÿG·ßkï>£6‚ë nœÀ (~ý`I[fº…§°,Œ‡Æš°ú’g‡ºái‰aùÉÕ¥2Yò¡*·}á+ˆ*§Ü~€Žˆ"~c¶ Ï™2ú4iÇÓgÒÞùQĤeÎÝÞÐìÚÁÈâiPÖ~úé?ÖoZš3q1™hv¨ÍJßæ8 ëÿ :j6›càÁ¬tJý«6_|…f›,?N,ór‡Òì)Q/ÁP5ïîö>çá½Ð·$ÌØð0qì áÄþ÷h‹º“8;§Ñ+ý ne[` V¶}M•ç›…xÕṇQRí‡ã÷„c‡Þ%Ÿ;ñi„Œq¾­‰Í㪊_LWŸÆsúÂË~-Œ­Ñ"´ÆyœÇ`±”ÝHñ’¼zán‹Ûwí3TZ+(#_›B,לcØ4³Úº‹éב¤€b¾€ yUú9¼ÔLë7Œ…—þ¯ç+X_Z8±É ¥íÉMνèV[íÈož‡“Ð0| 4˜nb8X¦7›Yƒ@ØÖÇ. —<è…ÂÕJ3:«Â ªO‘zý"Âê¿à(3eMìù?«õ,Ö@(Äo³zé0nf`u¤¿(Ëw¶<-°ü¸<å:ǰp’5îä±WθË^£½};Þ µÒ¤œ\h'#bA„°à ÍnÆ »[¼‡—'qý¦¯é½âÍ—üŠž`ÕCLlÃãFÀô-Ù|æS·…ñ‰)à ‚¦`ç¬çãOøE? ¼3yÏÏ¡#$MŸºˆ°²p7Ig3Á™TŒ­¾¶Ã3žÁuk ´ ÃÖ.5a‡$w™V7pM[‹ýyU–ð£‰k BàÙÔyí¦§„ ›Ÿ¤oG}L3T>–Ùxã[¦n÷{Ùâæ¶_kü­caÿ.]­¡ÅèXökZæÏ³`tƒ/°à&[X‚È<`"ì$AH°=„Ã'?Ný”ñш”mÇ+5rÒb°•E+Þ‰‹ð~L7¸o/<Û¶ýž˜™Î-øuÑ­QE$*ú¸5´nânýôõWL‹¸D¬WW3rT%“zödÂUy|†¯ — ·IžºstjH ï†×8_Œôôä½aýÚð’?yžŠÓõ$t€&û<µÖ`ëÚ¨uϪÔ—†¦6ØlkN °ª‰ x·j­SK•Cë²Ù@Q½~¥™I)ëkea:þEEɧ·h9rK8uø³¦b•KAîû¡Âaõê—Ó|ñ^IzÿŸÂ÷rÓ€-f6j\»z\ÍÍRü¡ïÓ'¾œí¾j¨‡Ò Ú®>Ë3š²u0r˜•jZ}`V²Ä`†´ÝÒöB&úûµ=¬E7îàO Š"¤çþbiÜ@,¶ÛØÔ1¢gâ£À?0ºc!f.ÝÕˆôÓð5ÝØ!ž&A!äŒÓb\‘->´9>lºø—5j¦ÜŠ—¾zVˆY$d(li4"e·ÕR͆µ›ÂÖÍ[¤N€Óá¤ÔA¥¢ V*ĈÑ"ÔŽezE­ìê"å˺3~•—Û]Ù&«n¤áQzÕÖàÉ×ðËò ‚'c\n m`C\ÁÒpŠâGæÈüü°]*ÇÈx8<ü! ¿ùüÿj(tæœD+nfgFT•[;åí±P_ý°pÁU}Bj%©<­”"8»(O.f;e†¦M5{PŒO¢J Ufš:Z "%F튀سû•* ¯Ã1pkØU+|c΀ÄB)ÊAà2µÀ«ð¹— ó:6»N¡ñnFnºÇ~Ç×ÿИ±Ø–˜Rlú"“Vû¿ÌÚ±ì+Aب’ dä@CèlK¤¸ ÿ 6Øâ£ÔJÆýuaÞȈfÊÖ ³¹fžmý3ílùqډךȜ™ê3‹À&ŒÃVK3ºxPj7”Í0‰»¿¹'Ü~»FŒ>ÛïÚö ÉÌÏpƒÐH ð SëIxs¸ñú¿¹2üäϺoÐòæË™WÛzÙsõês4ñÓà„36ÕÄ{0ÅŠ8þåkpX¾¶,Å™Šº¿ïÝÿñ‹ajb·½Í0 õ‰™¥Æ Ê…DhÕŒ(Ö‰ÓN0‹°P]pfÈ®d»oif2¦‘ê´!Ô4\‚w #Ãs¤b—Ëð´Æe"·¦ˆôë«×=!<ðQW)Æ%„¹‰3ˆ6.²ÇѺq³p‡ í†BÍ¢J³ó†I‡ÅLyaAD~Qµ•q(•ËËМÖi`IÄ[?y{8tèfJCáö/|#LN‡ééÙ°cç.j8œ:}:>zLŒz(?y"ŒÇúgÍïíéÌ/­ ‡r©¬ýœ3Zš¢@°Q®—SX²Ù² ßÿøG‡÷~äõ’ƒª¯êE¹Vܨí˜2Phéd»m‘V¿à¶é#Ÿ wÞù¢0ÂN…5ÕÞô;Ö®x¡9ⳇbûtó§õñ¾œ†Ý)85hÚÂ8Š6&lœÙà²ÀÖÈHxè#oÔ‹ƒÛ´ô£>¢þf5 WÓ)U"E¤ÿ²µÀ@8,[S– RGog#Ï£÷üöq_#?Ä*†§¿'"gLž©lKy&iyû€´…q¤Ü±Ïˆ©½à® 3!¬[¯‘™˜Ä–Í!¬_+v¡Ñãeß>ÖHÇ‹ø8-Šœ ÿ鑺Æcã£l¿ðÌ-l!Ö(Õ90Ëdg Y/ÒØLÄ‚˜Q6 ™œ™ÖuäQ*.‘CÙ\ª±¸HªÖÓb® %`Y´lÔW«¬ÌÒ¤zPšzkÃeÂÕ>Ìv”> ›Œ©èÛÜ|Ó?‡©É™0yz*|ù+_1árìĉpP³„À‡Ã„f+•ÂŽ¢<·¦JÇO8W{¤€ – b¹Q‰ÔU¹÷ÿõá ß÷p…hX ¹nCå•Ì"Ù ÁìŒ2ðºÜ°Ú{Hm¤€pÏÝŽï¿I;“ZÙ–j•t ªVEÒ¾è}UÉû6ˆÈ؈ê»BvÓ1ÛÂðëëüð×IxQ.ªäÚ¨geÛÎ pžÿ‡•ìÒõðbZ£µ/|ýsÏÇ8e]šÝçuÞ˜¾c°ŒßDo.Ò¢¡6J i=±ó­´E"x±Gü¦5S¸úÚÕáæ[˜z‹ÐÀ+Žg1ò°X-b·7R„ØâùlÚb míš1¹7Yš‹¶m 6l´t~ÌÃÃê±µ¡12žþ³?ª”K4¶ÏŸ]]0F誗Ü<‚„@’SEÕø’Ý*2q§Q'cÈëe†A.·iÛÎQ&‹é¨Ä˜¥ 00&¨2·dbZS°Ø æÞ݇ÂmŸ¿]è‡Ã=»„={´ëLî{÷î §Os9u-ìÞ½Ûòœžž ŽÏxê†7½ùJ¸žM&†$ÈØÞl.Íl™ÝìDª³~#ÓjNHYwP)hÈК8î¼ã íœ:"A€".îX2…F$M ã3>m}4-ž÷WOã²n•ºù¾ô]úæŒúlM‚œ-÷è3è©«Ÿ^øà?k¶ý¬Ê‚Pcvƒ°od#ŠRìƒÀ¥¶À@8,¡›‰ÕgÕ½E„Œ¼†4²1‚çêaýó‘êžoý¯0uðc¶mEвµ25NT~‰äÝüõpŠÐØ[nV8þï­kß_£qú¦ Sdœ òS|eÑЩ^„ ë«ÇFu˨Œù¢mI¨¬WáZá;ñˆ°fݨÍžþ3OÎg –Ÿ·CgsXɣЀS qã'븬ìj&Ím•Íg „ÙŒ#*21k;i,AËÚ@KzΤ `|F†IUi1_Ú˜™Û•ÅØ$ÄâÕ"ô Ÿyży»qÂØæX¬§FÐâŽQ`ÍÅ¥pé÷‰øy&Aªf†Ý2QèEáÊu†3Ÿí—dl9=øá°ïοÐ=|–Rï0à€áýQÎRã3Ü4Ò…a>ãõ°2;M[tsâe•TLCµáÁßùŽP¹P]ZÏ.åS»£û˜kpX†¦mëfI»qS–À²4îµQºÛé£_w}íw4nÙÂ#’&ì¤Ó81ö+P³À‘XS`Òžn‡ÃÇêá×ÿ ŽC—߉¿Ì—2›ÇC›¢Qá2p7”1][]<˜kdÈqtÊrC ã[¶\ A¢ç-ׯ ›6¬³-·mÕŽ©M›aÍá1}TÑ ¢£«BxêO?EÌ[‹¬Ê Õª§\¸DÝšòùEÃKsì¶‚}·PEi‡Œ•*î ’.S»°— æÈ7ŒŒ™…hFûägé%MØh† j«ÎY á&“I,©e‘—)ý 1˜^j0•{X½„¦âLL™êÎór›¼LõÆÌ ¡6-¡6‚ -¦‡S¶ëÚ¬Lî(¢´g®…^NÀßûÍ? §J-!¥úÔôŒÄƒfV|#ûŽdT0àöV(Då^Ä`]€ò,Ĩ˜#ú†<†µqã“ÂE¸2δöÀu4³²-0Kh_ĉ†gðsúø–Ô»¿ö›aâè×4RÑŠü)Š ÇF·›'ÄT8†ßó>Õ‰hì¯Âx ®<^ðÇ«Â_×-Ÿ Ûô¿/œå1ŸÑuK”RMå£iã¦I ñ°Œ¼]8˜£Têe™«°$ÇÏÃ4±mˆÌ*!Dm©8±jtDÌb“D3lX»!lÐicU8\²m[X·N[D…èq{¬JM¿¡ðä§ò äñP!õŒ •™’JàØÎ+T@2Ñ-ÒÇÅyÍÞ€”[ ˜íp¹#fVSÖÃâÌA}C[œ1Q}5­¾9¦%-AëÙŽÛŸ¦ÇµØý8LÙËP>Œ5l÷{X™?–ˆjÃÅ㨔wÚ™¬Cœ!lÜö̰é:+dkBÕ8‹opX|ÛYJcCúcã>JŠH´Upﮫ©½zÀDÔÐ$\ÄlL_#zn\嚊¼Nd.ˆ‡Àâ8/ºñp?ô61UÿíE£ºv@Ä/brŽã]ˆ3ñŠDÀ!èrã͘…Jhõö‹ëâ‰mTBèÿ#“‹Ü,a>8 Âú ÆTL6 0o–OI=)LÖˆ¾«)æçyªYVû.Äqn#–Ï„yyY2·µ‹>„ä»ÕÃð[}I/¼©Âl¾ÃØh-lÚ¸EîfØ´~½¶¯×ˆw8\zÉEz“{Tž†Âw}×wJÙÒû«¤þz¢ÒÒ7óÕYlF](5’½/Tç‚ „@T)‘Áò¨[{gô³TWÌVR3_ên­<ÓÔõéß Û¿‚z \|[êç¬y-°æ~"óÏÑËŽØËÿ²ø¼Jg`8£ÃІ«øˆ×†µ›+m=0+Õá°”–sP¿µš-î±k¾râ›ák_ý mÍ›R÷EÏ«n,jai»JÆÙ£”˜(†ž ŸY¸pð¢z8jöL+¼ôUíŸ? R¢bgFS\‘.2þ¢ü„aæÔ@`ËŒ!vO´#ÃÏÔ(EbEP‰¦ãb¨J-( NШ© +®cD5û³|S®“! £ÅED¹ìãcSxøG°UQy¥öb¼myhKªí$¢]õÑâ|;Õåå–Í.„ó§V Ù 7ä0XåËÄ…ŸBjÂD‘V(K [=¢z ­lÖ.°ukã:Ê¥—>@ê¯1•©¾÷{¿Géf$dV…{Ò÷KÍDêZp‰g Dë ä™*ª,Tz¶ƒN¯Ä¡¼&\s3yÄ\`°+ 0æ%gfrÆÔÅïp]mÊfµ,¡ðLu”§³ùŒúñðÃÀ==,2®< æˆÉ9 ÜD~ªƒIÜ‘9Gæ+^nL—šG¸,Ã|㔤BƒøX~K$ODÛÆ3BH0òÎô÷^ž¼ 1'ö™`áKd³Æ(²|óö/ä¥hoCû¸d›e³Â“ÔÅÚ%8£%ÍÆ„6\=¶JoE¬WxSk+ú5kÕijáòm cz¯ÈïþÞGKΆõë6†Ê÷I(h·–ÖF¸ÒfYzÛ|矦'vØF‰zš"ƒÏ›*Kåþ¢ÝiÉ0´]¼Å+ÊÌîÖ’0»àòß=ð9ý À,²Âa‘ gÉÄàÛv±šº±ÄzüÀǽßz©:5Œ«?äs?oiu>`XÒ²«%X9dQ*T6Û漢ßþÚm2 #‹cDÞ°½à AøÂ\s®¥ÀôJK&g„sYv”«\’$wzžnç tÓ/´eÙqö ÓO:Çå°^^w»¬½=®Ã¶NÓkVIX¬¶>´Ej°5ëôÆÈôÞð€‹¥ç×ö]Þ„xÄ£¥€ÒšÉÆÕðˆÇé5@IçaõO«jjA`D:+›}ð®]²vo`ÐS ¥a^X_/9ó?•IôõàG½#4Ö^.µ“eª‹æ@ñp©Tqv# „30‹npXtÓEÆ ç¦ ÚvE½ÕðÍ/þ²F]ûD,Ú5oúçît ާ뢜 üF% ´Òè P¹j`X³ßø±pçnv²ˆ2AN\ìVÊG®Ý…„3šn¥ôø¢íðî~·»…{üRlpcœy,×¢ÓòÑ{󾮨W²mòLû*ê8©”˜a1 •aqÕ³1®+oë6aÔQ^flTƒT~t¬6¬©I¸Ô«þô¤nØ­ë†ÕfX¥Ã~ÂQõ}ò¾JÆ™IÃbz]|kÊç7ª»À.ØkâÎ-›å1+< ÿR9E«cØ mlîºÐdxk˜¯¦åô»‡vÞZ§÷Ø1ª&Ìy‰†‘WC{ÛšFk–‚`à44[W¯ºfM&Ø!…–J‘‚Ó‘¸HÔFLPÕüB8s%"s¿ÛiŠH \îw˜’WG¸/ÁNËî~ð§izeÝ0þ3\jÚ^ézÅõSö^å%®~/_%õ•üús›f‚XgøŽòqÍŠFé–ÍŒù&ÿäÄl8xp&ܽc2\õÆ ê{ê±ÚR„‚jUYÇSº…5rbôÙ•¬;eš8ñÙ0~ø‚àTºâD3ZÌc7 ¿YZ „ÃÚo–“¤šNÛÅÉ{ÃÁ{ß§ívbÐW“mI?NÃxF±®)ý,3[Mûç¹}õãÿ²&|ä“§5º“ÀHõô¢þ1c`ì1¡ wÊR7ù»ßm+”þ¤ (29óí´ì]K›µ?õ¾W`üW†¯#=ŒÊ?d0aYÞÝ¢«Â+ñW!°"¨Ÿ¨OÁðUycª6“°>ÃЄ8z ¦&ÎVò4¬»°±ê³_WŸ :‚¦5«^&΢bÍ34-í]“€Úw÷ßêÜÇ!£AT¼v‚^ª%6ï¼<ÏÇ€eú„çcÓi&n§ny~³öÜ}­Þi`:+z&Óã¥í=Q&0-!NË>~¨®z‹NÒ²Q?M(Äh$FŠÓ¾uL/†g=þ¤ (uwMRQçbYŠþ®x»DôJOymR — ¥]`y)Fšg±Mr^«N&ÅÛ¥ºy÷ß ON˜pÂé2Œ°(PPã)Ž W~èé_ú¡†2¦­6fGï’ðÝ(›• IDAT*á›Þ6ŽŸÒZN^³ÍkY pþGD@håAýÿx8ô­×¨œõàÔ4åǨ쳤´à’šƒJÍpêèçøò™!Mk4[îG8 –Žî¦#L}Ʀ÷"BÜFÔë_zÕX8y a !š¶2ÚB*,p˜ !C‘Dr†å,ÄNʵdýÂ.¤le°eaiÞì¬Êš! V{g‚# µ0˜Å¥ø Oã’¤æLa‹q½ÒaÝ_–&Í#u{š¢]†#…‰B@}'Jk«a­/°àËlÆoNTJÖI¹þEa°Ä§™3^õM:ü±ã!¼òšuì™°þšæµ87³µ¹”ɧ±@ÔXŒ‘Žùx˜:ò[oéU9Ê„˜˜¥µ€šv`Û, …½;^ŸÞTOn¨gNÛvÏ¥7m‹¹¹£™7¼}}¸ãkÚ¶j’‡û÷¹['#åË?-›¤¨®Ì£'êžñÕYô†H¿àbËГváóÒde$ÜÖ¼}–½X/¯‹ÛŸæK\êw˜yvEªpD!0×±Eµ¤½å¡¨†©ú˜ádF!Œ¬w1^Ñ™‰OÿûxøÄ§Æô*¡w\ƒ\äÊ©`ÀR·j@ƪßÁ»¯ ÃÍ£¦våûè>ÁYb ,Ç\bÎâäj½#»ß¥uvŠ@ £(F´ÕƒcÿUÆGEiÇOÃØFÈB4Ç´þ㫵ðŽê½ðÚâ!;쵡ÄÐ(§µØÝÄ›Èmn.í#ÊWÉ@¼@U•©Š‡·p1²/2É"šFI=û4Ux»¢Iò0eŸ‘°²ð.H‹õ¬,Œð~ÊÃÊ@xú_OCÉ~¤SïÉx1ýH‡äÔ¿ykš`3Œ Nâ9žEíÉ» tD&k×ÜÂÉiO“,õ/]'þÒ™›¢I}Êù‡ñéáÐŽ·èýΦèúòÁõKmò|\ºdDç"®ÐóçÁj|¢™7Y¢è·iëø®p`ß[µ'½«¦Ú¬5Ð5u)rF¤ûܯØF$Å^8SG'­=&jd9cÊô¼Ca|²^ñz]¥ Q’‰ è.£ÛVÈÈMÄÙÒ(± 2îÃ83é L™ñp·IÝiR”_¦ LŽ3ÁAXÑõüÛ/¬©¢zbZZdZç²2¥ñÅœ¾ á鯘¾—ÞnBÀú–šÃgXy8ƒì` ŽÀ ,šrÓ—¨;Ú ¯¸Jð¤¥ÛO`(¬ØvMב**nÜPDbÊ€wãm€X47¬5>®!UÞ‡½?L¹M.žå…\y¤iÎD·f:º-ÙÖêæ¢®’àÓL—˜µDÒ;ãHÊ^(Ó{¼5QÁ®¯ÕôõtÔ¯ªW3 ª‰Ê(|²vlÏÆy-o71èM†ºöòX o@4aö"5.£—ÿÕ_¯ûH(ÙõºAB#ŽÞ"Æ2fAXJHžwÑvfR Oýeø‰÷p·Ó4=Ýj§²²y˜ã+úÁ™†9\Y^Å8÷“ÞqôJŒ§)ƒ»?Â:Ê“0̪²ëëmÐÞ¾4K+æ¯Î¨Åg-Ó©E¨95< ŸºíTøô¿è‚BuscÆ-Dkì%Z!¬‹Ô•¯èNùO@z2vߎ×Ú,Z)V9qŒ¢LJà–§V×l£úRöóÙ „C¯¯Ï0^oV#vº¼ØŠþ©Cê†O†ñãŸÖH_1êhNh“W˜1Âa¢ñgô“ùq3õmgC¥¶†2À!¸O¦©‘Sô›>´>|òóãsŒ*_|F€”/KJÌEH`zÅá{ù=?‡)ú=<·­=ôG¦WÊâ:Â"Šm™£XÒwà(KÔ¥\ŽËí.Iûî§ +æ‡!̵˜·AG¸úÚBŒ¥E…IGM`l)"¼·pÍ ³á„ÖÍ  úvFÎáP`F€,Õ³e/!Åì[{•ôôéáØÞw*?GS7ϲà®öâŠææø’O2ÏàOi „Ci³ÄÀa{“&Òa!»¸L‚"Œ‹û·Ãž¯×ÓŠŒœÐ¹…D›ˆ±«ïÇð9(ˆÄíi-à1ËP¯a±÷B¶tSìþ`P¶ýžFxûxõŠ<˜*+#Åq¥FTBªEýqÆ`ŒFxÝîYd ÚqAï¸Íß…ö-µWL›âé+ïo‚ÇÓ:>·ó²9ÀBlòJòs\n/ÕR`‹ùá/†-¿§õ6s•ÍQ3þ£n‚óÌ! ‘ü¡ã­ðÊ×­ #zC‚]EÌ*ì*pu_®·_²1zˆX`ûæUÞûw¿-„‰½¤q8ºR{ñÊž`xs½ã–%âÜEç˜.-ÀB0†§yÆ|ºìà½ï3Zoà42øÀðѧÒ9&±8‡Û!)ü1XÁÒHŠNk:Y]=0ņp^ùê‘05g-6’fV¢é9Ã¥&%lcPBÆÛ}$1"s²üUgìyîi1]êOÝI’N§}„”ÖÙúÂáÀ™]†Ç¢ì{€ïo_uèóûv+nYûÊ7A8Kßg& ûU¿d,oQÐ?¹ÎZøäçN…Oýûš0¬'lõßT°ô}ݳdúEËÖ:P"Q •‡·žíÝþ—k5­r¨L¶õVÙéÎ'èj–Ù„ÒLï‡^í£„)°sC#Ô<³“Ç4m}Kìdô/†ø™A¥:$‚áÞ#»y€hÁ¤BÂ0Á ¸š†S³š†C^&„%Ö¯ãBxí5kÃ]»Ø¤;±°*¡ˆ@ˆ-bjæ¶`{™2æPß+ç]ævÜàè…Çá:lkçŽkË'6Ï<œ^†B*óóïK‚"|ÎÅ„¥xSw.`¢V*×ÖÙðy§,îÖ¦c+”®6*‡VD'𳵕ÍW_ß “Zk`– ¹p)%¿%õqà™ˆ¢üº­  9Šþš§¿(:ý ]—® hbVÚÉ„Øß_rþç8‚pèõuÈL3e™ië^µæ„f ×iÑ)K“æ¿Ó‹\q¡K¬¼¯Çý…‰;”‘Ôó‰O­ úçèébú‹B ÃüÂt»,N¸IèÌ™LÁ§ÌÁÑô²ËàÓ¼<­‡¹;- x WVæ2ø4­¥G*gôíq9sÌÂËÊgiÕ®Å<¶î¸Ýöx‡÷ðå²ûÅëå°|Õn¤ë7­§éUæߤ¤/uKÉI,@tdõW†S6rR?…IqèÐlxÍukÕƒyÄz‰j×nxû G(ax—Ý¥u¼!ÍZÚݱ÷Þ¿éeTòJe L³ºCj`z·@lÝÞ0çu¬©–†ìÌs?ùU½µûQí(R·Ô”™ß0ö>ƒ9ôGÁVV¸™ l~ ´øa°§ÄߣŸÀ¨–:~¨^ýf-¤ ?téNŸI!æ£DBŸç ²X \§tü—½ b©;ÿäL‰âɤøˆKýÀþÎû“—%Ãcx³2Ž,¼Ž"RÏ;/c†åy+> <LœžG!xÙ½”Ëó*–‘Ì:â’oÝwAúM\Û‘oš™/:' Ðô99ñæFê3bÌ0ñ[>}:üëm«E3¶0íÃÈÁã05’òfö€ bÆÍ˜‰òp£ÀÐÄq½á~µ„R=LJ ËÕãÐ'%«ñTëÀôlpèÑ<ºÕv YoÒù†½»ÿZÝÌN1û×zW&âbòŒ:'k\cx0šQOÄæW4Z^PgŽgBtè?ãzŒšy€G†Áç8*#@ˆÆL¢Œ‘X¢”H- þ)ƒ÷0· 2+«3«†¸Ø?pyš4ÜÝY¹ŒxSGttàÐL¸æš ¢!žå‰Ï殊àúû Ý~X}¦¥ë竌Óp)}á'Ž]}Lݳý*]oû(ò(6’ q/ÙÀôlpèÕ<ÆØt‡ÑÌ©°g×u}¨kM‚²ëz¥U\Úaé¬Þ™=?¸ ¤;îXÞqóI¥’ðQ§žµ£©ó3Ö EÉÜîÑd²P“¥í™¬˜ 1/oæeu»,/âzÅ—¥IÃ<­·10xx ›Ã¤%¤`EÜÀæáîvšöþt{ýÝ.–¯g¹ébþ+©„="§¾ŠÕ(H[Ã?|ëépûíQ$°fÇ&ŒŸ˜fÛ) w6[ŽQ‹ÿ+îÆQ¥™éýº{é­9L—f(šQpšh`z·À@8ôhŸY”iittp§¶fŽÑ¯´Ø¥‘³F!-V‘+ |Ñy#¼ÚùuÞñŒkíù•oÐÔ[†ÐÏBqᬜ¡9»í„mÅɈ­#¬PNOWîÏ›áï\…ÛËåvB„CׯŽf²¯ã §-MŪ­rtäÎ+½Ê‘À_ÇÒ½Cz¸úløð‡W‡ÏÜvÚØÁ!Æ~«Ä2)Z@I˜®ÅÇd–®,­ã(³SæÕ3-ìB\e)ˤV–3µ袼eøQ¯8‡Éí¬]s…ƒ:¤øqý HÛ¼å¼èni=/ÏÏý ð°yÈ柺A…HŒYµñ°NG¨Øˆ¨&ñ¡OL†Ûnçj-Bk04› ˆlö\8ÇCê¢qz"ÜiÊaˆcðÅn†CGÚr>=qW8zïß«,}Ö¼­ºÙáPÚ2ê±2ûÿ9œ:ö»qÒTI f/·z^?ÒA½§×÷ï ¯§Nq²íIâFT£õz4Œ… „VF|i¼»bqV1ŽFÙ'³ÌÓ, `ÎÌz¥í×-«Å¤q\+Öñ§¶»½ E»ê{ß ¦ ·çUçñÅ|ðÇÓê×r±‰5º8Wÿõõ:ž¦e€)†ZÚº'-KpöGý©±Æuz”‹yV‡îyshOî7[ôç2Žp˜÷u½S¶Â½÷\F¸+FÇíé¸ Mwy‘k²¹\¯ƒPÀ¸@Àíañº†=Ònœa ªa;«HG„4· B+xܔƦ`œ=¸,09\G¼ãJí<½{¥IáÒôîî•6Kñ¤nÇãvšÆÃú±Á¹Ð´ýÂáÜíî~ʸP˜y¸ ßÚñ̓óÙe,¦—Ÿ+^ÚvFH*ÔKêã\à ‚ÛTwï×¾y½Ü ½r¨uEqêZ¯–˜I²*u:™Ò~ãÙPnCÐ`Ó”®ÖØõ­—ëëÁ9Ú©—9¿…ƒøoS]1vX:Ê"5‰:ò‘o ÓSûõL§ô¢ê`<æ3 ãT4PŒ~0tJÆøØ©±0û¶¹©Ž)3\çýšk7„í;¦ŒÀXÏ0ã‡Øá!“3:¢]X¨¢ MÖ+>¥‰°Àçi2·…Y.:>+V'Dµ¯ƒ¡Ÿ¹©“ÕKn«Í vê&¬òGZµ=ª «o§ÛÃú·…$ÃííO}ÜMUrwUù–éh4ïo?0ó-5@u´¯CÕGÍíß oÜÚ½gßN©é¿ ɾ'³lþ¡.EYÊl@KÒÖÆ´! 7r<|㫌ì9ªÆÐГfÙn=èÊi«è.à?`¡k†u Ñ0÷@±­€Ó§ÿ#Ìî~o8 °6ƒø J`é­#2á9ÏM‡9Ç[G¼ÞZ¥‰Ÿ¾S˜?îÙûžÒÊÓŸ0Þa£¯üo[#¥iIî‘ij±´ÈˆO|r,|è“Ö+;æL' …éABLÉê :ËXþ\t`(xŒXɴ˯¾ì^k¬¬ÁÌ²ÚØÌËš â‹¶Åu)w^Ò/ßÏŠ˜àCµgŒ/øM¨Fgéõ«ˆî•ô>‰£ô4±õ¯¸ "Þy¤@«sïê)VFOÕfŒ<¶•‚¬oªïJ¥Ãgµ”ð1[àaûhš‘ÓZš•_ùFžú”a‚ûÆ¢%KKëöÑ™» £üþK»u=ÁsŠÚ_§¤¤]Û÷ßF'uµÆ¨„†h“Rq GÌGR¢ú˜EVšs×:¯› ­aÃíwÖͨÜõÎmúpç«B£Å®†øá½âKÝUÝbØ®×Ђ˜:߈¤Â´œ8V ¯y«8 /ûL:zÄÍ„íX+˜x÷»ëƒ!:zc`= Œˆ{ÄWDÙè/RSȸ-—bÂ@Ø÷NÙM’·S°Û`épwA»BÁ´hg“ª•³6¢š¶Í•ÑúÁ •ã¾B»~õª°fí:Õ…Hììv?‘`~ÿ,– ~[£r­¦ôÜ`¯V²¶™mŸÌ¿3G<¹€ÏŒÔ9±ýDhêÜ- ইo ?ý´£JíX’ïˆÉóׄž¾•­fè;Ú ‰*ˈ®„?èa m×í­Zhéäv¼—ëVÝãw^›óZ8°u.ÔP±¼¬Î+ïé#ÿŽÿŒn×ÃAgÿ€wet¤NÔWôͲÈf@º®X‰x=Tïa—E&?kØbª9?DÔÐH‹}Ú+¥¬÷”æòoûΰzÍÖ9À..{«KÁκp÷~/“‘{WxLj’w†YÔ§N£££á±}ŒFj½çîiùH·PCúȈ¢íé=ÜýÝlê¬3L[K·· ëXûæM›Ãâ Ý’žáÞ6–'q™ÖÖT·ï2¨Þ6`êQ“¹w¤ÀÉ"¤áSßvé×43Ÿ4[»ütð_½X‘š©° êh¶=¥òªMˆIk¦­ÄÆüp©(=Ý1vþ_W{xKîx¥8eºWå9uTNŽ|.¬Ýò]ê§Z°¦\MÝ[×*Ö¹Ïïƒrâ‹ ºØægý_«:ÄO§Õ4wV‡ov}é—ô†Ânu t”0•Ø9‹6•÷0á Ý›™çxÙ®nŒF#˜¶N@×`Œ"(›e›ud9sÃ~ìE +µÛXuäló†Ëú M•Õ‰3¢Éœ{ÇWõD÷ Ás[fM”Gägú¢`=s‹(ŒÃm˜'L”¯r6›Ö¬.ƒ3§_FƒðŽuþ>ê§~ËÆîYuöš†ÚQ`ÀTgÃÑ}ïûîz…Ý&0£~_×` ¡ ªÒ¸L=ZigDDt}=Ü©rdk~`„0Ô÷Æ(OÑMX^ô,ž0 á&ˆ2¡e5¡65ƒîQ$YüèÖðàÇü]¨7V™1¡¨¡X[B‹ÏgÓÇ×?w›¢`ìJ—fáìÈÞ·›` ãpr™Îè¦Ø Ó8‡)Úœ“sÁw!1µqˆ*  B¡L0€¿®m}v†<èdƒÂ%]¡s3~ïQ·!¿Ÿÿ°I¤†ªŽ}îú×Ò‹`u©°}}ý~.bEö³ÀhL´Õ/Ä}¤LÌÙj†õ-\0ØÌAu›µmÕzA#° ÛëgõV7Ž‚b‰½ÚžàT?ßtñχÕë¿Çèȃ:t$koÐùÛø\\©x€2Ú™Ú5¥»nn+GÙWe‘ýO3èÊR&ˆþ¡©Ãáàîë$´´ŽÀG ©ç»` 9ÏkáÀ¨v¸©•TK§…Ã÷Þh½–E,º0Ñ;$Š& !åQK15ˆ8 41|: f(’=2tû)J#­iF©bJ¨x.¸èB}ãcŒ€2 9cÍwØhzS—”œiN…úˆôÍ*}]×qi” ã¡IÝNÝÆ”ÀÂdןR÷b^Ž· ¦[¼7l½Þ©}ÅïLÕaÎF›ËçØ¡‡±Q?n»N;‡TGI½~¤c¦€ñ6jó0–1Ív|å¢KŸf˜)êK™êVDÀ@ u«Íš‘"„BKýÂîB’`b&Ñqš,‡e}ü±ŸÃ@“ÙvÍ· À.©cûßfN|AB_kxåϧÐóZ8pX­>"æÓö½Q#‹ [¶n,¦DÇóÎׯ@H;OM£ÎC˜P°‘§Ö1ä‡× ÙcÊ@µìG~¤‘^–«Ön .ùÛV[×T¹‡³ivgœ…›F#ª Ô˜q ŒÑèvê6¦¤ÛÚØÍVê^ÌËñVÁt‹·bþœKZX[²2‚Q<£gŒùýŽƒÎ}gfYlîp^­¯3VmúŽpá¶çh-A8ÙÒÊc<ê\oß”z•Û‡éçl÷F.Y‘§Ó%)sÇAWŒ#Þi;£2Öâ2%Qáq.ȬÍàµi„û—öïºÚ*l»¤ô,°ké¯Îa¨sZ8D&ä_­sqªC¤oãÅLÿ·pêÀ?‰Ñp9·’u Ý)¯t(F3Œvx'w„]êÁ³êèÞ Më tøÝÐÝÄ1PSRZ#â{1›Yö‰k5¥<7_öü0¹:Ñðˆ:™šÄtË‚«ÓI@¤E§nÊO¬K¸(Í/2þN?…(˜6[Ó{îý\ Ó/e;#„œÇä~݆ï ë/xª\ ’pR~sTž3±{©P襛Ú1e&™¬XöË‚Xm8<¦6É œ>ßÕIt~îÇö°4< sw ›¦7·€ºªÄW׬_DPÀ¤(3Z+€Åž¹ØdÀì•Tj.Ô¿94©-ኑšæßöb9ži=C3H)ý¤4T¤%§±Ô†|P hÔŒú&ñ–…aWaxP¨Æ¹4l>9¼ïÍaöôAmNaÈ•H¬@êOѰ}ý%_út`8ÎisN {7VÔÉ¡éÃ>®fúÌ"ÜáptÏ;C˜¼ËFä­Y±pƒ#T/°Ap.šç9ñuðÔ8COm‹éVN§bÔOŸm §¤#P„ðá-þà¿“õV¸øÒçÄé÷h1Fb—ô¥X!7íA;ðƒ DÝ´®µÓ eºÌhÑÀÅ­š ´cJë8ø]Ä—àç~lKÃÓ0w§°izs ¨—Z¬…@Ðu0Î h«rég»v|„ªè3Õ0J²ŸèkZ,w<¨>ôiTTÚ8$Nców…Í—<“ÇÙLMê50uû¡ÞeǶ»ñûf©ÙY"²Öºœˆ+âR_íƒyÛ ˜½òh´4PÜ~elm.ô­Ë(¼ÛîJï8§9g¬ë9]E&bg’t¦—bÄ(6µmºÅé£Ú©ðÛÊŠîq„ÖÐFN—Ñ„9LÓùÔQà# ^ÿjš"§Ú槉ýpƒ‹Žì4¤=*‘à”Az7“òßP¸pëχƆG+%ÂHS^í#ÎNá”–e¹Ü-¶óY=!žhâžµªµ©‡ž¡6BA‚ؾ‰˜” TîšvéÔ΀}ÀÃÌ´]Æ×ÔÁ+0§„ãöRuž3܈ŠÔÕ—õc³ª‘õMÊ.a§F€°Xé¯iÀ½Ñè¨-Õ T‰Ê¶Û¯!zå%Flwã÷í¦[õÄä(³6p@£rèW-\9˜ÉŒ‚Ѻ’ë¢Íc{ß/^!<ê+ìªÓäAx5´S™s•™ es›súœƒzõé›­iÛ>Zãh›¾ùŒ~£Þ {¾ùòpúÐ?š@­Dÿ¢[£“d„âÙ(3m«CÄ„ã_¶6ìºÏüABä€úQéHš·3V0kd£!Ȱ$ͪ±zزÑãÊ{˜>VVšÀ“%[`U†!žPd‡•|ÊÓZhA€!¹Î ·Ét­ªÂqËÖ-á‚Í›- —ªU™´mÜM…i{e IDATŸ”·Yo¬àé7=×!<üá ë7¬RÚ]£Kv¤d߬wN±Å4i<®XïÄ4ç«Ù÷ÓÞ8”~&xÕÎÏø¹'ë›OIˆáûìÕÝØ õOFÖlƒ¥>T—íEv Ïß÷á°ãî¿P²8#õôev‘¤æ}6Ñq]M9äÆhjÂÏâö”º6ðD¹MîNqÁð9!` 7<¼.<ìñï’ [¯…k^´ÎŒ¨^Ý ç´vÞÔÏðoCe—hÎiá?¨ZHLÓtŸ¼_ÛP'ž8úÕ°ó+Ï—:TŒ_ÏP±®A÷Òh‡Å0F'“ê0 uô§#êM·~~,¼ä0uDö°lg] ØF5š¹(Á)TÈS$ ´?¤%]¤0ùè›Ê[”÷ŠÊîTD!­”a¡89“\±rPIšËí…ddÌ—¶‹‰ÒªàîÞîóá;³¥@˜ qô,ø/+ñjv>hfèZs°ëFŒÝyÄ™gsÛ) ¡¡õ›¶]°ËˆIý¢©¾Ëuôôrõb¾5Óª)ÌŽ‹ '5ȉíÇwðoãµ,û6E[ñP~v­‰L0ùµc!¼ö/O…5«Ue츟wlh±®ô¢hÙÌ|tšH8P!¯»à'ÂþÓË#¼öXxŸÑ,”ùê&ìsÛœÓÂOgBÁ˜E€L ÑÎÌ„;¿üÜN~5Lk·»’8 #hâ˜bjJÊUA=îÜ¡›æE¹5®ñUþ~¨_øY8C|Š`drŸ ‰,¶ÌB0°FAL0ÈE¹@Áš B£ç쬄 ‡U( ëÁ¢P2¾ª¼h«nò®2•å«@àå 7Ƴu;†vù«rò-Œ  à§„jD›}9þ®¶`+ê`³¿ ˜n8¡RëŸTuäOyRÇ•ü }OS™·ŽöÅÖèGma}á&`Ï}f€¨C!D5£ï® oqÖ×éì]àj´ù#p$è›õöHøègN†÷T3nºë¬ÎRV!k —-¦ksÊîݯs8%-Â*ÁW ciÎuÁ VÍ?-îsÒÐag8—O'Ò bV‹ÐÇî¹!««¦½tj>˜8LÛ‘ý¸hÌ(Éázýÿó^‹¦Æ ž±u%èbŒØÍÈÕMK÷$ôwëôóXZ‚Io£²ˆÁÃL/º…L¸p§~Ãïyf6PV†Bx÷°ˆ;¶¥ÎÒgáó‹ËìáÔ±×Op^/’¤nG1/\( Nö¼¸”ÿµö0 ýIËA˜ù±{ý*ÊŸâÄ ·ñ°ÔíaÛ_û³o)FG_’šÆ˜,°= mЭ½æ%£Že&)Ïü¾3‡¿2Ÿ¬¬Vb¹óÁcq¦A„)ÆæÆÁ¨gÛCšhç°FDŽǑ>‡è†ôe3­¶çt/\õfô•Þ†5é˜FEÏœŽQ8'¤YSD%…ZÉèG™ÙÙ"…sîböôpà®kmAšòÂ#¦4*’: M}ΛGâ5JkjëÐ=£IáùY„b;«˜ªzÐŒ:׈fCúøÐ5k Ó3u­O4ÃG?¶&lß5¡Žû Ч8-o:ˆ›ÑŸ;OÂ>MkTAçéó𠛆9\¯l¾’Ø{!é·¼^&ЦîW1ÜüY“¦qÅ¢-6®ˆ§?åÍGü$Ð÷³0<ÞÌ6OæOÃò²fßÝáºÙ9| @Š×¢œóâP[ñçan—dµ  2<¥åé…5«‹áÒ®3›  ¨„¬x¼·ß>nûÌZ­; <$D²3’MlQQeZZmb|—$étë¬Øb{w&ˆ¾b^e0aðK%1ÝpøwO@—äì–#-–Ëñµ`ª?¢eSiüÏ–>Í Òì>|ÃøIkÐT˜r¬ŽB[o2Pû‚ÂÐÈ=ϯA`]Ðû¶¿V¹I­Ä¡YòÕYTÑçº9Ç…ƒ˜=ßPbjCcaïÎ×I°kI‚@Æ”}ïxè$bø,HOI½ÄÃÌVoþ§Õa—Þº5]»N "FfÝ­óúnP/ÊÐï­ð1uêNñYޢɔ•©,,BÏÿ[–W1¬#ßù(¬=Ë‚–ÕÍËÑ«>ãyõ‚u˜*»ˆ£è'½ç[W…¿#ÞùNVç4ÎóHÃâî–¾[xŠ›zW ëåOwq§m•º¼,/‡³I€.ø£³¡Žã`&ÂÖºsßtx߇6Ú¬Á–EÓM [SÐF”*þ¦Öf&ï ‡wÜ(ñ ”ȶ잻•ª[¨ªÏ‚xÎâ?ðÿÛ—©(ÔÁõá¥RbÁLÚ$[àµ)(]KsPöJ#5ÞͬQ‚­3(LS˶Íæ˜ÁB›À;÷BÓ9¡T¥/ƒó0ϳ_ßÍ.âí·¨ðŒ9RÖby‹ùã-¿0©E•¯$Qi9 p^Ÿ~` Is¯ãÈVØQUV/ÁA& ÇSôEXúSw’´Ó )fƒ¡Y-Þsñô I²Ãˆ·¢M¯‡|áíïo†Ó§¤ ’0`mqVZ³†>fþ¬jÔuòshÏÛôzÜn-[jACšî`:×Íy X„š ûw\g‡䆃m¼®ÆÁ43yÓŽÍ´?û}7¯{4kà ãŽÓÂsh]§ÝIq™â(#šRà$Љ#M›º 4#¢yáÇ‘ ç,¦-úI@XGø"²ãpÛqc÷SÖR˜ì”ÆeeOóÁÝÍqýžŽðnqÝ`Ò:; v·pâúɸ~M¯¼ÀÁLØfÄiº´LemÂÎŒÉPööfß\ì+Ä ñ5™ 0„w¦ÅGy5(<>®»AO¡J[ N A¿°c UA•áFW¡¸ß~=\Äõ&l’ Š;×M‹;Ëë«wp÷[´ñh¿½:Å1{>5§R1#Ù^å¦n_äZ .cÿõ´nðz÷‡â•.ÇèÄf үʈ¼EB ̧I‰ÉãܶôŒÖñ&uʨôÅð´\¸S¿¥KþÓý€Öž´M‚ªÒé8Ü.&è\Z‡Ô]ÄQå_LZOãvUy|òm¨[Gú¬ û­sŽSŽöÍ<É‚ÅôP‹L¯|#Äâÿ.w/ø´ ;J”ÕÃÃR¸ÔÝ ·§]ªíù¹m©€´´é·Q}òôJ[ Ÿáô8àÝfçxÊâ<¬[Ú2<þÏvƇ:«“j¼B¥‘… u t‘m6Cëêáw½c8|8 ™âÇõŽZI0$„hèe™IݤOýÖÓPvG\þ$é¼´i\™›²ø¯,ÞÃ(S±\·X» _YX)þ¹¦í``¥éØ2\Ußs^<œ!5E¿â(GiYH—À;î2Ø~¾‹§w»£Xú¶f°’<ÝãOãRr§åÊóP{v¤í‘¾€®/ožOç•ùÓ2uCÈÁ7hP×óiöß7¼]ŒžiM"˜Yðà<À^VTù-O}3Ö÷쨇½ûx¦W¼AHhFxOø¿zìVá`mc(Œ —ñÕtÅFM'åš:P¡[Ùºë¬ ?«…w ë U{ø†Ecuv8·¹9¯=öî¹:Œ*ÞÔáCr1»”اJgà]–ªèl¨¹Wå=ÿ(©¯>¯*lA¦Á8n·„à…–¥G”Á~¬ìõaŠ„ÚG’EƒÁvK´oe;&°eè*Ó—%RXY:Ê\ÞEOXðTáòx·Ó|ÊÂÒxÜýÀxšVí‰;÷;ÀmÿÞE¼Ýò*Âyö„Cë¦B¶AálØuÏlxÏû×ê5üA}]uà½Ö,àö˜—ÔÌDl¾¸^ôÒFxÉÿ^îÞ}K*,f¨šöîºJ¼€¶¢¦´ÃaB‚»Û†õK6™ð✕öY-Œ©kŸjìꨒÖ|õ‹px×{ÃÔ©]ú(zÁF leÓgg›ª~\´ÇÌ2>ƒÎÔQs ­9¼õï×…Ç,a”ô›Ìt딿âvV'¦eÉ/©_/|Ôý¾ªÿ}•Õ·ì“‹yôdö%i¬Ì%á½Ú”¸ªoY?eèÖ¾ž¶»SüeaiübÝÝʳ8|qÄÏÁ8O³âïºi2LØN# *ÕßMs þ<,f€j¹†ZYᣣíðœg5Âm·M„ç¼h6¼øÏW‡¯|sM8-¾ÐÐŒdxj¯TÖ×i?¼†¦º‡£­ÓÚ«ô¸Ä,‡m[£a¸qöou=«…‰4kPÓ×Dǧ‡Á‡µû¨9}8Þû¶(Õ¹‘•í«Z°ªI(¨¯›ÁmOâcß³iZãæ[P'Iúgpzî¢qVáé7¾Œ˜ªÒÎÕ¦š!¥°½Üä¹|{áZL\YÞý†åù¿¹¾í›¶ñ<œÅ4ŽLáÀ΃÷ø;ÍÇ£ÓôUñž&·³²õSŽ"Œç…í¥eKãÎ7·kÀÁ8ν¢A8r,„k¯_#Þ ;˜ˆe‹«1…ØX¶­]N®ÑyÒ“N†'Z°bþˆ*휽*᱌ãr˜¼Ã{€lÂü—Ï9)n…)–ÅýÝì tÑÅ:YÜ+Ÿ–¿ >ElÆËi¸¡Ò‚Iñ¢J½)þÔm£… }šg)v¤•ßËnå¡`Òr:¬uùãøÍÍüêçQ©ÃÓzXê7wI= w8Ï3 KÝŽ·Ì.ÖtŽÛÝyÚ’²äq‰ÃÒe°^NrÑäq…ˆ<i…‹Ö ƒÙ³(m[ÞU¾ëÞÕNä‡j v X”ÈTI&VþèyZ`Q!²o”±%PT{ ×^÷Îðzzø£ß¿:?rÂêouÑ.¦xîA/ÕYE´c²9­-åãõ:Ò‘ŒÛ¢íÌwÿþ±æ»‹°øÜ¹_A~]Ü|bò ô¼Õ€fQ#5pƒ›õ]¨¤½ô&B–.Q_Š/ª…$Ü!\wã&Í4ÁÔ"5[\íÌTÑyG3H%Ë:‡ÛÅxÀˆóø,Y‡U–†0ÿuWxR\©›dîïf§¨«ÊœÂºÛ¶gíAùx^½êï°ŽÇmOëþ¢â/ÆÍóÇO;/Ø ¼ŒúLÀ•Àö*¿—³[yÒp‡-¤[xWä%eÌa{9 xŠùýÝPuëÅvr|ØîÎqz›+ÎL¯:ÊãÈÅ|‹ñøË`Òr}kçTøÀÖi÷7ºª0”Y*hmL•;ª•¸5ôC.Ÿ Oû¡Õb pê&‹«^5Ã0(ð°„Â[ßñþðøïþ¹ð»ÏûópÏŽý&Àäx»$(ÆÏûÖjž"Î~ðvd×åuÀtñ”å]Ma¨O±NÌ ÞvÓT8ÁFG1dv/ÂL˜9ÀHÏó¡ 3áEÏ=.تM/’Æ"Ø“u»AARáû9}j*¼û¦[ÂýȳÿüÒp÷×vk`*·~3zÃ^û_$,¤óPžÊEì¸~Z[Î~ZÅØþ·¥ÑBŸG¯«âóâ[¤&o™†òŸˆëÕƒiÒ¢ïûî0œå¢ÍÝ|Y9ÃHÿïÐq ý¬ÎÐÕãï‹e#ÏŽËÿÈM'ËU—«ÀÕ5gÐ(¯X/:õp”êò’•>eúMç[å?óùòÝß÷þò÷¯ÿò;¿õûëgÌb“ÈØÙ‡ë»ëžÓÆ¡pCâá?µçZß"S‚e'‡=Æ’sÝVH׺[g3È µ–4TÐÇ—Ê|æ”D,;³‰@"…àºßyŽúžh` é&âjÔÔß„íûS¶I°Ã埠£pÇÛ6èœå˜‹ýå"ݨ|; Óòh¸ý“Œ4§:’Loiì ”>­nSþä¡ÛžÆÛ´ø>þ¬çyx˜fZ£rO¸ÈøÐW^C2ËA KÏÿ÷s'Ë-Ÿß‚¶ï× ö ‹3 O7®0 ØrT‰ò~Þeåmo٘ߕf„¾ˆêe•È• "Ã@8F­ïXÙÐ; `}…*ÒÙÌþìmw—÷¼÷§Ê·ü­ï-¿ù‰OÅ‘úå¸ó¥ð¸&ú"…t‘èZð")>ƒè=ôóemó( Ýg„O%9•ÛG®35sž )ð½éååª|cò,1ÿá×.-ëÌ| ¦:| Š#€­Xð«¢5¾BèІ]Š`„›ŸuWú]Óð’Ì`:¸ƒñ e|ßOz³üÄia2n‚ÿ Ó›¨‰`›Þ†'€z³àf¥õÈ„’ð„RŸ÷> Ÿó4VvÔdzÄ“Fú&Ÿ‡ÛÅe| Û#÷ô>6í×¼óÏL¦ñР1#ÞúY&a#Ü䙸#øŒ¦ÃÍ´ôdÈoóJß..òPQ£­«j_,7Bf(“]ŸÙƒãüUÚŠ{ N&âD“(؃7¾þX¹æšK90§Œ —.ˆë,B]â‹VBãâ‰%žÍÅ•XÉf–p×½÷—÷ÿèÏ–o¾ö»Ê¿û¹_'Q}å®Äî:¾‹AÉŸÅÎï5¨à×´/«mxÜ å~æø}åÞÛßœ÷K áÖQÑH£‚jT<{*iò'‹-ž íûÁ{÷—§ÖÖã.j¶œzj«:b¥ziŸKO›å‘ƒëŒ.˜§Ä`£w}(* †k¥r)!²Ýä2º¹6j5ú/@Îu(üE,ƒöÅ ÂÖ…³‚}©Î5Ju”×L·¼ ½i£Ýågodªj¤¯~Šé+´7mXдÆg)ktNpÜöŽ[.ÁÀÀ“z˜¿»î\,kÞM//(ª'bx8´íws}ÜFôÈAÌ|øq#G­G¹Xp¶³°¸Ì™‰ Sc Ÿ–†(KL` Q• ŒòŸnyê|ŽBY’jhi­„UZž§þ ã¿jg¨QÊ£+ó zÒ¿£Iˆðé  0>Ä,É.’†8P¥ßμ ßÕIKŠ:ã]û¥l*iþ»Ù(éjxQ­K:A»&„‚‚‡0È™n¸%äüHž+z!S•½2…?ÛN-?O]>æ!ãÁ{£H+¼H ÞN\ÐíÒX Å ÑŒrË® Á¶qI?ó«…n!&Ã;¡=‰¹³§ªÏ•9ò§]¨gY7(ßýº+Ê{ð‡\lÍA¬Û§¦Ncи„nÚ¤}ÿ»/-<ÊÒÿÅ/¹|D³v>%ÅxÞàÀJåo‚¼ÈŒÁVrùeûËë¿ãºò¡{WyáW_U–¸lÔ/]nÒGäOƶ¸‘:ò§ßǽP*˜‰>5‘éñÏn ã-B•J‡Mo@¼ÿÏÞRÊÚá²f¥v. á®ífôÈJWÁçw<×uôP?Ê–㪡Υ—ªxèÖÑyáw}8Œß†½¤æF‘óHÞ™ðzpOFT…àÔ”×{®y‹†x’÷S‡`QÉ*JáÏÙ£”øÖµÆK6ø« 5I#ò#$Yî8-9)J²L#òÛ6"œFЙOІΡã å‹·]j“¬(ã{;'ÆGÃë ?F(Š G°T]ܾÝÒQq­Uí’³à°'¡ÐÍkÊÅц·¾:Rú(ƒ / Ðg—§tæ¥Å_ CRuDè bÜYÁâWž¥ ¿C™ù`0àÇå²%¦g…¬R(Gîû:Z ±+õ m['_~BÑ%5Û\5nÈ ÓbjÝÁ©Ëâ(0ñv°ÍõU6ìÖ¹Êd‘6Ž PduÇ­Ëq×U(xî‘# ¼Iª‡'êv~rÍ%ÁŸcGñ)¨ýÖe9²ƒÁjP}RqÚ‰ÆÊÃÊ%á¨ë0‡2o…ÂQúl ú¦éì:5utN<2Wæ#Å.3féÁÑ/ø½®#w{F•IcƒO¯‹gÌPyQ'uôZea[· É“JËÁETTXIJ'…énBØPÜt œ¢ÌÆõ2I&ÒlOÑþ:v ³ð&©< OŠ:²çÙÆþ²}ÕË/)ýÉôiÒ©,û‰A—˜Ò/®xÂóÑÿé]Áû§kÕE†ëË;‹+Á PV1‹ øšP‡^5œíoëôªk_^>üáÊ7½òå1žpc'Q¯mlA?¸‘ T6vúû¬6›|<ÃŽëæ!†bëÌãåž?+K7gC¹¥d³g᳟×ç*ض±ÖP.ݸtåç©ûpâªù›‘žcŸj °®ßçHÃᆮ•«B×èh\ÖºÌ\¸‘þ¨qñ’ß&òæGó7O•ÅÂub÷5–1VŽ‹åC2vË›ŠØÆ*ƒõ: ¥ªøU$ٌݎZ—¦óåŽVÝ|–®MGÕmª<,ô##k­¾¤#–KÞc Òb€ MùŠxÒ›/¡Ê";W¦EáÃÙƒNØ4îîmTå-Z­ïÄêAxºe{ìá•ràÀjŒÜˆ*ëtÒ/Þvü1r#_Ës˜CÇOÂ7epªtŽe¹ƒOx±"/-Ä.wà¬uFÜò›ð5ÏÑËÍ@e,ó†áM©ÉeíÈU6Ù¡¥ß ,dZá|ÒmÑNê²åµAëŒh[þpÈ:¦ Iþ¥C©r k'/U”oÖ¯pÁÓ(ÊÛµOÃé,Wë2­ßÂlž‘Ò—ÆvyôyÞ~[¾¢ÎéÔÁbôaæ× T°öÃó“Ëå/ã ðo»¶_m±*àæuæýœ³gÊ[Þµ¯=¢áwVg·£:‹xÌ–ƒ‚®¯Xý±4J.QÀÛôâ ET^mÛ£J§žÔ[ã¯]S~è‡ßV®ÿ{ב§úD.!Mµ0Îlç¡gµq°8žVZôËJ+åá/~°œ>ò?b#xž¢6mžÊ¬ÆU…eDU£UᢩG§*.Ç|¡ä¨¡Àaí›’+¼ò£ F¶êIéªÜ–Y{T±Žp¥ÏÀÅ‹2棗žÖ¨È:Ƶñ¡a,f*¡ à…ý» ±ÎRH}!m4^Ô m5Ú¶äÑÞ5g^àºÎ½¨@Ù8ê·<¡w¡>»üa|u*µú ?ÊÃ+ Á#€ÌfÔñ+¶^23l9ÝðÞr*d>òÍL@KrÂÑ„­ÝÀ“©üm@/äȾ²P7ZU1Žy |`|Á1àü–ù*—˜¡ÀGh³†ØÙÎØIW—¾³4e$ÿë}äáÅòȃ«ð- Î:§ ¾ÀA‚0úL××—0(åä)”‡²‚î™3Ä;C›aíy±QöYÎi³øÕ¼ÖrFyr‰4¸±-hå^äv Ǻ±BTVü‹óôQ_¤ÓÞ4Áñtvþ3n§Ûãîvµ‹¡3µkÓe5JÅ̈~ƒ> îâl"ûh›F©“¿úu+åæŸñt$÷·ÑÀ<”²ýˆ)à¸RàÌÜ}Æ%¿÷G——Ÿþù3¡F m;V¬fÛ¨¼¶ÛE‡#‡LõÄcCÄôÎHÕK;ò/û†rãMo-oxóß-ËÌ,Ö™Ýx;ÇŸg½q°p§YWØàdÒC_xOµuØoª‚Û¾øÂêR1¨<Æt¨Zƒ!|*¡èŸ¤»w«¢Îx-ƒùK«ÂTßY‡ X…è 5±ßJ$å•P ›Ç7Äæ¨ Ò³ß‡‚–ãÒ” :6£m=P¨y…i©Àø²ŸÞÑv,WÙ÷N¯%¦ªÝuËʳ*å¶Úó+ðê32C£S9Á2"<÷5ü°º7Úg‰líò­3›Z†ú½ è_¤å"8’§²Ö)ãÀ•"&º¥ MyªDsVTË!!GWŒö€© ¹­–iÓ°KàÕŒª|ÍôÆM*ŸŽ)xÑ…Ñ',ù’~5ÈìÁ~ÿ}ûÊ#¢x00Þß³¶±Vî¹ #œƒ‘sÈêÐá³åÔ)"àWSp’Iαc–e䌙COfÉ"fd²µ Ïv“¼Ï†'õbèp)j'¾‰,M×)¿Y.èXg“Õ"Xý¸™„Þ©AE9_Gdƒ<þù?Þ_Þø&Ϋ۾¨ûL;À’×9ó€ÆþåååÿðIQgºCn$ƒH¤¶0Õò:0Ò6 .>VФ 4†N>#9Yÿ´Ÿêjá_ú’¯.ï|ç[ÊÛà͵1v©âíªqpU9_¹|áZ ßgë„aqª"å# åþ?ÿ'\Ë}€NÅYœà´oâ…”zNœZYÓ­+afùÓ±£þ#9ë·«û®‘œ™éç§ Ç´¼%DÒÈ4ãûålaLÏgú„ÏøYÏóäS©Ö_á5:Cæásæc¸÷yÈeÞÓüÄÉtŸ3¬¯3Ÿ טqÜ<<ˆ3„Ÿ´úiŸù¦,ª1Eq  Îa `µÜ÷°oaˆáñ4Çï½k…~’Á’;ã9xЋߤèlgwrøâá Z*ÂP®åÐã„9éGà4¤Ž†Ä€†ÏM4”ãØ å+#±Ã0€0*®ŒÃ•®ð  ‹á›+8È徺_(܈—MFîÕIz‘¯1<{–ßuFƒ¡PÍZ5;`2ÑÆCžZHMË  ý¯`Í“¨ À³p‘ÜÑ#ßxÑ_yåRù¿ˆ^bF̤’’Àjç o™åš"Ç,Y)ßÿ>Þ}à¸zäO^‘'éºÊo G¦Ð È“åíàÃ`ø¬ž¨³Xr<¯Ñ¤ÀUîVí‹_üÊÛÞúºòîy;3×h‰ŒåyøgV´Å2Å2׺qMdÉAl8hávÕ8ØàF ƒíO_ÞP Óñ·8ÑcÛ>ýào–Ç»9F­Žò}9(Þ!ˆQeÒ8ë×Ç›§…1iÌò[ø~¸Ÿÿv|_|ò–yg-­ŒK˜6͸yÓ¯…ïÇ = o|ßïç¸ýxŸ‡ÜÍ6ÄIºÓøÎô„¢‘i­Ÿx-]Ó3>a“žÏm8ôYʆ¾âR¤;+*<îq«Ëôe”¢Kš¡Œ 'ÓÐ*Lcbi‹4u¡ùÖþU;L‚NãO¡ÝÏ%ìϰœ¦²b¦|ìäfyð€§öa;d î1–Ô¸nÚý-GÍ'O­—£(Ã8i?â|Bƒc¦üh "ÿš/‘ü÷ð5tM¨©Äù §*æ:›¯e ì ' ÿŒrÍ^æòå§qQ±i0ë8æhÐF'‚«‘r7ý"úÄK²þd^Ò©0ßóÚËËÝxóHK ¨\uËŸõ¤ï3 Nå·?yEù…ßzª‹”. WŒö6sè[äM–¬8‚º(= tTÉ=øÎ2ÕÆ!=äi^’Æÿ;ÊáŠI»Fö⼨¼éM×—ñ¡›Ê¥ûë^ˆ¼xclØ}àÎñB•7ÁºKÀÔYì™ÐX$ý,pÖœëâ¼›·ÏœFÙÓ9~d¹<ôéÐ37Ômyø!Ç>ã;ÆgVž:I/Ç(:R¹}‚—EÍ]Yˆ |Œ²áCZ,–‚ª1P¹* y¨'àByjGB±Z’j4ž¦¨ÎxÌ\n”ƒT>ʳ¿”_ûØVùÊn`V*ÖØ^ƒ‰¸{I Ö×8vîãnøgW”/ÞÇf6®*y+¨ºP¹òæC«TT"#.fQ–°Ã‘>8R‰j#©™08l o4Œ µU®ºê²òú×|[ùÀO¼§<ÿ…—YröPϱ‡ê^i7cCVø¥Xå½ l)v¬<“^ªx›.j×ĹFÁ{KÝûSåȡߋƿlɸ6ðŠ4– ò¹yJ–ð Û>gxD°G˜Y~eæcæ§RÐuUVøÍôŒHžóy'~ò-Îvtg¥·i-?m|ò•ròÙpWã‘l½¶ø‰ÓÒiÓÛø„íû /¬á¾ŸðI+áϸ„ò[ø¡ôŒëÓJ¼ŒOÞ„oÃv`•|îÿØUëÑäzøèš…H4š-–88% †øTxtp¤š{H.;@–¼ìO*žÑ%.7,±7âþÑ‚AB9šDÐ÷n!—š\Î µÁÈ}ƒœÊXÕšGn7XâRé¨ÐC»ÌO|Æ Œƒ:ê>tj;ÐWÙ¿íŽbÝô5Ι<Çûä|‚tÇ­—2ká*‰p³t†AyôVÐ#«(^/–xðásäÏjƒRa„~”kqN`tÌCº÷ÄQ ”±ÃÆ©0Kù›¯¸´ü«óéO .û…KXÕ½$M&K^a”¡·âÀ•ü•b-O[,·ßºJ˜­mä{çm|ëò²ÿÊW•‡<„Ÿ3=ùÈøiÏ “éùœtjç¬éð„›?NÒëû-½¤;ä'^Òf—ðÛÁöéµxý´¤%LUˆ2“ZÀ~€ŠQ™åqãK:…hŠÃŠu*eתÃGk¸vîH2–t¼³‡·yýbâ’ƒUbÏ©¹ýØ `1c@ÑÅ;ôÂU®0,-´GpÅç³"ÎÂ+©8Éã,¼i§ÌK£RË O1ÝÁè™ÔÉ9Ûï¹È«†(FÉÅ›ìD=M¹IŽ²ËŸø3å¹BDΘDYÀØ…qRKë{2NÃ$çð=@áûHˆøŽJÚË;oÿì>®ÂÙâò8sr¥|ûkN`X„ã(ºV*diE0³‰Ocæ#Ÿ¡¸¯‰lå/_„­²Wf¥\ýo(/úKï@rx]T%³Â­8QÈc¥üþ§ÿg9ñäʼXî?ðË쇡»Ä‡ÊN•x^ü‚åVyè¡G‚ó%†ÛxŸumzÙþ7é´¸-¯Ctû8ùœ¹µ´2N.óJO\é%\ú™ÖÒlómã¶ïÑMú­ŸxIÚâ$|â÷ý¤Ó‡kã3Üǧ.Ñ/ÔˆP©¤S!Å7Ò‘çû# ;p4ïu0ËX™ªàñÁ!6–344^@¹êÔ„þ§3NÅ솮˷9b7-º¼…2D¡Æ„‰8ßÏÙ‚–ùJÏ\-_×ÉÌ![ž4 5÷ /^À(3yj÷-qŒÜ=X– ú®N1;a ,Q«d£ŽÐv¹¼§ˆP„ç<Ö _DU1ÆÅ› # ™™‡'‡âÀ9ÑiK㎮Z!qB/ÖëeZ O—Yáˆýäå’’ÖWã¨+<×mÀZeoqênñ’ò—¿éWËâe_C©%È‘Y |Æ; Ë3Qq~B´ÞØŠ<Â’ˆWëÑøxqØ¥*â¢Ô±<ßñ…åÖÏ߯ukm³üÙŸÞìû/å­ëoÿ–rÝß¾65_å¨q3÷]rVbì¿P–SO0yéÄ£Ÿ,ß÷Qlb£A9š¨FÆ­K+¡ã¼6Àq!æ-QoL¡†æ¡# á¦ù}šís?ÿ~~mz?­¥3+ܧÑ·ó9óÊø|6MׯgØøÎxŸ3=ÓúÏâéZø!¼„ `~Z˜Œëû ³_ÉcÒK|Ÿûá„ò“Ž8­kãÛr “ôõc]Ÿ€ÆÁ±.áUò¡\ñí±L2÷ÅAC¼‡b2¾¦{*)”ž€5ëXvо¥ó¼?aqضëïŒ*ÍOU_±Ä}UˆïÛl@gƒ÷C–𣌠8üØ{%î‹–ëtö°GÐq”Ú:ÅÙCÂ032~Âj ,F¬"@C'|•‘JÓ˜j}»Þå,]¾€ï% øÙúÚ"Ä;8~`iÇ’,KKž4xÕ÷ö(£ÇÄãî7e‹c"ÆQÅ\ ¬¹V~å‡Ô¨‹8ö ÃÎl.yþ7——ü•t.*p_`[?KS[ÈÊ[£«‹ „ê€`]*4…LcAK9¢=åá8#¤TÈšÙ¥úRù¸¡ÇQ®Ý¸Ë·7¸jHXzÃ,-ðM K¼[Ö53yæêÆ’n +èÐ…ÚZ{ŠÍª_ «íú¥äˆHÇi%àJ§ñþõÝ´ø>œ•=ë¯ÿt?ÛÀ5þÉCò~Æëë2>ý{á¿I§ÍÇpÆoGY¸7ñ2^?]†³,?äÓo«âJ|Å¥lZ¹¤lRÎÓŠSåEç%G6‘eATec|,UÐ…UÒ®T úö}_\4ìj»°â;bU¹n2º²ÏÅÇhP†~¢2fà‰ìÌaëH]&‰×=Uð6Xô‹§r æ¸Òk£]šÒÀø±-²dFSGè^øè³ý åK‰.©Ò „R íHe/®Í†o[dã©$%ˆ€.ðgVóÐïÃ$½ä;ÓÛø–Õ”Aú™–rO|ã§…­"EÕ¦'yü–·Ì7óÓïǵÏCô[>’¶8m¸ÅëÃoG¿Å ·ô2=ã’‡Œ×7¿”aŸág^Þ2¿¤1ŸùLË£¥™áô¥Ÿø™WK§ëJQÎ k¹+ä,¼¤Uq&ûcæÝú™oK³ÿܘËV«W•¯ÿÆ_/‹û¯Žå,—ê–»å áwËíªqpôà†Í{è 1Êá[¹Šú=ÚÜÎúî–hj¾6¬lH»ÉI®[ö§áÓxjùnÃÂ÷Ÿ‡h£kË>>©r~Z™üÑÚdÔÄSŽª&"wð0«ý´ä¥Í3ã¦eÙÂNƒ¹Øø>ŸK¯?‹þ¬´>ÝxžV?ußb<*ß Þv’çt93Ã@Ï9cºúê×”¯¼æ#tNf"îún4{lº.6´.ùb‘"svœÎ±1ÄêÆ€ÞÞnxæ#|ˇðÉc–'G ç46\”e:Ý ÄoÇ÷g”ÐKkãÛ0øºVôÁƒñ]šSÿ>ßÓ!9Kϲe|–¯>W@Ëš.á-w½ó*S|ÐZþZã²£¤lSFd8Ë`\ÊÛðvNX]Ë¿ÏÓâMë;&Fø;É»¥“2Ë¸Ž­xŒý†Lèùæ®_†Œ×oéµñUncþÛ´yÂ}¾[Ó6jŸvº*IDATrÏ‚„ þX«¢Å8?œ|g;Èg!3î|¬qy§Á̪§¡´¶ŽÛü\¸riʯ¼=òßÊ󽶬¼à:–…8òÊ*Ê û»évuæw1;<`“Ä5ÉþN9tà_ÇU¸K›w”ܸB‘æIö¹¦WˆFÆ%\¥Ÿø>ÕpM¯©Ã¿‰Ó·qãQŠ´l€çç=Æó“4j®-N?œ|e|ûœ²pÓ2Ë”¾Û„}œ×´:šãŽáÇ<uª„K?óÔ7N×O«ñcº-ì$| ÇÏP¹2/Ó2ÖOì6® ·é•–1cZm\敾t†Â7Íoñ&a¤7é’×;Y7âfzK3ã’v>W˜1ýŒÏ˜6½ gzæ—~âÏë'?Óý¶Œs54-6­ Oƒ·û7”žåJ_˜¶åÛ´öÙ°†ÁcV[lþzËÜú™ƒ¼ôûs\câ‘ÖÝ5 r»«ËJœk`—ÜpVʱ»¥l®q‡œ÷kxŸ»–ê—¶ÛÆ¥Ò©BofM¤I‡kºÓá&¹ ¶ñÔ]7…­ø‰+x × 7Áqžcø'ßâ÷iL>ñÇñã¸Ìhœ–1çû}˜úœ2ØÍ1­1^–§æ\ãÇpÛñ3¦“âÖºmiÃãz©CyÕ÷’â¤ëÙSê_È!z-…š>–ß~×ÂiŽË0Ù>ûÐãçÌkSC­Ì3ÿô;ˆÊd|F·¼7~ni'tK#fãÀ笼MKxéÕøôÇ)ó…*?³`‡ó]‰“e˜E¿•ÉùpY®ôC×7K^}þ'Ÿ=ó䇸x!"Nytùø¡O•çÅõeáêkÏÏîŽÙÝe¥-^a½míÔrÏ-ïà½7…Ä¡0®~öXu™^¸Dú ¼*›qÃÉgsÈÓæ–ø 7#|¦·¸-l›ÞÆ·ð³Â-¾p}™ÞÖ´6~ÖsK'áÒOZú}zÆéúñýç>ŒÏ³ègš¾Nzýp›G…š„ɸ!?i ¥e\K?áÛ8á2~'ã†àŒË2%Miµá„éã÷ñLO—ü´K…}šÂz¤qš“F‹?¶KèÓOþLÎpÂ$­íÊ*|ŸÄÑO¼,g›Ö†§é\^s#¸uÉgƵòÊ+áÓ/Ã}¿Ÿæ³ò±°ï}`$ŒÛwÅ7”—~ã/Qx¿æ¶{nWg[ aœ:ò¹òü\Ï9cŒ¨çp]fâHë–——ÌpîIØxæqyÝí<°ÛÁd¾C3qõã•~Ê‘t·ËþôÙ«†¾,ãõÙÉSÈÓgÝóyþüž^È”ÑÓKuLMú:e0ä2ÿ¬—|‚5®MÇ#%í6­Åoã3œ~ ·]8yláfÑ™•–4¶ƒYàÅ·Ùå›gÛ8s»²}Ÿ/ƒùòO¼,oß—3ãtýò¶°™Þ‡Mú¦·aåg?‹—Ý⺠Õñ:âÂÁãw—˯z™(»ævwæ°kÅÞËxO{Ø“ÀžfI`Òô΂ÜKÛ“Àžö$°'/ ì‡/›ªÞ+èžö$°'ù%°gæ—Õäžö$°'/ ì‡/›ªÞ+èžö$°'ù%ðÿ˜lÑš©fWIEND®B`‚uqfoundation-mystic-9a49031/docs/source/scripts.rst000066400000000000000000000020231455553066500224740ustar00rootroot00000000000000mystic scripts documentation ============================ mystic_collapse_plotter script ------------------------------ .. automodule:: _mystic_collapse_plotter .. :exclude-members: + mystic_log_reader script ------------------------ .. automodule:: _mystic_log_reader .. :exclude-members: + mystic_log_converter script --------------------------- .. automodule:: _mystic_log_converter .. :exclude-members: + mystic_model_plotter script --------------------------- .. automodule:: _mystic_model_plotter .. :exclude-members: + support_convergence script -------------------------- .. automodule:: _support_convergence .. :exclude-members: + support_hypercube script ------------------------ .. automodule:: _support_hypercube .. :exclude-members: + support_hypercube_measures script --------------------------------- .. automodule:: _support_hypercube_measures .. :exclude-members: + support_hypercube_scenario script --------------------------------- .. automodule:: _support_hypercube_scenario .. :exclude-members: + uqfoundation-mystic-9a49031/examples/000077500000000000000000000000001455553066500176445ustar00rootroot00000000000000uqfoundation-mystic-9a49031/examples/DATA/000077500000000000000000000000001455553066500203555ustar00rootroot00000000000000uqfoundation-mystic-9a49031/examples/DATA/g1.pts000066400000000000000000000033451455553066500214210ustar00rootroot00000000000000 262. 245. 266.83513745 248.29450275 263.40199734 250.96007992 262.66009467 253.8656062 260.71076883 256.29313193 258.57231173 258.42391508 257.10939722 260.80998926 257.71010781 264.9707483 254.20449457 265.80332664 252.64829905 268.49980729 250.74937148 271.08560053 248.96867201 274.40984288 246.68252141 277.62136801 243.89745666 280.65165286 239.94885 279.49074055 236.68801366 282.90480949 232.89041815 282.98379692 229.23275371 281.69159799 225.82072459 280.05851471 223.97802343 274.33530272 223.18018225 268.6417331 221.88369349 265.7170248 221.64147654 261.97842448 219.34192753 261.40551467 219.9895194 257.83380043 218.7782713 256.37097074 218.57600244 254.27902469 217.72670144 252.69283784 217.98222021 250.69479855 217.49371119 249.0672386 217.17012756 247.39904014 215.01643214 245.79003259 214.03410448 243.83251713 215.23788437 242.00283181 212.73043976 239.37809576 213.39795288 237.28276899 213.37455642 234.8220298 211.94939918 231.22426034 211.85290407 227.86797905 214.39982779 226.4303137 217.00526586 225.32313512 219.62940134 224.54307222 221.74347947 223.21060569 224.38081987 223.01201752 226.31667825 221.20994815 228.94090081 221.53927718 230.97188177 218.1703429 233.67789475 219.0019953 236.36247255 218.10355556 239.40885871 216.50887423 242.79352775 215.27334749 246.09528777 215.37393017 248.99253348 216.72945102 251.73997876 218.36744185 253.67547915 221.04430089 254.55142345 224.53933056 256.49141048 226.6932675 257.37195798 229.58080481 259.68006599 231.5265368 259.96939606 234.53145338 260.88476803 237.17636605 263.49805315 239.53512487 265.8893471 242.34113911 uqfoundation-mystic-9a49031/examples/DATA/g2.pts000066400000000000000000000033451455553066500214220ustar00rootroot00000000000000 308. 221. 306.86511246 223.69550225 307.44186418 226.56274126 308.66009467 229.8656062 306.71076883 232.29313193 309.8378071 237.30046831 313.0134246 243.58569894 309.06400312 245.48027212 305.77814825 247.54217536 300.51312895 246.84978802 297.28967379 247.92707151 293.60788364 247.7362208 290.14601713 247.09709441 287.22246837 247.01607101 284.24917857 245.63624325 281.76843004 245.93737467 279.29921146 244.98976647 277.03657663 243.80829064 274.54714973 244.37234314 272.2410504 243.7112021 270.42862276 241.91384082 268.8933857 239.99060607 267.64147654 237.97842448 266.67447957 235.91410424 265.25212569 234.50926361 263.17598407 233.56791503 263.71911369 230.79452606 261.91855716 229.5475976 262.09777553 227.36477485 260.5808367 225.78498658 259.21015757 223.96352017 259.01816184 221.87319391 257.03922016 219.6573947 257.28796529 217.37184903 252.92965061 213.84484914 252.84275607 210.8272864 252.20048909 207.28186626 255.40509908 205.63475191 258.64387178 204.47983694 262.5776247 204.49361218 265.61984034 204.3503451 269.65316896 206.271012 270.68504439 204.44006032 272.38481573 203.5928472 274.16067547 202.9195606 276.41647141 204.381988 277.98125452 203.11356193 279.77700406 203.00138136 281.66248069 202.07287243 283.17071028 204.29830559 285.67324371 201.82151451 287.9375326 201.55789167 290.30736677 201.56399757 293.30498407 201.02558139 296.50201477 200.90812332 297.00807458 204.06703219 297.83801521 206.48086733 300.03310684 207.78354698 300.36694889 210.31414987 301.33200391 212.40083671 302.08391659 214.57344354 304.58171096 216.44593739 304.91355243 218.92276493 uqfoundation-mystic-9a49031/examples/NOTES000066400000000000000000000100561455553066500204610ustar00rootroot00000000000000#!/usr/bin/env python #----------------------------------------------------------------------------- # Model Factory Interface: """NOTES: - forward model "forward_poly" calculates a function of x (w/ fixed a,b,c) - ForwardPolyFactory is a "function generator", allowing a,b,c to be set """ def ForwardPolyFactory(params): a,b,c = params def forward_poly(x): """ x should be a 1D (1 by N) numpy array """ return array((a*x*x + b*x + c)) return forward_poly #----------------------------------------------------------------------------- # Forward Model Invocation: """NOTES: - fwd is a instance of "forward_poly", built with chosen a,b,c - "data" converts a function of x into a function of a,b,c (w/ fixed x) [i.e. a functor] - same methodology is used in COST FUNCTION to produce "goodness of fit" """ def data(params): fwd = ForwardPolyFactory(params) x = (array([list(range(101))])-50.)[0] return fwd(x) #----------------------------------------------------------------------------- # Build "Measured" Data: (optional... use real measured data) """NOTES: - target is "target solution" for a,b,c - data is used to generate "measured data" (parameters a,b,c = target) """ target = [1., 2., 1.] datapts = data(target) #----------------------------------------------------------------------------- # Cost Function Generation: (optional... write your cost function explicitly) """NOTES: - F is an instance of Cost Function (goodness of fit) generator - myCost is an instance of a Cost Function - (default metric) calculates the LeastSquared difference for fwd(x) & datapts """ x = (array([list(range(101))])-50.)[0] F = CostFactory() F.addModel(ForwardPolyFactory,3,'poly') myCost = F.getCostFunction(evalpts=x, observations=datapts) #----------------------------------------------------------------------------- # Call to Solver: """NOTES: - solution is set of solved parameters a,b,c - stepmon holds a log of optimization steps """ solution, stepmon = de_solve(myCost) #----------------------------------------------------------------------------- ND = 3 NP = 80 MAX_GENERATIONS = ND*NP #----------------------------------------------------------------------------- # Standard "Solver" Configuration: """NOTES: - ND is number of parameters (a,b,c) - NP is size of trial population - MAX_GENERATIONS is maximum optimization iterations #----------------------------------------------------------------------------- - VerboseMonitor logs/prints "goodness of fit" and "best solution" at each step - minrange/maxrange provide box constraints (for parameters a,b,c) - SetRandomInitialPoints chooses an initial solution within box constraints - SetStrictRanges only allows trial solutions within box constraints - 'termination' conditions are to end when "no change" after 300 generations - enable_signal_handler allows "interrupt" signal to be caught - sigint_callback registers a user-provided function to the signal_handler """ def de_solve(CF): solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = VerboseMonitor(10,50) minrange = [-100., -100., -100.]; maxrange = [100., 100., 100.]; solver.SetRandomInitialPoints(min = minrange, max = maxrange) solver.SetStrictRanges(min = minrange, max = maxrange) solver.SetEvaluationLimits(maxiter=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) solver.Solve(CF, ChangeOverGeneration(generations=300),\ CrossProbability=0.5, ScalingFactor=0.5,\ sigint_callback=plot_sol) solution = solver.Solution() return solution, stepmon #----------------------------------------------------------------------------- # BONUS... the Callback Function: """NOTES: - called on "catch" of signal-interrupt - _MUST_ be a function of "params" - _only_one_ configuration parameter is (currently) allowed """ def plot_sol(params,linestyle='b-'): x = (array([list(range(101))])-50.)[0] d = data(params) pylab.plot(x,d,'%s'%linestyle,linewidth=2.0) pylab.axis(plotview) return # DONE uqfoundation-mystic-9a49031/examples/README000066400000000000000000000045071455553066500205320ustar00rootroot00000000000000Files in this directory demonstrate basic use of mystic. The most common case demonstrated is fitting a standard test function from mystic.models, however the use of constraints, the use of ensemble solvers, and the use of parallel computing is also demonstrated. == Notes on mystic examples == Dependencies: - Several of the examples require matplotlib to be installed. - For the examples that use matplotlib, see trac ticket #36 for more details. Other dependencies: - Examples with prefix "example" are part of the tutorial (TRY THESE FIRST). - All examples with prefix "example" should run without new dependencies. - All examples with prefix "test_" should run without new dependencies. - All examples with prefix "gplot_" requre gnuplot-py for visualization. Exceptions to the rule: - The following examples also require scipy to be installed: . test_lorentzian.py . test_mogi_anneal.py, Special examples: - All examples with prefix "rosetta_" require park to be installed. (tests on version park-1.2). Run with "--park" to execute with park. See "--help" for more options. ------------------------------------------------------------------------------- Notes on the "ffit" tests/examples: - test_ffit: The fitting problem whose exact solution is 8th order Chebyshev polynomial of the first kind. This example uses a Ctrl-C signal handler. Try ctrl-c as the differential_evolution strategy is running. - test_ffit2: The fitting problem whose exact solution is 16th order Chebyshev polynomial of the first kind. Also uses the signal_handler. - test_ffitB: Same as test_ffit.py, but uses DifferentialEvolutionSolver2 instead of DifferentialEvolutionSolver. - test_ffitC: Same as test_ffit.py, but uses scipy_optimize.fmin. - test_ffitD: Same as test_ffit.py, but uses scipy_optimize.diffev. Notes on the "mogi" tests/examples: - test_mogi.py: One mogi source with noise, comparison between DE and Conjugate Gradient, Simplex, and least squares (Levenberg Marquardt). CG / lsq don't work very well. lsq should work when bounds on the parameters are given, but minpack (wrapped by scipy) version doesn't seem to support bounds. - test_mogi_anneal.py: tests with scipy simulated annealing, but hasn't been tuned, so again, doesn't work at all. - test_mogi2.py: two mogi sources - test_mogi3.py: reimplements test_mogi # end of file uqfoundation-mystic-9a49031/examples/TEST_ffitPP.py000077500000000000000000000035441455553066500222560ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Same as test_ffit.py but uses DifferentialEvolutionSolver2 instead. Note: 1. MPIDifferentialEvolutionSolver is functionally identical to DifferentialEvolultionSolver2. 2. In DifferentialEvolutionSolver, as each trial vector is compared to its target, once the trial beats the target it enters the generation, replacing the old vector and immediately becoming available as candidates for creating difference vectors, and for mutations, etc. """ from test_ffit import * def main(): from mystic.solvers import DifferentialEvolutionSolver2 #from pathos.pools import ProcessPool as Pool from pathos.pools import ParallelPool as Pool solver = DifferentialEvolutionSolver2(ND, NP) solver.SetMapper(Pool().map) solver.SetRandomInitialPoints(min = [-100.0]*ND, max = [100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(VerboseMonitor(30)) solver.enable_signal_handler() strategy = Best1Exp #strategy = Best1Bin solver.Solve(ChebyshevCost, termination=VTR(0.01), strategy=strategy, \ CrossProbability=1.0, ScalingFactor=0.9 , \ sigint_callback=plot_solution) solution = solver.Solution() return solution if __name__ == '__main__': from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing solution = main() shutdown() # help multiprocessing shutdown all workers print_solution(solution) plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/TEST_ffitPP2.py000077500000000000000000000026621455553066500223400ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing the polynomial fitting problem of [1] using scipy's Nelder-Mead algorithm. Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from test_ffit import Chebyshev8, ChebyshevCost, plot_solution, print_solution if __name__ == '__main__': import random from mystic.solvers import fmin #from mystic._scipyoptimize import fmin from mystic.tools import random_seed random_seed(123) import pp import sys if len(sys.argv) > 1: tunnelport = sys.argv[1] ppservers = ("localhost:%s" % tunnelport,) else: ppservers = () myserver = pp.Server(ppservers=ppservers) trials = [] for trial in range(8): x = tuple([random.uniform(-100,100) + Chebyshev8[i] for i in range(9)]) trials.append(x) results = [myserver.submit(fmin,(ChebyshevCost,x),(),()) for x in trials] for solution in results: print_solution(solution()) #plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/TEST_ffitPP2_b.py000077500000000000000000000027131455553066500226360ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing the polynomial fitting problem of [1] using scipy's Nelder-Mead algorithm. Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from test_ffit import Chebyshev8, plot_solution, print_solution from TEST_ffitPP_b import ChebyshevCost if __name__ == '__main__': import random from mystic.solvers import fmin #from mystic._scipyoptimize import fmin from mystic.tools import random_seed random_seed(123) import pp import sys if len(sys.argv) > 1: tunnelport = sys.argv[1] ppservers = ("localhost:%s" % tunnelport,) else: ppservers = () myserver = pp.Server(ppservers=ppservers) trials = [] for trial in range(8): x = tuple([random.uniform(-100,100) + Chebyshev8[i] for i in range(9)]) trials.append(x) results = [myserver.submit(fmin,(ChebyshevCost,x),(),()) for x in trials] for solution in results: print_solution(solution()) #plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/TEST_ffitPP_b.py000077500000000000000000000057501455553066500225600ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Same as test_ffit.py but uses DifferentialEvolutionSolver2 instead. Note: 1. MPIDifferentialEvolutionSolver is functionally identical to DifferentialEvolultionSolver2. 2. In DifferentialEvolutionSolver, as each trial vector is compared to its target, once the trial beats the target it enters the generation, replacing the old vector and immediately becoming available as candidates for creating difference vectors, and for mutations, etc. """ from test_ffit import * # get the target coefficients and cost function from mystic.math import poly1d def ChebyshevCost(trial,M=61): """The costfunction for order-n Chebyshev fitting. M evaluation points between [-1, 1], and two end points""" from mystic.models.poly import chebyshev8coeffs as target from mystic.math import polyeval result=0.0 x=-1.0 dx = 2.0 / (M-1) for i in range(M): px = polyeval(trial, x) if px<-1 or px>1: result += (1 - px) * (1 - px) x += dx px = polyeval(trial, 1.2) - polyeval(target, 1.2) if px<0: result += px*px px = polyeval(trial, -1.2) - polyeval(target, -1.2) if px<0: result += px*px return result def main(servers,ncpus): from mystic.solvers import DifferentialEvolutionSolver2 from pathos.pools import ParallelPool as Pool solver = DifferentialEvolutionSolver2(ND, NP) solver.SetMapper(Pool(ncpus, servers=servers).map) solver.SetRandomInitialPoints(min = [-100.0]*ND, max = [100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(VerboseMonitor(30)) solver.enable_signal_handler() strategy = Best1Exp #strategy = Best1Bin solver.Solve(ChebyshevCost, termination=VTR(0.01), strategy=strategy, \ CrossProbability=1.0, ScalingFactor=0.9 , \ sigint_callback=plot_solution) solution = solver.Solution() return solution if __name__ == '__main__': from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing # number of local processors ncpus = 'autodetect' #XXX: None == autodetect; otherwise select n=0,1,2,... import sys servers = [] # get tunneled ports from sys.argv for i in range(1,len(sys.argv)): tunnelport = int(sys.argv[i]) servers.append("localhost:%s" % tunnelport) servers = tuple(servers) import time t1 = time.time() solution = main(servers,ncpus) # solve t2 = time.time() shutdown() # help multiprocessing shutdown all workers print_solution(solution) print("Finished in %0.3f s" % ((t2-t1))) plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/buckshot_example06.py000077500000000000000000000064611455553066500237330ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with Powell's method. - Uses BuckshotSolver to provide 'pseudo-global' optimization - Plot of fitting to Chebyshev polynomial. Demonstrates: - standard models - minimal solver interface """ # the Buckshot solver from mystic.solvers import BuckshotSolver # Powell's Directonal solver from mystic.solvers import PowellDirectionalSolver # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # if available, use a pathos worker pool try: from pathos.pools import ProcessPool as Pool #from pathos.pools import ParallelPool as Pool except ImportError: from mystic.pools import SerialPool as Pool # tools from mystic.termination import NormalizedChangeOverGeneration as NCOG from mystic.math import poly1d from mystic.monitors import VerboseLoggingMonitor from mystic.tools import getch import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing print("Powell's Method") print("===============") # dimensional information from mystic.tools import random_seed random_seed(123) ndim = 9 npts = 8 # draw frame and exact coefficients plot_exact() # configure monitor stepmon = VerboseLoggingMonitor(1,2) # use buckshot-Powell to solve 8th-order Chebyshev coefficients solver = BuckshotSolver(ndim, npts) solver.SetNestedSolver(PowellDirectionalSolver) solver.SetMapper(Pool().map) solver.SetGenerationMonitor(stepmon) solver.SetStrictRanges(min=[-300]*ndim, max=[300]*ndim) solver.Solve(chebyshev8cost, NCOG(1e-4), disp=1) solution = solver.Solution() shutdown() # help multiprocessing shutdown all workers # write 'convergence' support file from mystic.munge import write_support_file write_support_file(solver._stepmon) #XXX: only saves the 'best' # use pretty print for polynomials print(poly1d(solution)) # compare solution with actual 8th-order Chebyshev coefficients print("\nActual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/cg_rosenbrock.py000077500000000000000000000030301455553066500230350ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ See test_rosenbrock.py. This one uses Scipy's CG (Polak-Ribiere) plus viz via matplotlib cg works well on this problem. """ import matplotlib.pyplot as plt from test_rosenbrock import * from numpy import log from mystic._scipyoptimize import fmin_cg import numpy from mystic.tools import getch def show(): import matplotlib.pyplot as plt, Image plt.savefig('cg_rosenbrock_out',dpi=72) im = Image.open('cg_rosenbrock_out.png') im.show() return def draw_contour(): import numpy x, y = numpy.mgrid[-1:2.1:0.02,-0.1:2.1:0.02] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = rosen([xx,yy]) plt.contourf(x,y,log(c*20+1)+2,60) def run_once(x0,x1,color='w'): sol = fmin_cg(rosen, [x0, x1], retall = True, full_output=1) xy = numpy.asarray(sol[-1]) plt.plot(xy[:,0],xy[:,1],color+'-',linewidth=2) plt.plot(xy[:,0],xy[:,1],color+'o',markersize=6) return sol if __name__ == '__main__': draw_contour() run_once(0.3,0.3,'k') run_once(0.5,1.3,'y') run_once(1.8,0.2,'w') try: show() except ImportError: plt.show() # end of file uqfoundation-mystic-9a49031/examples/constraint1_example01.py000077500000000000000000000023531455553066500243450ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Powell's method. Demonstrates: - standard models - minimal solver interface - parameter constraints solver - customized monitors """ # Powell's Directonal solver from mystic.solvers import fmin_powell # Rosenbrock function from mystic.models import rosen # tools from mystic.monitors import VerboseMonitor if __name__ == '__main__': print("Powell's Method") print("===============") # initial guess x0 = [0.8,1.2,0.7] # define constraints function def constraints(x): # constrain the last x_i to be the same value as the first x_i x[-1] = x[0] return x # configure monitor stepmon = VerboseMonitor(1) # use Powell's method to minimize the Rosenbrock function solution = fmin_powell(rosen,x0,constraints=constraints,itermon=stepmon) print(solution) # end of file uqfoundation-mystic-9a49031/examples/constraint2_example01.py000077500000000000000000000033431455553066500243460ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Powell's method. Demonstrates: - standard models - minimal solver interface - parameter constraints solver and constraints factory - statistical parameter constraints - customized monitors """ # Powell's Directonal solver from mystic.solvers import fmin_powell # Rosenbrock function from mystic.models import rosen # tools from mystic.monitors import VerboseMonitor from mystic.math.measures import mean, impose_mean from mystic.math import almostEqual if __name__ == '__main__': print("Powell's Method") print("===============") # initial guess x0 = [0.8,1.2,0.7] # define constraints factory function def constraints_factory(target): # define constraints function def constraints(x): # constrain the last x_i to be the same value as the first x_i x[-1] = x[0] # constrain x such that mean(x) == target if not almostEqual(mean(x), target): x = impose_mean(target, x) return x return constraints # configure constraints function constraints = constraints_factory(1.0) # configure monitor stepmon = VerboseMonitor(1) # use Powell's method to minimize the Rosenbrock function solution = fmin_powell(rosen,x0,constraints=constraints,itermon=stepmon) print(solution) # end of file uqfoundation-mystic-9a49031/examples/constraint3_example01.py000077500000000000000000000027771455553066500243610ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Powell's method. Demonstrates: - standard models - minimal solver interface - parameter constraints solver and constraints factory decorator - statistical parameter constraints - customized monitors """ # Powell's Directonal solver from mystic.solvers import fmin_powell # Rosenbrock function from mystic.models import rosen # tools from mystic.monitors import VerboseMonitor from mystic.math.measures import mean, impose_mean from mystic.math import almostEqual if __name__ == '__main__': print("Powell's Method") print("===============") # initial guess x0 = [0.8,1.2,0.7] # use the mean constraints factory decorator from mystic.constraints import with_mean # define constraints function @with_mean(1.0) def constraints(x): # constrain the last x_i to be the same value as the first x_i x[-1] = x[0] return x # configure monitor stepmon = VerboseMonitor(1) # use Powell's method to minimize the Rosenbrock function solution = fmin_powell(rosen,x0,constraints=constraints,itermon=stepmon) print(solution) # end of file uqfoundation-mystic-9a49031/examples/example01.py000077500000000000000000000015611455553066500220200ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Powell's method. Demonstrates: - standard models - minimal solver interface """ # Powell's Directonal solver from mystic.solvers import fmin_powell # Rosenbrock function from mystic.models import rosen if __name__ == '__main__': print("Powell's Method") print("===============") # initial guess x0 = [0.8,1.2,0.7] # use Powell's method to minimize the Rosenbrock function solution = fmin_powell(rosen,x0) print(solution) # end of file uqfoundation-mystic-9a49031/examples/example02.py000077500000000000000000000027051455553066500220220ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Nelder-Mead. - Plot of Rosenbrock's function minimum. Demonstrates: - standard models - minimal solver interface """ # Nelder-Mead solver from mystic.solvers import fmin # Rosenbrock function from mystic.models import rosen # tools import matplotlib.pyplot as plt if __name__ == '__main__': print("Nelder-Mead Simplex") print("===================") # initial guess x0 = [0.8,1.2,0.7] # use Nelder-Mead to minimize the Rosenbrock function solution = fmin(rosen,x0) print(solution) # plot the Rosenbrock function (one plot per axis) x = [0.01*i for i in range(200)] plt.plot(x,[rosen([i,1.,1.]) for i in x]) plt.plot(x,[rosen([1.,i,1.]) for i in x]) plt.plot(x,[rosen([1.,1.,i]) for i in x]) # plot the solved minimum (for x) plt.plot([solution[0]],[rosen(solution)],'bo') # draw the plot plt.title("minimium of Rosenbrock's function") plt.xlabel("x, y, z") plt.ylabel("f(i) = Rosenbrock's function") plt.legend(["f(x,1,1)","f(1,y,1)","f(1,1,z)"]) plt.show() # end of file uqfoundation-mystic-9a49031/examples/example03.py000077500000000000000000000024341455553066500220220ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Nelder-Mead. - Plot of parameter convergence to function minimum. Demonstrates: - standard models - minimal solver interface - parameter trajectories using retall """ # Nelder-Mead solver from mystic.solvers import fmin # Rosenbrock function from mystic.models import rosen # tools import matplotlib.pyplot as plt if __name__ == '__main__': # initial guess x0 = [0.8,1.2,0.7] # use Nelder-Mead to minimize the Rosenbrock function solution = fmin(rosen,x0,disp=0,retall=1) allvecs = solution[-1] # plot the parameter trajectories plt.plot([i[0] for i in allvecs]) plt.plot([i[1] for i in allvecs]) plt.plot([i[2] for i in allvecs]) # draw the plot plt.title("Rosenbrock parameter convergence") plt.xlabel("Nelder-Mead solver iterations") plt.ylabel("parameter value") plt.legend(["x", "y", "z"]) plt.show() # end of file uqfoundation-mystic-9a49031/examples/example04.py000077500000000000000000000035641455553066500220300ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Nelder-Mead. - Dynamic plot of parameter convergence to function minimum. Demonstrates: - standard models - minimal solver interface - parameter trajectories using callback - solver interactivity """ # Nelder-Mead solver from mystic.solvers import fmin # Rosenbrock function from mystic.models import rosen # tools from mystic.tools import getch import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_frame(): plt.title("Rosenbrock parameter convergence") plt.xlabel("Nelder-Mead solver iterations") plt.ylabel("parameter value") plt.draw() plt.pause(0.001) return iter = 0 step, xval, yval, zval = [], [], [], [] # plot the parameter trajectories def plot_params(params): global iter, step, xval, yval, zval step.append(iter) xval.append(params[0]) yval.append(params[1]) zval.append(params[2]) plt.plot(step,xval,'b-') plt.plot(step,yval,'g-') plt.plot(step,zval,'r-') plt.legend(["x", "y", "z"]) plt.draw() plt.pause(0.001) iter += 1 return if __name__ == '__main__': # initial guess x0 = [0.8,1.2,0.7] # suggest that the user interacts with the solver print("NOTE: while solver is running, press 'Ctrl-C' in console window") getch() plot_frame() # use Nelder-Mead to minimize the Rosenbrock function solution = fmin(rosen,x0,disp=1,callback=plot_params,handler=True) print(solution) # don't exit until user is ready getch() # end of file uqfoundation-mystic-9a49031/examples/example05.py000077500000000000000000000022771455553066500220310ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Minimize Rosenbrock's Function with Powell's method. - Dynamic print of parameter convergence to function minimum. Demonstrates: - standard models - minimal solver interface - parameter trajectories using callback """ # Powell's Directonal solver from mystic.solvers import fmin_powell # Rosenbrock function from mystic.models import rosen iter = 0 # plot the parameter trajectories def print_params(params): global iter from numpy import asarray print("Generation %d has best fit parameters: %s" % (iter,asarray(params))) iter += 1 return if __name__ == '__main__': # initial guess x0 = [0.8,1.2,0.7] print_params(x0) # use Powell's method to minimize the Rosenbrock function solution = fmin_powell(rosen,x0,disp=1,callback=print_params,handler=True) print(solution) # end of file uqfoundation-mystic-9a49031/examples/example06.py000077500000000000000000000044131455553066500220240ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with Powell's method. - Plot of fitting to Chebyshev polynomial. Demonstrates: - standard models - minimal solver interface """ # Powell's Directonal solver from mystic.solvers import fmin_powell # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # tools from mystic.math import poly1d from mystic.tools import getch import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Powell's Method") print("===============") # initial guess import random from mystic.tools import random_seed random_seed(123) ndim = 9 x0 = [random.uniform(-100,100) for i in range(ndim)] # draw frame and exact coefficients plot_exact() # use Powell's method to solve 8th-order Chebyshev coefficients solution = fmin_powell(chebyshev8cost,x0) # use pretty print for polynomials print(poly1d(solution)) # compare solution with actual 8th-order Chebyshev coefficients print("\nActual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() #XXX: or plt.show() ? # end of file uqfoundation-mystic-9a49031/examples/example07.py000077500000000000000000000043471455553066500220330ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with DE. - Plot of fitting to Chebyshev polynomial. Demonstrates: - standard models - minimal solver interface - built-in random initial guess """ # Differential Evolution solver from mystic.solvers import diffev # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # tools from mystic.math import poly1d from mystic.tools import getch, random_seed import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Differential Evolution") print("======================") # set range for random initial guess ndim = 9 x0 = [(-100,100)]*ndim random_seed(321) # draw frame and exact coefficients plot_exact() # use DE to solve 8th-order Chebyshev coefficients npop = 10*ndim solution = diffev(chebyshev8cost,x0,npop) # use pretty print for polynomials print(poly1d(solution)) # compare solution with actual 8th-order Chebyshev coefficients print("\nActual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/example08.py000077500000000000000000000062351455553066500220320ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with DE. - Callable plot of fitting to Chebyshev polynomial. - Monitor Chi-Squared for Chebyshev polynomial. Demonstrates: - standard models - expanded solver interface - built-in random initial guess - customized monitors and termination conditions - customized DE mutation strategies - use of monitor to retrieve results information """ # Differential Evolution solver from mystic.solvers import DifferentialEvolutionSolver2 # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # tools from mystic.termination import VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor from mystic.tools import getch, random_seed from mystic.math import poly1d import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Differential Evolution") print("======================") # set range for random initial guess ndim = 9 x0 = [(-100,100)]*ndim random_seed(123) # draw frame and exact coefficients plot_exact() # configure monitor stepmon = VerboseMonitor(50) # use DE to solve 8th-order Chebyshev coefficients npop = 10*ndim solver = DifferentialEvolutionSolver2(ndim,npop) solver.SetRandomInitialPoints(min=[-100]*ndim, max=[100]*ndim) solver.SetGenerationMonitor(stepmon) solver.enable_signal_handler() solver.Solve(chebyshev8cost, termination=VTR(0.01), strategy=Best1Exp, \ CrossProbability=1.0, ScalingFactor=0.9, \ sigint_callback=plot_solution) solution = solver.Solution() # use monitor to retrieve results information iterations = len(stepmon) cost = stepmon.y[-1] print("Generation %d has best Chi-Squared: %s" % (iterations, cost)) # use pretty print for polynomials print(poly1d(solution)) # compare solution with actual 8th-order Chebyshev coefficients print("\nActual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/example09.py000077500000000000000000000066541455553066500220400ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with DE. - Callable plot of fitting to Chebyshev polynomial. - Monitor Chi-Squared for Chebyshev polynomial. - Impact of mutation and crossover coefficients Demonstrates: - standard models - expanded solver interface - built-in random initial guess - solver interactivity - customized monitors and termination conditions - customized DE mutation strategies - use of monitor to retrieve results information """ # Differential Evolution solver from mystic.solvers import DifferentialEvolutionSolver2 # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # tools from mystic.termination import VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor from mystic.tools import getch, random_seed from mystic.math import poly1d import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Differential Evolution") print("======================") # set range for random initial guess ndim = 9 x0 = [(-100,100)]*ndim random_seed(123) # suggest that the user interacts with the solver print("NOTE: while solver is running, press 'Ctrl-C' in console window") getch() # draw frame and exact coefficients plot_exact() # configure monitor stepmon = VerboseMonitor(50) # use DE to solve 8th-order Chebyshev coefficients npop = 10*ndim solver = DifferentialEvolutionSolver2(ndim,npop) solver.SetRandomInitialPoints(min=[-100]*ndim, max=[100]*ndim) solver.SetEvaluationLimits(generations=999) solver.SetGenerationMonitor(stepmon) solver.enable_signal_handler() solver.Solve(chebyshev8cost, termination=VTR(0.01), strategy=Best1Exp, \ CrossProbability=0.8, ScalingFactor=0.5, \ sigint_callback=plot_solution) solution = solver.Solution() # use monitor to retrieve results information iterations = len(stepmon) cost = stepmon.y[-1] print("Generation %d has best Chi-Squared: %s" % (iterations, cost)) # use pretty print for polynomials print(poly1d(solution)) # compare solution with actual 8th-order Chebyshev coefficients print("\nActual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/example10.py000077500000000000000000000060621455553066500220210ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with DE. - Plot (x2) of convergence to Chebyshev polynomial. - Monitor (x2) Chi-Squared for Chebyshev polynomial. Demonstrates: - standard models - expanded solver interface - built-in random initial guess - customized monitors and termination conditions - customized DE mutation strategies - use of solver members to retrieve results information """ # Differential Evolution solver from mystic.solvers import DifferentialEvolutionSolver2 # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # tools from mystic.termination import VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor, Monitor from mystic.tools import getch, random_seed from mystic.math import poly1d import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_frame(label=None): plt.close() plt.title("8th-order Chebyshev coefficient convergence") plt.xlabel("Differential Evolution %s" % label) plt.ylabel("Chi-Squared") plt.draw() plt.pause(0.001) return # plot the polynomial trajectories def plot_params(monitor): x = list(range(len(monitor))) y = monitor.y plt.plot(x,y,'b-') plt.axis([1,0.5*x[-1],0,y[1]])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Differential Evolution") print("======================") # set range for random initial guess ndim = 9 x0 = [(-100,100)]*ndim random_seed(123) # configure monitors stepmon = VerboseMonitor(50) evalmon = Monitor() # use DE to solve 8th-order Chebyshev coefficients npop = 10*ndim solver = DifferentialEvolutionSolver2(ndim,npop) solver.SetRandomInitialPoints(min=[-100]*ndim, max=[100]*ndim) solver.SetEvaluationLimits(generations=999) solver.SetEvaluationMonitor(evalmon) solver.SetGenerationMonitor(stepmon) solver.enable_signal_handler() solver.Solve(chebyshev8cost, termination=VTR(0.01), strategy=Best1Exp, \ CrossProbability=1.0, ScalingFactor=0.9) solution = solver.bestSolution # get solved coefficients and Chi-Squared (from solver members) iterations = solver.generations cost = solver.bestEnergy print("Generation %d has best Chi-Squared: %s" % (iterations, cost)) print("Solved Coefficients:\n %s\n" % poly1d(solver.bestSolution)) # plot convergence of coefficients per iteration plot_frame('iterations') plot_params(stepmon) getch() # plot convergence of coefficients per function call plot_frame('function calls') plot_params(evalmon) getch() # end of file uqfoundation-mystic-9a49031/examples/example11.py000077500000000000000000000104761455553066500220260ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with Nelder-Mead. - Callable plot of fitting to Chebyshev polynomial. - Plot (x2) of convergence to Chebyshev polynomial. - Monitor (x2) Chi-Squared for Chebyshev polynomial. Demonstrates: - standard models - expanded solver interface - parameter bounds constraints - solver interactivity - customized monitors and termination conditions """ # Nelder-Mead Simplex solver from mystic.solvers import NelderMeadSimplexSolver # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # tools from mystic.termination import CandidateRelativeTolerance as CRT from mystic.monitors import VerboseMonitor, Monitor from mystic.tools import getch from mystic.math import poly1d import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_frame(label=None): plt.close() plt.title("8th-order Chebyshev coefficient convergence") plt.xlabel("Nelder-Mead Simplex Solver %s" % label) plt.ylabel("Chi-Squared") plt.draw() plt.pause(0.001) return # plot the polynomial trajectories def plot_params(monitor): x = list(range(len(monitor))) y = monitor.y plt.plot(x,y,'b-') plt.axis([1,0.5*x[-1],0,y[1]])#,'k-') plt.draw() plt.pause(0.001) return # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Nelder-Mead Simplex") print("===================") # initial guess import random from mystic.tools import random_seed random_seed(123) ndim = 9 x0 = [random.uniform(-5,5) + chebyshev8coeffs[i] for i in range(ndim)] # suggest that the user interacts with the solver print("NOTE: while solver is running, press 'Ctrl-C' in console window") getch() # draw frame and exact coefficients plot_exact() # select parameter bounds constraints from numpy import inf min_bounds = [ 0,-1,-300,-1, 0,-1,-100,-inf,-inf] max_bounds = [200, 1, 0, 1,200, 1, 0, inf, inf] # configure monitors stepmon = VerboseMonitor(100) evalmon = Monitor() # use Nelder-Mead to solve 8th-order Chebyshev coefficients solver = NelderMeadSimplexSolver(ndim) solver.SetInitialPoints(x0) solver.SetEvaluationLimits(generations=999) solver.SetEvaluationMonitor(evalmon) solver.SetGenerationMonitor(stepmon) solver.SetStrictRanges(min_bounds,max_bounds) solver.enable_signal_handler() solver.Solve(chebyshev8cost, termination=CRT(1e-4,1e-4), \ sigint_callback=plot_solution) solution = solver.bestSolution # get solved coefficients and Chi-Squared (from solver members) iterations = solver.generations cost = solver.bestEnergy print("Generation %d has best Chi-Squared: %s" % (iterations, cost)) print("Solved Coefficients:\n %s\n" % poly1d(solver.bestSolution)) # compare solution with actual 8th-order Chebyshev coefficients print("Actual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() # plot convergence of coefficients per iteration plot_frame('iterations') plot_params(stepmon) getch() # plot convergence of coefficients per function call plot_frame('function calls') plot_params(evalmon) getch() # end of file uqfoundation-mystic-9a49031/examples/example12.py000077500000000000000000000062471455553066500220300ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 5th-order polynomial coefficients with Powell's method. - Plot of fitting to 5th-order polynomial. Demonstrates: - model and cost function construction - minimal solver interface """ # Powell's Directonal solver from mystic.solvers import fmin_powell # cost function factory from mystic.forward_model import CostFactory # tools from mystic.tools import getch, random_seed random_seed(123) import matplotlib.pyplot as plt plt.ion() # build the forward model def ForwardPolyFactory(coeff): """generate a 1-D polynomial instance from a list of coefficients""" from numpy import poly1d return poly1d(coeff) # build the cost function def PolyCostFactory(evalpts,datapts,ndim): """generate a cost function instance from evaluation points and data""" from numpy import sum F = CostFactory() F.addModel(ForwardPolyFactory,ndim,"noisy_polynomial") return F.getCostFunction(evalpts=evalpts,observations=datapts, \ metric=lambda x: sum(x*x),sigma=1000.) # 'data' generators def data(params): """generate 'data' from polynomial coefficients""" from numpy import array x = 0.1*(array([list(range(101))])-50.)[0] fwd = ForwardPolyFactory(params) return x,fwd(x) def noisy_data(params): """generate noisy data from polynomial coefficients""" from numpy import random x,y = data(params) y = [random.normal(0,1) + i for i in y] return x,y # draw the plot def plot_frame(label=None): plt.close() plt.title("fitting noisy 5th-order polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") plt.draw() plt.pause(0.001) return # plot the polynomial def plot_data(evalpts,datapts,style='k.'): plt.plot(evalpts,datapts,'%s' % style) plt.axis([0,5,0,50])#,'k-') plt.draw() plt.pause(0.001) return def plot_solution(params,style='b-'): x,y = data(params) plot_data(x,y,style) plt.legend(["Data","Fitted"]) plt.draw() plt.pause(0.001) return if __name__ == '__main__': print("Powell's Method") print("===============") # target and initial guess target = [-1.,4.,-5.,20.,5.] x0 = [-1.,2.,-3.,10.,5.] # generate 'observed' data x,datapts = noisy_data(target) # plot observed data plot_frame() plot_data(x,datapts) # generate cost function costfunction = PolyCostFactory(x,datapts,len(target)) # use Powell's method to solve 5th-order polynomial coefficients solution = fmin_powell(costfunction,x0) # compare solution with actual target 5th-order polynomial coefficients print("\nSolved Coefficients:\n %s\n" % ForwardPolyFactory(solution)) print("Target Coefficients:\n %s\n" % ForwardPolyFactory(target)) # plot solution versus target coefficients plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/ezmap_desolve.py000077500000000000000000000053341455553066500230630ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE # # Adapted from parallel_desolve.py __doc__ = """ # Tests MPI version of Storn and Price's Polynomial 'Fitting' Problem, # using a single solver with the population launched in parallel. # This can be much slower, due to overhead of repeatedly setting up MPI. # # Exact answer: Chebyshev Polynomial of the first kind. T8(x) # Reference: # # [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient # Heuristic for Global Optimization over Continuous Spaces. Journal of Global # Optimization 11: 341-359, 1997. # To run in parallel: (must install 'pyina') python ezmap_desolve.py """ try: from pyina.launchers import Mpi as Pool except: print(__doc__) from mystic.solvers import DifferentialEvolutionSolver2 from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor from mystic.tools import random_seed from mystic.math import poly1d #from raw_chebyshev8 import chebyshev8cost as ChebyshevCost # no globals #from raw_chebyshev8b import chebyshev8cost as ChebyshevCost # use globals from mystic.models.poly import chebyshev8cost as ChebyshevCost # no helper ND = 9 NP = 40 MAX_GENERATIONS = NP*NP NNODES = NP//5 seed = 321 if __name__=='__main__': def print_solution(func): print(poly1d(func)) return psow = VerboseMonitor(10) ssow = VerboseMonitor(10) random_seed(seed) print("first sequential...") solver = DifferentialEvolutionSolver2(ND,NP) #XXX: sequential solver.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(ssow) solver.Solve(ChebyshevCost, VTR(0.01), strategy=Best1Exp, \ CrossProbability=1.0, ScalingFactor=0.9, disp=1) print("") print_solution( solver.bestSolution ) #''' random_seed(seed) print("\n and now parallel...") solver2 = DifferentialEvolutionSolver2(ND,NP) #XXX: parallel solver2.SetMapper(Pool(NNODES).map) solver2.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver2.SetEvaluationLimits(generations=MAX_GENERATIONS) solver2.SetGenerationMonitor(psow) solver2.Solve(ChebyshevCost, VTR(0.01), strategy=Best1Exp, \ CrossProbability=1.0, ScalingFactor=0.9, disp=1) print("") print_solution( solver2.bestSolution ) #''' # end of file uqfoundation-mystic-9a49031/examples/ezmap_desolve_rosen.py000077500000000000000000000053521455553066500242710ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE # # Adapted from parallel_desolve.py __doc__ = """ # Tests MPI version of Storn and Price's Polynomial 'Fitting' Problem, # using a single solver with the population launched in parallel. # This can be much slower, due to overhead of repeatedly setting up MPI. # # Exact answer: [1,1,1] # Reference: # # [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient # Heuristic for Global Optimization over Continuous Spaces. Journal of Global # Optimization 11: 341-359, 1997. # To run in parallel: (must install 'pyina') python ezmap_desolve_rosen.py """ try: from pyina.launchers import Mpi as Pool # from pyina.launchers import TorqueMpi as Pool except: print(__doc__) from mystic.solvers import DifferentialEvolutionSolver2 from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor from mystic.tools import random_seed #from raw_rosen import rosen as myCost # with a helper function from mystic.models import rosen as myCost # without a helper function ND = 3 NP = 20 MAX_GENERATIONS = NP*NP NNODES = "5:ppn=4" QUEUE = "weekdayQ" TIMELIMIT = "00:30:00" TOL = 0.01 CROSS = 0.9 SCALE = 0.8 seed = 100 if __name__=='__main__': def print_solution(func): print(func) return psow = VerboseMonitor(10) ssow = VerboseMonitor(10) random_seed(seed) print("first sequential...") solver = DifferentialEvolutionSolver2(ND,NP) #XXX: sequential solver.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(ssow) solver.Solve(myCost, VTR(TOL), strategy=Best1Exp, \ CrossProbability=CROSS, ScalingFactor=SCALE, disp=1) print("") print_solution( solver.bestSolution ) random_seed(seed) print("\n and now parallel...") solver2 = DifferentialEvolutionSolver2(ND,NP) #XXX: parallel solver2.SetMapper(Pool(NNODES).map) # solver2.SetMapper(Pool(NNODES, queue=QUEUE, timelimit=TIMELIMIT).map) solver2.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver2.SetEvaluationLimits(generations=MAX_GENERATIONS) solver2.SetGenerationMonitor(psow) solver2.Solve(myCost, VTR(TOL), strategy=Best1Exp, \ CrossProbability=CROSS, ScalingFactor=SCALE, disp=1) print("") print_solution( solver2.bestSolution ) # end of file uqfoundation-mystic-9a49031/examples/forward_model.py000077500000000000000000000021231455553066500230430ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ forward_model example """ from mystic.forward_model import * if __name__=='__main__': from mystic.models import mogi; ForwardMogiFactory = mogi.ForwardFactory import random from numpy import * xstations = array([random.uniform(-500,500) for i in range(300)])+1250. ystations = 0*xstations - 200. stations = array((xstations, ystations)) A = CostFactory() A.addModel(ForwardMogiFactory, 4, 'mogi1', outputFilter=PickComponent(2)) A.addModel(ForwardMogiFactory, 4, 'mogi2', outputFilter=PickComponent(2)) fe = A.getForwardEvaluator(stations) p = [random.random() for i in range(8)] c = fe(p) print(len(c)) print(sum(c).shape) print(A) # End of file uqfoundation-mystic-9a49031/examples/gplot_test_ffit.py000077500000000000000000000037421455553066500234230ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Adapted from DETest.py by Patrick Hung Sets up Storn and Price's Polynomial 'Fitting' Problem. Exact answer: Chebyshev Polynomial of the first kind. T8(x) Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from test_ffit import * def plot_solution(func): try: import Gnuplot, numpy g = Gnuplot.Gnuplot(debug = 1) x = numpy.arange(-1.2, 1.2001, 0.01) x2 = numpy.array([-1.0, 1.0]) p = poly1d(func) chebyshev = poly1d(Chebyshev8) y = p(x) exact = chebyshev(x) # g('set style line lw 5') g('set xrange[-1.4:1.4]') g('set yrange[-2:8]') g.plot(Gnuplot.Data(x, y, with_='line', inline=1, title="Storn and Price's Function Fitting problem"), \ Gnuplot.Data(x, exact, with_='l 4 4'), \ Gnuplot.Data(x, 0*x-1, with_='l 2 2'), \ Gnuplot.Data(x2, 0*x2+1, with_='l 2 2'), \ Gnuplot.Data([-1.2, -1.2], [-1, 10], with_='l 2 2'), \ Gnuplot.Data([1.2, 1.2], [-1, 10], with_='l 2 2'), \ Gnuplot.Data([-1.0, -1.0], [1, 10], with_='l 2 2'), \ Gnuplot.Data([1.0, 1.0], [1, 10], with_='l 2 2') \ ) getch('Press any key to exit plot') except ImportError: print("Install Gnuplot and Gnuplot.py for visualization") pass if __name__ == '__main__': solution = main() print_solution(solution) plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/lattice_example06.py000077500000000000000000000062471455553066500235400ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example: - Solve 8th-order Chebyshev polynomial coefficients with Powell's method. - Uses LatticeSolver to provide 'pseudo-global' optimization - Plot of fitting to Chebyshev polynomial. Demonstrates: - standard models - minimal solver interface """ # the Lattice solver from mystic.solvers import LatticeSolver # Powell's Directonal solver from mystic.solvers import PowellDirectionalSolver # Chebyshev polynomial and cost function from mystic.models.poly import chebyshev8, chebyshev8cost from mystic.models.poly import chebyshev8coeffs # if available, use a pathos worker pool try: from pathos.pools import ProcessPool as Pool #from pathos.pools import ParallelPool as Pool except ImportError: from mystic.pools import SerialPool as Pool # tools from mystic.termination import NormalizedChangeOverGeneration as NCOG from mystic.math import poly1d from mystic.monitors import VerboseMonitor from mystic.tools import getch import matplotlib.pyplot as plt plt.ion() # draw the plot def plot_exact(): plt.title("fitting 8th-order Chebyshev polynomial coefficients") plt.xlabel("x") plt.ylabel("f(x)") import numpy x = numpy.arange(-1.2, 1.2001, 0.01) exact = chebyshev8(x) plt.plot(x,exact,'b-') plt.legend(["Exact"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return # plot the polynomial def plot_solution(params,style='y-'): import numpy x = numpy.arange(-1.2, 1.2001, 0.01) f = poly1d(params) y = f(x) plt.plot(x,y,style) plt.legend(["Exact","Fitted"]) plt.axis([-1.4,1.4,-2,8])#,'k-') plt.draw() plt.pause(0.001) return if __name__ == '__main__': from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing print("Powell's Method") print("===============") # dimensional information from mystic.tools import random_seed random_seed(123) ndim = 9 nbins = 8 #[2,1,2,1,2,1,2,1,1] # draw frame and exact coefficients plot_exact() # configure monitor stepmon = VerboseMonitor(1) # use lattice-Powell to solve 8th-order Chebyshev coefficients solver = LatticeSolver(ndim, nbins) solver.SetNestedSolver(PowellDirectionalSolver) solver.SetMapper(Pool().map) solver.SetGenerationMonitor(stepmon) solver.SetStrictRanges(min=[-300]*ndim, max=[300]*ndim) solver.Solve(chebyshev8cost, NCOG(1e-4), disp='all', step=False) solution = solver.Solution() shutdown() # help multiprocessing shutdown all workers # use pretty print for polynomials print(poly1d(solution)) # compare solution with actual 8th-order Chebyshev coefficients print("\nActual Coefficients:\n %s\n" % poly1d(chebyshev8coeffs)) # plot solution versus exact coefficients plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/metropolis.py000077500000000000000000000020521455553066500224150ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ exercises the Metropolis-Hastings algorithm """ from mystic.metropolis import metropolis_hastings from numpy import mean, cov if __name__=='__main__': from numpy import random import time def prop(x): return random.normal(x, 1) def target(x): if x <0 or x > 3: return 0 return 1. + 0.31831/(0.0025 + (x-1)**2) + 45. *x - 10. * x**2 t1 = time.time() x = [1] for i in range(100000): x.append(metropolis_hastings(prop, target, x[-1]) ) t2 = time.time() print('Metropolis took %0.3f ms' % ((t2-t1)*1000 )) import matplotlib.pyplot as plt plt.hist(x,20) plt.show() # end of file uqfoundation-mystic-9a49031/examples/mpl_corana.py000077500000000000000000000020501455553066500223310ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing the Corana parabola in 1D. Requires matplotlib. """ import matplotlib.pyplot as plt, numpy, mystic #from test_corana import * from mystic.solvers import fmin from mystic.tools import getch from mystic.models.storn import Corana Corana1 = Corana(1) x = numpy.arange(-2., 2., 0.01) y = [Corana1([c]) for c in x] plt.plot(x,y,linewidth=1) for xinit in numpy.arange(0.1,2,0.1): sol = fmin(Corana1, [xinit], full_output=1, retall=1) xx = mystic.flatten_array(sol[-1]) yy = [Corana1([c]) for c in xx] plt.plot(xx,yy,'r-',xx,yy,'ko',linewidth=2) plt.title("Solution trajectories for fmin at different initial conditions") plt.show() # end of file uqfoundation-mystic-9a49031/examples/mpmap_desolve.py000077500000000000000000000053311455553066500230560ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE # # Adapted from parallel_desolve.py __doc__ = """ # Tests MP version of Storn and Price's Polynomial 'Fitting' Problem. # # Exact answer: Chebyshev Polynomial of the first kind. T8(x) # Reference: # # [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient # Heuristic for Global Optimization over Continuous Spaces. Journal of Global # Optimization 11: 341-359, 1997. # To run in parallel: (must install 'pathos') python mpmap_desolve.py """ try: from pathos.pools import ProcessPool as Pool except: print(__doc__) from mystic.solvers import DifferentialEvolutionSolver2 from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor from mystic.tools import random_seed from mystic.math import poly1d #from raw_chebyshev8 import chebyshev8cost as ChebyshevCost # no globals #from raw_chebyshev8b import chebyshev8cost as ChebyshevCost # use globals from mystic.models.poly import chebyshev8cost as ChebyshevCost # no helper ND = 9 NP = 80 MAX_GENERATIONS = NP*NP NNODES = NP//5 seed = 321 if __name__=='__main__': from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing def print_solution(func): print(poly1d(func)) return psow = VerboseMonitor(10) ssow = VerboseMonitor(10) random_seed(seed) print("first sequential...") solver = DifferentialEvolutionSolver2(ND,NP) solver.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(ssow) solver.Solve(ChebyshevCost, VTR(0.01), strategy=Best1Exp, \ CrossProbability=1.0, ScalingFactor=0.9, disp=1) print("") print_solution( solver.bestSolution ) random_seed(seed) print("\n and now parallel...") solver2 = DifferentialEvolutionSolver2(ND,NP) solver2.SetMapper(Pool(NNODES).map) # parallel solver2.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver2.SetEvaluationLimits(generations=MAX_GENERATIONS) solver2.SetGenerationMonitor(psow) solver2.Solve(ChebyshevCost, VTR(0.01), strategy=Best1Exp, \ CrossProbability=1.0, ScalingFactor=0.9, disp=1) print("") print_solution( solver2.bestSolution ) shutdown() # help multiprocessing shutdown all workers # end of file uqfoundation-mystic-9a49031/examples/mpmap_desolve_rosen.py000077500000000000000000000051451455553066500242670ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE # # Adapted from parallel_desolve.py __doc__ = """ # Tests MP version of Storn and Price's Polynomial 'Fitting' Problem. # # Exact answer: [1,1,1] # Reference: # # [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient # Heuristic for Global Optimization over Continuous Spaces. Journal of Global # Optimization 11: 341-359, 1997. # To run in parallel: (must install 'pathos') python mpmap_desolve_rosen.py """ try: from pathos.pools import ProcessPool as Pool except: print(__doc__) from mystic.solvers import DifferentialEvolutionSolver2 from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor from mystic.tools import random_seed #from raw_rosen import rosen as myCost # with a helper function from mystic.models import rosen as myCost # without a helper function ND = 3 NP = 20 MAX_GENERATIONS = NP*NP NNODES = 20 TOL = 0.01 CROSS = 0.9 SCALE = 0.8 seed = 100 if __name__=='__main__': from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing def print_solution(func): print(func) return psow = VerboseMonitor(10) ssow = VerboseMonitor(10) random_seed(seed) print("first sequential...") solver = DifferentialEvolutionSolver2(ND,NP) #XXX: sequential solver.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(ssow) solver.Solve(myCost, VTR(TOL), strategy=Best1Exp, \ CrossProbability=CROSS, ScalingFactor=SCALE, disp=1) print("") print_solution( solver.bestSolution ) random_seed(seed) print("\n and now parallel...") solver2 = DifferentialEvolutionSolver2(ND,NP) #XXX: parallel solver2.SetMapper(Pool(NNODES).map) solver2.SetRandomInitialPoints(min=[-100.0]*ND, max=[100.0]*ND) solver2.SetEvaluationLimits(generations=MAX_GENERATIONS) solver2.SetGenerationMonitor(psow) solver2.Solve(myCost, VTR(TOL), strategy=Best1Exp, \ CrossProbability=CROSS, ScalingFactor=SCALE, disp=1) print("") print_solution( solver2.bestSolution ) shutdown() # help multiprocessing shutdown all workers # end of file uqfoundation-mystic-9a49031/examples/raw_chebyshev8.py000077500000000000000000000024431455553066500231450ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ NOTE: due to pickling issues, cost function is provided w/o using a factory method. also, a local import of 'polyeval' avoides a NameError. """ def chebyshev8cost(trial,M=61): """The costfunction for order-n Chebyshev fitting. M evaluation points between [-1, 1], and two end points""" from mystic.models.poly import chebyshev8coeffs as target from mystic.math import polyeval result=0.0 x=-1.0 dx = 2.0 / (M-1) for i in range(M): px = polyeval(trial, x) if px<-1 or px>1: result += (1 - px) * (1 - px) x += dx px = polyeval(trial, 1.2) - polyeval(target, 1.2) if px<0: result += px*px px = polyeval(trial, -1.2) - polyeval(target, -1.2) if px<0: result += px*px return result if __name__=='__main__': from mystic.models.poly import chebyshev8coeffs as target from mystic.math import poly1d print(poly1d(target)) print("") print(chebyshev8cost(target)) uqfoundation-mystic-9a49031/examples/raw_chebyshev8b.py000077500000000000000000000023151455553066500233050ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ NOTE: due to pickling issues, cost function is provided w/o using a factory method. (same as chebyshev8.py, except uses global target,polyeval,poly1d) """ from mystic.models.poly import chebyshev8coeffs as target from mystic.math import polyeval, poly1d def chebyshev8cost(trial,M=61): """The costfunction for order-n Chebyshev fitting. M evaluation points between [-1, 1], and two end points""" result=0.0 x=-1.0 dx = 2.0 / (M-1) for i in range(M): px = polyeval(trial, x) if px<-1 or px>1: result += (1 - px) * (1 - px) x += dx px = polyeval(trial, 1.2) - polyeval(target, 1.2) if px<0: result += px*px px = polyeval(trial, -1.2) - polyeval(target, -1.2) if px<0: result += px*px return result if __name__=='__main__': print(poly1d(target)) print("") print(chebyshev8cost(target)) uqfoundation-mystic-9a49031/examples/raw_rosen.py000077500000000000000000000016121455553066500222200ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ NOTE: rosen rewritten as a pickleable function """ def rosen(coeffs): """evaluates n-dimensional Rosenbrock function for a list of coeffs minimum is f(x)=0.0 at xi=1.0""" from numpy import sum as numpysum from numpy import asarray #ensure that there are 2 coefficients x = [1]*2 x[:len(coeffs)]=coeffs x = asarray(x) #XXX: must be a numpy.array return numpysum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0) if __name__=='__main__': target = [1., 1., 1.] print(target) print("") print(rosen(target)) uqfoundation-mystic-9a49031/examples/restart_solver.py000066400000000000000000000034771455553066500233070ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from mystic.solvers import DifferentialEvolutionSolver from mystic.solvers import NelderMeadSimplexSolver from mystic.termination import VTR, ChangeOverGeneration, When, Or from mystic.monitors import VerboseMonitor from mystic.models import rosen from mystic.solvers import LoadSolver import dill import os def runme(): # instantiate the solver _solver = NelderMeadSimplexSolver(3) lb,ub = [0.,0.,0.],[10.,10.,10.] _solver.SetRandomInitialPoints(lb, ub) _solver.SetEvaluationLimits(1000) # add a monitor stream stepmon = VerboseMonitor(1) _solver.SetGenerationMonitor(stepmon) # configure the bounds _solver.SetStrictRanges(lb, ub) # configure stop conditions term = Or( VTR(), ChangeOverGeneration() ) _solver.SetTermination(term) # add a periodic dump to an archive tmpfile = 'mysolver.pkl' _solver.SetSaveFrequency(10, tmpfile) # run the optimizer _solver.Solve(rosen) # get results x = _solver.bestSolution y = _solver.bestEnergy # load the saved solver solver = LoadSolver(tmpfile) #os.remove(tmpfile) # obligatory check that state is the same assert all(x == solver.bestSolution) assert y == solver.bestEnergy # modify the termination condition term = VTR(0.0001) solver.SetTermination(term) # run the optimizer solver.Solve(rosen) os.remove(tmpfile) # check the solver serializes _s = dill.dumps(solver) return dill.loads(_s) solver = runme() # EOF uqfoundation-mystic-9a49031/examples/rosetta_mogi.py000066400000000000000000000176271455553066500227270ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example use of Forward Mogi Model in mystic and PARK optimization frameworks. (built for mystic "trunk" and with park-1.2) for help, type "python rosetta_mogi_example.py --help" """ from math import pi from numpy import array try: # check if park is installed import park #import park.parksnob import park.parkde Model = park.Model __park = True except ImportError: Model = object __park = False def ForwardMogiFactory(params): x0,y0,z0,dV = params def forward_mogi(evalpts): """ evalpts should be a 2D (2 by N) numpy array """ dx = evalpts[0,:] - x0 dy = evalpts[1,:] - y0 dz = 0 - z0 c = dV * 3. / 4. * pi # or equivalently c= (3/4) a^3 dP / rigidity # where a = sphere radius, dP = delta Pressure r2 = dx*dx + dy*dy + dz*dz C = c / pow(r2, 1.5) return array((C*dx,C*dy,C*dz)) return forward_mogi # --- Cost Function stuff --- def filter_for_zdisp(input): return -input[2,:] # Here is the cost function def vec_cost_function(params): model = ForwardMogiFactory(params) zdisp = filter_for_zdisp(model(stations)) return 100. * (zdisp - data_z) # Here is the normed version [NOTE: fit this one!] def cost_function(params): x = vec_cost_function(params) return numpy.sum(real((conjugate(x)*x))) # a cost function with parameters "normalized" def vec_cost_function2(params): sca = numpy.array([1000, 100., 10., 0.1]) return vec_cost_function(sca * params) # --- Cost Function end --- # --- Plotting stuff --- import matplotlib.pyplot as plt def plot_sol(params,linestyle='b-'): forward_solution = ForwardMogiFactory(params) xx = arange(-30,30,0.1)+actual_params[0] yy = 0*xx + actual_params[1] ss = array((xx, yy)) dd = forward_solution(ss) plt.plot(ss[0,:],-dd[2,:],'%s'%linestyle,linewidth=2.0) def plot_noisy_data(): import matplotlib.pyplot as plt plt.plot(stations[0,:],-data[2,:]+noise[2,:],'k.') # --- Plotting end --- # --- Call to Mystic's Fmin optimizer --- def mystic_optimize(point): from mystic.monitors import Monitor, VerboseMonitor from mystic.tools import getch, random_seed random_seed(123) from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT simplex, esow = VerboseMonitor(50), Monitor() solver = fmin(len(point)) solver.SetInitialPoints(point) solver.SetEvaluationMonitor(esow) solver.SetGenerationMonitor(simplex) solver.Solve(cost_function, CRT()) solution = solver.Solution() return solution # --- Mystic end --- # --- Call to Mystic's DE optimizer --- def mystic_optimize2(point): from mystic.monitors import Monitor, VerboseMonitor from mystic.tools import getch, random_seed random_seed(123) from mystic.solvers import DifferentialEvolutionSolver as de from mystic.termination import ChangeOverGeneration as COG NPOP = 50 simplex, esow = VerboseMonitor(50), Monitor() solver = de(len(point),NPOP) solver.SetInitialPoints(point) solver.SetEvaluationMonitor(esow) solver.SetGenerationMonitor(simplex) solver.Solve(cost_function, COG(generations=100), \ CrossProbability=0.5, ScalingFactor=0.5) solution = solver.Solution() return solution # --- Mystic end --- # --- Call to Park --- class MogiModel(Model): """a park model: - parameters are passed as named strings to set them as class attributes - function that does the evaluation must be named "eval" - __call__ generated that takes namestring and parameter-named keywords """ parameters = ["x0","y0","z0","dV"] def eval(self, x): x0 = self.x0 y0 = self.y0 z0 = self.z0 dV = self.dV f = ForwardMogiFactory((x0,y0,z0,dV)) return f(x) pass class Data2D(object): """2d model data with the required park functions""" def __init__(self,z): self.z = z return def residuals(self,model): zdisp = filter_for_zdisp(model(stations)) return (100. * (zdisp - self.z)).flatten() pass def park_optimize(point): # build the data instance data2d = Data2D(data_z) # build the model instance x0,y0,z0,dV = point model = MogiModel("mymodel",x0=x0,y0=y0,z0=z0,dV=dV) # required to set bounds on the parameters #model.x0 = [-numpy.inf,numpy.inf] #model.y0 = [-numpy.inf,numpy.inf] #model.z0 = [-numpy.inf,numpy.inf] #model.dV = [-numpy.inf,numpy.inf] model.x0 = [-5000,5000] model.y0 = [-5000,5000] model.z0 = [-5000,5000] model.dV = [-5000,5000] # add a monitor, and set to print results to the console handler=park.fitresult.ConsoleUpdate() # select the fitter, and do the fit #fitter=park.parksnob.Snobfit() fitter=park.parkde.DiffEv() # 'fit' requires a list of tuples of (model,data) result=park.fit.fit([(model,data2d)],fitter=fitter,handler=handler) # print results #print(result.calls) # print number of function calls #result.print_summary() # print solution # get the results back into a python object solution = {} for fitparam in result.parameters: solution[fitparam.name] = fitparam.value solution = [ solution['mymodel.x0'], solution['mymodel.y0'], solution['mymodel.z0'], solution['mymodel.dV'] ] return solution # --- Park end --- if __name__ == '__main__': # parse user selection to solve with "mystic" [default] or "park" # also can select mystic's optimizer: "diffev" or "fmin" [default] from optparse import OptionParser parser = OptionParser() parser.add_option("-p","--park",action="store_true",dest="park",\ default=False,help="solve with park (instead of mystic)") parser.add_option("-m","--mystic",action="store_true",dest="mystic",\ default=False,help="solve with mystic's DE optimizer)") parsed_opts, parsed_args = parser.parse_args() from numpy import pi, sqrt, array, mgrid, random, real, conjugate, arange from numpy.random import rand import numpy # Let the "actual parameters" be : actual_params = [1234.,-500., 10., .1] actual_forward = ForwardMogiFactory(actual_params) print("Target: %s" % actual_params) # The data to be "fitted" xstations = array([random.uniform(-30,30) for i in range(300)])+actual_params[0] ystations = 0*xstations + actual_params[1] stations = array((xstations, ystations)) data = actual_forward(stations) # generate noise... gaussian distribution with mean 0, sig 0.1e-3 noise = array([[random.normal(0,0.1e-3) for i in range(data.shape[1])] for j in range(data.shape[0])]) # Here is the "observed data" data_z = -data[2,:] + noise[2,:] # plot the noisy data plot_noisy_data() point = [1000,-100,0,1] # cg will do badly on this one # DO OPTIMIZATION STUFF HERE TO GET SOLUTION if parsed_opts.park: #solve with park's DE if __park: print("Solving with park's DE optimizer...") solution = park_optimize(point) else: print('This option requires park to be installed') exit() elif parsed_opts.mystic: #solve with mystic's DE print("Solving with mystic's DE optimizer...") solution = mystic_optimize2(point) else: #solve with mystic's fmin print("Solving with mystic's fmin optimizer...") solution = mystic_optimize(point) print("Solved: %s" % solution) # plot the solution plot_sol(solution,'r-') plt.show() # End of file uqfoundation-mystic-9a49031/examples/rosetta_parabola.py000066400000000000000000000124231455553066500235420ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example use of Forward Poly Model in mystic and PARK optimization frameworks. (built for mystic "trunk" and with park-1.2) for help, type "python rosetta_parabola_example.py --help" """ from math import pi from numpy import array, real, conjugate import numpy try: # check if park is installed import park #import park.parksnob import park.parkde Model = park.Model __park = True except ImportError: Model = object __park = False def ForwardPolyFactory(params): a,b,c = params def forward_poly(x): """ x should be a 1D (1 by N) numpy array """ return array((a*x*x + b*x + c)) return forward_poly def data(params): fwd = ForwardPolyFactory(params) x = (array([list(range(101))])-50.)[0] return x,fwd(x) # --- Cost Function stuff --- # Here is the cost function def vec_cost_function(params): return data(params)[1] - datapts # Here is the normed version def cost_function(params): x = vec_cost_function(params) return numpy.sum(real((conjugate(x)*x))) # --- Cost Function end --- # --- Plotting stuff --- import matplotlib.pyplot as plt def plot_sol(params,linestyle='b-'): d = data(params) plt.plot(d[0],d[1],'%s'%linestyle,linewidth=2.0) plt.axis(plotview) return # --- Plotting end --- # --- Call to Mystic --- def mystic_optimize(point): from mystic.monitors import Monitor, VerboseMonitor from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT simplex, esow = VerboseMonitor(50), Monitor() solver = fmin(len(point)) solver.SetInitialPoints(point) min = [-100,-100,-100]; max = [100,100,100] solver.SetStrictRanges(min,max) solver.SetEvaluationMonitor(esow) solver.SetGenerationMonitor(simplex) solver.Solve(cost_function, CRT(1e-7,1e-7)) solution = solver.Solution() return solution # --- Mystic end --- # --- Call to Park --- class PolyModel(Model): """a park model: - parameters are passed as named strings to set them as class attributes - function that does the evaluation must be named "eval" - __call__ generated that takes namestring and parameter-named keywords """ parameters = ["a","b","c"] def eval(self, x): a = self.a b = self.b c = self.c f = ForwardPolyFactory((a,b,c)) return f(x) pass class Data1D(object): """1d model data with the required park functions""" def __init__(self,z): self.z = z return def residuals(self,model): x = (array([list(range(101))])-50.)[0] return (model(x) - self.z).flatten() pass def park_optimize(point): # build the data instance data1d = Data1D(datapts) # build the model instance a,b,c = point model = PolyModel("mymodel",a=a,b=b,c=c) # required to set bounds on the parameters model.a = [-100,100] model.b = [-100,100] model.c = [-100,100] # add a monitor, and set to print results to the console handler=park.fitresult.ConsoleUpdate() # select the fitter, and do the fit #fitter=park.parksnob.Snobfit() fitter=park.parkde.DiffEv() # 'fit' requires a list of tuples of (model,data) result=park.fit.fit([(model,data1d)],fitter=fitter,handler=handler) # print results #print(result.call) # print number of function calls #result.print_summary() # print solution # get the results back into a python object solution = {} for fitparam in result.parameters: solution[fitparam.name] = fitparam.value solution = [ solution['mymodel.a'], solution['mymodel.b'], solution['mymodel.c'] ] return solution # --- Park end --- if __name__ == '__main__': # parse user selection to solve with "mystic" [default] or "park" from optparse import OptionParser parser = OptionParser() parser.add_option("-p","--park",action="store_true",dest="park",\ default=False,help="solve with park (instead of mystic)") parsed_opts, parsed_args = parser.parse_args() # set plot window from mystic.tools import getch plotview = [-10,10, 0,100] # Let the "actual parameters" be : target = [1., 2., 1.] print("Target: %s" % target) # Here is the "observed data" x,datapts = data(target) plt.ion() plot_sol(target,'r-') plt.draw() plt.pause(0.001) # initial values point = [100,-100,0] # DO OPTIMIZATION STUFF HERE TO GET SOLUTION if parsed_opts.park: if __park: print("Solving with park's DE optimizer...") solution = park_optimize(point) else: print('This option requires park to be installed') exit() else: print("Solving with mystic's fmin optimizer...") solution = mystic_optimize(point) print("Solved: %s" % solution) # plot the solution plot_sol(solution,'g-') plt.draw() plt.pause(0.001) getch() # End of file uqfoundation-mystic-9a49031/examples/test_circle.py000077500000000000000000000072541455553066500225310ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Given a set of points in the plane, find the smallest circle that contains them. (using DE and scipy.fmin) Requires: -- numpy, matplotlib The matplotlib output will draw -- a set of points inside a circle defined by x0,y0,R0 -- the circle (x0,y0) with rad R0 -- the optimized circle with minimum R enclosing the points """ from mystic.models import circle, sparse_circle import matplotlib.pyplot as plt # generate training set & define cost function # CostFactory2 allows costfunction to reuse datapoints from training set x0, y0, R0 = [10., 20., 3] npts = 20 xy = sparse_circle(x0, y0, R0, npts) cost = sparse_circle.CostFactory2(xy) # function to find the 'support vectors' given R # SV in quotes because they are found by optimizing the primal, # as opposed to "directly" via the dual. def sv(data, xx,yy,rr): svl = [] for i in range(len(data)): x,y = data[i] if abs((xx-x)*(xx-x)+(yy-y)*(yy-y) - rr*rr) < 0.01: svl.append(i) return svl # DEsolver inputs MAX_GENERATIONS = 2000 ND, NP = 3, 30 # dimension, population size minrange = [0., 0., 0.] maxrange = [50., 50., 10.] # prepare DESolver from mystic.solvers import DifferentialEvolutionSolver2 \ as DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() solver.SetRandomInitialPoints(min=minrange,max=maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(cost, termination=ChangeOverGeneration(generations=100)) if __name__ == '__main__': # x0, y0, R0 #guess = [1,1,1] # bad initial guess #guess = [5,5,1] # ok guess guess = [10,15,5] # good initial guess # plot training set & training set boundary plt.plot(xy[:,0],xy[:,1],'k+',markersize=6) c = circle(x0, y0, R0) plt.plot(c[:,0],c[:,1],'r-',linewidth=2) legend = ['random points','generating circle : %f' % R0] plt.axis('equal') # solve with mystic's differential evolution solver solution = solver.Solution() sx, sy, sr = solution print("DEsol : (%f, %f) @ R = %f" % (sx, sy, sr)) # plot DEsolver solution c = circle(sx, sy, sr) plt.plot(c[:,0],c[:,1],'b-',linewidth=2) legend.append('DE optimal : %f' % sr) # solve with scipy.fmin from mystic.solvers import fmin sol = fmin(cost, guess) print("scipy.fmin sol: %s" % sol) ax, ay, ar = sol # plot scipy.fmin solution c = circle(ax, ay, ar) plt.plot(c[:,0],c[:,1],'g-',linewidth=2) legend.append('Nelder-Mead : %f' % ar) # solve with scipy.brute #from mystic._scipyoptimize import brute #ranges = tuple(zip(minrange,maxrange)) #sol = brute(cost, ranges, Ns=NP) #print("scipy.brute sol: %s" % sol) #bx, by, br = sol # plot scipy.brute solution #c = circle(bx, by, br) #plt.plot(c[:,0],c[:,1],'y-',linewidth=2) #legend.append('Brute : %f' % br) # find & draw the support vectors from DE svl = sv(xy, sx,sy,sr) print("DE support vectors: %s" % svl) plt.plot(xy[svl,0],xy[svl,1],'bx',markersize=6) # find & draw the support vectors from scipy.brute #svl = sv(xy, bx,by,br) #print("Brute support vectors: %s" % svl) #plt.plot(xy[svl,0],xy[svl,1],'yx',markersize=6) plt.legend(legend) plt.show() # $Id$ # # end of file uqfoundation-mystic-9a49031/examples/test_circle_dual.py000077500000000000000000000060031455553066500235250ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Solve the dual form of test_circle.py. Given a set of points in the plane, find the smallest circle that contains them. Requires: -- numpy, matplotlib The matplotlib output will draw -- a set of points inside a circle defined by x0,y0,R0 -- the circle (x0,y0) with rad R0 -- the optimized circle with minimum R enclosing the points """ from numpy import * import matplotlib.pyplot as plt from test_circle import sparse_circle, circle, sv, x0, y0, R0 # a common objective function for solving a QP problem # (see http://www.mathworks.com/help/optim/ug/quadprog.html) def objective(x, H, f): return 0.5 * dot(dot(x,H),x) + dot(f,x) # plot the data and results def plot(xy, sv, x0, y0, R0, center, R): import matplotlib.pyplot as plt plt.plot(xy[:,0],xy[:,1],'k+') plt.plot(xy[sv,0],xy[sv,1],'bx',mfc="None") plt.plot([x0],[y0],'ro') plt.plot([center[0]],[center[1]],'bo') plt.plot([xy[sv[0],0], center[0]],[xy[sv[0],1], center[1]],'b--') c = circle(x0,y0,R0) plt.plot(c[:,0], c[:,1], 'r-', linewidth=2) c = circle(center[0],center[1],R) plt.plot(c[:,0], c[:,1], 'b-', linewidth=2) plt.axis('equal') plt.show() if __name__ == '__main__': npt = 20 from test_circle import xy npt1 = xy.shape[0] if npt is not npt1: xy = sparse_circle(x0,y0,R0,npt) else: pass # define a QP problem for the objective Q = dot(xy, transpose(xy)) f = -diag(Q)+10 H = Q*2 # define lower and upper bounds on x LB = zeros(npt) UB = ones(npt) # define equality constraints (A*x == b) A = ones((1,npt)) b = ones(1) # # generic: build a constraint where (A*x == b) # from mystic.symbolic import linear_symbolic, solve, \ # generate_solvers as solvers, generate_constraint as constraint # norm = constraint(solvers(solve(linear_symbolic(A,b),target=['x0']))) # specific: build a constraint where (sum(x) == 1.0) from mystic.math.measures import normalize def norm(x): return normalize(x, mass=1.0) # solve the constrained quadratic programming problem from mystic.solvers import fmin_powell x = fmin_powell(objective, UB/npt, args=(H, f), bounds=list(zip(LB,UB)), \ constraints=norm, ftol=1e-8, disp=1) # find support vectors sv = where(x > 0.001)[0] print("support vectors: %s" % sv) # compare solved center and radius to generating center and radius center = dot(x,xy) R = linalg.norm(xy[sv[0],:]-center) print("x0, y0: (%f, %f) @ R0 = %f" % (x0,y0,R0)) print("center: (%f, %f) @ R = %f" % (center[0],center[1],R)) plot(xy, sv, x0, y0, R0, center, R) # EOF uqfoundation-mystic-9a49031/examples/test_corana.py000077500000000000000000000040771455553066500225330ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up Corana's parabola. This is problem 6 of testbed 1 in [1]. Exact answer: Min = 0 @ abs(x_j) < 0.05 for all j. Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Rand1Exp from mystic.tools import random_seed random_seed(123) from mystic.models import corana from mystic.models.storn import Corana as Corana1 corana1 = Corana1(1) ND = 4 NP = 10 MAX_GENERATIONS = 2500 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-1000]*ND, max = [1000]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(corana, termination=VTR(0.00000001), strategy=Rand1Exp,\ CrossProbability=0.5, ScalingFactor=0.9) solution = solver.Solution() print(solution) if __name__ == '__main__': from timeit import Timer t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s" % timetaken) try: from mystic.solvers import fmin #from mystic._scipyoptimize import fmin import random print( "\nScipy: ") sol = fmin(corana, [random.random() for j in range(4)], full_output=0, retall=1) print("solution: %s" % sol[-1][0]) print("\nCorana 1 with Scipy") sol = fmin(corana1, [random.random()], full_output=1, retall=1) print("solution: %s" % sol[-1][0]) except: pass # end of file uqfoundation-mystic-9a49031/examples/test_dejong3.py000077500000000000000000000034361455553066500226170ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up De Jong's Third function. This is problem 3 of testbed 1 in [1]. Note: The function as defined by Eq.8 of [1] seems incomplete. Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. [2] Storn, R. and Proce, K. Same title as above, but as a technical report. try: http://www.icsi.berkeley.edu/~storn/deshort1.ps """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.models.dejong import step as DeJong3 from mystic.tools import random_seed random_seed(123) ND = 5 NP = 25 MAX_GENERATIONS = 2500 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-5.12]*ND, max = [5.12]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(DeJong3, termination=VTR(0.00001), \ CrossProbability=0.3, ScalingFactor=1.0) solution = solver.Solution() print(solution) if __name__ == '__main__': from timeit import Timer # optimize with DESolver t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s\n" % timetaken) # optimize with fmin from mystic.solvers import fmin print(fmin(DeJong3, [0 for i in range(ND)])) # end of file uqfoundation-mystic-9a49031/examples/test_dejong4.py000077500000000000000000000035071455553066500226170ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up De Jong's Fourth function. This is problem 4 of testbed 1 in [1]. This is function fitting "with noise." Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. [2] Storn, R. and Proce, K. Same title as above, but as a technical report. try: http://www.icsi.berkeley.edu/~storn/deshort1.ps """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Rand1Exp from mystic.models.dejong import quartic as DeJong4 from mystic.tools import random_seed random_seed(123) ND = 30 NP = 10 MAX_GENERATIONS = 2500 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-1.28]*ND, max = [1.28]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(DeJong4, termination=VTR(15), strategy=Rand1Exp, \ CrossProbability=0.3, ScalingFactor=1.0) solution = solver.Solution() print(solution) if __name__ == '__main__': from timeit import Timer # optimize with DESolver t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s\n" % timetaken) # optimize with fmin from mystic.solvers import fmin print(fmin(DeJong4, [0 for i in range(ND)])) # end of file uqfoundation-mystic-9a49031/examples/test_dejong5.py000077500000000000000000000031321455553066500226120ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up De Jong's Fifth function. This is problem 5 of testbed 1 in [1]. Exact answer: Min = 0 @ (-32, -32) Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Rand1Exp from mystic.models.dejong import shekel as DeJong5 from mystic.tools import random_seed random_seed(123) ND = 2 NP = 15 MAX_GENERATIONS = 2500 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-65.536]*ND, max = [65.536]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(DeJong5, termination=VTR(0.0000001), strategy=Rand1Exp, \ CrossProbability=0.5, ScalingFactor=0.9) solution = solver.Solution() print(solution) if __name__ == '__main__': from timeit import Timer # optimize with DESolver t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s\n" % timetaken) # end of file uqfoundation-mystic-9a49031/examples/test_ffit.py000077500000000000000000000055411455553066500222150ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Adapted from DETest.py by Patrick Hung Sets up Storn and Price's Polynomial 'Fitting' Problem. Exact answer: Chebyshev Polynomial of the first kind. T8(x) Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Best1Bin, Rand1Exp from mystic.math import poly1d from mystic.monitors import VerboseMonitor from mystic.tools import getch from mystic.tools import random_seed random_seed(123) # get the target coefficients and cost function from mystic.models.poly import chebyshev8coeffs as Chebyshev8 from mystic.models.poly import chebyshev8cost as ChebyshevCost def print_solution(func): print(poly1d(func)) return def plot_solution(func, benchmark=Chebyshev8): try: import matplotlib.pyplot as plt, numpy x = numpy.arange(-1.2, 1.2001, 0.01) x2 = numpy.array([-1.0, 1.0]) p = poly1d(func) chebyshev = poly1d(benchmark) y = p(x) exact = chebyshev(x) plt.plot(x,y,'b-',linewidth=2) plt.plot(x,exact,'r-',linewidth=2) plt.plot(x,0*x-1,'k-') plt.plot(x2, 0*x2+1,'k-') plt.plot([-1.2, -1.2],[-1, 10],'k-') plt.plot([1.2, 1.2],[-1, 10],'k-') plt.plot([-1.0, -1.0],[1, 10],'k-') plt.plot([1.0, 1.0],[1, 10],'k-') plt.axis([-1.4, 1.4, -2, 8])#,'k-') plt.legend(('Fitted','Chebyshev')) plt.show() except ImportError: print("Install matplotlib for visualization") pass ND = 9 NP = ND*10 MAX_GENERATIONS = ND*NP def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-100.0]*ND, max = [100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(VerboseMonitor(30)) solver.enable_signal_handler() strategy = Best1Exp #strategy = Best1Bin solver.Solve(ChebyshevCost, termination=VTR(0.01), strategy=strategy, \ CrossProbability=1.0, ScalingFactor=0.9, \ sigint_callback=plot_solution) solution = solver.Solution() return solution if __name__ == '__main__': #plot_solution(Chebyshev8) solution = main() print_solution(solution) plot_solution(solution) getch() # end of file uqfoundation-mystic-9a49031/examples/test_ffit2.py000077500000000000000000000045041455553066500222750ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up Storn and Price's Polynomial 'Fitting' Problem for ChebyshevT16 Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Best1Bin, Rand1Exp, Best2Bin, Best2Exp from mystic.math import poly1d from mystic.monitors import VerboseMonitor from mystic.models.poly import chebyshev16cost from mystic.tools import random_seed random_seed(123) # get the target coefficients from mystic.models.poly import chebyshev16coeffs as Chebyshev16 def ChebyshevCost(trial): """ The costfunction for the fitting problem. 70 evaluation points between [-1, 1] with two end points """ return chebyshev16cost(trial,M=70)*100 ND = 17 NP = 100 MAX_GENERATIONS = 5000 from test_ffit import plot_solution def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints() solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(VerboseMonitor(10)) #strategy = Best1Exp #strategy = Best1Bin #strategy = Best2Bin strategy = Best2Exp solver.Solve(ChebyshevCost, termination=VTR(0.0001), strategy=strategy, \ CrossProbability=1.0, ScalingFactor=0.6) solution = solver.Solution() print("\nsolved: ") print(poly1d(solution)) print("\ntarget: ") print(poly1d(Chebyshev16)) #print("actual coefficients vs computed:") #for actual,computed in zip(Chebyshev16, solution): # print("%s %s" % (actual, computed)) plot_solution(solution, Chebyshev16) if __name__ == '__main__': from timeit import Timer t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("\nCPU Time: %s" % timetaken) # end of file uqfoundation-mystic-9a49031/examples/test_ffitB.py000077500000000000000000000031221455553066500223100ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Same as test_ffit.py but uses DifferentialEvolutionSolver2 instead. Note: 1. MPIDifferentialEvolutionSolver is functionally identical to DifferentialEvolultionSolver2. 2. In DifferentialEvolutionSolver, as each trial vector is compared to its target, once the trial beats the target it enters the generation, replacing the old vector and immediately becoming available as candidates for creating difference vectors, and for mutations, etc. """ from test_ffit import * def main(): from mystic.solvers import DifferentialEvolutionSolver2 as DifferentialEvolutionSolver solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-100.0]*ND, max = [100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(VerboseMonitor(30)) solver.enable_signal_handler() strategy = Best1Exp #strategy = Best1Bin solver.Solve(ChebyshevCost, termination=VTR(0.01), strategy=strategy, \ CrossProbability=1.0, ScalingFactor=0.9, \ sigint_callback=plot_solution) solution = solver.Solution() return solution if __name__ == '__main__': solution = main() print_solution(solution) plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/test_ffitC.py000077500000000000000000000020671455553066500223200ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing the polynomial fitting problem of [1] using scipy's Nelder-Mead algorithm. Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from test_ffit import Chebyshev8, ChebyshevCost, plot_solution, print_solution if __name__ == '__main__': import random from mystic.solvers import fmin #from mystic._scipyoptimize import fmin from mystic.tools import random_seed random_seed(123) x = [random.uniform(-100,100) + Chebyshev8[i] for i in range(9)] solution = fmin(ChebyshevCost, x) print_solution(solution) plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/test_ffitD.py000077500000000000000000000022401455553066500223120ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Same as test_ffitB.py but using the 'one-liner' solver interface. Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from mystic.solvers import diffev from test_ffit import plot_solution, print_solution, Chebyshev8, ChebyshevCost from mystic.tools import random_seed random_seed(123) ND = 9 NP = ND*10 MAX_GENERATIONS = ND*NP def main(): range = [(-100.0,100.0)]*ND solution = diffev(ChebyshevCost,range,NP,bounds=None,ftol=0.01,\ maxiter=MAX_GENERATIONS,cross=1.0,scale=0.9) return solution if __name__ == '__main__': #plot_solution(Chebyshev8) solution = main() print_solution(solution) plot_solution(solution) # end of file uqfoundation-mystic-9a49031/examples/test_fosc3d.py000077500000000000000000000052271455553066500224470ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Adapted from The Mathematica Guidebook, Numerics. """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Best1Bin, Rand1Exp from mystic.tools import random_seed random_seed(123) from mystic.models import fosc3d as fOsc3D def draw_contour(): import matplotlib.pyplot as plt, numpy x, y = numpy.mgrid[-1:2:0.02,-0.5:2:0.02] c = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] c[i,j] = fOsc3D([xx,yy]) plt.contourf(x,y,c,100) ND = 2 NP = ND*10 MAX_GENERATIONS = 2000 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-2.0]*ND, max = [2.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) strategy = Best1Exp #strategy = Best1Bin solver.Solve(fOsc3D,termination=ChangeOverGeneration(1e-5, 30), \ strategy=strategy,CrossProbability=1.0,ScalingFactor=0.9) return solver.Solution() if __name__ == '__main__': import matplotlib.pyplot as plt from mystic.solvers import fmin #from mystic._scipyoptimize import fmin draw_contour() solution = main() print("solution: %s" % solution) plt.plot([solution[0]],[solution[1]],'wo',markersize=10) print("Differential Evolution: Min: %s, sol = %s" % (fOsc3D(solution), solution)) print("\nTrying scipy.optimize.fmin (Nelder-Mead Simplex)...") m = fmin(fOsc3D, [0.1, 0.1]) plt.plot([m[0]],[m[1]],'ro',markersize=5) print("solution w/ initial conditions (0.1,0.1): %s\n" % m) m = fmin(fOsc3D, [1, 1]) plt.plot([m[0]],[m[1]],'ro',markersize=5) print("solution w/ initial conditions (1,1): %s\n" % m) m = fmin(fOsc3D, [-1, 1]) print("solution w/ initial conditions (-1,1): %s\n" % m) plt.plot([m[0]],[m[1]],'ro',markersize=5) # m = fmin(fOsc3D, [0, 2]) # print("solution w/ initial conditions (0,2): %s\n" % m) # plt.plot([m[0]],[m[1]],'ro',markersize=5) plt.title('White dot: DE, Red dots: Nelder-Mead') try: import Image plt.savefig('test_fosc3d_out',dpi=72) im = Image.open('test_fosc3d_out.png') im.show() except ImportError: plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_getCost.py000066400000000000000000000050601455553066500226660ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ test_getCost.py Example to demonstrate use of CostFactory """ from mystic.termination import * from mystic.strategy import * from forward_model import * from mystic.math import poly1d as ForwardPolyFactory from mystic.models import poly; PolyCostFactory = poly.CostFactory from mystic.solvers import DifferentialEvolutionSolver from mystic.monitors import VerboseMonitor from mystic.tools import getch ND = 3 NP = 80 MAX_GENERATIONS = ND*NP from numpy import array def data(params): fwd = ForwardPolyFactory(params) x = (array([list(range(101))])-50.)[0] return x,fwd(x) def de_solve(CF): solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = VerboseMonitor(10,50) minrange = [-100., -100., -100.]; maxrange = [100., 100., 100.]; solver.SetRandomInitialPoints(min = minrange, max = maxrange) solver.SetStrictRanges(min = minrange, max = maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) solver.Solve(CF, termination=ChangeOverGeneration(generations=300),\ CrossProbability=0.5, ScalingFactor=0.5,\ sigint_callback=plot_sol) solution = solver.Solution() return solution, stepmon def plot_sol(params,linestyle='b-'): d = data(params) plt.plot(d[0],d[1],'%s'%linestyle,linewidth=2.0) plt.axis(plotview) plt.draw() plt.pause(0.001) return from numpy import sum as numpysum def cost_function(params): x = data(params)[1] - datapts return numpysum(real((conjugate(x)*x))) if __name__ == '__main__': plotview = [-60,60, 0,2500] target = [1., 2., 1.] x,datapts = data(target) #myCost = cost_function ##myCost = PolyCostFactory(target,x) F = CostFactory() F.addModel(ForwardPolyFactory,len(target),'poly') myCost = F.getCostFunction(evalpts=x, observations=datapts) import matplotlib.pyplot as plt plt.ion() print("target: %s" % target) plot_sol(target,'r-') solution, stepmon = de_solve(myCost) print("solution: %s" % solution) plot_sol(solution,'g-') print("") # print("at step 10: %s" % stepmon.x[10]) getch() # End of file uqfoundation-mystic-9a49031/examples/test_griewangk.py000077500000000000000000000037171455553066500232460ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up Griewangk's function. This is problem 7 of testbed 1 in [1]. Solution: Min of 0 @ Vector[0] Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Rand1Exp from mystic.tools import random_seed random_seed(123) # The costfunction for Griewangk's Function, Eq. (23) of [1]. from mystic.models import griewangk as Griewangk_cost ND = 10 NP = ND*10 MAX_GENERATIONS = 2500 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-400.0]*ND, max = [400.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(Griewangk_cost, termination=VTR(0.00001), strategy=Rand1Exp,\ CrossProbability=0.3, ScalingFactor=1.0) solution = solver.Solution() print(solution) if __name__ == '__main__': from mystic.solvers import fmin from timeit import Timer t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s" % timetaken) import random print("Scipy fmin") for i in [400,200,100,40,20,10,4,2,1]: print("\ninitializing with range (-%d, %d)" % (i,i)) sol = fmin(Griewangk_cost, [random.uniform(-i,i) for j in range(10)]) print("sol: %s" % sol) print("cost: %s" % Griewangk_cost(sol)) # end of file uqfoundation-mystic-9a49031/examples/test_lorentzian.py000077500000000000000000000067201455553066500234520ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Alternate fitting of a lorentzian peak (see test_lorentzian2.py) """ import matplotlib.pyplot as plt, matplotlib from numpy import * from mystic.models import lorentzian from test_lorentzian2 import * import warnings def F(alpha): "lorentzian, with norm calcualted" alpha[-1] = 1. # always set norm = 1 f = lorentzian.ForwardFactory(alpha) from scipy.integrate import romberg with warnings.catch_warnings(): # suppress: "AccuracyWarning: divmax (10) exceeded" warnings.simplefilter('ignore') n = romberg(f,0,3,divmax=5) #NOTE: this step is _SLOW_ (tweak divmax) def _(x): return f(x)/n return _ def show(): import Image plt.savefig('test_lorentzian_out',dpi=72) im = Image.open('test_lorentzian_out.png') im.show() return def plot_sol(solver=None): def _(params): import mystic._signal as signal print("plotting params: %s" % params) plt.errorbar(binsc, histo, sqrt(histo), fmt='b+') x = arange(xmin, xmax, (0.1* binwidth)) plt.plot(x, pdf(x)*N,'b:') plt.plot(x, F(params)(x)*N,'r-') plt.xlabel('E (GeV)') plt.ylabel('Counts') try: show() except ImportError: plt.show() if solver is not None: signal.signal(signal.SIGINT, signal.Handler(solver)) return _ ND = 7 NP = 50 MAX_GENERATIONS = 200 generations = 80 minrange = [0.5,30, -15, 10, 0, 0, 1] maxrange = [2, 60., -5, 50, 2, 1, 1] def de_solve(CF): solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = Monitor() solver.SetRandomInitialPoints(min=minrange,max=maxrange) solver.SetStrictRanges(min=minrange,max=maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) termination=ChangeOverGeneration(generations=generations) solver.Solve(CF, termination=termination, strategy=Rand1Exp, \ sigint_callback = plot_sol(solver)) solution = solver.Solution() return solution, stepmon if __name__ == '__main__': #NOTE: we will calculate the norm, not solve for it as a parameter target = [1., 45., -10., 20., 1., 0.1, 1.0] # norm set to 1.0 from mystic.models.lorentzian import gendata, histogram npts = 4000; binwidth = 0.1 N = npts * binwidth xmin, xmax = 0.0, 3.0 pdf = F(target) # normalized print("pdf(1): %s" % pdf(1)) data = gendata(target, xmin, xmax, npts) # data is 'unnormalized' #plt.plot(data[1:N],0*data[1:N],'k.') #plt.title('Samples drawn from density to be estimated.') #show() #plt.clf() binsc, histo = histogram(data, binwidth, xmin,xmax) print("binsc: %s" % binsc) print("count: %s" % histo) print("ncount: %s" % (histo//N)) print("exact : %s" % pdf(binsc)) print("now with DE...") from mystic.forward_model import CostFactory CF = CostFactory() CF.addModel(F, ND, 'lorentz') myCF = CF.getCostFunction(binsc, histo//N) sol, steps = de_solve(myCF) plot_sol()(sol) #print("steps: %s %s" % (steps.x, steps.y)) # end of file uqfoundation-mystic-9a49031/examples/test_lorentzian2.py000077500000000000000000000064271455553066500235400ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Same as test_lorentzian, but with n being a fitted variable This is MUCH faster than test_lorentzian because the cost function no longer has to do an "integral" as an intermediate step """ import matplotlib.pyplot as plt, matplotlib from numpy import * from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Rand1Exp, Best2Exp, Best2Exp from mystic.monitors import Monitor from mystic.tools import getch from mystic.tools import random_seed random_seed(123) #matplotlib.interactive(True) from mystic.models import lorentzian F = lorentzian.ForwardFactory def show(): import Image plt.savefig('test_lorentzian_out',dpi=72) im = Image.open('test_lorentzian_out.png') im.show() return def plot_sol(solver=None): def _(params): import mystic._signal as signal print("plotting params: %s" % params) plt.errorbar(binsc, histo, sqrt(histo), fmt='b+') x = arange(xmin, xmax, (0.1* binwidth)) plt.plot(x, pdf(x)*N,'b:') plt.plot(x, F(params)(x)*N,'r-') plt.xlabel('E (GeV)') plt.ylabel('Counts') try: show() except ImportError: plt.show() if solver is not None: signal.signal(signal.SIGINT, signal.Handler(solver)) return _ ND = 7 NP = 50 MAX_GENERATIONS = 200 generations = 200 minrange = [0.5,30, -15, 10, 0, 0, 100] maxrange = [2, 60., -5, 50, 2, 1, 200] def de_solve(CF): solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = Monitor() solver.SetRandomInitialPoints(min=minrange,max=maxrange) solver.SetStrictRanges(min=minrange,max=maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) termination=ChangeOverGeneration(generations=generations) solver.Solve(CF, termination=termination, strategy=Rand1Exp, \ sigint_callback = plot_sol(solver)) solution = solver.Solution() return solution, stepmon if __name__ == '__main__': target = [1., 45., -10., 20., 1., 0.1, 120.] from mystic.models.lorentzian import gendata, histogram npts = 4000; binwidth = 0.1 N = npts * binwidth xmin, xmax = 0.0, 3.0 pdf = F(target) print("pdf(1): %s" % pdf(1)) data = gendata(target, xmin, xmax, npts) plt.plot(data[1:int(N)],0*data[1:int(N)],'k.') plt.title('Samples drawn from density to be estimated.') try: show() except ImportError: plt.show() plt.clf() binsc, histo = histogram(data, binwidth, xmin,xmax) print("binsc: %s" % binsc) print("count: %s" % histo) print("ncount: %s" % (histo//N)) print("exact : %s" % pdf(binsc)) print("now with DE...") myCF = lorentzian.CostFactory2(binsc, histo//N, ND) sol, steps = de_solve(myCF) plot_sol()(sol) #print("steps: %s %s" % (steps.x, steps.y)) # end of file uqfoundation-mystic-9a49031/examples/test_mogi.py000077500000000000000000000122621455553066500222160ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Tests a single mogi fitting. Script is pretty crude right now. Requirement: numpy --- for data-structures and "vectorized" ops on them, like sqrt, pow matplotlib for plotting Computes surface displacements Ux, Uy, Uz in meters from a point spherical pressure source in an elastic half space [1]. Reference: [1] Mogi, K. Relations between the eruptions of various volcanoes and the deformations of the ground surfaces around them, Bull. Earthquake. Res. Inst., 36, 99-134, 1958. """ import matplotlib.pyplot as plt from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.monitors import Monitor, VerboseMonitor from mystic.tools import getch, random_seed from numpy import pi, sqrt, array, mgrid, random, real, conjugate, arange from numpy.random import rand import numpy random_seed(123) from mystic.models import mogi; ForwardMogiFactory = mogi.ForwardFactory # Let the "actual parameters" be : actual_params = [1234.,-500., 10., .1] actual_forward = ForwardMogiFactory(actual_params) # The data to be "fitted" xstations = array([random.uniform(-30,30) for i in range(300)])+actual_params[0] ystations = 0*xstations + actual_params[1] stations = array((xstations, ystations)) data = actual_forward(stations) # noisy data, gaussian distribution with mean 0, sig 0.1e-3 noise = array([[random.normal(0,0.1e-3) for i in range(data.shape[1])] for j in range(data.shape[0])]) # Here is the "observed data" data_z = -data[2,:] + noise[2,:] # the stations are still at : stations def plot_noisy_data(): import matplotlib.pyplot as plt plt.plot(stations[0,:],data_z,'k.') # we need a filter for the forward model def filter_for_zdisp(input): return -input[2,:] # Here is the cost function def vec_cost_function(params): model = ForwardMogiFactory(params) zdisp = filter_for_zdisp(model(stations)) return 100. * (zdisp - data_z) # Here is the normed version def cost_function(params): x = vec_cost_function(params) return numpy.sum(real((conjugate(x)*x))) # a cost function with parameters "normalized" def vec_cost_function2(params): sca = numpy.array([1000, 100., 10., 0.1]) return vec_cost_function(sca * params) ND = 4 NP = 50 MAX_GENERATIONS = 2500 def de_solve(): solver = DifferentialEvolutionSolver(ND, NP) stepmon = Monitor() minrange = [-1000., -1000., -100., -10.]; maxrange = [1000., 1000., 100., 10.]; solver.SetRandomInitialPoints(min = minrange, max = maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) #termination = VTR(0.0000029) termination = ChangeOverGeneration(generations=100) solver.Solve(cost_function, termination=termination, \ CrossProbability=0.5, ScalingFactor=0.5) solution = solver.Solution() return solution, stepmon def plot_sol(params, linestyle = 'b-'): forward_solution = ForwardMogiFactory(params) xx = arange(-30,30,0.1)+actual_params[0] yy = 0*xx + actual_params[1] ss = array((xx, yy)) dd = forward_solution(ss) plt.plot(ss[0,:],-dd[2,:],'%s'%linestyle,linewidth=2.0) if __name__ == '__main__': from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT try: from scipy.optimize import leastsq, fmin_cg except ImportError: from mystic._scipyoptimize import fmin_cg leastsq = None # desol, dstepmon = de_solve() print("desol: %s" % desol) print("dstepmon 50: %s" % dstepmon.x[50]) print("dstepmon 100: %s" % dstepmon.x[100]) # # this will try to use nelder_mean from a relatively "near by" point (very sensitive) point = [1234., -500., 10., 0.001] # both cg and nm does fine point = [1000,-100,0,1] # cg will do badly on this one # this will try nelder-mead from an unconverged DE solution #point = dstepmon.x[-150] # simplex, esow = Monitor(), Monitor() solver = fmin(len(point)) solver.SetInitialPoints(point) solver.SetEvaluationMonitor(esow) solver.SetGenerationMonitor(simplex) solver.Solve(cost_function, CRT()) sol = solver.Solution() print("\nsimplex solution: %s" % sol) # solcg = fmin_cg(cost_function, point) print("\nConjugate-Gradient (Polak Rubiere) : %s" % solcg) # if leastsq: sollsq = leastsq(vec_cost_function, point) sollsq = sollsq[0] print("\nLeast Squares (Levenberg Marquardt) : %s" % sollsq) # legend = ['Noisy data', 'Differential Evolution', 'Nelder Mead', 'Polak Ribiere'] plot_noisy_data() plot_sol(desol,'r-') plot_sol(sol,'k--') plot_sol(solcg,'b-.') if leastsq: plot_sol(sollsq,'g-.') legend += ['Levenberg Marquardt'] plt.legend(legend) plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_mogi2.py000077500000000000000000000055771455553066500223130ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Two mogi sources. Similar to test_mogi.py. (See that one first) Reference: [1] Mogi, K. Relations between the eruptions of various volcanoes and the deformations of the ground surfaces around them, Bull. Earthquake. Res. Inst., 36, 99-134, 1958. """ from test_mogi import * # Let the "actual parameters" be : params0 = [1000.,-100., 10., .2] params1 = [1500.,-400., 40., 1.5] forward0 = ForwardMogiFactory(params0) forward1 = ForwardMogiFactory(params1) # The data to be "fitted" xstations = array([random.uniform(-500,500) for i in range(300)])+1250. ystations = 0*xstations - 200. stations = array((xstations, ystations)) data = forward0(stations) + forward1(stations) # noisy data, gaussian distribution noise = array([[random.normal(0,0.05e-5) for i in range(data.shape[1])] for j in range(data.shape[0])]) # observed data data_z = -data[2,:] + noise[2,:] def cost_function(params): m0 = ForwardMogiFactory(params[0:4]) m1 = ForwardMogiFactory(params[4:]) zdisp = filter_for_zdisp(m0(stations) + m1(stations)) x = zdisp - data_z return 100000. * numpy.sum(real((conjugate(x)*x))) def plot_noisy_data(): import matplotlib.pyplot as plt plt.plot(stations[0,:],-data[2,:]+noise[2,:],'k.') plt.draw() plt.pause(0.001) def plot_sol(params,linestyle='b-'): import matplotlib.pyplot as plt s0 = ForwardMogiFactory(params[0:4]) s1 = ForwardMogiFactory(params[4:]) xx = arange(-500,500,1)+1250. yy = 0*xx - 200. ss = array((xx, yy)) dd = s0(ss) + s1(ss) plt.plot(ss[0,:],-dd[2,:],'%s'%linestyle,linewidth=2.0) plt.draw() plt.pause(0.001) ND = 8 NP = 80 MAX_GENERATIONS = 5000 def de_solve(): solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = VerboseMonitor() minrange = [-1000., -1000., -100., -1.]*2; maxrange = [1000., 1000., 100., 1.]*2; solver.SetRandomInitialPoints(min = minrange, max = maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) solver.Solve(cost_function, \ termination=ChangeOverGeneration(generations=300), \ CrossProbability=0.5, ScalingFactor=0.5, \ sigint_callback = plot_sol) solution = solver.Solution() return solution, stepmon if __name__ == '__main__': plt.ion() plot_noisy_data() desol, dstepmon = de_solve() print("desol: %s" % desol) #plot_sol(dstepmon.x[-100],'k-') plot_sol(desol,'r-') getch() # end of file uqfoundation-mystic-9a49031/examples/test_mogi3.py000077500000000000000000000034401455553066500222770ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ One mogi source, similar to test_mogi, but uses CostFactory objects """ from test_mogi import * from mystic.forward_model import CostFactory from mystic.filters import component def de_solve(CF): solver = DifferentialEvolutionSolver(ND, NP) stepmon = Monitor() minrange = [-1000., -1000., -100., -10.]; maxrange = [1000., 1000., 100., 10.]; solver.SetRandomInitialPoints(min = minrange, max = maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) solver.Solve(CF, termination = ChangeOverGeneration(generations=100), \ CrossProbability=0.5, ScalingFactor=0.5) solution = solver.Solution() return solution, stepmon if __name__ == '__main__': F = CostFactory() F.addModel(ForwardMogiFactory, 4, 'mogi1', outputFilter=component(2)) myCostFunction = F.getCostFunction(evalpts=stations, observations=data_z) print(F) rp = F.getRandomParams() print("new Cost Function : %s " % myCostFunction(rp)) print("orig Cost Function: %s " % cost_function(rp)) f1 = ForwardMogiFactory(rp) f2 = ForwardMogiFactory(rp) print('start cf') for i in range(3000): xx = cost_function(rp) print('end cf') print('start cf2') for i in range(3000): xx = myCostFunction(rp) print('end cf2') #de_solve(cost_function) de_solve(myCostFunction) # end of file uqfoundation-mystic-9a49031/examples/test_mogi4.py000077500000000000000000000046001455553066500222770ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Similar to test_mogi2 (two sources) (See that one first) """ from test_mogi2 import params0, params1, stations, data, data_z, ND, NP, plot_sol, plot_noisy_data, MAX_GENERATIONS, ForwardMogiFactory from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.monitors import Monitor from mystic.tools import getch, random_seed from mystic.forward_model import CostFactory from mystic.filters import component def de_solve(CF): solver = DifferentialEvolutionSolver(ND, NP) solver.enable_signal_handler() stepmon = Monitor() minrange = [-1000., -1000., -100., -1.]*2; maxrange = [1000., 1000., 100., 1.]*2; solver.SetRandomInitialPoints(min = minrange, max = maxrange) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetGenerationMonitor(stepmon) solver.Solve(CF, termination = ChangeOverGeneration(generations=300), \ CrossProbability=0.5, ScalingFactor=0.5, \ sigint_callback = plot_sol) solution = solver.Solution() return solution, stepmon if __name__ == '__main__': F = CostFactory() F.addModel(ForwardMogiFactory, 4, 'mogi1', outputFilter=component(2, -1)) F.addModel(ForwardMogiFactory, 4, 'mogi2', outputFilter=component(2, -1)) myCostFunction = F.getCostFunction(evalpts=stations, observations=data_z) print(F) def C2(x): "This is the new version" return 100000 * myCostFunction(x) def C3(x): "Cost function constructed by hand" from test_mogi2 import cost_function return cost_function(x) def test(): "call me to see if the functions return the same thing" rp = F.getRandomParams() print("C2: %s" % C2(rp)) print("C3: %s" % C3(rp)) test() import matplotlib.pyplot as plt plot_noisy_data() desol, dstepmon = de_solve(C2) print("desol: %s" % desol) #plot_sol(dstepmon.x[-100],'k-') plot_sol(desol,'r-') getch() # end of file uqfoundation-mystic-9a49031/examples/test_mogi_basin.py000077500000000000000000000014211455553066500233650ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Similar to test_mogi.py but using scipy's basinhopping algorithm """ from test_mogi import * from scipy.optimize import basinhopping import matplotlib.pyplot as plt if __name__ == '__main__': sol = basinhopping(cost_function, [1000., -500., -10., 0.1], niter=100,T=10) print("scipy solution: %s" % sol.x) plot_noisy_data() plot_sol(sol.x,'r-') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_peaks.py000066400000000000000000000030251455553066500223600ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing the 'Peaks" Function. (tests VTR when minimum has negative value) """ from math import * from mystic.models import peaks nd = 2 npop = 20 tol = 0.05 lb = [-3.]*nd ub = [3.]*nd from mystic.tools import random_seed #random_seed(123) from mystic.differential_evolution import DifferentialEvolutionSolver from mystic.termination import VTR from mystic.termination import ChangeOverGeneration as COG solver = DifferentialEvolutionSolver(nd, npop) solver.SetRandomInitialPoints(lb, ub) solver.SetStrictRanges(lb, ub) term = VTR(tol) #term = COG() solver.Solve(peaks, term, disp=True) sol = solver.Solution() print('solution = %s' % sol) print('expected = [0.23, -1.63]') try: from scipy.stats import uniform except ImportError: exit() from mystic.math import Distribution print('-'*60) print('using a uniform distribution...') solver = DifferentialEvolutionSolver(nd, npop) solver.SetSampledInitialPoints(Distribution(uniform, lb[0], ub[0])) solver.SetStrictRanges(lb, ub) term = VTR(tol) #term = COG() solver.Solve(peaks, term, disp=True) sol = solver.Solution() print('solution = %s' % sol) print('expected = [0.23, -1.63]') uqfoundation-mystic-9a49031/examples/test_rosenbrock.py000077500000000000000000000072041455553066500234320ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Testing Rosenbrock's Function. This is a very popular function for testing minimization algorithm. The following provides tests for both bounded and unbounded minimization of the Rosenbrock function with Differential Evolution. For direct searches, Nelder-Mead does very well on this problem. For a direct comparison between DE and steepest-descent solvers, run test_rosenbrock*.py (or optimize.py in scipy.optimize). """ from mystic.solvers import DifferentialEvolutionSolver, diffev from mystic.termination import ChangeOverGeneration, VTR from mystic.models import rosen from mystic.monitors import Monitor, VerboseMonitor from mystic.tools import random_seed random_seed(123) ND = 3 NP = 30 #MAX_GENERATIONS = 29 MAX_GENERATIONS = 99999 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [0]*ND, max = [2]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(rosen, termination = VTR(0.0001), \ CrossProbability=0.5, ScalingFactor=0.6, disp=1) solution = solver.bestSolution #print("Current function value: %s" % solver.bestEnergy) #print("Iterations: %s" % solver.generations) #print("Function evaluations: %s" % solver.evaluations) print(solution) if __name__ == '__main__': from numpy import inf print("without bounds...") from timeit import Timer print("Differential Evolution") print("======================") t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s\n" % timetaken) print("with bounds...") import time times = [] algor = [] print("Differential Evolution") print("======================") start = time.time() esow= Monitor() ssow= Monitor() #ssow= VerboseMonitor(1) # import random # xinit = [random.random() for j in range(ND)] xinit = [0.8,1.2,0.7] # xinit = [0.8,1.2,1.7] #... better when using "bad" range min = [-0.999, -0.999, 0.999] #XXX: behaves badly when large range max = [200.001, 100.001, inf] #... for >=1 x0 out of bounds; (up xtol) # min = [-0.999, -0.999, -0.999] # max = [200.001, 100.001, inf] # min = [-0.999, -0.999, 0.999] #XXX: tight range and non-randomness # max = [2.001, 1.001, 1.001] #...: is _bad_ for DE solvers #print(diffev(rosen,xinit,NP,retall=0,full_output=0)) solver = DifferentialEvolutionSolver(len(xinit), NP) solver.SetInitialPoints(xinit) solver.SetStrictRanges(min,max) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.SetEvaluationMonitor(esow) solver.SetGenerationMonitor(ssow) solver.Solve(rosen, VTR(0.0001), \ CrossProbability=0.5, ScalingFactor=0.6, disp=1) sol = solver.bestSolution print(sol) #print("Current function value: %s" % solver.bestEnergy) #print("Iterations: %s" % solver.generations) #print("Function evaluations: %s" % solver.evaluations) times.append(time.time() - start) algor.append('Differential Evolution\t') for k,t in zip(algor,times): print("%s\t -- took %s" % (k, t)) #print(len(esow.x)) #print(len(ssow.x)) #print("\nstep x:\n%s" % ssow.x[1:10][0]) #print("\nstep y:\n%s" % ssow.y[1:10][0]) # end of file uqfoundation-mystic-9a49031/examples/test_rosenbrock2.py000077500000000000000000000040771455553066500235210ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ example of using NelderMeadSimplexSolver on the rosenbrock function """ from mystic.models import rosen import numpy if __name__=='__main__': import time times = [] algor = [] x0 = [0.8,1.2,0.7] #x0 = [0.8,1.2,1.7] #... better when using "bad" range min = [-0.999, -0.999, 0.999] #XXX: behaves badly when large range max = [200.001, 100.001, numpy.inf] #... for >=1 x0 out of bounds; (up xtol) # min = [-0.999, -0.999, -0.999] # max = [200.001, 100.001, numpy.inf] # min = [-0.999, -0.999, 0.999] # max = [2.001, 1.001, 1.001] print("Nelder-Mead Simplex") print("===================") start = time.time() from mystic.monitors import Monitor, VerboseMonitor #stepmon = VerboseMonitor(1) stepmon = Monitor() #VerboseMonitor(10) from mystic.termination import CandidateRelativeTolerance as CRT #from mystic._scipyoptimize import fmin from mystic.solvers import fmin, NelderMeadSimplexSolver #print(fmin(rosen,x0,retall=0,full_output=0,maxiter=121)) solver = NelderMeadSimplexSolver(len(x0)) solver.SetInitialPoints(x0) solver.SetStrictRanges(min,max) solver.SetEvaluationLimits(generations=146) solver.SetGenerationMonitor(stepmon) solver.enable_signal_handler() solver.Solve(rosen, CRT(xtol=4e-5), disp=1) print(solver.bestSolution) #print("Current function value: %s" % solver.bestEnergy) #print("Iterations: %s" % solver.generations) #print("Function evaluations: %s" % solver.evaluations) times.append(time.time() - start) algor.append('Nelder-Mead Simplex\t') for k,t in zip(algor,times): print("%s\t -- took %s" % (k, t)) # end of file uqfoundation-mystic-9a49031/examples/test_rosenbrock3.py000077500000000000000000000042631455553066500235170ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ example of using PowellDirectionalSolver on the rosenbrock function """ from mystic.models import rosen import numpy def constrain(x): x[1] = x[0] return x if __name__=='__main__': import time times = [] algor = [] x0 = [0.8,1.2,0.7] #x0 = [0.8,1.2,1.7] #... better when using "bad" range min = [-0.999, -0.999, 0.999] #XXX: behaves badly when large range max = [200.001, 100.001, numpy.inf] #... for >=1 x0 out of bounds; (up xtol) # min = [-0.999, -0.999, -0.999] # max = [200.001, 100.001, numpy.inf] # min = [-0.999, -0.999, 0.999] # max = [2.001, 1.001, 1.001] print("Powell Direction Set Method") print("===========================") start = time.time() from mystic.monitors import Monitor, VerboseMonitor stepmon = VerboseMonitor(1,1) #stepmon = Monitor() #VerboseMonitor(10) from mystic.termination import GradientNormTolerance as GNT #from mystic._scipyoptimize import fmin_powell from mystic.solvers import fmin_powell, PowellDirectionalSolver #print(fmin_powell(rosen,x0,retall=0,full_output=0)#,maxiter=14)) solver = PowellDirectionalSolver(len(x0)) solver.SetInitialPoints(x0) solver.SetStrictRanges(min,max) #solver.SetEvaluationLimits(generations=13) solver.SetGenerationMonitor(stepmon) solver.SetConstraints(constrain) solver.enable_signal_handler() solver.Solve(rosen, GNT(tolerance=1e-5), disp=1) print(solver.bestSolution) #print("Current function value: %s" % solver.bestEnergy) #print("Iterations: %s" % solver.generations) #print("Function evaluations: %s" % solver.evaluations) times.append(time.time() - start) algor.append("Powell's Method\t") for k,t in zip(algor,times): print("%s\t -- took %s" % (k, t)) # end of file uqfoundation-mystic-9a49031/examples/test_rosenbrock3b.py000077500000000000000000000043621455553066500236610ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Alta Fang (altafang @caltech and alta @princeton) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ example of using DifferentialEvolutionSolver on the rosenbrock function """ from mystic.models import rosen import numpy def constrain(x): x[1] = x[0] return x if __name__=='__main__': import time times = [] algor = [] x0 = [0.8,1.2,0.7] #x0 = [0.8,1.2,1.7] #... better when using "bad" range min = [-0.999, -0.999, 0.999] #XXX: behaves badly when large range max = [200.001, 100.001, numpy.inf] #... for >=1 x0 out of bounds; (up xtol) # min = [-0.999, -0.999, -0.999] # max = [200.001, 100.001, numpy.inf] # min = [-0.999, -0.999, 0.999] # max = [2.001, 1.001, 1.001] npop = 5*len(x0) print("Differential Evolution") print("======================") start = time.time() from mystic.monitors import Monitor, VerboseMonitor stepmon = VerboseMonitor(1,1) #stepmon = Monitor() #VerboseMonitor(10) from mystic.termination import NormalizedChangeOverGeneration as NCOG #from mystic.solvers import diffev, DifferentialEvolutionSolver from mystic.solvers import diffev2, DifferentialEvolutionSolver2 #print(diffev2(rosen,x0,npop,retall=0,full_output=0)#,maxiter=14)) solver = DifferentialEvolutionSolver2(len(x0), npop) solver.SetInitialPoints(x0) solver.SetStrictRanges(min,max) #solver.SetEvaluationLimits(generations=13) solver.SetGenerationMonitor(stepmon) solver.SetConstraints(constrain) solver.enable_signal_handler() solver.Solve(rosen, NCOG(tolerance=1e-4), disp=1) print(solver.bestSolution) #print("Current function value: %s" % solver.bestEnergy) #print("Iterations: %s" % solver.generations) #print("Function evaluations: %s" % solver.evaluations) times.append(time.time() - start) algor.append("Differential Evolution\t") for k,t in zip(algor,times): print("%s\t -- took %s" % (k, t)) # end of file uqfoundation-mystic-9a49031/examples/test_scem.py000077500000000000000000000016711455553066500222140ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Tests functionality of misc. functions in scem.py """ from mystic.scemtools import * import numpy print("Numpy Input") a = numpy.array([(i,i) for i in range(10)])*1. c = [numpy.linalg.norm(x,2) for x in a] print("%s %s" % (a,c)) a, c = sort_complex(a,c) print("%s %s" % (a,c)) print("List Input" ) a = numpy.array([(i,i) for i in range(10)])*1. c = [numpy.linalg.norm(x,2) for x in a] a,c = list(a), list(c) print("%s %s" % (a,c)) a, c = sort_complex(a,c) print("%s %s" % (a,c)) print("update complex") print("%s %s" % (a,c)) b = [2.5, 2.5] d = 5.6 update_complex(a,c,b,d,0) print("%s %s" % (a,c)) # end of file uqfoundation-mystic-9a49031/examples/test_svc1.py000077500000000000000000000063121455553066500221360ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Classification. Example 1 """ from numpy import * import matplotlib.pyplot as plt from mystic.svc import * # define the objective function to match standard QP solver # (see: http://www.mathworks.com/help/optim/ug/quadprog.html) # the objective funciton is very similar to the dual for SVC # (see: http://scikit-learn.org/stable/modules/svm.html#svc) def objective(x, Q, b): return 0.5 * dot(dot(x,Q),x) + dot(b,x) # define the data points for each class c1 = array([[0., 0.],[1., 0.],[ 0.2, 0.2],[0.,1.]]) c2 = array([[0, 1.1], [1.1, 0.],[0, 1.5],[0.5,1.2],[0.8, 1.7]]) # define the full data set X = concatenate([c1,c2]); nx = X.shape[0] # define the labels (+1 for c1; -1 for c2) y = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) # build the Kernel Matrix # get the QP quadratic and linear terms XX = concatenate([c1,-c2]) Q = KernelMatrix(XX) # Q_ij = K(x_i, x_j) b = -ones(nx) # b_i = 1 (in dual) # build the constraints (y.T * x = 0.0) # 1.0*x0 + 1.0*x1 + ... - 1.0*xN = 0.0 Aeq = y Beq = array([0.]) # set the bounds lb = zeros(nx) ub = 99999 * ones(nx) # build the constraints operator from mystic.symbolic import linear_symbolic, solve, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq,Beq) constrain = constraint(solvers(solve(constrain,target=['x0']))) from mystic import suppressed @suppressed(1e-5) def conserve(x): return constrain(x) #from mystic.monitors import VerboseMonitor #mon = VerboseMonitor(10) # solve the dual for alpha from mystic.solvers import diffev alpha = diffev(objective, list(zip(lb,ub)), args=(Q,b), npop=nx*3, gtol=200, \ # itermon=mon, \ ftol=1e-8, bounds=list(zip(lb,ub)), constraints=conserve, disp=1) print('solved x: %s' % alpha) print("constraint A*x == 0: %s" % inner(Aeq, alpha)) print("minimum 0.5*x'Qx + b'*x: %s" % objective(alpha, Q, b)) # calculate weight vectors, support vectors, and bias wv = WeightVector(alpha, X, y) sv1, sv2 = SupportVectors(alpha,y,epsilon=1e-6) bias = Bias(alpha, X, y) ym = (y.flatten()<0).nonzero()[0] yp = (y.flatten()>0).nonzero()[0] ii = inner(wv, X) bias2 = -0.5 *( max(ii[ym]) + min(ii[yp]) ) print('weight vector: %s' % wv) print('support vectors: %s %s' % (sv1, sv2)) print('bias (from points): %s' % bias) print('bias (with vectors): %s' % bias2) # plot data plt.plot(c1[:,0], c1[:,1], 'bo', markersize=5) plt.plot(c2[:,0], c2[:,1], 'yo', markersize=5) # plot hyperplane: wv[0] x + wv[1] y + bias = 0 xmin,xmax,ymin,ymax = plt.axis() hx = array([floor(xmin-.1), ceil(xmax+.1)]) hy = -wv[0]/wv[1] * hx - bias/wv[1] plt.plot(hx, hy, 'k-') #plt.axis([xmin,xmax,ymin,ymax]) # plot the support points plt.plot(XX[sv1,0], XX[sv1,1], 'bo', markersize=8) plt.plot(-XX[sv2,0], -XX[sv2,1], 'yo', markersize=8) #plt.axis('equal') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_svc2.py000077500000000000000000000075631455553066500221500ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Classification. Example 2. using meristem data from data files """ from numpy import * import matplotlib.pyplot as plt from mystic.svc import * import os.path # define the objective function to match standard QP solver # (see: http://www.mathworks.com/help/optim/ug/quadprog.html) # the objective funciton is very similar to the dual for SVC # (see: http://scikit-learn.org/stable/modules/svm.html#svc) def objective(x, Q, b): return 0.5 * dot(dot(x,Q),x) + dot(b,x) # SETTINGS reduced = True # use a subset of the full data overlap = False # reduce the distance between the datasets # define the data points for each class c1 = loadtxt(os.path.join('DATA','g1.pts')) c2 = loadtxt(os.path.join('DATA','g2.pts')) if reduced: c1 = c1[c1[:,0] > 245] c2 = c2[c2[:,0] < 280] if overlap: c1[:,0] += 3 # make the datasets overlap a little # define the full data set X = concatenate([c1,c2]); nx = X.shape[0] # define the labels (+1 for c1; -1 for c2) y = concatenate([ones(c1.shape[0]), -ones(c2.shape[0])]).reshape(1,nx) # build the Kernel Matrix # get the QP quadratic and linear terms XX = concatenate([c1,-c2]) Q = KernelMatrix(XX) # Q_ij = K(x_i, x_j) b = -ones(nx) # b_i = 1 (in dual) # build the constraints (y.T * x = 0.0) # 1.0*x0 + 1.0*x1 + ... - 1.0*xN = 0.0 Aeq = y Beq = array([0.]) # set the bounds lb = zeros(nx) ub = 1 * ones(nx) _b = .1 * ones(nx) # good starting value if most solved xi should be zero # build the constraints operator from mystic.symbolic import linear_symbolic, solve, simplify, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq,Beq) #NOTE: HACK assumes a single equation of the form: '1.0*x0 + ... = 0.0\n' x0,rhs = constrain.strip().split(' = ') x0,xN = x0.split(' + ', 1) N,x0 = x0.split("*") constrain = "{x0} = ({rhs} - ({xN}))/{N}".format(x0=x0, xN=xN, N=N, rhs=rhs) #NOTE: end HACK (as mystic.symbolic.solve takes __forever__) constrain = constraint(solvers(constrain)) #constrain = constraint(solvers(solve(constrain))) from mystic import suppressed @suppressed(5e-2) def conserve(x): return constrain(x) from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) # solve the dual for alpha from mystic.solvers import diffev alpha = diffev(objective, list(zip(lb,_b)), args=(Q,b), npop=nx*3, gtol=200,\ itermon=mon, \ ftol=1e-8, bounds=list(zip(lb,ub)), constraints=conserve, disp=1) print('solved x: %s' % alpha) print("constraint A*x == 0: %s" % inner(Aeq, alpha)) print("minimum 0.5*x'Qx + b'*x: %s" % objective(alpha, Q, b)) # calculate weight vectors, support vectors, and bias wv = WeightVector(alpha, X, y) sv1, sv2 = SupportVectors(alpha,y,epsilon=1e-6) bias = Bias(alpha, X, y) ym = (y.flatten()<0).nonzero()[0] yp = (y.flatten()>0).nonzero()[0] ii = inner(wv, X) bias2 = -0.5 *( max(ii[ym]) + min(ii[yp]) ) print('weight vector: %s' % wv) print('support vectors: %s %s' % (sv1, sv2)) print('bias (from points): %s' % bias) print('bias (with vectors): %s' % bias2) # plot data plt.plot(c1[:,0], c1[:,1], 'bo', markersize=5) plt.plot(c2[:,0], c2[:,1], 'yo', markersize=5) # plot hyperplane: wv[0] x + wv[1] y + bias = 0 xmin,xmax,ymin,ymax = plt.axis() hx = array([floor(xmin-.1), ceil(xmax+.1)]) hy = -wv[0]/wv[1] * hx - bias/wv[1] plt.plot(hx, hy, 'k-') #plt.axis([xmin,xmax,ymin,ymax]) # plot the support points plt.plot(XX[sv1,0], XX[sv1,1], 'bo', markersize=8) plt.plot(-XX[sv2,0], -XX[sv2,1], 'yo', markersize=8) #plt.axis('equal') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_svr1.py000077500000000000000000000050221455553066500221520ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Regression. Example 1 """ from numpy import * import matplotlib.pyplot as plt from mystic.svr import * # define the objective function to match standard QP solver # (see: http://www.mathworks.com/help/optim/ug/quadprog.html) def objective(x, Q, b): return 0.5 * dot(dot(x,Q),x) + dot(b,x) # define the data points (linear data with uniform scatter) x = arange(-5, 5.001); nx = x.size y = x + 7*random.rand(nx) N = 2*nx # build the Kernel Matrix (with linear kernel) # get the QP quadratic term X = concatenate([x,-x]) lk = LinearKernel Q = KernelMatrix(X, kernel=lk) # get the QP linear term Y = concatenate([y,-y]) svr_epsilon = 3 b = Y + svr_epsilon * ones(Y.size) # build the constraints (y.T * x = 0.0) # 1.0*x0 + 1.0*x1 + ... - 1.0*xN = 0.0 Aeq = concatenate([ones(nx), -ones(nx)]).reshape(1,N) Beq = array([0.]) # set the bounds lb = zeros(N) ub = zeros(N) + 0.5 # build the constraints operator from mystic.symbolic import linear_symbolic, solve, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq,Beq) constrain = constraint(solvers(solve(constrain,target=['x0']))) from mystic import suppressed @suppressed(1e-5) def conserve(x): return constrain(x) from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) # solve for alpha from mystic.solvers import diffev alpha = diffev(objective, list(zip(lb,.1*ub)), args=(Q,b), npop=N*3, gtol=200, \ itermon=mon, \ ftol=1e-5, bounds=list(zip(lb,ub)), constraints=conserve, disp=1) print('solved x: %s' % alpha) print("constraint A*x == 0: %s" % inner(Aeq, alpha)) print("minimum 0.5*x'Qx + b'*x: %s" % objective(alpha, Q, b)) # calculate support vectors and regression function sv1 = SupportVectors(alpha[:nx]) sv2 = SupportVectors(alpha[nx:]) R = RegressionFunction(x, y, alpha, svr_epsilon, lk) print('support vectors: %s %s' % (sv1, sv2)) # plot data plt.plot(x, y, 'k+', markersize=10) # plot regression function and support plt.plot(x,R(x), 'k-') plt.plot(x,R(x)-svr_epsilon, 'r--') plt.plot(x,R(x)+svr_epsilon, 'g--') plt.plot(x[sv1],y[sv1],'ro') plt.plot(x[sv2],y[sv2],'go') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_svr2.py000077500000000000000000000051141455553066500221550ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Support Vector Regression. Example 2 """ from numpy import * import matplotlib.pyplot as plt from mystic.svr import * # define the objective function to match standard QP solver # (see: http://www.mathworks.com/help/optim/ug/quadprog.html) def objective(x, Q, b): return 0.5 * dot(dot(x,Q),x) + dot(b,x) # define the data points (quadratic data with uniform scatter) x = arange(-5, 5.001); nx = x.size y = x*x + 8*random.rand(nx) N = 2*nx # build the Kernel Matrix (with custom k) # get the QP quadratic term X = concatenate([x,-x]) pk = lambda a1,a2: PolynomialKernel(a1,a2,2) Q = KernelMatrix(X, kernel=pk) # get the QP linear term Y = concatenate([y,-y]) svr_epsilon = 4 b = Y + svr_epsilon * ones(Y.size) # build the constraints (y.T * x = 0.0) # 1.0*x0 + 1.0*x1 + ... - 1.0*xN = 0.0 Aeq = concatenate([ones(nx), -ones(nx)]).reshape(1,N) Beq = array([0.]) # set the bounds lb = zeros(N) ub = zeros(N) + 0.5 # build the constraints operator from mystic.symbolic import linear_symbolic, solve, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq,Beq) constrain = constraint(solvers(solve(constrain,target=['x0']))) from mystic import suppressed @suppressed(1e-5) def conserve(x): return constrain(x) from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) # solve for alpha from mystic.solvers import diffev alpha = diffev(objective, list(zip(lb,.1*ub)), args=(Q,b), npop=N*3, gtol=400, \ itermon=mon, \ ftol=1e-5, bounds=list(zip(lb,ub)), constraints=conserve, disp=1) print('solved x: %s' % alpha) print("constraint A*x == 0: %s" % inner(Aeq, alpha)) print("minimum 0.5*x'Qx + b'*x: %s" % objective(alpha, Q, b)) # calculate support vectors and regression function sv1 = SupportVectors(alpha[:nx]) sv2 = SupportVectors(alpha[nx:]) R = RegressionFunction(x, y, alpha, svr_epsilon, pk) print('support vectors: %s %s' % (sv1, sv2)) # plot data plt.plot(x, y, 'k+', markersize=10) # plot regression function and support xx = arange(min(x),max(x),0.1) plt.plot(xx,R(xx)) plt.plot(xx,R(xx)-svr_epsilon, 'r--') plt.plot(xx,R(xx)+svr_epsilon, 'g--') plt.plot(x[sv1],y[sv1],'ro') plt.plot(x[sv2],y[sv2],'go') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_twistedgaussian.py000077500000000000000000000052061455553066500245010ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ The Twisted Gausssian in "Shuffled Complex Evolution Metropolis" Algoritm of Vrugt et al. [1] Reference: [1] Jasper A. Vrugt, Hoshin V. Gupta, Willem Bouten, and Soroosh Sorooshian A Shuffled Complex Evolution Metropolis algorithm for optimization and uncertainty assessment of hydrologic model parameters WATER RESOURCES RESEARCH, VOL. 39, NO. 8, 1201, doi:10.1029/2002WR001642, 2003 Link to paper: http://www.agu.org/pubs/crossref/2003/2002WR001642.shtml [2] Vrugt JA, Nuallain , Robinson BA, Bouten W, Dekker SC, Sloot PM Application of parallel computing to stochastic parameter estimation in environmental models Computers & Geosciences, Vol. 32, No. 8. (October 2006), pp. 1139-1155. Link to paper: http://www.science.uva.nl/research/scs/papers/archive/Vrugt2006b.pdf """ from mystic.scemtools import * from numpy import zeros, identity, array from numpy import random # dimension of density function n = 2 # number of parallel chains q = 10 # number of points per complex m = 100 m1 = zeros(n) S1 = identity(n) S1[0,0] = 100 def twist(X): b = 0.1 Y = array(X)*1. Y[1] += b * X[0]**2 - 100. * b return Y p = multinormal_pdf(m1,S1) def target(X): return p(twist(X)) def proposal(X): return random.multivariate_normal(X, 10. * identity(n)) def initpop(npts, ndim): return random.rand(npts, ndim) * 200. -1 a = initpop(q*m, n) Cs = sort_and_deal(a, target, q) Ck = Cs[0] # 0 for the first deal, -1 for the last ak = [target(c) for c in Ck] Sk = [ Ck[0] ] Sak = [ ak[0] ] L = 10000 if __name__=='__main__': from mystic.metropolis import * import time t1 = time.time() for i in range(L): scem(Ck, ak, Sk, Sak, target, 0.1) t2 = time.time() print("SCEM 1 chain for x[%d] took %0.3f ms" % (len(Sk), (t2-t1)*1000)) Sk = array(Sk) t1 = time.time() x = [ [0,10] ] for i in range(L): x.append(metropolis_hastings(proposal, target, x[-1])) t2 = time.time() print("2D Metropolis for x[%d] took %0.3f ms" % (len(x), (t2-t1)*1000)) x = array(x) #import dill #dill.dump(x, open('twisted1.pkl','w')) #dill.dump(Sk, open('twisted1.pkl','w')) import matplotlib.pyplot as plt plt.plot(Sk[:,0],Sk[:,1],'r.') plt.plot(x[:,0] + 30,x[:,1],'b.') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_twistedgaussian2.py000077500000000000000000000026651455553066500245710ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ In test_twistedgaussian, we compared SCEM (one chain) with metropolis. Now we will use n-chain SCEM . """ from test_twistedgaussian import * a = initpop(q*m, n) b = list(map(target, a)) a,b = sort_ab_with_b(a,b) Cs = sequential_deal(a, q) As = [xx.tolist() for xx in sequential_deal(b, q)] if __name__=='__main__': from mystic.metropolis import * import time Sk = [ [Cs[i][0]] for i in range(q) ] Sak = [ [As[i][0]] for i in range(q) ] for iter in range(5): # this is parallel print("iteration: %s" % str(iter+1)) for chain in range(q): for i in range(1000): scem(Cs[chain], As[chain], Sk[chain], Sak[chain], target, 0.1) # need to gather and remix Cs , As = remix(Cs, As) from mystic.tools import flatten_array Sk = [a[100:] for a in Sk] # throw away the first 100 pts of each chain sk = flatten_array(Sk,1) #print("length of sk: %s" % len(sk)) import matplotlib.pyplot as plt plt.plot(sk[:,0],sk[:,1],'r.') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_twistedgaussian3.py000077500000000000000000000045431455553066500245670ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ In test_twistedgaussian, we compared SCEM (one chain) with metropolis. Now we will use n-chain SCEM / in parallel. """ from test_twistedgaussian import * a = initpop(q*m, n) b = list(map(target, a)) a,b = sort_ab_with_b(a,b) Cs = sequential_deal(a, q) As = [xx.tolist() for xx in sequential_deal(b, q)] def scemmap(Q): from test_twistedgaussian import scem Cs, As, Sk, Sak, target, cn = Q niter = 1000 for i in range(niter): scem(Cs, As, Sk, Sak, target, 0.1) return Cs,As,Sk,Sak if __name__=='__main__': import time from mystic.metropolis import * # if available, use a multiprocessing worker pool try: from pathos.helpers import freeze_support, shutdown freeze_support() # help Windows use multiprocessing from pathos.pools import ProcessPool as Pool map = Pool().map except ImportError: shutdown = lambda x=None:None pass Sk = [ [Cs[i][0]] for i in range(q) ] Sak = [ [As[i][0]] for i in range(q) ] args = [(Cs[chain], As[chain], Sk[chain], Sak[chain], target, 0.1) for chain in range(q)] for iter in range(5): # this is parallel print("iteration: %s" % str(iter+1)) res = list(map(scemmap, args)) Cs = [x[0] for x in res] As = [x[1] for x in res] Sk = [x[2] for x in res] Sak = [x[3] for x in res] # need to gather and remix Cs , As = remix(Cs, As) args = [(Cs[chain], As[chain], Sk[chain], Sak[chain], target, 0.1) for chain in range(q)] from mystic.tools import flatten_array Sk = [a[100:] for a in Sk] # throw away the first 100 pts of each chain sk = flatten_array(Sk,1) #import dill #print("Writing to data file") #dill.dump(sk, open('tg3.pkl','w')) shutdown() try: import matplotlib.pyplot as plt except: print("Install matplotlib for visualization") else: plt.plot(sk[:,0],sk[:,1],'r.') plt.show() # end of file uqfoundation-mystic-9a49031/examples/test_wavy.py000077500000000000000000000060121455553066500222450ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ test some simple multi-minima functions, such as |x + 3 sin[x]| """ from mystic.solvers import DifferentialEvolutionSolver2 as DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Best1Bin, Rand1Exp from mystic.monitors import VerboseMonitor from mystic.tools import getch from numpy import arange from mystic.solvers import fmin #from mystic._scipyoptimize import fmin from mystic.tools import random_seed random_seed(123) from mystic.models import wavy1, wavy2 wavy = wavy1 def show(): import matplotlib.pyplot as plt, Image plt.savefig('test_wavy_out',dpi=100) im = Image.open('test_wavy_out.png') im.show() return def plot_solution(sol=None): try: import matplotlib.pyplot as plt x = arange(-40,40,0.01) y = wavy(x) plt.plot(x,y) if sol is not None: plt.plot(sol, wavy(sol), 'r+') try: show() except ImportError: plt.show() except ImportError: print("Install matplotlib for visualization") pass ND = 1 NP = 20 MAX_GENERATIONS = 100 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [-100.0]*ND, max = [100.0]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.enable_signal_handler() strategy = Best1Bin stepmon = VerboseMonitor(1) solver.SetGenerationMonitor(stepmon) #solver.SetReducer(sum, arraylike=True) # reduce wavy's multi-valued return solver.Solve(wavy, ChangeOverGeneration(generations=50), \ strategy=strategy, CrossProbability=1.0, ScalingFactor=0.9, \ sigint_callback = plot_solution) solution = solver.Solution() return solution, solver if __name__ == '__main__': #solution = main() scipysol = fmin(wavy, [0.1]) desol, solver = main() #plot_solution(scipysol) #plot_solution(desol) print("fmin: %s %s" % (scipysol, wavy(scipysol))) print("dife: %s %s" % (desol, wavy(desol))) try: import matplotlib.pyplot as plt x = arange(-40,40,0.01) plt.plot(x,wavy(x)) plt.plot(scipysol, wavy(scipysol), 'r+',markersize=8) plt.plot(desol, wavy(desol), 'bo',markersize=8) plt.legend(('|x + 3 sin(x+pi)|','fmin','dife')) if hasattr(solver, 'genealogy'): xx = solver.genealogy plt.plot(xx[4], wavy(xx[4]), 'g-',markersize=3) plt.plot(xx[10], wavy(xx[10]), 'y-',markersize=3) try: show() except ImportError: plt.show() except ImportError: print("Install matplotlib for visualization") # end of file uqfoundation-mystic-9a49031/examples/test_zimmermann.py000077500000000000000000000043541455553066500234430ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Patrick Hung (patrickh @caltech) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Sets up Zimmermann's problem. This is problem 8 of testbed 1 in [1] and [2]. Solution: Min of 0 @ Vector[0] Reference: [1] Storn, R. and Price, K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. Journal of Global Optimization 11: 341-359, 1997. [2] Storn, R. and Proce, K. Same title as above, but as a technical report. try: http://www.icsi.berkeley.edu/~storn/deshort1.ps """ from mystic.solvers import DifferentialEvolutionSolver from mystic.termination import ChangeOverGeneration, VTR from mystic.strategy import Best1Exp, Rand1Exp from mystic.tools import random_seed random_seed(123) # Eq. (24-26) of [2]. from mystic.models import zimmermann as CostFunction ND = 2 NP = 20 MAX_GENERATIONS = 2500 def main(): solver = DifferentialEvolutionSolver(ND, NP) solver.SetRandomInitialPoints(min = [0.]*ND, max = [5.]*ND) solver.SetEvaluationLimits(generations=MAX_GENERATIONS) solver.Solve(CostFunction, termination=VTR(0.0000001), strategy=Rand1Exp, \ CrossProbability=0.3, ScalingFactor=1.0) solution = solver.Solution() print(solution) if __name__ == '__main__': from timeit import Timer t = Timer("main()", "from __main__ import main") timetaken = t.timeit(number=1) print("CPU Time: %s" % timetaken) from mystic.monitors import Monitor from mystic.solvers import NelderMeadSimplexSolver as fmin from mystic.termination import CandidateRelativeTolerance as CRT import random simplex = Monitor() esow = Monitor() xinit = [random.uniform(0,5) for j in range(ND)] solver = fmin(len(xinit)) solver.SetInitialPoints(xinit) solver.SetEvaluationMonitor(esow) solver.SetGenerationMonitor(simplex) solver.Solve(CostFunction, CRT()) sol = solver.Solution() print("fmin solution: %s" % sol) # end of file uqfoundation-mystic-9a49031/examples2/000077500000000000000000000000001455553066500177265ustar00rootroot00000000000000uqfoundation-mystic-9a49031/examples2/README000066400000000000000000000012711455553066500206070ustar00rootroot00000000000000Files in this directory demonstrate several use cases for mystic's constraints solvers and penalty functions, including working with symbolic constraints, inequality constraints, and special cases like constraining to the set of integers. == Notes on mystic examples2 == Dependencies: - No new dependencies are required. Naming conventions: - Several problems are reused to demonstrate alternate formulations. Alternate formulations are denoted by appending `_alt` and `_alt2` to the name. Variants show different ways to build mystic's constraints and penalty funtions. Also, within a single file, there may be multiple solutions for the same problem, using a penalty, constraints, or both. uqfoundation-mystic-9a49031/examples2/beam.py000066400000000000000000000064411455553066500212110ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE "Welded Beam Design" def objective(x): x0,x1,x2,x3 = x return 1.10471*x0**2*x1 + 0.04811*x2*x3*(14.0 + x1) bounds = [(0.125,10)] + [(0.1,10)]*3 # with penalty='penalty' applied, solution is: xs = [ 0.20572964, 7.09241428, 9.03662391, 0.20572964] ys = 2.21815086 # default parameters P = 6000. L = 14. E = 30.e+6 G = 12.e+6 t_max = 13600. s_max = 30000. d_max = 0.25 # parameter equations def M(x, P=P, L=L): return P*(L + x[1]/2.) def R(x): return (0.25*(x[1]**2 + (x[0] + x[2])**2))**.5 def J(x): return 2./2**.5 * x[0] * x[1] * (x[1]**2/12. + 0.25*(x[0] + x[2])**2) def P_c(x, L=L, E=E, G=G): return (4.013*E/(6*L**2)) * x[2]*x[3]**3 * (1-0.25*x[2]*(E/G)**.5/L) def t1(x, P=P): return P/(2**.5 * x[0] * x[1]) def t2(x, P=P, L=L): return M(x,P,L)*R(x)/J(x) def t(x, P=P, L=L): return (t1(x,P)**2 + t1(x,P)*t2(x,P,L)*x[1]/R(x) + t2(x,P,L)**2)**.5 def s(x, P=P, L=L): return 6*P*L/(x[3] * x[2]**2) def d(x, P=P, L=L, E=E): return 4*P*L**3/(E * x[3] * x[2]**3) from mystic.penalty import quadratic_inequality def generate_penalty(**kwds): "enable override of P,L,E,G,t_max,s_max,d_max in penalties" def penalty1(x, P=P, L=L, t_max=t_max, **kwd): # <= 0.0 return t(x,P,L) - t_max def penalty2(x, P=P, L=L, s_max=s_max, **kwd): # <= 0.0 return s(x,P,L) - s_max def penalty3(x, **kwd): # <= 0.0 return x[0] - x[3] def penalty4(x, **kwd): # <= 0.0 return 0.10471*x[0]**2 + 0.04811*x[2]*x[3]*(14.0 + x[1]) - 5.0 def penalty5(x, P=P, L=L, E=E, d_max=d_max, **kwd): # <= 0.0 return d(x,P,L,E) - d_max def penalty6(x, P=P, L=L, E=E, G=G, **kwd): # <= 0.0 return P - P_c(x,L,E,G) @quadratic_inequality(penalty1, k=1e12, kwds=kwds) @quadratic_inequality(penalty2, k=1e12, kwds=kwds) @quadratic_inequality(penalty3, k=1e12, kwds=kwds) @quadratic_inequality(penalty4, k=1e12, kwds=kwds) @quadratic_inequality(penalty5, k=1e12, kwds=kwds) @quadratic_inequality(penalty6, k=1e12, kwds=kwds) def penalty(x): return 0.0 return penalty if __name__ == '__main__': parameters = { 'P': 6000., 'L': 14., 'E': 30.e+6, 'G': 12.e+6, 't_max': 13600., 's_max': 30000., 'd_max': 0.25, } from mystic.solvers import diffev2 from mystic.math import almostEqual penalty = generate_penalty(**parameters) result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/boolean.py000066400000000000000000000021471455553066500217230ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Maximization with a boolean variable and constraints. Maximize: sum_{i=1}^{n-1} sum_{j=i+1}^{n} w_{ij} x_{i} x_{j} where: sum_{i=1}^{n} x_{i} < b x_{i} in {0,1} """ from mystic.solvers import diffev2 from mystic.monitors import VerboseMonitor from mystic.constraints import impose_sum, discrete, and_ import numpy as np N = 10 b = 5 bounds = [(0,1)] * N def objective(x, w): s = 0 for i in range(len(x)-1): for j in range(i, len(x)): s += w[i,j] * x[i] * x[j] return s w = np.ones((N,N)) #XXX: replace with actual values of wij cost = lambda x: -objective(x, w) c = and_(lambda x: impose_sum(b, x), discrete([0,1])(lambda x:x)) mon = VerboseMonitor(10) solution = diffev2(cost,bounds,constraints=c,bounds=bounds,itermon=mon,gtol=50, maxiter=5000, maxfun=50000, npop=10) print(solution) uqfoundation-mystic-9a49031/examples2/constrained_scipy.py000066400000000000000000000032241455553066500240210ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example applying mystic to scipy.optimize Minimize: f(x) = 3*A + 1e-6*A**3 + 2*B + 2e-6/(3*B**3) + C**2 x = A,B,C Where: A*B + C >= 1 B <= A 5 >= A >= -5 5 >= B >= -5 5 >= C >= -5 """ import mystic as my import mystic.symbolic as ms import scipy.optimize as so equations = """ A*B + C >= 1 B <= A A >= -5 B >= -5 C >= -5 5 >= A 5 >= B 5 >= C """ var = list('ABC') eqns = ms.simplify(equations, variables=var, all=True) constrain = ms.generate_constraint(ms.generate_solvers(eqns, var), join=my.constraints.and_) def objective(x): return 3*x[0] + 1.e-6*x[0]**3 + 2*x[1] + 2.e-6/3*x[1]**3 + x[2]**2 mon = my.monitors.Monitor() def cost(x): kx = constrain(x) y = objective(kx) mon(kx,y) return y if __name__ == '__main__': from mystic.math import almostEqual result = so.fmin(cost, [1,1,1], xtol=1e-6, ftol=1e-6, full_output=True, disp=False) # check results are consistent with monitor assert almostEqual(result[1], min(mon.y), rel=1e-2) # check results satisfy constraints A,B,C = result[0] print(dict(A=A, B=B, C=C)) eps = 0.2 #XXX: give it some small wiggle room for small violations assert A*B + C >= 1-eps assert B <= A+eps assert (5+eps) >= A >= -(5+eps) assert (5+eps) >= B >= -(5+eps) assert (5+eps) >= C >= -(5+eps) uqfoundation-mystic-9a49031/examples2/crypta.py000066400000000000000000000100531455553066500216010ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/crypta.py # with Copyright 2010 Hakan Kjellerstrand hakank@bonetmail.com # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Cryptarithmetic puzzle in Google CP Solver. Prolog benchmark problem ''' Name : crypta.pl Title : crypt-arithmetic Original Source: P. Van Hentenryck's book Adapted by : Daniel Diaz - INRIA France Date : September 1992 Solve the operation: B A I J J A J I I A H F C F E B B J E A + D H F G A B C D I D B I F F A G F E J E ----------------------------------------- = G J E G A C D D H F A F J B F I H E E F ''' """ def objective(x): return 0.0 bounds = [(0,9)]*10 + [(0,1)]*2 # with penalty='penalty' applied, solution is: xs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 0] ys = 0.0 # constraints equations = """ A + 10*E + 100*J + 1000*B + 10000*B + 100000*E + 1000000*F + E + 10*J + 100*E + 1000*F + 10000*G + 100000*A + 1000000*F - F - 10*E - 100*E - 1000*H - 10000*I - 100000*F - 1000000*B - 10000000*Y == 0 C + 10*F + 100*H + 1000*A + 10000*I + 100000*I + 1000000*J + F + 10*I + 100*B + 1000*D + 10000*I + 100000*D + 1000000*C + Y - J - 10*F - 100*A - 1000*F - 10000*H - 100000*D - 1000000*D - 10000000*Z == 0 A + 10*J + 100*J + 1000*I + 10000*A + 100000*B + B + 10*A + 100*G + 1000*F + 10000*H + 100000*D + Z - C - 10*A - 100*G - 1000*E - 10000*J - 100000*G == 0 """ var = list('ABCDEFGHIJYZ') # correct bounds for: # B - 1 >= 0 # D - 1 >= 0 # G - 1 >= 0 bounds[1] = bounds[3] = bounds[6] = (1,9) #NOTE: FOR A MORE DIFFICULT PROBLEM, COMMENT OUT THE FOLLOWING 2 LINES bounds[-1] = (0,0) bounds[-2] = (1,1) from mystic.constraints import unique, near_integers from mystic.symbolic import generate_constraint, generate_solvers, solve from mystic.symbolic import generate_penalty, generate_conditions pf = generate_penalty(generate_conditions(equations,var),k=1e-6) cf = generate_constraint(generate_solvers(solve(equations,var))) from mystic.penalty import quadratic_inequality, quadratic_equality #@quadratic_equality(near_integers) def penalty(x): return pf(x) #return 0.0 #XXX: better way to constrain the last 2 (0,1) differently than rest (0,9)? from numpy import round, hstack, clip def constraint(x): # x[0:10] in range(0,10); x[10:] in range(0,2) x = round(x).astype(int) # force round and convert type to int x0,x1 = x[:-2],x[-2:] x0 = clip(x0, 0,9) #XXX: hack to impose bounds x1 = clip(x1, 0,1) #XXX: hack to impose bounds x0 = unique(x0, list(range(0,10))) return hstack([x0, x1]) if __name__ == '__main__': from mystic.solvers import diffev2, lattice from mystic.math import almostEqual from mystic.monitors import Monitor, VerboseMonitor mon = VerboseMonitor(10)#,10) #result = lattice(objective, 12, 960, bounds=bounds, penalty=penalty, constraints=constraint, ftol=1e-6, xtol=1e-6, disp=True, full_output=True, itermon=mon, maxiter=25) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=constraint, npop=80, gtol=100, disp=True, full_output=True) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, constraints=constraint, npop=1000, ftol=1e-8, gtol=50, disp=True, full_output=True, cross=0.9, scale=0.9, itermon=mon) #FIXME: SOLVES at about 20%?... but w/ last 2 fixed 90%? result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, constraints=constraint, npop=360, ftol=1e-8, gtol=200, disp=True, full_output=True, cross=0.2, scale=0.9, itermon=mon) print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) #XXX: fails b/c rel & zero? assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/crypto.py000066400000000000000000000103771455553066500216300ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/crypto.py # with Copyright 2010 Hakan Kjellerstrand hakank@bonetmail.com # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Crypto problem in Google CP Solver. Prolog benchmark problem ''' Name : crypto.pl Original Source: P. Van Hentenryck's book Adapted by : Daniel Diaz - INRIA France Date : September 1992 ''' """ def objective(x): return 0.0 nletters = 26 bounds = [(1,nletters)]*nletters # with penalty='penalty' applied, solution is: # A B C D E F G H I J K L M N O P Q xs = [ 5, 13, 9, 16, 20, 4, 24, 21, 25, 17, 23, 2, 8, 12, 10, 19, 7, \ # R S T U V W X Y Z 11, 15, 3, 1, 26, 6, 22, 14, 18] ys = 0.0 # constraints equations = """ B + A + L + L + E + T - 45 == 0 C + E + L + L + O - 43 == 0 C + O + N + C + E + R + T - 74 == 0 F + L + U + T + E - 30 == 0 F + U + G + U + E - 50 == 0 G + L + E + E - 66 == 0 J + A + Z + Z - 58 == 0 L + Y + R + E - 47 == 0 O + B + O + E - 53 == 0 O + P + E + R + A - 65 == 0 P + O + L + K + A - 59 == 0 Q + U + A + R + T + E + T - 50 == 0 S + A + X + O + P + H + O + N + E - 134 == 0 S + C + A + L + E - 51 == 0 S + O + L + O - 37 == 0 S + O + N + G - 61 == 0 S + O + P + R + A + N + O - 82 == 0 T + H + E + M + E - 72 == 0 V + I + O + L + I + N - 100 == 0 W + A + L + T + Z - 34 == 0 """ var = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') #NOTE: FOR A MORE DIFFICULT PROBLEM, COMMENT OUT THE FOLLOWING 5 LINES bounds[0] = (5,5) # A bounds[4] = (20,20) # E bounds[8] = (25,25) # I bounds[14] = (10,10) # O bounds[20] = (1,1) # U from mystic.symbolic import symbolic_bounds equations += symbolic_bounds(*zip(*bounds), variables=var) from mystic.constraints import unique, near_integers, has_unique from mystic.symbolic import generate_penalty, generate_conditions pf = generate_penalty(generate_conditions(equations,var),k=1) from mystic.constraints import as_constraint cf = as_constraint(pf) from mystic.penalty import quadratic_equality @quadratic_equality(near_integers) @quadratic_equality(has_unique) def penalty(x): return pf(x) from numpy import round, hstack, clip def constraint(x): x = round(x).astype(int) # force round and convert type to int x = clip(x, 1,nletters) #XXX: hack to impose bounds x = unique(x, list(range(1,nletters+1))) return x from mystic.constraints import and_, discrete, impose_unique candidates = list(range(1,nletters+1)) constraint = and_(discrete(candidates)(lambda x:round(x).astype(int)), impose_unique(candidates)(lambda x:x)) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual from mystic.monitors import Monitor, VerboseMonitor mon = VerboseMonitor(10)#,10) result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=constraint, npop=130, ftol=1e-8, gtol=1000, disp=True, full_output=True, cross=0.1, scale=1.0, itermon=mon) # FIXME: solves at 0%... but w/ vowels fixed 80%? #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=constraint, npop=52, ftol=1e-8, gtol=2000, disp=True, full_output=True, cross=0.1, scale=1.0, itermon=mon) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=constraint, npop=130, ftol=1e-8, gtol=1000, disp=True, full_output=True, cross=0.1, scale=1.0, itermon=mon) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=constraint, npop=260, ftol=1e-8, gtol=500, disp=True, full_output=True, cross=0.1, scale=1.0, itermon=mon) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=constraint, npop=520, ftol=1e-8, gtol=100, disp=True, full_output=True, cross=0.1, scale=1.0, itermon=mon) print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/cvxlp.py000066400000000000000000000034041455553066500214350ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for cvxopt # http://cvxopt.org/examples/tutorial/lp.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimize: f = 2*x[0] + 1*x[1] Subject to: -1*x[0] + 1*x[1] <= 1 1*x[0] + 1*x[1] >= 2 1*x[1] >= 0 1*x[0] - 2*x[1] <= 4 where: -inf <= x[0] <= inf """ def objective(x): x0,x1 = x return 2*x0 + x1 equations = """ -x0 + x1 - 1.0 <= 0.0 -x0 - x1 + 2.0 <= 0.0 x0 - 2*x1 - 4.0 <= 0.0 """ bounds = [(None, None),(0.0, None)] # with penalty='penalty' applied, solution is: xs = [0.5, 1.5] ys = 2.5 from mystic.symbolic import generate_conditions, generate_penalty pf = generate_penalty(generate_conditions(equations), k=1e3) from mystic.symbolic import generate_constraint, generate_solvers, simplify cf = generate_constraint(generate_solvers(simplify(equations))) if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraint=cf, npop=40, disp=False, full_output=True, ftol=1e-10, gtol=100) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) result = fmin_powell(objective, x0=[0.0,0.0], bounds=bounds, penalty=pf, constraint=cf, disp=False, full_output=True, gtol=3) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/cvxqp.py000066400000000000000000000032251455553066500214430ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for cvxopt # http://cvxopt.org/examples/tutorial/qp.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimize: f = 2*x[0]**2 + x[1]**2 + x[0]*x[1] + x[0] + x[1] Subject to: x[0] >= 0 x[1] >= 0 x[0] + x[1] == 1 """ def objective(x): x0,x1 = x return 2*x0**2 + x1**2 + x0*x1 + x0 + x1 equations = """ x0 + x1 - 1.0 == 0.0 """ bounds = [(0.0, None),(0.0, None)] # with penalty='penalty' applied, solution is: xs = [0.25, 0.75] ys = 1.875 from mystic.symbolic import generate_conditions, generate_penalty pf = generate_penalty(generate_conditions(equations), k=1e4) from mystic.symbolic import generate_constraint, generate_solvers, solve cf = generate_constraint(generate_solvers(solve(equations))) if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraint=cf, penalty=pf, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) result = fmin_powell(objective, x0=[0.0,0.0], bounds=bounds, constraint=cf, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) # EOF uqfoundation-mystic-9a49031/examples2/cvxqp_alt.py000066400000000000000000000023221455553066500223000ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for cvxopt # http://cvxopt.org/examples/tutorial/qp.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from cvxqp import objective, bounds, xs, ys from mystic.penalty import quadratic_equality from mystic.constraints import with_penalty @with_penalty(quadratic_equality, k=1e4) def penalty(x): # == 0.0 return x[1] + x[0] - 1.0 if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) result = fmin_powell(objective, x0=[0.0,0.0], bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) # EOF uqfoundation-mystic-9a49031/examples2/cvxqp_alt2.py000066400000000000000000000016751455553066500223740ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for cvxopt # http://cvxopt.org/examples/tutorial/qp.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from cvxqp import objective, bounds, xs, ys from mystic.math.measures import normalize def constraint(x): # impose exactly return normalize(x, 1.0) if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraints=constraint, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-5) assert almostEqual(result[1], ys, rel=1e-5) # EOF uqfoundation-mystic-9a49031/examples2/datafit.py000066400000000000000000000037221455553066500217200ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for scipy.optimze # http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Fit parameters to noisy data: y(x) ~ a * exp(-b * x) + c where: 0 >= x >= 4 y(x) = y0(x) + yn y0(x) = a0 * exp(-b0 * x) + c0 a0,b0,c0 = 2.5,1.3,0.5 yn = 0.2 * Normal(0,1) """ from numpy import exp, linspace from numpy.random import normal from mystic import reduced def y0(coeffs, x): a,b,c = coeffs return a * exp(-b * x) + c coeffs = (2.5, 1.3, 0.5) # Create noisy data from the 'solution' parameters x = linspace(0, 4, 50) y = y0(coeffs, x) + 0.2 * normal(size=len(x)) @reduced(lambda x,y: abs(x)+abs(y)) def objective(coeffs, x, y): return y0(coeffs, x) - y bounds = [(0, 10),(0, 10),(0, 10)] args = (x,y) # 'solution' is: try: from scipy.optimize import curve_fit xs,pcov = curve_fit(lambda x,*coeffs: y0(coeffs,x), x, y, p0=[1,1,1]) except ImportError: xs = coeffs ys = objective(xs, x, y) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual # from mystic.monitors import VerboseMonitor # mon = VerboseMonitor(10) result = diffev2(objective, args=args, x0=bounds, bounds=bounds, npop=40, ftol=1e-8, gtol=100, disp=False, full_output=True)#, itermon=mon) # print("%s %s" % (result[0], xs)) assert almostEqual(result[0], xs, rel=5e-1) assert almostEqual(result[1], ys, rel=5e-1) #XXX: how approximate the covariance matrix of estimates (pcov) w/ mystic? #XXX: mystic should have leastsq # EOF uqfoundation-mystic-9a49031/examples2/eq10.py000066400000000000000000000053031455553066500210470ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/ex10.py # with Copyright 2010 Hakan Kjellerstrand hakank@bonetmail.com # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Eq 10 in Google CP Solver. Standard benchmark problem. """ def objective(x): return 0.0 bounds = [(0,10)]*7 # with penalty='penalty' applied, solution is: xs = [6., 0., 8., 4., 9., 3., 9.] ys = 0.0 # constraints equations = """ 98527*x0 + 34588*x1 + 5872*x2 + 59422*x4 + 65159*x6 - 1547604 - 30704*x3 - 29649*x5 == 0.0 98957*x1 + 83634*x2 + 69966*x3 + 62038*x4 + 37164*x5 + 85413*x6 - 1823553 - 93989*x0 == 0.0 900032 + 10949*x0 + 77761*x1 + 67052*x4 - 80197*x2 - 61944*x3 - 92964*x5 - 44550*x6 == 0.0 73947*x0 + 84391*x2 + 81310*x4 - 1164380 - 96253*x1 - 44247*x3 - 70582*x5 - 33054*x6 == 0.0 13057*x2 + 42253*x3 + 77527*x4 + 96552*x6 - 1185471 - 60152*x0 - 21103*x1 - 97932*x5 == 0.0 1394152 + 66920*x0 + 55679*x3 - 64234*x1 - 65337*x2 - 45581*x4 - 67707*x5 - 98038*x6 == 0.0 68550*x0 + 27886*x1 + 31716*x2 + 73597*x3 + 38835*x6 - 279091 - 88963*x4 - 76391*x5 == 0.0 76132*x1 + 71860*x2 + 22770*x3 + 68211*x4 + 78587*x5 - 480923 - 48224*x0 - 82817*x6 == 0.0 519878 + 94198*x1 + 87234*x2 + 37498*x3 - 71583*x0 - 25728*x4 - 25495*x5 - 70023*x6 == 0.0 361921 + 78693*x0 + 38592*x4 + 38478*x5 - 94129*x1 - 43188*x2 - 82528*x3 - 69025*x6 == 0.0 """ from mystic.symbolic import generate_penalty, generate_conditions pf = generate_penalty(generate_conditions(equations)) from mystic.symbolic import generate_constraint, generate_solvers, solve cf = generate_constraint(generate_solvers(solve(equations))) from mystic.constraints import and_ as combined from numpy import round as npround c = combined(npround, cf) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, npop=20, gtol=50, disp=True, full_output=True) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=npround, npop=40, gtol=50, disp=True, full_output=True) result = diffev2(objective, x0=bounds, bounds=bounds, constraints=c, npop=4, gtol=1, disp=True, full_output=True) print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) #XXX: fails b/c rel & zero? assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/eq20.py000066400000000000000000000070001455553066500210440ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/ex20.py # with Copyright 2010 Hakan Kjellerstrand hakank@bonetmail.com # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Eq 20 in Google CP Solver. Standard benchmark problem. """ def objective(x): return 0.0 bounds = [(0,10)]*7 # with penalty='penalty' applied, solution is: xs = [1., 4., 6., 6., 6., 3., 1.] ys = 0.0 # constraints equations = """ -76706*x0 + 98205*x1 + 23445*x2 + 67921*x3 + 24111*x4 - 48614*x5 - 41906*x6 - 821228 == 0.0 87059*x0 - 29101*x1 - 5513*x2 - 21219*x3 + 22128*x4 + 7276*x5 + 57308*x6 - 22167 == 0.0 -60113*x0 + 29475*x1 + 34421*x2 - 76870*x3 + 62646*x4 + 29278*x5 - 15212*x6 - 251591 == 0.0 49149*x0 + 52871*x1 - 7132*x2 + 56728*x3 - 33576*x4 - 49530*x5 - 62089*x6 - 146074 == 0.0 -10343*x0 + 87758*x1 - 11782*x2 + 19346*x3 + 70072*x4 - 36991*x5 + 44529*x6 - 740061 == 0.0 85176*x0 - 95332*x1 - 1268*x2 + 57898*x3 + 15883*x4 + 50547*x5 + 83287*x6 - 373854 == 0.0 -85698*x0 + 29958*x1 + 57308*x2 + 48789*x3 - 78219*x4 + 4657*x5 + 34539*x6 - 249912 == 0.0 -67456*x0 + 84750*x1 - 51553*x2 + 21239*x3 + 81675*x4 - 99395*x5 - 4254*x6 - 277271 == 0.0 94016*x0 - 82071*x1 + 35961*x2 + 66597*x3 - 30705*x4 - 44404*x5 - 38304*x6 - 25334 == 0.0 -60301*x0 + 31227*x1 + 93951*x2 + 73889*x3 + 81526*x4 - 72702*x5 + 68026*x6 - 1410723 == 0.0 -16835*x0 + 47385*x1 + 97715*x2 - 12640*x3 + 69028*x4 + 76212*x5 - 81102*x6 - 1244857 == 0.0 -43277*x0 + 43525*x1 + 92298*x2 + 58630*x3 + 92590*x4 - 9372*x5 - 60227*x6 - 1503588 == 0.0 -64919*x0 + 80460*x1 + 90840*x2 - 59624*x3 - 75542*x4 + 25145*x5 - 47935*x6 - 18465 == 0.0 -45086*x0 + 51830*x1 - 4578*x2 + 96120*x3 + 21231*x4 + 97919*x5 + 65651*x6 - 1198280 == 0.0 85268*x0 + 54180*x1 - 18810*x2 - 48219*x3 + 6013*x4 + 78169*x5 - 79785*x6 - 90614 == 0.0 8874*x0 - 58412*x1 + 73947*x2 + 17147*x3 + 62335*x4 + 16005*x5 + 8632*x6 - 752447 == 0.0 71202*x0 - 11119*x1 + 73017*x2 - 38875*x3 - 14413*x4 - 29234*x5 + 72370*x6 - 129768 == 0.0 1671*x0 - 34121*x1 + 10763*x2 + 80609*x3 + 42532*x4 + 93520*x5 - 33488*x6 - 915683 == 0.0 51637*x0 + 67761*x1 + 95951*x2 + 3834*x3 - 96722*x4 + 59190*x5 + 15280*x6 - 533909 == 0.0 -16105*x0 + 62397*x1 - 6704*x2 + 43340*x3 + 95100*x4 - 68610*x5 + 58301*x6 - 876370 == 0.0 """ from mystic.symbolic import generate_penalty, generate_conditions pf = generate_penalty(generate_conditions(equations)) from mystic.symbolic import generate_constraint, generate_solvers, solve cf = generate_constraint(generate_solvers(solve(equations))) from numpy import round as npround if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, npop=20, gtol=50, disp=True, full_output=True) #result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=npround, npop=40, gtol=50, disp=True, full_output=True) result = diffev2(objective, x0=bounds, bounds=bounds, constraints=cf, npop=4, gtol=1, disp=True, full_output=True) print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) #XXX: fails b/c rel & zero? assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/g01.py000066400000000000000000000035111455553066500206670ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): return 5*sum(x[:4]) - 5*sum([xi**2 for xi in x[:4]]) - sum(x[4:]) bounds = [(0,1)]*9 + [(0,100)]*3 + [(0,1)] # with penalty='penalty' applied, solution is: xs = [1.0]*9 + [3.0]*3 + [1.0] ys = -15.0 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ 2.0*x0 + 2.0*x1 + x9 + x10 - 10.0 <= 0.0 2.0*x0 + 2.0*x2 + x9 + x11 - 10.0 <= 0.0 2.0*x1 + 2.0*x2 + x10 + x11 - 10.0 <= 0.0 -8.0*x0 + x9 <= 0.0 -8.0*x1 + x10 <= 0.0 -8.0*x2 + x11 <= 0.0 -2.0*x3 - x4 + x9 <= 0.0 -2.0*x5 - x6 + x10 <= 0.0 -2.0*x7 - x8 + x11 <= 0.0 """ cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations)) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell from mystic.math import almostEqual result = fmin_powell(objective, x0=x, bounds=bounds, constraints=cf, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g01_alt.py000066400000000000000000000041611455553066500215310ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g01 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return 2*x[0] + 2*x[1] + x[9] + x[10] - 10.0 def penalty2(x): # <= 0.0 return 2*x[0] + 2*x[2] + x[9] + x[11] - 10.0 def penalty3(x): # <= 0.0 return 2*x[1] + 2*x[2] + x[10] + x[11] - 10.0 def penalty4(x): # <= 0.0 return -8*x[0] + x[9] def penalty5(x): # <= 0.0 return -8*x[1] + x[10] def penalty6(x): # <= 0.0 return -8*x[2] + x[11] def penalty7(x): # <= 0.0 return -2*x[3] - x[4] + x[9] def penalty8(x): # <= 0.0 return -2*x[5] - x[6] + x[10] def penalty9(x): # <= 0.0 return -2*x[7] - x[8] + x[11] @quadratic_inequality(penalty1) @quadratic_inequality(penalty2) @quadratic_inequality(penalty3) @quadratic_inequality(penalty4) @quadratic_inequality(penalty5) @quadratic_inequality(penalty6) @quadratic_inequality(penalty7) @quadratic_inequality(penalty8) @quadratic_inequality(penalty9) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell from mystic.math import almostEqual result = fmin_powell(objective, x0=x, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g01_alt2.py000066400000000000000000000031461455553066500216150ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g01 import objective, bounds, xs, ys from g01_alt import penalty1, penalty2, penalty3, penalty4, penalty5, \ penalty6, penalty7, penalty8, penalty9 from mystic.constraints import as_constraint from mystic.penalty import linear_inequality from mystic.coupler import and_ as combined penalties = (penalty1,penalty2,penalty3,penalty4,penalty5,\ penalty6,penalty7,penalty8,penalty9) penalty = combined(*[linear_inequality(pi)(lambda x:0.) for pi in penalties]) solver = as_constraint(penalty) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell, diffev from mystic.math import almostEqual result = fmin_powell(objective, x0=x, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g02.py000066400000000000000000000041731455553066500206750ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): from numpy import abs, sum, cos, product, sqrt sum_jx = 0.0 for j in range(len(x)): sum_jx = sum_jx + (j+1) * x[j]**2 return -abs((sum(cos(x)**4) - 2.*product(cos(x)**2))/sqrt(sum_jx)) def bounds(len=3): return [(0.0,10.0)]*len # with penalty='penalty' applied, solution is: xs = [ 3.04295933, 1.48286963, 0.16618875] ys = -0.51578987 """ for len(x) = 10, xs ~ [3.12388714, 3.06913834, 3.01426760, 2.95755412, 1.46603517, 0.36802963, 0.36346912, 0.35912472, 0.35493945, 0.35095372] ys ~ -0.74732020 """ bounds = bounds(len(xs)) from mystic.constraints import and_ from mystic.symbolic import (generate_constraint, generate_solvers, generate_penalty, generate_conditions, simplify, symbolic_bounds) equations = """ -prod([x0, x1, x2]) + 0.75 <= 0.0 sum([x0, x1, x2]) - 7.5*3 <= 0.0 """ equations += symbolic_bounds(*zip(*bounds)) cf = generate_constraint(generate_solvers(simplify(equations)), join=and_) pf = generate_penalty(generate_conditions(equations)) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraints=cf, penalty=pf, npop=80, disp=False, full_output=True, gtol=100) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) # EOF uqfoundation-mystic-9a49031/examples2/g02_alt.py000066400000000000000000000027711455553066500215370ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g02 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 from numpy import prod as product return -product(x) + 0.75 def penalty2(x): # <= 0.0 from numpy import sum return sum(x) - 7.5*len(x) @quadratic_inequality(penalty1) @quadratic_inequality(penalty2) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g02_alt2.py000066400000000000000000000030201455553066500216050ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g02 import objective, bounds, xs, ys from g02_alt import penalty1, penalty2, quadratic_inequality from mystic.math.measures import impose_product, impose_sum def constraint1(x): # impose exactly return impose_product(0.75, x) def constraint2(x): # impose exactly return impose_sum(7.5*len(x), x) def penalty(x): return 0.0 penalty2 = quadratic_inequality(penalty2)(penalty) penalty1 = quadratic_inequality(penalty1)(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraint=constraint2, penalty=penalty1, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g03.py000066400000000000000000000041761455553066500207010ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): from numpy import prod, sqrt n = len(x) return -sqrt(n)*n * prod(x) def bounds(len=3): return [(0.0,1.0)]*len # with penalty='penalty' applied, solution is: def xs(len=3): from math import sqrt return [1./sqrt(len)]*len def ys(len=3): return objective(xs(len)) """ for len(x) == 3, x* = 0.57735027 for all xi, y* = -1.0 for len(x) == 10, x* = 0.31622777 for all xi. y* = -0.00031623 for len(x) == 20, x* = 0.22360680 for all xi, y* = -8.73464054e-12 """ from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions #sum([x0**2, x1**2, x2**2]) - 1.0 = 0.0 def equations(len=3): eqn = "\nsum([" for i in range(len): eqn += 'x%s**2, ' % str(i) return eqn[:-2]+"]) - 1.0 = 0.0\n" def cf(len=3): return generate_constraint(generate_solvers(simplify(equations(len)))) def pf(len=3): return generate_penalty(generate_conditions(equations(len))) if __name__ == '__main__': x = xs(10) y = ys(len(x)) bounds = bounds(len(x)) cf = cf(len(x)) from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraints=cf, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], x, tol=1e-2) assert almostEqual(result[1], y, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g03_alt.py000066400000000000000000000027711455553066500215400ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g03 import objective, bounds, xs, ys from mystic.penalty import quadratic_equality from mystic.constraints import with_penalty #sum([x0**2, x1**2, x2**2]) - 1.0 = 0.0 @with_penalty(quadratic_equality) def penalty(x): # == 0.0 x = [xi**2 for xi in x] # x**2 return abs(sum(x) - 1) from mystic.constraints import as_constraint solver = as_constraint(penalty) if __name__ == '__main__': x = xs(3) y = ys(len(x)) bounds = bounds(len(x)) from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], x, tol=1e-2) assert almostEqual(result[1], y, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g04.py000066400000000000000000000045541455553066500207020ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1,x2,x3,x4 = x #XXX: allow x != 5? return 5.3578547*x2**2 + 0.8356891*x0*x4 + 37.293239*x0 - 40792.141 bounds = [(78,102),(33,45)] + [(27,45)]*3 # with penalty='penalty' applied, solution is: xs = [78.0, 33.0, 29.9955776, 45.0, 36.7749999] ys = -30665.488305434 def u(x): x0,x1,x2,x3,x4 = x return 85.334407 + 0.0056858*x1*x4 + 0.0006262*x0*x3 - 0.0022053*x2*x4 def v(x): x0,x1,x2,x3,x4 = x return 80.51249 + 0.0071317*x1*x4 + 0.0029955*x0*x1 + 0.0021813*x2*x2 def w(x): x0,x1,x2,x3,x4 = x return 9.300961 + 0.0047026*x2*x4 + 0.0012547*x0*x2 + 0.0019085*x2*x3 from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return u(x) - 92.0 def penalty2(x): # <= 0.0 return -u(x) def penalty3(x): # <= 0.0 return v(x) - 110.0 def penalty4(x): # <= 0.0 return -v(x) + 90.0 def penalty5(x): # <= 0.0 return w(x) - 25.0 def penalty6(x): # <= 0.0 return -w(x) + 20.0 @quadratic_inequality(penalty1, k=1e10) @quadratic_inequality(penalty2, k=1e10) @quadratic_inequality(penalty3, k=1e10) @quadratic_inequality(penalty4, k=1e10) @quadratic_inequality(penalty5, k=1e10) @quadratic_inequality(penalty6, k=1e10) def penalty(x): return 0.0 from mystic.constraints import as_constraint solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g05.py000066400000000000000000000037161455553066500207020ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1,x2,x3 = x return 3*x0 + 1.e-6*x0**3 + 2*x1 + 2.e-6/3*x1**3 bounds = [(0,1200)]*2 + [(-0.55,0.55)]*2 # with penalty='penalty' applied, solution is: xs = [679.945794311, 1026.0666256385, 0.11887602615356, -0.3962337137961] ys = 5126.49810960 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ x2 - x3 - 0.55 <= 0.0 x3 - x2 - 0.55 <= 0.0 abs(1000*(sin(-x2-.25) + sin(-x3-0.25)) + 894.8 - x0) = 0.0 abs(1000*(sin(x2-.25) + sin(x2-x3-0.25)) + 894.8 - x1) = 0.0 abs(1000*(sin(x3-.25) + sin(x3-x2-0.25)) + 1294.8) = 0.0 """ #cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import buckshot, sparsity from mystic.math import almostEqual result = buckshot(objective, len(xs), npts=100, bounds=bounds, penalty=pf, disp=False, full_output=True) #result = sparsity(objective, len(xs), npts=100, rtol=-10, bounds=bounds, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) # EOF uqfoundation-mystic-9a49031/examples2/g05_alt.py000066400000000000000000000041101455553066500215270ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g05 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality, quadratic_equality def penalty1(x): # <= 0.0 return x[2] - x[3] - 0.55 def penalty2(x): # <= 0.0 return x[3] - x[2] - 0.55 def penalty3(x): # == 0.0 from math import sin return abs(1000*(sin(-x[2]-.25) + sin(-x[3]-0.25)) + 894.8 - x[0]) def penalty4(x): # == 0.0 from math import sin return abs(1000*(sin(x[2]-.25) + sin(x[2]-x[3]-0.25)) + 894.8 - x[1]) def penalty5(x): # == 0.0 from math import sin return abs(1000*(sin(x[3]-.25) + sin(x[3]-x[2]-0.25)) + 1294.8) @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) @quadratic_equality(penalty3, k=1e12) @quadratic_equality(penalty4, k=1e12) @quadratic_equality(penalty5, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import buckshot, sparsity from mystic.math import almostEqual result = buckshot(objective, len(xs), npts=100, bounds=bounds, penalty=penalty, disp=False, full_output=True) #result = sparsity(objective, len(xs), npts=100, rtol=-10, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) # EOF uqfoundation-mystic-9a49031/examples2/g06.py000066400000000000000000000032121455553066500206720ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1 = x return (x0 - 10)**3 + (x1 - 20)**3 bounds = [(13,100),(0,100)] # with penalty='penalty' applied, solution is: xs = [14.095, 0.84296079] ys = -6961.81387628 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ (x0 - 5)**2 + (x1 - 5)**2 - 100 >= 0.0 (x0 - 6)**2 + (x1 - 5)**2 - 82.81 <= 0.0 """ cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell from mystic.math import almostEqual result = fmin_powell(objective, x0=x, bounds=bounds, constraints=cf, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g06_alt.py000066400000000000000000000027741455553066500215460ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g06 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return -(x[0] - 5)**2 - (x[1] - 5)**2 + 100 def penalty2(x): # <= 0.0 return (x[0] - 6)**2 + (x[1] - 5)**2 - 82.81 @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell from mystic.math import almostEqual result = fmin_powell(objective, x0=x, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g07.py000066400000000000000000000045521455553066500207030ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1,x2,x3,x4,x5,x6,x7,x8,x9 = x return x0**2 + x1**2 + x0*x1 - 14*x0 - 16*x1 + (x2-10)**2 + \ 4*(x3-5)**2 + (x4-3)**2 + 2*(x5-1)**2 + 5*x6**2 + \ 7*(x7-11)**2 + 2*(x8-10)**2 + (x9-7)**2 + 45.0 bounds = [(-10,10)]*10 # with penalty='penalty' applied, solution is: xs = [2.171996, 2.363683, 8.773926, 5.095984, 0.9906548, 1.430574, 1.321644, 9.828726, 8.280092, 8.375927] ys = 24.3062091 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ 4.0*x0 + 5.0*x1 - 3.0*x6 + 9.0*x7 - 105.0 <= 0.0 10.0*x0 - 8.0*x1 - 17.0*x6 + 2.0*x7 <= 0.0 -8.0*x0 + 2.0*x1 + 5.0*x8 - 2.0*x9 - 12.0 <= 0.0 3.0*(x0-2)**2 + 4.0*(x1-3)**2 + 2.0*x2**2 - 7.0*x3 - 120.0 <= 0.0 5.0*x0**2 + 8.0*x1 + (x2-6)**2 - 2.0*x3 - 40.0 <= 0.0 0.5*(x0-8)**2 + 2.0*(x1-4)**2 + 3.0*x4**2 - x5 - 30.0 <= 0.0 x0**2 + 2.0*(x1-2)**2 - 2.0*x0*x1 + 14.0*x4 - 6.0*x5 <= 0.0 -3.0*x0 + 6.0*x1 + 12.0*(x8-8)**2 - 7.0*x9 <= 0.0 """ cf = generate_constraint(generate_solvers(simplify(equations, target=['x5','x3']))) pf = generate_penalty(generate_conditions(equations)) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell from mystic.math import almostEqual from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) result = fmin_powell(objective, x0=x, bounds=bounds, penalty=pf, maxiter=1000, maxfun=100000, ftol=1e-12, xtol=1e-12, gtol=10, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g07_alt.py000066400000000000000000000044051455553066500215400ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g07 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return 4*x[0] + 5*x[1] - 3*x[6] + 9*x[7] - 105.0 def penalty2(x): # <= 0.0 return 10*x[0] - 8*x[1] - 17*x[6] + 2*x[7] def penalty3(x): # <= 0.0 return -8*x[0] + 2*x[1] + 5*x[8] - 2*x[9] - 12.0 def penalty4(x): # <= 0.0 return 3*(x[0]-2)**2 + 4*(x[1]-3)**2 + 2*x[2]**2 - 7*x[3] - 120.0 def penalty5(x): # <= 0.0 return 5*x[0]**2 + 8*x[1] + (x[2]-6)**2 - 2*x[3] - 40.0 def penalty6(x): # <= 0.0 return 0.5*(x[0]-8)**2 + 2*(x[1]-4)**2 + 3*x[4]**2 - x[5] - 30.0 def penalty7(x): # <= 0.0 return x[0]**2 + 2*(x[1]-2)**2 - 2*x[0]*x[1] + 14*x[4] - 6*x[5] def penalty8(x): # <= 0.0 return -3*x[0] + 6*x[1] + 12*(x[8]-8)**2 - 7*x[9] @quadratic_inequality(penalty1) @quadratic_inequality(penalty2) @quadratic_inequality(penalty3) @quadratic_inequality(penalty4) @quadratic_inequality(penalty5) @quadratic_inequality(penalty6) @quadratic_inequality(penalty7) @quadratic_inequality(penalty8) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': x = [0]*len(xs) from mystic.solvers import fmin_powell from mystic.math import almostEqual result = fmin_powell(objective, x0=x, bounds=bounds, penalty=penalty, maxiter=1000, maxfun=100000, ftol=1e-12, xtol=1e-12, gtol=10, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g08.py000066400000000000000000000031711455553066500207000ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1 = x from math import sin, pi return -(sin(2*pi*x0)**3 * sin(2*pi*x1)) / (x0**3 * (x0 + x1)) bounds = [(0,10)]*2 # with penalty='penalty' applied, solution is: xs = [1.22797136, 4.24537337] ys = -0.09582504 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ x0**2 - x1 + 1.0 <= 0.0 1.0 - x0 + (x1 - 4)**2 <= 0.0 """ cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, 2, 40, bounds=bounds, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g08_alt.py000066400000000000000000000027101455553066500215360ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g08 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return x[0]**2 - x[1] + 1.0 def penalty2(x): # <= 0.0 return 1.0 - x[0] + (x[1] - 4)**2 @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, 2, 40, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g09.py000066400000000000000000000040271455553066500207020ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1,x2,x3,x4,x5,x6 = x return (x0-10)**2 + 5*(x1-12)**2 + x2**4 + 3*(x3-11)**2 + \ 10*x4**6 + 7*x5**2 + x6**4 - 4*x5*x6 - 10*x5 - 8*x6 bounds = [(-10.,10.)]*7 # with penalty='penalty' applied, solution is: xs = [2.330499, 1.951372, -0.4775414, 4.365726, -0.6244870, 1.038131, 1.594227] ys = 680.6300573 from mystic.symbolic import (generate_constraint, generate_solvers, generate_penalty, generate_conditions, simplify, symbolic_bounds) equations = """ 2.0*x0**2 + 3.0*x1**4 + x2 + 4.0*x3**2 + 5.0*x4 - 127.0 <= 0.0 7.0*x0 + 3.0*x1 + 10.0*x2**2 + x3 - x4 - 282.0 <= 0.0 23.0*x0 + x1**2 + 6.0*x5**2 - 8.0*x6 - 196.0 <= 0.0 4.0*x0**2 + x1**2 - 3.0*x0*x1 + 2.0*x2**2 + 5.0*x5 - 11.0*x6 <= 0.0 """ equations += symbolic_bounds(*zip(*bounds)) cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraints=cf, penalty=pf, npop=40, gtol=200, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g09_alt.py000066400000000000000000000034461455553066500215460ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g09 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return 2*x[0]**2 + 3*x[1]**4 + x[2] + 4*x[3]**2 + 5*x[4] - 127.0 def penalty2(x): # <= 0.0 return 7*x[0] + 3*x[1] + 10*x[2]**2 + x[3] - x[4] - 282.0 def penalty3(x): # <= 0.0 return 23*x[0] + x[1]**2 + 6*x[5]**2 - 8*x[6] - 196.0 def penalty4(x): # <= 0.0 return 4*x[0]**2 + x[1]**2 - 3*x[0]*x[1] + 2*x[2]**2 + 5*x[5] - 11*x[6] @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) @quadratic_inequality(penalty3, k=1e12) @quadratic_inequality(penalty4, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, gtol=200, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g10.py000066400000000000000000000035641455553066500206770ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1,x2,x3,x4,x5,x6,x7 = x return x0 + x1 + x2 bounds = [(100,10000)] + [(1000,10000)]*2 + [(10,1000)]*5 # with penalty='penalty' applied, solution is: xs = [579.3167, 1359.943, 5110.071, 182.0174, \ 295.5985, 217.9799, 286.4162,395.5979] ys = 7049.3307 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ -1.0 + 0.0025*(x3 + x5) <= 0.0 -1.0 + 0.0025*(-x3 + x4 + x6) <= 0.0 -1.0 + 0.01*(-x4 + x7) <= 0.0 100.0*x0 - x0*x5 + 833.33252*x3 - 83333.333 <= 0.0 x1*x3 - x1*x6 - 1250.0*x3 + 1250.0*x4 <= 0.0 x2*x4 - x2*x7 - 2500.0*x4 + 1250000.0 <= 0.0 """ cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, npop=80, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g10_alt.py000066400000000000000000000037061455553066500215350ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g10 import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return -1 + 0.0025*(x[3] + x[5]) def penalty2(x): # <= 0.0 return -1 + 0.0025*(-x[3] + x[4] + x[6]) def penalty3(x): # <= 0.0 return -1 + 0.01*(-x[4] + x[7]) def penalty4(x): # <= 0.0 return 100*x[0] - x[0]*x[5] + 833.33252*x[3] - 83333.333 def penalty5(x): # <= 0.0 return x[1]*x[3] - x[1]*x[6] - 1250*x[3] + 1250*x[4] def penalty6(x): # <= 0.0 return x[2]*x[4] - x[2]*x[7] - 2500*x[4] + 1250000 @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) @quadratic_inequality(penalty3, k=1e12) @quadratic_inequality(penalty4, k=1e12) @quadratic_inequality(penalty5, k=1e12) @quadratic_inequality(penalty6, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=80, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g11.py000066400000000000000000000031451455553066500206730ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1 = x return x0**2 + (x1 - 1)**2 bounds = [(-1,1)]*2 # with penalty='penalty' applied, solution is: xs, xs_ = [(0.5)**.5, 0.5], [-(0.5)**.5, 0.5] ys = 0.75 from mystic.symbolic import generate_constraint, generate_solvers, solve from mystic.symbolic import generate_penalty, generate_conditions equations = """ x1 - x0**2 = 0.0 """ cf = generate_constraint(generate_solvers(solve(equations, target='x1'))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraints=cf, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) \ or almostEqual(result[0], xs_, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g11_alt.py000066400000000000000000000027011455553066500215300ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g11 import objective, bounds, xs, xs_, ys from mystic.penalty import quadratic_equality from mystic.constraints import with_penalty @with_penalty(quadratic_equality, k=1e12) def penalty(x): # == 0.0 return x[1] - x[0]**2 from mystic.constraints import as_constraint solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraints=solver, npop=40, xtol=1e-8, ftol=1e-8, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) \ or almostEqual(result[0], xs_, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g12.py000066400000000000000000000041471455553066500206770ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): x0,x1,x2 = x return 1.0 - 0.01*((x0 - 5)**2 + (x1 - 5)**2 + (x2 - 5)**2) bounds = [(0,10)]*3 # with penalty='penalty' applied, solution is: xs = [5,5,5] ys = 1.0 from mystic.symbolic import generate_constraint, generate_solvers, solve from mystic.symbolic import generate_penalty, generate_conditions equations = """ """ for i in range(1,10): for j in range(1,10): for k in range(1,10): equations += "(x0 - %s)**2 + (x1 - %s)**2 + (x2 - %s)**2 - 48.0 <= 0.0\n" % (i,j,k) from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality from mystic.constraints import with_penalty def penalty(x): #NOTE: not built as a 'penalty function' (loses functionality) sum = 0.0 for i in range(1,10): for j in range(1,10): for k in range(1,10): p = lambda v: ((v[0]-i)**2 + (v[1]-j)**2 + (v[2]-k)**2 - 48.0) p = with_penalty(quadratic_inequality, k=1e2)(p) sum += p(x) return sum solver = as_constraint(penalty) #XXX: may not work, as not a penalty function if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, 3, 10, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/g13.py000066400000000000000000000040221455553066500206700ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE def objective(x): from numpy import exp, product return exp(product(x)) bounds = [(-2.3,2.3)]*2 + [(-3.2,3.2)]*3 # with penalty='penalty' applied, solution is: xs = [-1.717143, 1.595709, 1.827247, -0.7636413, -0.763645] _xs = [-1.717143, 1.595709, 1.827247, 0.7636413, 0.763645] x_s = [-1.717143, 1.595709, -1.827247, 0.7636413, -0.763645] xs_ = [-1.717143, 1.595709, -1.827247, -0.7636413, 0.763645] ys = 0.05394983 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ x0**2 + x1**2 + x2**2 + x3**2 + x4**2 - 10.0 = 0.0 x1*x2 - 5.0*x3*x4 = 0.0 x0**3 + x1**3 + 1.0 = 0.0 """ cf = generate_constraint(generate_solvers(simplify(equations))) # slow solve pf = generate_penalty(generate_conditions(equations)) if __name__ == '__main__': from mystic.solvers import lattice from mystic.math import almostEqual result = lattice(objective, 5, [2]*5, bounds=bounds, penalty=pf, ftol=1e-8, xtol=1e-8, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=5e-2) \ or almostEqual(result[0], _xs, tol=5e-2) \ or almostEqual(result[0], x_s, tol=5e-2) \ or almostEqual(result[0], xs_, tol=5e-2) assert almostEqual(result[1], ys, rel=5e-2) # EOF uqfoundation-mystic-9a49031/examples2/g13_alt.py000066400000000000000000000033511455553066500215340ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from g13 import objective, bounds, xs, _xs, x_s, xs_, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_equality def penalty1(x): # = 0.0 return x[0]**2 + x[1]**2 + x[2]**2 + x[3]**2 + x[4]**2 - 10.0 def penalty2(x): # = 0.0 return x[1]*x[2] - 5.0*x[3]*x[4] def penalty3(x): # = 0.0 return x[0]**3 + x[1]**3 + 1.0 @quadratic_equality(penalty1) @quadratic_equality(penalty2) @quadratic_equality(penalty3) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import lattice from mystic.math import almostEqual result = lattice(objective, 5, [2]*5, bounds=bounds, penalty=penalty, ftol=1e-8, xtol=1e-8, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=5e-2) \ or almostEqual(result[0], _xs, tol=5e-2) \ or almostEqual(result[0], x_s, tol=5e-2) \ or almostEqual(result[0], xs_, tol=5e-2) assert almostEqual(result[1], ys, rel=5e-2) # EOF uqfoundation-mystic-9a49031/examples2/hotel_pricing.py000066400000000000000000000062331455553066500231320ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/48088516/2379433 # https://stackoverflow.com/a/48494431/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Maximize: sum_{i=1 to max i} P_i O_i Subject to: O_i <= C_i P_i <= 0 where the decision variables are: P_i: price allocated for night i and these are the computed auxiliary variables: X_a,L: number of rooms allocated for stay of type (a,L) defined as: X_a,L = d_a,L * ([sum_{i=a to a+L-i} P_i]/[L * P_nominal])^e and: O_i: number of rooms reserved in a given night defined as: O_i = sum_{a,L in N_i} X_a,L The input parameters are: P_nominal: nominal price of the hotel (average historical price) e: elasticity between price and demand d_a,L and N_i: as defined in the classical model C_i: total number of rooms available on the hotel """ import math n_days = 7 n_rooms = 50 P_nom = 85 P_bounds = 0,None P_elastic = 2 class hotel(object): def __init__(self, rooms, price_ave, price_elastic): self.rooms = rooms self.price_ave = price_ave self.price_elastic = price_elastic def profit(self, P): # assert len(P) == len(self.rooms) return sum(j * self._reserved(P, i) for i,j in enumerate(P)) def remaining(self, P): # >= 0 C = self.rooms # assert len(P) == C return [C[i] - self._reserved(P, i) for i,j in enumerate(P)] def _reserved(self, P, day): max_days = len(self.rooms) As = range(0, day) return sum(self._allocated(P, a, L) for a in As for L in range(day-a+1, max_days+1)) def _allocated(self, P, a, L): P_nom = self.price_ave e = self.price_elastic return math.ceil(self._demand(a, L)*(sum(P[a:a+L])/(P_nom*L))**e) def _demand(self, a,L): return abs(1-a)/L + 2*(a**2)/L**2 h = hotel([n_rooms]*n_days, P_nom, P_elastic) def objective(price, hotel): return -hotel.profit(price) def constraint(price, hotel): # <= 0 return -min(hotel.remaining(price)) bounds = [P_bounds]*n_days guess = [P_nom]*n_days import mystic as my @my.penalty.quadratic_inequality(constraint, kwds=dict(hotel=h)) def penalty(x): return 0.0 # using a local optimizer, starting from the nominal price solver = my.solvers.fmin mon = my.monitors.VerboseMonitor(50) kwds = dict(disp=True, full_output=True, itermon=mon, args=(h,), xtol=1e-8, ftol=1e-8, maxfun=10000, maxiter=2000) result = solver(objective, guess, bounds=bounds, penalty=penalty, **kwds) print([round(i,2) for i in result[0]]) # however, we can do better using a global optimizer solver = my.solvers.diffev mon = my.monitors.VerboseMonitor(50) kwds = dict(disp=True, full_output=True, itermon=mon, npop=40, args=(h,), gtol=250, ftol=1e-8, maxfun=30000, maxiter=2000) result = solver(objective, bounds, bounds=bounds, penalty=penalty, **kwds) print([round(i,2) for i in result[0]]) uqfoundation-mystic-9a49031/examples2/inequalities.py000066400000000000000000000136771455553066500230120ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2021-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE import mystic.symbolic as ms from mystic.constraints import and_ as _and, or_ as _or from mystic.coupler import and_, or_ if __name__ == '__main__': eps = 1e-16 equations = """ A*B + C > 1 B < 0 """ print(equations) var = list('ABC') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([1,-2,1]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) equations = """ A*(B-C) + 2*C > 1 B + C = 2*D D < 0 """ print(equations) var = list('ABCD') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([1,2,1,-1]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) #XXX: worry about ZeroDivisionError ? equations = """ A*B*C > 1 A*C < 3 -A*B > 4 """ print(equations) vars = list('ABC') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([1,2,-1]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) equations = """ A*B*C > 1 A + C < 3 A - B > 4 """ print(equations) vars = list('ABC') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([1,2,-1]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) equations = """ A*B + 2*C > 1 B < 0 C > 0 """ print(equations) vars = list('ABC') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([1,2,-1]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) equations = """ A*B > 1 B > 0 """ print(equations) vars = list('AB') eqns = ms.simplify(equations, variables=var, all=True) print(eqns) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([1,2]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) equations = ''' B == 2 P == 2 T < 5 M > 0 T == B + P + M ''' print(equations) var = list('MTBP') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([4,4,4,4]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) equations = """ 2*A + 3*B >= C -C + D == -B A*B > D D > 0 """ var = list('ABCD') eqns = ms.simplify(equations, variables=var, all=True) if isinstance(eqns, str): _join = join_ = None print(eqns) else: _join,join_ = _or,or_ for eqn in eqns: print(eqn + '\n----------------------') constrain = ms.generate_constraint(ms.generate_solvers(eqns, var, locals=dict(e_=eps)), join=_join) solution = constrain([4,4,4,4]) print('solved: %s' % dict(zip(var, solution))) penalty = ms.generate_penalty(ms.generate_conditions(eqns, var, locals=dict(e_=eps)), join=join_) print('penalty: %s' % penalty(solution)) # EOF uqfoundation-mystic-9a49031/examples2/inout_constrain.py000066400000000000000000000054131455553066500235210ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/67560280/2379433 # https://stackoverflow.com/a/67571398/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2021-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Objective: MIN (1500 * x0) + (625 * x1) + (100 * x2) Constraints: schedule(x0,x1,x2) >= 480 x2 = round(log(x0)**2) x1 > x0 x1 > x2 x0, x1, x2 are integers Bounds: (5 <= x0 <= 50), (5 <= x1 <= 100), (1 <= x2 <= 20) """ import mystic as my import mystic.symbolic as ms import numpy as np # define the cost function def objective(x): x0,x1,x2 = x return (1500 * x0) + (625 * x1) + (100 * x2) # define the bounds bounds = [(5,50),(5,100),(1,20)] # define symbolic constraints eqns = ''' x1 > x0 x2 < x1 ''' # generate constraint operator from symbolic constraints and_ = my.constraints.and_ cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqns)), join=and_) ''' #NOTE: cons ensures eqns are satisfied >>> cons([1,2,3]) [1, 2, 1.999999999999997] >>> cons([5,5,1]) [5, 5.000000000000006, 1] ''' # define an analytical function (i.e. non-symbolic) def schedule(x0,x1,x2): return x0 * x1 - x2 * x2 # define the penalty condition def penalty1(x): # <= 0.0 x0,x1,x2 = x return 480 - schedule(x0,x1,x2) # generate penalty from the penalty condition @my.penalty.linear_inequality(penalty1) def penalty(x): return 0.0 # generate constraint operator from the penalty lb,ub = zip(*bounds) c = my.constraints.as_constraint(penalty, lower_bounds=lb, upper_bounds=ub, nvars=3) ''' #NOTE: c ensures penalty1 is satisfied >>> c([5,5,1]) [13.126545665004528, 44.97820356778645, 1.0138152329128338] >>> schedule(*_) 589.3806217359323 >>> c([50,50,10]) [50.0, 50.0, 10.0] >>> schedule(*_) 2400.0 ''' # define a constrait function for the input constraint def intlog2(x): x[2] = np.round(np.log(x[0])**2) return x # generate a constraint operator for all given constraints ints = np.round constraint = and_(c, cons, ints, intlog2) ''' #NOTE: constraint ensures c, cons, ints, and intlog2 are satisfied >>> constraint([5,5,1]) [16.0, 42.0, 8.0] >>> c(_) [16.0, 42.0, 8.0] >>> cons(_) [16.0, 42.0, 8.0] >>> intlog2(_) [16.0, 42.0, 8.0] >>> objective(_) 51050.0 ''' # solve from mystic.solvers import diffev2 from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) result = diffev2(objective,x0=bounds, bounds=bounds, constraints=constraint, npop=20, gtol=50, disp=False, full_output=True, itermon=mon) ''' #NOTE: solution >>> result[0] array([ 14., 38., 7.]) >>> result[1] 45450.0 ''' print(result[0]) print(result[1]) uqfoundation-mystic-9a49031/examples2/integer_inequalities.py000066400000000000000000000055041455553066500245150ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/59813985/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' solve: a system of inequalities (defined below) with unknowns xi, where i = range(1,11) such that: 0 < x10 < x9 < x8 < x7 < x6 < x5 < x4 < x3 < x2 < x1, xi's are integers ''' inequalities = ''' x1 > x2 x2 > x3 x3 > x4 x4 > x5 x5 > x6 x6 > x7 x7 > x8 x8 > x9 x9 > x10 x10 > 0 x5 < 3*x1/2 + x2 + x3/2 + x4/2 - x6/2 x5 < 3*x1/2 + 3*x2/2 + x3/2 + x8 - 3*x9/2 - x10/2 x4 > -x1 - 3*x2/2 + x5/2 - x8/2 + x10/2 x3 > -2*x1 - 3*x2/2 - x4 + x5 - x6/2 - x7/2 - x8/2 + x9 + 3*x10 x3 > -3*x1/2 - 3*x2/2 - x4/2 + 3*x5/2 - x6 + 3*x7/2 - x8/2 + x10 x3 > -3*x1/2 + x2 - x4/2 + 3*x5/2 - x6/2 + x7/2 - x8/2 + x10 x2 > -x1 - x3/2 - x4/2 - x6/4 + 3*x9/4 + x10/4 x2 > -x1 - x3/4 - x4/4 - x6/4 - x8/2 + 3*x9/4 + x10/2 x2 > -x1 + x4/4 + x5 - x6/4 - x7/4 - x8/4 + x9/4 + x10/4 x2 > -3*x1/4 - x3/2 - x4/2 - x6/2 - x7/4 - x8/2 + x9/2 x2 > -x1 - x3/2 - x4/4 - x6/4 - x8/4 + x9/4 + x10/4 x2 > -x1/2 + 3*x3/4 + x4/4 - x6/2 - x7/4 - x8/4 + x9/4 + x10/4 x1 > -x2 - x3/4 - x4/2 - x6/2 - x8/4 x1 > -x2 - x3/2 - x4/4 - x6/2 - x7/4 - x8/2 + x9/2 x1 > -x2 - x3/4 - x4/4 + x5/4 + 3*x7/4 x1 > -x2 - x3/2 - x4/2 - x6/2 - x7/4 - x8/4 x1 > -x2 - x3/2 - x4/4 - x6/4 - x7/4 - x8/4 + x9/4 ''' # test solutions xA = [10,9,8,7,6,5,4,3,2,1] xB = [1.1,2.3,3.7,4.3,5,6,7,8.932,9.0002,10] xC = [64.251, 94., 62.123, 0.0, 41.234, 17.4, 0.0, 0.0, 81.341, 1.987] x = xA, xB, xC def failures(x): 'count the number of failures in solvinge the inequalities' return tuple(eval(i, dict(zip(var,x))) for i in inequalities.strip().split('\n')).count(False) def noints(x): 'count the number of non-integer entries' return tuple(i == int(i) for i in x).count(False) # solving the system of inequalities import mystic as my var = my.symbolic.get_variables(inequalities) solve = my.symbolic.generate_constraint(my.symbolic.generate_solvers(inequalities, var), join=my.constraints.and_) for xi in x: xo = xi.copy() y = solve(xo) assert not failures(y) # building an integer constraint ints = my.constraints.integers(float)(lambda x:x) for xi in x: xo = xi.copy() y = ints(xo) assert not noints(y) #NOTE: yikes, poor english! # now combine, with 'unique' and 'discrete' helping to force to integers helper = my.constraints.and_(my.constraints.discrete(range(100))(lambda x:x), my.constraints.impose_unique(range(100))(lambda x:x)) intsolve = my.constraints.and_(ints, solve, helper, maxiter=1000) for xi in x: xo = xi.copy() y = intsolve(xo) assert not failures(y) and not noints(y) uqfoundation-mystic-9a49031/examples2/integer_programming.py000066400000000000000000000032041455553066500243360ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/integer_programming.py # with Copyright 2010-2013 Google # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Integer programming example Minimize: f(x) = x0 + 2*x1 Where: 3*x0 + 2*x1 >= 17 x0,x1 are integers """ def objective(x): return x[0] + 2*x[1] bounds = [(0,None)]*2 # with penalty='penalty' applied, solution is: xs = [6., 0.] ys = 6.0 # constraints equations = """ 3.*x0 + 2.*x1 - 17. >= 0.0 """ from mystic.symbolic import generate_penalty, generate_conditions pf = generate_penalty(generate_conditions(equations)) from mystic.symbolic import generate_constraint, generate_solvers, simplify cf = generate_constraint(generate_solvers(simplify(equations))) from mystic.constraints import integers @integers() def round(x): return x if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, constraints=round, npop=20, gtol=50, disp=True, full_output=True) print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) #XXX: fails b/c rel & zero? assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/integer_programming_alt.py000066400000000000000000000035601455553066500252030ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/integer_programming.py # with Copyright 2010-2013 Google # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from integer_programming import objective, bounds, xs, ys # bounds = [(0,11)]*2 #XXX: MOD = range(11) instead of LARGE from mystic.penalty import quadratic_inequality, quadratic_equality from mystic.constraints import as_constraint, discrete def penalty1(x): # <= 0.0 return -3*x[0] - 2*x[1] + 17.0 def penalty2(x): # == 0.0 from numpy import abs, round return abs(x - round(x)).sum() # penalize when not an 'int' #@quadratic_equality(penalty2) @quadratic_inequality(penalty1) def penalty(x): return 0.0 solver = as_constraint(penalty) #solver = discrete(range(11))(solver) #XXX: MOD = range(11) instead of LARGE #FIXME: constrain to 'int' with discrete is very fragile! required #MODs def constraint(x): from numpy import round return round(solver(x)) # better is to constrain to integers, penalize otherwise from mystic.constraints import integers @integers() def round(x): return x if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, constraints=round, npop=30, gtol=50, disp=True, full_output=True) print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) #XXX: fails b/c rel & zero? assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/knapsack.py000066400000000000000000000072411455553066500220770ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/69655167 # https://stackoverflow.com/a/69885831 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2021-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' Solve a bounded knapsack problem. Maximize: profit = SUM_i (quantity_i * profit_i) where: profit_i = sell_i - buy_i We have a list of items that we can ship in a truck. Each item has: - a buy price (at the source) - a sell price (at the destination) - a per-unit mass - an upper limit on how many can be purchased Let's say we have 10 items, with: buy_price: [123, 104, 149, 175, 199, 120, 164, 136, 194, 111] profit: [13, 24, 10, 29, 29, 39, 28, 35, 33, 39] unit_mass: [10, 15, 20, 18, 34, 75, 11, 49, 68, 55] item_limit: [300, 500, 200, 300, 200, 350, 100, 600, 1000, 50] Also, we have constraints: - our truck is limited in the amount of mass it can carry - we have an upper limit on how much we can "invest" (spend at the source) Let's say we have: max_load = 75000 # max limit on mass can carry max_spend = 350000 # max limit to spend at source Which items, and what quantity of each, should be purchased to maximize profit? ''' import mystic as my import mystic.symbolic as ms import mystic.constraints as mc class item(object): def __init__(self, id, mass, buy, net, limit): self.id = id self.mass = mass self.buy = buy self.net = net self.limit = limit def __repr__(self): return 'item(%s, mass=%s, buy=%s, net=%s, limit=%s)' % (self.id, self.mass, self.buy, self.net, self.limit) # data buy_price = [123, 104, 149, 175, 199, 120, 164, 136, 194, 111] profit = [13, 24, 10, 29, 29, 39, 28, 35, 33, 39] unit_mass = [10, 15, 20, 18, 34, 75, 11, 49, 68, 55] item_limit = [300, 500, 200, 300, 200, 350, 100, 600, 1000, 50] ids = range(len(item_limit)) # maxima max_load = 75000 # max limit on mass can carry max_spend = 350000 # max limit to spend at source # items items = [item(*i) for i in zip(ids, unit_mass, buy_price, profit, item_limit)] # profit def fixnet(net): def profit(x): return sum(xi*pi for xi,pi in zip(x,net)) return profit profit = fixnet([i.net for i in items]) # item constraints load = [i.mass for i in items] invest = [i.buy for i in items] constraints = ms.linear_symbolic(G=[load, invest], h=[max_load, max_spend]) # bounds (on x) bounds = [(0, i.limit) for i in items] # bounds constraints lo = 'x%s >= %s' lo = '\n'.join(lo % (i,str(float(j[0])).lstrip('0')) for (i,j) in enumerate(bounds)) hi = 'x%s <= %s' hi = '\n'.join(hi % (i,str(float(j[1])).lstrip('0')) for (i,j) in enumerate(bounds)) constraints = '\n'.join([lo, hi]).strip() + '\n' + constraints cf = ms.generate_constraint(ms.generate_solvers(ms.simplify(constraints)), join=mc.and_) pf = ms.generate_penalty(ms.generate_conditions(ms.simplify(constraints))) # integer constraints #constrain = mc.and_(mc.integers(float)(lambda x:x), cf) constrain = mc.integers(float)(lambda x:x) # solve mon = my.monitors.VerboseMonitor(10) result = my.solvers.diffev2(lambda x: -profit(x), bounds, npop=400, bounds=bounds, ftol=1e-6, gtol=100, itermon=mon, disp=True, full_output=True, constraints=constrain, penalty=pf) result, cost = result[:2] print('\nmax profit: %s' % -cost) print("load: %s <= %s" % (sum(i*j for i,j in zip(result, load)), max_load)) print("spend: %s <= %s" % (sum(i*j for i,j in zip(result, invest)), max_spend)) print('') for item,quantity in enumerate(result): print("item %d: %s" % (item, quantity)) uqfoundation-mystic-9a49031/examples2/least_square.py000066400000000000000000000057621455553066500230020ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/least_square.py # with Copyright 2011 Hakan Kjellerstrand hakank@bonetmail.com # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Least square optimization problem in Google or-tools. Solving a fourth grade least square equation. From the Swedish book 'Optimeringslara' [Optimization Theory], page 286f. """ p = 4 # number of points npts = 14 # temperature t = [20, 30, 80, 125, 175, 225, 275, 325, 360, 420, 495, 540, 630, 700] # percentage gas F = [0.0, 5.8, 14.7, 31.6, 43.2, 58.3, 78.4, 89.4, 96.4, 99.1, 99.5, 99.9, 100.0, 100.0] def objective(x): return sum([(F[i] - (sum([x[j] * t[i]**j for j in range(p + 1)]))) for i in range(npts)]) bounds = [(-100,100)]*(p+1) # with penalty='penalty' applied, solution is: xs = [-1e2, -1e2, 5.55811273, -1.52656038e-2, 1.07572965e-5] ys = -1046912.373722 #import random #x0 = [random.randrange(i,j) for i,j in bounds] # constraints def penalty1(x): # == 0.0 return sum([20**i * x[i] for i in range(p + 1)]) def penalty2(x): # == 0.0 return (x[0] + sum([700.0**j * x[j] for j in range(1, p + 1)])) - 100.0 penalties = [] for i in range(npts): def dummy(x): # <= 0.0 return -sum([j * x[j] * t[i]**(j - 1) for j in range(p + 1)]) penalties.append(dummy) # give the penalties names p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13 = penalties #XXX: better if numpy-ify the penalty functions? from mystic.penalty import quadratic_equality, quadratic_inequality from mystic.constraints import as_constraint @quadratic_equality(penalty1) @quadratic_equality(penalty2) @quadratic_inequality(p0) @quadratic_inequality(p1) @quadratic_inequality(p2) @quadratic_inequality(p3) @quadratic_inequality(p4) @quadratic_inequality(p5) @quadratic_inequality(p6) @quadratic_inequality(p7) @quadratic_inequality(p8) @quadratic_inequality(p9) @quadratic_inequality(p10) @quadratic_inequality(p11) @quadratic_inequality(p12) @quadratic_inequality(p13) def penalty(x): return 0.0 solver = as_constraint(penalty) def constraint(x): return x if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual from mystic.monitors import Monitor, VerboseMonitor mon = VerboseMonitor(10)#,10) result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, constraints=constraint, npop=40, ftol=1e-8, gtol=200, disp=True, full_output=True, cross=0.8, scale=0.9, itermon=mon) print(result[0]) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/lp.py000066400000000000000000000046171455553066500207230ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for scipy.optimize.linprog. # http://docs.scipy.org/doc/scipy-dev/reference/optimize.linprog-simplex.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimize: f = -1*x[0] + 4*x[1] Subject to: -3*x[0] + 1*x[1] <= 6 1*x[0] + 2*x[1] <= 4 x[1] >= -3 where: -inf <= x[0] <= inf """ def objective(x): x0,x1 = x return -x0 + 4*x1 equations = """ -3*x0 + x1 - 6.0 <= 0.0 x0 + 2*x1 - 4.0 <= 0.0 """ bounds = [(None, None),(-3.0, None)] # with penalty='penalty' applied, solution is: xs = [10.0, -3.0] ys = -22.0 # alternately, if solving for the maximum, the solution is: _xs = [-1.14285714, 2.57142857] _ys = 11.428571428571429 from mystic.symbolic import generate_conditions, generate_penalty pf = generate_penalty(generate_conditions(equations)) from mystic.symbolic import generate_constraint, generate_solvers, simplify cf = generate_constraint(generate_solvers(simplify(equations))) # inverted objective, used in solving for the maximum _objective = lambda x: -objective(x) if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, constraint=cf, penalty=pf, npop=40, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) result = fmin_powell(objective, x0=[0.0,0.0], bounds=bounds, constraint=cf, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # alternately, solving for the maximum result = diffev2(_objective, x0=bounds, bounds=bounds, constraint=cf, penalty=pf, npop=40, disp=False, full_output=True) assert almostEqual( result[0], _xs, rel=1e-2) assert almostEqual(-result[1], _ys, rel=1e-2) result = fmin_powell(_objective, x0=[0,0], bounds=bounds, constraint=cf, penalty=pf, npop=40, disp=False, full_output=True) assert almostEqual( result[0], _xs, rel=1e-2) assert almostEqual(-result[1], _ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/max_percentle.py000066400000000000000000000033371455553066500231340ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/21765794/2379433 # https://stackoverflow.com/a/43162017/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' solve: max [5th percentile of (ui_T*X), i in 1 to M] such that: 0<=X<=1, [95th percentile of (X_T*si*X), i in 1 to M]<= constant with: unknowns X (Nx1), M (Nx1) u vectors, and M (NxN) s matrices. ''' import numpy as np M = 10 N = 3 Q = 10 C = 10 # let's be lazy, and generate s and u randomly... s = np.random.randint(-Q,Q, size=(M,N,N)) u = np.random.randint(-Q,Q, size=(M,N)) def percentile(p, x): x = np.sort(x) p = 0.01 * p * len(x) if int(p) != p: return x[int(np.floor(p))] p = int(p) return x[p:p+2].mean() def objective(x, p=5): # inverted objective, to find the max return -1*percentile(p, [np.dot(np.atleast_2d(u[i]), x)[0] for i in range(0,M-1)]) def constraint(x, p=95, v=C): # 95%(xTsx) - v <= 0 x = np.atleast_2d(x) return percentile(p, [np.dot(np.dot(x,s[i]),x.T)[0,0] for i in range(0,M-1)]) - v bounds = [(0,1) for i in range(0,N)] from mystic.penalty import quadratic_inequality @quadratic_inequality(constraint, k=1e4) def penalty(x): return 0.0 from mystic.solvers import diffev2 from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) result = diffev2(objective, x0=bounds, penalty=penalty, npop=10, gtol=200, \ disp=False, full_output=True, itermon=mon, maxiter=M*N*100) print(result[0]) print(result[1]) uqfoundation-mystic-9a49031/examples2/no_solution.py000066400000000000000000000026431455553066500226550ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/12942153/2379433 # https://stackoverflow.com/a/43173143/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' Attempt to solve equations with no solution, using unconstrained optimization. The equations are: (x-x1)^2 + (y-y1)^2 - r1^2 = 0 (x-x2)^2 + (y-y2)^2 - r2^2 = 0 (x-x3)^2 + (y-y3)^2 - r3^2 = 0 with the given points (x,y) and a radii (r): x1, y1, r1 = (0, 0, 0.88) x2, y2, r2 = (2, 0, 1) x3, y3, r3 = (0, 2, 0.75) ''' from mystic import reduced @reduced(lambda x,y: abs(x)+abs(y)) #choice changes answer def objective(x, a, b, c): x,y = x eqns = (\ (x - a[0])**2 + (y - b[0])**2 - c[0]**2, (x - a[1])**2 + (y - b[1])**2 - c[1]**2, (x - a[2])**2 + (y - b[2])**2 - c[2]**2) return eqns bounds = [(None,None),(None,None)] #unnecessary a = (0,2,0) b = (0,0,2) c = (.88,1,.75) args = a,b,c from mystic.solvers import diffev2 from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) result = diffev2(objective, args=args, x0=bounds, bounds=bounds, npop=40, \ ftol=1e-8, disp=False, full_output=True, itermon=mon) print(result[0]) print(result[1]) uqfoundation-mystic-9a49031/examples2/no_solution2.py000066400000000000000000000024311455553066500227320ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/12942153/2379433 # https://stackoverflow.com/a/43173143/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' Attempt to solve equations with no solution, using penaltys. The equations are: (x-x1)^2 + (y-y1)^2 - r1^2 = 0 (x-x2)^2 + (y-y2)^2 - r2^2 = 0 (x-x3)^2 + (y-y3)^2 - r3^2 = 0 with the given points (x,y) and a radii (r): x1, y1, r1 = (0, 0, 0.88) x2, y2, r2 = (2, 0, 1) x3, y3, r3 = (0, 2, 0.75) ''' def objective(x): return 0.0 equations = """ (x0 - 0)**2 + (x1 - 0)**2 - .88**2 == 0 (x0 - 2)**2 + (x1 - 0)**2 - 1**2 == 0 (x0 - 0)**2 + (x1 - 2)**2 - .75**2 == 0 """ bounds = [(None,None),(None,None)] #unnecessary from mystic.symbolic import generate_penalty, generate_conditions from mystic.solvers import diffev2 pf = generate_penalty(generate_conditions(equations), k=1e12) result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, \ npop=40, gtol=50, disp=False, full_output=True) print(result[0]) print(result[1]) uqfoundation-mystic-9a49031/examples2/no_solution3.py000066400000000000000000000026151455553066500227370ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/q/12942153/2379433 # https://stackoverflow.com/a/43173143/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' Attempt to solve equations with no solution, with a constrained search. The equations are: (x-x1)^2 + (y-y1)^2 - r1^2 = 0 (x-x2)^2 + (y-y2)^2 - r2^2 = 0 (x-x3)^2 + (y-y3)^2 - r3^2 = 0 with the given points (x,y) and a radii (r): x1, y1, r1 = (0, 0, 0.88) x2, y2, r2 = (2, 0, 1) x3, y3, r3 = (0, 2, 0.75) ''' def objective(x): return 0.0 equations = """ (x0 - 0)**2 + (x1 - 0)**2 - .88**2 == 0 (x0 - 2)**2 + (x1 - 0)**2 - 1**2 == 0 (x0 - 0)**2 + (x1 - 2)**2 - .75**2 == 0 """ bounds = [(None,None),(None,None)] #unnecessary from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions from mystic.solvers import diffev2 cf = generate_constraint(generate_solvers(simplify(equations))) result = diffev2(objective, x0=bounds, bounds=bounds, \ constraints=cf, \ npop=40, gtol=50, disp=False, full_output=True) print(result[0]) print(result[1]) uqfoundation-mystic-9a49031/examples2/olympic.py000066400000000000000000000066751455553066500217720ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in google/or-tools # https://github.com/google/or-tools/blob/master/examples/python/olympic.py # with Copyright 2010 Hakan Kjellerstrand hakank@bonetmail.com # and disclamer as stated at the above reference link. # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Olympic puzzle in Google CP Solver. Prolog benchmark problem ''' Name : olympic.pl Author : Neng-Fa Date : 1993 Purpose: solve a puzzle taken from Olympic Arithmetic Contest Given ten variables with the following configuration: X7 X8 X9 X10 X4 X5 X6 X2 X3 X1 We already know that X1 is equal to 3 and want to assign each variable with a different integer from {1,2,...,10} such that for any three variables Xi Xj Xk the following constraint is satisfied: |Xi-Xj| = Xk ''' """ def objective(x): return 0.0 n = 10 bounds = [(1,n)]*n # with penalty='penalty' applied, solution is: xs = [[3, 7, 4, 2, 9, 5, 8, 10, 1, 6], [3, 7, 4, 2, 8, 5, 10, 9, 1, 6], [3, 2, 5, 7, 9, 4, 8, 1, 10, 6], [3, 5, 2, 4, 9, 7, 6, 10, 1, 8], [3, 4, 7, 5, 1, 8, 6, 10, 9, 2], [3, 4, 7, 5, 8, 1, 6, 2, 10, 9], [3, 4, 7, 5, 9, 2, 6, 1, 10, 8]] ys = 0.0 # constraints def penalty1(x): # == 0 return x[0] - 3 def penalty2(x): # == 0 return abs(x[1] - x[2]) - x[0] def penalty3(x): # == 0 return abs(x[3] - x[4]) - x[1] def penalty4(x): # == 0 return abs(x[4] - x[5]) - x[2] def penalty5(x): # == 0 return abs(x[6] - x[7]) - x[3] def penalty6(x): # == 0 return abs(x[7] - x[8]) - x[4] def penalty7(x): # == 0 return abs(x[8] - x[9]) - x[5] from mystic.penalty import quadratic_equality from mystic.constraints import as_constraint @quadratic_equality(penalty1) @quadratic_equality(penalty2) @quadratic_equality(penalty3) @quadratic_equality(penalty4) @quadratic_equality(penalty5) @quadratic_equality(penalty6) @quadratic_equality(penalty7) def penalty(x): return 0.0 solver = as_constraint(penalty) from mystic.constraints import unique from numpy import round, hstack, clip def constraint(x): x = round(x).astype(int) # force round and convert type to int x = clip(x, 1,n) #XXX: impose bounds x = unique(x, list(range(1,n+1))) return x if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual from mystic.monitors import Monitor, VerboseMonitor mon = VerboseMonitor(10)#,10) result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, constraints=constraint, npop=50, ftol=1e-8, gtol=200, disp=True, full_output=True, cross=0.1, scale=0.9, itermon=mon) print(result[0]) assert almostEqual(result[0], xs[0], tol=1e-8) \ or almostEqual(result[0], xs[1], tol=1e-8) \ or almostEqual(result[0], xs[2], tol=1e-8) \ or almostEqual(result[0], xs[3], tol=1e-8) \ or almostEqual(result[0], xs[4], tol=1e-8) \ or almostEqual(result[0], xs[-1], tol=1e-8) assert almostEqual(result[1], ys, tol=1e-4) # EOF uqfoundation-mystic-9a49031/examples2/optqp.py000066400000000000000000000034001455553066500214400ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for scipy.optimize # http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' Maximize: f = 2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2 Subject to: x[0]**3 - x[1] == 0 x[1] >= 1 ''' def objective(x): return 2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2 equations = """ x0**3 - x1 == 0.0 """ bounds = [(None, None),(1.0, None)] # with penalty='penalty' applied, solution is: xs = [1,1] ys = -1.0 from mystic.symbolic import generate_conditions, generate_penalty pf = generate_penalty(generate_conditions(equations), k=1e4) from mystic.symbolic import generate_constraint, generate_solvers, solve cf = generate_constraint(generate_solvers(solve(equations))) # inverted objective, used in solving for the maximum _objective = lambda x: -objective(x) if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(_objective, x0=bounds, bounds=bounds, constraint=cf, penalty=pf, npop=40, ftol=1e-8, gtol=100, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) result = fmin_powell(_objective, x0=[-1.0,1.0], bounds=bounds, constraint=cf, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) # EOF uqfoundation-mystic-9a49031/examples2/optqp_alt.py000066400000000000000000000024011455553066500223000ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for scipy.optimize # http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from optqp import _objective, bounds, xs, ys from mystic.penalty import quadratic_equality from mystic.constraints import with_penalty @with_penalty(quadratic_equality, k=1e4) def penalty(x): # == 0.0 return x[0]**3 - x[1] if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual result = diffev2(_objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, ftol=1e-8, gtol=100, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) result = fmin_powell(_objective, x0=[-1.0,1.0], bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=2e-2) assert almostEqual(result[1], ys, rel=2e-2) # EOD uqfoundation-mystic-9a49031/examples2/or_constraint.py000066400000000000000000000017511455553066500231700ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2022-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' find the maximum of y = x0 * f(x1), where: f(x) = 1 - 2**(-x)/2 x0 * x1 < 100 x0 and x1 in [0,100] ''' import mystic as my import numpy as np # define the objective def cost(x): return x[0]*f(x[1]) def f(x): return 1 - .5*2**(-x) # define and generate the constraint eqn = "x0 * x1 < 100" eqns = my.symbolic.simplify(eqn, all=True) c = my.symbolic.generate_constraint(my.symbolic.generate_solvers(eqns), join=my.constraints.or_) # test the constraint assert np.prod(c([5,5])) < 100 assert np.prod(c([5,25])) < 100 # solve for the maximum result = my.solvers.fmin(lambda x: -cost(x), [1,1], constraints=c, bounds=[(0,100)]*2, full_output=True, disp=True) print(result[0]) assert np.prod(result[0]) < 100 uqfoundation-mystic-9a49031/examples2/output_constrain.py000066400000000000000000000026121455553066500237210ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/a/71197490/2379433 # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2022-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimize y = f(x): where y > g(x) with f(x) = x0^(sin(x0)) + x1^4 + 6x1^3 - 5x1^2 - 40x1 + 35 and g(x) = 7x1 - x0 + 5 in x = [0,10] """ import numpy as np import mystic as my def f(x): x0,x1 = x return x0**np.sin(x0) + x1**4 + 6*x1**3 - 5*x1**2 - 40*x1 + 35 def g(x): x0,x1 = x return 7*x1 - x0 + 5 def penalty(x): # <= 0.0 return g(x) - f(x) @my.penalty.quadratic_inequality(penalty, k=1e12) def p(x): return 0.0 # monitor mon = my.monitors.VerboseMonitor(1,1) my.solvers.fmin(f, [5,5], bounds=[(0,10)]*2, penalty=p, itermon=mon, disp=1) my.log_reader(mon) fig = my.model_plotter(f, mon, depth=True, scale=1.0, bounds="0:10, 0:10", out=True) from matplotlib import cm import matplotlib.pyplot as plt x,y = my.scripts._parse_axes("0:10, 0:10", grid=True) x, y = np.meshgrid(x, y) z = 0*x s,t = x.shape for i in range(s): for j in range(t): xx,yy = x[i,j], y[i,j] z[i,j] = g([xx,yy]) z = np.log(4*z*1.0+1)+2 # scale=1.0 ax = fig.axes[0] ax.contour(x, y, z, 50, cmap=cm.cool) plt.show() uqfoundation-mystic-9a49031/examples2/polyfit.py000066400000000000000000000047021455553066500217710ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Fit linear and quadratic polynomial to noisy data: y(x) ~ a + b * x --or-- y(x) ~ a + b * x + c * x**2 where: 0 >= x >= 4 y(x) = y0(x) + yn y0(x) = 1.5 * exp(-0.2 * x) + 0.3 yn = 0.1 * Normal(0,1) """ from numpy import polyfit, poly1d, linspace, exp from numpy.random import normal from mystic.math import polyeval from mystic import reduced # Create clean data. x = linspace(0, 4.0, 100) y0 = 1.5 * exp(-0.2 * x) + 0.3 # Add a bit of noise. noise = 0.1 * normal(size=100) y = y0 + noise @reduced(lambda x,y: abs(x)+abs(y)) def objective(coeffs, x, y): return polyeval(coeffs, x) - y bounds = [(None, None), (None, None)] bounds_ = [(None, None), (None, None), (None, None)] args = (x, y) # 'solution' is: xs = polyfit(x, y, 1) xs_ = polyfit(x, y, 2) ys = objective(xs, x, y) ys_ = objective(xs_, x, y) if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual # from mystic.monitors import VerboseMonitor # mon = VerboseMonitor(10) result = diffev2(objective, args=args, x0=bounds, bounds=bounds, npop=40, ftol=1e-8, gtol=100, disp=False, full_output=True)#, itermon=mon) # print("%s %s" % (result[0], xs)) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) result = fmin_powell(objective, args=args, x0=[0.0,0.0], bounds=bounds, disp=False, full_output=True) # print("%s %s" % (result[0], xs)) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) # mon = VerboseMonitor(10) result = diffev2(objective, args=args, x0=bounds_, bounds=bounds_, npop=40, ftol=1e-8, gtol=100, disp=False, full_output=True)#, itermon=mon) # print("%s %s" % (result[0], xs_)) assert almostEqual(result[0], xs_, tol=1e-1) assert almostEqual(result[1], ys_, rel=1e-1) result = fmin_powell(objective, args=args, x0=[0.0,0.0,0.0], bounds=bounds_, disp=False, full_output=True) # print("%s %s" % (result[0], xs_)) assert almostEqual(result[0], xs_, tol=1e-1) assert almostEqual(result[1], ys_, rel=1e-1) # EOF uqfoundation-mystic-9a49031/examples2/qp_inequality.py000066400000000000000000000027131455553066500231670ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition and original response: # https://stackoverflow.com/a/17025929/2379433 # https://stackoverflow.com/a/32906273/2379433 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Maximize: f = 2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2 Subject to: -2*x[0] + 2*x[1] <= -2 2*x[0] - 4*x[1] <= 0 x[0]**3 -x[1] == 0 where: 0 <= x[0] <= inf 1 <= x[1] <= inf """ import numpy as np import mystic.symbolic as ms import mystic.solvers as my import mystic.math as mm # generate constraints and penalty for a nonlinear system of equations ieqn = ''' -2*x0 + 2*x1 <= -2 2*x0 - 4*x1 <= 0''' eqn = ''' x0**3 - x1 == 0''' cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqn,target='x1'))) pens = ms.generate_penalty(ms.generate_conditions(ieqn), k=1e3) bounds = [(0., None), (1., None)] # get the objective def objective(x, sign=1): x = np.asarray(x) return sign * (2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2) # solve x0 = np.random.rand(2) sol = my.fmin_powell(objective, x0, constraint=cons, penalty=pens, disp=True, bounds=bounds, gtol=3, ftol=1e-6, full_output=True, args=(-1,)) print('x* = %s; f(x*) = %s' % (sol[0], -sol[1])) uqfoundation-mystic-9a49031/examples2/root.py000066400000000000000000000035261455553066500212710ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Solve: 3*x[0] - cos(x[1]*x[2]) + a = 0 x[0]**2 - 81*(x[1]+.1)**2 + sin(x[2]) + b = 0 exp(-x[0]*x[1]) + 20*x[2] + c = 0 where: a = -0.5 b = 1.06 c = (10 * pi - 3.0) / 3 """ from math import pi, cos, sin, exp from mystic import reduced @reduced(lambda x,y: abs(x)+abs(y)) def objective(x, a, b, c): x0,x1,x2 = x eqns = \ [3 * x0 - cos(x1*x2) + a, x0**2 - 81*(x1+0.1)**2 + sin(x2) + b, exp(-x0*x1) + 20*x2 + c] return eqns bounds = [(-10, 10),(-10, 10),(-10, 10)] # bound, or exp causes OverflowError a = -0.5 b = 1.06 c = (10 * pi - 3.0) / 3 args = (a,b,c) # solution is: xs = [0.5, 0.0, -0.523598776] xs_ = [0.49814468, -0.1996059, -0.52882598] ys = 0.0 if __name__ == '__main__': from mystic.solvers import diffev2, fmin_powell from mystic.math import almostEqual # from mystic.monitors import VerboseMonitor # mon = VerboseMonitor(10) result = diffev2(objective, args=args, x0=bounds, bounds=bounds, npop=40, ftol=1e-8, disp=False, full_output=True)#, itermon=mon) # print(result[0]) assert almostEqual(result[0], xs, tol=1e-8) \ or almostEqual(result[0], xs_,tol=1e-8) assert almostEqual(result[1], ys, tol=1e-5) result = fmin_powell(objective, args=args, x0=[0.0,0.0,0.0], bounds=bounds, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-8) \ or almostEqual(result[0], xs_,tol=1e-8) assert almostEqual(result[1], ys, tol=1e-5) # EOF uqfoundation-mystic-9a49031/examples2/slack_variable.py000066400000000000000000000025321455553066500232440ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimization with a slack variable and penalty. """ from mystic.solvers import diffev2, fmin_powell from mystic.penalty import quadratic_inequality from mystic.monitors import VerboseMonitor import numpy as np C = 221 Q = 500 production = 1000 x0 = [0.0, 0.0, 0.0, 0.0] bounds = [(0,5), (0,4), (0,3), (0,None)] #x[3] is the slack variable def func_value(d): curve_vec=[] for val in d: curve = (0.3 * val) + ((2 * (val ** (3/2))) / 3) curve_vec.append(curve) return curve_vec def func(x): curve = func_value(x[0:3]) return -(sum(np.dot(curve,production))-Q+x[3]) objective = lambda x: sum(np.dot(x[0:3],C))+1000*x[3] constraint = lambda x: func(x) @quadratic_inequality(constraint) def penalty(x): return 0.0 mon = VerboseMonitor(50) solution = diffev2(objective,x0,penalty=penalty,bounds=bounds,itermon=mon,gtol=100, maxiter=1000, maxfun=10000, npop=40) print(solution) mon = VerboseMonitor(50) solution = fmin_powell(objective,x0,penalty=penalty,bounds=bounds,itermon=mon,gtol=100, maxiter=1000, maxfun=10000) print(solution) uqfoundation-mystic-9a49031/examples2/slsqp.py000066400000000000000000000033461455553066500214500ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example from stack overflow. # http://stackoverflow.com/questions/17009774 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimize: f = x[0]**2 + 4*x[1]**2 - 32*x[1] + 64 Subject to: x[0] + 1*x[1] <= 7 -x[0] + 2*x[1] <= 4 where: 0 <= x[0] <= inf 0 <= x[1] <= 4 """ import numpy as np import mystic.symbolic as ms import mystic.solvers as my import mystic.math as mm # generate constraints and penalty for a linear system of equations A = np.array([[1, 1],[-1, 2]]) b = np.array([7,4]) eqns = ms.linear_symbolic(G=A, h=b) cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqns))) pens = ms.generate_penalty(ms.generate_conditions(eqns), k=1e3) bounds = [(0., None), (0., 4.)] # get the objective def objective(x): x = np.asarray(x) return x[0]**2 + 4*x[1]**2 - 32*x[1] + 64 x0 = np.random.rand(2) # compare against the exact minimum xs = np.array([2., 3.]) ys = objective(xs) sol = my.fmin_powell(objective, x0, constraint=cons, penalty=pens, disp=False, bounds=bounds, gtol=3, ftol=1e-6, full_output=True) assert mm.almostEqual(sol[0], xs, tol=1e-2) assert mm.almostEqual(sol[1], ys, tol=1e-2) sol = my.diffev(objective, bounds, constraint=cons, penalty=pens, disp=False, bounds=bounds, npop=10, gtol=100, ftol=1e-6, full_output=True) assert mm.almostEqual(sol[0], xs, tol=1e-2) assert mm.almostEqual(sol[1], ys, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/slsqp2.py000066400000000000000000000032711455553066500215270ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example from stack overflow. # http://stackoverflow.com/questions/23476152 # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Minimize: f = x[0]**2 + x[1]**2 Subject to: x[0]**2 - x[1] <= 0 -x[0] - x[1]**2 == -2 where: 0.5 <= x[0] <= 2.5 0.0 <= x[1] <= 3.0 """ import numpy as np import mystic.symbolic as ms import mystic.solvers as my import mystic.math as mm # generate constraints and penalty for a nonlinear system of equations eqns = ''' x0**2 - x1 <= 0 -x0 - x1**2 == -2 ''' cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqns))) pens = ms.generate_penalty(ms.generate_conditions(eqns), k=1e3) bounds = [(0.5, 2.5), (0., 3.)] # get the objective def objective(x): x = np.asarray(x) return x[0]**2 + x[1]**2 x0 = np.random.rand(2) # compare against the exact minimum xs = np.array([.5, 1.224744871]) ys = objective(xs) sol = my.fmin_powell(objective, x0, constraint=cons, penalty=pens, disp=False, bounds=bounds, gtol=3, ftol=1e-6, full_output=True) assert mm.almostEqual(sol[0], xs, tol=1e-2) assert mm.almostEqual(sol[1], ys, tol=1e-2) sol = my.diffev(objective, bounds, constraint=cons, penalty=pens, disp=False, bounds=bounds, npop=10, gtol=100, ftol=1e-6, full_output=True) assert mm.almostEqual(sol[0], xs, tol=1e-2) assert mm.almostEqual(sol[1], ys, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/slsqp3.py000066400000000000000000000037101455553066500215260ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # Example in reference documentation for scipy.optimize.slsqp. # http://docs.scipy.org/doc/scipy-0.10.0/reference/tutorial/optimize.html # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Maximize: f = 2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2 Subject to: -2*x[0] + 2*x[1] <= -2 2*x[0] - 4*x[1] <= 0 x[0]**3 -x[1] == 0 where: 0 <= x[0] <= inf 1 <= x[1] <= inf """ import numpy as np import mystic.symbolic as ms import mystic.solvers as my import mystic.math as mm # generate constraints and penalty for a nonlinear system of equations ieqn = ''' -2*x0 + 2*x1 <= -2 2*x0 - 4*x1 <= 0 ''' eqn = ''' x0**3 - x1 == 0 ''' cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqn,target='x1'))) pens = ms.generate_penalty(ms.generate_conditions(ieqn), k=1e3) bounds = [(0., None), (1., None)] # get the objective def objective(x, sign=1): x = np.asarray(x) return sign * (2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2) x0 = np.random.rand(2) # compare against the exact minimum xs = np.array([2., 1.]) ys = objective(xs, -1) sol = my.fmin_powell(objective, x0, constraint=cons, penalty=pens, disp=False, bounds=bounds, gtol=3, ftol=1e-6, full_output=True, args=(-1,)) assert mm.almostEqual(sol[0], xs, tol=1e-2) assert mm.almostEqual(sol[1], ys, tol=1e-2) sol = my.diffev(objective, bounds, constraint=cons, penalty=pens, disp=False, bounds=bounds, npop=15, gtol=100, ftol=1e-6, full_output=True, args=(-1,)) assert mm.almostEqual(sol[0], xs, tol=1e-2) assert mm.almostEqual(sol[1], ys, tol=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/spring.py000066400000000000000000000034071455553066500216060ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE "a Tension-Compression String" def objective(x): x0,x1,x2 = x return x0**2 * x1 * (x2 + 2) bounds = [(0,100)]*3 # with penalty='penalty' applied, solution is: xs = [0.05168906, 0.35671773, 11.28896619] ys = 0.01266523 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ 1.0 - (x1**3 * x2)/(71785*x0**4) <= 0.0 (4*x1**2 - x0*x1)/(12566*x0**3 * (x1 - x0)) + 1./(5108*x0**2) - 1.0 <= 0.0 1.0 - 140.45*x0/(x2 * x1**2) <= 0.0 (x0 + x1)/1.5 - 1.0 <= 0.0 """ # cf = generate_constraint(generate_solvers(simplify(equations))) #XXX: slow pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=pf, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/spring_alt.py000066400000000000000000000034371455553066500224510ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE "a Tension-Compression String" from spring import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return 1.0 - (x[1]**3 * x[2])/(71785*x[0]**4) def penalty2(x): # <= 0.0 return (4*x[1]**2 - x[0]*x[1])/(12566*x[0]**3 * (x[1] - x[0])) + 1./(5108*x[0]**2) - 1.0 def penalty3(x): # <= 0.0 return 1.0 - 140.45*x[0]/(x[2] * x[1]**2) def penalty4(x): # <= 0.0 return (x[0] + x[1])/1.5 - 1.0 @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) @quadratic_inequality(penalty3, k=1e12) @quadratic_inequality(penalty4, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/vessel.py000066400000000000000000000036661455553066500216140ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE "Pressure Vessel Design" def objective(x): x0,x1,x2,x3 = x return 0.6224*x0*x2*x3 + 1.7781*x1*x2**2 + 3.1661*x0**2*x3 + 19.84*x0**2*x2 bounds = [(0,1e6)]*4 # with penalty='penalty' applied, solution is: xs = [0.72759093, 0.35964857, 37.69901188, 240.0] ys = 5804.3762083 from mystic.symbolic import (generate_constraint, generate_solvers, generate_penalty, generate_conditions, simplify, symbolic_bounds) equations = """ -x0 + 0.0193*x2 <= 0.0 -x1 + 0.00954*x2 <= 0.0 -pi*x2**2*x3 - (4/3.)*pi*x2**3 + 1296000.0 <= 0.0 x3 - 240.0 <= 0.0 """ equations += symbolic_bounds(*zip(*bounds)) cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) result = diffev2(objective, x0=bounds, bounds=bounds, constraints=cf, penalty=pf, npop=40, gtol=50, disp=False, full_output=True, itermon=mon) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples2/vessel_alt.py000066400000000000000000000033441455553066500224450ustar00rootroot00000000000000#!/usr/bin/env python # # Problem definition: # A-R Hedar and M Fukushima, "Derivative-Free Filter Simulated Annealing # Method for Constrained Continuous Global Optimization", Journal of # Global Optimization, 35(4), 521-549 (2006). # # Original Matlab code written by A. Hedar (Nov. 23, 2005) # http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/go.htm # and ported to Python by Mike McKerns (December 2014) # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 1997-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE "Pressure Vessel Design" from vessel import objective, bounds, xs, ys from mystic.constraints import as_constraint from mystic.penalty import quadratic_inequality def penalty1(x): # <= 0.0 return -x[0] + 0.0193*x[2] def penalty2(x): # <= 0.0 return -x[1] + 0.00954*x[2] def penalty3(x): # <= 0.0 from math import pi return -pi*x[2]**2*x[3] - (4/3.)*pi*x[2]**3 + 1296000.0 def penalty4(x): # <= 0.0 return x[3] - 240.0 @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) @quadratic_inequality(penalty3, k=1e12) @quadratic_inequality(penalty4, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual result = diffev2(objective, x0=bounds, bounds=bounds, penalty=penalty, npop=40, gtol=500, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples3/000077500000000000000000000000001455553066500177275ustar00rootroot00000000000000uqfoundation-mystic-9a49031/examples3/DATA/000077500000000000000000000000001455553066500204405ustar00rootroot00000000000000uqfoundation-mystic-9a49031/examples3/DATA/g1.pts000066400000000000000000000033451455553066500215040ustar00rootroot00000000000000 262. 245. 266.83513745 248.29450275 263.40199734 250.96007992 262.66009467 253.8656062 260.71076883 256.29313193 258.57231173 258.42391508 257.10939722 260.80998926 257.71010781 264.9707483 254.20449457 265.80332664 252.64829905 268.49980729 250.74937148 271.08560053 248.96867201 274.40984288 246.68252141 277.62136801 243.89745666 280.65165286 239.94885 279.49074055 236.68801366 282.90480949 232.89041815 282.98379692 229.23275371 281.69159799 225.82072459 280.05851471 223.97802343 274.33530272 223.18018225 268.6417331 221.88369349 265.7170248 221.64147654 261.97842448 219.34192753 261.40551467 219.9895194 257.83380043 218.7782713 256.37097074 218.57600244 254.27902469 217.72670144 252.69283784 217.98222021 250.69479855 217.49371119 249.0672386 217.17012756 247.39904014 215.01643214 245.79003259 214.03410448 243.83251713 215.23788437 242.00283181 212.73043976 239.37809576 213.39795288 237.28276899 213.37455642 234.8220298 211.94939918 231.22426034 211.85290407 227.86797905 214.39982779 226.4303137 217.00526586 225.32313512 219.62940134 224.54307222 221.74347947 223.21060569 224.38081987 223.01201752 226.31667825 221.20994815 228.94090081 221.53927718 230.97188177 218.1703429 233.67789475 219.0019953 236.36247255 218.10355556 239.40885871 216.50887423 242.79352775 215.27334749 246.09528777 215.37393017 248.99253348 216.72945102 251.73997876 218.36744185 253.67547915 221.04430089 254.55142345 224.53933056 256.49141048 226.6932675 257.37195798 229.58080481 259.68006599 231.5265368 259.96939606 234.53145338 260.88476803 237.17636605 263.49805315 239.53512487 265.8893471 242.34113911 uqfoundation-mystic-9a49031/examples3/DATA/g2.pts000066400000000000000000000033451455553066500215050ustar00rootroot00000000000000 308. 221. 306.86511246 223.69550225 307.44186418 226.56274126 308.66009467 229.8656062 306.71076883 232.29313193 309.8378071 237.30046831 313.0134246 243.58569894 309.06400312 245.48027212 305.77814825 247.54217536 300.51312895 246.84978802 297.28967379 247.92707151 293.60788364 247.7362208 290.14601713 247.09709441 287.22246837 247.01607101 284.24917857 245.63624325 281.76843004 245.93737467 279.29921146 244.98976647 277.03657663 243.80829064 274.54714973 244.37234314 272.2410504 243.7112021 270.42862276 241.91384082 268.8933857 239.99060607 267.64147654 237.97842448 266.67447957 235.91410424 265.25212569 234.50926361 263.17598407 233.56791503 263.71911369 230.79452606 261.91855716 229.5475976 262.09777553 227.36477485 260.5808367 225.78498658 259.21015757 223.96352017 259.01816184 221.87319391 257.03922016 219.6573947 257.28796529 217.37184903 252.92965061 213.84484914 252.84275607 210.8272864 252.20048909 207.28186626 255.40509908 205.63475191 258.64387178 204.47983694 262.5776247 204.49361218 265.61984034 204.3503451 269.65316896 206.271012 270.68504439 204.44006032 272.38481573 203.5928472 274.16067547 202.9195606 276.41647141 204.381988 277.98125452 203.11356193 279.77700406 203.00138136 281.66248069 202.07287243 283.17071028 204.29830559 285.67324371 201.82151451 287.9375326 201.55789167 290.30736677 201.56399757 293.30498407 201.02558139 296.50201477 200.90812332 297.00807458 204.06703219 297.83801521 206.48086733 300.03310684 207.78354698 300.36694889 210.31414987 301.33200391 212.40083671 302.08391659 214.57344354 304.58171096 216.44593739 304.91355243 218.92276493 uqfoundation-mystic-9a49031/examples3/README000066400000000000000000000063341455553066500206150ustar00rootroot00000000000000Files in this directory demonstrate use cases for some of mystic's "advanced" features, such as using dimensional collapse detectors, building a surrogate for an unknown surface, or using support vectors in optimization. == Notes on mystic examples3 == Naming convention: - `3D` denotes use of 3-D toy model in surrogate.py - `5D` denotes use of 5-D toy model in toys.py - `GP` denotes use of sklearn GP regression instead of RBF interpolation - `NN` denotes use of sklearn MLP regression instead of RBF interpolation - 'ML' denotes use of iterative surrogate-assisted optimization - `c0mean` denotes a (backpropagation) calculation of mean value of an input - `collapse` denotes use of dimensional collapse detectors - `mean` denotes a calculation of mean value of an output - `ouq` denotes use of high-level UQ interface to find bounds, surrogates - `pandas` denotes mystic extensions/interface to pandas - `pof` denotes a probability of failure calculation - `searcher` denotes optimizer-driven discovery of all extrema [DEPRECATED] - `sklearn` denotes mystic extensions/interface to sklearn - `surface` denotes optimizer-driven surface interpolation [DEPRECATED] - `svc` denotes use of support vectors in classification - `svr` denotes use of support vectors in regression - `sparsity` denotes use of the sparsity sampler - `xrd` denotes the lattice parameter toy model OUQ calculations: - test_*_ub_*: find upper bound on (mean of input/output, or PoF) [examples5] - test_error*: find model error - test_expect: find expected value - test_expected*: find bound on expected value - test_expected_error* find bound on expected error - test_glb*: find greatest lower bound - test_gub*: find greatest upper bound - test_llb*: find least lower bound - test_lub*: find least upper bound - test_pof: find probability of failure (PoF) - xrd_design*: find average and bounds on expected value and bounds Miscellaneous: - test_cache: demonstrate use and customization of mystic.cache - test_improve_score: workflow to retry/update sklearn estimators - xrd_opt*: find minimum using ensemble optimization - xrd_optML*: find minimum using iterative surrogate improvement - xrd_*_db: inspect expected value databases generated with xrd_design* External dependencies: - examples with "svc", "svr", or "sparsity" in the name require `matplotlib`. - examples with "surface" and "searcher" require `scipy` and `matplotlib`. - examples with "pandas" require `pandas` and `matplotlib`. - otherwise, assume `sklearn` and `matplotlib` are required. In-place dependencies for ouq* calculations: - dataset: extensions on dataset operations - emulators: toy models emulating XRD calculations - estimator: high-level OUQ estimator (requires sklearn) - interpolator: high-level OUQ interpolator - misc: miscellaneous constraints and definitions for OUQ calculation - ml: lower-level interface to sklearn, used by estimator - noisy: add noise for OUQ noisy model - plotter: high-level interface to plotting learned surrogates - spec*: same as misc, used in test_*_ub_* OUQ calculations - surrogate: hypervelocity impact model, used in test_*_ub_* OUQ calculations - toys: simple toy models for OUQ calculations uqfoundation-mystic-9a49031/examples3/collapse_bounds.py000066400000000000000000000017631455553066500234640ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from mystic.solvers import DifferentialEvolutionSolver from mystic.models import rosen from mystic.tools import solver_bounds from mystic.termination import ChangeOverGeneration as COG, Or, CollapseCost from mystic.monitors import VerboseLoggingMonitor as Monitor solver = DifferentialEvolutionSolver(3,40) solver.SetRandomInitialPoints([-100]*3, [100]*3) mon = Monitor(1) options = dict(limit=1.95, samples=50, clip=False) mask = {} #solver_bounds(solver) stop = Or(CollapseCost(mask=mask,**options), COG(generations=50)) solver.SetGenerationMonitor(mon) solver.SetTermination(stop) solver.SetObjective(rosen) solver.Solve() print(solver.Terminated(info=True)) print('%s @' % solver.bestEnergy) print(solver.bestSolution) uqfoundation-mystic-9a49031/examples3/collapse_measures.py000066400000000000000000000171771455553066500240240ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2010-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE debug = False verbose = True MINMAX = -1 ## NOTE: sup = maximize = -1; inf = minimize = 1 ####################################################################### # scaling and mpi info; also optimizer configuration parameters # hard-wired: use DE solver, don't use mpi, F-F' calculation ####################################################################### npop = 40 maxiter = 6000 maxfun = 1e+6 convergence_tol = 1e-6; ngen = 200 crossover = 0.9 percent_change = 0.9 #XXX: tolW = 0.05; tolP = 0.05; ngcol = 200 ####################################################################### # the model function ####################################################################### from surrogate import marc_surr as model ####################################################################### # the differential evolution optimizer ####################################################################### def optimize(cost,_bounds,_constraints): from mystic.solvers import DifferentialEvolutionSolver2 from mystic.termination import ChangeOverGeneration as COG from mystic.strategy import Best1Exp from mystic.monitors import VerboseMonitor, Monitor from mystic.tools import random_seed from mystic.termination import Or, CollapseWeight, CollapsePosition, state if debug: random_seed(123) # or 666 to force impose_unweighted reweighting stepmon = VerboseMonitor(1,1) else: stepmon = VerboseMonitor(10) if verbose else Monitor() stepmon._npts = npts evalmon = Monitor() lb,ub = _bounds ndim = len(lb) solver = DifferentialEvolutionSolver2(ndim,npop) solver.SetRandomInitialPoints(min=lb,max=ub) solver.SetStrictRanges(min=lb,max=ub) solver.SetEvaluationLimits(maxiter,maxfun) solver.SetEvaluationMonitor(evalmon) solver.SetGenerationMonitor(stepmon) solver.SetConstraints(_constraints) tol = convergence_tol term = Or(COG(tol,ngen), CollapseWeight(), CollapsePosition()) solver.Solve(cost,termination=term,strategy=Best1Exp, disp=verbose, \ CrossProbability=crossover,ScalingFactor=percent_change) #while collapse and solver.Collapse(verbose): #XXX: total_evaluations? # if debug: print(state(solver._termination).keys()) # solver.Solve() #XXX: cost, term, strategy, cross, scale ? # if debug: solver.SaveSolver('debug.pkl') solved = solver.bestSolution #print("solved: %s" % solver.Solution()) func_max = MINMAX * solver.bestEnergy #NOTE: -solution assumes -Max #func_max = 1.0 + MINMAX*solver.bestEnergy #NOTE: 1-sol => 1-success = fail func_evals = solver.evaluations from mystic.munge import write_support_file write_support_file(stepmon, npts=npts) return solved, func_max, func_evals ####################################################################### # maximize the function ####################################################################### def maximize(params,npts,bounds): from mystic.math.measures import split_param from mystic.math.discrete import product_measure from mystic.math import almostEqual from numpy import inf atol = 1e-18 # default is 1e-18 rtol = 1e-7 # default is 1e-7 target,error = params lb,ub = bounds # split lower & upper bounds into weight-only & sample-only w_lb, x_lb = split_param(lb, npts) w_ub, x_ub = split_param(ub, npts) # NOTE: rv, lb, ub are of the form: # rv = [wxi]*nx + [xi]*nx + [wyi]*ny + [yi]*ny + [wzi]*nz + [zi]*nz # generate primary constraints function from mystic import suppressed @suppressed(1e-2) def constraints(rv): c = product_measure().load(rv, npts) # NOTE: bounds wi in [0,1] enforced by filtering # impose norm on each discrete measure for measure in c: if not almostEqual(float(measure.mass), 1.0, tol=atol, rel=rtol): measure.normalize() # impose expectation on product measure ##################### begin function-specific ##################### E = float(c.expect(model)) if not (E <= float(target[0] + error[0])) \ or not (float(target[0] - error[0]) <= E): # if debug: print(c) c.set_expect(target[0], model, (x_lb,x_ub), tol=error[0]) ###################### end function-specific ###################### # extract weights and positions return c.flatten() # generate maximizing function def cost(rv): c = product_measure().load(rv, npts) E = float(c.expect(model)) if E > (target[0] + error[0]) or E < (target[0] - error[0]): if debug: print("skipping expect: %s" % E) return inf #XXX: FORCE TO SATISFY E CONSTRAINTS return MINMAX * c.pof(model) # maximize solved, func_max, func_evals = optimize(cost,(lb,ub),constraints) if MINMAX == 1: print("func_minimum: %s" % func_max) # inf else: print("func_maximum: %s" % func_max) # sup print("func_evals: %s" % func_evals) return solved, func_max ####################################################################### # rank, bounds, and restart information ####################################################################### if __name__ == '__main__': function_name = model.__name__ H_mean = 6.5 #NOTE: SET THE 'mean' HERE! H_range = 1.0 #NOTE: SET THE 'range' HERE! nx = 3 #NOTE: SET THE NUMBER OF 'h' POINTS HERE! ny = 3 #NOTE: SET THE NUMBER OF 'a' POINTS HERE! nz = 3 #NOTE: SET THE NUMBER OF 'v' POINTS HERE! target = (H_mean,) error = (H_range,) w_lower = [0.0] w_upper = [1.0] h_lower = [60.0]; a_lower = [0.0]; v_lower = [2.1] h_upper = [105.0]; a_upper = [30.0]; v_upper = [2.8] lower_bounds = (nx * w_lower) + (nx * h_lower) \ + (ny * w_lower) + (ny * a_lower) \ + (nz * w_lower) + (nz * v_lower) upper_bounds = (nx * w_upper) + (nx * h_upper) \ + (ny * w_upper) + (ny * a_upper) \ + (nz * w_upper) + (nz * v_upper) print("...SETTINGS...") print("npop = %s" % npop) print("maxiter = %s" % maxiter) print("maxfun = %s" % maxfun) print("convergence_tol = %s" % convergence_tol) print("crossover = %s" % crossover) print("percent_change = %s" % percent_change) print("..............\n") print(" model: f(x) = %s(x)" % function_name) print(" target: %s" % str(target)) print(" error: %s" % str(error)) print(" npts: %s" % str((nx,ny,nz))) print("..............\n") param_string = "[" for i in range(nx): param_string += "'wx%s', " % str(i+1) for i in range(nx): param_string += "'x%s', " % str(i+1) for i in range(ny): param_string += "'wy%s', " % str(i+1) for i in range(ny): param_string += "'y%s', " % str(i+1) for i in range(nz): param_string += "'wz%s', " % str(i+1) for i in range(nz): param_string += "'z%s', " % str(i+1) param_string = param_string[:-2] + "]" print(" parameters: %s" % param_string) print(" lower bounds: %s" % lower_bounds) print(" upper bounds: %s" % upper_bounds) # print(" ...") pars = (target,error) npts = (nx,ny,nz) bounds = (lower_bounds,upper_bounds) solved, diameter = maximize(pars,npts,bounds) from numpy import array from mystic.math.discrete import product_measure c = product_measure().load(solved,npts) print("solved: [wx,x]\n%s" % array(list(zip(c[0].weights,c[0].positions)))) print("solved: [wy,y]\n%s" % array(list(zip(c[1].weights,c[1].positions)))) print("solved: [wz,z]\n%s" % array(list(zip(c[2].weights,c[2].positions)))) print("expect: %s" % str( c.expect(model) )) # EOF uqfoundation-mystic-9a49031/examples3/collapse_solver.py000066400000000000000000000037431455553066500235040ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Lan Huong Nguyen (lanhuong @stanford) # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2012-2015 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from mystic.termination import Or, CollapseAt, CollapseAs from mystic.termination import ChangeOverGeneration as COG #from mystic.termination import VTRChangeOverGeneration as COG # update termination condition with new masks ## termination should be Or(*conditions), where ## conditions are: COG(), Collapse*(), and possibly others. # takes termination condition (or solver?) and returns termination condition # also requires updated masks as input verbose = True#False #from mystic.models import rosen as model; target = 1.0 from mystic.models import sphere as model; target = 0.0 n = 10 #term = Or((COG(generations=300), CollapseAt(None, generations=100), CollapseAs(generations=100))) term = Or((COG(generations=500), CollapseAt(target, generations=100))) #term = COG(generations=500) from mystic import suppressed @suppressed(1e-8) def constrain(x): return x from mystic.solvers import DifferentialEvolutionSolver as TheSolver #from mystic.solvers import PowellDirectionalSolver as TheSolver from mystic.solvers import BuckshotSolver #solver = BuckshotSolver(n, 10) solver = TheSolver(n) solver.SetRandomInitialPoints() solver.SetStrictRanges(min=[0]*n, max=[5]*n) solver.SetConstraints(constrain) solver.SetEvaluationLimits(evaluations=320000, generations=1000) solver.SetTermination(term) #from mystic.termination import state #print(state(solver._termination).keys()) solver.Solve(model, disp=verbose) # while collapse and solver.Collapse(verbose): # solver.Solve(model) # we are done; get result print(solver.Terminated(info=True)) print('%s @' % solver.bestEnergy) print(solver.bestSolution) # EOF uqfoundation-mystic-9a49031/examples3/constrained_sklearn.py000066400000000000000000000035711455553066500243370ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ Example applying mystic to sklearn Use a linear regression to fit sparse data generated from: f(x) = a*x3**3 + b*x2**2 + c*x1 + d*x0 a,b,c,d = 0.661, -1.234, 2.983, -16.5571 Where the following information is utilized: f(x) is a polynomial of order=3 3*b + c > -0.75 4.5*b - d > 11.0 """ import numpy as np from sklearn import preprocessing as pre from sklearn import linear_model as lin from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.constraints import vectorize from mystic import random_seed random_seed(123) # define a model a,b,c,d = 0.661, -1.234, 2.983, -16.5571 def model(x): x0,x1,x2,x3 = x return a*x3**3 + b*x2**2 + c*x1 + d*x0 # generate some sparse data xtrain = np.random.uniform(0,100, size=(10,4)) target = model(xtrain.T).T xtest = np.random.uniform(0,100, size=(10,4)) test = model(xtest.T).T # define some model constraints equations = """ 3*b + c > -0.75 4.5*b - d > 11.0 """ var = list('abcd') equations = simplify(equations, variables=var) cf = generate_constraint(generate_solvers(equations, variables=var)) if __name__ == '__main__': # build a kernel-transformed regressor ta = pre.FunctionTransformer(func=vectorize(cf, axis=1)) tp = pre.PolynomialFeatures(degree=3) e = lin.LinearRegression() # train and score, then test and score xtrain_ = tp.fit_transform(ta.fit_transform(xtrain)) assert 1.0 == e.fit(xtrain_, target).score(xtrain_, target) xtest_ = tp.fit_transform(ta.fit_transform(xtest)) assert 1 - e.score(xtest_, test) <= 1e-2 # EOF uqfoundation-mystic-9a49031/examples3/dataset.py000066400000000000000000000324431455553066500217340ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ calculate graphical distance of (interpolated) function from a dataset converters for klepto.archives.dir_archive and mystic.math.legacydata.dataset read (params,cost) from LoggingMonitor archive or klepto.archive.dir_archive """ def _getitem(data, axis): """get the selected axis of the tuple-valued dataset Inputs: data: a mystic.math.legacydata.dataset of i points, M inputs, N outputs axis: int, the desired index the tuple-valued dataset [0,N] """ if len(data.values) and type(data.values[0]) not in (tuple,list): msg = "cannot get axis %s for single-valued dataset.values" % axis raise ValueError(msg) # assumes axis is an int; select values corresponding to axis from mystic.math.legacydata import dataset, datapoint as datapt ds = dataset() for pt in data: ds.append(datapt(pt.position, pt.value[axis], pt.id, pt.cone.slopes)) return ds # somewhat hacky include of tuple-valued dataset def interpolate(data, step=None, **kwds): """generate interpolated function y=f(x) from data (x,y) Inputs: data: mystic.math.legacydata.dataset of i points, M inputs, N outputs step: int, stepsize for interpolation (default: do not skip any points) Additional Inputs: method: string for kind of interpolator maxpts: int, maximum number of points (x,z) to use from the monitor noise: float, amplitude of gaussian noise to remove duplicate x extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z on which to interpolate (all, by default) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: additional keyword arguments (epsilon, smooth, norm) are avaiable for use with a Rbf interpolator. See mystic.math.interpolate.Rbf for more details. """ # interpolate for each member of tuple-valued data, unless axis provided axis = kwds.pop('axis', None) # axis for tuple-valued data if axis is None: if len(data.values) and type(data.values[0]) in (tuple,list): # iterate over each axis, build a 'combined' interpf def objective(x, axis=None): fs = objective.__axis__ if axis is None: return tuple(fi(x) for fi in fs) return fs[axis](x) objective.__axis__ = [interpolate(data, axis=ax, **kwds) for ax,val in enumerate(data.values[0])] return objective # else: data is single-valued else: # axis is not None data = _getitem(data, axis) #XXX: what if dataset is empty? (i.e. len(data.values) == 0) from interpolator import interpolate as interp ii = interp(data.coords[::step], z=data.values[::step], **kwds) from mystic.math.interpolate import _to_objective function = _to_objective(ii.function) function.__axis__ = axis #XXX: bad idea: list of funcs, or int/None ? return function def distance(data, function=None, hausdorff=True, **kwds): """get graphical distance between function y=f(x) and a dataset Inputs: data: a mystic.math.legacydata.dataset of i points, M inputs, N outputs function: a function y=f(*x) of data (x,y) hausdorff: if True, use Hausdorff norm Additional Inputs: method: string for kind of interpolator maxpts: int, maximum number of points (x,z) to use from the monitor noise: float, amplitude of gaussian noise to remove duplicate x extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z on which to interpolate (all, by default) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: data and function may provide tuple-valued or single-valued output. Distance will be measured component-wise, resulting in a tuple of distances, unless an 'axis' is selected. If an axis is selected, then return distance for the selected component (i.e. axis) only. """ """ #FIXME: the following is generally true (doesn't account for 'fax') # function is multi-value & has its components # data is multi-value # axis is None => apply function component-wise to data # axis is int => apply function component-wise to single axis # data is single-value # axis is None => ERROR: unknown which function component to apply # axis is int => apply selected function component to data # function is single-value (int or None) # data is multi-value # axis is None => ERROR: unknown which axis to apply function # axis is int => apply function to selected axis of data # data is single-value # axis is None => apply function to data # axis is int => ERROR: can't take axis of single-valued data # function is None # data is multi-value # axis is None => [fmv] => apply function component-wise to data # axis is int => [fsv] => apply function to selected axis of data # data is single-value # axis is None => [fsv] => apply function to data # axis is int => ERROR: can't take axis of single-valued data """ axis = kwds.get('axis', None) # axis for tuple-valued data and/or function if function is None: function = interpolate(data, **kwds) import mystic.math.distance as md #FIXME: simplify axis vs fax from mystic.math.interpolate import _to_objective fax = getattr(function, '__axis__', None) # axis for tuple-valued function if axis is None: if len(data.values) and type(data.values[0]) in (tuple,list): if type(fax) is list: # multi-value func, multi-value data import numpy as np return np.array([md.graphical_distance(_to_objective(j), _getitem(data, i), hausdorff=hausdorff) for i,j in enumerate(fax)]) elif type(fax) is int: # single-value func, multi-value data return md.graphical_distance(_to_objective(function), _getitem(data, fax), hausdorff=hausdorff) else: # single-value func, multi-value data msg = "axis required for multi-valued dataset.values" raise ValueError(msg) else: if type(fax) is list: # multi-value func, singe-value data msg = "axis required for multi-valued function" raise ValueError(msg) else: # single-value func, singe-value data return md.graphical_distance(_to_objective(function), data, hausdorff=hausdorff) else: if len(data.values) and type(data.values[0]) in (tuple,list): if type(fax) is list: # multi-value func, multi-value data return md.graphical_distance(_to_objective(fax[axis]), _getitem(data, axis), hausdorff=hausdorff) elif type(fax) is int and fax != axis: # single-value func, multi-value data msg = "inconsistent axis for multi-valued dataset.values" raise ValueError(msg) else: # single-value func, multi-value data return md.graphical_distance(_to_objective(function), _getitem(data, axis), hausdorff=hausdorff) else: if type(fax) is list: # multi-value func, singe-value data return md.graphical_distance(_to_objective(fax[axis]), data, hausdorff=hausdorff) elif type(fax) is int: if fax == axis: # single-value func, singe-value data return md.graphical_distance(_to_objective(function), data, hausdorff=hausdorff) msg = "inconsistent axis for multi-valued function" raise ValueError(msg) else: # single-value func, singe-value data _getitem(data, axis) # raise ValueError return NotImplemented # should never get here # reader for logfile(s) def read_logfile(filename): """read 'parameters' and 'cost' from LoggingMonitor archive Inputs: filename: str path to location of klepto.archives.dir_archive """ from mystic.munge import read_trajectories return read_trajectories(filename, iter=False) # reader for archive(s) def read_archive(filename, axis=None): #NOTE: could return iterators """read 'parameters' and 'cost' from klepto.dir_archive Inputs: filename: str path to location of klepto.archives.dir_archive axis: int, the desired index the tuple-valued dataset [0,N] """ from klepto.archives import dir_archive arch = dir_archive(filename, cached=True) return for_monitor(arch, axis=axis) def for_monitor(archive, inverted=False, axis=None): """convert klepto.dir_archive to param,cost for a monitor Inputs: archive: a klepto.archive instance inverted: if True, invert the z-axis of the Monitor (i.e. z => -z) axis: int, the desired index the tuple-valued dataset [0,N] """ arxiv = getattr(archive, '__archive__', archive) # param = list(arxiv.keys()) # param = list(list(k[-1]) for k in arxiv.keys()) param = list(list(k) for k in arxiv.keys()) if inverted: if axis is None: cost = list(tuple(-i for i in k) for k in arxiv.values()) else: cost = list(-k[axis] for k in arxiv.values()) else: cost = arxiv.values() if axis is None: cost = cost if type(cost) is list else list(cost) else: cost = list(k[axis] for k in arxiv.values()) return (param, cost) def from_archive(cache, data=None, **kwds): '''convert a klepto.archive to a mystic.math.legacydata.dataset Inputs: cache: a klepto.archive instance data: a mystic.math.legacydata.dataset of i points, M inputs, N outputs axis: int, the desired index the tuple-valued dataset [0,N] ids: a list of ids for the data, or a function ids(x,y) to generate ids ''' axis = kwds.get('axis', None) ids = kwds.get('ids', _iargsort) #XXX: better None? import numpy as np #FIXME: accept lipshitz coeffs as input if data is None: from mystic.math.legacydata import dataset data = dataset() # import klepto as kl # ca = kl.archives.dir_archive('__objective_5D_cache__', cached=False) # k = keymap=kl.keymaps.keymap() # c = kl.inf_cache(keymap=k, tol=1, ignore=('**','out'), cache=ca) # memo = c(lambda *args, **kwds: kwds['out']) # cache = memo.__cache__() y = np.array(list(cache.items()), dtype=object).T #NOTE: cache.items() slow if not len(y): return data if callable(ids): #XXX: don't repeat tolist ids = ids(y[0].tolist(), y[1].tolist(), axis=axis) if axis is None: #XXX: dataset should be single valued return data.load(y[0].tolist(), y[1].tolist(), ids=ids) return data.load(y[0].tolist(), [i[axis] for i in y[1]], ids=ids) as_dataset = from_archive #NOTE: just an alias def argsort(x, axis=None): """generate a list of indices i that sort x, so x[i] is in increasing order Inputs: x: an array of shape (npts, dim) or (npts,) axis: int in [0,dim], the primary index of x to sort NOTE: if axis=None and dim > 1, the 0th index will be used as the primary """ if not len(x): return [] import numpy as np from mystic import isiterable if axis is None: if isiterable(x[0]): # multi-value data, defaulting to axis=0 return np.argsort(x, axis=0).T[0].tolist() #XXX: better to error? else: # single-value data return np.argsort(x).tolist() if isiterable(x[0]): # multi-value data return np.argsort(np.array(x)[:,axis]).tolist() msg = "cannot get axis %s for single-valued data" % axis raise ValueError(msg) def iargsort(x, axis=None): """generate a list of indices that, when sorted, sort x in increasing order Inputs: x: an array of shape (npts, dim) or (npts,) axis: int in [0,dim], the primary index of x to sort NOTE: if axis=None and dim > 1, the 0th index will be used as the primary """ import numpy as np i = argsort(x, axis=axis) ii = np.empty_like(i) ii[i] = np.arange(len(i)) return ii.tolist() def counting(x): """generate a list of counting indices of len(x)' Inputs: x: an array of shape (npts, dim) or (npts,) """ return list(range(len(x))) # interface f(x,y,axis) for use with ids (in from_archive) _argsort = lambda x,y,axis=None: argsort(x,axis=axis) _argsort.__doc__ = argsort.__doc__ _iargsort = lambda x,y,axis=None: iargsort(x,axis=axis) _iargsort.__doc__ = iargsort.__doc__ _counting = lambda x,y,axis=None: counting(x) _counting.__doc__ = counting.__doc__ uqfoundation-mystic-9a49031/examples3/emulators.py000066400000000000000000000054771455553066500223310ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2022-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' mystic.models where the cost and solved inputs have been shifted to emulate results from a more expensive model base models: * rosen: n-D function with minimum at x_i = 1, with i in [1,n] * sphere: n-D function with minimum at x_i = 0, with i in [1,n] emulator #1: * input parameters (a_alpha, c_alpha, a_steel, a_beta) with solved values at: [2.9306538, 4.6817646, 3.6026807, 3.233392] measured error of: [1e-4, 1e-4, 1e-4, 1e-4] bounds at: [(0.95 * i, 1.05 * i) for i in solved] yielding a minimum at: wR = 0.13658616 emulator #2: * input parameters (a_alpha, c_alpha, a_steel) with solved values at: [2.9306538, 4.6817646, 3.6026807] measured error of: [1e-4, 1e-4, 1e-4] bounds at: [(0.95 * i, 1.05 * i) for i in solved] yielding a minimum at: a_beta = 3.233392 with a measured error of: a_beta_error = 1e-4 emulator #3: * input (dist_spec, center_x, center_y, detc_2theta, detc_phiDA, detc_omegaDN): with solved values at: [65.0458, 2.540605, -0.28430015, -27.21818, -0.44651195, 1.1400392] measured error of: [0.02124893, 0.028312204, 0.10003452, 0.011049773, 1.0831603, 2.0910518] bounds at: [(10,1000),(-1,10000),(-10000,10000),(-180,180),(-180,180),(-10,10)] yielding a minimum at: wR = 0.13658616 ''' import mystic.models as mm import numpy as np # 'solved' inputs (to use as 'xo') x6 = [65.0458, 2.540605, -0.28430015, -27.21818, -0.44651195, 1.1400392] x4 = [2.9306538, 4.6817646, 3.6026807, 3.233392] x3 = x4[:-1] # 'solved' minimum cost (to use as 'yo') wR = 0.13658616 a_beta = x4[-1] # error and bounds information error6 = [0.02124893,0.028312204,0.10003452,0.011049773,1.0831603,2.0910518] error4 = [1e-4, 1e-4, 1e-4, 1e-4] error3 = error4[:-1] bounds6 = [(10,1000),(-1,10000),(-10000,10000),(-180,180),(-180,180),(-10,10)] bounds4 = [tuple(sorted((0.95 * i, 1.05 * i))) for i in x4] bounds3 = bounds4[:-1] a_beta_error = error4[-1] # to use as objective, either use ExtraArgs, # or fix the args: cost = lambda x: rosen(x, xo=x4, yo=wR) def rosen(x, xo=None, yo=None): "rosen shifted to have minimum cost at yo and solved x at xo" xo = x if xo is None else (np.ones(len(x)) + x - xo) return mm.rosen(xo) + (0 if yo is None else yo) def sphere(x, xo=None, yo=None): "sphere shifted to have minimum cost at yo and solved x at xo" xo = x if xo is None else (np.asarray(x) - xo) return mm.sphere(xo) + (0 if yo is None else yo) # emulator instances cost3 = lambda x: rosen(x, xo=x3, yo=a_beta) cost4 = lambda x: rosen(x, xo=x4, yo=wR) cost6 = lambda x: sphere(x, xo=x6, yo=wR) uqfoundation-mystic-9a49031/examples3/estimator.py000066400000000000000000000375501455553066500223220ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ a function/surface estimator - initalize with x (and z) - can downsample and/or add noise - learns with sklearn interface (internally) - converts f(*x) <-> f(x) - plot data and learned surface """ class Estimator(object): def __init__(self, x, z=None, **kwds): """estimator for data (x,z) Input: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Additional Inputs: estimator: a fitted sklearn estimator transform: a fitted sklearn transform axis: int in [0,N], the index of z to estimate (all, by default) NOTE: if sklearn is not installed, an error will be thrown. NOTE: additional keyword arguments are available for use within the selected estimator and/or transform. The estimator and transform are expected to be sklearn instances where "fit" has already been called (e.g. sklearn.linear_model.LinearRegression().fit(x,z)). However, if any of the relevant hyperparameters for the estimator or the transform are provided, then those parameters will override the hyperparameters used in the relevant instance. Hyperparameters intended for the tranform should be passed as a dict named 'xfopt', while hyperparameters for the estimator can be given directly as keyword arguments. """ # basic configuration self.maxpts = kwds.pop('maxpts', None) # N = 1000 self.noise = kwds.pop('noise', 0.0) #XXX: or 1e-8 ? # parameter trajectories (from arrays or monitor) self.x = getattr(x, '_x', x) # params (x) self.z = x._y if z is None else z # cost (f(x)) import numpy as np self.x = np.asarray(self.x); self.z = np.asarray(self.z) # estimator configuration self.args = {} self.function = None # learned F(*x) self._configure(kwds) # configure learned F(*x) return def _configure(self, kwds): """configure the learning instance Inputs: kwds: a dict of configuration options NOTE: All entries in kwds are used to update the estimator configuration, with the exception of the following: estimator: a fitted sklearn estimator transform: a fitted sklearn transform axis: int in [0,N], the index of z to estimate (all, by default) xfopt: dict of configuration options to update the transform """ learner = self.args.get('learner', None) # get new estimator class/instance, if given estimator = kwds.pop('estimator', None) transform = kwds.pop('transform', None) if estimator is None: if learner is None: import sklearn.linear_model as lm estimator = lm.LinearRegression #FIXME: or ANN? # import sklearn.neural_network as nn # estimator = nn.MLPRegressor else: # use a copy of the existing instance from sklearn.base import clone estimator = clone(learner.estimator) if transform is None: if learner is None: import sklearn.preprocessing as pre transform = pre.StandardScaler #FIXME: default to None ? else: # use a copy of the existing instance from sklearn.base import clone transform = clone(learner.transform) # get options axis = kwds.pop('axis', self.args.get('axis', None)) opts = {} if hasattr(transform, 'mro') else transform.get_params() args = {} if hasattr(estimator, 'mro') else estimator.get_params() opts.update(kwds.pop('xfopt', {})) #XXX: assumes no 'estimator' change args.update(kwds) # build learner if hasattr(transform, 'mro'): transform = transform(**opts) else: transform.set_params(**opts) if hasattr(estimator, 'mro'): estimator = estimator(**args) else: estimator.set_params(**args) from ml import Estimator as Learner learner = self.args['learner'] = Learner(estimator, transform) self.args['axis'] = axis return learner def _noise(self, scale=None, x=None): """inject gaussian noise into x to remove duplicate points Input: scale: amplitude of gaussian noise x: an array of shape (npts, dim) or (npts,) Output: array x, with added noise """ import numpy as np if x is None: x = self.x if scale is None: scale = self.noise if not scale: return x return x + np.random.normal(scale=scale, size=x.shape) def _downsample(self, maxpts=None, x=None, z=None): """downsample (x,z) to at most maxpts Input: maxpts: int, maximum number of points to use from (x,z) x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Output: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) """ if maxpts is None: maxpts = self.maxpts if x is None: x = self.x if z is None: z = self.z if len(x) != len(z): raise ValueError("the input array lengths must match exactly") if maxpts is not None and len(z) > maxpts: N = max(int(round(len(z)/float(maxpts))),1) # print("for speed, sampling {} down to {}".format(len(z),len(z)/N)) # ax.plot(x[:,0], x[:,1], z, 'ko', linewidth=2, markersize=4) x = x[::N] z = z[::N] # plt.show() # exit() return x, z def _train(self, x, z, **kwds): """learn data (x,z) to generate response function z=f(*x) Input: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Additional Inputs: estimator: a fitted sklearn estimator transform: a fitted sklearn transform axis: int in [0,N], the index of z to estimate (all, by default) Output: learned response function, where z=f(*x.T) NOTE: if sklearn is not installed, an error will be thrown. NOTE: additional keyword arguments are available for use within the selected estimator and/or transform. The estimator and transform are expected to be sklearn instances where "fit" has already been called (e.g. sklearn.linear_model.LinearRegression().fit(x,z)). However, if any of the relevant hyperparameters for the estimator or the transform are provided, then those parameters will override the hyperparameters used in the relevant instance. Hyperparameters intended for the tranform should be passed as a dict named 'xfopt', while hyperparameters for the estimator can be given directly as keyword arguments. """ import warnings #from sklearn.exceptions import ConvergenceWarning #warnings.simplefilter('ignore', ConvergenceWarning) #warnings.simplefilter('ignore', RuntimeWarning) _map = kwds.pop('map', map) learner = self._configure(kwds) axis = self.args.get('axis', None) # apply kwds to instantiate transform and estimator if axis is None: if len(z) and hasattr(z[0], '__len__'): #zt = np.array if arrays else list zt = list #XXX: is this ever desired to be an array? # iterate over each axis, build a 'combined' learner def function(*args, **kwds): #XXX: z = array(f(*x.T)).T axis = kwds.get('axis', None) fs = function.__axis__ if axis is None: if hasattr(args[0], '__len__'): return tuple(zt(fi(*args)) for fi in fs) return tuple(fi(*args) for fi in fs) return fs[axis](*args) def learn_ax(i): import warnings from sklearn.base import clone estimator = clone(learner.estimator) transform = clone(learner.transform) from mystic.math.interpolate import _getaxis from ml import Estimator as Learner func = Learner(estimator, transform) with warnings.catch_warnings(): #FIXME: enable warn=True warnings.filterwarnings('ignore') func = func.train(x, _getaxis(z, i)) return func function.__axis__ = list(_map(learn_ax, range(len(z[0])))) return function else: from mystic.math.interpolate import _getaxis z = _getaxis(z, axis) with warnings.catch_warnings(): #FIXME: enable warn=True warnings.filterwarnings('ignore') function = learner.train(x, z) function.__axis__ = axis return function def Train(self, **kwds): #XXX: better take a strategy? """train data (x,z) to generate response function z=f(*x) Input: maxpts: int, maximum number of points to use from (x,z) noise: float, amplitude of gaussian noise to remove duplicate x Additional Input: estimator: a fitted sklearn estimator transform: a fitted sklearn transform axis: int in [0,N], the index of z to estimate (all, by default) Output: learned response function, where z=f(*x.T) NOTE: if sklearn is not installed, an error will be thrown. NOTE: additional keyword arguments are available for use within the selected estimator and/or transform. The estimator and transform are expected to be sklearn instances where "fit" has already been called (e.g. sklearn.linear_model.LinearRegression().fit(x,z)). However, if any of the relevant hyperparameters for the estimator or the transform are provided, then those parameters will override the hyperparameters used in the relevant instance. Hyperparameters intended for the tranform should be passed as a dict named 'xfopt', while hyperparameters for the estimator can be given directly as keyword arguments. """ maxpts = kwds.pop('maxpts', self.maxpts) noise = kwds.pop('noise', self.noise) x, z = self._downsample(maxpts) #NOTE: really only need to add noise when have duplicate x,y coords x = self._noise(noise, x) # build the surrogate self.function = self._train(x, z, **kwds) return self.function def Test(self, x=None, **kwds): """evaluate data x with response function z=f(*x) Input: x: an array of shape (npts, dim) or (npts,) Additional Input: arrays: if True, z = f(*x) is a numpy array; otherwise don't use arrays axis: int in [0,N], the index of z to estimate (all, by default) Output: z: an array of shape (npts,) or (npts, N) NOTE: if sklearn is not installed, an error will be thrown. NOTE: if x is not provided, test against the x used for training. """ #NOTE: don't add noise or downsample here axis = kwds.get('axis', None) arrays = kwds.get('arrays', False) import numpy as np zt = np.array if arrays else list if x is None: x = self.x if axis is None: return zt([self.function(*xi) for xi in x]) if hasattr(self.function, '__axis__') and hasattr(self.function.__axis__, '__len__'): z = self.function.__axis__[axis].test(x) return z if arrays else z.tolist() z = self.function.test(x) return z if arrays else z.tolist() # def Score(self, **kwds): #FIXME: add this? # pass def Plot(self, **kwds): """produce a scatterplot of (x,z) and the surface z = function(*x.T) Input: step: int, plot every 'step' points on the grid [default: 200] scale: float, scaling factor for the z-axis [default: False] shift: float, additive shift for the z-axis [default: False] density: int, density of wireframe for the plot surface [default: 9] axes: tuple, indicies of the axes to plot [default: ()] axis: int, index of the z-axis to plot, if multi-dim [default: 0] vals: list of values (one per axis) for unplotted axes [default: ()] maxpts: int, maximum number of (x,z) points to use [default: None] kernel: function transforming x to x', where x' = kernel(x) vtol: float, maximum distance outside bounds hypercube to plot data NOTE: the default axis is 0 unless an estimator axis has been set """ axis = kwds.pop('axis', self.args.get('axis', 0)) # get learned function fx = self.function or self.Train() # plot learned surface from plotter import Plotter p = Plotter(self.x, self.z, fx, axis=axis, **kwds) p.Plot() # if function was trained, save the function self.function = fx def __model(self): #XXX: deal w/ selector (2D)? ExtraArgs? # convert to 'model' format (i.e. takes a parameter vector) if self.function is None: return None from mystic.math.interpolate import _to_objective _objective = _to_objective(self.function) def objective(x, *args, **kwds): result = _objective(x, *args, **kwds) return result.tolist() if hasattr(result, 'tolist') else result objective.__doc__ = _objective.__doc__ return objective # interface model = property(__model ) if __name__ == '__main__': from ouq_models import * #from toys import cost5x3 as toy; nx = 5; ny = 3 #from toys import function5x3 as toy; nx = 5; ny = 3 #from toys import cost5x1 as toy; nx = 5; ny = 1 #from toys import function5x1 as toy; nx = 5; ny = 1 #from toys import cost5 as toy; nx = 5; ny = None from toys import function5 as toy; nx = 5; ny = None # build a model representing 'truth' truth = dict(model=toy, nx=nx, ny=ny, mu=.001, zmu=-.001) golden = NoisyModel('golden', cached=True, sigma=0, zsigma=0, **truth) # generate some 'truth' data, using solver-directed sampling bounds = [(0,10)]*nx data = golden.sample(bounds, pts='4') # build an estimator instance import mystic.monitors as mm m = mm.Monitor() m._x, m._y = data.coords, data.values args = dict(hidden_layer_sizes=(100,75,50,25), max_iter=1000, n_iter_no_change=5, solver = 'lbfgs') import sklearn.neural_network as nn mlp = nn.MLPRegressor(**args) e = Estimator(m._x, m._y, estimator=mlp) # train on 'truth' data print('training...') f = e.Train(axis=None) print('spot-checking the first point...') print('using function: %s' % str(f(*m._x[0]))) print('actual value: %s' % str(m._y[0])) # test on training data import numpy as np import sklearn.metrics as sm x, y = np.array(m._x), np.array(m._y) #print('r2 scores: %s' % str(tuple(sm.r2_score(j.test(x), y[:,i]) for i,j in enumerate(f.__axis__)))) #ypred = np.array([f(*xi) for xi in x]) ypred = e.Test(x, axis=None, arrays=True) if f.__axis__ is None: print('r2 score: %s' % str(sm.r2_score(ypred, y))) else: print('r2 scores: %s' % str(tuple(sm.r2_score(ypred[:,i], y[:,i]) for i,j in enumerate(f.__axis__)))) uqfoundation-mystic-9a49031/examples3/hyperopt_sklearn.py000066400000000000000000000022721455553066500236750ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE "Hyperparameter optimization" from sklearn.svm import SVR from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split as tts iris = load_iris() X_train, X_test, y_train, y_test = tts(iris.data, iris.target, random_state=1) def objective(x): estimator = SVR(kernel='linear', C=x[0]) estimator.fit(X_train, y_train) return 1-estimator.score(X_test, y_test) bounds = [(0,10)] # for the given split, the solution is, roughly: xs = [0.01213213] ys = 0.08483955 if __name__ == '__main__': from mystic.solvers import diffev2 from mystic.math import almostEqual from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) result = diffev2(objective, x0=bounds, bounds=bounds, npop=40, ftol=1e-8, gtol=75, disp=False, full_output=True, itermon=mon) assert almostEqual(result[0], xs, rel=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF uqfoundation-mystic-9a49031/examples3/interpolator.py000066400000000000000000000244701455553066500230320ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ a function/surface interpolator - initalize with x (and z) - can downsample and/or add noise - interpolates with "interp.interp" - converts f(*x) <-> f(x) - plot data and interpolated surface """ class Interpolator(object): #surface has: # args - interpolation configuration (method, ...) # maxpts - a maximum number of sampling points # noise - a noise coefficient # function - interpolated function [F(*x)] # model - interpolated function [F(x)] # x,y,z - sampled points(*) # #surface can: # Interpolate - build interpolated function from sampled points # Plot - plot sampled points and interpolated surface # #surface (or sampler) can: # _noise - remove duplicate sampled points (x) by adding noise to x # _downsample - skip sampled points at a regular interval (for speed) def __init__(self, x, z=None, **kwds): """interpolator for data (x,z) Input: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Additional Inputs: maxpts: int, maximum number of points to use from (x,z) noise: float, amplitude of gaussian noise to remove duplicate x method: string for kind of interpolator extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z to interpolate (all, by default) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: additional keyword arguments (epsilon, smooth, norm) are avaiable for use with a Rbf interpolator. See mystic.math.interpolate.Rbf for more details. """ # basic configuration self.maxpts = kwds.pop('maxpts', None) # N = 1000 self.noise = kwds.pop('noise', 1e-8) # parameter trajectories (from arrays or monitor) self.x = getattr(x, '_x', x) # params (x) self.z = x._y if z is None else z # cost (f(x)) import numpy as np self.x = np.asarray(self.x); self.z = np.asarray(self.z) # point generator(s) and interpolated function(s) #XXX: better names? self.function = None # interpolated F(*x) # interpolator configuration self.args = {}#dict(method='thin_plate') self.args.update(kwds) return def _noise(self, scale=None, x=None): """inject gaussian noise into x to remove duplicate points Input: scale: amplitude of gaussian noise x: an array of shape (npts, dim) or (npts,) Output: array x, with added noise """ import numpy as np if x is None: x = self.x if scale is None: scale = self.noise if not scale: return x return x + np.random.normal(scale=scale, size=x.shape) def _downsample(self, maxpts=None, x=None, z=None): """downsample (x,z) to at most maxpts Input: maxpts: int, maximum number of points to use from (x,z) x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Output: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) """ if maxpts is None: maxpts = self.maxpts if x is None: x = self.x if z is None: z = self.z if len(x) != len(z): raise ValueError("the input array lengths must match exactly") if maxpts is not None and len(z) > maxpts: N = max(int(round(len(z)/float(maxpts))),1) # print("for speed, sampling {} down to {}".format(len(z),len(z)/N)) # ax.plot(x[:,0], x[:,1], z, 'ko', linewidth=2, markersize=4) x = x[::N] z = z[::N] # plt.show() # exit() return x, z def _interpolate(self, x, z, **kwds): """interpolate data (x,z) to generate response function z=f(*x) Input: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Additional Inputs: method: string for kind of interpolator extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z to interpolate (all, by default) Output: interpolated response function, where z=f(*x.T) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: additional keyword arguments (epsilon, smooth, norm) are avaiable for use with a Rbf interpolator. See mystic.math.interpolate.Rbf for more details. """ import warnings from mystic.math.interpolate import interpf with warnings.catch_warnings(): warnings.filterwarnings('ignore') f = interpf(x, z, **kwds) return f def Interpolate(self, **kwds): #XXX: better take a strategy? """interpolate data (x,z) to generate response function z=f(*x) Input: maxpts: int, maximum number of points to use from (x,z) noise: float, amplitude of gaussian noise to remove duplicate x Additional Input: method: string for kind of interpolator extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z to interpolate (all, by default) Output: interpolated response function, where z=f(*x.T) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: additional keyword arguments (epsilon, smooth, norm) are avaiable for use with a Rbf interpolator. See mystic.math.interpolate.Rbf for more details. """ maxpts = kwds.pop('maxpts', self.maxpts) noise = kwds.pop('noise', self.noise) args = self.args.copy() args.update(kwds) x, z = self._downsample(maxpts) #NOTE: really only need to add noise when have duplicate x,y coords x = self._noise(noise, x) # build the surrogate self.function = self._interpolate(x, z, **args) return self.function def Plot(self, **kwds): """produce a scatterplot of (x,z) and the surface z = function(*x.T) Input: step: int, plot every 'step' points on the grid [default: 200] scale: float, scaling factor for the z-axis [default: False] shift: float, additive shift for the z-axis [default: False] density: int, density of wireframe for the plot surface [default: 9] axes: tuple, indicies of the axes to plot [default: ()] axis: int, index of the z-axis to plot, if multi-dim [default: 0] vals: list of values (one per axis) for unplotted axes [default: ()] maxpts: int, maximum number of (x,z) points to use [default: None] kernel: function transforming x to x', where x' = kernel(x) vtol: float, maximum distance outside bounds hypercube to plot data NOTE: the default axis is 0 unless an interpolation axis has been set """ axis = kwds.pop('axis', self.args.get('axis', 0)) # get interpolated function fx = self.function or self.Interpolate() # plot interpolated surface from plotter import Plotter p = Plotter(self.x, self.z, fx, axis=axis, **kwds) p.Plot() # if plotter interpolated the function, get the function self.function = fx or p.function def __model(self): #XXX: deal w/ selector (2D)? ExtraArgs? # convert to 'model' format (i.e. takes a parameter vector) if self.function is None: return None from mystic.math.interpolate import _to_objective _objective = _to_objective(self.function) def objective(x, *args, **kwds): result = _objective(x, *args, **kwds) return result.tolist() if hasattr(result, 'tolist') else result objective.__doc__ = _objective.__doc__ return objective # interface model = property(__model ) def interpolate(monitor, method=None, **kwds): '''generic interface to Interpolator, returning an Interpolator instance Input: monitor: a mystic.monitor instance method: string for kind of interpolator Additional Inputs: maxpts: int, maximum number of points (x,z) to use from the monitor noise: float, amplitude of gaussian noise to remove duplicate x extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z to interpolate (all, by default) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: additional keyword arguments (epsilon, smooth, norm) are avaiable for use with a Rbf interpolator. See mystic.math.interpolate.Rbf for more details. ''' d = Interpolator(monitor, method=method, **kwds) d.Interpolate() return d #XXX: return a function instead? # EOF uqfoundation-mystic-9a49031/examples3/misc.py000066400000000000000000000203571455553066500212430ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2 from mystic.monitors import VerboseMonitor, Monitor from mystic.termination import ChangeOverGeneration as COG from mystic.bounds import Bounds, MeasureBounds # kwds for solver opts = dict(termination=COG(1e-10, 100)) param = dict(solver=DifferentialEvolutionSolver2, npop=80, maxiter=1500, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # don't use SetNested map=None, # don't use SetMapper stepmon=VerboseMonitor(1, label='output'), # monitor config #evalmon=Monitor(), # monitor config (re-initialized in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) # kwds for sampling kwds = dict(npts=500, ipts=None, itol=1e-8, iter=5) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive # lower and upper bound for parameters and weights xlb = (0,1,0,0,0) xub = (1,10,10,10,10) wlb = (0,1,1,1,1) wub = (1,1,1,1,1) # number of Dirac masses to use for each parameter npts = (2,1,1,1,1) #NOTE: rv = (w0,w0,x0,x0,w1,x1,w2,x2,w3,x3,w4,x4) index = (5,) #NOTE: rv[5] -> x1 # moments and uncertainty in first parameter a_ave = 5e-1 a_var = 5e-3 a_ave_err = 1e-3 a_var_err = 1e-4 # moments and uncertainty in second parameter b_ave = None b_var = None b_ave_err = None b_var_err = None # moments and uncertainty in output o_ave = None o_var = None o_ave_err = None o_var_err = None def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def unflatten(npts): 'convert a "flattened" constraint to a moment constraint' def dec(f): def func(c): return product_measure().load(f(c.flatten()), npts) return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func #NOTE: model has single-value output def constrain_expected(model, ave=None, var=None, ave_err=None, var_err=None, bounds=None, **kwds): 'impose mean and variance constraints on the measure' if ave is None: ave = float('nan') if var is None: var = float('nan'); kwds['k'] = 0 if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 if 'npop' not in kwds: kwds['npop'] = 20 #XXX: better default? if isinstance(bounds, Bounds): bounds = (bounds.xlower,bounds.xupper) samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k return c else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k #FIXME: Ns=samples return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func #NOTE: model has single-value output def constrained_out(model, ave=None, var=None, ave_err=None, var_err=None, debug=False, **kwds): 'check the expected output is properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec ## moment-based constraints ## normcon = normalize_moments() momcons = constrain_moments(a_ave, a_var, a_ave_err, a_var_err) is_cons = constrained(a_ave, a_var, a_ave_err, a_var_err) #momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) #momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) #is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) #is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) #is_cons = lambda c: bool(additive(is_con0)(is_con1)(c)) ## index-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) #scons = outer(integer_indices)(flatten(npts)(outer(momcons)(normcon))) scons = flatten(npts)(outer(momcons)(normcon)) #scons = flatten(npts)(outer(momcon1)(outer(momcon0)(normcon))) # impose constraints concurrently (slower, but safer) #ccons = and_(flatten(npts)(normcon), flatten(npts)(momcons), integer_indices) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcons)) #ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1)) # check parameters (instead of measures) iscon = check(npts)(is_cons) #rvcon = constrained_integers(index) uqfoundation-mystic-9a49031/examples3/misc3.py000066400000000000000000000231101455553066500213140ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2, LatticeSolver, NelderMeadSimplexSolver from mystic.termination import ChangeOverGeneration as COG from mystic.monitors import Monitor, VerboseMonitor, LoggingMonitor, VerboseLoggingMonitor from mystic.bounds import Bounds, MeasureBounds # kwds for solver #TODO: tune opts = dict(termination=COG(1e-6, 100)) param = dict(solver=DifferentialEvolutionSolver2, npop=10, maxiter=2000, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # use SetNested map=None, # use SetMapper stepmon=VerboseLoggingMonitor(1,10, filename='log.txt'), # monitor #evalmon=LoggingMonitor(1, 'eval.txt'),# monitor (re-init in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) # kwds for sampling kwds = dict(npts=500, ipts=4, itol=1e-8, iter=5) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive from emulators import cost3, x3, bounds3, error3, a_beta, a_beta_error from mystic import suppressed # lower and upper bound for parameters and weights xlb, xub = zip(*bounds3) wlb = (0,0,0) wub = (1,1,1) # number of Dirac masses to use for each parameter npts = (2,2,2) #NOTE: rv = (w0,w0,x0,x0,w1,w1,x1,x1,w2,w2,x2,x2) index = (2,3,6,7,10,11) #NOTE: rv[index] -> x0,x0,x1,x1,x2,x2 # moments and uncertainty in first parameter a_ave = x3[0] a_var = .5 * error3[0]**2 a_ave_err = 2 * a_var a_var_err = a_var # moments and uncertainty in second parameter b_ave = x3[1] b_var = .5 * error3[1]**2 b_ave_err = 2 * b_var b_var_err = b_var # moments and uncertainty in third parameter c_ave = x3[2] c_var = .5 * error3[2]**2 c_ave_err = 2 * c_var c_var_err = c_var # moments and uncertainty in output o_ave = a_beta o_var = .5 * a_beta_error**2 o_ave_err = 2 * o_var o_var_err = o_var def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): #@suppressed(1e-3) def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def unflatten(npts): 'convert a "flattened" constraint to a moment constraint' def dec(f): def func(c): return product_measure().load(f(c.flatten()), npts) return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func #NOTE: model has single-value output def constrain_expected(model, ave=None, var=None, ave_err=None, var_err=None, bounds=None, **kwds): 'impose mean and variance constraints on the measure' if ave is None: ave = float('nan') if var is None: var = float('nan'); kwds['k'] = 0 if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 if 'npop' not in kwds: kwds['npop'] = 20 #XXX: better default? if isinstance(bounds, Bounds): bounds = (bounds.xlower,bounds.xupper) samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k return c else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k #FIXME: Ns=samples return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func #NOTE: model has single-value output def constrained_out(model, ave=None, var=None, ave_err=None, var_err=None, debug=False, **kwds): 'check the expected output is properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec # build a model representing 'truth' F(x) from ouq_models import WrapModel nx = 3; ny = None Ns = None #500 # number of samples of F(x) in the objective nargs = dict(nx=nx, ny=ny, rnd=(True if Ns else False)) model = WrapModel('model', cost3, **nargs) # set the bounds bnd = MeasureBounds(xlb, xub, n=npts, wlb=wlb, wub=wub) ## moment-based constraints ## normcon = normalize_moments() momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) momcon2 = constrain_moments(c_ave, c_var, c_ave_err, c_var_err, idx=2) is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) is_con2 = constrained(c_ave, c_var, c_ave_err, c_var_err, idx=2) is_ocon = constrained_out(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, debug=False) is_cons = lambda c: bool(additive(is_ocon)(additive(is_con2)(additive(is_con1)(is_con0)))(c)) ## position-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) _scons = outer(momcon2)(outer(momcon1)(outer(momcon0)(normcon))) scons = flatten(npts)(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd, constraints=_scons, maxiter=50)) #scons = flatten(npts)(outer(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd))(_scons)) # impose constraints concurrently (slower, but safer) #_ccons = unflatten(npts)(and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1), flatten(npts)(momcon2))) #FIXME: broadcasting error #ccons = flatten(npts)(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd, constraints=_ccons, maxiter=50)) _ccons = flatten(npts)(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd, maxiter=1000, debug=False)) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1), flatten(npts)(momcon2), _ccons) # check parameters (instead of measures) iscon = check(npts)(is_cons) uqfoundation-mystic-9a49031/examples3/misc3b.py000066400000000000000000000231011455553066500214560ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2, LatticeSolver, NelderMeadSimplexSolver from mystic.termination import ChangeOverGeneration as COG from mystic.monitors import Monitor, VerboseMonitor, LoggingMonitor, VerboseLoggingMonitor from mystic.bounds import Bounds, MeasureBounds # kwds for solver #TODO: tune opts = dict(termination=COG(1e-6, 100)) param = dict(solver=DifferentialEvolutionSolver2, npop=10, maxiter=2000, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # use SetNested map=None, # use SetMapper stepmon=VerboseLoggingMonitor(1,10, filename='log.txt'), # monitor #evalmon=LoggingMonitor(1, 'eval.txt'),# monitor (re-init in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) # kwds for sampling kwds = dict(npts=500, ipts=4, itol=1e-8, iter=5) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive from emulators import cost3, x3, bounds3, error3, a_beta, a_beta_error from mystic import suppressed # lower and upper bound for parameters and weights xlb, xub = zip(*bounds3) wlb = (0,0,0) wub = (1,1,1) # number of Dirac masses to use for each parameter npts = (2,2,2) #NOTE: rv = (w0,w0,x0,x0,w1,w1,x1,x1,w2,w2,x2,x2) index = (2,3,6,7,10,11) #NOTE: rv[index] -> x0,x0,x1,x1,x2,x2 # moments and uncertainty in first parameter a_ave = x3[0] a_var = .5 * error3[0]**2 a_ave_err = 2 * a_var a_var_err = a_var # moments and uncertainty in second parameter b_ave = x3[1] b_var = .5 * error3[1]**2 b_ave_err = 2 * b_var b_var_err = b_var # moments and uncertainty in third parameter c_ave = x3[2] c_var = .5 * error3[2]**2 c_ave_err = 2 * c_var c_var_err = c_var # moments and uncertainty in output o_ave = None o_var = .5 * a_beta_error**2 o_ave_err = None o_var_err = o_var def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): #@suppressed(1e-3) def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def unflatten(npts): 'convert a "flattened" constraint to a moment constraint' def dec(f): def func(c): return product_measure().load(f(c.flatten()), npts) return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func #NOTE: model has single-value output def constrain_expected(model, ave=None, var=None, ave_err=None, var_err=None, bounds=None, **kwds): 'impose mean and variance constraints on the measure' if ave is None: ave = float('nan') if var is None: var = float('nan'); kwds['k'] = 0 if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 if 'npop' not in kwds: kwds['npop'] = 20 #XXX: better default? if isinstance(bounds, Bounds): bounds = (bounds.xlower,bounds.xupper) samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k return c else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k #FIXME: Ns=samples return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func #NOTE: model has single-value output def constrained_out(model, ave=None, var=None, ave_err=None, var_err=None, debug=False, **kwds): 'check the expected output is properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec # build a model representing 'truth' F(x) from ouq_models import WrapModel nx = 3; ny = None Ns = None #500 # number of samples of F(x) in the objective nargs = dict(nx=nx, ny=ny, rnd=(True if Ns else False)) model = WrapModel('model', cost3, **nargs) # set the bounds bnd = MeasureBounds(xlb, xub, n=npts, wlb=wlb, wub=wub) ## moment-based constraints ## normcon = normalize_moments() momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) momcon2 = constrain_moments(c_ave, c_var, c_ave_err, c_var_err, idx=2) is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) is_con2 = constrained(c_ave, c_var, c_ave_err, c_var_err, idx=2) is_ocon = constrained_out(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, debug=False) is_cons = lambda c: bool(additive(is_ocon)(additive(is_con2)(additive(is_con1)(is_con0)))(c)) ## position-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) _scons = outer(momcon2)(outer(momcon1)(outer(momcon0)(normcon))) scons = flatten(npts)(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd, constraints=_scons, maxiter=50)) #scons = flatten(npts)(outer(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd))(_scons)) # impose constraints concurrently (slower, but safer) #_ccons = unflatten(npts)(and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1), flatten(npts)(momcon2))) #FIXME: broadcasting error #ccons = flatten(npts)(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd, constraints=_ccons, maxiter=50)) _ccons = flatten(npts)(constrain_expected(model, ave=o_ave, var=o_var, ave_err=o_ave_err, var_err=o_var_err, bounds=bnd, maxiter=1000, debug=False)) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1), flatten(npts)(momcon2), _ccons) # check parameters (instead of measures) iscon = check(npts)(is_cons) uqfoundation-mystic-9a49031/examples3/misc4.py000066400000000000000000000143171455553066500213260ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2, LatticeSolver, NelderMeadSimplexSolver from mystic.termination import ChangeOverGeneration as COG from mystic.monitors import Monitor, VerboseMonitor, LoggingMonitor, VerboseLoggingMonitor from mystic.bounds import Bounds, MeasureBounds # kwds for solver #TODO: tune opts = dict(termination=COG(1e-6, 100)) param = dict(solver=DifferentialEvolutionSolver2, npop=40, maxiter=2000, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # use SetNested map=None, # use SetMapper stepmon=VerboseLoggingMonitor(1,10, filename='log.txt'), # monitor #evalmon=LoggingMonitor(1, 'eval.txt'),# monitor (re-init in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) # kwds for sampling kwds = dict(npts=500, ipts=4, itol=1e-8, iter=5) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive from emulators import cost4, x4, bounds4, error4, wR from mystic import suppressed # lower and upper bound for parameters and weights xlb, xub = zip(*bounds4) wlb = (0,0,0,0) wub = (1,1,1,1) # number of Dirac masses to use for each parameter npts = (2,2,2,2) #NOTE: rv = (w0,w0,x0,x0,w1,w1,x1,x1,w2,w2,x2,x2,w3,w3,x3,x3) index = (2,3,6,7,10,11,14,15) #NOTE: rv[index] -> x0,x0,x1,x1,x2,x2,x3,x3 # moments and uncertainty in first parameter a_ave = x4[0] a_var = .5 * error4[0]**2 a_ave_err = 2 * a_var a_var_err = a_var # moments and uncertainty in second parameter b_ave = x4[1] b_var = .5 * error4[1]**2 b_ave_err = 2 * b_var b_var_err = b_var # moments and uncertainty in third parameter c_ave = x4[2] c_var = .5 * error4[2]**2 c_ave_err = 2 * c_var c_var_err = c_var # moments and uncertainty in fourth parameter d_ave = x4[3] d_var = .5 * error4[3]**2 d_ave_err = 2 * d_var d_var_err = d_var # moments and uncertainty in output o_ave = None o_var = None o_ave_err = None o_var_err = None def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): #@suppressed(1e-3) def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec # build a model representing 'truth' F(x) from ouq_models import WrapModel nx = 4; ny = None Ns = None #500 # number of samples of F(x) in the objective nargs = dict(nx=nx, ny=ny, rnd=(True if Ns else False)) model = WrapModel('model', cost4, **nargs) # set the bounds bnd = MeasureBounds(xlb, xub, n=npts, wlb=wlb, wub=wub) ## moment-based constraints ## normcon = normalize_moments() momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) momcon2 = constrain_moments(c_ave, c_var, c_ave_err, c_var_err, idx=2) momcon3 = constrain_moments(d_ave, d_var, d_ave_err, d_var_err, idx=3) is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) is_con2 = constrained(c_ave, c_var, c_ave_err, c_var_err, idx=2) is_con3 = constrained(d_ave, d_var, d_ave_err, d_var_err, idx=3) is_cons = lambda c: bool(additive(is_con3)(additive(is_con2)(additive(is_con1)(is_con0)))(c)) ## position-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) scons = flatten(npts)(outer(momcon3)(outer(momcon2)(outer(momcon1)(outer(momcon0)(normcon))))) # impose constraints concurrently (slower, but safer) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1), flatten(npts)(momcon2), flatten(npts)(momcon3)) # check parameters (instead of measures) iscon = check(npts)(is_cons) uqfoundation-mystic-9a49031/examples3/misc6.py000066400000000000000000000156171455553066500213340ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2, LatticeSolver, NelderMeadSimplexSolver from mystic.termination import ChangeOverGeneration as COG from mystic.monitors import Monitor, VerboseMonitor, LoggingMonitor, VerboseLoggingMonitor from mystic.bounds import Bounds, MeasureBounds # kwds for solver #TODO: tune opts = dict(termination=COG(1e-12, 200)) param = dict(solver=DifferentialEvolutionSolver2, npop=40, maxiter=5000, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # use SetNested map=None, # use SetMapper stepmon=VerboseLoggingMonitor(1,50, filename='log.txt'), # monitor #evalmon=LoggingMonitor(1, 'eval.txt'),# monitor (re-init in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) # kwds for sampling kwds = dict(npts=500, ipts=None, itol=1e-8, iter=5) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive from emulators import cost6, x6, bounds6, error6, wR from mystic import suppressed # lower and upper bound for parameters and weights xlb, xub = zip(*bounds6) wlb = (0,0,0,0,0,0) wub = (1,1,1,1,1,1) # number of Dirac masses to use for each parameter npts = (2,2,2,2,2,2) #NOTE: rv = (w0,w0,x0,x0,w1,w1,x1,x1,w2,w2,x2,x2,w3,w3,x3,x3,w4,w4,x4,x4,w5,w5,x5,x5) index = (2,3,6,7,10,11,14,15,18,19,22,23) #NOTE: rv[index] -> x0,x0,x1,x1,x2,x2,x3,x3,x4,x4,x5,x5 # moments and uncertainty in first parameter a_ave = x6[0] a_var = .5 * error6[0]**2 a_ave_err = 2 * a_var a_var_err = a_var # moments and uncertainty in second parameter b_ave = x6[1] b_var = .5 * error6[1]**2 b_ave_err = 2 * b_var b_var_err = b_var # moments and uncertainty in third parameter c_ave = x6[2] c_var = .5 * error6[2]**2 c_ave_err = 2 * c_var c_var_err = c_var # moments and uncertainty in fourth parameter d_ave = x6[3] d_var = .5 * error6[3]**2 d_ave_err = 2 * d_var d_var_err = d_var # moments and uncertainty in fifth parameter e_ave = x6[4] e_var = .5 * error6[4]**2 e_ave_err = 2 * e_var e_var_err = e_var # moments and uncertainty in sixth parameter f_ave = x6[5] f_var = .5 * error6[5]**2 f_ave_err = 2 * f_var f_var_err = f_var # moments and uncertainty in output o_ave = None o_var = None o_ave_err = None o_var_err = None def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): #@suppressed(1e-3) def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec # build a model representing 'truth' F(x) from ouq_models import WrapModel nx = 6; ny = None Ns = None #500 # number of samples of F(x) in the objective nargs = dict(nx=nx, ny=ny, rnd=(True if Ns else False)) model = WrapModel('model', cost6, **nargs) # set the bounds bnd = MeasureBounds(xlb, xub, n=npts, wlb=wlb, wub=wub) ## moment-based constraints ## normcon = normalize_moments() momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) momcon2 = constrain_moments(c_ave, c_var, c_ave_err, c_var_err, idx=2) momcon3 = constrain_moments(d_ave, d_var, d_ave_err, d_var_err, idx=3) momcon4 = constrain_moments(e_ave, e_var, e_ave_err, e_var_err, idx=4) momcon5 = constrain_moments(f_ave, f_var, f_ave_err, f_var_err, idx=5) is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) is_con2 = constrained(c_ave, c_var, c_ave_err, c_var_err, idx=2) is_con3 = constrained(d_ave, d_var, d_ave_err, d_var_err, idx=3) is_con4 = constrained(e_ave, e_var, e_ave_err, e_var_err, idx=4) is_con5 = constrained(f_ave, f_var, f_ave_err, f_var_err, idx=5) is_cons = lambda c: bool(additive(is_con5)(additive(is_con4)(additive(is_con3)(additive(is_con2)(additive(is_con1)(is_con0)))))(c)) ## position-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) scons = flatten(npts)(outer(momcon5)(outer(momcon4)(outer(momcon3)(outer(momcon2)(outer(momcon1)(outer(momcon0)(normcon))))))) # impose constraints concurrently (slower, but safer) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1), flatten(npts)(momcon2), flatten(npts)(momcon3), flatten(npts)(momcon4), flatten(npts)(momcon5)) # check parameters (instead of measures) iscon = check(npts)(is_cons) uqfoundation-mystic-9a49031/examples3/ml.py000066400000000000000000000373031455553066500207170ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2019-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ mahine learning containers and assorted tools """ import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d class Estimator(object): #XXX: use pipeline? "a container for a trained estimator and transform (not a pipeline)" def __init__(self, estimator, transform=None): """a container for a trained estimator and transform Input: estimator: a fitted sklearn estimator transform: a fitted sklearn transform For example: >>> from sklearn.datasets import load_iris >>> data = load_iris() >>> d = MLData(*traintest(data.data[:,:3], data.data[:,3], .2)) >>> from sklearn.linear_model import LinearRegression >>> from sklearn.preprocessing import StandardScaler >>> xfm = StandardScaler().fit(d.xtrain) >>> lnr = LinearRegression().fit(xfm.transform(d.xtrain), d.ytrain) >>> e = Estimator(lnr, xfm) >>> [e(*i) for i in d.xtest[:2]] [1.7802194778123053, 1.3775908988859642] >>> e.test(d.xtest)[:2].tolist() [1.7802194778123053, 1.3775908988859642] >>> d.ytest[:2].tolist() [1.8, 1.3] >>> e.score(d.xtest, d.ytest) 0.9440222526291645 """ self.estimator = estimator if transform is None: import sklearn.preprocessing as pre transform = pre.FunctionTransformer() #XXX: or StandardScaler ? self.transform = transform self.function = lambda *x: float(self.test(np.array(x).reshape(1,-1)).reshape(-1)) def __call__(self, *x): "f(*x) for x of xtest and predict on fitted estimator(transform(xtest))" import numpy as np return self.function(*x) def map(self, xtrain): # doesn't have n_samples_seen_ """fit the transform on the training data Inputs: xtrain: 2D array of shape (pts, nx) of raw input data Returns: instance where transform.fit(xtrain) has been called """ self.transform.fit(xtrain) return self def apply(self, xtrain): # has n_samples_seen_ """apply the transform to the training data Inputs: xtrain: 2D array of shape (pts, nx) of raw input data Returns: instance where transform.transform(xtrain) has been called """ return self.transform.transform(xtrain) def fit(self, xtrain, ytrain): # doesn't have n_iter_ """fit the estimator on training data Inputs: xtrain: 2D array of shape (pts, nx) of transformed input data ytrain: 1D array of shape (pts,) of raw output data Returns: instance where estimator.fit(xtrain, ytrain) has been called """ self.estimator.fit(xtrain, ytrain) return self def predict(self, xtest): # has n_iter_ """predict ytest using fitted estimator Inputs: xtest: 2D array of shape (pts, nx) of transformed input data Returns: predicted ytest from estimator.predict(xtest) """ return self.estimator.predict(xtest) def train(self, xtrain, ytrain): """fit the estimator and tranform on training data Inputs: xtrain: 2D array of shape (pts, nx) of raw input data ytrain: 1D array of shape (pts,) of raw output data Returns: instance where fit(map(xtrain).apply(xtrain), ytrain) has been called """ xscale = self.map(xtrain).apply(xtrain) self.fit(xscale, ytrain) return self def test(self, xtest): """predict ytest using fitted estimator and transform Inputs: xtest: 2D array of shape (pts, nx) of raw input data Returns: predicted ytest from predict(apply(xtest)) """ return self.predict(self.apply(xtest)) def score(self, xtest, ytest): """score predicted versus ytest, using r2_score Inputs: xtest: 2D array of shape (pts, nx) of raw input data ytest: 1D array of shape (pts,) of raw output data Returns: score from r2_score(ytest, test(xtest)) """ import sklearn.metrics as sm return sm.r2_score(ytest, self.test(xtest)) class MLData(object): "a container for training and test data" def __init__(self, xtrain, xtest, ytrain, ytest=None): """a container for training and test data Input: xtrain: x training data xtest: x test data ytrain: y training data ytest: y test data For example: >>> x = [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], [4.6, 3.1, 1.5, 0.2], [5.0, 3.6, 1.4, 0.2]] >>> y = [0, 1, 0, 0, 2] >>> d = MLData(*traintest(x, y, test_size=.4)) >>> len(d.xtest)/len(x) == len(d.ytest)/len(y) == .4 True >>> len(d.xtrain)/len(x) == len(d.ytrain)/len(y) == 1-.4 True >>> a,b,c,z = d() >>> (a == d.xtrain).all() and (b == d.xtest).all() and (c == d.ytrain).all() and (z == d.ytest).all() True """ self.xtrain = xtrain self.xtest = xtest self.ytrain = ytrain self.ytest = ytest def __call__(self): "get (xtrain, xtest, ytrain, ytest)" return self.xtrain, self.xtest, self.ytrain, self.ytest def plot_train_pred(x, t, y, xaxis=None, yaxis=None, mark=None, ax=None): """generate a 3D plot of input vs true, overlayed with input vs predicted Input: x: array[[float]] of 2D input data t: array[float] of 'true' 1D output data y: array[float] of 'predicted' 1D output data xaxis: tuple[int] of x axes to plot [default: (0,1)] yaxis: int of y axis to plot [default: 0 (or None for 1D)] mark: string (or tuple) of symbol markers (or color and marker) ax: matplotlib subplot axis object Returns: ax: matplotlib subplot axis object (with plotted data) NOTE: the default mark is 'ox', which is equvalent to ('ko','rx'), drawing a black filled circle for 't' and a red cross for 'y'. """ import matplotlib.pyplot as plt if xaxis is None: xaxis = (0,1) if yaxis is None and t.ndim > 1: yaxis = 0 x0,x1 = xaxis y0 = yaxis # draw plot of truth vs predicted if ax is None: figure = plt.figure() kwds = {'projection':'3d'} ax = figure.axes[0] if figure.axes else plt.axes(**kwds) ax.autoscale(tight=True) if mark is None: s0,s1 = 'ko','rx' elif type(mark) in (tuple,list): s0,s1 = mark else: s0,s1 = 'k'+mark[0],'r'+mark[1] if t.ndim > 1: ax.plot(x[:,x0], x[:,x1], t[:,y0], s0, linewidth=2, markersize=4) ax.plot(x[:,x0], x[:,x1], y[:,y0], s1, linewidth=2, markersize=4) else: ax.plot(x[:,x0], x[:,x1], t, s0, linewidth=2, markersize=4) ax.plot(x[:,x0], x[:,x1], y, s1, linewidth=2, markersize=4) return ax def improve_score(estimator, xyt, delta=.0001, tries=10, **kwds): """iteratively improve R^2 score for an estimator with randomness in fit Inputs: estimator: a fitted Estimator instance xyt: a MLData instance (xtrain, xtest, ytrain, ytest) delta: float, the change in target, given target is satisfied tries: int, number of tries to exceed target before giving up Additional Inputs: verbose: bool, if True, be verbose with intermediate results scaled: bool, if True, don't call estimator.apply on xtrain,xtest axis: int, the index of y to estimate (all, by default) Returns: estimator with best score NOTE: can take xyt with either raw xtrain,xtest (will call estimator.map) or can take "transformed" xtrain,xtest (estimator.map has been called) """ ax = kwds.pop('axis', None) return _improve_score(ax, estimator, xyt, delta=delta, tries=tries, **kwds)[0] #XXX: use Pipeline or ouq.LearnedModel? #XXX: refactor to use estimator.score? allow user-supplied scoring metric? #XXX: add as an Estimator method? def _improve_score(axis, estimator, xyt, delta=.0001, tries=10, **kwds): """iteratively improve R^2 score for an estimator with randomness in fit Inputs: axis: int, the index of y to estimate (all, by default) estimator: a fitted Estimator instance xyt: a MLData instance (xtrain, xtest, ytrain, ytest) delta: float, the change in target, given target is satisfied tries: int, number of tries to exceed target before giving up Additional Inputs: verbose: bool, if True, be verbose with intermediate results scaled: bool, if True, don't call estimator.apply on xtrain,xtest Returns: tuple of (best estimator, array of y predicted, best score) for axis NOTE: can take xyt with either raw xtrain,xtest (will call estimator.map) or can take "transformed" xtrain,xtest (estimator.map has been called) """ verbose = kwds.get('verbose', False) scaled = kwds.get('scaled', False) est = estimator scor = _scor = -float('inf') target = 0 #XXX: expose target? if not scaled: if not hasattr(est.transform, 'n_samples_seen'): # is already fit import warnings with warnings.catch_warnings() as w: est.map(xyt.xtrain) xyt = MLData(est.apply(xyt.xtrain), est.apply(xyt.xtest), xyt.ytrain, xyt.ytest) #NOTE: thus 'while' fits transformed x while True: est,ypred,scor = _rescore(axis, est, xyt, target, tries, verbose) if scor >= target: target = scor + delta if scor > _scor: _scor = scor else: if verbose: if axis is None: print('no improvement'.format(axis)) else: print('{0}: no improvement'.format(axis)) break return est, ypred, scor def _rescore(axis, estimator, xyt, target=0, tries=10, verbose=False): """iteratively improve R^2 score for an estimator with randomness in fit Inputs: axis: int, the index of y to estimate (all, by default) estimator: a fitted Estimator instance xyt: a MLData instance (xtrain, xtest, ytrain, ytest) target: float, the target score tries: int, number of tries to exceed target before giving up verbose: bool, if True, be verbose with intermediate results Returns: tuple of (best estimator, array of y predicted, best score) for axis NOTE: assumes xtrain,xtest in xyt have been "transformed" by estimator.apply """ import warnings import sklearn.metrics as sm from sklearn.base import clone #NOTE: use to copy an estimator instance from sklearn.exceptions import ConvergenceWarning warnings.simplefilter('ignore', ConvergenceWarning) warnings.simplefilter('ignore', RuntimeWarning) est = estimator xscale,xstest,ytrain,ytest = xyt() if target is None: target = -float('inf') if not hasattr(est.estimator, 'n_iter_'): # is already fit with warnings.catch_warnings() as w: ypred = est.fit(xscale, ytrain if axis is None else ytrain[:,axis]).predict(xstest) else: ypred = est.predict(xstest) # check if there's something to test against if ytest is None: if verbose: print('no truth velues to compare') return est,ypred,-float('inf') # we have ytest, let's try to make improvements... score = sm.r2_score(ytest if axis is None else ytest[:,axis], ypred) _ypred = _score = -float('inf') if verbose: if axis is None: print('score = {1}'.format(axis,max(score,_score))) else: print('{0}: score = {1}'.format(axis,max(score,_score))) ntry = 1 while score < target and ntry < tries: if score <= _score: ntry += 1 else: # there is improvement _ypred, _score = ypred, score best_mlp = est.estimator # fitted ntry = 0 est.estimator = clone(best_mlp) # unfitted with warnings.catch_warnings() as w: ypred = est.fit(xscale, ytrain if axis is None else ytrain[:,axis]).predict(xstest) score = sm.r2_score(ytest if axis is None else ytest[:,axis], ypred) if verbose: if axis is None: print('score = {1}'.format(axis,max(score,_score))) else: print('{0}: score = {1}'.format(axis,max(score,_score))) if score >= target: return est,ypred,score # didn't come to a happy end, so return the best we have thus far if verbose: if axis is None: print('reached max tries'.format(axis)) else: print('{0}: reached max tries'.format(axis)) if score <= _score: est.estimator = best_mlp return est,_ypred,_score return est,ypred,score #XXX: may want to iteratively adjust to test data, instead of all at once def traintest(x, y, test_size=None, random_state=None): """get train-test split of data from archive Inputs: x: 2D input data array of shape (pts, nx) y: 1D output data array of shape (pts,) test_size: float, % data to use for test [0,1] (default: copy [1,1]) random_state: int, seed for splitting data Returns: xtrain,xtest,ytrain,ytest: arrays of training and test data For example: >>> x = [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], [4.6, 3.1, 1.5, 0.2], [5.0, 3.6, 1.4, 0.2]] >>> y = [0, 1, 0, 0, 2] >>> >>> xx,xt,yy,yt = traintest(x, y, test_size=.4) >>> len(xt)/len(x) == len(yt)/len(y) == .4 True >>> len(xx)/len(x) == len(yy)/len(y) == 1-.4 True >>> >>> xx,xt,yy,yt = traintest(x, y) >>> len(yy) == len(yt) == len(y) True >>> len(xx) == len(xt) == len(x) True """ # build train/test data xx = np.array(x) yy = np.array(y) if test_size is None: return xx,xx,yy,yy from sklearn.model_selection import train_test_split as split return split(xx, yy, test_size=test_size, random_state=random_state) if __name__ == '__main__': # get access to data in archive import dataset as ds from mystic.monitors import Monitor m = Monitor() m._x,m._y = ds.read_archive('demo') if not len(m._x): msg = "the 'demo' archive is empty." raise ValueError(msg) xtrain,xtest,ytrain,ytest = traintest(m._x, m._y, test_size=.2, random_state=42) import sklearn.preprocessing as pre import sklearn.neural_network as nn # build dicts of hyperparameters for ANN instance args = dict(hidden_layer_sizes=(100,75,50,25), max_iter=1000, n_iter_no_change=5) # get tuples of estimator functions, distances, and scores extra = dict( #verbose = True, # if True, print intermediate scores #pure = True, # if True, don't use test data until final scoring #delta = .01, # step size #tries = 5, # attempts to increase score with no improvement solver = 'lbfgs', learning_rate = 'constant', activation = 'relu' #NOTE: activation: 'identity','logistic','tanh','relu' #NOTE: learning_rate: 'constant','invscaling','adaptive' #NOTE: solver: 'lbfgs','sgd','adam' ) args.update(extra) mlp = nn.MLPRegressor(**args) ss = pre.StandardScaler() fpred = Estimator(mlp, ss) i = 0 #0,1,2,None fpred.train(xtrain, ytrain[:,i]) print('as estimator...') score = fpred.score(xtest, ytest[:,i]) print(score) print('as function...') import sklearn.metrics as sm score_ = sm.r2_score(ytest[:,i], [fpred(*x) for x in xtest]) print(score_) uqfoundation-mystic-9a49031/examples3/noisy.py000066400000000000000000000033031455553066500214410ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ functions to add noise to function inputs or outputs """ import numpy as np def _noisy(x, dist=None, op=None): """make x noisy, by sampling from dist; returns op(x, dist.rvs(x.shape)) x: parameters (list or array) dist: mystic.math.Distribution object op: numpy operator (e.g. np.add or np.prod) For example: >>> from numpy.random import normal >>> import mystic >>> x = [1,2,3] >>> rng = mystic.random_state('numpy.random', new=True, seed=123) >>> dist = mystic.math.Distribution(normal, 0, .1, rng=rng) >>> noisy(x, dist) [0.8914369396699439, 2.0997345446583586, 3.0282978498051993] """ if op is None: op = np.add _type = type(x) if type(x) is not np.ndarray else None x = np.asarray(x) if dist is None: from mystic.math import Distribution dist = Distribution() dx = dist.rvs(x.shape) return op(x,dx) if _type is None else _type(op(x,dx)) def noisy(x, mu=0, sigma=1, seed='!'): """make x noisy, by adding noise from a normal distribution x: parameters (list or array) mu: distribution mean value sigma: distribution standard deviation seed: random seed [default: '!', do not reseed the RNG] """ # new: if True, generate a new RNG object [default: use the global RNG] from numpy.random import normal import mystic rng = mystic.random_state('numpy.random', new=True, seed=seed) dist = mystic.math.Distribution(normal, mu, sigma, rng=rng) return _noisy(x, dist=dist) uqfoundation-mystic-9a49031/examples3/ouq.py000066400000000000000000001124061455553066500211110ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ OUQ classes for calculating bounds on statistical quantities """ import mystic.cache from mystic.cache import cached from mystic.cache.archive import dict_archive, file_archive, read from mystic.math import almostEqual from mystic.math.discrete import product_measure from mystic.math.samples import random_samples from mystic.solvers import DifferentialEvolutionSolver2 from mystic.monitors import Monitor from ouq_models import WrapModel class BaseOUQ(object): #XXX: redo with a "Solver" interface, like ensemble? def __init__(self, model, bounds, **kwds): """OUQ model for a statistical quantity Input: model: function of the form y = model(x, axis=None) bounds: mystic.bounds.MeasureBounds instance Additional Input: samples: int, number of samples (used for non-deterministic models) penalty: function of the form y' = penalty(x) constraint: function of the form x' = constraint(x) xvalid: function returning True if x == x', given constraint cvalid: function similar to xvalid, but with product_measure input map: map instance, to evaluate model on the product_measure in parallel NOTE: when y is multivalued models must be a UQModel with ny != None """ self.npts = bounds.n # (2,1,1) self.lb = bounds.lower self.ub = bounds.upper #NOTE: for *_bound(axis=None) to work, requires ny != None #if not isinstance(model, WrapModel.mro()[-2]): # model = WrapModel(model=model) self.model = model self.axes = getattr(model, 'ny', None) #FIXME: in kwds?, ny rnd = getattr(model, 'rnd', True) #FIXME: ?, rnd self.samples = kwds.get('samples', None) if rnd else None self.map = None if self.samples is None else kwds.get('map', None) self.penalty = kwds.get('penalty', lambda rv:0.) self.constraint = kwds.get('constraint', lambda rv:rv) self.xvalid = kwds.get('xvalid', lambda rv:True) self.cvalid = kwds.get('cvalid', lambda c:True) self._invalid = float('inf') #XXX: need to save state? self.kwds = {} #XXX: good idea??? self._upper = {} # saved solver instances for upper bounds self._lower = {} # saved solver instances for lower bounds self._expect = {} # saved solver instances for expected value self._ave = {} # saved expected value from sampling self._var = {} # saved expected variance from sampling self._err = {} # saved misfit to sampled expected value self._cost = {} # saved cache of the most recent cost (for penalty) self._pts = {} # saved sampled {in:out} objective #XXX: out only? ''? return # --- extrema --- def expected(self, axis=None, **kwds): """find the expected value of the statistical quantity Input: axis: int, the index of y on which to find value (all, by default) axmap: map instance, to execute each axis in parallel (None, by default) instance: bool, if True, return the solver instance (False, by default) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Further Input: archive: the archive (str name for a new archive, or archive instance) dist: a mystic.tools.Distribution instance (or list of Distributions) tight: if True, apply bounds concurrent with other constraints clip: if True, clip at bounds, else resample [default = False] smap: map instance, to sample the quantity in parallel [default = None] npts: maximum number of sample points [default = 10000] ipts: number of sample points per iteration [default = npts] iter: number of iterations to stop after if change < itol [default = 1] itol: stop if change in value < itol over iter [default = 1e-15] Returns: expected value of the statistical quantity, for the specified axis NOTE: by default, npts samplings of the expected value will be drawn, where npts is large. When the randomness of the model is expected to be small, the expected value can often be found quickly by setting ipts=1 and iter to a small number. Note however, that iterations are serial, while samplings within an iteration can utilize a parallel map. NOTE: an optimization is used to solve for inputs that yield the expected value, where the objective includes a penalty targeted to stop at the sampled mean. The additional penalty is 'linear_equality' with a strength, k, set equal to the sampled mean. The additional termination condition is 'VTR(ftol, target)', where ftol=1e-16 for models with no randomness, and ftol is the sampled variance for models with randomness. Target is the sampled mean. If only the expected value is of interest, setting `instance=None` will skip the optimization. """ #NOTE: kwds(verbose, reducer) undocumented full = kwds.pop('instance', False) #self._expect.clear() #XXX: good idea? # use __call__ to get expected value [float or tuple(float)] from mystic.monitors import VerboseMonitor, Null verbose = kwds.pop('verbose', False) #NOTE: used for debug label = self.__class__.__name__ mon = VerboseMonitor(1,None,label=label) if verbose else Null() db = kwds.pop('archive', None) if db is None: db = file_archive() elif type(db) in (str, (u''.__class__)): db = read(db, type=file_archive) # populate monitor with existing archive data m = Monitor() xs = list(db.values()) N = size = ys = len(xs) if size: xtype = type(xs[-1]) # is tuple or float multi = hasattr(xtype, '__len__') import numpy as np xs = np.array(xs) var = xtype(xs.var(axis=0)) if multi else xs.var() if xs.ndim == 1: xs = np.atleast_2d(xs).T ys = np.arange(1, size+1) m._x = xs = (xs.cumsum(axis=0).T/ys).T.tolist() m._y = ys = ys.tolist() ave = xtype(xs[-1]) if multi else xs[-1][0] if verbose: print("%s: %s @ %s" % (label, ave, N)) else: var = ave = float('nan') #XXX: good idea? multi = self.axes is not None if multi: var = ave = (ave,) * self.axes # sample expected value iteratively until termination met #reducer = kwds.pop('reducer', None) #XXX: throw error if provided? npts = kwds.pop('npts', 10000) ipts = kwds.pop('ipts', None) niter = kwds.pop('iter', None) itol = kwds.pop('itol', None) if npts is None: npts = float('inf') if ipts is None: ipts = npts if niter is None: niter = 1 if itol is None: itol = 1e-15 if ipts == float('inf') or ipts < 1: msg = 'ipts must be a positive integer' raise ValueError(msg) if npts < ipts: msg = 'ipts must be less than npts' raise ValueError(msg) smap = kwds.pop('smap', None) kwds_ = {} # kwds for _expected keys = ('reducer','dist','tight','clip') # keys for __call__ kwds = {k:v for k,v in kwds.items() if k in keys or kwds_.update({k:v})} import numpy as np from mystic.abstract_solver import AbstractSolver from mystic.termination import CollapseAt solver = AbstractSolver(self.axes or 1) #XXX: axis? solver.SetTermination(CollapseAt(tolerance=itol, generations=niter)) solver.SetEvaluationLimits(maxiter=npts-1) # max num of samples solver.SetGenerationMonitor(m) while not solver.Terminated() and N != npts: N += ipts #XXX: or self.axes? N = min(npts, N) ave = self.__call__(archive=db, axis=axis, npts=N, map=smap, **kwds) # update stepmon with the sampled values xs = list(db.values()) xtype = type(xs[-1]) # is tuple or float multi = hasattr(xtype, '__len__') xs = np.array(xs) var = xtype(np.nanvar(xs, axis=0)) if multi else np.nanvar(xs) if xs.ndim == 1: xs = np.atleast_2d(xs).T ys = np.arange(1, xs.shape[0]+1) y_ = ys - np.cumsum(np.isnan(xs), axis=0).T # nan-adjusted solver._stepmon._x = xs = (np.nancumsum(xs, axis=0).T/y_).T.tolist() solver._stepmon._y = ys = ys.tolist() del y_; ave = xtype(xs[-1]) if multi else xs[-1][0] mon(N, ave) #XXX: or use (ave, N)? if verbose and len(m) > size: print(solver.Terminated(info=True)) #XXX: also disp=True? print("%s: %s @ %s" % (label, ave, N)) # downselect ave to the specified axis, where relevant if isinstance(ave, tuple): # self.axes is not None for i,me in enumerate(ave): self._ave[i] = me self._var[i] = var[i] self._expect[i] = None self._err[i] = None else: ax = None if self.axes is None else axis self._ave[ax] = ave self._var[ax] = var self._expect[ax] = None self._err[ax] = None if full is None: # short-circuit the solver return ave # solve for params that yield expected value if self.axes is None or axis is not None: # solve for expected value of objective (in measure space) solver = self._expected(axis, **kwds_) ax = None if self.axes is None else axis self._expect[ax] = solver self._err[ax] = me = abs(self._ave[ax] - solver.bestEnergy) if verbose: print("%s: misfit = %s, var = %s" % (ax, me, self._var[ax])) if full: return solver return ave #NOTE: within misfit of solver.bestEnergy # else axis is None solvers = self._expected(axis, **kwds_) for ax,solver in enumerate(solvers): self._expect[ax] = solver self._err[ax] = me = abs(self._ave[ax] - solver.bestEnergy) if verbose: print("%s: misfit = %s, var = %s" % (ax, me, self._var[ax])) if full: return solvers return ave #NOTE: within misfit of solver.bestEnergy def _expected(self, axis=None, **kwds): """find the expected value of the statistical quantity Input: axis: int, the index of y on which to find value (all, by default) axmap: map instance, to execute each axis in parallel (None, by default) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Returns: solver instance with solved expected value of the statistical quantity """ axmap = kwds.pop('axmap', map) #NOTE: was _ThreadPool.map w/ join if axmap is None: axmap = map self.kwds.update(**kwds) #FIXME: good idea??? if self.axes is None or axis is not None: #FIXME: enable user-provided (kpen,ftol)? # set penalty at same scale as expected value kpen = self._ave[axis] from mystic.penalty import linear_equality penalty = linear_equality(lambda rv, ave: abs(ave - self._cost[axis]), kwds={'ave':self._ave[axis]}, k=kpen)(lambda rv: 0.) # stop at exact cost, however if noisy stop within variance ftol = 1e-16 if self.samples is None else self._var[axis] from mystic.termination import VTR stop = VTR(ftol, self._ave[axis]) # solve for expected value of objective (in measure space) def objective(rv): cost = self._cost[axis] = self.objective(rv, axis) return cost #self._invalid, invalid = float('nan'), self._invalid solver = self.solve(objective, penalty=penalty, stop=stop) #self._invalid = invalid return solver # else axis is None expected = tuple(axmap(self._expected, range(self.axes))) return expected #FIXME: don't accept "uphill" moves? def upper_bound(self, axis=None, **kwds): """find the upper bound on the statistical quantity Input: axis: int, the index of y on which to find bound (all, by default) axmap: map instance, to execute each axis in parallel (None, by default) instance: bool, if True, return the solver instance (False, by default) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Returns: upper bound on the statistical quantity, for the specified axis """ full = kwds.pop('instance', False) #self._upper.clear() #XXX: good idea? if self.axes is None or axis is not None: # solve for upper bound of objective (in measure space) solver = self._upper_bound(axis, **kwds) self._upper[None if self.axes is None else axis] = solver if full: return solver return solver.bestEnergy # else axis is None solvers = self._upper_bound(axis, **kwds) for i,solver in enumerate(solvers): self._upper[i] = solver if full: return solvers return tuple(i.bestEnergy for i in solvers) def _upper_bound(self, axis=None, **kwds): """find the upper bound on the statistical quantity Input: axis: int, the index of y on which to find bound (all, by default) axmap: map instance, to execute each axis in parallel (None, by default) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Returns: solver instance with solved upper bound on the statistical quantity """ axmap = kwds.pop('axmap', map) #NOTE: was _ThreadPool.map w/ join if axmap is None: axmap = map self.kwds.update(**kwds) #FIXME: good idea??? if self.axes is None or axis is not None: # solve for upper bound of objective (in measure space) self._invalid *= -1 solver = self.solve(lambda rv: -self.objective(rv, axis)) self._invalid *= -1 return solver # else axis is None upper = tuple(axmap(self._upper_bound, range(self.axes))) return upper #FIXME: don't accept "uphill" moves? def lower_bound(self, axis=None, **kwds): """find the lower bound on the statistical quantity Input: axis: int, the index of y on which to find bound (all, by default) axmap: map instance, to execute each axis in parallel (None, by default) instance: bool, if True, return the solver instance (False, by default) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Returns: lower bound on the statistical quantity, for the specified axis """ full = kwds.pop('instance', False) #self._lower.clear() #XXX: good idea? if self.axes is None or axis is not None: # solve for lower bound of objective (in measure space) solver = self._lower_bound(axis, **kwds) self._lower[None if self.axes is None else axis] = solver if full: return solver return solver.bestEnergy # else axis is None solvers = self._lower_bound(axis, **kwds) for i,solver in enumerate(solvers): self._lower[i] = solver if full: return solvers return tuple(i.bestEnergy for i in solvers) def _lower_bound(self, axis=None, **kwds): """find the lower bound on the statistical quantity Input: axis: int, the index of y on which to find bound (all, by default) axmap: map instance, to execute each axis in parallel (None, by default) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Returns: solver instance with solved lower bound on the statistical quantity """ axmap = kwds.pop('axmap', map) #NOTE: was _ThreadPool.map w/ join if axmap is None: axmap = map self.kwds.update(**kwds) #FIXME: good idea??? if self.axes is None or axis is not None: # solve for lower bound of objective (in measure space) return self.solve(lambda rv: self.objective(rv, axis)) # else axis is None lower = tuple(axmap(self._lower_bound, range(self.axes))) return lower #FIXME: don't accept "uphill" moves? # --- func --- def objective(self, rv, axis=None): """calculate the statistical quantity, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) Returns: the statistical quantity for the specified axis NOTE: respects constraints on input parameters and product measure """ return NotImplemented def __call__(self, axis=None, reducer=None, **kwds): """apply the reducer to the sampled statistical quantity Input: axis: int, the index of y on which to find quantity (all, by default) reducer: function, reduces a list to a single value (mean, by default) Further Input: archive: the archive (str name for a new archive, or archive instance) dist: a mystic.tools.Distribution instance (or list of Distributions) tight: if True, apply bounds concurrent with other constraints clip: if True, clip at bounds, else resample [default = False] smap: map instance, to sample the quantity in parallel [default = None] npts: number of sample points [default = 10000] Returns: sampled statistical quantity, for the specified axis, reduced to a float """ #XXX: return what? "energy and solution?" reduced? if 'map' in kwds and 'smap' in kwds: msg = "__call__() can either accept 'smap' or 'map', not both" raise TypeError(msg) tight = kwds.pop('tight', True) #XXX: better False? archive = kwds.pop('archive', None) if archive is None: archive = dict_archive() elif type(archive) in (str, (u''.__class__)): archive = read(archive, type=file_archive) smap = kwds.pop('smap', kwds.pop('map', None)) if smap is None: smap = map #NOTE: was _ThreadPool.map w/ join npts = kwds.get('npts', None) if npts is None: kwds.pop('npts', None) fobj = cached(archive=archive)(self.objective) #XXX: bad idea? self._pts = fobj.__cache__() #XXX: also bad idea? include from *_bounds? if tight: from mystic.constraints import and_, boundsconstrain bounds = boundsconstrain(self.lb, self.ub) #XXX: symbolic? constraint = and_(self.constraint, bounds, onfail=bounds) else: constraint = self.constraint objective = lambda rv: fobj(constraint(rv), axis=axis) # penalty? _pts = len(self._pts) pts = npts - _pts self._invalid, invalid = float('nan'), self._invalid if pts > 0: # need to sample some new points kwds['npts'] = pts s = random_samples(self.lb, self.ub, **kwds).T if _pts: #NOTE: s = [(...),(...)] or [...] s = list(self._pts.values()) + list(smap(objective, s)) else: s = list(smap(objective, s)) elif pts == 0: s = list(self._pts.values()) else: # randomly choose points from archive import numpy as np s = np.random.choice(range(_pts), size=npts, replace=False) s = np.array(list(self._pts.values()))[s].tolist() self._invalid = invalid ''' print(s[-1]) # mark error (nan/inf) in keys with nan in values import numpy as np keys = list(self._pts.keys()) bad = np.where(np.isfinite(np.array(keys).sum(axis=-1)) == False)[0] for k in bad: self._pts[keys[k]] = float('nan') # convert errors in values to nan bad = np.isfinite(s) multi = bad.ndim > 1 if multi: bad = bad.all(axis=-1) bad = np.where(bad == False)[0] for k in bad: s[k] = tuple(float('nan') for i in s[k]) if multi else float('nan') ''' # calculate expected value if axis is None and self.axes is not None: # apply per axis if reducer is None: #XXX: nanreducer? import numpy as np return tuple(np.nanmean(s, axis=0).tolist()) #XXX: better tuple(reducer(s, axis=0).tolist()) if numpy ufunc? return tuple(reducer(si) for si in zip(*s)) if axis is None: s = tuple(s) else: s = list(zip(*s))[axis] if reducer is None: import numpy as np return np.nanmean(s).tolist() return reducer(s) # --- solve --- def solve(self, objective, **kwds): #NOTE: single axis only """solve (in measure space) for bound on given objective Input: objective: cost function of the form y = objective(x) Additional Input: solver: mystic.solver instance [default: DifferentialEvolutionSolver2] npop: population size [default: None] id: a unique identifier for the solver [default: None] nested: mystic.solver instance [default: None], for ensemble solvers x0: initial parameter guess [default: use RandomInitialPoints] maxiter: max number of iterations [default: defined in solver] maxfun: max number of objective evaluations [default: defined in solver] evalmon: mystic.monitor instance [default: Monitor], for evaluations stepmon: mystic.monitor instance [default: Monitor], for iterations map: pathos map instance for solver.SetMapper [default: None] save: iteration frequency to save solver [default: None] opts: dict of configuration options for solver.Solve [default: {}] Returns: solver instance, after Solve has been called """ #NOTE: kwds(penalty, stop) undocumented penalty = kwds.pop('penalty', None) # special case 'and(penalty)' stop = kwds.pop('stop', None) # special case 'Or(stop)' k = self.kwds.copy(); k.update(kwds) # overrides self.kwds kwds.update(k) #FIXME: good idea??? [bad in parallel???] lb, ub = self.lb, self.ub solver = kwds.get('solver', DifferentialEvolutionSolver2) npop = kwds.get('npop', None) if npop is not None: solver = solver(len(lb),npop) else: solver = solver(len(lb)) solver.id = kwds.pop('id', None) nested = kwds.get('nested', None) x0 = kwds.get('x0', None) if nested is not None: # Buckshot/Sparsity solver.SetNestedSolver(nested) else: # DiffEv/Nelder/Powell if x0 is None: solver.SetRandomInitialPoints(min=lb,max=ub) else: solver.SetInitialPoints(x0) save = kwds.get('save', None) if save is not None: solver.SetSaveFrequency(save, 'Solver.pkl') #FIXME: set name mapper = kwds.get('map', None) if mapper is not None: solver.SetMapper(mapper) #NOTE: not Nelder/Powell maxiter = kwds.get('maxiter', None) maxfun = kwds.get('maxfun', None) solver.SetEvaluationLimits(maxiter,maxfun) evalmon = kwds.get('evalmon', None) evalmon = Monitor() if evalmon is None else evalmon solver.SetEvaluationMonitor(evalmon[:0]) stepmon = kwds.get('stepmon', None) stepmon = Monitor() if stepmon is None else stepmon[:0] solver.SetGenerationMonitor(stepmon) solver.SetStrictRanges(min=lb,max=ub)#,tight=True) #XXX: tight? solver.SetConstraints(self.constraint) if penalty is not None: # add the special-case penalty from mystic.coupler import and_ penalty = and_(self.penalty, penalty) else: penalty = self.penalty solver.SetPenalty(penalty) opts = kwds.get('opts', {}) #XXX: copy is necessary? if stop is not None: # add the special-case termination term = opts.get('termination', solver._termination) from mystic.termination import Or opts['termination'] = Or(stop, term) # solve solver.Solve(objective, **opts) if mapper is not None: mapper.close() mapper.join() mapper.clear() #NOTE: if used, then shut down pool #NOTE: debugging code #print("solved: %s" % solver.Solution()) #func_bound = solver.bestEnergy #func_evals = solver.evaluations #from mystic.munge import write_support_file #write_support_file(solver._stepmon) #print("func_bound: %s" % func_bound) #NOTE: may be inverted #print("func_evals: %s" % func_evals) return solver class ExpectedValue(BaseOUQ): def objective(self, rv, axis=None): """calculate expected value of model, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) Returns: the expected value for the specified axis NOTE: respects constraints on input parameters and product measure NOTE: for product_measure, use sampled_expect if samples, else expect """ # check constraints c = product_measure().load(rv, self.npts) if not self.cvalid(c) or not self.xvalid(rv): if axis is None and self.axes is not None: return (self._invalid,) * (self.axes or 1) #XXX:? return self._invalid # get expected value if axis is None and self.axes is not None: model = (lambda x: self.model(x, axis=i) for i in range(self.axes)) if self.samples is None: return tuple(c.expect(m) for m in model) # else use sampled support return tuple(c.sampled_expect(m, self.samples, map=self.map) for m in model) # else, get expected value for the given axis if axis is None: model = lambda x: self.model(x) else: model = lambda x: self.model(x, axis=axis) if self.samples is None: return c.expect(model) return c.sampled_expect(model, self.samples, map=self.map) class MaximumValue(BaseOUQ): def objective(self, rv, axis=None): """calculate maximum value of model, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) Returns: the maximum value for the specified axis NOTE: respects constraints on input parameters and product measure NOTE: for product_measure, use sampled_maximum if samples, else ess_maximum """ # check constraints c = product_measure().load(rv, self.npts) if not self.cvalid(c) or not self.xvalid(rv): if axis is None and self.axes is not None: return (self._invalid,) * (self.axes or 1) #XXX:? return self._invalid # get maximum value if axis is None and self.axes is not None: model = (lambda x: self.model(x, axis=i) for i in range(self.axes)) if self.samples is None: return tuple(c.ess_maximum(m) for m in model) # else use sampled support return tuple(c.sampled_maximum(m, self.samples, map=self.map) for m in model) # else, get maximum value for the given axis if axis is None: model = lambda x: self.model(x) else: model = lambda x: self.model(x, axis=axis) if self.samples is None: from mystic.math.measures import ess_maximum #TODO: c.ess_maximum return ess_maximum(model, c.positions, c.weights) return c.sampled_maximum(model, self.samples, map=self.map) class MinimumValue(BaseOUQ): def objective(self, rv, axis=None): """calculate minimum value of model, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) Returns: the minimum value for the specified axis NOTE: respects constraints on input parameters and product measure NOTE: for product_measure, use sampled_minimum if samples, else ess_minimum """ # check constraints c = product_measure().load(rv, self.npts) if not self.cvalid(c) or not self.xvalid(rv): if axis is None and self.axes is not None: return (self._invalid,) * (self.axes or 1) #XXX:? return self._invalid # get minimum value if axis is None and self.axes is not None: model = (lambda x: self.model(x, axis=i) for i in range(self.axes)) if self.samples is None: return tuple(c.ess_minimum(m) for m in model) # else use sampled support return tuple(c.sampled_minimum(m, self.samples, map=self.map) for m in model) # else, get minimum value for the given axis if axis is None: model = lambda x: self.model(x) else: model = lambda x: self.model(x, axis=axis) if self.samples is None: from mystic.math.measures import ess_minimum #TODO: c.ess_minimum return ess_minimum(model, c.positions, c.weights) return c.sampled_minimum(model, self.samples, map=self.map) class ValueAtRisk(BaseOUQ): def objective(self, rv, axis=None): """calculate value at risk of model, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) Returns: the value at risk for the specified axis NOTE: respects constraints on input parameters and product measure NOTE: for product_measure, use sampled_ptp if samples, else ess_ptp """ # check constraints c = product_measure().load(rv, self.npts) if not self.cvalid(c) or not self.xvalid(rv): if axis is None and self.axes is not None: return (self._invalid,) * (self.axes or 1) #XXX:? return self._invalid # get value at risk if axis is None and self.axes is not None: model = (lambda x: self.model(x, axis=i) for i in range(self.axes)) if self.samples is None: return tuple(c.ess_ptp(m) for m in model) # else use sampled support return tuple(c.sampled_ptp(m, self.samples, map=self.map) for m in model) # else, get value at risk for the given axis if axis is None: model = lambda x: self.model(x) else: model = lambda x: self.model(x, axis=axis) if self.samples is None: from mystic.math.measures import ess_ptp #TODO: c.ess_ptp return ess_ptp(model, c.positions, c.weights) return c.sampled_ptp(model, self.samples, map=self.map) class ProbOfFailure(BaseOUQ): def objective(self, rv, axis=None, iter=True): """calculate probability of failure for model, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) iter: bool, if True, calculate per axis, else calculate for all axes Returns: the probability of failure for the specified axis (or all axes) NOTE: respects constraints on input parameters and product measure model is a function returning a boolean (True for success) NOTE: for product_measure, use sampled_pof(model) if samples, else pof(model) """ # check constraints c = product_measure().load(rv, self.npts) if not self.cvalid(c) or not self.xvalid(rv): if axis is None and self.axes is not None: return (self._invalid,) * (self.axes or 1) #XXX:? return self._invalid # get probability of failure if iter and axis is None and self.axes is not None: model = (lambda x: self.model(x,axis=i) for i in range(self.axes)) if self.samples is None: return tuple(c.pof(m) for m in model) # else use sampled support return tuple(c.sampled_pof(m, self.samples, map=self.map) for m in model) # else, get probability of failure for the given axis if axis is None: model = lambda x: self.model(x) else: model = lambda x: self.model(x, axis=axis) if self.samples is None: return c.pof(model) return c.sampled_pof(model, self.samples, map=self.map) uqfoundation-mystic-9a49031/examples3/ouq_.py000066400000000000000000000040351455553066500212460ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ OUQ classes for calculating bounds on statistical quantities """ from mystic.math.discrete import product_measure from ouq import BaseOUQ class MeanValue(BaseOUQ): def objective(self, rv, axis=None, idx=0): #FIXME: idx != None, is fixed """calculate mean value of input, under uncertainty Input: rv: list of input parameters axis: int, the index of output to calculate (all, by default) idx: int, the index of input to calculate (all, by default) #FIXME Returns: the mean value for the specified index NOTE: respects constraints on input parameters and product measure NOTE: for product_measure, use sampled_expect if samples, else expect """ # check constraints c = product_measure().load(rv, self.npts) if not self.cvalid(c) or not self.xvalid(rv): #FIXME: set model,samples in constraints return self._invalid # get mean value if axis is None and self.axes is not None: model = (lambda x: self.model(x, axis=i) for i in range(self.axes)) if self.samples is None: return NotImplemented #FIXME: set model,samples in constraints # else use sampled support return NotImplemented #FIXME: set model,samples in constraints # else, get mean value for the given axis if axis is None: model = lambda x: self.model(x) else: model = lambda x: self.model(x, axis=axis) if self.samples is None: if idx is None: res = (c[i].mean for i in self.nx) return tuple(res) return c[idx].mean #FIXME: set model,samples in constraints return NotImplemented #FIXME: set model,samples in constraints uqfoundation-mystic-9a49031/examples3/ouq_models.py000066400000000000000000001174401455553066500224570ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE ''' model objects (and helper functions) to be used with OUQ classes ''' #FIXME: hardwired to multivalue function #FIXME: dict_archive('truth', cached=False) does not cache (is empty) #FIXME: option to cache w/o lookup (e.g. for model with randomness) def sample(model, bounds, pts=None, **kwds): """sample model within bounds, writing to an archive and returning data Inputs: model: a cached model function, of form y = model(x, axis=None) bounds: list of tuples of (lower,upper), bounds on each 'x' pts: int, number of points sampled by the sampler Additional Inputs: sampler: the mystic.sampler type [default: LatticeSampler] solver: the mystic.solver type [default: NelderMeadSimplexSolver] dist: a distribution type (or float amplitude) [default: None] map: map instance, to search for min/max in parallel [default: None] ny: int, number of model outputs, len(y) [default: None] axis: int, index of output on which to search [default: None] axmap: map instance, to execute each axis in parallel [default: None] archive: the archive (str name or archive instance) [default: None] Returns: the mystic.math.legacydata.dataset of sampled data NOTE: additional keywords (evalmon, stepmon, maxiter, maxfun, saveiter, state, termination, constraints, penalty, reducer) are available for use. See mystic.ensemble for more details. NOTE: dist can be used to add randomness to the sampler, and can accept a numpy distribution type such as numpy.random.normal, or a mystic distribution type built with mystic.math.Distribution. if dist=N, where N is an int or float, use normalized Gaussian noise, mystic.math.Distribution(numpy.random.normal, 0, sigma), where sigma is N * sum(bound) for each bound in the bounds, and N scales the amplitude of the noise (typically, N ~ 0.05). NOTE: if pts is a string (i.e. pts='4'), use solver-directed sampling. initial points are chosen by the sampler, then solvers run until converged. a LatticeSampler also accepts a list of pts, indicating the number of bins on each axis; again, if pts is a string (i.e. pts='[2,2,1]'), then use solver-directed sampling. if the string for pts begins with a '.', then only return the termini of the solver trajectories (i.e. pts='.4'). if the string begins with a '-' (i.e. pts='-4'), then only search for minima, or if the string begins with a '+', then only search for maxima. NOTE: if the model does not have an associated cached archive, sampling will create an archive used for the current sampling (and will not be attached to the model as a cached archive); a klepto.dir_archive will be created using the name of the model, unless an archive is otherwise specified using the archive keyword. """ from mystic.samplers import LatticeSampler searcher = kwds.pop('sampler', LatticeSampler) ax = getattr(model, '__axis__', None) axis = None if hasattr(ax, '__len__') else ax # get default for axis axis = kwds.pop('axis', axis) # allow override? ny = kwds.pop('ny', getattr(model, 'ny', None)) #XXX: best? mvl = ny is not None # True if multivalued axis = axis if mvl else None #XXX: allow multi-axis search? dist = kwds.pop('dist', None) if isinstance(dist, (int, float)): # noise N(0, sig); sig = dist*(ub+lb) import numpy as np from mystic.math import Distribution sig = [dist * (ub+lb) for (lb,ub) in bounds] #FIXME: allow None and inf dist = Distribution(np.random.normal, 0, sig) pmap = kwds.pop('map', None) axmap = kwds.pop('axmap', None) #NOTE: was _ThreadPool.map w/ join if pmap is None: pmap = map if axmap is None: axmap = map name = kwds.pop('archive', None) # allow override? (elif below) if not hasattr(model, '__cache__') or not hasattr(model, '__inverse__'): import mystic.cache as mc if name is None: name = getattr(model, '__name__', None) model = mc.cached(archive=name, multivalued=mvl)(model) elif name is not None: model = getattr(model, '__orig__', model) import mystic.cache as mc model = mc.cached(archive=name, multivalued=mvl)(model) cache = model.__cache__ imodel = model.__inverse__ from mystic.math.legacydata import dataset # specification of first-order and second-order solve, or sampling deriv = False traj = mins = maxs = True if isinstance(pts, str): # special case starting values if pts[0] == '-': # mins only maxs = False pts = pts[1:] elif pts[0] == '+': # maxs only mins = False pts = pts[1:] if pts[0] == '.': # termini only traj = False pts = pts[1:] # check for second-order search if ':' in pts: # include 2nd-order pts,deriv = pts.split(':', 1) # handle special cases if not deriv: deriv = None # 2 * pts # handle special cases if not pts: pts = None pts = [pts] if deriv is False else [pts,deriv] # convert to non-string for i,s in enumerate(pts): if s is None: # non-strings continue try: # strings of ints pts[i] = int(s) if pts[i] < 0: # negative solvers should error pts[i] = 'invalid value for number of solvers: %s' % s else: pts[i] *= -1 #NOTE: legacy: solver should be negative except ValueError: from string import ascii_letters # no letters or decimals if set(ascii_letters+'.').intersection(s): #XXX: screen more? pts[i]='invalid specification in number of solvers: %s' % s continue try: pts[i] = eval(s, {}, {}) import numpy as np if np.min(pts[i]) < 0: # must be a sequence or int pts[i] = 'invalid value in number of solvers: %s' % s else: pts[i][0] *= -1 #NOTE: legacy: solver should be negative except: pts[i]='invalid specification of number of solvers: %s' % s else: pts = [pts] #NOTE: by here, pts[i] is either an int, list, or None for i,pt in enumerate(pts): if isinstance(pt, str): raise ValueError(pt) if hasattr(pt, '__len__'): import numpy as np neg = np.min(pt) < 0 pt, _pt = np.prod(pt), [abs(p) for p in pt] if neg: pt = -abs(pt) else: _pt = None pts[i] = (pt,_pt) #NOTE: by here, pts[i] is a tuple of (int or None, list or None) if deriv is False: _deriv = False else: deriv, _deriv = pts[1] pts, _pts = pts[0] # handle special cases (i.e. the defaults) if pts is None: pts = -1 if deriv is None: deriv = pts*2 if deriv is not False: msg = '1st-order: %s and non-zero 2nd-order: %s' % (-pts, -deriv) raise NotImplementedError(msg) if pts == 0: # don't sample, just grab the archive if not traj: dset = dataset() # = [] elif pts > 0: # sample pts without optimizing pts = pts if _pts is None else _pts def doit(axis=None): _model = lambda x: model(x, axis=axis) s = searcher(bounds, _model, npts=pts, dist=dist, **kwds) s.sample() return s if mvl and axis is None: # as we don't optimize, we really don't need axis...? dset = [doit(axis=0)] else: dset = [doit(axis)] # build a dataset of the samples #FIXME: check format when ny != None if not traj: dset = dataset().load([list(i) for i in dset[0]._sampler._all_bestSolution], dset[0]._sampler._all_bestEnergy) else: # search for minima until terminated pts = -pts if _pts is None else _pts def lower(axis=None): _model = lambda x: model(x, axis=axis) s = searcher(bounds, _model, npts=pts, dist=dist, **kwds) s.sample_until(terminated=all) return s def upper(axis=None): model_ = lambda x: imodel(x, axis=axis) si = searcher(bounds, model_, npts=pts, dist=dist, **kwds) si.sample_until(terminated=all) return si def _apply(f, arg): return f(arg) # search for mins, maxs, or both if mins is False: fs = upper, elif maxs is False: fs = lower, else: fs = lower, upper def doit(axis=None): return list(pmap(_apply, fs, [axis]*len(fs))) from itertools import chain #NOTE: flattens a list of lists if mvl and axis is None: if ny: #XXX: is the format correct? (i.e. flattened list) dset = list(chain.from_iterable(axmap(doit, range(ny)))) else: #XXX: default to 0, warn, or error? dset = doit(axis=0) else: dset = doit(axis) # build a dataset of the termini #FIXME: check format when ny != None if not traj: if mins is False: dset = dataset().load( chain.from_iterable([[list(i) for i in s._sampler._all_bestSolution] for s in dset]), chain.from_iterable([[-i for i in s._sampler._all_bestEnergy] for s in dset]) ) elif maxs is False: dset = dataset().load( chain.from_iterable([[list(i) for i in s._sampler._all_bestSolution] for s in dset]), chain.from_iterable([s._sampler._all_bestEnergy for s in dset]) ) else: dset = dataset().load( chain.from_iterable([[list(i) for i in s._sampler._all_bestSolution] for s in dset[0::2]] + [[list(i) for i in s._sampler._all_bestSolution] for s in dset[1::2]]), chain.from_iterable([s._sampler._all_bestEnergy for s in dset[0::2]] + [[-i for i in s._sampler._all_bestEnergy] for s in dset[1::2]]) ) if not traj: return dset #TODO: check format (vs below) when ny != None import dataset as ds return ds.from_archive(cache(), axis=None) def _init_axis(model): """ensure axis is a keyword for the model Input: model: a function of the form y = model(x) Returns: a function of the form y = model(x, axis=None) """ from klepto import signature signature = signature(model)[0] if type(model) is OUQModel or 'axis' in signature: #XXX: check len? kwds? return model # add axis (as second argument) #XXX: better utilize signature? def dummy(x, axis=None, **kwds): #XXX: *args? "model of form, y = model(x, axis=None)" result = model(x, **kwds) if axis is None or not hasattr(result, '__len__'): return result return result[axis] # copy attributes dummy.__orig__ = model #XXX: better name, __wrap__ ? #dummy.__doc__ = model.__doc__ or "model of form, y = model(x, axis=None)" d = model.__dict__.items() dummy.__dict__.update((i,j) for (i,j) in d if i not in dummy.__dict__) return dummy class OUQModel(object): #NOTE: effectively, this is WrapModel def __init__(self, id=None, **kwds): #XXX: take 'map' now in sample(map)? """base class for models to be used with OUQ classes Input: id: string, unique id for model instance [default: ''] Additional Input: cached: bool, if True, use a mystic.cache [default: False] NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ #FIXME: allow cached to take archive (instance or possibly name) #HACK: ok=True enables __init__ to be called (for super-like usage) if not kwds.pop('ok', False) or not hasattr(self, '__name__'): msg = 'use a derived class (e.g. WrapModel)' raise NotImplementedError(msg) self.__init_name() #FIXME: make sure model has 'axis' kwd here cached = kwds.pop('cached', False) if cached is False: self.__kwds__['cached'] = False else: self.__kwds__['cached'] = cached self.__init_cache() if not hasattr(self, '__func__'): self.__init_func() return def __init_cache(self): """ensure model has a mystic.cache""" model = self.__model__ mvl = getattr(self, 'ny', getattr(model, 'ny', getattr(model, '__axis__', None))) is not None # True if multivalued archive = self.__kwds__.get('cached', True) name = getattr(model, '__name__', None) #XXX: do better? if not hasattr(model, '__cache__') or not hasattr(model, '__inverse__'): import mystic.cache as mc if archive is True: archive = name model = mc.cached(archive=archive, multivalued=mvl)(model) self.__model__ = model if name is not None: self.__model__.__name__ = name return def __init_name(self): """update name, potentially with UID""" if self.__name__ is None: self.__name__ = self.__model__.__name__ if self.__kwds__.pop('uid', False): import numpy as np self.__name__ += ('_%s' % np.random.randint(1e16)) self.__model__.__name__ = self.__name__ return def __init_func(self): """add a function interface and axis""" from mystic.math.interpolate import _to_function self.__func__ = _to_function(self.__model__, ndim=self.nx) if hasattr(self.__func__, '__axis__'): self.__axis__ = self.__func__.__axis__ else: if self.ny is None: # i.e. multivalued=False self.__axis__ = None else: def build_it(axis): func = self.__func__ return (lambda *x, **kwds: func(*x, axis=axis, **kwds)) self.__axis__ = [build_it(i) for i in range(self.ny)] self.__func__.__axis__ = self.__axis__ return def __call__(self, x, axis=None, **kwds): #FIXME: cache as with sample """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) """ return self.__model__(x, axis=axis, **kwds) #XXX: use self.bounds? def sample(self, bounds=None, pts=1, **kwds): """sample model within bounds, writing to an archive and returning data Inputs: bounds: list of tuples of (lower,upper), bounds on each 'x' pts: int, number of points sampled by the sampler Additional Inputs: sampler: the mystic.sampler type [default: LatticeSampler] solver: the mystic.solver type [default: NelderMeadSimplexSolver] dist: a distribution type (or float amplitude) [default: None] map: map instance, to search for min/max in parallel [default: None] axis: int, index of output on which to search [default: 0] axmap: map instance, to execute each axis in parallel [default: None] archive: the archive (str name or archive instance) [default: None] multivalued: bool, True if output is multivalued [default: False] Returns: the mystic.math.legacydata.dataset of sampled data NOTE: additional keywords (evalmon, stepmon, maxiter, maxfun, saveiter, state, termination, constraints, penalty, reducer) are available for use. See mystic.ensemble for more details. NOTE: dist can be used to add randomness to the sampler, and can accept a numpy distribution type such as numpy.random.normal, or a mystic distribution type built with mystic.math.Distribution. if dist=N, where N is an int or float, use normalized Gaussian noise, mystic.math.Distribution(numpy.random.normal, 0, sigma), where sigma is N * sum(bound) for each bound in the bounds, and N scales the amplitude of the noise (typically, N ~ 0.05). NOTE: if pts is a string (i.e. pts='4'), use solver-directed sampling. initial points are chosen by the sampler, then solvers run until converged. a LatticeSampler also accepts a list of pts, indicating the number of bins on each axis; again, if pts is a string (i.e. pts='[2,2,1]'), then use solver-directed sampling. if the string for pts begins with a '.', then only return the termini of the solver trajectories (i.e. pts='.4'). if the string begins with a '-' (i.e. pts='-4'), then only search for minima, or if the string begins with a '+', then only search for maxima. NOTE: if the model does not have an associated cached archive, sampling will create an archive used for the current sampling (and will not be attached to the model as a cached archive); a klepto.dir_archive will be created using the name of the model, unless an archive is otherwise specified using the archive keyword. """ model = self.__model__ ax = getattr(self, '__axis__', getattr(model, '__axis__', None)) axis = None if hasattr(ax, '__len__') else ax axis = kwds.pop('axis', axis) # allow override? ny = getattr(self, 'ny', getattr(model, 'ny', None)) mvl = getattr(self, 'ny', getattr(model, 'ny', ax)) is not None # True if multivalued mvl = kwds.pop('multivalued', mvl) # allow override? kwds['axis'] = axis if mvl else None #XXX: allow multiaxis search? kwds['ny'] = ny if mvl else None #FIXME: anything needed to modify/prepare if kwds['archive'] ???? return sample(model, bounds, pts=pts, **kwds) #XXX: np.sum, np.max ? def distance(self, data, axis=None, **kwds): """get graphical distance between function y=f(x) and a dataset Inputs: data: a mystic.math.legacydata.dataset of i points, M inputs, N outputs hausdorff: if True, use Hausdorff norm Additional Inputs: method: string for kind of interpolator maxpts: int, maximum number of points (x,z) to use from the monitor noise: float, amplitude of gaussian noise to remove duplicate x extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays axis: int in [0,N], index of z on which to interpolate (all, by default) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). NOTE: data and function may provide tuple-valued or single-valued output. Distance will be measured component-wise, resulting in a tuple of distances, unless an 'axis' is selected. If an axis is selected, then return distance for the selected component (i.e. axis) only. """ import dataset as ds return ds.distance(data, self.__func__, axis=axis, **kwds) class NoisyModel(OUQModel): def __init__(self, id=None, model=None, mu=0, sigma=1, seed='!', **kwds): """noisy model, with Gaussian noise on inputs and/or outputs Input: id: string, unique id for model instance [default: 'noisy'] model: a model function, of form y = model(x, axis=None) mu: input distribution mean value [default: 0] sigma: input distribution standard deviation [default: 1] seed: input random seed [default: '!', do not reseed the RNG] Additional Input: nx: int, number of model inputs, len(x) [default: None] ny: int, number of model outputs, len(y) [default: None] uid: bool, if True, append a random integer in [0, 1e16] to __name__ cached: bool, if True, use a mystic.cache [default: False] zmu: output distribution mean value [default: 0] zsigma: output distribution standard deviation [default: 0] zseed: outut random seed [default: '!', do not reseed the RNG] NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ # get state defined in model if model is None: msg = 'a callable model, y = model(x), is required' raise NotImplementedError(msg) model = _init_axis(model) #FIXME: class method? uid = kwds.pop('uid', False) cached = kwds.pop('cached', False) self.nx = kwds.pop('nx', None) #XXX: None or 1? self.ny = kwds.pop('ny', None) #XXX: None or 1? args = dict(mu=mu, sigma=sigma, seed=seed) kwds['mu'] = kwds.pop('zmu', 0) kwds['sigma'] = kwds.pop('zsigma', 0) kwds['seed'] = kwds.pop('zseed', '!') def noisy(x, axis=None): """a noisy model, with Gaussian noise on inputs and/or outputs""" from noisy import noisy return noisy(model(noisy(tuple(x), **args), axis), **kwds) self.__model__ = noisy self.__name__ = self.__model__.__name__ if id is None else id self.__model__.__name__ = self.__name__ kwd = self.__kwds__ = kwds.copy() self.__kwds__.update(args) def has_randomness(**kwds): if not bool(kwds.get('sigma', 1)) \ and not bool(kwds.get('zsigma', 0)): return False if isinstance(kwds.get('seed', '!'), int) \ and isinstance(kwds.get('zseed', '!'), int): return False return True self.rnd = has_randomness(**kwd) self.__kwds__['uid'] = uid #FIXME: ugly. this *must* be called *after* any subclass's init super(self.__class__, self).__init__(id, ok=True, cached=cached, **kwds) return def __call__(self, x, axis=None): """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) """ return self.__model__(x, axis=axis) class WrapModel(OUQModel): def __init__(self, id=None, model=None, **kwds): """a model object, to be used with OUQ classes Input: id: string, unique id for model instance [default: model.__name__] model: a model function, of form y = model(x, axis=None) Additional Input: nx: int, number of model inputs, len(x) [default: None] ny: int, number of model outputs, len(y) [default: None] rnd: bool, if False, treat the model as deterministic [default: True] uid: bool, if True, append a random integer in [0, 1e16] to __name__ cached: bool, if True, use a mystic.cache [default: False] NOTE: any additional keyword arguments will be passed to 'model' NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ # get state defined in model if model is None: msg = 'a callable model, y = model(x), is required' raise NotImplementedError(msg) model = _init_axis(model) #FIXME: class method? self.nx = kwds.pop('nx', getattr(model, 'nx', None)) self.ny = kwds.pop('ny', getattr(model, 'ny', None)) self.rnd = kwds.pop('rnd', getattr(model, 'rnd', True)) self.__model__ = model self.__name__ = self.__model__.__name__ if id is None else id self.__model__.__name__ = self.__name__ self.__kwds__ = kwds.copy() #FIXME: ugly. this *must* be called *after* any subclass's init super(self.__class__, self).__init__(id, ok=True, **kwds) return def __call__(self, x, axis=None): """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) """ kwds = self.__kwds__.copy() kwds.pop('cached', False) #XXX: don't pass cached to function return self.__model__(x, axis=axis, **kwds) class SuccessModel(OUQModel): def __init__(self, id=None, model=None, **kwds): """a model of success, where success is model(x) >= cutoff Input: id: string, unique id for model instance [default: 'success'] model: a model function, of form y = model(x, axis=None) Additional Input: nx: int, number of model inputs, len(x) [default: None] ny: int, number of model outputs, len(y) [default: None] rnd: bool, if False, treat the model as deterministic [default: True] uid: bool, if True, append a random integer in [0, 1e16] to __name__ cached: bool, if True, use a mystic.cache [default: False] cutoff: float, defines success, where success is model(x) >= cutoff NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ if model is None: msg = 'a callable model, y = model(x), is required' raise NotImplementedError(msg) model = _init_axis(model) #FIXME: class method? self.nx = kwds.pop('nx', getattr(model, 'nx', None)) self.ny = kwds.pop('ny', getattr(model, 'ny', None)) cutoff = kwds.get('cutoff', 0.0) self.rnd = kwds.get('rnd', getattr(model, 'rnd', True)) import numpy as np def success(x, axis=None): "a model of success, where success is model(x) >= cutoff" if axis is not None and hasattr(cutoff, '__len__'): return np.subtract(model(x, axis), cutoff[axis]) >= 0.0 return np.all(np.subtract(model(x, axis), cutoff) >= 0.0) self.__model__ = success self.__name__ = self.__model__.__name__ if id is None else id self.__model__.__name__ = self.__name__ self.__kwds__ = kwds.copy() self.__kwds__['model'] = model #FIXME: ugly. this *must* be called *after* any subclass's init super(self.__class__, self).__init__(id, ok=True, **kwds) return def __call__(self, x, axis=None): """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) """ return self.__model__(x, axis=axis) # interpolated model: # - interpolate G'(x) from data class InterpModel(OUQModel): def __init__(self, id=None, data=None, **kwds): """an interpolated model, generated from the given data Input: id: string, unique id for model instance [default: 'interp'] data: a mystic legacydata.dataset (or callable model, y = model(x)) Additional Input: nx: int, number of model inputs, len(x) [default: None] ny: int, number of model outputs, len(y) [default: None] rnd: bool, if False, treat the model as deterministic [default: True] uid: bool, if True, append a random integer in [0, 1e16] to __name__ cached: bool, if True, use a mystic.cache [default: False] NOTE: any additional keyword arguments will be passed to the interpolator NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ if data is None: msg = 'a mystic legacydata.dataset (or callable model) is required' raise NotImplementedError(msg) if callable(data): data = _init_axis(data) #FIXME: class method? self.nx = kwds.pop('nx', None) self.ny = kwds.pop('ny', None) #FIXME: should rnd check noise? self.rnd = kwds.pop('rnd', True) and (bool(kwds.get('noise', True)))# or callable(data) or isinstance(data, type(''))) self.__func__ = None def bootstrap(x, axis=None): "an interpolated model, generated from the given data" return self(x, axis=axis) self.__model__ = bootstrap self.__kwds__ = kwds.copy() self.__kwds__['data'] = data self.__name__ = 'interp' if id is None else id self.__model__.__name__ = self.__name__ #self.fit() #NOTE: commented: lazy interpf, uncommented: interpf now #FIXME: ugly. this *must* be called *after* any subclass's init super(self.__class__, self).__init__(id, ok=True, **kwds) return def fit(self, **kwds): """generate an interpolated model from data Input: data: a mystic legacydata.dataset (or callable model, y = model(x)) rnd: bool, if False, treat the model as deterministic [default: True] cached: bool, if True, use a mystic.cache [default: False] NOTE: any additional keyword arguments will be passed to the interpolator NOTE: if data is a model, interpolator will use model's cached archive NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ self.__kwds__.update(kwds) cached = self.__kwds__.pop('cached', False) archive = data = self.__kwds__.pop('data', None) self.rnd = self.__kwds__.pop('rnd', self.rnd) and (bool(self.__kwds__.get('noise', True)))# or callable(data) or isinstance(data, type(''))) if callable(data): #XXX: is a model, allow this? data = sample(data, bounds=None, pts=0) #XXX: axis? multivalue? elif isinstance(data, type('')): #XXX: is a name, allow this? import mystic.cache as mc import dataset as ds data = ds.from_archive(mc.archive.read(data)) x = getattr(data, 'coords', getattr(data, 'x', None)) z = getattr(data, 'values', getattr(data, 'y', None)) from interpolator import Interpolator terp = Interpolator(x, z, **self.__kwds__) self.__func__ = terp.Interpolate() #XXX: ValueError: zero-size self.__model__ = _init_axis(terp.model) self.__model__.__name__ = self.__name__ self.__kwds__['data'] = archive if cached is False: self.__kwds__['cached'] = False else: #FIXME: clear the archive??? generate new uid name? self.__kwds__['cached'] = cached self._OUQModel__init_cache() if hasattr(self.__model__, '__cache__'): c = self.__model__.__cache__() c.clear() return def __call__(self, x, axis=None): """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) NOTE: generates an interpolated model, if one does not exist (or rnd=True) """ if self.__func__ is None or self.rnd: self.fit() return self.__model__(x, axis=axis) # learned model: # - learn G'(x) from data class LearnedModel(OUQModel): def __init__(self, id=None, data=None, **kwds): """a learned model, trained on the given data Input: id: string, unique id for model instance [default: 'learn'] data: a mystic legacydata.dataset (or callable model, y = model(x)) Additional Input: nx: int, number of model inputs, len(x) [default: None] ny: int, number of model outputs, len(y) [default: None] rnd: bool, if False, treat the model as deterministic [default: True] uid: bool, if True, append a random integer in [0, 1e16] to __name__ cached: bool, if True, use a mystic.cache [default: False] NOTE: any additional keyword arguments will be passed to the estimator NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ if data is None: msg = 'a mystic legacydata.dataset (or callable model) is required' raise NotImplementedError(msg) if callable(data): data = _init_axis(data) #FIXME: class method? self.nx = kwds.pop('nx', None) self.ny = kwds.pop('ny', None) #FIXME: should rnd check noise? self.rnd = kwds.pop('rnd', True) and (bool(kwds.get('noise', False))) self.__func__ = None def bootstrap(x, axis=None): "a learned model, trained on the given data" return self(x, axis=axis) self.__model__ = bootstrap self.__kwds__ = kwds.copy() self.__kwds__['data'] = data self.__name__ = 'learn' if id is None else id self.__model__.__name__ = self.__name__ #self.fit() #NOTE: commented: lazy learning, uncommented: learn now #FIXME: ugly. this *must* be called *after* any subclass's init super(self.__class__, self).__init__(id, ok=True, **kwds) return def fit(self, **kwds): """generate a learned model, trained on the given data Input: data: a mystic legacydata.dataset (or callable model, y = model(x)) rnd: bool, if False, treat the model as deterministic [default: True] cached: bool, if True, use a mystic.cache [default: False] NOTE: any additional keyword arguments will be passed to the estimator NOTE: if data is a model, estimator will use model's cached archive NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ self.__kwds__.update(kwds) self.__kwds__.update(kwds) cached = self.__kwds__.pop('cached', False) archive = data = self.__kwds__.pop('data', None) self.rnd = self.__kwds__.pop('rnd', self.rnd) and (bool(self.__kwds__.get('noise', False))) if callable(data): #XXX: is a model, allow this? data = sample(data, bounds=None, pts=0) #XXX: axis? multivalue? elif isinstance(data, type('')): #XXX: is a name, allow this? import mystic.cache as mc import dataset as ds data = ds.from_archive(mc.archive.read(data)) x = getattr(data, 'coords', getattr(data, 'x', None)) z = getattr(data, 'values', getattr(data, 'y', None)) from estimator import Estimator estm = Estimator(x, z, **self.__kwds__) self.__func__ = estm.Train() #XXX: Error for zero-size? self.__model__ = _init_axis(estm.model) self.__model__.__name__ = self.__name__ self.__kwds__['data'] = archive if cached is False: self.__kwds__['cached'] = False else: #FIXME: clear the archive??? generate new uid name? self.__kwds__['cached'] = cached self._OUQModel__init_cache() if hasattr(self.__model__, '__cache__'): c = self.__model__.__cache__() c.clear() return def __call__(self, x, axis=None): """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) NOTE: generates a learned model, if one does not exist (or rnd=True) """ if self.__func__ is None or self.rnd: self.fit() return self.__model__(x, axis=axis) # workflow model: # - optimize G(d) -> G'(x) using graphical distance (and interp/learn model) # error model: # - define cost as |F(x) - G'(x)|, given 'model' and 'surrogate' class ErrorModel(OUQModel): def __init__(self, id=None, model=None, surrogate=None, **kwds): """an error model, with metric for distance from model to surrogate Input: id: string, unique id for model instance [default: 'learn'] model: a model function, of form y = model(x, axis=None) surrogate: a function, y' = surrogate(x, axis=None), approximates model Additional Input: nx: int, number of model inputs, len(x) [default: None] ny: int, number of model outputs, len(y) [default: None] rnd: bool, if False, treat the model as deterministic [default: True] uid: bool, if True, append a random integer in [0, 1e16] to __name__ cached: bool, if True, use a mystic.cache [default: False] metric: a function of form yerr = error(y, y') NOTE: the default metric is pointwise distance (y - y')**2 NOTE: if cached is True, the default is to create a klepto.dir_archive using the name of the model; alternately, an archive can be specified by passing an archive instance (or string name) to the cached keyword. """ if model is None or surrogate is None: msg = 'a callable model, and a callable surrogate, are required' raise NotImplementedError(msg) model = _init_axis(model) #FIXME: class method? surrogate = _init_axis(surrogate) #FIXME: class method? if not hasattr(model, 'distance'): model = WrapModel(model=model) nx = self.nx = kwds.pop('nx', getattr(model, 'nx', None)) ny = self.ny = kwds.pop('ny', getattr(model, 'ny', None)) if not hasattr(surrogate, 'distance'): surrogate = WrapModel(model=surrogate, nx=nx, ny=ny) self.rnd = kwds.pop('rnd', getattr(model, 'rnd', True)) self.rnd = self.rnd or getattr(surrogate, 'rnd', True) metric = kwds.get('metric', None) if metric is None: import numpy as np def metric(x, y): "pointwise distance, |x - y|**2, from x to y" z = (np.abs(np.array(x) - y)**2).tolist() return tuple(z) if hasattr(z, '__len__') else z def error(x, axis=None): "an error model, with metric for distance from model to surrogate" return metric(model(x, axis=axis), surrogate(x, axis=axis)) self.__model__ = error self.__name__ = self.__model__.__name__ if id is None else id self.__model__.__name__ = self.__name__ self.__kwds__ = kwds.copy() self.__kwds__.update(dict(model=model, surrogate=surrogate)) #FIXME: ugly. this *must* be called *after* any subclass's init super(self.__class__, self).__init__(id, ok=True, **kwds) return def __call__(self, x, axis=None): """evaluate model at x, for the given axis, where y = model(x) Input: x: list of input parameters, where len(x) is the number of inputs axis: int, index of output to evaluate (all, by default) """ return self.__model__(x, axis=axis) uqfoundation-mystic-9a49031/examples3/plotter.py000066400000000000000000000266051455553066500220030ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2018-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ plotter for data (x,z) and response surface function(*x) - initalize with x and z (and function) - interpolate if function is not provided - can downsample - plot data and response surface """ class Plotter(object): def __init__(self, x, z=None, function=None, **kwds): """scatter plotter for data (x,z) and response surface function(*x) Input: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) function: function f, where z=f(*x.T), or str (interpolation method) Additional Inputs: step: int, plot every 'step' points on the grid [default: 200] scale: float, scaling factor for the z-axis [default: False] shift: float, additive shift for the z-axis [default: False] density: int, density of wireframe for the plot surface [default: 9] axes: tuple, indicies of the x-axes to plot [default: ()] axis: int, index of the z-axis to plot, if multi-dim [default: 0] vals: list of values (one per axis) for unplotted axes [default: ()] maxpts: int, maximum number of (x,z) points to use [default: None] kernel: function transforming x to x', where x' = kernel(x) vtol: float, maximum distance outside bounds hypercube to plot data NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). """ self.x = getattr(x, '_x', x) # params (x) self.z = x._y if z is None else z # cost (f(x)) if function is None: function='linear' if type(function) is str: from mystic.math.interpolate import interpf #NOTE: axis may change function = interpf(self.x,self.z, method=function, arrays=True) #XXX: extrap, smooth, epsilon, norm? self.function = function #self.dim = kwds.pop('dim', None) #XXX: or len(x)? # interpolator configuration self.args = dict(step=200, scale=False, shift=False, vtol=None, \ kernel=None, density=9, axes=(), vals=(), maxpts=None, axis=0) self.args.update(kwds) self.maxpts = self.args.pop('maxpts') return def _downsample(self, maxpts=None, x=None, z=None): """downsample (x,z) to at most maxpts Input: maxpts: int, maximum number of points to use from (x,z) x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) Output: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) or (npts, N) """ if maxpts is None: maxpts = self.maxpts if x is None: x = self.x if z is None: z = self.z if len(x) != len(z): raise ValueError("the input array lengths must match exactly") if maxpts is not None and len(z) > maxpts: N = max(int(round(len(z)/float(maxpts))),1) # print("for speed, sampling {} down to {}".format(len(z),len(z)/N)) # ax.plot(x[:,0], x[:,1], z, 'ko', linewidth=2, markersize=4) x = x[::N] z = z[::N] # plt.show() # exit() return x, z def _max(self, **kwds): """get the x[i],z[i] corresponding to the max(z) if z is multi-valued, accepts int axis to return single-valued z """ import numpy as np mz = np.argmax(self.z, axis=0) x = np.asarray(self.x)[mz] z = np.asarray(self.z)[mz] zdim = len(z) if hasattr(z, '__len__') else 0 if zdim > 1: axis = kwds.get('axis', self.args['axis']) # default = None? z = z.diagonal() if axis is not None: return (x[axis], z[axis]) return (x,z) def _min(self, **kwds): """get the x[i],z[i] corresponding to the min(z) if z is multi-valued, accepts int axis to return single-valued z """ import numpy as np mz = np.argmin(self.z, axis=0) x = np.asarray(self.x)[mz] z = np.asarray(self.z)[mz] zdim = len(z) if hasattr(z, '__len__') else 0 if zdim > 1: axis = kwds.get('axis', self.args['axis']) # default = None? z = z.diagonal() if axis is not None: return (x[axis], z[axis]) return (x,z) def Plot(self, **kwds): """produce a scatterplot of (x,z) and the surface z = function(*x.T) Input: step: int, plot every 'step' points on the grid [default: 200] scale: float, scaling factor for the z-axis [default: False] shift: float, additive shift for the z-axis [default: False] density: int, density of wireframe for the plot surface [default: 9] axes: tuple, indicies of the x-axes to plot [default: ()] axis: int, index of the z-axis to plot, if multi-dim [default: 0] vals: list of values (one per axis) for unplotted axes [default: ()] maxpts: int, maximum number of (x,z) points to use [default: None] kernel: function transforming x to x', where x' = kernel(x) vtol: float, maximum distance outside bounds hypercube to plot data """ #XXX: vtol can also be a tuple of vtols for each parameter step = kwds['step'] if 'step' in kwds else self.args['step'] scale = kwds['scale'] if 'scale' in kwds else self.args['scale'] shift = kwds['shift'] if 'shift' in kwds else self.args['shift'] axes = kwds['axes'] if 'axes' in kwds else self.args['axes'] axis = kwds['axis'] if 'axis' in kwds else self.args['axis'] vals = kwds['vals'] if 'vals' in kwds else self.args['vals'] maxpts = kwds['maxpts'] if 'maxpts' in kwds else self.maxpts kernel = kwds['kernel'] if 'kernel' in kwds else self.args['kernel'] vtol = kwds['vtol'] if 'vtol' in kwds else self.args['vtol'] density = kwds['density'] if 'density' in kwds else self.args['density'] # plot response surface from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import cm import numpy as np from mystic.scripts import (_visual_filter as filtered, _parse_tol as parsetol) figure = plt.figure() kwds = {'projection':'3d'} ax = figure.axes[0] if figure.axes else plt.axes(**kwds) ax.autoscale(tight=True) zdim = len(self.z[0]) if hasattr(self.z[0], '__len__') else 0 if zdim == 0: pass elif type(axis) is not int and zdim != 1: msg = "axis should be an int in the range 0 to %s" % (zdim-1) raise ValueError(msg) x, z = self._downsample(maxpts) x = np.asarray(x) z = np.asarray(z) z = z[:,axis] if zdim > 1 else z # get two axes to plot, and indices of the remaining axes axes = axes[:2] #XXX: error if wrong size? ix = [i for i in range(len(x.T)) if i not in axes] n = 2-len(axes) axes, ix = list(axes)+ix[:n], ix[n:] # build list of fixed values (default mins), override with user input #fix = np.zeros(len(ix)) fix = enumerate(self._min()[0]) fix = np.array(tuple(j for (i,j) in fix if i not in axes)) fix[:len(vals)] = vals # build grid of points, one for each param, apply fixed values grid = np.ones((len(x.T),step,step)) grid[ix] = fix[:,None,None] # build sub-surface of function(x) to display, apply to the grid xy = x.T[axes] M = complex('{}j'.format(step)) grid[axes] = np.mgrid[xy[0].min():xy[0].max():M, xy[1].min():xy[1].max():M] # filter the plotted data points by the given vtol ixy = iter(xy) ifx = iter(fix) bounds = "" for i in range(max(axes + ix)+1): if i in axes: it = next(ixy) bounds += "%s:%s:%s" % (it.min(), it.max(), M) else: it = next(ifx) bounds += "%s" % it bounds += ", " bounds = bounds[:-2] del xy, fix, ix, ixy, ifx x, z = filtered(bounds, x, z, *parsetol(vtol, axes)) # evaluate the function on the sub-surface z_ = np.asarray(self.function(*grid)) #XXX: is orientiation correct? z_ = z_[axis] if zdim > 1 else z_ # scaling used by function plotter if scale: if shift: z_ = z_+shift z_ = np.log(4*z_*scale+1)+2 # apply transform #NOTE: should do this w/o fixing points first if hasattr(kernel, '__call__'): _grid = np.zeros_like(grid[:2]) for i in range(step): _grid.T[i] = [kernel(j)[:2] for j in grid.T[i]] #XXX: correct? grid = _grid ax0,ax1 = 0,1 else: ax0,ax1 = axes # plot surface d = max(11 - density, 1) x_ = grid[ax0] y_ = grid[ax1] ax.plot_wireframe(x_, y_, z_, rstride=d, cstride=d, alpha=.3) #ax.plot_surface(x_, y_, z_, rstride=d, cstride=d, cmap=cm.jet, linewidth=0, antialiased=False) # use the sampled values z_ = np.asarray(z) # scaling used by function plotter if scale: if shift: z_ = z_+shift z_ = np.log(4*z_*scale+1)+2 # apply transform if hasattr(kernel, '__call__'): x = np.array([kernel(j)[:2] for j in x]) # plot data points x_ = x.T[ax0] y_ = x.T[ax1] ax.plot(x_, y_, z_, 'ko', linewidth=2, markersize=4) plt.show() #XXX: show or don't show?... or return? def plot(monitor, function=None, **kwds): '''generic interface to Plotter, returning an Plotter instance Input: monitor: a mystic.monitor instance function: function f, where z=f(*x.T), or str (interpolation method) Additional Inputs: step: int, plot every 'step' points on the grid [default: 200] scale: float, scaling factor for the z-axis [default: False] shift: float, additive shift for the z-axis [default: False] density: int, density of wireframe for the plot surface [default: 9] axes: tuple, indicies of the x-axes to plot [default: ()] axis: int, index of the z-axis to plot, if multi-dim [default: 0] vals: list of values (one per axis) for unplotted axes [default: ()] maxpts: int, maximum number of (x,z) points to use [default: None] kernel: function transforming x to x', where x' = kernel(x) vtol: float, maximum distance outside bounds hypercube to plot data NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). ''' p = Plotter(monitor, function=function, **kwds) p.Plot() return p #XXX: return nothing? # EOF uqfoundation-mystic-9a49031/examples3/sampler_pandas.py000066400000000000000000000023011455553066500232660ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2021-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from ouq_models import WrapModel from mystic.models import rosen # generate a sampled dataset for the model model = WrapModel('rosen', rosen, cached=True) bounds = [(0,10),(0,10)] data = model.sample(bounds, pts='8') # plot the model and sampled data import mystic as my m = my.monitors.Monitor() m._x, m._y = data.coords, data.values b = '0:10, 0:10' my.model_plotter(rosen, m, depth=True, bounds=b, dots=True, join=False) # read the archive of sampled data import mystic.cache as mc a = mc.archive.read('rosen') print(a.archive.state) # convert archive to a dataframe import klepto as kl p = kl.archives._to_frame(a) print(p.head()) # plot the data import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.axes[0] if fig.axes else plt.axes(projection='3d') p.reset_index(inplace=True) p.columns = 'x','y','rosen' ax.scatter(p['x'], p['y'], p['rosen']) plt.show() uqfoundation-mystic-9a49031/examples3/spec3D.py000066400000000000000000000214451455553066500214300ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2 from mystic.monitors import VerboseMonitor, Monitor from mystic.termination import ChangeOverGeneration as COG from mystic.bounds import Bounds, MeasureBounds # kwds for solver opts = dict(termination=COG(1e-6, 40), CrossProbability=0.9, ScalingFactor=0.9) param = dict(solver=DifferentialEvolutionSolver2, npop=10, #XXX:npop maxiter=1000, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # don't use SetNested map=None, # don't use SetMapper stepmon=VerboseMonitor(1, label='output'), # monitor config #evalmon=Monitor(), # monitor config (re-initialized in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive # lower and upper bound for parameters and weights xlb = (20.0,0.0,2.1) xub = (150.0,30.0,2.8) wlb = (0,1,1) wub = (1,1,1) # number of Dirac masses to use for each parameter npts = (2,1,1) #NOTE: rv = (w0,w0,x0,x0,w1,x1,w2,x2) index = (5,) #NOTE: rv[5] -> x1 # moments and uncertainty in first parameter a_ave = None a_var = None a_ave_err = None a_var_err = None # moments and uncertainty in second parameter b_ave = None b_var = None b_ave_err = None b_var_err = None # moments and uncertainty in output o_ave = 6.5 o_var = None o_ave_err = 1.0 o_var_err = None def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def unflatten(npts): 'convert a "flattened" constraint to a moment constraint' def dec(f): def func(c): return product_measure().load(f(c.flatten()), npts) return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func #NOTE: model has single-value output def constrain_expected(model, ave=None, var=None, ave_err=None, var_err=None, bounds=None, **kwds): 'impose mean and variance constraints on the measure' if ave is None: ave = float('nan') if var is None: var = float('nan'); kwds['k'] = 0 if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 if 'npop' not in kwds: kwds['npop'] = 20 #XXX: better default? if isinstance(bounds, Bounds): bounds = (bounds.xlower,bounds.xupper) samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k return c else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k #FIXME: Ns=samples return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func #NOTE: model has single-value output def constrained_out(model, ave=None, var=None, ave_err=None, var_err=None, debug=False, **kwds): 'check the expected output is properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec # build a model representing 'truth' from ouq_models import WrapModel from surrogate import marc_surr as toy; nx = 3; ny = None; Ns = None nargs = dict(nx=nx, ny=ny, rnd=(True if Ns else False)) model = WrapModel('model', toy, **nargs) # set the bounds bnd = MeasureBounds(xlb, xub, n=npts, wlb=wlb, wub=wub) ## moment-based constraints ## normcon = normalize_moments() ###momcons = constrain_moments(a_ave, a_var, a_ave_err, a_var_err) ###is_cons = constrained(a_ave, a_var, a_ave_err, a_var_err) #momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) #momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) #is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) #is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) #is_cons = lambda c: bool(additive(is_con0)(is_con1)(c)) #momcons = constrain_expected(model, o_ave, o_var, o_ave_err, o_var_err, bnd, constraints=normcon) momcons = constrain_expected(model, o_ave, o_var, o_ave_err, o_var_err, bnd) is_cons = constrained_out(model, o_ave, o_var, o_ave_err, o_var_err) ## index-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) #scons = outer(integer_indices)(flatten(npts)(outer(momcons)(normcon))) #scons = flatten(npts)(outer(momcon1)(outer(momcon0)(normcon))) scons = flatten(npts)(outer(momcons)(normcon)) #scons = flatten(npts)(momcons) # impose constraints concurrently (slower, but safer) #ccons = and_(flatten(npts)(normcon), flatten(npts)(momcons), integer_indices) #ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1)) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcons)) #ccons = scons # check parameters (instead of measures) iscon = check(npts)(is_cons) #rvcon = constrained_integers(index) uqfoundation-mystic-9a49031/examples3/spec5D.py000066400000000000000000000214171455553066500214310ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @uqfoundation) # Copyright (c) 2020-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ misc user-defined items (solver configuration, moment constraints) """ from mystic.solvers import DifferentialEvolutionSolver2 from mystic.monitors import VerboseMonitor, Monitor from mystic.termination import ChangeOverGeneration as COG from mystic.bounds import Bounds, MeasureBounds # kwds for solver opts = dict(termination=COG(1e-10, 100)) param = dict(solver=DifferentialEvolutionSolver2, npop=80, #XXX:npop maxiter=1500, maxfun=1e+6, x0=None, # use RandomInitialPoints nested=None, # don't use SetNested map=None, # don't use SetMapper stepmon=VerboseMonitor(1, label='output'), # monitor config #evalmon=Monitor(), # monitor config (re-initialized in solve) # kwds to pass directly to Solve(objective, **opt) opts=opts, ) from mystic.math.discrete import product_measure from mystic.math import almostEqual as almost from mystic.constraints import and_, integers from mystic.coupler import outer, additive # lower and upper bound for parameters and weights xlb = (0,1,0,0,0) xub = (1,10,10,10,10) wlb = (0,1,1,1,1) wub = (1,1,1,1,1) # number of Dirac masses to use for each parameter npts = (2,1,1,1,1) #NOTE: rv = (w0,w0,x0,x0,w1,x1,w2,x2,w3,x3,w4,x4) index = (5,) #NOTE: rv[5] -> x1 # moments and uncertainty in first parameter a_ave = None a_var = None a_ave_err = None a_var_err = None # moments and uncertainty in second parameter b_ave = None b_var = None b_ave_err = None b_var_err = None # moments and uncertainty in output o_ave = 11.0 o_var = None o_ave_err = 1.0 o_var_err = None def flatten(npts): 'convert a moment constraint to a "flattened" constraint' def dec(f): def func(rv): c = product_measure().load(rv, npts) c = f(c) return c.flatten() return func return dec def unflatten(npts): 'convert a "flattened" constraint to a moment constraint' def dec(f): def func(c): return product_measure().load(f(c.flatten()), npts) return func return dec def normalize_moments(mass=1.0, tol=1e-18, rel=1e-7): 'normalize (using weights) on all measures' def func(c): for measure in c: if not almost(float(measure.mass), mass, tol=tol, rel=rel): measure.normalize() return c return func def constrain_moments(ave=None, var=None, ave_err=None, var_err=None, idx=0): 'impose mean and variance constraints on the selected measure' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): c[idx].mean = ave E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): c[idx].var = var return c return func #NOTE: model has single-value output def constrain_expected(model, ave=None, var=None, ave_err=None, var_err=None, bounds=None, **kwds): 'impose mean and variance constraints on the measure' if ave is None: ave = float('nan') if var is None: var = float('nan'); kwds['k'] = 0 if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 if 'npop' not in kwds: kwds['npop'] = 200 #XXX: better default? if isinstance(bounds, Bounds): bounds = (bounds.xlower,bounds.xupper) samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k return c else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): c.set_expect_mean_and_var((ave,var), model, bounds, tol=(ave_err,var_err), **kwds) #NOTE: debug, maxiter, k #FIXME: Ns=samples return c return func @integers(ints=float, index=index) def integer_indices(rv): 'constrain parameters at given index(es) to be ints' return rv def constrained_integers(index=()): 'check integer constraint is properly applied' def func(rv): return all(int(j) == j for i,j in enumerate(rv) if i in index) return func def constrained(ave=None, var=None, ave_err=None, var_err=None, idx=0, debug=False): 'check mean and variance on the selected measure are properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 def func(c): E = float(c[idx].mean) if E > (ave + ave_err) or E < (ave - ave_err): if debug: print("skipping mean: %s" % E) return False E = float(c[idx].var) if E > (var + var_err) or E < (var - var_err): if debug: print("skipping var: %s" % E) return False return True return func #NOTE: model has single-value output def constrained_out(model, ave=None, var=None, ave_err=None, var_err=None, debug=False, **kwds): 'check the expected output is properly constrained' if ave is None: ave = float('nan') if var is None: var = float('nan') if ave_err is None: ave_err = 0 if var_err is None: var_err = 0 samples = None #kwds.pop('samples', None) #NOTE: int or None if samples is None: def func(c): E = float(c.expect(model)) Ev = float(c.expect_var(model)) if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True else: def func(c): E = float(c.sampled_expect(model, samples)) #TODO: map Ev = float(c.sampled_variance(model, samples)) #TODO: map if E > (ave + ave_err) or E < (ave - ave_err) or \ Ev > (var + var_err) or Ev < (var - var_err): if debug: print("skipping expected value,var: %s, %s" % (E,Ev)) return False return True return func def check(npts): 'convert a moment check to a "flattened" check' def dec(f): def func(rv): c = product_measure().load(rv, npts) return f(c) return func return dec # build a model representing 'truth' from ouq_models import WrapModel from toys import function5 as toy; nx = 5; ny = None; Ns = None nargs = dict(nx=nx, ny=ny, rnd=(True if Ns else False)) model = WrapModel('model', toy, **nargs) # set the bounds bnd = MeasureBounds(xlb, xub, n=npts, wlb=wlb, wub=wub) ## moment-based constraints ## normcon = normalize_moments() ###momcons = constrain_moments(a_ave, a_var, a_ave_err, a_var_err) ###is_cons = constrained(a_ave, a_var, a_ave_err, a_var_err) #momcon0 = constrain_moments(a_ave, a_var, a_ave_err, a_var_err, idx=0) #momcon1 = constrain_moments(b_ave, b_var, b_ave_err, b_var_err, idx=1) #is_con0 = constrained(a_ave, a_var, a_ave_err, a_var_err, idx=0) #is_con1 = constrained(b_ave, b_var, b_ave_err, b_var_err, idx=1) #is_cons = lambda c: bool(additive(is_con0)(is_con1)(c)) #momcons = constrain_expected(model, o_ave, o_var, o_ave_err, o_var_err, bnd, constraints=normcon) momcons = constrain_expected(model, o_ave, o_var, o_ave_err, o_var_err, bnd) is_cons = constrained_out(model, o_ave, o_var, o_ave_err, o_var_err) ## index-based constraints ## # impose constraints sequentially (faster, but assumes are decoupled) #scons = outer(integer_indices)(flatten(npts)(outer(momcons)(normcon))) #scons = flatten(npts)(outer(momcon1)(outer(momcon0)(normcon))) scons = flatten(npts)(outer(momcons)(normcon)) #scons = flatten(npts)(momcons) # impose constraints concurrently (slower, but safer) #ccons = and_(flatten(npts)(normcon), flatten(npts)(momcons), integer_indices) #ccons = and_(flatten(npts)(normcon), flatten(npts)(momcon0), flatten(npts)(momcon1)) ccons = and_(flatten(npts)(normcon), flatten(npts)(momcons)) #ccons = scons # check parameters (instead of measures) iscon = check(npts)(is_cons) #rvcon = constrained_integers(index) uqfoundation-mystic-9a49031/examples3/surface.py000066400000000000000000000327451455553066500217440ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2010-2016 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """ an interpolator - initalize with objective f(x) (and 'Sampler' object) - can attach a monitor and/or archiver - can sample points (using the Sampler) - can downsample and/or add noise - interpolates with "interp.interp" - converts f(*x) <-> f(x) - plot data and interpolated surface """ class Surface(object): #FIXME: should be subclass of Interpolator (?) #surface has: # args - interpolation configuration (smooth, function, ...) # sampler - a search algorithm # maxpts - a maximum number of sampling points # noise - a noise coefficient # dim - dimensionality of the model # function - target function [F(*x)] # objective - target function [F(x)] # surrogate - interpolated function [F(*x)] # model - interpolated function [F(x)] # x,y,z - sampled points(*) # #surface (or sampler) has: # _minmon,_maxmon - step monitor(*) # _minarch,_maxarch - sampled point archives(*) # #surface can: # Sample - populate sampled point archive with solver trajectories # Interpolate - build interpolated function from sampled points # Plot - plot sampled points and interpolated surface # #surface (or sampler) can: # UseMonitor - track trajectories with a monitor(s) # UseArchive - track sampled points in an archive(s) # _max - fetch (x,y,z,model(x,y)) for maximal z of sampled points # _min - fetch (x,y,z,model(x,y)) for minimal z of sampled points def __init__(self, objective, sampler=None, **kwds): """response surface interpolator, where data is sampled from objective Input: objective: function of the form z=f(x) sampler: mystic.search.Searcher instance Additional Inputs: maxpts: int, maximum number of points to use from (x,z) noise: float, amplitude of gaussian noise to remove duplicate x method: string for kind of interpolator dim: number of parameters in the input for the objective function filter: a data filter produced with mystic.filters.generate_filter penalty: mystic.penalty instance of the form y' = k*p(x) constraints: mystic.constraints instance of the form x' = c(x) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). """ # sampler configuration from mystic.search import Searcher self.sampler = Searcher() if sampler is None else sampler self.maxpts = kwds.pop('maxpts', None) # N = 1000 self.noise = kwds.pop('noise', 1e-8) self.filter = kwds.pop('filter', None) self.penalty = kwds.pop('penalty', None) self.constraints = kwds.pop('constraints', None) # monitor, archive, and trajectories self._minmon = self._maxmon = None #XXX: better default? self._minarch = self._maxarch = None #XXX: better default? self.x = None # params (x) self.z = None # cost (objective(x)) # point generator(s) and interpolated model(s) #XXX: better names? self.dim = kwds.pop('dim', None) #XXX: should be (or set) len(x) self.objective = objective # original F(x) self.surrogate = None # interpolated F(*x) # interpolator configuration self.args = {}#dict(smooth=0, function='thin_plate') self.args.update(kwds) return # XXX: useful? # def _invert_model: # takes model and returns inverted_model (maxmodel or invmodel?) # def _invert_trajectories: # takes (xyz) trajectories and returns inverted trajectories (xy-z) def UseMonitor(self, min=None, max=None): """track parameter trajectories with a monitor(s) Input: min: monitor instance to track minima; if True, use a new Monitor max: monitor instance to track maxima; if True, use a new Monitor Output: None """ from mystic.monitors import Monitor if type(min) is bool: self._minmon = Monitor() if min else None elif min is not None: self._minmon = min if type(max) is bool: self._maxmon = Monitor() if max else None elif max is not None: self._maxmon = max return def UseArchive(self, min=None, max=None): """track sampled points in an archive(s) Input: min: archive instance to store minima; if True, use a new archive max: archive instance to store maxima; if True, use a new archive Output: None """ from klepto.archives import dict_archive as d if type(min) is bool: self._minarch = d(cached=False) if min else None elif min is not None: self._minarch = min if type(max) is bool: self._maxarch = d(cached=False) if max else None elif max is not None: self._maxarch = max return """ def doit(self, bounds, stop, step=200, scale=False, shift=False, density=9, axes=(), vals=(), maxpts=maxpts, **kwds): if not self.sampler.traj: self.sampler.UseTrajectories() # get trajectories self.Sample(bounds, stop) # get interpolated function self.Interpolate(**kwds) # check extrema #XXX: put _min,_max in Interpolate? (downsampled) f = lambda x,z: (z,surface.surrogate(*x)) print("min: {}; min@f: {}".format(*f(*surface._min()))) print("max: {}; max@f: {}".format(*f(*urfacef._max()))) # plot surface self.Plot(step=step, scale=scale, shift=shift, density=density, axes=axes, vals=vals, maxpts=maxpts) return """ def Sample(self, bounds, stop, clear=False, verbose=False, all=False, **kwds): """sample data (x,z) using objective function z=f(x) Input: bounds: tuple of floats (min,max), bounds on the search region stop: termination condition clear: if True, clear the archive of stored points verbose: if True, print a summary of search/sampling results all: if True, use solver EvalMonitor, else use StepMonitor filter: a data filter produced with mystic.filters.generate_filter penalty: mystic.penalty instance of the form y' = k*p(x) constraints: mystic.constraints instance of the form x' = c(x) Output: x: an array of shape (npts, dim) or (npts,) z: an array of shape (npts,) """ #XXX: does the strategy of finding min/max always apply? import numpy as np penalty = kwds.get('penalty', self.penalty) constraints = kwds.get('constraints', self.constraints) kwargs = dict(stop=stop, penalty=penalty, constraints=constraints) # get model (for minima) model = self.objective self.dim = len(bounds) ### get mins ### monitor = self._minmon archive = None if clear else self._minarch inverse = False if all: #FIXME: better define role/use of Reset/Archive/clear... self.sampler.Reset(None, inv=inverse) # reset the sampler self.sampler.archive = archive self.sampler.Search(model, bounds, evalmon=monitor, **kwargs) else: self.sampler.Reset(archive, inv=inverse) # reset the sampler self.sampler.Search(model, bounds, monitor=monitor, **kwargs) if verbose: self.sampler._summarize() # read trajectories from log (or monitor) xyz = self.sampler.Samples(all=all) if clear: self.sampler.Reset() # reset the sampler ### end mins ### # invert model (for maxima) imodel = lambda *args, **kwds: -model(*args, **kwds) if penalty is not None: # also invert penalty kwargs['penalty'] = lambda *args, **kwds: -penalty(*args, **kwds) ### get maxs ### monitor = self._maxmon archive = None if clear else self._maxarch inverse = True if all: #FIXME: better define role/use of Reset/Archive/clear... self.sampler.Reset(None, inv=inverse) # reset the sampler self.sampler.archive = archive self.sampler.Search(imodel, bounds, evalmon=monitor, **kwargs) else: self.sampler.Reset(archive, inv=inverse) # reset the sampler self.sampler.Search(imodel, bounds, monitor=monitor, **kwargs) if verbose: self.sampler._summarize() xyz = np.hstack((xyz, self.sampler.Samples(all=all))) if clear: self.sampler.Reset() # reset the sampler ### end maxs ### # split into params and cost self.x = xyz.T[:,:-1] self.z = xyz.T[:,-1] # apply any filter, and return filter = kwds.pop('filter', self.filter) if filter: #XXX: better here, or in Interpolate??? self.x, self.z = filter(self.x, self.z) return self.x, self.z def Interpolate(self, **kwds): #XXX: refactor so use self.interpolator ? """interpolate data (x,z) to generate response function z=f(*x) Input: maxpts: int, maximum number of points to use from (x,z) noise: float, amplitude of gaussian noise to remove duplicate x method: string for kind of interpolator extrap: if True, extrapolate a bounding box (can reduce # of nans) arrays: if True, return a numpy array; otherwise don't return arrays Output: interpolated response function, where z=f(*x.T) NOTE: if scipy is not installed, will use np.interp for 1D (non-rbf), or mystic's rbf otherwise. default method is 'nearest' for 1D and 'linear' otherwise. method can be one of ('rbf','linear', 'nearest','cubic','inverse','gaussian','quintic','thin_plate'). """ from interpolator import Interpolator args = self.args.copy() args.update(kwds) maxpts, noise = self.maxpts, self.noise ii = Interpolator(self.x, self.z, maxpts=maxpts, noise=noise, **args) self.surrogate = ii.Interpolate(**args) # build the surrogate self.surrogate.__doc__ = self.objective.__doc__ return self.surrogate def _max(self): #XXX: remove? """get the x[i],z[i] corresponding to the max(z) """ import numpy as np mz = np.argmax(self.z) return self.x[mz], self.z[mz] def _min(self): #XXX: remove? """get the x[i],z[i] corresponding to the min(z) """ import numpy as np mz = np.argmin(self.z) return self.x[mz], self.z[mz] def Plot(self, **kwds): """produce a scatterplot of (x,z) and the surface z = function(*x.T) Input: step: int, plot every 'step' points on the grid [default: 200] scale: float, scaling factor for the z-axis [default: False] shift: float, additive shift for the z-axis [default: False] density: int, density of wireframe for the plot surface [default: 9] axes: tuple, indicies of the axes to plot [default: ()] vals: list of values (one per axis) for unplotted axes [default: ()] maxpts: int, maximum number of (x,z) points to use [default: None] kernel: function transforming x to x', where x' = kernel(x) vtol: float, maximum distance outside bounds hypercube to plot data """ # get interpolted function fx = self.surrogate # plot interpolated surface from plotter import Plotter p = Plotter(self.x, self.z, fx, **kwds) p.Plot() # if plotter interpolated the function, get the function self.surrogate = fx or p.function def __set_function(self, function): #XXX: deal w/ selector (2D)? ExtraArgs? # convert to 'model' format (i.e. takes a parameter vector) from mystic.math.interpolate import _to_objective _objective = _to_objective(function) def objective(x, *args, **kwds): result = _objective(x, *args, **kwds) return result.tolist() if hasattr(result, 'tolist') else result self.objective = objective self.objective.__doc__ = function.__doc__ return def __function(self): #XXX: deal w/ selector (2D)? ExtraArgs? _to_function # convert model to 'args' format (i.e. takes positional args) from mystic.math.interpolate import _to_function function = _to_function(self.objective, ndim=self.dim) function.__doc__ = self.objective.__doc__ return function def __model(self): #XXX: deal w/ selector (2D)? ExtraArgs? _to_objective # convert to 'model' format (i.e. takes a parameter vector) if self.surrogate is None: return None from mystic.math.interpolate import _to_objective _objective = _to_objective(self.surrogate) def objective(x, *args, **kwds): result = _objective(x, *args, **kwds) return result.tolist() if hasattr(result, 'tolist') else result objective.__doc__ = self.objective.__doc__ return objective # interface function = property(__function, __set_function ) model = property(__model ) # EOF uqfoundation-mystic-9a49031/examples3/surrogate.py000066400000000000000000000043041455553066500223150ustar00rootroot00000000000000#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2009-2015 California Institute of Technology. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE """Original matlab code: function A=marc_surr(x) h=x(1)*25.4*10^(-3); a=x(2)*pi/180; v=x(3); Ho=0.5794; s=1.4004; n=0.4482; K=10.3963; p=0.4757; u=1.0275; m=0.4682; Dp=1.778; v_bl=Ho*(h/(cos(a))^(n))^s; if v